@w100n/documents 0.2.0 → 0.3.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/dist/index.cjs +33 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +19 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +34 -19
- package/dist/index.js.map +1 -1
- package/dist/memory.cjs +2 -1
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.d.cts +2 -1
- package/dist/memory.d.ts +2 -1
- package/dist/memory.js +2 -1
- package/dist/memory.js.map +1 -1
- package/dist/{types-CEKIyBKE.d.cts → types-DiEpNWSu.d.cts} +2 -1
- package/dist/{types-CEKIyBKE.d.ts → types-DiEpNWSu.d.ts} +2 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -74,6 +74,7 @@ function matches(doc, query, kind) {
|
|
|
74
74
|
// src/text.ts
|
|
75
75
|
var en = {
|
|
76
76
|
documents: "Documents",
|
|
77
|
+
loose: "Without a folder",
|
|
77
78
|
search: "Search documents",
|
|
78
79
|
all: "All",
|
|
79
80
|
empty: "No documents here yet",
|
|
@@ -106,6 +107,7 @@ var en = {
|
|
|
106
107
|
};
|
|
107
108
|
var pl = {
|
|
108
109
|
documents: "Dokumenty",
|
|
110
|
+
loose: "Bez folderu",
|
|
109
111
|
search: "Szukaj dokument\xF3w",
|
|
110
112
|
all: "Wszystkie",
|
|
111
113
|
empty: "Nie ma tu jeszcze dokument\xF3w",
|
|
@@ -138,6 +140,7 @@ var pl = {
|
|
|
138
140
|
};
|
|
139
141
|
var uk = {
|
|
140
142
|
documents: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0438",
|
|
143
|
+
loose: "\u0411\u0435\u0437 \u0442\u0435\u043A\u0438",
|
|
141
144
|
search: "\u041F\u043E\u0448\u0443\u043A \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0456\u0432",
|
|
142
145
|
all: "\u0423\u0441\u0456",
|
|
143
146
|
empty: "\u0422\u0443\u0442 \u0449\u0435 \u043D\u0435\u043C\u0430\u0454 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0456\u0432",
|
|
@@ -325,7 +328,7 @@ function SlidesView({ bytes, title }) {
|
|
|
325
328
|
// src/DocumentsWorkspace.tsx
|
|
326
329
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
327
330
|
var icons = { docx: import_lucide_react.FileText, markdown: import_lucide_react.FileType, pdf: import_lucide_react.Files, sheet: import_lucide_react.FileSpreadsheet, slides: import_lucide_react.Presentation };
|
|
328
|
-
function DocumentsWorkspace({ host, language = "en", theme = "light", place, onPlace, start, end }) {
|
|
331
|
+
function DocumentsWorkspace({ host, language = "en", theme = "light", place, onPlace, start, end, aside }) {
|
|
329
332
|
const t = texts[language];
|
|
330
333
|
const [own, setOwn] = (0, import_react5.useState)({ spaceId: null, documentId: null });
|
|
331
334
|
const here = place ?? own;
|
|
@@ -336,6 +339,11 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
336
339
|
const [query, setQuery] = (0, import_react5.useState)("");
|
|
337
340
|
const [kind, setKind] = (0, import_react5.useState)("all");
|
|
338
341
|
const [listOpen, setListOpen] = (0, import_react5.useState)(true);
|
|
342
|
+
const listRef = (0, import_react5.useRef)(null);
|
|
343
|
+
const overlays = () => listRef.current !== null && getComputedStyle(listRef.current).position === "absolute";
|
|
344
|
+
(0, import_react5.useLayoutEffect)(() => {
|
|
345
|
+
if (here.documentId && overlays()) setListOpen(false);
|
|
346
|
+
}, []);
|
|
339
347
|
const [picking, setPicking] = (0, import_react5.useState)(false);
|
|
340
348
|
const [tab, setTab] = (0, import_react5.useState)("outline");
|
|
341
349
|
const [outline, setOutline] = (0, import_react5.useState)([]);
|
|
@@ -350,6 +358,8 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
350
358
|
const versions = useLoad((signal) => here.documentId ? host.versions(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId]);
|
|
351
359
|
const content = useLoad((signal) => here.documentId ? host.content(here.documentId, versionId, { signal }) : Promise.resolve(null), [host, here.documentId, versionId]);
|
|
352
360
|
const shown = (list.data ?? []).filter((item) => matches(item, query, kind));
|
|
361
|
+
const present = kinds.filter((item) => list.data?.some((doc2) => doc2.kind === item));
|
|
362
|
+
const folders = [.../* @__PURE__ */ new Set(["", ...shown.map((item) => item.folder ?? "")])].filter((folder) => shown.some((item) => (item.folder ?? "") === folder));
|
|
353
363
|
const date = (iso) => new Intl.DateTimeFormat(language, { day: "numeric", month: "short", year: "numeric", hour: "2-digit", minute: "2-digit" }).format(new Date(iso));
|
|
354
364
|
const size = (bytes) => bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(0)} KB` : `${(bytes / 1048576).toFixed(1)} MB`;
|
|
355
365
|
const failed = (retry) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "w100n-docs-note", children: [
|
|
@@ -360,6 +370,7 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
360
370
|
setOutline([]);
|
|
361
371
|
setTab("outline");
|
|
362
372
|
go({ spaceId, documentId });
|
|
373
|
+
if (overlays()) setListOpen(false);
|
|
363
374
|
};
|
|
364
375
|
const restore = async (documentId, versionId2) => {
|
|
365
376
|
setRestoring("busy");
|
|
@@ -407,8 +418,8 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
407
418
|
end && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w100n-docs-end", children: end })
|
|
408
419
|
] }),
|
|
409
420
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "w100n-docs-body", children: [
|
|
410
|
-
listOpen && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("aside", { className: "w100n-docs-list w100n-docs-island", "aria-label": t.documents, children: [
|
|
411
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "w100n-docs-picker", children: [
|
|
421
|
+
listOpen && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("aside", { ref: listRef, className: "w100n-docs-list w100n-docs-island", "aria-label": t.documents, children: [
|
|
422
|
+
(spaces.data?.length ?? 0) > 1 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "w100n-docs-picker", children: [
|
|
412
423
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("button", { type: "button", className: "w100n-docs-field", "aria-haspopup": "listbox", "aria-expanded": picking, onClick: () => setPicking(!picking), children: [
|
|
413
424
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "w100n-docs-dot", style: { background: space?.color ?? void 0 } }),
|
|
414
425
|
space?.name ?? t.space,
|
|
@@ -426,25 +437,28 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
426
437
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Search, { "aria-hidden": true }),
|
|
427
438
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("input", { value: query, onChange: (event) => setQuery(event.target.value), placeholder: t.search, "aria-label": t.search })
|
|
428
439
|
] }),
|
|
429
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w100n-docs-chips", role: "group", children: ["all", ...
|
|
440
|
+
present.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w100n-docs-chips", role: "group", children: ["all", ...present].map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", "aria-pressed": kind === item, onClick: () => setKind(item), children: item === "all" ? t.all : t.kinds[item] }, item)) }),
|
|
430
441
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "w100n-docs-cards", children: [
|
|
431
442
|
list.error && failed(list.retry),
|
|
432
443
|
list.loading && !list.data && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "w100n-docs-muted", children: t.loading }),
|
|
433
444
|
list.data && !shown.length && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "w100n-docs-muted", children: list.data.length ? t.nothing : t.empty }),
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("
|
|
439
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("
|
|
440
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
445
|
+
folders.map((folder) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "w100n-docs-folder", role: "group", "aria-label": folder || t.loose, children: [
|
|
446
|
+
folders.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "w100n-docs-group", children: folder || t.loose }),
|
|
447
|
+
shown.filter((item) => (item.folder ?? "") === folder).map((item) => {
|
|
448
|
+
const Icon = icons[item.kind];
|
|
449
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("button", { type: "button", className: "w100n-docs-card", "aria-current": item.id === here.documentId, onClick: () => open(item.id), children: [
|
|
450
|
+
item.thumbnailUrl ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("img", { src: item.thumbnailUrl, alt: "", className: "w100n-docs-thumb" }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "w100n-docs-thumb", "data-kind": item.kind, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Icon, { "aria-hidden": true }) }),
|
|
451
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "w100n-docs-card-text", children: [
|
|
452
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("b", { children: item.name }),
|
|
453
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("small", { children: [
|
|
454
|
+
t.kinds[item.kind],
|
|
455
|
+
" \xB7 ",
|
|
456
|
+
date(item.updatedAt)
|
|
457
|
+
] })
|
|
444
458
|
] })
|
|
445
|
-
] })
|
|
446
|
-
|
|
447
|
-
})
|
|
459
|
+
] }, item.id);
|
|
460
|
+
})
|
|
461
|
+
] }, folder))
|
|
448
462
|
] })
|
|
449
463
|
] }),
|
|
450
464
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("main", { className: "w100n-docs-stage", children: stage }),
|
|
@@ -489,7 +503,8 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
489
503
|
] }),
|
|
490
504
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t.rights }),
|
|
491
505
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: [doc.data.rights.view && t.view, doc.data.rights.comment && t.comment, doc.data.rights.edit && t.edit].filter(Boolean).join(", ") })
|
|
492
|
-
] })
|
|
506
|
+
] }),
|
|
507
|
+
aside?.(doc.data)
|
|
493
508
|
] })
|
|
494
509
|
] })
|
|
495
510
|
] });
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/DocumentsWorkspace.tsx","../src/kinds.ts","../src/text.ts","../src/useLoad.ts","../src/viewers/DocxView.tsx","../src/viewers/headings.ts","../src/viewers/MarkdownView.tsx","../src/viewers/PdfView.tsx","../src/viewers/SlidesView.tsx"],"sourcesContent":["export { DocumentsWorkspace } from './DocumentsWorkspace';\nexport { kindOf, kinds, matches } from './kinds';\nexport type { DocumentFile, DocumentKind, DocumentsHost, DocumentSummary, DocumentVersion, Fetch, Language, Person, Place, Rights, Space } from './types';\n","import { useState, type ReactNode } from 'react';\nimport { ChevronDown, FileSpreadsheet, FileText, FileType, Files, History, Info, ListTree, PanelLeftClose, PanelLeftOpen, Presentation, RotateCcw, Search, type LucideIcon } from 'lucide-react';\nimport { kinds, matches } from './kinds';\nimport { texts } from './text';\nimport type { DocumentKind, DocumentsHost, Language, Place } from './types';\nimport { useLoad } from './useLoad';\nimport DocxView from './viewers/DocxView';\nimport type { Heading } from './viewers/headings';\nimport MarkdownView from './viewers/MarkdownView';\nimport PdfView from './viewers/PdfView';\nimport SlidesView from './viewers/SlidesView';\nimport './styles.css';\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Tab = 'outline' | 'versions' | 'details';\n\nexport function DocumentsWorkspace({ host, language = 'en', theme = 'light', place, onPlace, start, end }: {\n host: DocumentsHost; language?: Language; theme?: 'light' | 'dark'; place?: Place; onPlace?: (place: Place) => void; start?: ReactNode; end?: ReactNode;\n}) {\n const t = texts[language];\n const [own, setOwn] = useState<Place>({ spaceId: null, documentId: null });\n const here = place ?? own;\n const go = (next: Place) => { setOwn(next); onPlace?.(next); };\n const [query, setQuery] = useState('');\n const [kind, setKind] = useState<DocumentKind | 'all'>('all');\n const [listOpen, setListOpen] = useState(true);\n const [picking, setPicking] = useState(false);\n const [tab, setTab] = useState<Tab>('outline');\n const [outline, setOutline] = useState<Heading[]>([]);\n const [version, setVersion] = useState<{ documentId: string | null; id: string | null }>({ documentId: null, id: null });\n const versionId = version.documentId === here.documentId ? version.id : null;\n const [restoring, setRestoring] = useState<'idle' | 'busy' | 'failed'>('idle');\n\n const spaces = useLoad(signal => host.spaces({ signal }), [host]);\n const spaceId = here.spaceId ?? spaces.data?.[0]?.id ?? null;\n const space = spaces.data?.find(item => item.id === spaceId);\n const list = useLoad(signal => spaceId ? host.documents(spaceId, { signal }) : Promise.resolve([]), [host, spaceId]);\n const doc = useLoad(signal => here.documentId ? host.document(here.documentId, { signal }) : Promise.resolve(null), [host, here.documentId]);\n const versions = useLoad(signal => here.documentId ? host.versions(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId]);\n const content = useLoad(signal => here.documentId ? host.content(here.documentId, versionId, { signal }) : Promise.resolve(null), [host, here.documentId, versionId]);\n\n const shown = (list.data ?? []).filter(item => matches(item, query, kind));\n const date = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(new Date(iso));\n const size = (bytes: number) => bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(0)} KB` : `${(bytes / 1048576).toFixed(1)} MB`;\n const failed = (retry: () => void) => <div className=\"w100n-docs-note\">{t.failed}<button type=\"button\" onClick={retry}>{t.retry}</button></div>;\n const open = (documentId: string) => { setOutline([]); setTab('outline'); go({ spaceId, documentId }); };\n const restore = async (documentId: string, versionId: string) => {\n setRestoring('busy');\n try {\n await host.restore!(documentId, versionId);\n } catch {\n setRestoring('failed');\n return;\n }\n setRestoring('idle');\n setVersion({ documentId, id: null });\n versions.retry();\n doc.retry();\n list.retry();\n };\n\n let stage: ReactNode = <div className=\"w100n-docs-empty\"><FileText aria-hidden />{t.pick}</div>;\n if (here.documentId) {\n if (doc.error || content.error) stage = failed(() => { doc.retry(); content.retry(); });\n else if (!doc.data || !content.data) stage = <div className=\"w100n-docs-empty\">{t.loading}</div>;\n else if (doc.data.kind === 'markdown') stage = <MarkdownView bytes={content.data} onOutline={setOutline} />;\n else if (doc.data.kind === 'docx') stage = <DocxView bytes={content.data} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'pdf') stage = <PdfView bytes={content.data} worker={host.pdfWorker} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'slides') stage = <SlidesView bytes={content.data} title={doc.data.name} />;\n else stage = <div className=\"w100n-docs-empty\">{t.unsupported}</div>;\n }\n\n const panelTabs: [Tab, LucideIcon, string][] = [['outline', ListTree, t.outline], ['versions', History, t.versions], ['details', Info, t.details]];\n return <div className=\"w100n-docs\" data-theme={theme}>\n <header className=\"w100n-docs-bar w100n-docs-island\">\n {start}\n <button type=\"button\" className=\"w100n-docs-icon\" onClick={() => setListOpen(!listOpen)} aria-label={listOpen ? t.closeList : t.openList} title={listOpen ? t.closeList : t.openList}>\n {listOpen ? <PanelLeftClose /> : <PanelLeftOpen />}\n </button>\n <strong className=\"w100n-docs-title\">{doc.data?.name ?? t.documents}</strong>\n {doc.data && <span className=\"w100n-docs-badge\" data-kind={doc.data.kind}>{t.kinds[doc.data.kind]}</span>}\n {versionId && <span className=\"w100n-docs-badge\">{versions.data?.find(v => v.id === versionId) && date(versions.data.find(v => v.id === versionId)!.createdAt)}</span>}\n {versionId && here.documentId && host.restore && doc.data?.rights.edit && <button type=\"button\" className=\"w100n-docs-action\" disabled={restoring === 'busy'} onClick={() => void restore(here.documentId!, versionId)}>\n <RotateCcw aria-hidden />{t.restore}\n </button>}\n {restoring === 'failed' && <span className=\"w100n-docs-muted\">{t.restoreFailed}</span>}\n {end && <div className=\"w100n-docs-end\">{end}</div>}\n </header>\n <div className=\"w100n-docs-body\">\n {listOpen && <aside className=\"w100n-docs-list w100n-docs-island\" aria-label={t.documents}>\n <div className=\"w100n-docs-picker\">\n <button type=\"button\" className=\"w100n-docs-field\" aria-haspopup=\"listbox\" aria-expanded={picking} onClick={() => setPicking(!picking)}>\n <span className=\"w100n-docs-dot\" style={{ background: space?.color ?? undefined }} />{space?.name ?? t.space}<ChevronDown aria-hidden />\n </button>\n {picking && <ul role=\"listbox\" className=\"w100n-docs-menu\">{(spaces.data ?? []).map(item => <li key={item.id}>\n <button type=\"button\" role=\"option\" aria-selected={item.id === spaceId} onClick={() => { setPicking(false); go({ spaceId: item.id, documentId: null }); }}>\n <span className=\"w100n-docs-dot\" style={{ background: item.color ?? undefined }} />{item.name}\n </button></li>)}</ul>}\n </div>\n <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input value={query} onChange={event => setQuery(event.target.value)} placeholder={t.search} aria-label={t.search} /></label>\n <div className=\"w100n-docs-chips\" role=\"group\">{(['all', ...kinds] as const).map(item => <button key={item} type=\"button\" aria-pressed={kind === item} onClick={() => setKind(item)}>{item === 'all' ? t.all : t.kinds[item]}</button>)}</div>\n <div className=\"w100n-docs-cards\">\n {list.error && failed(list.retry)}\n {list.loading && !list.data && <p className=\"w100n-docs-muted\">{t.loading}</p>}\n {list.data && !shown.length && <p className=\"w100n-docs-muted\">{list.data.length ? t.nothing : t.empty}</p>}\n {shown.map(item => {\n const Icon = icons[item.kind];\n return <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item.id)}>\n {item.thumbnailUrl ? <img src={item.thumbnailUrl} alt=\"\" className=\"w100n-docs-thumb\" /> : <span className=\"w100n-docs-thumb\" data-kind={item.kind}><Icon aria-hidden /></span>}\n <span className=\"w100n-docs-card-text\"><b>{item.name}</b><small>{t.kinds[item.kind]} · {date(item.updatedAt)}</small></span>\n </button>;\n })}\n </div>\n </aside>}\n <main className=\"w100n-docs-stage\">{stage}</main>\n {doc.data && <aside className=\"w100n-docs-panel w100n-docs-island\">\n <div className=\"w100n-docs-tabs\" role=\"tablist\">{panelTabs.map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"tab\" aria-selected={tab === key} onClick={() => setTab(key)}><Icon aria-hidden />{label}</button>)}</div>\n {tab === 'outline' && (outline.length ? <nav className=\"w100n-docs-outline\">{outline.map(item =>\n <button key={item.id} type=\"button\" data-level={item.level} onClick={() => document.getElementById(item.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })}>{item.text}</button>)}</nav>\n : <p className=\"w100n-docs-muted\">{t.noOutline}</p>)}\n {tab === 'versions' && <div className=\"w100n-docs-versions\">\n {versions.error && failed(versions.retry)}\n {(versions.data ?? []).map(item => <button key={item.id} type=\"button\" aria-pressed={(versionId ?? 'current') === item.id || (!versionId && item.current)}\n onClick={() => { setRestoring('idle'); setVersion({ documentId: here.documentId, id: item.current ? null : item.id }); }}>\n <b>{date(item.createdAt)}{item.current && <span className=\"w100n-docs-badge\">{t.current}</span>}</b>\n <small>{[item.author?.name, size(item.size), item.note].filter(Boolean).join(' · ')}</small>\n </button>)}\n </div>}\n {tab === 'details' && <dl className=\"w100n-docs-details\">\n <dt>{t.kind}</dt><dd>{t.kinds[doc.data.kind]}</dd>\n <dt>{t.size}</dt><dd>{size(doc.data.size)}</dd>\n <dt>{t.updated}</dt><dd>{date(doc.data.updatedAt)}</dd>\n {doc.data.updatedBy && <><dt>{t.by}</dt><dd>{doc.data.updatedBy.name}</dd></>}\n <dt>{t.rights}</dt><dd>{[doc.data.rights.view && t.view, doc.data.rights.comment && t.comment, doc.data.rights.edit && t.edit].filter(Boolean).join(', ')}</dd>\n </dl>}\n </aside>}\n </div>\n </div>;\n}\n","import type { DocumentKind } from './types';\n\nconst byExtension: Record<string, DocumentKind> = {\n docx: 'docx', md: 'markdown', markdown: 'markdown', pdf: 'pdf', xlsx: 'sheet', csv: 'sheet', html: 'slides', htm: 'slides',\n};\n\nconst byMime: Record<string, DocumentKind> = {\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'text/markdown': 'markdown',\n 'application/pdf': 'pdf',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'sheet',\n 'text/csv': 'sheet',\n 'text/html': 'slides',\n};\n\nexport const kinds: DocumentKind[] = ['docx', 'markdown', 'pdf', 'sheet', 'slides'];\n\nexport function kindOf(name: string, mimeType?: string | null): DocumentKind | null {\n const extension = name.includes('.') ? name.split('.').pop()!.toLowerCase() : '';\n return byExtension[extension] ?? (mimeType ? byMime[mimeType.split(';')[0].trim().toLowerCase()] : undefined) ?? null;\n}\n\nexport function matches(doc: { name: string; kind: DocumentKind }, query: string, kind: DocumentKind | 'all') {\n const words = query.toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n return (kind === 'all' || doc.kind === kind) && words.every(word => doc.name.toLocaleLowerCase().includes(word));\n}\n","import type { DocumentKind, Language } from './types';\n\nconst en = {\n documents: 'Documents', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n space: 'Project', pick: 'Choose a document on the left', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'By', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', sheet: 'Sheet', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n space: 'Projekt', pick: 'Wybierz dokument po lewej', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Autor', kind: 'Format', rights: 'Możesz', view: 'Oglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', sheet: 'Arkusz', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n};\n\nconst uk: Text = {\n documents: 'Документи', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n space: 'Проєкт', pick: 'Виберіть документ ліворуч', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Автор', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', sheet: 'Аркуш', unsupported: 'Цей файл поки не показується',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n","import { useEffect, useState } from 'react';\n\nexport type Loaded<T> = { data: T | null; error: Error | null; loading: boolean; retry: () => void };\n\nexport function useLoad<T>(load: (signal: AbortSignal) => Promise<T>, key: unknown[]): Loaded<T> {\n const [state, setState] = useState<{ data: T | null; error: Error | null; loading: boolean }>({ data: null, error: null, loading: true });\n const [attempt, setAttempt] = useState(0);\n useEffect(() => {\n const controller = new AbortController();\n setState(current => ({ ...current, loading: true, error: null }));\n load(controller.signal).then(\n data => { if (!controller.signal.aborted) setState({ data, error: null, loading: false }); },\n error => { if (!controller.signal.aborted) setState({ data: null, error: error instanceof Error ? error : new Error(String(error)), loading: false }); },\n );\n return () => controller.abort();\n }, [...key, attempt]);\n return { ...state, retry: () => setAttempt(n => n + 1) };\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function DocxView({ bytes, onOutline, failed }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useLayoutEffect(() => {\n let live = true;\n let width = 0;\n const root = box.current!;\n const fit = () => {\n const wrapper = root.querySelector<HTMLElement>('.w100n-docx-wrapper');\n if (wrapper && width) wrapper.style.zoom = String(Math.min(1, root.clientWidth / width));\n };\n const watch = new ResizeObserver(fit);\n root.replaceChildren();\n setError(false);\n import('docx-preview')\n .then(({ renderAsync }) => renderAsync(bytes, root, undefined, { inWrapper: true, className: 'w100n-docx', ignoreLastRenderedPageBreak: true }))\n .then(() => {\n if (!live) return;\n width = Math.max(0, ...[...root.querySelectorAll<HTMLElement>('section.w100n-docx')].map(page => page.offsetWidth));\n fit();\n watch.observe(root);\n onOutline(collect(root, '[class*=\"heading\"]', el => Number(/heading(\\d)/i.exec(el.className)?.[1] ?? 1)));\n })\n .catch(() => { if (live) setError(true); });\n return () => { live = false; watch.disconnect(); };\n }, [bytes, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-docx\" /></>;\n}\n","export type Heading = { id: string; level: number; text: string };\n\nlet last = 0;\n\nexport function collect(root: HTMLElement, selector: string, level: (el: Element) => number = el => Number(el.tagName.slice(1))): Heading[] {\n return [...root.querySelectorAll(selector)].flatMap(el => {\n const text = el.textContent?.trim() ?? '';\n if (!text) return [];\n if (!el.id) el.id = `w100n-docs-h${++last}`;\n return [{ id: el.id, level: Math.min(3, Math.max(1, level(el) || 1)), text }];\n });\n}\n","import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { useLayoutEffect, useRef } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function MarkdownView({ bytes, onOutline }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void }) {\n const box = useRef<HTMLElement>(null);\n useLayoutEffect(() => {\n const root = box.current!;\n root.innerHTML = DOMPurify.sanitize(marked.parse(new TextDecoder().decode(bytes), { async: false }));\n onOutline(collect(root, 'h1, h2, h3'));\n }, [bytes, onOutline]);\n return <article ref={box} className=\"w100n-docs-page w100n-docs-prose\" />;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { Heading } from './headings';\n\ntype Outline = { title: string; dest: string | unknown[] | null; items: Outline[] };\n\nlet last = 0;\n\nexport default function PdfView({ bytes, worker, onOutline, failed }: { bytes: ArrayBuffer; worker?: () => Worker; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useEffect(() => {\n const root = box.current!;\n const prefix = `w100n-docs-p${++last}`;\n let stop = false;\n let close = () => {};\n root.replaceChildren();\n setError(false);\n (async () => {\n const pdfjs = await import('pdfjs-dist');\n if (worker) pdfjs.GlobalWorkerOptions.workerPort ??= worker();\n const task = pdfjs.getDocument({ data: new Uint8Array(bytes.slice(0)) });\n close = () => { void task.destroy(); };\n const pdf = await task.promise;\n const width = Math.max(320, root.clientWidth - 48);\n for (let n = 1; n <= pdf.numPages && !stop; n++) {\n const page = await pdf.getPage(n);\n const scale = Math.min(2, width / page.getViewport({ scale: 1 }).width);\n const viewport = page.getViewport({ scale: scale * window.devicePixelRatio });\n const canvas = document.createElement('canvas');\n canvas.id = `${prefix}-${n}`;\n canvas.className = 'w100n-docs-sheet';\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n canvas.style.width = `${viewport.width / window.devicePixelRatio}px`;\n root.append(canvas);\n await page.render({ canvas, canvasContext: canvas.getContext('2d')!, viewport }).promise;\n }\n const flat = async (items: Outline[], level: number): Promise<Heading[]> => (await Promise.all(items.map(async item => {\n const dest = typeof item.dest === 'string' ? await pdf.getDestination(item.dest) : item.dest;\n const ref = Array.isArray(dest) ? dest[0] : null;\n const index = ref && typeof ref === 'object' ? await pdf.getPageIndex(ref as never) : null;\n const here = index === null ? [] : [{ id: `${prefix}-${index + 1}`, level, text: item.title }];\n return [...here, ...(level < 3 ? await flat(item.items ?? [], level + 1) : [])];\n }))).flat();\n if (!stop) onOutline(await flat(((await pdf.getOutline()) ?? []) as Outline[], 1));\n })().catch(() => { if (!stop) setError(true); });\n return () => { stop = true; close(); };\n }, [bytes, worker, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-pdf\" /></>;\n}\n","export default function SlidesView({ bytes, title }: { bytes: ArrayBuffer; title: string }) {\n return <iframe className=\"w100n-docs-slides\" sandbox=\"allow-scripts\" title={title} srcDoc={new TextDecoder().decode(bytes)} />;\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","DOMPurify","import_react","import_jsx_runtime","last","import_jsx_runtime","import_jsx_runtime","versionId"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/DocumentsWorkspace.tsx","../src/kinds.ts","../src/text.ts","../src/useLoad.ts","../src/viewers/DocxView.tsx","../src/viewers/headings.ts","../src/viewers/MarkdownView.tsx","../src/viewers/PdfView.tsx","../src/viewers/SlidesView.tsx"],"sourcesContent":["export { DocumentsWorkspace } from './DocumentsWorkspace';\nexport { kindOf, kinds, matches } from './kinds';\nexport type { DocumentFile, DocumentKind, DocumentsHost, DocumentSummary, DocumentVersion, Fetch, Language, Person, Place, Rights, Space } from './types';\n","import { useLayoutEffect, useRef, useState, type ReactNode } from 'react';\nimport { ChevronDown, FileSpreadsheet, FileText, FileType, Files, History, Info, ListTree, PanelLeftClose, PanelLeftOpen, Presentation, RotateCcw, Search, type LucideIcon } from 'lucide-react';\nimport { kinds, matches } from './kinds';\nimport { texts } from './text';\nimport type { DocumentFile, DocumentKind, DocumentsHost, Language, Place } from './types';\nimport { useLoad } from './useLoad';\nimport DocxView from './viewers/DocxView';\nimport type { Heading } from './viewers/headings';\nimport MarkdownView from './viewers/MarkdownView';\nimport PdfView from './viewers/PdfView';\nimport SlidesView from './viewers/SlidesView';\nimport './styles.css';\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Tab = 'outline' | 'versions' | 'details';\n\nexport function DocumentsWorkspace({ host, language = 'en', theme = 'light', place, onPlace, start, end, aside }: {\n host: DocumentsHost; language?: Language; theme?: 'light' | 'dark'; place?: Place; onPlace?: (place: Place) => void; start?: ReactNode; end?: ReactNode;\n aside?: (doc: DocumentFile) => ReactNode;\n}) {\n const t = texts[language];\n const [own, setOwn] = useState<Place>({ spaceId: null, documentId: null });\n const here = place ?? own;\n const go = (next: Place) => { setOwn(next); onPlace?.(next); };\n const [query, setQuery] = useState('');\n const [kind, setKind] = useState<DocumentKind | 'all'>('all');\n const [listOpen, setListOpen] = useState(true);\n const listRef = useRef<HTMLElement>(null);\n const overlays = () => listRef.current !== null && getComputedStyle(listRef.current).position === 'absolute';\n useLayoutEffect(() => {\n if (here.documentId && overlays()) setListOpen(false);\n }, []);\n const [picking, setPicking] = useState(false);\n const [tab, setTab] = useState<Tab>('outline');\n const [outline, setOutline] = useState<Heading[]>([]);\n const [version, setVersion] = useState<{ documentId: string | null; id: string | null }>({ documentId: null, id: null });\n const versionId = version.documentId === here.documentId ? version.id : null;\n const [restoring, setRestoring] = useState<'idle' | 'busy' | 'failed'>('idle');\n\n const spaces = useLoad(signal => host.spaces({ signal }), [host]);\n const spaceId = here.spaceId ?? spaces.data?.[0]?.id ?? null;\n const space = spaces.data?.find(item => item.id === spaceId);\n const list = useLoad(signal => spaceId ? host.documents(spaceId, { signal }) : Promise.resolve([]), [host, spaceId]);\n const doc = useLoad(signal => here.documentId ? host.document(here.documentId, { signal }) : Promise.resolve(null), [host, here.documentId]);\n const versions = useLoad(signal => here.documentId ? host.versions(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId]);\n const content = useLoad(signal => here.documentId ? host.content(here.documentId, versionId, { signal }) : Promise.resolve(null), [host, here.documentId, versionId]);\n\n const shown = (list.data ?? []).filter(item => matches(item, query, kind));\n const present = kinds.filter(item => list.data?.some(doc => doc.kind === item));\n const folders = [...new Set(['', ...shown.map(item => item.folder ?? '')])].filter(folder => shown.some(item => (item.folder ?? '') === folder));\n const date = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(new Date(iso));\n const size = (bytes: number) => bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(0)} KB` : `${(bytes / 1048576).toFixed(1)} MB`;\n const failed = (retry: () => void) => <div className=\"w100n-docs-note\">{t.failed}<button type=\"button\" onClick={retry}>{t.retry}</button></div>;\n const open = (documentId: string) => {\n setOutline([]);\n setTab('outline');\n go({ spaceId, documentId });\n if (overlays()) setListOpen(false);\n };\n const restore = async (documentId: string, versionId: string) => {\n setRestoring('busy');\n try {\n await host.restore!(documentId, versionId);\n } catch {\n setRestoring('failed');\n return;\n }\n setRestoring('idle');\n setVersion({ documentId, id: null });\n versions.retry();\n doc.retry();\n list.retry();\n };\n\n let stage: ReactNode = <div className=\"w100n-docs-empty\"><FileText aria-hidden />{t.pick}</div>;\n if (here.documentId) {\n if (doc.error || content.error) stage = failed(() => { doc.retry(); content.retry(); });\n else if (!doc.data || !content.data) stage = <div className=\"w100n-docs-empty\">{t.loading}</div>;\n else if (doc.data.kind === 'markdown') stage = <MarkdownView bytes={content.data} onOutline={setOutline} />;\n else if (doc.data.kind === 'docx') stage = <DocxView bytes={content.data} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'pdf') stage = <PdfView bytes={content.data} worker={host.pdfWorker} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'slides') stage = <SlidesView bytes={content.data} title={doc.data.name} />;\n else stage = <div className=\"w100n-docs-empty\">{t.unsupported}</div>;\n }\n\n const panelTabs: [Tab, LucideIcon, string][] = [['outline', ListTree, t.outline], ['versions', History, t.versions], ['details', Info, t.details]];\n return <div className=\"w100n-docs\" data-theme={theme}>\n <header className=\"w100n-docs-bar w100n-docs-island\">\n {start}\n <button type=\"button\" className=\"w100n-docs-icon\" onClick={() => setListOpen(!listOpen)} aria-label={listOpen ? t.closeList : t.openList} title={listOpen ? t.closeList : t.openList}>\n {listOpen ? <PanelLeftClose /> : <PanelLeftOpen />}\n </button>\n <strong className=\"w100n-docs-title\">{doc.data?.name ?? t.documents}</strong>\n {doc.data && <span className=\"w100n-docs-badge\" data-kind={doc.data.kind}>{t.kinds[doc.data.kind]}</span>}\n {versionId && <span className=\"w100n-docs-badge\">{versions.data?.find(v => v.id === versionId) && date(versions.data.find(v => v.id === versionId)!.createdAt)}</span>}\n {versionId && here.documentId && host.restore && doc.data?.rights.edit && <button type=\"button\" className=\"w100n-docs-action\" disabled={restoring === 'busy'} onClick={() => void restore(here.documentId!, versionId)}>\n <RotateCcw aria-hidden />{t.restore}\n </button>}\n {restoring === 'failed' && <span className=\"w100n-docs-muted\">{t.restoreFailed}</span>}\n {end && <div className=\"w100n-docs-end\">{end}</div>}\n </header>\n <div className=\"w100n-docs-body\">\n {listOpen && <aside ref={listRef} className=\"w100n-docs-list w100n-docs-island\" aria-label={t.documents}>\n {(spaces.data?.length ?? 0) > 1 && <div className=\"w100n-docs-picker\">\n <button type=\"button\" className=\"w100n-docs-field\" aria-haspopup=\"listbox\" aria-expanded={picking} onClick={() => setPicking(!picking)}>\n <span className=\"w100n-docs-dot\" style={{ background: space?.color ?? undefined }} />{space?.name ?? t.space}<ChevronDown aria-hidden />\n </button>\n {picking && <ul role=\"listbox\" className=\"w100n-docs-menu\">{(spaces.data ?? []).map(item => <li key={item.id}>\n <button type=\"button\" role=\"option\" aria-selected={item.id === spaceId} onClick={() => { setPicking(false); go({ spaceId: item.id, documentId: null }); }}>\n <span className=\"w100n-docs-dot\" style={{ background: item.color ?? undefined }} />{item.name}\n </button></li>)}</ul>}\n </div>}\n <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input value={query} onChange={event => setQuery(event.target.value)} placeholder={t.search} aria-label={t.search} /></label>\n {present.length > 1 && <div className=\"w100n-docs-chips\" role=\"group\">{(['all', ...present] as const).map(item => <button key={item} type=\"button\" aria-pressed={kind === item} onClick={() => setKind(item)}>{item === 'all' ? t.all : t.kinds[item]}</button>)}</div>}\n <div className=\"w100n-docs-cards\">\n {list.error && failed(list.retry)}\n {list.loading && !list.data && <p className=\"w100n-docs-muted\">{t.loading}</p>}\n {list.data && !shown.length && <p className=\"w100n-docs-muted\">{list.data.length ? t.nothing : t.empty}</p>}\n {folders.map(folder => <div key={folder} className=\"w100n-docs-folder\" role=\"group\" aria-label={folder || t.loose}>\n {folders.length > 1 && <p className=\"w100n-docs-group\">{folder || t.loose}</p>}\n {shown.filter(item => (item.folder ?? '') === folder).map(item => {\n const Icon = icons[item.kind];\n return <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item.id)}>\n {item.thumbnailUrl ? <img src={item.thumbnailUrl} alt=\"\" className=\"w100n-docs-thumb\" /> : <span className=\"w100n-docs-thumb\" data-kind={item.kind}><Icon aria-hidden /></span>}\n <span className=\"w100n-docs-card-text\"><b>{item.name}</b><small>{t.kinds[item.kind]} · {date(item.updatedAt)}</small></span>\n </button>;\n })}\n </div>)}\n </div>\n </aside>}\n <main className=\"w100n-docs-stage\">{stage}</main>\n {doc.data && <aside className=\"w100n-docs-panel w100n-docs-island\">\n <div className=\"w100n-docs-tabs\" role=\"tablist\">{panelTabs.map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"tab\" aria-selected={tab === key} onClick={() => setTab(key)}><Icon aria-hidden />{label}</button>)}</div>\n {tab === 'outline' && (outline.length ? <nav className=\"w100n-docs-outline\">{outline.map(item =>\n <button key={item.id} type=\"button\" data-level={item.level} onClick={() => document.getElementById(item.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })}>{item.text}</button>)}</nav>\n : <p className=\"w100n-docs-muted\">{t.noOutline}</p>)}\n {tab === 'versions' && <div className=\"w100n-docs-versions\">\n {versions.error && failed(versions.retry)}\n {(versions.data ?? []).map(item => <button key={item.id} type=\"button\" aria-pressed={(versionId ?? 'current') === item.id || (!versionId && item.current)}\n onClick={() => { setRestoring('idle'); setVersion({ documentId: here.documentId, id: item.current ? null : item.id }); }}>\n <b>{date(item.createdAt)}{item.current && <span className=\"w100n-docs-badge\">{t.current}</span>}</b>\n <small>{[item.author?.name, size(item.size), item.note].filter(Boolean).join(' · ')}</small>\n </button>)}\n </div>}\n {tab === 'details' && <dl className=\"w100n-docs-details\">\n <dt>{t.kind}</dt><dd>{t.kinds[doc.data.kind]}</dd>\n <dt>{t.size}</dt><dd>{size(doc.data.size)}</dd>\n <dt>{t.updated}</dt><dd>{date(doc.data.updatedAt)}</dd>\n {doc.data.updatedBy && <><dt>{t.by}</dt><dd>{doc.data.updatedBy.name}</dd></>}\n <dt>{t.rights}</dt><dd>{[doc.data.rights.view && t.view, doc.data.rights.comment && t.comment, doc.data.rights.edit && t.edit].filter(Boolean).join(', ')}</dd>\n </dl>}\n {aside?.(doc.data)}\n </aside>}\n </div>\n </div>;\n}\n","import type { DocumentKind } from './types';\n\nconst byExtension: Record<string, DocumentKind> = {\n docx: 'docx', md: 'markdown', markdown: 'markdown', pdf: 'pdf', xlsx: 'sheet', csv: 'sheet', html: 'slides', htm: 'slides',\n};\n\nconst byMime: Record<string, DocumentKind> = {\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'text/markdown': 'markdown',\n 'application/pdf': 'pdf',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'sheet',\n 'text/csv': 'sheet',\n 'text/html': 'slides',\n};\n\nexport const kinds: DocumentKind[] = ['docx', 'markdown', 'pdf', 'sheet', 'slides'];\n\nexport function kindOf(name: string, mimeType?: string | null): DocumentKind | null {\n const extension = name.includes('.') ? name.split('.').pop()!.toLowerCase() : '';\n return byExtension[extension] ?? (mimeType ? byMime[mimeType.split(';')[0].trim().toLowerCase()] : undefined) ?? null;\n}\n\nexport function matches(doc: { name: string; kind: DocumentKind }, query: string, kind: DocumentKind | 'all') {\n const words = query.toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n return (kind === 'all' || doc.kind === kind) && words.every(word => doc.name.toLocaleLowerCase().includes(word));\n}\n","import type { DocumentKind, Language } from './types';\n\nconst en = {\n documents: 'Documents', loose: 'Without a folder', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n space: 'Project', pick: 'Choose a document on the left', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'By', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', sheet: 'Sheet', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', loose: 'Bez folderu', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n space: 'Projekt', pick: 'Wybierz dokument po lewej', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Autor', kind: 'Format', rights: 'Możesz', view: 'Oglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', sheet: 'Arkusz', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n};\n\nconst uk: Text = {\n documents: 'Документи', loose: 'Без теки', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n space: 'Проєкт', pick: 'Виберіть документ ліворуч', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Автор', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', sheet: 'Аркуш', unsupported: 'Цей файл поки не показується',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n","import { useEffect, useState } from 'react';\n\nexport type Loaded<T> = { data: T | null; error: Error | null; loading: boolean; retry: () => void };\n\nexport function useLoad<T>(load: (signal: AbortSignal) => Promise<T>, key: unknown[]): Loaded<T> {\n const [state, setState] = useState<{ data: T | null; error: Error | null; loading: boolean }>({ data: null, error: null, loading: true });\n const [attempt, setAttempt] = useState(0);\n useEffect(() => {\n const controller = new AbortController();\n setState(current => ({ ...current, loading: true, error: null }));\n load(controller.signal).then(\n data => { if (!controller.signal.aborted) setState({ data, error: null, loading: false }); },\n error => { if (!controller.signal.aborted) setState({ data: null, error: error instanceof Error ? error : new Error(String(error)), loading: false }); },\n );\n return () => controller.abort();\n }, [...key, attempt]);\n return { ...state, retry: () => setAttempt(n => n + 1) };\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function DocxView({ bytes, onOutline, failed }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useLayoutEffect(() => {\n let live = true;\n let width = 0;\n const root = box.current!;\n const fit = () => {\n const wrapper = root.querySelector<HTMLElement>('.w100n-docx-wrapper');\n if (wrapper && width) wrapper.style.zoom = String(Math.min(1, root.clientWidth / width));\n };\n const watch = new ResizeObserver(fit);\n root.replaceChildren();\n setError(false);\n import('docx-preview')\n .then(({ renderAsync }) => renderAsync(bytes, root, undefined, { inWrapper: true, className: 'w100n-docx', ignoreLastRenderedPageBreak: true }))\n .then(() => {\n if (!live) return;\n width = Math.max(0, ...[...root.querySelectorAll<HTMLElement>('section.w100n-docx')].map(page => page.offsetWidth));\n fit();\n watch.observe(root);\n onOutline(collect(root, '[class*=\"heading\"]', el => Number(/heading(\\d)/i.exec(el.className)?.[1] ?? 1)));\n })\n .catch(() => { if (live) setError(true); });\n return () => { live = false; watch.disconnect(); };\n }, [bytes, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-docx\" /></>;\n}\n","export type Heading = { id: string; level: number; text: string };\n\nlet last = 0;\n\nexport function collect(root: HTMLElement, selector: string, level: (el: Element) => number = el => Number(el.tagName.slice(1))): Heading[] {\n return [...root.querySelectorAll(selector)].flatMap(el => {\n const text = el.textContent?.trim() ?? '';\n if (!text) return [];\n if (!el.id) el.id = `w100n-docs-h${++last}`;\n return [{ id: el.id, level: Math.min(3, Math.max(1, level(el) || 1)), text }];\n });\n}\n","import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { useLayoutEffect, useRef } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function MarkdownView({ bytes, onOutline }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void }) {\n const box = useRef<HTMLElement>(null);\n useLayoutEffect(() => {\n const root = box.current!;\n root.innerHTML = DOMPurify.sanitize(marked.parse(new TextDecoder().decode(bytes), { async: false }));\n onOutline(collect(root, 'h1, h2, h3'));\n }, [bytes, onOutline]);\n return <article ref={box} className=\"w100n-docs-page w100n-docs-prose\" />;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { Heading } from './headings';\n\ntype Outline = { title: string; dest: string | unknown[] | null; items: Outline[] };\n\nlet last = 0;\n\nexport default function PdfView({ bytes, worker, onOutline, failed }: { bytes: ArrayBuffer; worker?: () => Worker; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useEffect(() => {\n const root = box.current!;\n const prefix = `w100n-docs-p${++last}`;\n let stop = false;\n let close = () => {};\n root.replaceChildren();\n setError(false);\n (async () => {\n const pdfjs = await import('pdfjs-dist');\n if (worker) pdfjs.GlobalWorkerOptions.workerPort ??= worker();\n const task = pdfjs.getDocument({ data: new Uint8Array(bytes.slice(0)) });\n close = () => { void task.destroy(); };\n const pdf = await task.promise;\n const width = Math.max(320, root.clientWidth - 48);\n for (let n = 1; n <= pdf.numPages && !stop; n++) {\n const page = await pdf.getPage(n);\n const scale = Math.min(2, width / page.getViewport({ scale: 1 }).width);\n const viewport = page.getViewport({ scale: scale * window.devicePixelRatio });\n const canvas = document.createElement('canvas');\n canvas.id = `${prefix}-${n}`;\n canvas.className = 'w100n-docs-sheet';\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n canvas.style.width = `${viewport.width / window.devicePixelRatio}px`;\n root.append(canvas);\n await page.render({ canvas, canvasContext: canvas.getContext('2d')!, viewport }).promise;\n }\n const flat = async (items: Outline[], level: number): Promise<Heading[]> => (await Promise.all(items.map(async item => {\n const dest = typeof item.dest === 'string' ? await pdf.getDestination(item.dest) : item.dest;\n const ref = Array.isArray(dest) ? dest[0] : null;\n const index = ref && typeof ref === 'object' ? await pdf.getPageIndex(ref as never) : null;\n const here = index === null ? [] : [{ id: `${prefix}-${index + 1}`, level, text: item.title }];\n return [...here, ...(level < 3 ? await flat(item.items ?? [], level + 1) : [])];\n }))).flat();\n if (!stop) onOutline(await flat(((await pdf.getOutline()) ?? []) as Outline[], 1));\n })().catch(() => { if (!stop) setError(true); });\n return () => { stop = true; close(); };\n }, [bytes, worker, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-pdf\" /></>;\n}\n","export default function SlidesView({ bytes, title }: { bytes: ArrayBuffer; title: string }) {\n return <iframe className=\"w100n-docs-slides\" sandbox=\"allow-scripts\" title={title} srcDoc={new TextDecoder().decode(bytes)} />;\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","DOMPurify","import_react","import_jsx_runtime","last","import_jsx_runtime","import_jsx_runtime","doc","versionId"]}
|
package/dist/index.css
CHANGED
|
@@ -241,6 +241,25 @@
|
|
|
241
241
|
margin: 0 -4px;
|
|
242
242
|
padding: 0 4px;
|
|
243
243
|
}
|
|
244
|
+
.w100n-docs-folder {
|
|
245
|
+
display: grid;
|
|
246
|
+
gap: 6px;
|
|
247
|
+
}
|
|
248
|
+
.w100n-docs-about {
|
|
249
|
+
display: grid;
|
|
250
|
+
gap: 8px;
|
|
251
|
+
margin-top: 14px;
|
|
252
|
+
padding-top: 12px;
|
|
253
|
+
border-top: 1px solid var(--docs-border);
|
|
254
|
+
}
|
|
255
|
+
.w100n-docs-group {
|
|
256
|
+
margin: 8px 4px 0;
|
|
257
|
+
color: var(--docs-muted);
|
|
258
|
+
font-size: 10.5px;
|
|
259
|
+
font-weight: 750;
|
|
260
|
+
letter-spacing: .08em;
|
|
261
|
+
text-transform: uppercase;
|
|
262
|
+
}
|
|
244
263
|
.w100n-docs-card {
|
|
245
264
|
display: flex;
|
|
246
265
|
align-items: center;
|
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/styles.css"],"sourcesContent":[".w100n-docs {\n --docs-bg: #faf9f6; --docs-panel: #fff; --docs-paper: #fff; --docs-border: #e6e3eb; --docs-text: #34303f; --docs-muted: #918b9f;\n --docs-hover: #f3effa; --docs-active: #ede5ff; --docs-accent: #7c3aed; --docs-shadow: 0 8px 24px rgb(32 24 64 / 7%);\n container-type: inline-size; display: flex; flex-direction: column; gap: 10px; height: 100%; min-height: 0; padding: 10px; box-sizing: border-box;\n background: var(--docs-bg); color: var(--docs-text); font-family: inherit; font-size: 13px; line-height: 1.5;\n}\n.w100n-docs[data-theme='dark'] {\n --docs-bg: #10111b; --docs-panel: #23212f; --docs-paper: #1b1a26; --docs-border: #383345; --docs-text: #eeeaf5; --docs-muted: #a39cb3;\n --docs-hover: #2d2a3c; --docs-active: #3a3150; --docs-accent: #c4a6ff; --docs-shadow: 0 8px 24px rgb(0 0 0 / 35%); color-scheme: dark;\n}\n.w100n-docs *, .w100n-docs *::before, .w100n-docs *::after { box-sizing: border-box; }\n.w100n-docs button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }\n.w100n-docs svg { width: 16px; height: 16px; flex-shrink: 0; }\n.w100n-docs-island { background: var(--docs-panel); border: 1px solid var(--docs-border); border-radius: 13px; box-shadow: var(--docs-shadow); }\n\n.w100n-docs-bar { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 10px; }\n.w100n-docs-end { display: flex; align-items: center; gap: 6px; margin-left: auto; }\n.w100n-docs-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; font-weight: 650; }\n.w100n-docs-icon { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 9px; color: var(--docs-muted); }\n.w100n-docs-icon:hover { background: var(--docs-hover); color: var(--docs-text); }\n.w100n-docs .w100n-docs-action { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 11px; border-radius: 9px; background: linear-gradient(135deg, #8b5cf6, #6d28d9); color: #fff; font-weight: 600; white-space: nowrap; }\n.w100n-docs .w100n-docs-action svg { width: 14px; height: 14px; } .w100n-docs .w100n-docs-action:disabled { opacity: .6; cursor: default; }\n.w100n-docs-badge { display: inline-flex; align-items: center; height: 20px; padding: 0 7px; border-radius: 6px; background: var(--docs-active); color: var(--docs-accent); font-size: 11px; font-weight: 650; white-space: nowrap; }\n\n.w100n-docs-body { flex: 1; min-height: 0; display: flex; gap: 10px; }\n.w100n-docs-list { width: 300px; flex-shrink: 0; display: flex; flex-direction: column; gap: 10px; padding: 12px; min-height: 0; }\n.w100n-docs-picker { position: relative; }\n.w100n-docs-field { display: flex; align-items: center; gap: 8px; width: 100%; height: 36px; padding: 0 10px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-bg); text-align: left; }\n.w100n-docs-field > svg:last-child:not(:first-child) { margin-left: auto; color: var(--docs-muted); }\n.w100n-docs-search > svg { color: var(--docs-muted); }\n.w100n-docs-search input { flex: 1; min-width: 0; border: 0; outline: none; background: transparent; color: inherit; font: inherit; }\n.w100n-docs-dot { width: 9px; height: 9px; border-radius: 3px; background: var(--docs-accent); flex-shrink: 0; }\n.w100n-docs-menu { position: absolute; z-index: 5; top: calc(100% + 4px); left: 0; right: 0; max-height: 280px; overflow-y: auto; margin: 0; padding: 5px; list-style: none; background: var(--docs-panel); border: 1px solid var(--docs-border); border-radius: 11px; box-shadow: var(--docs-shadow); }\n.w100n-docs-menu button { display: flex; align-items: center; gap: 8px; width: 100%; height: 32px; padding: 0 8px; border-radius: 8px; text-align: left; }\n.w100n-docs-menu button:hover, .w100n-docs-menu button[aria-selected='true'] { background: var(--docs-hover); }\n.w100n-docs-chips { display: flex; flex-wrap: wrap; gap: 6px; }\n.w100n-docs-chips button { height: 26px; padding: 0 9px; border: 1px solid var(--docs-border); border-radius: 8px; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n.w100n-docs-chips button[aria-pressed='true'] { border-color: transparent; background: var(--docs-active); color: var(--docs-accent); }\n.w100n-docs-cards { flex: 1; min-height: 0; overflow-y: auto; display: grid; align-content: start; gap: 6px; margin: 0 -4px; padding: 0 4px; }\n.w100n-docs-card { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px; border-radius: 11px; text-align: left; }\n.w100n-docs-card:hover { background: var(--docs-hover); }\n.w100n-docs-card[aria-current='true'] { background: var(--docs-active); }\n.w100n-docs-thumb { display: grid; place-items: center; width: 40px; height: 48px; flex-shrink: 0; border-radius: 8px; object-fit: cover; color: #fff; background: linear-gradient(135deg, #8b5cf6, #6d28d9); }\n.w100n-docs-thumb[data-kind='docx'] { background: linear-gradient(135deg, #3b82f6, #1d4ed8); }\n.w100n-docs-thumb[data-kind='pdf'] { background: linear-gradient(135deg, #f43f5e, #be123c); }\n.w100n-docs-thumb[data-kind='sheet'] { background: linear-gradient(135deg, #10b981, #047857); }\n.w100n-docs-thumb[data-kind='slides'] { background: linear-gradient(135deg, #f59e0b, #c2410c); }\n.w100n-docs-card-text { display: grid; min-width: 0; }\n.w100n-docs-card-text b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }\n.w100n-docs-card-text small, .w100n-docs-muted { color: var(--docs-muted); font-size: 12px; }\n\n.w100n-docs-stage { flex: 1; min-width: 0; min-height: 0; overflow: auto; display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 6px 4px 28px; }\n.w100n-docs-empty { margin: auto; display: grid; justify-items: center; gap: 10px; color: var(--docs-muted); }\n.w100n-docs-empty svg { width: 32px; height: 32px; }\n.w100n-docs-note { display: flex; align-items: center; gap: 10px; color: var(--docs-muted); }\n.w100n-docs-note button { color: var(--docs-accent); font-weight: 600; }\n.w100n-docs-page { width: min(820px, 100%); padding: 48px 56px; border-radius: 10px; background: var(--docs-paper); box-shadow: var(--docs-shadow); }\n.w100n-docs-prose { font-size: 15px; line-height: 1.7; overflow-wrap: anywhere; }\n.w100n-docs-prose :is(p, ul, ol, pre, table, blockquote, hr) { margin: 0 0 14px; }\n.w100n-docs-prose :is(ul, ol) { padding-left: 24px; } .w100n-docs-prose ul { list-style: disc; } .w100n-docs-prose ol { list-style: decimal; }\n.w100n-docs-prose li + li { margin-top: 4px; }\n.w100n-docs-prose blockquote { padding-left: 14px; border-left: 3px solid var(--docs-border); color: var(--docs-muted); }\n.w100n-docs-prose hr { border: 0; border-top: 1px solid var(--docs-border); }\n.w100n-docs-prose h1, .w100n-docs-prose h2, .w100n-docs-prose h3 { margin: 28px 0 12px; font-weight: 650; line-height: 1.3; scroll-margin-top: 12px; }\n.w100n-docs-prose > :first-child { margin-top: 0; }\n.w100n-docs-prose h1 { font-size: 28px; } .w100n-docs-prose h2 { font-size: 21px; } .w100n-docs-prose h3 { font-size: 17px; }\n.w100n-docs-prose a { color: var(--docs-accent); }\n.w100n-docs-prose pre, .w100n-docs-prose code { border-radius: 6px; background: var(--docs-hover); }\n.w100n-docs-prose pre { padding: 12px 14px; overflow-x: auto; } .w100n-docs-prose code { padding: 1px 5px; }\n.w100n-docs-prose table { border-collapse: collapse; display: block; overflow-x: auto; }\n.w100n-docs-prose th, .w100n-docs-prose td { padding: 6px 10px; border: 1px solid var(--docs-border); }\n.w100n-docs-prose img { max-width: 100%; }\n.w100n-docs-pdf, .w100n-docs-docx { display: flex; flex-direction: column; align-items: center; gap: 16px; width: 100%; }\n.w100n-docs-sheet { max-width: 100%; height: auto; border-radius: 6px; background: #fff; box-shadow: var(--docs-shadow); scroll-margin-top: 12px; }\n.w100n-docs-docx section.w100n-docx { box-shadow: var(--docs-shadow); border-radius: 6px; }\n.w100n-docs-docx .w100n-docx-wrapper { background: transparent; padding: 0; }\n.w100n-docs-slides { width: min(1040px, 100%); aspect-ratio: 16 / 9; border: 1px solid var(--docs-border); border-radius: 12px; background: #fff; box-shadow: var(--docs-shadow); }\n\n.w100n-docs-panel { width: 264px; flex-shrink: 0; display: flex; flex-direction: column; gap: 10px; padding: 12px; min-height: 0; overflow-y: auto; }\n.w100n-docs-tabs { display: flex; gap: 2px; padding: 3px; border-radius: 10px; background: var(--docs-bg); }\n.w100n-docs-tabs button { flex: 1; display: flex; align-items: center; justify-content: center; gap: 5px; height: 30px; border-radius: 8px; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n.w100n-docs-tabs svg { width: 14px; height: 14px; }\n.w100n-docs-tabs button[aria-selected='true'] { background: var(--docs-panel); color: var(--docs-text); box-shadow: 0 1px 3px rgb(0 0 0 / 8%); }\n.w100n-docs-outline { display: grid; gap: 2px; }\n.w100n-docs-outline button { padding: 5px 8px; border-radius: 7px; text-align: left; overflow-wrap: anywhere; }\n.w100n-docs-outline button:hover { background: var(--docs-hover); }\n.w100n-docs-outline button[data-level='2'] { padding-left: 20px; } .w100n-docs-outline button[data-level='3'] { padding-left: 32px; color: var(--docs-muted); }\n.w100n-docs-versions { display: grid; gap: 4px; }\n.w100n-docs-versions button { display: grid; gap: 2px; padding: 8px 10px; border-radius: 9px; text-align: left; }\n.w100n-docs-versions button:hover { background: var(--docs-hover); }\n.w100n-docs-versions button[aria-pressed='true'] { background: var(--docs-active); }\n.w100n-docs-versions b { display: flex; align-items: center; gap: 6px; font-weight: 600; }\n.w100n-docs-versions small { color: var(--docs-muted); font-size: 12px; }\n.w100n-docs-details { display: grid; grid-template-columns: auto 1fr; gap: 8px 12px; margin: 0; }\n.w100n-docs-details dt { color: var(--docs-muted); } .w100n-docs-details dd { margin: 0; overflow-wrap: anywhere; }\n\n@container (max-width: 1100px) { .w100n-docs-panel { width: 232px; } .w100n-docs-list { width: 264px; } }\n@container (max-width: 900px) { .w100n-docs-panel { display: none; } .w100n-docs-page { padding: 32px 28px; } }\n@container (max-width: 650px) {\n .w100n-docs-body { position: relative; }\n .w100n-docs-list { position: absolute; z-index: 4; inset: 0 auto 0 0; width: min(320px, 100%); }\n .w100n-docs-page { padding: 24px 18px; }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/styles.css"],"sourcesContent":[".w100n-docs {\n --docs-bg: #faf9f6; --docs-panel: #fff; --docs-paper: #fff; --docs-border: #e6e3eb; --docs-text: #34303f; --docs-muted: #918b9f;\n --docs-hover: #f3effa; --docs-active: #ede5ff; --docs-accent: #7c3aed; --docs-shadow: 0 8px 24px rgb(32 24 64 / 7%);\n container-type: inline-size; display: flex; flex-direction: column; gap: 10px; height: 100%; min-height: 0; padding: 10px; box-sizing: border-box;\n background: var(--docs-bg); color: var(--docs-text); font-family: inherit; font-size: 13px; line-height: 1.5;\n}\n.w100n-docs[data-theme='dark'] {\n --docs-bg: #10111b; --docs-panel: #23212f; --docs-paper: #1b1a26; --docs-border: #383345; --docs-text: #eeeaf5; --docs-muted: #a39cb3;\n --docs-hover: #2d2a3c; --docs-active: #3a3150; --docs-accent: #c4a6ff; --docs-shadow: 0 8px 24px rgb(0 0 0 / 35%); color-scheme: dark;\n}\n.w100n-docs *, .w100n-docs *::before, .w100n-docs *::after { box-sizing: border-box; }\n.w100n-docs button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }\n.w100n-docs svg { width: 16px; height: 16px; flex-shrink: 0; }\n.w100n-docs-island { background: var(--docs-panel); border: 1px solid var(--docs-border); border-radius: 13px; box-shadow: var(--docs-shadow); }\n\n.w100n-docs-bar { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 10px; }\n.w100n-docs-end { display: flex; align-items: center; gap: 6px; margin-left: auto; }\n.w100n-docs-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; font-weight: 650; }\n.w100n-docs-icon { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 9px; color: var(--docs-muted); }\n.w100n-docs-icon:hover { background: var(--docs-hover); color: var(--docs-text); }\n.w100n-docs .w100n-docs-action { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 11px; border-radius: 9px; background: linear-gradient(135deg, #8b5cf6, #6d28d9); color: #fff; font-weight: 600; white-space: nowrap; }\n.w100n-docs .w100n-docs-action svg { width: 14px; height: 14px; } .w100n-docs .w100n-docs-action:disabled { opacity: .6; cursor: default; }\n.w100n-docs-badge { display: inline-flex; align-items: center; height: 20px; padding: 0 7px; border-radius: 6px; background: var(--docs-active); color: var(--docs-accent); font-size: 11px; font-weight: 650; white-space: nowrap; }\n\n.w100n-docs-body { flex: 1; min-height: 0; display: flex; gap: 10px; }\n.w100n-docs-list { width: 300px; flex-shrink: 0; display: flex; flex-direction: column; gap: 10px; padding: 12px; min-height: 0; }\n.w100n-docs-picker { position: relative; }\n.w100n-docs-field { display: flex; align-items: center; gap: 8px; width: 100%; height: 36px; padding: 0 10px; border: 1px solid var(--docs-border); border-radius: 10px; background: var(--docs-bg); text-align: left; }\n.w100n-docs-field > svg:last-child:not(:first-child) { margin-left: auto; color: var(--docs-muted); }\n.w100n-docs-search > svg { color: var(--docs-muted); }\n.w100n-docs-search input { flex: 1; min-width: 0; border: 0; outline: none; background: transparent; color: inherit; font: inherit; }\n.w100n-docs-dot { width: 9px; height: 9px; border-radius: 3px; background: var(--docs-accent); flex-shrink: 0; }\n.w100n-docs-menu { position: absolute; z-index: 5; top: calc(100% + 4px); left: 0; right: 0; max-height: 280px; overflow-y: auto; margin: 0; padding: 5px; list-style: none; background: var(--docs-panel); border: 1px solid var(--docs-border); border-radius: 11px; box-shadow: var(--docs-shadow); }\n.w100n-docs-menu button { display: flex; align-items: center; gap: 8px; width: 100%; height: 32px; padding: 0 8px; border-radius: 8px; text-align: left; }\n.w100n-docs-menu button:hover, .w100n-docs-menu button[aria-selected='true'] { background: var(--docs-hover); }\n.w100n-docs-chips { display: flex; flex-wrap: wrap; gap: 6px; }\n.w100n-docs-chips button { height: 26px; padding: 0 9px; border: 1px solid var(--docs-border); border-radius: 8px; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n.w100n-docs-chips button[aria-pressed='true'] { border-color: transparent; background: var(--docs-active); color: var(--docs-accent); }\n.w100n-docs-cards { flex: 1; min-height: 0; overflow-y: auto; display: grid; align-content: start; gap: 6px; margin: 0 -4px; padding: 0 4px; }\n.w100n-docs-folder { display: grid; gap: 6px; }\n.w100n-docs-about { display: grid; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--docs-border); }\n.w100n-docs-group { margin: 8px 4px 0; color: var(--docs-muted); font-size: 10.5px; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }\n.w100n-docs-card { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px; border-radius: 11px; text-align: left; }\n.w100n-docs-card:hover { background: var(--docs-hover); }\n.w100n-docs-card[aria-current='true'] { background: var(--docs-active); }\n.w100n-docs-thumb { display: grid; place-items: center; width: 40px; height: 48px; flex-shrink: 0; border-radius: 8px; object-fit: cover; color: #fff; background: linear-gradient(135deg, #8b5cf6, #6d28d9); }\n.w100n-docs-thumb[data-kind='docx'] { background: linear-gradient(135deg, #3b82f6, #1d4ed8); }\n.w100n-docs-thumb[data-kind='pdf'] { background: linear-gradient(135deg, #f43f5e, #be123c); }\n.w100n-docs-thumb[data-kind='sheet'] { background: linear-gradient(135deg, #10b981, #047857); }\n.w100n-docs-thumb[data-kind='slides'] { background: linear-gradient(135deg, #f59e0b, #c2410c); }\n.w100n-docs-card-text { display: grid; min-width: 0; }\n.w100n-docs-card-text b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }\n.w100n-docs-card-text small, .w100n-docs-muted { color: var(--docs-muted); font-size: 12px; }\n\n.w100n-docs-stage { flex: 1; min-width: 0; min-height: 0; overflow: auto; display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 6px 4px 28px; }\n.w100n-docs-empty { margin: auto; display: grid; justify-items: center; gap: 10px; color: var(--docs-muted); }\n.w100n-docs-empty svg { width: 32px; height: 32px; }\n.w100n-docs-note { display: flex; align-items: center; gap: 10px; color: var(--docs-muted); }\n.w100n-docs-note button { color: var(--docs-accent); font-weight: 600; }\n.w100n-docs-page { width: min(820px, 100%); padding: 48px 56px; border-radius: 10px; background: var(--docs-paper); box-shadow: var(--docs-shadow); }\n.w100n-docs-prose { font-size: 15px; line-height: 1.7; overflow-wrap: anywhere; }\n.w100n-docs-prose :is(p, ul, ol, pre, table, blockquote, hr) { margin: 0 0 14px; }\n.w100n-docs-prose :is(ul, ol) { padding-left: 24px; } .w100n-docs-prose ul { list-style: disc; } .w100n-docs-prose ol { list-style: decimal; }\n.w100n-docs-prose li + li { margin-top: 4px; }\n.w100n-docs-prose blockquote { padding-left: 14px; border-left: 3px solid var(--docs-border); color: var(--docs-muted); }\n.w100n-docs-prose hr { border: 0; border-top: 1px solid var(--docs-border); }\n.w100n-docs-prose h1, .w100n-docs-prose h2, .w100n-docs-prose h3 { margin: 28px 0 12px; font-weight: 650; line-height: 1.3; scroll-margin-top: 12px; }\n.w100n-docs-prose > :first-child { margin-top: 0; }\n.w100n-docs-prose h1 { font-size: 28px; } .w100n-docs-prose h2 { font-size: 21px; } .w100n-docs-prose h3 { font-size: 17px; }\n.w100n-docs-prose a { color: var(--docs-accent); }\n.w100n-docs-prose pre, .w100n-docs-prose code { border-radius: 6px; background: var(--docs-hover); }\n.w100n-docs-prose pre { padding: 12px 14px; overflow-x: auto; } .w100n-docs-prose code { padding: 1px 5px; }\n.w100n-docs-prose table { border-collapse: collapse; display: block; overflow-x: auto; }\n.w100n-docs-prose th, .w100n-docs-prose td { padding: 6px 10px; border: 1px solid var(--docs-border); }\n.w100n-docs-prose img { max-width: 100%; }\n.w100n-docs-pdf, .w100n-docs-docx { display: flex; flex-direction: column; align-items: center; gap: 16px; width: 100%; }\n.w100n-docs-sheet { max-width: 100%; height: auto; border-radius: 6px; background: #fff; box-shadow: var(--docs-shadow); scroll-margin-top: 12px; }\n.w100n-docs-docx section.w100n-docx { box-shadow: var(--docs-shadow); border-radius: 6px; }\n.w100n-docs-docx .w100n-docx-wrapper { background: transparent; padding: 0; }\n.w100n-docs-slides { width: min(1040px, 100%); aspect-ratio: 16 / 9; border: 1px solid var(--docs-border); border-radius: 12px; background: #fff; box-shadow: var(--docs-shadow); }\n\n.w100n-docs-panel { width: 264px; flex-shrink: 0; display: flex; flex-direction: column; gap: 10px; padding: 12px; min-height: 0; overflow-y: auto; }\n.w100n-docs-tabs { display: flex; gap: 2px; padding: 3px; border-radius: 10px; background: var(--docs-bg); }\n.w100n-docs-tabs button { flex: 1; display: flex; align-items: center; justify-content: center; gap: 5px; height: 30px; border-radius: 8px; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n.w100n-docs-tabs svg { width: 14px; height: 14px; }\n.w100n-docs-tabs button[aria-selected='true'] { background: var(--docs-panel); color: var(--docs-text); box-shadow: 0 1px 3px rgb(0 0 0 / 8%); }\n.w100n-docs-outline { display: grid; gap: 2px; }\n.w100n-docs-outline button { padding: 5px 8px; border-radius: 7px; text-align: left; overflow-wrap: anywhere; }\n.w100n-docs-outline button:hover { background: var(--docs-hover); }\n.w100n-docs-outline button[data-level='2'] { padding-left: 20px; } .w100n-docs-outline button[data-level='3'] { padding-left: 32px; color: var(--docs-muted); }\n.w100n-docs-versions { display: grid; gap: 4px; }\n.w100n-docs-versions button { display: grid; gap: 2px; padding: 8px 10px; border-radius: 9px; text-align: left; }\n.w100n-docs-versions button:hover { background: var(--docs-hover); }\n.w100n-docs-versions button[aria-pressed='true'] { background: var(--docs-active); }\n.w100n-docs-versions b { display: flex; align-items: center; gap: 6px; font-weight: 600; }\n.w100n-docs-versions small { color: var(--docs-muted); font-size: 12px; }\n.w100n-docs-details { display: grid; grid-template-columns: auto 1fr; gap: 8px 12px; margin: 0; }\n.w100n-docs-details dt { color: var(--docs-muted); } .w100n-docs-details dd { margin: 0; overflow-wrap: anywhere; }\n\n@container (max-width: 1100px) { .w100n-docs-panel { width: 232px; } .w100n-docs-list { width: 264px; } }\n@container (max-width: 900px) { .w100n-docs-panel { display: none; } .w100n-docs-page { padding: 32px 28px; } }\n@container (max-width: 650px) {\n .w100n-docs-body { position: relative; }\n .w100n-docs-list { position: absolute; z-index: 4; inset: 0 auto 0 0; width: min(320px, 100%); }\n .w100n-docs-page { padding: 24px 18px; }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { D as DocumentsHost, L as Language, P as Place, a as DocumentKind } from './types-
|
|
4
|
-
export {
|
|
3
|
+
import { D as DocumentsHost, L as Language, P as Place, a as DocumentFile, b as DocumentKind } from './types-DiEpNWSu.cjs';
|
|
4
|
+
export { c as DocumentSummary, d as DocumentVersion, F as Fetch, e as Person, R as Rights, S as Space } from './types-DiEpNWSu.cjs';
|
|
5
5
|
|
|
6
|
-
declare function DocumentsWorkspace({ host, language, theme, place, onPlace, start, end }: {
|
|
6
|
+
declare function DocumentsWorkspace({ host, language, theme, place, onPlace, start, end, aside }: {
|
|
7
7
|
host: DocumentsHost;
|
|
8
8
|
language?: Language;
|
|
9
9
|
theme?: 'light' | 'dark';
|
|
@@ -11,6 +11,7 @@ declare function DocumentsWorkspace({ host, language, theme, place, onPlace, sta
|
|
|
11
11
|
onPlace?: (place: Place) => void;
|
|
12
12
|
start?: ReactNode;
|
|
13
13
|
end?: ReactNode;
|
|
14
|
+
aside?: (doc: DocumentFile) => ReactNode;
|
|
14
15
|
}): react.JSX.Element;
|
|
15
16
|
|
|
16
17
|
declare const kinds: DocumentKind[];
|
|
@@ -20,4 +21,4 @@ declare function matches(doc: {
|
|
|
20
21
|
kind: DocumentKind;
|
|
21
22
|
}, query: string, kind: DocumentKind | 'all'): boolean;
|
|
22
23
|
|
|
23
|
-
export { DocumentKind, DocumentsHost, DocumentsWorkspace, Language, Place, kindOf, kinds, matches };
|
|
24
|
+
export { DocumentFile, DocumentKind, DocumentsHost, DocumentsWorkspace, Language, Place, kindOf, kinds, matches };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { D as DocumentsHost, L as Language, P as Place, a as DocumentKind } from './types-
|
|
4
|
-
export {
|
|
3
|
+
import { D as DocumentsHost, L as Language, P as Place, a as DocumentFile, b as DocumentKind } from './types-DiEpNWSu.js';
|
|
4
|
+
export { c as DocumentSummary, d as DocumentVersion, F as Fetch, e as Person, R as Rights, S as Space } from './types-DiEpNWSu.js';
|
|
5
5
|
|
|
6
|
-
declare function DocumentsWorkspace({ host, language, theme, place, onPlace, start, end }: {
|
|
6
|
+
declare function DocumentsWorkspace({ host, language, theme, place, onPlace, start, end, aside }: {
|
|
7
7
|
host: DocumentsHost;
|
|
8
8
|
language?: Language;
|
|
9
9
|
theme?: 'light' | 'dark';
|
|
@@ -11,6 +11,7 @@ declare function DocumentsWorkspace({ host, language, theme, place, onPlace, sta
|
|
|
11
11
|
onPlace?: (place: Place) => void;
|
|
12
12
|
start?: ReactNode;
|
|
13
13
|
end?: ReactNode;
|
|
14
|
+
aside?: (doc: DocumentFile) => ReactNode;
|
|
14
15
|
}): react.JSX.Element;
|
|
15
16
|
|
|
16
17
|
declare const kinds: DocumentKind[];
|
|
@@ -20,4 +21,4 @@ declare function matches(doc: {
|
|
|
20
21
|
kind: DocumentKind;
|
|
21
22
|
}, query: string, kind: DocumentKind | 'all'): boolean;
|
|
22
23
|
|
|
23
|
-
export { DocumentKind, DocumentsHost, DocumentsWorkspace, Language, Place, kindOf, kinds, matches };
|
|
24
|
+
export { DocumentFile, DocumentKind, DocumentsHost, DocumentsWorkspace, Language, Place, kindOf, kinds, matches };
|
package/dist/index.js
CHANGED
|
@@ -6,12 +6,13 @@ import {
|
|
|
6
6
|
} from "./chunk-KEV4R7W5.js";
|
|
7
7
|
|
|
8
8
|
// src/DocumentsWorkspace.tsx
|
|
9
|
-
import { useState as useState4 } from "react";
|
|
9
|
+
import { useLayoutEffect as useLayoutEffect3, useRef as useRef4, useState as useState4 } from "react";
|
|
10
10
|
import { ChevronDown, FileSpreadsheet, FileText, FileType, Files, History, Info, ListTree, PanelLeftClose, PanelLeftOpen, Presentation, RotateCcw, Search } from "lucide-react";
|
|
11
11
|
|
|
12
12
|
// src/text.ts
|
|
13
13
|
var en = {
|
|
14
14
|
documents: "Documents",
|
|
15
|
+
loose: "Without a folder",
|
|
15
16
|
search: "Search documents",
|
|
16
17
|
all: "All",
|
|
17
18
|
empty: "No documents here yet",
|
|
@@ -44,6 +45,7 @@ var en = {
|
|
|
44
45
|
};
|
|
45
46
|
var pl = {
|
|
46
47
|
documents: "Dokumenty",
|
|
48
|
+
loose: "Bez folderu",
|
|
47
49
|
search: "Szukaj dokument\xF3w",
|
|
48
50
|
all: "Wszystkie",
|
|
49
51
|
empty: "Nie ma tu jeszcze dokument\xF3w",
|
|
@@ -76,6 +78,7 @@ var pl = {
|
|
|
76
78
|
};
|
|
77
79
|
var uk = {
|
|
78
80
|
documents: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0438",
|
|
81
|
+
loose: "\u0411\u0435\u0437 \u0442\u0435\u043A\u0438",
|
|
79
82
|
search: "\u041F\u043E\u0448\u0443\u043A \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0456\u0432",
|
|
80
83
|
all: "\u0423\u0441\u0456",
|
|
81
84
|
empty: "\u0422\u0443\u0442 \u0449\u0435 \u043D\u0435\u043C\u0430\u0454 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0456\u0432",
|
|
@@ -263,7 +266,7 @@ function SlidesView({ bytes, title }) {
|
|
|
263
266
|
// src/DocumentsWorkspace.tsx
|
|
264
267
|
import { Fragment as Fragment3, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
265
268
|
var icons = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };
|
|
266
|
-
function DocumentsWorkspace({ host, language = "en", theme = "light", place, onPlace, start, end }) {
|
|
269
|
+
function DocumentsWorkspace({ host, language = "en", theme = "light", place, onPlace, start, end, aside }) {
|
|
267
270
|
const t = texts[language];
|
|
268
271
|
const [own, setOwn] = useState4({ spaceId: null, documentId: null });
|
|
269
272
|
const here = place ?? own;
|
|
@@ -274,6 +277,11 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
274
277
|
const [query, setQuery] = useState4("");
|
|
275
278
|
const [kind, setKind] = useState4("all");
|
|
276
279
|
const [listOpen, setListOpen] = useState4(true);
|
|
280
|
+
const listRef = useRef4(null);
|
|
281
|
+
const overlays = () => listRef.current !== null && getComputedStyle(listRef.current).position === "absolute";
|
|
282
|
+
useLayoutEffect3(() => {
|
|
283
|
+
if (here.documentId && overlays()) setListOpen(false);
|
|
284
|
+
}, []);
|
|
277
285
|
const [picking, setPicking] = useState4(false);
|
|
278
286
|
const [tab, setTab] = useState4("outline");
|
|
279
287
|
const [outline, setOutline] = useState4([]);
|
|
@@ -288,6 +296,8 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
288
296
|
const versions = useLoad((signal) => here.documentId ? host.versions(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId]);
|
|
289
297
|
const content = useLoad((signal) => here.documentId ? host.content(here.documentId, versionId, { signal }) : Promise.resolve(null), [host, here.documentId, versionId]);
|
|
290
298
|
const shown = (list.data ?? []).filter((item) => matches(item, query, kind));
|
|
299
|
+
const present = kinds.filter((item) => list.data?.some((doc2) => doc2.kind === item));
|
|
300
|
+
const folders = [.../* @__PURE__ */ new Set(["", ...shown.map((item) => item.folder ?? "")])].filter((folder) => shown.some((item) => (item.folder ?? "") === folder));
|
|
291
301
|
const date = (iso) => new Intl.DateTimeFormat(language, { day: "numeric", month: "short", year: "numeric", hour: "2-digit", minute: "2-digit" }).format(new Date(iso));
|
|
292
302
|
const size = (bytes) => bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(0)} KB` : `${(bytes / 1048576).toFixed(1)} MB`;
|
|
293
303
|
const failed = (retry) => /* @__PURE__ */ jsxs3("div", { className: "w100n-docs-note", children: [
|
|
@@ -298,6 +308,7 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
298
308
|
setOutline([]);
|
|
299
309
|
setTab("outline");
|
|
300
310
|
go({ spaceId, documentId });
|
|
311
|
+
if (overlays()) setListOpen(false);
|
|
301
312
|
};
|
|
302
313
|
const restore = async (documentId, versionId2) => {
|
|
303
314
|
setRestoring("busy");
|
|
@@ -345,8 +356,8 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
345
356
|
end && /* @__PURE__ */ jsx5("div", { className: "w100n-docs-end", children: end })
|
|
346
357
|
] }),
|
|
347
358
|
/* @__PURE__ */ jsxs3("div", { className: "w100n-docs-body", children: [
|
|
348
|
-
listOpen && /* @__PURE__ */ jsxs3("aside", { className: "w100n-docs-list w100n-docs-island", "aria-label": t.documents, children: [
|
|
349
|
-
/* @__PURE__ */ jsxs3("div", { className: "w100n-docs-picker", children: [
|
|
359
|
+
listOpen && /* @__PURE__ */ jsxs3("aside", { ref: listRef, className: "w100n-docs-list w100n-docs-island", "aria-label": t.documents, children: [
|
|
360
|
+
(spaces.data?.length ?? 0) > 1 && /* @__PURE__ */ jsxs3("div", { className: "w100n-docs-picker", children: [
|
|
350
361
|
/* @__PURE__ */ jsxs3("button", { type: "button", className: "w100n-docs-field", "aria-haspopup": "listbox", "aria-expanded": picking, onClick: () => setPicking(!picking), children: [
|
|
351
362
|
/* @__PURE__ */ jsx5("span", { className: "w100n-docs-dot", style: { background: space?.color ?? void 0 } }),
|
|
352
363
|
space?.name ?? t.space,
|
|
@@ -364,25 +375,28 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
364
375
|
/* @__PURE__ */ jsx5(Search, { "aria-hidden": true }),
|
|
365
376
|
/* @__PURE__ */ jsx5("input", { value: query, onChange: (event) => setQuery(event.target.value), placeholder: t.search, "aria-label": t.search })
|
|
366
377
|
] }),
|
|
367
|
-
/* @__PURE__ */ jsx5("div", { className: "w100n-docs-chips", role: "group", children: ["all", ...
|
|
378
|
+
present.length > 1 && /* @__PURE__ */ jsx5("div", { className: "w100n-docs-chips", role: "group", children: ["all", ...present].map((item) => /* @__PURE__ */ jsx5("button", { type: "button", "aria-pressed": kind === item, onClick: () => setKind(item), children: item === "all" ? t.all : t.kinds[item] }, item)) }),
|
|
368
379
|
/* @__PURE__ */ jsxs3("div", { className: "w100n-docs-cards", children: [
|
|
369
380
|
list.error && failed(list.retry),
|
|
370
381
|
list.loading && !list.data && /* @__PURE__ */ jsx5("p", { className: "w100n-docs-muted", children: t.loading }),
|
|
371
382
|
list.data && !shown.length && /* @__PURE__ */ jsx5("p", { className: "w100n-docs-muted", children: list.data.length ? t.nothing : t.empty }),
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
/* @__PURE__ */ jsxs3("
|
|
377
|
-
/* @__PURE__ */ jsx5("
|
|
378
|
-
/* @__PURE__ */ jsxs3("
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
383
|
+
folders.map((folder) => /* @__PURE__ */ jsxs3("div", { className: "w100n-docs-folder", role: "group", "aria-label": folder || t.loose, children: [
|
|
384
|
+
folders.length > 1 && /* @__PURE__ */ jsx5("p", { className: "w100n-docs-group", children: folder || t.loose }),
|
|
385
|
+
shown.filter((item) => (item.folder ?? "") === folder).map((item) => {
|
|
386
|
+
const Icon = icons[item.kind];
|
|
387
|
+
return /* @__PURE__ */ jsxs3("button", { type: "button", className: "w100n-docs-card", "aria-current": item.id === here.documentId, onClick: () => open(item.id), children: [
|
|
388
|
+
item.thumbnailUrl ? /* @__PURE__ */ jsx5("img", { src: item.thumbnailUrl, alt: "", className: "w100n-docs-thumb" }) : /* @__PURE__ */ jsx5("span", { className: "w100n-docs-thumb", "data-kind": item.kind, children: /* @__PURE__ */ jsx5(Icon, { "aria-hidden": true }) }),
|
|
389
|
+
/* @__PURE__ */ jsxs3("span", { className: "w100n-docs-card-text", children: [
|
|
390
|
+
/* @__PURE__ */ jsx5("b", { children: item.name }),
|
|
391
|
+
/* @__PURE__ */ jsxs3("small", { children: [
|
|
392
|
+
t.kinds[item.kind],
|
|
393
|
+
" \xB7 ",
|
|
394
|
+
date(item.updatedAt)
|
|
395
|
+
] })
|
|
382
396
|
] })
|
|
383
|
-
] })
|
|
384
|
-
|
|
385
|
-
})
|
|
397
|
+
] }, item.id);
|
|
398
|
+
})
|
|
399
|
+
] }, folder))
|
|
386
400
|
] })
|
|
387
401
|
] }),
|
|
388
402
|
/* @__PURE__ */ jsx5("main", { className: "w100n-docs-stage", children: stage }),
|
|
@@ -427,7 +441,8 @@ function DocumentsWorkspace({ host, language = "en", theme = "light", place, onP
|
|
|
427
441
|
] }),
|
|
428
442
|
/* @__PURE__ */ jsx5("dt", { children: t.rights }),
|
|
429
443
|
/* @__PURE__ */ jsx5("dd", { children: [doc.data.rights.view && t.view, doc.data.rights.comment && t.comment, doc.data.rights.edit && t.edit].filter(Boolean).join(", ") })
|
|
430
|
-
] })
|
|
444
|
+
] }),
|
|
445
|
+
aside?.(doc.data)
|
|
431
446
|
] })
|
|
432
447
|
] })
|
|
433
448
|
] });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DocumentsWorkspace.tsx","../src/text.ts","../src/useLoad.ts","../src/viewers/DocxView.tsx","../src/viewers/headings.ts","../src/viewers/MarkdownView.tsx","../src/viewers/PdfView.tsx","../src/viewers/SlidesView.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport { ChevronDown, FileSpreadsheet, FileText, FileType, Files, History, Info, ListTree, PanelLeftClose, PanelLeftOpen, Presentation, RotateCcw, Search, type LucideIcon } from 'lucide-react';\nimport { kinds, matches } from './kinds';\nimport { texts } from './text';\nimport type { DocumentKind, DocumentsHost, Language, Place } from './types';\nimport { useLoad } from './useLoad';\nimport DocxView from './viewers/DocxView';\nimport type { Heading } from './viewers/headings';\nimport MarkdownView from './viewers/MarkdownView';\nimport PdfView from './viewers/PdfView';\nimport SlidesView from './viewers/SlidesView';\nimport './styles.css';\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Tab = 'outline' | 'versions' | 'details';\n\nexport function DocumentsWorkspace({ host, language = 'en', theme = 'light', place, onPlace, start, end }: {\n host: DocumentsHost; language?: Language; theme?: 'light' | 'dark'; place?: Place; onPlace?: (place: Place) => void; start?: ReactNode; end?: ReactNode;\n}) {\n const t = texts[language];\n const [own, setOwn] = useState<Place>({ spaceId: null, documentId: null });\n const here = place ?? own;\n const go = (next: Place) => { setOwn(next); onPlace?.(next); };\n const [query, setQuery] = useState('');\n const [kind, setKind] = useState<DocumentKind | 'all'>('all');\n const [listOpen, setListOpen] = useState(true);\n const [picking, setPicking] = useState(false);\n const [tab, setTab] = useState<Tab>('outline');\n const [outline, setOutline] = useState<Heading[]>([]);\n const [version, setVersion] = useState<{ documentId: string | null; id: string | null }>({ documentId: null, id: null });\n const versionId = version.documentId === here.documentId ? version.id : null;\n const [restoring, setRestoring] = useState<'idle' | 'busy' | 'failed'>('idle');\n\n const spaces = useLoad(signal => host.spaces({ signal }), [host]);\n const spaceId = here.spaceId ?? spaces.data?.[0]?.id ?? null;\n const space = spaces.data?.find(item => item.id === spaceId);\n const list = useLoad(signal => spaceId ? host.documents(spaceId, { signal }) : Promise.resolve([]), [host, spaceId]);\n const doc = useLoad(signal => here.documentId ? host.document(here.documentId, { signal }) : Promise.resolve(null), [host, here.documentId]);\n const versions = useLoad(signal => here.documentId ? host.versions(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId]);\n const content = useLoad(signal => here.documentId ? host.content(here.documentId, versionId, { signal }) : Promise.resolve(null), [host, here.documentId, versionId]);\n\n const shown = (list.data ?? []).filter(item => matches(item, query, kind));\n const date = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(new Date(iso));\n const size = (bytes: number) => bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(0)} KB` : `${(bytes / 1048576).toFixed(1)} MB`;\n const failed = (retry: () => void) => <div className=\"w100n-docs-note\">{t.failed}<button type=\"button\" onClick={retry}>{t.retry}</button></div>;\n const open = (documentId: string) => { setOutline([]); setTab('outline'); go({ spaceId, documentId }); };\n const restore = async (documentId: string, versionId: string) => {\n setRestoring('busy');\n try {\n await host.restore!(documentId, versionId);\n } catch {\n setRestoring('failed');\n return;\n }\n setRestoring('idle');\n setVersion({ documentId, id: null });\n versions.retry();\n doc.retry();\n list.retry();\n };\n\n let stage: ReactNode = <div className=\"w100n-docs-empty\"><FileText aria-hidden />{t.pick}</div>;\n if (here.documentId) {\n if (doc.error || content.error) stage = failed(() => { doc.retry(); content.retry(); });\n else if (!doc.data || !content.data) stage = <div className=\"w100n-docs-empty\">{t.loading}</div>;\n else if (doc.data.kind === 'markdown') stage = <MarkdownView bytes={content.data} onOutline={setOutline} />;\n else if (doc.data.kind === 'docx') stage = <DocxView bytes={content.data} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'pdf') stage = <PdfView bytes={content.data} worker={host.pdfWorker} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'slides') stage = <SlidesView bytes={content.data} title={doc.data.name} />;\n else stage = <div className=\"w100n-docs-empty\">{t.unsupported}</div>;\n }\n\n const panelTabs: [Tab, LucideIcon, string][] = [['outline', ListTree, t.outline], ['versions', History, t.versions], ['details', Info, t.details]];\n return <div className=\"w100n-docs\" data-theme={theme}>\n <header className=\"w100n-docs-bar w100n-docs-island\">\n {start}\n <button type=\"button\" className=\"w100n-docs-icon\" onClick={() => setListOpen(!listOpen)} aria-label={listOpen ? t.closeList : t.openList} title={listOpen ? t.closeList : t.openList}>\n {listOpen ? <PanelLeftClose /> : <PanelLeftOpen />}\n </button>\n <strong className=\"w100n-docs-title\">{doc.data?.name ?? t.documents}</strong>\n {doc.data && <span className=\"w100n-docs-badge\" data-kind={doc.data.kind}>{t.kinds[doc.data.kind]}</span>}\n {versionId && <span className=\"w100n-docs-badge\">{versions.data?.find(v => v.id === versionId) && date(versions.data.find(v => v.id === versionId)!.createdAt)}</span>}\n {versionId && here.documentId && host.restore && doc.data?.rights.edit && <button type=\"button\" className=\"w100n-docs-action\" disabled={restoring === 'busy'} onClick={() => void restore(here.documentId!, versionId)}>\n <RotateCcw aria-hidden />{t.restore}\n </button>}\n {restoring === 'failed' && <span className=\"w100n-docs-muted\">{t.restoreFailed}</span>}\n {end && <div className=\"w100n-docs-end\">{end}</div>}\n </header>\n <div className=\"w100n-docs-body\">\n {listOpen && <aside className=\"w100n-docs-list w100n-docs-island\" aria-label={t.documents}>\n <div className=\"w100n-docs-picker\">\n <button type=\"button\" className=\"w100n-docs-field\" aria-haspopup=\"listbox\" aria-expanded={picking} onClick={() => setPicking(!picking)}>\n <span className=\"w100n-docs-dot\" style={{ background: space?.color ?? undefined }} />{space?.name ?? t.space}<ChevronDown aria-hidden />\n </button>\n {picking && <ul role=\"listbox\" className=\"w100n-docs-menu\">{(spaces.data ?? []).map(item => <li key={item.id}>\n <button type=\"button\" role=\"option\" aria-selected={item.id === spaceId} onClick={() => { setPicking(false); go({ spaceId: item.id, documentId: null }); }}>\n <span className=\"w100n-docs-dot\" style={{ background: item.color ?? undefined }} />{item.name}\n </button></li>)}</ul>}\n </div>\n <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input value={query} onChange={event => setQuery(event.target.value)} placeholder={t.search} aria-label={t.search} /></label>\n <div className=\"w100n-docs-chips\" role=\"group\">{(['all', ...kinds] as const).map(item => <button key={item} type=\"button\" aria-pressed={kind === item} onClick={() => setKind(item)}>{item === 'all' ? t.all : t.kinds[item]}</button>)}</div>\n <div className=\"w100n-docs-cards\">\n {list.error && failed(list.retry)}\n {list.loading && !list.data && <p className=\"w100n-docs-muted\">{t.loading}</p>}\n {list.data && !shown.length && <p className=\"w100n-docs-muted\">{list.data.length ? t.nothing : t.empty}</p>}\n {shown.map(item => {\n const Icon = icons[item.kind];\n return <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item.id)}>\n {item.thumbnailUrl ? <img src={item.thumbnailUrl} alt=\"\" className=\"w100n-docs-thumb\" /> : <span className=\"w100n-docs-thumb\" data-kind={item.kind}><Icon aria-hidden /></span>}\n <span className=\"w100n-docs-card-text\"><b>{item.name}</b><small>{t.kinds[item.kind]} · {date(item.updatedAt)}</small></span>\n </button>;\n })}\n </div>\n </aside>}\n <main className=\"w100n-docs-stage\">{stage}</main>\n {doc.data && <aside className=\"w100n-docs-panel w100n-docs-island\">\n <div className=\"w100n-docs-tabs\" role=\"tablist\">{panelTabs.map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"tab\" aria-selected={tab === key} onClick={() => setTab(key)}><Icon aria-hidden />{label}</button>)}</div>\n {tab === 'outline' && (outline.length ? <nav className=\"w100n-docs-outline\">{outline.map(item =>\n <button key={item.id} type=\"button\" data-level={item.level} onClick={() => document.getElementById(item.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })}>{item.text}</button>)}</nav>\n : <p className=\"w100n-docs-muted\">{t.noOutline}</p>)}\n {tab === 'versions' && <div className=\"w100n-docs-versions\">\n {versions.error && failed(versions.retry)}\n {(versions.data ?? []).map(item => <button key={item.id} type=\"button\" aria-pressed={(versionId ?? 'current') === item.id || (!versionId && item.current)}\n onClick={() => { setRestoring('idle'); setVersion({ documentId: here.documentId, id: item.current ? null : item.id }); }}>\n <b>{date(item.createdAt)}{item.current && <span className=\"w100n-docs-badge\">{t.current}</span>}</b>\n <small>{[item.author?.name, size(item.size), item.note].filter(Boolean).join(' · ')}</small>\n </button>)}\n </div>}\n {tab === 'details' && <dl className=\"w100n-docs-details\">\n <dt>{t.kind}</dt><dd>{t.kinds[doc.data.kind]}</dd>\n <dt>{t.size}</dt><dd>{size(doc.data.size)}</dd>\n <dt>{t.updated}</dt><dd>{date(doc.data.updatedAt)}</dd>\n {doc.data.updatedBy && <><dt>{t.by}</dt><dd>{doc.data.updatedBy.name}</dd></>}\n <dt>{t.rights}</dt><dd>{[doc.data.rights.view && t.view, doc.data.rights.comment && t.comment, doc.data.rights.edit && t.edit].filter(Boolean).join(', ')}</dd>\n </dl>}\n </aside>}\n </div>\n </div>;\n}\n","import type { DocumentKind, Language } from './types';\n\nconst en = {\n documents: 'Documents', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n space: 'Project', pick: 'Choose a document on the left', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'By', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', sheet: 'Sheet', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n space: 'Projekt', pick: 'Wybierz dokument po lewej', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Autor', kind: 'Format', rights: 'Możesz', view: 'Oglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', sheet: 'Arkusz', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n};\n\nconst uk: Text = {\n documents: 'Документи', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n space: 'Проєкт', pick: 'Виберіть документ ліворуч', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Автор', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', sheet: 'Аркуш', unsupported: 'Цей файл поки не показується',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n","import { useEffect, useState } from 'react';\n\nexport type Loaded<T> = { data: T | null; error: Error | null; loading: boolean; retry: () => void };\n\nexport function useLoad<T>(load: (signal: AbortSignal) => Promise<T>, key: unknown[]): Loaded<T> {\n const [state, setState] = useState<{ data: T | null; error: Error | null; loading: boolean }>({ data: null, error: null, loading: true });\n const [attempt, setAttempt] = useState(0);\n useEffect(() => {\n const controller = new AbortController();\n setState(current => ({ ...current, loading: true, error: null }));\n load(controller.signal).then(\n data => { if (!controller.signal.aborted) setState({ data, error: null, loading: false }); },\n error => { if (!controller.signal.aborted) setState({ data: null, error: error instanceof Error ? error : new Error(String(error)), loading: false }); },\n );\n return () => controller.abort();\n }, [...key, attempt]);\n return { ...state, retry: () => setAttempt(n => n + 1) };\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function DocxView({ bytes, onOutline, failed }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useLayoutEffect(() => {\n let live = true;\n let width = 0;\n const root = box.current!;\n const fit = () => {\n const wrapper = root.querySelector<HTMLElement>('.w100n-docx-wrapper');\n if (wrapper && width) wrapper.style.zoom = String(Math.min(1, root.clientWidth / width));\n };\n const watch = new ResizeObserver(fit);\n root.replaceChildren();\n setError(false);\n import('docx-preview')\n .then(({ renderAsync }) => renderAsync(bytes, root, undefined, { inWrapper: true, className: 'w100n-docx', ignoreLastRenderedPageBreak: true }))\n .then(() => {\n if (!live) return;\n width = Math.max(0, ...[...root.querySelectorAll<HTMLElement>('section.w100n-docx')].map(page => page.offsetWidth));\n fit();\n watch.observe(root);\n onOutline(collect(root, '[class*=\"heading\"]', el => Number(/heading(\\d)/i.exec(el.className)?.[1] ?? 1)));\n })\n .catch(() => { if (live) setError(true); });\n return () => { live = false; watch.disconnect(); };\n }, [bytes, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-docx\" /></>;\n}\n","export type Heading = { id: string; level: number; text: string };\n\nlet last = 0;\n\nexport function collect(root: HTMLElement, selector: string, level: (el: Element) => number = el => Number(el.tagName.slice(1))): Heading[] {\n return [...root.querySelectorAll(selector)].flatMap(el => {\n const text = el.textContent?.trim() ?? '';\n if (!text) return [];\n if (!el.id) el.id = `w100n-docs-h${++last}`;\n return [{ id: el.id, level: Math.min(3, Math.max(1, level(el) || 1)), text }];\n });\n}\n","import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { useLayoutEffect, useRef } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function MarkdownView({ bytes, onOutline }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void }) {\n const box = useRef<HTMLElement>(null);\n useLayoutEffect(() => {\n const root = box.current!;\n root.innerHTML = DOMPurify.sanitize(marked.parse(new TextDecoder().decode(bytes), { async: false }));\n onOutline(collect(root, 'h1, h2, h3'));\n }, [bytes, onOutline]);\n return <article ref={box} className=\"w100n-docs-page w100n-docs-prose\" />;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { Heading } from './headings';\n\ntype Outline = { title: string; dest: string | unknown[] | null; items: Outline[] };\n\nlet last = 0;\n\nexport default function PdfView({ bytes, worker, onOutline, failed }: { bytes: ArrayBuffer; worker?: () => Worker; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useEffect(() => {\n const root = box.current!;\n const prefix = `w100n-docs-p${++last}`;\n let stop = false;\n let close = () => {};\n root.replaceChildren();\n setError(false);\n (async () => {\n const pdfjs = await import('pdfjs-dist');\n if (worker) pdfjs.GlobalWorkerOptions.workerPort ??= worker();\n const task = pdfjs.getDocument({ data: new Uint8Array(bytes.slice(0)) });\n close = () => { void task.destroy(); };\n const pdf = await task.promise;\n const width = Math.max(320, root.clientWidth - 48);\n for (let n = 1; n <= pdf.numPages && !stop; n++) {\n const page = await pdf.getPage(n);\n const scale = Math.min(2, width / page.getViewport({ scale: 1 }).width);\n const viewport = page.getViewport({ scale: scale * window.devicePixelRatio });\n const canvas = document.createElement('canvas');\n canvas.id = `${prefix}-${n}`;\n canvas.className = 'w100n-docs-sheet';\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n canvas.style.width = `${viewport.width / window.devicePixelRatio}px`;\n root.append(canvas);\n await page.render({ canvas, canvasContext: canvas.getContext('2d')!, viewport }).promise;\n }\n const flat = async (items: Outline[], level: number): Promise<Heading[]> => (await Promise.all(items.map(async item => {\n const dest = typeof item.dest === 'string' ? await pdf.getDestination(item.dest) : item.dest;\n const ref = Array.isArray(dest) ? dest[0] : null;\n const index = ref && typeof ref === 'object' ? await pdf.getPageIndex(ref as never) : null;\n const here = index === null ? [] : [{ id: `${prefix}-${index + 1}`, level, text: item.title }];\n return [...here, ...(level < 3 ? await flat(item.items ?? [], level + 1) : [])];\n }))).flat();\n if (!stop) onOutline(await flat(((await pdf.getOutline()) ?? []) as Outline[], 1));\n })().catch(() => { if (!stop) setError(true); });\n return () => { stop = true; close(); };\n }, [bytes, worker, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-pdf\" /></>;\n}\n","export default function SlidesView({ bytes, title }: { bytes: ArrayBuffer; title: string }) {\n return <iframe className=\"w100n-docs-slides\" sandbox=\"allow-scripts\" title={title} srcDoc={new TextDecoder().decode(bytes)} />;\n}\n"],"mappings":"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","names":["useState","useState","useState","useLayoutEffect","useRef","jsx","useRef","useLayoutEffect","useEffect","useRef","useState","Fragment","jsx","jsxs","last","jsx","Fragment","jsx","jsxs","useState","versionId"]}
|
|
1
|
+
{"version":3,"sources":["../src/DocumentsWorkspace.tsx","../src/text.ts","../src/useLoad.ts","../src/viewers/DocxView.tsx","../src/viewers/headings.ts","../src/viewers/MarkdownView.tsx","../src/viewers/PdfView.tsx","../src/viewers/SlidesView.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState, type ReactNode } from 'react';\nimport { ChevronDown, FileSpreadsheet, FileText, FileType, Files, History, Info, ListTree, PanelLeftClose, PanelLeftOpen, Presentation, RotateCcw, Search, type LucideIcon } from 'lucide-react';\nimport { kinds, matches } from './kinds';\nimport { texts } from './text';\nimport type { DocumentFile, DocumentKind, DocumentsHost, Language, Place } from './types';\nimport { useLoad } from './useLoad';\nimport DocxView from './viewers/DocxView';\nimport type { Heading } from './viewers/headings';\nimport MarkdownView from './viewers/MarkdownView';\nimport PdfView from './viewers/PdfView';\nimport SlidesView from './viewers/SlidesView';\nimport './styles.css';\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Tab = 'outline' | 'versions' | 'details';\n\nexport function DocumentsWorkspace({ host, language = 'en', theme = 'light', place, onPlace, start, end, aside }: {\n host: DocumentsHost; language?: Language; theme?: 'light' | 'dark'; place?: Place; onPlace?: (place: Place) => void; start?: ReactNode; end?: ReactNode;\n aside?: (doc: DocumentFile) => ReactNode;\n}) {\n const t = texts[language];\n const [own, setOwn] = useState<Place>({ spaceId: null, documentId: null });\n const here = place ?? own;\n const go = (next: Place) => { setOwn(next); onPlace?.(next); };\n const [query, setQuery] = useState('');\n const [kind, setKind] = useState<DocumentKind | 'all'>('all');\n const [listOpen, setListOpen] = useState(true);\n const listRef = useRef<HTMLElement>(null);\n const overlays = () => listRef.current !== null && getComputedStyle(listRef.current).position === 'absolute';\n useLayoutEffect(() => {\n if (here.documentId && overlays()) setListOpen(false);\n }, []);\n const [picking, setPicking] = useState(false);\n const [tab, setTab] = useState<Tab>('outline');\n const [outline, setOutline] = useState<Heading[]>([]);\n const [version, setVersion] = useState<{ documentId: string | null; id: string | null }>({ documentId: null, id: null });\n const versionId = version.documentId === here.documentId ? version.id : null;\n const [restoring, setRestoring] = useState<'idle' | 'busy' | 'failed'>('idle');\n\n const spaces = useLoad(signal => host.spaces({ signal }), [host]);\n const spaceId = here.spaceId ?? spaces.data?.[0]?.id ?? null;\n const space = spaces.data?.find(item => item.id === spaceId);\n const list = useLoad(signal => spaceId ? host.documents(spaceId, { signal }) : Promise.resolve([]), [host, spaceId]);\n const doc = useLoad(signal => here.documentId ? host.document(here.documentId, { signal }) : Promise.resolve(null), [host, here.documentId]);\n const versions = useLoad(signal => here.documentId ? host.versions(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId]);\n const content = useLoad(signal => here.documentId ? host.content(here.documentId, versionId, { signal }) : Promise.resolve(null), [host, here.documentId, versionId]);\n\n const shown = (list.data ?? []).filter(item => matches(item, query, kind));\n const present = kinds.filter(item => list.data?.some(doc => doc.kind === item));\n const folders = [...new Set(['', ...shown.map(item => item.folder ?? '')])].filter(folder => shown.some(item => (item.folder ?? '') === folder));\n const date = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(new Date(iso));\n const size = (bytes: number) => bytes < 1024 ? `${bytes} B` : bytes < 1048576 ? `${(bytes / 1024).toFixed(0)} KB` : `${(bytes / 1048576).toFixed(1)} MB`;\n const failed = (retry: () => void) => <div className=\"w100n-docs-note\">{t.failed}<button type=\"button\" onClick={retry}>{t.retry}</button></div>;\n const open = (documentId: string) => {\n setOutline([]);\n setTab('outline');\n go({ spaceId, documentId });\n if (overlays()) setListOpen(false);\n };\n const restore = async (documentId: string, versionId: string) => {\n setRestoring('busy');\n try {\n await host.restore!(documentId, versionId);\n } catch {\n setRestoring('failed');\n return;\n }\n setRestoring('idle');\n setVersion({ documentId, id: null });\n versions.retry();\n doc.retry();\n list.retry();\n };\n\n let stage: ReactNode = <div className=\"w100n-docs-empty\"><FileText aria-hidden />{t.pick}</div>;\n if (here.documentId) {\n if (doc.error || content.error) stage = failed(() => { doc.retry(); content.retry(); });\n else if (!doc.data || !content.data) stage = <div className=\"w100n-docs-empty\">{t.loading}</div>;\n else if (doc.data.kind === 'markdown') stage = <MarkdownView bytes={content.data} onOutline={setOutline} />;\n else if (doc.data.kind === 'docx') stage = <DocxView bytes={content.data} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'pdf') stage = <PdfView bytes={content.data} worker={host.pdfWorker} onOutline={setOutline} failed={t.failed} />;\n else if (doc.data.kind === 'slides') stage = <SlidesView bytes={content.data} title={doc.data.name} />;\n else stage = <div className=\"w100n-docs-empty\">{t.unsupported}</div>;\n }\n\n const panelTabs: [Tab, LucideIcon, string][] = [['outline', ListTree, t.outline], ['versions', History, t.versions], ['details', Info, t.details]];\n return <div className=\"w100n-docs\" data-theme={theme}>\n <header className=\"w100n-docs-bar w100n-docs-island\">\n {start}\n <button type=\"button\" className=\"w100n-docs-icon\" onClick={() => setListOpen(!listOpen)} aria-label={listOpen ? t.closeList : t.openList} title={listOpen ? t.closeList : t.openList}>\n {listOpen ? <PanelLeftClose /> : <PanelLeftOpen />}\n </button>\n <strong className=\"w100n-docs-title\">{doc.data?.name ?? t.documents}</strong>\n {doc.data && <span className=\"w100n-docs-badge\" data-kind={doc.data.kind}>{t.kinds[doc.data.kind]}</span>}\n {versionId && <span className=\"w100n-docs-badge\">{versions.data?.find(v => v.id === versionId) && date(versions.data.find(v => v.id === versionId)!.createdAt)}</span>}\n {versionId && here.documentId && host.restore && doc.data?.rights.edit && <button type=\"button\" className=\"w100n-docs-action\" disabled={restoring === 'busy'} onClick={() => void restore(here.documentId!, versionId)}>\n <RotateCcw aria-hidden />{t.restore}\n </button>}\n {restoring === 'failed' && <span className=\"w100n-docs-muted\">{t.restoreFailed}</span>}\n {end && <div className=\"w100n-docs-end\">{end}</div>}\n </header>\n <div className=\"w100n-docs-body\">\n {listOpen && <aside ref={listRef} className=\"w100n-docs-list w100n-docs-island\" aria-label={t.documents}>\n {(spaces.data?.length ?? 0) > 1 && <div className=\"w100n-docs-picker\">\n <button type=\"button\" className=\"w100n-docs-field\" aria-haspopup=\"listbox\" aria-expanded={picking} onClick={() => setPicking(!picking)}>\n <span className=\"w100n-docs-dot\" style={{ background: space?.color ?? undefined }} />{space?.name ?? t.space}<ChevronDown aria-hidden />\n </button>\n {picking && <ul role=\"listbox\" className=\"w100n-docs-menu\">{(spaces.data ?? []).map(item => <li key={item.id}>\n <button type=\"button\" role=\"option\" aria-selected={item.id === spaceId} onClick={() => { setPicking(false); go({ spaceId: item.id, documentId: null }); }}>\n <span className=\"w100n-docs-dot\" style={{ background: item.color ?? undefined }} />{item.name}\n </button></li>)}</ul>}\n </div>}\n <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input value={query} onChange={event => setQuery(event.target.value)} placeholder={t.search} aria-label={t.search} /></label>\n {present.length > 1 && <div className=\"w100n-docs-chips\" role=\"group\">{(['all', ...present] as const).map(item => <button key={item} type=\"button\" aria-pressed={kind === item} onClick={() => setKind(item)}>{item === 'all' ? t.all : t.kinds[item]}</button>)}</div>}\n <div className=\"w100n-docs-cards\">\n {list.error && failed(list.retry)}\n {list.loading && !list.data && <p className=\"w100n-docs-muted\">{t.loading}</p>}\n {list.data && !shown.length && <p className=\"w100n-docs-muted\">{list.data.length ? t.nothing : t.empty}</p>}\n {folders.map(folder => <div key={folder} className=\"w100n-docs-folder\" role=\"group\" aria-label={folder || t.loose}>\n {folders.length > 1 && <p className=\"w100n-docs-group\">{folder || t.loose}</p>}\n {shown.filter(item => (item.folder ?? '') === folder).map(item => {\n const Icon = icons[item.kind];\n return <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item.id)}>\n {item.thumbnailUrl ? <img src={item.thumbnailUrl} alt=\"\" className=\"w100n-docs-thumb\" /> : <span className=\"w100n-docs-thumb\" data-kind={item.kind}><Icon aria-hidden /></span>}\n <span className=\"w100n-docs-card-text\"><b>{item.name}</b><small>{t.kinds[item.kind]} · {date(item.updatedAt)}</small></span>\n </button>;\n })}\n </div>)}\n </div>\n </aside>}\n <main className=\"w100n-docs-stage\">{stage}</main>\n {doc.data && <aside className=\"w100n-docs-panel w100n-docs-island\">\n <div className=\"w100n-docs-tabs\" role=\"tablist\">{panelTabs.map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"tab\" aria-selected={tab === key} onClick={() => setTab(key)}><Icon aria-hidden />{label}</button>)}</div>\n {tab === 'outline' && (outline.length ? <nav className=\"w100n-docs-outline\">{outline.map(item =>\n <button key={item.id} type=\"button\" data-level={item.level} onClick={() => document.getElementById(item.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })}>{item.text}</button>)}</nav>\n : <p className=\"w100n-docs-muted\">{t.noOutline}</p>)}\n {tab === 'versions' && <div className=\"w100n-docs-versions\">\n {versions.error && failed(versions.retry)}\n {(versions.data ?? []).map(item => <button key={item.id} type=\"button\" aria-pressed={(versionId ?? 'current') === item.id || (!versionId && item.current)}\n onClick={() => { setRestoring('idle'); setVersion({ documentId: here.documentId, id: item.current ? null : item.id }); }}>\n <b>{date(item.createdAt)}{item.current && <span className=\"w100n-docs-badge\">{t.current}</span>}</b>\n <small>{[item.author?.name, size(item.size), item.note].filter(Boolean).join(' · ')}</small>\n </button>)}\n </div>}\n {tab === 'details' && <dl className=\"w100n-docs-details\">\n <dt>{t.kind}</dt><dd>{t.kinds[doc.data.kind]}</dd>\n <dt>{t.size}</dt><dd>{size(doc.data.size)}</dd>\n <dt>{t.updated}</dt><dd>{date(doc.data.updatedAt)}</dd>\n {doc.data.updatedBy && <><dt>{t.by}</dt><dd>{doc.data.updatedBy.name}</dd></>}\n <dt>{t.rights}</dt><dd>{[doc.data.rights.view && t.view, doc.data.rights.comment && t.comment, doc.data.rights.edit && t.edit].filter(Boolean).join(', ')}</dd>\n </dl>}\n {aside?.(doc.data)}\n </aside>}\n </div>\n </div>;\n}\n","import type { DocumentKind, Language } from './types';\n\nconst en = {\n documents: 'Documents', loose: 'Without a folder', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n space: 'Project', pick: 'Choose a document on the left', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'By', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', sheet: 'Sheet', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', loose: 'Bez folderu', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n space: 'Projekt', pick: 'Wybierz dokument po lewej', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Autor', kind: 'Format', rights: 'Możesz', view: 'Oglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', sheet: 'Arkusz', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n};\n\nconst uk: Text = {\n documents: 'Документи', loose: 'Без теки', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n space: 'Проєкт', pick: 'Виберіть документ ліворуч', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Автор', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', sheet: 'Аркуш', unsupported: 'Цей файл поки не показується',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n","import { useEffect, useState } from 'react';\n\nexport type Loaded<T> = { data: T | null; error: Error | null; loading: boolean; retry: () => void };\n\nexport function useLoad<T>(load: (signal: AbortSignal) => Promise<T>, key: unknown[]): Loaded<T> {\n const [state, setState] = useState<{ data: T | null; error: Error | null; loading: boolean }>({ data: null, error: null, loading: true });\n const [attempt, setAttempt] = useState(0);\n useEffect(() => {\n const controller = new AbortController();\n setState(current => ({ ...current, loading: true, error: null }));\n load(controller.signal).then(\n data => { if (!controller.signal.aborted) setState({ data, error: null, loading: false }); },\n error => { if (!controller.signal.aborted) setState({ data: null, error: error instanceof Error ? error : new Error(String(error)), loading: false }); },\n );\n return () => controller.abort();\n }, [...key, attempt]);\n return { ...state, retry: () => setAttempt(n => n + 1) };\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function DocxView({ bytes, onOutline, failed }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useLayoutEffect(() => {\n let live = true;\n let width = 0;\n const root = box.current!;\n const fit = () => {\n const wrapper = root.querySelector<HTMLElement>('.w100n-docx-wrapper');\n if (wrapper && width) wrapper.style.zoom = String(Math.min(1, root.clientWidth / width));\n };\n const watch = new ResizeObserver(fit);\n root.replaceChildren();\n setError(false);\n import('docx-preview')\n .then(({ renderAsync }) => renderAsync(bytes, root, undefined, { inWrapper: true, className: 'w100n-docx', ignoreLastRenderedPageBreak: true }))\n .then(() => {\n if (!live) return;\n width = Math.max(0, ...[...root.querySelectorAll<HTMLElement>('section.w100n-docx')].map(page => page.offsetWidth));\n fit();\n watch.observe(root);\n onOutline(collect(root, '[class*=\"heading\"]', el => Number(/heading(\\d)/i.exec(el.className)?.[1] ?? 1)));\n })\n .catch(() => { if (live) setError(true); });\n return () => { live = false; watch.disconnect(); };\n }, [bytes, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-docx\" /></>;\n}\n","export type Heading = { id: string; level: number; text: string };\n\nlet last = 0;\n\nexport function collect(root: HTMLElement, selector: string, level: (el: Element) => number = el => Number(el.tagName.slice(1))): Heading[] {\n return [...root.querySelectorAll(selector)].flatMap(el => {\n const text = el.textContent?.trim() ?? '';\n if (!text) return [];\n if (!el.id) el.id = `w100n-docs-h${++last}`;\n return [{ id: el.id, level: Math.min(3, Math.max(1, level(el) || 1)), text }];\n });\n}\n","import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { useLayoutEffect, useRef } from 'react';\nimport { collect, type Heading } from './headings';\n\nexport default function MarkdownView({ bytes, onOutline }: { bytes: ArrayBuffer; onOutline: (headings: Heading[]) => void }) {\n const box = useRef<HTMLElement>(null);\n useLayoutEffect(() => {\n const root = box.current!;\n root.innerHTML = DOMPurify.sanitize(marked.parse(new TextDecoder().decode(bytes), { async: false }));\n onOutline(collect(root, 'h1, h2, h3'));\n }, [bytes, onOutline]);\n return <article ref={box} className=\"w100n-docs-page w100n-docs-prose\" />;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { Heading } from './headings';\n\ntype Outline = { title: string; dest: string | unknown[] | null; items: Outline[] };\n\nlet last = 0;\n\nexport default function PdfView({ bytes, worker, onOutline, failed }: { bytes: ArrayBuffer; worker?: () => Worker; onOutline: (headings: Heading[]) => void; failed: string }) {\n const box = useRef<HTMLDivElement>(null);\n const [error, setError] = useState(false);\n useEffect(() => {\n const root = box.current!;\n const prefix = `w100n-docs-p${++last}`;\n let stop = false;\n let close = () => {};\n root.replaceChildren();\n setError(false);\n (async () => {\n const pdfjs = await import('pdfjs-dist');\n if (worker) pdfjs.GlobalWorkerOptions.workerPort ??= worker();\n const task = pdfjs.getDocument({ data: new Uint8Array(bytes.slice(0)) });\n close = () => { void task.destroy(); };\n const pdf = await task.promise;\n const width = Math.max(320, root.clientWidth - 48);\n for (let n = 1; n <= pdf.numPages && !stop; n++) {\n const page = await pdf.getPage(n);\n const scale = Math.min(2, width / page.getViewport({ scale: 1 }).width);\n const viewport = page.getViewport({ scale: scale * window.devicePixelRatio });\n const canvas = document.createElement('canvas');\n canvas.id = `${prefix}-${n}`;\n canvas.className = 'w100n-docs-sheet';\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n canvas.style.width = `${viewport.width / window.devicePixelRatio}px`;\n root.append(canvas);\n await page.render({ canvas, canvasContext: canvas.getContext('2d')!, viewport }).promise;\n }\n const flat = async (items: Outline[], level: number): Promise<Heading[]> => (await Promise.all(items.map(async item => {\n const dest = typeof item.dest === 'string' ? await pdf.getDestination(item.dest) : item.dest;\n const ref = Array.isArray(dest) ? dest[0] : null;\n const index = ref && typeof ref === 'object' ? await pdf.getPageIndex(ref as never) : null;\n const here = index === null ? [] : [{ id: `${prefix}-${index + 1}`, level, text: item.title }];\n return [...here, ...(level < 3 ? await flat(item.items ?? [], level + 1) : [])];\n }))).flat();\n if (!stop) onOutline(await flat(((await pdf.getOutline()) ?? []) as Outline[], 1));\n })().catch(() => { if (!stop) setError(true); });\n return () => { stop = true; close(); };\n }, [bytes, worker, onOutline]);\n return <>{error && <p className=\"w100n-docs-note\">{failed}</p>}<div ref={box} className=\"w100n-docs-pdf\" /></>;\n}\n","export default function SlidesView({ bytes, title }: { bytes: ArrayBuffer; title: string }) {\n return <iframe className=\"w100n-docs-slides\" sandbox=\"allow-scripts\" title={title} srcDoc={new TextDecoder().decode(bytes)} />;\n}\n"],"mappings":"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","names":["useLayoutEffect","useRef","useState","useState","useState","useLayoutEffect","useRef","jsx","useRef","useLayoutEffect","useEffect","useRef","useState","Fragment","jsx","jsxs","last","jsx","Fragment","jsx","jsxs","useState","useRef","useLayoutEffect","doc","versionId"]}
|
package/dist/memory.cjs
CHANGED
|
@@ -64,7 +64,8 @@ function memoryHost({ me, spaces, files }) {
|
|
|
64
64
|
kind: kindOf(file.name),
|
|
65
65
|
size: encode(file.bytes).byteLength,
|
|
66
66
|
updatedAt: file.updatedAt ?? "2026-10-19T09:00:00Z",
|
|
67
|
-
updatedBy: me
|
|
67
|
+
updatedBy: me,
|
|
68
|
+
folder: file.folder ?? null
|
|
68
69
|
});
|
|
69
70
|
return {
|
|
70
71
|
me,
|
package/dist/memory.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/memory.ts","../src/kinds.ts"],"sourcesContent":["import { kindOf } from './kinds';\nimport type { DocumentsHost, Person, Rights, Space } from './types';\n\ntype Bytes = ArrayBuffer | string;\n\nexport type MemoryFile = {\n id: string;\n spaceId: string;\n name: string;\n bytes: Bytes;\n updatedAt?: string;\n rights?: Partial<Rights>;\n versions?: { id: string; createdAt: string; bytes: Bytes; note?: string }[];\n};\n\nconst encode = (bytes: Bytes) => typeof bytes === 'string' ? new TextEncoder().encode(bytes).buffer as ArrayBuffer : bytes;\n\nexport function memoryHost({ me, spaces, files }: { me: Person; spaces: Space[]; files: MemoryFile[] }): DocumentsHost {\n const find = (id: string) => {\n const file = files.find(item => item.id === id);\n if (!file) throw new Error('document not found');\n return file;\n };\n const summary = (file: MemoryFile) => ({\n id: file.id, spaceId: file.spaceId, name: file.name, kind: kindOf(file.name)!, size: encode(file.bytes).byteLength,\n updatedAt: file.updatedAt ?? '2026-10-19T09:00:00Z', updatedBy: me,\n });\n return {\n me,\n spaces: async () => spaces,\n documents: async spaceId => files.filter(file => file.spaceId === spaceId && kindOf(file.name)).map(summary),\n document: async id => ({ ...summary(find(id)), rights: { view: true, comment: true, edit: true, ...find(id).rights } }),\n versions: async id => {\n const file = find(id);\n return [\n { id: 'current', createdAt: summary(file).updatedAt, size: summary(file).size, author: me, current: true },\n ...(file.versions ?? []).map(v => ({ id: v.id, createdAt: v.createdAt, size: encode(v.bytes).byteLength, author: me, note: v.note ?? null, current: false })),\n ];\n },\n content: async (id, versionId) => {\n const file = find(id);\n const old = versionId && versionId !== 'current' ? file.versions?.find(v => v.id === versionId) : undefined;\n return encode(old ? old.bytes : file.bytes);\n },\n restore: async (id, versionId) => {\n const file = find(id);\n const old = file.versions?.find(v => v.id === versionId);\n if (!old) throw new Error('version not found');\n file.versions = [{ id: `v${(file.versions?.length ?? 0) + 1}`, createdAt: file.updatedAt ?? '2026-10-19T09:00:00Z', bytes: file.bytes }, ...(file.versions ?? [])];\n file.bytes = old.bytes;\n file.updatedAt = new Date().toISOString();\n },\n };\n}\n","import type { DocumentKind } from './types';\n\nconst byExtension: Record<string, DocumentKind> = {\n docx: 'docx', md: 'markdown', markdown: 'markdown', pdf: 'pdf', xlsx: 'sheet', csv: 'sheet', html: 'slides', htm: 'slides',\n};\n\nconst byMime: Record<string, DocumentKind> = {\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'text/markdown': 'markdown',\n 'application/pdf': 'pdf',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'sheet',\n 'text/csv': 'sheet',\n 'text/html': 'slides',\n};\n\nexport const kinds: DocumentKind[] = ['docx', 'markdown', 'pdf', 'sheet', 'slides'];\n\nexport function kindOf(name: string, mimeType?: string | null): DocumentKind | null {\n const extension = name.includes('.') ? name.split('.').pop()!.toLowerCase() : '';\n return byExtension[extension] ?? (mimeType ? byMime[mimeType.split(';')[0].trim().toLowerCase()] : undefined) ?? null;\n}\n\nexport function matches(doc: { name: string; kind: DocumentKind }, query: string, kind: DocumentKind | 'all') {\n const words = query.toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n return (kind === 'all' || doc.kind === kind) && words.every(word => doc.name.toLocaleLowerCase().includes(word));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAM,cAA4C;AAAA,EAChD,MAAM;AAAA,EAAQ,IAAI;AAAA,EAAY,UAAU;AAAA,EAAY,KAAK;AAAA,EAAO,MAAM;AAAA,EAAS,KAAK;AAAA,EAAS,MAAM;AAAA,EAAU,KAAK;AACpH;AAEA,IAAM,SAAuC;AAAA,EAC3C,2EAA2E;AAAA,EAC3E,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,qEAAqE;AAAA,EACrE,YAAY;AAAA,EACZ,aAAa;AACf;AAIO,SAAS,OAAO,MAAc,UAA+C;AAClF,QAAM,YAAY,KAAK,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,EAAG,YAAY,IAAI;AAC9E,SAAO,YAAY,SAAS,MAAM,WAAW,OAAO,SAAS,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,WAAc;AACnH;;;
|
|
1
|
+
{"version":3,"sources":["../src/memory.ts","../src/kinds.ts"],"sourcesContent":["import { kindOf } from './kinds';\nimport type { DocumentsHost, Person, Rights, Space } from './types';\n\ntype Bytes = ArrayBuffer | string;\n\nexport type MemoryFile = {\n id: string;\n spaceId: string;\n name: string;\n folder?: string;\n bytes: Bytes;\n updatedAt?: string;\n rights?: Partial<Rights>;\n versions?: { id: string; createdAt: string; bytes: Bytes; note?: string }[];\n};\n\nconst encode = (bytes: Bytes) => typeof bytes === 'string' ? new TextEncoder().encode(bytes).buffer as ArrayBuffer : bytes;\n\nexport function memoryHost({ me, spaces, files }: { me: Person; spaces: Space[]; files: MemoryFile[] }): DocumentsHost {\n const find = (id: string) => {\n const file = files.find(item => item.id === id);\n if (!file) throw new Error('document not found');\n return file;\n };\n const summary = (file: MemoryFile) => ({\n id: file.id, spaceId: file.spaceId, name: file.name, kind: kindOf(file.name)!, size: encode(file.bytes).byteLength,\n updatedAt: file.updatedAt ?? '2026-10-19T09:00:00Z', updatedBy: me, folder: file.folder ?? null,\n });\n return {\n me,\n spaces: async () => spaces,\n documents: async spaceId => files.filter(file => file.spaceId === spaceId && kindOf(file.name)).map(summary),\n document: async id => ({ ...summary(find(id)), rights: { view: true, comment: true, edit: true, ...find(id).rights } }),\n versions: async id => {\n const file = find(id);\n return [\n { id: 'current', createdAt: summary(file).updatedAt, size: summary(file).size, author: me, current: true },\n ...(file.versions ?? []).map(v => ({ id: v.id, createdAt: v.createdAt, size: encode(v.bytes).byteLength, author: me, note: v.note ?? null, current: false })),\n ];\n },\n content: async (id, versionId) => {\n const file = find(id);\n const old = versionId && versionId !== 'current' ? file.versions?.find(v => v.id === versionId) : undefined;\n return encode(old ? old.bytes : file.bytes);\n },\n restore: async (id, versionId) => {\n const file = find(id);\n const old = file.versions?.find(v => v.id === versionId);\n if (!old) throw new Error('version not found');\n file.versions = [{ id: `v${(file.versions?.length ?? 0) + 1}`, createdAt: file.updatedAt ?? '2026-10-19T09:00:00Z', bytes: file.bytes }, ...(file.versions ?? [])];\n file.bytes = old.bytes;\n file.updatedAt = new Date().toISOString();\n },\n };\n}\n","import type { DocumentKind } from './types';\n\nconst byExtension: Record<string, DocumentKind> = {\n docx: 'docx', md: 'markdown', markdown: 'markdown', pdf: 'pdf', xlsx: 'sheet', csv: 'sheet', html: 'slides', htm: 'slides',\n};\n\nconst byMime: Record<string, DocumentKind> = {\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'text/markdown': 'markdown',\n 'application/pdf': 'pdf',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'sheet',\n 'text/csv': 'sheet',\n 'text/html': 'slides',\n};\n\nexport const kinds: DocumentKind[] = ['docx', 'markdown', 'pdf', 'sheet', 'slides'];\n\nexport function kindOf(name: string, mimeType?: string | null): DocumentKind | null {\n const extension = name.includes('.') ? name.split('.').pop()!.toLowerCase() : '';\n return byExtension[extension] ?? (mimeType ? byMime[mimeType.split(';')[0].trim().toLowerCase()] : undefined) ?? null;\n}\n\nexport function matches(doc: { name: string; kind: DocumentKind }, query: string, kind: DocumentKind | 'all') {\n const words = query.toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n return (kind === 'all' || doc.kind === kind) && words.every(word => doc.name.toLocaleLowerCase().includes(word));\n}\n"],"mappings":"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","names":[]}
|
package/dist/memory.d.cts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-
|
|
1
|
+
import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-DiEpNWSu.cjs';
|
|
2
2
|
|
|
3
3
|
type Bytes = ArrayBuffer | string;
|
|
4
4
|
type MemoryFile = {
|
|
5
5
|
id: string;
|
|
6
6
|
spaceId: string;
|
|
7
7
|
name: string;
|
|
8
|
+
folder?: string;
|
|
8
9
|
bytes: Bytes;
|
|
9
10
|
updatedAt?: string;
|
|
10
11
|
rights?: Partial<Rights>;
|
package/dist/memory.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-
|
|
1
|
+
import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-DiEpNWSu.js';
|
|
2
2
|
|
|
3
3
|
type Bytes = ArrayBuffer | string;
|
|
4
4
|
type MemoryFile = {
|
|
5
5
|
id: string;
|
|
6
6
|
spaceId: string;
|
|
7
7
|
name: string;
|
|
8
|
+
folder?: string;
|
|
8
9
|
bytes: Bytes;
|
|
9
10
|
updatedAt?: string;
|
|
10
11
|
rights?: Partial<Rights>;
|
package/dist/memory.js
CHANGED
|
@@ -18,7 +18,8 @@ function memoryHost({ me, spaces, files }) {
|
|
|
18
18
|
kind: kindOf(file.name),
|
|
19
19
|
size: encode(file.bytes).byteLength,
|
|
20
20
|
updatedAt: file.updatedAt ?? "2026-10-19T09:00:00Z",
|
|
21
|
-
updatedBy: me
|
|
21
|
+
updatedBy: me,
|
|
22
|
+
folder: file.folder ?? null
|
|
22
23
|
});
|
|
23
24
|
return {
|
|
24
25
|
me,
|
package/dist/memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/memory.ts"],"sourcesContent":["import { kindOf } from './kinds';\nimport type { DocumentsHost, Person, Rights, Space } from './types';\n\ntype Bytes = ArrayBuffer | string;\n\nexport type MemoryFile = {\n id: string;\n spaceId: string;\n name: string;\n bytes: Bytes;\n updatedAt?: string;\n rights?: Partial<Rights>;\n versions?: { id: string; createdAt: string; bytes: Bytes; note?: string }[];\n};\n\nconst encode = (bytes: Bytes) => typeof bytes === 'string' ? new TextEncoder().encode(bytes).buffer as ArrayBuffer : bytes;\n\nexport function memoryHost({ me, spaces, files }: { me: Person; spaces: Space[]; files: MemoryFile[] }): DocumentsHost {\n const find = (id: string) => {\n const file = files.find(item => item.id === id);\n if (!file) throw new Error('document not found');\n return file;\n };\n const summary = (file: MemoryFile) => ({\n id: file.id, spaceId: file.spaceId, name: file.name, kind: kindOf(file.name)!, size: encode(file.bytes).byteLength,\n updatedAt: file.updatedAt ?? '2026-10-19T09:00:00Z', updatedBy: me,\n });\n return {\n me,\n spaces: async () => spaces,\n documents: async spaceId => files.filter(file => file.spaceId === spaceId && kindOf(file.name)).map(summary),\n document: async id => ({ ...summary(find(id)), rights: { view: true, comment: true, edit: true, ...find(id).rights } }),\n versions: async id => {\n const file = find(id);\n return [\n { id: 'current', createdAt: summary(file).updatedAt, size: summary(file).size, author: me, current: true },\n ...(file.versions ?? []).map(v => ({ id: v.id, createdAt: v.createdAt, size: encode(v.bytes).byteLength, author: me, note: v.note ?? null, current: false })),\n ];\n },\n content: async (id, versionId) => {\n const file = find(id);\n const old = versionId && versionId !== 'current' ? file.versions?.find(v => v.id === versionId) : undefined;\n return encode(old ? old.bytes : file.bytes);\n },\n restore: async (id, versionId) => {\n const file = find(id);\n const old = file.versions?.find(v => v.id === versionId);\n if (!old) throw new Error('version not found');\n file.versions = [{ id: `v${(file.versions?.length ?? 0) + 1}`, createdAt: file.updatedAt ?? '2026-10-19T09:00:00Z', bytes: file.bytes }, ...(file.versions ?? [])];\n file.bytes = old.bytes;\n file.updatedAt = new Date().toISOString();\n },\n };\n}\n"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/memory.ts"],"sourcesContent":["import { kindOf } from './kinds';\nimport type { DocumentsHost, Person, Rights, Space } from './types';\n\ntype Bytes = ArrayBuffer | string;\n\nexport type MemoryFile = {\n id: string;\n spaceId: string;\n name: string;\n folder?: string;\n bytes: Bytes;\n updatedAt?: string;\n rights?: Partial<Rights>;\n versions?: { id: string; createdAt: string; bytes: Bytes; note?: string }[];\n};\n\nconst encode = (bytes: Bytes) => typeof bytes === 'string' ? new TextEncoder().encode(bytes).buffer as ArrayBuffer : bytes;\n\nexport function memoryHost({ me, spaces, files }: { me: Person; spaces: Space[]; files: MemoryFile[] }): DocumentsHost {\n const find = (id: string) => {\n const file = files.find(item => item.id === id);\n if (!file) throw new Error('document not found');\n return file;\n };\n const summary = (file: MemoryFile) => ({\n id: file.id, spaceId: file.spaceId, name: file.name, kind: kindOf(file.name)!, size: encode(file.bytes).byteLength,\n updatedAt: file.updatedAt ?? '2026-10-19T09:00:00Z', updatedBy: me, folder: file.folder ?? null,\n });\n return {\n me,\n spaces: async () => spaces,\n documents: async spaceId => files.filter(file => file.spaceId === spaceId && kindOf(file.name)).map(summary),\n document: async id => ({ ...summary(find(id)), rights: { view: true, comment: true, edit: true, ...find(id).rights } }),\n versions: async id => {\n const file = find(id);\n return [\n { id: 'current', createdAt: summary(file).updatedAt, size: summary(file).size, author: me, current: true },\n ...(file.versions ?? []).map(v => ({ id: v.id, createdAt: v.createdAt, size: encode(v.bytes).byteLength, author: me, note: v.note ?? null, current: false })),\n ];\n },\n content: async (id, versionId) => {\n const file = find(id);\n const old = versionId && versionId !== 'current' ? file.versions?.find(v => v.id === versionId) : undefined;\n return encode(old ? old.bytes : file.bytes);\n },\n restore: async (id, versionId) => {\n const file = find(id);\n const old = file.versions?.find(v => v.id === versionId);\n if (!old) throw new Error('version not found');\n file.versions = [{ id: `v${(file.versions?.length ?? 0) + 1}`, createdAt: file.updatedAt ?? '2026-10-19T09:00:00Z', bytes: file.bytes }, ...(file.versions ?? [])];\n file.bytes = old.bytes;\n file.updatedAt = new Date().toISOString();\n },\n };\n}\n"],"mappings":";;;;;;AAgBA,IAAM,SAAS,CAAC,UAAiB,OAAO,UAAU,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,SAAwB;AAE9G,SAAS,WAAW,EAAE,IAAI,QAAQ,MAAM,GAAwE;AACrH,QAAM,OAAO,CAAC,OAAe;AAC3B,UAAM,OAAO,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE;AAC9C,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,oBAAoB;AAC/C,WAAO;AAAA,EACT;AACA,QAAM,UAAU,CAAC,UAAsB;AAAA,IACrC,IAAI,KAAK;AAAA,IAAI,SAAS,KAAK;AAAA,IAAS,MAAM,KAAK;AAAA,IAAM,MAAM,OAAO,KAAK,IAAI;AAAA,IAAI,MAAM,OAAO,KAAK,KAAK,EAAE;AAAA,IACxG,WAAW,KAAK,aAAa;AAAA,IAAwB,WAAW;AAAA,IAAI,QAAQ,KAAK,UAAU;AAAA,EAC7F;AACA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,YAAY;AAAA,IACpB,WAAW,OAAM,YAAW,MAAM,OAAO,UAAQ,KAAK,YAAY,WAAW,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO;AAAA,IAC3G,UAAU,OAAM,QAAO,EAAE,GAAG,QAAQ,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,MAAM,MAAM,SAAS,MAAM,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE;AAAA,IACrH,UAAU,OAAM,OAAM;AACpB,YAAM,OAAO,KAAK,EAAE;AACpB,aAAO;AAAA,QACL,EAAE,IAAI,WAAW,WAAW,QAAQ,IAAI,EAAE,WAAW,MAAM,QAAQ,IAAI,EAAE,MAAM,QAAQ,IAAI,SAAS,KAAK;AAAA,QACzG,IAAI,KAAK,YAAY,CAAC,GAAG,IAAI,QAAM,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,WAAW,MAAM,OAAO,EAAE,KAAK,EAAE,YAAY,QAAQ,IAAI,MAAM,EAAE,QAAQ,MAAM,SAAS,MAAM,EAAE;AAAA,MAC9J;AAAA,IACF;AAAA,IACA,SAAS,OAAO,IAAI,cAAc;AAChC,YAAM,OAAO,KAAK,EAAE;AACpB,YAAM,MAAM,aAAa,cAAc,YAAY,KAAK,UAAU,KAAK,OAAK,EAAE,OAAO,SAAS,IAAI;AAClG,aAAO,OAAO,MAAM,IAAI,QAAQ,KAAK,KAAK;AAAA,IAC5C;AAAA,IACA,SAAS,OAAO,IAAI,cAAc;AAChC,YAAM,OAAO,KAAK,EAAE;AACpB,YAAM,MAAM,KAAK,UAAU,KAAK,OAAK,EAAE,OAAO,SAAS;AACvD,UAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mBAAmB;AAC7C,WAAK,WAAW,CAAC,EAAE,IAAI,KAAK,KAAK,UAAU,UAAU,KAAK,CAAC,IAAI,WAAW,KAAK,aAAa,wBAAwB,OAAO,KAAK,MAAM,GAAG,GAAI,KAAK,YAAY,CAAC,CAAE;AACjK,WAAK,QAAQ,IAAI;AACjB,WAAK,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IAC1C;AAAA,EACF;AACF;","names":[]}
|
|
@@ -24,6 +24,7 @@ type DocumentSummary = {
|
|
|
24
24
|
updatedAt: string;
|
|
25
25
|
updatedBy?: Person | null;
|
|
26
26
|
thumbnailUrl?: string | null;
|
|
27
|
+
folder?: string | null;
|
|
27
28
|
};
|
|
28
29
|
type DocumentFile = DocumentSummary & {
|
|
29
30
|
rights: Rights;
|
|
@@ -55,4 +56,4 @@ type Place = {
|
|
|
55
56
|
documentId: string | null;
|
|
56
57
|
};
|
|
57
58
|
|
|
58
|
-
export type { DocumentsHost as D, Fetch as F, Language as L, Place as P, Rights as R, Space as S,
|
|
59
|
+
export type { DocumentsHost as D, Fetch as F, Language as L, Place as P, Rights as R, Space as S, DocumentFile as a, DocumentKind as b, DocumentSummary as c, DocumentVersion as d, Person as e };
|
|
@@ -24,6 +24,7 @@ type DocumentSummary = {
|
|
|
24
24
|
updatedAt: string;
|
|
25
25
|
updatedBy?: Person | null;
|
|
26
26
|
thumbnailUrl?: string | null;
|
|
27
|
+
folder?: string | null;
|
|
27
28
|
};
|
|
28
29
|
type DocumentFile = DocumentSummary & {
|
|
29
30
|
rights: Rights;
|
|
@@ -55,4 +56,4 @@ type Place = {
|
|
|
55
56
|
documentId: string | null;
|
|
56
57
|
};
|
|
57
58
|
|
|
58
|
-
export type { DocumentsHost as D, Fetch as F, Language as L, Place as P, Rights as R, Space as S,
|
|
59
|
+
export type { DocumentsHost as D, Fetch as F, Language as L, Place as P, Rights as R, Space as S, DocumentFile as a, DocumentKind as b, DocumentSummary as c, DocumentVersion as d, Person as e };
|