@w100n/documents 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{SheetView-3XTEV2VT.css → SheetView-43MPR64N.css} +5 -4
  2. package/dist/{SheetView-3XTEV2VT.css.map → SheetView-43MPR64N.css.map} +1 -1
  3. package/dist/{SheetView-3UAFXGZS.js → SheetView-4TPL7DES.js} +51 -10
  4. package/dist/SheetView-4TPL7DES.js.map +1 -0
  5. package/dist/{TextEditor-OLBLWC6F.js → TextEditor-VBHWUOZR.js} +636 -225
  6. package/dist/TextEditor-VBHWUOZR.js.map +1 -0
  7. package/dist/{chunk-L765DZPO.js → chunk-2CA3HQTI.js} +3 -3
  8. package/dist/{chunk-L765DZPO.js.map → chunk-2CA3HQTI.js.map} +1 -1
  9. package/dist/{chunk-MRP3EURG.js → chunk-5MH4WDW4.js} +133 -20
  10. package/dist/chunk-5MH4WDW4.js.map +1 -0
  11. package/dist/{chunk-WR3MT7KP.js → chunk-DR3TTJWZ.js} +374 -29
  12. package/dist/chunk-DR3TTJWZ.js.map +1 -0
  13. package/dist/{chunk-T7XCGDE5.js → chunk-RCQODE2Z.js} +2 -2
  14. package/dist/collab.cjs +487 -46
  15. package/dist/collab.cjs.map +1 -1
  16. package/dist/collab.d.cts +2 -2
  17. package/dist/collab.d.ts +2 -2
  18. package/dist/collab.js +2 -2
  19. package/dist/{grid-EI5JNZAA.js → grid-Q4XBPQFY.js} +3 -3
  20. package/dist/grid-Q4XBPQFY.js.map +1 -0
  21. package/dist/index.cjs +1449 -314
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.css +888 -171
  24. package/dist/index.css.map +1 -1
  25. package/dist/index.d.cts +9 -4
  26. package/dist/index.d.ts +9 -4
  27. package/dist/index.js +282 -32
  28. package/dist/index.js.map +1 -1
  29. package/dist/kinds.cjs +2 -2
  30. package/dist/kinds.cjs.map +1 -1
  31. package/dist/kinds.d.cts +2 -2
  32. package/dist/kinds.d.ts +2 -2
  33. package/dist/kinds.js +1 -1
  34. package/dist/memory.cjs +3 -0
  35. package/dist/memory.cjs.map +1 -1
  36. package/dist/memory.d.cts +1 -1
  37. package/dist/memory.d.ts +1 -1
  38. package/dist/memory.js +4 -1
  39. package/dist/memory.js.map +1 -1
  40. package/dist/{types-Er60M5kL.d.ts → types-BTsVooZw.d.cts} +2 -1
  41. package/dist/{types-Er60M5kL.d.cts → types-BTsVooZw.d.ts} +2 -1
  42. package/dist/write-BCI8yool.d.cts +16 -0
  43. package/dist/write-BCI8yool.d.ts +16 -0
  44. package/package.json +1 -1
  45. package/dist/SheetView-3UAFXGZS.js.map +0 -1
  46. package/dist/TextEditor-OLBLWC6F.js.map +0 -1
  47. package/dist/chunk-MRP3EURG.js.map +0 -1
  48. package/dist/chunk-WR3MT7KP.js.map +0 -1
  49. package/dist/grid-EI5JNZAA.js.map +0 -1
  50. package/dist/write-DaVtTJCS.d.cts +0 -6
  51. package/dist/write-DaVtTJCS.d.ts +0 -6
  52. /package/dist/{chunk-T7XCGDE5.js.map → chunk-RCQODE2Z.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/editor/TextEditor.tsx","../src/viewers/DocxView.tsx","../src/viewers/headings.ts"],"sourcesContent":["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 { 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, renderAltChunks: false }))\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; 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"],"mappings":"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","names":["Fragment","useRef","useState","Fragment","jsx","jsxs","useRef","useState","last","all"]}