@w100n/documents 0.4.0 → 0.11.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/SheetView-3XTEV2VT.css +319 -0
- package/dist/SheetView-3XTEV2VT.css.map +1 -0
- package/dist/SheetView-TXHS5WJC.js +928 -0
- package/dist/SheetView-TXHS5WJC.js.map +1 -0
- package/dist/TextEditor-4YETNX4T.js +983 -0
- package/dist/TextEditor-4YETNX4T.js.map +1 -0
- package/dist/caveat-cyrillic-XVO43JCM.woff2 +0 -0
- package/dist/caveat-latin-IUBKKMHQ.woff2 +0 -0
- package/dist/caveat-latin-ext-5S7R5SZN.woff2 +0 -0
- package/dist/chunk-EM4U6OC5.js +3447 -0
- package/dist/chunk-EM4U6OC5.js.map +1 -0
- package/dist/chunk-FPGPEIW5.js +196 -0
- package/dist/chunk-FPGPEIW5.js.map +1 -0
- package/dist/chunk-ISOOUYLI.js +150 -0
- package/dist/chunk-ISOOUYLI.js.map +1 -0
- package/dist/{chunk-KEV4R7W5.js → chunk-L765DZPO.js} +9 -1
- package/dist/chunk-L765DZPO.js.map +1 -0
- package/dist/chunk-QDH7EZAF.js +27 -0
- package/dist/chunk-QDH7EZAF.js.map +1 -0
- package/dist/chunk-TDP6OJET.js +31 -0
- package/dist/chunk-TDP6OJET.js.map +1 -0
- package/dist/chunk-TNSN4ZQ5.js +2909 -0
- package/dist/chunk-TNSN4ZQ5.js.map +1 -0
- package/dist/collab.cjs +6312 -0
- package/dist/collab.cjs.map +1 -0
- package/dist/collab.d.cts +39 -0
- package/dist/collab.d.ts +39 -0
- package/dist/collab.js +30 -0
- package/dist/collab.js.map +1 -0
- package/dist/grid-EI5JNZAA.js +88 -0
- package/dist/grid-EI5JNZAA.js.map +1 -0
- package/dist/index.cjs +12191 -486
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +3632 -728
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +144 -11
- package/dist/index.d.ts +144 -11
- package/dist/index.js +3389 -439
- package/dist/index.js.map +1 -1
- package/dist/kinds.cjs +71 -0
- package/dist/kinds.cjs.map +1 -0
- package/dist/kinds.d.cts +11 -0
- package/dist/kinds.d.ts +11 -0
- package/dist/kinds.js +14 -0
- package/dist/kinds.js.map +1 -0
- package/dist/memory.cjs +59 -7
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.d.cts +7 -2
- package/dist/memory.d.ts +7 -2
- package/dist/memory.js +57 -8
- package/dist/memory.js.map +1 -1
- package/dist/pdfWrite-EM6GJDBF.js +76 -0
- package/dist/pdfWrite-EM6GJDBF.js.map +1 -0
- package/dist/types-B5oF25dn.d.cts +165 -0
- package/dist/types-B5oF25dn.d.ts +165 -0
- package/dist/write-DaVtTJCS.d.cts +6 -0
- package/dist/write-DaVtTJCS.d.ts +6 -0
- package/package.json +50 -3
- package/dist/chunk-KEV4R7W5.js.map +0 -1
- package/dist/types-DshXPnWA.d.cts +0 -62
- package/dist/types-DshXPnWA.d.ts +0 -62
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/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":["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 {\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 } 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 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":["import_react","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","DOMPurify","import_react","import_jsx_runtime","last","import_jsx_runtime","import_jsx_runtime","all","doc","versionId"]}
|
|
1
|
+
{"version":3,"sources":["../src/focus.ts","../src/text.ts","../src/useLoad.ts","../src/viewers/pdfWrite.ts","../src/docx/xml.ts","../src/docx/zip.ts","../src/docx/pkg.ts","../src/docx/read.ts","../src/docx/diff.ts","../src/docx/write.ts","../src/docx/index.ts","../src/viewers/headings.ts","../src/viewers/DocxView.tsx","../src/editor/pager.ts","../src/editor/extensions.ts","../package.json","../src/editor/markdown.ts","../src/sheets/model.ts","../src/sheets/csv.ts","../src/sheets/pack.ts","../src/sheets/refs.ts","../src/sheets/styles.ts","../src/sheets/xlsx.ts","../src/sheets/write.ts","../src/sheets/book.ts","../src/sheets/shared.ts","../src/sheets/text.ts","../src/collab.ts","../src/room.ts","../src/editor/live.ts","../src/editor/TextEditor.tsx","../src/sheets/engine.ts","../src/sheets/bind.ts","../src/sheets/sheets.css","../src/sheets/grid.ts","../src/sheets/SheetView.tsx","../src/index.ts","../src/DocumentOverlay.tsx","../src/kinds.ts","../src/slides/SlidesView.tsx","../src/slides/html.ts","../src/slides/deck.ts","../src/slides/frame.ts","../src/slides/text.ts","../src/Unsaved.tsx","../src/viewers/PdfView.tsx","../src/viewers/PdfPage.tsx","../src/DocumentsWorkspace.tsx","../src/Sharing.tsx","../src/Thumb.tsx","../src/preview.ts","../src/GuestDocument.tsx"],"sourcesContent":["import { useLayoutEffect, type KeyboardEvent } from 'react';\n\nconst pops = '.w100n-text-pop, .w100n-sheet-pop, .w100n-pdf-pop, .w100n-pdf-more';\n\nexport function rove(e: KeyboardEvent<HTMLElement>) {\n const target = e.target as HTMLElement;\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key) || e.altKey || e.metaKey || e.ctrlKey || target.closest('input, textarea, select, [contenteditable=\"true\"]')) return;\n const pop = target.closest(pops);\n const list = [...(pop ?? e.currentTarget).querySelectorAll<HTMLElement>('button:not(:disabled)')].filter(el => el.closest(pops) === pop);\n const at = list.indexOf(target);\n if (at < 0) return;\n e.preventDefault();\n e.stopPropagation();\n list[e.key === 'Home' ? 0 : e.key === 'End' ? list.length - 1 : (at + (e.key === 'ArrowRight' ? 1 : -1) + list.length) % list.length].focus();\n}\n\nexport function useRestore(open: boolean) {\n useLayoutEffect(() => {\n if (!open) return;\n const back = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n return () => { if (back?.isConnected) back.focus(); };\n }, [open]);\n}\n","import type { DocumentKind, Language, SignatureMethod } 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 pick: 'Choose a document from the list', 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: 'Updated by', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', 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 pdfTools: 'PDF tools', pages: 'Pages', page: 'Page', fitWidth: 'Fit to width', fitPage: 'Fit to page', find: 'Find in the document', previous: 'Previous', next: 'Next',\n close: 'Close', searching: 'Searching', noHits: 'No results', selectText: 'Select text', highlight: 'Highlight', underline: 'Underline', strike: 'Strike out',\n note: 'Note', draw: 'Draw', eraser: 'Eraser', sign: 'Sign', colour: 'Colour', lineWidth: 'Line width', undo: 'Undo', redo: 'Redo', save: 'Save', saving: 'Saving',\n saved: 'Saved', saveFailed: 'Could not save', remove: 'Remove', notePlaceholder: 'Write a note', signature: 'Signature', placeHint: 'Click or tap where the signature goes',\n cancel: 'Cancel', signTitle: 'Add a signature', typed: 'Type', drawn: 'Draw', image: 'Image', yourName: 'Your name', drawHere: 'Sign with the mouse or a finger',\n clear: 'Clear', pickImage: 'Choose a PNG or JPEG image', useSign: 'Place the signature', marksNote: 'Marks', formNote: 'Form filled', signedNote: 'Signed',\n signatures: 'Signatures', noSignatures: 'Nobody has signed this file yet', version: 'Version', download: 'Download', openInDocuments: 'Open in Documents',\n textTools: 'Text tools', home: 'Home', insert: 'Insert', layout: 'Layout', review: 'Review', viewTab: 'View', paragraphStyle: 'Paragraph style', normal: 'Normal',\n heading: 'Heading', quote: 'Quote', code: 'Code', bold: 'Bold', italic: 'Italic', textColour: 'Text colour', automatic: 'Automatic', noColour: 'No colour',\n bullets: 'Bulleted list', numbers: 'Numbered list', tasks: 'Task list', alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', justify: 'Justify',\n indent: 'Increase indent', outdent: 'Decrease indent', clearFormat: 'Clear formatting', table: 'Table', rowAbove: 'Row above', rowBelow: 'Row below',\n columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRow: 'Delete row', deleteColumn: 'Delete column', deleteTable: 'Delete table',\n headerRow: 'Header row', mergeCells: 'Merge or split cells', imageLink: 'Image address', chooseFile: 'Choose a file', put: 'Insert', link: 'Link',\n linkAddress: 'Link address', apply: 'Apply', unlink: 'Remove link', pageBreak: 'Page break', rule: 'Horizontal line', pageSize: 'Page size', margins: 'Margins',\n marginsNormal: 'Normal', marginsNarrow: 'Narrow', marginsWide: 'Wide', addComment: 'Add comment', comments: 'Comments', noComments: 'No comments yet',\n commentHint: 'Select text and add a comment', writeComment: 'Write a comment', post: 'Post', reply: 'Reply', resolve: 'Resolve', reopen: 'Reopen',\n resolved: 'Resolved', showResolved: 'Show resolved', commentFailed: 'Could not send the comment', exportAs: 'Export', exportFailed: 'Could not export',\n editedNote: 'Text edited', documentText: 'Document text', locked: 'Kept as in the file', references: 'References', toc: 'Table of contents', tocInsert: 'Insert table of contents', tocGo: 'Go to the table',\n tocRemove: 'Remove the table', tocHint: 'It follows the headings as you write', tocEmpty: 'Add headings and they show here',\n suggest: 'Suggest changes', suggesting: 'Suggesting', suggestions: 'Suggestions', acceptAll: 'Accept all', rejectAll: 'Reject all', accept: 'Accept', reject: 'Reject',\n added: 'Added', removed: 'Deleted', someone: 'Someone', copyAs: 'Make an XLSX copy', copyFailed: 'Could not make the copy', editComment: 'Edit', delete: 'Delete',\n deleteAsk: 'Delete this comment?', deleteThread: 'Delete this comment and its replies?', changeFailed: 'Could not change the comment',\n unsavedTitle: 'Save your changes?', unsavedHint: 'This document has changes that are not saved yet.', discard: 'Discard', more: 'More tools',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this document', you: 'you',\n share: 'Share', sharing: 'Sharing', guestLinks: 'Guest links', viewLink: 'View link', commentLink: 'Comment link', madeBy: 'Made by {name}', endsOn: 'Ends {date}',\n untilOff: 'Until turned off', linkEnded: 'Ended', downloadOn: 'Download on', passwordOn: 'Password', copy: 'Copy', copied: 'Copied', changeLink: 'Change',\n turnOff: 'Turn off', newLink: 'New guest link', guestsCan: 'Guests can', canRead: 'Read', canComment: 'Read and comment', badgeRead: 'Read only',\n badgeComment: 'Read and comment', linkWorks: 'Link works', days7: '7 days', days30: '30 days', untilTurnOff: 'Until I turn it off', pickDay: 'Pick a day',\n passwordHint: 'Guests type it once on their device', passwordPlaceholder: 'Type the password', keepPassword: 'Leave empty to keep the password',\n downloadFile: 'Download the file', downloadHint: 'The original file and a PDF copy', askName: \"Ask the guest's name\", askNameHint: 'Shown to you in who opened it',\n lastSaved: 'Guests see the last saved version. A new version reaches the link when someone saves.', makeLink: 'Make the link', saveLink: 'Save the link',\n inTeam: 'Inside the team', peopleOf: 'People of {space}', teamHint: 'Everyone who sees Drive of this project reads it, people with edit rights change it.',\n noLinks: 'No guest links yet. A link opens this document without an account.', unnamed: 'Guests without a name', shareFailed: 'The link did not save. Try again.',\n sharedBy: 'Shared by {name}', openDoc: 'Open', passwordAsk: 'This document opens with a password. Type it to open the document on this device.',\n wrongPassword: 'The password does not fit. Try again.', endedTitle: 'This link has ended',\n endedText: 'The person who shared this document turned the link off or it reached its last day. Ask them for a new link.',\n missingTitle: 'This link opens nothing', missingText: 'Check the address or ask for a new link.',\n nameAsk: 'Type your name to read this document. The person who shared it sees who opened it.',\n nameHint: 'The person who shared this document sees your name and comments. The name stays on this device.', nameNeeded: 'Type your name to comment',\n guest: 'Guest', pdfCopy: 'PDF copy', tooMany: 'Too many tries. Try again in a few minutes.',\n openForms: { one: 'open', other: 'opens' } as Record<string, string>, commentForms: { one: 'comment', other: 'comments' } as Record<string, string>,\n methods: { typed: 'Typed', drawn: 'Drawn', image: 'Image' } satisfies Record<SignatureMethod, string>,\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 pick: 'Wybierz dokument z listy', 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: 'Zmienione przez', kind: 'Format', rights: 'Możesz', view: 'Przeglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', 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 pdfTools: 'Narzędzia PDF', pages: 'Strony', page: 'Strona', fitWidth: 'Dopasuj do szerokości', fitPage: 'Cała strona', find: 'Szukaj w dokumencie', previous: 'Poprzedni', next: 'Następny',\n close: 'Zamknij', searching: 'Wyszukiwanie', noHits: 'Brak wyników', selectText: 'Zaznacz tekst', highlight: 'Wyróżnij', underline: 'Podkreśl', strike: 'Przekreśl',\n note: 'Notatka', draw: 'Rysuj', eraser: 'Gumka', sign: 'Podpisz', colour: 'Kolor', lineWidth: 'Grubość linii', undo: 'Cofnij', redo: 'Ponów', save: 'Zapisz', saving: 'Zapisywanie',\n saved: 'Zapisano', saveFailed: 'Nie udało się zapisać', remove: 'Usuń', notePlaceholder: 'Napisz notatkę', signature: 'Podpis', placeHint: 'Kliknij lub dotknij miejsca, gdzie ma być podpis',\n cancel: 'Anuluj', signTitle: 'Dodaj podpis', typed: 'Wpisz', drawn: 'Narysuj', image: 'Obraz', yourName: 'Imię i nazwisko', drawHere: 'Podpisz myszą lub palcem',\n clear: 'Wyczyść', pickImage: 'Wybierz obraz PNG lub JPEG', useSign: 'Wstaw podpis', marksNote: 'Oznaczenia', formNote: 'Wypełniony formularz', signedNote: 'Podpisano',\n signatures: 'Podpisy', noSignatures: 'Nikt jeszcze nie podpisał tego pliku', version: 'Wersja', download: 'Pobierz', openInDocuments: 'Otwórz w Dokumentach',\n textTools: 'Narzędzia tekstowe', home: 'Narzędzia główne', insert: 'Wstawianie', layout: 'Układ', review: 'Recenzja', viewTab: 'Widok', paragraphStyle: 'Styl akapitu', normal: 'Normalny',\n heading: 'Nagłówek', quote: 'Cytat', code: 'Kod', bold: 'Pogrubienie', italic: 'Kursywa', textColour: 'Kolor tekstu', automatic: 'Automatyczny', noColour: 'Bez koloru',\n bullets: 'Lista punktowana', numbers: 'Lista numerowana', tasks: 'Lista zadań', alignLeft: 'Wyrównaj do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Wyrównaj do prawej', justify: 'Wyjustuj',\n indent: 'Zwiększ wcięcie', outdent: 'Zmniejsz wcięcie', clearFormat: 'Wyczyść formatowanie', table: 'Tabela', rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej',\n columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRow: 'Usuń wiersz', deleteColumn: 'Usuń kolumnę', deleteTable: 'Usuń tabelę',\n headerRow: 'Wiersz nagłówka', mergeCells: 'Scal lub podziel komórki', imageLink: 'Adres obrazu', chooseFile: 'Wybierz plik', put: 'Wstaw', link: 'Link',\n linkAddress: 'Adres linku', apply: 'Zastosuj', unlink: 'Usuń link', pageBreak: 'Podział strony', rule: 'Linia pozioma', pageSize: 'Rozmiar strony', margins: 'Marginesy',\n marginsNormal: 'Normalne', marginsNarrow: 'Wąskie', marginsWide: 'Szerokie', addComment: 'Dodaj komentarz', comments: 'Komentarze', noComments: 'Nie ma jeszcze komentarzy',\n commentHint: 'Zaznacz tekst i dodaj komentarz', writeComment: 'Napisz komentarz', post: 'Dodaj', reply: 'Odpowiedz', resolve: 'Rozwiąż', reopen: 'Otwórz ponownie',\n resolved: 'Rozwiązany', showResolved: 'Pokaż rozwiązane', commentFailed: 'Nie udało się wysłać komentarza', exportAs: 'Eksport', exportFailed: 'Nie udało się wyeksportować',\n editedNote: 'Edycja tekstu', documentText: 'Tekst dokumentu', locked: 'Zachowane jak w pliku', references: 'Odwołania', toc: 'Spis treści', tocInsert: 'Wstaw spis treści', tocGo: 'Przejdź do spisu',\n tocRemove: 'Usuń spis', tocHint: 'Sam podąża za nagłówkami', tocEmpty: 'Dodaj nagłówki, a pojawią się tutaj',\n suggest: 'Sugeruj zmiany', suggesting: 'Sugerowanie', suggestions: 'Sugestie', acceptAll: 'Akceptuj wszystkie', rejectAll: 'Odrzuć wszystkie', accept: 'Akceptuj', reject: 'Odrzuć',\n added: 'Dodano', removed: 'Usunięto', someone: 'Ktoś', copyAs: 'Zrób kopię XLSX', copyFailed: 'Nie udało się zrobić kopii', editComment: 'Edytuj', delete: 'Usuń',\n deleteAsk: 'Usunąć ten komentarz?', deleteThread: 'Usunąć ten komentarz razem z odpowiedziami?', changeFailed: 'Nie udało się zmienić komentarza',\n unsavedTitle: 'Zapisać zmiany?', unsavedHint: 'Ten dokument ma niezapisane zmiany.', discard: 'Nie zapisuj', more: 'Więcej narzędzi',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym dokumencie', you: 'ty',\n share: 'Udostępnij', sharing: 'Udostępnianie', guestLinks: 'Linki dla gości', viewLink: 'Link do czytania', commentLink: 'Link do komentowania',\n madeBy: 'Utworzono przez {name}', endsOn: 'Działa do {date}', untilOff: 'Do wyłączenia', linkEnded: 'Wygasł', downloadOn: 'Pobieranie włączone', passwordOn: 'Hasło',\n copy: 'Kopiuj', copied: 'Skopiowano', changeLink: 'Zmień', turnOff: 'Wyłącz', newLink: 'Nowy link dla gości', guestsCan: 'Goście mogą', canRead: 'Czytać',\n canComment: 'Czytać i komentować', badgeRead: 'Tylko do odczytu', badgeComment: 'Czytanie i komentarze', linkWorks: 'Link działa', days7: '7 dni', days30: '30 dni',\n untilTurnOff: 'Dopóki go nie wyłączę', pickDay: 'Wybierz dzień', passwordHint: 'Goście wpisują je raz na swoim urządzeniu', passwordPlaceholder: 'Wpisz hasło',\n keepPassword: 'Zostaw puste, aby zachować hasło', downloadFile: 'Pobieranie pliku', downloadHint: 'Oryginalny plik i kopia PDF', askName: 'Pytaj gościa o imię',\n askNameHint: 'Widzisz je na liście osób, które otworzyły link', lastSaved: 'Goście widzą ostatnią zapisaną wersję. Nowa wersja trafia do linku, gdy ktoś zapisze.',\n makeLink: 'Utwórz link', saveLink: 'Zapisz link', inTeam: 'W zespole', peopleOf: 'Osoby z projektu {space}',\n teamHint: 'Każdy, kto widzi Dysk tego projektu, czyta go, a osoby z prawem edycji go zmieniają.',\n noLinks: 'Nie ma jeszcze linków dla gości. Link otwiera ten dokument bez konta.', unnamed: 'Goście bez imienia', shareFailed: 'Nie udało się zapisać linku. Spróbuj ponownie.',\n sharedBy: 'Udostępnione przez {name}', openDoc: 'Otwórz', passwordAsk: 'Ten dokument otwiera się hasłem. Wpisz je, aby otworzyć dokument na tym urządzeniu.',\n wrongPassword: 'Hasło nie pasuje. Spróbuj ponownie.', endedTitle: 'Ten link wygasł',\n endedText: 'Osoba, która udostępniła dokument, wyłączyła link albo minął jego ostatni dzień. Poproś ją o nowy link.',\n missingTitle: 'Ten link niczego nie otwiera', missingText: 'Sprawdź adres albo poproś o nowy link.',\n nameAsk: 'Wpisz swoje imię, aby przeczytać ten dokument. Osoba, która go udostępniła, widzi, kto go otworzył.',\n nameHint: 'Osoba, która udostępniła dokument, widzi Twoje imię i komentarze. Imię zostaje na tym urządzeniu.', nameNeeded: 'Wpisz imię, aby komentować',\n guest: 'Gość', pdfCopy: 'Kopia PDF', tooMany: 'Za dużo prób. Spróbuj za kilka minut.',\n openForms: { one: 'otwarcie', few: 'otwarcia', many: 'otwarć', other: 'otwarcia' }, commentForms: { one: 'komentarz', few: 'komentarze', many: 'komentarzy', other: 'komentarza' },\n methods: { typed: 'Wpisany', drawn: 'Narysowany', image: 'Obraz' },\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 pick: 'Виберіть документ у списку', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Хто змінив', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', unsupported: 'Цей файл поки не можна показати',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n allProjects: 'Усі проєкти', closePanel: 'Сховати панель', openPanel: 'Показати панель', zoomIn: 'Збільшити', zoomOut: 'Зменшити', fit: 'Справжній розмір',\n pdfTools: 'Інструменти PDF', pages: 'Сторінки', page: 'Сторінка', fitWidth: 'За шириною', fitPage: 'Сторінка цілком', find: 'Пошук у документі', previous: 'Попередній', next: 'Наступний',\n close: 'Закрити', searching: 'Пошук', noHits: 'Нічого не знайдено', selectText: 'Виділити текст', highlight: 'Маркер', underline: 'Підкреслити', strike: 'Закреслити',\n note: 'Нотатка', draw: 'Малювати', eraser: 'Гумка', sign: 'Підписати', colour: 'Колір', lineWidth: 'Товщина лінії', undo: 'Відмінити', redo: 'Повторити', save: 'Зберегти', saving: 'Збереження',\n saved: 'Збережено', saveFailed: 'Не вдалося зберегти', remove: 'Видалити', notePlaceholder: 'Напишіть нотатку', signature: 'Підпис', placeHint: 'Клацніть або торкніться місця, де має бути підпис',\n cancel: 'Скасувати', signTitle: 'Додати підпис', typed: 'Ввести', drawn: 'Намалювати', image: 'Зображення', yourName: 'Ваше ім’я', drawHere: 'Підпишіться мишею або пальцем',\n clear: 'Очистити', pickImage: 'Виберіть зображення PNG або JPEG', useSign: 'Поставити підпис', marksNote: 'Позначки', formNote: 'Заповнена форма', signedNote: 'Підписано',\n signatures: 'Підписи', noSignatures: 'Цей файл ще ніхто не підписав', version: 'Версія', download: 'Завантажити', openInDocuments: 'Відкрити в Документах',\n textTools: 'Інструменти для тексту', home: 'Основне', insert: 'Вставлення', layout: 'Макет', review: 'Рецензування', viewTab: 'Вигляд', paragraphStyle: 'Стиль абзацу', normal: 'Звичайний',\n heading: 'Заголовок', quote: 'Цитата', code: 'Код', bold: 'Жирний', italic: 'Курсив', textColour: 'Колір тексту', automatic: 'Автоматично', noColour: 'Без кольору',\n bullets: 'Маркований список', numbers: 'Нумерований список', tasks: 'Список завдань', alignLeft: 'По лівому краю', alignCenter: 'По центру', alignRight: 'По правому краю', justify: 'По ширині',\n indent: 'Збільшити відступ', outdent: 'Зменшити відступ', clearFormat: 'Очистити форматування', table: 'Таблиця', rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче',\n columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRow: 'Видалити рядок', deleteColumn: 'Видалити стовпець', deleteTable: 'Видалити таблицю',\n headerRow: 'Рядок заголовка', mergeCells: 'Об’єднати або розділити клітинки', imageLink: 'Адреса зображення', chooseFile: 'Вибрати файл', put: 'Вставити', link: 'Посилання',\n linkAddress: 'Адреса посилання', apply: 'Застосувати', unlink: 'Прибрати посилання', pageBreak: 'Розрив сторінки', rule: 'Горизонтальна лінія', pageSize: 'Розмір сторінки', margins: 'Поля',\n marginsNormal: 'Звичайні', marginsNarrow: 'Вузькі', marginsWide: 'Широкі', addComment: 'Додати коментар', comments: 'Коментарі', noComments: 'Коментарів ще немає',\n commentHint: 'Виділіть текст і додайте коментар', writeComment: 'Напишіть коментар', post: 'Додати', reply: 'Відповісти', resolve: 'Вирішити', reopen: 'Відкрити знову',\n resolved: 'Вирішено', showResolved: 'Показати вирішені', commentFailed: 'Не вдалося надіслати коментар', exportAs: 'Експорт', exportFailed: 'Не вдалося експортувати',\n editedNote: 'Правка тексту', documentText: 'Текст документа', locked: 'Лишається як у файлі', references: 'Посилання', toc: 'Зміст', tocInsert: 'Вставити зміст', tocGo: 'Перейти до змісту',\n tocRemove: 'Прибрати зміст', tocHint: 'Сам іде за заголовками', tocEmpty: 'Додайте заголовки, і вони з’являться тут',\n suggest: 'Пропонувати зміни', suggesting: 'Режим пропозицій', suggestions: 'Пропозиції', acceptAll: 'Прийняти всі', rejectAll: 'Відхилити всі', accept: 'Прийняти', reject: 'Відхилити',\n added: 'Додано', removed: 'Видалено', someone: 'Хтось', copyAs: 'Зробити копію XLSX', copyFailed: 'Не вдалося зробити копію', editComment: 'Змінити', delete: 'Видалити',\n deleteAsk: 'Видалити цей коментар?', deleteThread: 'Видалити цей коментар разом з відповідями?', changeFailed: 'Не вдалося змінити коментар',\n unsavedTitle: 'Зберегти зміни?', unsavedHint: 'У цьому документі є незбережені зміни.', discard: 'Не зберігати', more: 'Більше інструментів',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цьому документі', you: 'ви',\n share: 'Поділитися', sharing: 'Доступ', guestLinks: 'Посилання для гостей', viewLink: 'Посилання для читання', commentLink: 'Посилання для коментарів',\n madeBy: 'Автор: {name}', endsOn: 'Діє до {date}', untilOff: 'Доки не вимкнуть', linkEnded: 'Завершено', downloadOn: 'Завантаження ввімкнено', passwordOn: 'Пароль',\n copy: 'Копіювати', copied: 'Скопійовано', changeLink: 'Змінити', turnOff: 'Вимкнути', newLink: 'Нове посилання для гостей', guestsCan: 'Гості можуть', canRead: 'Читати',\n canComment: 'Читати й коментувати', badgeRead: 'Лише читання', badgeComment: 'Читання й коментарі', linkWorks: 'Посилання діє', days7: '7 днів', days30: '30 днів',\n untilTurnOff: 'Доки не вимкну', pickDay: 'Вибрати день', passwordHint: 'Гості вводять його один раз на своєму пристрої', passwordPlaceholder: 'Введіть пароль',\n keepPassword: 'Лишіть порожнім, щоб зберегти пароль', downloadFile: 'Завантаження файлу', downloadHint: 'Оригінальний файл і копія PDF', askName: 'Питати ім’я гостя',\n askNameHint: 'Ви бачите його серед тих, хто відкривав', lastSaved: 'Гості бачать останню збережену версію. Нова версія потрапляє за посиланням, коли хтось зберігає.',\n makeLink: 'Створити посилання', saveLink: 'Зберегти посилання', inTeam: 'У команді', peopleOf: 'Люди проєкту {space}',\n teamHint: 'Кожен, хто бачить Drive цього проєкту, читає його, а люди з правом правки змінюють.',\n noLinks: 'Посилань для гостей ще немає. Посилання відкриває цей документ без облікового запису.', unnamed: 'Гості без імені', shareFailed: 'Не вдалося зберегти посилання. Спробуйте ще.',\n sharedBy: 'Від {name}', openDoc: 'Відкрити', passwordAsk: 'Цей документ відкривається з паролем. Введіть його, щоб відкрити документ на цьому пристрої.',\n wrongPassword: 'Пароль не підходить. Спробуйте ще.', endedTitle: 'Це посилання більше не діє',\n endedText: 'Той, хто поділився документом, вимкнув посилання або минув його останній день. Попросіть нове посилання.',\n missingTitle: 'Це посилання нічого не відкриває', missingText: 'Перевірте адресу або попросіть нове посилання.',\n nameAsk: 'Введіть своє ім’я, щоб прочитати документ. Той, хто ним поділився, бачить, хто його відкривав.',\n nameHint: 'Той, хто поділився документом, бачить ваше ім’я та коментарі. Ім’я лишається на цьому пристрої.', nameNeeded: 'Введіть ім’я, щоб коментувати',\n guest: 'Гість', pdfCopy: 'Копія PDF', tooMany: 'Забагато спроб. Спробуйте за кілька хвилин.',\n openForms: { one: 'відкриття', few: 'відкриття', many: 'відкриттів', other: 'відкриття' }, commentForms: { one: 'коментар', few: 'коментарі', many: 'коментарів', other: 'коментаря' },\n methods: { typed: 'Введений', drawn: 'Намальований', image: 'Зображення' },\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 { init } from '@embedpdf/pdfium';\nimport { PdfiumNative } from '@embedpdf/engines/pdfium';\nimport { PDF_FORM_FIELD_TYPE, PdfAnnotationSubtype, PdfBlendMode, type PdfAnnotationObject, type Rect } from '@embedpdf/models';\nimport type { SignatureMethod } from '../types';\n\nexport type Point = { x: number; y: number };\nexport type Box = Point & { w: number; h: number };\n\nexport type Mark = { id: string; page: number; author: string; at: string } & (\n | { kind: 'highlight' | 'underline' | 'strike'; rects: Box[]; text: string; color: string }\n | { kind: 'note'; spot: Point; text: string; color: string }\n | { kind: 'ink'; lines: Point[][]; width: number; color: string }\n | { kind: 'sign'; box: Box; image: string; method: SignatureMethod }\n);\n\nexport type Field = { page: number; name: string; box: Box; value: string | boolean | string[] };\n\nlet engine: Promise<PdfiumNative> | null = null;\n\nconst rect = (box: Box): Rect => ({ origin: { x: box.x, y: box.y }, size: { width: box.w, height: box.h } });\n\nconst around = (boxes: Box[]): Box => {\n const x = Math.min(...boxes.map(b => b.x));\n const y = Math.min(...boxes.map(b => b.y));\n return { x, y, w: Math.max(...boxes.map(b => b.x + b.w)) - x, h: Math.max(...boxes.map(b => b.y + b.h)) - y };\n};\n\nconst png = (url: string) => Uint8Array.from(atob(url.slice(url.indexOf(',') + 1)), c => c.charCodeAt(0)).buffer;\n\nconst types = { highlight: PdfAnnotationSubtype.HIGHLIGHT, underline: PdfAnnotationSubtype.UNDERLINE, strike: PdfAnnotationSubtype.STRIKEOUT } as const;\n\nfunction annotation(mark: Mark): PdfAnnotationObject {\n const base = { id: mark.id, pageIndex: mark.page - 1, author: mark.author, created: new Date(mark.at), modified: new Date(mark.at) };\n if (mark.kind === 'note') {\n return { ...base, type: PdfAnnotationSubtype.TEXT, rect: rect({ ...mark.spot, w: 20, h: 20 }), contents: mark.text, strokeColor: mark.color, opacity: 1 };\n }\n if (mark.kind === 'ink') {\n const spread = mark.width / 2 + 1;\n const bounds = around(mark.lines.flat().map(p => ({ x: p.x - spread, y: p.y - spread, w: spread * 2, h: spread * 2 })));\n return { ...base, type: PdfAnnotationSubtype.INK, rect: rect(bounds), inkList: mark.lines.map(points => ({ points })), strokeColor: mark.color, strokeWidth: mark.width, opacity: 1 };\n }\n if (mark.kind === 'sign') return { ...base, type: PdfAnnotationSubtype.STAMP, rect: rect(mark.box) };\n return {\n ...base, type: types[mark.kind], rect: rect(around(mark.rects)), segmentRects: mark.rects.map(rect), contents: mark.text, strokeColor: mark.color, opacity: 1,\n ...(mark.kind === 'highlight' ? { blendMode: PdfBlendMode.Multiply } : {}),\n } as PdfAnnotationObject;\n}\n\nexport async function write(bytes: ArrayBuffer, marks: Mark[], fields: Field[]): Promise<ArrayBuffer> {\n engine ??= init({}).then(module => new PdfiumNative(module));\n const pdfium = await engine;\n const doc = await pdfium.openDocumentBuffer({ id: Math.random().toString(36).slice(2), content: bytes.slice(0) }).toPromise();\n try {\n for (const n of new Set(fields.map(field => field.page))) {\n const page = doc.pages[n - 1];\n const widgets = await pdfium.getPageAnnoWidgets(doc, page).toPromise();\n for (const field of fields.filter(f => f.page === n)) {\n const centre = (r: Rect) => Math.hypot(r.origin.x + r.size.width / 2 - field.box.x - field.box.w / 2, r.origin.y + r.size.height / 2 - field.box.y - field.box.h / 2);\n const widget = widgets.filter(w => w.field.name === field.name).sort((a, b) => centre(a.rect) - centre(b.rect))[0];\n if (!widget) continue;\n const { type } = widget.field;\n if (type === PDF_FORM_FIELD_TYPE.TEXTFIELD) {\n await pdfium.setFormFieldValue(doc, page, widget, { kind: 'text', text: String(field.value) }).toPromise();\n } else if (type === PDF_FORM_FIELD_TYPE.CHECKBOX || (type === PDF_FORM_FIELD_TYPE.RADIOBUTTON && field.value === true)) {\n await pdfium.setFormFieldValue(doc, page, widget, { kind: 'checked', checked: field.value === true }).toPromise();\n } else if ('options' in widget.field && Array.isArray(field.value)) {\n for (const [index, option] of widget.field.options.entries()) {\n const wanted = field.value.includes(option.label);\n if (wanted !== option.isSelected) await pdfium.setFormFieldValue(doc, page, widget, { kind: 'selection', index, isSelected: wanted }).toPromise();\n }\n }\n }\n }\n for (const mark of marks) {\n const page = doc.pages[mark.page - 1];\n if (mark.kind === 'sign') await pdfium.createPageAnnotation(doc, page, annotation(mark), { data: png(mark.image), mimeType: 'image/png' } as never).toPromise();\n else await pdfium.createPageAnnotation(doc, page, annotation(mark)).toPromise();\n }\n return await pdfium.saveAsCopy(doc).toPromise();\n } finally {\n await pdfium.closeDocument(doc).toPromise();\n }\n}\n","export type El = { name: string; start: number; open: number; close: number; end: number; kids: El[] };\n\nexport function parse(s: string): El {\n const root: El = { name: '', start: 0, open: 0, close: s.length, end: s.length, kids: [] };\n const stack = [root];\n const n = s.length;\n let i = s.indexOf('<');\n while (i !== -1 && i < n) {\n const c = s.charCodeAt(i + 1);\n let next: number;\n if (c === 63) next = s.indexOf('?>', i) + 2;\n else if (c === 33) {\n if (s.startsWith('<!--', i)) next = s.indexOf('-->', i) + 3;\n else if (s.startsWith('<![CDATA[', i)) next = s.indexOf(']]>', i) + 3;\n else next = s.indexOf('>', i) + 1;\n } else if (c === 47) {\n next = s.indexOf('>', i) + 1;\n if (stack.length > 1) {\n const top = stack.pop()!;\n top.close = i;\n top.end = next;\n }\n } else {\n let j = i + 1;\n while (j < n) {\n const d = s.charCodeAt(j);\n if (d === 32 || d === 62 || d === 47 || d === 9 || d === 10 || d === 13) break;\n j++;\n }\n let k = j;\n for (; k < n; k++) {\n const d = s.charCodeAt(k);\n if (d === 34 || d === 39) {\n k = s.indexOf(d === 34 ? '\"' : \"'\", k + 1);\n if (k === -1) k = n;\n } else if (d === 62) break;\n }\n const self = s.charCodeAt(k - 1) === 47;\n const el: El = { name: s.slice(i + 1, j), start: i, open: k + 1, close: k + 1, end: k + 1, kids: [] };\n stack[stack.length - 1].kids.push(el);\n if (!self) stack.push(el);\n next = k + 1;\n }\n if (next <= i) break;\n i = s.indexOf('<', next);\n }\n return root;\n}\n\nexport function attr(s: string, el: El, name: string): string | null {\n const tag = s.slice(el.start, el.open);\n const key = name + '=';\n let i = tag.indexOf(key);\n while (i > 0) {\n const before = tag.charCodeAt(i - 1);\n if (before === 32 || before === 9 || before === 10 || before === 13) {\n const q = tag[i + key.length];\n return unescape(tag.slice(i + key.length + 1, tag.indexOf(q, i + key.length + 1)));\n }\n i = tag.indexOf(key, i + 1);\n }\n return null;\n}\n\nexport function attrs(tag: string): [string, string][] {\n const out: [string, string][] = [];\n const re = /([\\w:.-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n const body = tag.slice(tag.search(/[\\s/>]/));\n for (let m = re.exec(body); m; m = re.exec(body)) out.push([m[1], unescape(m[3] ?? m[4])]);\n return out;\n}\n\nexport function kid(el: El, name: string): El | undefined {\n for (const k of el.kids) if (k.name === name) return k;\n return undefined;\n}\n\nexport function find(el: El, name: string): El | undefined {\n for (const k of el.kids) {\n if (k.name === name) return k;\n const deep = find(k, name);\n if (deep) return deep;\n }\n return undefined;\n}\n\nexport function inner(s: string, el: El): string {\n return unescape(s.slice(el.open, el.close));\n}\n\nexport function on(s: string, el: El | undefined, name = 'w:val'): boolean {\n if (!el) return false;\n const v = attr(s, el, name);\n return v === null || !/^(0|false|off|none)$/.test(v);\n}\n\nconst named: Record<string, string> = { lt: '<', gt: '>', amp: '&', quot: '\"', apos: \"'\" };\n\nexport function unescape(s: string): string {\n if (s.indexOf('&') === -1) return s;\n return s.replace(/&(#x[0-9a-fA-F]+|#\\d+|\\w+);/g, (m, e: string) => {\n if (e[0] !== '#') return named[e] ?? m;\n const code = e[1] === 'x' ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);\n return String.fromCodePoint(code);\n });\n}\n\nexport function escape(s: string): string {\n return s\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uFFFE\\uFFFF]/g, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\nexport function opened(s: string, el: El): string {\n const tag = s.slice(el.start, el.open);\n return el.end === el.open ? tag.replace(/\\s*\\/>$/, '>') : tag;\n}\n\nexport function rebuild(pr: string, tag: string, order: string[], set: Record<string, string | null>): string {\n const root = parse(pr).kids[0];\n const parts: { name: string; xml: string }[] = root ? root.kids.map(k => ({ name: k.name, xml: pr.slice(k.start, k.end) })) : [];\n const seen = new Set<string>();\n const out: { name: string; xml: string }[] = [];\n for (const p of parts) {\n if (!(p.name in set)) out.push(p);\n else if (!seen.has(p.name)) {\n seen.add(p.name);\n if (set[p.name] !== null) out.push({ name: p.name, xml: set[p.name]! });\n }\n }\n for (const name in set) if (!seen.has(name) && set[name] !== null) out.push({ name, xml: set[name]! });\n if (!out.length) return '';\n const rank = (name: string) => {\n const i = order.indexOf(name);\n return i === -1 ? order.length : i;\n };\n const sorted = out.map((p, i) => ({ p, i })).sort((a, b) => rank(a.p.name) - rank(b.p.name) || a.i - b.i);\n const open = root ? opened(pr, root) : `<${tag}>`;\n return open + sorted.map(x => x.p.xml).join('') + `</${tag}>`;\n}\n","import { deflateSync, inflateSync } from 'fflate';\n\nexport type Entry = {\n name: string;\n path: Uint8Array;\n method: number;\n flags: number;\n time: number;\n date: number;\n crc: number;\n size: number;\n version: number;\n made: number;\n inner: number;\n outer: number;\n raw: Uint8Array;\n};\n\nexport function unzip(buf: Uint8Array): Entry[] {\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n let eocd = buf.length - 22;\n while (eocd >= 0 && view.getUint32(eocd, true) !== 0x06054b50) eocd--;\n if (eocd < 0) throw new Error('Not a DOCX file');\n const count = view.getUint16(eocd + 10, true);\n let at = view.getUint32(eocd + 16, true);\n if (count === 0xffff || at === 0xffffffff) throw new Error('ZIP64 DOCX files are not supported');\n const names = new TextDecoder();\n const out: Entry[] = [];\n for (let n = 0; n < count; n++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new Error('Broken DOCX file');\n const length = view.getUint16(at + 28, true);\n const extra = view.getUint16(at + 30, true);\n const note = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const csize = view.getUint32(at + 20, true);\n const path = buf.subarray(at + 46, at + 46 + length);\n const begin = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n out.push({\n name: names.decode(path),\n path,\n made: view.getUint16(at + 4, true),\n version: view.getUint16(at + 6, true),\n flags: view.getUint16(at + 8, true),\n method: view.getUint16(at + 10, true),\n time: view.getUint16(at + 12, true),\n date: view.getUint16(at + 14, true),\n crc: view.getUint32(at + 16, true),\n size: view.getUint32(at + 24, true),\n inner: view.getUint16(at + 36, true),\n outer: view.getUint32(at + 38, true),\n raw: buf.subarray(begin, begin + csize),\n });\n at += 46 + length + extra + note;\n }\n return out;\n}\n\nexport function inflate(e: Entry): Uint8Array {\n if (e.method === 0) return e.raw;\n if (e.method !== 8) throw new Error(`Unsupported compression in ${e.name}`);\n return inflateSync(e.raw, { out: new Uint8Array(e.size) });\n}\n\nconst table = (() => {\n const t = new Int32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = -1;\n for (let i = 0; i < bytes.length; i++) c = table[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);\n return (c ^ -1) >>> 0;\n}\n\nexport function entry(name: string, bytes: Uint8Array, like: Entry): Entry {\n const path = new TextEncoder().encode(name);\n return { ...like, name, path, method: 8, version: Math.max(like.version, 20), flags: like.flags & ~8, crc: crc32(bytes), size: bytes.length, raw: deflateSync(bytes, { level: 6 }) };\n}\n\nexport function zip(entries: Entry[]): Uint8Array {\n let total = 22;\n for (const e of entries) total += 30 + 46 + e.path.length * 2 + e.raw.length;\n const buf = new Uint8Array(total);\n const view = new DataView(buf.buffer);\n const offsets: number[] = [];\n let at = 0;\n for (const e of entries) {\n offsets.push(at);\n view.setUint32(at, 0x04034b50, true);\n view.setUint16(at + 4, e.version, true);\n view.setUint16(at + 6, e.flags & ~8, true);\n view.setUint16(at + 8, e.method, true);\n view.setUint16(at + 10, e.time, true);\n view.setUint16(at + 12, e.date, true);\n view.setUint32(at + 14, e.crc, true);\n view.setUint32(at + 18, e.raw.length, true);\n view.setUint32(at + 22, e.size, true);\n view.setUint16(at + 26, e.path.length, true);\n view.setUint16(at + 28, 0, true);\n buf.set(e.path, at + 30);\n buf.set(e.raw, at + 30 + e.path.length);\n at += 30 + e.path.length + e.raw.length;\n }\n const start = at;\n entries.forEach((e, n) => {\n view.setUint32(at, 0x02014b50, true);\n view.setUint16(at + 4, e.made, true);\n view.setUint16(at + 6, e.version, true);\n view.setUint16(at + 8, e.flags & ~8, true);\n view.setUint16(at + 10, e.method, true);\n view.setUint16(at + 12, e.time, true);\n view.setUint16(at + 14, e.date, true);\n view.setUint32(at + 16, e.crc, true);\n view.setUint32(at + 20, e.raw.length, true);\n view.setUint32(at + 24, e.size, true);\n view.setUint16(at + 28, e.path.length, true);\n view.setUint16(at + 36, e.inner, true);\n view.setUint32(at + 38, e.outer, true);\n view.setUint32(at + 42, offsets[n], true);\n buf.set(e.path, at + 46);\n at += 46 + e.path.length;\n });\n view.setUint32(at, 0x06054b50, true);\n view.setUint16(at + 8, entries.length, true);\n view.setUint16(at + 10, entries.length, true);\n view.setUint32(at + 12, at - start, true);\n view.setUint32(at + 16, start, true);\n return buf.subarray(0, at + 22);\n}\n","import { attr, find, kid, on, parse, type El } from './xml';\nimport { inflate, unzip, type Entry } from './zip';\n\nexport type Fmt = { b: boolean; i: boolean; u: boolean; s: boolean; code: boolean; link: string | null; hl: string | null; color: string | null; size: string | null; font: string | null; rev: string | null };\ntype Mark = { type: string; attrs?: Record<string, unknown> };\ntype Rel = { id: string; type: string; target: string; external: boolean };\n\nexport const plain: Fmt = { b: false, i: false, u: false, s: false, code: false, link: null, hl: null, color: null, size: null, font: null, rev: null };\n\nexport const highlights: Record<string, string> = {\n yellow: 'ffff00', green: '00ff00', cyan: '00ffff', magenta: 'ff00ff', blue: '0000ff', red: 'ff0000', darkBlue: '000080', darkCyan: '008080',\n darkGreen: '008000', darkMagenta: '800080', darkRed: '800000', darkYellow: '808000', darkGray: '808080', lightGray: 'c0c0c0', black: '000000', white: 'ffffff',\n};\n\nconst linkStyle = /^(hyperlink|followedhyperlink|internet link|visited internet link)$/i;\nconst headingName = /^(heading|заголовок|überschrift|titre|título|titolo|nagłówek|kop|rubrik|overskrift|otsikko|nadpis|başlık|címsor|naslov|заглавие|見出し|제목|标题|標題)\\s*(\\d)$/i;\n\nexport function color(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const t = v.trim().toLowerCase();\n let m = /^#?([0-9a-f]{6})$/.exec(t);\n if (m) return '#' + m[1];\n m = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(t);\n if (m) return '#' + m[1] + m[1] + m[2] + m[2] + m[3] + m[3];\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/.exec(t);\n if (m) return '#' + [m[1], m[2], m[3]].map(x => Math.min(255, +x).toString(16).padStart(2, '0')).join('');\n return highlights[v.trim()] ? '#' + highlights[v.trim()] : null;\n}\n\nexport function size(v: unknown): string | null {\n const m = /^\\s*([\\d.]+)\\s*(pt|px)?\\s*$/.exec(String(v ?? ''));\n if (!m || !+m[1]) return null;\n const pt = m[2] === 'px' ? +m[1] * 0.75 : +m[1];\n return `${Math.round(pt * 2) / 2}pt`;\n}\n\nexport function family(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const first = v.split(',')[0].trim().replace(/^[\"']|[\"']$/g, '');\n return first || null;\n}\n\nexport function fmtOf(marks: Mark[] | undefined): Fmt {\n const f = { ...plain };\n for (const m of marks ?? []) {\n const a = m.attrs ?? {};\n if (m.type === 'bold') f.b = true;\n else if (m.type === 'italic') f.i = true;\n else if (m.type === 'underline') f.u = true;\n else if (m.type === 'strike') f.s = true;\n else if (m.type === 'code') f.code = true;\n else if (m.type === 'link' && typeof a.href === 'string' && a.href) f.link = a.href;\n else if (m.type === 'highlight') f.hl = color(a.color) ?? '#ffff00';\n else if (m.type === 'textStyle') {\n f.color = color(a.color);\n f.size = size(a.fontSize);\n f.font = family(a.fontFamily);\n } else if (m.type === 'insertion' || m.type === 'deletion') f.rev = JSON.stringify([m.type === 'insertion' ? 'ins' : 'del', String(a.id ?? ''), String(a.author ?? ''), String(a.date ?? '')]);\n }\n if (f.code) f.font = null;\n return f;\n}\n\nexport function marksOf(f: Fmt): Mark[] | undefined {\n const out: Mark[] = [];\n if (f.b) out.push({ type: 'bold' });\n if (f.i) out.push({ type: 'italic' });\n if (f.u) out.push({ type: 'underline' });\n if (f.s) out.push({ type: 'strike' });\n if (f.code) out.push({ type: 'code' });\n if (f.link) out.push({ type: 'link', attrs: { href: f.link } });\n if (f.hl) out.push({ type: 'highlight', attrs: { color: f.hl } });\n if (f.color || f.size || f.font) out.push({ type: 'textStyle', attrs: { color: f.color, fontSize: f.size, fontFamily: f.font } });\n if (f.rev) {\n const [kind, id, author, date] = JSON.parse(f.rev) as string[];\n out.push({ type: kind === 'ins' ? 'insertion' : 'deletion', attrs: { id, author, date } });\n }\n return out.length ? out : undefined;\n}\n\nexport function keyOf(f: Fmt): string {\n return `${+f.b}${+f.i}${+f.u}${+f.s}${+f.code}|${f.link ?? ''}|${f.hl ?? ''}|${f.color ?? ''}|${f.size ?? ''}|${f.font ?? ''}|${f.rev ?? ''}`;\n}\n\ntype Props = Partial<Fmt> & { hidden?: boolean; style?: string };\n\nexport class Styles {\n byId = new Map<string, El>();\n paragraph: string | null = null;\n private memo = new Map<string, unknown>();\n constructor(readonly s: string, readonly fonts: { major: string | null; minor: string | null }) {\n const root = find(parse(s), 'w:styles');\n for (const el of root?.kids ?? []) {\n if (el.name !== 'w:style') continue;\n const id = attr(s, el, 'w:styleId');\n if (id === null) continue;\n this.byId.set(id, el);\n if (attr(s, el, 'w:type') === 'paragraph' && on(s, el, 'w:default') && attr(s, el, 'w:default') !== null) this.paragraph = id;\n }\n }\n\n private cached<T>(key: string, make: () => T): T {\n if (!this.memo.has(key)) this.memo.set(key, make());\n return this.memo.get(key) as T;\n }\n\n type(id: string): string | null {\n const el = this.byId.get(id);\n return el ? attr(this.s, el, 'w:type') : null;\n }\n\n name(id: string): string {\n const el = this.byId.get(id);\n const n = el && kid(el, 'w:name');\n return n ? attr(this.s, n, 'w:val') ?? id : id;\n }\n\n private chain(id: string | null): El[] {\n const out: El[] = [];\n const seen = new Set<string>();\n while (id && !seen.has(id)) {\n seen.add(id);\n const el = this.byId.get(id);\n if (!el) break;\n out.push(el);\n const base = kid(el, 'w:basedOn');\n id = base ? attr(this.s, base, 'w:val') : null;\n }\n return out;\n }\n\n private pPr<T>(id: string | null, pick: (pPr: El) => T | undefined): T | undefined {\n for (const el of this.chain(id ?? this.paragraph)) {\n const pPr = kid(el, 'w:pPr');\n const v = pPr && pick(pPr);\n if (v !== undefined) return v;\n }\n return undefined;\n }\n\n heading(id: string | null): number | null {\n if (!id) return null;\n return this.cached('h' + id, () => {\n for (const el of this.chain(id)) {\n const n = kid(el, 'w:name');\n const name = n ? attr(this.s, n, 'w:val') ?? '' : '';\n const m = headingName.exec(name.trim());\n if (m) return +m[2] >= 1 ? Math.min(6, +m[2]) : null;\n if (/^title$/i.test(name.trim())) return 1;\n const lvl = kid(el, 'w:pPr') && kid(kid(el, 'w:pPr')!, 'w:outlineLvl');\n if (lvl) return outline(attr(this.s, lvl, 'w:val'));\n }\n return null;\n });\n }\n\n numPr(id: string | null): { num: number; lvl: number } | null {\n return this.cached('n' + id, () => {\n const pr = this.pPr(id, p => kid(p, 'w:numPr'));\n if (!pr) return null;\n const num = kid(pr, 'w:numId');\n const lvl = kid(pr, 'w:ilvl');\n return { num: num ? +(attr(this.s, num, 'w:val') ?? 0) : 0, lvl: lvl ? +(attr(this.s, lvl, 'w:val') ?? 0) : 0 };\n });\n }\n\n jc(id: string | null): string | null {\n return this.cached('j' + id, () => this.pPr(id, p => kid(p, 'w:jc') && attr(this.s, kid(p, 'w:jc')!, 'w:val')) ?? null);\n }\n\n left(id: string | null): number {\n return this.cached('l' + id, () => this.pPr(id, p => {\n const ind = kid(p, 'w:ind');\n const v = ind && (attr(this.s, ind, 'w:left') ?? attr(this.s, ind, 'w:start'));\n return v === null || v === undefined ? undefined : +v;\n }) ?? 0);\n }\n\n char(id: string): Props {\n return this.cached('c' + id, () => {\n const name = this.name(id);\n if (linkStyle.test(name) || linkStyle.test(id)) return {};\n const out: Props = {};\n for (const el of this.chain(id).reverse()) Object.assign(out, props(this.s, kid(el, 'w:rPr'), this.fonts));\n return out;\n });\n }\n\n isLink(id: string | null): boolean {\n return !!id && (linkStyle.test(this.name(id)) || linkStyle.test(id));\n }\n\n find(test: (name: string, id: string) => boolean, type = 'paragraph'): string | null {\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === type && test(this.name(id), id)) return id;\n return null;\n }\n\n headingId(level: number): string | null {\n return this.find(name => headingName.test(name.trim()) && +headingName.exec(name.trim())![2] === level)\n ?? this.find((_, id) => this.heading(id) === level && !/^title$/i.test(this.name(id)));\n }\n\n list(): { name: string; id: string; heading: number | null }[] {\n const out = [];\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === 'paragraph') out.push({ name: this.name(id), id, heading: this.heading(id) });\n return out;\n }\n}\n\nexport function outline(v: string | null): number | null {\n const n = Number(v);\n return v !== null && n >= 0 && n < 9 ? Math.min(6, n + 1) : null;\n}\n\nexport function props(s: string, rPr: El | undefined, fonts: { major: string | null; minor: string | null }): Props {\n const out: Props = {};\n if (!rPr) return out;\n for (const k of rPr.kids) {\n switch (k.name) {\n case 'w:rStyle': out.style = attr(s, k, 'w:val') ?? undefined; break;\n case 'w:b': out.b = on(s, k); break;\n case 'w:i': out.i = on(s, k); break;\n case 'w:u': out.u = on(s, k); break;\n case 'w:strike': case 'w:dstrike': out.s = on(s, k) || !!out.s; break;\n case 'w:vanish': out.hidden = on(s, k); break;\n case 'w:color': {\n const v = attr(s, k, 'w:val');\n out.color = v && v !== 'auto' ? color(v) : null;\n break;\n }\n case 'w:sz': out.size = size(+(attr(s, k, 'w:val') ?? 0) / 2); break;\n case 'w:highlight': {\n const v = attr(s, k, 'w:val') ?? 'none';\n out.hl = highlights[v] ? '#' + highlights[v] : null;\n break;\n }\n case 'w:shd': {\n const v = attr(s, k, 'w:fill');\n if (v && v !== 'auto' && out.hl === undefined) out.hl = color(v);\n break;\n }\n case 'w:rFonts': {\n const theme = attr(s, k, 'w:asciiTheme') ?? attr(s, k, 'w:hAnsiTheme');\n const font = attr(s, k, 'w:ascii') ?? attr(s, k, 'w:hAnsi') ?? (theme ? (theme.startsWith('major') ? fonts.major : fonts.minor) : null);\n if (font) out.font = font;\n break;\n }\n }\n }\n return out;\n}\n\nexport class Numbering {\n nums = new Map<number, { abs: number; starts: Map<number, number> }>();\n abs = new Map<number, Map<number, { fmt: string; start: number; left: number | null }>>();\n maxNum = 0;\n maxAbs = -1;\n constructor(readonly s: string, styles: Styles) {\n const root = find(parse(s), 'w:numbering');\n const links = new Map<number, string>();\n for (const el of root?.kids ?? []) {\n if (el.name === 'w:abstractNum') {\n const id = +(attr(s, el, 'w:abstractNumId') ?? -1);\n this.maxAbs = Math.max(this.maxAbs, id);\n const lvls = new Map<number, { fmt: string; start: number; left: number | null }>();\n for (const l of el.kids) {\n if (l.name !== 'w:lvl') continue;\n const fmt = kid(l, 'w:numFmt');\n const start = kid(l, 'w:start');\n const ind = kid(l, 'w:pPr') && kid(kid(l, 'w:pPr')!, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n lvls.set(+(attr(s, l, 'w:ilvl') ?? 0), { fmt: fmt ? attr(s, fmt, 'w:val') ?? 'decimal' : 'decimal', start: start ? +(attr(s, start, 'w:val') ?? 1) : 1, left: left ? +left : null });\n }\n this.abs.set(id, lvls);\n const link = kid(el, 'w:numStyleLink');\n if (link) links.set(id, attr(s, link, 'w:val') ?? '');\n } else if (el.name === 'w:num') {\n const id = +(attr(s, el, 'w:numId') ?? 0);\n this.maxNum = Math.max(this.maxNum, id);\n const a = kid(el, 'w:abstractNumId');\n const starts = new Map<number, number>();\n for (const o of el.kids) {\n const so = o.name === 'w:lvlOverride' ? kid(o, 'w:startOverride') : undefined;\n if (so) starts.set(+(attr(s, o, 'w:ilvl') ?? 0), +(attr(s, so, 'w:val') ?? 1));\n }\n this.nums.set(id, { abs: a ? +(attr(s, a, 'w:val') ?? -1) : -1, starts });\n }\n }\n for (const [id, style] of links) {\n const pr = styles.numPr(style);\n const target = pr && this.nums.get(pr.num);\n if (target && this.abs.has(target.abs)) this.abs.set(id, this.abs.get(target.abs)!);\n }\n }\n\n level(num: number, lvl: number) {\n const n = this.nums.get(num);\n return n ? this.abs.get(n.abs)?.get(lvl) : undefined;\n }\n\n kind(num: number, lvl: number): 'bulletList' | 'orderedList' | null {\n const l = this.level(num, lvl);\n if (!l || l.fmt === 'none') return null;\n return l.fmt === 'bullet' ? 'bulletList' : 'orderedList';\n }\n\n start(num: number, lvl: number): number {\n return this.nums.get(num)?.starts.get(lvl) ?? this.level(num, lvl)?.start ?? 1;\n }\n}\n\nexport class Pkg {\n entries: Entry[];\n files = new Map<string, Entry>();\n main: string;\n doc: string;\n fp: string;\n rels = new Map<string, Rel>();\n styles: Styles;\n nums: Numbering;\n private texts = new Map<string, string | null>();\n\n constructor(readonly bytes: Uint8Array) {\n this.entries = unzip(bytes);\n for (const e of this.entries) this.files.set(e.name, e);\n const root = this.relsOf('');\n const office = [...root.values()].find(r => r.type.endsWith('/officeDocument'));\n this.main = office ? office.target : 'word/document.xml';\n const doc = this.text(this.main);\n if (doc === null) throw new Error('DOCX file has no document part');\n this.doc = doc;\n if (!/xmlns:w=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/wordprocessingml\\/2006\\/main\"/.test(doc.slice(0, doc.indexOf('>', doc.indexOf('<w:document')) + 1))) throw new Error('DOCX document does not use the w: prefix');\n this.fp = this.files.get(this.main)!.crc.toString(36);\n this.rels = this.relsOf(this.main);\n const theme = this.byType('/theme');\n const t = theme ? this.text(theme.target) ?? '' : '';\n const fonts = { major: /<a:majorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null, minor: /<a:minorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null };\n const styles = this.byType('/styles');\n this.styles = new Styles((styles && this.text(styles.target)) ?? '', fonts);\n const nums = this.byType('/numbering');\n this.nums = new Numbering((nums && this.text(nums.target)) ?? '', this.styles);\n }\n\n part(name: string): Uint8Array {\n return inflate(this.files.get(name)!);\n }\n\n text(name: string): string | null {\n if (!this.texts.has(name)) {\n const e = this.files.get(name);\n this.texts.set(name, e ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(inflate(e)) : null);\n }\n return this.texts.get(name)!;\n }\n\n byType(suffix: string): Rel | undefined {\n for (const r of this.rels.values()) if (r.type.endsWith(suffix) && !r.external) return r;\n return undefined;\n }\n\n relsPath(part: string): string {\n const slash = part.lastIndexOf('/');\n return `${part.slice(0, slash + 1)}_rels/${part.slice(slash + 1)}.rels`;\n }\n\n private relsOf(part: string): Map<string, Rel> {\n const out = new Map<string, Rel>();\n const s = this.text(this.relsPath(part));\n if (!s) return out;\n const dir = part.slice(0, part.lastIndexOf('/') + 1);\n for (const el of find(parse(s), 'Relationships')?.kids ?? []) {\n const id = attr(s, el, 'Id');\n const target = attr(s, el, 'Target') ?? '';\n const external = attr(s, el, 'TargetMode') === 'External';\n if (id) out.set(id, { id, type: attr(s, el, 'Type') ?? '', target: external ? target : resolve(dir, target), external });\n }\n return out;\n }\n}\n\nfunction resolve(dir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : dir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.') out.push(p);\n }\n return out.join('/');\n}\n","import type { JSONContent } from '@tiptap/core';\nimport { keyOf, marksOf, outline, plain, props, type Fmt, type Pkg, type Styles } from './pkg';\nimport { attr, attrs, find, inner, kid, on, opened, parse, unescape, type El } from './xml';\n\nexport type { JSONContent };\n\nexport type Run = { open: string; rPr: string; fmt: Fmt; el: El | null; parent: El | null };\nexport type Wrap = { open: string; close: string; link: string | null; ins: boolean; rev?: string };\nexport type Span = { xml: string; link: string | null };\nexport type Pic = { embed: string; cx: number; cy: number };\nexport type Piece = { text: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; box?: boolean; brk?: 'page' | 'hr'; pic?: Pic; img?: Record<string, unknown>; fld?: string; instr?: string };\nexport type ListCtx = { type: string; depth: number };\n\nexport type Block = {\n ref: string;\n kind: 'p' | 'tbl' | 'lock' | 'pb' | 'hr' | 'toc';\n el: El;\n start: number;\n end: number;\n lead: string;\n node: JSONContent;\n pieces: Piece[];\n list: { num: number; lvl: number; type: string; start: number } | null;\n ctx: ListCtx | null;\n task: boolean | null;\n quote: boolean;\n level: number | null;\n rows: Row[];\n cols: number;\n};\nexport type Row = { ref: string; el: El; lead: string; head: string; cells: Cell[]; node: JSONContent };\nexport type Cell = { ref: string; el: El; lead: string; col: number; span: number; vm: 'restart' | 'continue' | null; blocks: Block[]; tail: string; node: JSONContent | null };\n\nconst blank = () => ({ align: null, indent: 0, ref: null });\nconst mimes: Record<string, string> = { png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', bmp: 'image/bmp', webp: 'image/webp', svg: 'image/svg+xml' };\n\nexport function align(v: string | null | undefined): string | null {\n if (v === 'center') return 'center';\n if (v === 'right' || v === 'end') return 'right';\n if (v === 'both' || v === 'distribute' || (v && /Kashida|thaiDistribute/.test(v))) return 'justify';\n return null;\n}\n\nfunction base64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(bin);\n}\n\nexport class Reader {\n s: string;\n n = 0;\n refs = new Map<string, Block | Row | Cell>();\n private counters = new Map<number, number[]>();\n private fmts = new Map<string, Fmt & { hidden?: boolean; style?: string }>();\n private media = new Map<string, string | null>();\n\n constructor(readonly pkg: Pkg) {\n this.s = pkg.doc;\n }\n\n ref(): string {\n return `${this.pkg.fp}.${(this.n++).toString(36)}`;\n }\n\n body() {\n const body = find(parse(this.s), 'w:body');\n if (!body) throw new Error('DOCX document has no body');\n const { list, tail } = this.blocks(body);\n return { body, list, tail, sect: kid(body, 'w:sectPr') };\n }\n\n fmt(rPr: El | undefined): Fmt & { hidden?: boolean; style?: string } {\n const key = rPr ? this.s.slice(rPr.start, rPr.end) : '';\n let f = this.fmts.get(key);\n if (!f) {\n const direct = props(this.s, rPr, this.pkg.styles.fonts);\n const style = direct.style ? this.pkg.styles.char(direct.style) : {};\n f = { ...plain, ...style, ...direct };\n this.fmts.set(key, f);\n }\n return f;\n }\n\n blocks(parent: El): { list: Block[]; tail: number } {\n const s = this.s;\n const list: Block[] = [];\n let prev = parent.open;\n let group: Block | null = null;\n let depth = 0;\n for (const k of parent.kids) {\n if (k.name === 'w:tcPr') {\n prev = k.end;\n continue;\n }\n if (k.name === 'w:sectPr') break;\n if (group) {\n group.end = k.end;\n depth += net(s.slice(k.start, k.end));\n if (depth <= 0) {\n if (/<w:instrText\\b[^>]*>\\s*TOC\\b/.test(s.slice(group.start, group.el.end))) {\n const toc = this.toc(group.el, group.end);\n toc.lead = group.lead;\n list[list.length - 1] = toc;\n }\n group = null;\n }\n prev = k.end;\n continue;\n }\n let b: Block | null = null;\n if (k.name === 'w:p') b = this.paragraph(k);\n else if (k.name === 'w:tbl') b = this.table(k);\n else if (k.name === 'w:sdt' && sdtLabel(s, k) === 'Table of contents') b = this.toc(k);\n else if (k.name === 'w:sdt' || k.name === 'w:customXml' || k.name === 'w:altChunk') b = this.lock(k, sdtLabel(s, k));\n if (!b) continue;\n b.lead = s.slice(prev, k.start);\n prev = k.end;\n list.push(b);\n if (b.kind === 'lock' && k.name === 'w:p') {\n depth = net(s.slice(k.start, k.end));\n if (depth > 0) group = b;\n }\n }\n return { list, tail: prev };\n }\n\n private block(kind: Block['kind'], el: El, node: JSONContent, ref: string): Block {\n const b: Block = { ref, kind, el, start: el.start, end: el.end, lead: '', node, pieces: [], list: null, ctx: null, task: null, quote: false, level: null, rows: [], cols: 0 };\n this.refs.set(ref, b);\n return b;\n }\n\n toc(el: El, end = el.end): Block {\n const ref = this.ref();\n const { entries, title } = contents(this.s.slice(el.start, end), this.pkg.styles);\n const b = this.block('toc', el, { type: 'toc', attrs: { entries: JSON.stringify(entries), title, align: null, indent: 0, ref } }, ref);\n b.end = end;\n return b;\n }\n\n lock(el: El, label: string, ref = 'lock:' + this.ref()): Block {\n return this.block('lock', el, { type: 'paragraph', attrs: { align: null, indent: 0, ref }, content: [{ type: 'text', text: `[${label}]` }] }, ref);\n }\n\n paragraph(el: El): Block {\n const s = this.s;\n const st = { lock: null as string | null, task: null as boolean | null, box: false, open: false };\n const pieces: Piece[] = [];\n this.walk(el.kids, [], el, pieces, st);\n const fields = this.fields(pieces, st);\n if (st.lock || st.open || !fields) {\n const label = st.lock ?? (/\\bTOC\\b/.test(pieces.map(p => p.instr ?? '').join('')) ? 'Table of contents' : 'Field');\n const text = st.open ? '' : pieces.map(p => p.text ?? '').join('');\n const b = this.lock(el, label);\n if (text.trim()) b.node.content![0].text += ' ' + text.trim();\n return b;\n }\n const final = fields;\n for (const p of final) {\n const src = p.pic && this.src(p.pic.embed);\n if (!src) continue;\n const meta = Object.fromEntries(attrs(/<wp:docPr\\b[^>]*>/.exec(p.raw!)?.[0] ?? '<x>'));\n p.img = { src, alt: meta.descr ?? null, title: meta.title ?? null, width: Math.round(p.pic!.cx / 9525), height: Math.round(p.pic!.cy / 9525) };\n }\n const pPr = kid(el, 'w:pPr');\n const styles = this.pkg.styles;\n const sEl = pPr && kid(pPr, 'w:pStyle');\n const style = sEl ? attr(s, sEl, 'w:val') : null;\n const jc = pPr && kid(pPr, 'w:jc');\n const visible = final.some(p => p.text !== null || p.img);\n if (!visible && final.some(p => p.pic)) return this.lock(el, 'Picture');\n const ref = this.ref();\n if (!visible && final.some(p => p.brk === 'page')) return this.block('pb', el, { type: 'pageBreak', attrs: { align: null, indent: 0, ref } }, ref);\n const bdr = pPr && kid(pPr, 'w:pBdr');\n if (!visible && (final.some(p => p.brk === 'hr') || (bdr && kid(bdr, 'w:bottom') && !kid(bdr, 'w:top')))) return this.block('hr', el, { type: 'horizontalRule', attrs: { align: null, indent: 0, ref } }, ref);\n\n const ol = pPr && kid(pPr, 'w:outlineLvl');\n const level = ol ? outline(attr(s, ol, 'w:val')) : styles.heading(style);\n const np = pPr && kid(pPr, 'w:numPr');\n let num: { num: number; lvl: number } | null = null;\n if (np) {\n const id = kid(np, 'w:numId');\n const lv = kid(np, 'w:ilvl');\n const fromStyle = styles.numPr(style);\n num = { num: id ? +(attr(s, id, 'w:val') ?? 0) : fromStyle?.num ?? 0, lvl: lv ? +(attr(s, lv, 'w:val') ?? 0) : fromStyle?.lvl ?? 0 };\n } else num = styles.numPr(style);\n const type = num && num.num ? this.pkg.nums.kind(num.num, num.lvl) : null;\n const isList = !!type && st.task === null && level === null;\n const ind = pPr && kid(pPr, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n const indent = isList ? 0 : Math.max(0, Math.round((left !== null && left !== undefined ? +left : styles.left(style)) / 720));\n const base = { align: align(jc ? attr(s, jc, 'w:val') : styles.jc(style)), indent, ref };\n const node: JSONContent = level ? { type: 'heading', attrs: { level, ...base } } : { type: 'paragraph', attrs: base };\n const content = inline(final);\n if (content.length) node.content = content;\n const b = this.block('p', el, node, ref);\n b.pieces = final;\n b.level = level;\n b.task = level === null ? st.task : null;\n b.quote = !isList && b.task === null && level === null && !!style && /quote|block text|цитата/i.test(styles.name(style));\n if (isList) {\n const counts = this.counters.get(num!.num) ?? [];\n counts[num!.lvl] = counts[num!.lvl] === undefined ? this.pkg.nums.start(num!.num, num!.lvl) : counts[num!.lvl] + 1;\n counts.length = num!.lvl + 1;\n this.counters.set(num!.num, counts);\n b.list = { num: num!.num, lvl: num!.lvl, type: type!, start: counts[num!.lvl] };\n }\n return b;\n }\n\n private src(embed: string): string | null {\n if (!this.media.has(embed)) {\n const rel = this.pkg.rels.get(embed);\n const ext = rel && !rel.external ? rel.target.split('.').pop()!.toLowerCase() : '';\n const e = rel && this.pkg.files.get(rel.target);\n this.media.set(embed, e && mimes[ext] ? `data:${mimes[ext]};base64,${base64(this.pkg.part(rel!.target))}` : null);\n }\n return this.media.get(embed)!;\n }\n\n private walk(kids: El[], ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n for (const k of kids) {\n const name = k.name;\n if (name === 'w:pPr') continue;\n if (name === 'w:r') this.run(k, ctx, parent, out, st);\n else if (name === 'w:hyperlink' && k.end !== k.open) {\n const id = attr(s, k, 'r:id');\n const anchor = attr(s, k, 'w:anchor');\n const rel = id ? this.pkg.rels.get(id) : undefined;\n const href = (rel ? rel.target : '') + (anchor ? '#' + anchor : '') || null;\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: '</w:hyperlink>', link: href, ins: false }], k, out, st);\n } else if ((name === 'w:ins' || name === 'w:moveTo' || name === 'w:del' || name === 'w:moveFrom') && k.end !== k.open) {\n const rev = JSON.stringify([name === 'w:ins' || name === 'w:moveTo' ? 'ins' : 'del', attr(s, k, 'w:id') ?? '', attr(s, k, 'w:author') ?? '', attr(s, k, 'w:date') ?? '']);\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: `</${name}>`, link: null, ins: true, rev }], k, out, st);\n } else if ((name === 'w:smartTag' || name === 'w:customXml' || name === 'w:dir' || name === 'w:bdo') && k.end !== k.open) {\n const pr = k.kids[0] && /Pr$/.test(k.kids[0].name) ? k.kids[0] : null;\n this.walk(pr ? k.kids.slice(1) : k.kids, [...ctx, { open: s.slice(k.start, pr ? pr.end : k.open), close: `</${name}>`, link: null, ins: false }], k, out, st);\n } else if (name === 'w:sdt') {\n const pr = kid(k, 'w:sdtPr');\n const box = pr && find(pr, 'w14:checkbox');\n if (box && st.task === null && !out.some(p => p.text !== null)) {\n const c = find(box, 'w14:checked');\n st.task = !!c && on(s, c, 'w14:val');\n st.box = true;\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null, box: true });\n } else {\n const content = kid(k, 'w:sdtContent');\n const inside: Piece[] = [];\n if (content) this.walk(content.kids, ctx, content, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, null);\n }\n } else if (name === 'w:fldSimple') {\n const inside: Piece[] = [];\n this.walk(k.kids, ctx, k, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, hyperlink(attr(s, k, 'w:instr') ?? ''));\n } else if (name === 'm:oMath') {\n const text = s.slice(k.start, k.end).match(/<m:t(?:\\s[^>]*)?>[^<]*<\\/m:t>/g)?.map(t => inner(t, parse(t).kids[0])).join('') ?? '';\n this.span(s.slice(k.start, k.end), text ? [{ text, raw: null, run: null, ctx, span: null }] : [], out, ctx, null);\n } else if (name === 'm:oMathPara') st.lock = 'Equation';\n else out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n }\n }\n\n private span(xml: string, inside: Piece[], out: Piece[], ctx: Wrap[], link: string | null) {\n const shown = inside.filter(p => p.text !== null);\n if (!shown.length) {\n out.push({ text: null, raw: xml, run: null, ctx, span: null });\n return;\n }\n const span: Span = { xml, link };\n for (const p of shown) out.push({ ...p, span });\n }\n\n private run(k: El, ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n const rPrEl = kid(k, 'w:rPr');\n const f = this.fmt(rPrEl);\n if (f.hidden || k.end === k.open) {\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n return;\n }\n const run: Run = { open: opened(s, k), rPr: rPrEl ? s.slice(rPrEl.start, rPrEl.end) : '', fmt: f, el: k, parent };\n const push = (text: string | null, raw: string | null, extra?: Partial<Piece>) => {\n if (text !== null && st.box) {\n st.box = false;\n if (text.startsWith(' ') && raw === null) {\n out.push({ text: null, raw: '<w:t xml:space=\"preserve\"> </w:t>', run, ctx, span: null, box: true });\n text = text.slice(1);\n if (!text) return;\n }\n }\n out.push({ text, raw, run, ctx, span: null, ...extra });\n };\n for (const c of k.kids) {\n const raw = s.slice(c.start, c.end);\n switch (c.name) {\n case 'w:rPr': break;\n case 'w:t': case 'w:delText': {\n const text = inner(s, c).replace(/[\\r\\n]/g, ' ');\n if (text) push(text, null);\n break;\n }\n case 'w:tab': case 'w:ptab': push('\\t', raw); break;\n case 'w:cr': push('\\n', raw); break;\n case 'w:noBreakHyphen': push('\\u2011', raw); break;\n case 'w:softHyphen': push('\\u00AD', raw); break;\n case 'w:br': {\n const type = attr(s, c, 'w:type');\n if (type === 'page') push(null, raw, { brk: 'page' });\n else if (type === 'column') push(null, raw);\n else push('\\n', raw);\n break;\n }\n case 'w:fldChar': push(null, raw, { fld: attr(s, c, 'w:fldCharType') ?? '' }); break;\n case 'w:instrText': push(null, raw, { instr: inner(s, c) }); break;\n case 'w:drawing': {\n const pic = picture(raw);\n if (pic) push(null, raw, { pic });\n else st.lock = shape(raw);\n break;\n }\n case 'w:pict': {\n const pic = /textbox/.test(raw) ? null : vml(raw);\n if (/o:hr=\"t\"/.test(raw)) push(null, raw, { brk: 'hr' });\n else if (pic) push(null, raw, { pic });\n else st.lock = /textbox/.test(raw) ? 'Text box' : 'Shape';\n break;\n }\n case 'mc:AlternateContent': st.lock = shape(raw); break;\n case 'w:object': st.lock = 'Object'; break;\n default: push(null, raw);\n }\n }\n }\n\n private fields(pieces: Piece[], st: { open: boolean }): Piece[] | null {\n if (!pieces.some(p => p.fld)) return pieces;\n const out: Piece[] = [];\n let depth = 0;\n let begin = -1;\n for (let i = 0; i < pieces.length; i++) {\n const p = pieces[i];\n if (p.fld === 'begin') {\n if (depth++ === 0) begin = i;\n } else if (p.fld === 'end' && depth > 0 && --depth === 0) {\n const a = pieces[begin].run!;\n const z = p.run!;\n if (a.parent !== z.parent) return null;\n let first = begin;\n while (first > 0 && pieces[first - 1].run === a) first--;\n let last = i;\n while (last + 1 < pieces.length && pieces[last + 1].run === z) last++;\n out.length -= begin - first;\n const shown: Piece[] = [];\n const code: boolean[] = [];\n let hidden = 0;\n let instr = '';\n for (let j = first; j <= last; j++) {\n const q = pieces[j];\n if (q.fld === 'begin') {\n code.push(true);\n hidden++;\n } else if (q.fld === 'separate' && code[code.length - 1]) {\n code[code.length - 1] = false;\n hidden--;\n } else if (q.fld === 'end') {\n if (code.pop()) hidden--;\n } else if (q.instr && code.length === 1) instr += q.instr;\n else if (q.text !== null && hidden === 0) shown.push(q);\n }\n this.span(this.s.slice(a.el!.start, z.el!.end), shown, out, pieces[first].ctx, hyperlink(instr));\n i = last;\n } else if (depth === 0) out.push(p);\n }\n if (depth > 0) st.open = true;\n return out;\n }\n\n table(el: El): Block {\n const s = this.s;\n if (el.kids.some(k => k.name === 'w:sdt' || k.name === 'w:customXml' || (k.name === 'w:tr' && k.kids.some(c => c.name === 'w:sdt' || c.name === 'w:customXml')))) return this.lock(el, 'Table');\n const ref = this.ref();\n const pr = kid(el, 'w:tblPr');\n const jc = pr && kid(pr, 'w:jc');\n const node: JSONContent = { type: 'table', attrs: { align: align(jc ? attr(s, jc, 'w:val') : null), indent: 0, ref }, content: [] };\n const b = this.block('tbl', el, node, ref);\n const grid = kid(el, 'w:tblGrid');\n b.cols = grid ? grid.kids.filter(k => k.name === 'w:gridCol').length : 0;\n const open: (JSONContent | null)[] = [];\n let prev = grid ? grid.end : pr ? pr.end : el.open;\n for (const tr of el.kids) {\n if (tr.name !== 'w:tr') continue;\n const rref = this.ref();\n const row: Row = { ref: rref, el: tr, lead: s.slice(prev, tr.start), head: '', cells: [], node: { type: 'tableRow', attrs: { align: null, indent: 0, ref: rref }, content: [] } };\n this.refs.set(rref, row);\n prev = tr.end;\n const trPr = kid(tr, 'w:trPr');\n const header = !!trPr && on(s, kid(trPr, 'w:tblHeader'));\n const before = trPr && kid(trPr, 'w:gridBefore');\n let col = before ? +(attr(s, before, 'w:val') ?? 0) : 0;\n let last = tr.open;\n for (const c of tr.kids) {\n if (c.name === 'w:tc') break;\n if (c.name === 'w:trPr' || c.name === 'w:tblPrEx') last = c.end;\n }\n row.head = s.slice(tr.open, last);\n for (const tc of tr.kids) {\n if (tc.name !== 'w:tc') continue;\n const tcPr = kid(tc, 'w:tcPr');\n const gs = tcPr && kid(tcPr, 'w:gridSpan');\n const vmEl = tcPr && kid(tcPr, 'w:vMerge');\n const vmVal = vmEl ? attr(s, vmEl, 'w:val') : null;\n const span = gs ? Math.max(1, +(attr(s, gs, 'w:val') ?? 1)) : 1;\n let vm: Cell['vm'] = vmEl ? (vmVal === 'restart' ? 'restart' : 'continue') : null;\n if (vm === 'continue' && !open[col]) vm = null;\n const cref = this.ref();\n const inside = this.blocks(tc);\n const cell: Cell = { ref: cref, el: tc, lead: s.slice(last, tc.start), col, span, vm, blocks: inside.list, tail: s.slice(inside.tail, tc.close), node: null };\n last = tc.end;\n this.refs.set(cref, cell);\n if (vm === 'continue') open[col]!.attrs!.rowspan++;\n else {\n const content = assemble(inside.list);\n cell.node = { type: header ? 'tableHeader' : 'tableCell', attrs: { colspan: span, rowspan: 1, align: null, indent: 0, ref: cref }, content: content.length ? content : [{ type: 'paragraph', attrs: blank() }] };\n row.node.content!.push(cell.node);\n for (let c = col; c < col + span; c++) open[c] = null;\n if (vm === 'restart') open[col] = cell.node;\n }\n col += span;\n row.cells.push(cell);\n }\n b.rows.push(row);\n node.content!.push(row.node);\n }\n return b;\n }\n}\n\nfunction net(xml: string): number {\n let n = 0;\n if (xml.indexOf('w:fldCharType') === -1) return 0;\n for (const m of xml.matchAll(/w:fldCharType=\"(begin|end)\"/g)) n += m[1] === 'begin' ? 1 : -1;\n return n;\n}\n\nfunction hyperlink(instr: string): string | null {\n const m = /^\\s*HYPERLINK\\s+(?:\"([^\"]*)\")?(?:.*?\\\\l\\s+\"([^\"]*)\")?/.exec(instr);\n if (!m || (!m[1] && !m[2])) return null;\n return (m[1] ?? '') + (m[2] ? '#' + m[2] : '');\n}\n\nfunction contents(xml: string, styles: Styles): { entries: [number, string][]; title: string | null } {\n const entries: [number, string][] = [];\n let title: string | null = null;\n let begun = false;\n for (const p of xml.match(/<w:p\\b(?:[^>]*\\/>|[\\s\\S]*?<\\/w:p>)/g) ?? []) {\n const id = /<w:pStyle w:val=\"([^\"]*)\"/.exec(p)?.[1] ?? '';\n const level = Number(/^toc ?(\\d)$/i.exec(styles.name(id).trim())?.[1] ?? /^TOC(\\d)$/i.exec(id)?.[1] ?? 0);\n begun ||= level > 0 || /w:fldCharType=\"begin\"/.test(p);\n const text = (p.replace(/<w:instrText\\b[\\s\\S]*?<\\/w:instrText>/g, '').match(/<w:t(?:\\s[^>]*)?>[^<]*<\\/w:t>|<w:tab\\/>/g) ?? [])\n .map(m => m === '<w:tab/>' ? '\\t' : unescape(m.replace(/<[^>]*>/g, ''))).join('');\n const shown = (text.includes('\\t') ? text.slice(0, text.lastIndexOf('\\t')) : text).trim();\n if (!shown) continue;\n if (begun) entries.push([level || 1, shown]);\n else title ??= shown;\n }\n return { entries, title };\n}\n\nfunction sdtLabel(s: string, el: El): string {\n if (el.name === 'w:altChunk') return 'Imported content';\n const xml = s.slice(el.start, Math.min(el.end, el.start + 4000));\n if (/w:docPartGallery w:val=\"Table of Contents\"/.test(xml) || /TOC \\\\/.test(s.slice(el.start, el.end))) return 'Table of contents';\n const alias = /<w:alias w:val=\"([^\"]*)\"/.exec(xml);\n return alias ? alias[1] : 'Content control';\n}\n\nfunction picture(raw: string): Pic | null {\n if (!/drawingml\\/2006\\/picture\"/.test(raw) || /wps:|wpg:|wpc:|c:chart|dgm:|txbxContent/.test(raw)) return null;\n const embed = /<a:blip\\b[^>]*\\br:embed=\"([^\"]*)\"/.exec(raw);\n const ext = /<wp:extent\\b[^>]*\\bcx=\"(\\d+)\"[^>]*\\bcy=\"(\\d+)\"/.exec(raw);\n return embed && ext ? { embed: embed[1], cx: +ext[1], cy: +ext[2] } : null;\n}\n\nfunction vml(raw: string): Pic | null {\n const embed = /<v:imagedata\\b[^>]*\\br:id=\"([^\"]*)\"/.exec(raw);\n const style = /<v:shape\\b[^>]*\\bstyle=\"([^\"]*)\"/.exec(raw)?.[1] ?? '';\n const emu = (key: string) => {\n const m = new RegExp(`(?:^|;)\\\\s*${key}:\\\\s*([\\\\d.]+)(pt|px|in|cm|mm)?`).exec(style);\n return m ? Math.round(+m[1] * (({ px: 9525, in: 914400, cm: 360000, mm: 36000 } as Record<string, number>)[m[2]] ?? 12700)) : 0;\n };\n return embed ? { embed: embed[1], cx: emu('width'), cy: emu('height') } : null;\n}\n\nfunction shape(raw: string): string {\n if (/txbxContent|v:textbox/.test(raw)) return 'Text box';\n if (/c:chart/.test(raw)) return 'Chart';\n if (/dgm:/.test(raw)) return 'Diagram';\n if (/m:oMath/.test(raw)) return 'Equation';\n return /drawingml\\/2006\\/picture\"/.test(raw) ? 'Picture' : 'Shape';\n}\n\nexport function fmtAt(p: Piece): Fmt {\n const f = p.run ? p.run.fmt : plain;\n let link: string | null = null;\n let rev: string | null = null;\n for (const w of p.ctx) {\n if (w.link) link = w.link;\n if (w.rev) rev = w.rev;\n }\n link ??= p.span?.link ?? null;\n return link === f.link && rev === f.rev ? f : { ...f, link, rev };\n}\n\nexport function inline(pieces: Piece[]): JSONContent[] {\n const out: JSONContent[] = [];\n let key = '';\n for (const p of pieces) {\n if (p.img) {\n out.push({ type: 'image', attrs: { ...p.img } });\n key = '';\n continue;\n }\n if (p.text === null) continue;\n if (p.text === '\\n') {\n out.push({ type: 'hardBreak' });\n key = '';\n continue;\n }\n const f = fmtAt(p);\n const k = keyOf(f);\n const last = out[out.length - 1];\n if (last && last.type === 'text' && k === key) last.text += p.text;\n else {\n const node: JSONContent = { type: 'text', text: p.text };\n const marks = marksOf(f);\n if (marks) node.marks = marks;\n out.push(node);\n key = k;\n }\n }\n return out;\n}\n\nexport function assemble(list: Block[]): JSONContent[] {\n const out: JSONContent[] = [];\n for (let i = 0; i < list.length; ) {\n const b = list[i];\n let j = i + 1;\n if (b.list) {\n while (j < list.length && list[j].list && !(list[j].list!.num !== b.list.num && list[j].list!.lvl <= b.list.lvl)) j++;\n out.push(nest(list.slice(i, j)));\n } else if (b.task !== null) {\n while (j < list.length && list[j].task !== null) j++;\n out.push({ type: 'taskList', attrs: blank(), content: list.slice(i, j).map(t => ({ type: 'taskItem', attrs: { checked: t.task, ...blank() }, content: [t.node] })) });\n } else if (b.quote) {\n while (j < list.length && list[j].quote) j++;\n out.push({ type: 'blockquote', attrs: blank(), content: list.slice(i, j).map(q => q.node) });\n } else out.push(b.node);\n i = j;\n }\n return out;\n}\n\nfunction nest(list: Block[]): JSONContent {\n const make = (b: Block): JSONContent => ({ type: b.list!.type, attrs: b.list!.type === 'orderedList' ? { start: b.list!.start, ...blank() } : blank(), content: [] });\n const root = make(list[0]);\n const stack = [{ list: root, lvl: list[0].list!.lvl }];\n for (const b of list) {\n let top = stack[stack.length - 1];\n while (b.list!.lvl < top.lvl && stack.length > 1) {\n stack.pop();\n top = stack[stack.length - 1];\n }\n if (b.list!.lvl > top.lvl && top.list.content!.length) {\n const sub = make(b);\n top.list.content![top.list.content!.length - 1].content!.push(sub);\n stack.push({ list: sub, lvl: b.list!.lvl });\n top = stack[stack.length - 1];\n }\n b.ctx = { type: top.list.type!, depth: stack.length - 1 };\n top.list.content!.push({ type: 'listItem', attrs: blank(), content: [b.node] });\n }\n return root;\n}\n","export function diff(a: string[], b: string[]): Int32Array {\n const map = new Int32Array(b.length).fill(-1);\n let p = 0;\n while (p < a.length && p < b.length && a[p] === b[p]) map[p] = p++;\n let q = 0;\n while (q < a.length - p && q < b.length - p && a[a.length - 1 - q] === b[b.length - 1 - q]) {\n map[b.length - 1 - q] = a.length - 1 - q;\n q++;\n }\n const n = a.length - p - q;\n const m = b.length - p - q;\n if (!n || !m) return map;\n const max = Math.min(n + m, 1200);\n const off = max + 1;\n const v = new Int32Array(2 * max + 3);\n const trace: Int32Array[] = [];\n for (let d = 0; d <= max; d++) {\n trace.push(v.slice(off - d - 1, off + d + 2));\n for (let k = -d; k <= d; k += 2) {\n let x = k === -d || (k !== d && v[off + k - 1] < v[off + k + 1]) ? v[off + k + 1] : v[off + k - 1] + 1;\n let y = x - k;\n while (x < n && y < m && a[p + x] === b[p + y]) {\n x++;\n y++;\n }\n v[off + k] = x;\n if (x >= n && y >= m) {\n for (let e = d; e > 0; e--) {\n const t = trace[e];\n const at = (j: number) => t[j + e + 1];\n const down = k === -e || (k !== e && at(k - 1) < at(k + 1));\n const pk = down ? k + 1 : k - 1;\n const px = at(pk);\n const py = px - pk;\n while (x > px && y > py) map[p + --y] = p + --x;\n x = px;\n y = py;\n k = pk;\n }\n while (x > 0 && y > 0) map[p + --y] = p + --x;\n return map;\n }\n }\n }\n return map;\n}\n","import { diff } from './diff';\nimport { color, fmtOf, highlights, keyOf, plain, Pkg, type Fmt } from './pkg';\nimport { align, assemble, fmtAt, Reader, type Block, type Cell, type JSONContent, type Row, type Run, type Span, type Wrap } from './read';\nimport { attr, attrs, escape, kid, opened, parse, rebuild } from './xml';\nimport { entry, zip, type Entry } from './zip';\n\nconst P = ['w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore', 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers', 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku', 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE', 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid', 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents', 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment', 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle', 'w:rPr', 'w:sectPr', 'w:pPrChange'];\nconst R = ['w:rStyle', 'w:rFonts', 'w:b', 'w:bCs', 'w:i', 'w:iCs', 'w:caps', 'w:smallCaps', 'w:strike', 'w:dstrike', 'w:outline', 'w:shadow', 'w:emboss', 'w:imprint', 'w:noProof', 'w:snapToGrid', 'w:vanish', 'w:webHidden', 'w:color', 'w:spacing', 'w:w', 'w:kern', 'w:position', 'w:sz', 'w:szCs', 'w:highlight', 'w:u', 'w:effect', 'w:bdr', 'w:shd', 'w:fitText', 'w:vertAlign', 'w:rtl', 'w:cs', 'w:em', 'w:lang', 'w:eastAsianLayout', 'w:specVanish', 'w:oMath'];\nconst TC = ['w:cnfStyle', 'w:tcW', 'w:gridSpan', 'w:hMerge', 'w:vMerge', 'w:tcBorders', 'w:shd', 'w:noWrap', 'w:tcMar', 'w:textDirection', 'w:tcFitText', 'w:vAlign', 'w:hideMark', 'w:headers', 'w:cellIns', 'w:cellDel', 'w:cellMerge', 'w:tcPrChange'];\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst special: Record<string, string> = { '\\t': '<w:tab/>', '\\n': '<w:br/>', '\\u2011': '<w:noBreakHyphen/>', '\\u00AD': '<w:softHyphen/>' };\n\ntype Out = { kind: 'p' | 'pb' | 'hr' | 'tbl' | 'code' | 'toc'; node: JSONContent; list: { type: string; depth: number; group: number; start: number } | null; task: boolean | null; quote: boolean; cont: { depth: number; group: number } | null };\ntype Unit = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; idx: number; fmt: Fmt; base: Fmt; box?: boolean; img?: Record<string, unknown> };\ntype Glyph = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; u: Unit | null; fmt: Fmt; xml?: string };\nexport type Img = { bytes: Uint8Array; mime: string };\n\nconst keys: Record<string, [string, unknown][]> = {\n paragraph: [['align', null], ['indent', 0]],\n heading: [['level', 1], ['align', null], ['indent', 0]],\n table: [['align', null]],\n tableCell: [['colspan', 1], ['rowspan', 1]],\n tableHeader: [['colspan', 1], ['rowspan', 1]],\n orderedList: [['start', 1]],\n taskItem: [['checked', false]],\n codeBlock: [['language', null]],\n toc: [['entries', '[]'], ['title', null]],\n};\n\nfunction value(key: string, v: unknown): unknown {\n if (v === undefined || v === '' || v === null) return null;\n if (key === 'align') return v === 'left' ? null : v;\n if (key === 'width' || key === 'height') return Math.round(Number(v)) || null;\n if (key === 'indent' || key === 'level' || key === 'colspan' || key === 'rowspan' || key === 'start') return Number(v) || 0;\n if (key === 'checked') return !!v;\n return v;\n}\n\nfunction sig(n: JSONContent): string {\n if (n.type === 'text' || n.type === 'hardBreak') return inlineSig([n]);\n const a = n.attrs ?? {};\n let out = `${n.type}(${(keys[n.type ?? ''] ?? []).map(([k, d]) => { const v = value(k, a[k]); return v === value(k, d) ? '' : `${k}=${JSON.stringify(v)}`; }).join(',')}${a.ref ? '#' + a.ref : ''})`;\n const kids = n.content ?? [];\n if (kids.length && (kids[0].type === 'text' || kids[0].type === 'hardBreak' || kids.some(k => k.type === 'text'))) return out + inlineSig(kids);\n out += '[' + kids.map(sig).join(',') + ']';\n return out;\n}\n\nfunction inlineSig(kids: JSONContent[]): string {\n let out = '';\n let key: string | null = null;\n for (const k of kids) {\n if (k.type === 'text') {\n if (!k.text) continue;\n const next = keyOf(fmtOf(k.marks as never));\n out += (next === key ? '' : `\\u0001${next}\\u0002`) + k.text;\n key = next;\n } else {\n out += `\\u0003${k.type}${k.type === 'image' ? picture(k.attrs ?? {}) : ''}\\u0004`;\n key = null;\n }\n }\n return out;\n}\n\nfunction picture(a: Record<string, unknown>): string {\n return JSON.stringify([a.src ?? null, a.alt || null, a.title || null, Math.round(Number(a.width)) || null, Math.round(Number(a.height)) || null]);\n}\n\nlet groups = 0;\n\nfunction flatten(content: JSONContent[], out: Out[] = [], quote = false): Out[] {\n for (const node of content) {\n const t = node.type;\n const add = (kind: Out['kind'], extra: Partial<Out> = {}) => out.push({ kind, node, list: null, task: null, quote, cont: null, ...extra });\n if (t === 'paragraph' || t === 'heading') add('p');\n else if (t === 'bulletList' || t === 'orderedList') listed(node, 0, ++groups, out, quote);\n else if (t === 'taskList') {\n for (const li of node.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: null, task: !!li.attrs?.checked, quote, cont: null });\n else flatten([c], out, quote);\n });\n }\n } else if (t === 'blockquote') flatten(node.content ?? [], out, true);\n else if (t === 'table') add('tbl');\n else if (t === 'image') out.push({ kind: 'p', node: { type: 'paragraph', attrs: { align: null, indent: 0, ref: null }, content: [node] }, list: null, task: null, quote, cont: null });\n else if (t === 'pageBreak') add('pb');\n else if (t === 'toc') add('toc');\n else if (t === 'horizontalRule') add('hr');\n else if (t === 'codeBlock') add('code');\n else if (node.content) flatten(node.content, out, quote);\n }\n return out;\n}\n\nfunction listed(list: JSONContent, depth: number, group: number, out: Out[], quote: boolean) {\n for (const li of list.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: { type: list.type!, depth, group, start: Number(list.attrs?.start ?? 1) || 1 }, task: null, quote, cont: null });\n else if (c.type === 'bulletList' || c.type === 'orderedList') listed(c, depth + 1, group, out, quote);\n else if (c.type === 'paragraph' || c.type === 'heading') out.push({ kind: 'p', node: c, list: null, task: null, quote, cont: { depth, group } });\n else flatten([c], out, quote);\n });\n }\n}\n\ntype Slot = { col: number; span: number; cell: JSONContent | null; from: JSONContent | null };\n\nfunction grid(rows: JSONContent[]): Slot[][] {\n const taken: number[] = [];\n const from: JSONContent[] = [];\n const span = (c: JSONContent) => Math.max(1, Number(c.attrs?.colspan ?? 1) || 1);\n return rows.map(row => {\n const cells = row.content ?? [];\n const slots: Slot[] = [];\n let col = 0;\n let i = 0;\n while (i < cells.length || taken.some((t, k) => k >= col && t > 0)) {\n if ((taken[col] ?? 0) > 0) {\n const f = from[col];\n const n = span(f);\n for (let k = col; k < col + n; k++) taken[k]--;\n slots.push({ col, span: n, cell: null, from: f });\n col += n;\n continue;\n }\n if (i >= cells.length) {\n col++;\n continue;\n }\n const c = cells[i++];\n const n = span(c);\n const rs = Math.max(1, Number(c.attrs?.rowspan ?? 1) || 1);\n slots.push({ col, span: n, cell: c, from: null });\n if (rs > 1) for (let k = col; k < col + n; k++) {\n taken[k] = rs - 1;\n from[k] = c;\n }\n col += n;\n }\n return slots;\n });\n}\n\nfunction dims(bytes: Uint8Array): [number, number] | null {\n const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (bytes[0] === 0x89 && bytes[1] === 0x50) return [v.getUint32(16), v.getUint32(20)];\n if (bytes[0] === 0x47 && bytes[1] === 0x49) return [v.getUint16(6, true), v.getUint16(8, true)];\n if (bytes[0] === 0xff && bytes[1] === 0xd8) {\n for (let i = 2; i + 9 < bytes.length; ) {\n if (bytes[i] !== 0xff) return null;\n const m = bytes[i + 1];\n if (m >= 0xc0 && m <= 0xcf && m !== 0xc4 && m !== 0xc8 && m !== 0xcc) return [v.getUint16(i + 7), v.getUint16(i + 5)];\n i += 2 + v.getUint16(i + 2);\n }\n }\n return null;\n}\n\nfunction meta(tag: string, img: Record<string, unknown>): string {\n const extra = `${img.alt ? ` descr=\"${escape(String(img.alt))}\"` : ''}${img.title ? ` title=\"${escape(String(img.title))}\"` : ''}`;\n return tag.replace(/\\s(descr|title)=\"[^\"]*\"/g, '').replace(/\\s*\\/?>$/, end => extra + end);\n}\n\nfunction checked(xml: string, on: boolean): string {\n const yes = /w14:checkedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2612';\n const no = /w14:uncheckedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2610';\n const [from, to] = on ? [no, yes] : [yes, no];\n let out = /<w14:checked\\b/.test(xml) ? xml.replace(/(<w14:checked\\b[^>]*w14:val=\")[^\"]*\"/, `$1${on ? 1 : 0}\"`) : xml.replace(/(<w14:checkbox\\b[^>]*>)/, `$1<w14:checked w14:val=\"${on ? 1 : 0}\"/>`);\n const at = out.indexOf('<w:sdtContent');\n if (at === -1) return out;\n const tail = out.slice(at).replace(new RegExp(`w:char=\"${from}\"`, 'i'), `w:char=\"${to}\"`).replace(`>${String.fromCharCode(parseInt(from, 16))}<`, `>${String.fromCharCode(parseInt(to, 16))}<`);\n out = out.slice(0, at) + tail;\n return out;\n}\n\nexport class Writer {\n s: string;\n r: Reader;\n claimed = new Map<JSONContent, Block | Row | Cell>();\n used = new Set<Block | Row | Cell>();\n carry = new Map<Block, string>();\n left = new Map<Cell, string>();\n rels: string[] = [];\n private relIds = new Set<string>();\n private links = new Map<string, string>();\n private media: { name: string; bytes: Uint8Array }[] = [];\n private types = new Set<string>();\n private numbering: { abs: string[]; nums: string[] } = { abs: [], nums: [] };\n private kinds = new Map<number, string>();\n private nextNum: number;\n private nextAbs: number;\n private styleXml: string[] = [];\n private groupNum = new Map<number, { num: number; base: number }>();\n private extra = new Map<string, number>();\n private docPr: number;\n private body!: ReturnType<Reader['body']>;\n private last: Out['kind'] | null = null;\n private wraps = new Map<string, Wrap>();\n private srcs: Map<string, string> | null = null;\n private tocs = false;\n private revs = new Map<string, Wrap>();\n private nextRev: number;\n\n constructor(readonly pkg: Pkg, private images: Map<string, Img>) {\n this.r = new Reader(pkg);\n this.s = pkg.doc;\n for (const id of pkg.rels.keys()) this.relIds.add(id);\n this.nextNum = pkg.nums.maxNum + 1;\n this.nextAbs = pkg.nums.maxAbs + 1;\n let max = 0;\n for (const m of this.s.matchAll(/<wp:docPr\\b[^>]*\\bid=\"(\\d+)\"/g)) max = Math.max(max, +m[1]);\n this.docPr = max + 1;\n this.nextRev = Math.max(0, ...[...this.s.matchAll(/\\bw:id=\"(\\d+)\"/g)].map(m => +m[1])) + 1;\n }\n\n run(doc: JSONContent): Uint8Array | null {\n const s = this.s;\n this.body = this.r.body();\n const { list, tail, body } = this.body;\n assemble(list);\n this.claim(doc.content ?? []);\n let rest = '';\n this.carryOver(list, x => (rest = x));\n let xml = this.container(flatten(doc.content ?? []), list, null);\n if (this.last === 'tbl' && list[list.length - 1]?.kind !== 'tbl') xml += '<w:p/>';\n const text = s.slice(0, body.open) + xml + rest + s.slice(tail);\n const changed = new Map<string, string | Uint8Array>();\n if (text !== s) changed.set(this.pkg.main, text);\n if (this.rels.length) {\n const path = this.pkg.relsPath(this.pkg.main);\n const old = this.pkg.text(path) ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>`;\n changed.set(path, old.replace(/<\\/Relationships>\\s*$/, this.rels.join('') + '</Relationships>'));\n }\n if (this.numbering.abs.length || this.numbering.nums.length) {\n const rel = this.pkg.byType('/numbering');\n let n = rel ? this.pkg.text(rel.target) : null;\n const path = rel ? rel.target : 'word/numbering.xml';\n if (n === null) {\n n = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"></w:numbering>`;\n this.types.add(`<Override PartName=\"/${path}\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>`);\n }\n const at = n.search(/<w:num\\b[\\s>]/);\n const abs = this.numbering.abs.join('');\n n = at === -1 ? n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, abs + '$1') : n.slice(0, at) + abs + n.slice(at);\n n = n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, this.numbering.nums.join('') + '$1');\n changed.set(path, n);\n if (!rel) {\n const id = this.relId();\n const path2 = this.pkg.relsPath(this.pkg.main);\n const old = (changed.get(path2) as string | undefined) ?? this.pkg.text(path2)!;\n changed.set(path2, old.replace(/<\\/Relationships>\\s*$/, `<Relationship Id=\"${id}\" Type=\"${REL}/numbering\" Target=\"numbering.xml\"/></Relationships>`));\n }\n }\n const settings = this.tocs && this.pkg.byType('/settings');\n const listed = settings && this.pkg.text(settings.target);\n if (settings && listed && !/<w:updateFields\\b/.test(listed)) {\n const at = listed.search(/<(?:w:hdrShapeDefaults|w:footnotePr|w:endnotePr|w:compat|w:docVars|w:rsids|m:mathPr|w:attachedSchema|w:themeFontLang|w:clrSchemeMapping|w:doNotIncludeSubdocsInStats|w:doNotAutoCompressPictures|w:forceUpgrade|w:captions|w:readModeInkLockDown|w:smartTagType|sl:schemaLibrary|w:shapeDefaults|w:doNotEmbedSmartTags|w:decimalSymbol|w:listSeparator)\\b|<\\/w:settings>/);\n changed.set(settings.target, listed.slice(0, at) + '<w:updateFields w:val=\"true\"/>' + listed.slice(at));\n }\n if (this.styleXml.length) {\n const rel = this.pkg.byType('/styles');\n if (rel) changed.set(rel.target, this.pkg.text(rel.target)!.replace(/<\\/w:styles>\\s*$/, this.styleXml.join('') + '</w:styles>'));\n }\n for (const m of this.media) {\n changed.set(m.name, m.bytes);\n const ext = m.name.split('.').pop()!.toLowerCase();\n const ct = this.pkg.text('[Content_Types].xml') ?? '';\n if (!new RegExp(`<Default\\\\b[^>]*Extension=\"${ext}\"`, 'i').test(ct)) this.types.add(`<Default Extension=\"${ext}\" ContentType=\"${({ jpg: 'image/jpeg', svg: 'image/svg+xml' } as Record<string, string>)[ext] ?? 'image/' + ext}\"/>`);\n }\n if (this.types.size) changed.set('[Content_Types].xml', (this.pkg.text('[Content_Types].xml') ?? '').replace(/<\\/Types>\\s*$/, [...this.types].join('') + '</Types>'));\n if (!changed.size) return null;\n const enc = new TextEncoder();\n const main = this.pkg.files.get(this.pkg.main)!;\n const out: Entry[] = this.pkg.entries.map(e => {\n const v = changed.get(e.name);\n if (v === undefined) return e;\n changed.delete(e.name);\n return entry(e.name, typeof v === 'string' ? enc.encode(v) : v, e);\n });\n for (const [name, v] of changed) out.push(entry(name, typeof v === 'string' ? enc.encode(v) : v, main));\n return zip(out);\n }\n\n private claim(nodes: JSONContent[]) {\n for (const n of nodes) {\n const ref = n.attrs?.ref;\n const o = typeof ref === 'string' ? this.r.refs.get(ref) : undefined;\n if (o && !this.used.has(o) && this.fits(n, o)) {\n this.used.add(o);\n this.claimed.set(n, o);\n }\n if (n.content) this.claim(n.content);\n }\n }\n\n private fits(n: JSONContent, o: Block | Row | Cell): boolean {\n if ('cells' in o) return n.type === 'tableRow';\n if ('col' in o) return (n.type === 'tableCell' || n.type === 'tableHeader') && o.node !== null;\n if (o.kind === 'p') return n.type === 'paragraph' || n.type === 'heading';\n if (o.kind === 'lock') return n.type === 'paragraph';\n if (o.kind === 'toc') return n.type === 'toc';\n return ({ pb: 'pageBreak', hr: 'horizontalRule', tbl: 'table' } as Record<string, string>)[o.kind] === n.type;\n }\n\n private carryOver(list: Block[], end: (x: string) => void) {\n let pending = '';\n for (const b of list) {\n if (this.used.has(b)) {\n if (pending) this.carry.set(b, pending);\n pending = '';\n } else {\n if (b.lead.trim()) pending += b.lead;\n const pPr = b.el.name === 'w:p' && kid(b.el, 'w:pPr');\n if (pPr && kid(pPr, 'w:sectPr')) pending += `<w:p>${this.s.slice(pPr.start, pPr.end)}</w:p>`;\n }\n for (const row of b.rows) for (const c of row.cells) this.carryOver(c.blocks, x => this.left.set(c, x));\n }\n if (pending) end(pending);\n }\n\n private container(outs: Out[], list: Block[], fallback: Block | null): string {\n const pairs = outs.map(o => ({ o, b: (this.claimed.get(o.node) ?? null) as Block | null }));\n const lists = new Map<number, { o: Out; b: Block | null }[]>();\n for (const p of pairs) if (p.o.list) lists.get(p.o.list.group)?.push(p) ?? lists.set(p.o.list.group, [p]);\n for (const [group, mine] of lists) this.decide(group, mine);\n let xml = '';\n this.last = null;\n pairs.forEach(({ o, b }, i) => {\n const near = (test: (b: Block) => boolean): Block | null => {\n for (let d = 1; d < pairs.length; d++) {\n const x = pairs[i - d]?.b;\n if (x && test(x)) return x;\n const y = pairs[i + d]?.b;\n if (y && test(y)) return y;\n }\n for (const x of list) if (test(x)) return x;\n return fallback && test(fallback) ? fallback : null;\n };\n const prefix = b ? (this.carry.get(b) ?? '') + b.lead : '';\n xml += prefix + this.emit(o, b, near, fallback);\n this.last = o.kind;\n });\n return xml;\n }\n\n private emit(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const s = this.s;\n if (b && b.kind === 'lock') return s.slice(b.start, b.end);\n if (o.kind === 'p') return this.para(o, b, near, fallback);\n if (o.kind === 'pb') return b ? s.slice(b.start, b.end) : '<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>';\n if (o.kind === 'hr') return b ? s.slice(b.start, b.end) : '<w:p><w:pPr><w:pBdr><w:bottom w:val=\"single\" w:sz=\"6\" w:space=\"1\" w:color=\"auto\"/></w:pBdr></w:pPr></w:p>';\n if (o.kind === 'tbl') return this.table(o, b, near);\n if (o.kind === 'toc') return b && sig(o.node) === sig(b.node) ? s.slice(b.start, b.end) : this.toc(o.node);\n return this.code(o);\n }\n\n private toc(node: JSONContent): string {\n this.tocs = true;\n const styles = this.pkg.styles;\n const sect = this.body.sect;\n const twips = (el: ReturnType<typeof kid>, name: string, fallback: number) => Number((el && attr(this.s, el, name)) ?? fallback);\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const width = twips(size, 'w:w', 12240) - twips(mar, 'w:left', 1440) - twips(mar, 'w:right', 1440);\n const list = JSON.parse(String(node.attrs?.entries ?? '[]')) as [number, string][];\n const begin = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> TOC \\\\o \"1-3\" \\\\h \\\\z \\\\u </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>';\n const end = '<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const style = (test: RegExp, fallback: string) => escape(styles.find(name => test.test(name.trim())) ?? fallback);\n const title = node.attrs?.title ? `<w:p><w:pPr><w:pStyle w:val=\"${style(/^toc heading$/i, 'TOCHeading')}\"/></w:pPr><w:r><w:t xml:space=\"preserve\">${escape(String(node.attrs.title))}</w:t></w:r></w:p>` : '';\n const rows = list.length\n ? list.map(([level, text], i) => `<w:p><w:pPr><w:pStyle w:val=\"${style(new RegExp(`^toc ${level}$`, 'i'), `TOC${level}`)}\"/><w:tabs><w:tab w:val=\"right\" w:leader=\"dot\" w:pos=\"${width}\"/></w:tabs></w:pPr>${i ? '' : begin}<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>${i === list.length - 1 ? end : ''}</w:p>`).join('')\n : `<w:p>${begin}<w:r><w:t>No table of contents entries found.</w:t></w:r>${end}</w:p>`;\n return `<w:sdt><w:sdtPr><w:docPartObj><w:docPartGallery w:val=\"Table of Contents\"/><w:docPartUnique/></w:docPartObj></w:sdtPr><w:sdtContent>${title}${rows}</w:sdtContent></w:sdt>`;\n }\n\n private decide(group: number, mine: { o: Out; b: Block | null }[]) {\n const top = mine.find(p => p.o.list!.depth === 0) ?? mine[0];\n const type = top.o.list!.type;\n const hit = mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type && p.o.list!.depth === 0 && this.kindOf(p.b.list.num, p.b.list.lvl) === type)\n ?? mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type);\n if (hit) this.groupNum.set(group, { num: hit.b!.list!.num, base: Math.max(0, hit.b!.list!.lvl - hit.o.list!.depth) });\n else this.groupNum.set(group, { num: this.newNum(type, top.o.list!.start), base: 0 });\n }\n\n private kindOf(num: number, lvl: number): string | null {\n return this.kinds.get(num) ?? this.pkg.nums.kind(num, lvl);\n }\n\n private newNum(type: string, start: number): number {\n let abs = -1;\n for (const b of this.r.refs.values()) if ('kind' in b && b.list && b.list.lvl === 0 && b.list.type === type) {\n abs = this.pkg.nums.nums.get(b.list.num)?.abs ?? -1;\n break;\n }\n if (abs === -1) for (const [id, lvls] of this.pkg.nums.abs) if ((lvls.get(0)?.fmt === 'bullet') === (type === 'bulletList') && lvls.get(0)?.fmt !== 'none') {\n abs = id;\n break;\n }\n if (abs === -1) {\n abs = this.nextAbs++;\n const fmts = type === 'bulletList' ? ['bullet'] : ['decimal', 'lowerLetter', 'lowerRoman'];\n const lvls = Array.from({ length: 9 }, (_, l) => {\n const fmt = fmts[l % fmts.length];\n const text = fmt === 'bullet' ? ['•', '◦', '▪'][l % 3] : `%${l + 1}.`;\n return `<w:lvl w:ilvl=\"${l}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"${fmt}\"/><w:lvlText w:val=\"${text}\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"${720 * (l + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }).join('');\n this.numbering.abs.push(`<w:abstractNum w:abstractNumId=\"${abs}\"><w:multiLevelType w:val=\"hybridMultilevel\"/>${lvls}</w:abstractNum>`);\n }\n const num = this.nextNum++;\n this.kinds.set(num, type);\n this.numbering.nums.push(`<w:num w:numId=\"${num}\"><w:abstractNumId w:val=\"${abs}\"/>${type === 'orderedList' ? `<w:lvlOverride w:ilvl=\"0\"><w:startOverride w:val=\"${start}\"/></w:lvlOverride>` : ''}</w:num>`);\n return num;\n }\n\n private listPr(o: Out, b: Block | null): { num: number; lvl: number } | null {\n if (!o.list) return null;\n const g = this.groupNum.get(o.list.group)!;\n if (b?.list && b.ctx && b.ctx.type === o.list.type && b.ctx.depth === o.list.depth && (o.list.depth > 0 || b.list.num === g.num)) return b.list;\n const lvl = Math.min(8, g.base + o.list.depth);\n if (this.kindOf(g.num, lvl) === o.list.type) return { num: g.num, lvl };\n const key = `${o.list.group}:${o.list.type}`;\n if (!this.extra.has(key)) this.extra.set(key, this.newNum(o.list.type, o.list.start));\n return { num: this.extra.get(key)!, lvl };\n }\n\n private kindTest(o: Out): (b: Block) => boolean {\n const level = o.node.type === 'heading' ? Number(o.node.attrs?.level ?? 1) : null;\n if (o.task !== null) return b => b.kind === 'p' && b.task !== null;\n if (level) return b => b.kind === 'p' && b.level === level;\n if (o.list) return b => b.kind === 'p' && !!b.list && b.ctx?.type === o.list!.type;\n if (o.quote) return b => b.kind === 'p' && b.quote;\n return b => b.kind === 'p' && !b.list && b.task === null && !b.level && !b.quote;\n }\n\n private para(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const pr = this.listPr(o, b);\n const same = b && o.cont === null && o.quote === b.quote && (o.task ?? null) === b.task && (pr ? !!b.list && pr.num === b.list.num && pr.lvl === b.list.lvl : !b.list);\n if (b && same && sig(o.node) === sig(b.node)) return this.s.slice(b.start, b.end);\n const src = b ?? near(this.kindTest(o)) ?? (fallback?.kind === 'p' ? fallback : null);\n return (b ? opened(this.s, b.el) : '<w:p>') + this.pPr(o, b, src, pr) + this.inline(o, b, src, near) + '</w:p>';\n }\n\n private pPr(o: Out, b: Block | null, src: Block | null, pr: { num: number; lvl: number } | null): string {\n const s = this.s;\n const styles = this.pkg.styles;\n const el = src && kid(src.el, 'w:pPr');\n let xml = el ? s.slice(el.start, el.end) : '';\n const set: Record<string, string | null> = {};\n if (!b && xml) {\n const rPr = kid(el!, 'w:rPr');\n xml = rebuild(xml, 'w:pPr', P, { 'w:sectPr': null, 'w:pPrChange': null, 'w:rPr': rPr ? rebuild(s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null }) || null : null });\n }\n const root = xml ? parse(xml).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:pStyle');\n const was = { style: styleEl ? attr(xml, styleEl, 'w:val') : null, level: src?.level ?? null, quote: src?.quote ?? false, list: src?.list ?? null };\n let style = was.style;\n const level = o.node.type === 'heading' ? Math.min(6, Math.max(1, Number(o.node.attrs?.level ?? 1))) : null;\n if (level !== was.level) {\n set['w:outlineLvl'] = null;\n if (level) style = this.headingStyle(level);\n else if (styles.heading(style)) style = null;\n }\n if (!level && o.quote !== was.quote) style = o.quote ? this.quoteStyle() : null;\n if (pr) {\n if (!(was.list && was.list.num === pr.num && was.list.lvl === pr.lvl)) set['w:numPr'] = `<w:numPr><w:ilvl w:val=\"${pr.lvl}\"/><w:numId w:val=\"${pr.num}\"/></w:numPr>`;\n if (!was.list) {\n set['w:ind'] = null;\n if (!src) style = styles.find(name => /^list paragraph$/i.test(name));\n }\n } else if (was.list || get('w:numPr')) {\n set['w:numPr'] = null;\n if (styles.numPr(style)) style = null;\n }\n if (style !== was.style) set['w:pStyle'] = style ? `<w:pStyle w:val=\"${escape(style)}\"/>` : null;\n const jcEl = 'w:jc' in set ? undefined : get('w:jc');\n const direct = jcEl ? attr(xml, jcEl, 'w:val') : null;\n const want = value('align', o.node.attrs?.align) as string | null;\n if (align(direct ?? styles.jc(style)) !== want) {\n set['w:jc'] = align(styles.jc(style)) === want ? null : `<w:jc w:val=\"${({ center: 'center', right: 'right', justify: 'both' } as Record<string, string>)[want ?? ''] ?? 'left'}\"/>`;\n }\n if (!pr) {\n const indEl = 'w:ind' in set ? undefined : get('w:ind');\n const list = indEl ? attrs(xml.slice(indEl.start, indEl.open)).filter(([k]) => k !== 'w:left' && k !== 'w:start') : [];\n const left = indEl ? attr(xml, indEl, 'w:left') ?? attr(xml, indEl, 'w:start') : null;\n const target = o.cont !== null ? this.contLeft(o) : 720 * (Number(o.node.attrs?.indent ?? 0) || 0);\n const now = left !== null ? +left : styles.left(style);\n if (o.cont !== null ? now !== target : Math.max(0, Math.round(now / 720)) !== Math.round(target / 720)) {\n if (target !== styles.left(style)) list.unshift(['w:left', String(target)]);\n set['w:ind'] = list.length ? `<w:ind ${list.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n }\n return Object.keys(set).length ? rebuild(xml, 'w:pPr', P, set) : xml;\n }\n\n private contLeft(o: Out): number {\n const g = this.groupNum.get(o.cont!.group);\n const left = g ? this.pkg.nums.level(g.num, g.base + o.cont!.depth)?.left : null;\n return left ?? 720 * (o.cont!.depth + 1);\n }\n\n private headingStyle(level: number): string {\n const found = this.pkg.styles.headingId(level);\n if (found) return found;\n const id = this.pkg.styles.byId.has(`Heading${level}`) ? `Heading${level}W` : `Heading${level}`;\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n const size = [32, 28, 26, 24, 22, 22][level - 1];\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"heading ${level}\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"9\"/><w:qFormat/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"${level - 1}\"/></w:pPr><w:rPr><w:b/><w:bCs/><w:sz w:val=\"${size}\"/><w:szCs w:val=\"${size}\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private quoteStyle(): string {\n const found = this.pkg.styles.find(name => /^quote$/i.test(name)) ?? this.pkg.styles.find(name => /quote/i.test(name));\n if (found) return found;\n const id = this.pkg.styles.byId.has('Quote') ? 'QuoteW' : 'Quote';\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"Quote\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"29\"/><w:qFormat/><w:pPr><w:spacing w:before=\"200\" w:after=\"160\"/><w:ind w:left=\"864\" w:right=\"864\"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val=\"404040\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private markRun(b: Block): { run: Run; fmt: Fmt } {\n const pPr = kid(b.el, 'w:pPr');\n const rPr = pPr && kid(pPr, 'w:rPr');\n if (!rPr) return { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n const xml = rebuild(this.s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null });\n const fmt = this.r.fmt(rPr);\n return { run: { open: '<w:r>', rPr: xml, fmt, el: null, parent: null }, fmt };\n }\n\n private inline(o: Out, b: Block | null, src: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const units: Unit[] = [];\n const counts = new Map<Run, number>();\n for (const p of b ? b.pieces : []) {\n let n = p.run ? counts.get(p.run) ?? 0 : 0;\n const fmt = fmtAt(p);\n const base = p.span ? fmtAt({ ...p, span: null }) : fmt;\n if (p.img) units.push({ ch: '\\uFFFC', raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, img: p.img });\n else if (p.text === null) units.push({ ch: null, raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, box: p.box });\n else if (p.raw !== null) units.push({ ch: p.text, raw: p.raw, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n else for (const ch of p.text) units.push({ ch, raw: null, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n if (p.run) counts.set(p.run, n);\n }\n const A = units.filter(u => u.ch !== null);\n const B: { ch: string; fmt: Fmt; key: string; img?: Record<string, unknown> }[] = [];\n let lastFmt = plain;\n for (const n of o.node.content ?? []) {\n if (n.type === 'text') {\n const f = fmtOf(n.marks as never);\n const k = keyOf(f);\n lastFmt = f;\n for (const ch of n.text ?? '') B.push({ ch: ch === '\\r' ? '\\n' : ch, fmt: f, key: k });\n } else if (n.type === 'hardBreak') B.push({ ch: '\\n', fmt: lastFmt, key: keyOf(lastFmt) });\n else if (n.type === 'image') B.push({ ch: '\\uFFFC', fmt: lastFmt, key: keyOf(lastFmt), img: n.attrs ?? {} });\n }\n const boxes = units.filter(u => u.box);\n let box: string | null = null;\n if (o.task !== null && !boxes.some(u => !u.run)) {\n const tpl = near(x => x.task !== null) ?? [...this.r.refs.values()].find((x): x is Block => 'kind' in x && x.task !== null) ?? null;\n const sdt = tpl?.pieces.find(p => p.box && !p.run)?.raw;\n box = checked(sdt ?? '<w:sdt><w:sdtPr><w14:checkbox xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\"><w14:checked w14:val=\"0\"/><w14:checkedState w14:val=\"2612\" w14:font=\"MS Gothic\"/><w14:uncheckedState w14:val=\"2610\" w14:font=\"MS Gothic\"/></w14:checkbox></w:sdtPr><w:sdtContent><w:r><w:rPr><w:rFonts w:ascii=\"MS Gothic\" w:eastAsia=\"MS Gothic\" w:hAnsi=\"MS Gothic\" w:hint=\"eastAsia\"/></w:rPr><w:t>☐</w:t></w:r></w:sdtContent></w:sdt>', o.task);\n B.unshift({ ch: ' ', fmt: B[0]?.fmt ?? plain, key: B[0]?.key ?? keyOf(plain) });\n }\n const map = diff(A.map(u => u.ch!), B.map(x => x.ch));\n const back = new Int32Array(A.length).fill(-1);\n map.forEach((i, j) => { if (i >= 0) back[i] = j; });\n const intact = new Set<Span>();\n const spans = new Map<Span, number[]>();\n A.forEach((u, i) => { if (u.span) spans.get(u.span)?.push(i) ?? spans.set(u.span, [i]); });\n for (const [sp, idx] of spans) {\n const j0 = back[idx[0]];\n if (idx.every((i, k) => back[i] === j0 + k && j0 >= 0 && B[back[i]].key === keyOf(A[i].fmt))) intact.add(sp);\n }\n const slot = new Int32Array(A.length + 1);\n for (let k = 1; k <= A.length; k++) slot[k] = back[k - 1] >= 0 ? back[k - 1] + 1 : slot[k - 1];\n const at: Unit[][] = Array.from({ length: B.length + 1 }, () => []);\n let chars = 0;\n for (const u of units) {\n if (u.ch !== null) chars++;\n else if (!u.box || o.task !== null) at[slot[chars]].push(u);\n }\n const paraBase = b ? this.markRun(b) : this.firstRun(src);\n const out: Glyph[] = [];\n if (box) out.push({ ch: null, raw: box, run: null, ctx: [], u: null, fmt: plain });\n this.wraps.clear();\n for (const u of units) for (const w of u.ctx) if (w.link && !this.wraps.has(w.link)) this.wraps.set(w.link, w);\n const lastChar = () => { for (let k = out.length - 1; k >= 0; k--) if (out[k].ch !== null) return out[k]; return null; };\n const next = new Int32Array(B.length + 1).fill(-1);\n for (let k = B.length - 1; k >= 0; k--) next[k] = map[k] >= 0 ? map[k] : next[k + 1];\n for (let j = 0; j <= B.length; j++) {\n for (const u of at[j]) out.push({ ch: null, raw: u.box && !u.run && b && b.task !== o.task ? checked(u.raw!, !!o.task) : u.raw, run: u.run, ctx: u.ctx, u, fmt: u.fmt });\n if (j === B.length) break;\n const i = map[j];\n const want = B[j];\n if (want.img) {\n const u = i >= 0 ? A[i] : null;\n if (u?.img) {\n const kept = picture(u.img) === picture(want.img);\n out.push({ ch: u.ch, raw: kept ? u.raw : this.patch(u.raw!, u.img, want.img), run: u.run, ctx: u.ctx, u: kept ? u : null, fmt: u.fmt });\n } else out.push({ ch: want.ch, raw: this.drawing(want.img), run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, ctx: [], u: null, fmt: plain });\n continue;\n }\n if (i >= 0) {\n const u = A[i];\n if (u.span && intact.has(u.span)) {\n if (i === 0 || A[i - 1].span !== u.span) out.push({ ch: null, raw: null, run: null, ctx: u.ctx, u: null, fmt: u.fmt, xml: u.span.xml });\n continue;\n }\n const from = u.span ? u.base : u.fmt;\n const keep = u.ch === '\\n' || keyOf(from) === want.key;\n const fmt = keep ? from : want.fmt;\n const run = keep && u.run ? u.run : this.derive(u.run ?? paraBase.run, from, want.fmt);\n out.push({ ch: u.ch, raw: u.raw, run, ctx: this.revised(this.linked(u.ctx, fmt.link, lastChar()), fmt.rev), u: keep && u.run ? u : null, fmt });\n } else {\n const left = lastChar();\n const right = next[j + 1] >= 0 ? A[next[j + 1]] : null;\n const base = left ? { run: left.run!, fmt: left.fmt } : right ? { run: right.run ?? paraBase.run, fmt: right.span ? right.base : right.fmt } : paraBase;\n const run = keyOf(base.fmt) === want.key ? base.run : this.derive(base.run, base.fmt, want.fmt);\n const shared: Wrap[] = [];\n if (left && right) for (let k = 0; k < left.ctx.length && left.ctx[k] === right.ctx[k]; k++) if (!left.ctx[k].link) shared.push(left.ctx[k]);\n out.push({ ch: want.ch, raw: null, run, ctx: this.revised(this.linked(shared, want.fmt.link, left), want.fmt.rev), u: null, fmt: want.fmt });\n }\n }\n let xml = '';\n let stack: Wrap[] = [];\n let cur: { run: Run; glyphs: Glyph[] } | null = null;\n const flush = () => {\n if (cur) xml += this.runXml(cur.run, cur.glyphs, counts);\n cur = null;\n };\n const sync = (ctx: Wrap[]) => {\n let k = 0;\n while (k < stack.length && k < ctx.length && stack[k] === ctx[k]) k++;\n if (k === stack.length && k === ctx.length) return;\n flush();\n for (let x = stack.length - 1; x >= k; x--) xml += stack[x].close;\n for (let x = k; x < ctx.length; x++) xml += ctx[x].open;\n stack = ctx;\n };\n for (const g of out) {\n sync(g.ctx);\n if (g.xml || !g.run) {\n flush();\n xml += g.xml ?? g.raw ?? '';\n continue;\n }\n if (!cur || cur.run !== g.run) {\n flush();\n cur = { run: g.run, glyphs: [] };\n }\n cur.glyphs.push(g);\n }\n flush();\n sync([]);\n return xml;\n }\n\n private firstRun(src: Block | null): { run: Run; fmt: Fmt } {\n const p = src?.pieces.find(x => x.text !== null && x.run && !x.span);\n if (p) return { run: { ...p.run!, open: '<w:r>', el: null }, fmt: p.run!.fmt };\n return src ? this.markRun(src) : { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n }\n\n private linked(ctx: Wrap[], link: string | null, left: Glyph | null): Wrap[] {\n let cur: string | null = null;\n for (const w of ctx) if (w.link) cur = w.link;\n if (cur === link) return ctx;\n const out = ctx.filter(w => !w.link);\n if (!link) return out;\n let wrap = left?.ctx.find(w => w.link === link) ?? this.wraps.get(link);\n if (!wrap) {\n const tag = link.startsWith('#') ? `<w:hyperlink w:anchor=\"${escape(link.slice(1))}\" w:history=\"1\">` : `<w:hyperlink r:id=\"${this.link(link)}\" w:history=\"1\">`;\n wrap = { open: tag, close: '</w:hyperlink>', link, ins: false };\n this.wraps.set(link, wrap);\n }\n const at = out.findIndex(w => w.ins);\n return at === -1 ? [...out, wrap] : [...out.slice(0, at), wrap, ...out.slice(at)];\n }\n\n private revised(ctx: Wrap[], rev: string | null): Wrap[] {\n const out = ctx.filter(w => !w.rev || w.rev === rev);\n if (!rev || out.some(w => w.rev === rev)) return out;\n let wrap = this.revs.get(rev);\n if (!wrap) {\n const [kind, , author, date] = JSON.parse(rev) as string[];\n const tag = kind === 'ins' ? 'w:ins' : 'w:del';\n wrap = { open: `<${tag} w:id=\"${this.nextRev++}\" w:author=\"${escape(author || 'Documents')}\" w:date=\"${escape(date || new Date().toISOString().replace(/\\.\\d+Z$/, 'Z'))}\">`, close: `</${tag}>`, link: null, ins: true, rev };\n this.revs.set(rev, wrap);\n }\n return [...out, wrap];\n }\n\n private link(href: string): string {\n for (const r of this.pkg.rels.values()) if (r.external && r.target === href && r.type.endsWith('/hyperlink')) return r.id;\n if (!this.links.has(href)) {\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/hyperlink\" Target=\"${escape(href)}\" TargetMode=\"External\"/>`);\n this.links.set(href, id);\n }\n return this.links.get(href)!;\n }\n\n private relId(): string {\n let n = this.relIds.size + 1;\n while (this.relIds.has(`rId${n}`)) n++;\n this.relIds.add(`rId${n}`);\n return `rId${n}`;\n }\n\n private derive(run: Run, from: Fmt, to: Fmt): Run {\n const cache = ((run as Run & { derived?: Map<string, Run> }).derived ??= new Map());\n const key = keyOf(from) + '>' + keyOf(to);\n if (!cache.has(key)) cache.set(key, { open: run.open, rPr: this.delta(run.rPr, from, to), fmt: to, el: null, parent: null });\n return cache.get(key)!;\n }\n\n private delta(rPr: string, from: Fmt, to: Fmt): string {\n const root = rPr ? parse(rPr).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:rStyle');\n const style = styleEl ? attr(rPr, styleEl, 'w:val') : null;\n const sf = style ? this.pkg.styles.char(style) : {};\n const set: Record<string, string | null> = {};\n const toggle = (on: boolean, was: boolean, name: string, cs: string, given: boolean | undefined) => {\n if (on === was) return;\n set[name] = on ? `<${name}/>` : given ? `<${name} w:val=\"0\"/>` : null;\n if (!on) set[cs] = null;\n };\n toggle(to.b, from.b, 'w:b', 'w:bCs', sf.b);\n toggle(to.i, from.i, 'w:i', 'w:iCs', sf.i);\n if (to.u !== from.u) set['w:u'] = to.u ? '<w:u w:val=\"single\"/>' : sf.u ? '<w:u w:val=\"none\"/>' : null;\n if (to.s !== from.s) {\n set['w:strike'] = to.s ? '<w:strike/>' : sf.s ? '<w:strike w:val=\"0\"/>' : null;\n if (!to.s) set['w:dstrike'] = null;\n }\n if (to.color !== from.color) set['w:color'] = to.color ? `<w:color w:val=\"${to.color.slice(1).toUpperCase()}\"/>` : sf.color ? '<w:color w:val=\"auto\"/>' : null;\n if (to.size !== from.size) {\n const hp = to.size ? Math.round(parseFloat(to.size) * 2) : 0;\n set['w:sz'] = hp ? `<w:sz w:val=\"${hp}\"/>` : null;\n set['w:szCs'] = hp ? `<w:szCs w:val=\"${hp}\"/>` : null;\n }\n if (to.hl !== from.hl) {\n const name = to.hl ? Object.keys(highlights).find(k => '#' + highlights[k] === to.hl) : undefined;\n set['w:highlight'] = name ? `<w:highlight w:val=\"${name}\"/>` : null;\n const shd = get('w:shd');\n if (to.hl && !name) set['w:shd'] = `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${to.hl.slice(1).toUpperCase()}\"/>`;\n else if (shd && color(attr(rPr, shd, 'w:fill'))) set['w:shd'] = null;\n }\n if (to.font !== from.font || to.code !== from.code) {\n const want = to.code ? 'Courier New' : to.font;\n const fonts = get('w:rFonts');\n const kept = fonts ? attrs(rPr.slice(fonts.start, fonts.open)).filter(([k]) => !/^w:(ascii|hAnsi|cs|asciiTheme|hAnsiTheme|cstheme)$/.test(k)) : [];\n if (want) kept.unshift(['w:ascii', want], ['w:hAnsi', want], ['w:cs', want]);\n set['w:rFonts'] = kept.length ? `<w:rFonts ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (to.link && !from.link && !style) {\n const id = this.pkg.styles.find((name, id) => /^hyperlink$/i.test(name) || id === 'Hyperlink', 'character');\n if (id) set['w:rStyle'] = `<w:rStyle w:val=\"${escape(id)}\"/>`;\n } else if (!to.link && from.link && this.pkg.styles.isLink(style)) set['w:rStyle'] = null;\n return Object.keys(set).length ? rebuild(rPr, 'w:rPr', R, set) : rPr;\n }\n\n private runXml(run: Run, glyphs: Glyph[], counts: Map<Run, number>): string {\n if (run.el && glyphs.length === counts.get(run) && glyphs.every((g, n) => g.u && g.u.run === run && g.u.idx === n)) return this.s.slice(run.el.start, run.el.end);\n let body = '';\n let text = '';\n const tag = glyphs[0]?.ctx.some(w => w.rev?.startsWith('[\"del\"')) ? 'w:delText' : 'w:t';\n const flush = () => {\n if (text) body += `<${tag}${/^\\s|\\s$/.test(text) ? ' xml:space=\"preserve\"' : ''}>${escape(text)}</${tag}>`;\n text = '';\n };\n for (const g of glyphs) {\n if (g.ch === null || g.raw !== null || special[g.ch]) {\n flush();\n body += g.raw ?? special[g.ch!];\n } else text += g.ch;\n }\n flush();\n return run.open + run.rPr + body + '</w:r>';\n }\n\n private embed(src: string): { id: string; size: [number, number] | null } {\n if (!this.srcs) {\n this.srcs = new Map();\n for (const b of this.r.refs.values()) if ('pieces' in b) for (const p of b.pieces) if (p.img && p.pic) this.srcs.set(String(p.img.src), p.pic.embed);\n }\n const id = this.srcs.get(src);\n if (id) return { id, size: null };\n const added = this.addMedia(src);\n if (!added) throw new Error('Image could not be read');\n this.srcs.set(src, added.id);\n return added;\n }\n\n private drawing(img: Record<string, unknown>): string {\n const media = this.embed(String(img.src ?? ''));\n const max = Math.round(this.textWidth() / 15);\n let w = Math.round(Number(img.width)) || 0;\n let h = Math.round(Number(img.height)) || 0;\n const [nw, nh] = media.size ?? [w || 300, h || 200];\n if (!w && !h) [w, h] = nw > max ? [max, Math.round((nh * max) / nw)] : [nw, nh];\n else if (!h) h = Math.round((w * nh) / nw);\n else if (!w) w = Math.round((h * nw) / nh);\n const id = this.docPr++;\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n return `<w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"><wp:extent ${ext}/><wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>${meta(`<wp:docPr id=\"${id}\" name=\"Picture ${id}\"/>`, img)}<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"Picture ${id}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${media.id}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext ${ext}/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing>`;\n }\n\n private patch(raw: string, old: Record<string, unknown>, img: Record<string, unknown>): string {\n let xml = raw;\n const w = Math.round(Number(img.width)) || Number(old.width);\n const h = Math.round(Number(img.height)) || Number(old.height);\n if (w !== old.width || h !== old.height) {\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n xml = xml.replace(/<wp:extent\\b[^>]*\\/>/, `<wp:extent ${ext}/>`).replace(/(<a:xfrm\\b[^>]*>[\\s\\S]*?<a:ext)\\b[^>]*\\/>/, `$1 ${ext}/>`);\n }\n if ((img.alt || null) !== (old.alt || null) || (img.title || null) !== (old.title || null)) xml = xml.replace(/<wp:docPr\\b[^>]*>/, tag => meta(tag, img));\n if (img.src !== old.src) xml = xml.replace(/(<a:blip\\b[^>]*\\br:embed=\")[^\"]*\"/, `$1${this.embed(String(img.src ?? '')).id}\"`);\n return xml;\n }\n\n private textWidth(): number {\n const sect = this.body.sect;\n const s = this.s;\n const sz = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n return (sz ? +(attr(s, sz, 'w:w') ?? 12240) : 12240) - (mar ? +(attr(s, mar, 'w:left') ?? 1440) + +(attr(s, mar, 'w:right') ?? 1440) : 2880);\n }\n\n private addMedia(src: string): { id: string; name: string; size: [number, number] | null } | null {\n const m = /^data:([^;,]+)(;base64)?,(.*)$/s.exec(src);\n let img = this.images.get(src);\n if (m) {\n const raw = m[2] ? atob(m[3]) : decodeURIComponent(m[3]);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);\n img = { bytes, mime: m[1] };\n }\n if (!img) return null;\n const ext = ({ 'image/jpeg': 'jpeg', 'image/svg+xml': 'svg' } as Record<string, string>)[img.mime] ?? img.mime.split('/')[1] ?? 'png';\n let n = this.media.length + 1;\n while (this.pkg.files.has(`word/media/w100n-${n}.${ext}`)) n++;\n const name = `w100n-${n}.${ext}`;\n const dir = this.pkg.main.slice(0, this.pkg.main.lastIndexOf('/') + 1);\n this.media.push({ name: `${dir}media/${name}`, bytes: img.bytes });\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/image\" Target=\"media/${name}\"/>`);\n return { id, name, size: dims(img.bytes) };\n }\n\n private code(o: Out): string {\n const style = this.pkg.styles.find(name => /^(source code|html preformatted|code|plain text)$/i.test(name));\n const text = (o.node.content ?? []).map(n => n.text ?? '').join('');\n const pPr = style ? `<w:pPr><w:pStyle w:val=\"${escape(style)}\"/></w:pPr>` : '<w:pPr><w:spacing w:after=\"0\"/></w:pPr>';\n const rPr = style ? '' : '<w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\"/></w:rPr>';\n return text.split('\\n').map(line => `<w:p>${pPr}${line ? `<w:r>${rPr}<w:t xml:space=\"preserve\">${escape(line).replace(/\\t/g, '</w:t><w:tab/><w:t xml:space=\"preserve\">')}</w:t></w:r>` : ''}</w:p>`).join('');\n }\n\n private table(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const s = this.s;\n if (b && sig(o.node) === sig(b.node)) return s.slice(b.start, b.end);\n const rows = o.node.content ?? [];\n const layout = grid(rows);\n const cols = Math.max(1, ...layout.map(r => r.reduce((m, sl) => Math.max(m, sl.col + sl.span), 0)));\n let head: string;\n let tail = '';\n if (b) {\n const first = b.rows[0];\n const last = b.rows[b.rows.length - 1];\n head = opened(s, b.el) + s.slice(b.el.open, first ? first.el.start - first.lead.length : b.el.close);\n if (last) tail = s.slice(last.el.end, b.el.close);\n if (b.cols && cols !== b.cols) {\n head = head.replace(/(<w:tblGrid\\b[^>]*>)([\\s\\S]*?)(<\\/w:tblGrid>)/, (_, open: string, inside: string, close: string) => {\n const list: string[] = [...(inside.match(/<w:gridCol\\b[^>]*\\/>/g) ?? [])];\n while (list.length < cols) list.push(list[list.length - 1] ?? '<w:gridCol/>');\n return open + list.slice(0, cols).join('') + close;\n });\n }\n } else {\n const tpl = near(x => x.kind === 'tbl');\n const pr = tpl && kid(tpl.el, 'w:tblPr');\n const style = this.pkg.styles.find(name => /^(table grid|сітка таблиці|сетка таблицы)$/i.test(name), 'table');\n const line = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>`;\n const tblPr = pr ? s.slice(pr.start, pr.end) : `<w:tblPr>${style ? `<w:tblStyle w:val=\"${escape(style)}\"/>` : ''}<w:tblW w:w=\"0\" w:type=\"auto\"/>${style ? '' : `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`}<w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr>`;\n head = `<w:tbl>${tblPr}<w:tblGrid>${`<w:gridCol w:w=\"${Math.floor(this.textWidth() / cols)}\"/>`.repeat(cols)}</w:tblGrid>`;\n }\n const width = Math.floor(this.textWidth() / cols);\n let xml = head;\n let above: (Cell | null)[] = [];\n let aboveRow: Row | null = null;\n const cover = new Map<JSONContent, Cell | null>();\n const firstRow = rows.map(r => this.claimed.get(r) as Row | undefined).find(Boolean) ?? null;\n rows.forEach((node, r) => {\n const R = (this.claimed.get(node) as Row | undefined) ?? null;\n const slots = layout[r];\n const shape = (sl: Slot) => (sl.cell ? `${(this.claimed.get(sl.cell) as Cell | undefined)?.ref ?? '-'}@${sl.col}` : `c${sl.col}`);\n const now: (Cell | null)[] = [];\n if (R && sig(node) === sig(R.node) && R.cells.map(c => (c.vm === 'continue' ? `c${c.col}` : `${c.ref}@${c.col}`)).join() === slots.map(shape).join()) {\n xml += R.lead + s.slice(R.el.start, R.el.end);\n for (const c of R.cells) for (let k = c.col; k < c.col + c.span; k++) now[k] = c;\n for (const sl of slots) if (sl.cell && Number(sl.cell.attrs?.rowspan ?? 1) > 1) cover.set(sl.cell, (this.claimed.get(sl.cell) as Cell | undefined) ?? null);\n above = now;\n aboveRow = R;\n return;\n }\n const srcRow = R ?? aboveRow ?? firstRow;\n const header = (node.content ?? []).length > 0 && (node.content ?? []).every(c => c.type === 'tableHeader');\n let rowHead = R ? R.head : srcRow ? srcRow.head.replace(/<w:(ins|del)\\b[^>]*\\/>|<w:trPrChange\\b[\\s\\S]*?<\\/w:trPrChange>/g, '') : '';\n if (!R) {\n if (!header) rowHead = rowHead.replace(/<w:tblHeader\\b[^>]*\\/>/g, '').replace(/<w:trPr><\\/w:trPr>|<w:trPr\\/>/, '');\n else if (!/<w:tblHeader\\b/.test(rowHead)) rowHead = /<w:trPr>/.test(rowHead) ? rowHead.replace('<w:trPr>', '<w:trPr><w:tblHeader/>') : rowHead + '<w:trPr><w:tblHeader/></w:trPr>';\n }\n xml += (R ? R.lead + opened(s, R.el) : '<w:tr>') + rowHead;\n for (const sl of slots) {\n if (!sl.cell) {\n const cont = R?.cells.find(c => c.vm === 'continue' && c.col === sl.col);\n if (cont) xml += cont.lead + s.slice(cont.el.start, cont.el.end);\n else xml += `<w:tc>${this.tcPr(cover.get(sl.from!) ?? above[sl.col] ?? null, sl.span, 'continue', width)}<w:p/></w:tc>`;\n now[sl.col] = cover.get(sl.from!) ?? null;\n continue;\n }\n const C = (this.claimed.get(sl.cell) as Cell | undefined) ?? null;\n const vm = Number(sl.cell.attrs?.rowspan ?? 1) > 1 ? 'restart' : null;\n const srcCell = C ?? above[sl.col] ?? (srcRow?.cells.find(c => c.col === sl.col) ?? null);\n if (vm) cover.set(sl.cell, srcCell);\n for (let k = sl.col; k < sl.col + sl.span; k++) now[k] = srcCell;\n if (C && sig(sl.cell) === sig(C.node!) && C.span === sl.span && C.vm === vm) {\n xml += C.lead + s.slice(C.el.start, C.el.end);\n continue;\n }\n const fallback = srcCell?.blocks.find(x => x.kind === 'p') ?? null;\n let inside = this.container(flatten(sl.cell.content ?? []), C ? C.blocks : [], fallback) + (C ? this.left.get(C) ?? '' : '');\n if (!this.last || this.last === 'tbl') inside += '<w:p/>';\n xml += (C ? C.lead + opened(s, C.el) : '<w:tc>') + this.tcPr(srcCell, sl.span, vm, width, !C) + inside + (C ? C.tail : '') + '</w:tc>';\n }\n const lastCell = R?.cells[R.cells.length - 1];\n xml += (R && lastCell ? s.slice(lastCell.el.end, R.el.close) : '') + '</w:tr>';\n above = now;\n aboveRow = srcRow;\n });\n return xml + tail + '</w:tbl>';\n }\n\n private tcPr(src: Cell | null, span: number, vm: 'restart' | 'continue' | null, width: number, clone = true): string {\n const s = this.s;\n const el = src && kid(src.el, 'w:tcPr');\n const xml = el ? s.slice(el.start, el.end) : '';\n if (!clone && src && src.span === span && src.vm === vm) return xml;\n const set: Record<string, string | null> = { 'w:gridSpan': span > 1 ? `<w:gridSpan w:val=\"${span}\"/>` : null, 'w:vMerge': vm === 'restart' ? '<w:vMerge w:val=\"restart\"/>' : vm ? '<w:vMerge/>' : null, 'w:hMerge': null };\n if (clone) Object.assign(set, { 'w:cellIns': null, 'w:cellDel': null, 'w:cellMerge': null, 'w:tcPrChange': null });\n const tcW = el && kid(el, 'w:tcW');\n if (!tcW && !src) set['w:tcW'] = `<w:tcW w:w=\"${width * span}\" w:type=\"dxa\"/>`;\n else if (tcW && src && src.span !== span && attr(xml, tcW, 'w:type') === 'dxa') set['w:tcW'] = `<w:tcW w:w=\"${Math.round((+(attr(xml, tcW, 'w:w') ?? 0) * span) / src.span)}\" w:type=\"dxa\"/>`;\n return rebuild(xml, 'w:tcPr', TC, set);\n }\n}\n\nexport async function fetched(src: string): Promise<Img> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`Image could not be read: ${src}`);\n return { bytes: new Uint8Array(await res.arrayBuffer()), mime: res.headers.get('content-type')?.split(';')[0] || 'image/png' };\n}\n\nexport async function images(doc: JSONContent, load: (src: string) => Promise<Img>): Promise<Map<string, Img>> {\n const out = new Map<string, Img>();\n const walk = async (n: JSONContent) => {\n if (n.type === 'image' && typeof n.attrs?.src === 'string' && !out.has(n.attrs.src)) {\n const src: string = n.attrs.src;\n if (src && !src.startsWith('data:')) out.set(src, await load(src));\n }\n for (const k of n.content ?? []) await walk(k);\n };\n await walk(doc);\n return out;\n}\n","import { Pkg } from './pkg';\nimport { assemble, Reader, type JSONContent } from './read';\nimport { fetched, images, Writer, type Img } from './write';\nimport { attr, kid } from './xml';\n\nexport type { JSONContent } from './read';\nexport type { Img } from './write';\n\nexport type DocxModel = { doc: JSONContent; styles: { name: string; id: string; heading: number | null }[]; page: { width: number; height: number; margins: [number, number, number, number] } };\n\nexport async function readDocx(bytes: ArrayBuffer): Promise<DocxModel> {\n const pkg = new Pkg(new Uint8Array(bytes));\n const { list, sect } = new Reader(pkg).body();\n const content = assemble(list);\n const s = pkg.doc;\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const px = (el: typeof size, name: string, fallback: number) => Math.round((Math.abs(+((el && attr(s, el, name)) ?? fallback)) / 15) * 100) / 100;\n return {\n doc: { type: 'doc', content: content.length ? content : [{ type: 'paragraph', attrs: { align: null, indent: 0, ref: null } }] },\n styles: pkg.styles.list(),\n page: { width: px(size, 'w:w', 12240), height: px(size, 'w:h', 15840), margins: [px(mar, 'w:top', 1440), px(mar, 'w:right', 1440), px(mar, 'w:bottom', 1440), px(mar, 'w:left', 1440)] },\n };\n}\n\nexport async function writeDocx(original: ArrayBuffer, doc: JSONContent, load: (src: string) => Promise<Img> = fetched): Promise<ArrayBuffer> {\n const pkg = new Pkg(new Uint8Array(original));\n const out = new Writer(pkg, await images(doc, load)).run(doc);\n return out ? out.slice().buffer : original.slice(0);\n}\n","export type Heading = { id: string; level: number; text: string; go?: () => void };\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 { 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","import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\n\nexport type Page = { width: number; height: number; margins: [number, number, number, number] };\n\nexport const a4: Page = { width: 793.73, height: 1122.53, margins: [96, 96, 96, 96] };\nexport const letter = { width: 816, height: 1056 };\n\ntype Paging = { set: DecorationSet; page: Page };\n\nexport const paging = new PluginKey<Paging>('w100n-pager');\nconst skip = (el: Element) => el.classList.contains('w100n-text-gap') || el.classList.contains('ProseMirror-gapcursor');\n\nfunction measure(view: EditorView) {\n const { page } = paging.getState(view.state)!;\n const [top, , bottom] = page.margins;\n const room = page.height - top - bottom;\n const els = [...view.dom.children] as HTMLElement[];\n const gaps: { pos: number; height: number; page: number; end?: boolean }[] = [];\n let i = 0;\n let shift = 0;\n let start = 0;\n let last = 0;\n view.state.doc.forEach((node, offset) => {\n let el = els[i++];\n while (el && skip(el)) {\n if (el.classList.contains('w100n-text-gap')) shift += el.offsetHeight;\n el = els[i++];\n }\n if (!el) return;\n const y = el.offsetTop - shift;\n const end = y + el.offsetHeight;\n if (node.type.name === 'pageBreak') {\n gaps.push({ pos: offset + node.nodeSize, height: start + room - end + bottom + 24 + top, page: gaps.length + 1 });\n start = end;\n } else if (end > start + room && y > start) {\n gaps.push({ pos: offset, height: start + room - y + bottom + 24 + top, page: gaps.length + 1 });\n start = y;\n }\n while (end > start + room) start += room;\n last = end;\n });\n gaps.push({ pos: view.state.doc.content.size, height: Math.max(0, start + room - last), page: gaps.length + 1, end: true });\n return gaps.map(g => ({ ...g, height: Math.max(0, Math.round(g.height)) }));\n}\n\nexport const Pager = Extension.create({\n name: 'pager',\n addProseMirrorPlugins: () => [new Plugin<Paging>({\n key: paging,\n state: {\n init: () => ({ set: DecorationSet.empty, page: a4 }),\n apply(tr, value) {\n const next = tr.getMeta(paging) as Partial<Paging> | undefined;\n return { set: next?.set ?? value.set.map(tr.mapping, tr.doc), page: next?.page ?? value.page };\n },\n },\n props: { decorations: state => paging.getState(state)!.set },\n view(view) {\n let timer = 0;\n let sig = '';\n const run = () => {\n if (!view.dom.isConnected) return;\n const gaps = measure(view);\n const next = gaps.map(g => `${g.pos}:${g.height}`).join();\n if (next === sig) return;\n sig = next;\n const set = DecorationSet.create(view.state.doc, gaps.map(g => Decoration.widget(g.pos, () => {\n const el = document.createElement('div');\n el.className = g.end ? 'w100n-text-gap is-end' : 'w100n-text-gap';\n el.style.height = `${g.height}px`;\n el.dataset.page = String(g.page);\n el.contentEditable = 'false';\n return el;\n }, { key: `${g.pos}:${g.height}:${g.page}`, side: -1, ignoreSelection: true })));\n view.dispatch(view.state.tr.setMeta(paging, { set }).setMeta('addToHistory', false));\n };\n const later = (ms: number) => {\n clearTimeout(timer);\n timer = window.setTimeout(run, ms);\n };\n const watch = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => later(200));\n watch?.observe(view.dom);\n later(0);\n return {\n update: (next, prev) => {\n if (paging.getState(next.state)!.page !== paging.getState(prev)!.page) later(0);\n else if (next.state.doc !== prev.doc) later(400);\n },\n destroy: () => { clearTimeout(timer); watch?.disconnect(); },\n };\n },\n })],\n});\n","import { Extension, Mark, Node, type Editor } from '@tiptap/core';\nimport Collaboration from '@tiptap/extension-collaboration';\nimport CollaborationCaret from '@tiptap/extension-collaboration-caret';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport { TaskItem, TaskList } from '@tiptap/extension-list';\nimport { TableKit } from '@tiptap/extension-table';\nimport { Color, FontFamily, FontSize, TextStyle } from '@tiptap/extension-text-style';\nimport type { Node as Block, Slice } from '@tiptap/pm/model';\nimport { Plugin, PluginKey, TextSelection, type EditorState, type Transaction } from '@tiptap/pm/state';\nimport { StepMap, type Mappable } from '@tiptap/pm/transform';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\nimport StarterKit from '@tiptap/starter-kit';\nimport { ySyncPluginKey } from '@tiptap/y-tiptap';\nimport type * as Y from 'yjs';\nimport type { Text } from '../text';\nimport { Pager } from './pager';\n\nexport type Spot = { id: string; from: number; to: number };\ntype Notes = { spots: Spot[]; active: string | null; pending: { from: number; to: number } | null; set: DecorationSet };\n\nexport const notes = new PluginKey<Notes>('w100n-notes');\n\nconst blocks = ['paragraph', 'heading', 'bulletList', 'orderedList', 'listItem', 'taskList', 'taskItem', 'blockquote', 'codeBlock', 'horizontalRule',\n 'table', 'tableRow', 'tableHeader', 'tableCell', 'pageBreak', 'toc'];\n\nconst changed = (trs: readonly Transaction[]) => {\n const ranges: [number, number][] = [];\n trs.forEach((tr, n) => tr.steps.forEach((step, i) => {\n const slice = (step as { slice?: { openStart: number; openEnd: number; content: { firstChild: Block | null } } }).slice;\n if (!slice || (!slice.openStart && !slice.openEnd && !slice.content.firstChild?.isBlock)) return;\n const after = tr.mapping.slice(i + 1);\n for (const later of trs.slice(n + 1)) after.appendMapping(later.mapping);\n step.getMap().forEach((_a, _b, from, to) => ranges.push([after.map(from, -1), after.map(to, 1)]));\n }));\n return ranges;\n};\n\nconst Blocks = Extension.create({\n name: 'blocks',\n addGlobalAttributes: () => [{\n types: blocks,\n attributes: {\n align: { default: null, parseHTML: el => el.style.textAlign || null, renderHTML: attrs => attrs.align ? { style: `text-align: ${attrs.align}` } : {} },\n indent: { default: 0, parseHTML: el => Number(el.dataset.indent) || 0, renderHTML: attrs => attrs.indent ? { 'data-indent': attrs.indent, style: `margin-left: ${attrs.indent * 0.5}in` } : {} },\n ref: { default: null, rendered: false, keepOnSplit: false },\n },\n }],\n addProseMirrorPlugins: () => [new Plugin({\n appendTransaction(trs, _old, state) {\n const ranges = changed(trs);\n if (!ranges.length) return null;\n const seen = new Map<string, { pos: number; node: Block }>();\n const drop: number[] = [];\n const visit = (node: Block, pos: number) => {\n const ref = node.attrs.ref as string | null;\n if (!ref) return;\n const first = seen.get(ref);\n if (!first) seen.set(ref, { pos, node });\n else if (!first.node.textContent && node.textContent) { drop.push(first.pos); seen.set(ref, { pos, node }); }\n else drop.push(pos);\n };\n const from = Math.max(0, Math.min(...ranges.map(r => r[0])));\n const to = Math.min(state.doc.content.size, Math.max(...ranges.map(r => r[1])));\n const $from = state.doc.resolve(from);\n const $to = state.doc.resolve(to);\n const start = Math.max(0, $from.index(0) - 1);\n const end = Math.min(state.doc.childCount, $to.index(0) + 2);\n let pos = 0;\n for (let i = 0; i < start; i++) pos += state.doc.child(i).nodeSize;\n for (let i = start; i < end; i++) {\n const top = state.doc.child(i);\n visit(top, pos);\n top.descendants((node, at) => visit(node, pos + 1 + at));\n pos += top.nodeSize;\n }\n if (!drop.length) return null;\n const tr = state.tr;\n for (const at of drop) tr.setNodeAttribute(at, 'ref', null);\n return tr;\n },\n })],\n});\n\nconst PageBreak = Node.create<{ label: string }>({\n name: 'pageBreak',\n group: 'block',\n atom: true,\n selectable: true,\n addOptions: () => ({ label: '' }),\n parseHTML: () => [{ tag: 'div[data-page-break]' }],\n renderHTML() {\n return ['div', { 'data-page-break': '', 'data-label': this.options.label, class: 'w100n-text-break', contenteditable: 'false' }];\n },\n});\n\nexport type Entry = [number, string];\n\nconst headings = (doc: Block, after: number) => {\n const found: { pos: number; level: number; text: string }[] = [];\n doc.descendants((node, pos) => {\n if (pos > after && node.type.name === 'heading' && node.attrs.level <= 3 && node.textContent.trim()) found.push({ pos, level: node.attrs.level, text: node.textContent.trim() });\n return !node.isTextblock;\n });\n return found;\n};\n\nexport function entries(doc: Block, relative: boolean, after: number): Entry[] {\n const list = headings(doc, after).map(h => [h.level, h.text] as Entry);\n const top = relative && list.length ? Math.min(...list.map(([level]) => level)) - 1 : 0;\n return list.map(([level, text]) => [level - top, text]);\n}\n\nconst Toc = Node.create<{ relative: boolean; label: string; empty: string }>({\n name: 'toc',\n group: 'block',\n atom: true,\n selectable: true,\n addOptions: () => ({ relative: false, label: '', empty: '' }),\n addAttributes: () => ({ entries: { default: '[]' }, title: { default: null } }),\n parseHTML: () => [{ tag: 'nav[data-toc]' }],\n renderHTML() {\n return ['nav', { 'data-toc': '', class: 'w100n-text-toc' }];\n },\n addNodeView() {\n return ({ editor, getPos }) => {\n const dom = document.createElement('nav');\n dom.className = 'w100n-text-toc';\n dom.contentEditable = 'false';\n const paint = () => {\n const at = getPos() ?? 0;\n const list = entries(editor.state.doc, this.options.relative, at);\n const head = document.createElement('b');\n head.textContent = this.options.label;\n const items = list.map(([level, text], i) => {\n const go = document.createElement('button');\n go.type = 'button';\n go.textContent = text;\n go.dataset.level = String(level);\n go.onclick = () => {\n const hit = headings(editor.state.doc, getPos() ?? 0)[i];\n if (hit) (editor.view.nodeDOM(hit.pos) as HTMLElement | null)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n };\n return go;\n });\n const empty = document.createElement('small');\n empty.textContent = this.options.empty;\n dom.replaceChildren(head, ...(items.length ? items : [empty]));\n };\n paint();\n return {\n dom,\n update: node => {\n if (node.type.name !== 'toc') return false;\n paint();\n return true;\n },\n ignoreMutation: () => true,\n };\n };\n },\n addProseMirrorPlugins() {\n const relative = this.options.relative;\n return [new Plugin({\n appendTransaction(trs, _old, state) {\n if (!trs.some(tr => tr.docChanged && !tr.getMeta(ySyncPluginKey))) return null;\n const at: number[] = [];\n state.doc.forEach((node, pos) => { if (node.type.name === 'toc') at.push(pos); });\n if (!at.length) return null;\n const tr = state.tr;\n for (const pos of at) {\n const fresh = JSON.stringify(entries(state.doc, relative, pos));\n if (state.doc.nodeAt(pos)!.attrs.entries !== fresh) tr.setNodeAttribute(pos, 'entries', fresh);\n }\n return tr.docChanged ? tr : null;\n },\n })];\n },\n});\n\nconst revision = (name: 'insertion' | 'deletion', tag: 'ins' | 'del') => Mark.create({\n name,\n inclusive: false,\n excludes: 'insertion deletion',\n addAttributes: () => ({ id: { default: null }, author: { default: '' }, date: { default: '' } }),\n parseHTML: () => [{ tag: `${tag}[data-rev]` }],\n renderHTML: ({ HTMLAttributes }) => [tag, { 'data-rev': HTMLAttributes.id, class: 'w100n-text-rev', title: HTMLAttributes.author }, 0],\n});\n\nexport type Change = { id: string; kind: 'insertion' | 'deletion'; author: string; date: string; text: string; from: number; to: number };\n\nconst seen = new WeakMap<Block, Change[]>();\n\nexport function changes(doc: Block): Change[] {\n const hit = seen.get(doc);\n if (hit) return hit;\n const out: Change[] = [];\n doc.descendants((node, pos) => {\n if (!node.isText) return;\n const mark = node.marks.find(m => m.type.name === 'insertion' || m.type.name === 'deletion');\n if (!mark) return;\n const last = out[out.length - 1];\n if (last && last.id === mark.attrs.id && last.kind === mark.type.name && last.to === pos) Object.assign(last, { text: last.text + node.text, to: pos + node.nodeSize });\n else out.push({ id: mark.attrs.id, kind: mark.type.name as Change['kind'], author: mark.attrs.author, date: mark.attrs.date, text: node.text!, from: pos, to: pos + node.nodeSize });\n });\n seen.set(doc, out);\n return out;\n}\n\nexport function decide(editor: Editor, accept: boolean, id?: string) {\n const { state } = editor;\n const tr = state.tr;\n for (const c of changes(state.doc).filter(c => !id || c.id === id).reverse()) {\n if ((c.kind === 'insertion') === accept) tr.removeMark(c.from, c.to, state.schema.marks[c.kind].create({ id: c.id, author: c.author, date: c.date }));\n else tr.delete(c.from, c.to);\n }\n if (tr.docChanged) editor.view.dispatch(tr);\n}\n\ntype Suggesting = { on: boolean; me: string };\nexport const suggesting = new PluginKey<Suggesting>('w100n-suggest');\n\nconst Suggest = Extension.create({\n name: 'suggest',\n addProseMirrorPlugins() {\n const stamp = (state: EditorState, kind: 'insertion' | 'deletion', from: number, to: number) => {\n const me = suggesting.getState(state)!.me;\n const own = [state.doc.resolve(from).nodeBefore, state.doc.resolve(to).nodeAfter].flatMap(n => n?.marks ?? []).find(m => m.type.name === kind && m.attrs.author === me);\n return state.schema.marks[kind].create(own ? own.attrs : { id: Math.random().toString(36).slice(2, 10), author: me, date: new Date().toISOString().replace(/\\.\\d+Z$/, 'Z') });\n };\n const strike = (tr: Transaction, state: EditorState, from: number, to: number) => {\n const parts: { from: number; to: number; added: boolean }[] = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n const a = Math.max(from, pos), b = Math.min(to, pos + node.nodeSize);\n if (b > a && !node.marks.some(m => m.type.name === 'deletion')) parts.push({ from: a, to: b, added: node.marks.some(m => m.type.name === 'insertion') });\n });\n const mark = stamp(state, 'deletion', from, to);\n for (const p of parts.reverse()) {\n if (p.added) tr.delete(p.from, p.to);\n else tr.addMark(p.from, p.to, mark);\n }\n };\n const type = (view: EditorView, from: number, to: number, text: string) => {\n const { state } = view;\n const tr = state.tr;\n if (to > from) strike(tr, state, from, to);\n const at = tr.mapping.map(to);\n const kept = (state.storedMarks ?? state.doc.resolve(from).marks()).filter(m => m.type.name !== 'insertion' && m.type.name !== 'deletion');\n tr.insert(at, state.schema.text(text, [...kept, stamp(state, 'insertion', from, to)]));\n tr.setSelection(TextSelection.create(tr.doc, at + text.length));\n view.dispatch(tr.scrollIntoView());\n return true;\n };\n return [new Plugin<Suggesting>({\n key: suggesting,\n state: {\n init: () => ({ on: false, me: '' }),\n apply: (tr, value) => tr.getMeta(suggesting) ?? value,\n },\n props: {\n handleTextInput(view, from, to, text) {\n return suggesting.getState(view.state)!.on && type(view, from, to, text);\n },\n handlePaste(view, _event, slice) {\n if (!suggesting.getState(view.state)!.on) return false;\n const { from, to } = view.state.selection;\n return type(view, from, to, slice.content.textBetween(0, slice.content.size, '\\n'));\n },\n handleKeyDown(view, event) {\n const { state } = view;\n if (!suggesting.getState(state)!.on || (event.key !== 'Backspace' && event.key !== 'Delete') || event.metaKey || event.ctrlKey || event.altKey) return false;\n const { from, to, empty, $from } = state.selection;\n const back = event.key === 'Backspace';\n let at = from;\n if (empty) {\n const skip = (pos: number) => state.doc.resolve(pos)[back ? 'nodeBefore' : 'nodeAfter']?.marks.some(m => m.type.name === 'deletion');\n while (skip(at)) at += back ? -1 : 1;\n if (back ? at <= $from.start() : at >= $from.end()) return false;\n }\n const tr = state.tr;\n if (empty) strike(tr, state, back ? at - 1 : at, back ? at : at + 1);\n else strike(tr, state, from, to);\n const caret = empty ? tr.mapping.map(back ? at - 1 : at + 1, back ? -1 : 1) : tr.mapping.map(back ? from : to);\n tr.setSelection(TextSelection.create(tr.doc, caret));\n view.dispatch(tr.scrollIntoView());\n return true;\n },\n },\n })];\n },\n});\n\nconst Note = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n addAttributes: () => ({ id: { default: null, renderHTML: attrs => ({ 'data-comment': attrs.id }) } }),\n renderHTML: ({ HTMLAttributes }) => ['span', HTMLAttributes, 0],\n});\n\nconst locks = new PluginKey<{ spans: { from: number; to: number }[]; set: DecorationSet }>('w100n-locks');\nconst locked = (node: Block) => node.type.name === 'paragraph' && String(node.attrs.ref ?? '').startsWith('lock:');\nconst scan = (doc: Block) => {\n const spans: { from: number; to: number }[] = [];\n doc.descendants((node, pos) => {\n if (!locked(node)) return true;\n spans.push({ from: pos, to: pos + node.nodeSize });\n return false;\n });\n return spans;\n};\n\nconst Locks = Extension.create<{ label: string }>({\n name: 'locks',\n addOptions: () => ({ label: '' }),\n addProseMirrorPlugins() {\n const shade = (doc: Block, spans: { from: number; to: number }[]) =>\n DecorationSet.create(doc, spans.map(s => Decoration.node(s.from, s.to, { class: 'w100n-text-lock', contenteditable: 'false', 'data-label': this.options.label })));\n return [new Plugin({\n key: locks,\n state: {\n init: (_config, state) => {\n const spans = scan(state.doc);\n return { spans, set: shade(state.doc, spans) };\n },\n apply(tr, value) {\n if (!tr.docChanged) return value;\n const fresh = tr.steps.some(step => {\n let found = false;\n (step as { slice?: Slice }).slice?.content.descendants(node => { found ||= locked(node); return !found; });\n return found;\n });\n const spans = fresh ? scan(tr.doc) : value.spans.map(s => ({ from: tr.mapping.map(s.from, 1), to: tr.mapping.map(s.to, -1) })).filter(s => s.to > s.from);\n return { spans, set: spans.length ? shade(tr.doc, spans) : DecorationSet.empty };\n },\n },\n filterTransaction(tr, state) {\n let spans = locks.getState(state)!.spans;\n if (!spans.length || !tr.docChanged) return true;\n return tr.mapping.maps.every(map => {\n let ok = true;\n map.forEach((from, to) => {\n for (const s of spans) if (((from < s.to && to > s.from) || (from > s.from && from < s.to)) && !(from <= s.from && to >= s.to)) ok = false;\n });\n spans = spans.map(s => ({ from: map.map(s.from, 1), to: map.map(s.to, -1) }));\n return ok;\n });\n },\n props: {\n decorations: state => locks.getState(state)!.set,\n handleKeyDown(view, event) {\n const back = event.key === 'Backspace';\n const { $from, empty } = view.state.selection;\n if ((!back && event.key !== 'Delete') || !empty || $from.depth < 1) return false;\n if (back ? $from.parentOffset !== 0 : $from.parentOffset !== $from.parent.content.size) return false;\n const at = back ? $from.before() : $from.after();\n const node = back ? view.state.doc.resolve(at).nodeBefore : view.state.doc.resolve(at).nodeAfter;\n if (!node || !locked(node)) return false;\n view.dispatch(view.state.tr.delete(back ? at - node.nodeSize : at, back ? at : at + node.nodeSize));\n return true;\n },\n },\n })];\n },\n});\n\nconst paint = (doc: Block, spots: Spot[], active: string | null, pending: Notes['pending']) => DecorationSet.create(doc, [\n ...spots.filter(s => s.to > s.from).map(s => Decoration.inline(s.from, s.to, { class: s.id === active ? 'w100n-text-note is-active' : 'w100n-text-note', 'data-note': s.id })),\n ...(pending && pending.to > pending.from ? [Decoration.inline(pending.from, pending.to, { class: 'w100n-text-note is-active' })] : []),\n]);\n\nconst remap = (tr: Transaction): Mappable => {\n const start = tr.before.content.findDiffStart(tr.doc.content);\n if (!tr.getMeta(ySyncPluginKey) || start === null) return tr.mapping;\n let { a, b } = tr.before.content.findDiffEnd(tr.doc.content)!;\n if (a < start) [a, b] = [start, b + start - a];\n if (b < start) [a, b] = [a + start - b, start];\n return new StepMap([start, a - start, b - start]);\n};\n\nconst Notes = Extension.create({\n name: 'notes',\n addProseMirrorPlugins: () => [new Plugin<Notes>({\n key: notes,\n state: {\n init: (_config, state) => ({ spots: [], active: null, pending: null, set: DecorationSet.create(state.doc, []) }),\n apply(tr, value) {\n const next = tr.getMeta(notes) as Partial<Notes> | undefined;\n if (!next && (!tr.docChanged || (!value.spots.length && !value.pending))) return value;\n const by = remap(tr);\n const map = <T extends { from: number; to: number }>(r: T): T => ({ ...r, from: by.map(r.from, 1), to: by.map(r.to, -1) });\n const merged = { ...value, spots: value.spots.map(map), pending: value.pending && map(value.pending), ...next };\n return { ...merged, set: paint(tr.doc, merged.spots, merged.active, merged.pending) };\n },\n },\n props: { decorations: state => notes.getState(state)!.set },\n })],\n});\n\nexport function kit(kind: 'markdown' | 'docx', t: Pick<Text, 'pageBreak' | 'tasks' | 'locked' | 'toc' | 'tocEmpty'>, live?: { doc: Y.Doc; link: { awareness: unknown }; user: Record<string, string> } | null) {\n return [\n StarterKit.configure({ trailingNode: false, link: { openOnClick: false, autolink: true, defaultProtocol: 'https' }, dropcursor: { color: '#8b5cf6', width: 2 }, ...(live ? { undoRedo: false } as const : {}) }),\n TaskList, TaskItem.configure({ nested: true, a11y: { checkboxLabel: node => node.textContent || t.tasks } }),\n TableKit.configure({ table: { resizable: false } }),\n Image.configure({ inline: true, allowBase64: true }),\n Highlight.configure({ multicolor: true }), TextStyle, Color, FontSize, FontFamily,\n Blocks, PageBreak.configure({ label: t.pageBreak }), Toc.configure({ relative: kind === 'markdown', label: t.toc, empty: t.tocEmpty }), Note, Notes,\n ...(kind === 'docx' ? [Pager, Locks.configure({ label: t.locked }), revision('insertion', 'ins'), revision('deletion', 'del'), Suggest] : []),\n ...(live ? [Collaboration.configure({ document: live.doc }), CollaborationCaret.configure({ provider: live.link, user: live.user })] : []),\n ];\n}\n\nconst textblocks = (editor: Editor, change: (attrs: Record<string, unknown>) => Record<string, unknown>) => editor.chain().focus().command(({ tr, state }) => {\n state.doc.nodesBetween(state.selection.from, state.selection.to, (node, pos) => {\n if (!node.isTextblock) return true;\n for (const [key, value] of Object.entries(change(node.attrs))) if (node.attrs[key] !== value) tr.setNodeAttribute(pos, key, value);\n return false;\n });\n return true;\n}).run();\n\nexport const align = (editor: Editor, value: string | null) => textblocks(editor, () => ({ align: value === 'left' ? null : value }));\n\nexport const indent = (editor: Editor, step: number) => {\n const type = editor.isActive('taskItem') ? 'taskItem' : editor.isActive('listItem') ? 'listItem' : null;\n if (type) return step > 0 ? editor.chain().focus().sinkListItem(type).run() : editor.chain().focus().liftListItem(type).run();\n return textblocks(editor, attrs => ({ indent: Math.min(8, Math.max(0, Number(attrs.indent) + step)) }));\n};\n\nexport const clear = (editor: Editor) => {\n const chain = editor.chain().focus();\n for (const mark of ['bold', 'italic', 'underline', 'strike', 'code', 'highlight', 'textStyle']) chain.unsetMark(mark);\n chain.run();\n return textblocks(editor, () => ({ align: null, indent: 0 }));\n};\n\nexport function locate(doc: Block, list: { id: string; quote: string; anchor?: string }[]): Spot[] {\n if (!list.length) return [];\n const marked = new Map<string, { from: number; to: number; text: string }>();\n doc.descendants((node, pos) => {\n if (!node.isText) return;\n for (const mark of node.marks) {\n if (mark.type.name !== 'comment') continue;\n const found = marked.get(mark.attrs.id);\n if (found) Object.assign(found, { to: pos + node.nodeSize, text: found.text + node.text });\n else marked.set(mark.attrs.id, { from: pos, to: pos + node.nodeSize, text: node.text! });\n }\n });\n const claimed = new Set<string>();\n const search = (quote: string) => {\n const line = quote.split('\\n').find(part => part.trim())?.trim();\n let hit: { from: number; to: number } | null = null;\n if (line) doc.descendants((node, pos) => {\n if (hit) return false;\n if (!node.isTextblock) return true;\n const at = node.textBetween(0, node.content.size, undefined, '').indexOf(line);\n if (at >= 0) hit = { from: pos + 1 + at, to: pos + 1 + at + line.length };\n return false;\n });\n return hit;\n };\n return list.flatMap(c => {\n const own = [c.anchor, c.id].find(id => id && marked.has(id));\n let range: { from: number; to: number } | null | undefined = own ? marked.get(own) : undefined;\n if (!range) {\n const twin = [...marked].find(([id, m]) => !claimed.has(id) && m.text === c.quote);\n if (twin) { claimed.add(twin[0]); range = twin[1]; }\n }\n range ??= search(c.quote);\n return range ? [{ id: c.id, from: range.from, to: range.to }] : [];\n });\n}\n","{\n \"name\": \"@w100n/documents\",\n \"version\": \"0.11.0\",\n \"description\": \"Documents workspace for Web100Now projects: DOCX, Markdown, PDF, slides and sheets\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./memory\": {\n \"types\": \"./dist/memory.d.ts\",\n \"import\": \"./dist/memory.js\",\n \"require\": \"./dist/memory.cjs\"\n },\n \"./kinds\": {\n \"types\": \"./dist/kinds.d.ts\",\n \"import\": \"./dist/kinds.js\",\n \"require\": \"./dist/kinds.cjs\"\n },\n \"./collab\": {\n \"types\": \"./dist/collab.d.ts\",\n \"import\": \"./dist/collab.js\",\n \"require\": \"./dist/collab.cjs\"\n },\n \"./styles.css\": \"./dist/index.css\",\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\"dist\"],\n \"sideEffects\": [\"*.css\"],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"vite playground\",\n \"test\": \"vitest run\",\n \"type-check\": \"tsc --noEmit\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"dependencies\": {\n \"@embedpdf/engines\": \"^2.15.1\",\n \"@embedpdf/models\": \"^2.15.1\",\n \"@embedpdf/pdfium\": \"^2.15.1\",\n \"@hocuspocus/provider\": \"^4.7.1\",\n \"@tiptap/core\": \"^3.32.0\",\n \"@tiptap/extension-collaboration\": \"^3.32.0\",\n \"@tiptap/extension-collaboration-caret\": \"^3.32.0\",\n \"@tiptap/extension-highlight\": \"^3.32.0\",\n \"@tiptap/extension-image\": \"^3.32.0\",\n \"@tiptap/extension-list\": \"^3.32.0\",\n \"@tiptap/extension-table\": \"^3.32.0\",\n \"@tiptap/extension-text-style\": \"^3.32.0\",\n \"@tiptap/pm\": \"^3.32.0\",\n \"@tiptap/react\": \"^3.32.0\",\n \"@tiptap/starter-kit\": \"^3.32.0\",\n \"@tiptap/y-tiptap\": \"^3.0.10\",\n \"@univerjs/core\": \"1.0.4\",\n \"@univerjs/preset-sheets-core\": \"1.0.4\",\n \"@univerjs/preset-sheets-data-validation\": \"1.0.4\",\n \"@univerjs/preset-sheets-filter\": \"1.0.4\",\n \"@univerjs/preset-sheets-find-replace\": \"1.0.4\",\n \"@univerjs/preset-sheets-note\": \"1.0.4\",\n \"@univerjs/preset-sheets-sort\": \"1.0.4\",\n \"@univerjs/presets\": \"1.0.4\",\n \"@univerjs/sheets\": \"1.0.4\",\n \"docx-preview\": \"^0.4.1\",\n \"fflate\": \"^0.8.3\",\n \"lucide-react\": \"^0.562.0\",\n \"marked\": \"^18.1.1\",\n \"pdfjs-dist\": \"^6.4.299\",\n \"prosemirror-markdown\": \"^1.13.8\",\n \"rxjs\": \"^7.8.2\",\n \"y-protocols\": \"^1.0.7\",\n \"yjs\": \"^13.6.33\"\n },\n \"devDependencies\": {\n \"@testing-library/react\": \"^16.3.3\",\n \"@types/node\": \"^22.20.5\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@univerjs/data-validation\": \"1.0.4\",\n \"@univerjs/engine-formula\": \"1.0.4\",\n \"@univerjs/sheets-data-validation\": \"1.0.4\",\n \"@univerjs/sheets-filter\": \"1.0.4\",\n \"@univerjs/sheets-formula\": \"1.0.4\",\n \"@univerjs/sheets-note\": \"1.0.4\",\n \"@vitejs/plugin-react\": \"^5.0.5\",\n \"exceljs\": \"4.4.0\",\n \"jsdom\": \"^30.1.3\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.6.0\",\n \"vite\": \"^7.1.0\",\n \"vitest\": \"^4.1.10\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Web100Now-Organization/-w100n_documents.git\"\n },\n \"publishConfig\": {\n \"access\": \"restricted\"\n }\n}\n","import type { JSONContent } from '@tiptap/core';\nimport type { Mark, Node } from '@tiptap/pm/model';\nimport { marked, type Token, type Tokens } from 'marked';\nimport { MarkdownSerializer, type MarkdownSerializerState } from 'prosemirror-markdown';\n\ntype Style = { bullet: string; delim: string; em: string; strong: string; fence: string; br: string; loose: boolean };\ntype Hint = { bullet?: string; delim?: string; loose?: boolean; fence?: string };\ntype Marks = { type: string; attrs?: Record<string, unknown> }[];\n\nexport type Parsed = { doc: JSONContent; raws: string[]; head: string; tail: string; style: Style; hints: Record<string, Hint>; crlf: boolean; bom: boolean };\nexport type Base = Omit<Parsed, 'doc'> & { nodes: Node[] };\n\nconst tags: Record<string, string> = { u: 'underline', ins: 'underline', mark: 'highlight', s: 'strike', del: 'strike', b: 'bold', strong: 'bold', i: 'italic', em: 'italic' };\n\nconst decode = (text: string) => text.includes('&')\n ? new DOMParser().parseFromString(`<p>${text.replace(/</g, '<')}</p>`, 'text/html').body.textContent ?? text\n : text;\n\nconst unique = (marks: Marks) => [...new Map(marks.map(m => [m.type, m])).values()];\n\nfunction inline(tokens: Token[] = [], outer: Marks = []): JSONContent[] {\n const out: JSONContent[] = [];\n let open: Marks = [];\n const marks = () => unique([...outer, ...open]);\n const text = (value: string, extra: Marks = []) => {\n const set = unique([...marks(), ...extra]);\n const clean = out[out.length - 1]?.type === 'hardBreak' ? value.replace(/^\\n/, '') : value;\n if (clean) out.push({ type: 'text', text: clean, ...(set.length ? { marks: set } : {}) });\n };\n const wrap = (children: Token[] | undefined, mark: Marks[number]) => out.push(...inline(children, [...marks(), mark]));\n for (const token of tokens) {\n if (token.type === 'text') {\n if (token.tokens) out.push(...inline(token.tokens, marks()));\n else text(decode(token.text));\n } else if (token.type === 'escape') text(decode(token.text));\n else if (token.type === 'strong') wrap(token.tokens, { type: 'bold' });\n else if (token.type === 'em') wrap(token.tokens, { type: 'italic' });\n else if (token.type === 'del') wrap(token.tokens, { type: 'strike' });\n else if (token.type === 'codespan') text(token.text, [{ type: 'code' }]);\n else if (token.type === 'br') out.push({ type: 'hardBreak' });\n else if (token.type === 'link') wrap(token.tokens, { type: 'link', attrs: { href: token.href } });\n else if (token.type === 'image') out.push({ type: 'image', attrs: { src: token.href, alt: token.text || null, title: token.title || null }, ...(marks().length ? { marks: marks() } : {}) });\n else if (token.type === 'html') {\n const tag = /^<(\\/?)([a-z]+)\\s*\\/?>$/i.exec(token.raw.trim());\n const name = tag?.[2].toLowerCase() ?? '';\n if (name === 'br') out.push({ type: 'hardBreak' });\n else if (!tags[name]) text(token.raw);\n else open = tag![1] ? open.filter(m => m.type !== tags[name]) : [...open, { type: tags[name] }];\n } else if (token.type !== 'checkbox') text(token.raw);\n }\n return out;\n}\n\nconst fill = (content: JSONContent[]) => content.length ? content : [{ type: 'paragraph' }];\n\nfunction block(token: Token, hints: Record<string, Hint>): JSONContent[] {\n const ref = (hint: Hint) => {\n const id = `md${Object.keys(hints).length + 1}`;\n hints[id] = hint;\n return id;\n };\n switch (token.type) {\n case 'space': case 'def': case 'checkbox': return [];\n case 'heading': return [{ type: 'heading', attrs: { level: token.depth }, content: inline(token.tokens) }];\n case 'paragraph': case 'text': return [{ type: 'paragraph', content: token.tokens ? inline(token.tokens) : inline([{ type: 'text', raw: token.text, text: token.text }]) }];\n case 'blockquote': return [{ type: 'blockquote', content: fill(token.tokens!.flatMap(t => block(t, hints))) }];\n case 'code': {\n const fence = /^ {0,3}(`{3,}|~{3,})/.exec(token.raw)?.[1][0];\n return [{ type: 'codeBlock', attrs: { language: token.lang || null, ref: fence ? ref({ fence: fence.repeat(3) }) : null }, content: token.text ? [{ type: 'text', text: token.text }] : [] }];\n }\n case 'html': return [{ type: 'codeBlock', attrs: { language: 'html' }, content: [{ type: 'text', text: token.raw.replace(/\\n+$/, '') }] }];\n case 'hr': return [{ type: 'horizontalRule' }];\n case 'list': {\n const list = token as Tokens.List;\n const tasks = list.items.every(entry => entry.task);\n const marker = /^\\s*(?:([-*+])|\\d+([.)]))/.exec(list.raw);\n const id = ref({ bullet: marker?.[1], delim: marker?.[2], loose: list.loose });\n return [{\n type: tasks ? 'taskList' : list.ordered ? 'orderedList' : 'bulletList',\n attrs: list.ordered && !tasks ? { start: list.start === '' ? 1 : Number(list.start), ref: id } : { ref: id },\n content: list.items.map(entry => {\n const content = fill(entry.tokens.flatMap(t => block(t, hints)));\n if (!tasks && entry.task) content[0].content = [{ type: 'text', text: entry.checked ? '[x] ' : '[ ] ' }, ...(content[0].content ?? [])];\n return tasks ? { type: 'taskItem', attrs: { checked: !!entry.checked }, content } : { type: 'listItem', content };\n }),\n }];\n }\n case 'table': {\n const table = token as Tokens.Table;\n const cell = (type: string) => (c: Tokens.TableCell, i: number) => ({ type, attrs: { align: table.align[i] }, content: [{ type: 'paragraph', content: inline(c.tokens) }] });\n return [{ type: 'table', content: [\n { type: 'tableRow', content: table.header.map(cell('tableHeader')) },\n ...table.rows.map(row => ({ type: 'tableRow', content: row.map(cell('tableCell')) })),\n ] }];\n }\n default: return [{ type: 'paragraph', content: inline([{ type: 'text', raw: token.raw, text: token.raw }]) }];\n }\n}\n\nconst opens = /^\\s*<!--\\s*toc\\s*-->\\s*$/i;\nconst shuts = /^\\s*<!--\\s*\\/toc\\s*-->\\s*$/i;\nconst row = /^(\\s*)[-*+]\\s+\\[((?:\\\\.|[^\\]\\\\])*)\\]\\(#[^)\\s]*\\)\\s*$/;\n\nfunction contents(tokens: Token[], i: number): { end: number; entries: [number, string][] } | null {\n if (tokens[i].type !== 'html' || !opens.test(tokens[i].raw)) return null;\n let j = i + 1;\n const skip = () => { while (tokens[j]?.type === 'space') j++; };\n skip();\n const list = tokens[j]?.type === 'list' ? tokens[j++] : null;\n skip();\n if (tokens[j]?.type !== 'html' || !shuts.test(tokens[j].raw)) return null;\n const rows = list ? list.raw.split('\\n').filter(line => line.trim()).map(line => row.exec(line)) : [];\n if (rows.some(r => !r)) return null;\n const steps = [...new Set(rows.map(r => r![1].length))].sort((a, b) => a - b);\n return { end: j, entries: rows.map(r => [steps.indexOf(r![1].length) + 1, r![2].replace(/\\\\(.)/g, '$1')]) };\n}\n\nconst slug = (text: string, seen: Map<string, number>) => {\n const base = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s_-]/gu, '').trim().replace(/\\s/g, '-');\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n return n ? `${base}-${n}` : base;\n};\n\nfunction sniff(tokens: Token[]): Style {\n const style: Style = { bullet: '-', delim: '.', em: '*', strong: '**', fence: '```', br: '\\\\\\n', loose: false };\n const seen = new Set<string>();\n const note = <K extends keyof Style>(key: K, value: Style[K]) => {\n if (seen.has(key)) return;\n seen.add(key);\n style[key] = value;\n };\n let loose = 0;\n marked.walkTokens(tokens, token => {\n if (token.type === 'list') {\n const marker = /^\\s*(?:([-*+])|\\d+([.)]))/.exec(token.raw);\n if (token.ordered) note('delim', marker?.[2] ?? '.');\n else note('bullet', marker?.[1] ?? '-');\n loose += token.loose ? 1 : -1;\n } else if (token.type === 'em') note('em', token.raw[0]);\n else if (token.type === 'strong') note('strong', token.raw.slice(0, 2));\n else if (token.type === 'code' && /^ {0,3}(```|~~~)/.test(token.raw)) note('fence', token.raw.trimStart().slice(0, 3));\n else if (token.type === 'br' && token.raw !== '<br>') note('br', token.raw.startsWith('\\\\') ? '\\\\\\n' : ' \\n');\n });\n style.loose = loose > 0;\n return style;\n}\n\nexport function fromMarkdown(source: string): Parsed {\n const bom = source.startsWith('');\n const crlf = source.includes('\\r\\n');\n const tokens = marked.lexer(source.slice(bom ? 1 : 0).replace(/\\r\\n?/g, '\\n'));\n const hints: Record<string, Hint> = {};\n const content: JSONContent[] = [];\n const raws: string[] = [];\n let head = '';\n let gap = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const toc = contents(tokens, i);\n const made = toc ? [{ type: 'toc', attrs: { entries: JSON.stringify(toc.entries) } }] : block(token, hints);\n if (!made.length) { gap += token.raw; continue; }\n if (raws.length) raws[raws.length - 1] += gap;\n else head = gap;\n gap = '';\n content.push(...made);\n raws.push(toc ? tokens.slice(i, toc.end + 1).map(t => t.raw).join('') : token.raw);\n if (toc) i = toc.end;\n }\n if (!content.length) { content.push({ type: 'paragraph' }); raws.push(''); head = ''; }\n return { doc: { type: 'doc', content }, raws, head, tail: gap, style: sniff(tokens), hints, crlf, bom };\n}\n\nexport const track = ({ doc: _json, ...parsed }: Parsed, doc: Node): Base => {\n const nodes: Node[] = [];\n doc.forEach(node => nodes.push(node));\n return nodes.length === parsed.raws.length ? { ...parsed, nodes } : { ...parsed, nodes: [], raws: [], head: '', tail: '\\n' };\n};\n\ntype Auto = { inAutolink?: boolean };\n\nconst ticks = (node: Node, side: number) => {\n const len = Math.max(0, ...(node.isText ? node.text!.match(/`+/g) ?? [] : []).map(run => run.length));\n return len ? (side > 0 ? ` ${'`'.repeat(len + 1)}` : `${'`'.repeat(len + 1)} `) : '`';\n};\n\nconst plain = (mark: Mark, parent: Node, index: number) => {\n const node = parent.child(index);\n const href = mark.attrs.href as string;\n if (!node.isText || node.marks.length !== 1 || (index + 1 < parent.childCount && mark.isInSet(parent.child(index + 1).marks))) return null;\n const text = node.text!;\n if (text !== href && `mailto:${text}` !== href && !(text.startsWith('www.') && `http://${text}` === href)) return null;\n const before = index ? parent.child(index - 1) : null;\n const after = index + 1 < parent.childCount ? parent.child(index + 1) : null;\n const left = before ? (before.isText ? before.text!.slice(-1) : 'x') : '';\n const right = after ? (after.isText ? after.text! : 'x') : '';\n return /^[\\s(*_~]?$/.test(left) && /^([\\s)]|[.,:;!?]+(\\s|$)|$)/.test(right) ? 'bare' : text === href || href.startsWith('mailto:') ? 'angle' : null;\n};\n\nfunction serializer(style: Style, hints: Record<string, Hint>, before: Node | null, cell = false) {\n let form: string | null = null;\n const hint = (node: Node) => hints[node.attrs.ref as string] ?? {};\n const run = (parent: Node, index: number, types: string[]) => {\n let n = 0;\n for (let i = index - 1; i >= 0 && types.includes(parent.child(i).type.name); i--) n++;\n if (!index && before && types.includes(before.type.name)) n++;\n return n % 2;\n };\n const tight = (state: MarkdownSerializerState, node: Node, render: () => void) => {\n const deep = node.content.content.some(entry => entry.content.content.filter(child => !child.type.name.endsWith('List')).length > 1);\n const was = state.options.tightLists;\n state.options.tightLists = !deep && !(hint(node).loose ?? style.loose);\n render();\n state.options.tightLists = was;\n };\n const list = (state: MarkdownSerializerState, node: Node, parent: Node, index: number) => {\n const bullet = hint(node).bullet ?? (run(parent, index, ['bulletList', 'taskList']) ? (style.bullet === '-' ? '*' : '-') : style.bullet);\n tight(state, node, () => state.renderList(node, ' ', () => `${bullet} `));\n };\n const blank = { open: '', close: '', mixable: true };\n const wrap = (open: string, close = open) => ({ open, close, mixable: true, expelEnclosingWhitespace: true });\n return new MarkdownSerializer({\n paragraph(state, node) { state.renderInline(node); state.closeBlock(node); },\n heading(state, node) { state.write(`${'#'.repeat(node.attrs.level)} `); state.renderInline(node, false); state.closeBlock(node); },\n blockquote(state, node) { state.wrapBlock('> ', null, node, () => state.renderContent(node)); },\n codeBlock(state, node) {\n const mark = (hint(node).fence ?? style.fence)[0];\n const longest = Math.max(2, ...(node.textContent.match(new RegExp(`${mark}{3,}`, 'g')) ?? []).map(r => r.length));\n const fence = mark.repeat(longest + 1);\n state.write(`${fence}${node.attrs.language ?? ''}\\n`);\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write(fence);\n state.closeBlock(node);\n },\n horizontalRule(state, node) { state.write('---'); state.closeBlock(node); },\n pageBreak(state, node) { state.closeBlock(node); },\n toc(state, node) {\n const seen = new Map<string, number>();\n const lines = (JSON.parse(node.attrs.entries) as [number, string][]).map(([level, text]) => `${' '.repeat(level - 1)}${style.bullet} [${text.replace(/[[\\]\\\\]/g, '\\\\$&')}](#${slug(text, seen)})\\n`);\n state.write(`<!-- toc -->\\n${lines.join('')}<!-- /toc -->`);\n state.closeBlock(node);\n },\n bulletList: list,\n taskList: list,\n orderedList(state, node, parent, index) {\n const start = (node.attrs.start as number | null) ?? 1;\n const delim = hint(node).delim ?? (run(parent, index, ['orderedList']) ? (style.delim === '.' ? ')' : '.') : style.delim);\n const width = String(start + node.childCount - 1).length;\n tight(state, node, () => state.renderList(node, ' '.repeat(width + 2), i => `${start + i}${delim} `));\n },\n listItem(state, node) { state.renderContent(node); },\n taskItem(state, node) { state.write(node.attrs.checked ? '[x] ' : '[ ] '); state.renderContent(node); },\n table(state, node) {\n const rows: string[][] = [];\n const aligns: (string | null)[] = [];\n node.forEach((row, _, r) => {\n const cells: string[] = [];\n row.forEach(c => {\n const span = (c.attrs.colspan as number) || 1;\n const text: string[] = [];\n c.forEach(child => text.push(serializer(style, hints, null, true).serialize(c.type.schema.topNodeType.create(null, child)).replace(/\\n+/g, ' ')));\n if (!r) aligns.push(c.attrs.align as string | null, ...Array(span - 1).fill(null));\n cells.push(text.join('<br>').replace(/\\|/g, '\\\\|'), ...Array(span - 1).fill(''));\n });\n rows.push(cells);\n });\n const width = Math.max(...rows.map(r => r.length));\n const line = (cells: string[]) => `| ${[...cells, ...Array(width - cells.length).fill('')].join(' | ')} |`;\n const rule = Array.from({ length: width }, (_, i) => ({ left: ':---', center: ':---:', right: '---:' })[aligns[i] ?? ''] ?? '---');\n [line(rows[0]), `| ${rule.join(' | ')} |`, ...rows.slice(1).map(line)].forEach((text, i) => {\n if (i) state.ensureNewLine();\n state.write(text);\n });\n state.closeBlock(node);\n },\n image(state, node) {\n const src = String(node.attrs.src ?? '');\n const title = node.attrs.title ? ` \"${String(node.attrs.title).replace(/\"/g, '\\\\\"')}\"` : '';\n state.write(` ? `<${src}>` : src.replace(/[()]/g, '\\\\$&')}${title})`);\n },\n hardBreak(state, node, parent, index) {\n for (let i = index + 1; i < parent.childCount; i++) {\n if (parent.child(i).type === node.type) continue;\n state.write(cell ? '<br>' : style.br);\n return;\n }\n },\n text(state, node) { state.text(node.text!, !(state as Auto).inAutolink); },\n }, {\n italic: wrap(style.em), bold: wrap(style.strong), strike: wrap('~~'), underline: wrap('<u>', '</u>'), highlight: wrap('<mark>', '</mark>'),\n textStyle: blank, comment: blank,\n link: {\n open(state, mark, parent, index) {\n form = plain(mark, parent, index);\n (state as Auto).inAutolink = !!form;\n return form === 'bare' ? '' : form === 'angle' ? '<' : '[';\n },\n close(state, mark) {\n (state as Auto).inAutolink = undefined;\n const was = form;\n form = null;\n return was === 'bare' ? '' : was === 'angle' ? '>' : `](${String(mark.attrs.href).replace(/[()\"]/g, '\\\\$&')})`;\n },\n mixable: true,\n },\n code: { open: (_s, _m, parent, index) => ticks(parent.child(index), -1), close: (_s, _m, parent, index) => ticks(parent.child(index - 1), 1), escape: false },\n }, { hardBreakNodeName: 'hardBreak', strict: false, escapeExtraCharacters: /<(?=[A-Za-z/!?])/g });\n}\n\nconst one = (node: Node, before: Node | null, base: Base) =>\n serializer(base.style, base.hints, before).serialize(node.type.schema.topNodeType.create(null, node)).replace(/\\n+$/, '');\n\nexport function toMarkdown(doc: Node, base: Base): { text: string; base: Base } {\n const nodes: Node[] = [];\n const found: number[] = [];\n let j = 0;\n doc.forEach(node => {\n let k = -1;\n for (let m = j; m < Math.min(base.nodes.length, j + 64) && k < 0; m++) if (base.nodes[m] === node || base.nodes[m].eq(node)) k = m;\n if (k >= 0) j = k + 1;\n nodes.push(node);\n found.push(k);\n });\n let out = base.head;\n const starts: number[] = [];\n nodes.forEach((node, i) => {\n const k = found[i];\n if (i && !(k >= 0 && found[i - 1] === k - 1)) out = out.replace(/\\n*$/, '\\n\\n');\n starts.push(out.length);\n out += k >= 0 ? base.raws[k] : one(node, i ? nodes[i - 1] : null, base);\n });\n const last = found[found.length - 1];\n const end = last >= 0 && last === base.nodes.length - 1;\n if (!end) out = out.replace(/\\n*$/, '\\n');\n const cut = out.length;\n out += end ? base.tail : base.tail.trim() ? `\\n${base.tail.replace(/^\\n+/, '')}` : '';\n const at = starts.map(s => Math.min(s, cut));\n const raws = at.map((s, i) => out.slice(s, i + 1 < at.length ? at[i + 1] : cut));\n const text = base.crlf ? out.replace(/\\n/g, '\\r\\n') : out;\n return { text: base.bom ? `${text}` : text, base: { ...base, nodes, raws, tail: out.slice(cut) } };\n}\n","import type { IWorkbookData } from '@univerjs/core';\n\nexport type Lines = { rows: string[]; cols: string[] };\n\nexport type CsvFormat = { delimiter: string; encoding: string; bom: boolean; eol: string; decimal: '.' | ','; end: boolean };\n\nexport type SheetModel = {\n book: IWorkbookData;\n lines: Record<string, Lines>;\n origin: { sheets: Record<string, number>; lines: Record<string, Lines> };\n csv?: CsvFormat;\n active?: string;\n};\n\nexport class SheetRefusal extends Error {\n constructor(public code: 'chartSource' | 'pivotSheet' | 'tableColumns', public sheet = '') {\n super(code);\n }\n}\n\nlet counter = 0;\nexport const fresh = (prefix: string) => `${prefix}${Date.now().toString(36)}${(counter++).toString(36)}${Math.random().toString(36).slice(2, 6)}`;\n\nexport const numbered = (prefix: string, count: number) => Array.from({ length: count }, (_, i) => `${prefix}${i}`);\n\nexport function insert(list: string[], at: number, count: number, prefix: string) {\n list.splice(at, 0, ...Array.from({ length: count }, () => fresh(prefix)));\n}\n\nexport function move(list: string[], from: number, count: number, to: number) {\n const taken = list.splice(from, count);\n list.splice(to > from ? to - count : to, 0, ...taken);\n}\n\nexport function resize(list: string[], count: number, prefix: string) {\n if (list.length > count) list.length = count;\n else insert(list, list.length, count - list.length, prefix);\n}\n\nexport function rebase(model: SheetModel, lines: Record<string, Lines>, sheets: Record<string, number>) {\n model.origin = { sheets, lines: Object.fromEntries(Object.entries(lines).map(([id, l]) => [id, { rows: [...l.rows], cols: [...l.cols] }])) };\n}\n","import type { ICellData, IWorkbookData } from '@univerjs/core';\nimport { numbered, type CsvFormat, type SheetModel } from './model';\n\ntype Field = { text: string; raw: string };\n\nfunction decode(bytes: Uint8Array): { text: string; encoding: string; bom: boolean } {\n if (bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) return { text: new TextDecoder('utf-8').decode(bytes.subarray(3)), encoding: 'utf-8', bom: true };\n if (bytes[0] === 0xff && bytes[1] === 0xfe) return { text: new TextDecoder('utf-16le').decode(bytes.subarray(2)), encoding: 'utf-16le', bom: true };\n if (bytes[0] === 0xfe && bytes[1] === 0xff) return { text: new TextDecoder('utf-16be').decode(bytes.subarray(2)), encoding: 'utf-16be', bom: true };\n try {\n return { text: new TextDecoder('utf-8', { fatal: true }).decode(bytes), encoding: 'utf-8', bom: false };\n } catch {\n const scored = ['windows-1252', 'windows-1250', 'windows-1251'].map(encoding => {\n const text = new TextDecoder(encoding).decode(bytes);\n let score = 0;\n for (const [word] of text.matchAll(/\\p{L}+/gu)) {\n const cyrillic = (word.match(/\\p{Script=Cyrillic}/gu) ?? []).length;\n const accented = (word.match(/[^\\x00-\\x7f\\p{Script=Cyrillic}]/gu) ?? []).length;\n if (cyrillic === word.length || (!cyrillic && accented * 2 <= word.length)) score += 1;\n else score -= 1;\n }\n score -= 3 * (text.match(/\\p{L}[^\\p{L}\\x00-\\x7f]|[^\\p{L}\\x00-\\x7f]\\p{L}/gu) ?? []).length;\n return { text, encoding, score };\n });\n const best = scored.reduce((a, b) => b.score > a.score ? b : a);\n return { text: best.text, encoding: best.encoding, bom: false };\n }\n}\n\nfunction encode(text: string, encoding: string, bom: boolean): Uint8Array {\n if (encoding === 'utf-8') {\n const body = new TextEncoder().encode(text);\n if (!bom) return body;\n const out = new Uint8Array(body.length + 3);\n out.set([0xef, 0xbb, 0xbf]);\n out.set(body, 3);\n return out;\n }\n if (encoding === 'utf-16le' || encoding === 'utf-16be') {\n const out = new Uint8Array(text.length * 2 + (bom ? 2 : 0));\n const view = new DataView(out.buffer);\n let at = 0;\n if (bom) { view.setUint16(0, 0xfeff, encoding === 'utf-16le'); at = 2; }\n for (let i = 0; i < text.length; i++) view.setUint16(at + i * 2, text.charCodeAt(i), encoding === 'utf-16le');\n return out;\n }\n const table = new Map<string, number>();\n const decoder = new TextDecoder(encoding);\n for (let b = 255; b >= 0; b--) table.set(decoder.decode(new Uint8Array([b])), b);\n const out = new Uint8Array(text.length);\n for (let i = 0; i < text.length; i++) out[i] = table.get(text[i]) ?? 63;\n return out;\n}\n\nfunction split(text: string, delimiter: string, limit = Infinity): Field[][] {\n const rows: Field[][] = [];\n let row: Field[] = [];\n let i = 0;\n const n = text.length;\n while (i <= n && rows.length < limit) {\n const start = i;\n let value = '';\n if (text[i] === '\"') {\n i++;\n while (i < n) {\n if (text[i] === '\"') {\n if (text[i + 1] === '\"') { value += '\"'; i += 2; continue; }\n i++;\n break;\n }\n value += text[i++];\n }\n while (i < n && text[i] !== delimiter && text[i] !== '\\n' && text[i] !== '\\r') value += text[i++];\n } else {\n while (i < n && text[i] !== delimiter && text[i] !== '\\n' && text[i] !== '\\r') i++;\n value = text.slice(start, i);\n }\n row.push({ text: value, raw: text.slice(start, i) });\n if (i >= n) { rows.push(row); break; }\n if (text[i] === delimiter) { i++; continue; }\n i += text[i] === '\\r' && text[i + 1] === '\\n' ? 2 : 1;\n rows.push(row);\n row = [];\n if (i >= n) break;\n }\n return rows;\n}\n\nfunction sniff(text: string) {\n let best = ',', score = -1;\n for (const d of [',', ';', '\\t', '|']) {\n const rows = split(text, d, 30).filter(r => r.length > 1 || r[0]?.text);\n if (!rows.length) continue;\n const counts = new Map<number, number>();\n for (const r of rows) counts.set(r.length, (counts.get(r.length) ?? 0) + 1);\n const [width, often] = [...counts].sort((a, b) => b[1] - a[1] || b[0] - a[0])[0];\n const s = width > 1 ? often * 100 + width : 0;\n if (s > score) { score = s; best = d; }\n }\n return best;\n}\n\nconst numeric = (s: string, decimal: string) => decimal === ',' ? /^-?(0|[1-9]\\d*)(,\\d+)?$/.test(s) : /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][-+]?\\d+)?$/.test(s);\n\nexport function readCsv(bytes: ArrayBuffer): SheetModel {\n const { text, encoding, bom } = decode(new Uint8Array(bytes));\n const delimiter = sniff(text);\n const eol = /\\r\\n/.test(text) ? '\\r\\n' : /\\r(?!\\n)/.test(text) && !text.includes('\\n') ? '\\r' : '\\n';\n const rows = split(text, delimiter);\n const end = /[\\r\\n]$/.test(text);\n if (end && rows.length && rows[rows.length - 1].length === 1 && rows[rows.length - 1][0].raw === '') rows.pop();\n let commas = 0, dots = 0;\n if (delimiter !== ',') for (const r of rows) for (const f of r) {\n if (/^-?\\d+,\\d+$/.test(f.text)) commas++;\n else if (/^-?\\d+\\.\\d+$/.test(f.text)) dots++;\n }\n const decimal: '.' | ',' = commas > dots ? ',' : '.';\n const cellData: Record<number, Record<number, ICellData>> = {};\n let width = 0;\n rows.forEach((r, i) => {\n width = Math.max(width, r.length);\n r.forEach((f, c) => {\n if (f.text === '') return;\n (cellData[i] ??= {})[c] = numeric(f.text, decimal) ? { v: Number(decimal === ',' ? f.text.replace(',', '.') : f.text), t: 2 } : { v: f.text, t: 1 };\n });\n });\n const height = Math.max(rows.length + 100, 1000);\n const cols = Math.max(width + 4, 26);\n const format: CsvFormat = { delimiter, encoding, bom, eol, decimal, end };\n const book: IWorkbookData = {\n id: 'book', name: '', appVersion: '', locale: 'enUS' as IWorkbookData['locale'], styles: {}, sheetOrder: ['s1'],\n sheets: { s1: { id: 's1', name: 'Sheet1', rowCount: height, columnCount: cols, cellData, defaultColumnWidth: 88, defaultRowHeight: 24 } },\n };\n return { book, csv: format, lines: { s1: { rows: numbered('r', height), cols: numbered('c', cols) } }, origin: { sheets: { s1: 1 }, lines: { s1: { rows: numbered('r', height), cols: numbered('c', cols) } } } };\n}\n\nfunction value(x: ICellData | undefined): string | number | boolean | null {\n if (!x) return null;\n const stream = x.p?.body?.dataStream;\n if (stream !== undefined && (x.v === undefined || x.v === null || x.v === '')) return stream.replace(/\\r?\\n$/, '').replace(/\\r\\n?/g, '\\n');\n if (x.t === 3 && typeof x.v === 'number') return x.v === 1;\n return x.v ?? null;\n}\n\nexport function writeCsv(original: ArrayBuffer, model: SheetModel): ArrayBuffer {\n const { text } = decode(new Uint8Array(original));\n const format = model.csv ?? readCsv(original).csv!;\n const old = split(text, format.delimiter);\n if (format.end && old.length && old[old.length - 1].length === 1 && old[old.length - 1][0].raw === '') old.pop();\n const sid = model.book.sheetOrder[0];\n const sheet = model.book.sheets[sid];\n const cells = (sheet.cellData ?? {}) as Record<number, Record<number, ICellData>>;\n const lines = model.lines[sid], origin = model.origin.lines[sid] ?? lines;\n const rowFrom = new Map(origin.rows.map((id, i) => [id, i])), colFrom = new Map(origin.cols.map((id, i) => [id, i]));\n const quote = (s: string) => s.includes(format.delimiter) || s.includes('\"') || s.includes('\\n') || s.includes('\\r') ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n const show = (v: string | number | boolean | null) => {\n if (v === null || v === undefined) return '';\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';\n if (typeof v === 'number') return format.decimal === ',' ? String(v).replace('.', ',') : String(v);\n return String(v);\n };\n const last = Math.max(-1, ...Object.keys(cells).map(Number).filter(r => Object.values(cells[r] ?? {}).some(x => show(value(x)) !== '')));\n const out: string[] = [];\n for (let r = 0; r <= last; r++) {\n const r0 = rowFrom.get(lines.rows[r]) ?? -1;\n const was = r0 >= 0 ? old[r0] : undefined;\n const line = cells[r] ?? {};\n const filled = Object.keys(line).map(Number).filter(c => show(value(line[c])) !== '');\n let count = filled.length ? Math.max(...filled) + 1 : 0;\n if (was) for (let c0 = 0; c0 < was.length; c0++) count = Math.max(count, lines.cols.indexOf(origin.cols[c0]) + 1);\n const fields: string[] = [];\n for (let c = 0; c < count; c++) {\n const c0 = colFrom.get(lines.cols[c]) ?? -1;\n const before = was && c0 >= 0 ? was[c0] : undefined;\n const now = show(value(line[c]));\n if (before && now === before.text) fields.push(before.raw);\n else if (before && before.text !== '' && now !== '' && numeric(before.text, format.decimal) && Number(before.text.replace(',', '.')) === Number(now.replace(',', '.'))) fields.push(before.raw);\n else fields.push(quote(now));\n }\n out.push(fields.join(format.delimiter));\n }\n const body = out.join(format.eol) + (format.end && out.length ? format.eol : '');\n const bytes = encode(body, format.encoding, format.bom);\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n","import { entry, inflate, unzip, zip, type Entry } from '../docx/zip';\nimport { attrs } from '../docx/xml';\n\nexport type Rel = { id: string; type: string; target: string; external: boolean };\n\nconst decoder = new TextDecoder();\n\nexport class Pack {\n entries: Entry[];\n names = new Map<string, number>();\n changed = new Map<string, string | Uint8Array | null>();\n\n constructor(bytes: ArrayBuffer) {\n this.entries = unzip(new Uint8Array(bytes));\n this.entries.forEach((e, i) => this.names.set(e.name.replace(/^\\//, ''), i));\n }\n\n bytes(name: string): Uint8Array | null {\n const next = this.changed.get(name);\n if (next !== undefined) return typeof next === 'string' ? new TextEncoder().encode(next) : next;\n const i = this.names.get(name);\n return i === undefined ? null : inflate(this.entries[i]);\n }\n\n text(name: string): string | null {\n const next = this.changed.get(name);\n if (typeof next === 'string') return next;\n const bytes = this.bytes(name);\n return bytes && decoder.decode(bytes);\n }\n\n put(name: string, value: string | Uint8Array | null) {\n this.changed.set(name, value);\n }\n\n rels(part: string): Rel[] {\n const xml = this.text(relsOf(part));\n if (!xml) return [];\n const base = part.includes('/') ? part.slice(0, part.lastIndexOf('/') + 1) : '';\n return [...xml.matchAll(/<(?:\\w+:)?Relationship\\b[^>]*>/g)].map(m => {\n const a = Object.fromEntries(attrs(m[0]));\n const external = a.TargetMode === 'External';\n return { id: a.Id, type: a.Type.slice(a.Type.lastIndexOf('/') + 1), target: external ? a.Target : resolve(base, a.Target), external };\n });\n }\n\n build(): Uint8Array {\n const out: Entry[] = [];\n const seen = new Set<string>();\n for (const e of this.entries) {\n const name = e.name.replace(/^\\//, '');\n seen.add(name);\n const next = this.changed.get(name);\n if (next === null) continue;\n out.push(next === undefined ? e : entry(e.name, typeof next === 'string' ? new TextEncoder().encode(next) : next, e));\n }\n const like = this.entries[0];\n for (const [name, next] of this.changed) if (!seen.has(name) && next !== null) out.push(entry(name, typeof next === 'string' ? new TextEncoder().encode(next) : next, like));\n return zip(out);\n }\n}\n\nexport const relsOf = (part: string) => {\n const i = part.lastIndexOf('/');\n return `${part.slice(0, i + 1)}_rels/${part.slice(i + 1)}.rels`;\n};\n\nexport function resolve(base: string, target: string) {\n if (target.startsWith('/')) return target.slice(1);\n const parts = (base + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.' && p !== '') out.push(p);\n }\n return out.join('/');\n}\n\nexport function relative(from: string, to: string) {\n const a = from.split('/').slice(0, -1), b = to.split('/');\n let i = 0;\n while (i < a.length && a[i] === b[i]) i++;\n return [...a.slice(i).map(() => '..'), ...b.slice(i)].join('/');\n}\n","export type Box = { startRow: number; startColumn: number; endRow: number; endColumn: number };\n\nexport type Map1 = (i: number) => number;\n\nconst MAX_ROW = 1048575;\nconst MAX_COL = 16383;\n\nexport function letters(c: number) {\n let s = '';\n for (let n = c + 1; n > 0; n = Math.floor((n - 1) / 26)) s = String.fromCharCode(65 + ((n - 1) % 26)) + s;\n return s;\n}\n\nexport function column(s: string) {\n let n = 0;\n for (let i = 0; i < s.length; i++) n = n * 26 + (s.charCodeAt(i) & ~32) - 64;\n return n - 1;\n}\n\nexport const a1 = (r: number, c: number) => letters(c) + (r + 1);\n\nexport function cell(ref: string): [number, number] {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref);\n return m ? [Number(m[2]) - 1, column(m[1])] : [-1, -1];\n}\n\ntype Side = { col: number | null; row: number | null; colAbs: boolean; rowAbs: boolean };\n\nfunction side(s: string): Side | null {\n const m = /^(\\$?)([A-Za-z]{1,3})?(\\$?)(\\d+)?$/.exec(s);\n if (!m || (!m[2] && !m[4])) return null;\n return {\n col: m[2] ? column(m[2]) : null,\n row: m[4] ? Number(m[4]) - 1 : null,\n colAbs: !!m[2] && m[1] === '$',\n rowAbs: m[2] ? m[3] === '$' : m[1] === '$' || m[3] === '$',\n };\n}\n\nconst write = (s: Side) => (s.col === null ? '' : (s.colAbs ? '$' : '') + letters(s.col)) + (s.row === null ? '' : (s.rowAbs ? '$' : '') + (s.row + 1));\n\nexport function box(ref: string): Box | null {\n const [a, b = a] = ref.split(':');\n const p = side(a), q = side(b);\n if (!p || !q) return null;\n const rows = [p.row ?? (p === q ? 0 : 0), q.row ?? MAX_ROW], cols = [p.col ?? 0, q.col ?? MAX_COL];\n return { startRow: Math.min(rows[0], rows[1]), endRow: Math.max(rows[0], rows[1]), startColumn: Math.min(cols[0], cols[1]), endColumn: Math.max(cols[0], cols[1]) };\n}\n\nexport const span = (b: Box) => b.startRow === b.endRow && b.startColumn === b.endColumn ? a1(b.startRow, b.startColumn) : `${a1(b.startRow, b.startColumn)}:${a1(b.endRow, b.endColumn)}`;\n\nexport function boxes(sqref: string) {\n return sqref.trim().split(/\\s+/).filter(Boolean).map(box).filter((b): b is Box => b !== null);\n}\n\nexport function squeeze(b: Box, rows: Map1, cols: Map1): Box | null {\n const edge = (from: number, to: number, map: Map1, max: number): [number, number] | null => {\n if (from === 0 && to === max) return [0, max];\n let a = -1, z = -1;\n for (let i = from; i <= to && a < 0; i++) a = map(i);\n for (let i = to; i >= from && z < 0; i--) z = map(i);\n return a < 0 || z < 0 ? null : [a, z];\n };\n const r = edge(b.startRow, b.endRow, rows, MAX_ROW), c = edge(b.startColumn, b.endColumn, cols, MAX_COL);\n return r && c ? { startRow: r[0], endRow: r[1], startColumn: c[0], endColumn: c[1] } : null;\n}\n\nconst token = /(\"(?:[^\"]|\"\")*\")|('(?:[^']|'')+'|[A-Za-z_À-][\\w.À-]*)!|(\\[(?:[^[\\]]|\\[[^\\]]*\\])*\\])|(\\$?[A-Za-z]{1,3}\\$?\\d+(?::\\$?[A-Za-z]{1,3}\\$?\\d+)?|\\$?[A-Za-z]{1,3}:\\$?[A-Za-z]{1,3}|\\$?\\d+:\\$?\\d+)(?![\\w(.!À-])/g;\n\nexport type Piece = { sheet: string | null; text: string };\n\nexport function refs(formula: string, visit: (piece: Piece) => string): string {\n let sheet: string | null = null;\n let outside = false;\n let last = 0;\n let out = '';\n token.lastIndex = 0;\n for (let m = token.exec(formula); m; m = token.exec(formula)) {\n if (m[1]) { sheet = null; continue; }\n if (m[3]) { outside = formula[m.index - 1] !== '!' && /^\\[\\d+\\]$/.test(m[3]); continue; }\n if (m[2]) {\n sheet = outside ? '\\u0000' : m[2].startsWith(\"'\") ? m[2].slice(1, -1).replace(/''/g, \"'\") : m[2];\n outside = false;\n continue;\n }\n const before = formula[m.index - 1];\n if (before && /[\\w.À-]/.test(before)) { sheet = null; continue; }\n out += formula.slice(last, m.index) + visit({ sheet: before === '!' ? sheet : null, text: m[4] });\n last = m.index + m[0].length;\n sheet = null;\n }\n return out + formula.slice(last);\n}\n\nexport function shifted(formula: string, dr: number, dc: number) {\n return refs(formula, p => {\n const ends = p.text.split(':').map(side);\n if (ends.some(e => !e)) return p.text;\n for (const e of ends as Side[]) {\n if (e.col !== null && !e.colAbs) e.col += dc;\n if (e.row !== null && !e.rowAbs) e.row += dr;\n if ((e.col ?? 0) < 0 || (e.row ?? 0) < 0 || (e.col ?? 0) > MAX_COL || (e.row ?? 0) > MAX_ROW) return '#REF!';\n }\n return (ends as Side[]).map(write).join(':');\n });\n}\n\nexport function remapped(formula: string, mine: (sheet: string | null) => boolean, rows: Map1, cols: Map1) {\n return refs(formula, p => {\n if (!mine(p.sheet)) return p.text;\n const b = box(p.text);\n const ends = p.text.split(':').map(side) as Side[];\n if (!b || ends.some(e => !e)) return p.text;\n const s = squeeze(b, rows, cols);\n if (!s) return '#REF!';\n const [first, second = first] = ends;\n const put = (e: Side, r: number, c: number) => ({ ...e, row: e.row === null ? null : r, col: e.col === null ? null : c });\n return ends.length === 1 ? write(put(first, s.startRow, s.startColumn)) : `${write(put(first, s.startRow, s.startColumn))}:${write(put(second, s.endRow, s.endColumn))}`;\n });\n}\n\nexport const quoted = (name: string) => /^[A-Za-z_À-][\\w.À-]*$/.test(name) && !/^[A-Za-z]{1,3}\\d+$/.test(name) && !/^(R|C|RC|R\\d+C\\d+)$/i.test(name) ? name : `'${name.replace(/'/g, \"''\")}'`;\n\nexport function renamed(formula: string, from: string, to: string) {\n token.lastIndex = 0;\n return formula.replace(token, (all, str: string | undefined, sheet: string | undefined) => {\n if (str || !sheet) return all;\n const name = sheet.startsWith(\"'\") ? sheet.slice(1, -1).replace(/''/g, \"'\") : sheet;\n return name === from ? `${quoted(to)}!` : all;\n });\n}\n\nconst future = 'ACOT ACOTH AGGREGATE ARABIC ARRAYTOTEXT BASE BETA.DIST BETA.INV BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR BYCOL BYROW CEILING.MATH CEILING.PRECISE CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSECOLS CHOOSEROWS COMBINA CONCAT CONFIDENCE.NORM CONFIDENCE.T COT COTH COVARIANCE.P COVARIANCE.S CSC CSCH DAYS DECIMAL DROP ERF.PRECISE ERFC.PRECISE EXPAND EXPON.DIST F.DIST F.DIST.RT F.INV F.INV.RT F.TEST FILTERXML FLOOR.MATH FLOOR.PRECISE FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT GAMMA GAMMA.DIST GAMMA.INV GAMMALN.PRECISE GAUSS HSTACK HYPGEOM.DIST IFNA IFS IMCOSH IMCOT IMCSC IMCSCH IMSEC IMSECH IMSINH IMTAN ISFORMULA ISOMITTED ISOWEEKNUM LAMBDA LET LOGNORM.DIST LOGNORM.INV MAKEARRAY MAP MAXIFS MINIFS MODE.MULT MODE.SNGL MUNIT NEGBINOM.DIST NETWORKDAYS.INTL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV NUMBERVALUE PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTRANK.EXC PERCENTRANK.INC PERMUTATIONA PHI POISSON.DIST QUARTILE.EXC QUARTILE.INC RANDARRAY RANK.AVG RANK.EQ REDUCE RRI SCAN SEC SECH SEQUENCE SHEET SHEETS SKEW.P STDEV.P STDEV.S SWITCH T.DIST T.DIST.2T T.DIST.RT T.INV T.INV.2T T.TEST TAKE TEXTAFTER TEXTBEFORE TEXTJOIN TEXTSPLIT TOCOL TOROW UNICHAR UNICODE UNIQUE VALUETOTEXT VAR.P VAR.S VSTACK WEBSERVICE WEIBULL.DIST WORKDAY.INTL WRAPCOLS WRAPROWS XLOOKUP XMATCH XOR Z.TEST';\nconst prefixes = new Map<string, string>([...future.split(' ').map(n => [n, '_xlfn.'] as const), ...'FILTER SORT SORTBY'.split(' ').map(n => [n, '_xlfn._xlws.'] as const)]);\n\nexport const plain = (formula: string) => formula.includes('_xl') ? formula.replace(/_xlfn\\.(?:_xlws\\.)?|_xlws\\./gi, '') : formula;\n\nexport function stored(formula: string) {\n let out = '';\n let last = 0;\n const re = /(\"(?:[^\"]|\"\")*\")|((?<![\\w.])[A-Za-z][\\w.]*)(?=\\()/g;\n for (let m = re.exec(formula); m; m = re.exec(formula)) {\n const prefix = m[2] && prefixes.get(m[2].toUpperCase());\n if (!prefix) continue;\n out += formula.slice(last, m.index) + prefix + m[2];\n last = m.index + m[2].length;\n }\n return out + formula.slice(last);\n}\n","import type { IBorderData, IStyleData } from '@univerjs/core';\nimport { attr, attrs, escape, parse, type El } from '../docx/xml';\n\nconst builtin: Record<number, string> = {\n 1: '0', 2: '0.00', 3: '#,##0', 4: '#,##0.00', 5: '\"$\"#,##0_);(\"$\"#,##0)', 6: '\"$\"#,##0_);[Red](\"$\"#,##0)', 7: '\"$\"#,##0.00_);(\"$\"#,##0.00)',\n 8: '\"$\"#,##0.00_);[Red](\"$\"#,##0.00)', 9: '0%', 10: '0.00%', 11: '0.00E+00', 12: '# ?/?', 13: '# ??/??', 14: 'yyyy-mm-dd', 15: 'd-mmm-yy', 16: 'd-mmm',\n 17: 'mmm-yy', 18: 'h:mm AM/PM', 19: 'h:mm:ss AM/PM', 20: 'h:mm', 21: 'h:mm:ss', 22: 'yyyy-mm-dd h:mm', 37: '#,##0 ;(#,##0)', 38: '#,##0 ;[Red](#,##0)',\n 39: '#,##0.00;(#,##0.00)', 40: '#,##0.00;[Red](#,##0.00)', 45: 'mm:ss', 46: '[h]:mm:ss', 47: 'mmss.0', 48: '##0.0E+0', 49: '@',\n};\n\nconst indexed = ['000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF', '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF',\n '00FFFF', '800000', '008000', '000080', '808000', '800080', '008080', 'C0C0C0', '808080', '9999FF', '993366', 'FFFFCC', 'CCFFFF', '660066', 'FF8080', '0066CC',\n 'CCCCFF', '000080', 'FF00FF', 'FFFF00', '00FFFF', '800080', '800000', '008080', '0000FF', '00CCFF', 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF', 'FF99CC', 'CC99FF',\n 'FFCC99', '3366FF', '33CCCC', '99CC00', 'FFCC00', 'FF9900', 'FF6600', '666699', '969696', '003366', '339966', '003300', '333300', '993300', '993366', '333399',\n '333333', '000000', 'FFFFFF'];\n\nconst lines = ['', 'thin', 'hair', 'dotted', 'dashed', 'dashDot', 'dashDotDot', 'double', 'medium', 'mediumDashed', 'mediumDashDot', 'mediumDashDotDot', 'slantDashDot', 'thick'];\nconst across = ['', 'left', 'center', 'right', 'justify', 'justify', 'distributed'];\nconst down = ['', 'top', 'center', 'bottom'];\nconst sides = [['l', 'left'], ['r', 'right'], ['t', 'top'], ['b', 'bottom']] as const;\nconst fontOrder = ['b', 'i', 'strike', 'condense', 'extend', 'outline', 'shadow', 'u', 'vertAlign', 'sz', 'color', 'name', 'family', 'charset', 'scheme'];\n\nfunction tinted(hex: string, tint: number) {\n if (!tint) return hex;\n const [r, g, b] = [0, 2, 4].map(i => parseInt(hex.slice(i, i + 2), 16) / 255);\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h /= 6;\n }\n l = tint < 0 ? l * (1 + tint) : l * (1 - tint) + tint;\n const hue = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t : t < 1 / 2 ? q : t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 : p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;\n const out = s === 0 ? [l, l, l] : [hue(p, q, h + 1 / 3), hue(p, q, h), hue(p, q, h - 1 / 3)];\n return out.map(v => Math.round(v * 255).toString(16).padStart(2, '0')).join('').toUpperCase();\n}\n\nfunction palette(theme: string | null): string[] {\n if (!theme) return ['FFFFFF', '000000', 'E7E6E6', '44546A', '4472C4', 'ED7D31', 'A5A5A5', 'FFC000', '5B9BD5', '70AD47', '0563C1', '954F72'];\n const scheme = /<(?:\\w+:)?clrScheme\\b[^>]*>([\\s\\S]*?)<\\/(?:\\w+:)?clrScheme>/.exec(theme)?.[1] ?? '';\n const pick = (name: string) => {\n const m = new RegExp(`<(?:\\\\w+:)?${name}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${name}>`).exec(scheme)?.[1] ?? '';\n return /(?:val|lastClr)=\"([0-9A-Fa-f]{6})\"/.exec(m.includes('lastClr') ? m.replace(/val=\"\\w+\"/, '') : m)?.[1]?.toUpperCase() ?? '000000';\n };\n const [dk1, lt1, dk2, lt2] = ['dk1', 'lt1', 'dk2', 'lt2'].map(pick);\n return [lt1, dk1, lt2, dk2, ...['accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'].map(pick)];\n}\n\nconst hex = (c: unknown) => {\n const s = String(c ?? '').trim();\n let m = /^#?([0-9a-f]{6})$/i.exec(s);\n if (m) return '#' + m[1].toUpperCase();\n m = /^#?([0-9a-f]{3})$/i.exec(s);\n if (m) return '#' + m[1].split('').map(x => x + x).join('').toUpperCase();\n m = /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i.exec(s);\n return m ? '#' + [m[1], m[2], m[3]].map(v => Number(v).toString(16).padStart(2, '0')).join('').toUpperCase() : null;\n};\n\nexport function norm(l: IStyleData): IStyleData {\n const out: IStyleData = {};\n if (l.bl) out.bl = 1;\n if (l.it) out.it = 1;\n if (l.ul?.s) out.ul = { s: 1 };\n if (l.st?.s) out.st = { s: 1 };\n if (l.va === 2 || l.va === 3) out.va = l.va;\n if (l.fs) out.fs = Number(l.fs);\n if (l.ff) out.ff = l.ff;\n const cl = hex(l.cl?.rgb);\n if (cl) out.cl = { rgb: cl };\n const bg = hex(l.bg?.rgb);\n if (bg) out.bg = { rgb: bg };\n if (l.bd) {\n const bd: IBorderData = {};\n for (const k of ['t', 'b', 'l', 'r', 'tl_br', 'bl_tr'] as const) {\n const b = l.bd[k];\n if (b && b.s) bd[k] = { s: b.s, cl: { rgb: hex(b.cl?.rgb) ?? '#000000' } };\n }\n if (Object.keys(bd).length) out.bd = bd;\n }\n if (l.ht) out.ht = l.ht;\n if (l.vt) out.vt = l.vt;\n if (l.tb === 3) out.tb = 3;\n if (l.tr && (l.tr.a || l.tr.v)) out.tr = { a: l.tr.a ?? 0, v: l.tr.v ? 1 : 0 };\n if (l.n?.pattern && l.n.pattern !== 'General') out.n = { pattern: l.n.pattern };\n return out;\n}\n\nexport class Styles {\n xml: string | null;\n root: El | null;\n formats = new Map<number, string>();\n fonts: string[] = [];\n fills: string[] = [];\n borders: string[] = [];\n xfs: string[] = [];\n looks: IStyleData[] = [];\n index = new Map<string, number>();\n added = false;\n private theme: string[];\n private custom: string[] | null = null;\n\n constructor(xml: string | null, theme: string | null) {\n this.xml = xml;\n this.theme = palette(theme);\n this.root = xml ? parse(xml).kids.find(k => !k.name.startsWith('?')) ?? null : null;\n const s = xml ?? '';\n const list = (name: string, tag: string) => {\n const el = this.root && this.child(this.root, name);\n return el ? el.kids.filter(k => this.bare(k.name) === tag).map(k => s.slice(k.start, k.end)) : [];\n };\n for (const f of list('numFmts', 'numFmt')) {\n const a = Object.fromEntries(attrs(f));\n this.formats.set(Number(a.numFmtId), a.formatCode);\n }\n const colours = this.root && this.child(this.root, 'colors');\n const custom = colours && this.child(colours, 'indexedColors');\n if (custom) this.custom = custom.kids.map(k => (attr(s, k, 'rgb') ?? 'FF000000').slice(-6).toUpperCase());\n this.fonts = list('fonts', 'font');\n this.fills = list('fills', 'fill');\n this.borders = list('borders', 'border');\n this.xfs = list('cellXfs', 'xf');\n if (!this.fonts.length) this.fonts = ['<font><sz val=\"11\"/><name val=\"Calibri\"/></font>'];\n if (!this.fills.length) this.fills = ['<fill><patternFill patternType=\"none\"/></fill>', '<fill><patternFill patternType=\"gray125\"/></fill>'];\n if (!this.borders.length) this.borders = ['<border><left/><right/><top/><bottom/><diagonal/></border>'];\n if (!this.xfs.length) this.xfs = ['<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>'];\n const raw = this.xfs.map(x => this.look(x));\n this.looks = raw.map(l => norm({ ...raw[0], ...l }));\n this.looks.forEach((l, i) => { const k = JSON.stringify(l); if (!this.index.has(k)) this.index.set(k, i); });\n }\n\n private prefix = () => this.root?.name.includes(':') ? this.root.name.slice(0, this.root.name.indexOf(':') + 1) : '';\n private bare = (name: string) => name.slice(name.indexOf(':') + 1);\n private child = (el: El, name: string) => el.kids.find(k => this.bare(k.name) === name);\n\n color(tag: string | undefined): string | undefined {\n if (!tag) return undefined;\n const a = Object.fromEntries(attrs(tag));\n if (a.auto === '1' || a.auto === 'true') return undefined;\n let hex: string | undefined;\n if (a.rgb) hex = a.rgb.slice(-6).toUpperCase();\n else if (a.theme !== undefined) hex = this.theme[Number(a.theme)];\n else if (a.indexed !== undefined) hex = (this.custom ?? indexed)[Number(a.indexed)] ?? (Number(a.indexed) === 64 ? '000000' : undefined);\n return hex && '#' + tinted(hex, Number(a.tint ?? 0));\n }\n\n private parts(xml: string) {\n const root = parse(xml).kids[0];\n const out = new Map<string, string>();\n if (root) for (const k of root.kids) out.set(this.bare(k.name), xml.slice(k.start, k.end));\n return { root, out, open: root ? xml.slice(root.start, root.open) : '' };\n }\n\n pattern(id: number) {\n return this.formats.get(id) ?? builtin[id] ?? (id === 0 ? 'General' : 'General');\n }\n\n look(xf: string): IStyleData {\n const a = Object.fromEntries(attrs(xf.slice(0, xf.indexOf('>') + 1)));\n const s: IStyleData = {};\n const font = this.parts(this.fonts[Number(a.fontId ?? 0)] ?? this.fonts[0]).out;\n const val = (tag: string | undefined) => tag && Object.fromEntries(attrs(tag)).val;\n const on = (tag: string | undefined) => tag !== undefined && !/^(0|false)$/.test(val(tag) ?? '1');\n if (on(font.get('b'))) s.bl = 1;\n if (on(font.get('i'))) s.it = 1;\n if (on(font.get('strike'))) s.st = { s: 1 };\n if (font.has('u') && val(font.get('u')) !== 'none') s.ul = { s: 1 };\n const va = val(font.get('vertAlign'));\n if (va === 'superscript') s.va = 3;\n if (va === 'subscript') s.va = 2;\n if (font.has('sz')) s.fs = Number(val(font.get('sz')));\n if (font.has('name')) s.ff = val(font.get('name'));\n const cl = this.color(font.get('color'));\n if (cl) s.cl = { rgb: cl };\n const fill = this.fills[Number(a.fillId ?? 0)];\n const pattern = fill && /patternType=\"(\\w+)\"/.exec(fill)?.[1];\n if (fill && pattern && pattern !== 'none' && pattern !== 'gray125') {\n const fg = this.color(/<(?:\\w+:)?fgColor\\b[^>]*>/.exec(fill)?.[0]);\n if (fg) s.bg = { rgb: fg };\n }\n const border = this.parts(this.borders[Number(a.borderId ?? 0)] ?? '<border/>');\n const bd: IBorderData = {};\n for (const [key, name] of sides) {\n const el = border.out.get(name) ?? border.out.get(name === 'left' ? 'start' : name === 'right' ? 'end' : name);\n const style = el && /style=\"(\\w+)\"/.exec(el)?.[1];\n if (!style || style === 'none') continue;\n bd[key] = { s: Math.max(1, lines.indexOf(style)), cl: { rgb: this.color(/<(?:\\w+:)?color\\b[^>]*>/.exec(el!)?.[0]) ?? '#000000' } };\n }\n const diagonal = border.out.get('diagonal');\n const dstyle = diagonal && /style=\"(\\w+)\"/.exec(diagonal)?.[1];\n if (dstyle && dstyle !== 'none') {\n const line = { s: Math.max(1, lines.indexOf(dstyle)), cl: { rgb: this.color(/<(?:\\w+:)?color\\b[^>]*>/.exec(diagonal!)?.[0]) ?? '#000000' } };\n const flags = Object.fromEntries(attrs(border.open));\n if (flags.diagonalDown === '1' || flags.diagonalDown === 'true') bd.tl_br = line;\n if (flags.diagonalUp === '1' || flags.diagonalUp === 'true') bd.bl_tr = line;\n }\n if (Object.keys(bd).length) s.bd = bd;\n const align = /<(?:\\w+:)?alignment\\b[^>]*>/.exec(xf)?.[0];\n if (align) {\n const al = Object.fromEntries(attrs(align));\n const ht = across.indexOf(al.horizontal === 'centerContinuous' ? 'center' : al.horizontal);\n if (ht > 0) s.ht = ht;\n const vt = down.indexOf(al.vertical);\n if (vt > 0) s.vt = vt;\n if (al.wrapText === '1' || al.wrapText === 'true') s.tb = 3;\n const turn = Number(al.textRotation ?? 0);\n if (turn === 255) s.tr = { a: 0, v: 1 };\n else if (turn) s.tr = { a: turn <= 90 ? turn : 90 - turn, v: 0 };\n }\n const id = Number(a.numFmtId ?? 0);\n if (id) s.n = { pattern: this.pattern(id) };\n return s;\n }\n\n find(look: IStyleData) {\n return this.index.get(JSON.stringify(norm(look)));\n }\n\n derive(base: number, look: IStyleData): number {\n look = norm(look);\n const key = JSON.stringify(look);\n const known = this.index.get(key);\n if (known !== undefined) return known;\n const was = this.looks[base] ?? {};\n const xf = this.xfs[base] ?? this.xfs[0];\n const head = xf.slice(0, xf.indexOf('>') + 1);\n const a = new Map(attrs(head));\n const same = (keys: (keyof IStyleData)[]) => keys.every(k => JSON.stringify(was[k]) === JSON.stringify(look[k]));\n const p = this.prefix();\n if (!same(['bl', 'it', 'st', 'ul', 'va', 'fs', 'ff', 'cl'])) {\n a.set('fontId', String(this.add('fonts', this.font(Number(a.get('fontId') ?? 0), was, look))));\n a.set('applyFont', '1');\n }\n if (!same(['bg'])) {\n a.set('fillId', String(look.bg?.rgb ? this.add('fills', `<${p}fill><${p}patternFill patternType=\"solid\"><${p}fgColor rgb=\"${argb(look.bg.rgb)}\"/><${p}bgColor indexed=\"64\"/></${p}patternFill></${p}fill>`) : 0));\n a.set('applyFill', '1');\n }\n if (!same(['bd'])) {\n a.set('borderId', String(this.add('borders', this.border(Number(a.get('borderId') ?? 0), was, look))));\n a.set('applyBorder', '1');\n }\n if (!same(['n'])) {\n a.set('numFmtId', String(this.format(look.n?.pattern ?? 'General')));\n a.set('applyNumberFormat', '1');\n }\n let inner = xf.endsWith('/>') && xf.indexOf('>') === xf.length - 1 ? '' : xf.slice(head.length, xf.lastIndexOf('<'));\n if (!same(['ht', 'vt', 'tb', 'tr'])) {\n const old = /<(?:\\w+:)?alignment\\b[^>]*>/.exec(inner)?.[0];\n const al = new Map(old ? attrs(old) : []);\n const put = (name: string, value: string | null) => value === null ? al.delete(name) : al.set(name, value);\n put('horizontal', look.ht ? across[look.ht] : null);\n put('vertical', look.vt ? down[look.vt] : null);\n put('wrapText', look.tb === 3 ? '1' : null);\n put('textRotation', look.tr?.v ? '255' : look.tr?.a ? String(look.tr.a > 0 ? look.tr.a : 90 - look.tr.a) : null);\n const tag = al.size ? `<${p}alignment ${[...al].map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : '';\n inner = old ? inner.replace(old, tag) : tag + inner;\n a.set('applyAlignment', '1');\n }\n const name = head.slice(1, head.search(/[\\s/>]/));\n const open = `<${name} ${[...a].map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}`;\n const next = inner ? `${open}>${inner}</${name}>` : `${open}/>`;\n this.xfs.push(next);\n this.added = true;\n const index = this.xfs.length - 1;\n this.looks.push(norm({ ...this.looks[0], ...this.look(next) }));\n this.index.set(key, index);\n return index;\n }\n\n private add(list: 'fonts' | 'fills' | 'borders', xml: string) {\n const at = this[list].indexOf(xml);\n if (at >= 0) return at;\n this[list].push(xml);\n this.added = true;\n return this[list].length - 1;\n }\n\n private font(id: number, was: IStyleData, look: IStyleData) {\n const p = this.prefix();\n const { out } = this.parts(this.fonts[id] ?? this.fonts[0]);\n const set = (name: string, xml: string | null) => xml === null ? out.delete(name) : out.set(name, xml);\n const diff = (k: keyof IStyleData) => JSON.stringify(was[k]) !== JSON.stringify(look[k]);\n if (diff('bl')) set('b', look.bl ? `<${p}b/>` : null);\n if (diff('it')) set('i', look.it ? `<${p}i/>` : null);\n if (diff('st')) set('strike', look.st?.s ? `<${p}strike/>` : null);\n if (diff('ul')) set('u', look.ul?.s ? `<${p}u/>` : null);\n if (diff('va')) set('vertAlign', look.va === 3 ? `<${p}vertAlign val=\"superscript\"/>` : look.va === 2 ? `<${p}vertAlign val=\"subscript\"/>` : null);\n if (diff('fs')) set('sz', `<${p}sz val=\"${look.fs ?? 11}\"/>`);\n if (diff('cl')) set('color', look.cl?.rgb ? `<${p}color rgb=\"${argb(look.cl.rgb)}\"/>` : null);\n if (diff('ff')) {\n set('name', `<${p}name val=\"${escape(look.ff ?? 'Calibri')}\"/>`);\n set('scheme', null);\n }\n return `<${p}font>${fontOrder.filter(k => out.has(k)).map(k => out.get(k)).join('')}</${p}font>`;\n }\n\n private border(id: number, was: IStyleData, look: IStyleData) {\n const p = this.prefix();\n const { out, open } = this.parts(this.borders[id] ?? this.borders[0]);\n const flags = new Map(open ? attrs(open) : []);\n const line = (name: string, b: IBorderData[keyof IBorderData] | undefined) => b ? `<${p}${name} style=\"${lines[b.s] || 'thin'}\"><${p}color rgb=\"${argb(b.cl?.rgb ?? '#000000')}\"/></${p}${name}>` : `<${p}${name}/>`;\n const before = was.bd ?? {}, after = look.bd ?? {};\n const parts: string[] = [];\n for (const [key, name] of sides) {\n const old = out.get(name) ?? out.get(name === 'left' ? 'start' : name === 'right' ? 'end' : name);\n parts.push(JSON.stringify(before[key]) === JSON.stringify(after[key]) && old ? old : line(name, after[key]));\n }\n const diagonal = after.tl_br ?? after.bl_tr;\n if (JSON.stringify(before.tl_br) === JSON.stringify(after.tl_br) && JSON.stringify(before.bl_tr) === JSON.stringify(after.bl_tr)) parts.push(out.get('diagonal') ?? `<${p}diagonal/>`);\n else {\n parts.push(line('diagonal', diagonal));\n if (after.tl_br) flags.set('diagonalDown', '1'); else flags.delete('diagonalDown');\n if (after.bl_tr) flags.set('diagonalUp', '1'); else flags.delete('diagonalUp');\n }\n for (const extra of ['vertical', 'horizontal']) if (out.has(extra)) parts.push(out.get(extra)!);\n const attributes = [...flags].map(([k, v]) => ` ${k}=\"${escape(v)}\"`).join('');\n return `<${p}border${attributes}>${parts.join('')}</${p}border>`;\n }\n\n format(pattern: string) {\n if (pattern === 'General') return 0;\n for (const [id, code] of this.formats) if (code === pattern) return id;\n for (const [id, code] of Object.entries(builtin)) if (code === pattern) return Number(id);\n const id = Math.max(163, ...this.formats.keys()) + 1;\n this.formats.set(id, pattern);\n this.added = true;\n return id;\n }\n\n build(): string | null {\n if (!this.added) return null;\n const p = this.prefix();\n const s = this.xml ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"></styleSheet>`;\n const root = parse(s).kids.find(k => !k.name.startsWith('?'))!;\n const order = ['numFmts', 'fonts', 'fills', 'borders', 'cellStyleXfs', 'cellXfs', 'cellStyles', 'dxfs', 'tableStyles', 'colors', 'extLst'];\n const lists: Record<string, string[]> = {\n numFmts: [...this.formats].map(([id, code]) => `<${p}numFmt numFmtId=\"${id}\" formatCode=\"${escape(code)}\"/>`),\n fonts: this.fonts, fills: this.fills, borders: this.borders, cellXfs: this.xfs,\n };\n const edits: [number, number, string][] = [];\n for (const name of Object.keys(lists)) {\n if (!lists[name].length) continue;\n const el = root.kids.find(k => this.bare(k.name) === name);\n if (el) {\n const open = s.slice(el.start, el.open).replace(/\\s*\\/?>$/, '').replace(/\\scount=\"\\d*\"/, '');\n edits.push([el.start, el.end, `${open} count=\"${lists[name].length}\">${lists[name].join('')}</${el.name}>`]);\n } else {\n const after = root.kids.find(k => order.indexOf(this.bare(k.name)) > order.indexOf(name));\n const at = after ? after.start : root.close;\n edits.push([at, at, `<${p}${name} count=\"${lists[name].length}\">${lists[name].join('')}</${p}${name}>`]);\n }\n }\n edits.sort((x, y) => y[0] - x[0]);\n let out = s;\n for (const [from, to, xml] of edits) out = out.slice(0, from) + xml + out.slice(to);\n return out;\n }\n}\n\nconst argb = (hex: string) => 'FF' + hex.replace('#', '').toUpperCase().padStart(6, '0').slice(-6);\n","import type { ICellData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport { unescape } from '../docx/xml';\nimport { numbered, type SheetModel } from './model';\nimport { Pack, type Rel } from './pack';\nimport { boxes, cell, plain, shifted } from './refs';\nimport { Styles } from './styles';\n\nexport type CellRec = { start: number; end: number; shared: boolean };\nexport type RowRec = { open: string };\nexport type ColSpec = { min: number; max: number; xml: string; width?: number; hidden: boolean; style?: number };\nexport type NoteRec = { ref: string; xml: string; text: string };\nexport type SheetRec = {\n sid: string; name: string; sheetId: number; part: string; xml: string; p: string; rels: Rel[];\n bounds: [number, number, number, number];\n rows: Map<number, RowRec>; cells: Map<number, CellRec>; cols: ColSpec[];\n merges: string[]; validations: string[]; notes: NoteRec[]; comments: string | null; vml: string | null; authors: string[];\n width: number;\n};\nexport type Book = {\n pack: Pack; part: string; xml: string; rels: Rel[]; styles: Styles; stylesPart: string | null;\n sheets: SheetRec[]; entries: { name: string; sheetId: number; rid: string; xml: string; sheet: boolean }[];\n};\n\nexport const key = (r: number, c: number) => r * 16384 + c;\nexport const px = { row: (pt: number) => Math.round(pt * 4 / 3 * 100) / 100, col: (w: number) => Math.round(w * 7 + 5) };\nexport const pt = { row: (h: number) => Math.round(h * 3 / 4 * 100) / 100, col: (w: number) => Math.max(0, Math.round((w - 5) / 7 * 100) / 100) };\n\nconst decodeX = (s: string) => s.includes('_x') ? s.replace(/_x([0-9A-Fa-f]{4})_/g, (_, h: string) => String.fromCharCode(parseInt(h, 16))) : s;\n\nexport function runs(xml: string) {\n const clean = xml.includes('rPh') ? xml.replace(/<(\\w+:)?rPh\\b[\\s\\S]*?<\\/(\\w+:)?rPh>/g, '') : xml;\n let out = '';\n for (const m of clean.matchAll(/<(?:\\w+:)?t(?:\\s[^>]*)?(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?t>)/g)) out += m[1] ?? '';\n return decodeX(unescape(out));\n}\n\nconst patterns = new Map<string, RegExp>();\nexport const attr = (tag: string, name: string) => {\n let re = patterns.get(name);\n if (!re) patterns.set(name, re = new RegExp(`\\\\s${name}=\"([^\"]*)\"`));\n const m = re.exec(tag);\n return m ? unescape(m[1]) : null;\n};\n\nconst element = (xml: string, name: string) => {\n const m = new RegExp(`<((?:\\\\w+:)?${name})\\\\b[^>]*?(\\\\/?)>`).exec(xml);\n if (!m) return null;\n if (m[2]) return { start: m.index, open: m.index + m[0].length, close: m.index + m[0].length, end: m.index + m[0].length, tag: m[0] };\n const close = xml.indexOf(`</${m[1]}>`, m.index);\n return { start: m.index, open: m.index + m[0].length, close, end: close + m[1].length + 3, tag: m[0] };\n};\n\nexport function worksheets(bytes: ArrayBuffer) {\n const pack = new Pack(bytes);\n const part = pack.rels('').find(r => r.type === 'officeDocument')?.target ?? 'xl/workbook.xml';\n const rels = pack.rels(part);\n return [...(pack.text(part) ?? '').matchAll(/<(?:\\w+:)?sheet\\b[^>]*\\/?>/g)]\n .filter(m => rels.find(r => r.id === /\\s[\\w]+:id=\"([^\"]*)\"/.exec(m[0])?.[1])?.type === 'worksheet')\n .map(m => Number(attr(m[0], 'sheetId')));\n}\n\nexport function load(bytes: ArrayBuffer): { model: SheetModel; book: Book } {\n const pack = new Pack(bytes);\n const office = pack.rels('').find(r => r.type === 'officeDocument');\n const part = office?.target ?? 'xl/workbook.xml';\n const xml = pack.text(part);\n if (!xml) throw new Error('No workbook');\n const rels = pack.rels(part);\n const target = (type: string) => rels.find(r => r.type === type)?.target;\n const themePart = target('theme');\n const stylesPart = target('styles');\n const styles = new Styles(stylesPart ? pack.text(stylesPart) : null, themePart ? pack.text(themePart) : null);\n const stringsPart = target('sharedStrings');\n const strings: string[] = [];\n const sst = stringsPart ? pack.text(stringsPart) : null;\n if (sst) for (const m of sst.matchAll(/<(?:\\w+:)?si\\b[^>]*?(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?si>)/g)) strings.push(m[1] ? runs(m[1]) : '');\n\n const date1904 = /<(?:\\w+:)?workbookPr\\b[^>]*\\bdate1904=\"(1|true)\"/.test(xml);\n const entries: Book['entries'] = [];\n for (const m of xml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*\\/?>/g)) {\n const tag = m[0];\n const rid = /\\s[\\w]+:id=\"([^\"]*)\"/.exec(tag)?.[1] ?? '';\n const rel = rels.find(r => r.id === rid);\n entries.push({ name: attr(tag, 'name') ?? '', sheetId: Number(attr(tag, 'sheetId')), rid, xml: tag, sheet: rel?.type === 'worksheet' });\n }\n\n const book: IWorkbookData = {\n id: 'book', name: '', appVersion: '', locale: 'enUS' as IWorkbookData['locale'], styles: {}, sheetOrder: [], sheets: {}, resources: [],\n defaultStyle: styles.looks[0],\n };\n if (date1904) book.dateSystem = 'date1904' as IWorkbookData['dateSystem'];\n const notes: Record<string, Record<number, Record<number, unknown>>> = {};\n const validations: Record<string, unknown[]> = {};\n const filters: Record<string, unknown> = {};\n const model: SheetModel = { book, lines: {}, origin: { sheets: {}, lines: {} } };\n const sheets: SheetRec[] = [];\n const active = Number(/<(?:\\w+:)?workbookView\\b[^>]*\\bactiveTab=\"(\\d+)\"/.exec(xml)?.[1] ?? 0);\n const useStyle = (xf: number) => {\n const id = `x${xf}`;\n if (!(id in book.styles)) book.styles[id] = styles.looks[xf] ?? {};\n return id;\n };\n\n for (const entry of entries) {\n if (!entry.sheet) continue;\n const rel = rels.find(r => r.id === entry.rid)!;\n const sxml = pack.text(rel.target);\n if (sxml === null) continue;\n const sid = `s${entry.sheetId}`;\n const p = /<(\\w+:)?worksheet\\b/.exec(sxml)?.[1] ?? '';\n const srels = pack.rels(rel.target);\n const sheet: Partial<IWorksheetData> = { id: sid, name: entry.name, cellData: {}, rowData: {}, columnData: {}, mergeData: [] };\n const state = attr(entry.xml, 'state');\n if (state === 'hidden') sheet.hidden = 1;\n if (state === 'veryHidden') sheet.hidden = 2 as IWorksheetData['hidden'];\n\n const open = element(sxml, `${p}sheetData`);\n const bounds: SheetRec['bounds'] = open ? [open.start, open.open, open.close, open.end] : [sxml.length, sxml.length, sxml.length, sxml.length];\n const head = open ? sxml.slice(0, open.start) : sxml;\n const tail = open ? sxml.slice(open.end) : '';\n\n const format = /<(?:\\w+:)?sheetFormatPr\\b[^>]*>/.exec(head)?.[0];\n const defaultRow = format && attr(format, 'defaultRowHeight') ? px.row(Number(attr(format, 'defaultRowHeight'))) : 20;\n const defaultCol = format && attr(format, 'defaultColWidth') ? px.col(Number(attr(format, 'defaultColWidth'))) : format && attr(format, 'baseColWidth') ? px.col(Number(attr(format, 'baseColWidth')) + 0.71) : 64;\n sheet.defaultRowHeight = defaultRow;\n sheet.defaultColumnWidth = defaultCol;\n\n const view = /<(?:\\w+:)?sheetView\\b[^>]*>/.exec(head)?.[0];\n if (view && attr(view, 'showGridLines') === '0') sheet.showGridlines = 0;\n if (view && attr(view, 'rightToLeft') === '1') sheet.rightToLeft = 1;\n if (view && attr(view, 'zoomScale')) sheet.zoomRatio = Number(attr(view, 'zoomScale')) / 100;\n const pane = /<(?:\\w+:)?pane\\b[^>]*>/.exec(head)?.[0];\n if (pane && /^frozen/.test(attr(pane, 'state') ?? '')) {\n const x = Number(attr(pane, 'xSplit') ?? 0), y = Number(attr(pane, 'ySplit') ?? 0);\n sheet.freeze = { xSplit: x, ySplit: y, startRow: y, startColumn: x };\n }\n const tab = /<(?:\\w+:)?tabColor\\b[^>]*>/.exec(head)?.[0];\n if (tab) {\n const c = styles.color(tab);\n if (c) sheet.tabColor = c;\n }\n\n const cols: ColSpec[] = [];\n for (const m of head.matchAll(/<(?:\\w+:)?col\\b[^>]*\\/?>/g)) {\n const t = m[0];\n const spec: ColSpec = { min: Number(attr(t, 'min')), max: Number(attr(t, 'max')), xml: t, hidden: /^(1|true)$/.test(attr(t, 'hidden') ?? '') };\n if (attr(t, 'width') !== null && /^(1|true)$/.test(attr(t, 'customWidth') ?? '1')) spec.width = px.col(Number(attr(t, 'width')));\n if (attr(t, 'style') !== null && attr(t, 'style') !== '0') spec.style = Number(attr(t, 'style'));\n cols.push(spec);\n }\n\n const cellData: Record<number, Record<number, ICellData>> = {};\n const rowData: Record<number, { h?: number; hd?: number; s?: string; ia?: number }> = {};\n const rows = new Map<number, RowRec>();\n const cells = new Map<number, CellRec>();\n const masters = new Map<string, { f: string; r: number; c: number }>();\n const children: [number, number, string][] = [];\n const rowStyles = new Map<number, number>();\n let maxRow = -1, maxCol = -1;\n if (open && open.close > open.open) {\n const end = open.close;\n let at = open.open, row = -1, col = -1;\n while (at < end) {\n const lt = sxml.indexOf('<', at);\n if (lt < 0 || lt >= end) break;\n const gt = sxml.indexOf('>', lt);\n if (sxml.charCodeAt(lt + 1) === 47) { at = gt + 1; continue; }\n let j = lt + 1;\n while (j < gt) {\n const ch = sxml.charCodeAt(j);\n if (ch === 32 || ch === 47 || ch === 9 || ch === 10 || ch === 13) break;\n j++;\n }\n const name = sxml.slice(lt + 1 + p.length, j);\n const tag = sxml.slice(lt, gt + 1);\n if (name === 'row') {\n const r = attr(tag, 'r');\n row = r ? Number(r) - 1 : row + 1;\n col = -1;\n rows.set(row, { open: tag });\n const rd: { h?: number; hd?: number; s?: string; ia?: number } = {};\n const ht = attr(tag, 'ht');\n if (ht !== null) rd.h = px.row(Number(ht));\n if (ht !== null && /^(1|true)$/.test(attr(tag, 'customHeight') ?? '')) rd.ia = 0;\n if (/^(1|true)$/.test(attr(tag, 'hidden') ?? '')) rd.hd = 1;\n const rs = attr(tag, 's');\n if (rs !== null && /^(1|true)$/.test(attr(tag, 'customFormat') ?? '')) {\n rowStyles.set(row, Number(rs));\n rd.s = useStyle(Number(rs));\n }\n if (Object.keys(rd).length) rowData[row] = rd;\n if (rd.h !== undefined || rd.hd || rd.s) maxRow = Math.max(maxRow, row);\n at = gt + 1;\n continue;\n }\n if (name !== 'c') { at = gt + 1; continue; }\n const ref = attr(tag, 'r');\n if (ref) [, col] = cell(ref);\n else col += 1;\n const self = sxml.charCodeAt(gt - 1) === 47;\n const close = self ? gt + 1 : sxml.indexOf(`</${p}c>`, gt);\n const stop = self ? gt + 1 : close + p.length + 4;\n const inner = self ? '' : sxml.slice(gt + 1, close);\n const t = attr(tag, 't');\n const s = Number(attr(tag, 's') ?? 0);\n const out: ICellData = {};\n let shared = false;\n if (inner) {\n const f = /<(?:\\w+:)?f\\b([^>]*?)(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?f>)/.exec(inner);\n if (f) {\n const kind = attr(f[0], 't');\n const formula = f[2] === undefined ? '' : unescape(f[2]);\n if (kind === 'shared') {\n shared = true;\n const si = attr(f[0], 'si') ?? '';\n if (formula) masters.set(si, { f: formula, r: row, c: col });\n else children.push([row, col, si]);\n if (formula) out.f = '=' + plain(formula);\n } else if (kind !== 'dataTable' && formula) out.f = '=' + plain(formula);\n }\n const v = /<(?:\\w+:)?v>([\\s\\S]*?)<\\/(?:\\w+:)?v>/.exec(inner)?.[1];\n if (t === 'inlineStr') {\n const is = /<(?:\\w+:)?is>([\\s\\S]*?)<\\/(?:\\w+:)?is>/.exec(inner)?.[1];\n if (is !== undefined) { out.v = runs(is); out.t = 1; }\n } else if (v !== undefined) {\n if (t === 's') { out.v = strings[Number(v)] ?? ''; out.t = 1; }\n else if (t === 'str' || t === 'e') { out.v = decodeX(unescape(v)); out.t = 1; }\n else if (t === 'b') { out.v = v === '1' || v === 'true'; out.t = 3; }\n else if (t === 'd') { const d = Date.parse(v); out.v = Number.isNaN(d) ? v : (d - Date.UTC(1899, 11, 30)) / 86400000; out.t = Number.isNaN(d) ? 1 : 2; }\n else { out.v = Number(v); out.t = 2; }\n }\n }\n const styled = s || rowStyles.has(row) || cols.some(spec => spec.style !== undefined && col + 1 >= spec.min && col + 1 <= spec.max);\n if (styled) out.s = useStyle(s);\n if (out.v !== undefined || out.f || out.s || shared) {\n (cellData[row] ??= {})[col] = out;\n if (out.v !== undefined || out.f || s) { maxRow = Math.max(maxRow, row); maxCol = Math.max(maxCol, col); }\n }\n cells.set(key(row, col), { start: lt, end: stop, shared });\n at = stop;\n }\n }\n for (const [r, c, si] of children) {\n const m = masters.get(si);\n const target = (cellData[r] ??= {})[c] ??= {};\n if (m) target.f = '=' + plain(shifted(m.f, r - m.r, c - m.c));\n }\n\n for (const spec of cols) if (spec.max <= 1024) maxCol = Math.max(maxCol, spec.max - 1);\n\n const merges: string[] = [];\n for (const m of tail.matchAll(/<(?:\\w+:)?mergeCell\\b[^>]*\\/?>/g)) {\n const ref = attr(m[0], 'ref');\n if (!ref) continue;\n merges.push(ref);\n for (const b of boxes(ref)) {\n sheet.mergeData!.push({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn });\n maxRow = Math.max(maxRow, b.endRow);\n maxCol = Math.max(maxCol, b.endColumn);\n }\n }\n\n const rules: unknown[] = [];\n const dvs: string[] = [];\n const dvBlock = element(tail, `${p}dataValidations`);\n if (dvBlock) for (const m of tail.slice(dvBlock.open, dvBlock.close).matchAll(/<(?:\\w+:)?dataValidation\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/(?:\\w+:)?dataValidation>)/g)) {\n const rule = validation(m[0], `dv${dvs.length}`);\n dvs.push(m[0]);\n if (rule) rules.push(rule);\n }\n if (rules.length) validations[sid] = rules;\n\n const af = /<(?:\\w+:)?autoFilter\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/(?:\\w+:)?autoFilter>)/.exec(tail)?.[0] ?? null;\n if (af) {\n const [b] = boxes(attr(af, 'ref') ?? '');\n if (b) filters[sid] = { ref: { ...b, rangeType: 0 }, filterColumns: criteria(af), cachedFilteredOut: [] };\n }\n\n const sheetNotes: NoteRec[] = [];\n const commentsRel = srels.find(r => r.type === 'comments');\n const vmlRel = srels.find(r => r.type === 'vmlDrawing');\n const authors: string[] = [];\n if (commentsRel) {\n const cx = pack.text(commentsRel.target) ?? '';\n for (const m of cx.matchAll(/<(?:\\w+:)?author>([\\s\\S]*?)<\\/(?:\\w+:)?author>|<(?:\\w+:)?author\\/>/g)) authors.push(unescape(m[1] ?? ''));\n for (const m of cx.matchAll(/<(?:\\w+:)?comment\\b[^>]*>[\\s\\S]*?<\\/(?:\\w+:)?comment>/g)) {\n const ref = attr(m[0], 'ref') ?? '';\n const textXml = /<(?:\\w+:)?text>([\\s\\S]*?)<\\/(?:\\w+:)?text>/.exec(m[0])?.[1] ?? '';\n const note = { ref, xml: m[0], text: runs(textXml) };\n sheetNotes.push(note);\n const [r, c] = cell(ref);\n if (r < 0) continue;\n ((notes[sid] ??= {})[r] ??= {})[c] = { note: note.text, width: 160, height: 72, show: false, id: `n${sheetNotes.length - 1}`, row: r, col: c };\n maxRow = Math.max(maxRow, r);\n maxCol = Math.max(maxCol, c);\n }\n }\n\n const height = Math.max(maxRow + 1 + 100, 1000);\n const width = Math.max(maxCol + 1 + 4, 26);\n for (const spec of cols) {\n for (let c = spec.min - 1; c < Math.min(spec.max, width); c++) {\n const cd: { w?: number; hd?: number; s?: string } = {};\n if (spec.width !== undefined) cd.w = spec.width;\n if (spec.hidden) cd.hd = 1;\n if (spec.style !== undefined) cd.s = useStyle(spec.style);\n if (Object.keys(cd).length) (sheet.columnData as Record<number, unknown>)[c] = cd;\n }\n }\n sheet.rowCount = height;\n sheet.columnCount = width;\n sheet.cellData = cellData;\n sheet.rowData = rowData;\n book.sheets[sid] = sheet;\n book.sheetOrder.push(sid);\n model.lines[sid] = { rows: numbered('r', height), cols: numbered('c', width) };\n model.origin.lines[sid] = { rows: numbered('r', height), cols: numbered('c', width) };\n model.origin.sheets[sid] = entry.sheetId;\n sheets.push({\n sid, name: entry.name, sheetId: entry.sheetId, part: rel.target, xml: sxml, p, rels: srels, bounds, rows, cells, cols, merges,\n validations: dvs, notes: sheetNotes, comments: commentsRel?.target ?? null, vml: vmlRel?.target ?? null, authors, width,\n });\n }\n\n const names: Record<string, unknown> = {};\n for (const m of xml.matchAll(/<(?:\\w+:)?definedName\\b([^>]*)>([\\s\\S]*?)<\\/(?:\\w+:)?definedName>/g)) {\n const name = attr(m[0], 'name') ?? '';\n if (name.startsWith('_xlnm.') || /^(1|true)$/.test(attr(m[0], 'hidden') ?? '')) continue;\n const local = attr(m[0], 'localSheetId');\n const scoped = local === null ? null : entries[Number(local)];\n const id = `d${Object.keys(names).length}`;\n names[id] = { id, name, formulaOrRefString: plain(unescape(m[2])), localSheetId: scoped ? `s${scoped.sheetId}` : 'AllDefaultWorkbook' };\n }\n\n const resources = book.resources!;\n if (Object.keys(names).length) resources.push({ name: 'SHEET_DEFINED_NAME_PLUGIN', data: JSON.stringify(names) });\n if (Object.keys(notes).length) resources.push({ name: 'SHEET_NOTE_PLUGIN', data: JSON.stringify(notes) });\n if (Object.keys(validations).length) resources.push({ name: 'SHEET_DATA_VALIDATION_PLUGIN', data: JSON.stringify(validations) });\n if (Object.keys(filters).length) resources.push({ name: 'SHEET_FILTER_PLUGIN', data: JSON.stringify(filters) });\n const shown = entries[active];\n if (shown?.sheet && book.sheetOrder.includes(`s${shown.sheetId}`)) model.active = `s${shown.sheetId}`;\n return { model, book: { pack, part, xml, rels, styles, stylesPart: stylesPart ?? null, sheets, entries } };\n}\n\nconst kinds: Record<string, string> = { whole: 'whole', decimal: 'decimal', list: 'list', textLength: 'textLength', custom: 'custom' };\nexport const stops: Record<string, number> = { information: 0, stop: 1, warning: 2 };\n\nexport function validation(xml: string, uid: string) {\n const type = attr(xml, 'type') ?? 'none';\n const kind = kinds[type];\n const ranges = boxes(attr(xml, 'sqref') ?? '');\n if (!kind || !ranges.length) return null;\n const f = (n: number) => {\n const m = new RegExp(`<(?:\\\\w+:)?formula${n}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?formula${n}>`).exec(xml)?.[1];\n return m === undefined ? undefined : plain(unescape(m));\n };\n let formula1 = f(1), formula2 = f(2);\n if (kind === 'list' && formula1 !== undefined) formula1 = /^\".*\"$/.test(formula1) ? formula1.slice(1, -1).replace(/\"\"/g, '\"') : '=' + formula1;\n else if (kind === 'custom' && formula1 !== undefined) formula1 = '=' + formula1;\n else if (formula1 !== undefined && !/^-?[\\d.]+$/.test(formula1)) formula1 = '=' + formula1;\n if (formula2 !== undefined && !/^-?[\\d.]+$/.test(formula2)) formula2 = '=' + formula2;\n const flag = (name: string) => /^(1|true)$/.test(attr(xml, name) ?? '');\n const rule: Record<string, unknown> = { uid, type: kind, ranges: ranges.map(b => ({ ...b, rangeType: 0 })) };\n const operator = attr(xml, 'operator');\n if (kind !== 'list' && kind !== 'custom') rule.operator = operator ?? 'between';\n if (formula1 !== undefined) rule.formula1 = formula1;\n if (formula2 !== undefined) rule.formula2 = formula2;\n if (flag('allowBlank')) rule.allowBlank = true;\n if (kind === 'list') rule.showDropDown = !flag('showDropDown');\n if (flag('showErrorMessage')) rule.showErrorMessage = true;\n if (flag('showInputMessage')) rule.showInputMessage = true;\n const style = attr(xml, 'errorStyle');\n if (style && style in stops) rule.errorStyle = stops[style];\n for (const name of ['error', 'errorTitle', 'prompt', 'promptTitle']) if (attr(xml, name) !== null) rule[name] = attr(xml, name);\n return rule;\n}\n\nexport function criteria(xml: string) {\n const out: unknown[] = [];\n for (const m of xml.matchAll(/<(?:\\w+:)?filterColumn\\b[^>]*>([\\s\\S]*?)<\\/(?:\\w+:)?filterColumn>/g)) {\n const colId = Number(attr(m[0], 'colId') ?? 0);\n const inner = m[1];\n if (/<(?:\\w+:)?filters\\b/.test(inner)) {\n const values = [...inner.matchAll(/<(?:\\w+:)?filter\\b[^>]*\\/?>/g)].map(f => attr(f[0], 'val') ?? '');\n const blank = /<(?:\\w+:)?filters\\b[^>]*\\bblank=\"(1|true)\"/.test(inner);\n out.push({ colId, filters: { ...(values.length && { filters: values }), ...(blank && { blank: true }) } });\n } else if (/<(?:\\w+:)?customFilters\\b/.test(inner)) {\n const and = /<(?:\\w+:)?customFilters\\b[^>]*\\band=\"(1|true)\"/.test(inner);\n const list = [...inner.matchAll(/<(?:\\w+:)?customFilter\\b[^>]*\\/?>/g)].map(f => ({ ...(attr(f[0], 'operator') && { operator: attr(f[0], 'operator') }), val: attr(f[0], 'val') ?? '' }));\n out.push({ colId, customFilters: { ...(and && { and: 1 }), customFilters: list } });\n }\n }\n return out;\n}\n","import type { ICellData, IStyleData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport { escape, unescape } from '../docx/xml';\nimport { SheetRefusal, type SheetModel } from './model';\nimport { relsOf, relative } from './pack';\nimport { a1, box, boxes, cell, quoted, remapped, renamed, shifted, span, squeeze, stored, type Box, type Map1 } from './refs';\nimport { norm } from './styles';\nimport { attr, key, load, pt, stops, type Book, type SheetRec } from './xlsx';\n\ntype Cells = Record<number, Record<number, ICellData>>;\ntype Sheet = Partial<IWorksheetData>;\ntype Rule = Record<string, unknown> & { uid: string; ranges: Box[] };\ntype Note = { note: string; row: number; col: number };\n\nconst order = ['sheetPr', 'dimension', 'sheetViews', 'sheetFormatPr', 'cols', 'sheetData', 'sheetCalcPr', 'sheetProtection', 'protectedRanges', 'scenarios', 'autoFilter',\n 'sortState', 'dataConsolidate', 'customSheetViews', 'mergeCells', 'phoneticPr', 'conditionalFormatting', 'dataValidations', 'hyperlinks', 'printOptions', 'pageMargins',\n 'pageSetup', 'headerFooter', 'rowBreaks', 'colBreaks', 'customProperties', 'cellWatches', 'ignoredErrors', 'smartTags', 'drawing', 'legacyDrawing', 'legacyDrawingHF',\n 'drawingHF', 'picture', 'oleObjects', 'controls', 'webPublishItems', 'tableParts', 'extLst'];\nconst errors = /^#(NULL!|DIV\\/0!|VALUE!|REF!|NAME\\?|NUM!|N\\/A|GETTING_DATA|SPILL!|CALC!)$/;\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst blankSheet = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><dimension ref=\"A1\"/><sheetViews><sheetView workbookViewId=\"0\"/></sheetViews><sheetFormatPr defaultRowHeight=\"15\"/><sheetData/><pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/></worksheet>';\n\nconst same = (a: unknown, b: unknown) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);\nconst blank = (v: unknown) => v === undefined || v === null || v === '';\nconst patterns = new Map<string, RegExp>();\nconst setAttr = (tag: string, name: string, value: string | null) => {\n let re = patterns.get(name);\n if (!re) patterns.set(name, re = new RegExp(`\\\\s${name}=\"[^\"]*\"`));\n if (value === null) return tag.replace(re, '');\n if (re.test(tag)) return tag.replace(re, () => ` ${name}=\"${escape(value)}\"`);\n return tag.replace(/\\s*(\\/?>)$/, end => ` ${name}=\"${escape(value)}\"${end.trim()}`);\n};\nconst literal = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nfunction resource(book: IWorkbookData, name: string): Record<string, unknown> | null {\n const found = book.resources?.find(r => r.name === name);\n return found ? JSON.parse(found.data || '{}') : null;\n}\n\nexport function textOf(c: ICellData | undefined): string | number | boolean | null {\n if (!c) return null;\n const stream = c.p?.body?.dataStream;\n if (stream !== undefined && blank(c.v)) return stream.replace(/\\r?\\n$/, '').replace(/\\r\\n?/g, '\\n');\n if (c.t === 3 && typeof c.v === 'number') return c.v === 1;\n return c.v ?? null;\n}\n\nfunction formulas(cells: Cells) {\n const masters = new Map<string, { f: string; r: number; c: number }>();\n for (const [r, line] of Object.entries(cells)) for (const [c, x] of Object.entries(line ?? {})) if (x?.si && x.f) masters.set(x.si, { f: x.f, r: +r, c: +c });\n return (r: number, c: number, x: ICellData) => {\n if (x.f) return x.f;\n if (!x.si) return null;\n const m = masters.get(x.si);\n return m ? '=' + shifted(m.f.replace(/^=/, ''), r - m.r, c - m.c) : null;\n };\n}\n\nfunction equalValue(a: unknown, b: unknown) {\n if (blank(a) && blank(b)) return true;\n if (typeof a === 'number' && typeof b === 'number') return a === b || Math.abs(a - b) <= 1e-9 * Math.max(1, Math.abs(a), Math.abs(b));\n return a === b;\n}\n\nfunction lookup(book: IWorkbookData, s: unknown): IStyleData {\n if (!s) return {};\n return (typeof s === 'string' ? book.styles[s] : s as IStyleData) ?? {};\n}\n\nexport class Axis {\n at: Map<string, number>;\n back: Map<string, number>;\n moved: boolean;\n shift: number;\n constructor(public old: string[], public now: string[]) {\n this.at = new Map(now.map((id, i) => [id, i]));\n this.back = new Map(old.map((id, i) => [id, i]));\n this.moved = old.some((id, i) => this.at.get(id) !== i);\n const last = old.length ? this.at.get(old[old.length - 1]) : undefined;\n this.shift = last === undefined ? now.length - old.length : last - (old.length - 1);\n }\n map: Map1 = i => i < this.old.length ? this.at.get(this.old[i]) ?? -1 : i + this.shift;\n from = (i: number) => i < this.now.length ? this.back.get(this.now[i]) ?? -1 : i - this.shift;\n near = (i: number) => {\n for (let j = i; j < this.old.length; j++) if (this.map(j) >= 0) return this.map(j);\n for (let j = i; j >= 0; j--) if (this.map(j) >= 0) return this.map(j);\n return 0;\n };\n}\n\nfunction find(xml: string, name: string) {\n const m = new RegExp(`<((?:\\\\w+:)?${name})\\\\b[^>]*?(\\\\/?)>`).exec(xml);\n if (!m) return null;\n if (m[2]) return { start: m.index, end: m.index + m[0].length, tag: m[0] };\n const close = xml.indexOf(`</${m[1]}>`, m.index);\n return { start: m.index, end: close + m[1].length + 3, tag: m[0] };\n}\n\nfunction place(xml: string, name: string, value: string | null) {\n const found = find(xml, name);\n if (found) return xml.slice(0, found.start) + (value ?? '') + xml.slice(found.end);\n if (value === null) return xml;\n const rank = order.indexOf(name);\n let at = -1;\n for (const later of order.slice(rank + 1)) {\n const f = find(xml, later);\n if (f && (at < 0 || f.start < at)) at = f.start;\n }\n if (at < 0) at = xml.search(/<\\/(?:\\w+:)?worksheet>\\s*$/);\n if (at < 0) at = xml.length;\n return xml.slice(0, at) + value + xml.slice(at);\n}\n\nfunction remapZone(xml: string, mine: (s: string | null) => boolean, rows: Axis, cols: Axis) {\n const ranges = (sqref: string) => boxes(sqref).map(b => squeeze(b, rows.map, cols.map)).filter((b): b is Box => b !== null).map(span).join(' ');\n const formula = (f: string) => remapped(f, mine, rows.map, cols.map);\n let out = xml.replace(/<((?:\\w+:)?)(conditionalFormatting|dataValidation|hyperlink|ignoredError|protectedRange)\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1\\2>)/g, (all: string) => {\n const sq = attr(all, 'sqref');\n const ref = attr(all, 'ref');\n let next = all;\n if (sq !== null) {\n const s = ranges(sq);\n if (!s) return '';\n next = setAttr(next.slice(0, next.indexOf('>') + 1), 'sqref', s) + next.slice(next.indexOf('>') + 1);\n }\n if (ref !== null) {\n const s = ranges(ref);\n if (!s) return '';\n next = setAttr(next.slice(0, next.indexOf('>') + 1), 'ref', s) + next.slice(next.indexOf('>') + 1);\n }\n return next.replace(/<((?:\\w+:)?)(formula|formula1|formula2)>([\\s\\S]*?)<\\/\\1\\2>/g, (_, p: string, n: string, f: string) => `<${p}${n}>${escape(formula(unescape(f)))}</${p}${n}>`);\n });\n out = out.replace(/<((?:\\w+:)?)(autoFilter|sortState|sortCondition)\\b[^>]*?>/g, (tag: string) => {\n const ref = attr(tag, 'ref');\n return ref === null ? tag : setAttr(tag, 'ref', ranges(ref) || ref);\n });\n out = out.replace(/<(xm:sqref)>([\\s\\S]*?)<\\/xm:sqref>/g, (_, n: string, s: string) => `<${n}>${ranges(s)}</${n}>`);\n out = out.replace(/<(xm:f)>([\\s\\S]*?)<\\/xm:f>/g, (_, n: string, f: string) => `<${n}>${escape(formula(unescape(f)))}</${n}>`);\n out = out.replace(/<((?:\\w+:)?)(selection|pane)\\b[^>]*?>/g, (tag: string) => {\n let next = tag;\n for (const name of ['activeCell', 'topLeftCell']) {\n const v = attr(next, name);\n if (v === null) continue;\n const [r, c] = cell(v);\n if (r >= 0) next = setAttr(next, name, a1(rows.near(r), cols.near(c)));\n }\n const sq = attr(next, 'sqref');\n return sq === null ? next : setAttr(next, 'sqref', ranges(sq) || 'A1');\n });\n return out;\n}\n\nfunction anchors(xml: string, rows: Axis, cols: Axis) {\n return xml.replace(/<((?:\\w+:)?)(from|to)>([\\s\\S]*?)<\\/\\1\\2>/g, (all: string, p: string, n: string, inner: string) => {\n const next = inner\n .replace(/<((?:\\w+:)?)col>(\\d+)<\\/\\1col>/, (_, q: string, v: string) => `<${q}col>${cols.near(Number(v))}</${q}col>`)\n .replace(/<((?:\\w+:)?)row>(\\d+)<\\/\\1row>/, (_, q: string, v: string) => `<${q}row>${rows.near(Number(v))}</${q}row>`);\n return `<${p}${n}>${next}</${p}${n}>`;\n });\n}\n\nexport function writeXlsx(original: ArrayBuffer, model: SheetModel): ArrayBuffer {\n const { model: base, book } = load(original);\n const { pack, styles } = book;\n const cur = model.book;\n const defaults = norm(styles.looks[0] ?? {});\n const bySheetId = new Map(book.sheets.map(s => [s.sheetId, s]));\n const kept = new Set(cur.sheetOrder.map(sid => model.origin.sheets[sid]).filter(id => bySheetId.has(id)));\n const removed = book.sheets.filter(s => !kept.has(s.sheetId));\n const charts = [...pack.names.keys()].filter(n => /^xl\\/charts\\/chart[^/]*\\.xml$/.test(n));\n const caches = book.rels.filter(r => r.type === 'pivotCacheDefinition').map(r => r.target);\n for (const gone of removed) {\n const pattern = new RegExp(`(^|[^\\\\w.])(${literal(gone.name)}|'${literal(gone.name.replace(/'/g, \"''\"))}')!`);\n const own = new Set(gone.rels.filter(r => r.type === 'drawing').flatMap(r => pack.rels(r.target)).filter(r => r.type === 'chart').map(r => r.target));\n if (charts.some(c => !own.has(c) && [...(pack.text(c) ?? '').matchAll(/<(?:\\w+:)?f>([\\s\\S]*?)<\\/(?:\\w+:)?f>/g)].some(m => pattern.test(unescape(m[1]))))) throw new SheetRefusal('chartSource', gone.name);\n if (caches.some(c => new RegExp(`<(?:\\\\w+:)?worksheetSource\\\\b[^>]*\\\\bsheet=\"${literal(escape(gone.name))}\"`).test(pack.text(c) ?? ''))) throw new SheetRefusal('pivotSheet', gone.name);\n }\n\n const names = new Map<string, string>();\n const axes = new Map<string, { rows: Axis; cols: Axis; rec: SheetRec }>();\n let touched = false;\n const sheetParts: { sid: string; rec: SheetRec | null; part: string; rid: string; sheetId: number }[] = [];\n let nextSheetId = Math.max(0, ...book.entries.map(e => e.sheetId)) + 1;\n let nextRid = Math.max(0, ...book.rels.map(r => Number(/\\d+$/.exec(r.id)?.[0] ?? 0))) + 1;\n const used = new Set(pack.names.keys());\n const fresh = (pattern: (n: number) => string) => {\n let n = 1;\n while (used.has(pattern(n)) || pack.changed.has(pattern(n))) n++;\n used.add(pattern(n));\n return pattern(n);\n };\n const types: [string, string | null][] = [];\n const defaultsNeeded = new Set<string>();\n\n for (const sid of cur.sheetOrder) {\n const id = model.origin.sheets[sid];\n const rec = id !== undefined ? bySheetId.get(id) ?? null : null;\n if (rec && [...axes.values()].every(a => a.rec !== rec)) {\n const lines = model.lines[sid], old = model.origin.lines[sid] ?? base.lines[rec.sid];\n axes.set(sid, { rows: new Axis(old.rows, lines.rows), cols: new Axis(old.cols, lines.cols), rec });\n sheetParts.push({ sid, rec, part: rec.part, rid: book.entries.find(e => e.sheetId === rec.sheetId)!.rid, sheetId: rec.sheetId });\n if (cur.sheets[sid].name !== rec.name) names.set(rec.name, cur.sheets[sid].name!);\n } else {\n const part = fresh(n => `xl/worksheets/sheet${n}.xml`);\n sheetParts.push({ sid, rec: null, part, rid: `rId${nextRid++}`, sheetId: nextSheetId++ });\n types.push([`/${part}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml']);\n }\n }\n\n const curNotes = resource(cur, 'SHEET_NOTE_PLUGIN') as Record<string, Record<string, Record<string, Note>>> | null;\n const curRules = resource(cur, 'SHEET_DATA_VALIDATION_PLUGIN') as Record<string, Rule[]> | null;\n const curFilters = resource(cur, 'SHEET_FILTER_PLUGIN') as Record<string, { ref: Box; filterColumns?: unknown[]; cachedFilteredOut?: number[] } | null> | null;\n const baseRules = (resource(base.book, 'SHEET_DATA_VALIDATION_PLUGIN') ?? {}) as Record<string, Rule[]>;\n const baseFilters = (resource(base.book, 'SHEET_FILTER_PLUGIN') ?? {}) as Record<string, { ref: Box; filterColumns?: unknown[] }>;\n const filterNames = new Map<number, string | null>();\n\n for (const entry of sheetParts) {\n const { sid, rec } = entry;\n const sheet = cur.sheets[sid] as Sheet;\n const ax = axes.get(sid);\n const rows = ax?.rows ?? new Axis([], model.lines[sid]?.rows ?? []);\n const cols = ax?.cols ?? new Axis([], model.lines[sid]?.cols ?? []);\n const old = rec ? base.book.sheets[rec.sid] as Sheet : {} as Sheet;\n const xml = rec?.xml ?? blankSheet;\n const p = rec?.p ?? '';\n const cells = (sheet.cellData ?? {}) as Cells;\n const oldCells = (old.cellData ?? {}) as Cells;\n const fOf = formulas(cells);\n const rowStyle = (sh: Sheet, r: number) => (sh.rowData as Record<number, { s?: unknown }> | undefined)?.[r]?.s;\n const colStyle = (sh: Sheet, c: number) => (sh.columnData as Record<number, { s?: unknown }> | undefined)?.[c]?.s;\n const seen = new Map<string, { look: IStyleData; json: string }>();\n const looks = (bk: IWorkbookData, sh: Sheet, r: number, c: number, x: ICellData | undefined) => {\n const s = x?.s ?? colStyle(sh, c) ?? rowStyle(sh, r);\n const id = typeof s === 'string' ? (bk === cur ? 'c' : 'b') + s : '';\n const known = id && seen.get(id);\n if (known) return known;\n const look = norm({ ...defaults, ...lookup(bk, s) });\n const made = { look, json: JSON.stringify(look) };\n if (id) seen.set(id, made);\n return made;\n };\n const xfOf = (s: unknown) => typeof s === 'string' && /^x\\d+$/.test(s) ? Number(s.slice(1)) : 0;\n const xfFor = (look: IStyleData, was: number) => {\n if (same(norm(styles.looks[was] ?? {}), look) || (was === 0 && same(defaults, look))) return was;\n return styles.find(look) ?? styles.derive(was, look);\n };\n let changed = !rec || rows.moved || cols.moved;\n let reused = 0, total = 0;\n for (const [r, line] of Object.entries(oldCells)) for (const c of Object.keys(line ?? {})) if (rows.map(+r) >= 0 && cols.map(+c) >= 0) total++;\n\n const body: string[] = [];\n const filtered = new Set(curFilters?.[sid]?.cachedFilteredOut ?? []);\n const indices = new Set<number>();\n for (const [r, line] of Object.entries(cells)) if (line && Object.keys(line).length) indices.add(+r);\n for (const [r, rd] of Object.entries(sheet.rowData ?? {})) if (rd && (rd.h !== undefined || rd.hd || rd.s)) indices.add(+r);\n if (rec) for (const r0 of rec.rows.keys()) { const r = rows.map(r0); if (r >= 0) indices.add(r); }\n for (const r of filtered) indices.add(r);\n let minR = Infinity, minC = Infinity, maxR = -1, maxC = -1;\n for (const r of [...indices].sort((a, b) => a - b)) {\n const r0 = rows.from(r);\n const orow = r0 >= 0 ? rec?.rows.get(r0) : undefined;\n const rd = (sheet.rowData as Record<number, { h?: number; hd?: number; s?: unknown }>)?.[r] ?? {};\n const od = r0 >= 0 ? (old.rowData as Record<number, { h?: number; hd?: number; s?: unknown }>)?.[r0] ?? {} : {};\n let tag = orow ? orow.open.replace(/\\s*\\/>$/, '>') : `<${p}row>`;\n tag = setAttr(tag, 'r', String(r + 1));\n if (orow && (rows.moved || cols.moved)) tag = setAttr(tag, 'spans', null);\n if (Math.abs((rd.h ?? -1) - (od.h ?? -1)) > 0.5) {\n changed = true;\n tag = setAttr(setAttr(tag, 'ht', rd.h === undefined ? null : String(pt.row(rd.h))), 'customHeight', rd.h === undefined ? null : '1');\n }\n const hidden = !!rd.hd || filtered.has(r);\n if (hidden !== !!od.hd) {\n changed = true;\n tag = setAttr(tag, 'hidden', hidden ? '1' : null);\n }\n const look = rd.s ? norm({ ...defaults, ...lookup(cur, rd.s) }) : null;\n const was = od.s ? norm({ ...defaults, ...lookup(base.book, od.s) }) : null;\n if (!same(look, was)) {\n changed = true;\n tag = setAttr(setAttr(tag, 's', look ? String(xfFor(look, xfOf(od.s))) : null), 'customFormat', look ? '1' : null);\n }\n const line = cells[r] ?? {};\n const parts: string[] = [];\n for (const c of Object.keys(line).map(Number).sort((a, b) => a - b)) {\n const x = line[c];\n if (!x) continue;\n const c0 = cols.from(c);\n const ox = r0 >= 0 && c0 >= 0 ? oldCells[r0]?.[c0] : undefined;\n const f = fOf(r, c, x);\n const v = textOf(x);\n const look = looks(cur, sheet, r, c, x);\n const orec = r0 >= 0 && c0 >= 0 ? rec?.cells.get(key(r0, c0)) : undefined;\n const unchanged = !!ox && (ox.f ?? null) === f && equalValue(textOf(ox), v) && looks(base.book, old, r0, c0, ox).json === look.json;\n if (unchanged) reused++;\n if (blank(v) && !f && !x.s) continue;\n if (unchanged && orec && !orec.shared) {\n const raw = xml.slice(orec.start, orec.end);\n parts.push(rows.moved || cols.moved ? raw.replace(/^<[^>]*>/, t => setAttr(t, 'r', a1(r, c))) : raw);\n } else {\n if (!unchanged) changed = true;\n const xf = xfFor(look.look, xfOf(ox?.s ?? colStyle(sheet, c) ?? rowStyle(sheet, r)));\n const out = cellXml(p, a1(r, c), xf, x, f, v);\n if (!out) continue;\n parts.push(out);\n }\n minR = Math.min(minR, r); maxR = Math.max(maxR, r); minC = Math.min(minC, c); maxC = Math.max(maxC, c);\n }\n if (!parts.length && !orow && !rd.h && !hidden && !look) continue;\n body.push(parts.length ? `${tag}${parts.join('')}</${p}row>` : tag.replace(/>$/, '/>'));\n }\n if (rec && reused !== total) changed = true;\n\n let head = xml.slice(0, rec ? rec.bounds[0] : xml.indexOf('<sheetData'));\n let tail = xml.slice(rec ? rec.bounds[3] : xml.indexOf('<sheetData/>') + 12);\n\n const mine = (s: string | null) => s === null || s === rec?.name;\n if (rec && (rows.moved || cols.moved)) {\n head = remapZone(head, mine, rows, cols);\n tail = remapZone(tail, mine, rows, cols);\n }\n\n const colXml = columns(p, rec, sheet, old, cols, defaults, cur, base.book, xfFor, xfOf);\n if (colXml !== undefined) { changed = true; head = place(head, 'cols', colXml); }\n\n const merges = (sheet.mergeData ?? []).map(m => span(m)).sort();\n const oldMerges = [...(rec?.merges ?? [])].map(m => span(box(m)!)).sort();\n if (!same(merges, oldMerges)) {\n changed = true;\n tail = place(tail, 'mergeCells', merges.length ? `<${p}mergeCells count=\"${merges.length}\">${merges.map(m => `<${p}mergeCell ref=\"${m}\"/>`).join('')}</${p}mergeCells>` : null);\n }\n\n const freeze = sheet.freeze && (sheet.freeze.xSplit > 0 || sheet.freeze.ySplit > 0) ? [sheet.freeze.xSplit, sheet.freeze.ySplit] : [0, 0];\n const oldFreeze = old.freeze ? [old.freeze.xSplit, old.freeze.ySplit] : [0, 0];\n if (!same(freeze, oldFreeze)) {\n changed = true;\n head = frozen(head, p, freeze[0], freeze[1]);\n }\n if ((sheet.showGridlines ?? 1) !== (old.showGridlines ?? 1)) {\n changed = true;\n head = head.replace(/<(?:\\w+:)?sheetView\\b[^>]*?>/, t => setAttr(t, 'showGridLines', sheet.showGridlines === 0 ? '0' : null));\n }\n if ((sheet.tabColor ?? '') !== (old.tabColor ?? '')) {\n changed = true;\n head = tabColour(head, p, sheet.tabColor ?? '');\n }\n\n const rules = (curRules ? curRules[sid] ?? [] : rec ? baseRules[rec.sid] ?? [] : []).map(r => ({ ...r, ranges: r.ranges.map(b => ({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn })) }));\n const oldRules = (rec ? baseRules[rec.sid] ?? [] : []).map(r => ({ ...r, ranges: r.ranges.map(b => squeeze(b, rows.map, cols.map)).filter(Boolean) }));\n if (curRules && !same(rules.map(canonRule), oldRules.map(canonRule))) {\n changed = true;\n const known = new Map((rec?.validations ?? []).map((v, i) => [`dv${i}`, v]));\n const shown = new Set(rules.map(r => r.uid));\n const hiddenRules = [...known].filter(([uid, v]) => !shown.has(uid) && !(rec && baseRules[rec.sid]?.some(r => r.uid === uid)) && v).map(([, v]) => rows.moved || cols.moved ? remapZone(v, mine, rows, cols) : v);\n const list = [...hiddenRules, ...rules.map(r => validationXml(p, r, known.get(r.uid)))].filter(Boolean);\n tail = place(tail, 'dataValidations', list.length ? `<${p}dataValidations count=\"${list.length}\">${list.join('')}</${p}dataValidations>` : null);\n }\n\n const oldFilter = rec ? baseFilters[rec.sid] ?? null : null;\n const filter = curFilters ? curFilters[sid] ?? null : oldFilter;\n const fref = filter?.ref ? span(filter.ref) : null;\n const oref = oldFilter?.ref ? (() => { const b = squeeze(oldFilter.ref, rows.map, cols.map); return b && span(b); })() : null;\n if (curFilters && (fref !== oref || !same(filter?.filterColumns ?? [], oldFilter?.filterColumns ?? []))) {\n changed = true;\n tail = place(tail, 'autoFilter', filter?.ref ? filterXml(p, filter.ref, filter.filterColumns ?? []) : null);\n filterNames.set(entry.sheetId, filter?.ref ? `${quoted(sheet.name!)}!${span(filter.ref).split(':').map(s => s.replace(/([A-Z]+)(\\d+)/, '$$$1$$$2')).join(':')}` : null);\n }\n\n const notes: Note[] = Object.values(curNotes?.[sid] ?? {}).flatMap(line => Object.values(line ?? {})).filter(n => n && !blank(n.note));\n const oldNotes = (rec?.notes ?? []).map(n => ({ ref: n.ref, text: n.text }));\n const nowNotes = notes.map(n => ({ ref: a1(n.row, n.col), text: n.note })).sort((a, b) => a.ref.localeCompare(b.ref));\n if (curNotes && !same(nowNotes, [...oldNotes].sort((a, b) => a.ref.localeCompare(b.ref)))) {\n changed = true;\n tail = writeNotes(book, entry, tail, p, notes, rows, cols, types, defaultsNeeded, fresh);\n }\n\n const rename = (s: string) => names.size ? s.replace(/<(xm:f|(?:\\w+:)?formula\\d?)>([\\s\\S]*?)<\\/\\1>/g, (_, n: string, f: string) =>\n `<${n}>${escape([...names].reduce((g, [from, to]) => renamed(g, from, to), unescape(f)))}</${n}>`) : s;\n if (!changed) {\n if (rec && rename(xml) !== xml) pack.put(entry.part, rename(xml));\n continue;\n }\n touched = true;\n head = rename(head);\n tail = rename(tail);\n if (/\\sr:id=\"/.test(tail) && !/xmlns:r=/.test(head)) head = head.replace(/<((?:\\w+:)?worksheet)\\b/, `<$1 xmlns:r=\"${REL}\"`);\n const dim = maxR < 0 ? 'A1' : span({ startRow: minR, startColumn: minC, endRow: maxR, endColumn: maxC });\n head = /<(?:\\w+:)?dimension\\b/.test(head) ? head.replace(/<((?:\\w+:)?)dimension\\b[^>]*\\/?>/, `<$1dimension ref=\"${dim}\"/>`) : place(head, 'dimension', `<${p}dimension ref=\"${dim}\"/>`);\n pack.put(entry.part, head + (body.length ? `<${p}sheetData>${body.join('')}</${p}sheetData>` : `<${p}sheetData/>`) + tail);\n\n if (rec && (rows.moved || cols.moved)) {\n for (const rel of rec.rels) {\n if (rel.external) continue;\n if (rel.type === 'drawing') {\n const d = pack.text(rel.target);\n if (d) pack.put(rel.target, anchors(d, rows, cols));\n }\n if (rel.type === 'table') {\n const t = pack.text(rel.target);\n if (!t) continue;\n const ref = attr(/<(?:\\w+:)?table\\b[^>]*>/.exec(t)?.[0] ?? '', 'ref');\n const b = ref && box(ref);\n const moved = b && squeeze(b, rows.map, cols.map);\n if (b && moved && moved.endColumn - moved.startColumn !== b.endColumn - b.startColumn) throw new SheetRefusal('tableColumns', rec.name);\n if (moved) pack.put(rel.target, t.replace(/(<(?:\\w+:)?(?:table|autoFilter)\\b[^>]*?\\sref=\")([^\"]*)\"/g, (_, a: string, r: string) => `${a}${span(squeeze(box(r)!, rows.map, cols.map) ?? box(r)!)}\"`));\n }\n }\n }\n }\n\n const sheetStyles = styles.build();\n if (sheetStyles) {\n const target = book.stylesPart ?? 'xl/styles.xml';\n pack.put(target, sheetStyles);\n if (!book.stylesPart) {\n types.push([`/${target}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml']);\n pack.put(relsOf(book.part), (pack.text(relsOf(book.part)) ?? '').replace(/<\\/(?:\\w+:)?Relationships>/, end => `<Relationship Id=\"rId${nextRid++}\" Type=\"${REL}/styles\" Target=\"${relative(book.part, target)}\"/>${end}`));\n }\n touched = true;\n }\n\n for (const [sid, ax] of axes) {\n if (!ax.rows.moved && !ax.cols.moved) continue;\n const name = ax.rec.name;\n const mine = (s: string | null) => s === name;\n for (const c of charts) {\n const t = pack.text(c);\n if (t && t.includes(name)) pack.put(c, t.replace(/<((?:\\w+:)?)f>([\\s\\S]*?)<\\/\\1f>/g, (_, p: string, f: string) => `<${p}f>${escape(remapped(unescape(f), mine, ax.rows.map, ax.cols.map))}</${p}f>`));\n }\n for (const c of caches) {\n const t = pack.text(c);\n if (t) pack.put(c, t.replace(/<(?:\\w+:)?worksheetSource\\b[^>]*>/g, tag => attr(tag, 'sheet') === name && attr(tag, 'ref') ? setAttr(tag, 'ref', span(squeeze(box(attr(tag, 'ref')!)!, ax.rows.map, ax.cols.map) ?? box(attr(tag, 'ref')!)!)) : tag));\n }\n for (const other of sheetParts) {\n if (other.sid === sid || !other.rec) continue;\n const t = pack.text(other.part);\n if (t && t.includes(name)) pack.put(other.part, t.replace(/<(xm:f|(?:\\w+:)?formula\\d?)>([\\s\\S]*?)<\\/\\1>/g, (_, n: string, f: string) => `<${n}>${escape(remapped(unescape(f), mine, ax.rows.map, ax.cols.map))}</${n}>`));\n }\n }\n for (const [from, to] of names) {\n for (const c of charts) {\n const t = pack.text(c);\n if (t && t.includes(from)) pack.put(c, t.replace(/<((?:\\w+:)?)f>([\\s\\S]*?)<\\/\\1f>/g, (_, p: string, f: string) => `<${p}f>${escape(renamed(unescape(f), from, to))}</${p}f>`));\n }\n for (const c of caches) {\n const t = pack.text(c);\n if (t) pack.put(c, t.replace(/(<(?:\\w+:)?worksheetSource\\b[^>]*\\ssheet=\")([^\"]*)\"/g, (all, a: string, s: string) => unescape(s) === from ? `${a}${escape(to)}\"` : all));\n }\n }\n\n const sheetsChanged = removed.length > 0 || names.size > 0 || sheetParts.some(s => !s.rec) || sheetParts.map(s => s.sheetId).join() !== book.entries.filter(e => e.sheet && kept.has(e.sheetId)).map(e => e.sheetId).join()\n || cur.sheetOrder.some(sid => { const rec = axes.get(sid)?.rec; return !!rec && (cur.sheets[sid].hidden ?? 0) !== (base.book.sheets[rec.sid].hidden ?? 0); });\n if (!touched && !sheetsChanged && !filterNames.size) return original;\n\n let wb = book.xml;\n const listed: { xml: string; sheetId: number; oldIndex: number }[] = [];\n const nonSheets = book.entries.map((e, i) => ({ e, i })).filter(x => !x.e.sheet);\n const indexOf = new Map(book.entries.map((e, i) => [e.sheetId, i]));\n const wp = /<(\\w+:)?workbook\\b/.exec(wb)?.[1] ?? '';\n const relPrefix = /xmlns:(\\w+)=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\"/.exec(wb)?.[1] ?? 'r';\n for (const s of sheetParts) {\n const sheet = cur.sheets[s.sid] as Sheet;\n const state = sheet.hidden === 2 ? 'veryHidden' : sheet.hidden ? 'hidden' : null;\n let tag = s.rec ? book.entries.find(e => e.sheetId === s.sheetId)!.xml : `<${wp}sheet name=\"\" sheetId=\"${s.sheetId}\" ${relPrefix}:id=\"${s.rid}\"/>`;\n tag = setAttr(setAttr(tag, 'name', sheet.name ?? `Sheet${s.sheetId}`), 'state', state);\n listed.push({ xml: tag, sheetId: s.sheetId, oldIndex: s.rec ? indexOf.get(s.sheetId)! : -1 });\n }\n for (const { e, i } of nonSheets) {\n let at = listed.findIndex(x => x.oldIndex > i);\n if (at < 0) at = listed.length;\n listed.splice(at, 0, { xml: e.xml, sheetId: e.sheetId, oldIndex: i });\n }\n wb = wb.replace(/(<(?:\\w+:)?sheets\\b[^>]*>)[\\s\\S]*?(<\\/(?:\\w+:)?sheets>)/, (_, a: string, b: string) => a + listed.map(x => x.xml).join('') + b);\n const newIndex = new Map(listed.map((x, i) => [x.oldIndex, i]));\n const sheetIndex = new Map(listed.map((x, i) => [x.sheetId, i]));\n const removedNames = new Set(removed.map(r => r.name));\n\n wb = wb.replace(/<((?:\\w+:)?)definedName\\b([^>]*)>([\\s\\S]*?)<\\/\\1definedName>/g, (all: string, p: string, attrs0: string, body: string) => {\n let tag = `<${p}definedName${attrs0}>`;\n const local = attr(tag, 'localSheetId');\n if (local !== null) {\n const next = newIndex.get(Number(local));\n if (next === undefined) return '';\n tag = setAttr(tag, 'localSheetId', String(next));\n const owner = listed[next];\n if (attr(tag, 'name') === '_xlnm._FilterDatabase' && filterNames.has(owner.sheetId)) {\n const f = filterNames.get(owner.sheetId)!;\n filterNames.delete(owner.sheetId);\n return f ? `${tag}${escape(f)}</${p}definedName>` : '';\n }\n }\n let f = unescape(body);\n for (const gone of removedNames) f = f.replace(new RegExp(`(?:'${literal(gone.replace(/'/g, \"''\"))}'|${literal(gone)})![$A-Z0-9:]+`, 'g'), '#REF!');\n for (const [, ax] of axes) if (ax.rows.moved || ax.cols.moved) f = remapped(f, s => s === ax.rec.name, ax.rows.map, ax.cols.map);\n for (const [from, to] of names) f = renamed(f, from, to);\n return `${tag}${escape(f)}</${p}definedName>`;\n });\n for (const [sheetId, f] of filterNames) {\n if (!f) continue;\n const def = `<${wp}definedName name=\"_xlnm._FilterDatabase\" localSheetId=\"${sheetIndex.get(sheetId)}\" hidden=\"1\">${escape(f)}</${wp}definedName>`;\n wb = /<(?:\\w+:)?definedNames\\b/.test(wb) ? wb.replace(/<\\/(?:\\w+:)?definedNames>/, end => def + end) : wb.replace(/<\\/(?:\\w+:)?sheets>/, end => `${end}<${wp}definedNames>${def}</${wp}definedNames>`);\n }\n wb = wb.replace(/<((?:\\w+:)?)definedNames>\\s*<\\/\\1definedNames>/, '');\n wb = wb.replace(/<(?:\\w+:)?workbookView\\b[^>]*>/g, tag => {\n const total = listed.length;\n let next = tag;\n const tab = attr(next, 'activeTab');\n if (tab !== null) next = setAttr(next, 'activeTab', String(Math.min(newIndex.get(Number(tab)) ?? 0, total - 1)));\n const first = attr(next, 'firstSheet');\n if (first !== null) next = setAttr(next, 'firstSheet', String(Math.min(newIndex.get(Number(first)) ?? 0, total - 1)));\n return next;\n });\n if (touched) {\n wb = /<(?:\\w+:)?calcPr\\b/.test(wb) ? wb.replace(/<(?:\\w+:)?calcPr\\b[^>]*?\\/?>/, tag => setAttr(tag, 'fullCalcOnLoad', '1')) : wb.replace(/(<\\/(?:\\w+:)?sheets>(?:\\s*<(?:\\w+:)?(?:functionGroups|externalReferences|definedNames)\\b[\\s\\S]*?<\\/(?:\\w+:)?(?:functionGroups|externalReferences|definedNames)>)*)/, `$1<${wp}calcPr fullCalcOnLoad=\"1\"/>`);\n }\n pack.put(book.part, wb);\n\n let rels = pack.text(relsOf(book.part)) ?? '';\n for (const gone of removed) {\n const entry = book.entries.find(e => e.sheetId === gone.sheetId)!;\n rels = rels.replace(new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*\\\\bId=\"${entry.rid}\"[^>]*\\\\/>`), '');\n pack.put(gone.part, null);\n pack.put(relsOf(gone.part), null);\n types.push([`/${gone.part}`, null]);\n }\n const calc = book.rels.find(r => r.type === 'calcChain');\n if (calc && touched) {\n rels = rels.replace(new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*\\\\bId=\"${calc.id}\"[^>]*\\\\/>`), '');\n pack.put(calc.target, null);\n types.push([`/${calc.target}`, null]);\n }\n for (const s of sheetParts) if (!s.rec) rels = rels.replace(/<\\/(?:\\w+:)?Relationships>/, end => `<Relationship Id=\"${s.rid}\" Type=\"${REL}/worksheet\" Target=\"${relative(book.part, s.part)}\"/>${end}`);\n pack.put(relsOf(book.part), rels);\n contentTypes(pack, types, defaultsNeeded);\n return copy(pack.build());\n}\n\nconst copy = (u: Uint8Array) => u.buffer.slice(u.byteOffset, u.byteOffset + u.byteLength) as ArrayBuffer;\n\nfunction contentTypes(pack: Book['pack'], types: [string, string | null][], defaults: Set<string>) {\n if (!types.length && !defaults.size) return;\n let ct = pack.text('[Content_Types].xml') ?? '';\n for (const [name, type] of types) {\n ct = ct.replace(new RegExp(`<Override\\\\b[^>]*PartName=\"${literal(name)}\"[^>]*\\\\/>`), '');\n if (type) ct = ct.replace('</Types>', () => `<Override PartName=\"${name}\" ContentType=\"${type}\"/></Types>`);\n }\n for (const ext of defaults) if (!new RegExp(`Extension=\"${ext}\"`, 'i').test(ct)) ct = ct.replace(/(<Types\\b[^>]*>)/, `$1<Default Extension=\"${ext}\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>`);\n pack.put('[Content_Types].xml', ct);\n}\n\nfunction cellXml(p: string, ref: string, xf: number, x: ICellData, f: string | null, v: string | number | boolean | null) {\n const s = xf ? ` s=\"${xf}\"` : '';\n if (f) {\n const body = escape(stored(f.replace(/^=/, '')));\n let t = '', val = '';\n if (typeof v === 'number' && Number.isFinite(v)) val = `<${p}v>${v}</${p}v>`;\n else if (typeof v === 'boolean' || x.t === 3) { t = ' t=\"b\"'; val = `<${p}v>${v === true || v === 1 ? 1 : 0}</${p}v>`; }\n else if (typeof v === 'string' && v !== '') { t = errors.test(v) ? ' t=\"e\"' : ' t=\"str\"'; val = `<${p}v>${escape(v)}</${p}v>`; }\n return `<${p}c r=\"${ref}\"${s}${t}><${p}f>${body}</${p}f>${val}</${p}c>`;\n }\n if (blank(v)) return xf ? `<${p}c r=\"${ref}\"${s}/>` : '';\n if (typeof v === 'boolean') return `<${p}c r=\"${ref}\"${s} t=\"b\"><${p}v>${v ? 1 : 0}</${p}v></${p}c>`;\n if (typeof v === 'number') return Number.isFinite(v) ? `<${p}c r=\"${ref}\"${s}><${p}v>${v}</${p}v></${p}c>` : `<${p}c r=\"${ref}\"${s} t=\"e\"><${p}v>#NUM!</${p}v></${p}c>`;\n const str = String(v);\n if (x.t === 2 && str.trim() !== '' && Number.isFinite(Number(str))) return `<${p}c r=\"${ref}\"${s}><${p}v>${Number(str)}</${p}v></${p}c>`;\n if (x.t !== 4 && errors.test(str)) return `<${p}c r=\"${ref}\"${s} t=\"e\"><${p}v>${escape(str)}</${p}v></${p}c>`;\n const space = /^\\s|\\s$|\\n/.test(str) ? ' xml:space=\"preserve\"' : '';\n return `<${p}c r=\"${ref}\"${s} t=\"inlineStr\"><${p}is><${p}t${space}>${escape(str)}</${p}t></${p}is></${p}c>`;\n}\n\nfunction columns(p: string, rec: SheetRec | null, sheet: Sheet, old: Sheet, cols: Axis, defaults: IStyleData,\n cur: IWorkbookData, baseBook: IWorkbookData, xfFor: (look: IStyleData, was: number) => number, xfOf: (s: unknown) => number): string | null | undefined {\n type Cd = { w?: number; hd?: number; s?: unknown };\n const now = (sheet.columnData ?? {}) as Record<number, Cd>, was = (old.columnData ?? {}) as Record<number, Cd>;\n const count = sheet.columnCount ?? 26;\n const look = (bk: IWorkbookData, s: unknown) => s ? norm({ ...defaults, ...lookup(bk, s) }) : null;\n let differs = cols.moved;\n for (let c = 0; c < count && !differs; c++) {\n const c0 = cols.from(c);\n const a = now[c] ?? {}, b = c0 >= 0 ? was[c0] ?? {} : {};\n if (Math.abs((a.w ?? -1) - (b.w ?? -1)) > 0.5 || !!a.hd !== !!b.hd || !same(look(cur, a.s), look(baseBook, b.s))) differs = true;\n }\n if (!differs) return undefined;\n const specs = rec?.cols ?? [];\n const specAt = (c0: number) => specs.find(s => c0 + 1 >= s.min && c0 + 1 <= s.max);\n const out: { c: number; attrs: Map<string, string> }[] = [];\n for (let c = 0; c < count; c++) {\n const c0 = cols.from(c);\n const spec = c0 >= 0 ? specAt(c0) : undefined;\n const a = new Map(spec ? [...spec.xml.matchAll(/([\\w:]+)=\"([^\"]*)\"/g)].map(m => [m[1], m[2]] as [string, string]) : []);\n a.delete('min');\n a.delete('max');\n const n = now[c] ?? {}, o = c0 >= 0 ? was[c0] ?? {} : {};\n if (Math.abs((n.w ?? -1) - (o.w ?? -1)) > 0.5) {\n if (n.w === undefined) { a.delete('width'); a.delete('customWidth'); }\n else { a.set('width', String(pt.col(n.w))); a.set('customWidth', '1'); }\n }\n if (!!n.hd !== !!o.hd) n.hd ? a.set('hidden', '1') : a.delete('hidden');\n const ln = look(cur, n.s), lo = look(baseBook, o.s);\n if (!same(ln, lo)) ln ? a.set('style', String(xfFor(ln, xfOf(o.s)))) : a.delete('style');\n if (!a.size) continue;\n if (!a.has('width')) a.set('width', String(pt.col(sheet.defaultColumnWidth ?? 64)));\n out.push({ c, attrs: a });\n }\n const runs: string[] = [];\n for (let i = 0; i < out.length; i++) {\n let j = i;\n const k = JSON.stringify([...out[i].attrs]);\n while (j + 1 < out.length && out[j + 1].c === out[j].c + 1 && JSON.stringify([...out[j + 1].attrs]) === k) j++;\n runs.push(`<${p}col min=\"${out[i].c + 1}\" max=\"${out[j].c + 1}\"${[...out[i].attrs].map(([n, v]) => ` ${n}=\"${v}\"`).join('')}/>`);\n i = j;\n }\n const shift = count - (rec?.width ?? count);\n for (const spec of specs) {\n if (spec.max <= (rec?.width ?? 0)) continue;\n const min = Math.max(count + 1, spec.min + shift), max = Math.min(16384, spec.max + shift);\n if (min <= max) runs.push(spec.xml.replace(/\\smin=\"\\d+\"/, ` min=\"${min}\"`).replace(/\\smax=\"\\d+\"/, ` max=\"${max}\"`));\n }\n return runs.length ? `<${p}cols>${runs.join('')}</${p}cols>` : null;\n}\n\nfunction frozen(head: string, p: string, x: number, y: number) {\n const pane = x || y ? `<${p}pane${x ? ` xSplit=\"${x}\"` : ''}${y ? ` ySplit=\"${y}\"` : ''} topLeftCell=\"${a1(y, x)}\" activePane=\"${x && y ? 'bottomRight' : y ? 'bottomLeft' : 'topRight'}\" state=\"frozen\"/>` : '';\n const selection = x || y ? `<${p}selection pane=\"${x && y ? 'bottomRight' : y ? 'bottomLeft' : 'topRight'}\" activeCell=\"${a1(y, x)}\" sqref=\"${a1(y, x)}\"/>` : `<${p}selection activeCell=\"A1\" sqref=\"A1\"/>`;\n const view = /<((?:\\w+:)?)sheetView\\b[^>]*?(\\/?)>/.exec(head);\n if (!view) return place(head, 'sheetViews', `<${p}sheetViews><${p}sheetView workbookViewId=\"0\">${pane}${selection}</${p}sheetView></${p}sheetViews>`);\n if (view[2]) return head.slice(0, view.index) + view[0].replace(/\\s*\\/>$/, '>') + pane + selection + `</${view[1]}sheetView>` + head.slice(view.index + view[0].length);\n const close = head.indexOf(`</${view[1]}sheetView>`, view.index);\n const inner = head.slice(view.index + view[0].length, close).replace(/<(?:\\w+:)?pane\\b[^>]*\\/>/g, '').replace(/<(?:\\w+:)?selection\\b[^>]*\\/>/g, '');\n return head.slice(0, view.index) + view[0] + pane + selection + inner + head.slice(close);\n}\n\nfunction tabColour(head: string, p: string, colour: string) {\n const tag = colour ? `<${p}tabColor rgb=\"FF${colour.replace('#', '').toUpperCase()}\"/>` : '';\n if (/<(?:\\w+:)?tabColor\\b/.test(head)) return head.replace(/<(?:\\w+:)?tabColor\\b[^>]*\\/>/, tag);\n if (!colour) return head;\n const pr = /<((?:\\w+:)?)sheetPr\\b[^>]*?(\\/?)>/.exec(head);\n if (!pr) return place(head, 'sheetPr', `<${p}sheetPr>${tag}</${p}sheetPr>`);\n if (pr[2]) return head.slice(0, pr.index) + pr[0].replace(/\\s*\\/>$/, '>') + tag + `</${pr[1]}sheetPr>` + head.slice(pr.index + pr[0].length);\n return head.slice(0, pr.index + pr[0].length) + tag + head.slice(pr.index + pr[0].length);\n}\n\nfunction canonRule(r: Record<string, unknown>) {\n const out: Record<string, unknown> = {};\n for (const k of ['uid', 'type', 'operator', 'formula1', 'formula2', 'allowBlank', 'showDropDown', 'showErrorMessage', 'showInputMessage', 'errorStyle', 'error', 'errorTitle', 'prompt', 'promptTitle']) {\n const v = r[k];\n if (v !== undefined && v !== null && v !== false && v !== '') out[k] = v;\n }\n if (out.type === 'list' && out.showDropDown === undefined) out.showDropDown = true;\n out.ranges = (r.ranges as Box[]).map(b => span(b)).sort();\n return out;\n}\n\nfunction validationXml(p: string, r: Rule, was: string | undefined) {\n if (!['whole', 'decimal', 'list', 'textLength', 'custom', 'date'].includes(String(r.type))) return '';\n let tag = was ? was.slice(0, was.indexOf('>') + 1).replace(/\\s*\\/>$/, '>') : `<${p}dataValidation>`;\n const bool = (name: string, on: unknown) => { tag = setAttr(tag, name, on ? '1' : null); };\n tag = setAttr(tag, 'type', String(r.type));\n tag = setAttr(tag, 'operator', r.type === 'list' || r.type === 'custom' || !r.operator || r.operator === 'between' ? null : String(r.operator));\n bool('allowBlank', r.allowBlank);\n bool('showDropDown', r.type === 'list' && r.showDropDown === false);\n bool('showInputMessage', r.showInputMessage);\n bool('showErrorMessage', r.showErrorMessage);\n const style = Object.entries(stops).find(([, v]) => v === r.errorStyle)?.[0];\n tag = setAttr(tag, 'errorStyle', style && style !== 'stop' ? style : null);\n for (const name of ['errorTitle', 'error', 'promptTitle', 'prompt']) tag = setAttr(tag, name, blank(r[name]) ? null : String(r[name]));\n tag = setAttr(tag, 'sqref', r.ranges.map(span).join(' '));\n const f1 = r.formula1 === undefined ? '' : r.type === 'list' && !String(r.formula1).startsWith('=') ? `\"${listText(String(r.formula1)).replace(/\"/g, '\"\"')}\"` : stored(String(r.formula1).replace(/^=/, ''));\n const f2 = r.formula2 === undefined ? '' : stored(String(r.formula2).replace(/^=/, ''));\n return `${tag}${f1 ? `<${p}formula1>${escape(f1)}</${p}formula1>` : ''}${f2 ? `<${p}formula2>${escape(f2)}</${p}formula2>` : ''}</${p}dataValidation>`;\n}\n\nfunction listText(f: string) {\n try {\n const list = JSON.parse(f);\n if (Array.isArray(list)) return list.join(',');\n } catch {\n return f;\n }\n return f;\n}\n\nfunction filterXml(p: string, ref: Box, columns: unknown[]) {\n const body = (columns as { colId: number; filters?: { filters?: string[]; blank?: boolean }; customFilters?: { and?: number; customFilters: { operator?: string; val: string }[] } }[]).map(c => {\n if (c.filters) return `<${p}filterColumn colId=\"${c.colId}\"><${p}filters${c.filters.blank ? ' blank=\"1\"' : ''}>${(c.filters.filters ?? []).map(v => `<${p}filter val=\"${escape(String(v))}\"/>`).join('')}</${p}filters></${p}filterColumn>`;\n if (c.customFilters) return `<${p}filterColumn colId=\"${c.colId}\"><${p}customFilters${c.customFilters.and ? ' and=\"1\"' : ''}>${c.customFilters.customFilters.map(f => `<${p}customFilter${f.operator ? ` operator=\"${f.operator}\"` : ''} val=\"${escape(String(f.val))}\"/>`).join('')}</${p}customFilters></${p}filterColumn>`;\n return '';\n }).join('');\n return body ? `<${p}autoFilter ref=\"${span(ref)}\">${body}</${p}autoFilter>` : `<${p}autoFilter ref=\"${span(ref)}\"/>`;\n}\n\nfunction writeNotes(book: Book, entry: { rec: SheetRec | null; part: string }, tail: string, p: string, notes: Note[], rows: Axis, cols: Axis,\n types: [string, string | null][], defaults: Set<string>, fresh: (pattern: (n: number) => string) => string) {\n const { pack } = book;\n const rec = entry.rec;\n const relsPart = relsOf(entry.part);\n let rels = pack.text(relsPart) ?? '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>';\n let nextRid = Math.max(0, ...[...rels.matchAll(/\\bId=\"rId(\\d+)\"/g)].map(m => Number(m[1]))) + 1;\n let commentsPart = rec?.comments ?? null;\n let vmlPart = rec?.vml ?? null;\n if (!commentsPart) {\n commentsPart = fresh(n => `xl/comments${n}.xml`);\n rels = rels.replace('</Relationships>', () => `<Relationship Id=\"rId${nextRid++}\" Type=\"${REL}/comments\" Target=\"${relative(entry.part, commentsPart!)}\"/></Relationships>`);\n types.push([`/${commentsPart}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml']);\n }\n if (!vmlPart) {\n vmlPart = fresh(n => `xl/drawings/vmlDrawing${n}.vml`);\n const rid = `rId${nextRid++}`;\n rels = rels.replace('</Relationships>', () => `<Relationship Id=\"${rid}\" Type=\"${REL}/vmlDrawing\" Target=\"${relative(entry.part, vmlPart!)}\"/></Relationships>`);\n defaults.add('vml');\n const relNs = /xmlns:(\\w+)=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\"/.exec(rec?.xml ?? '')?.[1];\n tail = place(tail, 'legacyDrawing', `<${p}legacyDrawing ${relNs ?? 'r'}:id=\"${rid}\"/>`);\n }\n pack.put(relsPart, rels);\n\n const authors = rec?.authors.length ? [...rec.authors] : ['Author'];\n const byOld = new Map((rec?.notes ?? []).map(n => {\n const [r, c] = cell(n.ref);\n return [a1(rows.map(r), cols.map(c)), n];\n }));\n const list = [...notes].sort((a, b) => a.row - b.row || a.col - b.col).map(n => {\n const ref = a1(n.row, n.col);\n const was = byOld.get(ref);\n if (was && was.text === n.note) return setAttr(was.xml.slice(0, was.xml.indexOf('>') + 1), 'ref', ref) + was.xml.slice(was.xml.indexOf('>') + 1);\n const authorId = was ? attr(was.xml, 'authorId') ?? '0' : '0';\n return `<${p}comment ref=\"${ref}\" authorId=\"${authorId}\"><${p}text><${p}r><${p}t xml:space=\"preserve\">${escape(n.note)}</${p}t></${p}r></${p}text></${p}comment>`;\n });\n const existing = pack.text(commentsPart);\n const authorsXml = `<${p}authors>${authors.map(a => `<${p}author>${escape(a)}</${p}author>`).join('')}</${p}authors>`;\n const commentsXml = existing\n ? existing.replace(/<((?:\\w+:)?)commentList\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1commentList>)/, () => `<${p}commentList>${list.join('')}</${p}commentList>`)\n : `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">${authorsXml}<commentList>${list.join('')}</commentList></comments>`;\n pack.put(commentsPart, commentsXml);\n\n const vml = pack.text(vmlPart) ?? '<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"><o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout><v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\"><v:stroke joinstyle=\"miter\"/><v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/></v:shapetype></xml>';\n const shapes = new Map<string, string>();\n let rest = vml.replace(/<v:shape\\b[^>]*>[\\s\\S]*?<\\/v:shape>/g, shape => {\n if (!/ObjectType=\"Note\"/.test(shape)) return shape;\n const r = Number(/<x:Row>(\\d+)<\\/x:Row>/.exec(shape)?.[1] ?? -1), c = Number(/<x:Column>(\\d+)<\\/x:Column>/.exec(shape)?.[1] ?? -1);\n if (r >= 0 && c >= 0) shapes.set(a1(rows.map(r), cols.map(c)), shape);\n return '';\n });\n let id = Math.max(1024, ...[...vml.matchAll(/_x0000_s(\\d+)/g)].map(m => Number(m[1])));\n const out = notes.map(n => {\n const ref = a1(n.row, n.col);\n const was = shapes.get(ref);\n if (was) return was.replace(/<x:Row>\\d+<\\/x:Row>/, `<x:Row>${n.row}</x:Row>`).replace(/<x:Column>\\d+<\\/x:Column>/, `<x:Column>${n.col}</x:Column>`)\n .replace(/<x:Anchor>([^<]*)<\\/x:Anchor>/, `<x:Anchor>${n.col + 1}, 15, ${n.row}, 2, ${n.col + 3}, 15, ${n.row + 4}, 16</x:Anchor>`);\n return `<v:shape id=\"_x0000_s${++id}\" type=\"#_x0000_t202\" style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:1;visibility:hidden\" fillcolor=\"#ffffe1\" o:insetmode=\"auto\"><v:fill color2=\"#ffffe1\"/><v:shadow on=\"t\" color=\"black\" obscured=\"t\"/><v:path o:connecttype=\"none\"/><v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox><x:ClientData ObjectType=\"Note\"><x:MoveWithCells/><x:SizeWithCells/><x:Anchor>${n.col + 1}, 15, ${n.row}, 2, ${n.col + 3}, 15, ${n.row + 4}, 16</x:Anchor><x:AutoFill>False</x:AutoFill><x:Row>${n.row}</x:Row><x:Column>${n.col}</x:Column></x:ClientData></v:shape>`;\n }).join('');\n rest = rest.replace(/<\\/xml>\\s*$/, () => `${out}</xml>`);\n pack.put(vmlPart, rest);\n return tail;\n}\n","import { readCsv, writeCsv } from './csv';\nimport type { SheetModel } from './model';\nimport { writeXlsx } from './write';\nimport { load } from './xlsx';\n\nexport function readSheet(bytes: ArrayBuffer, kind: 'xlsx' | 'csv'): SheetModel {\n return kind === 'csv' ? readCsv(bytes) : load(bytes).model;\n}\n\nexport function writeSheet(original: ArrayBuffer, model: SheetModel, kind: 'xlsx' | 'csv'): ArrayBuffer {\n return kind === 'csv' ? writeCsv(original, model) : writeXlsx(original, model);\n}\n","import type { ICellData, IColumnData, IRowData, IStyleData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport * as Y from 'yjs';\nimport { readSheet } from './book';\nimport { numbered, type Lines, type SheetModel } from './model';\nimport { cell, remapped, renamed, squeeze, type Box } from './refs';\nimport { Axis } from './write';\nimport { worksheets } from './xlsx';\n\nexport type Cell = Pick<ICellData, 'v' | 't' | 'f' | 'p'> & { s?: string };\nexport type Row = Pick<IRowData, 'h' | 'hd' | 'ia'> & { s?: string };\nexport type Col = Pick<IColumnData, 'w' | 'hd'> & { s?: string };\nexport type Note = { note: string; width: number; height: number };\ntype Value = Pick<ICellData, 'v' | 't'>;\ntype Origin = { id: number; name: string; rows: string[] | number; cols: string[] | number };\ntype Resource = { name: string; data: string };\n\nexport const props = ['name', 'hidden', 'tabColor', 'freeze', 'showGridlines', 'rightToLeft'] as const;\n\nexport const spot = (row: string, col: string) => `${row}:${col}`;\n\nexport const canon = (x: unknown): string => x === null || typeof x !== 'object' ? JSON.stringify(x ?? null)\n : Array.isArray(x) ? `[${x.map(canon).join(',')}]`\n : `{${Object.keys(x).filter(k => (x as Record<string, unknown>)[k] !== undefined).sort().map(k => `${JSON.stringify(k)}:${canon((x as Record<string, unknown>)[k])}`).join(',')}}`;\n\nexport const strip = <T extends object>(o: T) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== null)) as T;\n\nexport const fnv = (bytes: Uint8Array, h = 0x811c9dc5) => {\n for (const b of bytes) h = Math.imul(h ^ b, 0x01000193) >>> 0;\n return h;\n};\n\nexport function parts(doc: Y.Doc) {\n const book = doc.getMap<unknown>('book');\n return {\n book, values: doc.getMap<Value>('values'), origin: doc.getMap<Origin>('origin'),\n order: book.get('order') as Y.Array<string>, sheets: book.get('sheets') as Y.Map<Y.Map<unknown>>, styles: book.get('styles') as Y.Map<IStyleData>,\n };\n}\n\nexport const pieces = (m: Y.Map<unknown>) => ({\n rows: m.get('rows') as Y.Array<string>, cols: m.get('cols') as Y.Array<string>, cells: m.get('cells') as Y.Map<Cell>,\n rowData: m.get('rowData') as Y.Map<Row>, colData: m.get('colData') as Y.Map<Col>, merges: m.get('merges') as Y.Map<number>, notes: m.get('notes') as Y.Map<Note>,\n});\n\nexport function made(config: Partial<IWorksheetData>, lines: Lines) {\n const m = new Y.Map<unknown>();\n for (const name of props) if (config[name] !== undefined) m.set(name, config[name]);\n m.set('look', strip({ defaultRowHeight: config.defaultRowHeight, defaultColumnWidth: config.defaultColumnWidth, zoomRatio: config.zoomRatio }));\n m.set('rows', Y.Array.from(lines.rows));\n m.set('cols', Y.Array.from(lines.cols));\n for (const name of ['cells', 'rowData', 'colData', 'merges', 'notes']) m.set(name, new Y.Map());\n return m;\n}\n\nexport function fill(doc: Y.Doc, model: SheetModel) {\n const { book: wb, lines } = model;\n const book = doc.getMap<unknown>('book');\n const notes = JSON.parse(wb.resources?.find(r => r.name === 'SHEET_NOTE_PLUGIN')?.data ?? '{}') as Record<string, Record<number, Record<number, Note>>>;\n doc.transact(() => {\n book.set('head', strip({ id: wb.id, name: wb.name, appVersion: wb.appVersion, locale: wb.locale, defaultStyle: wb.defaultStyle, dateSystem: wb.dateSystem }));\n book.set('extras', (wb.resources ?? []).filter(r => r.name !== 'SHEET_NOTE_PLUGIN'));\n book.set('active', model.active ?? null);\n book.set('styles', new Y.Map());\n book.set('order', Y.Array.from(wb.sheetOrder));\n book.set('sheets', new Y.Map());\n const { sheets, styles, values, origin } = parts(doc);\n for (const [id, look] of Object.entries(wb.styles)) if (look) styles.set(id, look);\n for (const sid of wb.sheetOrder) {\n const sheet = wb.sheets[sid];\n const l = lines[sid];\n sheets.set(sid, made(sheet, l));\n origin.set(sid, { id: model.origin.sheets[sid], name: sheet.name ?? '', rows: l.rows.length, cols: l.cols.length });\n const { cells, rowData, colData, merges, notes: kept } = pieces(sheets.get(sid)!);\n for (const [r, line] of Object.entries((sheet.cellData ?? {}) as Record<number, Record<number, ICellData>>)) for (const [c, x] of Object.entries(line ?? {})) {\n if (!x) continue;\n const at = spot(l.rows[+r], l.cols[+c]);\n const out: Cell = {};\n if (x.f) {\n out.f = x.f;\n values.set(`${sid}:${at}`, { v: x.v ?? null, t: x.t ?? null });\n } else {\n if (x.v !== undefined && x.v !== null) out.v = x.v;\n if (x.t) out.t = x.t;\n }\n if (x.p) out.p = x.p;\n if (typeof x.s === 'string') out.s = x.s;\n cells.set(at, out);\n }\n for (const [r, rd] of Object.entries(sheet.rowData ?? {})) if (rd) rowData.set(l.rows[+r], strip({ h: rd.h, hd: rd.hd, ia: rd.ia, s: typeof rd.s === 'string' ? rd.s : undefined }));\n for (const [c, cd] of Object.entries(sheet.columnData ?? {})) if (cd) colData.set(l.cols[+c], strip({ w: cd.w, hd: cd.hd, s: typeof cd.s === 'string' ? cd.s : undefined }));\n for (const b of sheet.mergeData ?? []) merges.set([l.rows[b.startRow], l.cols[b.startColumn], l.rows[b.endRow], l.cols[b.endColumn]].join(':'), 1);\n for (const [r, line] of Object.entries(notes[sid] ?? {})) for (const [c, n] of Object.entries(line)) kept.set(spot(l.rows[+r], l.cols[+c]), { note: n.note, width: n.width, height: n.height });\n }\n });\n}\n\nexport function sheetOf(doc: Y.Doc, sid: string, l: Lines): Partial<IWorksheetData> {\n const { sheets, values } = parts(doc);\n const m = sheets.get(sid)!;\n const { cells, rowData, colData, merges } = pieces(m);\n const rows = new Map(l.rows.map((id, i) => [id, i])), cols = new Map(l.cols.map((id, i) => [id, i]));\n const cellData: Record<number, Record<number, ICellData>> = {};\n for (const [at, x] of cells) {\n const [row, col] = at.split(':');\n const r = rows.get(row), c = cols.get(col);\n if (r === undefined || c === undefined) continue;\n const kept = x.f ? values.get(`${sid}:${at}`) : undefined;\n (cellData[r] ??= {})[c] = kept ? { ...x, v: kept.v, t: kept.t } : { ...x };\n }\n const rowsOut: Record<number, IRowData> = {}, colsOut: Record<number, IColumnData> = {};\n for (const [id, x] of rowData) if (rows.has(id)) rowsOut[rows.get(id)!] = { ...x };\n for (const [id, x] of colData) if (cols.has(id)) colsOut[cols.get(id)!] = { ...x };\n const mergeData = [...merges.keys()].map(k => k.split(':')).map(([r0, c0, r1, c1]) => ({ startRow: rows.get(r0)!, startColumn: cols.get(c0)!, endRow: rows.get(r1)!, endColumn: cols.get(c1)! }))\n .filter(b => [b.startRow, b.startColumn, b.endRow, b.endColumn].every(n => n !== undefined));\n const out: Partial<IWorksheetData> = { ...(m.get('look') as object), id: sid, rowCount: l.rows.length, columnCount: l.cols.length, cellData, rowData: rowsOut, columnData: colsOut, mergeData };\n for (const name of props) if (m.has(name)) Object.assign(out, { [name]: m.get(name) });\n return out;\n}\n\nexport const notesOf = (m: Y.Map<unknown>, l: Lines) => {\n const rows = new Map(l.rows.map((id, i) => [id, i])), cols = new Map(l.cols.map((id, i) => [id, i]));\n return [...pieces(m).notes].map(([at, n]) => ({ ...n, row: rows.get(at.split(':')[0]), col: cols.get(at.split(':')[1]) }))\n .filter((n): n is Note & { row: number; col: number } => n.row !== undefined && n.col !== undefined);\n};\n\nexport function build(doc: Y.Doc): SheetModel {\n const { book, order, sheets, styles, origin } = parts(doc);\n const sheetOrder = [...new Set(order.toArray())].filter(sid => sheets.has(sid));\n const wb = { ...(book.get('head') as object), styles: styles.toJSON(), sheetOrder, sheets: {}, resources: [] } as unknown as IWorkbookData;\n const model: SheetModel = { book: wb, lines: {}, origin: { sheets: {}, lines: {} } };\n const notes: Record<string, Record<number, Record<number, unknown>>> = {};\n for (const sid of sheetOrder) {\n const { rows, cols } = pieces(sheets.get(sid)!);\n const l = { rows: rows.toArray(), cols: cols.toArray() };\n model.lines[sid] = l;\n wb.sheets[sid] = sheetOf(doc, sid, l);\n notesOf(sheets.get(sid)!, l).forEach((n, i) => { ((notes[sid] ??= {})[n.row] ??= {})[n.col] = { ...n, show: false, id: `n${i}` }; });\n const o = origin.get(sid);\n if (!o) continue;\n model.origin.sheets[sid] = o.id;\n model.origin.lines[sid] = { rows: typeof o.rows === 'number' ? numbered('r', o.rows) : o.rows, cols: typeof o.cols === 'number' ? numbered('c', o.cols) : o.cols };\n }\n wb.resources!.push({ name: 'SHEET_NOTE_PLUGIN', data: JSON.stringify(notes) });\n const active = book.get('active') as string | null;\n if (active && sheetOrder.includes(active)) model.active = active;\n return model;\n}\n\nexport function extras(doc: Y.Doc, model: SheetModel) {\n const { book, origin } = parts(doc);\n const own = new Map([...origin.entries()].filter(([sid]) => model.lines[sid]).map(([sid, o]) => {\n const old = model.origin.lines[sid], now = model.lines[sid];\n return [`s${o.id}`, { sid, name: o.name, rows: new Axis(old.rows, now.rows), cols: new Axis(old.cols, now.cols) }];\n }));\n const fix = (b: Box, sid: string) => { const a = own.get(sid)!; return squeeze(b, a.rows.map, a.cols.map); };\n for (const r of book.get('extras') as Resource[]) {\n const parsed = JSON.parse(r.data) as Record<string, unknown>;\n let out: Record<string, unknown> = {};\n if (r.name === 'SHEET_DEFINED_NAME_PLUGIN') out = Object.fromEntries(Object.entries(parsed as Record<string, { formulaOrRefString: string; localSheetId: string }>).map(([id, n]) => {\n let f = n.formulaOrRefString;\n for (const a of own.values()) {\n f = remapped(f, s => s === a.name, a.rows.map, a.cols.map);\n if (a.name !== model.book.sheets[a.sid].name) f = renamed(f, a.name, model.book.sheets[a.sid].name!);\n }\n return [id, { ...n, formulaOrRefString: f, localSheetId: own.get(n.localSheetId)?.sid ?? n.localSheetId }];\n }));\n else for (const [base, x] of Object.entries(parsed)) {\n const a = own.get(base);\n if (!a) continue;\n if (r.name === 'SHEET_DATA_VALIDATION_PLUGIN') out[a.sid] = (x as { ranges: Box[] }[]).map(rule => ({ ...rule, ranges: rule.ranges.map(b => fix(b, base)).filter(Boolean) })).filter(rule => rule.ranges.length);\n else if (r.name === 'SHEET_FILTER_PLUGIN') {\n const f = x as { ref: Box; cachedFilteredOut?: number[] };\n const ref = fix(f.ref, base);\n if (ref) out[a.sid] = { ...f, ref: { ...f.ref, ...ref }, cachedFilteredOut: (f.cachedFilteredOut ?? []).map(a.rows.map).filter(n => n >= 0) };\n } else out[a.sid] = x;\n }\n model.book.resources!.push({ name: r.name, data: JSON.stringify(out) });\n }\n return model;\n}\n\nexport function settle(doc: Y.Doc, model: SheetModel, bytes: ArrayBuffer, kind: 'xlsx' | 'csv') {\n const { book, origin } = parts(doc);\n const ids = kind === 'csv' ? [] : worksheets(bytes);\n const saved = readSheet(bytes, kind);\n const back = new Map<string, string>();\n model.book.sheetOrder.forEach((sid, i) => {\n const id = ids[i] ?? i + 1;\n back.set(`s${id}`, sid);\n origin.set(sid, { id, name: model.book.sheets[sid].name ?? '', rows: model.lines[sid].rows, cols: model.lines[sid].cols });\n });\n for (const sid of [...origin.keys()]) if (!model.lines[sid]) origin.delete(sid);\n book.set('extras', (saved.book.resources ?? []).filter(r => r.name !== 'SHEET_NOTE_PLUGIN'));\n}\n\nexport function applyCells(doc: Y.Doc, list: { sheet: string; ref: string; value?: string | number | boolean | null; formula?: string }[], origin: unknown) {\n const { order, sheets, values } = parts(doc);\n let done = 0;\n doc.transact(() => {\n for (const x of list) {\n const sid = order.toArray().find(id => sheets.get(id)?.get('name') === x.sheet);\n const [r, c] = cell(x.ref);\n if (!sid || r < 0) continue;\n const { rows, cols, cells } = pieces(sheets.get(sid)!);\n if (r >= rows.length || c >= cols.length) continue;\n const at = spot(rows.get(r), cols.get(c));\n const next: Cell = {};\n if (x.formula !== undefined) next.f = x.formula.startsWith('=') ? x.formula : `=${x.formula}`;\n else if (typeof x.value === 'boolean') Object.assign(next, { v: x.value ? 1 : 0, t: 3 });\n else if (x.value !== undefined && x.value !== null && x.value !== '') Object.assign(next, { v: x.value, t: typeof x.value === 'number' ? 2 : 1 });\n const s = cells.get(at)?.s;\n if (s) next.s = s;\n values.delete(`${sid}:${at}`);\n if (Object.keys(next).length) cells.set(at, next);\n else cells.delete(at);\n done++;\n }\n }, origin);\n return done;\n}\n","import type { Language } from '../types';\n\nconst en = {\n tools: 'Sheet tools', loading: 'Opening the sheet', failed: 'This sheet could not be opened', retry: 'Try again',\n undo: 'Undo', redo: 'Redo', bold: 'Bold', italic: 'Italic', underline: 'Underline', strike: 'Strike out',\n textColour: 'Text colour', fill: 'Fill colour', automatic: 'Automatic', noFill: 'No fill',\n borders: 'Borders', borderAll: 'All borders', borderOuter: 'Outer border', borderBottom: 'Bottom border', borderNone: 'No borders',\n alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', wrap: 'Wrap text', merge: 'Merge cells', unmerge: 'Split cells',\n format: 'Number format', general: 'General', number: 'Number', percent: 'Percent', currency: 'Currency', date: 'Date', time: 'Time', text: 'Text',\n rowAbove: 'Row above', rowBelow: 'Row below', columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRows: 'Delete rows', deleteColumns: 'Delete columns',\n freeze: 'Freeze', freezeNone: 'Unfreeze', freezeRow: 'First row', freezeColumn: 'First column', freezeHere: 'Up to the selected cell',\n sortUp: 'Sort A to Z', sortDown: 'Sort Z to A', filter: 'Filter', find: 'Find and replace', note: 'Note',\n save: 'Save', saving: 'Saving', saved: 'Saved', saveFailed: 'Could not save', editedNote: 'Sheet edited',\n viewOnly: 'View only', notesOnly: 'You can add notes',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this sheet', you: 'you',\n refused: {\n chartSource: 'A chart on another sheet uses data from “{sheet}”. Bring that sheet back to save.',\n pivotSheet: 'A pivot table reads its data from “{sheet}”. Bring that sheet back to save.',\n tableColumns: 'Columns changed inside a table on “{sheet}”. Undo that change to save.',\n },\n};\n\nexport type SheetText = typeof en;\n\nconst pl: SheetText = {\n tools: 'Narzędzia arkusza', loading: 'Otwieranie arkusza', failed: 'Nie udało się otworzyć tego arkusza', retry: 'Spróbuj ponownie',\n undo: 'Cofnij', redo: 'Ponów', bold: 'Pogrubienie', italic: 'Kursywa', underline: 'Podkreślenie', strike: 'Przekreślenie',\n textColour: 'Kolor tekstu', fill: 'Kolor wypełnienia', automatic: 'Automatyczny', noFill: 'Bez wypełnienia',\n borders: 'Obramowanie', borderAll: 'Wszystkie krawędzie', borderOuter: 'Krawędzie zewnętrzne', borderBottom: 'Dolna krawędź', borderNone: 'Bez krawędzi',\n alignLeft: 'Do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Do prawej', wrap: 'Zawijaj tekst', merge: 'Scal komórki', unmerge: 'Rozdziel komórki',\n format: 'Format liczb', general: 'Ogólny', number: 'Liczba', percent: 'Procent', currency: 'Waluta', date: 'Data', time: 'Godzina', text: 'Tekst',\n rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej', columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRows: 'Usuń wiersze', deleteColumns: 'Usuń kolumny',\n freeze: 'Zablokuj', freezeNone: 'Odblokuj', freezeRow: 'Pierwszy wiersz', freezeColumn: 'Pierwsza kolumna', freezeHere: 'Do zaznaczonej komórki',\n sortUp: 'Sortuj od A do Z', sortDown: 'Sortuj od Z do A', filter: 'Filtr', find: 'Znajdź i zamień', note: 'Notatka',\n save: 'Zapisz', saving: 'Zapisywanie', saved: 'Zapisano', saveFailed: 'Nie udało się zapisać', editedNote: 'Edycja arkusza',\n viewOnly: 'Tylko podgląd', notesOnly: 'Możesz dodawać notatki',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym arkuszu', you: 'ty',\n refused: {\n chartSource: 'Wykres na innym arkuszu korzysta z danych arkusza „{sheet}”. Przywróć ten arkusz, aby zapisać.',\n pivotSheet: 'Tabela przestawna pobiera dane z arkusza „{sheet}”. Przywróć ten arkusz, aby zapisać.',\n tableColumns: 'Kolumny zmieniły się wewnątrz tabeli na arkuszu „{sheet}”. Cofnij tę zmianę, aby zapisać.',\n },\n};\n\nconst uk: SheetText = {\n tools: 'Інструменти таблиці', loading: 'Відкриваємо таблицю', failed: 'Не вдалося відкрити цю таблицю', retry: 'Спробувати ще',\n undo: 'Відмінити', redo: 'Повторити', bold: 'Жирний', italic: 'Курсив', underline: 'Підкреслений', strike: 'Закреслений',\n textColour: 'Колір тексту', fill: 'Колір заливки', automatic: 'Автоматичний', noFill: 'Без заливки',\n borders: 'Межі', borderAll: 'Усі межі', borderOuter: 'Зовнішні межі', borderBottom: 'Нижня межа', borderNone: 'Без меж',\n alignLeft: 'Ліворуч', alignCenter: 'По центру', alignRight: 'Праворуч', wrap: 'Переносити текст', merge: 'Об’єднати клітинки', unmerge: 'Роз’єднати клітинки',\n format: 'Формат чисел', general: 'Загальний', number: 'Число', percent: 'Відсоток', currency: 'Валюта', date: 'Дата', time: 'Час', text: 'Текст',\n rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче', columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRows: 'Видалити рядки', deleteColumns: 'Видалити стовпці',\n freeze: 'Закріпити', freezeNone: 'Відкріпити', freezeRow: 'Перший рядок', freezeColumn: 'Перший стовпець', freezeHere: 'До виділеної клітинки',\n sortUp: 'Сортувати від А до Я', sortDown: 'Сортувати від Я до А', filter: 'Фільтр', find: 'Знайти й замінити', note: 'Примітка',\n save: 'Зберегти', saving: 'Збереження', saved: 'Збережено', saveFailed: 'Не вдалося зберегти', editedNote: 'Правка таблиці',\n viewOnly: 'Лише перегляд', notesOnly: 'Можна додавати примітки',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цій таблиці', you: 'ви',\n refused: {\n chartSource: 'Діаграма на іншому аркуші бере дані з аркуша «{sheet}». Поверніть цей аркуш, щоб зберегти.',\n pivotSheet: 'Зведена таблиця бере дані з аркуша «{sheet}». Поверніть цей аркуш, щоб зберегти.',\n tableColumns: 'Стовпці змінилися всередині таблиці на аркуші «{sheet}». Відмініть цю зміну, щоб зберегти.',\n },\n};\n\nexport const sheetTexts: Record<Language, SheetText> = { en, pl, uk };\n","import { getSchema, type JSONContent } from '@tiptap/core';\nimport type { Node, Schema } from '@tiptap/pm/model';\nimport { Transform } from '@tiptap/pm/transform';\nimport { prosemirrorJSONToYXmlFragment, updateYFragment, yXmlFragmentToProseMirrorRootNode } from '@tiptap/y-tiptap';\nimport * as Y from 'yjs';\nimport { version } from '../package.json';\nimport { readDocx, writeDocx, type Img } from './docx';\nimport { kit } from './editor/extensions';\nimport { fromMarkdown, toMarkdown, track } from './editor/markdown';\nimport { readSheet, writeSheet } from './sheets/book';\nimport { build, fill, fnv, settle } from './sheets/shared';\nimport { sheetTexts } from './sheets/text';\nimport { texts } from './text';\nimport type { Language } from './types';\n\nexport { applyCells } from './sheets/shared';\n\nexport type Kind = 'markdown' | 'docx' | 'xlsx' | 'csv';\nexport type Prose = 'markdown' | 'docx';\nexport type Author = { id: string; name: string; language: Language };\nexport type Saved = { bytes: ArrayBuffer; version: string | null };\n\nexport const ours = 'w100n-collab';\n\nconst schemas = new Map<Prose, Schema>();\nconst schemaOf = (kind: Prose) => schemas.get(kind) ?? schemas.set(kind, getSchema(kit(kind, texts.en))).get(kind)!;\n\nexport const parse = async (kind: Prose, bytes: ArrayBuffer): Promise<JSONContent> =>\n kind === 'docx' ? (await readDocx(bytes)).doc : fromMarkdown(new TextDecoder().decode(bytes)).doc;\n\nexport const edits = (tr: Y.Transaction) => tr.changedParentTypes.has(tr.doc.get('default')) || tr.changedParentTypes.has(tr.doc.get('book'));\n\nexport const filled = (doc: Y.Doc) => doc.getXmlFragment('default').length > 0 || doc.getMap('book').size > 0;\n\nexport function seed(doc: Y.Doc, kind: Kind, bytes: ArrayBuffer, json?: JSONContent) {\n if (filled(doc)) return false;\n const fixed = new Y.Doc();\n fixed.clientID = fnv(new Uint8Array(bytes), fnv(new TextEncoder().encode(`${version}:${kind}`)));\n if (kind === 'xlsx' || kind === 'csv') fill(fixed, readSheet(bytes, kind));\n else prosemirrorJSONToYXmlFragment(schemaOf(kind), json!, fixed.getXmlFragment('default'));\n Y.applyUpdate(doc, Y.encodeStateAsUpdate(fixed), ours);\n return true;\n}\n\nexport function follow(doc: Y.Doc, author: (origin: unknown) => Author | null) {\n const editors = doc.getMap<Author>('editors');\n const before = (tr: Y.Transaction) => tr.meta.set('fresh', !filled(doc));\n const after = (tr: Y.Transaction) => {\n const who = !tr.meta.get('fresh') && edits(tr) ? author(tr.origin) : null;\n if (who && !editors.has(who.id)) doc.transact(() => editors.set(who.id, who), ours);\n };\n doc.on('beforeTransaction', before);\n doc.on('afterTransaction', after);\n return () => {\n doc.off('beforeTransaction', before);\n doc.off('afterTransaction', after);\n };\n}\n\nexport const pending = (doc: Y.Doc) => doc.getMap<Author>('editors').size > 0;\n\nexport class Refusal extends Error {}\n\nexport function applyText(doc: Y.Doc, kind: Prose, changes: { find: string; replace: string }[], origin: unknown) {\n const schema = schemaOf(kind);\n const fragment = doc.getXmlFragment('default');\n const step = new Transform(yXmlFragmentToProseMirrorRootNode(fragment, schema));\n for (const c of changes) {\n const hits: number[] = [];\n step.doc.descendants((node, pos) => {\n if (!node.isTextblock) return true;\n const text = node.textBetween(0, node.content.size, undefined, '\\ufffc');\n for (let i = text.indexOf(c.find); c.find && i >= 0; i = text.indexOf(c.find, i + 1)) hits.push(pos + 1 + i);\n return false;\n });\n if (hits.length !== 1) throw new Refusal(`${hits.length ? 'more than once' : 'not'} in the document: ${c.find.slice(0, 80)}`);\n const [at] = hits;\n if (c.replace) step.replaceWith(at, at + c.find.length, schema.text(c.replace, step.doc.resolve(at + 1).marks()));\n else step.delete(at, at + c.find.length);\n }\n updateYFragment({ transact: run => doc.transact(run, origin) }, fragment, step.doc, { mapping: new Map(), isOMark: new Map() });\n return changes.length;\n}\n\nasync function write(kind: Prose, base: ArrayBuffer, node: Node, load?: (src: string) => Promise<Img>) {\n if (kind === 'docx') return writeDocx(base, node.toJSON(), load);\n const parsed = fromMarkdown(new TextDecoder().decode(base));\n return new TextEncoder().encode(toMarkdown(node, track(parsed, node.type.schema.nodeFromJSON(parsed.doc))).text).buffer as ArrayBuffer;\n}\n\nconst blocks = (fragment: Y.XmlFragment, schema: Schema) => {\n const out: Y.XmlElement[] = [];\n const walk = (parent: Y.XmlFragment) => parent.toArray().forEach(child => {\n if (!(child instanceof Y.XmlElement) || !schema.nodes[child.nodeName]?.isBlock) return;\n out.push(child);\n walk(child);\n });\n walk(fragment);\n return out;\n};\n\nconst same = (a: ArrayBuffer, b: ArrayBuffer) => {\n const [x, y] = [new Uint8Array(a), new Uint8Array(b)];\n return x.length === y.length && x.every((v, i) => v === y[i]);\n};\n\nconst named = (label: string, who: Author[]) => {\n const names = who.map(w => w.name).join(', ');\n return `${label}: ${names.length > 180 ? `${names.slice(0, 177)}...` : names}`;\n};\n\nexport async function save(doc: Y.Doc, kind: Kind, base: ArrayBuffer, put: (bytes: ArrayBuffer, note: string) => Promise<string>, load?: (src: string) => Promise<Img>, note?: string): Promise<Saved | null> {\n const editors = doc.getMap<Author>('editors');\n const who = [...editors.values()];\n if (!who.length) return null;\n if (kind === 'xlsx' || kind === 'csv') return workbook(doc, kind, base, put, who, note);\n const schema = schemaOf(kind);\n const fragment = doc.getXmlFragment('default');\n const list = blocks(fragment, schema);\n const node = yXmlFragmentToProseMirrorRootNode(fragment, schema);\n let touched = false;\n const watch = (tr: Y.Transaction) => { touched ||= tr.origin !== ours && edits(tr); };\n doc.on('afterTransaction', watch);\n try {\n const bytes = await write(kind, base, node, load);\n const changed = !same(bytes, base);\n const id = changed ? await put(bytes, note ?? named((texts[who[0].language] ?? texts.en).editedNote, who)) : null;\n const refs: [string, string | null][] = [];\n if (changed) schema.nodeFromJSON(await parse(kind, bytes)).descendants(n => { if (n.isBlock) refs.push([n.type.name, n.attrs.ref ?? null]); });\n doc.transact(() => {\n if (refs.length === list.length && list.every((el, i) => el.nodeName === refs[i][0])) list.forEach((el, i) => {\n const ref = refs[i][1];\n if ((el.getAttribute('ref') ?? null) === ref) return;\n if (ref === null) el.removeAttribute('ref');\n else el.setAttribute('ref', ref);\n });\n if (id) doc.getMap('meta').set('version', id);\n if (!touched) who.forEach(w => editors.delete(w.id));\n }, ours);\n return { bytes: changed ? bytes : base, version: id };\n } finally {\n doc.off('afterTransaction', watch);\n }\n}\n\nasync function workbook(doc: Y.Doc, kind: 'xlsx' | 'csv', base: ArrayBuffer, put: (bytes: ArrayBuffer, note: string) => Promise<string>, who: Author[], note?: string): Promise<Saved> {\n const editors = doc.getMap<Author>('editors');\n const model = build(doc);\n let touched = false;\n const watch = (tr: Y.Transaction) => { touched ||= tr.origin !== ours && edits(tr); };\n doc.on('afterTransaction', watch);\n try {\n const bytes = writeSheet(base, model, kind);\n const changed = !same(bytes, base);\n const id = changed ? await put(bytes, note ?? named((sheetTexts[who[0].language] ?? sheetTexts.en).editedNote, who)) : null;\n doc.transact(() => {\n if (changed) settle(doc, model, bytes, kind);\n if (id) doc.getMap('meta').set('version', id);\n if (!touched) who.forEach(w => editors.delete(w.id));\n }, ours);\n return { bytes: changed ? bytes : base, version: id };\n } finally {\n doc.off('afterTransaction', watch);\n }\n}\n","import { applyAwarenessUpdate, Awareness, encodeAwarenessUpdate, removeAwarenessStates } from 'y-protocols/awareness';\nimport * as Y from 'yjs';\nimport { follow, pending, save, type Author, type Kind } from './collab';\nimport type { DocumentsHost } from './types';\n\ntype Room = { doc: Y.Doc; links: Set<Link>; base: ArrayBuffer | null; busy: Promise<unknown> };\ntype Listener = (payload: never) => void;\n\nexport const rooms = new Map<string, Room>();\n\nexport class Link {\n awareness: Awareness;\n isSynced = false;\n unsyncedChanges = 0;\n authorizedScope: 'read-write' | 'readonly';\n private room: Room;\n private live = false;\n private stop: () => void;\n private events = new Map<string, Set<Listener>>();\n\n constructor(key: string, private id: string, private kind: Kind, readonly document: Y.Doc, private host: DocumentsHost, readonly author: Author, edit: boolean) {\n this.awareness = new Awareness(document);\n this.authorizedScope = edit ? 'read-write' : 'readonly';\n if (!rooms.has(key)) rooms.set(key, { doc: new Y.Doc(), links: new Set(), base: null, busy: Promise.resolve() });\n this.room = rooms.get(key)!;\n this.room.links.add(this);\n this.stop = follow(this.room.doc, origin => origin === this && edit ? this.author : null);\n document.on('update', this.local);\n this.awareness.on('update', this.presence);\n this.room.doc.on('update', this.remote);\n queueMicrotask(() => this.online(true));\n }\n\n on(name: string, fn: Listener) {\n if (!this.events.has(name)) this.events.set(name, new Set());\n this.events.get(name)!.add(fn);\n }\n\n off(name: string, fn: Listener) {\n this.events.get(name)?.delete(fn);\n }\n\n private emit(name: string, payload: unknown) {\n this.events.get(name)?.forEach(fn => (fn as (p: unknown) => void)(payload));\n }\n\n private peers = () => [...this.room.links].filter(l => l !== this && l.live);\n\n online(on: boolean) {\n if (on === this.live || !this.room.links.has(this)) return;\n this.live = on;\n if (on) {\n Y.applyUpdate(this.document, Y.encodeStateAsUpdate(this.room.doc, Y.encodeStateVector(this.document)), this.room);\n if (this.authorizedScope === 'read-write') Y.applyUpdate(this.room.doc, Y.encodeStateAsUpdate(this.document, Y.encodeStateVector(this.room.doc)), this);\n for (const peer of this.peers()) {\n applyAwarenessUpdate(this.awareness, encodeAwarenessUpdate(peer.awareness, [peer.awareness.clientID]), this.room);\n applyAwarenessUpdate(peer.awareness, encodeAwarenessUpdate(this.awareness, [this.awareness.clientID]), this.room);\n }\n this.isSynced = true;\n } else for (const peer of this.peers()) removeAwarenessStates(peer.awareness, [this.awareness.clientID], this.room);\n this.emit('status', { status: on ? 'connected' : 'disconnected' });\n if (on) this.emit('synced', { state: true });\n }\n\n private local = (update: Uint8Array, origin: unknown) => {\n if (this.live && origin !== this.room && this.authorizedScope === 'read-write') Y.applyUpdate(this.room.doc, update, this);\n };\n\n private remote = (update: Uint8Array, origin: unknown) => {\n if (this.live && origin !== this) Y.applyUpdate(this.document, update, this.room);\n };\n\n private presence = ({ added, updated, removed }: { added: number[]; updated: number[]; removed: number[] }, origin: unknown) => {\n if (!this.live || origin === this.room) return;\n const update = encodeAwarenessUpdate(this.awareness, [...added, ...updated, ...removed]);\n for (const peer of this.peers()) applyAwarenessUpdate(peer.awareness, update, this.room);\n };\n\n private store() {\n const room = this.room;\n const run = room.busy.then(async () => {\n const done = await save(room.doc, this.kind, room.base ?? await this.host.content(this.id), async (bytes, note) => (await this.host.save!(this.id, bytes, note)).versionId);\n if (done) room.base = done.bytes;\n return done;\n });\n room.busy = run.catch(() => null);\n return run;\n }\n\n sendStateless(payload: string) {\n if (!this.live || this.authorizedScope !== 'read-write' || !(JSON.parse(payload) as { save?: boolean }).save) return;\n this.store().then(\n done => this.emit('stateless', { payload: JSON.stringify({ saved: done?.version ?? null }) }),\n () => this.emit('stateless', { payload: JSON.stringify({ failed: true }) }),\n );\n }\n\n destroy() {\n this.online(false);\n this.room.links.delete(this);\n this.stop();\n this.document.off('update', this.local);\n this.awareness.off('update', this.presence);\n this.room.doc.off('update', this.remote);\n this.awareness.destroy();\n if (!this.room.links.size && pending(this.room.doc) && this.authorizedScope === 'read-write') this.store().catch(() => null);\n }\n}\n","import { HocuspocusProvider } from '@hocuspocus/provider';\nimport type { JSONContent } from '@tiptap/core';\nimport { useEffect, useRef, useState } from 'react';\nimport type { Awareness } from 'y-protocols/awareness';\nimport * as Y from 'yjs';\nimport { filled, seed, type Kind } from '../collab';\nimport { Link } from '../room';\nimport type { DocumentsHost, Language, Person } from '../types';\n\ntype Peer = Person & { color: string; me: boolean; selection?: { sheet: string; range: string } };\n\ntype Wire = {\n awareness: Awareness | null;\n isSynced: boolean;\n unsyncedChanges: number;\n on(name: string, fn: (payload: never) => void): unknown;\n off(name: string, fn: (payload: never) => void): unknown;\n sendStateless(payload: string): void;\n destroy(): void;\n};\n\ntype State = { synced: boolean; ready: boolean; online: boolean; late: boolean; denied: boolean; readonly: boolean; people: Peer[]; pending: boolean; unsynced: boolean };\n\nconst colors = ['#1d4ed8', '#be185d', '#15803d', '#c2410c', '#6d28d9', '#0e7490', '#a16207', '#b91c1c'];\nconst colorOf = (id: string) => colors[[...id].reduce((h, c) => (Math.imul(h, 31) + c.charCodeAt(0)) >>> 0, 7) % colors.length];\n\nconst idle: State = { synced: false, ready: false, online: false, late: false, denied: false, readonly: false, people: [], pending: false, unsynced: false };\n\nexport function useLive(host: DocumentsHost | undefined, id: string, kind: Kind, bytes: ArrayBuffer, json: JSONContent | undefined, language: Language, edit: boolean, onSaved?: () => void) {\n const url = host?.collab?.url;\n const owner = useRef(host);\n const [wire, setWire] = useState<{ doc: Y.Doc; link: Wire; user: Record<string, string> } | null>(null);\n const [state, setState] = useState(idle);\n const waiting = useRef<((ok: boolean) => void) | null>(null);\n const saved = useRef(onSaved);\n\n useEffect(() => {\n owner.current = host;\n saved.current = onSaved;\n });\n\n useEffect(() => {\n const host = owner.current;\n if (!host?.collab || !url) return;\n const doc = new Y.Doc();\n const me = host.me;\n const user = { id: me.id, name: me.name, avatar: me.avatarUrl ?? '', color: colorOf(me.id) };\n const wire = new URL(url, location.href);\n wire.protocol = wire.protocol.replace('http', 'ws');\n wire.searchParams.set('lang', language);\n const link: Wire = url.startsWith('memory:')\n ? new Link(`${url}\\n${id}`, id, kind, doc, host, { id: me.id, name: me.name, language }, edit)\n : new HocuspocusProvider({ url: wire.href, name: id, document: doc, token: () => owner.current!.collab!.token() });\n const set = (next: Partial<State>) => setState(s => ({ ...s, ...next }));\n const editors = doc.getMap('editors');\n const meta = doc.getMap('meta');\n const people = () => {\n const seen = new Map<string, Peer>();\n link.awareness?.getStates().forEach((s, client) => {\n const u = s.user as { id?: string; name?: string; avatar?: string; color?: string } | undefined;\n if (u?.id && u.name && !seen.has(u.id)) seen.set(u.id, { id: u.id, name: u.name, avatarUrl: u.avatar || null, color: u.color ?? colorOf(u.id), me: client === doc.clientID, selection: s.selection });\n });\n set({ people: [...seen.values()] });\n };\n const on = <T,>(name: string, fn: (payload: T) => void) => link.on(name, fn as (payload: never) => void);\n on<{ state: boolean }>('synced', ({ state }) => { if (state) set({ synced: true, online: true }); });\n on<{ status: string }>('status', ({ status }) => set({ online: status === 'connected' && link.isSynced }));\n on<{ scope: string }>('authenticated', ({ scope }) => set({ readonly: scope === 'readonly' }));\n on('authenticationFailed', () => set({ denied: true }));\n on<{ number: number }>('unsyncedChanges', ({ number }) => set({ unsynced: number > 0 }));\n on<{ payload: string }>('stateless', ({ payload }) => {\n const reply = JSON.parse(payload) as { saved?: string | null; failed?: boolean };\n if (!('saved' in reply) && !reply.failed) return;\n waiting.current?.(!reply.failed);\n waiting.current = null;\n });\n link.awareness?.on('change', people);\n editors.observe(() => set({ pending: editors.size > 0 }));\n meta.observe(e => { if (e.keysChanged.has('version')) saved.current?.(); });\n const late = setTimeout(() => set({ late: true }), 4000);\n setWire({ doc, link, user });\n return () => {\n clearTimeout(late);\n waiting.current?.(false);\n link.destroy();\n doc.destroy();\n setWire(null);\n setState(idle);\n };\n }, [url, id, kind, edit, language]);\n\n useEffect(() => {\n if (!wire || !state.synced || state.ready) return;\n if (filled(wire.doc) || ((json || kind === 'xlsx' || kind === 'csv') && seed(wire.doc, kind, bytes, json))) setState(s => ({ ...s, ready: true }));\n }, [wire, state.synced, state.ready, json, bytes, kind]);\n\n const save = () => new Promise<boolean>(done => {\n if (!wire) return done(false);\n waiting.current?.(false);\n waiting.current = done;\n wire.link.sendStateless(JSON.stringify({ save: true }));\n setTimeout(() => { if (waiting.current === done) { waiting.current = null; done(false); } }, 30000);\n });\n\n return url ? { ...state, wire, save } : null;\n}\n","import type { JSONContent } from '@tiptap/core';\nimport type { Node as Block } from '@tiptap/pm/model';\nimport { EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport {\n AlignCenter, AlignJustify, AlignLeft, AlignRight, Baseline, BetweenHorizontalEnd, BetweenHorizontalStart, BetweenVerticalEnd, BetweenVerticalStart, Bold, Check,\n CheckCheck, ChevronDown, Code, FilePenLine, Highlighter, ImagePlus, Italic, Link, Link2Off, List, ListChecks, ListIndentDecrease, ListIndentIncrease, ListOrdered, ListTree,\n Maximize2, MessageSquarePlus, MessagesSquare, Minus, MoveHorizontal, PanelTop, Pencil, Plus, Redo2, RemoveFormatting, Reply, RotateCcw, Save, SeparatorHorizontal, Strikethrough, Table,\n TableCellsMerge, TableColumnsSplit, TableOfContents, TableRowsSplit, Trash2, Underline, Undo2, WifiOff, X, type LucideIcon,\n} from 'lucide-react';\nimport { Fragment, useEffect, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { readDocx, writeDocx } from '../docx';\nimport { rove, useRestore } from '../focus';\nimport type { Text } from '../text';\nimport type { Comment, DocumentsHost, Language, Rights } from '../types';\nimport type { Guard } from '../Unsaved';\nimport { useLoad } from '../useLoad';\nimport DocxView from '../viewers/DocxView';\nimport type { Heading } from '../viewers/headings';\nimport { align, changes, clear, decide, entries, indent, kit, locate, notes, suggesting, type Change } from './extensions';\nimport { useLive } from './live';\nimport { fromMarkdown, toMarkdown, track, type Base } from './markdown';\nimport { a4, letter, paging, type Page } from './pager';\n\ntype Tab = 'home' | 'insert' | 'layout' | 'refs' | 'review' | 'view';\ntype Pop = 'style' | 'color' | 'mark' | 'table' | 'link' | 'image' | null;\n\nconst inks = ['#0f172a', '#475569', '#dc2626', '#ea580c', '#ca8a04', '#16a34a', '#0891b2', '#2563eb', '#7c3aed', '#db2777'];\nconst glows = ['#fef08a', '#bbf7d0', '#bfdbfe', '#fbcfe8', '#fed7aa', '#ddd6fe'];\nconst uid = () => Math.random().toString(36).slice(2, 10);\n\nexport default function TextEditor({ kind, bytes, t, language, rights, host, together, documentId, onSaved, onOutline, onPanel, slot, guard }: {\n kind: 'markdown' | 'docx'; bytes: ArrayBuffer; t: Text; language: Language; rights?: Rights; host?: DocumentsHost; together?: boolean; documentId: string;\n onSaved?: () => void; onOutline: (headings: Heading[]) => void; onPanel?: (tab: 'outline' | 'comments') => void; slot: HTMLElement | null; guard?: Guard;\n}) {\n const docx = kind === 'docx';\n const can = { edit: !!host?.save && !!rights?.edit, comment: !!host?.comment && !!rights && (rights.comment || rights.edit) };\n const source = useLoad(async () => {\n if (docx) return { ...await readDocx(bytes), md: null };\n const md = fromMarkdown(new TextDecoder().decode(bytes));\n return { doc: md.doc, md, styles: [], page: a4 };\n }, [bytes, kind]);\n const live = useLive(together ? host : undefined, documentId, kind, bytes, source.data?.doc, language, can.edit, onSaved);\n const shared = live?.ready ? live.wire : null;\n if (live?.readonly) can.edit = false;\n const baseline = useRef<{ bytes: ArrayBuffer; doc: Block; base: Base | null } | null>(null);\n const anchors = useRef(new Map<string, string>());\n const scroller = useRef<HTMLDivElement>(null);\n const [tab, setTab] = useState<Tab>(can.edit ? 'home' : can.comment ? 'review' : 'view');\n const [pop, setPop] = useState<Pop>(null);\n const [zoom, setZoom] = useState<number | null>(null);\n const [layout, setLayout] = useState<Page | null>(null);\n const [room, setRoom] = useState(0);\n const [saving, setSaving] = useState<'idle' | 'busy' | 'done' | 'failed'>('idle');\n const [href, setHref] = useState('');\n const [grid, setGrid] = useState({ rows: 0, cols: 0 });\n const [draft, setDraft] = useState<{ quote: string; body: string } | null>(null);\n const [reply, setReply] = useState<{ id: string; body: string } | null>(null);\n const [active, setActive] = useState<string | null>(null);\n const [resolved, setResolved] = useState(false);\n const [posting, setPosting] = useState<'idle' | 'busy' | 'failed'>('idle');\n const [added, setAdded] = useState<Comment[]>([]);\n const [changed, setChanged] = useState<Record<string, Comment | null>>({});\n const [editing, setEditing] = useState<{ id: string; body: string } | null>(null);\n const [dropping, setDropping] = useState<string | null>(null);\n const [failed, setFailed] = useState(false);\n useRestore(pop !== null);\n useRestore(editing !== null);\n useRestore(dropping !== null);\n\n const editor = useEditor({\n extensions: kit(kind, t, shared),\n content: shared ? null : source.data?.doc ?? null,\n editable: can.edit && (!live || !!shared),\n immediatelyRender: true,\n shouldRerenderOnTransaction: false,\n editorProps: { attributes: { class: 'w100n-docs-prose w100n-text-body', 'aria-label': t.documentText } },\n onCreate: ({ editor: made }) => {\n if (source.data && !live) baseline.current = { bytes, doc: made.state.doc, base: source.data.md && track(source.data.md, made.state.doc) };\n },\n }, [source.data, can.edit, shared]);\n\n const state = useEditorState({\n editor,\n selector: ({ editor: e }) => {\n if (!e) return null;\n const { $from, empty } = e.state.selection;\n const block = $from.parent;\n return {\n style: e.isActive('codeBlock') ? 'code' : block.type.name === 'heading' ? `h${block.attrs.level}` : e.isActive('blockquote') ? 'quote' : 'normal',\n bold: e.isActive('bold'), italic: e.isActive('italic'), underline: e.isActive('underline'), strike: e.isActive('strike'), code: e.isActive('code'),\n bullets: e.isActive('bulletList'), numbers: e.isActive('orderedList'), tasks: e.isActive('taskList'),\n align: (block.attrs.align as string | null) ?? 'left', table: e.isActive('table'), link: e.isActive('link'),\n color: (e.getAttributes('textStyle').color as string | undefined) ?? null, glow: e.isActive('highlight'),\n undo: e.can().undo(), redo: e.can().redo(), empty,\n toc: (() => { let at = -1; e.state.doc.forEach((node, pos) => { if (at < 0 && node.type.name === 'toc') at = pos; }); return at; })(),\n suggest: !!suggesting.getState(e.state)?.on, revs: docx ? changes(e.state.doc) : [],\n dirty: !!baseline.current && !e.state.doc.eq(baseline.current.doc),\n };\n },\n });\n\n const page = layout ?? source.data?.page ?? a4;\n useEffect(() => {\n if (editor && docx && source.data) editor.view.dispatch(editor.state.tr.setMeta(paging, { page }));\n }, [editor, source.data, page]);\n\n const loaded = useLoad(signal => host?.comments ? host.comments(documentId, { signal }) : Promise.resolve([]), [host, documentId]);\n const all = [...(loaded.data ?? []), ...added].flatMap(c => c.id in changed ? changed[c.id] ?? [] : [c]).filter(c => !c.replyTo || changed[c.replyTo] !== null);\n const open = all.filter(c => !c.replyTo && !c.resolved);\n const threads = all.filter(c => !c.replyTo && (resolved || !c.resolved)).sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n const openIds = open.map(c => c.id).join();\n\n useEffect(() => {\n if (!editor || !source.data) return;\n const have = new Map(notes.getState(editor.state)!.spots.map(s => [s.id, s]));\n const fresh = open.filter(c => !have.has(c.id));\n const found = locate(editor.state.doc, fresh.map(c => ({ id: c.id, quote: c.quote, anchor: anchors.current.get(c.id) })));\n editor.view.dispatch(editor.state.tr.setMeta(notes, { spots: [...open.flatMap(c => have.get(c.id) ?? []), ...found] }));\n }, [editor, source.data, openIds]);\n\n useEffect(() => {\n if (editor && source.data) editor.view.dispatch(editor.state.tr.setMeta(notes, { active }));\n }, [editor, source.data, active]);\n\n useEffect(() => {\n if (!editor || !source.data) return;\n let timer = 0;\n let last = '';\n const run = () => {\n const list: Heading[] = [];\n editor.state.doc.forEach((node, offset) => {\n if (node.type.name !== 'heading' || !node.textContent.trim()) return;\n list.push({ id: `h${offset}`, level: Math.min(3, node.attrs.level), text: node.textContent.trim(), go: () => {\n (editor.view.nodeDOM(offset) as HTMLElement | null)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n editor.commands.setTextSelection(offset + 1);\n } });\n });\n const key = JSON.stringify(list.map(h => [h.id, h.level, h.text]));\n if (key === last) return;\n last = key;\n onOutline(list);\n };\n const later = () => { clearTimeout(timer); timer = window.setTimeout(run, 300); };\n run();\n editor.on('update', later);\n return () => { clearTimeout(timer); editor.off('update', later); };\n }, [editor, source.data, onOutline]);\n\n const dirty = live ? live.pending : !!state?.dirty;\n const unsent = live ? live.unsynced && can.edit : dirty;\n useEffect(() => {\n if (!guard || live || !dirty || !source.data || !editor) return;\n guard.current = save;\n return () => { guard.current = null; };\n });\n useEffect(() => {\n if (!unsent) return;\n const stop = (e: BeforeUnloadEvent) => e.preventDefault();\n window.addEventListener('beforeunload', stop);\n return () => window.removeEventListener('beforeunload', stop);\n }, [unsent]);\n\n useEffect(() => {\n const el = scroller.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n const watch = new ResizeObserver(() => setRoom(el.clientWidth));\n watch.observe(el);\n return () => watch.disconnect();\n }, [editor, source.data]);\n\n useEffect(() => {\n if (!pop) return;\n const close = (e: PointerEvent) => { if (!(e.target as HTMLElement).closest('.w100n-text-pop, [data-pop]')) setPop(null); };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [pop]);\n\n if (source.error) return docx ? <div className=\"w100n-docs-scroll\"><DocxView bytes={bytes} onOutline={onOutline} failed={t.failed} /></div> : <div className=\"w100n-docs-empty\">{t.failed}</div>;\n if (!source.data || !editor || !state || (live && !live.ready && !live.late && !live.denied)) return <div className=\"w100n-docs-empty\">{t.loading}</div>;\n\n const save = async () => {\n if (live) {\n if (!can.edit || !live.ready || !live.online || !live.pending || saving === 'busy') return false;\n setSaving('busy');\n const ok = await live.save();\n setSaving(ok ? 'done' : 'failed');\n return ok;\n }\n const was = baseline.current;\n const doc = editor.state.doc;\n if (!can.edit || !was || saving === 'busy' || doc.eq(was.doc)) return false;\n setSaving('busy');\n try {\n const md = was.base && toMarkdown(doc, was.base);\n const out = md ? new TextEncoder().encode(md.text).buffer as ArrayBuffer : await writeDocx(was.bytes, editor.getJSON());\n await host!.save!(documentId, out, t.editedNote);\n baseline.current = { bytes: md ? out : was.bytes, doc, base: md ? md.base : null };\n if (!md && editor.state.doc === doc) {\n const fresh = (await readDocx(out)).doc;\n if (editor.state.doc === doc && renew(fresh)) baseline.current = { bytes: out, doc: editor.state.doc, base: null };\n }\n setSaving('done');\n onSaved?.();\n return true;\n } catch {\n setSaving('failed');\n return false;\n }\n };\n\n const renew = (fresh: JSONContent) => {\n const at: number[] = [];\n const refs: string[] = [];\n editor.state.doc.descendants((node, pos) => { if (node.isBlock) at.push(pos); });\n editor.schema.nodeFromJSON(fresh).descendants(node => { if (node.isBlock) refs.push(node.type.name, node.attrs.ref); });\n if (refs.length !== at.length * 2 || at.some((pos, i) => editor.state.doc.nodeAt(pos)!.type.name !== refs[i * 2])) return false;\n const tr = editor.state.tr.setMeta('addToHistory', false);\n at.forEach((pos, i) => { if (tr.doc.nodeAt(pos)!.attrs.ref !== refs[i * 2 + 1]) tr.setNodeAttribute(pos, 'ref', refs[i * 2 + 1]); });\n editor.view.dispatch(tr);\n return true;\n };\n\n const linkUp = () => {\n setHref((editor.getAttributes('link').href as string | undefined) ?? '');\n setTab('insert');\n setPop('link');\n };\n const putLink = () => {\n const value = href.trim();\n const chain = editor.chain().focus();\n if (!value) chain.extendMarkRange('link').unsetLink().run();\n else if (editor.state.selection.empty && !editor.isActive('link')) chain.insertContent({ type: 'text', text: value, marks: [{ type: 'link', attrs: { href: value } }] }).run();\n else chain.extendMarkRange('link').setLink({ href: value }).run();\n setPop(null);\n };\n const begin = () => {\n const { from, to, empty } = editor.state.selection;\n if (empty || !can.comment) return;\n editor.view.dispatch(editor.state.tr.setMeta(notes, { pending: { from, to } }));\n setDraft({ quote: editor.state.doc.textBetween(from, to, '\\n', ' '), body: '' });\n setPosting('idle');\n onPanel?.('comments');\n };\n const drop = () => {\n editor.view.dispatch(editor.state.tr.setMeta(notes, { pending: null }));\n setDraft(null);\n };\n const post = async () => {\n if (!draft?.body.trim() || !host?.comment || posting === 'busy') return;\n setPosting('busy');\n try {\n const anchor = uid();\n const made = await host.comment(documentId, { body: draft.body.trim(), quote: draft.quote, replyTo: null, anchor });\n anchors.current.set(made.id, anchor);\n const range = notes.getState(editor.state)!.pending;\n editor.view.dispatch(editor.state.tr.setMeta(notes, { pending: null, spots: [...notes.getState(editor.state)!.spots, ...(range ? [{ id: made.id, ...range }] : [])] }));\n setAdded(list => [...list, made]);\n setDraft(null);\n setActive(made.id);\n setPosting('idle');\n } catch {\n setPosting('failed');\n }\n };\n const answer = async (parent: Comment) => {\n if (!reply?.body.trim() || !host?.comment || posting === 'busy') return;\n setPosting('busy');\n try {\n const made = await host.comment(documentId, { body: reply.body.trim(), quote: parent.quote, replyTo: parent.id, anchor: anchors.current.get(parent.id) ?? '' });\n setAdded(list => [...list, made]);\n setReply(null);\n setPosting('idle');\n } catch {\n setPosting('failed');\n }\n };\n const settle = async (c: Comment) => {\n try {\n await host!.resolveComment!(documentId, c.id, !c.resolved);\n setChanged(list => ({ ...list, [c.id]: { ...c, resolved: !c.resolved } }));\n } catch {\n setPosting('failed');\n }\n };\n const change = async (id: string, body: string | null) => {\n if (posting === 'busy') return;\n setPosting('busy');\n setFailed(false);\n try {\n let made: Comment | null = null;\n if (body === null) await host!.deleteComment!(documentId, id);\n else made = await host!.editComment!(documentId, id, body);\n setChanged(list => ({ ...list, [id]: made }));\n setEditing(null);\n setDropping(null);\n if (body === null && active === id) setActive(null);\n } catch {\n setFailed(true);\n }\n setPosting('idle');\n };\n const mine = (c: Comment) => c.author.id === host?.me.id;\n const drops = (c: Comment) => mine(c) || c.author.id.startsWith('guest:') && !!rights?.edit;\n const show = (c: Comment) => {\n setActive(c.id);\n const spot = notes.getState(editor.state)!.spots.find(s => s.id === c.id);\n if (!spot) return;\n const at = editor.view.domAtPos(spot.from).node;\n (at instanceof HTMLElement ? at : at.parentElement)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n };\n const suggested = [...state.revs.reduce((all, c) => {\n const key = `${c.kind}:${c.id}`;\n const was = all.get(key);\n all.set(key, was ? { ...was, text: `${was.text} ${c.text}` } : c);\n return all;\n }, new Map<string, Change>()).values()];\n const jump = (at: number) => {\n const dom = editor.view.domAtPos(at).node;\n (dom instanceof HTMLElement ? dom : dom.parentElement)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n };\n const percent = zoom ?? (docx && room ? Math.max(10, Math.min(100, Math.floor((room - 24) / page.width * 100))) : 100);\n const zoomBy = (d: number) => setZoom(Math.min(200, Math.max(30, percent + d)));\n\n const keys = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.defaultPrevented) return;\n const key = e.key.toLowerCase();\n const mod = e.metaKey || e.ctrlKey;\n if (key === 'escape' && (pop || draft)) {\n e.stopPropagation();\n if (pop) setPop(null);\n else drop();\n return;\n }\n if (!mod) return;\n const act = (run: () => unknown) => { e.preventDefault(); run(); };\n if (key === 's' && can.edit) act(() => void save());\n else if (key === 'k' && can.edit) act(linkUp);\n else if (key === 'm' && e.altKey && can.comment) act(begin);\n else if (!can.edit || e.altKey) return;\n else if (key === ']' || key === '[') act(() => indent(editor, key === ']' ? 1 : -1));\n else if (key === '\\\\') act(() => clear(editor));\n else if (key === 'enter' && docx) act(() => editor.chain().focus().insertContent({ type: 'pageBreak' }).run());\n else if (e.shiftKey && docx && ['l', 'e', 'r', 'j'].includes(key)) act(() => align(editor, { l: 'left', e: 'center', r: 'right', j: 'justify' }[key]!));\n };\n\n const tool = (icon: LucideIcon, label: string, run: () => unknown, pressed?: boolean, disabled?: boolean) => {\n const Icon = icon;\n return <button type=\"button\" aria-label={label} title={label} aria-pressed={pressed} disabled={disabled} onClick={() => { run(); }}><Icon aria-hidden /></button>;\n };\n const gap = <span className=\"w100n-pdf-gap\" />;\n const known = source.data.styles;\n const named = (test: (style: { name: string; heading: number | null }) => boolean) => {\n const name = known.find(test)?.name;\n return name && `${name[0].toUpperCase()}${name.slice(1)}`;\n };\n const levels = docx ? [1, 2, 3, 4, 5, 6].filter(level => level <= 4 || named(s => s.heading === level)) : [1, 2, 3, 4];\n const styles: [string, string, () => unknown][] = [\n ['normal', t.normal, () => editor.chain().focus().clearNodes().setParagraph().run()],\n ...levels.map(level => [`h${level}`, named(s => s.heading === level && !/^title$/i.test(s.name)) || `${t.heading} ${level}`,\n () => editor.chain().focus().setHeading({ level: level as 1 | 2 | 3 | 4 | 5 | 6 }).run()] as [string, string, () => unknown]),\n ['quote', named(s => /quote/i.test(s.name)) || t.quote, () => editor.chain().focus().clearNodes().setParagraph().setBlockquote().run()],\n ['code', t.code, () => editor.chain().focus().setCodeBlock().run()],\n ];\n const tabs: [Tab, string][] = [\n ...(can.edit ? [['home', t.home], ['insert', t.insert]] as [Tab, string][] : []),\n ...(can.edit && docx ? [['layout', t.layout]] as [Tab, string][] : []),\n ...(can.edit ? [['refs', t.references]] as [Tab, string][] : []),\n ...(host?.comments && (can.comment || open.length > 0) ? [['review', t.review]] as [Tab, string][] : []),\n ['view', t.viewTab],\n ];\n const shown = tabs.some(([key]) => key === tab) ? tab : 'view';\n const margins: [string, Page['margins']][] = [[t.marginsNormal, [96, 96, 96, 96]], [t.marginsNarrow, [48, 48, 48, 48]], [t.marginsWide, [96, 192, 96, 192]]];\n const when = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit' }).format(new Date(iso));\n const person = (c: Comment) => <header>\n {c.author.avatarUrl ? <img className=\"w100n-text-face\" src={c.author.avatarUrl} alt=\"\" /> : <span className=\"w100n-text-face\" aria-hidden>{c.author.name.slice(0, 1).toUpperCase()}</span>}\n <span className=\"w100n-text-who\"><b>{c.author.name}{c.author.id.startsWith('guest:') && <span className=\"w100n-docs-badge\">{t.guest}</span>}</b><small>{when(c.createdAt)}</small></span>\n {drops(c) && <span className=\"w100n-text-own\" onClick={e => e.stopPropagation()}>\n {mine(c) && host!.editComment && <button type=\"button\" aria-label={t.editComment} title={t.editComment} onClick={() => { setDropping(null); setEditing({ id: c.id, body: c.body }); }}><Pencil aria-hidden /></button>}\n {host!.deleteComment && <button type=\"button\" data-tone=\"red\" aria-label={t.delete} title={t.delete} onClick={() => { setEditing(null); setDropping(c.id); }}><Trash2 aria-hidden /></button>}\n </span>}\n </header>;\n const words = (c: Comment) => editing?.id === c.id ? <div className=\"w100n-text-reply w100n-text-edit\" onClick={e => e.stopPropagation()}>\n <textarea autoFocus value={editing.body} aria-label={t.editComment} onChange={e => setEditing({ ...editing, body: e.target.value })}\n onKeyDown={e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && editing.body.trim()) void change(c.id, editing.body.trim()); }} />\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => setEditing(null)}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!editing.body.trim() || editing.body.trim() === c.body || posting === 'busy'} onClick={() => void change(c.id, editing.body.trim())}>\n <Save aria-hidden />{t.save}\n </button>\n </span>\n </div> : dropping === c.id ? <div className=\"w100n-text-confirm\" role=\"group\" aria-label={t.delete} onClick={e => e.stopPropagation()}>\n <p>{c.replyTo || !all.some(r => r.replyTo === c.id) ? t.deleteAsk : t.deleteThread}</p>\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" autoFocus onClick={() => setDropping(null)}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" disabled={posting === 'busy'} onClick={() => void change(c.id, null)}><Trash2 aria-hidden />{t.delete}</button>\n </span>\n </div> : <p>{c.body}</p>;\n const pick = (next: Pop) => setPop(pop === next ? null : next);\n const swatches = (list: string[], current: string | null, set: (color: string | null) => unknown, none: string): ReactNode =>\n <span className=\"w100n-text-pop w100n-text-swatches\" role=\"group\">\n <button type=\"button\" className=\"w100n-text-none\" onClick={() => { set(null); setPop(null); }}>{none}</button>\n {list.map((c, i) => <button key={i} type=\"button\" aria-label={c} aria-pressed={current === c} onClick={() => { set(c); setPop(null); }}><i style={{ background: c }} /></button>)}\n </span>;\n\n let tools: ReactNode = null;\n if (shown === 'home') tools = <>\n <span className=\"w100n-text-anchor\">\n <button type=\"button\" className=\"w100n-text-picker\" data-pop aria-haspopup=\"listbox\" aria-expanded={pop === 'style'} aria-label={t.paragraphStyle} title={t.paragraphStyle} onClick={() => pick('style')}>\n {styles.find(([key]) => key === state.style)?.[1] ?? t.normal}<ChevronDown aria-hidden />\n </button>\n {pop === 'style' && <span className=\"w100n-text-pop w100n-text-styles\" role=\"listbox\" aria-label={t.paragraphStyle}>\n {styles.map(([key, label, run]) => <button key={key} type=\"button\" role=\"option\" data-style={key} aria-selected={state.style === key}\n onClick={() => { run(); setPop(null); }}>{label}</button>)}\n </span>}\n </span>\n {gap}\n {tool(Bold, t.bold, () => editor.chain().focus().toggleBold().run(), state.bold)}\n {tool(Italic, t.italic, () => editor.chain().focus().toggleItalic().run(), state.italic)}\n {docx && tool(Underline, t.underline, () => editor.chain().focus().toggleUnderline().run(), state.underline)}\n {tool(Strikethrough, t.strike, () => editor.chain().focus().toggleStrike().run(), state.strike)}\n {!docx && tool(Code, t.code, () => editor.chain().focus().toggleCode().run(), state.code)}\n {docx && <span className=\"w100n-text-anchor\">\n <button type=\"button\" data-pop aria-expanded={pop === 'color'} aria-label={t.textColour} title={t.textColour} onClick={() => pick('color')}>\n <Baseline aria-hidden /><i className=\"w100n-text-bar\" style={{ background: state.color ?? 'currentColor' }} />\n </button>\n {pop === 'color' && swatches(inks, state.color, c => c ? editor.chain().focus().setColor(c).run() : editor.chain().focus().unsetColor().run(), t.automatic)}\n </span>}\n {docx && <span className=\"w100n-text-anchor\">\n <button type=\"button\" data-pop aria-expanded={pop === 'mark'} aria-pressed={state.glow} aria-label={t.highlight} title={t.highlight} onClick={() => pick('mark')}><Highlighter aria-hidden /></button>\n {pop === 'mark' && swatches(glows, null, c => c ? editor.chain().focus().setHighlight({ color: c }).run() : editor.chain().focus().unsetHighlight().run(), t.noColour)}\n </span>}\n {gap}\n {tool(List, t.bullets, () => editor.chain().focus().toggleBulletList().run(), state.bullets)}\n {tool(ListOrdered, t.numbers, () => editor.chain().focus().toggleOrderedList().run(), state.numbers)}\n {tool(ListChecks, t.tasks, () => editor.chain().focus().toggleTaskList().run(), state.tasks)}\n {docx && <>\n {gap}\n {([[AlignLeft, t.alignLeft, 'left'], [AlignCenter, t.alignCenter, 'center'], [AlignRight, t.alignRight, 'right'], [AlignJustify, t.justify, 'justify']] as const)\n .map(([icon, label, value], i) => <Fragment key={i}>{tool(icon, label, () => align(editor, value), state.align === value)}</Fragment>)}\n </>}\n {gap}\n {tool(ListIndentDecrease, t.outdent, () => indent(editor, -1))}\n {tool(ListIndentIncrease, t.indent, () => indent(editor, 1))}\n {tool(RemoveFormatting, t.clearFormat, () => clear(editor))}\n </>;\n else if (shown === 'insert') tools = <>\n <span className=\"w100n-text-anchor\">\n <button type=\"button\" data-pop aria-expanded={pop === 'table'} aria-label={t.table} title={t.table} onClick={() => pick('table')}><Table aria-hidden /></button>\n {pop === 'table' && <span className=\"w100n-text-pop w100n-text-grid\" role=\"group\" aria-label={t.table} onPointerLeave={() => setGrid({ rows: 0, cols: 0 })}>\n <span>{Array.from({ length: 48 }, (_, i) => {\n const rows = Math.floor(i / 8) + 1;\n const cols = (i % 8) + 1;\n return <button key={i} type=\"button\" aria-label={`${rows} × ${cols}`} data-on={rows <= grid.rows && cols <= grid.cols} onPointerEnter={() => setGrid({ rows, cols })}\n onClick={() => { editor.chain().focus().insertTable({ rows, cols, withHeaderRow: true }).run(); setPop(null); }} />;\n })}</span>\n <small>{grid.rows ? `${grid.rows} × ${grid.cols}` : t.table}</small>\n </span>}\n </span>\n {state.table && <>\n {tool(BetweenHorizontalStart, t.rowAbove, () => editor.chain().focus().addRowBefore().run())}\n {tool(BetweenHorizontalEnd, t.rowBelow, () => editor.chain().focus().addRowAfter().run())}\n {tool(BetweenVerticalStart, t.columnLeft, () => editor.chain().focus().addColumnBefore().run())}\n {tool(BetweenVerticalEnd, t.columnRight, () => editor.chain().focus().addColumnAfter().run())}\n {tool(PanelTop, t.headerRow, () => editor.chain().focus().toggleHeaderRow().run())}\n {docx && tool(TableCellsMerge, t.mergeCells, () => editor.chain().focus().mergeOrSplit().run())}\n {tool(TableRowsSplit, t.deleteRow, () => editor.chain().focus().deleteRow().run())}\n {tool(TableColumnsSplit, t.deleteColumn, () => editor.chain().focus().deleteColumn().run())}\n {tool(Trash2, t.deleteTable, () => editor.chain().focus().deleteTable().run())}\n </>}\n {gap}\n <span className=\"w100n-text-anchor\">\n <button type=\"button\" data-pop aria-expanded={pop === 'image'} aria-label={t.image} title={t.image} onClick={() => { setHref(''); pick('image'); }}><ImagePlus aria-hidden /></button>\n {pop === 'image' && <span className=\"w100n-text-pop w100n-text-form\">\n <input autoFocus value={href} placeholder={t.imageLink} aria-label={t.imageLink} onChange={e => setHref(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter' && href.trim()) { editor.chain().focus().setImage({ src: href.trim() }).run(); setPop(null); } }} />\n <span className=\"w100n-docs-row\">\n {docx && <label className=\"w100n-pdf-link\">{t.chooseFile}<input type=\"file\" accept=\"image/png,image/jpeg,image/gif\" hidden onChange={e => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => { editor.chain().focus().setImage({ src: String(reader.result), alt: file.name }).run(); setPop(null); };\n reader.readAsDataURL(file);\n }} /></label>}\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!href.trim()} onClick={() => { editor.chain().focus().setImage({ src: href.trim() }).run(); setPop(null); }}><ImagePlus aria-hidden />{t.put}</button>\n </span>\n </span>}\n </span>\n <span className=\"w100n-text-anchor\">\n <button type=\"button\" data-pop aria-expanded={pop === 'link'} aria-pressed={state.link} aria-label={t.link} title={t.link} onClick={() => pop === 'link' ? setPop(null) : linkUp()}><Link aria-hidden /></button>\n {pop === 'link' && <span className=\"w100n-text-pop w100n-text-form\">\n <input autoFocus value={href} placeholder={t.linkAddress} aria-label={t.linkAddress} onChange={e => setHref(e.target.value)} onKeyDown={e => { if (e.key === 'Enter') putLink(); }} />\n <span className=\"w100n-docs-row\">\n {state.link && <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => { editor.chain().focus().extendMarkRange('link').unsetLink().run(); setPop(null); }}><Link2Off aria-hidden />{t.unlink}</button>}\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!href.trim()} onClick={putLink}><Link aria-hidden />{t.apply}</button>\n </span>\n </span>}\n </span>\n {docx && tool(SeparatorHorizontal, t.pageBreak, () => editor.chain().focus().insertContent({ type: 'pageBreak' }).run())}\n {tool(Minus, t.rule, () => editor.chain().focus().setHorizontalRule().run())}\n </>;\n else if (shown === 'layout') tools = <>\n <span className=\"w100n-text-label\">{t.pageSize}</span>\n {([['A4', a4], ['Letter', letter]] as const).map(([label, size], i) => <button key={i} type=\"button\" className=\"w100n-text-word\" aria-pressed={Math.abs(page.width - size.width) < 2 && Math.abs(page.height - size.height) < 2}\n onClick={() => setLayout({ ...page, width: size.width, height: size.height })}>{label}</button>)}\n {gap}\n <span className=\"w100n-text-label\">{t.margins}</span>\n {margins.map(([label, values], i) => <button key={i} type=\"button\" className=\"w100n-text-word\" aria-pressed={values.every((v, n) => Math.abs(page.margins[n] - v) < 2)}\n onClick={() => setLayout({ ...page, margins: values })}>{label}</button>)}\n </>;\n else if (shown === 'refs') tools = <>\n {state.toc < 0\n ? <button type=\"button\" className=\"w100n-docs-action\" onClick={() => {\n const at = editor.state.selection.$from.before(1);\n editor.chain().focus().insertContentAt(at, { type: 'toc', attrs: { entries: JSON.stringify(entries(editor.state.doc, !docx, at - 1)) } }).run();\n }}><TableOfContents aria-hidden />{t.tocInsert}</button>\n : <>\n <button type=\"button\" className=\"w100n-text-word\" onClick={() => (editor.view.nodeDOM(state.toc) as HTMLElement | null)?.scrollIntoView({ behavior: 'smooth', block: 'start' })}>\n <TableOfContents aria-hidden />{t.tocGo}\n </button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" onClick={() => editor.chain().focus().deleteRange({ from: state.toc, to: state.toc + editor.state.doc.nodeAt(state.toc)!.nodeSize }).run()}>\n <Trash2 aria-hidden />{t.tocRemove}\n </button>\n </>}\n <span className=\"w100n-text-label\">{t.tocHint}</span>\n </>;\n else if (shown === 'review') tools = <>\n {can.comment && <button type=\"button\" className=\"w100n-docs-action\" disabled={state.empty} onClick={begin}><MessageSquarePlus aria-hidden />{t.addComment}</button>}\n {docx && can.edit && <>\n <button type=\"button\" className=\"w100n-text-word\" aria-pressed={state.suggest}\n onClick={() => editor.view.dispatch(editor.state.tr.setMeta(suggesting, { on: !state.suggest, me: host?.me.name ?? '' }))}><FilePenLine aria-hidden />{t.suggest}</button>\n {state.revs.length > 0 && <>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"green\" onClick={() => decide(editor, true)}><CheckCheck aria-hidden />{t.acceptAll}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" onClick={() => decide(editor, false)}><X aria-hidden />{t.rejectAll}</button>\n </>}\n </>}\n <button type=\"button\" className=\"w100n-text-word\" onClick={() => onPanel?.('comments')}><MessagesSquare aria-hidden />{t.comments}<b>{open.length}</b></button>\n </>;\n else tools = <>\n {tool(Minus, t.zoomOut, () => zoomBy(-10))}\n <span className=\"w100n-pdf-zoom\">{percent}%</span>\n {tool(Plus, t.zoomIn, () => zoomBy(10))}\n {docx && tool(MoveHorizontal, t.fitWidth, () => setZoom(null), zoom === null)}\n {tool(Maximize2, t.fit, () => setZoom(100))}\n {gap}\n <button type=\"button\" className=\"w100n-text-word\" onClick={() => onPanel?.('outline')}><ListTree aria-hidden />{t.outline}</button>\n </>;\n\n const sheet = docx ? { '--page-w': `${page.width}px`, '--page-h': `${page.height}px`, '--mt': `${page.margins[0]}px`, '--mr': `${page.margins[1]}px`, '--mb': `${page.margins[2]}px`, '--ml': `${page.margins[3]}px` } as CSSProperties : undefined;\n return <div className=\"w100n-text\" data-kind={kind} onKeyDown={keys}>\n <div className=\"w100n-text-ribbon\" role=\"toolbar\" aria-label={t.textTools} onKeyDown={rove} onPointerDown={e => { if ((e.target as HTMLElement).closest('button')) e.preventDefault(); }}>\n {(tabs.length > 1 || live) && <div className=\"w100n-text-tabs\">\n <span role=\"tablist\" aria-label={t.textTools}>{tabs.length > 1 && tabs.map(([key, label]) => <button key={key} type=\"button\" role=\"tab\" aria-selected={shown === key} onClick={() => { setTab(key); setPop(null); }}>{label}</button>)}</span>\n {(can.edit || live) && <span className=\"w100n-text-end\">\n {live && (live.ready ? !live.online : live.late || live.denied) && <span className=\"w100n-text-live\" title={live.denied ? undefined : t.offlineHint}><WifiOff aria-hidden />{live.denied ? t.liveOff : t.offline}</span>}\n {live && live.people.length > 0 && <span className=\"w100n-text-people\" role=\"group\" aria-label={t.people}>\n {live.people.map(p => <span key={p.id} className=\"w100n-text-face\" title={p.me ? `${p.name} (${t.you})` : p.name} style={{ '--face': p.color } as CSSProperties}>\n {p.avatarUrl ? <img src={p.avatarUrl} alt=\"\" /> : p.name.slice(0, 1).toUpperCase()}\n </span>)}\n </span>}\n {state.suggest && <span className=\"w100n-docs-badge\">{t.suggesting}</span>}\n {can.edit && <>\n {tool(Undo2, t.undo, () => editor.chain().focus().undo().run(), undefined, !state.undo)}\n {tool(Redo2, t.redo, () => editor.chain().focus().redo().run(), undefined, !state.redo)}\n {saving === 'failed' && <span className=\"w100n-docs-muted\">{t.saveFailed}</span>}\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!dirty || saving === 'busy' || (!!live && !live.online)} onClick={() => void save()}>\n <Save aria-hidden />{saving === 'busy' ? t.saving : !dirty && saving === 'done' ? t.saved : t.save}\n </button>\n </>}\n </span>}\n </div>}\n <div className=\"w100n-text-tools\" role=\"group\" aria-label={tabs.find(([key]) => key === shown)?.[1]}>{tools}</div>\n </div>\n <div ref={scroller} className=\"w100n-text-scroll\" onClick={e => {\n const id = (e.target as HTMLElement).closest('[data-note]')?.getAttribute('data-note');\n if (!id) return;\n setActive(id);\n onPanel?.('comments');\n }}>\n <div className=\"w100n-text-zoomed\" style={{ zoom: percent / 100 }}>\n <div className={docx ? 'w100n-text-sheet' : 'w100n-docs-page w100n-text-column'} style={sheet}>\n <EditorContent editor={editor} />\n </div>\n </div>\n </div>\n {slot && createPortal(<div className=\"w100n-text-notes\">\n {draft && <div className=\"w100n-text-card w100n-text-draft\">\n <blockquote>{draft.quote}</blockquote>\n <textarea autoFocus value={draft.body} placeholder={t.writeComment} aria-label={t.writeComment} onChange={e => setDraft({ ...draft, body: e.target.value })}\n onKeyDown={e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) void post(); }} />\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={drop}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!draft.body.trim() || posting === 'busy'} onClick={() => void post()}><MessageSquarePlus aria-hidden />{t.post}</button>\n </span>\n </div>}\n {suggested.length > 0 && <>\n <p className=\"w100n-docs-caption\"><FilePenLine aria-hidden />{t.suggestions}<span>{suggested.length}</span></p>\n {suggested.map((c, i) => <article key={i} className=\"w100n-text-card w100n-text-change\" data-kind={c.kind} onClick={() => jump(c.from)}>\n <header>\n <span className=\"w100n-text-face\" aria-hidden>{(c.author || '?').slice(0, 1).toUpperCase()}</span>\n <span className=\"w100n-text-who\"><b>{c.author || t.someone}</b>{c.date && <small>{when(c.date)}</small>}</span>\n </header>\n <p>{c.kind === 'insertion' ? t.added : t.removed} <q>{c.text}</q></p>\n {can.edit && <span className=\"w100n-text-actions\" onClick={e => e.stopPropagation()}>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"green\" onClick={() => decide(editor, true, c.id)}><Check aria-hidden />{t.accept}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" onClick={() => decide(editor, false, c.id)}><X aria-hidden />{t.reject}</button>\n </span>}\n </article>)}\n </>}\n {posting === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.commentFailed}</p>}\n {failed && <p className=\"w100n-docs-muted\" role=\"alert\">{t.changeFailed}</p>}\n <div className=\"w100n-docs-row\">\n <p className=\"w100n-docs-caption\"><MessagesSquare aria-hidden />{t.comments}<span>{open.length}</span></p>\n <span className=\"w100n-docs-chips\"><button type=\"button\" aria-pressed={resolved} onClick={() => setResolved(!resolved)}>{t.showResolved}</button></span>\n </div>\n {!threads.length && !draft && <p className=\"w100n-docs-muted\">{can.comment ? t.commentHint : t.noComments}</p>}\n {threads.map(c => <article key={c.id} className=\"w100n-text-card\" aria-current={active === c.id} data-resolved={c.resolved} onClick={() => show(c)}>\n {person(c)}\n {c.quote && <blockquote>{c.quote}</blockquote>}\n {words(c)}\n {all.filter(r => r.replyTo === c.id).map(r => <div key={r.id} className=\"w100n-text-reply\">{person(r)}{words(r)}</div>)}\n {reply?.id === c.id && <div className=\"w100n-text-reply\" onClick={e => e.stopPropagation()}>\n <textarea autoFocus value={reply.body} placeholder={t.writeComment} aria-label={t.reply} onChange={e => setReply({ ...reply, body: e.target.value })}\n onKeyDown={e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) void answer(c); }} />\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => setReply(null)}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!reply.body.trim() || posting === 'busy'} onClick={() => void answer(c)}><Reply aria-hidden />{t.reply}</button>\n </span>\n </div>}\n {can.comment && reply?.id !== c.id && <span className=\"w100n-text-actions\" onClick={e => e.stopPropagation()}>\n {c.resolved && <span className=\"w100n-docs-badge\">{t.resolved}</span>}\n {!c.resolved && <button type=\"button\" className=\"w100n-docs-action\" onClick={() => setReply({ id: c.id, body: '' })}><Reply aria-hidden />{t.reply}</button>}\n {host?.resolveComment && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"green\" onClick={() => void settle(c)}>\n {c.resolved ? <RotateCcw aria-hidden /> : <Check aria-hidden />}{c.resolved ? t.reopen : t.resolve}\n </button>}\n </span>}\n </article>)}\n </div>, slot)}\n </div>;\n}\n","import type { IRange, IWorksheetData } from '@univerjs/core';\nimport type { FUniver } from '@univerjs/core/facade';\nimport type { FWorkbook } from '@univerjs/sheets/facade';\nimport type { Rights } from '../types';\nimport { fresh, insert, move, resize, type SheetModel } from './model';\n\nexport const quiet = new Set(['sheet.mutation.set-worksheet-row-auto-height', 'sheet.mutation.mark-dirty-filter-change', 'sheet.mutation.re-calc-filter',\n 'sheet.mutation.toggle-note-popup', 'sheet.mutation.update-note-position', 'sheet.mutation.empty', 'sheet.mutation.set-zoom-ratio']);\n\nconst mutation = 2;\n\ntype Params = { unitId?: string; subUnitId?: string; range?: IRange; sourceRange?: IRange; targetRange?: IRange; rowCount?: number; columnCount?: number; sheet?: IWorksheetData };\n\nexport const allowed = (rights: Rights, id: string) => rights.edit || quiet.has(id) || (rights.comment && /\\.(update|remove|delete)-note$|note-popup$/.test(id));\n\nexport function track(api: FUniver, model: SheetModel, rights: Rights, onDirty: () => void) {\n const lines = model.lines;\n const ours = (p: unknown) => (p as Params | undefined)?.unitId === model.book.id;\n const before = api.addEvent(api.Event.BeforeCommandExecute, e => {\n if (e.type !== mutation || e.options?.onlyLocal || e.options?.fromCollab || !ours(e.params)) return;\n if (!allowed(rights, e.id)) e.cancel = true;\n });\n const after = api.addEvent(api.Event.CommandExecuted, e => {\n if (e.type !== mutation || e.options?.onlyLocal || e.options?.fromCollab || !ours(e.params)) return;\n const p = (e.params ?? {}) as Params;\n const l = p.subUnitId ? lines[p.subUnitId] : undefined;\n const span = (r: IRange | undefined, rows: boolean) => r ? rows ? r.endRow - r.startRow + 1 : r.endColumn - r.startColumn + 1 : 0;\n if (e.id === 'sheet.mutation.insert-sheet' && p.sheet) {\n lines[p.sheet.id] = { rows: Array.from({ length: p.sheet.rowCount ?? 1000 }, () => fresh('n')), cols: Array.from({ length: p.sheet.columnCount ?? 26 }, () => fresh('n')) };\n } else if (e.id === 'sheet.mutation.remove-sheet' && p.subUnitId) delete lines[p.subUnitId];\n else if (l) {\n if (e.id === 'sheet.mutation.insert-row') insert(l.rows, p.range!.startRow, span(p.range, true), 'n');\n else if (e.id === 'sheet.mutation.remove-rows') l.rows.splice(p.range!.startRow, span(p.range, true));\n else if (e.id === 'sheet.mutation.move-rows') move(l.rows, p.sourceRange!.startRow, span(p.sourceRange, true), p.targetRange!.startRow);\n else if (e.id === 'sheet.mutation.insert-col') insert(l.cols, p.range!.startColumn, span(p.range, false), 'n');\n else if (e.id === 'sheet.mutation.remove-col') l.cols.splice(p.range!.startColumn, span(p.range, false));\n else if (e.id === 'sheet.mutation.move-columns') move(l.cols, p.sourceRange!.startColumn, span(p.sourceRange, false), p.targetRange!.startColumn);\n else if (e.id === 'sheet.mutation.set-worksheet-row-count' && p.rowCount) resize(l.rows, p.rowCount, 'n');\n else if (e.id === 'sheet.mutation.set-worksheet-column-count' && p.columnCount) resize(l.cols, p.columnCount, 'n');\n }\n if (!quiet.has(e.id)) onDirty();\n });\n return () => { before.dispose(); after.dispose(); };\n}\n\nexport function snapshot(api: FUniver, model: SheetModel): SheetModel {\n const wb: FWorkbook = api.getActiveWorkbook()!;\n const book = wb.save();\n const lines = Object.fromEntries(book.sheetOrder.map(sid => {\n const l = model.lines[sid] ?? { rows: [], cols: [] };\n const sheet = book.sheets[sid];\n const rows = [...l.rows], cols = [...l.cols];\n resize(rows, sheet.rowCount ?? rows.length, 'n');\n resize(cols, sheet.columnCount ?? cols.length, 'n');\n return [sid, { rows, cols }];\n }));\n return { ...model, book, lines, active: wb.getActiveSheet().getSheetId() };\n}\n","import { ICommandService, IUndoRedoService, IUniverInstanceService, mergeWorksheetSnapshotWithDefault, type ICellData, type Injector, type IRange, type IStyleData, type Workbook } from '@univerjs/core';\nimport type { FUniver } from '@univerjs/core/facade';\nimport { SheetLazyExecuteScheduleService } from '@univerjs/sheets';\nimport * as Y from 'yjs';\nimport { quiet } from './engine';\nimport type { SheetModel } from './model';\nimport { canon, fnv, made, notesOf, parts, pieces, props, sheetOf, spot, strip, type Cell, type Col, type Row } from './shared';\n\ntype Matrix<T> = Record<number, Record<number, T>>;\ntype Params = {\n unitId?: string; subUnitId?: string; sheetId?: string; index?: number; toOrder?: number; sheet?: { id: string };\n range?: IRange; sourceRange?: IRange; targetRange?: IRange; ranges?: IRange[]; cellValue?: Matrix<unknown>;\n rowData?: Record<number, unknown>; columnData?: Record<number, unknown>; from?: { subUnitId: string; value: Matrix<unknown> }; to?: { subUnitId: string; value: Matrix<unknown> };\n};\ntype Touch = { rows: Y.YArrayEvent<string>['changes']['delta'] | null; cols: Y.YArrayEvent<string>['changes']['delta'] | null; cells: Set<string>; rowData: Set<string>; colData: Set<string>; marks: boolean; props: Set<string> };\n\nconst setters = [\n ['name', 'sheet.mutation.set-worksheet-name', 'name', ''], ['hidden', 'sheet.mutation.set-worksheet-hidden', 'hidden', 0], ['tabColor', 'sheet.mutation.set-tab-color', 'color', ''],\n ['showGridlines', 'sheet.mutation.toggle-gridlines', 'showGridlines', 1], ['rightToLeft', 'sheet.mutation.set-worksheet-right-to-left', 'rightToLeft', 0],\n ['freeze', 'sheet.mutation.set-frozen', '', { startRow: -1, startColumn: -1, xSplit: 0, ySplit: 0 }],\n] as const;\n\nconst closed = /\\.command\\.(.*filter-(range|criteria)|.*toggle-filter|.*sheet-filter|.*data-?validation.*|.*defined-name|.*protection)$/i;\n\nexport function bind(api: FUniver, injector: Injector, doc: Y.Doc, model: SheetModel, edit: boolean) {\n const unit = model.book.id;\n const wb = injector.get(IUniverInstanceService).getUnit<Workbook>(unit)!;\n const { order, sheets, styles, values } = parts(doc);\n const lines = model.lines;\n const me = {};\n let open = true;\n const looks = wb.getStyles();\n const commands = injector.get(ICommandService);\n const run = (id: string, params: object) => commands.hasCommand(id) && commands.syncExecuteCommand(id, { unitId: unit, ...params }, { fromCollab: true });\n const ws = (sid: string) => wb.getSheetBySheetId(sid)!;\n const at = new Map<string, { rows: Map<string, number>; cols: Map<string, number> }>();\n const index = (sid: string) => at.get(sid) ?? at.set(sid, { rows: new Map(lines[sid].rows.map((id, i) => [id, i])), cols: new Map(lines[sid].cols.map((id, i) => [id, i])) }).get(sid)!;\n const live = (sid: string | undefined): sid is string => !!sid && !!lines[sid] && sheets.has(sid) && !!wb.getSheetBySheetId(sid);\n\n const look = (s: ICellData['s']) => {\n const style = typeof s === 'string' ? looks.get(s) : s;\n if (!style || !Object.keys(style).length) return undefined;\n const text = canon(style);\n if (typeof s === 'string' && styles.has(s) && canon(styles.get(s)) === text) return s;\n const id = `y${fnv(new TextEncoder().encode(text)).toString(36)}`;\n if (!styles.has(id)) styles.set(id, style as IStyleData);\n return id;\n };\n\n const cellOf = (sid: string, r: number, c: number): Cell | null => {\n const raw = ws(sid).getCellRaw(r, c);\n if (!raw) return null;\n const f = raw.f || (raw.si ? api.getWorkbook(unit)!.getSheetBySheetId(sid)!.getRange(r, c).getFormula() : '');\n const out: Cell = f ? { f } : strip({ v: raw.v, t: raw.t });\n if (raw.p) out.p = raw.p;\n const s = look(raw.s);\n if (s) out.s = s;\n return Object.keys(out).length ? out : null;\n };\n\n const put = (sid: string, r: number, c: number) => {\n const row = lines[sid].rows[r], col = lines[sid].cols[c];\n if (row === undefined || col === undefined) return;\n const { cells } = pieces(sheets.get(sid)!);\n const key = spot(row, col);\n const next = cellOf(sid, r, c), was = cells.get(key);\n if (canon(next) === canon(was)) return;\n if (next) cells.set(key, next);\n else cells.delete(key);\n if (next?.f !== was?.f) values.delete(`${sid}:${key}`);\n };\n\n const each = (m: Matrix<unknown> | undefined, fn: (r: number, c: number) => void) => {\n for (const [r, line] of Object.entries(m ?? {})) for (const c of Object.keys(line ?? {})) fn(+r, +c);\n };\n\n const putRow = (sid: string, r: number) => {\n const id = lines[sid].rows[r];\n const raw = ws(sid).getRowManager().getRow(r);\n const { rowData } = pieces(sheets.get(sid)!);\n const next = raw ? strip<Row>({ h: raw.h, hd: raw.hd || undefined, ia: raw.ia, s: look(raw.s) }) : {};\n if (id === undefined || canon(next) === canon(rowData.get(id) ?? {})) return;\n if (Object.keys(next).length) rowData.set(id, next);\n else rowData.delete(id);\n };\n\n const putCol = (sid: string, c: number) => {\n const id = lines[sid].cols[c];\n const raw = ws(sid).getColumnManager().getColumn(c);\n const { colData } = pieces(sheets.get(sid)!);\n const next = raw ? strip<Col>({ w: raw.w, hd: raw.hd || undefined, s: look(raw.s) }) : {};\n if (id === undefined || canon(next) === canon(colData.get(id) ?? {})) return;\n if (Object.keys(next).length) colData.set(id, next);\n else colData.delete(id);\n };\n\n const merges = (sid: string) => {\n const l = lines[sid];\n const { merges: kept } = pieces(sheets.get(sid)!);\n const want = new Set(ws(sid).getMergeData().map(b => [l.rows[b.startRow], l.cols[b.startColumn], l.rows[b.endRow], l.cols[b.endColumn]].join(':')));\n for (const k of [...kept.keys()]) if (!want.has(k)) kept.delete(k);\n for (const k of want) if (!kept.has(k)) kept.set(k, 1);\n };\n\n const notes = (sid: string) => {\n const l = lines[sid];\n const { notes: kept } = pieces(sheets.get(sid)!);\n const want = new Map(api.getWorkbook(unit)!.getSheetBySheetId(sid)!.getNotes().map(n => [spot(l.rows[n.row], l.cols[n.col]), { note: n.note, width: n.width, height: n.height }]));\n for (const k of [...kept.keys()]) if (!want.has(k)) kept.delete(k);\n for (const [k, n] of want) if (canon(kept.get(k)) !== canon(n)) kept.set(k, n);\n };\n\n const prop = (sid: string, name: typeof props[number]) => {\n const m = sheets.get(sid)!;\n const empty = setters.find(x => x[0] === name)![3];\n const now = ws(sid).getConfig()[name] ?? empty;\n if (canon(m.get(name) ?? empty) === canon(now)) return;\n if (canon(now) === canon(empty)) m.delete(name);\n else m.set(name, now);\n };\n\n const fit = (list: Y.Array<string>, now: string[]) => {\n if (list.length > now.length) list.delete(now.length, list.length - now.length);\n else if (list.length < now.length) list.push(now.slice(list.length));\n };\n\n const resync = (sid: string) => {\n const l = lines[sid];\n const { cells } = pieces(sheets.get(sid)!);\n const seen = new Set<string>();\n ws(sid).getCellMatrix().forValue((r, c) => {\n put(sid, r, c);\n seen.add(spot(l.rows[r], l.cols[c]));\n });\n const { rows, cols } = index(sid);\n for (const k of [...cells.keys()]) if (!seen.has(k) && rows.has(k.split(':')[0]) && cols.has(k.split(':')[1])) cells.delete(k);\n l.rows.forEach((_, r) => putRow(sid, r));\n l.cols.forEach((_, c) => putCol(sid, c));\n merges(sid);\n notes(sid);\n props.forEach(name => prop(sid, name));\n };\n\n const write = (id: string, p: Params) => {\n const sid = p.subUnitId ?? p.sheetId;\n if (id === 'sheet.mutation.insert-sheet' && p.sheet && lines[p.sheet.id]) {\n const added = p.sheet.id;\n sheets.set(added, made(ws(added).getConfig(), lines[added]));\n order.insert(Math.min(p.index ?? order.length, order.length), [added]);\n return resync(added);\n }\n if (id === 'sheet.mutation.remove-sheet' && sid) {\n at.delete(sid);\n sheets.delete(sid);\n const i = order.toArray().indexOf(sid);\n if (i >= 0) order.delete(i, 1);\n return;\n }\n if (id === 'sheet.mutation.set-worksheet-order' && sid) {\n const i = order.toArray().indexOf(sid);\n if (i >= 0) order.delete(i, 1);\n return order.insert(Math.min(p.toOrder ?? 0, order.length), [sid]);\n }\n if (id === 'sheet.mutation.move-range' && p.from && p.to) {\n if (live(p.from.subUnitId)) each(p.from.value, (r, c) => put(p.from!.subUnitId, r, c));\n if (live(p.to.subUnitId)) each(p.to.value, (r, c) => put(p.to!.subUnitId, r, c));\n return;\n }\n if (!live(sid)) return;\n const { rows, cols } = pieces(sheets.get(sid)!);\n const l = lines[sid];\n const count = (r: IRange, row: boolean) => row ? r.endRow - r.startRow + 1 : r.endColumn - r.startColumn + 1;\n const shift = (list: Y.Array<string>, from: number, n: number, to: number) => {\n const ids = list.slice(from, from + n);\n list.delete(from, n);\n list.insert(to > from ? to - n : to, ids);\n at.delete(sid);\n };\n switch (id) {\n case 'sheet.mutation.set-range-values': return each(p.cellValue, (r, c) => put(sid, r, c));\n case 'sheet.mutation.reorder-range':\n for (let r = p.range!.startRow; r <= p.range!.endRow; r++) for (let c = p.range!.startColumn; c <= p.range!.endColumn; c++) put(sid, r, c);\n return;\n case 'sheet.mutation.insert-row':\n rows.insert(p.range!.startRow, l.rows.slice(p.range!.startRow, p.range!.endRow + 1));\n at.delete(sid);\n for (let r = p.range!.startRow; r <= p.range!.endRow; r++) putRow(sid, r);\n return;\n case 'sheet.mutation.insert-col':\n cols.insert(p.range!.startColumn, l.cols.slice(p.range!.startColumn, p.range!.endColumn + 1));\n at.delete(sid);\n for (let c = p.range!.startColumn; c <= p.range!.endColumn; c++) putCol(sid, c);\n return;\n case 'sheet.mutation.remove-rows':\n at.delete(sid);\n return rows.delete(p.range!.startRow, count(p.range!, true));\n case 'sheet.mutation.remove-col':\n at.delete(sid);\n return cols.delete(p.range!.startColumn, count(p.range!, false));\n case 'sheet.mutation.move-rows': return shift(rows, p.sourceRange!.startRow, count(p.sourceRange!, true), p.targetRange!.startRow);\n case 'sheet.mutation.move-columns': return shift(cols, p.sourceRange!.startColumn, count(p.sourceRange!, false), p.targetRange!.startColumn);\n case 'sheet.mutation.set-worksheet-row-count':\n at.delete(sid);\n return fit(rows, l.rows);\n case 'sheet.mutation.set-worksheet-column-count':\n at.delete(sid);\n return fit(cols, l.cols);\n case 'sheet.mutation.set-worksheet-row-height':\n case 'sheet.mutation.set-worksheet-row-is-auto-height':\n case 'sheet.mutation.set-row-hidden':\n case 'sheet.mutation.set-row-visible':\n for (const r of p.ranges ?? []) for (let i = r.startRow; i <= r.endRow; i++) putRow(sid, i);\n return;\n case 'sheet.mutation.set-worksheet-col-width':\n case 'sheet.mutation.set-col-hidden':\n case 'sheet.mutation.set-col-visible':\n for (const r of p.ranges ?? []) for (let i = r.startColumn; i <= r.endColumn; i++) putCol(sid, i);\n return;\n case 'sheet.mutation.set-row-data': return Object.keys(p.rowData ?? {}).forEach(r => putRow(sid, +r));\n case 'sheet.mutation.set-col-data': return Object.keys(p.columnData ?? {}).forEach(c => putCol(sid, +c));\n case 'sheet.mutation.add-worksheet-merge':\n case 'sheet.mutation.remove-worksheet-merge': return merges(sid);\n case 'sheet.mutation.update-note':\n case 'sheet.mutation.remove-note':\n case 'sheet.mutation.update-note-position': return notes(sid);\n default: {\n const setter = setters.find(x => x[1] === id);\n if (setter) prop(sid, setter[0]);\n else if (!quiet.has(id)) resync(sid);\n }\n }\n };\n\n const computed = (p: Params) => {\n const sid = p.subUnitId;\n if (!live(sid)) return;\n each(p.cellValue, (r, c) => {\n const raw = ws(sid).getCellRaw(r, c);\n const row = lines[sid].rows[r], col = lines[sid].cols[c];\n if ((!raw?.f && !raw?.si) || row === undefined || col === undefined) return;\n const key = `${sid}:${spot(row, col)}`, next = { v: raw.v ?? null, t: raw.t ?? null };\n if (canon(values.get(key)) !== canon(next)) values.set(key, next);\n });\n };\n\n const refuse = api.addEvent(api.Event.BeforeCommandExecute, e => {\n if (edit && e.type === 0 && closed.test(e.id)) e.cancel = true;\n });\n\n const local = api.addEvent(api.Event.CommandExecuted, e => {\n const p = (e.params ?? {}) as Params;\n if (e.type !== 2 || p.unitId !== unit || e.options?.fromCollab || !edit) return;\n if (e.options?.onlyLocal) {\n if (e.options.applyFormulaCalculationResult) doc.transact(() => computed(p), me);\n return;\n }\n doc.transact(() => write(e.id, p), me);\n });\n\n const lazy = commands.onMutationExecutedForCollab((e, options) => {\n if (!edit || !options?.syncOnly || e.id !== 'sheet.mutation.copy-worksheet-end') return;\n const sid = (e.params as Params).subUnitId!;\n const wait = () => open && (injector.get(SheetLazyExecuteScheduleService).hasPendingTasks() ? setTimeout(wait, 100) : live(sid) && doc.transact(() => resync(sid), me));\n wait();\n });\n\n const full = (sid: string, key: string, x: Cell | undefined): ICellData | null => {\n if (!x) return null;\n const kept = x.f ? values.get(`${sid}:${key}`) : undefined;\n return { v: (x.f ? kept?.v : x.v) ?? null, t: (x.f ? kept?.t : x.t) ?? undefined, f: x.f ?? null, si: null, p: x.p ?? null, s: x.s ? styles.get(x.s) ?? null : null };\n };\n\n const cellsTo = (sid: string, keys: Iterable<string>) => {\n const { cells } = pieces(sheets.get(sid)!);\n const { rows, cols } = index(sid);\n const cellValue: Matrix<ICellData | null> = {};\n for (const key of keys) {\n const [row, col] = key.split(':');\n const r = rows.get(row), c = cols.get(col);\n if (r !== undefined && c !== undefined) (cellValue[r] ??= {})[c] = full(sid, key, cells.get(key));\n }\n if (Object.keys(cellValue).length) run('sheet.mutation.set-range-values', { subUnitId: sid, cellValue, isOverrideStyle: true });\n };\n\n const linesTo = (sid: string, ids: Iterable<string>, row: boolean) => {\n const { rowData, colData } = pieces(sheets.get(sid)!);\n const map = row ? index(sid).rows : index(sid).cols;\n const info: Record<number, object | null> = {}, sizes: Record<number, number> = {};\n const ranges: IRange[] = [];\n for (const id of ids) {\n const i = map.get(id);\n if (i === undefined) continue;\n const x = (row ? rowData : colData).get(id) as (Row & Col) | undefined;\n const s = x?.s ? styles.get(x.s) : undefined;\n info[i] = x ? row ? { h: x.h, hd: x.hd, ia: x.ia, s } : { w: x.w, hd: x.hd, s } : null;\n const size = row ? x?.h : x?.w;\n if (size !== undefined) sizes[i] = size;\n ranges.push({ startRow: row ? i : 0, endRow: row ? i : 0, startColumn: row ? 0 : i, endColumn: row ? 0 : i });\n }\n if (!ranges.length) return;\n if (row) {\n run('sheet.mutation.set-row-data', { subUnitId: sid, rowData: info });\n run('sheet.mutation.set-worksheet-row-height', { subUnitId: sid, ranges, rowHeight: sizes });\n } else {\n run('sheet.mutation.set-col-data', { subUnitId: sid, columnData: info });\n run('sheet.mutation.set-worksheet-col-width', { subUnitId: sid, ranges, colWidth: sizes });\n }\n };\n\n const mergesTo = (sid: string) => {\n const { merges: kept } = pieces(sheets.get(sid)!);\n const { rows, cols } = index(sid);\n const want = [...kept.keys()].map(k => k.split(':')).map(([r0, c0, r1, c1]) => ({ startRow: rows.get(r0)!, startColumn: cols.get(c0)!, endRow: rows.get(r1)!, endColumn: cols.get(c1)! }))\n .filter(b => [b.startRow, b.startColumn, b.endRow, b.endColumn].every(n => n !== undefined));\n const has = ws(sid).getMergeData().map(b => ({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn }));\n const gone = has.filter(b => !want.some(w => canon(w) === canon(b))), added = want.filter(w => !has.some(b => canon(w) === canon(b)));\n if (gone.length) run('sheet.mutation.remove-worksheet-merge', { subUnitId: sid, ranges: gone });\n if (added.length) run('sheet.mutation.add-worksheet-merge', { subUnitId: sid, ranges: added });\n };\n\n const notesTo = (sid: string) => {\n const want = notesOf(sheets.get(sid)!, lines[sid]);\n const shown = api.getWorkbook(unit)!.getSheetBySheetId(sid)!.getNotes();\n for (const n of shown) if (!want.some(w => w.row === n.row && w.col === n.col)) run('sheet.mutation.remove-note', { sheetId: sid, noteId: n.id, row: n.row, col: n.col });\n for (const w of want) {\n const n = shown.find(x => x.row === w.row && x.col === w.col);\n if (!n || n.note !== w.note || n.width !== w.width || n.height !== w.height) run('sheet.mutation.update-note', { sheetId: sid, row: w.row, col: w.col, note: { note: w.note, width: w.width, height: w.height } });\n }\n };\n\n const shape = () => {\n const want = [...new Set(order.toArray())].filter(sid => sheets.has(sid));\n for (const sheet of wb.getSheets()) {\n const sid = sheet.getSheetId();\n if (want.includes(sid)) continue;\n if (wb.getActiveSheet().getSheetId() === sid) {\n const other = want.find(x => wb.getSheetBySheetId(x));\n if (other) api.syncExecuteCommand('sheet.operation.set-worksheet-active', { unitId: unit, subUnitId: other });\n }\n run('sheet.mutation.remove-sheet', { subUnitId: sid });\n delete lines[sid];\n at.delete(sid);\n }\n want.forEach((sid, i) => {\n if (wb.getSheetBySheetId(sid)) return;\n const { rows, cols } = pieces(sheets.get(sid)!);\n lines[sid] = { rows: rows.toArray(), cols: cols.toArray() };\n run('sheet.mutation.insert-sheet', { index: Math.min(i, wb.getSheets().length), sheet: mergeWorksheetSnapshotWithDefault(sheetOf(doc, sid, lines[sid])), styles: styles.toJSON() });\n notesTo(sid);\n });\n want.forEach((sid, i) => {\n const now = wb.getSheetOrders().indexOf(sid);\n if (now >= 0 && now !== i) run('sheet.mutation.set-worksheet-order', { subUnitId: sid, fromOrder: now, toOrder: i });\n });\n };\n\n const move = (sid: string, delta: Touch['rows'], row: boolean) => {\n const added = new Set<string>();\n if (!delta) return added;\n const list = row ? lines[sid].rows : lines[sid].cols;\n let i = 0;\n for (const d of delta) {\n if (d.retain) i += d.retain;\n if (d.delete) {\n const end = i + d.delete - 1;\n if (row) run('sheet.mutation.remove-rows', { subUnitId: sid, range: { startRow: i, endRow: end, startColumn: 0, endColumn: lines[sid].cols.length - 1, rangeType: 1 } });\n else run('sheet.mutation.remove-col', { subUnitId: sid, range: { startRow: 0, endRow: lines[sid].rows.length - 1, startColumn: i, endColumn: end, rangeType: 2 } });\n list.splice(i, d.delete);\n }\n if (d.insert) {\n const ids = d.insert as string[];\n const end = i + ids.length - 1;\n if (row) run('sheet.mutation.insert-row', { subUnitId: sid, range: { startRow: i, endRow: end, startColumn: 0, endColumn: lines[sid].cols.length - 1 } });\n else run('sheet.mutation.insert-col', { subUnitId: sid, range: { startRow: 0, endRow: lines[sid].rows.length - 1, startColumn: i, endColumn: end } });\n list.splice(i, 0, ...ids);\n ids.forEach(id => added.add(id));\n i += ids.length;\n }\n }\n at.delete(sid);\n return added;\n };\n\n const remote = (events: Y.YEvent<Y.AbstractType<unknown>>[], tr: Y.Transaction) => {\n if (tr.origin === me) return;\n const touched = new Map<string, Touch>();\n let reshaped = false;\n for (const e of events) {\n const t = e.target;\n if (t === sheets || t === order) {\n reshaped = true;\n continue;\n }\n const owner = t.parent === sheets ? t : t.parent?.parent === sheets ? t.parent : null;\n const sid = owner && [...sheets.entries()].find(([, m]) => m === owner)?.[0];\n if (!owner || !sid) continue;\n if (!touched.has(sid)) touched.set(sid, { rows: null, cols: null, cells: new Set(), rowData: new Set(), colData: new Set(), marks: false, props: new Set() });\n const s = touched.get(sid)!;\n const m = owner as Y.Map<unknown>;\n const keys = [...e.changes.keys.keys()];\n if (t === owner) keys.forEach(k => s.props.add(k));\n else if (t === m.get('rows')) s.rows = e.changes.delta;\n else if (t === m.get('cols')) s.cols = e.changes.delta;\n else if (t === m.get('cells')) keys.forEach(k => s.cells.add(k));\n else if (t === m.get('rowData')) keys.forEach(k => s.rowData.add(k));\n else if (t === m.get('colData')) keys.forEach(k => s.colData.add(k));\n else s.marks = true;\n }\n let structural = false;\n if (reshaped) {\n const before = wb.getSheets().length;\n shape();\n structural = before !== wb.getSheets().length;\n }\n for (const [sid, s] of touched) {\n if (!live(sid)) continue;\n const rows = move(sid, s.rows, true), cols = move(sid, s.cols, false);\n if (s.rows || s.cols) structural = true;\n for (const [name, id, key, empty] of setters) if (s.props.has(name)) {\n const v = sheets.get(sid)!.get(name) ?? empty;\n run(id, { subUnitId: sid, ...(key ? { [key]: v } : v as object) });\n }\n const keys = new Set(s.cells);\n if (rows.size || cols.size) for (const k of pieces(sheets.get(sid)!).cells.keys()) if (rows.has(k.split(':')[0]) || cols.has(k.split(':')[1])) keys.add(k);\n linesTo(sid, new Set([...s.rowData, ...rows]), true);\n linesTo(sid, new Set([...s.colData, ...cols]), false);\n cellsTo(sid, keys);\n if (s.marks || s.rows || s.cols) {\n mergesTo(sid);\n notesTo(sid);\n }\n }\n if (structural) injector.get(IUndoRedoService).clearUndoRedo(unit);\n };\n\n parts(doc).book.observeDeep(remote);\n return () => {\n open = false;\n refuse.dispose();\n local.dispose();\n lazy.dispose();\n parts(doc).book.unobserveDeep(remote);\n };\n}\n","@font-face { font-family: 'Calibri'; font-weight: 400; font-style: normal; src: local('Calibri'), local('Carlito'), local('Arial'), local('ArialMT'), local('Liberation Sans'); }\n@font-face { font-family: 'Calibri'; font-weight: 400; font-style: italic; src: local('Calibri Italic'), local('Carlito Italic'), local('Arial Italic'), local('Arial-ItalicMT'), local('Liberation Sans Italic'); }\n@font-face { font-family: 'Calibri'; font-weight: 700; font-style: normal; src: local('Calibri Bold'), local('Carlito Bold'), local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'); }\n@font-face { font-family: 'Calibri'; font-weight: 700; font-style: italic; src: local('Calibri Bold Italic'), local('Carlito Bold Italic'), local('Arial Bold Italic'), local('Arial-BoldItalicMT'), local('Liberation Sans Bold Italic'); }\n@font-face { font-family: 'Aptos'; font-weight: 400; font-style: normal; src: local('Aptos'), local('Arial'), local('ArialMT'), local('Liberation Sans'); }\n@font-face { font-family: 'Aptos'; font-weight: 400; font-style: italic; src: local('Aptos Italic'), local('Arial Italic'), local('Arial-ItalicMT'), local('Liberation Sans Italic'); }\n@font-face { font-family: 'Aptos'; font-weight: 700; font-style: normal; src: local('Aptos Bold'), local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'); }\n@font-face { font-family: 'Aptos'; font-weight: 700; font-style: italic; src: local('Aptos Bold Italic'), local('Arial Bold Italic'), local('Arial-BoldItalicMT'), local('Liberation Sans Bold Italic'); }\n\n.w100n-sheet { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 8px; }\n.w100n-sheet-ribbon { align-self: center; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 6px; width: min(100%, 1240px); padding: 4px;\n border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; min-width: 0; min-height: 32px; }\n.w100n-sheet-ribbon button:not(.w100n-docs-action) { position: relative; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: var(--docs-muted); }\n.w100n-sheet-ribbon button:not(.w100n-docs-action):hover:not(:disabled) { background: var(--docs-hover); color: var(--docs-text); }\n.w100n-docs .w100n-sheet-ribbon button[aria-pressed='true'], .w100n-docs .w100n-sheet-ribbon button[aria-expanded='true'] { color: #fff; background: linear-gradient(145deg, #8b5cf6, #6d28d9); box-shadow: 0 6px 14px -6px #7c3aed99; }\n.w100n-sheet-gap { width: 1px; height: 20px; margin: 0 5px; background: var(--docs-border); }\n.w100n-sheet-end { display: flex; align-items: center; gap: 8px; min-height: 32px; }\n.w100n-sheet-muted { max-width: 380px; color: var(--docs-muted); font-size: 12px; line-height: 1.35; }\n.w100n-sheet-anchor { position: relative; display: inline-flex; }\n.w100n-sheet-bar { position: absolute; left: 8px; right: 8px; bottom: 4px; height: 3px; border-radius: 2px; }\n.w100n-sheet-ribbon .w100n-sheet-anchor > button.w100n-sheet-picker { display: flex; justify-content: space-between; gap: 6px; width: 132px; padding: 0 8px 0 10px; border: 1px solid var(--docs-border);\n color: var(--docs-text); font-size: 12.5px; font-weight: 600; white-space: nowrap; }\n.w100n-sheet-picker span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.w100n-sheet-picker svg { width: 14px; height: 14px; color: var(--docs-dim); }\n.w100n-sheet-pop { position: absolute; z-index: 30; top: calc(100% + 8px); left: 0; padding: 6px; border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-list { display: grid; gap: 2px; min-width: 200px; }\n.w100n-sheet-ribbon .w100n-sheet-list button:not(.w100n-docs-action) { display: flex; justify-content: flex-start; gap: 9px; width: 100%; height: 32px; padding: 0 10px; color: var(--docs-text); font-size: 12.5px; font-weight: 550; text-align: left; white-space: nowrap; }\n.w100n-sheet-list button small { margin-left: auto; padding-left: 12px; color: var(--docs-dim); font-size: 11px; font-variant-numeric: tabular-nums; }\n.w100n-docs .w100n-sheet-ribbon .w100n-sheet-list button[aria-selected='true'] { background: var(--docs-active); color: var(--docs-accent); box-shadow: none; }\n.w100n-sheet-swatches { display: grid; grid-template-columns: repeat(5, 28px); gap: 4px; }\n.w100n-sheet-ribbon .w100n-sheet-swatches button:not(.w100n-docs-action) { width: 28px; height: 28px; }\n.w100n-docs .w100n-sheet-ribbon .w100n-sheet-swatches button[aria-pressed='true'] { background: var(--docs-active); box-shadow: inset 0 0 0 1px #8b5cf659; }\n.w100n-sheet-swatches i { display: block; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1px #0f172a2e; }\n.w100n-sheet-ribbon .w100n-sheet-swatches .w100n-sheet-none { grid-column: 1 / -1; width: auto; height: 28px; padding: 0 8px; place-items: center start; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n\n.w100n-sheet-stage { position: relative; flex: 1; min-height: 0; overflow: hidden; border: 1px solid var(--docs-border); border-radius: 13px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-grid, .w100n-sheet-host { position: absolute; inset: 0; }\n:root [class*='univer-']:not(canvas) { font-family: Inter, ui-sans-serif, system-ui, sans-serif; }\n.w100n-sheet-cover { position: absolute; inset: 0; z-index: 5; display: grid; place-items: center; background: var(--docs-card); color: var(--docs-muted); font-weight: 600; }\n.w100n-sheet-cover span { display: flex; align-items: center; gap: 12px; }\n\n@container (max-width: 900px) {\n .w100n-sheet-tools { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding-block: 2px; }\n .w100n-sheet-tools > * { flex-shrink: 0; }\n .w100n-sheet-pop { position: fixed; top: auto; left: 12px; right: 12px; bottom: 12px; }\n .w100n-sheet-muted { display: none; }\n}\n","import '@univerjs/preset-sheets-core/lib/index.css';\nimport '@univerjs/preset-sheets-sort/lib/index.css';\nimport '@univerjs/preset-sheets-filter/lib/index.css';\nimport '@univerjs/preset-sheets-find-replace/lib/index.css';\nimport '@univerjs/preset-sheets-data-validation/lib/index.css';\nimport '@univerjs/preset-sheets-note/lib/index.css';\nimport { createUniver, LocaleType, mergeLocales, purpleTheme } from '@univerjs/presets';\nimport { CalculationMode, IMarkSelectionService, UniverSheetsCorePreset } from '@univerjs/preset-sheets-core';\nimport { UniverSheetsDataValidationPreset } from '@univerjs/preset-sheets-data-validation';\nimport { UniverSheetsFilterPreset } from '@univerjs/preset-sheets-filter';\nimport { UniverSheetsFindReplacePreset } from '@univerjs/preset-sheets-find-replace';\nimport { UniverSheetsNotePreset } from '@univerjs/preset-sheets-note';\nimport { UniverSheetsSortPreset } from '@univerjs/preset-sheets-sort';\nimport coreEn from '@univerjs/preset-sheets-core/locales/en-US';\nimport corePl from '@univerjs/preset-sheets-core/locales/pl-PL';\nimport checkEn from '@univerjs/preset-sheets-data-validation/locales/en-US';\nimport checkPl from '@univerjs/preset-sheets-data-validation/locales/pl-PL';\nimport filterEn from '@univerjs/preset-sheets-filter/locales/en-US';\nimport filterPl from '@univerjs/preset-sheets-filter/locales/pl-PL';\nimport findEn from '@univerjs/preset-sheets-find-replace/locales/en-US';\nimport findPl from '@univerjs/preset-sheets-find-replace/locales/pl-PL';\nimport noteEn from '@univerjs/preset-sheets-note/locales/en-US';\nimport notePl from '@univerjs/preset-sheets-note/locales/pl-PL';\nimport sortEn from '@univerjs/preset-sheets-sort/locales/en-US';\nimport sortPl from '@univerjs/preset-sheets-sort/locales/pl-PL';\nimport type { Language } from '../types';\nimport { box } from './refs';\n\nexport type Mark = { sheet: string; range: string; color: string };\n\nexport function grid(container: HTMLElement, language: Language, dark: boolean, edit: boolean) {\n return createUniver({\n locale: language === 'pl' ? LocaleType.PL_PL : LocaleType.EN_US,\n locales: {\n [LocaleType.EN_US]: mergeLocales(coreEn, checkEn, filterEn, findEn, noteEn, sortEn),\n [LocaleType.PL_PL]: mergeLocales(corePl, checkPl, filterPl, findPl, notePl, sortPl),\n },\n theme: purpleTheme,\n darkMode: dark,\n presets: [\n UniverSheetsCorePreset({\n container, toolbar: false, formulaBar: true, contextMenu: true, disableAutoFocus: true,\n footer: { sheetBar: true, statisticBar: true, menus: edit, zoomSlider: true, addSheetButtonConfig: { show: edit } },\n formula: { initialFormulaComputing: CalculationMode.WHEN_EMPTY },\n }),\n UniverSheetsSortPreset(),\n UniverSheetsFilterPreset(),\n UniverSheetsFindReplacePreset(),\n UniverSheetsDataValidationPreset(),\n UniverSheetsNotePreset(),\n ],\n });\n}\n\nexport function marks({ univer, univerAPI: api }: ReturnType<typeof grid>) {\n const service = univer.__getInjector().get(IMarkSelectionService);\n let list: Mark[] = [];\n let ids: string[] = [];\n const draw = () => {\n ids.forEach(id => service.removeShape(id));\n const sid = api.getActiveWorkbook()?.getActiveSheet().getSheetId();\n ids = list.filter(m => m.sheet === sid).flatMap(m => {\n const b = box(m.range);\n const id = b && service.addShape({ range: b, primary: null, style: { stroke: m.color, fill: `${m.color}1f`, strokeWidth: 2, widgets: {} } }, [], 1000);\n return id ? [id] : [];\n });\n };\n const turn = api.addEvent(api.Event.ActiveSheetChanged, draw);\n return {\n show: (next: Mark[]) => { list = next; draw(); },\n dispose: () => { turn.dispose(); ids.forEach(id => service.removeShape(id)); },\n };\n}\n","import { useEffect, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from 'react';\nimport {\n ArrowDownAZ, ArrowDownZA, Baseline, BetweenHorizontalEnd, BetweenHorizontalStart, BetweenVerticalEnd, BetweenVerticalStart, Bold, ChevronDown, Funnel, Grid2x2,\n Italic, PaintBucket, PanelBottom, Redo2, Save, Search, Snowflake, Square, SquareDashed, StickyNote, Strikethrough, TableCellsMerge, TableCellsSplit, TableColumnsSplit,\n TableRowsSplit, TextAlignCenter, TextAlignEnd, TextAlignStart, TextWrap, Underline, Undo2, WifiOff, type LucideIcon,\n} from 'lucide-react';\nimport type { BorderStyleTypes, BorderType } from '@univerjs/core';\nimport type { FUniver } from '@univerjs/core/facade';\nimport { useLive } from '../editor/live';\nimport { rove, useRestore } from '../focus';\nimport type { DocumentsHost, Language, Rights } from '../types';\nimport type { Guard } from '../Unsaved';\nimport { bind } from './bind';\nimport { readSheet, writeSheet } from './book';\nimport { snapshot, track } from './engine';\nimport type { Mark } from './grid';\nimport { rebase, SheetRefusal, type SheetModel } from './model';\nimport { span } from './refs';\nimport { build, extras } from './shared';\nimport { sheetTexts } from './text';\nimport { worksheets } from './xlsx';\nimport './sheets.css';\n\nexport { readSheet, writeSheet };\n\ntype Look = { bl: boolean; it: boolean; ul: boolean; st: boolean; ht: number; tb: boolean; merged: boolean; n: string; cl: string; bg: string };\ntype Live = { api: FUniver; model: SheetModel; original: ArrayBuffer; changes: number; marks?: { show: (list: Mark[]) => void; dispose: () => void } };\n\nexport function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSaveRequest, guard, host, together, documentId = '', onSaved }: {\n bytes: ArrayBuffer; name: string; kind: 'xlsx' | 'csv'; rights: Rights; language: Language; theme: 'light' | 'dark';\n onChange?: (dirty: boolean) => void; onSaveRequest?: (bytes: ArrayBuffer, note: string) => Promise<unknown>; guard?: Guard;\n host?: DocumentsHost; together?: boolean; documentId?: string; onSaved?: () => void;\n}) {\n const t = sheetTexts[language];\n const box = useRef<HTMLDivElement>(null);\n const live = useRef<Live | null>(null);\n const room = useLive(together ? host : undefined, documentId, kind, bytes, undefined, language, rights.edit && !!onSaveRequest, onSaved);\n const shared = room?.ready ? room.wire : null;\n const waiting = !!room && !shared && !room.late && !room.denied;\n const [phase, setPhase] = useState<'loading' | 'ready' | 'failed'>('loading');\n const [attempt, setAttempt] = useState(0);\n const [dirty, setDirty] = useState(false);\n const [saving, setSaving] = useState<'idle' | 'busy' | 'done' | 'failed'>('idle');\n const [refusal, setRefusal] = useState<SheetRefusal | null>(null);\n const [pop, setPop] = useState<'text' | 'fill' | 'border' | 'format' | 'freeze' | null>(null);\n const [look, setLook] = useState<Look | null>(null);\n const edit = rights.edit && !!onSaveRequest && (!room || (!!shared && !room.readonly));\n const notes = !edit && rights.comment && !!onSaveRequest && !room;\n\n useEffect(() => {\n if (waiting) return;\n let gone = false;\n let stop = () => {};\n let model: SheetModel;\n let moved = false;\n const change = () => { moved = true; };\n try {\n model = shared ? extras(shared.doc, build(shared.doc)) : readSheet(bytes, kind);\n } catch {\n setPhase('failed');\n return;\n }\n shared?.doc.on('update', change);\n setPhase('loading');\n setDirty(false);\n const families = new Set([model.book.defaultStyle, ...Object.values(model.book.styles)].map(s => typeof s === 'object' ? s?.ff : null).filter(Boolean));\n const fonts = Promise.race([Promise.all([...families].flatMap(f => ['', 'bold ', 'italic '].map(w => document.fonts.load(`${w}11pt \"${f}\"`).catch(() => [])))), new Promise(r => setTimeout(r, 800))]);\n Promise.all([import('./grid'), fonts]).then(([{ grid, marks }]) => {\n if (gone) return;\n shared?.doc.off('update', change);\n if (shared && moved) model = extras(shared.doc, build(shared.doc));\n if (kind === 'csv') model.book.sheets.s1.name = name.replace(/\\.[^.]+$/, '') || 'Sheet1';\n const host = box.current!.appendChild(document.createElement('div'));\n host.className = 'w100n-sheet-host';\n const view = grid(host, language, theme === 'dark', edit);\n const { univer, univerAPI: api } = view;\n const wb = api.createWorkbook(model.book);\n if (model.active) wb.setActiveSheet(model.active);\n if (!edit) wb.setEditable(false);\n const state: Live = { api, model, original: bytes, changes: 0 };\n const untrack = track(api, model, { view: true, comment: notes, edit }, () => {\n state.changes++;\n if (state.changes === 1 && !shared) {\n setDirty(true);\n onChange?.(true);\n }\n });\n const unbind = shared ? bind(api, univer.__getInjector(), shared.doc, model, edit) : () => {};\n const people = shared?.link.awareness;\n if (shared) {\n people?.setLocalStateField('user', shared.user);\n state.marks = marks(view);\n }\n let frame = 0;\n let last = '';\n const refresh = () => {\n frame = 0;\n const range = api.getActiveWorkbook()?.getActiveRange();\n if (!range) return;\n const s = range.getCellStyleData() ?? {};\n const here = { sheet: range.getSheetId(), range: span(range.getRange()) };\n if (people && JSON.stringify(here) !== last) {\n last = JSON.stringify(here);\n people.setLocalStateField('selection', here);\n }\n setLook({ bl: s.bl === 1, it: s.it === 1, ul: !!s.ul?.s, st: !!s.st?.s, ht: s.ht ?? 0, tb: s.tb === 3, merged: range.isMerged() || range.isPartOfMerge(), n: s.n?.pattern ?? 'General', cl: s.cl?.rgb ?? '', bg: s.bg?.rgb ?? '' });\n };\n const later = () => { if (!frame) frame = requestAnimationFrame(refresh); };\n const selection = wb.onSelectionChange(later);\n const commands = api.addEvent(api.Event.CommandExecuted, later);\n live.current = state;\n stop = () => {\n unbind();\n state.marks?.dispose();\n untrack();\n selection.dispose();\n commands.dispose();\n cancelAnimationFrame(frame);\n host.hidden = true;\n setTimeout(() => { univer.dispose(); host.remove(); });\n };\n setPhase('ready');\n }).catch(() => { if (!gone) setPhase('failed'); });\n return () => { gone = true; shared?.doc.off('update', change); stop(); live.current = null; };\n }, [bytes, kind, attempt, shared, waiting]);\n\n useEffect(() => {\n live.current?.marks?.show((room?.people ?? []).flatMap(p => !p.me && p.selection ? [{ ...p.selection, color: p.color }] : []));\n }, [room?.people, phase]);\n\n useEffect(() => { live.current?.api.toggleDarkMode(theme === 'dark'); }, [theme]);\n useEffect(() => { live.current?.api.setLocale(language === 'pl' ? 'plPL' : 'enUS'); }, [language]);\n const pending = room ? room.pending : dirty;\n const unsent = room ? room.unsynced && edit : dirty;\n useEffect(() => {\n if (!unsent) return;\n const stop = (e: BeforeUnloadEvent) => e.preventDefault();\n window.addEventListener('beforeunload', stop);\n return () => window.removeEventListener('beforeunload', stop);\n }, [unsent]);\n\n const save = async () => {\n const l = live.current;\n if (room) {\n if (!l || !edit || !room.online || !room.pending || saving === 'busy') return false;\n setSaving('busy');\n setRefusal(null);\n await l.api.getFormula().onCalculationResultApplied(5000).catch(() => {});\n const ok = await room.save();\n setSaving(ok ? 'done' : 'failed');\n return ok;\n }\n if (!l || !onSaveRequest || saving === 'busy') return false;\n setSaving('busy');\n setRefusal(null);\n const seen = l.changes;\n try {\n const model = snapshot(l.api, l.model);\n const out = writeSheet(l.original, model, kind);\n await onSaveRequest(out, t.editedNote);\n const ids = kind === 'csv' ? [] : worksheets(out);\n rebase(l.model, model.lines, Object.fromEntries(model.book.sheetOrder.map((sid, i) => [sid, ids[i] ?? i + 1])));\n l.original = out;\n if (l.changes === seen) {\n l.changes = 0;\n setDirty(false);\n onChange?.(false);\n }\n setSaving('done');\n return true;\n } catch (e) {\n setRefusal(e instanceof SheetRefusal ? e : null);\n setSaving('failed');\n return false;\n }\n };\n\n useEffect(() => {\n if (!guard || room || !dirty) return;\n guard.current = save;\n return () => { guard.current = null; };\n });\n\n useRestore(pop !== null);\n\n const api = () => live.current?.api;\n const run = (id: string, params?: object) => { void api()?.executeCommand(id, params); setPop(null); };\n const range = () => api()?.getActiveWorkbook()?.getActiveRange();\n const sheet = () => api()?.getActiveWorkbook()?.getActiveSheet();\n const keys = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 's') {\n e.preventDefault();\n e.stopPropagation();\n if (edit || notes) void save();\n }\n if (e.key === 'Escape' && pop) {\n e.stopPropagation();\n setPop(null);\n }\n };\n const tool = (Icon: LucideIcon, label: string, onClick: () => void, pressed?: boolean) =>\n <button type=\"button\" aria-label={label} title={label} aria-pressed={pressed} disabled={phase !== 'ready'} onClick={onClick}><Icon aria-hidden /></button>;\n const gap = <span className=\"w100n-sheet-gap\" />;\n const anchor = (key: NonNullable<typeof pop>, trigger: ReactNode, body: ReactNode) => <span className=\"w100n-sheet-anchor\">\n {trigger}\n {pop === key && <span className=\"w100n-sheet-pop\" role=\"dialog\">{body}</span>}\n </span>;\n const opener = (key: NonNullable<typeof pop>, Icon: LucideIcon, label: string, bar?: string) =>\n <button type=\"button\" aria-label={label} title={label} aria-expanded={pop === key} disabled={phase !== 'ready'} onClick={() => setPop(pop === key ? null : key)}>\n <Icon aria-hidden />{bar !== undefined && <i className=\"w100n-sheet-bar\" style={{ background: bar || 'currentColor' }} />}\n </button>;\n const currency = language === 'pl' ? '#,##0.00 \"zł\"' : language === 'uk' ? '#,##0.00 \"₴\"' : '\"$\"#,##0.00';\n const formats: [string, string][] = [[t.general, 'General'], [t.number, '#,##0.00'], [t.percent, '0.00%'], [t.currency, currency], [`${t.currency} €`, '#,##0.00 \"€\"'],\n [t.date, language === 'en' ? 'mm/dd/yyyy' : 'dd.mm.yyyy'], [t.time, 'hh:mm'], [t.text, '@']];\n const shown = formats.find(([, p]) => p === look?.n)?.[0] ?? (look && look.n !== 'General' ? look.n : t.general);\n const border = (type: string) => {\n range()?.setBorder(type as BorderType, (type === 'none' ? 0 : 1) as BorderStyleTypes, '#000000');\n setPop(null);\n };\n const lines = (rows: boolean) => {\n const r = range()?.getRange();\n const ws = sheet();\n if (!r || !ws) return;\n if (rows) ws.deleteRows(r.startRow, r.endRow - r.startRow + 1);\n else ws.deleteColumns(r.startColumn, r.endColumn - r.startColumn + 1);\n };\n const swatches = (list: string[], pick: (c: string) => void, none: string, reset: () => void, current: string) => <span className=\"w100n-sheet-swatches\">\n {list.map((c, i) => <button key={i} type=\"button\" aria-label={c} aria-pressed={current.toLowerCase() === c} onClick={() => pick(c)}><i style={{ background: c }} /></button>)}\n <button type=\"button\" className=\"w100n-sheet-none\" onClick={reset}>{none}</button>\n </span>;\n\n return <div className=\"w100n-sheet\" data-theme={theme} onKeyDownCapture={keys}>\n <div className=\"w100n-sheet-ribbon\" role=\"toolbar\" aria-label={t.tools} onKeyDown={rove} onPointerDown={e => { if ((e.target as HTMLElement).closest('button')) e.preventDefault(); }}>\n <div className=\"w100n-sheet-tools\">\n {edit && <>\n {tool(Undo2, t.undo, () => void api()?.undo())}\n {tool(Redo2, t.redo, () => void api()?.redo())}\n {gap}\n {anchor('format', <button type=\"button\" className=\"w100n-sheet-picker\" aria-label={t.format} title={t.format} aria-expanded={pop === 'format'} disabled={phase !== 'ready'}\n onClick={() => setPop(pop === 'format' ? null : 'format')}><span>{shown}</span><ChevronDown aria-hidden /></button>,\n <span className=\"w100n-sheet-list\">{formats.map(([label, pattern], i) => <button key={i} type=\"button\" aria-selected={look?.n === pattern}\n onClick={() => { range()?.setNumberFormat(pattern); setPop(null); }}>{label}<small>{pattern === 'General' ? '' : pattern}</small></button>)}</span>)}\n {gap}\n {tool(Bold, t.bold, () => run('sheet.command.set-range-bold'), look?.bl)}\n {tool(Italic, t.italic, () => run('sheet.command.set-range-italic'), look?.it)}\n {tool(Underline, t.underline, () => run('sheet.command.set-range-underline'), look?.ul)}\n {tool(Strikethrough, t.strike, () => run('sheet.command.set-range-stroke'), look?.st)}\n {anchor('text', opener('text', Baseline, t.textColour, look?.cl ?? ''),\n swatches(['#0f172a', '#475569', '#dc2626', '#ea580c', '#ca8a04', '#16a34a', '#0891b2', '#2563eb', '#7c3aed', '#db2777'],\n c => run('sheet.command.set-range-text-color', { value: c }), t.automatic, () => run('sheet.command.reset-range-text-color'), look?.cl ?? ''))}\n {anchor('fill', opener('fill', PaintBucket, t.fill, look?.bg ?? ''),\n swatches(['#fee2e2', '#ffedd5', '#fef9c3', '#dcfce7', '#cffafe', '#dbeafe', '#ede9fe', '#fce7f3', '#f1f5f9', '#cbd5e1'],\n c => run('sheet.command.set-background-color', { value: c }), t.noFill, () => run('sheet.command.reset-background-color'), look?.bg ?? ''))}\n {anchor('border', opener('border', Grid2x2, t.borders),\n <span className=\"w100n-sheet-list\">{([[Grid2x2, t.borderAll, 'all'], [Square, t.borderOuter, 'outside'], [PanelBottom, t.borderBottom, 'bottom'], [SquareDashed, t.borderNone, 'none']] as const)\n .map(([Icon, label, type]) => <button key={type} type=\"button\" onClick={() => border(type)}><Icon aria-hidden />{label}</button>)}</span>)}\n {gap}\n {tool(TextAlignStart, t.alignLeft, () => run('sheet.command.set-horizontal-text-align', { value: 1 }), look?.ht === 1)}\n {tool(TextAlignCenter, t.alignCenter, () => run('sheet.command.set-horizontal-text-align', { value: 2 }), look?.ht === 2)}\n {tool(TextAlignEnd, t.alignRight, () => run('sheet.command.set-horizontal-text-align', { value: 3 }), look?.ht === 3)}\n {tool(TextWrap, t.wrap, () => run('sheet.command.set-text-wrap', { value: look?.tb ? 1 : 3 }), look?.tb)}\n {look?.merged ? tool(TableCellsSplit, t.unmerge, () => run('sheet.command.remove-worksheet-merge'), true) : tool(TableCellsMerge, t.merge, () => run('sheet.command.add-worksheet-merge-all'))}\n {gap}\n {tool(BetweenHorizontalStart, t.rowAbove, () => run('sheet.command.insert-row-before'))}\n {tool(BetweenHorizontalEnd, t.rowBelow, () => run('sheet.command.insert-row-after'))}\n {tool(BetweenVerticalStart, t.columnLeft, () => run('sheet.command.insert-col-before'))}\n {tool(BetweenVerticalEnd, t.columnRight, () => run('sheet.command.insert-col-after'))}\n {tool(TableRowsSplit, t.deleteRows, () => lines(true))}\n {tool(TableColumnsSplit, t.deleteColumns, () => lines(false))}\n {anchor('freeze', opener('freeze', Snowflake, t.freeze),\n <span className=\"w100n-sheet-list\">\n <button type=\"button\" onClick={() => { sheet()?.setFrozenRows(1); setPop(null); }}>{t.freezeRow}</button>\n <button type=\"button\" onClick={() => { sheet()?.setFrozenColumns(1); setPop(null); }}>{t.freezeColumn}</button>\n <button type=\"button\" onClick={() => run('sheet.command.set-selection-frozen')}>{t.freezeHere}</button>\n <button type=\"button\" onClick={() => { sheet()?.cancelFreeze(); setPop(null); }}>{t.freezeNone}</button>\n </span>)}\n {gap}\n {tool(ArrowDownAZ, t.sortUp, () => run('sheet.command.sort-range-asc'))}\n {tool(ArrowDownZA, t.sortDown, () => run('sheet.command.sort-range-desc'))}\n {!room && tool(Funnel, t.filter, () => run('sheet.command.smart-toggle-filter'))}\n {gap}\n </>}\n {(edit || notes) && tool(StickyNote, t.note, () => run('sheet.operation.add-note-popup'))}\n {tool(Search, t.find, () => run('ui.operation.open-find-dialog'))}\n </div>\n <span className=\"w100n-sheet-end\">\n {room && (room.ready ? !room.online : room.late || room.denied) && <span className=\"w100n-text-live\" title={room.denied ? undefined : t.offlineHint}><WifiOff aria-hidden />{room.denied ? t.liveOff : t.offline}</span>}\n {room && room.people.length > 0 && <span className=\"w100n-text-people\" role=\"group\" aria-label={t.people}>\n {room.people.map(p => <span key={p.id} className=\"w100n-text-face\" title={p.me ? `${p.name} (${t.you})` : p.name} style={{ '--face': p.color } as CSSProperties}>\n {p.avatarUrl ? <img src={p.avatarUrl} alt=\"\" /> : p.name.slice(0, 1).toUpperCase()}\n </span>)}\n </span>}\n {!edit && <span className=\"w100n-docs-badge\">{notes ? t.notesOnly : t.viewOnly}</span>}\n {saving === 'failed' && <span className=\"w100n-sheet-muted\" role=\"alert\">{refusal ? t.refused[refusal.code].replace('{sheet}', refusal.sheet) : t.saveFailed}</span>}\n {(edit || notes) && <button type=\"button\" className=\"w100n-docs-action\" disabled={!pending || saving === 'busy' || phase !== 'ready' || (!!room && !room.online)} onClick={() => void save()}>\n <Save aria-hidden />{saving === 'busy' ? t.saving : !pending && saving === 'done' ? t.saved : t.save}\n </button>}\n </span>\n </div>\n <div className=\"w100n-sheet-stage\" onPointerDown={() => setPop(null)}>\n <div ref={box} className=\"w100n-sheet-grid\" />\n {phase !== 'ready' && <div className=\"w100n-sheet-cover\">\n {phase === 'loading' ? <span>{t.loading}</span> : <span>{t.failed}<button type=\"button\" className=\"w100n-docs-action\" onClick={() => setAttempt(n => n + 1)}>{t.retry}</button></span>}\n </div>}\n </div>\n </div>;\n}\n\nexport default SheetView;\n","export { DocumentOverlay } from './DocumentOverlay';\nexport { DocumentsWorkspace } from './DocumentsWorkspace';\nexport { GuestDocument, GuestRefused, type GuestRefusal } from './GuestDocument';\nexport { readDocx, writeDocx, type DocxModel } from './docx';\nexport { kindOf, kinds, matches, readable } from './kinds';\nexport { readDeck, writeDeck, type Deck, type DeckKind, type Slide } from './slides/deck';\nexport { SlidesView } from './slides/SlidesView';\nexport type { Comment, DocumentFile, DocumentKind, DocumentsHost, DocumentSummary, DocumentVersion, Fetch, GuestFile, GuestHost, GuestLink, Language, LinkEntry, Person, Place, Rights, Signature, SignatureMethod, Space } from './types';\n","import { Download, ExternalLink, FileSpreadsheet, FileText, FileType, Files, Presentation, X, type LucideIcon } from 'lucide-react';\nimport { lazy, Suspense, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useRestore } from './focus';\nimport { kindOf, readable } from './kinds';\nimport { SlidesView } from './slides/SlidesView';\nimport { texts } from './text';\nimport type { DocumentKind, DocumentsHost, Language } from './types';\nimport { useUnsaved } from './Unsaved';\nimport { useLoad } from './useLoad';\nimport PdfView from './viewers/PdfView';\nimport './styles.css';\n\nconst TextEditor = lazy(() => import('./editor/TextEditor'));\nconst SheetView = lazy(() => import('./sheets/SheetView'));\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\nconst read = { view: true, comment: false, edit: false };\nconst quiet = () => {};\n\nexport function DocumentOverlay({ source, name, mimeType, info, download, actions, onClose, onOpen, language = 'en', theme = 'light', worker, host, documentId }: {\n source: ArrayBuffer | Blob | string; name: string; mimeType?: string; info?: string; download?: string; actions?: ReactNode; onClose: () => void; onOpen?: () => void;\n language?: Language; theme?: 'light' | 'dark'; worker?: () => Worker; host?: DocumentsHost; documentId?: string;\n}) {\n const t = texts[language];\n const kind = kindOf(name, mimeType) ?? 'pdf';\n const Kind = icons[kind];\n const [saved, setSaved] = useState<ArrayBuffer | null>(null);\n const loaded = useLoad(async signal => {\n if (source instanceof ArrayBuffer) return source;\n if (source instanceof Blob) return source.arrayBuffer();\n const response = await fetch(source, { signal });\n if (!response.ok) throw new Error(`${response.status}`);\n return response.arrayBuffer();\n }, [source]);\n const doc = useLoad(signal => host && documentId ? host.document(documentId, { signal }) : Promise.resolve(null), [host, documentId]);\n const bytes = saved ?? loaded.data;\n const guard = useRef<(() => Promise<boolean>) | null>(null);\n const box = useRef<HTMLDivElement>(null);\n const { ask, dialog } = useUnsaved(guard, t);\n const close = () => ask(onClose);\n useRestore(true);\n useEffect(() => { box.current!.focus(); }, []);\n\n useEffect(() => {\n const escape = (e: KeyboardEvent) => { if (e.key !== 'Escape') return; e.stopPropagation(); close(); };\n const overflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n window.addEventListener('keydown', escape, true);\n return () => { window.removeEventListener('keydown', escape, true); document.body.style.overflow = overflow; };\n });\n\n const save = () => {\n const url = URL.createObjectURL(new Blob([bytes!], { type: 'application/pdf' }));\n const link = document.createElement('a');\n link.href = url;\n link.download = name;\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n };\n\n const sheet = readable(name, mimeType) !== 'sheet' ? null : /\\.csv$/i.test(name) || mimeType === 'text/csv' ? 'csv' : 'xlsx';\n const wait = <div className=\"w100n-docs-empty\">{t.loading}</div>;\n let stage: ReactNode = null;\n if (bytes && !doc.loading) {\n if (kind === 'pdf') stage = <PdfView bytes={bytes} t={t} language={language} worker={worker ?? host?.pdfWorker} rights={doc.data?.rights} host={doc.data ? host : undefined}\n documentId={documentId} onSaved={setSaved} guard={guard} />;\n else if (kind === 'docx' || kind === 'markdown') stage = <Suspense fallback={wait}>\n <TextEditor kind={kind} bytes={bytes} t={t} language={language} rights={read} documentId={documentId ?? name} onOutline={quiet} slot={null} />\n </Suspense>;\n else if (kind === 'slides') stage = <SlidesView html={new TextDecoder().decode(bytes)} name={name} rights={read} language={language} theme={theme} onOutline={quiet} />;\n else if (sheet) stage = <Suspense fallback={wait}><SheetView bytes={bytes} name={name} kind={sheet} rights={read} language={language} theme={theme} documentId={documentId ?? name} /></Suspense>;\n else stage = <div className=\"w100n-docs-empty\">{t.unsupported}</div>;\n }\n\n return createPortal(<div ref={box} className=\"w100n-docs w100n-docs-overlay\" data-theme={theme} role=\"dialog\" aria-modal aria-label={name} tabIndex={-1}>\n <header className=\"w100n-docs-bar\">\n <span className=\"w100n-docs-tile\" data-kind={kind}><Kind aria-hidden /></span>\n <div className=\"w100n-docs-heading\">\n <strong className=\"w100n-docs-title\">{name}</strong>\n {info && <span className=\"w100n-docs-crumbs\">{info}</span>}\n </div>\n <div className=\"w100n-docs-end\">\n {actions}\n {(download && !saved) || !bytes ? <a className=\"w100n-docs-action\" href={download ?? (typeof source === 'string' ? source : undefined)} download={name} aria-label={t.download}>\n <Download aria-hidden /><span>{t.download}</span>\n </a> : <button type=\"button\" className=\"w100n-docs-action\" onClick={save} aria-label={t.download}><Download aria-hidden /><span>{t.download}</span></button>}\n {onOpen && <button type=\"button\" className=\"w100n-docs-action\" onClick={() => ask(onOpen)} aria-label={t.openInDocuments}><ExternalLink aria-hidden /><span>{t.openInDocuments}</span></button>}\n <button type=\"button\" className=\"w100n-docs-close\" onClick={close} aria-label={t.close} title={t.close}><X aria-hidden /></button>\n </div>\n </header>\n <div className=\"w100n-docs-body\">\n <main className=\"w100n-docs-stage\">\n {loaded.error ? <div className=\"w100n-docs-empty\">{t.failed}<button type=\"button\" className=\"w100n-pdf-link\" onClick={loaded.retry}>{t.retry}</button></div>\n : stage ?? wait}\n </main>\n </div>\n {dialog}\n </div>, document.body);\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', xls: 'sheet', ods: 'sheet', tsv: '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 readable(name: string, mimeType?: string | null): DocumentKind | null {\n const kind = kindOf(name, mimeType);\n return kind !== 'sheet' || /\\.(xlsx|csv)$/i.test(name) || /spreadsheetml|text\\/csv/.test(mimeType ?? '') ? kind : 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 { ArrowDown, ArrowUp, ChevronLeft, ChevronRight, Copy, Maximize, Pause, Play, Projector, Redo2, RotateCcw, Save, StickyNote, Timer, Trash2, Undo2, X, type LucideIcon } from 'lucide-react';\nimport { useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { rove, useRestore } from '../focus';\nimport type { Language, Rights } from '../types';\nimport type { Guard } from '../Unsaved';\nimport type { Heading } from '../viewers/headings';\nimport { deleteSlide, duplicateSlide, moveSlide, readDeck, shape, titled, writeDeck, type Deck, type Slide } from './deck';\nimport { clean, framePage, nonceOf, type Mode } from './frame';\nimport { slidesTexts } from './text';\nimport './slides.css';\n\ntype State = { deck: Deck; past: Deck[]; future: Deck[]; group: string | null; epoch: number };\ntype Act = { type: 'set'; deck: Deck } | { type: 'text'; key: string; id: number; html: string } | { type: 'notes'; key: string; text: string } | { type: 'undo' } | { type: 'redo' };\ntype Key = { press: string; mod: boolean; shift: boolean; alt: boolean };\ntype Box = { w: number; h: number };\n\nconst load = (html: string) => {\n const form = shape(html);\n return { html, form, deck: readDeck(html, form) };\n};\n\nconst record = (s: State, deck: Deck, group: string | null): State =>\n ({ ...s, deck, past: group && group === s.group ? s.past : [...s.past.slice(-99), s.deck], future: [], group });\n\nfunction reduce(s: State, a: Act): State {\n if (a.type === 'set') return record(s, a.deck, null);\n if (a.type === 'undo') return s.past.length ? { deck: s.past[s.past.length - 1], past: s.past.slice(0, -1), future: [s.deck, ...s.future], group: null, epoch: s.epoch + 1 } : s;\n if (a.type === 'redo') return s.future.length ? { deck: s.future[0], past: [...s.past, s.deck], future: s.future.slice(1), group: null, epoch: s.epoch + 1 } : s;\n const slide = s.deck.slides.find(x => x.key === a.key);\n if (!slide) return s;\n let next: Slide;\n if (a.type === 'notes') {\n if (slide.notes === a.text) return s;\n next = { ...slide, notes: a.text };\n } else {\n const block = slide.blocks.find(b => b.id === a.id);\n if (!block || block.html === a.html) return s;\n next = { ...slide, blocks: slide.blocks.map(b => b === block ? { ...b, html: a.html } : b), title: slide.head === a.id ? titled(a.html) : slide.title };\n }\n return record(s, { ...s.deck, slides: s.deck.slides.map(x => x === slide ? next : x) }, `${a.type}:${a.key}:${a.type === 'text' ? a.id : ''}`);\n}\n\nconst differs = (a: Deck, b: Deck) => a.slides.length !== b.slides.length || a.slides.some((s, i) => s.from !== b.slides[i].from || s.stack !== b.slides[i].stack\n || s.notes !== b.slides[i].notes || s.blocks.some((x, k) => x.html !== b.slides[i].blocks[k].html));\n\nfunction useBox() {\n const [el, setEl] = useState<HTMLElement | null>(null);\n const [box, setBox] = useState<Box>({ w: 0, h: 0 });\n useEffect(() => {\n const Watch = (el?.ownerDocument.defaultView as typeof globalThis | null | undefined)?.ResizeObserver;\n if (!el || !Watch) return;\n const watch = new Watch(([entry]) => setBox({ w: entry.contentRect.width, h: entry.contentRect.height }));\n watch.observe(el);\n return () => watch.disconnect();\n }, [el]);\n return [setEl, box] as const;\n}\n\nexport function SlidesView({ html, name, rights, language = 'en', theme = 'light', baseUrl, scripts = false, onChange, onSaveRequest, onOutline, guard }: {\n html: string; name: string; rights: Rights; language?: Language; theme?: 'light' | 'dark'; baseUrl?: string; scripts?: boolean;\n onChange?: (dirty: boolean) => void; onSaveRequest?: (bytes: ArrayBuffer, note: string) => Promise<unknown>; onOutline?: (list: Heading[]) => void; guard?: Guard;\n}) {\n const t = slidesTexts[language];\n const [source, setSource] = useState(() => load(html));\n const [state, setState] = useState<State>(() => ({ deck: source.deck, past: [], future: [], group: null, epoch: 0 }));\n const live = useRef(state);\n const [saved, setSaved] = useState({ html, deck: source.deck });\n const [prop, setProp] = useState(html);\n const [at, setAt] = useState(0);\n if (html !== prop) {\n setProp(html);\n if (html !== saved.html) {\n const next = load(html);\n live.current = { deck: next.deck, past: [], future: [], group: null, epoch: state.epoch + 1 };\n setSource(next);\n setState(live.current);\n setSaved({ html, deck: next.deck });\n setAt(0);\n }\n }\n const act = (a: Act) => {\n live.current = reduce(live.current, a);\n setState(live.current);\n };\n\n const { deck, epoch } = state;\n const count = deck.slides.length;\n const index = Math.min(at, count - 1);\n const slide = deck.slides[index];\n const can = rights.edit && !!onSaveRequest;\n const movable = can && deck.kind !== 'page';\n const dirty = differs(saved.deck, deck);\n const [saving, setSaving] = useState<'idle' | 'busy' | 'done' | 'failed'>('idle');\n const [nonce] = useState(() => typeof document === 'undefined' ? '' : nonceOf(document));\n const made = useRef(0);\n const frames = useRef(new Map<string, HTMLIFrameElement>());\n const pages = useRef(new Map<string, string>());\n const root = useRef<HTMLDivElement>(null);\n const rail = useRef<HTMLElement>(null);\n const full = useRef(false);\n const channel = useRef<BroadcastChannel | null>(null);\n const [near, setNear] = useState<Set<string> | null>(() => typeof IntersectionObserver === 'undefined' ? null : new Set());\n const [drag, setDrag] = useState<number | null>(null);\n const [drop, setDrop] = useState<number | null>(null);\n const [presenting, setPresenting] = useState(false);\n const [popup, setPopup] = useState<Window | null>(null);\n const [blocked, setBlocked] = useState(false);\n const [nav, setNav] = useState({ at: 0, step: 0 });\n const [steps, setSteps] = useState<Record<string, number>>({});\n const [timer, setTimer] = useState<{ from: number; stop: number | null }>({ from: 0, stop: null });\n const [now, setNow] = useState(() => Date.now());\n const [stageRef, stageBox] = useBox();\n const [showRef, showBox] = useBox();\n const [nowRef, nowBox] = useBox();\n const [nextRef, nextBox] = useBox();\n\n const build = (s: Slide, id: string, mode: Mode) => framePage(source.html, source.form, s, { id, mode, edit: mode === 'edit' && can, nonce, base: baseUrl, scripts });\n const rendered: string[] = [];\n const frozen = (s: Slide, id: string, mode: Mode) => {\n rendered.push(id);\n const page = pages.current.get(id) ?? build(s, id, mode);\n pages.current.set(id, page);\n return page;\n };\n const fit = (box: Box, pad = 0) => box.w > pad && box.h > pad ? Math.min((box.w - pad) / deck.width, (box.h - pad) / deck.height) : 0.5;\n const byKey = (a: number, b: number) => deck.slides[a].key < deck.slides[b].key ? -1 : 1;\n const around = (i: number) => [i - 1, i, i + 1].filter(k => k >= 0 && k < count).sort(byKey);\n const caption = (i: number) => `${t.slide} ${i + 1}${deck.slides[i].title ? `: ${deck.slides[i].title}` : ''}`;\n const post = (id: string, msg: object) => frames.current.get(id)?.contentWindow?.postMessage(msg, '*');\n\n const frame = (id: string, page: string, scale: number, title: string, hidden = false, still = false) =>\n <span key={id} className=\"w100n-slides-frame\" data-hidden={hidden || undefined} style={{ width: Math.round(deck.width * scale), height: Math.round(deck.height * scale) }}>\n <iframe ref={el => { if (el) frames.current.set(id, el); else frames.current.delete(id); }} title={title} sandbox=\"allow-scripts\" referrerPolicy=\"no-referrer\" srcDoc={page}\n tabIndex={hidden || still ? -1 : undefined} aria-hidden={hidden || still || undefined} style={{ width: deck.width, height: deck.height, transform: `scale(${scale})` }} />\n </span>;\n\n const moveTo = (from: number, to: number) => {\n const d = live.current.deck;\n const next = moveSlide(d, from, to);\n if (next.slides.every((s, i) => s === d.slides[i])) return;\n act({ type: 'set', deck: next });\n setAt(next.slides.indexOf(d.slides[from]));\n };\n const duplicate = () => {\n act({ type: 'set', deck: duplicateSlide(live.current.deck, index, `d${++made.current}`) });\n setAt(index + 1);\n };\n const remove = () => {\n if (count < 2) return;\n act({ type: 'set', deck: deleteSlide(live.current.deck, index) });\n setAt(Math.min(index, count - 2));\n };\n const save = async () => {\n const d = live.current.deck;\n if (!can || saving === 'busy' || !differs(saved.deck, d)) return false;\n setSaving('busy');\n const out = writeDeck(source.html, d, source.form);\n try {\n await onSaveRequest!(new TextEncoder().encode(out).buffer as ArrayBuffer, t.savedNote);\n setSaved({ html: out, deck: d });\n setSaving('done');\n return true;\n } catch {\n setSaving('failed');\n return false;\n }\n };\n const press = (k: Key, typing = false) => {\n const key = k.press.toLowerCase();\n if (k.mod && key === 's') {\n void save();\n return true;\n }\n if (typing) return false;\n if (k.mod && (key === 'z' || key === 'y')) {\n if (can) act(key === 'y' || k.shift ? { type: 'redo' } : { type: 'undo' });\n return true;\n }\n if (k.mod && key === 'd' && movable) {\n duplicate();\n return true;\n }\n const step = /^(arrowdown|arrowright|pagedown)$/.test(key) ? 1 : /^(arrowup|arrowleft|pageup)$/.test(key) ? -1 : 0;\n if (step && k.alt) {\n if (movable) moveTo(index, index + step);\n return true;\n }\n if (step || key === 'home' || key === 'end') {\n setAt(key === 'home' ? 0 : key === 'end' ? count - 1 : Math.max(0, Math.min(count - 1, index + step)));\n return true;\n }\n return false;\n };\n\n const go = (to: number, step: number) => {\n const next = { at: Math.max(0, Math.min(count - 1, to)), step: Math.max(0, step) };\n setNav(next);\n channel.current?.postMessage({ w100nSlides: 'go', ...next });\n };\n const forward = () => {\n if (nav.step < (steps[deck.slides[nav.at].key] ?? 0)) go(nav.at, nav.step + 1);\n else if (nav.at < count - 1) go(nav.at + 1, 0);\n };\n const back = () => {\n if (nav.step > 0) go(nav.at, nav.step - 1);\n else if (nav.at > 0) go(nav.at - 1, steps[deck.slides[nav.at - 1].key] ?? 0);\n };\n const fullscreen = () => {\n if (document.fullscreenElement) {\n full.current = false;\n void document.exitFullscreen();\n } else root.current?.requestFullscreen?.().then(() => { full.current = true; }, () => {});\n };\n const start = () => {\n setNav({ at: index, step: 0 });\n setPresenting(true);\n fullscreen();\n };\n const stop = () => {\n setPresenting(false);\n setAt(nav.at);\n if (document.fullscreenElement) {\n full.current = false;\n void document.exitFullscreen();\n }\n popup?.close();\n setPopup(null);\n };\n const presenter = () => {\n if (popup && !popup.closed) {\n popup.focus();\n return;\n }\n const win = window.open('', 'w100n-presenter', 'popup,width=1280,height=780');\n setBlocked(!win);\n if (!win) return;\n win.document.head.replaceChildren(...[...document.querySelectorAll('style, link[rel=\"stylesheet\"]')].map(node => node.cloneNode(true)));\n win.document.title = `${t.presenter} · ${name}`;\n win.document.body.replaceChildren();\n Object.assign(win.document.body.style, { margin: '0', height: '100vh' });\n win.addEventListener('pagehide', () => setPopup(null));\n setPopup(win);\n setTimer({ from: Date.now(), stop: null });\n if (!presenting) {\n setNav({ at: index, step: 0 });\n setPresenting(true);\n }\n };\n\n useEffect(() => {\n const listen = (e: MessageEvent) => {\n const m = e.data as { w100nSlides?: unknown; key?: unknown; id?: unknown; html?: unknown; fragments?: unknown; press?: unknown; mod?: unknown; shift?: unknown; alt?: unknown } | null;\n if (!m || typeof m !== 'object' || typeof m.w100nSlides !== 'string' || typeof m.key !== 'string') return;\n const el = frames.current.get(m.key);\n if (!el || !e.source || el.contentWindow !== e.source) return;\n const [kind, key] = m.key.split(':');\n if (m.w100nSlides === 'text' && kind === 'm' && can && typeof m.id === 'number' && typeof m.html === 'string') act({ type: 'text', key, id: m.id, html: clean(m.html) });\n if (m.w100nSlides === 'key' && kind === 'm' && typeof m.press === 'string') press({ press: m.press, mod: !!m.mod, shift: !!m.shift, alt: !!m.alt });\n if (m.w100nSlides === 'ready' && typeof m.fragments === 'number') {\n const n = m.fragments;\n setSteps(old => old[key] === n ? old : { ...old, [key]: n });\n if ((kind === 'p' || kind === 'q') && deck.slides[nav.at]?.key === key) post(m.key, { w100nSlides: 'step', step: nav.step });\n }\n };\n window.addEventListener('message', listen);\n popup?.addEventListener('message', listen);\n return () => {\n window.removeEventListener('message', listen);\n popup?.removeEventListener('message', listen);\n };\n });\n\n useEffect(() => {\n for (const id of [...pages.current.keys()]) if (!rendered.includes(id)) pages.current.delete(id);\n });\n\n useEffect(() => { onChange?.(dirty); }, [dirty]);\n\n useEffect(() => {\n if (!guard || !dirty || !can) return;\n guard.current = save;\n return () => { guard.current = null; };\n });\n\n useRestore(presenting);\n\n useEffect(() => {\n if (!dirty) return;\n const stay = (e: BeforeUnloadEvent) => e.preventDefault();\n window.addEventListener('beforeunload', stay);\n return () => window.removeEventListener('beforeunload', stay);\n }, [dirty]);\n\n const order = deck.slides.map(s => s.key).join();\n const titles = deck.slides.map(s => s.title).join('\\n');\n useEffect(() => {\n onOutline?.(deck.slides.map((s, i) => ({ id: s.key, level: s.stack !== null && deck.slides[i - 1]?.stack === s.stack ? 2 : 1, text: `${i + 1}. ${s.title || t.slide}`, go: () => setAt(i) })));\n }, [order, titles, language]);\n\n useEffect(() => {\n const list = rail.current;\n if (!list || typeof IntersectionObserver === 'undefined') return;\n const watch = new IntersectionObserver(entries => setNear(old => {\n const next = new Set(old ?? []);\n for (const entry of entries) {\n const key = (entry.target as HTMLElement).dataset.key!;\n if (entry.isIntersecting) next.add(key);\n else next.delete(key);\n }\n return next;\n }), { root: list, rootMargin: '320px' });\n for (const li of list.querySelectorAll('li')) watch.observe(li);\n return () => watch.disconnect();\n }, [order]);\n\n useEffect(() => {\n rail.current?.querySelector<HTMLElement>('[aria-current=\"true\"]')?.scrollIntoView?.({ block: 'nearest' });\n }, [index]);\n\n useEffect(() => {\n if (!presenting && !popup) return;\n const key = deck.slides[nav.at]?.key;\n for (const id of frames.current.keys()) if (/^[pq]:/.test(id) && id.split(':')[1] === key) post(id, { w100nSlides: 'step', step: nav.step });\n }, [nav, presenting, popup, epoch]);\n\n useEffect(() => {\n if (!presenting && !popup) return;\n const keys = (e: KeyboardEvent) => {\n const k = e.key;\n if (/^(ArrowRight|ArrowDown|PageDown| |Enter|n|N)$/.test(k)) forward();\n else if (/^(ArrowLeft|ArrowUp|PageUp|Backspace|p|P)$/.test(k)) back();\n else if (k === 'Home' || k === 'End') go(k === 'Home' ? 0 : count - 1, 0);\n else if (k === 'Escape') stop();\n else if (k === 'f' || k === 'F') fullscreen();\n else return;\n e.preventDefault();\n e.stopPropagation();\n };\n if (presenting) window.addEventListener('keydown', keys, true);\n popup?.addEventListener('keydown', keys, true);\n const change = () => {\n if (document.fullscreenElement || !full.current) return;\n full.current = false;\n stop();\n };\n document.addEventListener('fullscreenchange', change);\n return () => {\n window.removeEventListener('keydown', keys, true);\n popup?.removeEventListener('keydown', keys, true);\n document.removeEventListener('fullscreenchange', change);\n };\n });\n\n useEffect(() => {\n if ((!presenting && !popup) || typeof BroadcastChannel === 'undefined') return;\n const ch = new BroadcastChannel(`w100n-slides:${name}`);\n ch.onmessage = (e: MessageEvent) => {\n const m = e.data as { w100nSlides?: unknown; at?: unknown; step?: unknown } | null;\n if (m?.w100nSlides === 'go' && typeof m.at === 'number' && typeof m.step === 'number') setNav({ at: Math.max(0, Math.min(count - 1, m.at)), step: Math.max(0, m.step) });\n };\n channel.current = ch;\n return () => {\n ch.close();\n channel.current = null;\n };\n }, [presenting, popup, name, count]);\n\n useEffect(() => {\n if (!popup) return;\n const tick = setInterval(() => setNow(Date.now()), 1000);\n return () => {\n clearInterval(tick);\n popup.close();\n };\n }, [popup]);\n\n const tool = (Icon: LucideIcon, text: string, run: () => void, disabled = false) =>\n <button type=\"button\" aria-label={text} title={text} disabled={disabled} onClick={run}><Icon aria-hidden /></button>;\n const thumb = 148;\n const seconds = Math.floor(Math.max(0, (timer.stop ?? now) - timer.from) / 1000);\n const elapsed = `${seconds >= 3600 ? `${Math.floor(seconds / 3600)}:` : ''}${String(Math.floor(seconds / 60) % 60).padStart(2, '0')}:${String(seconds % 60).padStart(2, '0')}`;\n const shown = deck.slides[Math.min(nav.at, count - 1)];\n const first = nav.at === 0 && nav.step === 0;\n const end = nav.at === count - 1 && nav.step >= (steps[shown.key] ?? 0);\n\n return <div ref={root} className=\"w100n-slides\" onKeyDown={e => {\n if (press({ press: e.key, mod: e.metaKey || e.ctrlKey, shift: e.shiftKey, alt: e.altKey }, /^(TEXTAREA|INPUT|SELECT)$/.test((e.target as HTMLElement).tagName))) e.preventDefault();\n }}>\n <div className=\"w100n-pdf-bar w100n-slides-bar\" role=\"toolbar\" aria-label={t.tools} onKeyDown={rove}>\n <button type=\"button\" className=\"w100n-docs-action\" onClick={start}><Play aria-hidden />{t.present}</button>\n {tool(Projector, t.presenter, presenter)}\n {movable && <>\n <span className=\"w100n-pdf-gap\" />\n {tool(Copy, t.duplicate, duplicate)}\n {tool(Trash2, t.remove, remove, count < 2)}\n {tool(ArrowUp, t.earlier, () => moveTo(index, index - 1), index === 0)}\n {tool(ArrowDown, t.later, () => moveTo(index, index + 1), index === count - 1)}\n </>}\n {can && <>\n <span className=\"w100n-pdf-gap\" />\n {tool(Undo2, t.undo, () => act({ type: 'undo' }), !state.past.length)}\n {tool(Redo2, t.redo, () => act({ type: 'redo' }), !state.future.length)}\n </>}\n <span className=\"w100n-pdf-pageno\">{index + 1} / {count}</span>\n {blocked && <span className=\"w100n-docs-muted\">{t.popup}</span>}\n {can && saving === 'failed' && <span className=\"w100n-docs-muted\">{t.saveFailed}</span>}\n {can && <button type=\"button\" className=\"w100n-docs-action\" disabled={!dirty || saving === 'busy'} onClick={() => void save()}>\n <Save aria-hidden />{saving === 'busy' ? t.saving : !dirty && saving === 'done' ? t.saved : t.save}\n </button>}\n </div>\n <div className=\"w100n-slides-body\">\n <nav ref={rail} className=\"w100n-slides-rail\" aria-label={t.slides}>\n <ol>{deck.slides.map((s, i) => <li key={s.key} data-key={s.key} data-stack={s.stack !== null && deck.slides[i - 1]?.stack === s.stack ? 'in' : undefined}\n data-drop={drop === i ? 'before' : drop === i + 1 && i === count - 1 ? 'after' : undefined}>\n <button type=\"button\" className=\"w100n-slides-thumb\" aria-current={i === index} aria-label={caption(i)} draggable={movable} data-dragging={drag === i || undefined}\n onClick={() => setAt(i)}\n onDragStart={e => {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', String(i));\n setDrag(i);\n }}\n onDragOver={e => {\n if (drag === null) return;\n e.preventDefault();\n const box = e.currentTarget.getBoundingClientRect();\n setDrop(e.clientY < box.top + box.height / 2 ? i : i + 1);\n }}\n onDrop={e => {\n e.preventDefault();\n if (drag !== null && drop !== null) moveTo(drag, drop > drag ? drop - 1 : drop);\n setDrag(null);\n setDrop(null);\n }}\n onDragEnd={() => { setDrag(null); setDrop(null); }}>{i + 1}</button>\n <span className=\"w100n-slides-mini\" style={{ width: thumb, height: Math.round(thumb * deck.height / deck.width) }}>\n {(!near || near.has(s.key)) && frame(`t:${s.key}`, build(s, `t:${s.key}`, 'thumb'), thumb / deck.width, caption(i), false, true)}\n </span>\n </li>)}</ol>\n </nav>\n <div className=\"w100n-slides-main\">\n <div ref={stageRef} className=\"w100n-slides-stage\" style={{ '--w100n-ratio': `${deck.width} / ${deck.height}` } as CSSProperties}>\n {around(index).map(i => {\n const id = `m:${deck.slides[i].key}:${epoch}`;\n return frame(id, frozen(deck.slides[i], id, 'edit'), fit(stageBox, 32), caption(i), i !== index);\n })}\n </div>\n <section className=\"w100n-slides-notes\" aria-label={t.notes}>\n <header><StickyNote aria-hidden />{t.notes}{can && <small>{t.editHint}</small>}</header>\n {can ? <textarea value={slide.notes} placeholder={t.notesHint} aria-label={t.notes} onChange={e => act({ type: 'notes', key: slide.key, text: e.target.value })} />\n : <p>{slide.notes || t.noNotes}</p>}\n </section>\n </div>\n </div>\n {presenting && <div ref={showRef} className=\"w100n-slides-show\" role=\"dialog\" aria-label={`${t.present} · ${name}`} onClick={forward}\n onContextMenu={e => { e.preventDefault(); back(); }}>\n {around(nav.at).map(i => {\n const id = `p:${deck.slides[i].key}:${epoch}`;\n return frame(id, frozen(deck.slides[i], id, 'present'), fit(showBox), caption(i), i !== nav.at, true);\n })}\n <span className=\"w100n-slides-count\">{nav.at + 1} / {count}</span>\n <div className=\"w100n-slides-foot\" onClick={e => e.stopPropagation()}>\n <div className=\"w100n-slides-controls\" role=\"toolbar\" aria-label={t.tools} onKeyDown={rove}>\n {tool(ChevronLeft, t.previous, back, first)}\n {tool(ChevronRight, t.next, forward, end)}\n {tool(Projector, t.presenter, presenter)}\n {tool(Maximize, t.fullscreen, fullscreen)}\n {tool(X, t.leave, stop)}\n </div>\n </div>\n </div>}\n {popup && createPortal(<div className=\"w100n-docs w100n-slides-presenter\" data-theme={theme}>\n <header className=\"w100n-slides-head\">\n <span className=\"w100n-docs-tile\"><Timer aria-hidden /></span>\n <b className=\"w100n-slides-time\" title={t.elapsed}>{elapsed}</b>\n {tool(timer.stop === null ? Pause : Play, timer.stop === null ? t.pause : t.resume,\n () => setTimer(timer.stop === null ? { ...timer, stop: Date.now() } : { from: timer.from + Date.now() - timer.stop, stop: null }))}\n {tool(RotateCcw, t.restart, () => setTimer({ from: Date.now(), stop: timer.stop === null ? null : Date.now() }))}\n <span className=\"w100n-docs-muted\">{t.now} {new Intl.DateTimeFormat(language, { hour: '2-digit', minute: '2-digit' }).format(now)}</span>\n <span className=\"w100n-slides-end\">\n <span className=\"w100n-pdf-pageno\">{nav.at + 1} / {count}</span>\n {tool(ChevronLeft, t.previous, back, first)}\n {tool(ChevronRight, t.next, forward, end)}\n <button type=\"button\" className=\"w100n-docs-action\" onClick={stop}><X aria-hidden />{t.leave}</button>\n </span>\n </header>\n <div className=\"w100n-slides-desk\">\n <div ref={nowRef} className=\"w100n-slides-now\">{frame(`q:${shown.key}:${epoch}`, frozen(shown, `q:${shown.key}:${epoch}`, 'present'), fit(nowBox, 16), caption(nav.at), false, true)}</div>\n <aside className=\"w100n-slides-side\">\n <p className=\"w100n-docs-caption\">{t.upNext}</p>\n <div ref={nextRef} className=\"w100n-slides-next\">\n {nav.at < count - 1 ? frame(`n:${deck.slides[nav.at + 1].key}:${epoch}`, frozen(deck.slides[nav.at + 1], `n:${deck.slides[nav.at + 1].key}:${epoch}`, 'thumb'),\n (nextBox.w || 320) / deck.width, caption(nav.at + 1), false, true) : <p className=\"w100n-docs-muted\">{t.last}</p>}\n </div>\n <p className=\"w100n-docs-caption\"><StickyNote aria-hidden />{t.notes}</p>\n <div className=\"w100n-slides-speech\">{shown.notes || t.noNotes}</div>\n </aside>\n </div>\n </div>, popup.document.body)}\n </div>;\n}\n","export type Attr = { value: string; at: [number, number] | null };\nexport type Text = { text: true; start: number; end: number };\nexport type El = { text?: undefined; tag: string; attrs: Map<string, Attr>; start: number; open: number; close: number; end: number; children: (El | Text)[]; parent: El | null };\n\nconst voids = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']);\nconst raws = new Set(['script', 'style', 'textarea', 'title', 'xmp', 'iframe', 'noembed', 'noframes', 'noscript']);\nconst breaks = new Set(['address', 'article', 'aside', 'blockquote', 'details', 'dialog', 'div', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul']);\nconst fences = new Set(['button', 'table', 'td', 'th', 'caption', 'template', 'object', 'marquee', 'applet', 'html']);\nconst peers: Record<string, [string[], string[]]> = {\n li: [['li'], ['ul', 'ol']], dt: [['dt', 'dd'], ['dl']], dd: [['dt', 'dd'], ['dl']], option: [['option'], ['select', 'datalist', 'optgroup']],\n tr: [['tr', 'td', 'th'], ['table', 'thead', 'tbody', 'tfoot']], td: [['td', 'th'], ['tr', 'table']], th: [['td', 'th'], ['tr', 'table']],\n thead: [['thead', 'tbody', 'tfoot'], ['table']], tbody: [['thead', 'tbody', 'tfoot'], ['table']], tfoot: [['thead', 'tbody', 'tfoot'], ['table']],\n};\nconst names: Record<string, string> = {\n amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\", nbsp: ' ', mdash: '—', ndash: '–', hellip: '…', rsquo: '’', lsquo: '‘',\n rdquo: '”', ldquo: '“', laquo: '«', raquo: '»', copy: '©', reg: '®', trade: '™', middot: '·', bull: '•', euro: '€', times: '×',\n};\n\nexport const decode = (s: string) => s.replace(/&(#x[0-9a-f]+|#\\d+|[a-z][a-z0-9]*);?/gi, (all, e: string) => {\n if (e[0] !== '#') return names[e.toLowerCase()] ?? all;\n const code = e[1] === 'x' || e[1] === 'X' ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);\n return code > 0 && code < 0x110000 ? String.fromCodePoint(code) : all;\n});\n\nconst tagName = /<([a-zA-Z][^\\s/>]*)/y;\nconst endTag = /<\\/([a-zA-Z][^\\s/>]*)[^>]*>/y;\nconst attrName = /[^\\s/>=]+/y;\nconst bare = /[^\\s>]*/y;\n\nconst sticky = (re: RegExp, s: string, at: number) => {\n re.lastIndex = at;\n return re.exec(s);\n};\n\nexport function parse(html: string): El {\n const len = html.length;\n const root: El = { tag: '#root', attrs: new Map(), start: 0, open: 0, close: len, end: len, children: [], parent: null };\n const stack: El[] = [root];\n let foreign = 0;\n const top = () => stack[stack.length - 1];\n const text = (start: number, end: number) => { if (end > start) top().children.push({ text: true, start, end }); };\n const shut = (k: number, at: number, end: number) => {\n for (let i = stack.length - 1; i > k; i--) stack[i].close = stack[i].end = at;\n stack[k].close = at;\n stack[k].end = end;\n for (let i = stack.length - 1; i >= k; i--) if (stack[i].tag === 'svg' || stack[i].tag === 'math') foreign--;\n stack.length = k;\n };\n const seek = (tags: string[], stop: Set<string> | string[]) => {\n for (let k = stack.length - 1; k > 0; k--) {\n if (tags.includes(stack[k].tag)) return k;\n if (Array.isArray(stop) ? stop.includes(stack[k].tag) : stop.has(stack[k].tag)) return -1;\n }\n return -1;\n };\n let i = 0;\n let from = 0;\n while (i < len) {\n const lt = html.indexOf('<', i);\n if (lt < 0) break;\n const next = html[lt + 1];\n if (html.startsWith('<!--', lt)) {\n text(from, lt);\n const e = html.indexOf('-->', lt + 4);\n i = from = e < 0 ? len : e + 3;\n continue;\n }\n if (next === '!' || next === '?') {\n text(from, lt);\n const e = html.indexOf('>', lt);\n i = from = e < 0 ? len : e + 1;\n continue;\n }\n if (next === '/') {\n const m = sticky(endTag, html, lt);\n if (!m) { i = lt + 1; continue; }\n text(from, lt);\n const k = seek([m[1].toLowerCase()], []);\n if (k > 0) shut(k, lt, lt + m[0].length);\n i = from = lt + m[0].length;\n continue;\n }\n const m = sticky(tagName, html, lt);\n if (!m) { i = lt + 1; continue; }\n text(from, lt);\n const tag = m[1].toLowerCase();\n const attrs = new Map<string, Attr>();\n let j = lt + m[0].length;\n let closing = false;\n while (j < len) {\n while (j < len && /[\\s/]/.test(html[j])) { closing = html[j] === '/'; j++; }\n if (j >= len) break;\n if (html[j] === '>') { j++; break; }\n closing = false;\n const n = sticky(attrName, html, j) ?? [html[j]];\n j += n[0].length;\n while (j < len && /\\s/.test(html[j])) j++;\n let value = '';\n let at: [number, number] | null = null;\n if (html[j] === '=') {\n j++;\n while (j < len && /\\s/.test(html[j])) j++;\n const q = html[j];\n if (q === '\"' || q === \"'\") {\n const e = html.indexOf(q, j + 1);\n at = [j + 1, e < 0 ? len : e];\n j = e < 0 ? len : e + 1;\n } else {\n const v = sticky(bare, html, j)!;\n at = [j, j + v[0].length];\n j += v[0].length;\n }\n value = decode(html.slice(at[0], at[1]));\n }\n const key = n[0].toLowerCase();\n if (!attrs.has(key)) attrs.set(key, { value, at });\n }\n if (breaks.has(tag)) {\n const k = seek(['p'], fences);\n if (k > 0) shut(k, lt, lt);\n }\n if (peers[tag]) {\n const k = seek(peers[tag][0], peers[tag][1]);\n if (k > 0) shut(k, lt, lt);\n }\n const el: El = { tag, attrs, start: lt, open: j, close: j, end: j, children: [], parent: top() };\n top().children.push(el);\n i = from = j;\n if (voids.has(tag) || (closing && (foreign > 0 || tag === 'svg' || tag === 'math'))) continue;\n if (raws.has(tag) && !foreign) {\n const re = new RegExp(`</${tag}[\\\\s/>]`, 'gi');\n re.lastIndex = j;\n const hit = re.exec(html);\n const e = hit ? hit.index : len;\n el.children.push({ text: true, start: j, end: e });\n const gt = hit ? html.indexOf('>', e) : -1;\n el.close = e;\n el.end = gt < 0 ? len : gt + 1;\n i = from = el.end;\n continue;\n }\n if (tag === 'svg' || tag === 'math') foreign++;\n stack.push(el);\n }\n text(from, len);\n for (let k = stack.length - 1; k > 0; k--) stack[k].close = stack[k].end = len;\n return root;\n}\n\nexport function elements(root: El): El[] {\n const out: El[] = [];\n const walk = (el: El) => {\n for (const part of el.children) if (!part.text) { out.push(part); walk(part); }\n };\n walk(root);\n return out;\n}\n\nexport const classes = (el: El) => (el.attrs.get('class')?.value ?? '').split(/\\s+/).filter(Boolean);\n\nexport const under = (el: El, test: (up: El) => boolean) => {\n for (let up = el.parent; up; up = up.parent) if (test(up)) return true;\n return false;\n};\n","import { classes, decode, elements, parse, under, type Attr, type El } from './html';\n\nexport type DeckKind = 'reveal' | 'marked' | 'sections' | 'page';\nexport type Block = { id: number; html: string };\nexport type Slide = { key: string; from: number; stack: number | null; title: string; head: number | null; notes: string; blocks: Block[] };\nexport type Deck = { kind: DeckKind; width: number; height: number; center: boolean; slides: Slide[] };\n\nexport type Spot = { el: El; stack: number | null; notes: El | null; attr: Attr | null; blocks: El[] };\nexport type Shape = {\n kind: DeckKind; width: number; height: number; center: boolean; root: El; box: El; units: El[]; stacks: El[]; spots: Spot[];\n scripts: El[]; refresh: El[]; head: number; body: El | null;\n};\nexport type Cut = [number, number, string];\n\nexport const inline = new Set(['a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'del', 'dfn', 'em', 'font', 'i', 'ins', 'kbd', 'mark', 'q', 's', 'samp',\n 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr']);\nconst skip = new Set(['script', 'style', 'template', 'svg', 'math', 'iframe', 'object', 'embed', 'video', 'audio', 'canvas', 'select', 'textarea', 'noscript',\n 'img', 'picture', 'input', 'button']);\nconst boxes = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'li', 'td', 'th', 'dt', 'dd', 'figcaption', 'caption', 'blockquote', 'pre']);\n\nconst most = (list: El[]) => {\n const count = new Map<El, number>();\n for (const el of list) count.set(el.parent!, (count.get(el.parent!) ?? 0) + 1);\n return [...count].sort((a, b) => b[1] - a[1])[0][0];\n};\n\nconst flat = (el: El, html: string) => {\n let text = false;\n const visit = (e: El): boolean => e.children.every(part => {\n if (part.text) {\n text ||= /\\S/.test(html.slice(part.start, part.end));\n return true;\n }\n return inline.has(part.tag) && visit(part);\n });\n return visit(el) && (text || boxes.has(el.tag));\n};\n\nconst blocksOf = (el: El, html: string, notes: El | null) => {\n if (flat(el, html)) return [el];\n const out: El[] = [];\n const walk = (e: El) => {\n for (const part of e.children) {\n if (part.text || part === notes || skip.has(part.tag) || part.attrs.get('contenteditable')?.value === 'false') continue;\n if (flat(part, html)) out.push(part);\n else walk(part);\n }\n };\n walk(el);\n return out;\n};\n\nconst notesOf = (el: El) => elements(el).find(e => e.tag === 'aside' && classes(e).includes('notes')) ?? null;\n\nexport const toText = (src: string) => decode(src.replace(/<!--[\\s\\S]*?-->/g, '').replace(/\\s+/g, ' ').replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<\\/(p|div|li|h[1-6]|blockquote|pre|tr)>/gi, '\\n').replace(/<[^>]*>/g, '')).split('\\n').map(line => line.trim()).join('\\n').replace(/\\n{3,}/g, '\\n\\n').trim();\n\nexport const titled = (src: string) => toText(src).replace(/\\s+/g, ' ').slice(0, 80);\n\nconst escape = (s: string) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\nexport const quote = (s: string) => escape(s).replace(/\"/g, '"');\nconst notesHtml = (text: string) => escape(text).split('\\n').join('<br>\\n');\n\nconst sizeOf = (html: string, kind: DeckKind, scripts: El[], styles: El[], marks: El[]) => {\n if (kind === 'reveal') {\n const code = scripts.map(s => html.slice(s.open, s.close)).join('\\n');\n const at = code.search(/Reveal\\.initialize\\s*\\(/);\n const init = at < 0 ? '' : code.slice(at, at + 4000);\n const width = Number(/\\bwidth\\s*:\\s*['\"]?(\\d+)/.exec(init)?.[1] ?? 960);\n const height = Number(/\\bheight\\s*:\\s*['\"]?(\\d+)/.exec(init)?.[1] ?? 700);\n return { width, height, center: !/\\bcenter\\s*:\\s*false/.test(init) };\n }\n for (const el of marks) {\n const width = Number(el.attrs.get('data-width')?.value);\n const height = Number(el.attrs.get('data-height')?.value);\n if (width > 0 && height > 0) return { width, height, center: false };\n }\n const css = styles.map(s => html.slice(s.open, s.close)).join('\\n').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n const target = kind === 'marked' ? /(^|[\\s>])\\[data-slide[^\\]]*\\](\\.[\\w-]+)*$/ : /(^|[\\s>])(section|\\.slide)(\\.[\\w-]+)*$/;\n for (const rule of css.matchAll(/([^{}]+)\\{([^{}]*)\\}/g)) {\n if (!rule[1].split(',').some(sel => target.test(sel.trim()))) continue;\n const width = Number(/(?:^|;|\\s)width\\s*:\\s*(\\d+)px/.exec(rule[2])?.[1]);\n const height = Number(/(?:^|;|\\s)height\\s*:\\s*(\\d+)px/.exec(rule[2])?.[1]);\n if (width >= 320 && height >= 180) return { width, height, center: false };\n }\n return { width: 1280, height: 720, center: false };\n};\n\nexport function shape(html: string): Shape {\n const root = parse(html);\n const all = elements(root);\n const scripts = all.filter(el => el.tag === 'script');\n const styles = all.filter(el => el.tag === 'style');\n const refresh = all.filter(el => el.tag === 'meta' && el.attrs.get('http-equiv')?.value.toLowerCase() === 'refresh');\n const head = all.find(el => el.tag === 'head');\n const outer = all.find(el => el.tag === 'html');\n const body = all.find(el => el.tag === 'body') ?? null;\n const doctype = /^\\s*<!doctype[^>]*>/i.exec(html);\n const at = head ? head.open : outer ? outer.open : doctype ? doctype[0].length : 0;\n const reveal = all.find(el => classes(el).includes('reveal')) ?? null;\n const box = reveal && all.find(el => classes(el).includes('slides') && under(el, up => up === reveal));\n const spots: Spot[] = [];\n const stacks: El[] = [];\n const spot = (el: El, stack: number | null) => {\n const notes = notesOf(el);\n spots.push({ el, stack, notes, attr: notes ? null : el.attrs.get('data-notes') ?? null, blocks: blocksOf(el, html, notes) });\n };\n let kind: DeckKind;\n let units: El[];\n let container: El;\n if (box && box.children.some(part => !part.text && part.tag === 'section')) {\n kind = 'reveal';\n container = box;\n units = box.children.filter((part): part is El => !part.text && part.tag === 'section');\n for (const unit of units) {\n const inner = unit.children.filter((part): part is El => !part.text && part.tag === 'section');\n if (!inner.length) spot(unit, null);\n else {\n stacks.push(unit);\n for (const el of inner) spot(el, stacks.length - 1);\n }\n }\n } else {\n const marked = all.filter(el => el.attrs.has('data-slide'));\n const tops = marked.filter(el => !under(el, up => up.attrs.has('data-slide')));\n const sections = all.filter(el => el.tag === 'section' && !under(el, up => up.tag === 'section'));\n const list = tops.length ? tops : sections;\n kind = tops.length ? 'marked' : sections.length ? 'sections' : 'page';\n if (list.length) {\n container = most(list);\n units = list.filter(el => el.parent === container);\n } else {\n const page = body ?? root;\n container = page.parent ?? root;\n units = [page];\n }\n for (const unit of units) spot(unit, null);\n }\n const size = sizeOf(html, kind, scripts, styles, [container, ...(body ? [body] : []), ...(outer ? [outer] : [])]);\n return { kind, ...size, root, box: container, units, stacks, spots, scripts, refresh, head: at, body };\n}\n\nconst titleOf = (html: string, s: Spot) => {\n const heading = elements(s.el).find(el => /^h[1-6]$/.test(el.tag) && !(s.notes && under(el, up => up === s.notes)));\n const el = heading ?? s.blocks[0];\n const head = el ? s.blocks.indexOf(el) : -1;\n return { title: el ? titled(html.slice(el.open, el.close)) : '', head: head < 0 ? null : head };\n};\n\nconst notesText = (html: string, s: Spot) => s.notes ? toText(html.slice(s.notes.open, s.notes.close)) : s.attr ? s.attr.value.trim() : '';\n\nexport function readDeck(html: string, known?: Shape): Deck {\n const s = known ?? shape(html);\n return {\n kind: s.kind, width: s.width, height: s.height, center: s.center,\n slides: s.spots.map((spot, i) => ({\n key: `s${i}`, from: i, stack: spot.stack, ...titleOf(html, spot), notes: notesText(html, spot),\n blocks: spot.blocks.map((el, id) => ({ id, html: html.slice(el.open, el.close) })),\n })),\n };\n}\n\nexport function cuts(html: string, s: Spot, slide: Slide, stamp: boolean): Cut[] {\n const out: Cut[] = [];\n s.blocks.forEach((el, i) => {\n if (stamp && el !== s.el) out.push([el.start + 1 + el.tag.length, el.start + 1 + el.tag.length, ` data-w100n-id=\"${i}\"`]);\n const now = slide.blocks[i]?.html;\n if (now !== undefined && now !== html.slice(el.open, el.close)) out.push([el.open, el.close, now]);\n });\n if (slide.notes !== notesText(html, s)) {\n if (s.notes) out.push([s.notes.open, s.notes.close, notesHtml(slide.notes)]);\n else if (s.attr?.at) {\n const quoted = /[\"']/.test(html[s.attr.at[0] - 1] ?? '');\n out.push([s.attr.at[0], s.attr.at[1], quoted ? quote(slide.notes) : `\"${quote(slide.notes)}\"`]);\n } else if (slide.notes.trim()) {\n const inner = html.slice(s.el.open, s.el.close);\n const lead = /^\\s*/.exec(inner)![0];\n const tail = /\\s*$/.exec(inner)![0];\n const indent = lead.includes('\\n') ? lead.slice(lead.lastIndexOf('\\n')) : '';\n const at = Math.max(s.el.open, s.el.close - tail.length);\n out.push([at, at, `${indent}<aside class=\"notes\">${notesHtml(slide.notes)}</aside>`]);\n }\n }\n return out;\n}\n\nexport function apply(html: string, from: number, to: number, list: Cut[]) {\n const sorted = [...list].sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n const out: string[] = [];\n let at = from;\n for (const [start, end, put] of sorted) {\n if (start < at || end > to) continue;\n out.push(html.slice(at, start), put);\n at = end;\n }\n out.push(html.slice(at, to));\n return out.join('');\n}\n\nconst blank = (s: string) => !/\\S/.test(s);\n\nconst join = (html: string, box: El, els: El[], parts: [number, string][]) => {\n const head = html.slice(box.open, els[0].start);\n const pre = els.map((el, i) => i ? html.slice(els[i - 1].end, el.start) : '');\n const fill = pre.find((gap, i) => i && blank(gap)) ?? (/\\s*$/.exec(head)![0] || '\\n');\n const used = new Set<number>();\n const body = parts.map(([from, part], k) => {\n const first = !used.has(from);\n used.add(from);\n if (k) return (first && from ? pre[from] : fill) + part;\n return (first && !blank(pre[from]) ? pre[from].trimStart() : '') + part;\n });\n const lost = pre.filter((gap, i) => !used.has(i) && !blank(gap)).map(gap => gap.trimEnd());\n return head + body.join('') + lost.join('') + html.slice(els[els.length - 1].end, box.close);\n};\n\nexport function writeDeck(original: string, deck: Deck, known?: Shape): string {\n const s = known ?? shape(original);\n const piece = (slide: Slide) => {\n const spot = s.spots[slide.from];\n return apply(original, spot.el.start, spot.el.end, cuts(original, spot, slide, false));\n };\n const units: [number, string][] = [];\n for (let i = 0; i < deck.slides.length;) {\n const stack = deck.slides[i].stack;\n if (stack === null) {\n const slide = deck.slides[i++];\n units.push([s.units.indexOf(s.spots[slide.from].el), piece(slide)]);\n continue;\n }\n let j = i;\n while (j < deck.slides.length && deck.slides[j].stack === stack) j++;\n const el = s.stacks[stack];\n const kids = s.spots.filter(spot => spot.stack === stack).map(spot => spot.el);\n const inner = join(original, el, kids, deck.slides.slice(i, j).map(slide => [kids.indexOf(s.spots[slide.from].el), piece(slide)]));\n units.push([s.units.indexOf(el), original.slice(el.start, el.open) + inner + original.slice(el.close, el.end)]);\n i = j;\n }\n return original.slice(0, s.box.open) + join(original, s.box, s.units, units) + original.slice(s.box.close);\n}\n\nexport function moveSlide(deck: Deck, from: number, to: number): Deck {\n const slide = deck.slides[from];\n const rest = deck.slides.filter((_, i) => i !== from);\n let at = Math.max(0, Math.min(rest.length, to));\n const run = rest.flatMap((other, i) => slide.stack !== null && other.stack === slide.stack ? [i] : []);\n if (run.length) at = Math.max(run[0], Math.min(run[run.length - 1] + 1, at));\n else if (at > 0 && at < rest.length && rest[at].stack !== null && rest[at - 1].stack === rest[at].stack) {\n let end = at;\n while (end < rest.length && rest[end].stack === rest[at].stack) end++;\n at = to > from ? end : rest.findIndex(other => other.stack === rest[at].stack);\n }\n return { ...deck, slides: [...rest.slice(0, at), slide, ...rest.slice(at)] };\n}\n\nexport const duplicateSlide = (deck: Deck, i: number, key: string): Deck =>\n ({ ...deck, slides: [...deck.slides.slice(0, i + 1), { ...deck.slides[i], key }, ...deck.slides.slice(i + 1)] });\n\nexport const deleteSlide = (deck: Deck, i: number): Deck => ({ ...deck, slides: deck.slides.filter((_, k) => k !== i) });\n","import { apply, cuts, inline, quote, type Cut, type Shape, type Slide } from './deck';\nimport type { El } from './html';\n\nexport type Mode = 'edit' | 'thumb' | 'present';\n\nconst bridge = \"(function(){var me=document.currentScript,d=me.dataset,key=d.key,root=document.documentElement,edit=d.edit==='1',H=+d.h;\" +\n \"root.setAttribute('data-w100n-mode',d.mode);if(edit)root.setAttribute('data-w100n-edit','');\" +\n \"function send(m){m.key=key;parent.postMessage(m,'*')}\" +\n \"var slide=null,groups=[],on=null,snap='',last='',timer=0;\" +\n \"function center(){if(!slide||d.center!=='1')return;slide.style.top='0px';slide.style.top=Math.max(0,(H-slide.scrollHeight)/2)+'px'}\" +\n \"function collect(){var keyed={},order=[],loose=[];[].slice.call(slide.querySelectorAll('.fragment')).forEach(function(el){var i=el.getAttribute('data-fragment-index');\" +\n \"if(i===null||isNaN(+i))loose.push([el]);else{if(!keyed[i]){keyed[i]=[];order.push(+i)}keyed[i].push(el)}});\" +\n \"order.sort(function(a,b){return a-b});groups=order.map(function(i){return keyed[i]}).concat(loose)}\" +\n \"function step(n){groups.forEach(function(g,i){g.forEach(function(el){el.classList.toggle('visible',i<n);el.classList.toggle('current-fragment',i===n-1)})})}\" +\n \"function report(){clearTimeout(timer);if(on&&on.innerHTML!==last){last=on.innerHTML;send({w100nSlides:'text',id:+on.getAttribute('data-w100n-id'),html:last});center()}}\" +\n \"function begin(el){if(on)end();on=el;snap=last=el.innerHTML;el.setAttribute('contenteditable','true')}\" +\n \"function end(){var el=on;if(!el)return;report();el.removeAttribute('contenteditable');on=null}\" +\n \"function start(){slide=document.querySelector('[data-w100n-slide]')||document.body;collect();center();if(window.ResizeObserver)new ResizeObserver(center).observe(slide);send({w100nSlides:'ready',fragments:groups.length})}\" +\n \"if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start);else start();\" +\n \"addEventListener('load',center);if(document.fonts)document.fonts.ready.then(center);\" +\n \"addEventListener('message',function(e){var m=e.source===parent&&e.data;if(m&&m.w100nSlides==='step')step(+m.step||0)});\" +\n \"addEventListener('click',function(e){if(e.target.closest&&e.target.closest('a'))e.preventDefault()},true);\" +\n \"addEventListener('pointerdown',function(e){var el=edit&&e.target.closest&&e.target.closest('[data-w100n-id]');if(el&&el!==on)begin(el)},true);\" +\n \"addEventListener('focusout',function(e){if(on&&e.target===on)end()});\" +\n \"addEventListener('input',function(){clearTimeout(timer);timer=setTimeout(report,250)});\" +\n \"addEventListener('paste',function(e){if(!on)return;e.preventDefault();document.execCommand('insertText',false,e.clipboardData?e.clipboardData.getData('text/plain'):'')},true);\" +\n \"addEventListener('drop',function(e){if(on)e.preventDefault()},true);\" +\n \"addEventListener('keydown',function(e){var k=e.key,mod=e.metaKey||e.ctrlKey;if(on){\" +\n \"if(k==='Enter'&&!e.shiftKey){e.preventDefault();on.blur()}else if(k==='Enter'){e.preventDefault();document.execCommand('insertLineBreak')}\" +\n \"else if(k==='Escape'){e.preventDefault();on.innerHTML=snap;report();on.blur()}\" +\n \"else if(mod&&k.toLowerCase()==='s'){e.preventDefault();report();send({w100nSlides:'key',press:'s',mod:true,shift:false,alt:false})}return}\" +\n \"if(/^(Arrow|Page|Home$|End$|Escape$| $)/.test(k)||mod&&/^[szy]$/i.test(k)){e.preventDefault();send({w100nSlides:'key',press:k,mod:mod,shift:e.shiftKey,alt:e.altKey})}},true)})()\";\n\nconst retag = (el: El, add: Record<string, string>, extra: string[]) => {\n const list = new Map([...el.attrs].map(([name, attr]) => [name, attr.value]));\n if (extra.length) list.set('class', [...(list.get('class') ?? '').split(/\\s+/).filter(Boolean), ...extra].join(' '));\n for (const [name, value] of Object.entries(add)) list.set(name, value);\n return `<${el.tag}${[...list].map(([name, value]) => ` ${name}=\"${quote(value)}\"`).join('')}>`;\n};\n\nconst folder = (url?: string) => {\n if (!url) return '';\n try {\n const u = new URL(url);\n return /^https?:$/.test(u.protocol) ? (u.origin + u.pathname.replace(/[^/]*$/, '')).replace(/[;,'\"\\s]/g, encodeURIComponent) : '';\n } catch {\n return '';\n }\n};\n\nconst policy = (nonce: string, scripts: boolean, base: string) => {\n const b = base ? ` ${base}` : '';\n return [\n \"default-src 'none'\", `script-src ${scripts ? `'unsafe-inline' 'unsafe-eval'${b}` : `'nonce-${nonce}'`}`, `style-src 'unsafe-inline'${b}`, `img-src data: blob:${b}`,\n `font-src data:${b}`, `media-src data: blob:${b}`, `connect-src ${scripts && base ? base : \"'none'\"}`, \"frame-src 'none'\", \"object-src 'none'\", \"form-action 'none'\",\n `base-uri ${base || \"'none'\"}`,\n ].join('; ');\n};\n\nconst css = (value: string) => value.replace(/[<>{};\\\\\"\\n\\r]/g, '');\n\nconst backdrop = (els: El[]) => {\n for (const el of els) {\n const get = (name: string) => el.attrs.get(name)?.value.trim();\n const plain = get('data-background');\n const image = get('data-background-image') ?? (plain && (/^(https?:|file:|\\/\\/)/i.test(plain) || /\\.(svg|png|jpe?g|gif|bmp|webp)([?#\\s]|$)/i.test(plain)) ? plain : undefined);\n const color = get('data-background-color') ?? (plain && !image ? plain : undefined);\n if (!image && !color) continue;\n return `.reveal{${color ? `background-color:${css(color)}!important;` : ''}${image ? `background-image:url(\"${css(image)}\")!important;background-size:${css(get('data-background-size') ?? 'cover')};` +\n `background-position:${css(get('data-background-position') ?? 'center')};background-repeat:${css(get('data-background-repeat') ?? 'no-repeat')};` : ''}}`;\n }\n return '';\n};\n\nconst layout = (s: Shape, els: El[]) => {\n const { width: w, height: h } = s;\n const page = s.kind === 'page' ? '' : `html,body{margin:0!important;width:${w}px!important;height:${h}px!important;overflow:hidden!important}`;\n const reveal = s.kind !== 'reveal' ? '' : `.reveal{position:relative!important;width:${w}px!important;height:${h}px!important;overflow:hidden!important}` +\n `.reveal .slides{position:absolute!important;left:0!important;top:0!important;right:auto!important;bottom:auto!important;width:${w}px!important;height:${h}px!important;` +\n 'margin:0!important;transform:none!important;zoom:1!important;pointer-events:auto!important;text-align:center}' +\n '.reveal .slides>section,.reveal .slides>section>section{position:absolute;left:0;width:100%;box-sizing:border-box}' +\n '[data-w100n-stack]{top:0!important;height:100%}.reveal .backgrounds,.reveal .controls,.reveal .progress,.reveal .slide-number{display:none!important}' +\n '[data-w100n-slide],[data-w100n-stack]{display:block!important;transform:none!important}' + backdrop(els);\n return page + reveal + '[data-w100n-slide],[data-w100n-stack]{visibility:visible!important;opacity:1!important}' +\n 'aside.notes{display:none!important}a[href]{pointer-events:none!important}[data-w100n-edit] [data-w100n-id]{cursor:text}' +\n '[data-w100n-edit] [data-w100n-id]:hover{outline:1.5px dashed #8b5cf6aa;outline-offset:3px}[data-w100n-id][contenteditable=true]{outline:2px solid #8b5cf6!important;outline-offset:3px}' +\n '[data-w100n-mode=present] .fragment{transition:opacity .25s}[data-w100n-mode=present] .fragment:not(.visible){opacity:0;visibility:hidden}' +\n 'html:not([data-w100n-mode=present]) .fragment{opacity:1!important;visibility:inherit!important}';\n};\n\nexport function framePage(html: string, s: Shape, slide: Slide, o: { id: string; mode: Mode; edit: boolean; nonce: string; base?: string; scripts?: boolean }) {\n const spot = s.spots[slide.from];\n const unit = spot.stack === null ? spot.el : s.stacks[spot.stack];\n const reveal = s.kind === 'reveal';\n const list: Cut[] = [];\n for (const el of s.units) if (el !== unit) list.push([el.start, el.end, '']);\n if (spot.stack !== null) {\n for (const other of s.spots) if (other.stack === spot.stack && other !== spot) list.push([other.el.start, other.el.end, '']);\n list.push([unit.start, unit.open, retag(unit, { 'data-w100n-stack': '' }, reveal ? ['stack', 'present'] : [])]);\n }\n list.push(...cuts(html, spot, slide, true));\n if (spot.el.tag !== '#root') list.push([spot.el.start, spot.el.open, retag(spot.el, { 'data-w100n-slide': '', ...(spot.blocks[0] === spot.el ? { 'data-w100n-id': '0' } : {}) }, reveal ? ['present'] : ['active', 'current'])]);\n if (reveal && s.body) list.push([s.body.start, s.body.open, retag(s.body, {}, ['reveal-viewport'])]);\n for (const el of s.refresh) list.push([el.start, el.end, '']);\n for (const el of s.scripts) list.push(o.scripts ? [el.start + 7, el.start + 7, o.nonce ? ` nonce=\"${quote(o.nonce)}\"` : ''] : [el.start, el.end, '']);\n const base = folder(o.base);\n const tag = `<script nonce=\"${quote(o.nonce)}\" data-key=\"${quote(o.id)}\" data-mode=\"${o.mode}\" data-edit=\"${o.edit ? 1 : 0}\" data-h=\"${s.height}\" data-center=\"${reveal && s.center ? 1 : 0}\">`;\n list.push([s.head, s.head, `<meta http-equiv=\"Content-Security-Policy\" content=\"${quote(policy(o.nonce, !!o.scripts, base))}\">${base ? `<base href=\"${quote(base)}\">` : ''}` +\n `<style>${layout(s, [spot.el, ...(spot.stack === null ? [] : [unit])])}</style>${tag}${bridge}</script>`]);\n return apply(html, 0, html.length, list);\n}\n\nconst drop = new Set(['script', 'style', 'iframe', 'object', 'embed', 'template', 'svg', 'math', 'link', 'meta', 'base', 'form', 'input', 'button', 'textarea', 'select',\n 'img', 'picture', 'video', 'audio', 'canvas', 'noscript', 'title']);\n\nexport function clean(html: string) {\n const box = document.createElement('template');\n box.innerHTML = html;\n const walk = (node: ParentNode) => {\n for (const child of [...node.childNodes]) {\n if (child.nodeType === Node.COMMENT_NODE) child.remove();\n if (child.nodeType !== Node.ELEMENT_NODE) continue;\n const el = child as Element;\n if (drop.has(el.localName)) {\n el.remove();\n continue;\n }\n walk(el);\n if (!inline.has(el.localName)) {\n el.replaceWith(...[...el.childNodes]);\n continue;\n }\n for (const { name, value } of [...el.attributes]) {\n if (/^on/i.test(name) || name === 'contenteditable' || name.startsWith('data-w100n') || (/^(href|src|xlink:href|action|formaction)$/i.test(name) && /^\\s*(javascript|vbscript|data):/i.test(value))) el.removeAttribute(name);\n }\n }\n };\n walk(box.content);\n return box.content.textContent?.trim() ? box.innerHTML : '';\n}\n\nexport const nonceOf = (doc: Document) => (doc.querySelector('script[nonce]') as HTMLScriptElement | null)?.nonce || Math.random().toString(36).slice(2) + Date.now().toString(36);\n","import type { Language } from '../types';\n\nconst en = {\n slides: 'Slides', slide: 'Slide', tools: 'Slide tools', present: 'Present', presenter: 'Presenter view', duplicate: 'Duplicate slide', remove: 'Delete slide',\n earlier: 'Move up', later: 'Move down', undo: 'Undo', redo: 'Redo', save: 'Save', saving: 'Saving', saved: 'Saved', saveFailed: 'Could not save',\n notes: 'Speaker notes', notesHint: 'What to say on this slide', noNotes: 'No notes for this slide', editHint: 'Click any text on the slide to change it',\n next: 'Next slide', previous: 'Previous slide', leave: 'End the show', fullscreen: 'Full screen', upNext: 'Up next', last: 'End of the deck', elapsed: 'Time',\n pause: 'Pause the timer', resume: 'Resume the timer', restart: 'Start the timer again', now: 'Now',\n popup: 'Allow pop-ups for this site to open the presenter view', savedNote: 'Slides edited',\n};\n\nexport type SlidesText = typeof en;\n\nconst pl: SlidesText = {\n slides: 'Slajdy', slide: 'Slajd', tools: 'Narzędzia slajdów', present: 'Prezentuj', presenter: 'Widok prezentera', duplicate: 'Powiel slajd', remove: 'Usuń slajd',\n earlier: 'Przesuń wyżej', later: 'Przesuń niżej', undo: 'Cofnij', redo: 'Ponów', save: 'Zapisz', saving: 'Zapisywanie', saved: 'Zapisano', saveFailed: 'Nie udało się zapisać',\n notes: 'Notatki prelegenta', notesHint: 'Co powiedzieć przy tym slajdzie', noNotes: 'Brak notatek do tego slajdu', editHint: 'Kliknij dowolny tekst na slajdzie, aby go zmienić',\n next: 'Następny slajd', previous: 'Poprzedni slajd', leave: 'Zakończ pokaz', fullscreen: 'Pełny ekran', upNext: 'Następny', last: 'Koniec prezentacji', elapsed: 'Czas',\n pause: 'Wstrzymaj stoper', resume: 'Wznów stoper', restart: 'Uruchom stoper od nowa', now: 'Teraz',\n popup: 'Zezwól tej stronie na wyskakujące okna, aby otworzyć widok prezentera', savedNote: 'Edycja slajdów',\n};\n\nconst uk: SlidesText = {\n slides: 'Слайди', slide: 'Слайд', tools: 'Інструменти слайдів', present: 'Показати', presenter: 'Режим доповідача', duplicate: 'Дублювати слайд', remove: 'Видалити слайд',\n earlier: 'Перемістити вище', later: 'Перемістити нижче', undo: 'Відмінити', redo: 'Повторити', save: 'Зберегти', saving: 'Збереження', saved: 'Збережено', saveFailed: 'Не вдалося зберегти',\n notes: 'Нотатки доповідача', notesHint: 'Що сказати на цьому слайді', noNotes: 'До цього слайда немає нотаток', editHint: 'Клацніть будь-який текст на слайді, щоб змінити його',\n next: 'Наступний слайд', previous: 'Попередній слайд', leave: 'Завершити показ', fullscreen: 'На весь екран', upNext: 'Далі', last: 'Кінець презентації', elapsed: 'Час',\n pause: 'Призупинити таймер', resume: 'Продовжити таймер', restart: 'Запустити таймер знову', now: 'Зараз',\n popup: 'Дозвольте спливні вікна для цього сайту, щоб відкрити режим доповідача', savedNote: 'Правка слайдів',\n};\n\nexport const slidesTexts: Record<Language, SlidesText> = { en, pl, uk };\n","import { Save, Trash2 } from 'lucide-react';\nimport { useId, useState, type RefObject } from 'react';\nimport { useRestore } from './focus';\nimport type { Text } from './text';\n\nexport type Guard = RefObject<(() => Promise<boolean>) | null>;\n\nexport function useUnsaved(guard: Guard, t: Text) {\n const id = useId();\n const [asking, setAsking] = useState<{ then: () => void; stay?: () => void; state: 'idle' | 'busy' | 'failed' } | null>(null);\n useRestore(!!asking);\n const ask = (then: () => void, stay?: () => void) => guard.current ? setAsking({ then, stay, state: 'idle' }) : then();\n const cancel = () => {\n asking?.stay?.();\n setAsking(null);\n };\n const leave = (save: boolean) => async () => {\n const was = asking!;\n if (save && guard.current) {\n setAsking({ ...was, state: 'busy' });\n if (!await guard.current()) return setAsking({ ...was, state: 'failed' });\n }\n setAsking(null);\n was.then();\n };\n const dialog = asking && <div className=\"w100n-pdf-back w100n-docs-ask\" onKeyDown={e => { if (e.key === 'Escape') { e.stopPropagation(); cancel(); } }}>\n <div className=\"w100n-pdf-dialog\" role=\"alertdialog\" aria-modal aria-labelledby={`${id}t`} aria-describedby={`${id}d`}>\n <b id={`${id}t`} className=\"w100n-pdf-dialog-title\">{t.unsavedTitle}</b>\n <p id={`${id}d`} className=\"w100n-docs-muted\" role={asking.state === 'failed' ? 'alert' : undefined}>{asking.state === 'failed' ? t.saveFailed : t.unsavedHint}</p>\n <div className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={cancel}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" disabled={asking.state === 'busy'} onClick={leave(false)}><Trash2 aria-hidden />{t.discard}</button>\n <button type=\"button\" className=\"w100n-docs-action\" autoFocus disabled={asking.state === 'busy'} onClick={leave(true)}><Save aria-hidden />{asking.state === 'busy' ? t.saving : t.save}</button>\n </div>\n </div>\n </div>;\n return { ask, dialog };\n}\n","import {\n ChevronDown, ChevronUp, Ellipsis, Eraser, Highlighter, ImageUp, Maximize, Minus, MousePointer2, MoveHorizontal, PanelLeft, PenLine, Plus, Redo2, Save, Search,\n Signature as Sign, StickyNote, Strikethrough, Type, Underline, Undo2, X, type LucideIcon,\n} from 'lucide-react';\nimport type { PDFDocumentProxy } from 'pdfjs-dist';\nimport { Fragment, useEffect, useId, useLayoutEffect, useRef, useState, type KeyboardEvent, type PointerEvent, type ReactNode } from 'react';\nimport { rove, useRestore } from '../focus';\nimport type { Text } from '../text';\nimport type { DocumentsHost, Language, Rights, SignatureMethod } from '../types';\nimport type { Guard } from '../Unsaved';\nimport type { Heading } from './headings';\nimport PdfPage, { type Hit, type Size, type Tool, type Widget } from './PdfPage';\nimport type { Box, Field, Mark, Point } from './pdfWrite';\n\ntype Outline = { title: string; dest: string | unknown[] | null; items: Outline[] };\ntype Marked = 'highlight' | 'underline' | 'strike';\ntype Entry = { key: string; at: number; node?: ReactNode; Icon?: LucideIcon; label?: string; run?: () => void; pressed?: boolean; disabled?: boolean; stay?: boolean };\n\nconst steps = [25, 33, 50, 67, 75, 90, 100, 110, 125, 150, 175, 200, 250, 300, 400];\nconst uid = () => Math.random().toString(36).slice(2, 10);\nconst dist = (p: Point, a: Point, b: Point) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const k = Math.max(0, Math.min(1, ((p.x - a.x) * dx + (p.y - a.y) * dy) / (dx * dx + dy * dy || 1)));\n return Math.hypot(p.x - a.x - k * dx, p.y - a.y - k * dy);\n};\nconst touches = (m: Mark, p: Point) => {\n const inside = (b: Box) => p.x >= b.x - 2 && p.x <= b.x + b.w + 2 && p.y >= b.y - 2 && p.y <= b.y + b.h + 2;\n if (m.kind === 'note') return inside({ ...m.spot, w: 20, h: 20 });\n if (m.kind === 'sign') return inside(m.box);\n if (m.kind === 'ink') return m.lines.some(line => line.some((q, i) => dist(p, line[Math.max(0, i - 1)], q) < m.width / 2 + 4));\n return m.rects.some(inside);\n};\n\nexport default function PdfView({ bytes, t, language, worker, rights, host, documentId, onSaved, onOutline, guard }: {\n bytes: ArrayBuffer; t: Text; language: Language; worker?: () => Worker; rights?: Rights; host?: DocumentsHost; documentId?: string;\n onSaved?: (bytes: ArrayBuffer) => void; onOutline?: (headings: Heading[]) => void; guard?: Guard;\n}) {\n const prefix = useId();\n const root = useRef<HTMLDivElement>(null);\n const bar = useRef<HTMLDivElement>(null);\n const scroller = useRef<HTMLDivElement>(null);\n const railBox = useRef<HTMLElement>(null);\n const finder = useRef<HTMLInputElement>(null);\n const pad = useRef<HTMLCanvasElement>(null);\n const inked = useRef<Box | null>(null);\n const widgets = useRef(new Map<string, Widget>());\n const words = useRef(new Map<number, string>());\n const anchor = useRef({ scale: 0, page: 0, frac: 0 });\n const [pdf, setPdf] = useState<PDFDocumentProxy | null>(null);\n const [sizes, setSizes] = useState<Size[]>([]);\n const [error, setError] = useState(false);\n const [box, setBox] = useState({ w: 0, h: 0 });\n const [top, setTop] = useState(0);\n const [railTop, setRailTop] = useState(0);\n const [fit, setFit] = useState<'auto' | 'width' | 'page' | null>('auto');\n const [zoom, setZoom] = useState(100);\n const [rail, setRail] = useState(false);\n const [typed, setTyped] = useState<string | null>(null);\n const [query, setQuery] = useState<string | null>(null);\n const [hits, setHits] = useState<{ list: Hit[]; done: boolean }>({ list: [], done: true });\n const [at, setAt] = useState(0);\n const [tool, setTool] = useState<Tool>('select');\n const [pen, setPen] = useState({ highlight: '#facc15', line: '#dc2626', ink: '#2563eb', width: 2 });\n const [palette, setPalette] = useState(false);\n const [more, setMore] = useState(false);\n const [level, setLevel] = useState(0);\n const [history, setHistory] = useState<{ marks: Mark[]; past: Mark[][]; future: Mark[][] }>({ marks: [], past: [], future: [] });\n const [clean, setClean] = useState<Mark[] | null>(null);\n const [filled, setFilled] = useState(false);\n const [open, setOpen] = useState<string | null>(null);\n const [signing, setSigning] = useState<{ tab: SignatureMethod; name: string; image: string | null; drawn: boolean } | null>(null);\n const [pending, setPending] = useState<{ image: string; ratio: number; method: SignatureMethod } | null>(null);\n const [saving, setSaving] = useState<'idle' | 'busy' | 'done' | 'failed'>('idle');\n\n const store = host?.save && documentId ? host.save : null;\n const can = { mark: !!store && !!rights && (rights.comment || rights.edit), edit: !!store && !!rights?.edit };\n const marks = history.marks;\n const dirty = (marks.length > 0 && marks !== clean) || filled;\n const me = host?.me.name ?? '';\n\n useEffect(() => {\n let stop = false;\n let close = () => {};\n setPdf(null);\n setError(false);\n setHistory({ marks: [], past: [], future: [] });\n setFilled(false);\n setOpen(null);\n widgets.current = new Map();\n words.current = new Map();\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 doc = await task.promise;\n const first = (await doc.getPage(1)).getViewport({ scale: 1 });\n if (stop) return;\n Object.assign(doc.annotationStorage, { onSetModified: () => setFilled(true) });\n setSizes(Array.from({ length: doc.numPages }, () => ({ w: first.width, h: first.height })));\n setPdf(doc);\n const flat = async (entries: Outline[], level: number): Promise<Heading[]> => (await Promise.all(entries.map(async entry => {\n const dest = typeof entry.dest === 'string' ? await doc.getDestination(entry.dest) : entry.dest;\n const ref = Array.isArray(dest) ? dest[0] : null;\n const index = typeof ref === 'number' ? ref : ref && typeof ref === 'object' ? await doc.getPageIndex(ref as never) : null;\n const here = index === null ? [] : [{ id: `${prefix}-${index + 1}`, level, text: entry.title }];\n return [...here, ...(level < 3 ? await flat(entry.items ?? [], level + 1) : [])];\n }))).flat();\n const outline = await flat(((await doc.getOutline()) ?? []) as Outline[], 1);\n if (!stop) onOutline?.(outline);\n const all: Size[] = [];\n for (let n = 1; n <= doc.numPages && !stop; n += 64) {\n all.push(...await Promise.all(Array.from({ length: Math.min(64, doc.numPages - n + 1) }, async (_, i) => {\n const v = (await doc.getPage(n + i)).getViewport({ scale: 1 });\n return { w: v.width, h: v.height };\n })));\n }\n if (!stop && all.some(s => s.w !== first.width || s.h !== first.height)) setSizes(all);\n })().catch(() => { if (!stop) setError(true); });\n return () => { stop = true; close(); };\n }, [bytes, worker, onOutline]);\n\n useLayoutEffect(() => {\n const el = scroller.current!;\n let width = root.current!.clientWidth;\n const measure = () => {\n setBox({ w: el.clientWidth, h: el.clientHeight });\n if (root.current!.clientWidth !== width) setLevel(0);\n width = root.current!.clientWidth;\n };\n measure();\n const watch = new ResizeObserver(measure);\n watch.observe(el);\n watch.observe(root.current!);\n return () => watch.disconnect();\n }, []);\n\n useLayoutEffect(() => {\n const items = bar.current!.children;\n if (level < 2 && (items[items.length - 1] as HTMLElement).offsetTop - (items[0] as HTMLElement).offsetTop > 16) setLevel(level + 1);\n });\n\n useRestore(palette);\n useRestore(more);\n useRestore(signing !== null);\n useEffect(() => {\n if (!more && !palette) return;\n const close = (e: globalThis.PointerEvent) => {\n if ((e.target as HTMLElement).closest('.w100n-pdf-palette')) return;\n setMore(false);\n setPalette(false);\n };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [more, palette]);\n\n const widest = Math.max(1, ...sizes.map(s => s.w));\n const tallest = Math.max(1, ...sizes.map(s => s.h));\n const room = { w: Math.max(120, box.w - 32), h: Math.max(120, box.h - 32) };\n const scale = fit === 'auto' ? Math.min(room.w / widest, 5 / 3) : fit === 'width' ? room.w / widest : fit === 'page' ? Math.min(room.w / widest, room.h / tallest) : zoom / 75;\n const percent = Math.round(scale * 75);\n const tops: number[] = [];\n let end = 16;\n for (const s of sizes) { tops.push(end); end += s.h * scale + 16; }\n let page = 1;\n while (page < tops.length && tops[page] <= top + box.h / 3) page++;\n const live = (i: number) => !!pdf && tops[i] < top + box.h * 2 && tops[i] + sizes[i].h * scale > top - box.h;\n const thumbTops: number[] = [];\n let thumbEnd = 10;\n for (const s of sizes) { thumbTops.push(thumbEnd); thumbEnd += s.h * 96 / s.w + 34; }\n const thumbLive = (i: number) => thumbTops[i] < railTop + box.h * 2 && thumbTops[i] + 160 > railTop - box.h;\n const centre = (y: number) => {\n let i = 0;\n while (i + 1 < tops.length && tops[i + 1] <= y + box.h / 2) i++;\n return { page: i, frac: sizes[i] ? (y + box.h / 2 - tops[i]) / (sizes[i].h * scale) : 0 };\n };\n\n useLayoutEffect(() => {\n const was = anchor.current;\n if (was.scale && was.scale !== scale && sizes[was.page]) scroller.current!.scrollTop = tops[was.page] + was.frac * sizes[was.page].h * scale - box.h / 2;\n anchor.current = { ...was, scale };\n }, [scale]);\n\n useEffect(() => {\n const el = scroller.current!;\n const wheel = (e: WheelEvent) => {\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n setFit(null);\n setZoom(Math.min(400, Math.max(25, Math.round(percent * Math.exp(-e.deltaY / 300)))));\n };\n el.addEventListener('wheel', wheel, { passive: false });\n return () => el.removeEventListener('wheel', wheel);\n }, [percent]);\n\n useEffect(() => {\n if (!pdf || !query?.trim()) { setHits({ list: [], done: true }); return; }\n let stop = false;\n const needle = query.trim().toLowerCase();\n setHits({ list: [], done: false });\n setAt(0);\n const timer = setTimeout(async () => {\n const found: Hit[] = [];\n for (let n = 1; n <= pdf.numPages && !stop; n++) {\n let text = words.current.get(n);\n if (text === undefined) {\n const content = await (await pdf.getPage(n)).getTextContent();\n text = content.items.map(piece => 'str' in piece ? piece.str + (piece.hasEOL ? ' ' : '') : '').join('').toLowerCase();\n words.current.set(n, text);\n }\n for (let i = text.indexOf(needle); i >= 0; i = text.indexOf(needle, i + needle.length)) found.push({ page: n, start: i, end: i + needle.length });\n if (!stop && (n % 20 === 0 || n === pdf.numPages)) setHits({ list: [...found], done: n === pdf.numPages });\n }\n }, 200);\n return () => { stop = true; clearTimeout(timer); };\n }, [pdf, query]);\n\n useEffect(() => {\n if (rail) railBox.current?.querySelector('[aria-current=\"true\"]')?.scrollIntoView({ block: 'nearest' });\n }, [rail, page]);\n\n useEffect(() => {\n if (!dirty) return;\n const stop = (e: BeforeUnloadEvent) => e.preventDefault();\n window.addEventListener('beforeunload', stop);\n return () => window.removeEventListener('beforeunload', stop);\n }, [dirty]);\n\n useLayoutEffect(() => {\n const canvas = pad.current;\n if (!canvas) return;\n const ratio = window.devicePixelRatio || 1;\n canvas.width = canvas.clientWidth * ratio;\n canvas.height = canvas.clientHeight * ratio;\n const ctx = canvas.getContext('2d');\n ctx?.scale(ratio, ratio);\n inked.current = null;\n }, [signing?.tab]);\n\n const go = (n: number) => scroller.current!.scrollTo({ top: tops[Math.min(Math.max(n, 1), tops.length) - 1] - 8 });\n const change = (next: (marks: Mark[]) => Mark[]) => setHistory(h => {\n const marks = next(h.marks);\n return marks === h.marks ? h : { marks, past: [...h.past, h.marks], future: [] };\n });\n const undo = () => setHistory(h => h.past.length ? { marks: h.past[h.past.length - 1], past: h.past.slice(0, -1), future: [h.marks, ...h.future] } : h);\n const redo = () => setHistory(h => h.future.length ? { marks: h.future[0], past: [...h.past, h.marks], future: h.future.slice(1) } : h);\n const stamp = () => ({ id: uid(), author: me, at: new Date().toISOString() });\n const zoomBy = (d: number) => {\n setFit(null);\n setZoom(d > 0 ? steps.find(s => s > percent + 1) ?? 400 : [...steps].reverse().find(s => s < percent - 1) ?? 25);\n };\n const step = (d: number) => {\n if (!hits.list.length) return;\n const next = (at + d + hits.list.length) % hits.list.length;\n setAt(next);\n const n = hits.list[next].page;\n if (tops[n - 1] + sizes[n - 1].h * scale < top || tops[n - 1] > top + box.h) go(n);\n };\n\n const markText = (kind: Marked) => {\n const picked = document.getSelection();\n if (!picked || picked.isCollapsed || !picked.rangeCount || !scroller.current!.contains(picked.anchorNode)) return false;\n const range = picked.getRangeAt(0);\n const made: Mark[] = [];\n for (const el of scroller.current!.querySelectorAll<HTMLElement>('.w100n-pdf-page')) {\n if (!range.intersectsNode(el)) continue;\n const frame = el.getBoundingClientRect();\n const rects: Box[] = [];\n let text = '';\n const walk = document.createTreeWalker(el.querySelector('.w100n-pdf-words')!, NodeFilter.SHOW_TEXT);\n for (let node = walk.nextNode(); node; node = walk.nextNode()) {\n if (!range.intersectsNode(node)) continue;\n const part = document.createRange();\n part.selectNodeContents(node);\n if (node === range.startContainer) part.setStart(node, range.startOffset);\n if (node === range.endContainer) part.setEnd(node, range.endOffset);\n text += part.toString();\n for (const r of part.getClientRects()) if (r.width > 0.5) rects.push({ x: (r.left - frame.left) / scale, y: (r.top - frame.top) / scale, w: r.width / scale, h: r.height / scale });\n }\n const lines = rects.sort((a, b) => a.y - b.y || a.x - b.x).reduce<Box[]>((all, r) => {\n const line = all.find(l => Math.abs(l.y + l.h / 2 - r.y - r.h / 2) < Math.min(l.h, r.h) / 2 && r.x <= l.x + l.w + r.h);\n if (!line) return [...all, { ...r }];\n const x = Math.min(line.x, r.x);\n const y = Math.min(line.y, r.y);\n Object.assign(line, { x, y, w: Math.max(line.x + line.w, r.x + r.w) - x, h: Math.max(line.y + line.h, r.y + r.h) - y });\n return all;\n }, []);\n if (lines.length) made.push({ ...stamp(), page: Number(el.dataset.n), kind, rects: lines, text: text.trim(), color: kind === 'highlight' ? pen.highlight : pen.line });\n }\n picked.removeAllRanges();\n if (made.length) change(all => [...all, ...made]);\n return made.length > 0;\n };\n\n const pick = (next: Tool) => {\n setPalette(false);\n if ((next === 'highlight' || next === 'underline' || next === 'strike') && markText(next)) return;\n setTool(tool === next ? 'select' : next);\n };\n\n const act = {\n note: (n: number, p: Point) => {\n const mark: Mark = { ...stamp(), page: n, kind: 'note', spot: { x: p.x - 10, y: p.y - 10 }, text: '', color: '#f59e0b' };\n change(all => [...all, mark]);\n setOpen(mark.id);\n setTool('select');\n },\n text: (id: string, text: string) => change(all => text.trim()\n ? all.map(m => m.id === id && m.kind === 'note' && m.text !== text ? { ...m, text } : m)\n : all.filter(m => m.id !== id)),\n ink: (n: number, line: Point[]) => change(all => [...all, { ...stamp(), page: n, kind: 'ink', lines: [line], color: pen.ink, width: pen.width }]),\n erase: (n: number, p: Point) => change(all => {\n const keep = all.filter(m => m.page !== n || !touches(m, p));\n return keep.length === all.length ? all : keep;\n }),\n place: (n: number, p: Point) => {\n if (!pending) return;\n const size = sizes[n - 1];\n const w = Math.min(180, size.w / 2);\n const h = w / pending.ratio;\n const mark: Mark = {\n ...stamp(), page: n, kind: 'sign', method: pending.method, image: pending.image,\n box: { x: Math.max(0, Math.min(size.w - w, p.x - w / 2)), y: Math.max(0, Math.min(size.h - h, p.y - h / 2)), w, h },\n };\n change(all => [...all, mark]);\n setPending(null);\n setTool('select');\n setOpen(mark.id);\n },\n move: (id: string, b: Box) => change(all => all.map(m => m.id === id && m.kind === 'sign' ? { ...m, box: b } : m)),\n remove: (id: string) => change(all => all.filter(m => m.id !== id)),\n open: setOpen,\n };\n\n const fields = (): Field[] => {\n const out: Field[] = [];\n for (const [id, stored] of pdf?.annotationStorage.serializable.map ?? []) {\n const w = widgets.current.get(id);\n if (!w || !stored || typeof stored !== 'object' || !('value' in stored)) continue;\n const value = w.options\n ? [stored.value].flat().filter(Boolean).map((v: string) => w.options!.find(o => o.exportValue === v)?.displayValue ?? v)\n : stored.value;\n if (JSON.stringify(value) !== JSON.stringify(w.value)) out.push({ page: w.page, name: w.name, box: w.box, value });\n }\n return out;\n };\n\n const save = async () => {\n if (!store || !documentId) return false;\n setSaving('busy');\n try {\n const { write } = await import('./pdfWrite');\n const changed = fields();\n const signs = marks.flatMap(m => m.kind === 'sign' ? [m] : []);\n const out = await write(bytes, marks, changed);\n const note = [marks.length > signs.length && `${t.marksNote} ${marks.length - signs.length}`, changed.length > 0 && t.formNote, signs.length > 0 && t.signedNote].filter(Boolean).join(', ');\n const { versionId } = await store(documentId, out, note);\n for (const s of signs) await host!.sign?.(documentId, { versionId, page: s.page, method: s.method });\n setClean(marks);\n setFilled(false);\n pdf!.annotationStorage.resetModified();\n setSaving('done');\n onSaved?.(out);\n return true;\n } catch {\n setSaving('failed');\n return false;\n }\n };\n\n useEffect(() => {\n if (!guard || !dirty || !can.mark) return;\n guard.current = save;\n return () => { guard.current = null; };\n });\n\n const adopt = async () => {\n const s = signing!;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n if (s.tab === 'typed') {\n const font = '64px \"W100n Sign\", \"Segoe Script\", \"Bradley Hand\", cursive';\n await document.fonts.load(font, s.name);\n ctx.font = font;\n canvas.width = Math.ceil(ctx.measureText(s.name).width) + 24;\n canvas.height = 96;\n ctx.font = font;\n ctx.fillStyle = '#1e3a8a';\n ctx.textBaseline = 'middle';\n ctx.fillText(s.name, 12, 50);\n } else if (s.tab === 'drawn') {\n const b = inked.current!;\n const ratio = pad.current!.width / pad.current!.clientWidth;\n canvas.width = Math.ceil((b.w + 16) * ratio);\n canvas.height = Math.ceil((b.h + 16) * ratio);\n ctx.drawImage(pad.current!, (b.x - 8) * ratio, (b.y - 8) * ratio, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height);\n } else {\n const img = new Image();\n img.src = s.image!;\n await img.decode();\n const k = Math.min(1, 1200 / img.naturalWidth);\n canvas.width = Math.round(img.naturalWidth * k);\n canvas.height = Math.round(img.naturalHeight * k);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n }\n setPending({ image: canvas.toDataURL('image/png'), ratio: canvas.width / canvas.height, method: s.tab });\n setSigning(null);\n setTool('place');\n };\n\n const draw = (e: PointerEvent<HTMLCanvasElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const p = { x: e.clientX - r.left, y: e.clientY - r.top };\n const ctx = e.currentTarget.getContext('2d')!;\n if (e.type === 'pointerdown') {\n e.currentTarget.setPointerCapture(e.pointerId);\n ctx.lineWidth = 2.6;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = '#1e3a8a';\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n } else if (e.buttons) {\n ctx.lineTo(p.x, p.y);\n ctx.stroke();\n } else return;\n const b = inked.current ?? { x: p.x, y: p.y, w: 0, h: 0 };\n const x = Math.min(b.x, p.x);\n const y = Math.min(b.y, p.y);\n inked.current = { x, y, w: Math.max(b.x + b.w, p.x) - x, h: Math.max(b.y + b.h, p.y) - y };\n if (!signing!.drawn && e.type === 'pointermove') setSigning({ ...signing!, drawn: true });\n };\n\n const keys = (e: KeyboardEvent<HTMLDivElement>) => {\n const key = e.key.toLowerCase();\n const mod = e.metaKey || e.ctrlKey;\n const typing = (e.target as HTMLElement).closest('input, textarea, select, [contenteditable=\"true\"]');\n if (mod && key === 'f') {\n e.preventDefault();\n if (query === null) setQuery('');\n else finder.current?.focus();\n } else if (key === 'escape' && (signing || palette || more || pending || tool !== 'select' || query !== null)) {\n e.stopPropagation();\n if (signing) setSigning(null);\n else if (palette) setPalette(false);\n else if (more) setMore(false);\n else if (tool !== 'select') { setTool('select'); setPending(null); }\n else setQuery(null);\n } else if (can.mark && !typing && mod && (key === 'z' || key === 'y')) {\n e.preventDefault();\n if (key === 'y' || e.shiftKey) redo();\n else undo();\n }\n };\n\n const byPage = new Map<number, Mark[]>();\n for (const m of marks) byPage.set(m.page, [...(byPage.get(m.page) ?? []), m]);\n const hitsBy = new Map<number, Hit[]>();\n for (const h of hits.list) hitsBy.set(h.page, [...(hitsBy.get(h.page) ?? []), h]);\n const when = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short', hour: '2-digit', minute: '2-digit' }).format(new Date(iso));\n const tools: [Tool, LucideIcon, string, boolean, number][] = [\n ['select', MousePointer2, t.selectText, true, 2], ['highlight', Highlighter, t.highlight, true, 0], ['underline', Underline, t.underline, true, 1],\n ['strike', Strikethrough, t.strike, true, 1], ['note', StickyNote, t.note, true, 0], ['ink', PenLine, t.draw, can.edit, 2], ['eraser', Eraser, t.eraser, true, 1],\n ];\n const inkish = tool === 'ink';\n const family = inkish ? 'ink' : tool === 'underline' || tool === 'strike' ? 'line' : 'highlight';\n const swatch = pen[family];\n const gap = <span className=\"w100n-pdf-gap\" />;\n const entries: Entry[] = [\n { key: 'rail', at: 2, Icon: PanelLeft, label: t.pages, run: () => setRail(!rail), pressed: rail },\n { key: 'page', at: 0, node: <label className=\"w100n-pdf-pageno\">\n <input value={typed ?? String(page)} inputMode=\"numeric\" aria-label={t.page} onFocus={e => { setTyped(String(page)); e.currentTarget.select(); }} onBlur={() => setTyped(null)}\n onChange={e => setTyped(e.target.value.replace(/\\D/g, ''))} onKeyDown={e => { if (e.key === 'Enter') { go(Number(typed) || 1); e.currentTarget.blur(); } }} />\n <span>/ {sizes.length || ''}</span>\n </label> },\n { key: 'g1', at: 2, node: gap },\n { key: 'out', at: 2, Icon: Minus, label: t.zoomOut, run: () => zoomBy(-1), stay: true },\n { key: 'zoom', at: 2, node: <span className=\"w100n-pdf-zoom\">{percent}%</span> },\n { key: 'in', at: 2, Icon: Plus, label: t.zoomIn, run: () => zoomBy(1), stay: true },\n { key: 'width', at: 1, Icon: MoveHorizontal, label: t.fitWidth, run: () => setFit('width'), pressed: fit === 'width' },\n { key: 'fit', at: 1, Icon: Maximize, label: t.fitPage, run: () => setFit('page'), pressed: fit === 'page' },\n { key: 'g2', at: 2, node: gap },\n { key: 'find', at: 0, Icon: Search, label: t.find, run: () => setQuery(query === null ? '' : null), pressed: query !== null },\n ...can.mark ? [\n { key: 'g3', at: 2, node: gap },\n ...tools.filter(([, , , shown]) => shown).map(([key, Icon, label, , at]) => ({ key, at, Icon, label, run: () => pick(key), pressed: tool === key })),\n ...can.edit ? [{ key: 'sign', at: 2, Icon: Sign, label: t.sign, run: () => setSigning({ tab: 'typed', name: me, image: null, drawn: false }), pressed: tool === 'place' || signing !== null }] : [],\n { key: 'colour', at: 0, node: <span className=\"w100n-pdf-palette\">\n <button type=\"button\" aria-expanded={palette} onClick={() => { setMore(false); setPalette(!palette); }} aria-label={t.colour} title={t.colour}><i style={{ background: swatch }} /></button>\n {palette && <span className=\"w100n-pdf-pop\" role=\"group\" aria-label={t.colour}>\n {['#facc15', '#4ade80', '#60a5fa', '#f472b6', '#f87171', '#2563eb', '#0f172a'].map((c, i) => <button key={c} type=\"button\" aria-pressed={swatch === c} aria-label={c} autoFocus={i === 0}\n onClick={() => setPen({ ...pen, [family]: c })}><i style={{ background: c }} /></button>)}\n {inkish && [1, 2, 4].map(w => <button key={w} type=\"button\" aria-pressed={pen.width === w} aria-label={`${t.lineWidth} ${w}`} onClick={() => setPen({ ...pen, width: w })}>\n <b style={{ height: w + 1 }} /></button>)}\n </span>}\n </span> },\n { key: 'undo', at: 2, Icon: Undo2, label: t.undo, run: undo, disabled: !history.past.length, stay: true },\n { key: 'redo', at: 1, Icon: Redo2, label: t.redo, run: redo, disabled: !history.future.length, stay: true },\n ] : [],\n ];\n const moved = entries.filter(e => e.at && e.at <= level && e.Icon);\n const button = (e: Entry, listed: boolean, first = false) => {\n const Icon = e.Icon!;\n return <button key={e.key} type=\"button\" aria-pressed={e.pressed} disabled={e.disabled} autoFocus={first} aria-label={listed ? undefined : e.label} title={listed ? undefined : e.label}\n onClick={() => { e.run!(); if (listed && !e.stay) setMore(false); }}><Icon aria-hidden />{listed && e.label}</button>;\n };\n\n return <div ref={root} className=\"w100n-pdf\" onKeyDown={keys}>\n <div ref={bar} className=\"w100n-pdf-bar\" role=\"toolbar\" aria-label={t.pdfTools} onKeyDown={rove} onPointerDown={e => { if ((e.target as HTMLElement).closest('button')) e.preventDefault(); }}>\n {entries.filter(e => !e.at || e.at > level).map(e => e.Icon ? button(e, false) : <Fragment key={e.key}>{e.node}</Fragment>)}\n {moved.length > 0 && <span className=\"w100n-pdf-palette\">\n <button type=\"button\" aria-expanded={more} aria-label={t.more} title={t.more} onClick={() => { setPalette(false); setMore(!more); }}><Ellipsis aria-hidden /></button>\n {more && <span className=\"w100n-pdf-pop w100n-pdf-more\" role=\"group\" aria-label={t.more}>{moved.map((e, i) => button(e, true, i === 0))}</span>}\n </span>}\n {can.mark && <>\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!dirty || saving === 'busy'} onClick={() => void save()}>\n <Save aria-hidden />{saving === 'busy' ? t.saving : !dirty && saving === 'done' ? t.saved : t.save}\n </button>\n {saving === 'failed' && <span className=\"w100n-docs-muted\" role=\"alert\">{t.saveFailed}</span>}\n </>}\n </div>\n {query !== null && <div className=\"w100n-pdf-find\" role=\"search\">\n <Search aria-hidden />\n <input ref={finder} autoFocus value={query} placeholder={t.find} aria-label={t.find} onChange={e => setQuery(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') step(e.shiftKey ? -1 : 1); }} />\n <span aria-live=\"polite\">{hits.list.length ? `${Math.min(at + 1, hits.list.length)} / ${hits.list.length}` : query.trim() ? hits.done ? t.noHits : t.searching : ''}</span>\n <button type=\"button\" disabled={!hits.list.length} onClick={() => step(-1)} aria-label={t.previous} title={t.previous}><ChevronUp aria-hidden /></button>\n <button type=\"button\" disabled={!hits.list.length} onClick={() => step(1)} aria-label={t.next} title={t.next}><ChevronDown aria-hidden /></button>\n <button type=\"button\" onClick={() => setQuery(null)} aria-label={t.close} title={t.close}><X aria-hidden /></button>\n </div>}\n {tool === 'place' && <div className=\"w100n-pdf-hint\">{t.placeHint}<button type=\"button\" onClick={() => { setTool('select'); setPending(null); }}>{t.cancel}</button></div>}\n <div className=\"w100n-pdf-body\">\n {rail && <nav ref={railBox} className=\"w100n-pdf-rail\" aria-label={t.pages} onScroll={e => setRailTop(Math.round(e.currentTarget.scrollTop / 80) * 80)}>\n {sizes.map((s, i) => <button key={i} type=\"button\" className=\"w100n-pdf-thumb\" aria-current={page === i + 1} onClick={() => go(i + 1)} aria-label={`${t.page} ${i + 1}`}>\n <PdfPage pdf={pdf} n={i + 1} size={s} scale={96 / s.w} live={!!pdf && thumbLive(i)} />\n <span>{i + 1}</span>\n </button>)}\n </nav>}\n <div ref={scroller} className=\"w100n-pdf-scroll\" tabIndex={0} data-tool={tool}\n onScroll={e => {\n const y = e.currentTarget.scrollTop;\n anchor.current = { scale, ...centre(y) };\n setTop(Math.round(y / 80) * 80);\n }}\n onPointerDown={e => {\n const target = e.target as HTMLElement;\n target.closest('.textLayer')?.classList.add('selecting');\n if (open && !target.closest('.w100n-pdf-note, .w100n-pdf-sign')) setOpen(null);\n }}\n onPointerUp={() => {\n for (const el of scroller.current!.querySelectorAll('.selecting')) el.classList.remove('selecting');\n if (tool === 'highlight' || tool === 'underline' || tool === 'strike') markText(tool);\n }}>\n {error && <p className=\"w100n-docs-note\">{t.failed}</p>}\n <div className=\"w100n-pdf-pages\">\n {sizes.map((s, i) => <PdfPage key={i} id={`${prefix}-${i + 1}`} pdf={pdf} n={i + 1} size={s} scale={scale} live={live(i)} layers={{\n forms: can.edit, tool, marks: byPage.get(i + 1) ?? [], hits: hitsBy.get(i + 1) ?? [], active: hits.list[at], open, pen: { color: pen.ink, width: pen.width },\n widgets: widgets.current, t, when, act,\n }} />)}\n </div>\n </div>\n </div>\n {signing && <div className=\"w100n-pdf-back\" onPointerDown={e => { if (e.target === e.currentTarget) setSigning(null); }}>\n <div className=\"w100n-pdf-dialog\" role=\"dialog\" aria-modal aria-label={t.signTitle}>\n <div className=\"w100n-docs-row\">\n <b className=\"w100n-pdf-dialog-title\">{t.signTitle}</b>\n <button type=\"button\" className=\"w100n-docs-close\" onClick={() => setSigning(null)} aria-label={t.close} title={t.close}><X aria-hidden /></button>\n </div>\n <div className=\"w100n-docs-tabs\" role=\"tablist\" aria-label={t.signTitle} onKeyDown={rove}>\n {([['typed', Type, t.typed], ['drawn', PenLine, t.drawn], ['image', ImageUp, t.image]] as const).map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"tab\" aria-selected={signing.tab === key} tabIndex={signing.tab === key ? 0 : -1} onClick={() => setSigning({ ...signing, tab: key })}><Icon aria-hidden />{label}</button>)}\n </div>\n {signing.tab === 'typed' && <>\n <input className=\"w100n-pdf-name\" autoFocus value={signing.name} onChange={e => setSigning({ ...signing, name: e.target.value })} aria-label={t.yourName} placeholder={t.yourName} />\n <p className=\"w100n-pdf-script\" style={{ fontSize: Math.min(52, Math.floor(680 / Math.max(1, (signing.name || t.yourName).length))) }}>{signing.name || t.yourName}</p>\n </>}\n {signing.tab === 'drawn' && <>\n <canvas ref={pad} className=\"w100n-pdf-pad\" aria-label={t.drawHere} onPointerDown={draw} onPointerMove={draw} />\n <div className=\"w100n-docs-row\">\n <small className=\"w100n-docs-muted\">{t.drawHere}</small>\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => {\n const canvas = pad.current!;\n canvas.getContext('2d')!.clearRect(0, 0, canvas.width, canvas.height);\n inked.current = null;\n setSigning({ ...signing, drawn: false });\n }}>{t.clear}</button>\n </div>\n </>}\n {signing.tab === 'image' && <label className=\"w100n-pdf-upload\">\n {signing.image ? <img src={signing.image} alt=\"\" /> : <><ImageUp aria-hidden />{t.pickImage}</>}\n <input type=\"file\" accept=\"image/png,image/jpeg\" onChange={e => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => setSigning(current => current && { ...current, image: String(reader.result) });\n reader.readAsDataURL(file);\n }} />\n </label>}\n <div className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => setSigning(null)}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" onClick={() => void adopt()}\n disabled={signing.tab === 'typed' ? !signing.name.trim() : signing.tab === 'drawn' ? !signing.drawn : !signing.image}><Sign aria-hidden />{t.useSign}</button>\n </div>\n </div>\n </div>}\n </div>;\n}\n","import { StickyNote, Trash2, X } from 'lucide-react';\nimport type { PDFDocumentProxy, RenderTask, TextLayer } from 'pdfjs-dist';\nimport { useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type PointerEvent } from 'react';\nimport type { Text } from '../text';\nimport type { Box, Mark, Point } from './pdfWrite';\n\nexport type Tool = 'select' | 'highlight' | 'underline' | 'strike' | 'note' | 'ink' | 'eraser' | 'place';\nexport type Hit = { page: number; start: number; end: number };\nexport type Widget = { page: number; name: string; box: Box; value: string | boolean | string[]; options?: { exportValue: string; displayValue: string }[] };\nexport type Size = { w: number; h: number };\n\ntype Layers = {\n forms: boolean; tool: Tool; marks: Mark[]; hits: Hit[]; active?: Hit; open: string | null; pen: { color: string; width: number };\n widgets: Map<string, Widget>; t: Text; when: (iso: string) => string;\n act: {\n note: (n: number, p: Point) => void; text: (id: string, text: string) => void; ink: (n: number, line: Point[]) => void; erase: (n: number, p: Point) => void;\n place: (n: number, p: Point) => void; move: (id: string, box: Box) => void; remove: (id: string) => void; open: (id: string | null) => void;\n };\n};\n\nconst pct = (v: number) => `${v * 100}%`;\nconst same = (a: Hit, b?: Hit) => !!b && a.page === b.page && a.start === b.start;\nconst spot = (b: Box, size: Size): CSSProperties => ({ left: pct(b.x / size.w), top: pct(b.y / size.h), width: pct(b.w / size.w), height: pct(b.h / size.h) });\n\nexport default function PdfPage({ pdf, n, size, scale, live, id, layers }: {\n pdf: PDFDocumentProxy | null; n: number; size: Size; scale: number; live: boolean; id?: string; layers?: Layers;\n}) {\n const paint = useRef<HTMLDivElement>(null);\n const words = useRef<HTMLDivElement>(null);\n const forms = useRef<HTMLDivElement>(null);\n const focus = useRef<HTMLDivElement>(null);\n const rubbed = useRef<Point | null>(null);\n const [ready, setReady] = useState(0);\n const [boxes, setBoxes] = useState<(Box & { hit: Hit })[]>([]);\n const [stroke, setStroke] = useState<Point[] | null>(null);\n const [drag, setDrag] = useState<{ id: string; from: Point; start: Box; box: Box; resize: boolean } | null>(null);\n const fill = !!layers?.forms;\n const hitKey = layers ? layers.hits.map(hit => `${hit.start}:${hit.end}`).join() : '';\n\n useEffect(() => {\n if (!live) return;\n const holders = [paint, words, forms].flatMap(ref => ref.current ? [ref.current] : []);\n return () => {\n for (const holder of holders) {\n for (const canvas of holder.querySelectorAll('canvas')) { canvas.width = 0; canvas.height = 0; }\n holder.replaceChildren();\n }\n };\n }, [live]);\n\n useEffect(() => {\n if (!live || !pdf) return;\n let stop = false;\n let task: RenderTask | undefined;\n const canvas = document.createElement('canvas');\n const timer = setTimeout(() => {\n void Promise.all([pdf.getPage(n), import('pdfjs-dist')]).then(async ([page, { AnnotationMode }]) => {\n if (stop) return;\n const viewport = page.getViewport({ scale });\n const ratio = Math.min(window.devicePixelRatio || 1, Math.sqrt(16_777_216 / (viewport.width * viewport.height)));\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n task = page.render({\n canvas, canvasContext: canvas.getContext('2d')!, viewport, transform: [ratio, 0, 0, ratio, 0, 0],\n annotationMode: fill ? AnnotationMode.ENABLE_FORMS : AnnotationMode.ENABLE,\n });\n await task.promise;\n if (stop) return;\n for (const old of paint.current!.querySelectorAll('canvas')) { old.width = 0; old.height = 0; }\n paint.current!.replaceChildren(canvas);\n }).catch(() => {});\n }, paint.current!.firstChild ? 120 : 0);\n return () => {\n stop = true;\n clearTimeout(timer);\n task?.cancel();\n if (!canvas.isConnected) { canvas.width = 0; canvas.height = 0; }\n };\n }, [pdf, n, scale, live, fill]);\n\n useEffect(() => {\n if (!live || !pdf || !layers) return;\n let stop = false;\n let text: TextLayer | undefined;\n const links = {\n externalLinkEnabled: true,\n addLinkAttributes: (link: HTMLAnchorElement, url: string) => { link.href = url; link.target = '_blank'; link.rel = 'noopener noreferrer nofollow'; },\n getDestinationHash: () => '#',\n getAnchorUrl: () => '#',\n executeNamedAction: () => {},\n executeSetOCGState: () => {},\n goToDestination: async (dest: string | unknown[]) => {\n const target = typeof dest === 'string' ? await pdf.getDestination(dest) : dest;\n const ref = Array.isArray(target) ? target[0] : null;\n const index = typeof ref === 'number' ? ref : ref && typeof ref === 'object' ? await pdf.getPageIndex(ref as never) : null;\n if (index !== null) paint.current?.closest('.w100n-pdf-pages')?.querySelector(`[data-n=\"${index + 1}\"]`)?.scrollIntoView({ block: 'start' });\n },\n };\n void Promise.all([pdf.getPage(n), import('pdfjs-dist')]).then(async ([page, pdfjs]) => {\n if (stop) return;\n const viewport = page.getViewport({ scale: 1 });\n const layer = document.createElement('div');\n layer.className = 'textLayer';\n text = new pdfjs.TextLayer({ textContentSource: page.streamTextContent(), container: layer, viewport });\n await text.render();\n if (stop) return;\n const end = document.createElement('div');\n end.className = 'endOfContent';\n layer.append(end);\n words.current!.replaceChildren(layer);\n const annotations = await page.getAnnotations();\n for (const a of annotations) {\n if (!a.fieldName || a.pushButton || !['Tx', 'Btn', 'Ch'].includes(a.fieldType)) continue;\n const [x1, y1] = viewport.convertToViewportPoint(a.rect[0], a.rect[1]);\n const [x2, y2] = viewport.convertToViewportPoint(a.rect[2], a.rect[3]);\n const options = a.fieldType === 'Ch' ? a.options as Widget['options'] : undefined;\n const value = a.checkBox ? a.fieldValue === a.exportValue : a.radioButton ? a.fieldValue === a.buttonValue\n : options ? [a.fieldValue].flat().filter(Boolean).map((v: string) => options.find(o => o.exportValue === v)?.displayValue ?? v) : a.fieldValue ?? '';\n layers.widgets.set(a.id, { page: n, name: a.fieldName, box: { x: Math.min(x1, x2), y: Math.min(y1, y2), w: Math.abs(x2 - x1), h: Math.abs(y2 - y1) }, value, options });\n }\n const div = document.createElement('div');\n div.className = 'annotationLayer';\n const flat = viewport.clone({ dontFlip: true });\n await new pdfjs.AnnotationLayer({\n div, page, viewport: flat, linkService: links, annotationStorage: pdf.annotationStorage,\n accessibilityManager: null, annotationCanvasMap: null, annotationEditorUIManager: null, structTreeLayer: null, commentManager: null,\n }).render({ annotations, div, page, viewport: flat, linkService: links as never, renderForms: fill, annotationStorage: pdf.annotationStorage, enableScripting: false, hasJSActions: false });\n if (stop) return;\n forms.current!.replaceChildren(div);\n setReady(count => count + 1);\n }).catch(() => {});\n return () => { stop = true; text?.cancel(); };\n }, [pdf, n, live, fill]);\n\n useLayoutEffect(() => {\n const layer = words.current?.firstElementChild;\n if (!layers || !layer || !hitKey) { setBoxes([]); return; }\n const frame = layer.getBoundingClientRect();\n const k = frame.width ? size.w / frame.width : 1 / scale;\n const parts: { node: CharacterData; start: number }[] = [];\n let at = 0;\n const walk = document.createTreeWalker(layer, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT);\n for (let node = walk.nextNode(); node; node = walk.nextNode()) {\n if (node.nodeType === Node.TEXT_NODE) { parts.push({ node: node as CharacterData, start: at }); at += (node as CharacterData).length; }\n else if (node.nodeName === 'BR') at += 1;\n }\n setBoxes(layers.hits.flatMap(hit => parts.flatMap(({ node, start }) => {\n const from = Math.max(hit.start, start);\n const to = Math.min(hit.end, start + node.length);\n if (from >= to) return [];\n const range = document.createRange();\n range.setStart(node, from - start);\n range.setEnd(node, to - start);\n return [...range.getClientRects()].map(r => ({ x: (r.left - frame.left) * k, y: (r.top - frame.top) * k, w: r.width * k, h: r.height * k, hit }));\n })));\n }, [ready, hitKey]);\n\n useEffect(() => {\n const el = focus.current;\n const scroller = el?.closest('.w100n-pdf-scroll');\n if (!el || !scroller) return;\n const r = el.getBoundingClientRect();\n const view = scroller.getBoundingClientRect();\n if (r.top < view.top + 40 || r.bottom > view.bottom - 40) scroller.scrollBy({ top: r.top - view.top - view.height / 2 });\n }, [layers?.active, boxes]);\n\n const style = { width: size.w * scale, height: size.h * scale, '--total-scale-factor': scale, '--scale-round-x': '1px', '--scale-round-y': '1px' } as CSSProperties;\n if (!layers) return <div className=\"w100n-pdf-page\" data-n={n} style={style}><div ref={paint} className=\"w100n-pdf-paint\" /></div>;\n\n const { tool, marks, act, t, open } = layers;\n const first = boxes.findIndex(b => same(b.hit, layers.active));\n const at = (e: PointerEvent<HTMLElement>): Point => {\n const r = e.currentTarget.closest('.w100n-pdf-page')!.getBoundingClientRect();\n return { x: (e.clientX - r.left) / scale, y: (e.clientY - r.top) / scale };\n };\n const line = (points: Point[]) => points.map((p, i) => `${i ? 'L' : 'M'}${p.x.toFixed(1)} ${p.y.toFixed(1)}`).join(' ');\n const down = (e: PointerEvent<HTMLDivElement>) => {\n const p = at(e);\n if (tool === 'note' || tool === 'place') {\n e.preventDefault();\n if (tool === 'note') act.note(n, p);\n else act.place(n, p);\n } else {\n e.currentTarget.setPointerCapture(e.pointerId);\n if (tool === 'ink') setStroke([p]);\n else {\n rubbed.current = p;\n act.erase(n, p);\n }\n }\n };\n const move = (e: PointerEvent<HTMLDivElement>) => {\n if (!e.buttons) return;\n const p = at(e);\n if (stroke) {\n const last = stroke[stroke.length - 1];\n if (Math.hypot(p.x - last.x, p.y - last.y) > 0.8) setStroke([...stroke, p]);\n } else if (tool === 'eraser' && rubbed.current) {\n const from = rubbed.current;\n const steps = Math.ceil(Math.hypot(p.x - from.x, p.y - from.y) / 3);\n for (let i = 1; i <= steps; i++) act.erase(n, { x: from.x + (p.x - from.x) * i / steps, y: from.y + (p.y - from.y) * i / steps });\n rubbed.current = p;\n }\n };\n const grab = (e: PointerEvent<HTMLElement>, mark: Mark & { kind: 'sign' }, resize: boolean) => {\n e.stopPropagation();\n e.currentTarget.setPointerCapture(e.pointerId);\n act.open(mark.id);\n setDrag({ id: mark.id, from: at(e), start: mark.box, box: mark.box, resize });\n };\n const pull = (e: PointerEvent<HTMLElement>) => {\n if (!drag) return;\n const p = at(e);\n const dx = p.x - drag.from.x;\n const { start } = drag;\n if (drag.resize) {\n const w = Math.max(24, Math.min(size.w - start.x, start.w + dx));\n setDrag({ ...drag, box: { ...start, w, h: w * start.h / start.w } });\n } else {\n setDrag({ ...drag, box: { ...start, x: Math.max(0, Math.min(size.w - start.w, start.x + dx)), y: Math.max(0, Math.min(size.h - start.h, start.y + p.y - drag.from.y)) } });\n }\n };\n const drop = () => {\n if (drag && (drag.box.x !== drag.start.x || drag.box.y !== drag.start.y || drag.box.w !== drag.start.w)) act.move(drag.id, drag.box);\n setDrag(null);\n };\n\n return <div className=\"w100n-pdf-page\" id={id} data-n={n} style={style}>\n <div ref={paint} className=\"w100n-pdf-paint\" />\n <div ref={words} className=\"w100n-pdf-words\" />\n <div ref={forms} className=\"w100n-pdf-forms\" />\n <svg className=\"w100n-pdf-marks\" viewBox={`0 0 ${size.w} ${size.h}`} preserveAspectRatio=\"none\" aria-hidden>\n {marks.map(mark => {\n if (mark.kind === 'ink') return <path key={mark.id} d={mark.lines.map(line).join(' ')} stroke={mark.color} strokeWidth={mark.width}><title>{`${mark.author} · ${layers.when(mark.at)}`}</title></path>;\n if (mark.kind === 'highlight') return <g key={mark.id} className=\"w100n-pdf-glow\">{mark.rects.map((r, i) => <rect key={i} x={r.x} y={r.y} width={r.w} height={r.h} fill={mark.color} />)}</g>;\n if (mark.kind === 'underline' || mark.kind === 'strike') {\n return <g key={mark.id}>{mark.rects.map((r, i) => {\n const y = mark.kind === 'underline' ? r.y + r.h * 0.94 : r.y + r.h * 0.55;\n return <line key={i} x1={r.x} x2={r.x + r.w} y1={y} y2={y} stroke={mark.color} strokeWidth={Math.max(0.8, r.h * 0.08)} />;\n })}</g>;\n }\n return null;\n })}\n {stroke && <path d={line(stroke)} stroke={layers.pen.color} strokeWidth={layers.pen.width} />}\n </svg>\n {boxes.map((b, i) => <div key={i} ref={i === first ? focus : undefined}\n className=\"w100n-pdf-hit\" data-active={same(b.hit, layers.active)} style={spot(b, size)} />)}\n {['ink', 'eraser', 'note', 'place'].includes(tool) && <div className=\"w100n-pdf-input\" data-tool={tool} onPointerDown={down} onPointerMove={move}\n onPointerUp={() => { if (stroke) act.ink(n, stroke); setStroke(null); }} />}\n {marks.map(mark => {\n if (mark.kind === 'note') {\n return <div key={mark.id} className=\"w100n-pdf-note\" data-side={`${mark.spot.x > size.w / 2 ? 'left' : 'right'} ${mark.spot.y > size.h * 0.7 ? 'up' : 'down'}`}\n style={{ left: pct(mark.spot.x / size.w), top: pct(mark.spot.y / size.h) }}>\n <button type=\"button\" className=\"w100n-pdf-pin\" aria-label={t.note} aria-expanded={open === mark.id} onClick={() => act.open(open === mark.id ? null : mark.id)}><StickyNote aria-hidden /></button>\n {open === mark.id && <div className=\"w100n-pdf-card\" role=\"dialog\" aria-label={t.note}>\n <div className=\"w100n-pdf-card-head\">\n <span><b>{mark.author}</b><small>{layers.when(mark.at)}</small></span>\n <button type=\"button\" onClick={() => act.remove(mark.id)} aria-label={t.remove} title={t.remove}><Trash2 aria-hidden /></button>\n </div>\n <textarea autoFocus defaultValue={mark.text} placeholder={t.notePlaceholder} aria-label={t.note} onBlur={e => act.text(mark.id, e.target.value)} />\n </div>}\n </div>;\n }\n if (mark.kind !== 'sign') return null;\n return <div key={mark.id} className=\"w100n-pdf-sign\" aria-selected={open === mark.id} style={spot(drag?.id === mark.id ? drag.box : mark.box, size)}\n title={`${mark.author} · ${layers.when(mark.at)}`} onPointerDown={e => grab(e, mark, false)} onPointerMove={pull} onPointerUp={drop}>\n <img src={mark.image} alt={t.signature} draggable={false} />\n {open === mark.id && <>\n <span className=\"w100n-pdf-grip\" onPointerDown={e => grab(e, mark, true)} />\n <button type=\"button\" className=\"w100n-pdf-drop\" onPointerDown={e => e.stopPropagation()} onClick={() => act.remove(mark.id)} aria-label={t.remove} title={t.remove}><X aria-hidden /></button>\n </>}\n </div>;\n })}\n </div>;\n}\n","import { lazy, Suspense, useEffect, useLayoutEffect, useRef, useState, type ReactNode } from 'react';\nimport { flushSync } from 'react-dom';\nimport {\n Check, ChevronDown, ChevronRight, FileDown, FileSpreadsheet, FileText, FileType, Files, History, Info, LayoutGrid, ListTree, MessagesSquare,\n PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Presentation, RotateCcw, Search, Share2, Signature, X, type LucideIcon,\n} from 'lucide-react';\nimport { rove } from './focus';\nimport { kinds, matches } from './kinds';\nimport Sharing from './Sharing';\nimport { texts } from './text';\nimport Thumb from './Thumb';\nimport type { DocumentFile, DocumentKind, DocumentsHost, DocumentSummary, Language, Place } from './types';\nimport { useLoad } from './useLoad';\nimport type { Heading } from './viewers/headings';\nimport PdfView from './viewers/PdfView';\nimport { SlidesView } from './slides/SlidesView';\nimport { useUnsaved } from './Unsaved';\nimport './styles.css';\n\nconst TextEditor = lazy(() => import('./editor/TextEditor'));\nconst SheetView = lazy(() => import('./sheets/SheetView'));\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Tab = 'outline' | 'versions' | 'details' | 'signatures' | 'comments' | 'sharing';\ntype Slot = ReactNode | ((leave: (then: () => void) => void) => ReactNode);\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?: Slot; end?: Slot;\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 [narrow, setNarrow] = useState(false);\n const body = useRef<HTMLDivElement>(null);\n const listButton = useRef<HTMLButtonElement>(null);\n const panelButton = useRef<HTMLButtonElement>(null);\n const listClose = useRef<HTMLButtonElement>(null);\n const panel = useRef<HTMLElement>(null);\n const guard = useRef<(() => Promise<boolean>) | null>(null);\n useLayoutEffect(() => {\n const el = body.current!;\n let was = false;\n const check = () => {\n const now = getComputedStyle(el).getPropertyValue('--docs-narrow').trim() === '1';\n if (now && !was) {\n setPanelOpen(false);\n if (here.documentId) setListOpen(false);\n }\n was = now;\n setNarrow(now);\n };\n check();\n if (typeof ResizeObserver === 'undefined') return;\n const watch = new ResizeObserver(check);\n watch.observe(el);\n return () => watch.disconnect();\n }, [here.documentId]);\n const [picking, setPicking] = useState(false);\n useEffect(() => {\n if (!picking) return;\n const close = (e: PointerEvent) => { if (!(e.target as HTMLElement).closest('.w100n-docs-picker')) setPicking(false); };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [picking]);\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 const [exporting, setExporting] = useState<'idle' | 'busy' | 'failed'>('idle');\n const [copying, setCopying] = useState<'idle' | 'busy' | 'failed'>('idle');\n const [box, setBox] = useState<HTMLDivElement | null>(null);\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 const pdf = doc.data?.kind === 'pdf';\n const text = doc.data?.kind === 'markdown' || doc.data?.kind === 'docx';\n const signatures = useLoad(signal => here.documentId && pdf && host.signatures ? host.signatures(here.documentId, { signal }) : Promise.resolve([]), [host, here.documentId, pdf]);\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 { ask, dialog } = useUnsaved(guard, t);\n const side = (which: 'list' | 'panel', open: boolean) => {\n flushSync(() => {\n if (which === 'list') setListOpen(open);\n else setPanelOpen(open);\n if (open && narrow) (which === 'list' ? setPanelOpen : setListOpen)(false);\n });\n if (which === 'list') (open ? listClose : listButton).current?.focus();\n else (open ? panel.current?.querySelector<HTMLElement>('[aria-selected=\"true\"]') : panelButton.current)?.focus();\n };\n const open = (item: DocumentSummary) => {\n if (item.id === here.documentId) {\n if (narrow) setListOpen(false);\n return;\n }\n ask(() => {\n setOutline([]);\n setTab('outline');\n go({ spaceId: here.spaceId, documentId: item.id });\n if (narrow) setListOpen(false);\n });\n };\n const pick = (next: string | null) => {\n setPicking(false);\n ask(() => {\n setKind('all');\n go({ spaceId: next, documentId: null });\n });\n };\n const view = (id: string | null) => {\n if (id === versionId) return;\n ask(() => {\n setRestoring('idle');\n setVersion({ documentId: here.documentId, id });\n });\n };\n const slot = (part: Slot) => typeof part === 'function' ? part(ask) : part;\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 const exportAs = async (file: DocumentFile, format: 'pdf' | 'docx' | 'md') => {\n setExporting('busy');\n try {\n const url = URL.createObjectURL(await host.exportAs!(file.id, format));\n const link = document.createElement('a');\n link.href = url;\n link.download = `${file.name.replace(/\\.[^.]+$/, '')}.${format}`;\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n setExporting('idle');\n } catch {\n setExporting('failed');\n }\n };\n const copyAs = async (file: DocumentFile) => {\n setCopying('busy');\n try {\n const made = await host.copyAs!(file.id, 'xlsx');\n setCopying('idle');\n list.retry();\n open(made);\n } catch {\n setCopying('failed');\n }\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' || doc.data.kind === 'docx') stage = <Suspense fallback={<div className=\"w100n-docs-empty\">{t.loading}</div>}>\n <TextEditor key={doc.data.id} kind={doc.data.kind} bytes={content.data} t={t} language={language} rights={doc.data.rights} host={versionId ? undefined : host} together={doc.data.live}\n documentId={doc.data.id} onOutline={setOutline} onPanel={next => { setPanelOpen(true); setTab(next); if (narrow) setListOpen(false); }} slot={tab === 'comments' && panelOpen ? box : null}\n guard={guard} onSaved={() => { versions.retry(); doc.retry(); list.retry(); }} />\n </Suspense>;\n else if (doc.data.kind === 'pdf') stage = <PdfView key={`${doc.data.id}:${versionId ?? ''}`} bytes={content.data} t={t} language={language} worker={host.pdfWorker} rights={doc.data.rights}\n host={versionId ? undefined : host} documentId={doc.data.id} onOutline={setOutline} guard={guard}\n onSaved={() => { content.retry(); versions.retry(); doc.retry(); list.retry(); signatures.retry(); }} />;\n else if (doc.data.kind === 'slides') stage = <SlidesView key={doc.data.id} html={new TextDecoder().decode(content.data)} name={doc.data.name} rights={doc.data.rights} language={language}\n theme={theme} onOutline={setOutline} guard={guard}\n onSaveRequest={host.save && !versionId ? async (bytes, note) => { await host.save!(doc.data!.id, bytes, note); versions.retry(); doc.retry(); list.retry(); } : undefined} />;\n else if (doc.data.kind === 'sheet') stage = <Suspense fallback={<div className=\"w100n-docs-empty\">{t.loading}</div>}>\n <SheetView key={`${doc.data.id}:${versionId ?? ''}`} bytes={content.data} name={doc.data.name} kind={/\\.csv$/i.test(doc.data.name) || doc.data.mimeType === 'text/csv' ? 'csv' : 'xlsx'}\n rights={doc.data.rights} language={language} theme={theme} guard={guard} host={versionId ? undefined : host} together={doc.data.live} documentId={doc.data.id}\n onSaved={() => { versions.retry(); doc.retry(); list.retry(); }}\n onSaveRequest={versionId || !host.save ? undefined : async (bytes, note) => { await host.save!(doc.data!.id, bytes, note); versions.retry(); doc.retry(); list.retry(); }} />\n </Suspense>;\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 if (pdf && host.signatures) panelTabs.push(['signatures', Signature, t.signatures]);\n if (text && host.comments && !versionId) panelTabs.push(['comments', MessagesSquare, t.comments]);\n const sharing = !!host.links && !!doc.data?.rights.edit && !versionId;\n if (sharing) panelTabs.push(['sharing', Share2, t.sharing]);\n const listToggle = <button ref={listButton} type=\"button\" className={narrow ? 'w100n-docs-close' : 'w100n-docs-reopen'} aria-expanded={listOpen}\n onClick={() => side('list', !listOpen)} aria-label={listOpen ? t.closeList : t.openList} title={listOpen ? t.closeList : t.openList}>{listOpen ? <PanelLeftClose aria-hidden /> : <PanelLeftOpen aria-hidden />}</button>;\n const panelToggle = doc.data && <button ref={panelButton} type=\"button\" className={narrow ? 'w100n-docs-close' : 'w100n-docs-reopen w100n-docs-reopen-right'} aria-expanded={panelOpen}\n onClick={() => side('panel', !panelOpen)} aria-label={panelOpen ? t.closePanel : t.openPanel} title={panelOpen ? t.closePanel : t.openPanel}>{panelOpen ? <PanelRightClose aria-hidden /> : <PanelRightOpen aria-hidden />}</button>;\n return <div className=\"w100n-docs\" data-theme={theme}>\n <header className=\"w100n-docs-bar\">\n {slot(start)}\n {narrow && listToggle}\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?.convert && host.copyAs && !versionId && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"green\" disabled={copying === 'busy'} onClick={() => void copyAs(doc.data!)}>\n <FileSpreadsheet aria-hidden />{t.copyAs}\n </button>}\n {copying === 'failed' && <span className=\"w100n-docs-muted\">{t.copyFailed}</span>}\n {sharing && <button type=\"button\" className=\"w100n-docs-action\" aria-label={t.share} title={t.share} onClick={() => { setTab('sharing'); side('panel', true); }}><Share2 aria-hidden /><span>{t.share}</span></button>}\n {doc.data && !versionId && actions?.(doc.data)}\n {narrow && panelToggle}\n {end && <div className=\"w100n-docs-end\">{slot(end)}</div>}\n </header>\n <div ref={body} 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 ref={listClose} type=\"button\" className=\"w100n-docs-close\" onClick={() => side('list', 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\" onKeyDown={e => {\n if (e.key !== 'Escape' || !picking) return;\n e.stopPropagation();\n setPicking(false);\n e.currentTarget.querySelector('button')!.focus();\n }}>\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\" aria-label={t.kind}>{(['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>}\n {!narrow && !listOpen && listToggle}\n <main className=\"w100n-docs-stage\">\n {!narrow && !panelOpen && panelToggle}\n <div className=\"w100n-docs-bare\">{stage}</div>\n </main>\n {doc.data && panelOpen && <aside ref={panel} 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\" aria-label={t.details} data-compact={panelTabs.length > 3} onKeyDown={rove}>{panelTabs.map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"tab\" aria-selected={tab === key} tabIndex={tab === key ? 0 : -1} aria-label={label} title={label} onClick={() => setTab(key)}>\n <Icon aria-hidden />{(panelTabs.length < 4 || tab === key) && label}\n </button>)}</div>\n <button type=\"button\" className=\"w100n-docs-close\" onClick={() => side('panel', false)} aria-label={t.closePanel} title={t.closePanel}><X aria-hidden /></button>\n </div>\n </div>\n <div className=\"w100n-docs-panel-body\" role=\"tabpanel\" aria-label={panelTabs.find(([key]) => key === tab)?.[2]}>\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={() => item.go ? item.go() : 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={() => view(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 {tab === 'details' && host.exportAs && !!doc.data.exports?.length && <div className=\"w100n-docs-about\">\n <p className=\"w100n-docs-caption\"><FileDown aria-hidden />{t.exportAs}</p>\n <div className=\"w100n-docs-chips\">{doc.data.exports.map(format => <button key={format} type=\"button\" className=\"w100n-docs-action\" disabled={exporting === 'busy'}\n onClick={() => void exportAs(doc.data!, format)}><FileDown aria-hidden />{format.toUpperCase()}</button>)}</div>\n {exporting === 'failed' && <p className=\"w100n-docs-muted\">{t.exportFailed}</p>}\n </div>}\n {tab === 'comments' && <div ref={setBox} />}\n {tab === 'sharing' && sharing && <Sharing host={host} doc={doc.data} t={t} language={language} team={names.get(doc.data.spaceId)} />}\n {tab === 'signatures' && <div className=\"w100n-docs-versions\">\n {signatures.error && failed(signatures.retry)}\n {signatures.data?.length === 0 && <p className=\"w100n-docs-muted\">{t.noSignatures}</p>}\n {(signatures.data ?? []).map(entry => {\n const signed = versions.data?.find(v => v.id === entry.versionId);\n return <button key={entry.id} type=\"button\" disabled={!signed} aria-pressed={!!signed && (versionId ?? versions.data?.find(v => v.current)?.id) === signed.id}\n onClick={() => view(signed!.current ? null : signed!.id)}>\n <b>{entry.signer.name}<span className=\"w100n-docs-badge\">{t.page} {entry.page}</span></b>\n <small>{[date(entry.signedAt), t.methods[entry.method], signed && (signed.current ? t.current : `${t.version} ${date(signed.createdAt)}`)].filter(Boolean).join(' · ')}</small>\n </button>;\n })}\n </div>}\n {aside?.(doc.data)}\n </div>\n </aside>}\n </div>\n {dialog}\n </div>;\n}\n","import { useState } from 'react';\nimport { Ban, CalendarDays, Clock, Copy, Download, Eye, Link, Lock, MessageSquarePlus, Plus, Users } from 'lucide-react';\nimport type { Text } from './text';\nimport type { DocumentFile, DocumentsHost, GuestLink, Language } from './types';\nimport { useLoad } from './useLoad';\n\ntype Works = '7' | '30' | 'off' | 'day';\ntype Form = { id: string | null; comment: boolean; download: boolean; askName: boolean; works: Works; day: string; password: boolean; secret: string; had: boolean };\n\nconst blank: Form = { id: null, comment: false, download: false, askName: true, works: '30', day: '', password: false, secret: '', had: false };\n\nconst local = (iso: string) => {\n const at = new Date(iso);\n return `${at.getFullYear()}-${String(at.getMonth() + 1).padStart(2, '0')}-${String(at.getDate()).padStart(2, '0')}`;\n};\n\nexport default function Sharing({ host, doc, t, language, team }: { host: DocumentsHost; doc: DocumentFile; t: Text; language: Language; team?: string }) {\n const links = useLoad(signal => host.links!(doc.id, { signal }), [host, doc.id]);\n const [form, setForm] = useState<Form | null>(null);\n const [state, setState] = useState<'idle' | 'busy' | 'failed'>('idle');\n const [copied, setCopied] = useState<string | null>(null);\n const text = doc.kind === 'docx' || doc.kind === 'markdown';\n const rules = new Intl.PluralRules(language);\n const count = (n: number, forms: Record<string, string>) => `${n} ${forms[rules.select(n)] ?? forms.other}`;\n const day = (iso: string) => new Intl.DateTimeFormat(language, { day: 'numeric', month: 'short' }).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 return rtf.format(Math.round(minutes / 1440), 'day');\n };\n\n const edit = (l: GuestLink) => setForm({ id: l.id, comment: l.comment, download: l.download, askName: l.askName, works: l.endsAt ? 'day' : 'off',\n day: l.endsAt ? local(l.endsAt) : '', password: l.password, secret: '', had: l.password });\n const ends = (f: Form) => {\n if (f.works === 'off') return null;\n if (f.works === 'day') return new Date(`${f.day}T23:59:59`).toISOString();\n return new Date(Date.now() + Number(f.works) * 86400000).toISOString();\n };\n const ready = form && (form.works !== 'day' || (!!form.day && new Date(`${form.day}T23:59:59`) > new Date())) && (!form.password || form.had || form.secret.length >= 4);\n const submit = async () => {\n if (!form || !ready) return;\n setState('busy');\n const password = form.password ? form.secret || (form.had ? null : '') : form.had ? '' : null;\n const entry = { comment: text && form.comment, download: form.download, askName: form.askName, endsAt: ends(form), password };\n try {\n await (form.id ? host.relink!(form.id, entry) : host.share!(doc.id, entry));\n setForm(null);\n setState('idle');\n links.retry();\n } catch {\n setState('failed');\n }\n };\n const off = async (l: GuestLink) => {\n setState('busy');\n try {\n await host.unshare!(l.id);\n setState('idle');\n links.retry();\n } catch {\n setState('failed');\n }\n };\n const copy = async (l: GuestLink) => {\n try {\n await navigator.clipboard.writeText(l.url);\n setCopied(l.id);\n setTimeout(() => setCopied(now => (now === l.id ? null : now)), 2000);\n } catch {\n setCopied(null);\n }\n };\n\n if (form) return <div className=\"w100n-share\">\n <p className=\"w100n-docs-caption\"><Link aria-hidden />{form.id ? t.changeLink : t.newLink}</p>\n {text && <div className=\"w100n-share-field\"><span>{t.guestsCan}</span><div className=\"w100n-docs-chips\">\n <button type=\"button\" aria-pressed={!form.comment} onClick={() => setForm({ ...form, comment: false })}><Eye aria-hidden />{t.canRead}</button>\n <button type=\"button\" aria-pressed={form.comment} onClick={() => setForm({ ...form, comment: true })}><MessageSquarePlus aria-hidden />{t.canComment}</button>\n </div></div>}\n <div className=\"w100n-share-field\"><span>{t.linkWorks}</span><div className=\"w100n-docs-chips\">\n {([['7', t.days7], ['30', t.days30], ['off', t.untilTurnOff], ['day', t.pickDay]] as [Works, string][]).map(([key, label]) =>\n <button key={key} type=\"button\" aria-pressed={form.works === key} onClick={() => setForm({ ...form, works: key })}>{key === 'day' && <CalendarDays aria-hidden />}{label}</button>)}\n </div>\n {form.works === 'day' && <input type=\"date\" className=\"w100n-share-input\" value={form.day} min={local(new Date().toISOString())} aria-label={t.pickDay}\n onChange={e => setForm({ ...form, day: e.target.value })} />}\n </div>\n <label className=\"w100n-share-toggle\"><input type=\"checkbox\" checked={form.password} onChange={e => setForm({ ...form, password: e.target.checked })} />\n <span><b>{t.passwordOn}</b><small>{t.passwordHint}</small></span></label>\n {form.password && <input type=\"password\" className=\"w100n-share-input\" autoComplete=\"new-password\" value={form.secret} aria-label={t.passwordOn}\n placeholder={form.had ? t.keepPassword : t.passwordPlaceholder} onChange={e => setForm({ ...form, secret: e.target.value })} />}\n <label className=\"w100n-share-toggle\"><input type=\"checkbox\" checked={form.download} onChange={e => setForm({ ...form, download: e.target.checked })} />\n <span><b>{t.downloadFile}</b><small>{t.downloadHint}</small></span></label>\n <label className=\"w100n-share-toggle\"><input type=\"checkbox\" checked={form.askName} onChange={e => setForm({ ...form, askName: e.target.checked })} />\n <span><b>{t.askName}</b><small>{t.askNameHint}</small></span></label>\n <p className=\"w100n-docs-muted\">{t.lastSaved}</p>\n {state === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.shareFailed}</p>}\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => { setForm(null); setState('idle'); }}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" disabled={!ready || state === 'busy'} onClick={() => void submit()}><Link aria-hidden />{form.id ? t.saveLink : t.makeLink}</button>\n </span>\n </div>;\n\n const on = links.data ?? [];\n return <div className=\"w100n-share\">\n <p className=\"w100n-docs-caption\"><Link aria-hidden />{t.guestLinks}{on.length > 0 && <span>{on.filter(l => !l.ended).length}</span>}</p>\n {links.error && <div className=\"w100n-docs-note\">{t.failed}<button type=\"button\" onClick={links.retry}>{t.retry}</button></div>}\n {links.data && !on.length && <p className=\"w100n-docs-muted\">{t.noLinks}</p>}\n {state === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.shareFailed}</p>}\n {on.map(l => <article key={l.id} className=\"w100n-share-link\" data-ended={l.ended}>\n <header>\n <span className=\"w100n-share-tile\" data-tone={l.comment ? 'amber' : 'blue'}>{l.comment ? <MessageSquarePlus aria-hidden /> : <Eye aria-hidden />}</span>\n <span><b>{l.comment ? t.commentLink : t.viewLink}</b><small>{t.madeBy.replace('{name}', l.createdBy.name)} · {day(l.createdAt)}</small></span>\n </header>\n <div className=\"w100n-share-chips\">\n <span><Clock aria-hidden />{l.ended ? t.linkEnded : l.endsAt ? t.endsOn.replace('{date}', day(l.endsAt)) : t.untilOff}</span>\n {l.download && <span><Download aria-hidden />{t.downloadOn}</span>}\n {l.password && <span><Lock aria-hidden />{t.passwordOn}</span>}\n <span><Eye aria-hidden />{count(l.guests.reduce((n, g) => n + g.opens, 0), t.openForms)}</span>\n </div>\n <div className=\"w100n-share-url\"><span>{l.url.replace(/^https?:\\/\\//, '')}</span>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"blue\" onClick={() => void copy(l)}><Copy aria-hidden />{copied === l.id ? t.copied : t.copy}</button></div>\n {l.guests.length > 0 && <div className=\"w100n-share-who\">{l.guests.map((g, i) => <div key={i}>\n <span className=\"w100n-text-face\" aria-hidden>{(g.name || '?').slice(0, 1).toUpperCase()}</span><b>{g.name || t.unnamed}</b>\n <small>{g.comments ? count(g.comments, t.commentForms) : count(g.opens, t.openForms)} · {ago(g.lastAt)}</small>\n </div>)}</div>}\n <div className=\"w100n-share-tools\">\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"slate\" disabled={state === 'busy'} onClick={() => edit(l)}><Clock aria-hidden />{t.changeLink}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" disabled={state === 'busy'} onClick={() => void off(l)}><Ban aria-hidden />{t.turnOff}</button>\n </div>\n </article>)}\n <button type=\"button\" className=\"w100n-docs-action w100n-share-new\" onClick={() => { setState('idle'); setForm(blank); }}><Plus aria-hidden />{t.newLink}</button>\n {team && <>\n <p className=\"w100n-docs-caption\"><Users aria-hidden />{t.inTeam}</p>\n <div className=\"w100n-share-team\"><span className=\"w100n-share-tile\"><Users aria-hidden /></span>\n <span><b>{t.peopleOf.replace('{space}', team)}</b><small>{t.teamHint}</small></span></div>\n </>}\n </div>;\n}\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 { lazy, Suspense, useRef, useState, type ReactNode } from 'react';\nimport { Ban, Download, Eye, FileDown, FileSpreadsheet, FileText, FileType, Files, Lock, Presentation, UserRound, type LucideIcon } from 'lucide-react';\nimport { kindOf } from './kinds';\nimport { texts } from './text';\nimport type { DocumentKind, DocumentsHost, GuestFile, GuestHost, Language } from './types';\nimport { useLoad } from './useLoad';\nimport PdfView from './viewers/PdfView';\nimport { SlidesView } from './slides/SlidesView';\nimport './styles.css';\n\nconst TextEditor = lazy(() => import('./editor/TextEditor'));\nconst SheetView = lazy(() => import('./sheets/SheetView'));\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\nexport type GuestRefusal = 'missing' | 'ended' | 'password' | 'wrong' | 'name' | 'busy';\n\nexport class GuestRefused extends Error {\n constructor(readonly reason: GuestRefusal, readonly file = '', readonly sharedBy = '') {\n super(reason);\n }\n}\n\nconst remembered = () => {\n try {\n return localStorage.getItem('w100n-guest-name') ?? '';\n } catch {\n return '';\n }\n};\n\nconst remember = (name: string) => {\n try {\n localStorage.setItem('w100n-guest-name', name);\n } catch {\n return;\n }\n};\n\nexport function GuestDocument({ host, language = 'en', theme = 'light', brand }: { host: GuestHost; language?: Language; theme?: 'light' | 'dark'; brand?: ReactNode }) {\n const t = texts[language];\n const [ask, setAsk] = useState<{ password?: string; name?: string }>(() => ({ name: remembered() || undefined }));\n const [typed, setTyped] = useState('');\n const [name, setName] = useState(remembered);\n const named = useRef(name);\n const [slot, setSlot] = useState<HTMLDivElement | null>(null);\n const [saving, setSaving] = useState<'idle' | 'busy' | 'failed'>('idle');\n const opened = useLoad(signal => host.open(ask, { signal }), [host, ask]);\n const [notes] = useState<DocumentsHost>(() => ({\n me: { id: '', name: '' },\n spaces: async () => [],\n documents: async () => [],\n document: () => Promise.reject(new Error('A guest opens one document')),\n versions: async () => [],\n content: () => Promise.reject(new Error('A guest opens one document')),\n comments: (_id, opts) => host.comments(opts),\n comment: (_id, entry) => named.current.trim() ? host.comment({ ...entry, name: named.current.trim() }) : Promise.reject(new Error('A guest comments under a name')),\n }));\n\n const typeName = (value: string) => {\n named.current = value;\n setName(value);\n remember(value.trim());\n };\n const download = async (format: 'file' | 'pdf') => {\n setSaving('busy');\n try {\n await host.download(format);\n setSaving('idle');\n } catch {\n setSaving('failed');\n }\n };\n\n const top = (file: GuestFile | null, badge: string | null) => {\n const kind = file ? kindOf(file.name, file.mimeType) : null;\n const Kind = kind ? icons[kind] : FileText;\n return <header className=\"w100n-docs-bar w100n-guest-bar\">\n {brand && <span className=\"w100n-guest-brand\">{brand}</span>}\n {file && <>\n <span className=\"w100n-docs-tile\" data-kind={kind}><Kind aria-hidden /></span>\n <div className=\"w100n-docs-heading\">\n <strong className=\"w100n-docs-title\">{file.name}</strong>\n {file.sharedBy && <span className=\"w100n-docs-crumbs\">{t.sharedBy.replace('{name}', file.sharedBy)}</span>}\n </div>\n {badge && <span className=\"w100n-docs-badge\" data-kind={kind}>{badge}</span>}\n {file.download && <div className=\"w100n-docs-end\">\n {(kind === 'docx' || kind === 'markdown' || kind === 'sheet' || kind === 'slides') && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"slate\"\n disabled={saving === 'busy'} onClick={() => void download('pdf')} aria-label={t.pdfCopy} title={t.pdfCopy}><FileDown aria-hidden /><span>{t.pdfCopy}</span></button>}\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"blue\" disabled={saving === 'busy'} onClick={() => void download('file')} aria-label={t.download} title={t.download}>\n <Download aria-hidden /><span>{t.download}</span></button>\n </div>}\n </>}\n </header>;\n };\n\n const gate = (tone: string, Icon: LucideIcon, title: string, body: string, form?: ReactNode) => <div className=\"w100n-docs w100n-guest\" data-theme={theme}>\n {top(null, null)}\n <div className=\"w100n-guest-gate\"><div className=\"w100n-guest-card\">\n <span className=\"w100n-share-tile\" data-tone={tone}><Icon aria-hidden /></span>\n <h2>{title}</h2>\n <p>{body}</p>\n {form}\n </div></div>\n </div>;\n\n if (opened.error) {\n const refused = opened.error instanceof GuestRefused ? opened.error : null;\n if (refused?.reason === 'ended') return gate('slate', Ban, t.endedTitle, t.endedText);\n if (refused?.reason === 'missing') return gate('slate', Ban, t.missingTitle, t.missingText);\n if (refused?.reason === 'password' || refused?.reason === 'wrong' || refused?.reason === 'name') {\n const password = refused.reason !== 'name';\n const shared = refused.sharedBy ? `${t.sharedBy.replace('{name}', refused.sharedBy)}. ` : '';\n return gate('violet', password ? Lock : UserRound, refused.file || t.documents, shared + (password ? t.passwordAsk : t.nameAsk),\n <form className=\"w100n-guest-form\" onSubmit={e => {\n e.preventDefault();\n if (!typed.trim()) return;\n if (password) setAsk({ ...ask, password: typed });\n else {\n typeName(typed);\n setAsk({ ...ask, name: typed.trim() });\n }\n setTyped('');\n }}>\n <input className=\"w100n-share-input\" type={password ? 'password' : 'text'} autoFocus value={typed} autoComplete={password ? 'current-password' : 'name'}\n placeholder={password ? t.passwordPlaceholder : t.yourName} aria-label={password ? t.passwordOn : t.yourName} onChange={e => setTyped(e.target.value)} />\n {refused.reason === 'wrong' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.wrongPassword}</p>}\n <button type=\"submit\" className=\"w100n-docs-action\" disabled={!typed.trim()}><Eye aria-hidden />{t.openDoc}</button>\n </form>);\n }\n if (refused?.reason === 'busy') return gate('slate', Ban, t.failed, t.tooMany);\n return gate('slate', Ban, t.failed, '', <button type=\"button\" className=\"w100n-docs-action\" onClick={opened.retry}>{t.retry}</button>);\n }\n\n const file = opened.data;\n if (!file) return <div className=\"w100n-docs w100n-guest\" data-theme={theme}>{top(null, null)}<div className=\"w100n-docs-empty\">{t.loading}</div></div>;\n const kind = kindOf(file.name, file.mimeType);\n const text = kind === 'docx' || kind === 'markdown';\n const talk = text && file.comment;\n const rights = { view: true, comment: talk, edit: false };\n const quiet = () => {};\n let stage: ReactNode = <div className=\"w100n-docs-empty\">{t.unsupported}</div>;\n if (text) stage = <Suspense fallback={<div className=\"w100n-docs-empty\">{t.loading}</div>}>\n <TextEditor kind={kind} bytes={file.bytes} t={t} language={language} rights={rights} host={talk ? notes : undefined} documentId={file.id} onOutline={quiet} slot={talk ? slot : null} />\n </Suspense>;\n else if (kind === 'pdf') stage = <PdfView bytes={file.bytes} t={t} language={language} worker={host.pdfWorker} rights={rights} documentId={file.id} onOutline={quiet} />;\n else if (kind === 'slides') stage = <SlidesView html={new TextDecoder().decode(file.bytes)} name={file.name} rights={rights} language={language} theme={theme} onOutline={quiet} />;\n else if (kind === 'sheet') stage = <Suspense fallback={<div className=\"w100n-docs-empty\">{t.loading}</div>}>\n <SheetView bytes={file.bytes} name={file.name} kind={/\\.csv$/i.test(file.name) || file.mimeType === 'text/csv' ? 'csv' : 'xlsx'} rights={rights} language={language} theme={theme} documentId={file.id} />\n </Suspense>;\n\n return <div className=\"w100n-docs w100n-guest\" data-theme={theme}>\n {top(file, talk ? t.badgeComment : t.badgeRead)}\n {saving === 'failed' && <p className=\"w100n-docs-muted w100n-guest-note\" role=\"alert\">{t.exportFailed}</p>}\n <div className=\"w100n-docs-body w100n-guest-body\">\n <main className=\"w100n-docs-stage\"><div className=\"w100n-docs-bare\">{stage}</div></main>\n {talk && <aside className=\"w100n-docs-side w100n-docs-panel w100n-guest-panel\" aria-label={t.comments}>\n <div className=\"w100n-docs-panel-body\">\n <label className=\"w100n-share-field\"><span>{t.yourName}</span>\n <input className=\"w100n-share-input\" value={name} autoComplete=\"name\" placeholder={t.yourName} onChange={e => typeName(e.target.value)} /></label>\n <p className=\"w100n-docs-muted\">{name.trim() ? t.nameHint : t.nameNeeded}</p>\n <div ref={setSlot} />\n </div>\n </aside>}\n </div>\n </div>;\n}\n"],"mappings":"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","names":["en","pl","uk","load","key","import_react","marks","module","import_pdfium","box","boxes","parse","key","escape","order","parts","seen","names","local","entries","pt","marks","parts","parse","key","make","seen","entries","key","shape","inline","pieces","last","marks","blank","make","parse","b","meta","indent","box","span","grid","row","cell","down","px","key","picture","quote","span","row","n","escape","on","load","images","changed","listed","pending","size","same","parse","boxes","box","cache","id","layout","last","side","R","shape","size","px","load","box","import_react","import_jsx_runtime","last","skip","value","sig","relative","last","c","StarterKit","Image","Highlight","Collaboration","CollaborationCaret","marked","quote","import_core","import_state","import_view","align","attrs","seen","drop","pos","paint","tr","fresh","parts","value","skip","pending","key","inline","marks","value","clean","token","decode","entry","table","cell","row","contents","skip","steps","seen","key","raws","made","types","blank","lines","span","plain","last","side","lines","decode","out","table","decoder","row","value","sniff","lines","quote","last","filled","resolve","parts","value","seen","boxes","last","write","plain","hex","p","q","Styles","parse","on","fill","key","align","turn","same","keys","inner","name","value","escape","diff","parts","id","order","edits","clean","attr","load","Styles","entries","notes","entry","row","inner","plain","target","boxes","names","local","uid","kinds","blank","pt","blank","find","value","boxes","attr","escape","inner","load","names","fresh","types","lines","entry","seen","made","same","changed","parts","look","uid","notes","REL","listed","local","f","differs","runs","on","columns","vml","shape","patterns","init_write","last","load","init_write","lines","props","fill","notes","spot","row","order","notesOf","init_write","en","pl","uk","init_text","fill","write","load","blocks","changed","same","named","refs","parse","import_core","import_transform","import_y_tiptap","Y","init_text","names","Y","key","document","on","waiting","host","wire","meta","seen","on","state","save","import_react","Y","anchors","layout","grid","changed","made","block","fresh","last","key","save","refs","value","drop","uid","settle","spot","all","keys","align","named","size","import_react","import_lucide_react","import_react_dom","import_jsx_runtime","track","lines","ours","span","order","lines","row","key","spot","notes","seen","props","write","local","lazy","keys","size","notesOf","shape","move","m","import_core","grid","coreEn","checkEn","filterEn","findEn","noteEn","sortEn","corePl","checkPl","filterPl","findPl","notePl","sortPl","turn","import_lib","import_en_US","import_pl_PL","box","waiting","notes","grid","marks","host","api","track","last","range","pending","save","seen","keys","key","lines","import_react","import_lucide_react","import_jsx_runtime","init_text","import_lucide_react","import_react","import_react_dom","import_react","i","tags","m","attrs","value","key","notes","marks","init","css","box","spot","inner","marked","size","el","quoted","indent","parts","fill","key","attr","value","plain","color","spot","box","block","box","entry","made","drop","steps","build","frozen","around","save","key","order","entries","keys","import_lucide_react","import_react","import_jsx_runtime","save","import_lucide_react","import_react","import_lucide_react","import_react","import_jsx_runtime","size","paint","boxes","fill","value","flat","parts","at","marks","down","move","last","steps","resize","drop","import_jsx_runtime","box","palette","clean","filled","pending","marks","flat","entries","level","entry","outline","measure","made","lines","size","stored","value","save","write","changed","keys","key","family","at","Sign","listed","import_jsx_runtime","TextEditor","SheetView","quiet","box","escape","save","import_react","import_react_dom","import_lucide_react","import_react","import_lucide_react","import_jsx_runtime","blank","entry","copy","key","on","import_react","box","key","import_jsx_runtime","box","seen","entries","entry","lines","import_jsx_runtime","TextEditor","SheetView","icons","place","outline","version","box","all","doc","folder","names","groups","size","side","open","versionId","made","key","entry","import_react","import_lucide_react","import_jsx_runtime","TextEditor","SheetView","icons","named","opened","notes","entry","value","file","kind","quiet"]}
|