@harryy/react-file-browser 1.3.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.
Files changed (46) hide show
  1. package/README.md +86 -26
  2. package/dist/chunks/file-types-DZ2qAUnj.js +331 -0
  3. package/dist/chunks/file-types-DZ2qAUnj.js.map +1 -0
  4. package/dist/chunks/list-BwYAbqhl.js +31 -0
  5. package/dist/chunks/list-BwYAbqhl.js.map +1 -0
  6. package/dist/chunks/spreadsheet-GqF9DCoj.js +118 -0
  7. package/dist/chunks/spreadsheet-GqF9DCoj.js.map +1 -0
  8. package/dist/components/file-browser.d.ts +13 -3
  9. package/dist/components/file-browser.d.ts.map +1 -1
  10. package/dist/components/file-plugins.d.ts +64 -0
  11. package/dist/components/file-plugins.d.ts.map +1 -0
  12. package/dist/components/file-types.d.ts +12 -0
  13. package/dist/components/file-types.d.ts.map +1 -0
  14. package/dist/components/file-view.d.ts +25 -0
  15. package/dist/components/file-view.d.ts.map +1 -0
  16. package/dist/core/use-file-browser.d.ts +3 -29
  17. package/dist/core/use-file-browser.d.ts.map +1 -1
  18. package/dist/index.d.ts +3 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2324 -2151
  21. package/dist/index.js.map +1 -1
  22. package/dist/plugins/code/index.d.ts +26 -0
  23. package/dist/plugins/code/index.d.ts.map +1 -0
  24. package/dist/plugins/code/index.js +215 -0
  25. package/dist/plugins/code/index.js.map +1 -0
  26. package/dist/plugins/csv/index.d.ts +6 -0
  27. package/dist/plugins/csv/index.d.ts.map +1 -0
  28. package/dist/plugins/csv/index.js +48 -0
  29. package/dist/plugins/csv/index.js.map +1 -0
  30. package/dist/plugins/docx/index.d.ts +4 -0
  31. package/dist/plugins/docx/index.d.ts.map +1 -0
  32. package/dist/plugins/docx/index.js +40 -0
  33. package/dist/plugins/docx/index.js.map +1 -0
  34. package/dist/plugins/markdown/index.d.ts +13 -0
  35. package/dist/plugins/markdown/index.d.ts.map +1 -0
  36. package/dist/plugins/markdown/index.js +292 -0
  37. package/dist/plugins/markdown/index.js.map +1 -0
  38. package/dist/plugins/rich-text.d.ts +10 -0
  39. package/dist/plugins/rich-text.d.ts.map +1 -0
  40. package/dist/plugins/spreadsheet.d.ts +20 -0
  41. package/dist/plugins/spreadsheet.d.ts.map +1 -0
  42. package/dist/plugins/xlsx/index.d.ts +6 -0
  43. package/dist/plugins/xlsx/index.d.ts.map +1 -0
  44. package/dist/plugins/xlsx/index.js +84 -0
  45. package/dist/plugins/xlsx/index.js.map +1 -0
  46. package/package.json +86 -3
