@w100n/documents 0.16.4 → 0.17.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 (44) hide show
  1. package/dist/{Compare-M57FG4R3.js → Compare-RHAUAKUJ.js} +2 -2
  2. package/dist/{SheetView-OEKOHMKW.js → SheetView-SBLAFGTL.js} +5 -5
  3. package/dist/{TextEditor-5S7FSLIZ.js → TextEditor-X2GSL4QM.js} +119 -27
  4. package/dist/TextEditor-X2GSL4QM.js.map +1 -0
  5. package/dist/{chunk-AKJGYZME.js → chunk-A6AHJCEK.js} +67 -832
  6. package/dist/chunk-A6AHJCEK.js.map +1 -0
  7. package/dist/{chunk-3D2G5NBI.js → chunk-ASTNK6WZ.js} +2 -2
  8. package/dist/{chunk-VNXZVOPN.js → chunk-B7C6NBBQ.js} +929 -1
  9. package/dist/chunk-B7C6NBBQ.js.map +1 -0
  10. package/dist/chunk-FFXAOK4A.js +39 -0
  11. package/dist/chunk-FFXAOK4A.js.map +1 -0
  12. package/dist/{chunk-EQLBYW42.js → chunk-GSIPTCQH.js} +9 -1
  13. package/dist/chunk-GSIPTCQH.js.map +1 -0
  14. package/dist/collab.cjs +170 -2
  15. package/dist/collab.cjs.map +1 -1
  16. package/dist/collab.d.cts +1 -1
  17. package/dist/collab.d.ts +1 -1
  18. package/dist/collab.js +3 -3
  19. package/dist/index.cjs +1204 -540
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.css +313 -0
  22. package/dist/index.css.map +1 -1
  23. package/dist/index.d.cts +2 -2
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +871 -494
  26. package/dist/index.js.map +1 -1
  27. package/dist/kinds.d.cts +1 -1
  28. package/dist/kinds.d.ts +1 -1
  29. package/dist/memory.cjs +3 -2
  30. package/dist/memory.cjs.map +1 -1
  31. package/dist/memory.d.cts +1 -1
  32. package/dist/memory.d.ts +1 -1
  33. package/dist/memory.js +3 -2
  34. package/dist/memory.js.map +1 -1
  35. package/dist/{types-BUO0OzOl.d.cts → types-CHmV8GLx.d.cts} +1 -0
  36. package/dist/{types-BUO0OzOl.d.ts → types-CHmV8GLx.d.ts} +1 -0
  37. package/package.json +1 -1
  38. package/dist/TextEditor-5S7FSLIZ.js.map +0 -1
  39. package/dist/chunk-AKJGYZME.js.map +0 -1
  40. package/dist/chunk-EQLBYW42.js.map +0 -1
  41. package/dist/chunk-VNXZVOPN.js.map +0 -1
  42. /package/dist/{Compare-M57FG4R3.js.map → Compare-RHAUAKUJ.js.map} +0 -0
  43. /package/dist/{SheetView-OEKOHMKW.js.map → SheetView-SBLAFGTL.js.map} +0 -0
  44. /package/dist/{chunk-3D2G5NBI.js.map → chunk-ASTNK6WZ.js.map} +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DocumentOverlay.tsx","../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/NewDocument.tsx","../src/blank.ts","../src/Sharing.tsx","../src/Thumb.tsx","../src/preview.ts","../src/FilePreview.tsx","../src/GuestDocument.tsx"],"sourcesContent":["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 { 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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\nexport const quote = (s: string) => escape(s).replace(/\"/g, '&quot;');\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 Bookmark, Check, ChevronDown, ChevronRight, Copy, Download, ExternalLink, FileDiff, FileDown, Link, Pencil, Send, Trash2, FilePlus, FileSpreadsheet, FileText, FileType, Files, History, Info, LayoutGrid, ListFilter, ListTree, MessagesSquare,\n PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Plus, Presentation, RotateCcw, Search, Share2, Signature, Upload, X, type LucideIcon,\n} from 'lucide-react';\nimport { rove } from './focus';\nimport { kinds, matches } from './kinds';\nimport NewDocument from './NewDocument';\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, Reading } 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'));\nconst Compare = lazy(() => import('./Compare'));\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 [picked, setPicked] = useState<DocumentKind[]>([]);\n const [typing, setTyping] = useState(false);\n const [menusAt, setMenusAt] = useState<HTMLDivElement | null>(null);\n const [renaming, setRenaming] = useState<string | null>(null);\n const [renamed, setRenamed] = useState<'idle' | 'failed'>('idle');\n const [statusAt, setStatusAt] = useState<HTMLSpanElement | null>(null);\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 const [adding, setAdding] = useState(false);\n useEffect(() => {\n if (!adding) return;\n const close = (e: PointerEvent) => { if (!(e.target as HTMLElement).closest('.w100n-docs-new')) setAdding(false); };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [adding]);\n useEffect(() => {\n if (!typing) return;\n const close = (e: PointerEvent) => { if (!(e.target as HTMLElement).closest('.w100n-docs-types')) setTyping(false); };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [typing]);\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 [menu, setMenu] = useState<{ item: DocumentSummary; x: number; y: number; sure: boolean } | null>(null);\n const [naming, setNaming] = useState<{ id: string; text: string } | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const early = useRef(new Map<string, { at: number; doc?: Promise<DocumentFile>; bytes?: Promise<ArrayBuffer> }>());\n const hover = useRef(0);\n useEffect(() => {\n if (!menu) return;\n const close = (e: Event) => {\n if (e.type === 'pointerdown' && (e.target as HTMLElement).closest('.w100n-docs-context')) return;\n if (e.type === 'keydown' && (e as KeyboardEvent).key !== 'Escape') return;\n setMenu(null);\n };\n document.addEventListener('pointerdown', close);\n window.addEventListener('keydown', close);\n window.addEventListener('scroll', close, true);\n return () => {\n document.removeEventListener('pointerdown', close);\n window.removeEventListener('keydown', close);\n window.removeEventListener('scroll', close, true);\n };\n }, [menu]);\n const [tab, setTab] = useState<Tab>('outline');\n const [outline, setOutline] = useState<Heading[]>([]);\n const [reading, setReading] = useState<Reading | null>(null);\n const [hunt, setHunt] = useState('');\n const [fold, setFold] = useState<Record<string, boolean>>({});\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 [comparing, setComparing] = useState(false);\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 [kept, setKept] = useState<{ id: string; state: 'busy' | 'done' | 'failed' } | null>(null);\n const [box, setBox] = useState<HTMLDivElement | null>(null);\n const [making, setMaking] = useState(false);\n const [sending, setSending] = useState<'idle' | 'busy' | 'failed'>('idle');\n const upload = useRef<HTMLInputElement>(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 useEffect(() => {\n const sync = () => {\n if (document.visibilityState !== 'visible') return;\n spaces.retry();\n list.retry();\n };\n const timer = window.setInterval(sync, 30_000);\n window.addEventListener('focus', sync);\n document.addEventListener('visibilitychange', sync);\n return () => {\n clearInterval(timer);\n window.removeEventListener('focus', sync);\n document.removeEventListener('visibilitychange', sync);\n };\n }, []);\n const take = <K extends 'doc' | 'bytes'>(id: string, key: K) => {\n const kept = early.current.get(id);\n const found = kept && Date.now() - kept.at < 15000 ? kept[key] : undefined;\n if (kept) delete kept[key];\n return found;\n };\n const doc = useLoad(signal => here.documentId ? take(here.documentId, 'doc') ?? 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 ? (!versionId && take(here.documentId, 'bytes')) || 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 docbar = text && !versionId && !narrow;\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 deep = useLoad(async signal => {\n const text = query.trim();\n if (!host.search || text.length < 2) return [];\n await new Promise(done => setTimeout(done, 300));\n return signal.aborted ? [] : host.search(text, { signal });\n }, [host, query]);\n const inside = new Map((deep.data ?? []).map(hit => [hit.id, hit.excerpt]));\n const shown = all.filter(item => matches(item, query, picked) || (inside.has(item.id) && matches(item, '', picked)));\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 setHunt('');\n setFold({});\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 setPicked([]);\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 setComparing(false);\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 const copy = async (file: DocumentFile) => {\n setCopying('busy');\n try {\n const made = await host.create!({ name: `${t.copyOf} ${file.name}`, bytes: await host.content(file.id), mimeType: file.mimeType ?? 'application/octet-stream' });\n setCopying('idle');\n opened(made);\n } catch {\n setCopying('failed');\n }\n };\n const keep = async (file: DocumentFile) => {\n setKept({ id: file.id, state: 'busy' });\n try {\n await host.saveTemplate!(file.id);\n setKept({ id: file.id, state: 'done' });\n } catch {\n setKept({ id: file.id, state: 'failed' });\n }\n };\n const warm = (item: DocumentSummary) => {\n clearTimeout(hover.current);\n hover.current = window.setTimeout(() => {\n if (item.id === here.documentId) return;\n if (item.kind === 'docx' || item.kind === 'markdown') void import('./editor/TextEditor');\n if (item.kind === 'sheet') void import('./sheets/SheetView');\n const kept = early.current.get(item.id);\n if ((kept && Date.now() - kept.at < 15000) || item.size > 5_000_000) return;\n const next = { at: Date.now(), doc: host.document(item.id), bytes: host.content(item.id, null) };\n next.doc.catch(() => {});\n next.bytes.catch(() => {});\n early.current.set(item.id, next);\n }, 150);\n };\n const act = async (run: () => Promise<unknown>, done?: string) => {\n setMenu(null);\n setNotice(null);\n try {\n await run();\n if (done) setNotice(done);\n } catch {\n setNotice(t.actionFailed);\n }\n };\n const fetchFile = async (item: DocumentSummary) => {\n const url = URL.createObjectURL(new Blob([await host.content(item.id)]));\n const link = Object.assign(document.createElement('a'), { href: url, download: item.name });\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n };\n const retitle = async (item: DocumentSummary, draft: string) => {\n setNaming(null);\n const ext = /\\.[^.]+$/.exec(item.name)?.[0] ?? '';\n const name = draft.trim() && (/\\.[^.\\s]+$/.test(draft.trim()) ? draft.trim() : draft.trim() + ext);\n if (!name || name === item.name) return;\n await act(() => host.rename!(item.id, name));\n list.retry();\n if (item.id === here.documentId) doc.retry();\n };\n const drop = async (item: DocumentSummary) => {\n await act(() => host.remove!(item.id), t.trashed);\n list.retry();\n if (item.id === here.documentId) go({ spaceId: here.spaceId, documentId: null });\n };\n const rename = async (file: DocumentFile, draft: string) => {\n setRenaming(null);\n const ext = /\\.[^.]+$/.exec(file.name)?.[0] ?? '';\n const name = draft.trim() && (/\\.[^.\\s]+$/.test(draft.trim()) ? draft.trim() : draft.trim() + ext);\n if (!name || name === file.name) return;\n try {\n await host.rename!(file.id, name);\n setRenamed('idle');\n doc.retry();\n list.retry();\n } catch {\n setRenamed('failed');\n }\n };\n\n const opened = (made: DocumentSummary) => {\n spaces.retry();\n list.retry();\n ask(() => go({ spaceId: here.spaceId && made.spaceId, documentId: made.id }));\n };\n const send = async (file: File) => {\n setSending('busy');\n try {\n opened(await host.create!({ name: file.name, bytes: await file.arrayBuffer(), mimeType: file.type || 'application/octet-stream' }));\n setSending('idle');\n } catch {\n setSending('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 (comparing && versionId && (doc.data.kind === 'markdown' || doc.data.kind === 'docx')) stage = <Suspense fallback={<div className=\"w100n-docs-empty\">{t.loading}</div>}>\n <Compare key={versionId} host={host} documentId={doc.data.id} kind={doc.data.kind} older={content.data} t={t} />\n </Suspense>;\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} onReading={setReading} onPanel={next => { setPanelOpen(true); setTab(next); if (narrow) setListOpen(false); }} slot={tab === 'comments' && panelOpen ? box : null}\n head={docbar ? { menus: menusAt, status: statusAt } : undefined} guard={guard}\n file={versionId ? undefined : { formats: host.exportAs ? doc.data.exports ?? [] : [], download: f => void exportAs(doc.data!, f), copy: host.create ? () => void copy(doc.data!) : undefined,\n rename: host.rename && doc.data.rights.edit ? () => setRenaming(doc.data!.name.replace(/\\.[^.]+$/, '')) : undefined,\n template: host.saveTemplate && doc.data.rights.edit ? () => void keep(doc.data!) : undefined }} 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 top = Math.min(...outline.map(h => h.level));\n const chapters = outline.reduce<{ head: Heading; subs: Heading[] }[]>((all, h) => {\n if (h.level === top || !all.length) all.push({ head: h, subs: [] });\n else all[all.length - 1].subs.push(h);\n return all;\n }, []);\n const now = reading?.documentId === here.documentId ? reading : null;\n const reached = now ? chapters.findIndex(c => c.head.id === now.id || c.subs.some(s => s.id === now.id)) : -1;\n const words = hunt.toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n const hit = (h: Heading) => words.every(w => h.text.toLocaleLowerCase().includes(w));\n const reach = (h: Heading) => h.go ? h.go() : document.getElementById(h.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\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 {start && <span className=\"w100n-docs-start w100n-docs-slot\">{slot(start)}</span>}\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 {renaming !== null && doc.data ? <input className=\"w100n-docs-title w100n-docs-rename\" autoFocus value={renaming} aria-label={t.rename} onFocus={e => e.currentTarget.select()}\n onChange={e => setRenaming(e.target.value)} onBlur={() => void rename(doc.data!, renaming)}\n onKeyDown={e => { if (e.key === 'Enter') e.currentTarget.blur(); if (e.key === 'Escape') { e.stopPropagation(); setRenaming(null); } }} />\n : <strong className=\"w100n-docs-title\" title={docbar ? crumbs.join(' / ') : undefined}\n onDoubleClick={host.rename && doc.data?.rights.edit && !versionId ? () => setRenaming(doc.data!.name.replace(/\\.[^.]+$/, '')) : undefined}>{doc.data?.name ?? t.documents}</strong>}\n {docbar ? <div ref={setMenusAt} className=\"w100n-docs-menus\" /> : crumbs.length > 0 ? <span className=\"w100n-docs-crumbs\">{crumbs.map((item, i) => <span key={i}>{i > 0 && <ChevronRight aria-hidden />}{item}</span>)}</span>\n : <span className=\"w100n-docs-hint\">{t.hint}</span>}\n </div>\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 && text && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"blue\" aria-pressed={comparing} onClick={() => setComparing(!comparing)}>\n <FileDiff aria-hidden />{comparing ? t.hideChanges : t.showChanges}\n </button>}\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 {kept?.id === here.documentId && kept.state === 'done' && <span className=\"w100n-docs-muted\" role=\"status\">{t.templateSaved}</span>}\n {kept?.id === here.documentId && kept.state === 'failed' && <span className=\"w100n-docs-muted\" role=\"alert\">{t.templateFailed}</span>}\n {renamed === 'failed' && <span className=\"w100n-docs-muted\">{t.renameFailed}</span>}\n {docbar && <span ref={setStatusAt} className=\"w100n-docs-status\" />}\n {host.send && doc.data && !versionId && !doc.data.id.includes(':') && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"blue\" aria-label={t.sendChat} title={t.sendChat}\n onClick={() => host.send!(doc.data!.id)}><Send aria-hidden /><span>{t.sendChat}</span></button>}\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 w100n-docs-slot\">{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 {host.create && <div className=\"w100n-docs-new\" onKeyDown={e => { if (e.key === 'Escape' && adding) { e.stopPropagation(); setAdding(false); } }}>\n <button type=\"button\" className=\"w100n-docs-action\" aria-haspopup=\"menu\" aria-expanded={adding} disabled={sending === 'busy'} onClick={() => setAdding(!adding)}>\n <Plus aria-hidden /><span>{sending === 'busy' ? t.uploading : t.create}</span><ChevronDown aria-hidden />\n </button>\n {adding && <div role=\"menu\" className=\"w100n-docs-menu\">\n <button type=\"button\" role=\"menuitem\" onClick={() => { setAdding(false); setMaking(true); }}><span className=\"w100n-docs-all\"><FilePlus aria-hidden /></span><b>{t.newTitle}</b></button>\n <button type=\"button\" role=\"menuitem\" onClick={() => { setAdding(false); upload.current!.click(); }}><span className=\"w100n-docs-all\"><Upload aria-hidden /></span><b>{t.uploadFile}</b></button>\n </div>}\n <input ref={upload} type=\"file\" hidden aria-label={t.uploadFile} accept=\".docx,.md,.markdown,.pdf,.xlsx,.csv,.html,.htm\" onChange={e => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (file) void send(file);\n }} />\n </div>}\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 <div className=\"w100n-docs-filters\">\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-types\" onKeyDown={e => {\n if (e.key !== 'Escape' || !typing) return;\n e.stopPropagation();\n setTyping(false);\n e.currentTarget.querySelector('button')!.focus();\n }}>\n <button type=\"button\" className=\"w100n-docs-field\" aria-haspopup=\"listbox\" aria-expanded={typing} data-on={picked.length > 0} onClick={() => setTyping(!typing)}>\n <ListFilter aria-hidden /><b>{t.typeFilter}</b>{picked.length > 0 && <span className=\"w100n-docs-badge\">{picked.length}</span>}<ChevronDown aria-hidden />\n </button>\n {typing && <div role=\"listbox\" aria-multiselectable aria-label={t.kind} className=\"w100n-docs-menu\">\n {present.map(item => {\n const Icon = icons[item];\n const on = picked.includes(item);\n return <button key={item} type=\"button\" role=\"option\" aria-selected={on} onClick={() => setPicked(on ? picked.filter(k => k !== item) : [...picked, item])}>\n <span className=\"w100n-docs-box\">{on && <Check aria-hidden />}</span><span className=\"w100n-docs-tile\" data-kind={item}><Icon aria-hidden /></span>\n <b>{t.kinds[item]}</b><span className=\"w100n-docs-count\">{all.filter(doc => doc.kind === item).length}</span>\n </button>;\n })}\n <div className=\"w100n-docs-menu-foot\">\n <button type=\"button\" onClick={() => setPicked(present)}>{t.selectAll}</button>\n <button type=\"button\" onClick={() => setPicked([])}>{t.clearPick}</button>\n </div>\n </div>}\n </div>}\n </div>\n {picked.length > 0 && <div className=\"w100n-docs-chips\" role=\"group\" aria-label={t.kind}>{picked.map(item => <button key={item} type=\"button\" aria-pressed aria-label={`${t.clearPick}: ${t.kinds[item]}`} onClick={() => setPicked(picked.filter(k => k !== item))}>\n {t.kinds[item]}<X aria-hidden />\n </button>)}</div>}\n </div>\n <div className=\"w100n-docs-cards\">\n {sending === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.uploadFailed}</p>}\n {list.error && failed(list.retry)}\n {list.loading && !list.data && <p className=\"w100n-docs-muted\">{t.loading}</p>}\n {notice && <p className=\"w100n-docs-muted\" role=\"status\">{notice}</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 naming?.id === item.id ? <div key={item.id} className=\"w100n-docs-card\">\n <Thumb host={host} item={item} label={t.kinds[item.kind]} />\n <span className=\"w100n-docs-card-text\"><input className=\"w100n-docs-field\" autoFocus value={naming.text} aria-label={t.rename} onFocus={e => e.currentTarget.select()}\n onChange={e => setNaming({ ...naming, text: e.target.value })} onBlur={() => void retitle(item, naming.text)}\n onKeyDown={e => { if (e.key === 'Enter') e.currentTarget.blur(); if (e.key === 'Escape') { e.stopPropagation(); setNaming(null); } }} /></span>\n </div> : <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item)} title={item.name}\n onPointerEnter={() => warm(item)} onPointerLeave={() => clearTimeout(hover.current)}\n onContextMenu={e => { e.preventDefault(); setMenu({ item, x: Math.min(e.clientX, innerWidth - 290), y: Math.min(e.clientY, innerHeight - 440), sure: false }); }}>\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>\n {inside.get(item.id) && <small className=\"w100n-docs-hit\">{inside.get(item.id)!.split(/[«»]/).map((part, i) => i % 2 ? <mark key={i}>{part}</mark> : part)}</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 && panelTabs.length < 5)) && <span>{label}</span>}\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\" aria-label={t.outline}>\n {now && <div className=\"w100n-docs-reading\"><span><i style={{ width: `${Math.round(now.progress * 100)}%` }} /></span><small>{Math.round(now.progress * 100)}% {t.read}</small></div>}\n {outline.length > 8 && <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input value={hunt} onChange={e => setHunt(e.target.value)} placeholder={t.findHeading} aria-label={t.findHeading} /></label>}\n {chapters.map((c, i) => {\n const subs = words.length ? c.subs.filter(hit) : c.subs;\n if (words.length && !hit(c.head) && !subs.length) return null;\n const opened = words.length > 0 || (fold[c.head.id] ?? i === reached);\n const named = /^(\\d+)[.)]?\\s+(.+)$/.exec(c.head.text);\n const mark = c.subs.findIndex(s => s.id === now?.id);\n return <div key={c.head.id} className=\"w100n-docs-chapter\" data-state={reached < 0 ? undefined : i < reached ? 'done' : i === reached ? 'now' : undefined}>\n <div className=\"w100n-docs-chapter-row\">\n <button type=\"button\" className=\"w100n-docs-chapter-go\" aria-label={c.head.text} aria-current={now?.id === c.head.id ? 'location' : undefined} onClick={() => reach(c.head)}>\n <span className=\"w100n-docs-chapter-num\">{named ? named[1] : <Bookmark aria-hidden />}</span><b>{named ? named[2] : c.head.text}</b>\n </button>\n {c.subs.length > 0 && <button type=\"button\" className=\"w100n-docs-chapter-fold\" aria-expanded={opened} aria-label={opened ? t.hideSections : t.showSections}\n title={opened ? t.hideSections : t.showSections} onClick={() => setFold({ ...fold, [c.head.id]: !opened })}><small>{c.subs.length}</small>{opened ? <ChevronDown aria-hidden /> : <ChevronRight aria-hidden />}</button>}\n </div>\n {opened && subs.length > 0 && <div className=\"w100n-docs-sections\">{subs.map(s => <button key={s.id} type=\"button\" data-level={s.level - top} onClick={() => reach(s)}\n data-state={i < reached || (i === reached && c.subs.indexOf(s) < mark) ? 'done' : undefined} aria-current={now?.id === s.id ? 'location' : undefined}><i aria-hidden />{s.text}</button>)}</div>}\n </div>;\n })}\n </nav> : <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 {making && <NewDocument host={host} t={t} onClose={() => setMaking(false)} onMade={made => { setMaking(false); opened(made); }} />}\n {menu && <div className=\"w100n-docs-menu w100n-docs-context\" role=\"menu\" aria-label={t.fileActions} style={{ left: menu.x, top: menu.y }}>\n <div className=\"w100n-docs-context-head\">\n <b>{menu.item.name}</b>\n <small>{[t.kinds[menu.item.kind], size(menu.item.size), names.get(menu.item.spaceId), menu.item.folder].filter(Boolean).join(' · ')}</small>\n {menu.item.createdAt && <small>{[t.createdOn.replace('{when}', date(menu.item.createdAt)), menu.item.createdBy?.name].filter(Boolean).join(' · ')}</small>}\n <small>{[t.updatedOn.replace('{when}', ago(menu.item.updatedAt)), menu.item.updatedBy?.name].filter(Boolean).join(' · ')}</small>\n </div>\n {menu.sure ? <div className=\"w100n-docs-context-ask\">\n <p>{t.trashAsk.replace('{name}', menu.item.name)}</p>\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => setMenu({ ...menu, sure: false })}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" onClick={() => void drop(menu.item)}><Trash2 aria-hidden />{t.trash}</button>\n </span>\n </div> : <>\n <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); open(menu.item); }}><FileText aria-hidden />{t.openFile}</button>\n {host.href && <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); window.open(host.href!(menu.item.id), '_blank', 'noopener'); }}><ExternalLink aria-hidden />{t.openTab}</button>}\n {host.href && <button type=\"button\" role=\"menuitem\" onClick={() => void act(() => navigator.clipboard.writeText(host.href!(menu.item.id)), t.linkCopied)}><Link aria-hidden />{t.copyLink}</button>}\n {host.send && <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); host.send!(menu.item.id); }}><Send aria-hidden />{t.sendChat}</button>}\n <hr />\n {host.rename && <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); setNaming({ id: menu.item.id, text: menu.item.name.replace(/\\.[^.]+$/, '') }); }}><Pencil aria-hidden />{t.rename}</button>}\n {host.create && <button type=\"button\" role=\"menuitem\" onClick={() => void act(async () => copy(await host.document(menu.item.id)))}><Copy aria-hidden />{t.makeCopy}</button>}\n <button type=\"button\" role=\"menuitem\" onClick={() => void act(() => fetchFile(menu.item))}><Download aria-hidden />{t.download}</button>\n {host.saveTemplate && <button type=\"button\" role=\"menuitem\" onClick={() => void act(() => host.saveTemplate!(menu.item.id), t.templateSaved)}><Bookmark aria-hidden />{t.saveTemplate}</button>}\n <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); open(menu.item); setTab('details'); side('panel', true); }}><Info aria-hidden />{t.details}</button>\n {host.remove && <><hr /><button type=\"button\" role=\"menuitem\" data-tone=\"red\" onClick={() => setMenu({ ...menu, sure: true })}><Trash2 aria-hidden />{t.trash}</button></>}\n </>}\n </div>}\n {dialog}\n </div>;\n}\n","import { Check, FileSpreadsheet, FileText, FileType, Plus, Presentation, X, type LucideIcon } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport { blank, extensions, mimes, type NewKind, type Template } from './blank';\nimport { useRestore } from './focus';\nimport type { Text } from './text';\nimport type { DocumentsHost, DocumentSummary } from './types';\nimport { useLoad } from './useLoad';\n\nconst icons: Record<NewKind, LucideIcon> = { docx: FileText, markdown: FileType, sheet: FileSpreadsheet, slides: Presentation };\n\nconst shaped: Template[] = ['blank', 'letter', 'contract', 'notes', 'invoice', 'report'];\n\nexport default function NewDocument({ host, t, onClose, onMade }: { host: DocumentsHost; t: Text; onClose: () => void; onMade: (doc: DocumentSummary) => void }) {\n const id = useId();\n const [kind, setKind] = useState<NewKind>('docx');\n const [template, setTemplate] = useState<Template>('blank');\n const [name, setName] = useState('');\n const [team, setTeam] = useState<DocumentSummary | null>(null);\n const shared = useLoad(signal => host.templates ? host.templates({ signal }) : Promise.resolve([]), [host]);\n const ours = (shared.data ?? []).filter(item => item.kind === kind);\n const stem = (file: string) => file.replace(/\\.[^.]+$/, '');\n const [state, setState] = useState<'idle' | 'busy' | 'failed'>('idle');\n useRestore(true);\n const choices = kind === 'docx' || kind === 'markdown' ? shaped : ['blank' as const];\n const make = async () => {\n const title = name.trim() || (team ? stem(team.name) : template === 'blank' ? t.untitled : t.templates[template]);\n setState('busy');\n try {\n const ext = team ? team.name.split('.').pop()! : extensions[kind];\n const bytes = team ? await host.content(team.id) : blank(kind, title, template);\n onMade(await host.create!({ name: `${title.replace(/[\\\\/:*?\"<>|\\s]+/g, ' ').trim()}.${ext}`, bytes, mimeType: mimes[kind] }));\n } catch {\n setState('failed');\n }\n };\n return <div className=\"w100n-pdf-back\" onKeyDown={e => { if (e.key === 'Escape') { e.stopPropagation(); onClose(); } }}>\n <form className=\"w100n-pdf-dialog w100n-new\" role=\"dialog\" aria-modal aria-labelledby={`${id}t`} onSubmit={e => { e.preventDefault(); void make(); }}>\n <div className=\"w100n-new-head\">\n <span className=\"w100n-new-tile\"><Plus aria-hidden /></span>\n <b id={`${id}t`} className=\"w100n-pdf-dialog-title\">{t.newTitle}</b>\n <button type=\"button\" className=\"w100n-docs-close\" onClick={onClose} aria-label={t.close} title={t.close}><X aria-hidden /></button>\n </div>\n <div role=\"radiogroup\" aria-label={t.kind} className=\"w100n-new-kinds\">{(Object.keys(icons) as NewKind[]).map(item => {\n const Icon = icons[item];\n return <button key={item} type=\"button\" role=\"radio\" aria-checked={kind === item} data-kind={item} onClick={() => { setKind(item); setTeam(null); if (item === 'sheet' || item === 'slides') setTemplate('blank'); }}>\n <span className=\"w100n-docs-tile\" data-kind={item}><Icon aria-hidden /></span><span><b>{t.newKinds[item]}</b><small>{t.kindHints[item]}</small></span>\n </button>;\n })}</div>\n <p className=\"w100n-docs-caption\">{t.startFrom}</p>\n <div role=\"radiogroup\" aria-label={t.startFrom} className=\"w100n-new-templates\">{choices.map(item =>\n <button key={item} type=\"button\" role=\"radio\" aria-checked={!team && template === item} onClick={() => { setTeam(null); setTemplate(item); }}>\n <span className=\"w100n-new-sheet\" data-blank={item === 'blank'}>{item === 'blank' ? <Plus aria-hidden /> : <><i data-head /><i /><i /><i data-accent /><i /><i /></>}</span>\n <span>{t.templates[item]}</span>\n </button>)}</div>\n {ours.length > 0 && <>\n <p className=\"w100n-docs-caption\">{t.teamTemplates}</p>\n <div role=\"radiogroup\" aria-label={t.teamTemplates} className=\"w100n-new-templates\">{ours.map(item =>\n <button key={item.id} type=\"button\" role=\"radio\" aria-checked={team?.id === item.id} onClick={() => setTeam(item)}>\n <span className=\"w100n-new-sheet\"><i data-head /><i /><i data-accent /><i /><i /></span>\n <span title={item.name}>{stem(item.name)}</span>\n </button>)}</div>\n </>}\n <div className=\"w100n-new-fields\">\n <label><span className=\"w100n-docs-caption\">{t.name}</span>\n <input className=\"w100n-docs-field\" autoFocus value={name} onChange={e => setName(e.target.value)} placeholder={team ? stem(team.name) : template === 'blank' ? t.untitled : t.templates[template]} />\n </label>\n {host.createIn && <div><span className=\"w100n-docs-caption\">{t.savesTo}</span><span className=\"w100n-docs-field w100n-new-place\">{host.createIn}</span></div>}\n </div>\n {state === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.makeFailed}</p>}\n <div className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={onClose}>{t.cancel}</button>\n <button type=\"submit\" className=\"w100n-docs-action\" disabled={state === 'busy'}><Check aria-hidden />{state === 'busy' ? t.making : t.make}</button>\n </div>\n </form>\n </div>;\n}\n","import { strToU8, zipSync } from 'fflate';\nimport { escape } from './docx/xml';\n\nexport type NewKind = 'docx' | 'markdown' | 'sheet' | 'slides';\n\nexport type Template = 'blank' | 'letter' | 'contract' | 'notes' | 'invoice' | 'report';\n\ntype Block = [style: string | null, text: string] | string[][];\n\nconst W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst PKG = 'http://schemas.openxmlformats.org/package/2006/relationships';\nconst head = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n';\n\nexport const mimes: Record<NewKind, string> = {\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', markdown: 'text/markdown',\n sheet: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', slides: 'text/html',\n};\n\nexport const extensions: Record<NewKind, string> = { docx: 'docx', markdown: 'md', sheet: 'xlsx', slides: 'html' };\n\nconst templates: Record<Exclude<Template, 'blank'>, (name: string) => Block[]> = {\n letter: name => [['Title', name], [null, 'Web100Now'], [null, ''], [null, 'Dear Name,'], [null, 'Write the message here.'], [null, ''], [null, 'Kind regards,'], [null, 'Your name']],\n contract: name => [['Title', name], [null, 'Between Party A and Party B, date'], ['Heading1', '1. Scope of work'], [null, 'What is delivered and when.'],\n ['Heading1', '2. Fees and payment'], [null, 'Amount, currency and when it is paid.'], ['Heading1', '3. Term'], [null, 'Start date, length and how either side ends it.'],\n ['Heading1', '4. Signatures'], [['Party A', 'Party B'], ['Name, date', 'Name, date']]],\n notes: name => [['Title', name], [null, 'Date, people'], ['Heading1', 'Agenda'], [null, 'Topic one'], ['Heading1', 'Decisions'], [null, 'What was decided'],\n ['Heading1', 'Next steps'], [['Who', 'What', 'By when'], ['', '', '']]],\n invoice: name => [['Title', name], [null, 'Number, date, due date'], [null, 'Billed to: client name and address'],\n [['Item', 'Quantity', 'Price', 'Total'], ['', '', '', ''], ['', '', 'Total', '']], [null, 'Bank details and payment terms']],\n report: name => [['Title', name], [null, 'Period, author'], ['Heading1', 'Summary'], [null, 'The main points in a few lines.'], ['Heading1', 'Results'], [null, 'What happened and the numbers behind it.'],\n ['Heading1', 'Next'], [null, 'What comes next and who owns it.']],\n};\n\nconst run = (text: string) => text ? `<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>` : '';\n\nconst para = ([style, text]: [string | null, string]) => `<w:p>${style ? `<w:pPr><w:pStyle w:val=\"${style}\"/></w:pPr>` : ''}${run(text)}</w:p>`;\n\nconst table = (rows: string[][]) => {\n const width = Math.floor(9638 / rows[0].length);\n const border = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"94A3B8\"/>`;\n return `<w:tbl><w:tblPr><w:tblW w:w=\"5000\" w:type=\"pct\"/><w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(border).join('')}</w:tblBorders></w:tblPr>`\n + `<w:tblGrid>${rows[0].map(() => `<w:gridCol w:w=\"${width}\"/>`).join('')}</w:tblGrid>`\n + rows.map((row, r) => `<w:tr>${row.map(cell => `<w:tc><w:tcPr><w:tcW w:w=\"${width}\" w:type=\"dxa\"/></w:tcPr><w:p>${r === 0 ? `<w:r><w:rPr><w:b/></w:rPr><w:t xml:space=\"preserve\">${escape(cell)}</w:t></w:r>` : run(cell)}</w:p></w:tc>`).join('')}</w:tr>`).join('')\n + '</w:tbl><w:p/>';\n};\n\nconst styles = `${head}<w:styles xmlns:w=\"${W}\"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:eastAsia=\"Arial\" w:cs=\"Arial\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/></w:rPr></w:rPrDefault>`\n + '<w:pPrDefault><w:pPr><w:spacing w:after=\"120\" w:line=\"276\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults>'\n + '<w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style>'\n + '<w:style w:type=\"paragraph\" w:styleId=\"Title\"><w:name w:val=\"Title\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"80\"/></w:pPr><w:rPr><w:b/><w:sz w:val=\"48\"/></w:rPr></w:style>'\n + '<w:style w:type=\"paragraph\" w:styleId=\"Heading1\"><w:name w:val=\"heading 1\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:keepNext/><w:spacing w:before=\"360\" w:after=\"120\"/><w:outlineLvl w:val=\"0\"/></w:pPr><w:rPr><w:b/><w:sz w:val=\"32\"/></w:rPr></w:style>'\n + '<w:style w:type=\"paragraph\" w:styleId=\"Heading2\"><w:name w:val=\"heading 2\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:keepNext/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"1\"/></w:pPr><w:rPr><w:b/><w:sz w:val=\"26\"/></w:rPr></w:style>'\n + '</w:styles>';\n\nfunction docx(blocks: Block[]) {\n const body = blocks.map(block => typeof block[0] === 'string' || block[0] === null ? para(block as [string | null, string]) : table(block as string[][])).join('') || '<w:p/>';\n return zipSync({\n '[Content_Types].xml': strToU8(`${head}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/></Types>`),\n '_rels/.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/officeDocument\" Target=\"word/document.xml\"/></Relationships>`),\n 'word/_rels/document.xml.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/styles\" Target=\"styles.xml\"/></Relationships>`),\n 'word/styles.xml': strToU8(styles),\n 'word/document.xml': strToU8(`${head}<w:document xmlns:w=\"${W}\" xmlns:r=\"${REL}\"><w:body>${body}`\n + '<w:sectPr><w:pgSz w:w=\"11906\" w:h=\"16838\"/><w:pgMar w:top=\"1417\" w:right=\"1134\" w:bottom=\"1417\" w:left=\"1134\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/></w:sectPr></w:body></w:document>'),\n });\n}\n\nfunction markdown(blocks: Block[]) {\n const line = (block: Block) => {\n if (typeof block[0] === 'string' || block[0] === null) {\n const [style, text] = block as [string | null, string];\n return style === 'Title' ? `# ${text}` : style === 'Heading1' ? `## ${text.replace(/^\\d+\\.\\s*/, '')}` : text;\n }\n const rows = block as string[][];\n return [rows[0], rows[0].map(() => '---'), ...rows.slice(1)].map(row => `| ${row.join(' | ')} |`).join('\\n');\n };\n return strToU8(blocks.map(line).join('\\n\\n').replace(/\\n{3,}/g, '\\n\\n') + '\\n');\n}\n\nconst S = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n\nfunction sheet() {\n return zipSync({\n '[Content_Types].xml': strToU8(`${head}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/><Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/><Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/></Types>`),\n '_rels/.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/officeDocument\" Target=\"xl/workbook.xml\"/></Relationships>`),\n 'xl/workbook.xml': strToU8(`${head}<workbook xmlns=\"${S}\" xmlns:r=\"${REL}\"><sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets></workbook>`),\n 'xl/_rels/workbook.xml.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/worksheet\" Target=\"worksheets/sheet1.xml\"/><Relationship Id=\"rId2\" Type=\"${REL}/styles\" Target=\"styles.xml\"/></Relationships>`),\n 'xl/worksheets/sheet1.xml': strToU8(`${head}<worksheet xmlns=\"${S}\" xmlns:r=\"${REL}\"><sheetData/></worksheet>`),\n 'xl/styles.xml': strToU8(`${head}<styleSheet xmlns=\"${S}\"><fonts count=\"1\"><font><sz val=\"11\"/><name val=\"Arial\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/></cellXfs><cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles></styleSheet>`),\n });\n}\n\nconst slides = (name: string) => strToU8(`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>${escape(name)}</title>\n<style>\n body { margin: 0; font-family: Inter, Arial, sans-serif; background: #0f172a; }\n section { width: 1920px; height: 1080px; padding: 120px; box-sizing: border-box; background: #fff; color: #0f172a; }\n section h1 { font-size: 96px; margin: 0 0 24px; }\n section h2 { font-size: 72px; margin: 0 0 24px; }\n section p { font-size: 40px; color: #475569; }\n</style>\n</head>\n<body>\n<section><h1>${escape(name)}</h1><p>Subtitle</p></section>\n<section><h2>Title</h2><p>Text</p></section>\n</body>\n</html>\n`);\n\nexport function blank(kind: NewKind, name: string, template: Template = 'blank'): ArrayBuffer {\n const blocks = template === 'blank' ? [] : templates[template](name);\n const bytes = kind === 'docx' ? docx(blocks) : kind === 'markdown' ? markdown(blocks.length ? blocks : [['Title', name]]) : kind === 'sheet' ? sheet() : slides(name);\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\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, type Source } from './preview';\nimport type { DocumentSummary } from './types';\n\nexport default function Thumb({ host, item, label }: { host: Source; 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 {label && <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\nexport type Source = Pick<DocumentsHost, 'content' | 'pdfWorker'>;\n\nasync function make(host: Source, 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, renderAltChunks: false });\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: Source, 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 { useState } from 'react';\nimport { kindOf } from './kinds';\nimport Thumb from './Thumb';\n\nexport function FilePreview({ url, name, mimeType, size = 0, bytes, pdfWorker }: {\n url: string; name: string; mimeType?: string; size?: number; bytes?: (url: string) => Promise<ArrayBuffer>; pdfWorker?: () => Worker;\n}) {\n const [source] = useState(() => ({ pdfWorker, content: () => bytes ? bytes(url) : fetch(url, { credentials: 'include' }).then(res => res.ok ? res.arrayBuffer() : Promise.reject(new Error(String(res.status)))) }));\n const kind = kindOf(name, mimeType);\n if (!kind) return null;\n return <span className=\"w100n-preview\"><Thumb host={source} item={{ id: url.split('?')[0], spaceId: '', name, kind, size, updatedAt: '' }} /></span>;\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":["X","useEffect","useRef","useState","createPortal","i","m","escape","styles","css","head","spot","el","run","spot","drop","steps","run","Save","Trash2","useState","jsx","jsxs","useState","Trash2","Save","Maximize","Redo2","Save","StickyNote","Undo2","X","Fragment","useEffect","useId","useLayoutEffect","useRef","useState","StickyNote","Trash2","X","useEffect","useRef","useState","Fragment","jsx","jsxs","boxes","flat","at","steps","drop","Fragment","jsx","jsxs","useId","useRef","useState","clean","useEffect","flat","entries","level","useLayoutEffect","marks","StickyNote","Maximize","at","Undo2","Redo2","Save","X","jsx","jsxs","useState","useRef","useEffect","escape","sheet","createPortal","X","lazy","Suspense","useEffect","useLayoutEffect","useRef","useState","Check","ChevronDown","ChevronRight","Copy","Download","ExternalLink","Link","Trash2","FileSpreadsheet","FileText","FileType","Files","Plus","Presentation","RotateCcw","Search","X","FileSpreadsheet","FileText","FileType","Plus","Presentation","X","useId","useState","blank","Fragment","jsx","jsxs","icons","FileText","FileType","FileSpreadsheet","Presentation","useId","useState","make","blank","Plus","X","useState","Copy","Download","Plus","Fragment","jsx","jsxs","blank","useState","Download","Copy","Plus","useEffect","useRef","useState","Fragment","jsx","jsxs","useRef","useState","useEffect","Fragment","jsx","jsxs","TextEditor","lazy","SheetView","icons","FileText","FileType","Files","FileSpreadsheet","Presentation","useState","useRef","useLayoutEffect","now","useEffect","all","kept","text","hit","doc","folder","names","open","versionId","run","drop","Suspense","ChevronRight","RotateCcw","Plus","ChevronDown","X","Check","Search","opened","Trash2","ExternalLink","Link","Copy","Download","useState","jsx","useState","lazy","Suspense","useRef","useState","Ban","Download","Eye","FileDown","FileSpreadsheet","FileText","FileType","Files","Lock","Presentation","Fragment","jsx","jsxs","TextEditor","lazy","SheetView","icons","FileText","FileType","Files","FileSpreadsheet","Presentation","useState","useRef","file","kind","FileDown","Download","Ban","Lock","Eye","quiet","Suspense"]}
