@w100n/documents 0.3.0 → 0.4.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.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 { 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"]}
1
+ {"version":3,"sources":["../src/DocumentsWorkspace.tsx","../src/text.ts","../src/Thumb.tsx","../src/preview.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 {\n Check, ChevronDown, ChevronRight, FileSpreadsheet, FileText, FileType, Files, History, Info, LayoutGrid, ListTree, Maximize2, Minus, PanelLeftOpen,\n PanelRightOpen, Plus, Presentation, RotateCcw, Search, X, type LucideIcon,\n} from 'lucide-react';\nimport { kinds, matches } from './kinds';\nimport { texts } from './text';\nimport Thumb from './Thumb';\nimport type { DocumentFile, DocumentKind, DocumentsHost, DocumentSummary, 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, actions }: {\n host: DocumentsHost; language?: Language; theme?: 'light' | 'dark'; place?: Place; onPlace?: (place: Place) => void; start?: ReactNode; end?: ReactNode;\n aside?: (doc: DocumentFile) => ReactNode; actions?: (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 [panelOpen, setPanelOpen] = useState(true);\n const root = useRef<HTMLDivElement>(null);\n const narrow = () => root.current !== null && getComputedStyle(root.current).getPropertyValue('--docs-narrow').trim() === '1';\n useLayoutEffect(() => {\n if (here.documentId && narrow()) setListOpen(false);\n }, []);\n const [picking, setPicking] = useState(false);\n const [tab, setTab] = useState<Tab>('outline');\n const [zoom, setZoom] = useState(100);\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 single = spaces.data?.length === 1 ? spaces.data[0].id : null;\n const spaceId = here.spaceId ?? single;\n const space = spaces.data?.find(item => item.id === spaceId);\n const list = useLoad<DocumentSummary[]>(async signal => {\n if (spaceId) return host.documents(spaceId, { signal });\n if (host.everything) return host.everything({ signal });\n const all = await host.spaces({ signal });\n return (await Promise.all(all.map(item => host.documents(item.id, { signal })))).flat();\n }, [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 all = list.data ?? [];\n const shown = all.filter(item => matches(item, query, kind));\n const present = kinds.filter(item => all.some(doc => doc.kind === item));\n const folders = spaceId ? [...new Set(['', ...shown.map(item => item.folder ?? '')])].filter(folder => shown.some(item => (item.folder ?? '') === folder)) : [''];\n const names = new Map((spaces.data ?? []).map(item => [item.id, item.name]));\n const counts = new Map<string, number>();\n for (const item of all) counts.set(item.spaceId, (counts.get(item.spaceId) ?? 0) + 1);\n const groups = [...new Set((spaces.data ?? []).map(item => item.group ?? ''))];\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 ago = (iso: string) => {\n const minutes = Math.round((Date.parse(iso) - Date.now()) / 60000);\n const rtf = new Intl.RelativeTimeFormat(language, { numeric: 'auto', style: 'short' });\n if (Math.abs(minutes) < 60) return rtf.format(minutes, 'minute');\n if (Math.abs(minutes) < 1440) return rtf.format(Math.round(minutes / 60), 'hour');\n if (Math.abs(minutes) < 43200) return rtf.format(Math.round(minutes / 1440), 'day');\n return new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', year: 'numeric' }).format(new Date(iso));\n };\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 = (item: DocumentSummary) => {\n setOutline([]);\n setTab('outline');\n go({ spaceId: here.spaceId, documentId: item.id });\n if (narrow()) setListOpen(false);\n };\n const pick = (next: string | null) => {\n setPicking(false);\n setKind('all');\n go({ spaceId: next, documentId: null });\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 const Kind = doc.data ? icons[doc.data.kind] : FileText;\n const crumbs = doc.data ? [names.get(doc.data.spaceId), doc.data.folder].filter(Boolean) : space ? [space.name] : [];\n\n const panelTabs: [Tab, LucideIcon, string][] = [['outline', ListTree, t.outline], ['versions', History, t.versions], ['details', Info, t.details]];\n return <div ref={root} className=\"w100n-docs\" data-theme={theme}>\n <header className=\"w100n-docs-bar\">\n {start}\n <span className=\"w100n-docs-tile\" data-kind={doc.data?.kind}><Kind aria-hidden /></span>\n <div className=\"w100n-docs-heading\">\n <strong className=\"w100n-docs-title\">{doc.data?.name ?? t.documents}</strong>\n {crumbs.length > 0 && <span className=\"w100n-docs-crumbs\">{crumbs.map((item, i) => <span key={i}>{i > 0 && <ChevronRight aria-hidden />}{item}</span>)}</span>}\n </div>\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 {doc.data && !versionId && actions?.(doc.data)}\n {end && <div className=\"w100n-docs-end\">{end}</div>}\n </header>\n <div className=\"w100n-docs-body\">\n {listOpen ? <aside className=\"w100n-docs-side w100n-docs-list\" aria-label={t.documents}>\n <div className=\"w100n-docs-head\">\n <div className=\"w100n-docs-row\">\n <p className=\"w100n-docs-caption\"><Files aria-hidden />{t.documents}<span>{all.length}</span></p>\n <button type=\"button\" className=\"w100n-docs-close\" onClick={() => setListOpen(false)} aria-label={t.closeList} title={t.closeList}><X aria-hidden /></button>\n </div>\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 {space ? <span className=\"w100n-docs-dot\" style={{ background: space.color ?? undefined }} /> : <span className=\"w100n-docs-all\"><LayoutGrid aria-hidden /></span>}\n <b>{space?.name ?? t.allProjects}</b>{!space && <span className=\"w100n-docs-count\">{all.length}</span>}<ChevronDown aria-hidden />\n </button>\n {picking && <div role=\"listbox\" className=\"w100n-docs-menu\">\n <button type=\"button\" role=\"option\" aria-selected={!spaceId} onClick={() => pick(null)}>\n <span className=\"w100n-docs-all\"><LayoutGrid aria-hidden /></span><b>{t.allProjects}</b>{!spaceId && <Check aria-hidden />}\n </button>\n {groups.map(group => <div key={group} role=\"group\" aria-label={group || undefined}>\n {group && <p className=\"w100n-docs-menu-caption\">{group}</p>}\n {(spaces.data ?? []).filter(item => (item.group ?? '') === group).map(item => <button key={item.id} type=\"button\" role=\"option\" aria-selected={item.id === spaceId} onClick={() => pick(item.id)}>\n <span className=\"w100n-docs-dot\" style={{ background: item.color ?? undefined }} /><b>{item.name}</b>\n {!spaceId && counts.get(item.id) ? <span className=\"w100n-docs-count\">{counts.get(item.id)}</span> : null}{item.id === spaceId && <Check aria-hidden />}\n </button>)}\n </div>)}\n </div>}\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)}>\n {item === 'all' ? t.all : t.kinds[item]}<span aria-hidden>{item === 'all' ? all.length : all.filter(doc => doc.kind === item).length}</span>\n </button>)}</div>}\n </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\">{all.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 <div className=\"w100n-docs-grid\">{shown.filter(item => !spaceId || (item.folder ?? '') === folder).map(item =>\n <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item)} title={item.name}>\n <Thumb host={host} item={item} label={t.kinds[item.kind]} />\n <span className=\"w100n-docs-card-text\"><b>{item.name}</b><small>{[!spaceId && names.get(item.spaceId), ago(item.updatedAt)].filter(Boolean).join(' · ')}</small></span>\n </button>)}</div>\n </div>)}\n </div>\n </aside> : <button type=\"button\" className=\"w100n-docs-reopen\" onClick={() => setListOpen(true)} aria-label={t.openList} title={t.openList}><PanelLeftOpen aria-hidden /></button>}\n <main className=\"w100n-docs-stage\">\n {doc.data && <div className=\"w100n-docs-zoom\" role=\"group\">\n <button type=\"button\" onClick={() => setZoom(Math.max(50, zoom - 10))} aria-label={t.zoomOut} title={t.zoomOut}><Minus aria-hidden /></button>\n <span>{zoom}%</span>\n <button type=\"button\" onClick={() => setZoom(Math.min(200, zoom + 10))} aria-label={t.zoomIn} title={t.zoomIn}><Plus aria-hidden /></button>\n <button type=\"button\" onClick={() => setZoom(100)} aria-label={t.fit} title={t.fit}><Maximize2 aria-hidden /></button>\n </div>}\n {doc.data && !panelOpen && <button type=\"button\" className=\"w100n-docs-reopen w100n-docs-reopen-right\" onClick={() => setPanelOpen(true)} aria-label={t.openPanel} title={t.openPanel}><PanelRightOpen aria-hidden /></button>}\n <div className=\"w100n-docs-scroll\"><div className=\"w100n-docs-zoomed\" style={{ zoom: zoom / 100 }}>{stage}</div></div>\n </main>\n {doc.data && panelOpen && <aside className=\"w100n-docs-side w100n-docs-panel\" aria-label={t.details}>\n <div className=\"w100n-docs-head\">\n <div className=\"w100n-docs-row\">\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 <button type=\"button\" className=\"w100n-docs-close\" onClick={() => setPanelOpen(false)} aria-label={t.closePanel} title={t.closePanel}><X aria-hidden /></button>\n </div>\n </div>\n <div className=\"w100n-docs-panel-body\">\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 </div>\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 allProjects: 'All projects', closePanel: 'Hide the panel', openPanel: 'Show the panel', zoomIn: 'Zoom in', zoomOut: 'Zoom out', fit: 'Actual size',\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 allProjects: 'Wszystkie projekty', closePanel: 'Ukryj panel', openPanel: 'Pokaż panel', zoomIn: 'Powiększ', zoomOut: 'Pomniejsz', fit: 'Rzeczywisty rozmiar',\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 allProjects: 'Усі проєкти', closePanel: 'Сховати панель', openPanel: 'Показати панель', zoomIn: 'Збільшити', zoomOut: 'Зменшити', fit: 'Справжній розмір',\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n","import { useEffect, useRef, useState } from 'react';\nimport { preview, type Preview } from './preview';\nimport type { DocumentsHost, DocumentSummary } from './types';\n\nexport default function Thumb({ host, item, label }: { host: DocumentsHost; item: DocumentSummary; label: string }) {\n const box = useRef<HTMLSpanElement>(null);\n const [seen, setSeen] = useState(false);\n const [shot, setShot] = useState<Preview | null>(null);\n useEffect(() => {\n if (item.thumbnailUrl || item.excerpt || typeof IntersectionObserver === 'undefined') return;\n const watch = new IntersectionObserver(entries => { if (entries.some(entry => entry.isIntersecting)) setSeen(true); }, { rootMargin: '200px' });\n watch.observe(box.current!);\n return () => watch.disconnect();\n }, [item.thumbnailUrl, item.excerpt]);\n useEffect(() => {\n if (!seen) return;\n let live = true;\n void preview(host, item).then(found => { if (live) setShot(found); });\n return () => { live = false; };\n }, [seen, host, item.id, item.updatedAt]);\n const text = item.excerpt ?? shot?.text ?? '';\n const lines = text.split('\\n').filter(line => !line.trim().startsWith('```')).map(line => line.replace(/^#+\\s*/, '').replace(/[*_`>|]/g, '').trim()).filter(Boolean);\n const image = item.thumbnailUrl ?? shot?.image;\n return <span ref={box} className=\"w100n-docs-thumb\" data-kind={item.kind}>\n {image ? <img src={image} alt=\"\" />\n : <span className=\"w100n-docs-paper\" aria-hidden>{lines.length ? <><b>{lines[0]}</b>{lines.slice(1, 14).join(' ')}</> : <><i /><i /><i /><i /><i /></>}</span>}\n <span className=\"w100n-docs-kind\" data-kind={item.kind}>{label}</span>\n </span>;\n}\n","import type { DocumentsHost, DocumentSummary } from './types';\n\nexport type Preview = { text?: string; image?: string };\n\nconst cache = new Map<string, Promise<Preview | null>>();\nconst waiting: (() => void)[] = [];\nlet running = 0;\n\nasync function turn<T>(work: () => Promise<T>): Promise<T> {\n if (running >= 2) await new Promise<void>(go => waiting.push(go));\n running++;\n try {\n return await work();\n } finally {\n running--;\n waiting.shift()?.();\n }\n}\n\nasync function make(host: DocumentsHost, doc: DocumentSummary): Promise<Preview | null> {\n if (doc.size > 3_000_000 || !['markdown', 'docx', 'pdf'].includes(doc.kind)) return null;\n return turn(async () => {\n const bytes = await host.content(doc.id, null);\n if (doc.kind === 'markdown') return { text: new TextDecoder().decode(bytes.slice(0, 2400)) };\n if (doc.kind === 'docx') {\n const { renderAsync } = await import('docx-preview');\n const box = document.createElement('div');\n await renderAsync(bytes, box, undefined, { inWrapper: false, ignoreLastRenderedPageBreak: true });\n return { text: [...box.querySelectorAll('p, h1, h2, h3, li')].map(node => node.textContent?.trim()).filter(Boolean).join('\\n').slice(0, 800) };\n }\n const pdfjs = await import('pdfjs-dist');\n if (host.pdfWorker) pdfjs.GlobalWorkerOptions.workerPort ??= host.pdfWorker();\n const task = pdfjs.getDocument({ data: new Uint8Array(bytes.slice(0)) });\n const pdf = await task.promise;\n const page = await pdf.getPage(1);\n const viewport = page.getViewport({ scale: 320 / page.getViewport({ scale: 1 }).width });\n const canvas = document.createElement('canvas');\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n await page.render({ canvas, canvasContext: canvas.getContext('2d')!, viewport }).promise;\n void task.destroy();\n return { image: canvas.toDataURL('image/png') };\n });\n}\n\nexport function preview(host: DocumentsHost, doc: DocumentSummary): Promise<Preview | null> {\n const key = `${doc.id}:${doc.updatedAt}`;\n let found = cache.get(key);\n if (!found) {\n found = make(host, doc).catch(() => null);\n cache.set(key, found);\n }\n return found;\n}\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","useEffect","useState","useRef","useState","Fragment","jsx","jsxs","useRef","useState","useLayoutEffect","useRef","jsx","useRef","useLayoutEffect","useEffect","useRef","useState","Fragment","jsx","jsxs","last","jsx","Fragment","jsx","jsxs","useState","useRef","useLayoutEffect","all","doc","versionId"]}
package/dist/memory.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-DiEpNWSu.cjs';
1
+ import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-DshXPnWA.cjs';
2
2
 
3
3
  type Bytes = ArrayBuffer | string;
4
4
  type MemoryFile = {
package/dist/memory.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-DiEpNWSu.js';
1
+ import { R as Rights, e as Person, S as Space, D as DocumentsHost } from './types-DshXPnWA.js';
2
2
 
3
3
  type Bytes = ArrayBuffer | string;
4
4
  type MemoryFile = {
@@ -9,6 +9,7 @@ type Space = {
9
9
  id: string;
10
10
  name: string;
11
11
  color?: string | null;
12
+ group?: string | null;
12
13
  };
13
14
  type Rights = {
14
15
  view: boolean;
@@ -24,6 +25,7 @@ type DocumentSummary = {
24
25
  updatedAt: string;
25
26
  updatedBy?: Person | null;
26
27
  thumbnailUrl?: string | null;
28
+ excerpt?: string | null;
27
29
  folder?: string | null;
28
30
  };
29
31
  type DocumentFile = DocumentSummary & {
@@ -46,6 +48,7 @@ interface DocumentsHost {
46
48
  pdfWorker?: () => Worker;
47
49
  spaces(opts?: Fetch): Promise<Space[]>;
48
50
  documents(spaceId: string, opts?: Fetch): Promise<DocumentSummary[]>;
51
+ everything?(opts?: Fetch): Promise<DocumentSummary[]>;
49
52
  document(id: string, opts?: Fetch): Promise<DocumentFile>;
50
53
  versions(id: string, opts?: Fetch): Promise<DocumentVersion[]>;
51
54
  content(id: string, versionId?: string | null, opts?: Fetch): Promise<ArrayBuffer>;
@@ -9,6 +9,7 @@ type Space = {
9
9
  id: string;
10
10
  name: string;
11
11
  color?: string | null;
12
+ group?: string | null;
12
13
  };
13
14
  type Rights = {
14
15
  view: boolean;
@@ -24,6 +25,7 @@ type DocumentSummary = {
24
25
  updatedAt: string;
25
26
  updatedBy?: Person | null;
26
27
  thumbnailUrl?: string | null;
28
+ excerpt?: string | null;
27
29
  folder?: string | null;
28
30
  };
29
31
  type DocumentFile = DocumentSummary & {
@@ -46,6 +48,7 @@ interface DocumentsHost {
46
48
  pdfWorker?: () => Worker;
47
49
  spaces(opts?: Fetch): Promise<Space[]>;
48
50
  documents(spaceId: string, opts?: Fetch): Promise<DocumentSummary[]>;
51
+ everything?(opts?: Fetch): Promise<DocumentSummary[]>;
49
52
  document(id: string, opts?: Fetch): Promise<DocumentFile>;
50
53
  versions(id: string, opts?: Fetch): Promise<DocumentVersion[]>;
51
54
  content(id: string, versionId?: string | null, opts?: Fetch): Promise<ArrayBuffer>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@w100n/documents",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Documents workspace for Web100Now projects: DOCX, Markdown, PDF, slides and sheets",
5
5
  "license": "MIT",
6
6
  "type": "module",