@@ -0,0 +1,118 @@
1
+ import { useEffect as e, useRef as t } from "react";
2
+ import { jsx as n } from "react/jsx-runtime";
3
+ import r from "jspreadsheet-ce";
4
+ //#region src/plugins/spreadsheet.tsx
5
+ var i = 2, a = 5, o = 4, s = 10, c = "\n[data-fb-sheet] .jss_container, [data-fb-sheet] .jss_content { display: block; width: auto !important; max-width: 100%; height: auto !important; max-height: min(480px, 60dvh); padding: 0; }\n[data-fb-sheet] .jss_content { scrollbar-width: thin; scrollbar-color: var(--fb-border-strong) transparent; }\n[data-fb-sheet] .jss_content::-webkit-scrollbar-track { background: transparent; }\n[data-fb-sheet] .jss_content::-webkit-scrollbar-thumb { background: var(--fb-border-strong); border-radius: 999px; }\n[data-fb-sheet] .jss_worksheet {\n background: var(--fb-surface); color: var(--fb-text); font: inherit;\n border: 0;\n}\n[data-fb-sheet] .jss_worksheet > thead > tr > td,\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:first-child {\n background: var(--fb-surface-2); color: var(--fb-muted); font-weight: 600;\n border-top: 1px solid var(--fb-border); border-left: 1px solid var(--fb-border);\n}\n[data-fb-sheet] .jss_worksheet > thead > tr > td { padding: 6px 8px; }\n[data-fb-sheet] .jss_worksheet > thead > tr > td.selected,\n[data-fb-sheet] .jss_worksheet > tbody > tr.selected > td:first-child {\n background: color-mix(in oklch, var(--fb-accent) 18%, var(--fb-surface-2)); color: var(--fb-text);\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td {\n background: var(--fb-surface); color: var(--fb-text); padding: 6px 10px; text-align: left;\n border-top: 1px solid var(--fb-border); border-left: 1px solid var(--fb-border);\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:first-child { text-align: center; padding: 6px 4px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.readonly { color: var(--fb-text); }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td { position: relative; height: 30px; line-height: 16px; box-sizing: border-box; box-shadow: none !important; }\n/* jspreadsheet sizes the in-cell editor inline to the cell's full height and width, then appends it\n inside the cell, so any cell padding would be added on top and the row would grow while typing.\n The editing cell drops its padding and the input carries it instead. */\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.editor { padding: 0 !important; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.editor > input,\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.editor > textarea {\n box-sizing: border-box; width: 100% !important; margin: 0; padding: 0 10px; border: 0; outline: 0;\n background: transparent; color: var(--fb-text); font: inherit; line-height: 16px;\n}\n[data-fb-sheet] .jss_worksheet .highlight { background: color-mix(in oklch, var(--fb-accent) 16%, var(--fb-surface)); }\n/* Keep grid lines readable inside a selection: the tint otherwise swallows the plain border colour. */\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight {\n border-top-color: color-mix(in oklch, var(--fb-accent) 35%, var(--fb-border));\n border-left-color: color-mix(in oklch, var(--fb-accent) 35%, var(--fb-border));\n}\n[data-fb-sheet] .jss_worksheet .highlight-selected { background: color-mix(in oklch, var(--fb-accent) 20%, var(--fb-surface)); }\n/* Selection outline: jspreadsheet paints it with per-cell borders and box-shadows, which leave dots at\n grid intersections and a light halo. Keep the grid lines untouched and draw the outline on an\n overlay per edge cell instead, so the edges join into one continuous 2px line. Offsets are from the\n padding box: -1px reaches this cell's top/left grid line; -2px crosses its transparent right/bottom\n border and reaches the neighbour's grid line, so the outline sits on the grid on every side. */\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:is(.highlight-top, .highlight-left, .highlight-right, .highlight-bottom) {\n border-right-color: transparent; border-bottom-color: transparent;\n /* jspreadsheet clips cells (.jss_overflow td { overflow: hidden }), which cut off the outline's\n right and bottom edges that sit on the neighbour's grid line. It also writes inline\n style.overflow = hidden on cells beside an edited cell, so this must be !important. */\n overflow: visible !important;\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:is(.highlight-top, .highlight-left, .highlight-right, .highlight-bottom)::after {\n content: ''; position: absolute; top: -1px; left: -1px; right: -2px; bottom: -2px;\n border: 0 solid var(--fb-accent); pointer-events: none; z-index: 1;\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-top::after { border-top-width: 2px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-left::after { border-left-width: 2px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-right::after { border-right-width: 2px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-bottom::after { border-bottom-width: 2px; }\n[data-fb-sheet] .jss_worksheet .selection { background: color-mix(in oklch, var(--fb-accent) 10%, transparent); }\n[data-fb-sheet] .jss_worksheet .selection-left, [data-fb-sheet] .jss_worksheet .selection-right,\n[data-fb-sheet] .jss_worksheet .selection-top, [data-fb-sheet] .jss_worksheet .selection-bottom { border-color: var(--fb-accent); }\n[data-fb-sheet] .jss_corner { background: var(--fb-accent); border-color: var(--fb-surface); }\n[data-fb-sheet] .jtabs-headers-container { border-bottom: 1px solid var(--fb-border); background: var(--fb-surface-2); }\n[data-fb-sheet] .jtabs-headers > div:not(.jtabs-border) {\n margin: 0; padding: 8px 16px; background: transparent; color: var(--fb-muted); font-weight: 600;\n}\n[data-fb-sheet] .jtabs-headers > div.jtabs-selected { background: var(--fb-surface); color: var(--fb-text); }\n[data-fb-sheet] .jtabs-headers > div > div { color: inherit; }\n[data-fb-sheet] .jtabs-border, [data-fb-sheet] .jtabs-controls { display: none; }\n[data-fb-sheet][data-fb-sheet-count=\"1\"] .jtabs-headers-container { display: none; }\n[data-fb-sheet] .jcontextmenu {\n background: var(--fb-surface); color: var(--fb-text); font: inherit; padding: 6px;\n border: 1px solid var(--fb-border); border-radius: calc(var(--fb-radius) + 2px);\n box-shadow: var(--fb-shadow, 0 12px 32px color-mix(in oklch, black 35%, transparent), 0 0 0 1px color-mix(in oklch, black 10%, transparent));\n}\n[data-fb-sheet] .jcontextmenu > div { padding: 8px 12px; border-radius: calc(var(--fb-radius) - 2px); }\n[data-fb-sheet] .jcontextmenu > div::before { display: none; }\n[data-fb-sheet] .jcontextmenu > div, [data-fb-sheet] .jcontextmenu > div a { color: var(--fb-text); }\n[data-fb-sheet] .jcontextmenu > div:hover, [data-fb-sheet] .jcontextmenu > div.selected {\n background: color-mix(in oklch, var(--fb-accent-soft) 70%, var(--fb-surface));\n}\n[data-fb-sheet] .jcontextmenu > div:hover a, [data-fb-sheet] .jcontextmenu > div.selected a { color: var(--fb-text); }\n[data-fb-sheet] .jcontextmenu hr { border: 0; border-top: 1px solid var(--fb-border); margin: 4px 6px; }\n";
6
+ function l({ label: l, onChange: d, sheets: f, values: p = "raw" }) {
7
+ let m = t(null), h = t(d);
8
+ return h.current = d, e(() => {
9
+ let e = m.current;
10
+ if (!e) return;
11
+ let t = document.createElement("div");
12
+ e.append(t);
13
+ let n = !!h.current, c = [], l = () => h.current?.(c.map((e) => e.getData(!1, p === "computed")));
14
+ return c = r(t, {
15
+ tabs: f.length > 1,
16
+ about: !1,
17
+ allowExport: !1,
18
+ contextMenu: (e, t, r, i, a, o) => {
19
+ let s = n ? u(e, Number(t), Number(r), o) : [];
20
+ return s.length > 0 ? s : !1;
21
+ },
22
+ onafterchanges: l,
23
+ oninsertrow: l,
24
+ oninsertcolumn: l,
25
+ ondeleterow: l,
26
+ ondeletecolumn: l,
27
+ onmoverow: l,
28
+ onmovecolumn: l,
29
+ onundo: l,
30
+ onredo: l,
31
+ worksheets: f.map((e) => {
32
+ let t = Math.max(1, ...e.rows.map((e) => e.length));
33
+ return {
34
+ worksheetName: e.name,
35
+ data: e.rows.length > 0 ? e.rows : [[]],
36
+ minDimensions: [Math.max(t + i, o), Math.max(e.rows.length + a, s)],
37
+ editable: n,
38
+ columns: n ? void 0 : Array.from({ length: Math.max(t + i, o) }, () => ({ readOnly: !0 })),
39
+ allowComments: !1,
40
+ allowRenameColumn: !1,
41
+ columnSorting: !1,
42
+ allowInsertColumn: n,
43
+ allowInsertRow: n,
44
+ allowDeleteColumn: n,
45
+ allowDeleteRow: n,
46
+ allowManualInsertColumn: n,
47
+ allowManualInsertRow: n,
48
+ defaultColWidth: 120,
49
+ defaultColAlign: "left",
50
+ tableOverflow: !0,
51
+ tableWidth: "100%",
52
+ tableHeight: "min(480px, 60dvh)"
53
+ };
54
+ })
55
+ }), () => {
56
+ r.destroy(t, !0), t.remove();
57
+ };
58
+ }, []), /* @__PURE__ */ n("div", {
59
+ "aria-label": l,
60
+ className: "mr-auto w-fit min-w-0 max-w-full overflow-hidden rounded-[var(--fb-radius)] border border-[var(--fb-border)] bg-[var(--fb-surface)] text-[calc(var(--fb-font)-1px)]",
61
+ "data-fb-sheet": "",
62
+ "data-fb-sheet-count": f.length,
63
+ ref: m,
64
+ role: "group",
65
+ children: /* @__PURE__ */ n("style", { children: c })
66
+ });
67
+ }
68
+ function u(e, t, n, r) {
69
+ let i = [
70
+ {
71
+ title: "Insert row above",
72
+ onclick: () => void e.insertRow(1, n, 1)
73
+ },
74
+ {
75
+ title: "Insert row below",
76
+ onclick: () => void e.insertRow(1, n)
77
+ },
78
+ {
79
+ title: "Delete row",
80
+ onclick: () => void e.deleteRow(n, 1)
81
+ }
82
+ ], a = [
83
+ {
84
+ title: "Insert column left",
85
+ onclick: () => void e.insertColumn(1, t, !0)
86
+ },
87
+ {
88
+ title: "Insert column right",
89
+ onclick: () => void e.insertColumn(1, t, !1)
90
+ },
91
+ {
92
+ title: "Delete column",
93
+ onclick: () => void e.deleteColumn(t, 1)
94
+ }
95
+ ], o = Number.isInteger(n) && n >= 0, s = Number.isInteger(t) && t >= 0;
96
+ return r === "header" && s ? a : r === "row" && o ? i : r === "cell" && o && s ? [
97
+ ...i,
98
+ {
99
+ title: "",
100
+ type: "line"
101
+ },
102
+ ...a
103
+ ] : [];
104
+ }
105
+ function d(e) {
106
+ let t = (e) => e === "" || e == null, n = e.map((e) => {
107
+ let n = e.length;
108
+ for (; n > 0 && t(e[n - 1]);) --n;
109
+ return e.slice(0, n);
110
+ }), r = n.length;
111
+ for (; r > 0 && n[r - 1].length === 0;) --r;
112
+ let i = n.slice(0, r), a = Math.max(0, ...i.map((e) => e.length));
113
+ return i.map((e) => [...e, ...Array.from({ length: a - e.length }, () => "")]);
114
+ }
115
+ //#endregion
116
+ export { d as n, l as t };
117
+
118
+ //# sourceMappingURL=spreadsheet-GqF9DCoj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spreadsheet-GqF9DCoj.js","names":[],"sources":["../../src/plugins/spreadsheet.tsx"],"sourcesContent":["import jspreadsheet from 'jspreadsheet-ce'\nimport type { CellValue, WorksheetInstance } from 'jspreadsheet-ce'\nimport { useEffect, useRef } from 'react'\n\nexport type SpreadsheetSheet = { name: string; rows: CellValue[][] }\n\ntype MenuItem = { title: string; onclick?: () => void; type?: 'line' }\n\n// Preview and edit share one grid size so switching modes does not resize the sheet; the spare\n// cells give room to type and are trimmed on save.\nconst SPARE_COLUMNS = 2\nconst SPARE_ROWS = 5\nconst MIN_COLUMNS = 4\nconst MIN_ROWS = 10\n\n// jspreadsheet and jsuites hardcode a light theme (#fff, #ccc, #f3f3f3, #555 menus, light scrollbars).\n// Every rule below is scoped to this component's root and maps that chrome onto --fb-* tokens, so the\n// sheet follows the host's light and dark themes like the rest of the browser. Tailwind arbitrary\n// variants cannot express these selectors because jspreadsheet class names contain underscores,\n// which Tailwind turns into spaces.\nconst SHEET_CSS = `\n[data-fb-sheet] .jss_container, [data-fb-sheet] .jss_content { display: block; width: auto !important; max-width: 100%; height: auto !important; max-height: min(480px, 60dvh); padding: 0; }\n[data-fb-sheet] .jss_content { scrollbar-width: thin; scrollbar-color: var(--fb-border-strong) transparent; }\n[data-fb-sheet] .jss_content::-webkit-scrollbar-track { background: transparent; }\n[data-fb-sheet] .jss_content::-webkit-scrollbar-thumb { background: var(--fb-border-strong); border-radius: 999px; }\n[data-fb-sheet] .jss_worksheet {\n\tbackground: var(--fb-surface); color: var(--fb-text); font: inherit;\n\tborder: 0;\n}\n[data-fb-sheet] .jss_worksheet > thead > tr > td,\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:first-child {\n\tbackground: var(--fb-surface-2); color: var(--fb-muted); font-weight: 600;\n\tborder-top: 1px solid var(--fb-border); border-left: 1px solid var(--fb-border);\n}\n[data-fb-sheet] .jss_worksheet > thead > tr > td { padding: 6px 8px; }\n[data-fb-sheet] .jss_worksheet > thead > tr > td.selected,\n[data-fb-sheet] .jss_worksheet > tbody > tr.selected > td:first-child {\n\tbackground: color-mix(in oklch, var(--fb-accent) 18%, var(--fb-surface-2)); color: var(--fb-text);\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td {\n\tbackground: var(--fb-surface); color: var(--fb-text); padding: 6px 10px; text-align: left;\n\tborder-top: 1px solid var(--fb-border); border-left: 1px solid var(--fb-border);\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:first-child { text-align: center; padding: 6px 4px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.readonly { color: var(--fb-text); }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td { position: relative; height: 30px; line-height: 16px; box-sizing: border-box; box-shadow: none !important; }\n/* jspreadsheet sizes the in-cell editor inline to the cell's full height and width, then appends it\n inside the cell, so any cell padding would be added on top and the row would grow while typing.\n The editing cell drops its padding and the input carries it instead. */\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.editor { padding: 0 !important; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.editor > input,\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.editor > textarea {\n\tbox-sizing: border-box; width: 100% !important; margin: 0; padding: 0 10px; border: 0; outline: 0;\n\tbackground: transparent; color: var(--fb-text); font: inherit; line-height: 16px;\n}\n[data-fb-sheet] .jss_worksheet .highlight { background: color-mix(in oklch, var(--fb-accent) 16%, var(--fb-surface)); }\n/* Keep grid lines readable inside a selection: the tint otherwise swallows the plain border colour. */\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight {\n\tborder-top-color: color-mix(in oklch, var(--fb-accent) 35%, var(--fb-border));\n\tborder-left-color: color-mix(in oklch, var(--fb-accent) 35%, var(--fb-border));\n}\n[data-fb-sheet] .jss_worksheet .highlight-selected { background: color-mix(in oklch, var(--fb-accent) 20%, var(--fb-surface)); }\n/* Selection outline: jspreadsheet paints it with per-cell borders and box-shadows, which leave dots at\n grid intersections and a light halo. Keep the grid lines untouched and draw the outline on an\n overlay per edge cell instead, so the edges join into one continuous 2px line. Offsets are from the\n padding box: -1px reaches this cell's top/left grid line; -2px crosses its transparent right/bottom\n border and reaches the neighbour's grid line, so the outline sits on the grid on every side. */\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:is(.highlight-top, .highlight-left, .highlight-right, .highlight-bottom) {\n\tborder-right-color: transparent; border-bottom-color: transparent;\n\t/* jspreadsheet clips cells (.jss_overflow td { overflow: hidden }), which cut off the outline's\n\t right and bottom edges that sit on the neighbour's grid line. It also writes inline\n\t style.overflow = hidden on cells beside an edited cell, so this must be !important. */\n\toverflow: visible !important;\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td:is(.highlight-top, .highlight-left, .highlight-right, .highlight-bottom)::after {\n\tcontent: ''; position: absolute; top: -1px; left: -1px; right: -2px; bottom: -2px;\n\tborder: 0 solid var(--fb-accent); pointer-events: none; z-index: 1;\n}\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-top::after { border-top-width: 2px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-left::after { border-left-width: 2px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-right::after { border-right-width: 2px; }\n[data-fb-sheet] .jss_worksheet > tbody > tr > td.highlight-bottom::after { border-bottom-width: 2px; }\n[data-fb-sheet] .jss_worksheet .selection { background: color-mix(in oklch, var(--fb-accent) 10%, transparent); }\n[data-fb-sheet] .jss_worksheet .selection-left, [data-fb-sheet] .jss_worksheet .selection-right,\n[data-fb-sheet] .jss_worksheet .selection-top, [data-fb-sheet] .jss_worksheet .selection-bottom { border-color: var(--fb-accent); }\n[data-fb-sheet] .jss_corner { background: var(--fb-accent); border-color: var(--fb-surface); }\n[data-fb-sheet] .jtabs-headers-container { border-bottom: 1px solid var(--fb-border); background: var(--fb-surface-2); }\n[data-fb-sheet] .jtabs-headers > div:not(.jtabs-border) {\n\tmargin: 0; padding: 8px 16px; background: transparent; color: var(--fb-muted); font-weight: 600;\n}\n[data-fb-sheet] .jtabs-headers > div.jtabs-selected { background: var(--fb-surface); color: var(--fb-text); }\n[data-fb-sheet] .jtabs-headers > div > div { color: inherit; }\n[data-fb-sheet] .jtabs-border, [data-fb-sheet] .jtabs-controls { display: none; }\n[data-fb-sheet][data-fb-sheet-count=\"1\"] .jtabs-headers-container { display: none; }\n[data-fb-sheet] .jcontextmenu {\n\tbackground: var(--fb-surface); color: var(--fb-text); font: inherit; padding: 6px;\n\tborder: 1px solid var(--fb-border); border-radius: calc(var(--fb-radius) + 2px);\n\tbox-shadow: var(--fb-shadow, 0 12px 32px color-mix(in oklch, black 35%, transparent), 0 0 0 1px color-mix(in oklch, black 10%, transparent));\n}\n[data-fb-sheet] .jcontextmenu > div { padding: 8px 12px; border-radius: calc(var(--fb-radius) - 2px); }\n[data-fb-sheet] .jcontextmenu > div::before { display: none; }\n[data-fb-sheet] .jcontextmenu > div, [data-fb-sheet] .jcontextmenu > div a { color: var(--fb-text); }\n[data-fb-sheet] .jcontextmenu > div:hover, [data-fb-sheet] .jcontextmenu > div.selected {\n\tbackground: color-mix(in oklch, var(--fb-accent-soft) 70%, var(--fb-surface));\n}\n[data-fb-sheet] .jcontextmenu > div:hover a, [data-fb-sheet] .jcontextmenu > div.selected a { color: var(--fb-text); }\n[data-fb-sheet] .jcontextmenu hr { border: 0; border-top: 1px solid var(--fb-border); margin: 4px 6px; }\n`\n\n/**\n * Excel-like sheet (jspreadsheet-ce). Editing supports typing, Ctrl/Cmd+C, X, V and Z, and a right-click\n * menu limited to inserting and deleting rows and columns in place. One tab per sheet.\n */\nexport function Spreadsheet({\n\tlabel,\n\tonChange,\n\tsheets,\n\tvalues = 'raw'\n}: {\n\tlabel: string\n\t/** Receives every sheet's cell values after each edit. Omit to render read-only. */\n\tonChange?: (sheets: CellValue[][][]) => void\n\tsheets: SpreadsheetSheet[]\n\t/** `raw` keeps typed formulas such as `=A1*2`; `computed` reports their results. */\n\tvalues?: 'raw' | 'computed'\n}) {\n\tconst ref = useRef<HTMLDivElement>(null)\n\tconst onChangeRef = useRef(onChange)\n\tonChangeRef.current = onChange\n\n\tuseEffect(() => {\n\t\tconst host = ref.current\n\t\tif (!host) return\n\t\t// A fresh mount node per effect run: jspreadsheet appends into its element and destroy() leaves\n\t\t// that markup behind, so reusing one node would stack sheets under React StrictMode remounts.\n\t\tconst element = document.createElement('div')\n\t\thost.append(element)\n\t\tconst editable = Boolean(onChangeRef.current)\n\t\tlet worksheets: WorksheetInstance[] = []\n\t\tconst report = () => onChangeRef.current?.(worksheets.map((sheet) => sheet.getData(false, values === 'computed')))\n\t\tworksheets = jspreadsheet(element, {\n\t\t\ttabs: sheets.length > 1,\n\t\t\tabout: false,\n\t\t\tallowExport: false,\n\t\t\tcontextMenu: (worksheet, column, row, _event, _items, role) => {\n\t\t\t\tconst menu = editable ? buildMenu(worksheet, Number(column), Number(row), role) : []\n\t\t\t\t// jspreadsheet falls back to its full default menu for null; `false` suppresses the menu.\n\t\t\t\treturn (menu.length > 0 ? menu : false) as never\n\t\t\t},\n\t\t\tonafterchanges: report,\n\t\t\toninsertrow: report,\n\t\t\toninsertcolumn: report,\n\t\t\tondeleterow: report,\n\t\t\tondeletecolumn: report,\n\t\t\tonmoverow: report,\n\t\t\tonmovecolumn: report,\n\t\t\tonundo: report,\n\t\t\tonredo: report,\n\t\t\tworksheets: sheets.map((sheet) => {\n\t\t\t\tconst width = Math.max(1, ...sheet.rows.map((row) => row.length))\n\t\t\t\treturn {\n\t\t\t\t\tworksheetName: sheet.name,\n\t\t\t\t\tdata: sheet.rows.length > 0 ? sheet.rows : [[]],\n\t\t\t\t\tminDimensions: [\n\t\t\t\t\t\tMath.max(width + SPARE_COLUMNS, MIN_COLUMNS),\n\t\t\t\t\t\tMath.max(sheet.rows.length + SPARE_ROWS, MIN_ROWS)\n\t\t\t\t\t],\n\t\t\t\t\teditable,\n\t\t\t\t\tcolumns: editable\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: Array.from({ length: Math.max(width + SPARE_COLUMNS, MIN_COLUMNS) }, () => ({ readOnly: true })),\n\t\t\t\t\tallowComments: false,\n\t\t\t\t\tallowRenameColumn: false,\n\t\t\t\t\tcolumnSorting: false,\n\t\t\t\t\tallowInsertColumn: editable,\n\t\t\t\t\tallowInsertRow: editable,\n\t\t\t\t\tallowDeleteColumn: editable,\n\t\t\t\t\tallowDeleteRow: editable,\n\t\t\t\t\tallowManualInsertColumn: editable,\n\t\t\t\t\tallowManualInsertRow: editable,\n\t\t\t\t\tdefaultColWidth: 120,\n\t\t\t\t\tdefaultColAlign: 'left',\n\t\t\t\t\ttableOverflow: true,\n\t\t\t\t\ttableWidth: '100%',\n\t\t\t\t\ttableHeight: 'min(480px, 60dvh)'\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t\treturn () => {\n\t\t\tjspreadsheet.destroy(element as never, true)\n\t\t\telement.remove()\n\t\t}\n\t\t// The sheet owns its data after mount; the file view remounts it (via `key`) to reload.\n\t\t// oxlint-disable-next-line react/exhaustive-deps\n\t}, [])\n\n\treturn (\n\t\t<div\n\t\t\taria-label={label}\n\t\t\tclassName=\"mr-auto w-fit min-w-0 max-w-full overflow-hidden rounded-[var(--fb-radius)] border border-[var(--fb-border)] bg-[var(--fb-surface)] text-[calc(var(--fb-font)-1px)]\"\n\t\t\tdata-fb-sheet=\"\"\n\t\t\tdata-fb-sheet-count={sheets.length}\n\t\t\tref={ref}\n\t\t\trole=\"group\"\n\t\t>\n\t\t\t<style>{SHEET_CSS}</style>\n\t\t</div>\n\t)\n}\n\nfunction buildMenu(worksheet: WorksheetInstance, column: number, row: number, role: string): MenuItem[] {\n\tconst rowItems: MenuItem[] = [\n\t\t{ title: 'Insert row above', onclick: () => void worksheet.insertRow(1, row, 1) },\n\t\t{ title: 'Insert row below', onclick: () => void worksheet.insertRow(1, row) },\n\t\t{ title: 'Delete row', onclick: () => void worksheet.deleteRow(row, 1) }\n\t]\n\tconst columnItems: MenuItem[] = [\n\t\t{ title: 'Insert column left', onclick: () => void worksheet.insertColumn(1, column, true) },\n\t\t{ title: 'Insert column right', onclick: () => void worksheet.insertColumn(1, column, false) },\n\t\t{ title: 'Delete column', onclick: () => void worksheet.deleteColumn(column, 1) }\n\t]\n\tconst hasRow = Number.isInteger(row) && row >= 0\n\tconst hasColumn = Number.isInteger(column) && column >= 0\n\tif (role === 'header' && hasColumn) return columnItems\n\tif (role === 'row' && hasRow) return rowItems\n\tif (role === 'cell' && hasRow && hasColumn) return [...rowItems, { title: '', type: 'line' }, ...columnItems]\n\treturn []\n}\n\n/** Drop trailing empty rows and columns that the editor's minimum grid adds. */\nexport function trimSheet(rows: CellValue[][]): CellValue[][] {\n\tconst isEmpty = (value: CellValue | undefined) => value === '' || value === null || value === undefined\n\tconst trimmed = rows.map((row) => {\n\t\tlet end = row.length\n\t\twhile (end > 0 && isEmpty(row[end - 1])) end -= 1\n\t\treturn row.slice(0, end)\n\t})\n\tlet last = trimmed.length\n\twhile (last > 0 && trimmed[last - 1].length === 0) last -= 1\n\tconst kept = trimmed.slice(0, last)\n\tconst width = Math.max(0, ...kept.map((row) => row.length))\n\treturn kept.map((row) => [...row, ...Array.from({ length: width - row.length }, () => '')])\n}\n"],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { FileBrowserDensity } from '../theme';
3
3
  import type { FileBrowserPathChangeContext, FileBrowserUploadConflictResolution, FileBrowserView } from '../core/use-file-browser';