1
+ {"version":3,"sources":["../src/DocumentOverlay.tsx","../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/Backlinks.tsx","../src/Jump.tsx","../src/NewDocument.tsx","../src/blank.ts","../src/Sharing.tsx","../src/Thumb.tsx","../src/preview.ts","../src/Tree.tsx","../src/FilePreview.tsx","../src/GuestDocument.tsx"],"sourcesContent":["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 { 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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\nexport const quote = (s: string) => escape(s).replace(/\"/g, '&quot;');\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 Bookmark, Check, ChevronDown, ChevronRight, Copy, Download, ExternalLink, FileDiff, FileDown, Link, Link2, Pencil, Send, Trash2, FilePlus, FileSpreadsheet, FileText, FileType, Files, FolderTree, History, Info, LayoutGrid, ListFilter, ListTree, MessagesSquare,\n PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Plus, Presentation, RotateCcw, Search, Share2, Signature, Upload, X, type LucideIcon,\n} from 'lucide-react';\nimport Backlinks from './Backlinks';\nimport { rove } from './focus';\nimport Jump, { type Action } from './Jump';\nimport { kinds, matches } from './kinds';\nimport NewDocument from './NewDocument';\nimport Sharing from './Sharing';\nimport { texts } from './text';\nimport Thumb from './Thumb';\nimport Tree from './Tree';\nimport type { DocumentFile, DocumentKind, DocumentsHost, DocumentSummary, Language, Place } from './types';\nimport { useLoad } from './useLoad';\nimport type { Heading, Reading } 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'));\nconst Compare = lazy(() => import('./Compare'));\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Tab = 'outline' | 'links' | '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 [picked, setPicked] = useState<DocumentKind[]>([]);\n const [typing, setTyping] = useState(false);\n const [menusAt, setMenusAt] = useState<HTMLDivElement | null>(null);\n const [renaming, setRenaming] = useState<string | null>(null);\n const [renamed, setRenamed] = useState<'idle' | 'failed'>('idle');\n const [statusAt, setStatusAt] = useState<HTMLSpanElement | null>(null);\n const [listOpen, setListOpen] = useState(true);\n const [shape, setShape] = useState<'tree' | 'cards'>(() => typeof localStorage !== 'undefined' && localStorage.getItem('w100n-docs-view') === 'tree' ? 'tree' : 'cards');\n const [jump, setJump] = useState<'open' | 'run' | null>(null);\n const finder = useRef<HTMLInputElement>(null);\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 const [adding, setAdding] = useState(false);\n useEffect(() => {\n if (!adding) return;\n const close = (e: PointerEvent) => { if (!(e.target as HTMLElement).closest('.w100n-docs-new')) setAdding(false); };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [adding]);\n useEffect(() => {\n if (!typing) return;\n const close = (e: PointerEvent) => { if (!(e.target as HTMLElement).closest('.w100n-docs-types')) setTyping(false); };\n document.addEventListener('pointerdown', close);\n return () => document.removeEventListener('pointerdown', close);\n }, [typing]);\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 [menu, setMenu] = useState<{ item: DocumentSummary; x: number; y: number; sure: boolean } | null>(null);\n const [naming, setNaming] = useState<{ id: string; text: string } | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const early = useRef(new Map<string, { at: number; doc?: Promise<DocumentFile>; bytes?: Promise<ArrayBuffer> }>());\n const hover = useRef(0);\n useEffect(() => {\n if (!menu) return;\n const close = (e: Event) => {\n if (e.type === 'pointerdown' && (e.target as HTMLElement).closest('.w100n-docs-context')) return;\n if (e.type === 'keydown' && (e as KeyboardEvent).key !== 'Escape') return;\n setMenu(null);\n };\n document.addEventListener('pointerdown', close);\n window.addEventListener('keydown', close);\n window.addEventListener('scroll', close, true);\n return () => {\n document.removeEventListener('pointerdown', close);\n window.removeEventListener('keydown', close);\n window.removeEventListener('scroll', close, true);\n };\n }, [menu]);\n const [tab, setTab] = useState<Tab>('outline');\n const [outline, setOutline] = useState<Heading[]>([]);\n const [reading, setReading] = useState<Reading | null>(null);\n const [hunt, setHunt] = useState('');\n const [fold, setFold] = useState<Record<string, boolean>>({});\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 [comparing, setComparing] = useState(false);\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 [kept, setKept] = useState<{ id: string; state: 'busy' | 'done' | 'failed' } | null>(null);\n const [box, setBox] = useState<HTMLDivElement | null>(null);\n const [making, setMaking] = useState(false);\n const [sending, setSending] = useState<'idle' | 'busy' | 'failed'>('idle');\n const upload = useRef<HTMLInputElement>(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 useEffect(() => {\n const sync = () => {\n if (document.visibilityState !== 'visible') return;\n spaces.retry();\n list.retry();\n };\n const timer = window.setInterval(sync, 30_000);\n window.addEventListener('focus', sync);\n document.addEventListener('visibilitychange', sync);\n return () => {\n clearInterval(timer);\n window.removeEventListener('focus', sync);\n document.removeEventListener('visibilitychange', sync);\n };\n }, []);\n const take = <K extends 'doc' | 'bytes'>(id: string, key: K) => {\n const kept = early.current.get(id);\n const found = kept && Date.now() - kept.at < 15000 ? kept[key] : undefined;\n if (kept) delete kept[key];\n return found;\n };\n const doc = useLoad(signal => here.documentId ? take(here.documentId, 'doc') ?? 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 ? (!versionId && take(here.documentId, 'bytes')) || 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 docbar = text && !versionId && !narrow;\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 deep = useLoad(async signal => {\n const text = query.trim();\n if (!host.search || text.length < 2) return [];\n await new Promise(done => setTimeout(done, 300));\n return signal.aborted ? [] : host.search(text, { signal });\n }, [host, query]);\n const inside = new Map((deep.data ?? []).map(hit => [hit.id, hit.excerpt]));\n const shown = all.filter(item => matches(item, query, picked) || (inside.has(item.id) && matches(item, '', picked)));\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 leave = (then: () => void) => {\n const save = doc.data?.kind === 'markdown' ? guard.current : null;\n if (!save) return ask(then);\n void save().then(ok => {\n if (!ok) return ask(then);\n guard.current = null;\n then();\n });\n };\n const open = (item: DocumentSummary) => {\n if (item.id === here.documentId) {\n if (narrow) setListOpen(false);\n return;\n }\n leave(() => {\n setOutline([]);\n setHunt('');\n setFold({});\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 setPicked([]);\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 setComparing(false);\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 const copy = async (file: DocumentFile) => {\n setCopying('busy');\n try {\n const made = await host.create!({ name: `${t.copyOf} ${file.name}`, bytes: await host.content(file.id), mimeType: file.mimeType ?? 'application/octet-stream' });\n setCopying('idle');\n opened(made);\n } catch {\n setCopying('failed');\n }\n };\n const keep = async (file: DocumentFile) => {\n setKept({ id: file.id, state: 'busy' });\n try {\n await host.saveTemplate!(file.id);\n setKept({ id: file.id, state: 'done' });\n } catch {\n setKept({ id: file.id, state: 'failed' });\n }\n };\n const warm = (item: DocumentSummary) => {\n clearTimeout(hover.current);\n hover.current = window.setTimeout(() => {\n if (item.id === here.documentId) return;\n if (item.kind === 'docx' || item.kind === 'markdown') void import('./editor/TextEditor');\n if (item.kind === 'sheet') void import('./sheets/SheetView');\n const kept = early.current.get(item.id);\n if ((kept && Date.now() - kept.at < 15000) || item.size > 5_000_000) return;\n const next = { at: Date.now(), doc: host.document(item.id), bytes: host.content(item.id, null) };\n next.doc.catch(() => {});\n next.bytes.catch(() => {});\n early.current.set(item.id, next);\n }, 150);\n };\n const act = async (run: () => Promise<unknown>, done?: string) => {\n setMenu(null);\n setNotice(null);\n try {\n await run();\n if (done) setNotice(done);\n } catch {\n setNotice(t.actionFailed);\n }\n };\n const fetchFile = async (item: DocumentSummary) => {\n const url = URL.createObjectURL(new Blob([await host.content(item.id)]));\n const link = Object.assign(document.createElement('a'), { href: url, download: item.name });\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n };\n const retitle = async (item: DocumentSummary, draft: string) => {\n setNaming(null);\n const ext = /\\.[^.]+$/.exec(item.name)?.[0] ?? '';\n const name = draft.trim() && (/\\.[^.\\s]+$/.test(draft.trim()) ? draft.trim() : draft.trim() + ext);\n if (!name || name === item.name) return;\n await act(() => host.rename!(item.id, name));\n list.retry();\n if (item.id === here.documentId) doc.retry();\n };\n const drop = async (item: DocumentSummary) => {\n await act(() => host.remove!(item.id), t.trashed);\n list.retry();\n if (item.id === here.documentId) go({ spaceId: here.spaceId, documentId: null });\n };\n const rename = async (file: DocumentFile, draft: string) => {\n setRenaming(null);\n const ext = /\\.[^.]+$/.exec(file.name)?.[0] ?? '';\n const name = draft.trim() && (/\\.[^.\\s]+$/.test(draft.trim()) ? draft.trim() : draft.trim() + ext);\n if (!name || name === file.name) return;\n try {\n await host.rename!(file.id, name);\n setRenamed('idle');\n doc.retry();\n list.retry();\n } catch {\n setRenamed('failed');\n }\n };\n\n const opened = (made: DocumentSummary) => {\n spaces.retry();\n list.retry();\n ask(() => go({ spaceId: here.spaceId && made.spaceId, documentId: made.id }));\n };\n const send = async (file: File) => {\n setSending('busy');\n try {\n opened(await host.create!({ name: file.name, bytes: await file.arrayBuffer(), mimeType: file.type || 'application/octet-stream' }));\n setSending('idle');\n } catch {\n setSending('failed');\n }\n };\n\n const notes = doc.data?.kind === 'markdown' ? all.filter(item => item.kind === 'markdown' && item.spaceId === doc.data!.spaceId) : [];\n const note = async (name: string, show: boolean) => {\n try {\n const made = await host.create!({ name: `${name}.md`, bytes: new TextEncoder().encode('').buffer as ArrayBuffer, mimeType: 'text/markdown', near: here.documentId ?? undefined });\n list.retry();\n if (show) opened(made);\n return made.id;\n } catch {\n setNotice(t.actionFailed);\n return null;\n }\n };\n const wiki = doc.data?.kind === 'markdown' ? {\n notes: notes.map(({ id, name, folder }) => ({ id, name, folder })),\n open: (id: string) => { const item = all.find(x => x.id === id); if (item) open(item); },\n create: host.create ? (name: string) => note(name, false) : undefined,\n } : undefined;\n const panelOn = (next: Tab) => { setTab(next); side('panel', true); };\n const current = doc.data && all.find(item => item.id === doc.data!.id);\n const commands: Action[] = [\n ...(host.create ? [{ id: 'new', label: t.newNote, icon: FilePlus, keys: '⌘N', run: () => void note(t.untitled, true) }] : []),\n { id: 'open', label: t.openNote, icon: Search, keys: '⌘O', run: () => setJump('open') },\n { id: 'search', label: t.searchAll, icon: Search, run: () => { side('list', true); requestAnimationFrame(() => finder.current?.focus()); } },\n ...(doc.data ? [\n { id: 'outline', label: t.showOutline, icon: ListTree, run: () => panelOn('outline') },\n ...(doc.data.kind === 'markdown' ? [{ id: 'links', label: t.showLinks, icon: Link2, run: () => panelOn('links') }] : []),\n { id: 'versions', label: t.showVersions, icon: History, run: () => panelOn('versions') },\n ...(text && host.comments ? [{ id: 'comments', label: t.showComments, icon: MessagesSquare, run: () => panelOn('comments') }] : []),\n ...(host.send && !doc.data.id.includes(':') ? [{ id: 'send', label: t.sendChat, icon: Send, run: () => host.send!(doc.data!.id) }] : []),\n ...(host.rename && doc.data.rights.edit ? [{ id: 'rename', label: t.rename, icon: Pencil, run: () => setRenaming(doc.data!.name.replace(/\\.[^.]+$/, '')) }] : []),\n ...(host.remove && current ? [{ id: 'trash', label: t.trash, icon: Trash2, run: () => void drop(current) }] : []),\n ] : []),\n ];\n useEffect(() => {\n const press = (e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey) return;\n const key = e.key.toLowerCase();\n if (key === 'o' || (key === 'p' && doc.data?.kind !== 'docx' && doc.data?.kind !== 'pdf') || (key === 'n' && host.create && doc.data?.kind === 'markdown')) {\n e.preventDefault();\n e.stopPropagation();\n if (key === 'n') void note(t.untitled, true);\n else setJump(key === 'o' ? 'open' : 'run');\n }\n };\n window.addEventListener('keydown', press, true);\n return () => window.removeEventListener('keydown', press, true);\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 (comparing && versionId && (doc.data.kind === 'markdown' || doc.data.kind === 'docx')) stage = <Suspense fallback={<div className=\"w100n-docs-empty\">{t.loading}</div>}>\n <Compare key={versionId} host={host} documentId={doc.data.id} kind={doc.data.kind} older={content.data} t={t} />\n </Suspense>;\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} onReading={setReading} onPanel={next => { setPanelOpen(true); setTab(next); if (narrow) setListOpen(false); }} slot={tab === 'comments' && panelOpen ? box : null}\n head={docbar ? { menus: menusAt, status: statusAt } : undefined} guard={guard} wiki={versionId ? undefined : wiki}\n file={versionId ? undefined : { formats: host.exportAs ? doc.data.exports ?? [] : [], download: f => void exportAs(doc.data!, f), copy: host.create ? () => void copy(doc.data!) : undefined,\n rename: host.rename && doc.data.rights.edit ? () => setRenaming(doc.data!.name.replace(/\\.[^.]+$/, '')) : undefined,\n template: host.saveTemplate && doc.data.rights.edit ? () => void keep(doc.data!) : undefined }} 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 top = Math.min(...outline.map(h => h.level));\n const chapters = outline.reduce<{ head: Heading; subs: Heading[] }[]>((all, h) => {\n if (h.level === top || !all.length) all.push({ head: h, subs: [] });\n else all[all.length - 1].subs.push(h);\n return all;\n }, []);\n const now = reading?.documentId === here.documentId ? reading : null;\n const reached = now ? chapters.findIndex(c => c.head.id === now.id || c.subs.some(s => s.id === now.id)) : -1;\n const words = hunt.toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n const hit = (h: Heading) => words.every(w => h.text.toLocaleLowerCase().includes(w));\n const reach = (h: Heading) => h.go ? h.go() : document.getElementById(h.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\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], ...(doc.data?.kind === 'markdown' ? [['links', Link2, t.links] as [Tab, LucideIcon, string]] : []),\n ['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 {start && <span className=\"w100n-docs-start w100n-docs-slot\">{slot(start)}</span>}\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 {renaming !== null && doc.data ? <input className=\"w100n-docs-title w100n-docs-rename\" autoFocus value={renaming} aria-label={t.rename} onFocus={e => e.currentTarget.select()}\n onChange={e => setRenaming(e.target.value)} onBlur={() => void rename(doc.data!, renaming)}\n onKeyDown={e => { if (e.key === 'Enter') e.currentTarget.blur(); if (e.key === 'Escape') { e.stopPropagation(); setRenaming(null); } }} />\n : <strong className=\"w100n-docs-title\" title={docbar ? crumbs.join(' / ') : undefined}\n onDoubleClick={host.rename && doc.data?.rights.edit && !versionId ? () => setRenaming(doc.data!.name.replace(/\\.[^.]+$/, '')) : undefined}>{doc.data?.name ?? t.documents}</strong>}\n {docbar ? <div ref={setMenusAt} className=\"w100n-docs-menus\" /> : crumbs.length > 0 ? <span className=\"w100n-docs-crumbs\">{crumbs.map((item, i) => <span key={i}>{i > 0 && <ChevronRight aria-hidden />}{item}</span>)}</span>\n : <span className=\"w100n-docs-hint\">{t.hint}</span>}\n </div>\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 && text && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"blue\" aria-pressed={comparing} onClick={() => setComparing(!comparing)}>\n <FileDiff aria-hidden />{comparing ? t.hideChanges : t.showChanges}\n </button>}\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 {kept?.id === here.documentId && kept.state === 'done' && <span className=\"w100n-docs-muted\" role=\"status\">{t.templateSaved}</span>}\n {kept?.id === here.documentId && kept.state === 'failed' && <span className=\"w100n-docs-muted\" role=\"alert\">{t.templateFailed}</span>}\n {renamed === 'failed' && <span className=\"w100n-docs-muted\">{t.renameFailed}</span>}\n {docbar && <span ref={setStatusAt} className=\"w100n-docs-status\" />}\n {host.send && doc.data && !versionId && !doc.data.id.includes(':') && <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"blue\" aria-label={t.sendChat} title={t.sendChat}\n onClick={() => host.send!(doc.data!.id)}><Send aria-hidden /><span>{t.sendChat}</span></button>}\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 w100n-docs-slot\">{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 {host.create && <div className=\"w100n-docs-new\" onKeyDown={e => { if (e.key === 'Escape' && adding) { e.stopPropagation(); setAdding(false); } }}>\n <button type=\"button\" className=\"w100n-docs-action\" aria-haspopup=\"menu\" aria-expanded={adding} disabled={sending === 'busy'} onClick={() => setAdding(!adding)}>\n <Plus aria-hidden /><span>{sending === 'busy' ? t.uploading : t.create}</span><ChevronDown aria-hidden />\n </button>\n {adding && <div role=\"menu\" className=\"w100n-docs-menu\">\n <button type=\"button\" role=\"menuitem\" onClick={() => { setAdding(false); setMaking(true); }}><span className=\"w100n-docs-all\"><FilePlus aria-hidden /></span><b>{t.newTitle}</b></button>\n <button type=\"button\" role=\"menuitem\" onClick={() => { setAdding(false); upload.current!.click(); }}><span className=\"w100n-docs-all\"><Upload aria-hidden /></span><b>{t.uploadFile}</b></button>\n </div>}\n <input ref={upload} type=\"file\" hidden aria-label={t.uploadFile} accept=\".docx,.md,.markdown,.pdf,.xlsx,.csv,.html,.htm\" onChange={e => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (file) void send(file);\n }} />\n </div>}\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 <div className=\"w100n-docs-filters\">\n <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input ref={finder} value={query} onChange={event => setQuery(event.target.value)} placeholder={t.search} aria-label={t.search} /><kbd>⌘O</kbd></label>\n {present.length > 1 && <div className=\"w100n-docs-types\" onKeyDown={e => {\n if (e.key !== 'Escape' || !typing) return;\n e.stopPropagation();\n setTyping(false);\n e.currentTarget.querySelector('button')!.focus();\n }}>\n <button type=\"button\" className=\"w100n-docs-field\" aria-haspopup=\"listbox\" aria-expanded={typing} data-on={picked.length > 0} onClick={() => setTyping(!typing)}>\n <ListFilter aria-hidden /><b>{t.typeFilter}</b>{picked.length > 0 && <span className=\"w100n-docs-badge\">{picked.length}</span>}<ChevronDown aria-hidden />\n </button>\n {typing && <div role=\"listbox\" aria-multiselectable aria-label={t.kind} className=\"w100n-docs-menu\">\n {present.map(item => {\n const Icon = icons[item];\n const on = picked.includes(item);\n return <button key={item} type=\"button\" role=\"option\" aria-selected={on} onClick={() => setPicked(on ? picked.filter(k => k !== item) : [...picked, item])}>\n <span className=\"w100n-docs-box\">{on && <Check aria-hidden />}</span><span className=\"w100n-docs-tile\" data-kind={item}><Icon aria-hidden /></span>\n <b>{t.kinds[item]}</b><span className=\"w100n-docs-count\">{all.filter(doc => doc.kind === item).length}</span>\n </button>;\n })}\n <div className=\"w100n-docs-menu-foot\">\n <button type=\"button\" onClick={() => setPicked(present)}>{t.selectAll}</button>\n <button type=\"button\" onClick={() => setPicked([])}>{t.clearPick}</button>\n </div>\n </div>}\n </div>}\n </div>\n <div className=\"w100n-docs-shape\" role=\"radiogroup\" aria-label={t.tree}>{([['tree', FolderTree, t.tree], ['cards', LayoutGrid, t.cards]] as const).map(([key, Icon, label]) =>\n <button key={key} type=\"button\" role=\"radio\" aria-checked={shape === key} onClick={() => { setShape(key); localStorage.setItem('w100n-docs-view', key); }}><Icon aria-hidden />{label}</button>)}</div>\n {picked.length > 0 && <div className=\"w100n-docs-chips\" role=\"group\" aria-label={t.kind}>{picked.map(item => <button key={item} type=\"button\" aria-pressed aria-label={`${t.clearPick}: ${t.kinds[item]}`} onClick={() => setPicked(picked.filter(k => k !== item))}>\n {t.kinds[item]}<X aria-hidden />\n </button>)}</div>}\n </div>\n <div className=\"w100n-docs-cards\">\n {sending === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.uploadFailed}</p>}\n {list.error && failed(list.retry)}\n {list.loading && !list.data && <p className=\"w100n-docs-muted\">{t.loading}</p>}\n {notice && <p className=\"w100n-docs-muted\" role=\"status\">{notice}</p>}\n {list.data && !shown.length && <p className=\"w100n-docs-muted\">{all.length ? t.nothing : t.empty}</p>}\n {shape === 'tree' && list.data && <Tree items={shown} names={names} bySpace={!spaceId} current={here.documentId} t={t} onOpen={open}\n onMenu={(item, e) => setMenu({ item, x: Math.min(e.clientX, innerWidth - 290), y: Math.min(e.clientY, innerHeight - 440), sure: false })}\n onWarm={item => item ? warm(item) : clearTimeout(hover.current)} />}\n {shape === 'cards' && 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 naming?.id === item.id ? <div key={item.id} className=\"w100n-docs-card\">\n <Thumb host={host} item={item} label={t.kinds[item.kind]} />\n <span className=\"w100n-docs-card-text\"><input className=\"w100n-docs-field\" autoFocus value={naming.text} aria-label={t.rename} onFocus={e => e.currentTarget.select()}\n onChange={e => setNaming({ ...naming, text: e.target.value })} onBlur={() => void retitle(item, naming.text)}\n onKeyDown={e => { if (e.key === 'Enter') e.currentTarget.blur(); if (e.key === 'Escape') { e.stopPropagation(); setNaming(null); } }} /></span>\n </div> : <button key={item.id} type=\"button\" className=\"w100n-docs-card\" aria-current={item.id === here.documentId} onClick={() => open(item)} title={item.name}\n onPointerEnter={() => warm(item)} onPointerLeave={() => clearTimeout(hover.current)}\n onContextMenu={e => { e.preventDefault(); setMenu({ item, x: Math.min(e.clientX, innerWidth - 290), y: Math.min(e.clientY, innerHeight - 440), sure: false }); }}>\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>\n {inside.get(item.id) && <small className=\"w100n-docs-hit\">{inside.get(item.id)!.split(/[«»]/).map((part, i) => i % 2 ? <mark key={i}>{part}</mark> : part)}</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 && panelTabs.length < 5)) && <span>{label}</span>}\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\" aria-label={t.outline}>\n {now && <div className=\"w100n-docs-reading\"><span><i style={{ width: `${Math.round(now.progress * 100)}%` }} /></span><small>{Math.round(now.progress * 100)}% {t.read}</small></div>}\n {outline.length > 8 && <label className=\"w100n-docs-field w100n-docs-search\"><Search aria-hidden /><input value={hunt} onChange={e => setHunt(e.target.value)} placeholder={t.findHeading} aria-label={t.findHeading} /></label>}\n {chapters.map((c, i) => {\n const subs = words.length ? c.subs.filter(hit) : c.subs;\n if (words.length && !hit(c.head) && !subs.length) return null;\n const opened = words.length > 0 || (fold[c.head.id] ?? i === reached);\n const named = /^(\\d+)[.)]?\\s+(.+)$/.exec(c.head.text);\n const mark = c.subs.findIndex(s => s.id === now?.id);\n return <div key={c.head.id} className=\"w100n-docs-chapter\" data-state={reached < 0 ? undefined : i < reached ? 'done' : i === reached ? 'now' : undefined}>\n <div className=\"w100n-docs-chapter-row\">\n <button type=\"button\" className=\"w100n-docs-chapter-go\" aria-label={c.head.text} aria-current={now?.id === c.head.id ? 'location' : undefined} onClick={() => reach(c.head)}>\n <span className=\"w100n-docs-chapter-num\">{named ? named[1] : <Bookmark aria-hidden />}</span><b>{named ? named[2] : c.head.text}</b>\n </button>\n {c.subs.length > 0 && <button type=\"button\" className=\"w100n-docs-chapter-fold\" aria-expanded={opened} aria-label={opened ? t.hideSections : t.showSections}\n title={opened ? t.hideSections : t.showSections} onClick={() => setFold({ ...fold, [c.head.id]: !opened })}><small>{c.subs.length}</small>{opened ? <ChevronDown aria-hidden /> : <ChevronRight aria-hidden />}</button>}\n </div>\n {opened && subs.length > 0 && <div className=\"w100n-docs-sections\">{subs.map(s => <button key={s.id} type=\"button\" data-level={s.level - top} onClick={() => reach(s)}\n data-state={i < reached || (i === reached && c.subs.indexOf(s) < mark) ? 'done' : undefined} aria-current={now?.id === s.id ? 'location' : undefined}><i aria-hidden />{s.text}</button>)}</div>}\n </div>;\n })}\n </nav> : <p className=\"w100n-docs-muted\">{t.noOutline}</p>)}\n {tab === 'links' && doc.data.kind === 'markdown' && <Backlinks host={host} current={doc.data} notes={notes} t={t} onOpen={open} />}\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 {jump && <Jump mode={jump} items={all} actions={commands} t={t} onClose={() => setJump(null)} onOpen={open} onCreate={host.create ? name => void note(name, true) : undefined}\n place={item => [!spaceId && names.get(item.spaceId), item.folder].filter(Boolean).join(' / ')} />}\n {making && <NewDocument host={host} t={t} onClose={() => setMaking(false)} onMade={made => { setMaking(false); opened(made); }} />}\n {menu && <div className=\"w100n-docs-menu w100n-docs-context\" role=\"menu\" aria-label={t.fileActions} style={{ left: menu.x, top: menu.y }}>\n <div className=\"w100n-docs-context-head\">\n <b>{menu.item.name}</b>\n <small>{[t.kinds[menu.item.kind], size(menu.item.size), names.get(menu.item.spaceId), menu.item.folder].filter(Boolean).join(' · ')}</small>\n {menu.item.createdAt && <small>{[t.createdOn.replace('{when}', date(menu.item.createdAt)), menu.item.createdBy?.name].filter(Boolean).join(' · ')}</small>}\n <small>{[t.updatedOn.replace('{when}', ago(menu.item.updatedAt)), menu.item.updatedBy?.name].filter(Boolean).join(' · ')}</small>\n </div>\n {menu.sure ? <div className=\"w100n-docs-context-ask\">\n <p>{t.trashAsk.replace('{name}', menu.item.name)}</p>\n <span className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={() => setMenu({ ...menu, sure: false })}>{t.cancel}</button>\n <button type=\"button\" className=\"w100n-docs-action\" data-tone=\"red\" onClick={() => void drop(menu.item)}><Trash2 aria-hidden />{t.trash}</button>\n </span>\n </div> : <>\n <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); open(menu.item); }}><FileText aria-hidden />{t.openFile}</button>\n {host.href && <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); window.open(host.href!(menu.item.id), '_blank', 'noopener'); }}><ExternalLink aria-hidden />{t.openTab}</button>}\n {host.href && <button type=\"button\" role=\"menuitem\" onClick={() => void act(() => navigator.clipboard.writeText(host.href!(menu.item.id)), t.linkCopied)}><Link aria-hidden />{t.copyLink}</button>}\n {host.send && <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); host.send!(menu.item.id); }}><Send aria-hidden />{t.sendChat}</button>}\n <hr />\n {host.rename && <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); setNaming({ id: menu.item.id, text: menu.item.name.replace(/\\.[^.]+$/, '') }); }}><Pencil aria-hidden />{t.rename}</button>}\n {host.create && <button type=\"button\" role=\"menuitem\" onClick={() => void act(async () => copy(await host.document(menu.item.id)))}><Copy aria-hidden />{t.makeCopy}</button>}\n <button type=\"button\" role=\"menuitem\" onClick={() => void act(() => fetchFile(menu.item))}><Download aria-hidden />{t.download}</button>\n {host.saveTemplate && <button type=\"button\" role=\"menuitem\" onClick={() => void act(() => host.saveTemplate!(menu.item.id), t.templateSaved)}><Bookmark aria-hidden />{t.saveTemplate}</button>}\n <button type=\"button\" role=\"menuitem\" onClick={() => { setMenu(null); open(menu.item); setTab('details'); side('panel', true); }}><Info aria-hidden />{t.details}</button>\n {host.remove && <><hr /><button type=\"button\" role=\"menuitem\" data-tone=\"red\" onClick={() => setMenu({ ...menu, sure: true })}><Trash2 aria-hidden />{t.trash}</button></>}\n </>}\n </div>}\n {dialog}\n </div>;\n}\n","import { FileType } from 'lucide-react';\nimport { findNote } from './editor/wiki';\nimport type { Text } from './text';\nimport type { DocumentsHost, DocumentSummary } from './types';\nimport { useLoad } from './useLoad';\n\ntype Mention = { item: DocumentSummary; before: string; hit: string; after: string };\n\nconst wikis = /\\[\\[([^[\\]\\n|]+?)(?:\\|([^[\\]\\n]+?))?\\]\\]/g;\n\nconst around = (text: string, from: number, to: number) => ({\n before: text.slice(Math.max(0, from - 70), from).replace(/^\\S*\\s/, '').replace(/\\s+/g, ' '),\n hit: text.slice(from, to),\n after: text.slice(to, to + 90).replace(/\\s\\S*$/, '').replace(/\\s+/g, ' '),\n});\n\nexport function mentions(current: { id: string; name: string }, notes: DocumentSummary[], texts: Map<string, string>) {\n const name = current.name.replace(/\\.(md|markdown)$/i, '');\n const plain = new RegExp(`(^|[^\\\\p{L}\\\\p{N}])(${name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})(?![\\\\p{L}\\\\p{N}])`, 'iu');\n const linked: Mention[] = [];\n const unlinked: Mention[] = [];\n for (const item of notes) {\n if (item.id === current.id) continue;\n const text = texts.get(item.id);\n if (!text) continue;\n let link: Mention | null = null;\n for (const m of text.matchAll(wikis)) {\n if (findNote(notes, m[1])?.id !== current.id) continue;\n link = { item, ...around(text, m.index!, m.index! + m[0].length), hit: m[2] ?? m[1] };\n break;\n }\n if (link) {\n linked.push(link);\n continue;\n }\n const bare = text.replace(wikis, m => ' '.repeat(m.length));\n const m = plain.exec(bare);\n if (m) unlinked.push({ item, ...around(text, m.index + m[1].length, m.index + m[0].length) });\n }\n return { linked, unlinked };\n}\n\nexport default function Backlinks({ host, current, notes, t, onOpen }: {\n host: DocumentsHost; current: { id: string; name: string }; notes: DocumentSummary[]; t: Text; onOpen: (item: DocumentSummary) => void;\n}) {\n const others = notes.filter(item => item.id !== current.id);\n const found = useLoad(async signal => {\n const texts = new Map<string, string>();\n const queue = [...others];\n const reader = new TextDecoder();\n await Promise.all(Array.from({ length: 6 }, async () => {\n for (let item = queue.shift(); item; item = queue.shift()) {\n try {\n texts.set(item.id, reader.decode(await host.content(item.id, null, { signal })));\n } catch {\n if (signal.aborted) return;\n }\n }\n }));\n return mentions(current, notes, texts);\n }, [host, current.id, current.name, others.map(item => `${item.id}:${item.updatedAt}`).join()]);\n if (found.loading && !found.data) return <p className=\"w100n-docs-muted\">{t.loading}</p>;\n if (found.error) return <p className=\"w100n-docs-muted\">{t.failed}</p>;\n const { linked, unlinked } = found.data!;\n const card = (m: Mention) => <button key={m.item.id} type=\"button\" className=\"w100n-links-card\" onClick={() => onOpen(m.item)}>\n <b><FileType aria-hidden />{m.item.name.replace(/\\.(md|markdown)$/i, '')}</b>\n <small>…{m.before}<mark>{m.hit}</mark>{m.after}…</small>\n {m.item.folder && <small className=\"w100n-links-folder\">{m.item.folder}</small>}\n </button>;\n return <div className=\"w100n-links\">\n <p className=\"w100n-docs-caption\">{t.linked}<span>{linked.length}</span></p>\n {linked.length ? linked.map(card) : <p className=\"w100n-docs-muted\">{t.noBacklinks}</p>}\n {unlinked.length > 0 && <><p className=\"w100n-docs-caption\">{t.unlinked}<span>{unlinked.length}</span></p>{unlinked.map(card)}</>}\n </div>;\n}\n","import { useState, type ReactNode } from 'react';\nimport { Command, FileType, Plus, Search, type LucideIcon } from 'lucide-react';\nimport type { Text } from './text';\nimport type { DocumentSummary } from './types';\n\nexport type Action = { id: string; label: string; icon: LucideIcon; keys?: string; run: () => void };\n\nconst bare = (name: string) => name.replace(/\\.(md|markdown)$/i, '');\n\nfunction rank(item: DocumentSummary, q: string) {\n const name = bare(item.name).toLowerCase();\n if (!q) return 2;\n if (name.startsWith(q)) return 0;\n if (name.split(/[\\s_.-]+/).some(w => w.startsWith(q))) return 1;\n if (name.includes(q)) return 2;\n let at = 0;\n for (const ch of q) {\n at = name.indexOf(ch, at) + 1;\n if (!at) return -1;\n }\n return 3;\n}\n\nconst lit = (text: string, q: string): ReactNode => {\n const at = q ? text.toLowerCase().indexOf(q) : -1;\n return at < 0 ? text : <>{text.slice(0, at)}<mark>{text.slice(at, at + q.length)}</mark>{text.slice(at + q.length)}</>;\n};\n\nexport default function Jump({ mode, items, actions, t, place, onOpen, onCreate, onClose }: {\n mode: 'open' | 'run'; items: DocumentSummary[]; actions: Action[]; t: Text; place: (item: DocumentSummary) => string;\n onOpen: (item: DocumentSummary) => void; onCreate?: (name: string) => void; onClose: () => void;\n}) {\n const [query, setQuery] = useState('');\n const [at, setAt] = useState(0);\n const q = query.trim().toLowerCase();\n const found = mode === 'open'\n ? items.map(item => ({ item, r: rank(item, q) })).filter(x => x.r >= 0).sort((a, b) => a.r - b.r || bare(a.item.name).localeCompare(bare(b.item.name))).slice(0, 30).map(x => x.item)\n : [];\n const doing = mode === 'run' ? actions.filter(a => !q || a.label.toLowerCase().includes(q)) : [];\n const make = mode === 'open' && onCreate && query.trim() && !found.some(item => bare(item.name).toLowerCase() === q);\n const total = found.length + doing.length + (make ? 1 : 0);\n const pick = Math.min(at, Math.max(0, total - 1));\n const go = (i: number) => {\n onClose();\n if (i < found.length) onOpen(found[i]);\n else if (mode === 'run') doing[i]?.run();\n else if (make) onCreate!(query.trim());\n };\n return <div className=\"w100n-jump-back\" onPointerDown={e => { if (e.target === e.currentTarget) onClose(); }}>\n <div className=\"w100n-jump\" role=\"dialog\" aria-modal aria-label={mode === 'open' ? t.openNote : t.commands}>\n <label className=\"w100n-jump-field\">{mode === 'open' ? <Search aria-hidden /> : <Command aria-hidden />}\n <input autoFocus value={query} placeholder={mode === 'open' ? t.findNote : t.commands} aria-label={mode === 'open' ? t.findNote : t.commands}\n onChange={e => { setQuery(e.target.value); setAt(0); }}\n onKeyDown={e => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n if (total) setAt((pick + (e.key === 'ArrowDown' ? 1 : total - 1)) % total);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (total) go(pick);\n } else if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n }\n }} />\n </label>\n <div className=\"w100n-jump-list\" role=\"listbox\" aria-label={mode === 'open' ? t.openNote : t.commands}>\n {found.map((item, i) => <button key={item.id} type=\"button\" role=\"option\" aria-selected={i === pick} onPointerMove={() => setAt(i)} onClick={() => go(i)}>\n <FileType aria-hidden /><span>{lit(bare(item.name), q)}</span><small>{place(item)}</small>\n </button>)}\n {doing.map((a, i) => <button key={a.id} type=\"button\" role=\"option\" aria-selected={i === pick} onPointerMove={() => setAt(i)} onClick={() => go(i)}>\n <a.icon aria-hidden /><span>{lit(a.label, q)}</span>{a.keys && <kbd>{a.keys}</kbd>}\n </button>)}\n {make && <button type=\"button\" role=\"option\" aria-selected={pick === found.length} onPointerMove={() => setAt(found.length)} onClick={() => go(found.length)}>\n <Plus aria-hidden /><span>{t.createNote.replace('{name}', query.trim())}</span>\n </button>}\n {!total && <p className=\"w100n-docs-muted\">{t.noNote}</p>}\n </div>\n <p className=\"w100n-jump-keys\">{mode === 'open' ? t.keysOpen : t.keysRun}</p>\n </div>\n </div>;\n}\n","import { Check, FileSpreadsheet, FileText, FileType, Plus, Presentation, X, type LucideIcon } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport { blank, extensions, mimes, type NewKind, type Template } from './blank';\nimport { useRestore } from './focus';\nimport type { Text } from './text';\nimport type { DocumentsHost, DocumentSummary } from './types';\nimport { useLoad } from './useLoad';\n\nconst icons: Record<NewKind, LucideIcon> = { docx: FileText, markdown: FileType, sheet: FileSpreadsheet, slides: Presentation };\n\nconst shaped: Template[] = ['blank', 'letter', 'contract', 'notes', 'invoice', 'report'];\n\nexport default function NewDocument({ host, t, onClose, onMade }: { host: DocumentsHost; t: Text; onClose: () => void; onMade: (doc: DocumentSummary) => void }) {\n const id = useId();\n const [kind, setKind] = useState<NewKind>('docx');\n const [template, setTemplate] = useState<Template>('blank');\n const [name, setName] = useState('');\n const [team, setTeam] = useState<DocumentSummary | null>(null);\n const shared = useLoad(signal => host.templates ? host.templates({ signal }) : Promise.resolve([]), [host]);\n const ours = (shared.data ?? []).filter(item => item.kind === kind);\n const stem = (file: string) => file.replace(/\\.[^.]+$/, '');\n const [state, setState] = useState<'idle' | 'busy' | 'failed'>('idle');\n useRestore(true);\n const choices = kind === 'docx' || kind === 'markdown' ? shaped : ['blank' as const];\n const make = async () => {\n const title = name.trim() || (team ? stem(team.name) : template === 'blank' ? t.untitled : t.templates[template]);\n setState('busy');\n try {\n const ext = team ? team.name.split('.').pop()! : extensions[kind];\n const bytes = team ? await host.content(team.id) : blank(kind, title, template);\n onMade(await host.create!({ name: `${title.replace(/[\\\\/:*?\"<>|\\s]+/g, ' ').trim()}.${ext}`, bytes, mimeType: mimes[kind] }));\n } catch {\n setState('failed');\n }\n };\n return <div className=\"w100n-pdf-back\" onKeyDown={e => { if (e.key === 'Escape') { e.stopPropagation(); onClose(); } }}>\n <form className=\"w100n-pdf-dialog w100n-new\" role=\"dialog\" aria-modal aria-labelledby={`${id}t`} onSubmit={e => { e.preventDefault(); void make(); }}>\n <div className=\"w100n-new-head\">\n <span className=\"w100n-new-tile\"><Plus aria-hidden /></span>\n <b id={`${id}t`} className=\"w100n-pdf-dialog-title\">{t.newTitle}</b>\n <button type=\"button\" className=\"w100n-docs-close\" onClick={onClose} aria-label={t.close} title={t.close}><X aria-hidden /></button>\n </div>\n <div role=\"radiogroup\" aria-label={t.kind} className=\"w100n-new-kinds\">{(Object.keys(icons) as NewKind[]).map(item => {\n const Icon = icons[item];\n return <button key={item} type=\"button\" role=\"radio\" aria-checked={kind === item} data-kind={item} onClick={() => { setKind(item); setTeam(null); if (item === 'sheet' || item === 'slides') setTemplate('blank'); }}>\n <span className=\"w100n-docs-tile\" data-kind={item}><Icon aria-hidden /></span><span><b>{t.newKinds[item]}</b><small>{t.kindHints[item]}</small></span>\n </button>;\n })}</div>\n <p className=\"w100n-docs-caption\">{t.startFrom}</p>\n <div role=\"radiogroup\" aria-label={t.startFrom} className=\"w100n-new-templates\">{choices.map(item =>\n <button key={item} type=\"button\" role=\"radio\" aria-checked={!team && template === item} onClick={() => { setTeam(null); setTemplate(item); }}>\n <span className=\"w100n-new-sheet\" data-blank={item === 'blank'}>{item === 'blank' ? <Plus aria-hidden /> : <><i data-head /><i /><i /><i data-accent /><i /><i /></>}</span>\n <span>{t.templates[item]}</span>\n </button>)}</div>\n {ours.length > 0 && <>\n <p className=\"w100n-docs-caption\">{t.teamTemplates}</p>\n <div role=\"radiogroup\" aria-label={t.teamTemplates} className=\"w100n-new-templates\">{ours.map(item =>\n <button key={item.id} type=\"button\" role=\"radio\" aria-checked={team?.id === item.id} onClick={() => setTeam(item)}>\n <span className=\"w100n-new-sheet\"><i data-head /><i /><i data-accent /><i /><i /></span>\n <span title={item.name}>{stem(item.name)}</span>\n </button>)}</div>\n </>}\n <div className=\"w100n-new-fields\">\n <label><span className=\"w100n-docs-caption\">{t.name}</span>\n <input className=\"w100n-docs-field\" autoFocus value={name} onChange={e => setName(e.target.value)} placeholder={team ? stem(team.name) : template === 'blank' ? t.untitled : t.templates[template]} />\n </label>\n {host.createIn && <div><span className=\"w100n-docs-caption\">{t.savesTo}</span><span className=\"w100n-docs-field w100n-new-place\">{host.createIn}</span></div>}\n </div>\n {state === 'failed' && <p className=\"w100n-docs-muted\" role=\"alert\">{t.makeFailed}</p>}\n <div className=\"w100n-pdf-dialog-end\">\n <button type=\"button\" className=\"w100n-pdf-link\" onClick={onClose}>{t.cancel}</button>\n <button type=\"submit\" className=\"w100n-docs-action\" disabled={state === 'busy'}><Check aria-hidden />{state === 'busy' ? t.making : t.make}</button>\n </div>\n </form>\n </div>;\n}\n","import { strToU8, zipSync } from 'fflate';\nimport { escape } from './docx/xml';\n\nexport type NewKind = 'docx' | 'markdown' | 'sheet' | 'slides';\n\nexport type Template = 'blank' | 'letter' | 'contract' | 'notes' | 'invoice' | 'report';\n\ntype Block = [style: string | null, text: string] | string[][];\n\nconst W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst PKG = 'http://schemas.openxmlformats.org/package/2006/relationships';\nconst head = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n';\n\nexport const mimes: Record<NewKind, string> = {\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', markdown: 'text/markdown',\n sheet: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', slides: 'text/html',\n};\n\nexport const extensions: Record<NewKind, string> = { docx: 'docx', markdown: 'md', sheet: 'xlsx', slides: 'html' };\n\nconst templates: Record<Exclude<Template, 'blank'>, (name: string) => Block[]> = {\n letter: name => [['Title', name], [null, 'Web100Now'], [null, ''], [null, 'Dear Name,'], [null, 'Write the message here.'], [null, ''], [null, 'Kind regards,'], [null, 'Your name']],\n contract: name => [['Title', name], [null, 'Between Party A and Party B, date'], ['Heading1', '1. Scope of work'], [null, 'What is delivered and when.'],\n ['Heading1', '2. Fees and payment'], [null, 'Amount, currency and when it is paid.'], ['Heading1', '3. Term'], [null, 'Start date, length and how either side ends it.'],\n ['Heading1', '4. Signatures'], [['Party A', 'Party B'], ['Name, date', 'Name, date']]],\n notes: name => [['Title', name], [null, 'Date, people'], ['Heading1', 'Agenda'], [null, 'Topic one'], ['Heading1', 'Decisions'], [null, 'What was decided'],\n ['Heading1', 'Next steps'], [['Who', 'What', 'By when'], ['', '', '']]],\n invoice: name => [['Title', name], [null, 'Number, date, due date'], [null, 'Billed to: client name and address'],\n [['Item', 'Quantity', 'Price', 'Total'], ['', '', '', ''], ['', '', 'Total', '']], [null, 'Bank details and payment terms']],\n report: name => [['Title', name], [null, 'Period, author'], ['Heading1', 'Summary'], [null, 'The main points in a few lines.'], ['Heading1', 'Results'], [null, 'What happened and the numbers behind it.'],\n ['Heading1', 'Next'], [null, 'What comes next and who owns it.']],\n};\n\nconst run = (text: string) => text ? `<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>` : '';\n\nconst para = ([style, text]: [string | null, string]) => `<w:p>${style ? `<w:pPr><w:pStyle w:val=\"${style}\"/></w:pPr>` : ''}${run(text)}</w:p>`;\n\nconst table = (rows: string[][]) => {\n const width = Math.floor(9638 / rows[0].length);\n const border = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"94A3B8\"/>`;\n return `<w:tbl><w:tblPr><w:tblW w:w=\"5000\" w:type=\"pct\"/><w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(border).join('')}</w:tblBorders></w:tblPr>`\n + `<w:tblGrid>${rows[0].map(() => `<w:gridCol w:w=\"${width}\"/>`).join('')}</w:tblGrid>`\n + rows.map((row, r) => `<w:tr>${row.map(cell => `<w:tc><w:tcPr><w:tcW w:w=\"${width}\" w:type=\"dxa\"/></w:tcPr><w:p>${r === 0 ? `<w:r><w:rPr><w:b/></w:rPr><w:t xml:space=\"preserve\">${escape(cell)}</w:t></w:r>` : run(cell)}</w:p></w:tc>`).join('')}</w:tr>`).join('')\n + '</w:tbl><w:p/>';\n};\n\nconst styles = `${head}<w:styles xmlns:w=\"${W}\"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:eastAsia=\"Arial\" w:cs=\"Arial\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/></w:rPr></w:rPrDefault>`\n + '<w:pPrDefault><w:pPr><w:spacing w:after=\"120\" w:line=\"276\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults>'\n + '<w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style>'\n + '<w:style w:type=\"paragraph\" w:styleId=\"Title\"><w:name w:val=\"Title\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"80\"/></w:pPr><w:rPr><w:b/><w:sz w:val=\"48\"/></w:rPr></w:style>'\n + '<w:style w:type=\"paragraph\" w:styleId=\"Heading1\"><w:name w:val=\"heading 1\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:keepNext/><w:spacing w:before=\"360\" w:after=\"120\"/><w:outlineLvl w:val=\"0\"/></w:pPr><w:rPr><w:b/><w:sz w:val=\"32\"/></w:rPr></w:style>'\n + '<w:style w:type=\"paragraph\" w:styleId=\"Heading2\"><w:name w:val=\"heading 2\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:keepNext/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"1\"/></w:pPr><w:rPr><w:b/><w:sz w:val=\"26\"/></w:rPr></w:style>'\n + '</w:styles>';\n\nfunction docx(blocks: Block[]) {\n const body = blocks.map(block => typeof block[0] === 'string' || block[0] === null ? para(block as [string | null, string]) : table(block as string[][])).join('') || '<w:p/>';\n return zipSync({\n '[Content_Types].xml': strToU8(`${head}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/></Types>`),\n '_rels/.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/officeDocument\" Target=\"word/document.xml\"/></Relationships>`),\n 'word/_rels/document.xml.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/styles\" Target=\"styles.xml\"/></Relationships>`),\n 'word/styles.xml': strToU8(styles),\n 'word/document.xml': strToU8(`${head}<w:document xmlns:w=\"${W}\" xmlns:r=\"${REL}\"><w:body>${body}`\n + '<w:sectPr><w:pgSz w:w=\"11906\" w:h=\"16838\"/><w:pgMar w:top=\"1417\" w:right=\"1134\" w:bottom=\"1417\" w:left=\"1134\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/></w:sectPr></w:body></w:document>'),\n });\n}\n\nfunction markdown(blocks: Block[]) {\n const line = (block: Block) => {\n if (typeof block[0] === 'string' || block[0] === null) {\n const [style, text] = block as [string | null, string];\n return style === 'Title' ? `# ${text}` : style === 'Heading1' ? `## ${text.replace(/^\\d+\\.\\s*/, '')}` : text;\n }\n const rows = block as string[][];\n return [rows[0], rows[0].map(() => '---'), ...rows.slice(1)].map(row => `| ${row.join(' | ')} |`).join('\\n');\n };\n return strToU8(blocks.map(line).join('\\n\\n').replace(/\\n{3,}/g, '\\n\\n') + '\\n');\n}\n\nconst S = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n\nfunction sheet() {\n return zipSync({\n '[Content_Types].xml': strToU8(`${head}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/><Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/><Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/></Types>`),\n '_rels/.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/officeDocument\" Target=\"xl/workbook.xml\"/></Relationships>`),\n 'xl/workbook.xml': strToU8(`${head}<workbook xmlns=\"${S}\" xmlns:r=\"${REL}\"><sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets></workbook>`),\n 'xl/_rels/workbook.xml.rels': strToU8(`${head}<Relationships xmlns=\"${PKG}\"><Relationship Id=\"rId1\" Type=\"${REL}/worksheet\" Target=\"worksheets/sheet1.xml\"/><Relationship Id=\"rId2\" Type=\"${REL}/styles\" Target=\"styles.xml\"/></Relationships>`),\n 'xl/worksheets/sheet1.xml': strToU8(`${head}<worksheet xmlns=\"${S}\" xmlns:r=\"${REL}\"><sheetData/></worksheet>`),\n 'xl/styles.xml': strToU8(`${head}<styleSheet xmlns=\"${S}\"><fonts count=\"1\"><font><sz val=\"11\"/><name val=\"Arial\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/></cellXfs><cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles></styleSheet>`),\n });\n}\n\nconst slides = (name: string) => strToU8(`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>${escape(name)}</title>\n<style>\n body { margin: 0; font-family: Inter, Arial, sans-serif; background: #0f172a; }\n section { width: 1920px; height: 1080px; padding: 120px; box-sizing: border-box; background: #fff; color: #0f172a; }\n section h1 { font-size: 96px; margin: 0 0 24px; }\n section h2 { font-size: 72px; margin: 0 0 24px; }\n section p { font-size: 40px; color: #475569; }\n</style>\n</head>\n<body>\n<section><h1>${escape(name)}</h1><p>Subtitle</p></section>\n<section><h2>Title</h2><p>Text</p></section>\n</body>\n</html>\n`);\n\nexport function blank(kind: NewKind, name: string, template: Template = 'blank'): ArrayBuffer {\n const blocks = template === 'blank' ? [] : templates[template](name);\n const bytes = kind === 'docx' ? docx(blocks) : kind === 'markdown' ? markdown(blocks.length ? blocks : [['Title', name]]) : kind === 'sheet' ? sheet() : slides(name);\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\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, type Source } from './preview';\nimport type { DocumentSummary } from './types';\n\nexport default function Thumb({ host, item, label }: { host: Source; 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 {label && <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\nexport type Source = Pick<DocumentsHost, 'content' | 'pdfWorker'>;\n\nasync function make(host: Source, 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, renderAltChunks: false });\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: Source, 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 { useState, type MouseEvent } from 'react';\nimport { ChevronDown, ChevronRight, FileSpreadsheet, FileText, FileType, Files, Folder, Presentation, type LucideIcon } from 'lucide-react';\nimport type { Text } from './text';\nimport type { DocumentKind, DocumentSummary } from './types';\n\nconst icons: Record<DocumentKind, LucideIcon> = { docx: FileText, markdown: FileType, pdf: Files, sheet: FileSpreadsheet, slides: Presentation };\n\ntype Branch = { key: string; name: string; folders: Branch[]; files: DocumentSummary[]; count: number };\n\nfunction grow(items: DocumentSummary[], names: Map<string, string>, bySpace: boolean, other: string): Branch {\n const root: Branch = { key: '', name: '', folders: [], files: [], count: 0 };\n for (const item of items) {\n const path = [...(bySpace ? [names.get(item.spaceId) ?? other] : []), ...(item.folder ?? '').split('/').filter(Boolean)];\n let at = root;\n at.count++;\n for (const part of path) {\n const key = `${at.key}/${part}`;\n let next = at.folders.find(f => f.key === key);\n if (!next) at.folders.push(next = { key, name: part, folders: [], files: [], count: 0 });\n next.count++;\n at = next;\n }\n at.files.push(item);\n }\n const sort = (b: Branch) => {\n b.folders.sort((x, y) => x.name.localeCompare(y.name));\n b.files.sort((x, y) => x.name.localeCompare(y.name));\n b.folders.forEach(sort);\n };\n sort(root);\n return root;\n}\n\nconst remembered = () => {\n try {\n return new Set<string>(JSON.parse(localStorage.getItem('w100n-docs-closed') ?? '[]'));\n } catch {\n return new Set<string>();\n }\n};\n\nexport default function Tree({ items, names, bySpace, current, t, onOpen, onMenu, onWarm }: {\n items: DocumentSummary[]; names: Map<string, string>; bySpace: boolean; current: string | null; t: Text;\n onOpen: (item: DocumentSummary) => void; onMenu: (item: DocumentSummary, e: MouseEvent) => void; onWarm: (item: DocumentSummary | null) => void;\n}) {\n const [closed, setClosed] = useState(remembered);\n const flip = (key: string) => {\n const next = new Set(closed);\n if (!next.delete(key)) next.add(key);\n setClosed(next);\n localStorage.setItem('w100n-docs-closed', JSON.stringify([...next]));\n };\n const branch = (b: Branch, depth: number) => <>\n {b.folders.map(f => {\n const open = !closed.has(f.key);\n return <div key={f.key} role=\"group\" aria-label={f.name}>\n <button type=\"button\" className=\"w100n-tree-row\" aria-expanded={open} style={{ paddingLeft: 8 + depth * 16 }} onClick={() => flip(f.key)}>\n {open ? <ChevronDown aria-hidden className=\"w100n-tree-fold\" /> : <ChevronRight aria-hidden className=\"w100n-tree-fold\" />}<Folder aria-hidden /><span>{f.name}</span><small>{f.count}</small>\n </button>\n {open && branch(f, depth + 1)}\n </div>;\n })}\n {b.files.map(item => {\n const Icon = icons[item.kind];\n return <button key={item.id} type=\"button\" className=\"w100n-tree-row\" aria-current={item.id === current} title={item.name} style={{ paddingLeft: 24 + depth * 16 }}\n onClick={() => onOpen(item)} onPointerEnter={() => onWarm(item)} onPointerLeave={() => onWarm(null)} onContextMenu={e => { e.preventDefault(); onMenu(item, e); }}>\n <Icon aria-hidden /><span>{item.name.replace(/\\.[^.]+$/, '')}</span>\n {item.kind !== 'markdown' && <small className=\"w100n-tree-kind\">{t.kinds[item.kind]}</small>}\n </button>;\n })}\n </>;\n return <nav className=\"w100n-tree\" aria-label={t.tree}>{branch(grow(items, names, bySpace, t.elsewhere), 0)}</nav>;\n}\n","import { useState } from 'react';\nimport { kindOf } from './kinds';\nimport Thumb from './Thumb';\n\nexport function FilePreview({ url, name, mimeType, size = 0, bytes, pdfWorker }: {\n url: string; name: string; mimeType?: string; size?: number; bytes?: (url: string) => Promise<ArrayBuffer>; pdfWorker?: () => Worker;\n}) {\n const [source] = useState(() => ({ pdfWorker, content: () => bytes ? bytes(url) : fetch(url, { credentials: 'include' }).then(res => res.ok ? res.arrayBuffer() : Promise.reject(new Error(String(res.status)))) }));\n const kind = kindOf(name, mimeType);\n if (!kind) return null;\n return <span className=\"w100n-preview\"><Thumb host={source} item={{ id: url.split('?')[0], spaceId: '', name, kind, size, updatedAt: '' }} /></span>;\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":["X","useEffect","useRef","useState","createPortal","i","m","escape","styles","css","head","spot","el","run","spot","drop","steps","around","run","Save","Trash2","useState","jsx","jsxs","useState","Trash2","Save","Maximize","Redo2","Save","StickyNote","Undo2","X","Fragment","useEffect","useId","useLayoutEffect","useRef","useState","StickyNote","Trash2","X","useEffect","useRef","useState","Fragment","jsx","jsxs","boxes","flat","at","steps","drop","Fragment","jsx","jsxs","useId","useRef","useState","clean","useEffect","flat","entries","level","useLayoutEffect","marks","StickyNote","Maximize","at","Undo2","Redo2","Save","X","jsx","jsxs","useState","useRef","useEffect","escape","sheet","createPortal","X","lazy","Suspense","useEffect","useLayoutEffect","useRef","useState","Check","ChevronDown","ChevronRight","Copy","Download","ExternalLink","Link","Link2","Trash2","FileSpreadsheet","FileText","FileType","Files","Plus","Presentation","RotateCcw","Search","X","FileType","Fragment","jsx","jsxs","texts","m","bare","FileType","useState","FileType","Plus","Search","Fragment","jsx","jsxs","bare","make","FileSpreadsheet","FileText","FileType","Plus","Presentation","X","useId","useState","blank","Fragment","jsx","jsxs","icons","FileText","FileType","FileSpreadsheet","Presentation","useId","useState","make","blank","Plus","X","useState","Copy","Download","Plus","Fragment","jsx","jsxs","blank","useState","Download","Copy","Plus","useEffect","useRef","useState","Fragment","jsx","jsxs","useRef","useState","useEffect","useState","ChevronDown","ChevronRight","FileSpreadsheet","FileText","FileType","Files","Presentation","Fragment","jsx","jsxs","icons","names","Fragment","jsx","jsxs","TextEditor","lazy","SheetView","icons","FileText","FileType","Files","FileSpreadsheet","Presentation","useState","shape","useRef","useLayoutEffect","now","useEffect","all","kept","text","hit","doc","folder","names","open","versionId","run","drop","Search","Link2","Trash2","Suspense","note","ChevronRight","RotateCcw","Plus","ChevronDown","X","Check","opened","ExternalLink","Link","Copy","Download","useState","jsx","useState","lazy","Suspense","useRef","useState","Ban","Download","Eye","FileDown","FileSpreadsheet","FileText","FileType","Files","Lock","Presentation","Fragment","jsx","jsxs","TextEditor","lazy","SheetView","icons","FileText","FileType","Files","FileSpreadsheet","Presentation","remembered","useState","useRef","file","kind","FileDown","Download","Ban","Lock","Eye","quiet","Suspense"]}