From 91483ec8d7bf9f7fb2bd97874a3f3d6ca75b2b61 Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Wed, 23 Sep 2026 13:02:31 -0700 Subject: [PATCH] Document and prepare npm package --- .github/FUNDING.yml | 1 + .gitignore | 1 + README.md | 94 ++++++++++++++++++ .../{index-DSvdNgV5.js => index-DqA94Wnd.js} | 2 +- demo/index.html | 2 +- docs/ui.png | Bin 0 -> 37253 bytes octopus-file-browser.d.ts | 58 +++++++++++ package-lock.json | 11 +- package.json | 16 ++- 9 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 README.md rename demo/assets/{index-DSvdNgV5.js => index-DqA94Wnd.js} (86%) create mode 100644 docs/ui.png create mode 100644 octopus-file-browser.d.ts diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..6977678 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: multipleof4 diff --git a/.gitignore b/.gitignore index 746087d..c08df40 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ dist/ node_modules/ *.log +.npmrc diff --git a/README.md b/README.md new file mode 100644 index 0000000..23678c0 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +

+ Octopus File Browser logo +

+ +# octopus-file-browser + +A responsive, framework-free file browser inspired by Gitea. It ships as an accessible Web Component with Material Icon Theme icons and no runtime dependencies. + +![Octopus File Browser interface](docs/ui.png) + +## Install + +```sh +npm install octopus-file-browser +``` + +## Use + +```html + + + +``` + +Importing the package registers ``. Directories navigate automatically; selecting a file emits `octopus:open`. + +## Entry data + +| Field | Type | Description | +| --- | --- | --- | +| `name` | `string` | Displayed filename. | +| `type` | `"file" \| "directory"` | Entry kind. | +| `size` | `number` | File size in bytes. | +| `modified` | `Date \| string \| number` | Modified time. | +| `children` | `OctopusEntry[]` | Directory contents. | +| `icon` | `string` | Optional custom icon URL. | + +Directories are sorted before files. Names use natural, case-insensitive sorting. + +## API + +| API | Description | +| --- | --- | +| `browser.entries` | Gets or replaces the root entry array and returns to root. | +| `browser.path` | Current directory path as a new array. | +| `browser.navigate(path)` | Navigates to a directory path, for example `['src', 'assets']`. | +| `empty-label` | Attribute controlling the empty-directory message. | +| `octopus:open` | Event with `{ entry, path }` when a file is selected. | +| `octopus:navigate` | Event with `{ entries, path }` after navigation. | + +The package also exports `OctopusFileBrowser`, `createOctopusFileBrowser`, `sortEntries`, `formatFileSize`, `formatRelativeDate`, `isRecent`, and `fileKindLabel`. Type declarations are included. + +## Theme + +Set CSS custom properties on the element: + +```css +octopus-file-browser { + --ofb-border: #d0d7de; + --ofb-text: #181c21; + --ofb-muted: #57606a; + --ofb-link: #1f2328; + --ofb-hover: #f6f8fa; + --ofb-focus: #0969da; + --ofb-recent: #d15700; +} +``` + +## Repository outputs + +- `dist/` contains the publishable ESM and UMD/CJS library builds. +- `demo/` is the static demo and can be used as a Cloudflare Pages output directory. +- `npm run check` runs tests and rebuilds both outputs. + +See [LICENSE](LICENSE) and [THIRD_PARTY_NOTICES](THIRD_PARTY_NOTICES). diff --git a/demo/assets/index-DSvdNgV5.js b/demo/assets/index-DqA94Wnd.js similarity index 86% rename from demo/assets/index-DSvdNgV5.js rename to demo/assets/index-DqA94Wnd.js index 679a27d..9ff5f05 100644 --- a/demo/assets/index-DSvdNgV5.js +++ b/demo/assets/index-DqA94Wnd.js @@ -1 +1 @@ -(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`:host{--ofb-border:#d0d7de;--ofb-text:#181c21;--ofb-muted:#57606a;--ofb-link:#1f2328;--ofb-folder:#54aeff;--ofb-hover:#f6f8fa;--ofb-focus:#0969da;--ofb-recent:#d15700;color:var(--ofb-text);min-width:0;font:14px/20px -apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif;display:block}*{box-sizing:border-box}.list{border:1px solid var(--ofb-border);border-radius:5px;margin:0;padding:0;list-style:none;overflow:hidden}.entry{appearance:none;border:0;border-top:1px solid var(--ofb-border);color:inherit;cursor:pointer;font:inherit;text-align:left;background:#fff;grid-template-columns:minmax(0,1fr) 120px;width:100%;min-height:37px;margin:0;padding:0;display:grid}li:first-child .entry{border-top:0}.entry:hover{background:var(--ofb-hover)}.entry:active{background:#eef1f4}.entry:focus-visible{box-shadow:inset 0 0 0 2px var(--ofb-focus);outline:0}.cell{align-items:center;min-width:0;padding:8px 10px;display:flex}.name{gap:8px}.icon{object-fit:contain;flex:none;width:18px;height:18px}.label,.modified{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.label{color:var(--ofb-link);min-width:0}.size{color:var(--ofb-muted);white-space:nowrap;flex:none;margin-left:8px;font-size:12px}.modified{color:var(--ofb-muted)}.modified.recent{color:var(--ofb-recent)}.modified{justify-content:flex-end}.empty{color:var(--ofb-muted);text-align:center;margin:0;padding:24px}@media (width<=640px){.entry{grid-template-columns:minmax(0,1fr) 104px;min-height:44px}.cell{padding:10px 8px}.name{gap:7px}.icon{width:17px;height:17px}}@media (prefers-reduced-motion:no-preference){.entry{transition:background-color 80ms}}`,t=[`B`,`KB`,`MB`,`GB`,`TB`];function n(e=[]){return[...e].sort((e,t)=>Number(t.type===`directory`)-Number(e.type===`directory`)||e.name.localeCompare(t.name,void 0,{numeric:!0,sensitivity:`base`}))}function r(e){if(!Number.isFinite(e)||e<0)return`—`;if(!e)return`0 B`;let n=Math.min(Math.floor(Math.log(e)/Math.log(1024)),t.length-1),r=e/1024**n;return`${r.toFixed(n&&r<10?1:0)} ${t[n]}`}function i(e,t=Date.now()){let n=new Date(e);if(Number.isNaN(n.getTime()))return`—`;let r=n.getTime()-t,i=Math.abs(r),a=i<36e5?[`minute`,6e4]:i<864e5?[`hour`,36e5]:i<6048e5?[`day`,864e5]:i<2592e6?[`week`,6048e5]:i<31536e6?[`month`,2592e6]:[`year`,31536e6];return new Intl.RelativeTimeFormat(void 0,{numeric:`auto`}).format(Math.round(r/a[1]),a[0])}function a(e,t=Date.now()){let n=new Date(e).getTime(),r=t-n;return Number.isFinite(n)&&r>=0&&r<2592e6}function o(e=``){let t=e.toLowerCase();if(t===`license`||t.startsWith(`license.`))return`License`;if(t===`third_party_notices`)return`Notices`;if(t.startsWith(`.git`))return`Git`;let n=t.includes(`.`)?t.split(`.`).pop():``;return{css:`CSS`,html:`HTML`,js:`JavaScript`,json:`JSON`,md:`Markdown`,png:`Image`,svg:`SVG`,yml:`YAML`,yaml:`YAML`,ts:`TypeScript`}[n]||(n?n.toUpperCase():`File`)}var s=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%237e57c2'%20d='M20%2018h-2v-2h-2v2c0%20.193%200%20.703%201.254%201.033A3.345%203.345%200%200%201%2020%2022h2v2h2v-2c0-.388-.562-.851-1.254-1.034C20.356%2020.34%2020%2018.84%2020%2018m-3.254%202.966C14.356%2020.34%2014%2018.84%2014%2018h-2v-2h-2v8h2v-2h4v2h2v-2c0-.388-.562-.851-1.254-1.034'/%3e%3cpath%20fill='%237e57c2'%20d='M24%204H4v20a4%204%200%200%200%204%204h16.16A3.84%203.84%200%200%200%2028%2024.16V8a4%204%200%200%200-4-4m2%2014h-2v-2h-2v2c0%20.193%200%20.703%201.254%201.033A3.345%203.345%200%200%201%2026%2022v2a2%202%200%200%201-2%202h-2a2%202%200%200%201-2-2%202%202%200%200%201-2%202h-2a2%202%200%200%201-2-2%202%202%200%200%201-2%202h-2a2%202%200%200%201-2-2v-8a2%202%200%200%201%202-2h2a2%202%200%200%201%202%202%202%202%200%200%201%202-2h2a2%202%200%200%201%202%202%202%202%200%200%201%202-2h2a2%202%200%200%201%202%202Z'/%3e%3c/svg%3e`,c=`data:image/svg+xml,%3csvg%20viewBox='0%200%2016%2016'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m6.922%203.768-.644-.536A1%201%200%200%200%205.638%203H2a1%201%200%200%200-1%201v8a1%201%200%200%200%201%201h12a1%201%200%200%200%201-1V5a1%201%200%200%200-1-1H7.562a1%201%200%200%201-.64-.232'%20fill='%2390a4ae'%20/%3e%3c/svg%3e`,l=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23e64a19'%20d='M13.172%202.828%2011.78%204.22l1.91%201.91%202%202A2.986%202.986%200%200%201%2020%2010.81a3.25%203.25%200%200%201-.31%201.31l2.06%202a2.68%202.68%200%200%201%203.37.57%202.86%202.86%200%200%201%20.88%202.117%203.02%203.02%200%200%201-.856%202.109A2.9%202.9%200%200%201%2023%2019.81a2.93%202.93%200%200%201-2.13-.87%202.694%202.694%200%200%201-.56-3.38l-2-2.06a3%203%200%200%201-.31.12V20a3%203%200%200%201%201.44%201.09%202.92%202.92%200%200%201%20.56%201.72%202.88%202.88%200%200%201-.878%202.128%202.98%202.98%200%200%201-2.048.871%202.981%202.981%200%200%201-2.514-4.719A3%203%200%200%201%2016%2020v-6.38a2.96%202.96%200%200%201-1.44-1.09%202.9%202.9%200%200%201-.56-1.72%202.9%202.9%200%200%201%20.31-1.31l-3.9-3.9-7.579%207.572a4%204%200%200%200-.001%205.658l10.342%2010.342a4%204%200%200%200%205.656%200l10.344-10.344a4%204%200%200%200%200-5.656L18.828%202.828a4%204%200%200%200-5.656%200'/%3e%3c/svg%3e`,u=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23e65100'%20d='m4%204%202%2022%2010%202%2010-2%202-22Zm19.72%207H11.28l.29%203h11.86l-.802%209.335L15.99%2025l-6.635-1.646L8.93%2019h3.02l.19%202%203.86.77%203.84-.77.29-4H8.84L8%208h16Z'/%3e%3c/svg%3e`,d=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%2326a69a'%20d='M8.5%206h4l-4-4zM3.875%201H9.5l4%204v8.6c0%20.773-.616%201.4-1.375%201.4h-8.25c-.76%200-1.375-.627-1.375-1.4V2.4c0-.777.612-1.4%201.375-1.4M4%2013.6h8V8l-2.625%202.8L8%209.4zm1.25-7.7c-.76%200-1.375.627-1.375%201.4s.616%201.4%201.375%201.4c.76%200%201.375-.627%201.375-1.4S6.009%205.9%205.25%205.9'/%3e%3c/svg%3e`,f=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%23ffca28'%20d='M2%202v12h12V2zm6%206h1v4a1.003%201.003%200%200%201-1%201H7a1.003%201.003%200%200%201-1-1v-1h1v1h1zm3%200h2v1h-2v1h1a1.003%201.003%200%200%201%201%201v1a1.003%201.003%200%200%201-1%201h-2v-1h2v-1h-1a1.003%201.003%200%200%201-1-1V9a1.003%201.003%200%200%201%201-1'/%3e%3c/svg%3e`,p=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%20-960%20960%20960'%3e%3cpath%20fill='%23f9a825'%20d='M560-160v-80h120q17%200%2028.5-11.5T720-280v-80q0-38%2022-69t58-44v-14q-36-13-58-44t-22-69v-80q0-17-11.5-28.5T680-720H560v-80h120q50%200%2085%2035t35%2085v80q0%2017%2011.5%2028.5T840-560h40v160h-40q-17%200-28.5%2011.5T800-360v80q0%2050-35%2085t-85%2035zm-280%200q-50%200-85-35t-35-85v-80q0-17-11.5-28.5T120-400H80v-160h40q17%200%2028.5-11.5T160-600v-80q0-50%2035-85t85-35h120v80H280q-17%200-28.5%2011.5T240-680v80q0%2038-22%2069t-58%2044v14q36%2013%2058%2044t22%2069v80q0%2017%2011.5%2028.5T280-240h120v80z'/%3e%3c/svg%3e`,m=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%23ff5722'%20d='M8%201a5.5%205.5%200%200%200-4%209.26V15l4-1.5%204%201.5v-4.74A5.49%205.49%200%200%200%208%201m0%201.5a4%204%200%201%201%200%208%204%204%200%200%201%200-8m0%202a2%202%200%201%200%200%204%202%202%200%200%200%200-4'/%3e%3c/svg%3e`,h=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%2342a5f5'%20d='m14%2010-4%203.5L6%2010H4v12h4v-6l2%202%202-2v6h4V10zm12%206v-6h-4v6h-4l6%208%206-8z'/%3e%3c/svg%3e`,g=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23e53935'%20d='M4%204v24h24V4Zm20%2020h-4V12h-4v12H8V8h16Z'/%3e%3c/svg%3e`,_=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23ffb300'%20d='M29.168%2014.03a2.7%202.7%200%200%200-1.968-.83%202.51%202.51%200%200%200-1.929.8h-4.443l3.078-3.078a2.835%202.835%200%200%200%202.857-2.842%202.6%202.6%200%200%200-.831-1.969%202.82%202.82%200%200%200-2.014-.788%202.67%202.67%200%200%200-1.968.788%202.36%202.36%200%200%200-.812%201.922L18%2011.17V6.726a2.51%202.51%200%200%200%20.8-1.929%202.7%202.7%200%200%200-.832-1.968%202.745%202.745%200%200%200-3.936%200%202.7%202.7%200%200%200-.832%201.968%202.51%202.51%200%200%200%20.8%201.93v4.443l-3.138-3.138a2.36%202.36%200%200%200-.812-1.922%202.66%202.66%200%200%200-1.968-.788%202.83%202.83%200%200%200-2.014.788%202.6%202.6%200%200%200-.831%201.969%202.74%202.74%200%200%200%20.831%202.013%202.8%202.8%200%200%200%202.026.829l3.078%203.078H6.729a2.51%202.51%200%200%200-1.929-.8%202.7%202.7%200%200%200-1.968.831%202.745%202.745%200%200%200%200%203.937%202.7%202.7%200%200%200%201.968.832%202.51%202.51%200%200%200%201.929-.8h4.443l-3.078%203.077a2.835%202.835%200%200%200-2.857%202.842%202.6%202.6%200%200%200%20.831%201.969%202.82%202.82%200%200%200%202.014.788%202.67%202.67%200%200%200%201.968-.788%202.36%202.36%200%200%200%20.812-1.922L14%2020.827v4.444a2.51%202.51%200%200%200-.8%201.929%202.784%202.784%200%200%200%204.768%201.968A2.7%202.7%200%200%200%2018.8%2027.2a2.51%202.51%200%200%200-.8-1.929v-4.444l3.138%203.138a2.36%202.36%200%200%200%20.812%201.922%202.66%202.66%200%200%200%201.968.788%202.83%202.83%200%200%200%202.014-.788%202.6%202.6%200%200%200%20.831-1.969%202.74%202.74%200%200%200-.831-2.013%202.8%202.8%200%200%200-2.026-.829L20.828%2018h4.443a2.51%202.51%200%200%200%201.93.8%202.784%202.784%200%200%200%201.967-4.769Z'/%3e%3c/svg%3e`,v=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%230288d1'%20d='M2%202v12h12V2zm4%206h3v1H8v4H7V9H6zm5%200h2v1h-2v1h1a1.003%201.003%200%200%201%201%201v1a1.003%201.003%200%200%201-1%201h-2v-1h2v-1h-1a1.003%201.003%200%200%201-1-1V9a1.003%201.003%200%200%201%201-1'/%3e%3c/svg%3e`,y=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23a0f'%20d='M29.313%2012h-6.664a1.427%201.427%200%200%201-1.1-2.24l4.398-6.676A.703.703%200%200%200%2025.397%202H8.428a.62.62%200%200%200-.55.289l-5.77%208.627A.703.703%200%200%200%202.658%2012h8.175a1.427%201.427%200%200%201%201.099%202.24l-4.48%206.676A.702.702%200%200%200%208%2022l6.695.002A1.34%201.34%200%200%201%2016%2023.375v5.934a.652.652%200%200%200%201.168.433l12.694-16.586a.725.725%200%200%200-.55-1.156'/%3e%3c/svg%3e`,b=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='%23ff5252'%20d='M13%209h5.5L13%203.5zM6%202h8l6%206v12c0%201.1-.9%202-2%202H6c-1.1%200-2-.9-2-2V4c0-1.1.9-2%202-2m12%2016v-2H9v2zm-4-4v-2H6v2z'/%3e%3c/svg%3e`,x={css:s,htm:u,html:u,jpeg:d,jpg:d,js:f,json:p,md:h,mjs:f,png:d,svg:_,ts:v,yaml:b,yml:b};function S(e){if(e.icon)return e.icon;if(e.type===`directory`)return c;let t=e.name.toLowerCase();return t===`license`||t.startsWith(`license.`)?m:t===`package.json`||t===`package-lock.json`?g:t.startsWith(`vite.config.`)?y:t.startsWith(`.git`)?l:x[t.split(`.`).pop()]||`data:image/svg+xml,%3csvg%20viewBox='0%200%2016%2016'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m8.668%206h3.6641l-3.6641-3.668v3.668m-4.668-4.668h5.332l4%204v8c0%200.73828-0.59375%201.3359-1.332%201.3359h-8c-0.73828%200-1.332-0.59766-1.332-1.3359v-10.664c0-0.74219%200.59375-1.3359%201.332-1.3359m3.332%201.3359h-3.332v10.664h8v-6h-4.668z'%20fill='%2390a4ae'%20/%3e%3c/svg%3e`}var C=globalThis.HTMLElement||class{};function w(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n!==void 0&&(r.textContent=n),r}var T=class extends C{#e=[];#t=[];static get observedAttributes(){return[`empty-label`]}constructor(){super(),this.attachShadow({mode:`open`})}connectedCallback(){this.#o()}attributeChangedCallback(){this.isConnected&&this.#o()}set entries(e){this.#e=Array.isArray(e)?e:[],this.#t=[],this.#o()}get entries(){return this.#e}get path(){return[...this.#t]}navigate(e=[]){let t=this.#e,n=[];for(let r of e){let e=t.find(e=>e.type===`directory`&&e.name===r);if(!e)break;n.push(r),t=e.children||[]}this.#t=n,this.#o(),this.#r(`octopus:navigate`,{path:this.path,entries:this.#n()})}#n(){return this.#t.reduce((e,t)=>e.find(e=>e.type===`directory`&&e.name===t)?.children||[],this.#e)}#r(e,t){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}#i(e){if(e.parent)return this.navigate(this.#t.slice(0,-1));if(e.type===`directory`)return this.navigate([...this.#t,e.name]);this.#r(`octopus:open`,{entry:e,path:[...this.#t,e.name]})}#a(e){let t=w(`li`),n=w(`button`,`entry`);n.type=`button`,n.title=e.parent?`Parent folder`:e.name,n.setAttribute(`aria-label`,e.parent?`Parent folder`:`${e.name}, ${e.type===`directory`?`folder`:o(e.name)}`),n.addEventListener(`click`,()=>this.#i(e));let s=w(`span`,`cell name`),c=w(`img`,`icon`);c.alt=``,c.src=S(e),s.append(c,w(`span`,`label`,e.name)),e.type!==`directory`&&s.append(w(`span`,`size`,r(e.size)));let l=w(`span`,`cell modified`,e.modified?i(e.modified):``);return e.modified&&(l.title=new Date(e.modified).toLocaleString(),a(e.modified)&&l.classList.add(`recent`)),n.append(s,l),t.append(n),t}#o(){if(!this.shadowRoot||typeof document>`u`)return;let t=w(`style`);t.textContent=e;let r=w(`ul`,`list`);r.setAttribute(`aria-label`,`Files`);let i=n(this.#n());this.#t.length&&r.append(this.#a({name:`..`,type:`directory`,parent:!0})),i.length?i.forEach(e=>r.append(this.#a(e))):r.append(w(`li`,`empty`,this.getAttribute(`empty-label`)||`This folder is empty.`)),this.shadowRoot.replaceChildren(t,r)}};globalThis.customElements&&!customElements.get(`octopus-file-browser`)&&customElements.define(`octopus-file-browser`,T);var E=[{name:`.gitignore`,type:`file`,modified:`2026-09-23T17:05:01.924Z`,size:26},{name:`AGENTS.md`,type:`file`,modified:`2026-09-23T18:32:40.331Z`,size:105},{name:`docs`,type:`directory`,modified:`2026-09-23T16:30:08.419Z`,children:[{name:`ofb.png`,type:`file`,modified:`2026-09-23T16:30:08.419Z`,size:907351},{name:`README.md`,type:`file`,modified:`2026-09-23T16:30:08.416Z`,size:14}]},{name:`index.html`,type:`file`,modified:`2026-09-23T17:30:19.971Z`,size:446},{name:`package-lock.json`,type:`file`,modified:`2026-09-23T17:02:24.555Z`,size:26336},{name:`package.json`,type:`file`,modified:`2026-09-23T17:30:19.966Z`,size:986},{name:`src`,type:`directory`,modified:`2026-09-23T17:01:59.151Z`,children:[{name:`demo.css`,type:`file`,modified:`2026-09-23T17:30:19.989Z`,size:298},{name:`demo.js`,type:`file`,modified:`2026-09-23T17:30:19.993Z`,size:198},{name:`file-browser-utils.js`,type:`file`,modified:`2026-09-23T17:30:19.978Z`,size:2101},{name:`icon-resolver.js`,type:`file`,modified:`2026-09-23T17:01:59.141Z`,size:1499},{name:`octopus-file-browser.css`,type:`file`,modified:`2026-09-23T17:30:35.003Z`,size:2076},{name:`octopus-file-browser.js`,type:`file`,modified:`2026-09-23T17:30:35.010Z`,size:4324}]},{name:`test`,type:`directory`,modified:`2026-09-23T17:01:59.162Z`,children:[{name:`file-browser-utils.test.js`,type:`file`,modified:`2026-09-23T17:30:20.005Z`,size:1558}]},{name:`THIRD_PARTY_NOTICES`,type:`file`,modified:`2026-09-23T17:05:01.941Z`,size:3905},{name:`vite.config.js`,type:`file`,modified:`2026-09-23T17:30:19.997Z`,size:1069},{name:`vite.lib.config.js`,type:`file`,modified:`2026-09-23T17:30:20.000Z`,size:407}],D=document.querySelector(`octopus-file-browser`);D.entries=E; \ No newline at end of file +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`:host{--ofb-border:#d0d7de;--ofb-text:#181c21;--ofb-muted:#57606a;--ofb-link:#1f2328;--ofb-folder:#54aeff;--ofb-hover:#f6f8fa;--ofb-focus:#0969da;--ofb-recent:#d15700;color:var(--ofb-text);min-width:0;font:14px/20px -apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif;display:block}*{box-sizing:border-box}.list{border:1px solid var(--ofb-border);border-radius:5px;margin:0;padding:0;list-style:none;overflow:hidden}.entry{appearance:none;border:0;border-top:1px solid var(--ofb-border);color:inherit;cursor:pointer;font:inherit;text-align:left;background:#fff;grid-template-columns:minmax(0,1fr) 120px;width:100%;min-height:37px;margin:0;padding:0;display:grid}li:first-child .entry{border-top:0}.entry:hover{background:var(--ofb-hover)}.entry:active{background:#eef1f4}.entry:focus-visible{box-shadow:inset 0 0 0 2px var(--ofb-focus);outline:0}.cell{align-items:center;min-width:0;padding:8px 10px;display:flex}.name{gap:8px}.icon{object-fit:contain;flex:none;width:18px;height:18px}.label,.modified{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.label{color:var(--ofb-link);min-width:0}.size{color:var(--ofb-muted);white-space:nowrap;flex:none;margin-left:8px;font-size:12px}.modified{color:var(--ofb-muted)}.modified.recent{color:var(--ofb-recent)}.modified{justify-content:flex-end}.empty{color:var(--ofb-muted);text-align:center;margin:0;padding:24px}@media (width<=640px){.entry{grid-template-columns:minmax(0,1fr) 104px;min-height:44px}.cell{padding:10px 8px}.name{gap:7px}.icon{width:17px;height:17px}}@media (prefers-reduced-motion:no-preference){.entry{transition:background-color 80ms}}`,t=[`B`,`KB`,`MB`,`GB`,`TB`];function n(e=[]){return[...e].sort((e,t)=>Number(t.type===`directory`)-Number(e.type===`directory`)||e.name.localeCompare(t.name,void 0,{numeric:!0,sensitivity:`base`}))}function r(e){if(!Number.isFinite(e)||e<0)return`—`;if(!e)return`0 B`;let n=Math.min(Math.floor(Math.log(e)/Math.log(1024)),t.length-1),r=e/1024**n;return`${r.toFixed(n&&r<10?1:0)} ${t[n]}`}function i(e,t=Date.now()){let n=new Date(e);if(Number.isNaN(n.getTime()))return`—`;let r=n.getTime()-t,i=Math.abs(r),a=i<36e5?[`minute`,6e4]:i<864e5?[`hour`,36e5]:i<6048e5?[`day`,864e5]:i<2592e6?[`week`,6048e5]:i<31536e6?[`month`,2592e6]:[`year`,31536e6];return new Intl.RelativeTimeFormat(void 0,{numeric:`auto`}).format(Math.round(r/a[1]),a[0])}function a(e,t=Date.now()){let n=new Date(e).getTime(),r=t-n;return Number.isFinite(n)&&r>=0&&r<2592e6}function o(e=``){let t=e.toLowerCase();if(t===`license`||t.startsWith(`license.`))return`License`;if(t===`third_party_notices`)return`Notices`;if(t.startsWith(`.git`))return`Git`;let n=t.includes(`.`)?t.split(`.`).pop():``;return{css:`CSS`,html:`HTML`,js:`JavaScript`,json:`JSON`,md:`Markdown`,png:`Image`,svg:`SVG`,yml:`YAML`,yaml:`YAML`,ts:`TypeScript`}[n]||(n?n.toUpperCase():`File`)}var s=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%237e57c2'%20d='M20%2018h-2v-2h-2v2c0%20.193%200%20.703%201.254%201.033A3.345%203.345%200%200%201%2020%2022h2v2h2v-2c0-.388-.562-.851-1.254-1.034C20.356%2020.34%2020%2018.84%2020%2018m-3.254%202.966C14.356%2020.34%2014%2018.84%2014%2018h-2v-2h-2v8h2v-2h4v2h2v-2c0-.388-.562-.851-1.254-1.034'/%3e%3cpath%20fill='%237e57c2'%20d='M24%204H4v20a4%204%200%200%200%204%204h16.16A3.84%203.84%200%200%200%2028%2024.16V8a4%204%200%200%200-4-4m2%2014h-2v-2h-2v2c0%20.193%200%20.703%201.254%201.033A3.345%203.345%200%200%201%2026%2022v2a2%202%200%200%201-2%202h-2a2%202%200%200%201-2-2%202%202%200%200%201-2%202h-2a2%202%200%200%201-2-2%202%202%200%200%201-2%202h-2a2%202%200%200%201-2-2v-8a2%202%200%200%201%202-2h2a2%202%200%200%201%202%202%202%202%200%200%201%202-2h2a2%202%200%200%201%202%202%202%202%200%200%201%202-2h2a2%202%200%200%201%202%202Z'/%3e%3c/svg%3e`,c=`data:image/svg+xml,%3csvg%20viewBox='0%200%2016%2016'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m6.922%203.768-.644-.536A1%201%200%200%200%205.638%203H2a1%201%200%200%200-1%201v8a1%201%200%200%200%201%201h12a1%201%200%200%200%201-1V5a1%201%200%200%200-1-1H7.562a1%201%200%200%201-.64-.232'%20fill='%2390a4ae'%20/%3e%3c/svg%3e`,l=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23e64a19'%20d='M13.172%202.828%2011.78%204.22l1.91%201.91%202%202A2.986%202.986%200%200%201%2020%2010.81a3.25%203.25%200%200%201-.31%201.31l2.06%202a2.68%202.68%200%200%201%203.37.57%202.86%202.86%200%200%201%20.88%202.117%203.02%203.02%200%200%201-.856%202.109A2.9%202.9%200%200%201%2023%2019.81a2.93%202.93%200%200%201-2.13-.87%202.694%202.694%200%200%201-.56-3.38l-2-2.06a3%203%200%200%201-.31.12V20a3%203%200%200%201%201.44%201.09%202.92%202.92%200%200%201%20.56%201.72%202.88%202.88%200%200%201-.878%202.128%202.98%202.98%200%200%201-2.048.871%202.981%202.981%200%200%201-2.514-4.719A3%203%200%200%201%2016%2020v-6.38a2.96%202.96%200%200%201-1.44-1.09%202.9%202.9%200%200%201-.56-1.72%202.9%202.9%200%200%201%20.31-1.31l-3.9-3.9-7.579%207.572a4%204%200%200%200-.001%205.658l10.342%2010.342a4%204%200%200%200%205.656%200l10.344-10.344a4%204%200%200%200%200-5.656L18.828%202.828a4%204%200%200%200-5.656%200'/%3e%3c/svg%3e`,u=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23e65100'%20d='m4%204%202%2022%2010%202%2010-2%202-22Zm19.72%207H11.28l.29%203h11.86l-.802%209.335L15.99%2025l-6.635-1.646L8.93%2019h3.02l.19%202%203.86.77%203.84-.77.29-4H8.84L8%208h16Z'/%3e%3c/svg%3e`,d=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%2326a69a'%20d='M8.5%206h4l-4-4zM3.875%201H9.5l4%204v8.6c0%20.773-.616%201.4-1.375%201.4h-8.25c-.76%200-1.375-.627-1.375-1.4V2.4c0-.777.612-1.4%201.375-1.4M4%2013.6h8V8l-2.625%202.8L8%209.4zm1.25-7.7c-.76%200-1.375.627-1.375%201.4s.616%201.4%201.375%201.4c.76%200%201.375-.627%201.375-1.4S6.009%205.9%205.25%205.9'/%3e%3c/svg%3e`,f=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%23ffca28'%20d='M2%202v12h12V2zm6%206h1v4a1.003%201.003%200%200%201-1%201H7a1.003%201.003%200%200%201-1-1v-1h1v1h1zm3%200h2v1h-2v1h1a1.003%201.003%200%200%201%201%201v1a1.003%201.003%200%200%201-1%201h-2v-1h2v-1h-1a1.003%201.003%200%200%201-1-1V9a1.003%201.003%200%200%201%201-1'/%3e%3c/svg%3e`,p=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%20-960%20960%20960'%3e%3cpath%20fill='%23f9a825'%20d='M560-160v-80h120q17%200%2028.5-11.5T720-280v-80q0-38%2022-69t58-44v-14q-36-13-58-44t-22-69v-80q0-17-11.5-28.5T680-720H560v-80h120q50%200%2085%2035t35%2085v80q0%2017%2011.5%2028.5T840-560h40v160h-40q-17%200-28.5%2011.5T800-360v80q0%2050-35%2085t-85%2035zm-280%200q-50%200-85-35t-35-85v-80q0-17-11.5-28.5T120-400H80v-160h40q17%200%2028.5-11.5T160-600v-80q0-50%2035-85t85-35h120v80H280q-17%200-28.5%2011.5T240-680v80q0%2038-22%2069t-58%2044v14q36%2013%2058%2044t22%2069v80q0%2017%2011.5%2028.5T280-240h120v80z'/%3e%3c/svg%3e`,m=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%23ff5722'%20d='M8%201a5.5%205.5%200%200%200-4%209.26V15l4-1.5%204%201.5v-4.74A5.49%205.49%200%200%200%208%201m0%201.5a4%204%200%201%201%200%208%204%204%200%200%201%200-8m0%202a2%202%200%201%200%200%204%202%202%200%200%200%200-4'/%3e%3c/svg%3e`,h=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%2342a5f5'%20d='m14%2010-4%203.5L6%2010H4v12h4v-6l2%202%202-2v6h4V10zm12%206v-6h-4v6h-4l6%208%206-8z'/%3e%3c/svg%3e`,g=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23e53935'%20d='M4%204v24h24V4Zm20%2020h-4V12h-4v12H8V8h16Z'/%3e%3c/svg%3e`,_=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23ffb300'%20d='M29.168%2014.03a2.7%202.7%200%200%200-1.968-.83%202.51%202.51%200%200%200-1.929.8h-4.443l3.078-3.078a2.835%202.835%200%200%200%202.857-2.842%202.6%202.6%200%200%200-.831-1.969%202.82%202.82%200%200%200-2.014-.788%202.67%202.67%200%200%200-1.968.788%202.36%202.36%200%200%200-.812%201.922L18%2011.17V6.726a2.51%202.51%200%200%200%20.8-1.929%202.7%202.7%200%200%200-.832-1.968%202.745%202.745%200%200%200-3.936%200%202.7%202.7%200%200%200-.832%201.968%202.51%202.51%200%200%200%20.8%201.93v4.443l-3.138-3.138a2.36%202.36%200%200%200-.812-1.922%202.66%202.66%200%200%200-1.968-.788%202.83%202.83%200%200%200-2.014.788%202.6%202.6%200%200%200-.831%201.969%202.74%202.74%200%200%200%20.831%202.013%202.8%202.8%200%200%200%202.026.829l3.078%203.078H6.729a2.51%202.51%200%200%200-1.929-.8%202.7%202.7%200%200%200-1.968.831%202.745%202.745%200%200%200%200%203.937%202.7%202.7%200%200%200%201.968.832%202.51%202.51%200%200%200%201.929-.8h4.443l-3.078%203.077a2.835%202.835%200%200%200-2.857%202.842%202.6%202.6%200%200%200%20.831%201.969%202.82%202.82%200%200%200%202.014.788%202.67%202.67%200%200%200%201.968-.788%202.36%202.36%200%200%200%20.812-1.922L14%2020.827v4.444a2.51%202.51%200%200%200-.8%201.929%202.784%202.784%200%200%200%204.768%201.968A2.7%202.7%200%200%200%2018.8%2027.2a2.51%202.51%200%200%200-.8-1.929v-4.444l3.138%203.138a2.36%202.36%200%200%200%20.812%201.922%202.66%202.66%200%200%200%201.968.788%202.83%202.83%200%200%200%202.014-.788%202.6%202.6%200%200%200%20.831-1.969%202.74%202.74%200%200%200-.831-2.013%202.8%202.8%200%200%200-2.026-.829L20.828%2018h4.443a2.51%202.51%200%200%200%201.93.8%202.784%202.784%200%200%200%201.967-4.769Z'/%3e%3c/svg%3e`,v=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='%230288d1'%20d='M2%202v12h12V2zm4%206h3v1H8v4H7V9H6zm5%200h2v1h-2v1h1a1.003%201.003%200%200%201%201%201v1a1.003%201.003%200%200%201-1%201h-2v-1h2v-1h-1a1.003%201.003%200%200%201-1-1V9a1.003%201.003%200%200%201%201-1'/%3e%3c/svg%3e`,y=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%3e%3cpath%20fill='%23a0f'%20d='M29.313%2012h-6.664a1.427%201.427%200%200%201-1.1-2.24l4.398-6.676A.703.703%200%200%200%2025.397%202H8.428a.62.62%200%200%200-.55.289l-5.77%208.627A.703.703%200%200%200%202.658%2012h8.175a1.427%201.427%200%200%201%201.099%202.24l-4.48%206.676A.702.702%200%200%200%208%2022l6.695.002A1.34%201.34%200%200%201%2016%2023.375v5.934a.652.652%200%200%200%201.168.433l12.694-16.586a.725.725%200%200%200-.55-1.156'/%3e%3c/svg%3e`,b=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='%23ff5252'%20d='M13%209h5.5L13%203.5zM6%202h8l6%206v12c0%201.1-.9%202-2%202H6c-1.1%200-2-.9-2-2V4c0-1.1.9-2%202-2m12%2016v-2H9v2zm-4-4v-2H6v2z'/%3e%3c/svg%3e`,x={css:s,htm:u,html:u,jpeg:d,jpg:d,js:f,json:p,md:h,mjs:f,png:d,svg:_,ts:v,yaml:b,yml:b};function S(e){if(e.icon)return e.icon;if(e.type===`directory`)return c;let t=e.name.toLowerCase();return t===`license`||t.startsWith(`license.`)?m:t===`package.json`||t===`package-lock.json`?g:t.startsWith(`vite.config.`)?y:t.startsWith(`.git`)?l:x[t.split(`.`).pop()]||`data:image/svg+xml,%3csvg%20viewBox='0%200%2016%2016'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m8.668%206h3.6641l-3.6641-3.668v3.668m-4.668-4.668h5.332l4%204v8c0%200.73828-0.59375%201.3359-1.332%201.3359h-8c-0.73828%200-1.332-0.59766-1.332-1.3359v-10.664c0-0.74219%200.59375-1.3359%201.332-1.3359m3.332%201.3359h-3.332v10.664h8v-6h-4.668z'%20fill='%2390a4ae'%20/%3e%3c/svg%3e`}var C=globalThis.HTMLElement||class{};function w(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n!==void 0&&(r.textContent=n),r}var T=class extends C{#e=[];#t=[];static get observedAttributes(){return[`empty-label`]}constructor(){super(),this.attachShadow({mode:`open`})}connectedCallback(){this.#o()}attributeChangedCallback(){this.isConnected&&this.#o()}set entries(e){this.#e=Array.isArray(e)?e:[],this.#t=[],this.#o()}get entries(){return this.#e}get path(){return[...this.#t]}navigate(e=[]){let t=this.#e,n=[];for(let r of e){let e=t.find(e=>e.type===`directory`&&e.name===r);if(!e)break;n.push(r),t=e.children||[]}this.#t=n,this.#o(),this.#r(`octopus:navigate`,{path:this.path,entries:this.#n()})}#n(){return this.#t.reduce((e,t)=>e.find(e=>e.type===`directory`&&e.name===t)?.children||[],this.#e)}#r(e,t){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}#i(e){if(e.parent)return this.navigate(this.#t.slice(0,-1));if(e.type===`directory`)return this.navigate([...this.#t,e.name]);this.#r(`octopus:open`,{entry:e,path:[...this.#t,e.name]})}#a(e){let t=w(`li`),n=w(`button`,`entry`);n.type=`button`,n.title=e.parent?`Parent folder`:e.name,n.setAttribute(`aria-label`,e.parent?`Parent folder`:`${e.name}, ${e.type===`directory`?`folder`:o(e.name)}`),n.addEventListener(`click`,()=>this.#i(e));let s=w(`span`,`cell name`),c=w(`img`,`icon`);c.alt=``,c.src=S(e),s.append(c,w(`span`,`label`,e.name)),e.type!==`directory`&&s.append(w(`span`,`size`,r(e.size)));let l=w(`span`,`cell modified`,e.modified?i(e.modified):``);return e.modified&&(l.title=new Date(e.modified).toLocaleString(),a(e.modified)&&l.classList.add(`recent`)),n.append(s,l),t.append(n),t}#o(){if(!this.shadowRoot||typeof document>`u`)return;let t=w(`style`);t.textContent=e;let r=w(`ul`,`list`);r.setAttribute(`aria-label`,`Files`);let i=n(this.#n());this.#t.length&&r.append(this.#a({name:`..`,type:`directory`,parent:!0})),i.length?i.forEach(e=>r.append(this.#a(e))):r.append(w(`li`,`empty`,this.getAttribute(`empty-label`)||`This folder is empty.`)),this.shadowRoot.replaceChildren(t,r)}};globalThis.customElements&&!customElements.get(`octopus-file-browser`)&&customElements.define(`octopus-file-browser`,T);var E=[{name:`.github`,type:`directory`,modified:`2026-09-23T19:58:44.810Z`,children:[{name:`FUNDING.yml`,type:`file`,modified:`2026-09-23T19:58:44.810Z`,size:20}]},{name:`.gitignore`,type:`file`,modified:`2026-09-23T17:05:01.924Z`,size:26},{name:`AGENTS.md`,type:`file`,modified:`2026-09-23T18:32:40.331Z`,size:105},{name:`docs`,type:`directory`,modified:`2026-09-23T19:44:30.062Z`,children:[{name:`ofb.png`,type:`file`,modified:`2026-09-23T16:30:08.419Z`,size:907351},{name:`README.md`,type:`file`,modified:`2026-09-23T16:30:08.416Z`,size:14},{name:`ui.png`,type:`file`,modified:`2026-09-23T19:43:55.773Z`,size:37253}]},{name:`index.html`,type:`file`,modified:`2026-09-23T17:30:19.971Z`,size:446},{name:`LICENSE`,type:`file`,modified:`2026-09-23T19:55:45.681Z`,size:4111},{name:`octopus-file-browser.d.ts`,type:`file`,modified:`2026-09-23T19:59:24.759Z`,size:1658},{name:`package-lock.json`,type:`file`,modified:`2026-09-23T19:59:32.000Z`,size:26439},{name:`package.json`,type:`file`,modified:`2026-09-23T19:58:44.809Z`,size:1472},{name:`README.md`,type:`file`,modified:`2026-09-23T19:58:44.812Z`,size:2900},{name:`src`,type:`directory`,modified:`2026-09-23T17:01:59.151Z`,children:[{name:`demo.css`,type:`file`,modified:`2026-09-23T17:30:19.989Z`,size:298},{name:`demo.js`,type:`file`,modified:`2026-09-23T17:30:19.993Z`,size:198},{name:`file-browser-utils.js`,type:`file`,modified:`2026-09-23T17:30:19.978Z`,size:2101},{name:`icon-resolver.js`,type:`file`,modified:`2026-09-23T17:01:59.141Z`,size:1499},{name:`octopus-file-browser.css`,type:`file`,modified:`2026-09-23T17:30:35.003Z`,size:2076},{name:`octopus-file-browser.js`,type:`file`,modified:`2026-09-23T17:30:35.010Z`,size:4324}]},{name:`test`,type:`directory`,modified:`2026-09-23T17:01:59.162Z`,children:[{name:`file-browser-utils.test.js`,type:`file`,modified:`2026-09-23T17:30:20.005Z`,size:1558}]},{name:`THIRD_PARTY_NOTICES`,type:`file`,modified:`2026-09-23T17:05:01.941Z`,size:3905},{name:`vite.config.js`,type:`file`,modified:`2026-09-23T17:30:19.997Z`,size:1069},{name:`vite.lib.config.js`,type:`file`,modified:`2026-09-23T17:30:20.000Z`,size:407}],D=document.querySelector(`octopus-file-browser`);D.entries=E; \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 0c0d03c..a944698 100644 --- a/demo/index.html +++ b/demo/index.html @@ -6,7 +6,7 @@ octopus-file-browser - + diff --git a/docs/ui.png b/docs/ui.png new file mode 100644 index 0000000000000000000000000000000000000000..7855108f7251283cbb40a03a4c5edcec34fe0ae6 GIT binary patch literal 37253 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 U=iCqp#U7`ew9@??DPy1i1y@FV8vp; + 'octopus:navigate': CustomEvent; +} + +export class OctopusFileBrowser extends HTMLElement { + entries: OctopusEntry[]; + readonly path: string[]; + navigate(path?: string[]): void; + addEventListener( + type: K, + listener: (this: OctopusFileBrowser, event: OctopusFileBrowserEventMap[K]) => void, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject | null, + options?: boolean | AddEventListenerOptions, + ): void; +} + +export function createOctopusFileBrowser( + target: Element, + options?: { entries?: OctopusEntry[]; emptyLabel?: string }, +): OctopusFileBrowser; + +export function fileKindLabel(name?: string): string; +export function formatFileSize(bytes?: number): string; +export function formatRelativeDate(value: OctopusDate, now?: number): string; +export function isRecent(value: OctopusDate, now?: number): boolean; +export function sortEntries(entries?: OctopusEntry[]): OctopusEntry[]; + +declare global { + interface HTMLElementTagNameMap { + 'octopus-file-browser': OctopusFileBrowser; + } +} diff --git a/package-lock.json b/package-lock.json index d1de391..8f0b4e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,12 +7,13 @@ "": { "name": "octopus-file-browser", "version": "0.1.0", - "license": "UNLICENSED", - "dependencies": { - "material-icon-theme": "5.38.1" - }, + "license": "SEE LICENSE IN LICENSE", "devDependencies": { + "material-icon-theme": "5.38.1", "vite": "8.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/multipleof4" } }, "node_modules/@oxc-project/types": { @@ -309,6 +310,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-3.2.0.tgz", "integrity": "sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw==", + "dev": true, "license": "(BSD-3-Clause AND Apache-2.0)" }, "node_modules/detect-libc": { @@ -631,6 +633,7 @@ "version": "5.38.1", "resolved": "https://registry.npmjs.org/material-icon-theme/-/material-icon-theme-5.38.1.tgz", "integrity": "sha512-14cFM4NJGdbuo68rIZTq9TSX0f5BtA6VF+eNX3zq23Z5NoEeVtM4Zn4PpZ0ERl++50jCBrywKFWXmOjbxf0xTA==", + "dev": true, "license": "MIT", "dependencies": { "chroma-js": "^3.2.0" diff --git a/package.json b/package.json index f019529..91ffe8d 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,18 @@ "type": "module", "main": "./dist/octopus-file-browser.umd.cjs", "module": "./dist/octopus-file-browser.js", + "types": "./octopus-file-browser.d.ts", "exports": { ".": { + "types": "./octopus-file-browser.d.ts", "import": "./dist/octopus-file-browser.js", "require": "./dist/octopus-file-browser.umd.cjs" } }, "files": [ "dist", + "octopus-file-browser.d.ts", + "LICENSE", "THIRD_PARTY_NOTICES" ], "scripts": { @@ -30,11 +34,17 @@ "javascript", "gitea" ], - "license": "UNLICENSED", - "dependencies": { - "material-icon-theme": "5.38.1" + "license": "SEE LICENSE IN LICENSE", + "repository": { + "type": "git", + "url": "git+https://github.com/multipleof4/octopus-file-browser.git" }, + "homepage": "https://github.com/multipleof4/octopus-file-browser#readme", + "bugs": "https://github.com/multipleof4/octopus-file-browser/issues", + "funding": "https://github.com/sponsors/multipleof4", + "publishConfig": { "access": "public" }, "devDependencies": { + "material-icon-theme": "5.38.1", "vite": "8.3.0" } }