4
4
  import type { FileBrowserAdapter, FileNode } from '../core/types';
5
5
  import type { FileBrowserUploadCandidate } from '../core/upload-drop';
6
+ import type { FileBrowserEditor, FileBrowserPreviewer } from './file-plugins';
6
7
  export type FileBrowserProps<TMetadata = unknown> = {
7
8
  adapter: FileBrowserAdapter<TMetadata>;
8
9
  className?: string;
@@ -10,6 +11,8 @@ export type FileBrowserProps<TMetadata = unknown> = {
10
11
  title: ReactNode;
11
12
  description?: ReactNode;
12
13
  };
14
+ /** The view the browser opens in: `list` (default) or `grid`. */
15
+ initialView?: FileBrowserView;
13
16
  initialPath?: string;
14
17
  path?: string;
15
18
  onPathChange?: (path: string, context: FileBrowserPathChangeContext<TMetadata>) => void;
@@ -19,15 +22,22 @@ export type FileBrowserProps<TMetadata = unknown> = {
19
22
  onSearchQueryChange?: (query: string) => void;
20
23
  density?: FileBrowserDensity;
21
24
  readOnly?: boolean;
22
- showDetailsPanel?: boolean;
23
25
  uploadPolicy?: FileBrowserUploadPolicy;
24
26
  uploadConflictResolutions?: readonly FileBrowserUploadConflictResolution[];
25
27
  allowClientZipFallback?: boolean;
26
28
  renderItemMeta?: (item: FileNode<TMetadata>, context: {
27
29
  view: FileBrowserView;
28
30
  }) => ReactNode;
29
- renderDetailsContent?: (item: FileNode<TMetadata>, defaultContent: ReactNode) => ReactNode;
30
31
  warnZipSizeBytes?: number;
32
+ /**
33
+ * Marks individual files or folders read-only: no rename, move, cut, delete, or edit, and a
34
+ * read-only folder accepts no dropped items. Contents of a read-only folder are judged per item.
35
+ */
36
+ isItemReadOnly?: (item: FileNode<TMetadata>) => boolean;
37
+ /** Inline preview renderers, first match wins. Defaults to `defaultFileBrowserPreviewers`; `[]` disables. */
38
+ previewers?: readonly FileBrowserPreviewer<TMetadata>[];
39
+ /** In-place editors, first match wins. Defaults to `defaultFileBrowserEditors`; `[]` disables editing. */
40
+ editors?: readonly FileBrowserEditor<TMetadata>[];
31
41
  };
32
42
  export type FileBrowserUploadPolicy = {
33
43
  allowedMimeTypes?: string[];
@@ -44,5 +54,5 @@ export type FileBrowserUploadRejection = {
44
54
  relativePath: string;
45
55
  reasons: string[];
46
56
  };
47
- export declare function FileBrowser<TMetadata = unknown>({ adapter, className, emptyState, initialPath, path, onPathChange, rootLabel, searchQuery, initialSearchQuery, onSearchQueryChange, density, readOnly, showDetailsPanel, uploadPolicy, uploadConflictResolutions, allowClientZipFallback, renderItemMeta, renderDetailsContent, warnZipSizeBytes }: FileBrowserProps<TMetadata>): import("react").JSX.Element;
57
+ export declare function FileBrowser<TMetadata = unknown>({ adapter, className, emptyState, initialPath, initialView, path, onPathChange, rootLabel, searchQuery, initialSearchQuery, onSearchQueryChange, density, readOnly, uploadPolicy, uploadConflictResolutions, allowClientZipFallback, renderItemMeta, warnZipSizeBytes, isItemReadOnly, previewers, editors }: FileBrowserProps<TMetadata>): import("react").JSX.Element;
48
58
  //# sourceMappingURL=file-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-browser.d.ts","sourceRoot":"","sources":["../../src/components/file-browser.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-browser.d.ts","sourceRoot":"","sources":["../../src/components/file-browser.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { FileNode } from '../core/types';
3
+ /** File body handed to plugins: text for `read: 'text'`, bytes for `read: 'binary'`. */
4
+ export type FileBrowserFileContent = string | ArrayBuffer;
5
+ export type FileBrowserPreviewerProps<TMetadata = unknown> = {
6
+ item: FileNode<TMetadata>;
7
+ /** Short-lived URL from `adapter.signedUrl`. Empty when previewing unsaved editor content. */
8
+ url: string;
9
+ /** File body when the previewer sets `read`, otherwise `null`. */
10
+ content: FileBrowserFileContent | null;
11
+ };
12
+ export type FileBrowserPreviewer<TMetadata = unknown> = {
13
+ id: string;
14
+ match: (item: FileNode<TMetadata>) => boolean;
15
+ /**
16
+ * Fetch the file body before rendering. Omit when the component only needs `url`.
17
+ * The signed URL must allow `fetch` from the page (CORS).
18
+ */
19
+ read?: 'text' | 'binary';
20
+ /** Largest file, in bytes, that is fetched for `read`. Defaults to 1 MB. */
21
+ maxBytes?: number;
22
+ /** Rendered as a React component, so it may use hooks. */
23
+ component: (props: FileBrowserPreviewerProps<TMetadata>) => ReactNode;
24
+ };
25
+ export type FileBrowserEditorProps<TMetadata = unknown> = {
26
+ item: FileNode<TMetadata>;
27
+ /** The saved file body, read as the editor's `read` mode. */
28
+ content: FileBrowserFileContent;
29
+ /** Report the edited file body. Strings are saved as text; use a Blob for binary formats. */
30
+ onChange: (next: string | Blob) => void;
31
+ /** Save now; the same as the Save button. */
32
+ onSave: () => void;
33
+ };
34
+ export type FileBrowserEditor<TMetadata = unknown> = {
35
+ id: string;
36
+ match: (item: FileNode<TMetadata>) => boolean;
37
+ /** How the file is read before editing. Defaults to `text`. */
38
+ read?: 'text' | 'binary';
39
+ /** Largest file, in bytes, that can be opened or saved. Defaults to 1 MB. */
40
+ maxBytes?: number;
41
+ /** Shown beside Save, for example to explain what saving drops. */
42
+ saveWarning?: string;
43
+ /** Return a message to block saving, for example when edited text does not parse. */
44
+ validate?: (content: string) => string | null;
45
+ /** Editing surface. Omit to use a plain text area. */
46
+ component?: (props: FileBrowserEditorProps<TMetadata>) => ReactNode;
47
+ };
48
+ export declare const DEFAULT_TEXT_PREVIEW_BYTES: number;
49
+ export declare const DEFAULT_EDITABLE_BYTES: number;
50
+ export declare const imagePreviewer: FileBrowserPreviewer;
51
+ export declare const videoPreviewer: FileBrowserPreviewer;
52
+ export declare const audioPreviewer: FileBrowserPreviewer;
53
+ export declare const pdfPreviewer: FileBrowserPreviewer;
54
+ export declare const htmlPreviewer: FileBrowserPreviewer;
55
+ export declare const textPreviewer: FileBrowserPreviewer;
56
+ /** Browser-native previews only. Add plugins from `@harryy/react-file-browser/plugins/*` ahead of these. */
57
+ export declare const defaultFileBrowserPreviewers: FileBrowserPreviewer[];
58
+ export declare const textEditor: FileBrowserEditor;
59
+ export declare const defaultFileBrowserEditors: FileBrowserEditor[];
60
+ export declare function findPlugin<TPlugin extends {
61
+ match: (item: FileNode<TMetadata>) => boolean;
62
+ }, TMetadata>(plugins: readonly TPlugin[], item: FileNode<TMetadata>): TPlugin | undefined;
63
+ export declare function fetchFileContent(url: string, read: 'text' | 'binary', signal?: AbortSignal): Promise<FileBrowserFileContent>;
64
+ //# sourceMappingURL=file-plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-plugins.d.ts","sourceRoot":"","sources":["../../src/components/file-plugins.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { LucideIcon } from 'lucide-react';
2
+ import type { FileNode } from '../core/types';
3
+ export type FileBrowserFileCategory = 'folder' | 'pdf' | 'image' | 'video' | 'audio' | 'archive' | 'spreadsheet' | 'presentation' | 'document' | 'code' | 'text' | 'other';
4
+ /** Extensions treated as plain text for previews and the built-in editor. */
5
+ export declare const FILE_BROWSER_TEXT_EXTENSIONS: readonly string[];
6
+ export declare function getFileExtension(name: string): string;
7
+ export declare function isTextFile<TMetadata>(item: FileNode<TMetadata>): boolean;
8
+ export declare function getFileCategory<TMetadata>(item: FileNode<TMetadata>): FileBrowserFileCategory;
9
+ export declare function getFileTypeLabel<TMetadata>(item: FileNode<TMetadata>): string;
10
+ export declare function getFileIcon<TMetadata>(item: FileNode<TMetadata>): LucideIcon;
11
+ export declare function formatBytes(bytes: number): string;
12
+ //# sourceMappingURL=file-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-types.d.ts","sourceRoot":"","sources":["../../src/components/file-types.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,uBAAuB,GAChC,QAAQ,GACR,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,aAAa,GACb,cAAc,GACd,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,CAAA;AAEV,6EAA6E;AAC7E,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAyCzD,CAAA;AAmGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAUxE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,uBAAuB,CAe7F;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM,CAG7E;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAE5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASjD"}
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { FileBrowserAdapter, FileNode } from '../core/types';
3
+ import type { FileBrowserEditor, FileBrowserPreviewer } from './file-plugins';
4
+ /**
5
+ * A file opened inside the browser: preview first, with an Edit switch when an editor matches.
6
+ * Leaving (back, breadcrumb, previous/next, Escape) goes through the unsaved-changes guard.
7
+ */
8
+ export declare function FileView<TMetadata>({ adapter, breadcrumbs, editor, initialMode, item, onClose, onDownload, onNavigate, onSaved, onStep, position, previewer }: {
9
+ adapter: FileBrowserAdapter<TMetadata>;
10
+ breadcrumbs: (navigate: (path: string) => void) => ReactNode;
11
+ editor?: FileBrowserEditor<TMetadata>;
12
+ initialMode: 'preview' | 'edit';
13
+ item: FileNode<TMetadata>;
14
+ onClose: () => void;
15
+ onDownload?: () => void;
16
+ onNavigate: (path: string) => void;
17
+ onSaved: (node: FileNode<TMetadata>) => void;
18
+ onStep?: (direction: -1 | 1) => void;
19
+ position?: {
20
+ index: number;
21
+ total: number;
22
+ };
23
+ previewer?: FileBrowserPreviewer<TMetadata>;
24
+ }): import("react").JSX.Element;
25
+ //# sourceMappingURL=file-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-view.d.ts","sourceRoot":"","sources":["../../src/components/file-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAA0B,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAarG;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,EACnC,OAAO,EACP,WAAW,EACX,MAAM,EACN,WAAW,EACX,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,EAAE;IACF,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,SAAS,CAAA;IAC5D,MAAM,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACrC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAA;IAC/B,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IACzB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;IAC5C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IACpC,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,SAAS,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAA;CAC3C,+BA2UA"}
@@ -1,25 +1,6 @@
1
1
  import type { Dispatch, SetStateAction } from 'react';
2
2
  import type { FileBrowserAdapter, FileNode } from './types';
3
3
  export type FileBrowserStatus = 'idle' | 'loading' | 'ready' | 'error';
4
- export type FileBrowserFolderChildren<TMetadata = unknown> = {
5
- status: 'loading' | 'ready' | 'error';
6
- items: FileNode<TMetadata>[];
7
- cursor?: string;
8
- error: Error | null;
9
- };
10
- /** A flattened list-view row: an item at some nesting depth, or a status line for an expanded folder. */
11
- export type FileBrowserListRow<TMetadata = unknown> = {
12
- type: 'item';
13
- item: FileNode<TMetadata>;
14
- depth: number;
15
- expanded: boolean;
16
- } | {
17
- type: 'status';
18
- parentPath: string;
19
- depth: number;
20
- status: 'loading' | 'empty' | 'error' | 'more';
21
- error: Error | null;
22
- };
23
4
  export type FileBrowserView = 'grid' | 'list';
24
5
  export type FileBrowserKindFilter = 'all' | 'files' | 'folders';
25
6
  export type FileBrowserUploadConflictResolution = 'replace' | 'keep-both' | 'skip';
@@ -58,6 +39,8 @@ export type UseFileBrowserOptions<TMetadata = unknown> = {
58
39
  searchQuery?: string;
59
40
  initialSearchQuery?: string;
60
41
  onSearchQueryChange?: (query: string) => void;
42
+ /** The view the browser opens in. Defaults to the list. */
43
+ initialView?: FileBrowserView;
61
44
  };
62
45
  export type UseFileBrowserResult<TMetadata = unknown> = {
63
46
  adapter: FileBrowserAdapter<TMetadata>;
@@ -77,11 +60,6 @@ export type UseFileBrowserResult<TMetadata = unknown> = {
77
60
  sortBy: 'name' | 'modifiedAt' | 'size';
78
61
  sortDirection: 'asc' | 'desc';
79
62
  filteredItems: FileNode<TMetadata>[];
80
- /** List view rows with expanded folders' children inlined. */
81
- listRows: FileBrowserListRow<TMetadata>[];
82
- /** Items in on-screen order: `filteredItems` in grid view, every item row of `listRows` in list view. */
83
- visibleItems: FileNode<TMetadata>[];
84
- expandedPaths: string[];
85
63
  setView: Dispatch<SetStateAction<FileBrowserView>>;
86
64
  setSearchQuery: Dispatch<SetStateAction<string>>;
87
65
  setFilterKind: Dispatch<SetStateAction<FileBrowserKindFilter>>;
@@ -91,10 +69,6 @@ export type UseFileBrowserResult<TMetadata = unknown> = {
91
69
  loadMore: () => Promise<void>;
92
70
  navigate: (path: string, context?: FileBrowserPathChangeContext<TMetadata>) => Promise<void>;
93
71
  open: (node: FileNode<TMetadata>) => Promise<void>;
94
- expandFolder: (path: string) => void;
95
- collapseFolder: (path: string) => void;
96
- toggleFolder: (path: string) => void;
97
- loadMoreFolder: (path: string) => void;
98
72
  selectOnly: (path: string) => void;
99
73
  toggleSelection: (path: string) => void;
100
74
  selectRange: (path: string) => void;
@@ -114,5 +88,5 @@ export type UseFileBrowserResult<TMetadata = unknown> = {
114
88
  pasteInto: (toDir: string) => Promise<void>;
115
89
  uploadFiles: (files: File[] | FileList, options?: FileBrowserUploadFilesOptions) => Promise<FileNode<TMetadata>[]>;
116
90
  };
117
- export declare function useFileBrowser<TMetadata = unknown>({ adapter, path, initialPath, onPathChange, searchQuery: controlledSearchQuery, initialSearchQuery, onSearchQueryChange }: UseFileBrowserOptions<TMetadata>): UseFileBrowserResult<TMetadata>;
91
+ export declare function useFileBrowser<TMetadata = unknown>({ adapter, path, initialPath, onPathChange, searchQuery: controlledSearchQuery, initialSearchQuery, onSearchQueryChange, initialView }: UseFileBrowserOptions<TMetadata>): UseFileBrowserResult<TMetadata>;
118
92
  //# sourceMappingURL=use-file-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-file-browser.d.ts","sourceRoot":"","sources":["../../src/core/use-file-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-file-browser.d.ts","sourceRoot":"","sources":["../../src/core/use-file-browser.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export { FileBrowserAdapterError, FileBrowserBulkActionError, type FileBrowserAdapter, type FileBrowserBulkAction, type FileBrowserBulkActionFailure, type FileBrowserListOptions, type FileBrowserListResult, type FileBrowserUploadOptions, type FileNode, type FileNodeKind, type MultipartUploadPart } from './core/types';
2
2
  export { ROOT_PATH, getFileBrowserBasename, getFileBrowserDirname, isFileBrowserDescendantOrSelf, joinFileBrowserPath, normalizeFileBrowserPath, replaceFileBrowserPathPrefix } from './core/path';
3
3
  export { FILE_BROWSER_THEME_CONTRACT, getFileBrowserDensityAttributes, type FileBrowserDensity } from './theme';
4
- export { useFileBrowser, type FileBrowserCapabilities, type FileBrowserClipboard, type FileBrowserFolderChildren, type FileBrowserKindFilter, type FileBrowserListRow, type FileBrowserPathChangeContext, type FileBrowserStatus, type FileBrowserUploadConflictResolution, type FileBrowserUploadFilesOptions, type FileBrowserView, type UseFileBrowserOptions, type UseFileBrowserResult } from './core/use-file-browser';
4
+ export { useFileBrowser, type FileBrowserCapabilities, type FileBrowserClipboard, type FileBrowserKindFilter, type FileBrowserPathChangeContext, type FileBrowserStatus, type FileBrowserUploadConflictResolution, type FileBrowserUploadFilesOptions, type FileBrowserView, type UseFileBrowserOptions, type UseFileBrowserResult } from './core/use-file-browser';
5
5
  export { FileBrowser, type FileBrowserProps } from './components/file-browser';
6
+ export { audioPreviewer, defaultFileBrowserEditors, defaultFileBrowserPreviewers, htmlPreviewer, imagePreviewer, pdfPreviewer, textEditor, textPreviewer, videoPreviewer, type FileBrowserEditor, type FileBrowserEditorProps, type FileBrowserFileContent, type FileBrowserPreviewer, type FileBrowserPreviewerProps } from './components/file-plugins';
7
+ export { FILE_BROWSER_TEXT_EXTENSIONS, getFileCategory, getFileExtension, getFileTypeLabel, isTextFile, type FileBrowserFileCategory } from './components/file-types';
6
8
  export type { FileBrowserUploadPolicy, FileBrowserUploadRejection } from './components/file-browser';
7
9
  export { FileBrowserProvider, useTransferSnapshot, useTransfers, type FileBrowserProviderProps } from './transfers/file-browser-provider';
8
10
  export { TransferManager, type BulkDownloadJob, type EnqueueUploadInput, type PrepareBulkDownloadInput, type PrepareSingleDownloadInput, type ResumeRestoredUploadInput, type TransferManagerOptions, type TransferSnapshot, type TransferStatus, type UploadTransfer, type UploadTransferGroup } from './transfers/transfer-manager';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,MAAM,cAAc,CAAA;AACrB,OAAO,EACN,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,2BAA2B,EAAE,+BAA+B,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC/G,OAAO,EACN,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,6BAA6B,EAClC,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC9E,YAAY,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACpG,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,KAAK,wBAAwB,EAC7B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACN,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,MAAM,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,MAAM,cAAc,CAAA;AACrB,OAAO,EACN,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,2BAA2B,EAAE,+BAA+B,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC/G,OAAO,EACN,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,6BAA6B,EAClC,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EACN,cAAc,EACd,yBAAyB,EACzB,4BAA4B,EAC5B,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACN,4BAA4B,EAC5B,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,KAAK,uBAAuB,EAC5B,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACpG,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,KAAK,wBAAwB,EAC7B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACN,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,MAAM,8BAA8B,CAAA"}