@harryy/react-file-browser 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -26
- package/dist/chunks/file-types-DZ2qAUnj.js +331 -0
- package/dist/chunks/file-types-DZ2qAUnj.js.map +1 -0
- package/dist/chunks/list-BwYAbqhl.js +31 -0
- package/dist/chunks/list-BwYAbqhl.js.map +1 -0
- package/dist/chunks/spreadsheet-GqF9DCoj.js +118 -0
- package/dist/chunks/spreadsheet-GqF9DCoj.js.map +1 -0
- package/dist/components/file-browser.d.ts +11 -3
- package/dist/components/file-browser.d.ts.map +1 -1
- package/dist/components/file-plugins.d.ts +64 -0
- package/dist/components/file-plugins.d.ts.map +1 -0
- package/dist/components/file-types.d.ts +12 -0
- package/dist/components/file-types.d.ts.map +1 -0
- package/dist/components/file-view.d.ts +25 -0
- package/dist/components/file-view.d.ts.map +1 -0
- package/dist/core/use-file-browser.d.ts +0 -28
- package/dist/core/use-file-browser.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2196 -2130
- package/dist/index.js.map +1 -1
- package/dist/plugins/code/index.d.ts +26 -0
- package/dist/plugins/code/index.d.ts.map +1 -0
- package/dist/plugins/code/index.js +215 -0
- package/dist/plugins/code/index.js.map +1 -0
- package/dist/plugins/csv/index.d.ts +6 -0
- package/dist/plugins/csv/index.d.ts.map +1 -0
- package/dist/plugins/csv/index.js +48 -0
- package/dist/plugins/csv/index.js.map +1 -0
- package/dist/plugins/docx/index.d.ts +4 -0
- package/dist/plugins/docx/index.d.ts.map +1 -0
- package/dist/plugins/docx/index.js +40 -0
- package/dist/plugins/docx/index.js.map +1 -0
- package/dist/plugins/markdown/index.d.ts +13 -0
- package/dist/plugins/markdown/index.d.ts.map +1 -0
- package/dist/plugins/markdown/index.js +292 -0
- package/dist/plugins/markdown/index.js.map +1 -0
- package/dist/plugins/rich-text.d.ts +10 -0
- package/dist/plugins/rich-text.d.ts.map +1 -0
- package/dist/plugins/spreadsheet.d.ts +20 -0
- package/dist/plugins/spreadsheet.d.ts.map +1 -0
- package/dist/plugins/xlsx/index.d.ts +6 -0
- package/dist/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/plugins/xlsx/index.js +84 -0
- package/dist/plugins/xlsx/index.js.map +1 -0
- package/package.json +86 -3
package/README.md
CHANGED
|
@@ -21,14 +21,19 @@ S3, Cloudflare R2, Supabase Storage, an in-memory store, or any backend you impl
|
|
|
21
21
|
rename affordance disappears; no config flags to keep in sync.
|
|
22
22
|
- **Resumable uploads** — session-scoped transfer manager with multipart support, a floating transfer
|
|
23
23
|
widget, progress, and a resume prompt after a hard refresh.
|
|
24
|
-
- **
|
|
25
|
-
|
|
24
|
+
- **List and grid views** with row checkboxes, sortable columns, a per-item actions menu, file-type
|
|
25
|
+
icons, search, filter, sort, drag-and-drop move, cut/copy/paste, multi-select, and keyboard shortcuts.
|
|
26
|
+
- **Files open in place** — double-click or Enter opens a file inside the browser in Preview, with an
|
|
27
|
+
Edit switch when an editor matches, Save/Cancel, a size counter, and conflict and unsaved-changes guards.
|
|
28
|
+
- **Preview and edit plugins** — browser-native previews for images, video, audio, PDF, HTML, and
|
|
29
|
+
text, plus opt-in plugins for code, Markdown, CSV, XLSX, and DOCX. Configure them or bring your own.
|
|
30
|
+
- **Per-item read-only** — lock individual files or folders with `isItemReadOnly`.
|
|
26
31
|
- **Bulk download** — uses the adapter's `bulkDownloadUrl` when present, otherwise builds a client-side
|
|
27
32
|
zip from signed URLs.
|
|
28
33
|
- **Upload policies** — reject files by MIME type, size, remaining quota, or a custom validator before
|
|
29
34
|
they enqueue.
|
|
30
35
|
- **Host extension points** — controlled path and search state, opaque item ids, typed metadata,
|
|
31
|
-
custom item
|
|
36
|
+
custom item metadata rendering, conflict policy, and custom empty states.
|
|
32
37
|
- **Themeable** with CSS variables that inherit your Tailwind v4 / design-system tokens. No global CSS
|
|
33
38
|
shipped.
|
|
34
39
|
- **Read-only mode**, comfortable/compact density, ESM-only, fully typed.
|
|
@@ -41,9 +46,8 @@ multi-selection, or choose **Browser options → Select items**, then use the vi
|
|
|
41
46
|
bottom action bar. Search stays visible; filter, sort, view, and folder creation live in Browser
|
|
42
47
|
options. Upload remains available above the footer.
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
Custom item and details renderers should also use fluid widths.
|
|
49
|
+
Selection actions live in the toolbar above the list (and a bottom action bar on narrow layouts);
|
|
50
|
+
there is no details sidebar. Custom item renderers should use fluid widths.
|
|
47
51
|
|
|
48
52
|
Dialogs fit the available viewport height. Narrow menus and conflicts use bottom sheets. The
|
|
49
53
|
provider's transfer widget responds to the viewport, starts collapsed on phones, and expands into a
|
|
@@ -112,12 +116,6 @@ declare const adapter: FileBrowserAdapter<IndexingMetadata>;
|
|
|
112
116
|
renderItemMeta={(item) =>
|
|
113
117
|
item.metadata ? <IndexingStatus status={item.metadata.indexingStatus} /> : null
|
|
114
118
|
}
|
|
115
|
-
renderDetailsContent={(item, defaultContent) => (
|
|
116
|
-
<>
|
|
117
|
-
{defaultContent}
|
|
118
|
-
{item.metadata ? <IndexingDetails metadata={item.metadata} /> : null}
|
|
119
|
-
</>
|
|
120
|
-
)}
|
|
121
119
|
uploadConflictResolutions={["keep-both", "skip"]}
|
|
122
120
|
allowClientZipFallback={false}
|
|
123
121
|
/>;
|
|
@@ -228,7 +226,6 @@ or `bulkDownloadUrl`, those controls are hidden. Recursive folder drops are reje
|
|
|
228
226
|
| `onSearchQueryChange` | `(query) => void` | None | Receives user-driven search changes. |
|
|
229
227
|
| `density` | `"comfortable" \| "compact"` | `"comfortable"` | Row/tile density. |
|
|
230
228
|
| `readOnly` | `boolean` | `false` | Hides all mutating affordances. |
|
|
231
|
-
| `showDetailsPanel` | `boolean` | `true` | Toggles details, shown as a sidebar or responsive sheet. |
|
|
232
229
|
| `uploadPolicy` | `FileBrowserUploadPolicy` | None | Reject files before they enqueue. |
|
|
233
230
|
| `uploadConflictResolutions` | `FileBrowserUploadConflictResolution[]` | all | Allowed conflict-dialog actions. |
|
|
234
231
|
| `allowClientZipFallback` | `boolean` | `true` | Allows browser-built ZIPs when no server ZIP exists. |
|
|
@@ -236,7 +233,9 @@ or `bulkDownloadUrl`, those controls are hidden. Recursive folder drops are reje
|
|
|
236
233
|
| `rootLabel` | `string` | `"Files"` | Root breadcrumb and navigation label. |
|
|
237
234
|
| `emptyState` | `{ title: ReactNode; description?: ReactNode }` | built in | Empty-folder content. |
|
|
238
235
|
| `renderItemMeta` | `(item, { view }) => ReactNode` | None | Host metadata below grid/list item names. |
|
|
239
|
-
| `
|
|
236
|
+
| `isItemReadOnly` | `(item) => boolean` | None | Locks items: no rename, move, cut, delete, edit, or drops into a locked folder. |
|
|
237
|
+
| `previewers` | `FileBrowserPreviewer[]` | `defaultFileBrowserPreviewers` | Inline preview renderers; first match wins. `[]` disables. |
|
|
238
|
+
| `editors` | `FileBrowserEditor[]` | `defaultFileBrowserEditors` | In-place editors; first match wins. `[]` disables editing. |
|
|
240
239
|
| `className` | `string` | None | Class name merged onto the root browser surface. |
|
|
241
240
|
|
|
242
241
|
### `<FileBrowserProvider>` props
|
|
@@ -268,11 +267,6 @@ own UI. The `FileBrowser` component is a consumer of this hook.
|
|
|
268
267
|
It also accepts controlled `path`, `searchQuery`, and their change callbacks. `navigate(path)` emits a
|
|
269
268
|
`programmatic` path-change source, while `open(folder)` emits the complete target item.
|
|
270
269
|
|
|
271
|
-
For tree-style list views, `listRows` flattens expanded folders into `{ type: 'item', item, depth,
|
|
272
|
-
expanded }` and `{ type: 'status', parentPath, depth, status }` rows. Drive expansion with
|
|
273
|
-
`expandFolder`, `collapseFolder`, `toggleFolder`, and `loadMoreFolder`. `visibleItems` lists items in
|
|
274
|
-
on-screen order for the active view and backs range selection and keyboard movement.
|
|
275
|
-
|
|
276
270
|
### Entry points
|
|
277
271
|
|
|
278
272
|
| Import | Contents |
|
|
@@ -282,8 +276,69 @@ on-screen order for the active view and backs range selection and keyboard movem
|
|
|
282
276
|
| `@harryy/react-file-browser/adapters/s3` | `S3FileBrowserAdapter`. |
|
|
283
277
|
| `@harryy/react-file-browser/adapters/r2` | `R2FileBrowserAdapter`. |
|
|
284
278
|
| `@harryy/react-file-browser/adapters/supabase` | `SupabaseFileBrowserAdapter`. |
|
|
279
|
+
| `@harryy/react-file-browser/plugins/code` | `codeEditor`, `codePreviewer`, `jsonEditor`, `markupEditor`, `getCodeLanguage`. |
|
|
280
|
+
| `@harryy/react-file-browser/plugins/markdown` | `markdownEditor`, `markdownPreviewer`, `markdownToHtml`, `htmlToMarkdown`. |
|
|
281
|
+
| `@harryy/react-file-browser/plugins/csv` | `csvEditor`, `csvPreviewer`. |
|
|
282
|
+
| `@harryy/react-file-browser/plugins/xlsx` | `xlsxEditor`, `xlsxPreviewer`. |
|
|
283
|
+
| `@harryy/react-file-browser/plugins/docx` | `docxPreviewer`. |
|
|
285
284
|
| `@harryy/react-file-browser/theme` | `FILE_BROWSER_THEME_CONTRACT`, `getFileBrowserDensityAttributes`. |
|
|
286
285
|
|
|
286
|
+
## Previews and editing
|
|
287
|
+
|
|
288
|
+
Out of the box the browser previews images, video, audio, PDF (the browser's own viewer), HTML (in a
|
|
289
|
+
sandboxed iframe that cannot run scripts), and plain text, and edits text files in a plain text area.
|
|
290
|
+
Everything else is opt-in: each plugin is its own import, and its npm package is an optional peer
|
|
291
|
+
dependency you install only if you use it.
|
|
292
|
+
|
|
293
|
+
| Plugin | Install | Does | Approx. gzip |
|
|
294
|
+
| --- | --- | --- | --- |
|
|
295
|
+
| `plugins/code` | `codejar prismjs` | Syntax-highlighted code editing and preview; HTML and SVG editing with a live preview beside the source (`markupEditor`); JSON editing with Format and an invalid-JSON save guard (`jsonEditor`) | 21 KB |
|
|
296
|
+
| `plugins/markdown` | `react-markdown squire-rte marked turndown dompurify` | Rendered Markdown preview (raw HTML ignored) and a WYSIWYG Markdown editor with a small toolbar (`markdownEditor`) | 92 KB |
|
|
297
|
+
| `plugins/csv` | `papaparse jspreadsheet-ce` | Spreadsheet-style CSV/TSV editing and preview | 136 KB |
|
|
298
|
+
| `plugins/xlsx` | `read-excel-file write-excel-file jspreadsheet-ce` | Spreadsheet-style XLSX editing and preview, one tab per sheet | 162 KB |
|
|
299
|
+
| `plugins/docx` | `docx-preview` | Word document preview | 50 KB |
|
|
300
|
+
|
|
301
|
+
Pass plugins ahead of the defaults; the first match wins:
|
|
302
|
+
|
|
303
|
+
```tsx
|
|
304
|
+
import { FileBrowser, defaultFileBrowserEditors, defaultFileBrowserPreviewers } from '@harryy/react-file-browser'
|
|
305
|
+
import { codeEditor, codePreviewer, jsonEditor, markupEditor } from '@harryy/react-file-browser/plugins/code'
|
|
306
|
+
import { csvEditor, csvPreviewer } from '@harryy/react-file-browser/plugins/csv'
|
|
307
|
+
import { markdownEditor, markdownPreviewer } from '@harryy/react-file-browser/plugins/markdown'
|
|
308
|
+
// Once, if you use the csv or xlsx plugin:
|
|
309
|
+
import 'jspreadsheet-ce/dist/jspreadsheet.css'
|
|
310
|
+
import 'jspreadsheet-ce/dist/jspreadsheet.themes.css'
|
|
311
|
+
import 'jsuites/dist/jsuites.css'
|
|
312
|
+
|
|
313
|
+
<FileBrowser
|
|
314
|
+
adapter={adapter}
|
|
315
|
+
previewers={[markdownPreviewer, csvPreviewer, codePreviewer, ...defaultFileBrowserPreviewers]}
|
|
316
|
+
editors={[csvEditor, markdownEditor, markupEditor, jsonEditor, codeEditor, ...defaultFileBrowserEditors]}
|
|
317
|
+
/>
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Notes:
|
|
321
|
+
|
|
322
|
+
- The csv and xlsx plugins use jspreadsheet-ce. Editing supports typing, Ctrl/Cmd+C, X, V and Z, and a
|
|
323
|
+
right-click menu that inserts or deletes rows and columns in place. Comments, sorting, column
|
|
324
|
+
renaming, and export are turned off. Previews are read-only with no menu. The plugin restyles the
|
|
325
|
+
sheet, tabs, and menu with scoped `--fb-*` rules, so it follows your light and dark themes; the host
|
|
326
|
+
still imports jspreadsheet's layout CSS (above).
|
|
327
|
+
- CSV saves keep typed formulas as text (`=A1*2`); XLSX saves write their computed values.
|
|
328
|
+
- Saving an XLSX writes cell values only. Formatting, formulas, charts, and images are lost, and the
|
|
329
|
+
editor says so beside Save.
|
|
330
|
+
- Previewers and editors that read file contents `fetch` the adapter's signed URL, so that URL must
|
|
331
|
+
allow cross-origin reads from your app.
|
|
332
|
+
- The editor checks `adapter.stat` before saving. If the file's `etag` (or `modifiedAt`) changed since
|
|
333
|
+
it was opened, it offers Reload or Keep my version instead of overwriting. Saves go through
|
|
334
|
+
`adapter.upload` with `onConflict: 'replace'`.
|
|
335
|
+
- The Markdown editor is visual: it converts Markdown to HTML (marked) to edit and back (turndown) to
|
|
336
|
+
save, so saving may normalize formatting such as list markers and spacing.
|
|
337
|
+
It cleans loaded and pasted markup with DOMPurify.
|
|
338
|
+
- Editors may set `validate(text)`; a returned message shows above the editor and disables Save.
|
|
339
|
+
- Write your own with the `FileBrowserPreviewer` and `FileBrowserEditor` types: `match(item)`,
|
|
340
|
+
optional `read: 'text' | 'binary'`, `maxBytes`, and a `component`.
|
|
341
|
+
|
|
287
342
|
## Styling
|
|
288
343
|
|
|
289
344
|
The package does not ship global CSS. Components use utility classes and `--fb-*` CSS variables that
|
|
@@ -304,7 +359,7 @@ documents every token and its default.
|
|
|
304
359
|
## UI behavior
|
|
305
360
|
|
|
306
361
|
- `readOnly` hides upload, create, rename, move, copy, and delete affordances while keeping browsing,
|
|
307
|
-
preview
|
|
362
|
+
preview and download available.
|
|
308
363
|
- `uploadPolicy` can reject files before enqueueing transfers by MIME type, extension, max file size,
|
|
309
364
|
remaining quota, maximum files per batch, or a custom validator. A batch over `maxFilesPerBatch` is
|
|
310
365
|
rejected before folders are created or transfers enqueue. Other rejections render as an alert and
|
|
@@ -318,12 +373,16 @@ documents every token and its default.
|
|
|
318
373
|
- Move-capable adapters enable the destination tree picker, Cut/Paste, and drag onto folders.
|
|
319
374
|
- Keyboard shortcuts include Enter preview/open, F2 rename, Delete confirm, Cmd/Ctrl+A selection, and
|
|
320
375
|
Cmd/Ctrl+C/X/V for adapter-gated copy, cut, and paste.
|
|
321
|
-
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
376
|
+
- The list view has row checkboxes with a select-all header, sortable Name/Size/Modified columns, and a
|
|
377
|
+
three-dot actions menu per row (also on grid tiles).
|
|
378
|
+
- Opening a file (double-click, Enter, or Preview in the menu) replaces the list with the file: the
|
|
379
|
+
breadcrumb extends to the file name, Previous/Next step through the folder's files, and Back or Escape
|
|
380
|
+
returns to the list. It opens in Preview; Edit (or Edit in the menu) switches to the matching editor.
|
|
381
|
+
Leaving with unsaved edits asks to discard them first.
|
|
382
|
+
- `isItemReadOnly(item)` locks individual items. Locked items show a lock icon;
|
|
383
|
+
rename, move, cut, delete, and edit are hidden for them (and for any selection that includes one),
|
|
384
|
+
F2 and Delete do nothing, they cannot be dragged, and a locked folder refuses dropped items. Download,
|
|
385
|
+
copy path, and preview stay available. Items inside a locked folder are judged on their own.
|
|
327
386
|
|
|
328
387
|
### Transfer persistence and concurrency
|
|
329
388
|
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { createContext as e, createElement as t, forwardRef as n, useContext as r } from "react";
|
|
2
|
+
//#region node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs
|
|
3
|
+
var i = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), a = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), o = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), s = (e) => {
|
|
4
|
+
let t = o(e);
|
|
5
|
+
return t.charAt(0).toUpperCase() + t.slice(1);
|
|
6
|
+
}, c = {
|
|
7
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
8
|
+
width: 24,
|
|
9
|
+
height: 24,
|
|
10
|
+
viewBox: "0 0 24 24",
|
|
11
|
+
fill: "none",
|
|
12
|
+
stroke: "currentColor",
|
|
13
|
+
strokeWidth: 2,
|
|
14
|
+
strokeLinecap: "round",
|
|
15
|
+
strokeLinejoin: "round"
|
|
16
|
+
}, l = (e) => {
|
|
17
|
+
for (let t in e) if (t.startsWith("aria-") || t === "role" || t === "title") return !0;
|
|
18
|
+
return !1;
|
|
19
|
+
}, u = e({}), d = () => r(u), f = n(({ color: e, size: n, strokeWidth: r, absoluteStrokeWidth: a, className: o = "", children: s, iconNode: u, ...f }, p) => {
|
|
20
|
+
let { size: m = 24, strokeWidth: h = 2, absoluteStrokeWidth: g = !1, color: _ = "currentColor", className: v = "" } = d() ?? {}, y = a ?? g ? Number(r ?? h) * 24 / Number(n ?? m) : r ?? h;
|
|
21
|
+
return t("svg", {
|
|
22
|
+
ref: p,
|
|
23
|
+
...c,
|
|
24
|
+
width: n ?? m ?? c.width,
|
|
25
|
+
height: n ?? m ?? c.height,
|
|
26
|
+
stroke: e ?? _,
|
|
27
|
+
strokeWidth: y,
|
|
28
|
+
className: i("lucide", v, o),
|
|
29
|
+
...!s && !l(f) && { "aria-hidden": "true" },
|
|
30
|
+
...f
|
|
31
|
+
}, [...u.map(([e, n]) => t(e, n)), ...Array.isArray(s) ? s : [s]]);
|
|
32
|
+
}), p = (e, r) => {
|
|
33
|
+
let o = n(({ className: n, ...o }, c) => t(f, {
|
|
34
|
+
ref: c,
|
|
35
|
+
iconNode: r,
|
|
36
|
+
className: i(`lucide-${a(s(e))}`, `lucide-${e}`, n),
|
|
37
|
+
...o
|
|
38
|
+
}));
|
|
39
|
+
return o.displayName = s(e), o;
|
|
40
|
+
}, m = p("file-archive", [
|
|
41
|
+
["path", {
|
|
42
|
+
d: "M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5",
|
|
43
|
+
key: "4pqfef"
|
|
44
|
+
}],
|
|
45
|
+
["path", {
|
|
46
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
47
|
+
key: "wfsgrz"
|
|
48
|
+
}],
|
|
49
|
+
["path", {
|
|
50
|
+
d: "M8 12v-1",
|
|
51
|
+
key: "1ej8lb"
|
|
52
|
+
}],
|
|
53
|
+
["path", {
|
|
54
|
+
d: "M8 18v-2",
|
|
55
|
+
key: "qcmpov"
|
|
56
|
+
}],
|
|
57
|
+
["path", {
|
|
58
|
+
d: "M8 7V6",
|
|
59
|
+
key: "1nbb54"
|
|
60
|
+
}],
|
|
61
|
+
["circle", {
|
|
62
|
+
cx: "8",
|
|
63
|
+
cy: "20",
|
|
64
|
+
r: "2",
|
|
65
|
+
key: "ckkr5m"
|
|
66
|
+
}]
|
|
67
|
+
]), h = p("file-code", [
|
|
68
|
+
["path", {
|
|
69
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
70
|
+
key: "1oefj6"
|
|
71
|
+
}],
|
|
72
|
+
["path", {
|
|
73
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
74
|
+
key: "wfsgrz"
|
|
75
|
+
}],
|
|
76
|
+
["path", {
|
|
77
|
+
d: "M10 12.5 8 15l2 2.5",
|
|
78
|
+
key: "1tg20x"
|
|
79
|
+
}],
|
|
80
|
+
["path", {
|
|
81
|
+
d: "m14 12.5 2 2.5-2 2.5",
|
|
82
|
+
key: "yinavb"
|
|
83
|
+
}]
|
|
84
|
+
]), g = p("file-headphone", [
|
|
85
|
+
["path", {
|
|
86
|
+
d: "M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343",
|
|
87
|
+
key: "1vfytu"
|
|
88
|
+
}],
|
|
89
|
+
["path", {
|
|
90
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
91
|
+
key: "wfsgrz"
|
|
92
|
+
}],
|
|
93
|
+
["path", {
|
|
94
|
+
d: "M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0",
|
|
95
|
+
key: "1etmh7"
|
|
96
|
+
}]
|
|
97
|
+
]), _ = p("file-image", [
|
|
98
|
+
["path", {
|
|
99
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
100
|
+
key: "1oefj6"
|
|
101
|
+
}],
|
|
102
|
+
["path", {
|
|
103
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
104
|
+
key: "wfsgrz"
|
|
105
|
+
}],
|
|
106
|
+
["circle", {
|
|
107
|
+
cx: "10",
|
|
108
|
+
cy: "12",
|
|
109
|
+
r: "2",
|
|
110
|
+
key: "737tya"
|
|
111
|
+
}],
|
|
112
|
+
["path", {
|
|
113
|
+
d: "m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22",
|
|
114
|
+
key: "wt3hpn"
|
|
115
|
+
}]
|
|
116
|
+
]), v = p("file-play", [
|
|
117
|
+
["path", {
|
|
118
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
119
|
+
key: "1oefj6"
|
|
120
|
+
}],
|
|
121
|
+
["path", {
|
|
122
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
123
|
+
key: "wfsgrz"
|
|
124
|
+
}],
|
|
125
|
+
["path", {
|
|
126
|
+
d: "M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z",
|
|
127
|
+
key: "1tzo1f"
|
|
128
|
+
}]
|
|
129
|
+
]), y = p("file-spreadsheet", [
|
|
130
|
+
["path", {
|
|
131
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
132
|
+
key: "1oefj6"
|
|
133
|
+
}],
|
|
134
|
+
["path", {
|
|
135
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
136
|
+
key: "wfsgrz"
|
|
137
|
+
}],
|
|
138
|
+
["path", {
|
|
139
|
+
d: "M8 13h2",
|
|
140
|
+
key: "yr2amv"
|
|
141
|
+
}],
|
|
142
|
+
["path", {
|
|
143
|
+
d: "M14 13h2",
|
|
144
|
+
key: "un5t4a"
|
|
145
|
+
}],
|
|
146
|
+
["path", {
|
|
147
|
+
d: "M8 17h2",
|
|
148
|
+
key: "2yhykz"
|
|
149
|
+
}],
|
|
150
|
+
["path", {
|
|
151
|
+
d: "M14 17h2",
|
|
152
|
+
key: "10kma7"
|
|
153
|
+
}]
|
|
154
|
+
]), b = p("file-text", [
|
|
155
|
+
["path", {
|
|
156
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
157
|
+
key: "1oefj6"
|
|
158
|
+
}],
|
|
159
|
+
["path", {
|
|
160
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
161
|
+
key: "wfsgrz"
|
|
162
|
+
}],
|
|
163
|
+
["path", {
|
|
164
|
+
d: "M10 9H8",
|
|
165
|
+
key: "b1mrlr"
|
|
166
|
+
}],
|
|
167
|
+
["path", {
|
|
168
|
+
d: "M16 13H8",
|
|
169
|
+
key: "t4e002"
|
|
170
|
+
}],
|
|
171
|
+
["path", {
|
|
172
|
+
d: "M16 17H8",
|
|
173
|
+
key: "z1uh3a"
|
|
174
|
+
}]
|
|
175
|
+
]), x = p("file", [["path", {
|
|
176
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
177
|
+
key: "1oefj6"
|
|
178
|
+
}], ["path", {
|
|
179
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
180
|
+
key: "wfsgrz"
|
|
181
|
+
}]]), S = p("folder", [["path", {
|
|
182
|
+
d: "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",
|
|
183
|
+
key: "1kt360"
|
|
184
|
+
}]]), C = p("presentation", [
|
|
185
|
+
["path", {
|
|
186
|
+
d: "M2 3h20",
|
|
187
|
+
key: "91anmk"
|
|
188
|
+
}],
|
|
189
|
+
["path", {
|
|
190
|
+
d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",
|
|
191
|
+
key: "2k9sn8"
|
|
192
|
+
}],
|
|
193
|
+
["path", {
|
|
194
|
+
d: "m7 21 5-5 5 5",
|
|
195
|
+
key: "bip4we"
|
|
196
|
+
}]
|
|
197
|
+
]), w = /* @__PURE__ */ "txt.text.md.markdown.mdx.csv.tsv.json.jsonl.html.htm.xml.svg.yaml.yml.toml.ini.cfg.conf.log.css.scss.js.mjs.cjs.jsx.ts.tsx.py.rb.go.rs.java.kt.swift.php.sh.sql.graphql.rtf".split("."), T = /* @__PURE__ */ new Set(/* @__PURE__ */ "json.jsonl.html.htm.xml.yaml.yml.toml.ini.css.scss.js.mjs.cjs.jsx.ts.tsx.py.rb.go.rs.java.kt.swift.php.sh.sql.graphql".split(".")), E = /* @__PURE__ */ new Set([
|
|
198
|
+
"png",
|
|
199
|
+
"jpg",
|
|
200
|
+
"jpeg",
|
|
201
|
+
"gif",
|
|
202
|
+
"webp",
|
|
203
|
+
"avif",
|
|
204
|
+
"bmp",
|
|
205
|
+
"ico",
|
|
206
|
+
"svg"
|
|
207
|
+
]), D = /* @__PURE__ */ new Set([
|
|
208
|
+
"mp4",
|
|
209
|
+
"webm",
|
|
210
|
+
"mov",
|
|
211
|
+
"m4v",
|
|
212
|
+
"ogv"
|
|
213
|
+
]), O = /* @__PURE__ */ new Set([
|
|
214
|
+
"mp3",
|
|
215
|
+
"wav",
|
|
216
|
+
"ogg",
|
|
217
|
+
"oga",
|
|
218
|
+
"m4a",
|
|
219
|
+
"aac",
|
|
220
|
+
"flac"
|
|
221
|
+
]), k = /* @__PURE__ */ new Set([
|
|
222
|
+
"zip",
|
|
223
|
+
"rar",
|
|
224
|
+
"7z",
|
|
225
|
+
"tar",
|
|
226
|
+
"gz",
|
|
227
|
+
"tgz",
|
|
228
|
+
"bz2",
|
|
229
|
+
"xz"
|
|
230
|
+
]), A = /* @__PURE__ */ new Set([
|
|
231
|
+
"xls",
|
|
232
|
+
"xlsx",
|
|
233
|
+
"ods",
|
|
234
|
+
"numbers",
|
|
235
|
+
"csv",
|
|
236
|
+
"tsv"
|
|
237
|
+
]), j = /* @__PURE__ */ new Set([
|
|
238
|
+
"ppt",
|
|
239
|
+
"pptx",
|
|
240
|
+
"key",
|
|
241
|
+
"odp"
|
|
242
|
+
]), M = /* @__PURE__ */ new Set([
|
|
243
|
+
"doc",
|
|
244
|
+
"docx",
|
|
245
|
+
"odt",
|
|
246
|
+
"pages",
|
|
247
|
+
"rtf"
|
|
248
|
+
]), N = /* @__PURE__ */ new Set([
|
|
249
|
+
"application/json",
|
|
250
|
+
"application/xml",
|
|
251
|
+
"application/javascript",
|
|
252
|
+
"application/x-yaml",
|
|
253
|
+
"application/yaml",
|
|
254
|
+
"application/sql",
|
|
255
|
+
"image/svg+xml"
|
|
256
|
+
]), P = {
|
|
257
|
+
pdf: "PDF document",
|
|
258
|
+
doc: "Word document",
|
|
259
|
+
docx: "Word document",
|
|
260
|
+
xls: "Excel spreadsheet",
|
|
261
|
+
xlsx: "Excel spreadsheet",
|
|
262
|
+
ppt: "PowerPoint deck",
|
|
263
|
+
pptx: "PowerPoint deck",
|
|
264
|
+
csv: "CSV spreadsheet",
|
|
265
|
+
tsv: "TSV spreadsheet",
|
|
266
|
+
md: "Markdown",
|
|
267
|
+
markdown: "Markdown",
|
|
268
|
+
txt: "Plain text",
|
|
269
|
+
json: "JSON",
|
|
270
|
+
html: "HTML page",
|
|
271
|
+
htm: "HTML page",
|
|
272
|
+
svg: "SVG image",
|
|
273
|
+
zip: "ZIP archive"
|
|
274
|
+
}, F = {
|
|
275
|
+
folder: "Folder",
|
|
276
|
+
pdf: "PDF document",
|
|
277
|
+
image: "Image",
|
|
278
|
+
video: "Video",
|
|
279
|
+
audio: "Audio",
|
|
280
|
+
archive: "Archive",
|
|
281
|
+
spreadsheet: "Spreadsheet",
|
|
282
|
+
presentation: "Presentation",
|
|
283
|
+
document: "Document",
|
|
284
|
+
code: "Code",
|
|
285
|
+
text: "Text",
|
|
286
|
+
other: "File"
|
|
287
|
+
}, I = {
|
|
288
|
+
folder: S,
|
|
289
|
+
pdf: b,
|
|
290
|
+
image: _,
|
|
291
|
+
video: v,
|
|
292
|
+
audio: g,
|
|
293
|
+
archive: m,
|
|
294
|
+
spreadsheet: y,
|
|
295
|
+
presentation: C,
|
|
296
|
+
document: b,
|
|
297
|
+
code: h,
|
|
298
|
+
text: b,
|
|
299
|
+
other: x
|
|
300
|
+
};
|
|
301
|
+
function L(e) {
|
|
302
|
+
let t = e.lastIndexOf(".");
|
|
303
|
+
return t > 0 ? e.slice(t + 1).toLowerCase() : "";
|
|
304
|
+
}
|
|
305
|
+
function R(e) {
|
|
306
|
+
if (e.kind !== "file") return !1;
|
|
307
|
+
let t = L(e.name);
|
|
308
|
+
if (t !== "svg" && (E.has(t) || D.has(t) || O.has(t))) return !1;
|
|
309
|
+
let n = e.mimeType ?? "";
|
|
310
|
+
return n.startsWith("text/") || N.has(n) || w.includes(t);
|
|
311
|
+
}
|
|
312
|
+
function z(e) {
|
|
313
|
+
if (e.kind === "folder") return "folder";
|
|
314
|
+
let t = e.mimeType ?? "", n = L(e.name);
|
|
315
|
+
return t === "application/pdf" || n === "pdf" ? "pdf" : t.startsWith("image/") || E.has(n) ? "image" : t.startsWith("video/") || D.has(n) ? "video" : t.startsWith("audio/") || O.has(n) ? "audio" : k.has(n) || /zip|compressed|x-tar/.test(t) ? "archive" : A.has(n) || /spreadsheet|excel|csv/.test(t) ? "spreadsheet" : j.has(n) || /presentation|powerpoint/.test(t) ? "presentation" : M.has(n) || /msword|wordprocessing/.test(t) ? "document" : T.has(n) ? "code" : R(e) ? "text" : "other";
|
|
316
|
+
}
|
|
317
|
+
function B(e) {
|
|
318
|
+
return e.kind === "folder" ? "Folder" : P[L(e.name)] ?? F[z(e)];
|
|
319
|
+
}
|
|
320
|
+
function V(e) {
|
|
321
|
+
return I[z(e)];
|
|
322
|
+
}
|
|
323
|
+
function H(e) {
|
|
324
|
+
if (e < 1024) return `${e} B`;
|
|
325
|
+
let t = e / 1024;
|
|
326
|
+
return t < 1024 ? `${t.toFixed(1)} KB` : `${(t / 1024).toFixed(1)} MB`;
|
|
327
|
+
}
|
|
328
|
+
//#endregion
|
|
329
|
+
export { V as a, S as c, L as i, p as l, H as n, B as o, z as r, R as s, w as t };
|
|
330
|
+
|
|
331
|
+
//# sourceMappingURL=file-types-DZ2qAUnj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-types-DZ2qAUnj.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode"],"sources":["../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../node_modules/lucide-react/dist/esm/context.mjs","../../node_modules/lucide-react/dist/esm/Icon.mjs","../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../node_modules/lucide-react/dist/esm/icons/file-archive.mjs","../../node_modules/lucide-react/dist/esm/icons/file-code.mjs","../../node_modules/lucide-react/dist/esm/icons/file-headphone.mjs","../../node_modules/lucide-react/dist/esm/icons/file-image.mjs","../../node_modules/lucide-react/dist/esm/icons/file-play.mjs","../../node_modules/lucide-react/dist/esm/icons/file-spreadsheet.mjs","../../node_modules/lucide-react/dist/esm/icons/file-text.mjs","../../node_modules/lucide-react/dist/esm/icons/file.mjs","../../node_modules/lucide-react/dist/esm/icons/folder.mjs","../../node_modules/lucide-react/dist/esm/icons/presentation.mjs","../../src/components/file-types.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5\",\n key: \"4pqfef\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M8 12v-1\", key: \"1ej8lb\" }],\n [\"path\", { d: \"M8 18v-2\", key: \"qcmpov\" }],\n [\"path\", { d: \"M8 7V6\", key: \"1nbb54\" }],\n [\"circle\", { cx: \"8\", cy: \"20\", r: \"2\", key: \"ckkr5m\" }]\n];\nconst FileArchive = createLucideIcon(\"file-archive\", __iconNode);\n\nexport { __iconNode, FileArchive as default };\n//# sourceMappingURL=file-archive.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 12.5 8 15l2 2.5\", key: \"1tg20x\" }],\n [\"path\", { d: \"m14 12.5 2 2.5-2 2.5\", key: \"yinavb\" }]\n];\nconst FileCode = createLucideIcon(\"file-code\", __iconNode);\n\nexport { __iconNode, FileCode as default };\n//# sourceMappingURL=file-code.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343\",\n key: \"1vfytu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0\",\n key: \"1etmh7\"\n }\n ]\n];\nconst FileHeadphone = createLucideIcon(\"file-headphone\", __iconNode);\n\nexport { __iconNode, FileHeadphone as default };\n//# sourceMappingURL=file-headphone.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n];\nconst FileImage = createLucideIcon(\"file-image\", __iconNode);\n\nexport { __iconNode, FileImage as default };\n//# sourceMappingURL=file-image.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z\",\n key: \"1tzo1f\"\n }\n ]\n];\nconst FilePlay = createLucideIcon(\"file-play\", __iconNode);\n\nexport { __iconNode, FilePlay as default };\n//# sourceMappingURL=file-play.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M8 13h2\", key: \"yr2amv\" }],\n [\"path\", { d: \"M14 13h2\", key: \"un5t4a\" }],\n [\"path\", { d: \"M8 17h2\", key: \"2yhykz\" }],\n [\"path\", { d: \"M14 17h2\", key: \"10kma7\" }]\n];\nconst FileSpreadsheet = createLucideIcon(\"file-spreadsheet\", __iconNode);\n\nexport { __iconNode, FileSpreadsheet as default };\n//# sourceMappingURL=file-spreadsheet.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n];\nconst File = createLucideIcon(\"file\", __iconNode);\n\nexport { __iconNode, File as default };\n//# sourceMappingURL=file.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst Folder = createLucideIcon(\"folder\", __iconNode);\n\nexport { __iconNode, Folder as default };\n//# sourceMappingURL=folder.mjs.map\n","/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 3h20\", key: \"91anmk\" }],\n [\"path\", { d: \"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3\", key: \"2k9sn8\" }],\n [\"path\", { d: \"m7 21 5-5 5 5\", key: \"bip4we\" }]\n];\nconst Presentation = createLucideIcon(\"presentation\", __iconNode);\n\nexport { __iconNode, Presentation as default };\n//# sourceMappingURL=presentation.mjs.map\n","import {\n\tFile,\n\tFileArchive,\n\tFileAudio,\n\tFileCode,\n\tFileImage,\n\tFileSpreadsheet,\n\tFileText,\n\tFileVideo,\n\tFolder,\n\tPresentation\n} from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { FileNode } from '../core/types'\n\nexport type FileBrowserFileCategory =\n\t| 'folder'\n\t| 'pdf'\n\t| 'image'\n\t| 'video'\n\t| 'audio'\n\t| 'archive'\n\t| 'spreadsheet'\n\t| 'presentation'\n\t| 'document'\n\t| 'code'\n\t| 'text'\n\t| 'other'\n\n/** Extensions treated as plain text for previews and the built-in editor. */\nexport const FILE_BROWSER_TEXT_EXTENSIONS: readonly string[] = [\n\t'txt',\n\t'text',\n\t'md',\n\t'markdown',\n\t'mdx',\n\t'csv',\n\t'tsv',\n\t'json',\n\t'jsonl',\n\t'html',\n\t'htm',\n\t'xml',\n\t'svg',\n\t'yaml',\n\t'yml',\n\t'toml',\n\t'ini',\n\t'cfg',\n\t'conf',\n\t'log',\n\t'css',\n\t'scss',\n\t'js',\n\t'mjs',\n\t'cjs',\n\t'jsx',\n\t'ts',\n\t'tsx',\n\t'py',\n\t'rb',\n\t'go',\n\t'rs',\n\t'java',\n\t'kt',\n\t'swift',\n\t'php',\n\t'sh',\n\t'sql',\n\t'graphql',\n\t'rtf'\n]\n\nconst CODE_EXTENSIONS = new Set([\n\t'json',\n\t'jsonl',\n\t'html',\n\t'htm',\n\t'xml',\n\t'yaml',\n\t'yml',\n\t'toml',\n\t'ini',\n\t'css',\n\t'scss',\n\t'js',\n\t'mjs',\n\t'cjs',\n\t'jsx',\n\t'ts',\n\t'tsx',\n\t'py',\n\t'rb',\n\t'go',\n\t'rs',\n\t'java',\n\t'kt',\n\t'swift',\n\t'php',\n\t'sh',\n\t'sql',\n\t'graphql'\n])\nconst IMAGE_EXTENSIONS = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'bmp', 'ico', 'svg'])\nconst VIDEO_EXTENSIONS = new Set(['mp4', 'webm', 'mov', 'm4v', 'ogv'])\nconst AUDIO_EXTENSIONS = new Set(['mp3', 'wav', 'ogg', 'oga', 'm4a', 'aac', 'flac'])\nconst ARCHIVE_EXTENSIONS = new Set(['zip', 'rar', '7z', 'tar', 'gz', 'tgz', 'bz2', 'xz'])\nconst SPREADSHEET_EXTENSIONS = new Set(['xls', 'xlsx', 'ods', 'numbers', 'csv', 'tsv'])\nconst PRESENTATION_EXTENSIONS = new Set(['ppt', 'pptx', 'key', 'odp'])\nconst DOCUMENT_EXTENSIONS = new Set(['doc', 'docx', 'odt', 'pages', 'rtf'])\nconst TEXT_MIME_TYPES = new Set([\n\t'application/json',\n\t'application/xml',\n\t'application/javascript',\n\t'application/x-yaml',\n\t'application/yaml',\n\t'application/sql',\n\t'image/svg+xml'\n])\n\nconst TYPE_LABELS: Record<string, string> = {\n\tpdf: 'PDF document',\n\tdoc: 'Word document',\n\tdocx: 'Word document',\n\txls: 'Excel spreadsheet',\n\txlsx: 'Excel spreadsheet',\n\tppt: 'PowerPoint deck',\n\tpptx: 'PowerPoint deck',\n\tcsv: 'CSV spreadsheet',\n\ttsv: 'TSV spreadsheet',\n\tmd: 'Markdown',\n\tmarkdown: 'Markdown',\n\ttxt: 'Plain text',\n\tjson: 'JSON',\n\thtml: 'HTML page',\n\thtm: 'HTML page',\n\tsvg: 'SVG image',\n\tzip: 'ZIP archive'\n}\n\nconst CATEGORY_LABELS: Record<FileBrowserFileCategory, string> = {\n\tfolder: 'Folder',\n\tpdf: 'PDF document',\n\timage: 'Image',\n\tvideo: 'Video',\n\taudio: 'Audio',\n\tarchive: 'Archive',\n\tspreadsheet: 'Spreadsheet',\n\tpresentation: 'Presentation',\n\tdocument: 'Document',\n\tcode: 'Code',\n\ttext: 'Text',\n\tother: 'File'\n}\n\nconst CATEGORY_ICONS: Record<FileBrowserFileCategory, LucideIcon> = {\n\tfolder: Folder,\n\tpdf: FileText,\n\timage: FileImage,\n\tvideo: FileVideo,\n\taudio: FileAudio,\n\tarchive: FileArchive,\n\tspreadsheet: FileSpreadsheet,\n\tpresentation: Presentation,\n\tdocument: FileText,\n\tcode: FileCode,\n\ttext: FileText,\n\tother: File\n}\n\nexport function getFileExtension(name: string): string {\n\tconst dot = name.lastIndexOf('.')\n\treturn dot > 0 ? name.slice(dot + 1).toLowerCase() : ''\n}\n\nexport function isTextFile<TMetadata>(item: FileNode<TMetadata>): boolean {\n\tif (item.kind !== 'file') return false\n\tconst extension = getFileExtension(item.name)\n\tif (\n\t\textension !== 'svg' &&\n\t\t(IMAGE_EXTENSIONS.has(extension) || VIDEO_EXTENSIONS.has(extension) || AUDIO_EXTENSIONS.has(extension))\n\t)\n\t\treturn false\n\tconst mime = item.mimeType ?? ''\n\treturn mime.startsWith('text/') || TEXT_MIME_TYPES.has(mime) || FILE_BROWSER_TEXT_EXTENSIONS.includes(extension)\n}\n\nexport function getFileCategory<TMetadata>(item: FileNode<TMetadata>): FileBrowserFileCategory {\n\tif (item.kind === 'folder') return 'folder'\n\tconst mime = item.mimeType ?? ''\n\tconst extension = getFileExtension(item.name)\n\tif (mime === 'application/pdf' || extension === 'pdf') return 'pdf'\n\tif (mime.startsWith('image/') || IMAGE_EXTENSIONS.has(extension)) return 'image'\n\tif (mime.startsWith('video/') || VIDEO_EXTENSIONS.has(extension)) return 'video'\n\tif (mime.startsWith('audio/') || AUDIO_EXTENSIONS.has(extension)) return 'audio'\n\tif (ARCHIVE_EXTENSIONS.has(extension) || /zip|compressed|x-tar/.test(mime)) return 'archive'\n\tif (SPREADSHEET_EXTENSIONS.has(extension) || /spreadsheet|excel|csv/.test(mime)) return 'spreadsheet'\n\tif (PRESENTATION_EXTENSIONS.has(extension) || /presentation|powerpoint/.test(mime)) return 'presentation'\n\tif (DOCUMENT_EXTENSIONS.has(extension) || /msword|wordprocessing/.test(mime)) return 'document'\n\tif (CODE_EXTENSIONS.has(extension)) return 'code'\n\tif (isTextFile(item)) return 'text'\n\treturn 'other'\n}\n\nexport function getFileTypeLabel<TMetadata>(item: FileNode<TMetadata>): string {\n\tif (item.kind === 'folder') return 'Folder'\n\treturn TYPE_LABELS[getFileExtension(item.name)] ?? CATEGORY_LABELS[getFileCategory(item)]\n}\n\nexport function getFileIcon<TMetadata>(item: FileNode<TMetadata>): LucideIcon {\n\treturn CATEGORY_ICONS[getFileCategory(item)]\n}\n\nexport function formatBytes(bytes: number): string {\n\tif (bytes < 1024) {\n\t\treturn `${bytes} B`\n\t}\n\tconst kib = bytes / 1024\n\tif (kib < 1024) {\n\t\treturn `${kib.toFixed(1)} KB`\n\t}\n\treturn `${(kib / 1024).toFixed(1)} MB`\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { l as e } from "./file-types-DZ2qAUnj.js";
|
|
2
|
+
var t = e("list", [
|
|
3
|
+
["path", {
|
|
4
|
+
d: "M3 5h.01",
|
|
5
|
+
key: "18ugdj"
|
|
6
|
+
}],
|
|
7
|
+
["path", {
|
|
8
|
+
d: "M3 12h.01",
|
|
9
|
+
key: "nlz23k"
|
|
10
|
+
}],
|
|
11
|
+
["path", {
|
|
12
|
+
d: "M3 19h.01",
|
|
13
|
+
key: "noohij"
|
|
14
|
+
}],
|
|
15
|
+
["path", {
|
|
16
|
+
d: "M8 5h13",
|
|
17
|
+
key: "1pao27"
|
|
18
|
+
}],
|
|
19
|
+
["path", {
|
|
20
|
+
d: "M8 12h13",
|
|
21
|
+
key: "1za7za"
|
|
22
|
+
}],
|
|
23
|
+
["path", {
|
|
24
|
+
d: "M8 19h13",
|
|
25
|
+
key: "m83p4d"
|
|
26
|
+
}]
|
|
27
|
+
]);
|
|
28
|
+
//#endregion
|
|
29
|
+
export { t };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=list-BwYAbqhl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-BwYAbqhl.js","names":[],"sources":["../../node_modules/lucide-react/dist/esm/icons/list.mjs"],"sourcesContent":["/**\n * @license lucide-react v1.23.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 5h.01\", key: \"18ugdj\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M3 19h.01\", key: \"noohij\" }],\n [\"path\", { d: \"M8 5h13\", key: \"1pao27\" }],\n [\"path\", { d: \"M8 12h13\", key: \"1za7za\" }],\n [\"path\", { d: \"M8 19h13\", key: \"m83p4d\" }]\n];\nconst List = createLucideIcon(\"list\", __iconNode);\n\nexport { __iconNode, List as default };\n//# sourceMappingURL=list.mjs.map\n"],"x_google_ignoreList":[0],"mappings":";AAiBA,IAAM,IAAO,EAAiB,QAAQ;CAPpC,CAAC,QAAQ;EAAE,GAAG;EAAY,KAAK;CAAS,CAAC;CACzC,CAAC,QAAQ;EAAE,GAAG;EAAa,KAAK;CAAS,CAAC;CAC1C,CAAC,QAAQ;EAAE,GAAG;EAAa,KAAK;CAAS,CAAC;CAC1C,CAAC,QAAQ;EAAE,GAAG;EAAW,KAAK;CAAS,CAAC;CACxC,CAAC,QAAQ;EAAE,GAAG;EAAY,KAAK;CAAS,CAAC;CACzC,CAAC,QAAQ;EAAE,GAAG;EAAY,KAAK;CAAS,CAAC;AAEL,CAAU"}
|