@w100n/documents 0.12.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SheetView-3XTEV2VT.css → SheetView-43MPR64N.css} +5 -4
- package/dist/{SheetView-3XTEV2VT.css.map → SheetView-43MPR64N.css.map} +1 -1
- package/dist/{SheetView-G3YWPH5V.js → SheetView-4TPL7DES.js} +51 -10
- package/dist/SheetView-4TPL7DES.js.map +1 -0
- package/dist/{TextEditor-SPEVB5HX.js → TextEditor-VBHWUOZR.js} +636 -225
- package/dist/TextEditor-VBHWUOZR.js.map +1 -0
- package/dist/{chunk-L765DZPO.js → chunk-2CA3HQTI.js} +3 -3
- package/dist/{chunk-L765DZPO.js.map → chunk-2CA3HQTI.js.map} +1 -1
- package/dist/{chunk-UWASFTDF.js → chunk-5MH4WDW4.js} +133 -20
- package/dist/chunk-5MH4WDW4.js.map +1 -0
- package/dist/{chunk-BKUFGMEA.js → chunk-DR3TTJWZ.js} +410 -29
- package/dist/chunk-DR3TTJWZ.js.map +1 -0
- package/dist/{chunk-5NT5ALOF.js → chunk-RCQODE2Z.js} +2 -2
- package/dist/collab.cjs +523 -46
- package/dist/collab.cjs.map +1 -1
- package/dist/collab.d.cts +2 -2
- package/dist/collab.d.ts +2 -2
- package/dist/collab.js +2 -2
- package/dist/{grid-EI5JNZAA.js → grid-Q4XBPQFY.js} +3 -3
- package/dist/grid-Q4XBPQFY.js.map +1 -0
- package/dist/index.cjs +2271 -882
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1037 -189
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +9 -4
- package/dist/index.d.ts +9 -4
- package/dist/index.js +804 -336
- package/dist/index.js.map +1 -1
- package/dist/kinds.cjs +2 -2
- package/dist/kinds.cjs.map +1 -1
- package/dist/kinds.d.cts +2 -2
- package/dist/kinds.d.ts +2 -2
- package/dist/kinds.js +1 -1
- package/dist/memory.cjs +12 -1
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.d.cts +1 -1
- package/dist/memory.d.ts +1 -1
- package/dist/memory.js +13 -2
- package/dist/memory.js.map +1 -1
- package/dist/{types-B5oF25dn.d.ts → types-BTsVooZw.d.cts} +8 -1
- package/dist/{types-B5oF25dn.d.cts → types-BTsVooZw.d.ts} +8 -1
- package/dist/write-BCI8yool.d.cts +16 -0
- package/dist/write-BCI8yool.d.ts +16 -0
- package/package.json +1 -1
- package/dist/SheetView-G3YWPH5V.js.map +0 -1
- package/dist/TextEditor-SPEVB5HX.js.map +0 -1
- package/dist/chunk-BKUFGMEA.js.map +0 -1
- package/dist/chunk-UWASFTDF.js.map +0 -1
- package/dist/grid-EI5JNZAA.js.map +0 -1
- package/dist/write-DaVtTJCS.d.cts +0 -6
- package/dist/write-DaVtTJCS.d.ts +0 -6
- /package/dist/{chunk-5NT5ALOF.js.map → chunk-RCQODE2Z.js.map} +0 -0
package/dist/collab.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/collab.ts","../package.json","../src/docx/xml.ts","../src/docx/zip.ts","../src/docx/pkg.ts","../src/docx/read.ts","../src/docx/diff.ts","../src/docx/write.ts","../src/docx/index.ts","../src/editor/extensions.ts","../src/editor/pager.ts","../src/editor/markdown.ts","../src/sheets/model.ts","../src/sheets/csv.ts","../src/sheets/pack.ts","../src/sheets/refs.ts","../src/sheets/styles.ts","../src/sheets/xlsx.ts","../src/sheets/write.ts","../src/sheets/book.ts","../src/sheets/shared.ts","../src/sheets/text.ts","../src/text.ts"],"sourcesContent":["import { getSchema, type JSONContent } from '@tiptap/core';\nimport type { Node, Schema } from '@tiptap/pm/model';\nimport { Transform } from '@tiptap/pm/transform';\nimport { prosemirrorJSONToYXmlFragment, updateYFragment, yXmlFragmentToProseMirrorRootNode } from '@tiptap/y-tiptap';\nimport * as Y from 'yjs';\nimport { version } from '../package.json';\nimport { readDocx, writeDocx, type Img } from './docx';\nimport { kit } from './editor/extensions';\nimport { fromMarkdown, toMarkdown, track } from './editor/markdown';\nimport { readSheet, writeSheet } from './sheets/book';\nimport { build, fill, fnv, settle } from './sheets/shared';\nimport { sheetTexts } from './sheets/text';\nimport { texts } from './text';\nimport type { Language } from './types';\n\nexport { applyCells } from './sheets/shared';\n\nexport type Kind = 'markdown' | 'docx' | 'xlsx' | 'csv';\nexport type Prose = 'markdown' | 'docx';\nexport type Author = { id: string; name: string; language: Language };\nexport type Saved = { bytes: ArrayBuffer; version: string | null };\n\nexport const ours = 'w100n-collab';\n\nconst schemas = new Map<Prose, Schema>();\nconst schemaOf = (kind: Prose) => schemas.get(kind) ?? schemas.set(kind, getSchema(kit(kind, texts.en))).get(kind)!;\n\nexport const parse = async (kind: Prose, bytes: ArrayBuffer): Promise<JSONContent> =>\n kind === 'docx' ? (await readDocx(bytes)).doc : fromMarkdown(new TextDecoder().decode(bytes)).doc;\n\nexport const edits = (tr: Y.Transaction) => tr.changedParentTypes.has(tr.doc.get('default')) || tr.changedParentTypes.has(tr.doc.get('book'));\n\nexport const filled = (doc: Y.Doc) => doc.getXmlFragment('default').length > 0 || doc.getMap('book').size > 0;\n\nexport function seed(doc: Y.Doc, kind: Kind, bytes: ArrayBuffer, json?: JSONContent) {\n if (filled(doc)) return false;\n const fixed = new Y.Doc();\n fixed.clientID = fnv(new Uint8Array(bytes), fnv(new TextEncoder().encode(`${version}:${kind}`)));\n if (kind === 'xlsx' || kind === 'csv') fill(fixed, readSheet(bytes, kind));\n else prosemirrorJSONToYXmlFragment(schemaOf(kind), json!, fixed.getXmlFragment('default'));\n Y.applyUpdate(doc, Y.encodeStateAsUpdate(fixed), ours);\n return true;\n}\n\nexport function follow(doc: Y.Doc, author: (origin: unknown) => Author | null) {\n const editors = doc.getMap<Author>('editors');\n const before = (tr: Y.Transaction) => tr.meta.set('fresh', !filled(doc));\n const after = (tr: Y.Transaction) => {\n const who = !tr.meta.get('fresh') && edits(tr) ? author(tr.origin) : null;\n if (who && !editors.has(who.id)) doc.transact(() => editors.set(who.id, who), ours);\n };\n doc.on('beforeTransaction', before);\n doc.on('afterTransaction', after);\n return () => {\n doc.off('beforeTransaction', before);\n doc.off('afterTransaction', after);\n };\n}\n\nexport const pending = (doc: Y.Doc) => doc.getMap<Author>('editors').size > 0;\n\nexport class Refusal extends Error {}\n\nexport function applyText(doc: Y.Doc, kind: Prose, changes: { find: string; replace: string }[], origin: unknown) {\n const schema = schemaOf(kind);\n const fragment = doc.getXmlFragment('default');\n const step = new Transform(yXmlFragmentToProseMirrorRootNode(fragment, schema));\n for (const c of changes) {\n const hits: number[] = [];\n step.doc.descendants((node, pos) => {\n if (!node.isTextblock) return true;\n const text = node.textBetween(0, node.content.size, undefined, '\\ufffc');\n for (let i = text.indexOf(c.find); c.find && i >= 0; i = text.indexOf(c.find, i + 1)) hits.push(pos + 1 + i);\n return false;\n });\n if (hits.length !== 1) throw new Refusal(`${hits.length ? 'more than once' : 'not'} in the document: ${c.find.slice(0, 80)}`);\n const [at] = hits;\n if (c.replace) step.replaceWith(at, at + c.find.length, schema.text(c.replace, step.doc.resolve(at + 1).marks()));\n else step.delete(at, at + c.find.length);\n }\n updateYFragment({ transact: run => doc.transact(run, origin) }, fragment, step.doc, { mapping: new Map(), isOMark: new Map() });\n return changes.length;\n}\n\nasync function write(kind: Prose, base: ArrayBuffer, node: Node, load?: (src: string) => Promise<Img>) {\n if (kind === 'docx') return writeDocx(base, node.toJSON(), load);\n const parsed = fromMarkdown(new TextDecoder().decode(base));\n return new TextEncoder().encode(toMarkdown(node, track(parsed, node.type.schema.nodeFromJSON(parsed.doc))).text).buffer as ArrayBuffer;\n}\n\nconst blocks = (fragment: Y.XmlFragment, schema: Schema) => {\n const out: Y.XmlElement[] = [];\n const walk = (parent: Y.XmlFragment) => parent.toArray().forEach(child => {\n if (!(child instanceof Y.XmlElement) || !schema.nodes[child.nodeName]?.isBlock) return;\n out.push(child);\n walk(child);\n });\n walk(fragment);\n return out;\n};\n\nconst same = (a: ArrayBuffer, b: ArrayBuffer) => {\n const [x, y] = [new Uint8Array(a), new Uint8Array(b)];\n return x.length === y.length && x.every((v, i) => v === y[i]);\n};\n\nconst named = (label: string, who: Author[]) => {\n const names = who.map(w => w.name).join(', ');\n return `${label}: ${names.length > 180 ? `${names.slice(0, 177)}...` : names}`;\n};\n\nexport async function save(doc: Y.Doc, kind: Kind, base: ArrayBuffer, put: (bytes: ArrayBuffer, note: string) => Promise<string>, load?: (src: string) => Promise<Img>, note?: string): Promise<Saved | null> {\n const editors = doc.getMap<Author>('editors');\n const who = [...editors.values()];\n if (!who.length) return null;\n if (kind === 'xlsx' || kind === 'csv') return workbook(doc, kind, base, put, who, note);\n const schema = schemaOf(kind);\n const fragment = doc.getXmlFragment('default');\n const list = blocks(fragment, schema);\n const node = yXmlFragmentToProseMirrorRootNode(fragment, schema);\n let touched = false;\n const watch = (tr: Y.Transaction) => { touched ||= tr.origin !== ours && edits(tr); };\n doc.on('afterTransaction', watch);\n try {\n const bytes = await write(kind, base, node, load);\n const changed = !same(bytes, base);\n const id = changed ? await put(bytes, note ?? named((texts[who[0].language] ?? texts.en).editedNote, who)) : null;\n const refs: [string, string | null][] = [];\n if (changed) schema.nodeFromJSON(await parse(kind, bytes)).descendants(n => { if (n.isBlock) refs.push([n.type.name, n.attrs.ref ?? null]); });\n doc.transact(() => {\n if (refs.length === list.length && list.every((el, i) => el.nodeName === refs[i][0])) list.forEach((el, i) => {\n const ref = refs[i][1];\n if ((el.getAttribute('ref') ?? null) === ref) return;\n if (ref === null) el.removeAttribute('ref');\n else el.setAttribute('ref', ref);\n });\n if (id) doc.getMap('meta').set('version', id);\n if (!touched) who.forEach(w => editors.delete(w.id));\n }, ours);\n return { bytes: changed ? bytes : base, version: id };\n } finally {\n doc.off('afterTransaction', watch);\n }\n}\n\nasync function workbook(doc: Y.Doc, kind: 'xlsx' | 'csv', base: ArrayBuffer, put: (bytes: ArrayBuffer, note: string) => Promise<string>, who: Author[], note?: string): Promise<Saved> {\n const editors = doc.getMap<Author>('editors');\n const model = build(doc);\n let touched = false;\n const watch = (tr: Y.Transaction) => { touched ||= tr.origin !== ours && edits(tr); };\n doc.on('afterTransaction', watch);\n try {\n const bytes = writeSheet(base, model, kind);\n const changed = !same(bytes, base);\n const id = changed ? await put(bytes, note ?? named((sheetTexts[who[0].language] ?? sheetTexts.en).editedNote, who)) : null;\n doc.transact(() => {\n if (changed) settle(doc, model, bytes, kind);\n if (id) doc.getMap('meta').set('version', id);\n if (!touched) who.forEach(w => editors.delete(w.id));\n }, ours);\n return { bytes: changed ? bytes : base, version: id };\n } finally {\n doc.off('afterTransaction', watch);\n }\n}\n","{\n \"name\": \"@w100n/documents\",\n \"version\": \"0.12.1\",\n \"description\": \"Documents workspace for Web100Now projects: DOCX, Markdown, PDF, slides and sheets\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./memory\": {\n \"types\": \"./dist/memory.d.ts\",\n \"import\": \"./dist/memory.js\",\n \"require\": \"./dist/memory.cjs\"\n },\n \"./kinds\": {\n \"types\": \"./dist/kinds.d.ts\",\n \"import\": \"./dist/kinds.js\",\n \"require\": \"./dist/kinds.cjs\"\n },\n \"./collab\": {\n \"types\": \"./dist/collab.d.ts\",\n \"import\": \"./dist/collab.js\",\n \"require\": \"./dist/collab.cjs\"\n },\n \"./styles.css\": \"./dist/index.css\",\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\"\n ],\n \"sideEffects\": [\n \"*.css\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"vite playground\",\n \"test\": \"vitest run\",\n \"type-check\": \"tsc --noEmit\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"dependencies\": {\n \"@embedpdf/engines\": \"^2.15.1\",\n \"@embedpdf/models\": \"^2.15.1\",\n \"@embedpdf/pdfium\": \"^2.15.1\",\n \"@hocuspocus/provider\": \"^4.7.1\",\n \"@tiptap/core\": \"^3.32.0\",\n \"@tiptap/extension-collaboration\": \"^3.32.0\",\n \"@tiptap/extension-collaboration-caret\": \"^3.32.0\",\n \"@tiptap/extension-highlight\": \"^3.32.0\",\n \"@tiptap/extension-image\": \"^3.32.0\",\n \"@tiptap/extension-list\": \"^3.32.0\",\n \"@tiptap/extension-table\": \"^3.32.0\",\n \"@tiptap/extension-text-style\": \"^3.32.0\",\n \"@tiptap/pm\": \"^3.32.0\",\n \"@tiptap/react\": \"^3.32.0\",\n \"@tiptap/starter-kit\": \"^3.32.0\",\n \"@tiptap/y-tiptap\": \"^3.0.10\",\n \"@univerjs/core\": \"1.0.4\",\n \"@univerjs/preset-sheets-core\": \"1.0.4\",\n \"@univerjs/preset-sheets-data-validation\": \"1.0.4\",\n \"@univerjs/preset-sheets-filter\": \"1.0.4\",\n \"@univerjs/preset-sheets-find-replace\": \"1.0.4\",\n \"@univerjs/preset-sheets-note\": \"1.0.4\",\n \"@univerjs/preset-sheets-sort\": \"1.0.4\",\n \"@univerjs/presets\": \"1.0.4\",\n \"@univerjs/sheets\": \"1.0.4\",\n \"docx-preview\": \"^0.4.1\",\n \"fflate\": \"^0.8.3\",\n \"lucide-react\": \"^0.562.0\",\n \"marked\": \"^18.1.1\",\n \"pdfjs-dist\": \"^6.4.299\",\n \"prosemirror-markdown\": \"^1.13.8\",\n \"rxjs\": \"^7.8.2\",\n \"y-protocols\": \"^1.0.7\",\n \"yjs\": \"^13.6.33\"\n },\n \"devDependencies\": {\n \"@testing-library/react\": \"^16.3.3\",\n \"@types/node\": \"^22.20.5\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@univerjs/data-validation\": \"1.0.4\",\n \"@univerjs/engine-formula\": \"1.0.4\",\n \"@univerjs/sheets-data-validation\": \"1.0.4\",\n \"@univerjs/sheets-filter\": \"1.0.4\",\n \"@univerjs/sheets-formula\": \"1.0.4\",\n \"@univerjs/sheets-note\": \"1.0.4\",\n \"@vitejs/plugin-react\": \"^5.0.5\",\n \"exceljs\": \"4.4.0\",\n \"jsdom\": \"^30.1.3\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.6.0\",\n \"vite\": \"^7.1.0\",\n \"vitest\": \"^4.1.10\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Web100Now-Organization/-w100n_documents.git\"\n },\n \"publishConfig\": {\n \"access\": \"restricted\"\n }\n}\n","export type El = { name: string; start: number; open: number; close: number; end: number; kids: El[] };\n\nexport function parse(s: string): El {\n const root: El = { name: '', start: 0, open: 0, close: s.length, end: s.length, kids: [] };\n const stack = [root];\n const n = s.length;\n let i = s.indexOf('<');\n while (i !== -1 && i < n) {\n const c = s.charCodeAt(i + 1);\n let next: number;\n if (c === 63) next = s.indexOf('?>', i) + 2;\n else if (c === 33) {\n if (s.startsWith('<!--', i)) next = s.indexOf('-->', i) + 3;\n else if (s.startsWith('<![CDATA[', i)) next = s.indexOf(']]>', i) + 3;\n else next = s.indexOf('>', i) + 1;\n } else if (c === 47) {\n next = s.indexOf('>', i) + 1;\n if (stack.length > 1) {\n const top = stack.pop()!;\n top.close = i;\n top.end = next;\n }\n } else {\n let j = i + 1;\n while (j < n) {\n const d = s.charCodeAt(j);\n if (d === 32 || d === 62 || d === 47 || d === 9 || d === 10 || d === 13) break;\n j++;\n }\n let k = j;\n for (; k < n; k++) {\n const d = s.charCodeAt(k);\n if (d === 34 || d === 39) {\n k = s.indexOf(d === 34 ? '\"' : \"'\", k + 1);\n if (k === -1) k = n;\n } else if (d === 62) break;\n }\n const self = s.charCodeAt(k - 1) === 47;\n const el: El = { name: s.slice(i + 1, j), start: i, open: k + 1, close: k + 1, end: k + 1, kids: [] };\n stack[stack.length - 1].kids.push(el);\n if (!self) stack.push(el);\n next = k + 1;\n }\n if (next <= i) break;\n i = s.indexOf('<', next);\n }\n return root;\n}\n\nexport function attr(s: string, el: El, name: string): string | null {\n const tag = s.slice(el.start, el.open);\n const key = name + '=';\n let i = tag.indexOf(key);\n while (i > 0) {\n const before = tag.charCodeAt(i - 1);\n if (before === 32 || before === 9 || before === 10 || before === 13) {\n const q = tag[i + key.length];\n return unescape(tag.slice(i + key.length + 1, tag.indexOf(q, i + key.length + 1)));\n }\n i = tag.indexOf(key, i + 1);\n }\n return null;\n}\n\nexport function attrs(tag: string): [string, string][] {\n const out: [string, string][] = [];\n const re = /([\\w:.-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n const body = tag.slice(tag.search(/[\\s/>]/));\n for (let m = re.exec(body); m; m = re.exec(body)) out.push([m[1], unescape(m[3] ?? m[4])]);\n return out;\n}\n\nexport function kid(el: El, name: string): El | undefined {\n for (const k of el.kids) if (k.name === name) return k;\n return undefined;\n}\n\nexport function find(el: El, name: string): El | undefined {\n for (const k of el.kids) {\n if (k.name === name) return k;\n const deep = find(k, name);\n if (deep) return deep;\n }\n return undefined;\n}\n\nexport function inner(s: string, el: El): string {\n return unescape(s.slice(el.open, el.close));\n}\n\nexport function on(s: string, el: El | undefined, name = 'w:val'): boolean {\n if (!el) return false;\n const v = attr(s, el, name);\n return v === null || !/^(0|false|off|none)$/.test(v);\n}\n\nconst named: Record<string, string> = { lt: '<', gt: '>', amp: '&', quot: '\"', apos: \"'\" };\n\nexport function unescape(s: string): string {\n if (s.indexOf('&') === -1) return s;\n return s.replace(/&(#x[0-9a-fA-F]+|#\\d+|\\w+);/g, (m, e: string) => {\n if (e[0] !== '#') return named[e] ?? m;\n const code = e[1] === 'x' ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);\n return String.fromCodePoint(code);\n });\n}\n\nexport function escape(s: string): string {\n return s\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uFFFE\\uFFFF]/g, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\nexport function opened(s: string, el: El): string {\n const tag = s.slice(el.start, el.open);\n return el.end === el.open ? tag.replace(/\\s*\\/>$/, '>') : tag;\n}\n\nexport function rebuild(pr: string, tag: string, order: string[], set: Record<string, string | null>): string {\n const root = parse(pr).kids[0];\n const parts: { name: string; xml: string }[] = root ? root.kids.map(k => ({ name: k.name, xml: pr.slice(k.start, k.end) })) : [];\n const seen = new Set<string>();\n const out: { name: string; xml: string }[] = [];\n for (const p of parts) {\n if (!(p.name in set)) out.push(p);\n else if (!seen.has(p.name)) {\n seen.add(p.name);\n if (set[p.name] !== null) out.push({ name: p.name, xml: set[p.name]! });\n }\n }\n for (const name in set) if (!seen.has(name) && set[name] !== null) out.push({ name, xml: set[name]! });\n if (!out.length) return '';\n const rank = (name: string) => {\n const i = order.indexOf(name);\n return i === -1 ? order.length : i;\n };\n const sorted = out.map((p, i) => ({ p, i })).sort((a, b) => rank(a.p.name) - rank(b.p.name) || a.i - b.i);\n const open = root ? opened(pr, root) : `<${tag}>`;\n return open + sorted.map(x => x.p.xml).join('') + `</${tag}>`;\n}\n","import { deflateSync, inflateSync } from 'fflate';\n\nexport type Entry = {\n name: string;\n path: Uint8Array;\n method: number;\n flags: number;\n time: number;\n date: number;\n crc: number;\n size: number;\n version: number;\n made: number;\n inner: number;\n outer: number;\n raw: Uint8Array;\n};\n\nexport function unzip(buf: Uint8Array): Entry[] {\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n let eocd = buf.length - 22;\n while (eocd >= 0 && view.getUint32(eocd, true) !== 0x06054b50) eocd--;\n if (eocd < 0) throw new Error('Not a DOCX file');\n const count = view.getUint16(eocd + 10, true);\n let at = view.getUint32(eocd + 16, true);\n if (count === 0xffff || at === 0xffffffff) throw new Error('ZIP64 DOCX files are not supported');\n const names = new TextDecoder();\n const out: Entry[] = [];\n for (let n = 0; n < count; n++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new Error('Broken DOCX file');\n const length = view.getUint16(at + 28, true);\n const extra = view.getUint16(at + 30, true);\n const note = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const csize = view.getUint32(at + 20, true);\n const path = buf.subarray(at + 46, at + 46 + length);\n const begin = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n out.push({\n name: names.decode(path),\n path,\n made: view.getUint16(at + 4, true),\n version: view.getUint16(at + 6, true),\n flags: view.getUint16(at + 8, true),\n method: view.getUint16(at + 10, true),\n time: view.getUint16(at + 12, true),\n date: view.getUint16(at + 14, true),\n crc: view.getUint32(at + 16, true),\n size: view.getUint32(at + 24, true),\n inner: view.getUint16(at + 36, true),\n outer: view.getUint32(at + 38, true),\n raw: buf.subarray(begin, begin + csize),\n });\n at += 46 + length + extra + note;\n }\n return out;\n}\n\nexport function inflate(e: Entry): Uint8Array {\n if (e.method === 0) return e.raw;\n if (e.method !== 8) throw new Error(`Unsupported compression in ${e.name}`);\n return inflateSync(e.raw, { out: new Uint8Array(e.size) });\n}\n\nconst table = (() => {\n const t = new Int32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = -1;\n for (let i = 0; i < bytes.length; i++) c = table[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);\n return (c ^ -1) >>> 0;\n}\n\nexport function entry(name: string, bytes: Uint8Array, like: Entry): Entry {\n const path = new TextEncoder().encode(name);\n return { ...like, name, path, method: 8, version: Math.max(like.version, 20), flags: like.flags & ~8, crc: crc32(bytes), size: bytes.length, raw: deflateSync(bytes, { level: 6 }) };\n}\n\nexport function zip(entries: Entry[]): Uint8Array {\n let total = 22;\n for (const e of entries) total += 30 + 46 + e.path.length * 2 + e.raw.length;\n const buf = new Uint8Array(total);\n const view = new DataView(buf.buffer);\n const offsets: number[] = [];\n let at = 0;\n for (const e of entries) {\n offsets.push(at);\n view.setUint32(at, 0x04034b50, true);\n view.setUint16(at + 4, e.version, true);\n view.setUint16(at + 6, e.flags & ~8, true);\n view.setUint16(at + 8, e.method, true);\n view.setUint16(at + 10, e.time, true);\n view.setUint16(at + 12, e.date, true);\n view.setUint32(at + 14, e.crc, true);\n view.setUint32(at + 18, e.raw.length, true);\n view.setUint32(at + 22, e.size, true);\n view.setUint16(at + 26, e.path.length, true);\n view.setUint16(at + 28, 0, true);\n buf.set(e.path, at + 30);\n buf.set(e.raw, at + 30 + e.path.length);\n at += 30 + e.path.length + e.raw.length;\n }\n const start = at;\n entries.forEach((e, n) => {\n view.setUint32(at, 0x02014b50, true);\n view.setUint16(at + 4, e.made, true);\n view.setUint16(at + 6, e.version, true);\n view.setUint16(at + 8, e.flags & ~8, true);\n view.setUint16(at + 10, e.method, true);\n view.setUint16(at + 12, e.time, true);\n view.setUint16(at + 14, e.date, true);\n view.setUint32(at + 16, e.crc, true);\n view.setUint32(at + 20, e.raw.length, true);\n view.setUint32(at + 24, e.size, true);\n view.setUint16(at + 28, e.path.length, true);\n view.setUint16(at + 36, e.inner, true);\n view.setUint32(at + 38, e.outer, true);\n view.setUint32(at + 42, offsets[n], true);\n buf.set(e.path, at + 46);\n at += 46 + e.path.length;\n });\n view.setUint32(at, 0x06054b50, true);\n view.setUint16(at + 8, entries.length, true);\n view.setUint16(at + 10, entries.length, true);\n view.setUint32(at + 12, at - start, true);\n view.setUint32(at + 16, start, true);\n return buf.subarray(0, at + 22);\n}\n","import { attr, find, kid, on, parse, type El } from './xml';\nimport { inflate, unzip, type Entry } from './zip';\n\nexport type Fmt = { b: boolean; i: boolean; u: boolean; s: boolean; code: boolean; link: string | null; hl: string | null; color: string | null; size: string | null; font: string | null; rev: string | null };\ntype Mark = { type: string; attrs?: Record<string, unknown> };\ntype Rel = { id: string; type: string; target: string; external: boolean };\n\nexport const plain: Fmt = { b: false, i: false, u: false, s: false, code: false, link: null, hl: null, color: null, size: null, font: null, rev: null };\n\nexport const highlights: Record<string, string> = {\n yellow: 'ffff00', green: '00ff00', cyan: '00ffff', magenta: 'ff00ff', blue: '0000ff', red: 'ff0000', darkBlue: '000080', darkCyan: '008080',\n darkGreen: '008000', darkMagenta: '800080', darkRed: '800000', darkYellow: '808000', darkGray: '808080', lightGray: 'c0c0c0', black: '000000', white: 'ffffff',\n};\n\nconst linkStyle = /^(hyperlink|followedhyperlink|internet link|visited internet link)$/i;\nconst headingName = /^(heading|заголовок|überschrift|titre|título|titolo|nagłówek|kop|rubrik|overskrift|otsikko|nadpis|başlık|címsor|naslov|заглавие|見出し|제목|标题|標題)\\s*(\\d)$/i;\n\nexport function color(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const t = v.trim().toLowerCase();\n let m = /^#?([0-9a-f]{6})$/.exec(t);\n if (m) return '#' + m[1];\n m = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(t);\n if (m) return '#' + m[1] + m[1] + m[2] + m[2] + m[3] + m[3];\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/.exec(t);\n if (m) return '#' + [m[1], m[2], m[3]].map(x => Math.min(255, +x).toString(16).padStart(2, '0')).join('');\n return highlights[v.trim()] ? '#' + highlights[v.trim()] : null;\n}\n\nexport function size(v: unknown): string | null {\n const m = /^\\s*([\\d.]+)\\s*(pt|px)?\\s*$/.exec(String(v ?? ''));\n if (!m || !+m[1]) return null;\n const pt = m[2] === 'px' ? +m[1] * 0.75 : +m[1];\n return `${Math.round(pt * 2) / 2}pt`;\n}\n\nexport function family(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const first = v.split(',')[0].trim().replace(/^[\"']|[\"']$/g, '');\n return first || null;\n}\n\nexport function fmtOf(marks: Mark[] | undefined): Fmt {\n const f = { ...plain };\n for (const m of marks ?? []) {\n const a = m.attrs ?? {};\n if (m.type === 'bold') f.b = true;\n else if (m.type === 'italic') f.i = true;\n else if (m.type === 'underline') f.u = true;\n else if (m.type === 'strike') f.s = true;\n else if (m.type === 'code') f.code = true;\n else if (m.type === 'link' && typeof a.href === 'string' && a.href) f.link = a.href;\n else if (m.type === 'highlight') f.hl = color(a.color) ?? '#ffff00';\n else if (m.type === 'textStyle') {\n f.color = color(a.color);\n f.size = size(a.fontSize);\n f.font = family(a.fontFamily);\n } else if (m.type === 'insertion' || m.type === 'deletion') f.rev = JSON.stringify([m.type === 'insertion' ? 'ins' : 'del', String(a.id ?? ''), String(a.author ?? ''), String(a.date ?? '')]);\n }\n if (f.code) f.font = null;\n return f;\n}\n\nexport function marksOf(f: Fmt): Mark[] | undefined {\n const out: Mark[] = [];\n if (f.b) out.push({ type: 'bold' });\n if (f.i) out.push({ type: 'italic' });\n if (f.u) out.push({ type: 'underline' });\n if (f.s) out.push({ type: 'strike' });\n if (f.code) out.push({ type: 'code' });\n if (f.link) out.push({ type: 'link', attrs: { href: f.link } });\n if (f.hl) out.push({ type: 'highlight', attrs: { color: f.hl } });\n if (f.color || f.size || f.font) out.push({ type: 'textStyle', attrs: { color: f.color, fontSize: f.size, fontFamily: f.font } });\n if (f.rev) {\n const [kind, id, author, date] = JSON.parse(f.rev) as string[];\n out.push({ type: kind === 'ins' ? 'insertion' : 'deletion', attrs: { id, author, date } });\n }\n return out.length ? out : undefined;\n}\n\nexport function keyOf(f: Fmt): string {\n return `${+f.b}${+f.i}${+f.u}${+f.s}${+f.code}|${f.link ?? ''}|${f.hl ?? ''}|${f.color ?? ''}|${f.size ?? ''}|${f.font ?? ''}|${f.rev ?? ''}`;\n}\n\ntype Props = Partial<Fmt> & { hidden?: boolean; style?: string };\n\nexport class Styles {\n byId = new Map<string, El>();\n paragraph: string | null = null;\n private memo = new Map<string, unknown>();\n constructor(readonly s: string, readonly fonts: { major: string | null; minor: string | null }) {\n const root = find(parse(s), 'w:styles');\n for (const el of root?.kids ?? []) {\n if (el.name !== 'w:style') continue;\n const id = attr(s, el, 'w:styleId');\n if (id === null) continue;\n this.byId.set(id, el);\n if (attr(s, el, 'w:type') === 'paragraph' && on(s, el, 'w:default') && attr(s, el, 'w:default') !== null) this.paragraph = id;\n }\n }\n\n private cached<T>(key: string, make: () => T): T {\n if (!this.memo.has(key)) this.memo.set(key, make());\n return this.memo.get(key) as T;\n }\n\n type(id: string): string | null {\n const el = this.byId.get(id);\n return el ? attr(this.s, el, 'w:type') : null;\n }\n\n name(id: string): string {\n const el = this.byId.get(id);\n const n = el && kid(el, 'w:name');\n return n ? attr(this.s, n, 'w:val') ?? id : id;\n }\n\n private chain(id: string | null): El[] {\n const out: El[] = [];\n const seen = new Set<string>();\n while (id && !seen.has(id)) {\n seen.add(id);\n const el = this.byId.get(id);\n if (!el) break;\n out.push(el);\n const base = kid(el, 'w:basedOn');\n id = base ? attr(this.s, base, 'w:val') : null;\n }\n return out;\n }\n\n private pPr<T>(id: string | null, pick: (pPr: El) => T | undefined): T | undefined {\n for (const el of this.chain(id ?? this.paragraph)) {\n const pPr = kid(el, 'w:pPr');\n const v = pPr && pick(pPr);\n if (v !== undefined) return v;\n }\n return undefined;\n }\n\n heading(id: string | null): number | null {\n if (!id) return null;\n return this.cached('h' + id, () => {\n for (const el of this.chain(id)) {\n const n = kid(el, 'w:name');\n const name = n ? attr(this.s, n, 'w:val') ?? '' : '';\n const m = headingName.exec(name.trim());\n if (m) return +m[2] >= 1 ? Math.min(6, +m[2]) : null;\n if (/^title$/i.test(name.trim())) return 1;\n const lvl = kid(el, 'w:pPr') && kid(kid(el, 'w:pPr')!, 'w:outlineLvl');\n if (lvl) return outline(attr(this.s, lvl, 'w:val'));\n }\n return null;\n });\n }\n\n numPr(id: string | null): { num: number; lvl: number } | null {\n return this.cached('n' + id, () => {\n const pr = this.pPr(id, p => kid(p, 'w:numPr'));\n if (!pr) return null;\n const num = kid(pr, 'w:numId');\n const lvl = kid(pr, 'w:ilvl');\n return { num: num ? +(attr(this.s, num, 'w:val') ?? 0) : 0, lvl: lvl ? +(attr(this.s, lvl, 'w:val') ?? 0) : 0 };\n });\n }\n\n jc(id: string | null): string | null {\n return this.cached('j' + id, () => this.pPr(id, p => kid(p, 'w:jc') && attr(this.s, kid(p, 'w:jc')!, 'w:val')) ?? null);\n }\n\n left(id: string | null): number {\n return this.cached('l' + id, () => this.pPr(id, p => {\n const ind = kid(p, 'w:ind');\n const v = ind && (attr(this.s, ind, 'w:left') ?? attr(this.s, ind, 'w:start'));\n return v === null || v === undefined ? undefined : +v;\n }) ?? 0);\n }\n\n char(id: string): Props {\n return this.cached('c' + id, () => {\n const name = this.name(id);\n if (linkStyle.test(name) || linkStyle.test(id)) return {};\n const out: Props = {};\n for (const el of this.chain(id).reverse()) Object.assign(out, props(this.s, kid(el, 'w:rPr'), this.fonts));\n return out;\n });\n }\n\n isLink(id: string | null): boolean {\n return !!id && (linkStyle.test(this.name(id)) || linkStyle.test(id));\n }\n\n find(test: (name: string, id: string) => boolean, type = 'paragraph'): string | null {\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === type && test(this.name(id), id)) return id;\n return null;\n }\n\n headingId(level: number): string | null {\n return this.find(name => headingName.test(name.trim()) && +headingName.exec(name.trim())![2] === level)\n ?? this.find((_, id) => this.heading(id) === level && !/^title$/i.test(this.name(id)));\n }\n\n list(): { name: string; id: string; heading: number | null }[] {\n const out = [];\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === 'paragraph') out.push({ name: this.name(id), id, heading: this.heading(id) });\n return out;\n }\n}\n\nexport function outline(v: string | null): number | null {\n const n = Number(v);\n return v !== null && n >= 0 && n < 9 ? Math.min(6, n + 1) : null;\n}\n\nexport function props(s: string, rPr: El | undefined, fonts: { major: string | null; minor: string | null }): Props {\n const out: Props = {};\n if (!rPr) return out;\n for (const k of rPr.kids) {\n switch (k.name) {\n case 'w:rStyle': out.style = attr(s, k, 'w:val') ?? undefined; break;\n case 'w:b': out.b = on(s, k); break;\n case 'w:i': out.i = on(s, k); break;\n case 'w:u': out.u = on(s, k); break;\n case 'w:strike': case 'w:dstrike': out.s = on(s, k) || !!out.s; break;\n case 'w:vanish': out.hidden = on(s, k); break;\n case 'w:color': {\n const v = attr(s, k, 'w:val');\n out.color = v && v !== 'auto' ? color(v) : null;\n break;\n }\n case 'w:sz': out.size = size(+(attr(s, k, 'w:val') ?? 0) / 2); break;\n case 'w:highlight': {\n const v = attr(s, k, 'w:val') ?? 'none';\n out.hl = highlights[v] ? '#' + highlights[v] : null;\n break;\n }\n case 'w:shd': {\n const v = attr(s, k, 'w:fill');\n if (v && v !== 'auto' && out.hl === undefined) out.hl = color(v);\n break;\n }\n case 'w:rFonts': {\n const theme = attr(s, k, 'w:asciiTheme') ?? attr(s, k, 'w:hAnsiTheme');\n const font = attr(s, k, 'w:ascii') ?? attr(s, k, 'w:hAnsi') ?? (theme ? (theme.startsWith('major') ? fonts.major : fonts.minor) : null);\n if (font) out.font = font;\n break;\n }\n }\n }\n return out;\n}\n\nexport class Numbering {\n nums = new Map<number, { abs: number; starts: Map<number, number> }>();\n abs = new Map<number, Map<number, { fmt: string; start: number; left: number | null }>>();\n maxNum = 0;\n maxAbs = -1;\n constructor(readonly s: string, styles: Styles) {\n const root = find(parse(s), 'w:numbering');\n const links = new Map<number, string>();\n for (const el of root?.kids ?? []) {\n if (el.name === 'w:abstractNum') {\n const id = +(attr(s, el, 'w:abstractNumId') ?? -1);\n this.maxAbs = Math.max(this.maxAbs, id);\n const lvls = new Map<number, { fmt: string; start: number; left: number | null }>();\n for (const l of el.kids) {\n if (l.name !== 'w:lvl') continue;\n const fmt = kid(l, 'w:numFmt');\n const start = kid(l, 'w:start');\n const ind = kid(l, 'w:pPr') && kid(kid(l, 'w:pPr')!, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n lvls.set(+(attr(s, l, 'w:ilvl') ?? 0), { fmt: fmt ? attr(s, fmt, 'w:val') ?? 'decimal' : 'decimal', start: start ? +(attr(s, start, 'w:val') ?? 1) : 1, left: left ? +left : null });\n }\n this.abs.set(id, lvls);\n const link = kid(el, 'w:numStyleLink');\n if (link) links.set(id, attr(s, link, 'w:val') ?? '');\n } else if (el.name === 'w:num') {\n const id = +(attr(s, el, 'w:numId') ?? 0);\n this.maxNum = Math.max(this.maxNum, id);\n const a = kid(el, 'w:abstractNumId');\n const starts = new Map<number, number>();\n for (const o of el.kids) {\n const so = o.name === 'w:lvlOverride' ? kid(o, 'w:startOverride') : undefined;\n if (so) starts.set(+(attr(s, o, 'w:ilvl') ?? 0), +(attr(s, so, 'w:val') ?? 1));\n }\n this.nums.set(id, { abs: a ? +(attr(s, a, 'w:val') ?? -1) : -1, starts });\n }\n }\n for (const [id, style] of links) {\n const pr = styles.numPr(style);\n const target = pr && this.nums.get(pr.num);\n if (target && this.abs.has(target.abs)) this.abs.set(id, this.abs.get(target.abs)!);\n }\n }\n\n level(num: number, lvl: number) {\n const n = this.nums.get(num);\n return n ? this.abs.get(n.abs)?.get(lvl) : undefined;\n }\n\n kind(num: number, lvl: number): 'bulletList' | 'orderedList' | null {\n const l = this.level(num, lvl);\n if (!l || l.fmt === 'none') return null;\n return l.fmt === 'bullet' ? 'bulletList' : 'orderedList';\n }\n\n start(num: number, lvl: number): number {\n return this.nums.get(num)?.starts.get(lvl) ?? this.level(num, lvl)?.start ?? 1;\n }\n}\n\nexport class Pkg {\n entries: Entry[];\n files = new Map<string, Entry>();\n main: string;\n doc: string;\n fp: string;\n rels = new Map<string, Rel>();\n styles: Styles;\n nums: Numbering;\n private texts = new Map<string, string | null>();\n\n constructor(readonly bytes: Uint8Array) {\n this.entries = unzip(bytes);\n for (const e of this.entries) this.files.set(e.name, e);\n const root = this.relsOf('');\n const office = [...root.values()].find(r => r.type.endsWith('/officeDocument'));\n this.main = office ? office.target : 'word/document.xml';\n const doc = this.text(this.main);\n if (doc === null) throw new Error('DOCX file has no document part');\n this.doc = doc;\n if (!/xmlns:w=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/wordprocessingml\\/2006\\/main\"/.test(doc.slice(0, doc.indexOf('>', doc.indexOf('<w:document')) + 1))) throw new Error('DOCX document does not use the w: prefix');\n this.fp = this.files.get(this.main)!.crc.toString(36);\n this.rels = this.relsOf(this.main);\n const theme = this.byType('/theme');\n const t = theme ? this.text(theme.target) ?? '' : '';\n const fonts = { major: /<a:majorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null, minor: /<a:minorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null };\n const styles = this.byType('/styles');\n this.styles = new Styles((styles && this.text(styles.target)) ?? '', fonts);\n const nums = this.byType('/numbering');\n this.nums = new Numbering((nums && this.text(nums.target)) ?? '', this.styles);\n }\n\n part(name: string): Uint8Array {\n return inflate(this.files.get(name)!);\n }\n\n text(name: string): string | null {\n if (!this.texts.has(name)) {\n const e = this.files.get(name);\n this.texts.set(name, e ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(inflate(e)) : null);\n }\n return this.texts.get(name)!;\n }\n\n byType(suffix: string): Rel | undefined {\n for (const r of this.rels.values()) if (r.type.endsWith(suffix) && !r.external) return r;\n return undefined;\n }\n\n relsPath(part: string): string {\n const slash = part.lastIndexOf('/');\n return `${part.slice(0, slash + 1)}_rels/${part.slice(slash + 1)}.rels`;\n }\n\n private relsOf(part: string): Map<string, Rel> {\n const out = new Map<string, Rel>();\n const s = this.text(this.relsPath(part));\n if (!s) return out;\n const dir = part.slice(0, part.lastIndexOf('/') + 1);\n for (const el of find(parse(s), 'Relationships')?.kids ?? []) {\n const id = attr(s, el, 'Id');\n const target = attr(s, el, 'Target') ?? '';\n const external = attr(s, el, 'TargetMode') === 'External';\n if (id) out.set(id, { id, type: attr(s, el, 'Type') ?? '', target: external ? target : resolve(dir, target), external });\n }\n return out;\n }\n}\n\nfunction resolve(dir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : dir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.') out.push(p);\n }\n return out.join('/');\n}\n","import type { JSONContent } from '@tiptap/core';\nimport { keyOf, marksOf, outline, plain, props, type Fmt, type Pkg, type Styles } from './pkg';\nimport { attr, attrs, find, inner, kid, on, opened, parse, unescape, type El } from './xml';\n\nexport type { JSONContent };\n\nexport type Run = { open: string; rPr: string; fmt: Fmt; el: El | null; parent: El | null };\nexport type Wrap = { open: string; close: string; link: string | null; ins: boolean; rev?: string };\nexport type Span = { xml: string; link: string | null };\nexport type Pic = { embed: string; cx: number; cy: number };\nexport type Piece = { text: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; box?: boolean; brk?: 'page' | 'hr'; pic?: Pic; img?: Record<string, unknown>; fld?: string; instr?: string };\nexport type ListCtx = { type: string; depth: number };\n\nexport type Block = {\n ref: string;\n kind: 'p' | 'tbl' | 'lock' | 'pb' | 'hr' | 'toc';\n el: El;\n start: number;\n end: number;\n lead: string;\n node: JSONContent;\n pieces: Piece[];\n list: { num: number; lvl: number; type: string; start: number } | null;\n ctx: ListCtx | null;\n task: boolean | null;\n quote: boolean;\n level: number | null;\n rows: Row[];\n cols: number;\n};\nexport type Row = { ref: string; el: El; lead: string; head: string; cells: Cell[]; node: JSONContent };\nexport type Cell = { ref: string; el: El; lead: string; col: number; span: number; vm: 'restart' | 'continue' | null; blocks: Block[]; tail: string; node: JSONContent | null };\n\nconst blank = () => ({ align: null, indent: 0, ref: null });\nconst mimes: Record<string, string> = { png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', bmp: 'image/bmp', webp: 'image/webp', svg: 'image/svg+xml' };\n\nexport function align(v: string | null | undefined): string | null {\n if (v === 'center') return 'center';\n if (v === 'right' || v === 'end') return 'right';\n if (v === 'both' || v === 'distribute' || (v && /Kashida|thaiDistribute/.test(v))) return 'justify';\n return null;\n}\n\nfunction base64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(bin);\n}\n\nexport class Reader {\n s: string;\n n = 0;\n refs = new Map<string, Block | Row | Cell>();\n private counters = new Map<number, number[]>();\n private fmts = new Map<string, Fmt & { hidden?: boolean; style?: string }>();\n private media = new Map<string, string | null>();\n\n constructor(readonly pkg: Pkg) {\n this.s = pkg.doc;\n }\n\n ref(): string {\n return `${this.pkg.fp}.${(this.n++).toString(36)}`;\n }\n\n body() {\n const body = find(parse(this.s), 'w:body');\n if (!body) throw new Error('DOCX document has no body');\n const { list, tail } = this.blocks(body);\n return { body, list, tail, sect: kid(body, 'w:sectPr') };\n }\n\n fmt(rPr: El | undefined): Fmt & { hidden?: boolean; style?: string } {\n const key = rPr ? this.s.slice(rPr.start, rPr.end) : '';\n let f = this.fmts.get(key);\n if (!f) {\n const direct = props(this.s, rPr, this.pkg.styles.fonts);\n const style = direct.style ? this.pkg.styles.char(direct.style) : {};\n f = { ...plain, ...style, ...direct };\n this.fmts.set(key, f);\n }\n return f;\n }\n\n blocks(parent: El): { list: Block[]; tail: number } {\n const s = this.s;\n const list: Block[] = [];\n let prev = parent.open;\n let group: Block | null = null;\n let depth = 0;\n for (const k of parent.kids) {\n if (k.name === 'w:tcPr') {\n prev = k.end;\n continue;\n }\n if (k.name === 'w:sectPr') break;\n if (group) {\n group.end = k.end;\n depth += net(s.slice(k.start, k.end));\n if (depth <= 0) {\n if (/<w:instrText\\b[^>]*>\\s*TOC\\b/.test(s.slice(group.start, group.el.end))) {\n const toc = this.toc(group.el, group.end);\n toc.lead = group.lead;\n list[list.length - 1] = toc;\n }\n group = null;\n }\n prev = k.end;\n continue;\n }\n let b: Block | null = null;\n if (k.name === 'w:p') b = this.paragraph(k);\n else if (k.name === 'w:tbl') b = this.table(k);\n else if (k.name === 'w:sdt' && sdtLabel(s, k) === 'Table of contents') b = this.toc(k);\n else if (k.name === 'w:sdt' || k.name === 'w:customXml' || k.name === 'w:altChunk') b = this.lock(k, sdtLabel(s, k));\n if (!b) continue;\n b.lead = s.slice(prev, k.start);\n prev = k.end;\n list.push(b);\n if (b.kind === 'lock' && k.name === 'w:p') {\n depth = net(s.slice(k.start, k.end));\n if (depth > 0) group = b;\n }\n }\n return { list, tail: prev };\n }\n\n private block(kind: Block['kind'], el: El, node: JSONContent, ref: string): Block {\n const b: Block = { ref, kind, el, start: el.start, end: el.end, lead: '', node, pieces: [], list: null, ctx: null, task: null, quote: false, level: null, rows: [], cols: 0 };\n this.refs.set(ref, b);\n return b;\n }\n\n toc(el: El, end = el.end): Block {\n const ref = this.ref();\n const { entries, title } = contents(this.s.slice(el.start, end), this.pkg.styles);\n const b = this.block('toc', el, { type: 'toc', attrs: { entries: JSON.stringify(entries), title, align: null, indent: 0, ref } }, ref);\n b.end = end;\n return b;\n }\n\n lock(el: El, label: string, ref = 'lock:' + this.ref()): Block {\n return this.block('lock', el, { type: 'paragraph', attrs: { align: null, indent: 0, ref }, content: [{ type: 'text', text: `[${label}]` }] }, ref);\n }\n\n paragraph(el: El): Block {\n const s = this.s;\n const st = { lock: null as string | null, task: null as boolean | null, box: false, open: false };\n const pieces: Piece[] = [];\n this.walk(el.kids, [], el, pieces, st);\n const fields = this.fields(pieces, st);\n if (st.lock || st.open || !fields) {\n const label = st.lock ?? (/\\bTOC\\b/.test(pieces.map(p => p.instr ?? '').join('')) ? 'Table of contents' : 'Field');\n const text = st.open ? '' : pieces.map(p => p.text ?? '').join('');\n const b = this.lock(el, label);\n if (text.trim()) b.node.content![0].text += ' ' + text.trim();\n return b;\n }\n const final = fields;\n for (const p of final) {\n const src = p.pic && this.src(p.pic.embed);\n if (!src) continue;\n const meta = Object.fromEntries(attrs(/<wp:docPr\\b[^>]*>/.exec(p.raw!)?.[0] ?? '<x>'));\n p.img = { src, alt: meta.descr ?? null, title: meta.title ?? null, width: Math.round(p.pic!.cx / 9525), height: Math.round(p.pic!.cy / 9525) };\n }\n const pPr = kid(el, 'w:pPr');\n const styles = this.pkg.styles;\n const sEl = pPr && kid(pPr, 'w:pStyle');\n const style = sEl ? attr(s, sEl, 'w:val') : null;\n const jc = pPr && kid(pPr, 'w:jc');\n const visible = final.some(p => p.text !== null || p.img);\n if (!visible && final.some(p => p.pic)) return this.lock(el, 'Picture');\n const ref = this.ref();\n if (!visible && final.some(p => p.brk === 'page')) return this.block('pb', el, { type: 'pageBreak', attrs: { align: null, indent: 0, ref } }, ref);\n const bdr = pPr && kid(pPr, 'w:pBdr');\n if (!visible && (final.some(p => p.brk === 'hr') || (bdr && kid(bdr, 'w:bottom') && !kid(bdr, 'w:top')))) return this.block('hr', el, { type: 'horizontalRule', attrs: { align: null, indent: 0, ref } }, ref);\n\n const ol = pPr && kid(pPr, 'w:outlineLvl');\n const level = ol ? outline(attr(s, ol, 'w:val')) : styles.heading(style);\n const np = pPr && kid(pPr, 'w:numPr');\n let num: { num: number; lvl: number } | null = null;\n if (np) {\n const id = kid(np, 'w:numId');\n const lv = kid(np, 'w:ilvl');\n const fromStyle = styles.numPr(style);\n num = { num: id ? +(attr(s, id, 'w:val') ?? 0) : fromStyle?.num ?? 0, lvl: lv ? +(attr(s, lv, 'w:val') ?? 0) : fromStyle?.lvl ?? 0 };\n } else num = styles.numPr(style);\n const type = num && num.num ? this.pkg.nums.kind(num.num, num.lvl) : null;\n const isList = !!type && st.task === null && level === null;\n const ind = pPr && kid(pPr, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n const indent = isList ? 0 : Math.max(0, Math.round((left !== null && left !== undefined ? +left : styles.left(style)) / 720));\n const base = { align: align(jc ? attr(s, jc, 'w:val') : styles.jc(style)), indent, ref };\n const node: JSONContent = level ? { type: 'heading', attrs: { level, ...base } } : { type: 'paragraph', attrs: base };\n const content = inline(final);\n if (content.length) node.content = content;\n const b = this.block('p', el, node, ref);\n b.pieces = final;\n b.level = level;\n b.task = level === null ? st.task : null;\n b.quote = !isList && b.task === null && level === null && !!style && /quote|block text|цитата/i.test(styles.name(style));\n if (isList) {\n const counts = this.counters.get(num!.num) ?? [];\n counts[num!.lvl] = counts[num!.lvl] === undefined ? this.pkg.nums.start(num!.num, num!.lvl) : counts[num!.lvl] + 1;\n counts.length = num!.lvl + 1;\n this.counters.set(num!.num, counts);\n b.list = { num: num!.num, lvl: num!.lvl, type: type!, start: counts[num!.lvl] };\n }\n return b;\n }\n\n private src(embed: string): string | null {\n if (!this.media.has(embed)) {\n const rel = this.pkg.rels.get(embed);\n const ext = rel && !rel.external ? rel.target.split('.').pop()!.toLowerCase() : '';\n const e = rel && this.pkg.files.get(rel.target);\n this.media.set(embed, e && mimes[ext] ? `data:${mimes[ext]};base64,${base64(this.pkg.part(rel!.target))}` : null);\n }\n return this.media.get(embed)!;\n }\n\n private walk(kids: El[], ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n for (const k of kids) {\n const name = k.name;\n if (name === 'w:pPr') continue;\n if (name === 'w:r') this.run(k, ctx, parent, out, st);\n else if (name === 'w:hyperlink' && k.end !== k.open) {\n const id = attr(s, k, 'r:id');\n const anchor = attr(s, k, 'w:anchor');\n const rel = id ? this.pkg.rels.get(id) : undefined;\n const href = (rel ? rel.target : '') + (anchor ? '#' + anchor : '') || null;\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: '</w:hyperlink>', link: href, ins: false }], k, out, st);\n } else if ((name === 'w:ins' || name === 'w:moveTo' || name === 'w:del' || name === 'w:moveFrom') && k.end !== k.open) {\n const rev = JSON.stringify([name === 'w:ins' || name === 'w:moveTo' ? 'ins' : 'del', attr(s, k, 'w:id') ?? '', attr(s, k, 'w:author') ?? '', attr(s, k, 'w:date') ?? '']);\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: `</${name}>`, link: null, ins: true, rev }], k, out, st);\n } else if ((name === 'w:smartTag' || name === 'w:customXml' || name === 'w:dir' || name === 'w:bdo') && k.end !== k.open) {\n const pr = k.kids[0] && /Pr$/.test(k.kids[0].name) ? k.kids[0] : null;\n this.walk(pr ? k.kids.slice(1) : k.kids, [...ctx, { open: s.slice(k.start, pr ? pr.end : k.open), close: `</${name}>`, link: null, ins: false }], k, out, st);\n } else if (name === 'w:sdt') {\n const pr = kid(k, 'w:sdtPr');\n const box = pr && find(pr, 'w14:checkbox');\n if (box && st.task === null && !out.some(p => p.text !== null)) {\n const c = find(box, 'w14:checked');\n st.task = !!c && on(s, c, 'w14:val');\n st.box = true;\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null, box: true });\n } else {\n const content = kid(k, 'w:sdtContent');\n const inside: Piece[] = [];\n if (content) this.walk(content.kids, ctx, content, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, null);\n }\n } else if (name === 'w:fldSimple') {\n const inside: Piece[] = [];\n this.walk(k.kids, ctx, k, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, hyperlink(attr(s, k, 'w:instr') ?? ''));\n } else if (name === 'm:oMath') {\n const text = s.slice(k.start, k.end).match(/<m:t(?:\\s[^>]*)?>[^<]*<\\/m:t>/g)?.map(t => inner(t, parse(t).kids[0])).join('') ?? '';\n this.span(s.slice(k.start, k.end), text ? [{ text, raw: null, run: null, ctx, span: null }] : [], out, ctx, null);\n } else if (name === 'm:oMathPara') st.lock = 'Equation';\n else out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n }\n }\n\n private span(xml: string, inside: Piece[], out: Piece[], ctx: Wrap[], link: string | null) {\n const shown = inside.filter(p => p.text !== null);\n if (!shown.length) {\n out.push({ text: null, raw: xml, run: null, ctx, span: null });\n return;\n }\n const span: Span = { xml, link };\n for (const p of shown) out.push({ ...p, span });\n }\n\n private run(k: El, ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n const rPrEl = kid(k, 'w:rPr');\n const f = this.fmt(rPrEl);\n if (f.hidden || k.end === k.open) {\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n return;\n }\n const run: Run = { open: opened(s, k), rPr: rPrEl ? s.slice(rPrEl.start, rPrEl.end) : '', fmt: f, el: k, parent };\n const push = (text: string | null, raw: string | null, extra?: Partial<Piece>) => {\n if (text !== null && st.box) {\n st.box = false;\n if (text.startsWith(' ') && raw === null) {\n out.push({ text: null, raw: '<w:t xml:space=\"preserve\"> </w:t>', run, ctx, span: null, box: true });\n text = text.slice(1);\n if (!text) return;\n }\n }\n out.push({ text, raw, run, ctx, span: null, ...extra });\n };\n for (const c of k.kids) {\n const raw = s.slice(c.start, c.end);\n switch (c.name) {\n case 'w:rPr': break;\n case 'w:t': case 'w:delText': {\n const text = inner(s, c).replace(/[\\r\\n]/g, ' ');\n if (text) push(text, null);\n break;\n }\n case 'w:tab': case 'w:ptab': push('\\t', raw); break;\n case 'w:cr': push('\\n', raw); break;\n case 'w:noBreakHyphen': push('\\u2011', raw); break;\n case 'w:softHyphen': push('\\u00AD', raw); break;\n case 'w:br': {\n const type = attr(s, c, 'w:type');\n if (type === 'page') push(null, raw, { brk: 'page' });\n else if (type === 'column') push(null, raw);\n else push('\\n', raw);\n break;\n }\n case 'w:fldChar': push(null, raw, { fld: attr(s, c, 'w:fldCharType') ?? '' }); break;\n case 'w:instrText': push(null, raw, { instr: inner(s, c) }); break;\n case 'w:drawing': {\n const pic = picture(raw);\n if (pic) push(null, raw, { pic });\n else st.lock = shape(raw);\n break;\n }\n case 'w:pict': {\n const pic = /textbox/.test(raw) ? null : vml(raw);\n if (/o:hr=\"t\"/.test(raw)) push(null, raw, { brk: 'hr' });\n else if (pic) push(null, raw, { pic });\n else st.lock = /textbox/.test(raw) ? 'Text box' : 'Shape';\n break;\n }\n case 'mc:AlternateContent': st.lock = shape(raw); break;\n case 'w:object': st.lock = 'Object'; break;\n default: push(null, raw);\n }\n }\n }\n\n private fields(pieces: Piece[], st: { open: boolean }): Piece[] | null {\n if (!pieces.some(p => p.fld)) return pieces;\n const out: Piece[] = [];\n let depth = 0;\n let begin = -1;\n for (let i = 0; i < pieces.length; i++) {\n const p = pieces[i];\n if (p.fld === 'begin') {\n if (depth++ === 0) begin = i;\n } else if (p.fld === 'end' && depth > 0 && --depth === 0) {\n const a = pieces[begin].run!;\n const z = p.run!;\n if (a.parent !== z.parent) return null;\n let first = begin;\n while (first > 0 && pieces[first - 1].run === a) first--;\n let last = i;\n while (last + 1 < pieces.length && pieces[last + 1].run === z) last++;\n out.length -= begin - first;\n const shown: Piece[] = [];\n const code: boolean[] = [];\n let hidden = 0;\n let instr = '';\n for (let j = first; j <= last; j++) {\n const q = pieces[j];\n if (q.fld === 'begin') {\n code.push(true);\n hidden++;\n } else if (q.fld === 'separate' && code[code.length - 1]) {\n code[code.length - 1] = false;\n hidden--;\n } else if (q.fld === 'end') {\n if (code.pop()) hidden--;\n } else if (q.instr && code.length === 1) instr += q.instr;\n else if (q.text !== null && hidden === 0) shown.push(q);\n }\n this.span(this.s.slice(a.el!.start, z.el!.end), shown, out, pieces[first].ctx, hyperlink(instr));\n i = last;\n } else if (depth === 0) out.push(p);\n }\n if (depth > 0) st.open = true;\n return out;\n }\n\n table(el: El): Block {\n const s = this.s;\n if (el.kids.some(k => k.name === 'w:sdt' || k.name === 'w:customXml' || (k.name === 'w:tr' && k.kids.some(c => c.name === 'w:sdt' || c.name === 'w:customXml')))) return this.lock(el, 'Table');\n const ref = this.ref();\n const pr = kid(el, 'w:tblPr');\n const jc = pr && kid(pr, 'w:jc');\n const node: JSONContent = { type: 'table', attrs: { align: align(jc ? attr(s, jc, 'w:val') : null), indent: 0, ref }, content: [] };\n const b = this.block('tbl', el, node, ref);\n const grid = kid(el, 'w:tblGrid');\n b.cols = grid ? grid.kids.filter(k => k.name === 'w:gridCol').length : 0;\n const open: (JSONContent | null)[] = [];\n let prev = grid ? grid.end : pr ? pr.end : el.open;\n for (const tr of el.kids) {\n if (tr.name !== 'w:tr') continue;\n const rref = this.ref();\n const row: Row = { ref: rref, el: tr, lead: s.slice(prev, tr.start), head: '', cells: [], node: { type: 'tableRow', attrs: { align: null, indent: 0, ref: rref }, content: [] } };\n this.refs.set(rref, row);\n prev = tr.end;\n const trPr = kid(tr, 'w:trPr');\n const header = !!trPr && on(s, kid(trPr, 'w:tblHeader'));\n const before = trPr && kid(trPr, 'w:gridBefore');\n let col = before ? +(attr(s, before, 'w:val') ?? 0) : 0;\n let last = tr.open;\n for (const c of tr.kids) {\n if (c.name === 'w:tc') break;\n if (c.name === 'w:trPr' || c.name === 'w:tblPrEx') last = c.end;\n }\n row.head = s.slice(tr.open, last);\n for (const tc of tr.kids) {\n if (tc.name !== 'w:tc') continue;\n const tcPr = kid(tc, 'w:tcPr');\n const gs = tcPr && kid(tcPr, 'w:gridSpan');\n const vmEl = tcPr && kid(tcPr, 'w:vMerge');\n const vmVal = vmEl ? attr(s, vmEl, 'w:val') : null;\n const span = gs ? Math.max(1, +(attr(s, gs, 'w:val') ?? 1)) : 1;\n let vm: Cell['vm'] = vmEl ? (vmVal === 'restart' ? 'restart' : 'continue') : null;\n if (vm === 'continue' && !open[col]) vm = null;\n const cref = this.ref();\n const inside = this.blocks(tc);\n const cell: Cell = { ref: cref, el: tc, lead: s.slice(last, tc.start), col, span, vm, blocks: inside.list, tail: s.slice(inside.tail, tc.close), node: null };\n last = tc.end;\n this.refs.set(cref, cell);\n if (vm === 'continue') open[col]!.attrs!.rowspan++;\n else {\n const content = assemble(inside.list);\n cell.node = { type: header ? 'tableHeader' : 'tableCell', attrs: { colspan: span, rowspan: 1, align: null, indent: 0, ref: cref }, content: content.length ? content : [{ type: 'paragraph', attrs: blank() }] };\n row.node.content!.push(cell.node);\n for (let c = col; c < col + span; c++) open[c] = null;\n if (vm === 'restart') open[col] = cell.node;\n }\n col += span;\n row.cells.push(cell);\n }\n b.rows.push(row);\n node.content!.push(row.node);\n }\n return b;\n }\n}\n\nfunction net(xml: string): number {\n let n = 0;\n if (xml.indexOf('w:fldCharType') === -1) return 0;\n for (const m of xml.matchAll(/w:fldCharType=\"(begin|end)\"/g)) n += m[1] === 'begin' ? 1 : -1;\n return n;\n}\n\nfunction hyperlink(instr: string): string | null {\n const m = /^\\s*HYPERLINK\\s+(?:\"([^\"]*)\")?(?:.*?\\\\l\\s+\"([^\"]*)\")?/.exec(instr);\n if (!m || (!m[1] && !m[2])) return null;\n return (m[1] ?? '') + (m[2] ? '#' + m[2] : '');\n}\n\nfunction contents(xml: string, styles: Styles): { entries: [number, string][]; title: string | null } {\n const entries: [number, string][] = [];\n let title: string | null = null;\n let begun = false;\n for (const p of xml.match(/<w:p\\b(?:[^>]*\\/>|[\\s\\S]*?<\\/w:p>)/g) ?? []) {\n const id = /<w:pStyle w:val=\"([^\"]*)\"/.exec(p)?.[1] ?? '';\n const level = Number(/^toc ?(\\d)$/i.exec(styles.name(id).trim())?.[1] ?? /^TOC(\\d)$/i.exec(id)?.[1] ?? 0);\n begun ||= level > 0 || /w:fldCharType=\"begin\"/.test(p);\n const text = (p.replace(/<w:instrText\\b[\\s\\S]*?<\\/w:instrText>/g, '').match(/<w:t(?:\\s[^>]*)?>[^<]*<\\/w:t>|<w:tab\\/>/g) ?? [])\n .map(m => m === '<w:tab/>' ? '\\t' : unescape(m.replace(/<[^>]*>/g, ''))).join('');\n const shown = (text.includes('\\t') ? text.slice(0, text.lastIndexOf('\\t')) : text).trim();\n if (!shown) continue;\n if (begun) entries.push([level || 1, shown]);\n else title ??= shown;\n }\n return { entries, title };\n}\n\nfunction sdtLabel(s: string, el: El): string {\n if (el.name === 'w:altChunk') return 'Imported content';\n const xml = s.slice(el.start, Math.min(el.end, el.start + 4000));\n if (/w:docPartGallery w:val=\"Table of Contents\"/.test(xml) || /TOC \\\\/.test(s.slice(el.start, el.end))) return 'Table of contents';\n const alias = /<w:alias w:val=\"([^\"]*)\"/.exec(xml);\n return alias ? alias[1] : 'Content control';\n}\n\nfunction picture(raw: string): Pic | null {\n if (!/drawingml\\/2006\\/picture\"/.test(raw) || /wps:|wpg:|wpc:|c:chart|dgm:|txbxContent/.test(raw)) return null;\n const embed = /<a:blip\\b[^>]*\\br:embed=\"([^\"]*)\"/.exec(raw);\n const ext = /<wp:extent\\b[^>]*\\bcx=\"(\\d+)\"[^>]*\\bcy=\"(\\d+)\"/.exec(raw);\n return embed && ext ? { embed: embed[1], cx: +ext[1], cy: +ext[2] } : null;\n}\n\nfunction vml(raw: string): Pic | null {\n const embed = /<v:imagedata\\b[^>]*\\br:id=\"([^\"]*)\"/.exec(raw);\n const style = /<v:shape\\b[^>]*\\bstyle=\"([^\"]*)\"/.exec(raw)?.[1] ?? '';\n const emu = (key: string) => {\n const m = new RegExp(`(?:^|;)\\\\s*${key}:\\\\s*([\\\\d.]+)(pt|px|in|cm|mm)?`).exec(style);\n return m ? Math.round(+m[1] * (({ px: 9525, in: 914400, cm: 360000, mm: 36000 } as Record<string, number>)[m[2]] ?? 12700)) : 0;\n };\n return embed ? { embed: embed[1], cx: emu('width'), cy: emu('height') } : null;\n}\n\nfunction shape(raw: string): string {\n if (/txbxContent|v:textbox/.test(raw)) return 'Text box';\n if (/c:chart/.test(raw)) return 'Chart';\n if (/dgm:/.test(raw)) return 'Diagram';\n if (/m:oMath/.test(raw)) return 'Equation';\n return /drawingml\\/2006\\/picture\"/.test(raw) ? 'Picture' : 'Shape';\n}\n\nexport function fmtAt(p: Piece): Fmt {\n const f = p.run ? p.run.fmt : plain;\n let link: string | null = null;\n let rev: string | null = null;\n for (const w of p.ctx) {\n if (w.link) link = w.link;\n if (w.rev) rev = w.rev;\n }\n link ??= p.span?.link ?? null;\n return link === f.link && rev === f.rev ? f : { ...f, link, rev };\n}\n\nexport function inline(pieces: Piece[]): JSONContent[] {\n const out: JSONContent[] = [];\n let key = '';\n for (const p of pieces) {\n if (p.img) {\n out.push({ type: 'image', attrs: { ...p.img } });\n key = '';\n continue;\n }\n if (p.text === null) continue;\n if (p.text === '\\n') {\n out.push({ type: 'hardBreak' });\n key = '';\n continue;\n }\n const f = fmtAt(p);\n const k = keyOf(f);\n const last = out[out.length - 1];\n if (last && last.type === 'text' && k === key) last.text += p.text;\n else {\n const node: JSONContent = { type: 'text', text: p.text };\n const marks = marksOf(f);\n if (marks) node.marks = marks;\n out.push(node);\n key = k;\n }\n }\n return out;\n}\n\nexport function assemble(list: Block[]): JSONContent[] {\n const out: JSONContent[] = [];\n for (let i = 0; i < list.length; ) {\n const b = list[i];\n let j = i + 1;\n if (b.list) {\n while (j < list.length && list[j].list && !(list[j].list!.num !== b.list.num && list[j].list!.lvl <= b.list.lvl)) j++;\n out.push(nest(list.slice(i, j)));\n } else if (b.task !== null) {\n while (j < list.length && list[j].task !== null) j++;\n out.push({ type: 'taskList', attrs: blank(), content: list.slice(i, j).map(t => ({ type: 'taskItem', attrs: { checked: t.task, ...blank() }, content: [t.node] })) });\n } else if (b.quote) {\n while (j < list.length && list[j].quote) j++;\n out.push({ type: 'blockquote', attrs: blank(), content: list.slice(i, j).map(q => q.node) });\n } else out.push(b.node);\n i = j;\n }\n return out;\n}\n\nfunction nest(list: Block[]): JSONContent {\n const make = (b: Block): JSONContent => ({ type: b.list!.type, attrs: b.list!.type === 'orderedList' ? { start: b.list!.start, ...blank() } : blank(), content: [] });\n const root = make(list[0]);\n const stack = [{ list: root, lvl: list[0].list!.lvl }];\n for (const b of list) {\n let top = stack[stack.length - 1];\n while (b.list!.lvl < top.lvl && stack.length > 1) {\n stack.pop();\n top = stack[stack.length - 1];\n }\n if (b.list!.lvl > top.lvl && top.list.content!.length) {\n const sub = make(b);\n top.list.content![top.list.content!.length - 1].content!.push(sub);\n stack.push({ list: sub, lvl: b.list!.lvl });\n top = stack[stack.length - 1];\n }\n b.ctx = { type: top.list.type!, depth: stack.length - 1 };\n top.list.content!.push({ type: 'listItem', attrs: blank(), content: [b.node] });\n }\n return root;\n}\n","export function diff(a: string[], b: string[]): Int32Array {\n const map = new Int32Array(b.length).fill(-1);\n let p = 0;\n while (p < a.length && p < b.length && a[p] === b[p]) map[p] = p++;\n let q = 0;\n while (q < a.length - p && q < b.length - p && a[a.length - 1 - q] === b[b.length - 1 - q]) {\n map[b.length - 1 - q] = a.length - 1 - q;\n q++;\n }\n const n = a.length - p - q;\n const m = b.length - p - q;\n if (!n || !m) return map;\n const max = Math.min(n + m, 1200);\n const off = max + 1;\n const v = new Int32Array(2 * max + 3);\n const trace: Int32Array[] = [];\n for (let d = 0; d <= max; d++) {\n trace.push(v.slice(off - d - 1, off + d + 2));\n for (let k = -d; k <= d; k += 2) {\n let x = k === -d || (k !== d && v[off + k - 1] < v[off + k + 1]) ? v[off + k + 1] : v[off + k - 1] + 1;\n let y = x - k;\n while (x < n && y < m && a[p + x] === b[p + y]) {\n x++;\n y++;\n }\n v[off + k] = x;\n if (x >= n && y >= m) {\n for (let e = d; e > 0; e--) {\n const t = trace[e];\n const at = (j: number) => t[j + e + 1];\n const down = k === -e || (k !== e && at(k - 1) < at(k + 1));\n const pk = down ? k + 1 : k - 1;\n const px = at(pk);\n const py = px - pk;\n while (x > px && y > py) map[p + --y] = p + --x;\n x = px;\n y = py;\n k = pk;\n }\n while (x > 0 && y > 0) map[p + --y] = p + --x;\n return map;\n }\n }\n }\n return map;\n}\n","import { diff } from './diff';\nimport { color, fmtOf, highlights, keyOf, plain, Pkg, type Fmt } from './pkg';\nimport { align, assemble, fmtAt, Reader, type Block, type Cell, type JSONContent, type Row, type Run, type Span, type Wrap } from './read';\nimport { attr, attrs, escape, kid, opened, parse, rebuild } from './xml';\nimport { entry, zip, type Entry } from './zip';\n\nconst P = ['w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore', 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers', 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku', 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE', 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid', 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents', 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment', 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle', 'w:rPr', 'w:sectPr', 'w:pPrChange'];\nconst R = ['w:rStyle', 'w:rFonts', 'w:b', 'w:bCs', 'w:i', 'w:iCs', 'w:caps', 'w:smallCaps', 'w:strike', 'w:dstrike', 'w:outline', 'w:shadow', 'w:emboss', 'w:imprint', 'w:noProof', 'w:snapToGrid', 'w:vanish', 'w:webHidden', 'w:color', 'w:spacing', 'w:w', 'w:kern', 'w:position', 'w:sz', 'w:szCs', 'w:highlight', 'w:u', 'w:effect', 'w:bdr', 'w:shd', 'w:fitText', 'w:vertAlign', 'w:rtl', 'w:cs', 'w:em', 'w:lang', 'w:eastAsianLayout', 'w:specVanish', 'w:oMath'];\nconst TC = ['w:cnfStyle', 'w:tcW', 'w:gridSpan', 'w:hMerge', 'w:vMerge', 'w:tcBorders', 'w:shd', 'w:noWrap', 'w:tcMar', 'w:textDirection', 'w:tcFitText', 'w:vAlign', 'w:hideMark', 'w:headers', 'w:cellIns', 'w:cellDel', 'w:cellMerge', 'w:tcPrChange'];\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst special: Record<string, string> = { '\\t': '<w:tab/>', '\\n': '<w:br/>', '\\u2011': '<w:noBreakHyphen/>', '\\u00AD': '<w:softHyphen/>' };\n\ntype Out = { kind: 'p' | 'pb' | 'hr' | 'tbl' | 'code' | 'toc'; node: JSONContent; list: { type: string; depth: number; group: number; start: number } | null; task: boolean | null; quote: boolean; cont: { depth: number; group: number } | null };\ntype Unit = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; idx: number; fmt: Fmt; base: Fmt; box?: boolean; img?: Record<string, unknown> };\ntype Glyph = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; u: Unit | null; fmt: Fmt; xml?: string };\nexport type Img = { bytes: Uint8Array; mime: string };\n\nconst keys: Record<string, [string, unknown][]> = {\n paragraph: [['align', null], ['indent', 0]],\n heading: [['level', 1], ['align', null], ['indent', 0]],\n table: [['align', null]],\n tableCell: [['colspan', 1], ['rowspan', 1]],\n tableHeader: [['colspan', 1], ['rowspan', 1]],\n orderedList: [['start', 1]],\n taskItem: [['checked', false]],\n codeBlock: [['language', null]],\n toc: [['entries', '[]'], ['title', null]],\n};\n\nfunction value(key: string, v: unknown): unknown {\n if (v === undefined || v === '' || v === null) return null;\n if (key === 'align') return v === 'left' ? null : v;\n if (key === 'width' || key === 'height') return Math.round(Number(v)) || null;\n if (key === 'indent' || key === 'level' || key === 'colspan' || key === 'rowspan' || key === 'start') return Number(v) || 0;\n if (key === 'checked') return !!v;\n return v;\n}\n\nfunction sig(n: JSONContent): string {\n if (n.type === 'text' || n.type === 'hardBreak') return inlineSig([n]);\n const a = n.attrs ?? {};\n let out = `${n.type}(${(keys[n.type ?? ''] ?? []).map(([k, d]) => { const v = value(k, a[k]); return v === value(k, d) ? '' : `${k}=${JSON.stringify(v)}`; }).join(',')}${a.ref ? '#' + a.ref : ''})`;\n const kids = n.content ?? [];\n if (kids.length && (kids[0].type === 'text' || kids[0].type === 'hardBreak' || kids.some(k => k.type === 'text'))) return out + inlineSig(kids);\n out += '[' + kids.map(sig).join(',') + ']';\n return out;\n}\n\nfunction inlineSig(kids: JSONContent[]): string {\n let out = '';\n let key: string | null = null;\n for (const k of kids) {\n if (k.type === 'text') {\n if (!k.text) continue;\n const next = keyOf(fmtOf(k.marks as never));\n out += (next === key ? '' : `\\u0001${next}\\u0002`) + k.text;\n key = next;\n } else {\n out += `\\u0003${k.type}${k.type === 'image' ? picture(k.attrs ?? {}) : ''}\\u0004`;\n key = null;\n }\n }\n return out;\n}\n\nfunction picture(a: Record<string, unknown>): string {\n return JSON.stringify([a.src ?? null, a.alt || null, a.title || null, Math.round(Number(a.width)) || null, Math.round(Number(a.height)) || null]);\n}\n\nlet groups = 0;\n\nfunction flatten(content: JSONContent[], out: Out[] = [], quote = false): Out[] {\n for (const node of content) {\n const t = node.type;\n const add = (kind: Out['kind'], extra: Partial<Out> = {}) => out.push({ kind, node, list: null, task: null, quote, cont: null, ...extra });\n if (t === 'paragraph' || t === 'heading') add('p');\n else if (t === 'bulletList' || t === 'orderedList') listed(node, 0, ++groups, out, quote);\n else if (t === 'taskList') {\n for (const li of node.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: null, task: !!li.attrs?.checked, quote, cont: null });\n else flatten([c], out, quote);\n });\n }\n } else if (t === 'blockquote') flatten(node.content ?? [], out, true);\n else if (t === 'table') add('tbl');\n else if (t === 'image') out.push({ kind: 'p', node: { type: 'paragraph', attrs: { align: null, indent: 0, ref: null }, content: [node] }, list: null, task: null, quote, cont: null });\n else if (t === 'pageBreak') add('pb');\n else if (t === 'toc') add('toc');\n else if (t === 'horizontalRule') add('hr');\n else if (t === 'codeBlock') add('code');\n else if (node.content) flatten(node.content, out, quote);\n }\n return out;\n}\n\nfunction listed(list: JSONContent, depth: number, group: number, out: Out[], quote: boolean) {\n for (const li of list.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: { type: list.type!, depth, group, start: Number(list.attrs?.start ?? 1) || 1 }, task: null, quote, cont: null });\n else if (c.type === 'bulletList' || c.type === 'orderedList') listed(c, depth + 1, group, out, quote);\n else if (c.type === 'paragraph' || c.type === 'heading') out.push({ kind: 'p', node: c, list: null, task: null, quote, cont: { depth, group } });\n else flatten([c], out, quote);\n });\n }\n}\n\ntype Slot = { col: number; span: number; cell: JSONContent | null; from: JSONContent | null };\n\nfunction grid(rows: JSONContent[]): Slot[][] {\n const taken: number[] = [];\n const from: JSONContent[] = [];\n const span = (c: JSONContent) => Math.max(1, Number(c.attrs?.colspan ?? 1) || 1);\n return rows.map(row => {\n const cells = row.content ?? [];\n const slots: Slot[] = [];\n let col = 0;\n let i = 0;\n while (i < cells.length || taken.some((t, k) => k >= col && t > 0)) {\n if ((taken[col] ?? 0) > 0) {\n const f = from[col];\n const n = span(f);\n for (let k = col; k < col + n; k++) taken[k]--;\n slots.push({ col, span: n, cell: null, from: f });\n col += n;\n continue;\n }\n if (i >= cells.length) {\n col++;\n continue;\n }\n const c = cells[i++];\n const n = span(c);\n const rs = Math.max(1, Number(c.attrs?.rowspan ?? 1) || 1);\n slots.push({ col, span: n, cell: c, from: null });\n if (rs > 1) for (let k = col; k < col + n; k++) {\n taken[k] = rs - 1;\n from[k] = c;\n }\n col += n;\n }\n return slots;\n });\n}\n\nfunction dims(bytes: Uint8Array): [number, number] | null {\n const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (bytes[0] === 0x89 && bytes[1] === 0x50) return [v.getUint32(16), v.getUint32(20)];\n if (bytes[0] === 0x47 && bytes[1] === 0x49) return [v.getUint16(6, true), v.getUint16(8, true)];\n if (bytes[0] === 0xff && bytes[1] === 0xd8) {\n for (let i = 2; i + 9 < bytes.length; ) {\n if (bytes[i] !== 0xff) return null;\n const m = bytes[i + 1];\n if (m >= 0xc0 && m <= 0xcf && m !== 0xc4 && m !== 0xc8 && m !== 0xcc) return [v.getUint16(i + 7), v.getUint16(i + 5)];\n i += 2 + v.getUint16(i + 2);\n }\n }\n return null;\n}\n\nfunction meta(tag: string, img: Record<string, unknown>): string {\n const extra = `${img.alt ? ` descr=\"${escape(String(img.alt))}\"` : ''}${img.title ? ` title=\"${escape(String(img.title))}\"` : ''}`;\n return tag.replace(/\\s(descr|title)=\"[^\"]*\"/g, '').replace(/\\s*\\/?>$/, end => extra + end);\n}\n\nfunction checked(xml: string, on: boolean): string {\n const yes = /w14:checkedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2612';\n const no = /w14:uncheckedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2610';\n const [from, to] = on ? [no, yes] : [yes, no];\n let out = /<w14:checked\\b/.test(xml) ? xml.replace(/(<w14:checked\\b[^>]*w14:val=\")[^\"]*\"/, `$1${on ? 1 : 0}\"`) : xml.replace(/(<w14:checkbox\\b[^>]*>)/, `$1<w14:checked w14:val=\"${on ? 1 : 0}\"/>`);\n const at = out.indexOf('<w:sdtContent');\n if (at === -1) return out;\n const tail = out.slice(at).replace(new RegExp(`w:char=\"${from}\"`, 'i'), `w:char=\"${to}\"`).replace(`>${String.fromCharCode(parseInt(from, 16))}<`, `>${String.fromCharCode(parseInt(to, 16))}<`);\n out = out.slice(0, at) + tail;\n return out;\n}\n\nexport class Writer {\n s: string;\n r: Reader;\n claimed = new Map<JSONContent, Block | Row | Cell>();\n used = new Set<Block | Row | Cell>();\n carry = new Map<Block, string>();\n left = new Map<Cell, string>();\n rels: string[] = [];\n private relIds = new Set<string>();\n private links = new Map<string, string>();\n private media: { name: string; bytes: Uint8Array }[] = [];\n private types = new Set<string>();\n private numbering: { abs: string[]; nums: string[] } = { abs: [], nums: [] };\n private kinds = new Map<number, string>();\n private nextNum: number;\n private nextAbs: number;\n private styleXml: string[] = [];\n private groupNum = new Map<number, { num: number; base: number }>();\n private extra = new Map<string, number>();\n private docPr: number;\n private body!: ReturnType<Reader['body']>;\n private last: Out['kind'] | null = null;\n private wraps = new Map<string, Wrap>();\n private srcs: Map<string, string> | null = null;\n private tocs = false;\n private revs = new Map<string, Wrap>();\n private nextRev: number;\n\n constructor(readonly pkg: Pkg, private images: Map<string, Img>) {\n this.r = new Reader(pkg);\n this.s = pkg.doc;\n for (const id of pkg.rels.keys()) this.relIds.add(id);\n this.nextNum = pkg.nums.maxNum + 1;\n this.nextAbs = pkg.nums.maxAbs + 1;\n let max = 0;\n for (const m of this.s.matchAll(/<wp:docPr\\b[^>]*\\bid=\"(\\d+)\"/g)) max = Math.max(max, +m[1]);\n this.docPr = max + 1;\n this.nextRev = Math.max(0, ...[...this.s.matchAll(/\\bw:id=\"(\\d+)\"/g)].map(m => +m[1])) + 1;\n }\n\n run(doc: JSONContent): Uint8Array | null {\n const s = this.s;\n this.body = this.r.body();\n const { list, tail, body } = this.body;\n assemble(list);\n this.claim(doc.content ?? []);\n let rest = '';\n this.carryOver(list, x => (rest = x));\n let xml = this.container(flatten(doc.content ?? []), list, null);\n if (this.last === 'tbl' && list[list.length - 1]?.kind !== 'tbl') xml += '<w:p/>';\n const text = s.slice(0, body.open) + xml + rest + s.slice(tail);\n const changed = new Map<string, string | Uint8Array>();\n if (text !== s) changed.set(this.pkg.main, text);\n if (this.rels.length) {\n const path = this.pkg.relsPath(this.pkg.main);\n const old = this.pkg.text(path) ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>`;\n changed.set(path, old.replace(/<\\/Relationships>\\s*$/, this.rels.join('') + '</Relationships>'));\n }\n if (this.numbering.abs.length || this.numbering.nums.length) {\n const rel = this.pkg.byType('/numbering');\n let n = rel ? this.pkg.text(rel.target) : null;\n const path = rel ? rel.target : 'word/numbering.xml';\n if (n === null) {\n n = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"></w:numbering>`;\n this.types.add(`<Override PartName=\"/${path}\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>`);\n }\n const at = n.search(/<w:num\\b[\\s>]/);\n const abs = this.numbering.abs.join('');\n n = at === -1 ? n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, abs + '$1') : n.slice(0, at) + abs + n.slice(at);\n n = n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, this.numbering.nums.join('') + '$1');\n changed.set(path, n);\n if (!rel) {\n const id = this.relId();\n const path2 = this.pkg.relsPath(this.pkg.main);\n const old = (changed.get(path2) as string | undefined) ?? this.pkg.text(path2)!;\n changed.set(path2, old.replace(/<\\/Relationships>\\s*$/, `<Relationship Id=\"${id}\" Type=\"${REL}/numbering\" Target=\"numbering.xml\"/></Relationships>`));\n }\n }\n const settings = this.tocs && this.pkg.byType('/settings');\n const listed = settings && this.pkg.text(settings.target);\n if (settings && listed && !/<w:updateFields\\b/.test(listed)) {\n const at = listed.search(/<(?:w:hdrShapeDefaults|w:footnotePr|w:endnotePr|w:compat|w:docVars|w:rsids|m:mathPr|w:attachedSchema|w:themeFontLang|w:clrSchemeMapping|w:doNotIncludeSubdocsInStats|w:doNotAutoCompressPictures|w:forceUpgrade|w:captions|w:readModeInkLockDown|w:smartTagType|sl:schemaLibrary|w:shapeDefaults|w:doNotEmbedSmartTags|w:decimalSymbol|w:listSeparator)\\b|<\\/w:settings>/);\n changed.set(settings.target, listed.slice(0, at) + '<w:updateFields w:val=\"true\"/>' + listed.slice(at));\n }\n if (this.styleXml.length) {\n const rel = this.pkg.byType('/styles');\n if (rel) changed.set(rel.target, this.pkg.text(rel.target)!.replace(/<\\/w:styles>\\s*$/, this.styleXml.join('') + '</w:styles>'));\n }\n for (const m of this.media) {\n changed.set(m.name, m.bytes);\n const ext = m.name.split('.').pop()!.toLowerCase();\n const ct = this.pkg.text('[Content_Types].xml') ?? '';\n if (!new RegExp(`<Default\\\\b[^>]*Extension=\"${ext}\"`, 'i').test(ct)) this.types.add(`<Default Extension=\"${ext}\" ContentType=\"${({ jpg: 'image/jpeg', svg: 'image/svg+xml' } as Record<string, string>)[ext] ?? 'image/' + ext}\"/>`);\n }\n if (this.types.size) changed.set('[Content_Types].xml', (this.pkg.text('[Content_Types].xml') ?? '').replace(/<\\/Types>\\s*$/, [...this.types].join('') + '</Types>'));\n if (!changed.size) return null;\n const enc = new TextEncoder();\n const main = this.pkg.files.get(this.pkg.main)!;\n const out: Entry[] = this.pkg.entries.map(e => {\n const v = changed.get(e.name);\n if (v === undefined) return e;\n changed.delete(e.name);\n return entry(e.name, typeof v === 'string' ? enc.encode(v) : v, e);\n });\n for (const [name, v] of changed) out.push(entry(name, typeof v === 'string' ? enc.encode(v) : v, main));\n return zip(out);\n }\n\n private claim(nodes: JSONContent[]) {\n for (const n of nodes) {\n const ref = n.attrs?.ref;\n const o = typeof ref === 'string' ? this.r.refs.get(ref) : undefined;\n if (o && !this.used.has(o) && this.fits(n, o)) {\n this.used.add(o);\n this.claimed.set(n, o);\n }\n if (n.content) this.claim(n.content);\n }\n }\n\n private fits(n: JSONContent, o: Block | Row | Cell): boolean {\n if ('cells' in o) return n.type === 'tableRow';\n if ('col' in o) return (n.type === 'tableCell' || n.type === 'tableHeader') && o.node !== null;\n if (o.kind === 'p') return n.type === 'paragraph' || n.type === 'heading';\n if (o.kind === 'lock') return n.type === 'paragraph';\n if (o.kind === 'toc') return n.type === 'toc';\n return ({ pb: 'pageBreak', hr: 'horizontalRule', tbl: 'table' } as Record<string, string>)[o.kind] === n.type;\n }\n\n private carryOver(list: Block[], end: (x: string) => void) {\n let pending = '';\n for (const b of list) {\n if (this.used.has(b)) {\n if (pending) this.carry.set(b, pending);\n pending = '';\n } else {\n if (b.lead.trim()) pending += b.lead;\n const pPr = b.el.name === 'w:p' && kid(b.el, 'w:pPr');\n if (pPr && kid(pPr, 'w:sectPr')) pending += `<w:p>${this.s.slice(pPr.start, pPr.end)}</w:p>`;\n }\n for (const row of b.rows) for (const c of row.cells) this.carryOver(c.blocks, x => this.left.set(c, x));\n }\n if (pending) end(pending);\n }\n\n private container(outs: Out[], list: Block[], fallback: Block | null): string {\n const pairs = outs.map(o => ({ o, b: (this.claimed.get(o.node) ?? null) as Block | null }));\n const lists = new Map<number, { o: Out; b: Block | null }[]>();\n for (const p of pairs) if (p.o.list) lists.get(p.o.list.group)?.push(p) ?? lists.set(p.o.list.group, [p]);\n for (const [group, mine] of lists) this.decide(group, mine);\n let xml = '';\n this.last = null;\n pairs.forEach(({ o, b }, i) => {\n const near = (test: (b: Block) => boolean): Block | null => {\n for (let d = 1; d < pairs.length; d++) {\n const x = pairs[i - d]?.b;\n if (x && test(x)) return x;\n const y = pairs[i + d]?.b;\n if (y && test(y)) return y;\n }\n for (const x of list) if (test(x)) return x;\n return fallback && test(fallback) ? fallback : null;\n };\n const prefix = b ? (this.carry.get(b) ?? '') + b.lead : '';\n xml += prefix + this.emit(o, b, near, fallback);\n this.last = o.kind;\n });\n return xml;\n }\n\n private emit(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const s = this.s;\n if (b && b.kind === 'lock') return s.slice(b.start, b.end);\n if (o.kind === 'p') return this.para(o, b, near, fallback);\n if (o.kind === 'pb') return b ? s.slice(b.start, b.end) : '<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>';\n if (o.kind === 'hr') return b ? s.slice(b.start, b.end) : '<w:p><w:pPr><w:pBdr><w:bottom w:val=\"single\" w:sz=\"6\" w:space=\"1\" w:color=\"auto\"/></w:pBdr></w:pPr></w:p>';\n if (o.kind === 'tbl') return this.table(o, b, near);\n if (o.kind === 'toc') return b && sig(o.node) === sig(b.node) ? s.slice(b.start, b.end) : this.toc(o.node);\n return this.code(o);\n }\n\n private toc(node: JSONContent): string {\n this.tocs = true;\n const styles = this.pkg.styles;\n const sect = this.body.sect;\n const twips = (el: ReturnType<typeof kid>, name: string, fallback: number) => Number((el && attr(this.s, el, name)) ?? fallback);\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const width = twips(size, 'w:w', 12240) - twips(mar, 'w:left', 1440) - twips(mar, 'w:right', 1440);\n const list = JSON.parse(String(node.attrs?.entries ?? '[]')) as [number, string][];\n const begin = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> TOC \\\\o \"1-3\" \\\\h \\\\z \\\\u </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>';\n const end = '<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const style = (test: RegExp, fallback: string) => escape(styles.find(name => test.test(name.trim())) ?? fallback);\n const title = node.attrs?.title ? `<w:p><w:pPr><w:pStyle w:val=\"${style(/^toc heading$/i, 'TOCHeading')}\"/></w:pPr><w:r><w:t xml:space=\"preserve\">${escape(String(node.attrs.title))}</w:t></w:r></w:p>` : '';\n const rows = list.length\n ? list.map(([level, text], i) => `<w:p><w:pPr><w:pStyle w:val=\"${style(new RegExp(`^toc ${level}$`, 'i'), `TOC${level}`)}\"/><w:tabs><w:tab w:val=\"right\" w:leader=\"dot\" w:pos=\"${width}\"/></w:tabs></w:pPr>${i ? '' : begin}<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>${i === list.length - 1 ? end : ''}</w:p>`).join('')\n : `<w:p>${begin}<w:r><w:t>No table of contents entries found.</w:t></w:r>${end}</w:p>`;\n return `<w:sdt><w:sdtPr><w:docPartObj><w:docPartGallery w:val=\"Table of Contents\"/><w:docPartUnique/></w:docPartObj></w:sdtPr><w:sdtContent>${title}${rows}</w:sdtContent></w:sdt>`;\n }\n\n private decide(group: number, mine: { o: Out; b: Block | null }[]) {\n const top = mine.find(p => p.o.list!.depth === 0) ?? mine[0];\n const type = top.o.list!.type;\n const hit = mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type && p.o.list!.depth === 0 && this.kindOf(p.b.list.num, p.b.list.lvl) === type)\n ?? mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type);\n if (hit) this.groupNum.set(group, { num: hit.b!.list!.num, base: Math.max(0, hit.b!.list!.lvl - hit.o.list!.depth) });\n else this.groupNum.set(group, { num: this.newNum(type, top.o.list!.start), base: 0 });\n }\n\n private kindOf(num: number, lvl: number): string | null {\n return this.kinds.get(num) ?? this.pkg.nums.kind(num, lvl);\n }\n\n private newNum(type: string, start: number): number {\n let abs = -1;\n for (const b of this.r.refs.values()) if ('kind' in b && b.list && b.list.lvl === 0 && b.list.type === type) {\n abs = this.pkg.nums.nums.get(b.list.num)?.abs ?? -1;\n break;\n }\n if (abs === -1) for (const [id, lvls] of this.pkg.nums.abs) if ((lvls.get(0)?.fmt === 'bullet') === (type === 'bulletList') && lvls.get(0)?.fmt !== 'none') {\n abs = id;\n break;\n }\n if (abs === -1) {\n abs = this.nextAbs++;\n const fmts = type === 'bulletList' ? ['bullet'] : ['decimal', 'lowerLetter', 'lowerRoman'];\n const lvls = Array.from({ length: 9 }, (_, l) => {\n const fmt = fmts[l % fmts.length];\n const text = fmt === 'bullet' ? ['•', '◦', '▪'][l % 3] : `%${l + 1}.`;\n return `<w:lvl w:ilvl=\"${l}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"${fmt}\"/><w:lvlText w:val=\"${text}\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"${720 * (l + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }).join('');\n this.numbering.abs.push(`<w:abstractNum w:abstractNumId=\"${abs}\"><w:multiLevelType w:val=\"hybridMultilevel\"/>${lvls}</w:abstractNum>`);\n }\n const num = this.nextNum++;\n this.kinds.set(num, type);\n this.numbering.nums.push(`<w:num w:numId=\"${num}\"><w:abstractNumId w:val=\"${abs}\"/>${type === 'orderedList' ? `<w:lvlOverride w:ilvl=\"0\"><w:startOverride w:val=\"${start}\"/></w:lvlOverride>` : ''}</w:num>`);\n return num;\n }\n\n private listPr(o: Out, b: Block | null): { num: number; lvl: number } | null {\n if (!o.list) return null;\n const g = this.groupNum.get(o.list.group)!;\n if (b?.list && b.ctx && b.ctx.type === o.list.type && b.ctx.depth === o.list.depth && (o.list.depth > 0 || b.list.num === g.num)) return b.list;\n const lvl = Math.min(8, g.base + o.list.depth);\n if (this.kindOf(g.num, lvl) === o.list.type) return { num: g.num, lvl };\n const key = `${o.list.group}:${o.list.type}`;\n if (!this.extra.has(key)) this.extra.set(key, this.newNum(o.list.type, o.list.start));\n return { num: this.extra.get(key)!, lvl };\n }\n\n private kindTest(o: Out): (b: Block) => boolean {\n const level = o.node.type === 'heading' ? Number(o.node.attrs?.level ?? 1) : null;\n if (o.task !== null) return b => b.kind === 'p' && b.task !== null;\n if (level) return b => b.kind === 'p' && b.level === level;\n if (o.list) return b => b.kind === 'p' && !!b.list && b.ctx?.type === o.list!.type;\n if (o.quote) return b => b.kind === 'p' && b.quote;\n return b => b.kind === 'p' && !b.list && b.task === null && !b.level && !b.quote;\n }\n\n private para(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const pr = this.listPr(o, b);\n const same = b && o.cont === null && o.quote === b.quote && (o.task ?? null) === b.task && (pr ? !!b.list && pr.num === b.list.num && pr.lvl === b.list.lvl : !b.list);\n if (b && same && sig(o.node) === sig(b.node)) return this.s.slice(b.start, b.end);\n const src = b ?? near(this.kindTest(o)) ?? (fallback?.kind === 'p' ? fallback : null);\n return (b ? opened(this.s, b.el) : '<w:p>') + this.pPr(o, b, src, pr) + this.inline(o, b, src, near) + '</w:p>';\n }\n\n private pPr(o: Out, b: Block | null, src: Block | null, pr: { num: number; lvl: number } | null): string {\n const s = this.s;\n const styles = this.pkg.styles;\n const el = src && kid(src.el, 'w:pPr');\n let xml = el ? s.slice(el.start, el.end) : '';\n const set: Record<string, string | null> = {};\n if (!b && xml) {\n const rPr = kid(el!, 'w:rPr');\n xml = rebuild(xml, 'w:pPr', P, { 'w:sectPr': null, 'w:pPrChange': null, 'w:rPr': rPr ? rebuild(s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null }) || null : null });\n }\n const root = xml ? parse(xml).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:pStyle');\n const was = { style: styleEl ? attr(xml, styleEl, 'w:val') : null, level: src?.level ?? null, quote: src?.quote ?? false, list: src?.list ?? null };\n let style = was.style;\n const level = o.node.type === 'heading' ? Math.min(6, Math.max(1, Number(o.node.attrs?.level ?? 1))) : null;\n if (level !== was.level) {\n set['w:outlineLvl'] = null;\n if (level) style = this.headingStyle(level);\n else if (styles.heading(style)) style = null;\n }\n if (!level && o.quote !== was.quote) style = o.quote ? this.quoteStyle() : null;\n if (pr) {\n if (!(was.list && was.list.num === pr.num && was.list.lvl === pr.lvl)) set['w:numPr'] = `<w:numPr><w:ilvl w:val=\"${pr.lvl}\"/><w:numId w:val=\"${pr.num}\"/></w:numPr>`;\n if (!was.list) {\n set['w:ind'] = null;\n if (!src) style = styles.find(name => /^list paragraph$/i.test(name));\n }\n } else if (was.list || get('w:numPr')) {\n set['w:numPr'] = null;\n if (styles.numPr(style)) style = null;\n }\n if (style !== was.style) set['w:pStyle'] = style ? `<w:pStyle w:val=\"${escape(style)}\"/>` : null;\n const jcEl = 'w:jc' in set ? undefined : get('w:jc');\n const direct = jcEl ? attr(xml, jcEl, 'w:val') : null;\n const want = value('align', o.node.attrs?.align) as string | null;\n if (align(direct ?? styles.jc(style)) !== want) {\n set['w:jc'] = align(styles.jc(style)) === want ? null : `<w:jc w:val=\"${({ center: 'center', right: 'right', justify: 'both' } as Record<string, string>)[want ?? ''] ?? 'left'}\"/>`;\n }\n if (!pr) {\n const indEl = 'w:ind' in set ? undefined : get('w:ind');\n const list = indEl ? attrs(xml.slice(indEl.start, indEl.open)).filter(([k]) => k !== 'w:left' && k !== 'w:start') : [];\n const left = indEl ? attr(xml, indEl, 'w:left') ?? attr(xml, indEl, 'w:start') : null;\n const target = o.cont !== null ? this.contLeft(o) : 720 * (Number(o.node.attrs?.indent ?? 0) || 0);\n const now = left !== null ? +left : styles.left(style);\n if (o.cont !== null ? now !== target : Math.max(0, Math.round(now / 720)) !== Math.round(target / 720)) {\n if (target !== styles.left(style)) list.unshift(['w:left', String(target)]);\n set['w:ind'] = list.length ? `<w:ind ${list.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n }\n return Object.keys(set).length ? rebuild(xml, 'w:pPr', P, set) : xml;\n }\n\n private contLeft(o: Out): number {\n const g = this.groupNum.get(o.cont!.group);\n const left = g ? this.pkg.nums.level(g.num, g.base + o.cont!.depth)?.left : null;\n return left ?? 720 * (o.cont!.depth + 1);\n }\n\n private headingStyle(level: number): string {\n const found = this.pkg.styles.headingId(level);\n if (found) return found;\n const id = this.pkg.styles.byId.has(`Heading${level}`) ? `Heading${level}W` : `Heading${level}`;\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n const size = [32, 28, 26, 24, 22, 22][level - 1];\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"heading ${level}\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"9\"/><w:qFormat/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"${level - 1}\"/></w:pPr><w:rPr><w:b/><w:bCs/><w:sz w:val=\"${size}\"/><w:szCs w:val=\"${size}\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private quoteStyle(): string {\n const found = this.pkg.styles.find(name => /^quote$/i.test(name)) ?? this.pkg.styles.find(name => /quote/i.test(name));\n if (found) return found;\n const id = this.pkg.styles.byId.has('Quote') ? 'QuoteW' : 'Quote';\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"Quote\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"29\"/><w:qFormat/><w:pPr><w:spacing w:before=\"200\" w:after=\"160\"/><w:ind w:left=\"864\" w:right=\"864\"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val=\"404040\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private markRun(b: Block): { run: Run; fmt: Fmt } {\n const pPr = kid(b.el, 'w:pPr');\n const rPr = pPr && kid(pPr, 'w:rPr');\n if (!rPr) return { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n const xml = rebuild(this.s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null });\n const fmt = this.r.fmt(rPr);\n return { run: { open: '<w:r>', rPr: xml, fmt, el: null, parent: null }, fmt };\n }\n\n private inline(o: Out, b: Block | null, src: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const units: Unit[] = [];\n const counts = new Map<Run, number>();\n for (const p of b ? b.pieces : []) {\n let n = p.run ? counts.get(p.run) ?? 0 : 0;\n const fmt = fmtAt(p);\n const base = p.span ? fmtAt({ ...p, span: null }) : fmt;\n if (p.img) units.push({ ch: '\\uFFFC', raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, img: p.img });\n else if (p.text === null) units.push({ ch: null, raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, box: p.box });\n else if (p.raw !== null) units.push({ ch: p.text, raw: p.raw, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n else for (const ch of p.text) units.push({ ch, raw: null, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n if (p.run) counts.set(p.run, n);\n }\n const A = units.filter(u => u.ch !== null);\n const B: { ch: string; fmt: Fmt; key: string; img?: Record<string, unknown> }[] = [];\n let lastFmt = plain;\n for (const n of o.node.content ?? []) {\n if (n.type === 'text') {\n const f = fmtOf(n.marks as never);\n const k = keyOf(f);\n lastFmt = f;\n for (const ch of n.text ?? '') B.push({ ch: ch === '\\r' ? '\\n' : ch, fmt: f, key: k });\n } else if (n.type === 'hardBreak') B.push({ ch: '\\n', fmt: lastFmt, key: keyOf(lastFmt) });\n else if (n.type === 'image') B.push({ ch: '\\uFFFC', fmt: lastFmt, key: keyOf(lastFmt), img: n.attrs ?? {} });\n }\n const boxes = units.filter(u => u.box);\n let box: string | null = null;\n if (o.task !== null && !boxes.some(u => !u.run)) {\n const tpl = near(x => x.task !== null) ?? [...this.r.refs.values()].find((x): x is Block => 'kind' in x && x.task !== null) ?? null;\n const sdt = tpl?.pieces.find(p => p.box && !p.run)?.raw;\n box = checked(sdt ?? '<w:sdt><w:sdtPr><w14:checkbox xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\"><w14:checked w14:val=\"0\"/><w14:checkedState w14:val=\"2612\" w14:font=\"MS Gothic\"/><w14:uncheckedState w14:val=\"2610\" w14:font=\"MS Gothic\"/></w14:checkbox></w:sdtPr><w:sdtContent><w:r><w:rPr><w:rFonts w:ascii=\"MS Gothic\" w:eastAsia=\"MS Gothic\" w:hAnsi=\"MS Gothic\" w:hint=\"eastAsia\"/></w:rPr><w:t>☐</w:t></w:r></w:sdtContent></w:sdt>', o.task);\n B.unshift({ ch: ' ', fmt: B[0]?.fmt ?? plain, key: B[0]?.key ?? keyOf(plain) });\n }\n const map = diff(A.map(u => u.ch!), B.map(x => x.ch));\n const back = new Int32Array(A.length).fill(-1);\n map.forEach((i, j) => { if (i >= 0) back[i] = j; });\n const intact = new Set<Span>();\n const spans = new Map<Span, number[]>();\n A.forEach((u, i) => { if (u.span) spans.get(u.span)?.push(i) ?? spans.set(u.span, [i]); });\n for (const [sp, idx] of spans) {\n const j0 = back[idx[0]];\n if (idx.every((i, k) => back[i] === j0 + k && j0 >= 0 && B[back[i]].key === keyOf(A[i].fmt))) intact.add(sp);\n }\n const slot = new Int32Array(A.length + 1);\n for (let k = 1; k <= A.length; k++) slot[k] = back[k - 1] >= 0 ? back[k - 1] + 1 : slot[k - 1];\n const at: Unit[][] = Array.from({ length: B.length + 1 }, () => []);\n let chars = 0;\n for (const u of units) {\n if (u.ch !== null) chars++;\n else if (!u.box || o.task !== null) at[slot[chars]].push(u);\n }\n const paraBase = b ? this.markRun(b) : this.firstRun(src);\n const out: Glyph[] = [];\n if (box) out.push({ ch: null, raw: box, run: null, ctx: [], u: null, fmt: plain });\n this.wraps.clear();\n for (const u of units) for (const w of u.ctx) if (w.link && !this.wraps.has(w.link)) this.wraps.set(w.link, w);\n const lastChar = () => { for (let k = out.length - 1; k >= 0; k--) if (out[k].ch !== null) return out[k]; return null; };\n const next = new Int32Array(B.length + 1).fill(-1);\n for (let k = B.length - 1; k >= 0; k--) next[k] = map[k] >= 0 ? map[k] : next[k + 1];\n for (let j = 0; j <= B.length; j++) {\n for (const u of at[j]) out.push({ ch: null, raw: u.box && !u.run && b && b.task !== o.task ? checked(u.raw!, !!o.task) : u.raw, run: u.run, ctx: u.ctx, u, fmt: u.fmt });\n if (j === B.length) break;\n const i = map[j];\n const want = B[j];\n if (want.img) {\n const u = i >= 0 ? A[i] : null;\n if (u?.img) {\n const kept = picture(u.img) === picture(want.img);\n out.push({ ch: u.ch, raw: kept ? u.raw : this.patch(u.raw!, u.img, want.img), run: u.run, ctx: u.ctx, u: kept ? u : null, fmt: u.fmt });\n } else out.push({ ch: want.ch, raw: this.drawing(want.img), run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, ctx: [], u: null, fmt: plain });\n continue;\n }\n if (i >= 0) {\n const u = A[i];\n if (u.span && intact.has(u.span)) {\n if (i === 0 || A[i - 1].span !== u.span) out.push({ ch: null, raw: null, run: null, ctx: u.ctx, u: null, fmt: u.fmt, xml: u.span.xml });\n continue;\n }\n const from = u.span ? u.base : u.fmt;\n const keep = u.ch === '\\n' || keyOf(from) === want.key;\n const fmt = keep ? from : want.fmt;\n const run = keep && u.run ? u.run : this.derive(u.run ?? paraBase.run, from, want.fmt);\n out.push({ ch: u.ch, raw: u.raw, run, ctx: this.revised(this.linked(u.ctx, fmt.link, lastChar()), fmt.rev), u: keep && u.run ? u : null, fmt });\n } else {\n const left = lastChar();\n const right = next[j + 1] >= 0 ? A[next[j + 1]] : null;\n const base = left ? { run: left.run!, fmt: left.fmt } : right ? { run: right.run ?? paraBase.run, fmt: right.span ? right.base : right.fmt } : paraBase;\n const run = keyOf(base.fmt) === want.key ? base.run : this.derive(base.run, base.fmt, want.fmt);\n const shared: Wrap[] = [];\n if (left && right) for (let k = 0; k < left.ctx.length && left.ctx[k] === right.ctx[k]; k++) if (!left.ctx[k].link) shared.push(left.ctx[k]);\n out.push({ ch: want.ch, raw: null, run, ctx: this.revised(this.linked(shared, want.fmt.link, left), want.fmt.rev), u: null, fmt: want.fmt });\n }\n }\n let xml = '';\n let stack: Wrap[] = [];\n let cur: { run: Run; glyphs: Glyph[] } | null = null;\n const flush = () => {\n if (cur) xml += this.runXml(cur.run, cur.glyphs, counts);\n cur = null;\n };\n const sync = (ctx: Wrap[]) => {\n let k = 0;\n while (k < stack.length && k < ctx.length && stack[k] === ctx[k]) k++;\n if (k === stack.length && k === ctx.length) return;\n flush();\n for (let x = stack.length - 1; x >= k; x--) xml += stack[x].close;\n for (let x = k; x < ctx.length; x++) xml += ctx[x].open;\n stack = ctx;\n };\n for (const g of out) {\n sync(g.ctx);\n if (g.xml || !g.run) {\n flush();\n xml += g.xml ?? g.raw ?? '';\n continue;\n }\n if (!cur || cur.run !== g.run) {\n flush();\n cur = { run: g.run, glyphs: [] };\n }\n cur.glyphs.push(g);\n }\n flush();\n sync([]);\n return xml;\n }\n\n private firstRun(src: Block | null): { run: Run; fmt: Fmt } {\n const p = src?.pieces.find(x => x.text !== null && x.run && !x.span);\n if (p) return { run: { ...p.run!, open: '<w:r>', el: null }, fmt: p.run!.fmt };\n return src ? this.markRun(src) : { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n }\n\n private linked(ctx: Wrap[], link: string | null, left: Glyph | null): Wrap[] {\n let cur: string | null = null;\n for (const w of ctx) if (w.link) cur = w.link;\n if (cur === link) return ctx;\n const out = ctx.filter(w => !w.link);\n if (!link) return out;\n let wrap = left?.ctx.find(w => w.link === link) ?? this.wraps.get(link);\n if (!wrap) {\n const tag = link.startsWith('#') ? `<w:hyperlink w:anchor=\"${escape(link.slice(1))}\" w:history=\"1\">` : `<w:hyperlink r:id=\"${this.link(link)}\" w:history=\"1\">`;\n wrap = { open: tag, close: '</w:hyperlink>', link, ins: false };\n this.wraps.set(link, wrap);\n }\n const at = out.findIndex(w => w.ins);\n return at === -1 ? [...out, wrap] : [...out.slice(0, at), wrap, ...out.slice(at)];\n }\n\n private revised(ctx: Wrap[], rev: string | null): Wrap[] {\n const out = ctx.filter(w => !w.rev || w.rev === rev);\n if (!rev || out.some(w => w.rev === rev)) return out;\n let wrap = this.revs.get(rev);\n if (!wrap) {\n const [kind, , author, date] = JSON.parse(rev) as string[];\n const tag = kind === 'ins' ? 'w:ins' : 'w:del';\n wrap = { open: `<${tag} w:id=\"${this.nextRev++}\" w:author=\"${escape(author || 'Documents')}\" w:date=\"${escape(date || new Date().toISOString().replace(/\\.\\d+Z$/, 'Z'))}\">`, close: `</${tag}>`, link: null, ins: true, rev };\n this.revs.set(rev, wrap);\n }\n return [...out, wrap];\n }\n\n private link(href: string): string {\n for (const r of this.pkg.rels.values()) if (r.external && r.target === href && r.type.endsWith('/hyperlink')) return r.id;\n if (!this.links.has(href)) {\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/hyperlink\" Target=\"${escape(href)}\" TargetMode=\"External\"/>`);\n this.links.set(href, id);\n }\n return this.links.get(href)!;\n }\n\n private relId(): string {\n let n = this.relIds.size + 1;\n while (this.relIds.has(`rId${n}`)) n++;\n this.relIds.add(`rId${n}`);\n return `rId${n}`;\n }\n\n private derive(run: Run, from: Fmt, to: Fmt): Run {\n const cache = ((run as Run & { derived?: Map<string, Run> }).derived ??= new Map());\n const key = keyOf(from) + '>' + keyOf(to);\n if (!cache.has(key)) cache.set(key, { open: run.open, rPr: this.delta(run.rPr, from, to), fmt: to, el: null, parent: null });\n return cache.get(key)!;\n }\n\n private delta(rPr: string, from: Fmt, to: Fmt): string {\n const root = rPr ? parse(rPr).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:rStyle');\n const style = styleEl ? attr(rPr, styleEl, 'w:val') : null;\n const sf = style ? this.pkg.styles.char(style) : {};\n const set: Record<string, string | null> = {};\n const toggle = (on: boolean, was: boolean, name: string, cs: string, given: boolean | undefined) => {\n if (on === was) return;\n set[name] = on ? `<${name}/>` : given ? `<${name} w:val=\"0\"/>` : null;\n if (!on) set[cs] = null;\n };\n toggle(to.b, from.b, 'w:b', 'w:bCs', sf.b);\n toggle(to.i, from.i, 'w:i', 'w:iCs', sf.i);\n if (to.u !== from.u) set['w:u'] = to.u ? '<w:u w:val=\"single\"/>' : sf.u ? '<w:u w:val=\"none\"/>' : null;\n if (to.s !== from.s) {\n set['w:strike'] = to.s ? '<w:strike/>' : sf.s ? '<w:strike w:val=\"0\"/>' : null;\n if (!to.s) set['w:dstrike'] = null;\n }\n if (to.color !== from.color) set['w:color'] = to.color ? `<w:color w:val=\"${to.color.slice(1).toUpperCase()}\"/>` : sf.color ? '<w:color w:val=\"auto\"/>' : null;\n if (to.size !== from.size) {\n const hp = to.size ? Math.round(parseFloat(to.size) * 2) : 0;\n set['w:sz'] = hp ? `<w:sz w:val=\"${hp}\"/>` : null;\n set['w:szCs'] = hp ? `<w:szCs w:val=\"${hp}\"/>` : null;\n }\n if (to.hl !== from.hl) {\n const name = to.hl ? Object.keys(highlights).find(k => '#' + highlights[k] === to.hl) : undefined;\n set['w:highlight'] = name ? `<w:highlight w:val=\"${name}\"/>` : null;\n const shd = get('w:shd');\n if (to.hl && !name) set['w:shd'] = `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${to.hl.slice(1).toUpperCase()}\"/>`;\n else if (shd && color(attr(rPr, shd, 'w:fill'))) set['w:shd'] = null;\n }\n if (to.font !== from.font || to.code !== from.code) {\n const want = to.code ? 'Courier New' : to.font;\n const fonts = get('w:rFonts');\n const kept = fonts ? attrs(rPr.slice(fonts.start, fonts.open)).filter(([k]) => !/^w:(ascii|hAnsi|cs|asciiTheme|hAnsiTheme|cstheme)$/.test(k)) : [];\n if (want) kept.unshift(['w:ascii', want], ['w:hAnsi', want], ['w:cs', want]);\n set['w:rFonts'] = kept.length ? `<w:rFonts ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (to.link && !from.link && !style) {\n const id = this.pkg.styles.find((name, id) => /^hyperlink$/i.test(name) || id === 'Hyperlink', 'character');\n if (id) set['w:rStyle'] = `<w:rStyle w:val=\"${escape(id)}\"/>`;\n } else if (!to.link && from.link && this.pkg.styles.isLink(style)) set['w:rStyle'] = null;\n return Object.keys(set).length ? rebuild(rPr, 'w:rPr', R, set) : rPr;\n }\n\n private runXml(run: Run, glyphs: Glyph[], counts: Map<Run, number>): string {\n if (run.el && glyphs.length === counts.get(run) && glyphs.every((g, n) => g.u && g.u.run === run && g.u.idx === n)) return this.s.slice(run.el.start, run.el.end);\n let body = '';\n let text = '';\n const tag = glyphs[0]?.ctx.some(w => w.rev?.startsWith('[\"del\"')) ? 'w:delText' : 'w:t';\n const flush = () => {\n if (text) body += `<${tag}${/^\\s|\\s$/.test(text) ? ' xml:space=\"preserve\"' : ''}>${escape(text)}</${tag}>`;\n text = '';\n };\n for (const g of glyphs) {\n if (g.ch === null || g.raw !== null || special[g.ch]) {\n flush();\n body += g.raw ?? special[g.ch!];\n } else text += g.ch;\n }\n flush();\n return run.open + run.rPr + body + '</w:r>';\n }\n\n private embed(src: string): { id: string; size: [number, number] | null } {\n if (!this.srcs) {\n this.srcs = new Map();\n for (const b of this.r.refs.values()) if ('pieces' in b) for (const p of b.pieces) if (p.img && p.pic) this.srcs.set(String(p.img.src), p.pic.embed);\n }\n const id = this.srcs.get(src);\n if (id) return { id, size: null };\n const added = this.addMedia(src);\n if (!added) throw new Error('Image could not be read');\n this.srcs.set(src, added.id);\n return added;\n }\n\n private drawing(img: Record<string, unknown>): string {\n const media = this.embed(String(img.src ?? ''));\n const max = Math.round(this.textWidth() / 15);\n let w = Math.round(Number(img.width)) || 0;\n let h = Math.round(Number(img.height)) || 0;\n const [nw, nh] = media.size ?? [w || 300, h || 200];\n if (!w && !h) [w, h] = nw > max ? [max, Math.round((nh * max) / nw)] : [nw, nh];\n else if (!h) h = Math.round((w * nh) / nw);\n else if (!w) w = Math.round((h * nw) / nh);\n const id = this.docPr++;\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n return `<w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"><wp:extent ${ext}/><wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>${meta(`<wp:docPr id=\"${id}\" name=\"Picture ${id}\"/>`, img)}<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"Picture ${id}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${media.id}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext ${ext}/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing>`;\n }\n\n private patch(raw: string, old: Record<string, unknown>, img: Record<string, unknown>): string {\n let xml = raw;\n const w = Math.round(Number(img.width)) || Number(old.width);\n const h = Math.round(Number(img.height)) || Number(old.height);\n if (w !== old.width || h !== old.height) {\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n xml = xml.replace(/<wp:extent\\b[^>]*\\/>/, `<wp:extent ${ext}/>`).replace(/(<a:xfrm\\b[^>]*>[\\s\\S]*?<a:ext)\\b[^>]*\\/>/, `$1 ${ext}/>`);\n }\n if ((img.alt || null) !== (old.alt || null) || (img.title || null) !== (old.title || null)) xml = xml.replace(/<wp:docPr\\b[^>]*>/, tag => meta(tag, img));\n if (img.src !== old.src) xml = xml.replace(/(<a:blip\\b[^>]*\\br:embed=\")[^\"]*\"/, `$1${this.embed(String(img.src ?? '')).id}\"`);\n return xml;\n }\n\n private textWidth(): number {\n const sect = this.body.sect;\n const s = this.s;\n const sz = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n return (sz ? +(attr(s, sz, 'w:w') ?? 12240) : 12240) - (mar ? +(attr(s, mar, 'w:left') ?? 1440) + +(attr(s, mar, 'w:right') ?? 1440) : 2880);\n }\n\n private addMedia(src: string): { id: string; name: string; size: [number, number] | null } | null {\n const m = /^data:([^;,]+)(;base64)?,(.*)$/s.exec(src);\n let img = this.images.get(src);\n if (m) {\n const raw = m[2] ? atob(m[3]) : decodeURIComponent(m[3]);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);\n img = { bytes, mime: m[1] };\n }\n if (!img) return null;\n const ext = ({ 'image/jpeg': 'jpeg', 'image/svg+xml': 'svg' } as Record<string, string>)[img.mime] ?? img.mime.split('/')[1] ?? 'png';\n let n = this.media.length + 1;\n while (this.pkg.files.has(`word/media/w100n-${n}.${ext}`)) n++;\n const name = `w100n-${n}.${ext}`;\n const dir = this.pkg.main.slice(0, this.pkg.main.lastIndexOf('/') + 1);\n this.media.push({ name: `${dir}media/${name}`, bytes: img.bytes });\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/image\" Target=\"media/${name}\"/>`);\n return { id, name, size: dims(img.bytes) };\n }\n\n private code(o: Out): string {\n const style = this.pkg.styles.find(name => /^(source code|html preformatted|code|plain text)$/i.test(name));\n const text = (o.node.content ?? []).map(n => n.text ?? '').join('');\n const pPr = style ? `<w:pPr><w:pStyle w:val=\"${escape(style)}\"/></w:pPr>` : '<w:pPr><w:spacing w:after=\"0\"/></w:pPr>';\n const rPr = style ? '' : '<w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\"/></w:rPr>';\n return text.split('\\n').map(line => `<w:p>${pPr}${line ? `<w:r>${rPr}<w:t xml:space=\"preserve\">${escape(line).replace(/\\t/g, '</w:t><w:tab/><w:t xml:space=\"preserve\">')}</w:t></w:r>` : ''}</w:p>`).join('');\n }\n\n private table(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const s = this.s;\n if (b && sig(o.node) === sig(b.node)) return s.slice(b.start, b.end);\n const rows = o.node.content ?? [];\n const layout = grid(rows);\n const cols = Math.max(1, ...layout.map(r => r.reduce((m, sl) => Math.max(m, sl.col + sl.span), 0)));\n let head: string;\n let tail = '';\n if (b) {\n const first = b.rows[0];\n const last = b.rows[b.rows.length - 1];\n head = opened(s, b.el) + s.slice(b.el.open, first ? first.el.start - first.lead.length : b.el.close);\n if (last) tail = s.slice(last.el.end, b.el.close);\n if (b.cols && cols !== b.cols) {\n head = head.replace(/(<w:tblGrid\\b[^>]*>)([\\s\\S]*?)(<\\/w:tblGrid>)/, (_, open: string, inside: string, close: string) => {\n const list: string[] = [...(inside.match(/<w:gridCol\\b[^>]*\\/>/g) ?? [])];\n while (list.length < cols) list.push(list[list.length - 1] ?? '<w:gridCol/>');\n return open + list.slice(0, cols).join('') + close;\n });\n }\n } else {\n const tpl = near(x => x.kind === 'tbl');\n const pr = tpl && kid(tpl.el, 'w:tblPr');\n const style = this.pkg.styles.find(name => /^(table grid|сітка таблиці|сетка таблицы)$/i.test(name), 'table');\n const line = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>`;\n const tblPr = pr ? s.slice(pr.start, pr.end) : `<w:tblPr>${style ? `<w:tblStyle w:val=\"${escape(style)}\"/>` : ''}<w:tblW w:w=\"0\" w:type=\"auto\"/>${style ? '' : `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`}<w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr>`;\n head = `<w:tbl>${tblPr}<w:tblGrid>${`<w:gridCol w:w=\"${Math.floor(this.textWidth() / cols)}\"/>`.repeat(cols)}</w:tblGrid>`;\n }\n const width = Math.floor(this.textWidth() / cols);\n let xml = head;\n let above: (Cell | null)[] = [];\n let aboveRow: Row | null = null;\n const cover = new Map<JSONContent, Cell | null>();\n const firstRow = rows.map(r => this.claimed.get(r) as Row | undefined).find(Boolean) ?? null;\n rows.forEach((node, r) => {\n const R = (this.claimed.get(node) as Row | undefined) ?? null;\n const slots = layout[r];\n const shape = (sl: Slot) => (sl.cell ? `${(this.claimed.get(sl.cell) as Cell | undefined)?.ref ?? '-'}@${sl.col}` : `c${sl.col}`);\n const now: (Cell | null)[] = [];\n if (R && sig(node) === sig(R.node) && R.cells.map(c => (c.vm === 'continue' ? `c${c.col}` : `${c.ref}@${c.col}`)).join() === slots.map(shape).join()) {\n xml += R.lead + s.slice(R.el.start, R.el.end);\n for (const c of R.cells) for (let k = c.col; k < c.col + c.span; k++) now[k] = c;\n for (const sl of slots) if (sl.cell && Number(sl.cell.attrs?.rowspan ?? 1) > 1) cover.set(sl.cell, (this.claimed.get(sl.cell) as Cell | undefined) ?? null);\n above = now;\n aboveRow = R;\n return;\n }\n const srcRow = R ?? aboveRow ?? firstRow;\n const header = (node.content ?? []).length > 0 && (node.content ?? []).every(c => c.type === 'tableHeader');\n let rowHead = R ? R.head : srcRow ? srcRow.head.replace(/<w:(ins|del)\\b[^>]*\\/>|<w:trPrChange\\b[\\s\\S]*?<\\/w:trPrChange>/g, '') : '';\n if (!R) {\n if (!header) rowHead = rowHead.replace(/<w:tblHeader\\b[^>]*\\/>/g, '').replace(/<w:trPr><\\/w:trPr>|<w:trPr\\/>/, '');\n else if (!/<w:tblHeader\\b/.test(rowHead)) rowHead = /<w:trPr>/.test(rowHead) ? rowHead.replace('<w:trPr>', '<w:trPr><w:tblHeader/>') : rowHead + '<w:trPr><w:tblHeader/></w:trPr>';\n }\n xml += (R ? R.lead + opened(s, R.el) : '<w:tr>') + rowHead;\n for (const sl of slots) {\n if (!sl.cell) {\n const cont = R?.cells.find(c => c.vm === 'continue' && c.col === sl.col);\n if (cont) xml += cont.lead + s.slice(cont.el.start, cont.el.end);\n else xml += `<w:tc>${this.tcPr(cover.get(sl.from!) ?? above[sl.col] ?? null, sl.span, 'continue', width)}<w:p/></w:tc>`;\n now[sl.col] = cover.get(sl.from!) ?? null;\n continue;\n }\n const C = (this.claimed.get(sl.cell) as Cell | undefined) ?? null;\n const vm = Number(sl.cell.attrs?.rowspan ?? 1) > 1 ? 'restart' : null;\n const srcCell = C ?? above[sl.col] ?? (srcRow?.cells.find(c => c.col === sl.col) ?? null);\n if (vm) cover.set(sl.cell, srcCell);\n for (let k = sl.col; k < sl.col + sl.span; k++) now[k] = srcCell;\n if (C && sig(sl.cell) === sig(C.node!) && C.span === sl.span && C.vm === vm) {\n xml += C.lead + s.slice(C.el.start, C.el.end);\n continue;\n }\n const fallback = srcCell?.blocks.find(x => x.kind === 'p') ?? null;\n let inside = this.container(flatten(sl.cell.content ?? []), C ? C.blocks : [], fallback) + (C ? this.left.get(C) ?? '' : '');\n if (!this.last || this.last === 'tbl') inside += '<w:p/>';\n xml += (C ? C.lead + opened(s, C.el) : '<w:tc>') + this.tcPr(srcCell, sl.span, vm, width, !C) + inside + (C ? C.tail : '') + '</w:tc>';\n }\n const lastCell = R?.cells[R.cells.length - 1];\n xml += (R && lastCell ? s.slice(lastCell.el.end, R.el.close) : '') + '</w:tr>';\n above = now;\n aboveRow = srcRow;\n });\n return xml + tail + '</w:tbl>';\n }\n\n private tcPr(src: Cell | null, span: number, vm: 'restart' | 'continue' | null, width: number, clone = true): string {\n const s = this.s;\n const el = src && kid(src.el, 'w:tcPr');\n const xml = el ? s.slice(el.start, el.end) : '';\n if (!clone && src && src.span === span && src.vm === vm) return xml;\n const set: Record<string, string | null> = { 'w:gridSpan': span > 1 ? `<w:gridSpan w:val=\"${span}\"/>` : null, 'w:vMerge': vm === 'restart' ? '<w:vMerge w:val=\"restart\"/>' : vm ? '<w:vMerge/>' : null, 'w:hMerge': null };\n if (clone) Object.assign(set, { 'w:cellIns': null, 'w:cellDel': null, 'w:cellMerge': null, 'w:tcPrChange': null });\n const tcW = el && kid(el, 'w:tcW');\n if (!tcW && !src) set['w:tcW'] = `<w:tcW w:w=\"${width * span}\" w:type=\"dxa\"/>`;\n else if (tcW && src && src.span !== span && attr(xml, tcW, 'w:type') === 'dxa') set['w:tcW'] = `<w:tcW w:w=\"${Math.round((+(attr(xml, tcW, 'w:w') ?? 0) * span) / src.span)}\" w:type=\"dxa\"/>`;\n return rebuild(xml, 'w:tcPr', TC, set);\n }\n}\n\nexport async function fetched(src: string): Promise<Img> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`Image could not be read: ${src}`);\n return { bytes: new Uint8Array(await res.arrayBuffer()), mime: res.headers.get('content-type')?.split(';')[0] || 'image/png' };\n}\n\nexport async function images(doc: JSONContent, load: (src: string) => Promise<Img>): Promise<Map<string, Img>> {\n const out = new Map<string, Img>();\n const walk = async (n: JSONContent) => {\n if (n.type === 'image' && typeof n.attrs?.src === 'string' && !out.has(n.attrs.src)) {\n const src: string = n.attrs.src;\n if (src && !src.startsWith('data:')) out.set(src, await load(src));\n }\n for (const k of n.content ?? []) await walk(k);\n };\n await walk(doc);\n return out;\n}\n","import { Pkg } from './pkg';\nimport { assemble, Reader, type JSONContent } from './read';\nimport { fetched, images, Writer, type Img } from './write';\nimport { attr, kid } from './xml';\n\nexport type { JSONContent } from './read';\nexport type { Img } from './write';\n\nexport type DocxModel = { doc: JSONContent; styles: { name: string; id: string; heading: number | null }[]; page: { width: number; height: number; margins: [number, number, number, number] } };\n\nexport async function readDocx(bytes: ArrayBuffer): Promise<DocxModel> {\n const pkg = new Pkg(new Uint8Array(bytes));\n const { list, sect } = new Reader(pkg).body();\n const content = assemble(list);\n const s = pkg.doc;\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const px = (el: typeof size, name: string, fallback: number) => Math.round((Math.abs(+((el && attr(s, el, name)) ?? fallback)) / 15) * 100) / 100;\n return {\n doc: { type: 'doc', content: content.length ? content : [{ type: 'paragraph', attrs: { align: null, indent: 0, ref: null } }] },\n styles: pkg.styles.list(),\n page: { width: px(size, 'w:w', 12240), height: px(size, 'w:h', 15840), margins: [px(mar, 'w:top', 1440), px(mar, 'w:right', 1440), px(mar, 'w:bottom', 1440), px(mar, 'w:left', 1440)] },\n };\n}\n\nexport async function writeDocx(original: ArrayBuffer, doc: JSONContent, load: (src: string) => Promise<Img> = fetched): Promise<ArrayBuffer> {\n const pkg = new Pkg(new Uint8Array(original));\n const out = new Writer(pkg, await images(doc, load)).run(doc);\n return out ? out.slice().buffer : original.slice(0);\n}\n","import { Extension, Mark, Node, type Editor } from '@tiptap/core';\nimport Collaboration from '@tiptap/extension-collaboration';\nimport CollaborationCaret from '@tiptap/extension-collaboration-caret';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport { TaskItem, TaskList } from '@tiptap/extension-list';\nimport { TableKit } from '@tiptap/extension-table';\nimport { Color, FontFamily, FontSize, TextStyle } from '@tiptap/extension-text-style';\nimport type { Node as Block, Slice } from '@tiptap/pm/model';\nimport { Plugin, PluginKey, TextSelection, type EditorState, type Transaction } from '@tiptap/pm/state';\nimport { StepMap, type Mappable } from '@tiptap/pm/transform';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\nimport StarterKit from '@tiptap/starter-kit';\nimport { ySyncPluginKey } from '@tiptap/y-tiptap';\nimport type * as Y from 'yjs';\nimport type { Text } from '../text';\nimport { Pager } from './pager';\n\nexport type Spot = { id: string; from: number; to: number };\ntype Notes = { spots: Spot[]; active: string | null; pending: { from: number; to: number } | null; set: DecorationSet };\n\nexport const notes = new PluginKey<Notes>('w100n-notes');\n\nconst blocks = ['paragraph', 'heading', 'bulletList', 'orderedList', 'listItem', 'taskList', 'taskItem', 'blockquote', 'codeBlock', 'horizontalRule',\n 'table', 'tableRow', 'tableHeader', 'tableCell', 'pageBreak', 'toc'];\n\nconst changed = (trs: readonly Transaction[]) => {\n const ranges: [number, number][] = [];\n trs.forEach((tr, n) => tr.steps.forEach((step, i) => {\n const slice = (step as { slice?: { openStart: number; openEnd: number; content: { firstChild: Block | null } } }).slice;\n if (!slice || (!slice.openStart && !slice.openEnd && !slice.content.firstChild?.isBlock)) return;\n const after = tr.mapping.slice(i + 1);\n for (const later of trs.slice(n + 1)) after.appendMapping(later.mapping);\n step.getMap().forEach((_a, _b, from, to) => ranges.push([after.map(from, -1), after.map(to, 1)]));\n }));\n return ranges;\n};\n\nconst Blocks = Extension.create({\n name: 'blocks',\n addGlobalAttributes: () => [{\n types: blocks,\n attributes: {\n align: { default: null, parseHTML: el => el.style.textAlign || null, renderHTML: attrs => attrs.align ? { style: `text-align: ${attrs.align}` } : {} },\n indent: { default: 0, parseHTML: el => Number(el.dataset.indent) || 0, renderHTML: attrs => attrs.indent ? { 'data-indent': attrs.indent, style: `margin-left: ${attrs.indent * 0.5}in` } : {} },\n ref: { default: null, rendered: false, keepOnSplit: false },\n },\n }],\n addProseMirrorPlugins: () => [new Plugin({\n appendTransaction(trs, _old, state) {\n const ranges = changed(trs);\n if (!ranges.length) return null;\n const seen = new Map<string, { pos: number; node: Block }>();\n const drop: number[] = [];\n const visit = (node: Block, pos: number) => {\n const ref = node.attrs.ref as string | null;\n if (!ref) return;\n const first = seen.get(ref);\n if (!first) seen.set(ref, { pos, node });\n else if (!first.node.textContent && node.textContent) { drop.push(first.pos); seen.set(ref, { pos, node }); }\n else drop.push(pos);\n };\n const from = Math.max(0, Math.min(...ranges.map(r => r[0])));\n const to = Math.min(state.doc.content.size, Math.max(...ranges.map(r => r[1])));\n const $from = state.doc.resolve(from);\n const $to = state.doc.resolve(to);\n const start = Math.max(0, $from.index(0) - 1);\n const end = Math.min(state.doc.childCount, $to.index(0) + 2);\n let pos = 0;\n for (let i = 0; i < start; i++) pos += state.doc.child(i).nodeSize;\n for (let i = start; i < end; i++) {\n const top = state.doc.child(i);\n visit(top, pos);\n top.descendants((node, at) => visit(node, pos + 1 + at));\n pos += top.nodeSize;\n }\n if (!drop.length) return null;\n const tr = state.tr;\n for (const at of drop) tr.setNodeAttribute(at, 'ref', null);\n return tr;\n },\n })],\n});\n\nconst PageBreak = Node.create<{ label: string }>({\n name: 'pageBreak',\n group: 'block',\n atom: true,\n selectable: true,\n addOptions: () => ({ label: '' }),\n parseHTML: () => [{ tag: 'div[data-page-break]' }],\n renderHTML() {\n return ['div', { 'data-page-break': '', 'data-label': this.options.label, class: 'w100n-text-break', contenteditable: 'false' }];\n },\n});\n\nexport type Entry = [number, string];\n\nconst headings = (doc: Block, after: number) => {\n const found: { pos: number; level: number; text: string }[] = [];\n doc.descendants((node, pos) => {\n if (pos > after && node.type.name === 'heading' && node.attrs.level <= 3 && node.textContent.trim()) found.push({ pos, level: node.attrs.level, text: node.textContent.trim() });\n return !node.isTextblock;\n });\n return found;\n};\n\nexport function entries(doc: Block, relative: boolean, after: number): Entry[] {\n const list = headings(doc, after).map(h => [h.level, h.text] as Entry);\n const top = relative && list.length ? Math.min(...list.map(([level]) => level)) - 1 : 0;\n return list.map(([level, text]) => [level - top, text]);\n}\n\nconst Toc = Node.create<{ relative: boolean; label: string; empty: string }>({\n name: 'toc',\n group: 'block',\n atom: true,\n selectable: true,\n addOptions: () => ({ relative: false, label: '', empty: '' }),\n addAttributes: () => ({ entries: { default: '[]' }, title: { default: null } }),\n parseHTML: () => [{ tag: 'nav[data-toc]' }],\n renderHTML() {\n return ['nav', { 'data-toc': '', class: 'w100n-text-toc' }];\n },\n addNodeView() {\n return ({ editor, getPos }) => {\n const dom = document.createElement('nav');\n dom.className = 'w100n-text-toc';\n dom.contentEditable = 'false';\n const paint = () => {\n const at = getPos() ?? 0;\n const list = entries(editor.state.doc, this.options.relative, at);\n const head = document.createElement('b');\n head.textContent = this.options.label;\n const items = list.map(([level, text], i) => {\n const go = document.createElement('button');\n go.type = 'button';\n go.textContent = text;\n go.dataset.level = String(level);\n go.onclick = () => {\n const hit = headings(editor.state.doc, getPos() ?? 0)[i];\n if (hit) (editor.view.nodeDOM(hit.pos) as HTMLElement | null)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n };\n return go;\n });\n const empty = document.createElement('small');\n empty.textContent = this.options.empty;\n dom.replaceChildren(head, ...(items.length ? items : [empty]));\n };\n paint();\n return {\n dom,\n update: node => {\n if (node.type.name !== 'toc') return false;\n paint();\n return true;\n },\n ignoreMutation: () => true,\n };\n };\n },\n addProseMirrorPlugins() {\n const relative = this.options.relative;\n return [new Plugin({\n appendTransaction(trs, _old, state) {\n if (!trs.some(tr => tr.docChanged && !tr.getMeta(ySyncPluginKey))) return null;\n const at: number[] = [];\n state.doc.forEach((node, pos) => { if (node.type.name === 'toc') at.push(pos); });\n if (!at.length) return null;\n const tr = state.tr;\n for (const pos of at) {\n const fresh = JSON.stringify(entries(state.doc, relative, pos));\n if (state.doc.nodeAt(pos)!.attrs.entries !== fresh) tr.setNodeAttribute(pos, 'entries', fresh);\n }\n return tr.docChanged ? tr : null;\n },\n })];\n },\n});\n\nconst revision = (name: 'insertion' | 'deletion', tag: 'ins' | 'del') => Mark.create({\n name,\n inclusive: false,\n excludes: 'insertion deletion',\n addAttributes: () => ({ id: { default: null }, author: { default: '' }, date: { default: '' } }),\n parseHTML: () => [{ tag: `${tag}[data-rev]` }],\n renderHTML: ({ HTMLAttributes }) => [tag, { 'data-rev': HTMLAttributes.id, class: 'w100n-text-rev', title: HTMLAttributes.author }, 0],\n});\n\nexport type Change = { id: string; kind: 'insertion' | 'deletion'; author: string; date: string; text: string; from: number; to: number };\n\nconst seen = new WeakMap<Block, Change[]>();\n\nexport function changes(doc: Block): Change[] {\n const hit = seen.get(doc);\n if (hit) return hit;\n const out: Change[] = [];\n doc.descendants((node, pos) => {\n if (!node.isText) return;\n const mark = node.marks.find(m => m.type.name === 'insertion' || m.type.name === 'deletion');\n if (!mark) return;\n const last = out[out.length - 1];\n if (last && last.id === mark.attrs.id && last.kind === mark.type.name && last.to === pos) Object.assign(last, { text: last.text + node.text, to: pos + node.nodeSize });\n else out.push({ id: mark.attrs.id, kind: mark.type.name as Change['kind'], author: mark.attrs.author, date: mark.attrs.date, text: node.text!, from: pos, to: pos + node.nodeSize });\n });\n seen.set(doc, out);\n return out;\n}\n\nexport function decide(editor: Editor, accept: boolean, id?: string) {\n const { state } = editor;\n const tr = state.tr;\n for (const c of changes(state.doc).filter(c => !id || c.id === id).reverse()) {\n if ((c.kind === 'insertion') === accept) tr.removeMark(c.from, c.to, state.schema.marks[c.kind].create({ id: c.id, author: c.author, date: c.date }));\n else tr.delete(c.from, c.to);\n }\n if (tr.docChanged) editor.view.dispatch(tr);\n}\n\ntype Suggesting = { on: boolean; me: string };\nexport const suggesting = new PluginKey<Suggesting>('w100n-suggest');\n\nconst Suggest = Extension.create({\n name: 'suggest',\n addProseMirrorPlugins() {\n const stamp = (state: EditorState, kind: 'insertion' | 'deletion', from: number, to: number) => {\n const me = suggesting.getState(state)!.me;\n const own = [state.doc.resolve(from).nodeBefore, state.doc.resolve(to).nodeAfter].flatMap(n => n?.marks ?? []).find(m => m.type.name === kind && m.attrs.author === me);\n return state.schema.marks[kind].create(own ? own.attrs : { id: Math.random().toString(36).slice(2, 10), author: me, date: new Date().toISOString().replace(/\\.\\d+Z$/, 'Z') });\n };\n const strike = (tr: Transaction, state: EditorState, from: number, to: number) => {\n const parts: { from: number; to: number; added: boolean }[] = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n const a = Math.max(from, pos), b = Math.min(to, pos + node.nodeSize);\n if (b > a && !node.marks.some(m => m.type.name === 'deletion')) parts.push({ from: a, to: b, added: node.marks.some(m => m.type.name === 'insertion') });\n });\n const mark = stamp(state, 'deletion', from, to);\n for (const p of parts.reverse()) {\n if (p.added) tr.delete(p.from, p.to);\n else tr.addMark(p.from, p.to, mark);\n }\n };\n const type = (view: EditorView, from: number, to: number, text: string) => {\n const { state } = view;\n const tr = state.tr;\n if (to > from) strike(tr, state, from, to);\n const at = tr.mapping.map(to);\n const kept = (state.storedMarks ?? state.doc.resolve(from).marks()).filter(m => m.type.name !== 'insertion' && m.type.name !== 'deletion');\n tr.insert(at, state.schema.text(text, [...kept, stamp(state, 'insertion', from, to)]));\n tr.setSelection(TextSelection.create(tr.doc, at + text.length));\n view.dispatch(tr.scrollIntoView());\n return true;\n };\n return [new Plugin<Suggesting>({\n key: suggesting,\n state: {\n init: () => ({ on: false, me: '' }),\n apply: (tr, value) => tr.getMeta(suggesting) ?? value,\n },\n props: {\n handleTextInput(view, from, to, text) {\n return suggesting.getState(view.state)!.on && type(view, from, to, text);\n },\n handlePaste(view, _event, slice) {\n if (!suggesting.getState(view.state)!.on) return false;\n const { from, to } = view.state.selection;\n return type(view, from, to, slice.content.textBetween(0, slice.content.size, '\\n'));\n },\n handleKeyDown(view, event) {\n const { state } = view;\n if (!suggesting.getState(state)!.on || (event.key !== 'Backspace' && event.key !== 'Delete') || event.metaKey || event.ctrlKey || event.altKey) return false;\n const { from, to, empty, $from } = state.selection;\n const back = event.key === 'Backspace';\n let at = from;\n if (empty) {\n const skip = (pos: number) => state.doc.resolve(pos)[back ? 'nodeBefore' : 'nodeAfter']?.marks.some(m => m.type.name === 'deletion');\n while (skip(at)) at += back ? -1 : 1;\n if (back ? at <= $from.start() : at >= $from.end()) return false;\n }\n const tr = state.tr;\n if (empty) strike(tr, state, back ? at - 1 : at, back ? at : at + 1);\n else strike(tr, state, from, to);\n const caret = empty ? tr.mapping.map(back ? at - 1 : at + 1, back ? -1 : 1) : tr.mapping.map(back ? from : to);\n tr.setSelection(TextSelection.create(tr.doc, caret));\n view.dispatch(tr.scrollIntoView());\n return true;\n },\n },\n })];\n },\n});\n\nconst Note = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n addAttributes: () => ({ id: { default: null, renderHTML: attrs => ({ 'data-comment': attrs.id }) } }),\n renderHTML: ({ HTMLAttributes }) => ['span', HTMLAttributes, 0],\n});\n\nconst locks = new PluginKey<{ spans: { from: number; to: number }[]; set: DecorationSet }>('w100n-locks');\nconst locked = (node: Block) => node.type.name === 'paragraph' && String(node.attrs.ref ?? '').startsWith('lock:');\nconst scan = (doc: Block) => {\n const spans: { from: number; to: number }[] = [];\n doc.descendants((node, pos) => {\n if (!locked(node)) return true;\n spans.push({ from: pos, to: pos + node.nodeSize });\n return false;\n });\n return spans;\n};\n\nconst Locks = Extension.create<{ label: string }>({\n name: 'locks',\n addOptions: () => ({ label: '' }),\n addProseMirrorPlugins() {\n const shade = (doc: Block, spans: { from: number; to: number }[]) =>\n DecorationSet.create(doc, spans.map(s => Decoration.node(s.from, s.to, { class: 'w100n-text-lock', contenteditable: 'false', 'data-label': this.options.label })));\n return [new Plugin({\n key: locks,\n state: {\n init: (_config, state) => {\n const spans = scan(state.doc);\n return { spans, set: shade(state.doc, spans) };\n },\n apply(tr, value) {\n if (!tr.docChanged) return value;\n const fresh = tr.steps.some(step => {\n let found = false;\n (step as { slice?: Slice }).slice?.content.descendants(node => { found ||= locked(node); return !found; });\n return found;\n });\n const spans = fresh ? scan(tr.doc) : value.spans.map(s => ({ from: tr.mapping.map(s.from, 1), to: tr.mapping.map(s.to, -1) })).filter(s => s.to > s.from);\n return { spans, set: spans.length ? shade(tr.doc, spans) : DecorationSet.empty };\n },\n },\n filterTransaction(tr, state) {\n let spans = locks.getState(state)!.spans;\n if (!spans.length || !tr.docChanged) return true;\n return tr.mapping.maps.every(map => {\n let ok = true;\n map.forEach((from, to) => {\n for (const s of spans) if (((from < s.to && to > s.from) || (from > s.from && from < s.to)) && !(from <= s.from && to >= s.to)) ok = false;\n });\n spans = spans.map(s => ({ from: map.map(s.from, 1), to: map.map(s.to, -1) }));\n return ok;\n });\n },\n props: {\n decorations: state => locks.getState(state)!.set,\n handleKeyDown(view, event) {\n const back = event.key === 'Backspace';\n const { $from, empty } = view.state.selection;\n if ((!back && event.key !== 'Delete') || !empty || $from.depth < 1) return false;\n if (back ? $from.parentOffset !== 0 : $from.parentOffset !== $from.parent.content.size) return false;\n const at = back ? $from.before() : $from.after();\n const node = back ? view.state.doc.resolve(at).nodeBefore : view.state.doc.resolve(at).nodeAfter;\n if (!node || !locked(node)) return false;\n view.dispatch(view.state.tr.delete(back ? at - node.nodeSize : at, back ? at : at + node.nodeSize));\n return true;\n },\n },\n })];\n },\n});\n\nconst paint = (doc: Block, spots: Spot[], active: string | null, pending: Notes['pending']) => DecorationSet.create(doc, [\n ...spots.filter(s => s.to > s.from).map(s => Decoration.inline(s.from, s.to, { class: s.id === active ? 'w100n-text-note is-active' : 'w100n-text-note', 'data-note': s.id })),\n ...(pending && pending.to > pending.from ? [Decoration.inline(pending.from, pending.to, { class: 'w100n-text-note is-active' })] : []),\n]);\n\nconst remap = (tr: Transaction): Mappable => {\n const start = tr.before.content.findDiffStart(tr.doc.content);\n if (!tr.getMeta(ySyncPluginKey) || start === null) return tr.mapping;\n let { a, b } = tr.before.content.findDiffEnd(tr.doc.content)!;\n if (a < start) [a, b] = [start, b + start - a];\n if (b < start) [a, b] = [a + start - b, start];\n return new StepMap([start, a - start, b - start]);\n};\n\nconst Notes = Extension.create({\n name: 'notes',\n addProseMirrorPlugins: () => [new Plugin<Notes>({\n key: notes,\n state: {\n init: (_config, state) => ({ spots: [], active: null, pending: null, set: DecorationSet.create(state.doc, []) }),\n apply(tr, value) {\n const next = tr.getMeta(notes) as Partial<Notes> | undefined;\n if (!next && (!tr.docChanged || (!value.spots.length && !value.pending))) return value;\n const by = remap(tr);\n const map = <T extends { from: number; to: number }>(r: T): T => ({ ...r, from: by.map(r.from, 1), to: by.map(r.to, -1) });\n const merged = { ...value, spots: value.spots.map(map), pending: value.pending && map(value.pending), ...next };\n return { ...merged, set: paint(tr.doc, merged.spots, merged.active, merged.pending) };\n },\n },\n props: { decorations: state => notes.getState(state)!.set },\n })],\n});\n\nexport function kit(kind: 'markdown' | 'docx', t: Pick<Text, 'pageBreak' | 'tasks' | 'locked' | 'toc' | 'tocEmpty'>, live?: { doc: Y.Doc; link: { awareness: unknown }; user: Record<string, string> } | null) {\n return [\n StarterKit.configure({ trailingNode: false, link: { openOnClick: false, autolink: true, defaultProtocol: 'https' }, dropcursor: { color: '#8b5cf6', width: 2 }, ...(live ? { undoRedo: false } as const : {}) }),\n TaskList, TaskItem.configure({ nested: true, a11y: { checkboxLabel: node => node.textContent || t.tasks } }),\n TableKit.configure({ table: { resizable: false } }),\n Image.configure({ inline: true, allowBase64: true }),\n Highlight.configure({ multicolor: true }), TextStyle, Color, FontSize, FontFamily,\n Blocks, PageBreak.configure({ label: t.pageBreak }), Toc.configure({ relative: kind === 'markdown', label: t.toc, empty: t.tocEmpty }), Note, Notes,\n ...(kind === 'docx' ? [Pager, Locks.configure({ label: t.locked }), revision('insertion', 'ins'), revision('deletion', 'del'), Suggest] : []),\n ...(live ? [Collaboration.configure({ document: live.doc }), CollaborationCaret.configure({ provider: live.link, user: live.user })] : []),\n ];\n}\n\nconst textblocks = (editor: Editor, change: (attrs: Record<string, unknown>) => Record<string, unknown>) => editor.chain().focus().command(({ tr, state }) => {\n state.doc.nodesBetween(state.selection.from, state.selection.to, (node, pos) => {\n if (!node.isTextblock) return true;\n for (const [key, value] of Object.entries(change(node.attrs))) if (node.attrs[key] !== value) tr.setNodeAttribute(pos, key, value);\n return false;\n });\n return true;\n}).run();\n\nexport const align = (editor: Editor, value: string | null) => textblocks(editor, () => ({ align: value === 'left' ? null : value }));\n\nexport const indent = (editor: Editor, step: number) => {\n const type = editor.isActive('taskItem') ? 'taskItem' : editor.isActive('listItem') ? 'listItem' : null;\n if (type) return step > 0 ? editor.chain().focus().sinkListItem(type).run() : editor.chain().focus().liftListItem(type).run();\n return textblocks(editor, attrs => ({ indent: Math.min(8, Math.max(0, Number(attrs.indent) + step)) }));\n};\n\nexport const clear = (editor: Editor) => {\n const chain = editor.chain().focus();\n for (const mark of ['bold', 'italic', 'underline', 'strike', 'code', 'highlight', 'textStyle']) chain.unsetMark(mark);\n chain.run();\n return textblocks(editor, () => ({ align: null, indent: 0 }));\n};\n\nexport function locate(doc: Block, list: { id: string; quote: string; anchor?: string }[]): Spot[] {\n if (!list.length) return [];\n const marked = new Map<string, { from: number; to: number; text: string }>();\n doc.descendants((node, pos) => {\n if (!node.isText) return;\n for (const mark of node.marks) {\n if (mark.type.name !== 'comment') continue;\n const found = marked.get(mark.attrs.id);\n if (found) Object.assign(found, { to: pos + node.nodeSize, text: found.text + node.text });\n else marked.set(mark.attrs.id, { from: pos, to: pos + node.nodeSize, text: node.text! });\n }\n });\n const claimed = new Set<string>();\n const search = (quote: string) => {\n const line = quote.split('\\n').find(part => part.trim())?.trim();\n let hit: { from: number; to: number } | null = null;\n if (line) doc.descendants((node, pos) => {\n if (hit) return false;\n if (!node.isTextblock) return true;\n const at = node.textBetween(0, node.content.size, undefined, '').indexOf(line);\n if (at >= 0) hit = { from: pos + 1 + at, to: pos + 1 + at + line.length };\n return false;\n });\n return hit;\n };\n return list.flatMap(c => {\n const own = [c.anchor, c.id].find(id => id && marked.has(id));\n let range: { from: number; to: number } | null | undefined = own ? marked.get(own) : undefined;\n if (!range) {\n const twin = [...marked].find(([id, m]) => !claimed.has(id) && m.text === c.quote);\n if (twin) { claimed.add(twin[0]); range = twin[1]; }\n }\n range ??= search(c.quote);\n return range ? [{ id: c.id, from: range.from, to: range.to }] : [];\n });\n}\n","import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\n\nexport type Page = { width: number; height: number; margins: [number, number, number, number] };\n\nexport const a4: Page = { width: 793.73, height: 1122.53, margins: [96, 96, 96, 96] };\nexport const letter = { width: 816, height: 1056 };\n\ntype Paging = { set: DecorationSet; page: Page };\n\nexport const paging = new PluginKey<Paging>('w100n-pager');\nconst skip = (el: Element) => el.classList.contains('w100n-text-gap') || el.classList.contains('ProseMirror-gapcursor');\n\nfunction measure(view: EditorView) {\n const { page } = paging.getState(view.state)!;\n const [top, , bottom] = page.margins;\n const room = page.height - top - bottom;\n const els = [...view.dom.children] as HTMLElement[];\n const gaps: { pos: number; height: number; page: number; end?: boolean }[] = [];\n let i = 0;\n let shift = 0;\n let start = 0;\n let last = 0;\n view.state.doc.forEach((node, offset) => {\n let el = els[i++];\n while (el && skip(el)) {\n if (el.classList.contains('w100n-text-gap')) shift += el.offsetHeight;\n el = els[i++];\n }\n if (!el) return;\n const y = el.offsetTop - shift;\n const end = y + el.offsetHeight;\n if (node.type.name === 'pageBreak') {\n gaps.push({ pos: offset + node.nodeSize, height: start + room - end + bottom + 24 + top, page: gaps.length + 1 });\n start = end;\n } else if (end > start + room && y > start) {\n gaps.push({ pos: offset, height: start + room - y + bottom + 24 + top, page: gaps.length + 1 });\n start = y;\n }\n while (end > start + room) start += room;\n last = end;\n });\n gaps.push({ pos: view.state.doc.content.size, height: Math.max(0, start + room - last), page: gaps.length + 1, end: true });\n return gaps.map(g => ({ ...g, height: Math.max(0, Math.round(g.height)) }));\n}\n\nexport const Pager = Extension.create({\n name: 'pager',\n addProseMirrorPlugins: () => [new Plugin<Paging>({\n key: paging,\n state: {\n init: () => ({ set: DecorationSet.empty, page: a4 }),\n apply(tr, value) {\n const next = tr.getMeta(paging) as Partial<Paging> | undefined;\n return { set: next?.set ?? value.set.map(tr.mapping, tr.doc), page: next?.page ?? value.page };\n },\n },\n props: { decorations: state => paging.getState(state)!.set },\n view(view) {\n let timer = 0;\n let sig = '';\n const run = () => {\n if (!view.dom.isConnected) return;\n const gaps = measure(view);\n const next = gaps.map(g => `${g.pos}:${g.height}`).join();\n if (next === sig) return;\n sig = next;\n const set = DecorationSet.create(view.state.doc, gaps.map(g => Decoration.widget(g.pos, () => {\n const el = document.createElement('div');\n el.className = g.end ? 'w100n-text-gap is-end' : 'w100n-text-gap';\n el.style.height = `${g.height}px`;\n el.dataset.page = String(g.page);\n el.contentEditable = 'false';\n return el;\n }, { key: `${g.pos}:${g.height}:${g.page}`, side: -1, ignoreSelection: true })));\n view.dispatch(view.state.tr.setMeta(paging, { set }).setMeta('addToHistory', false));\n };\n const later = (ms: number) => {\n clearTimeout(timer);\n timer = window.setTimeout(run, ms);\n };\n const watch = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => later(200));\n watch?.observe(view.dom);\n later(0);\n return {\n update: (next, prev) => {\n if (paging.getState(next.state)!.page !== paging.getState(prev)!.page) later(0);\n else if (next.state.doc !== prev.doc) later(400);\n },\n destroy: () => { clearTimeout(timer); watch?.disconnect(); },\n };\n },\n })],\n});\n","import type { JSONContent } from '@tiptap/core';\nimport type { Mark, Node } from '@tiptap/pm/model';\nimport { marked, type Token, type Tokens } from 'marked';\nimport { MarkdownSerializer, type MarkdownSerializerState } from 'prosemirror-markdown';\n\ntype Style = { bullet: string; delim: string; em: string; strong: string; fence: string; br: string; loose: boolean };\ntype Hint = { bullet?: string; delim?: string; loose?: boolean; fence?: string };\ntype Marks = { type: string; attrs?: Record<string, unknown> }[];\n\nexport type Parsed = { doc: JSONContent; raws: string[]; head: string; tail: string; style: Style; hints: Record<string, Hint>; crlf: boolean; bom: boolean };\nexport type Base = Omit<Parsed, 'doc'> & { nodes: Node[] };\n\nconst tags: Record<string, string> = { u: 'underline', ins: 'underline', mark: 'highlight', s: 'strike', del: 'strike', b: 'bold', strong: 'bold', i: 'italic', em: 'italic' };\n\nconst decode = (text: string) => text.includes('&')\n ? new DOMParser().parseFromString(`<p>${text.replace(/</g, '<')}</p>`, 'text/html').body.textContent ?? text\n : text;\n\nconst unique = (marks: Marks) => [...new Map(marks.map(m => [m.type, m])).values()];\n\nfunction inline(tokens: Token[] = [], outer: Marks = []): JSONContent[] {\n const out: JSONContent[] = [];\n let open: Marks = [];\n const marks = () => unique([...outer, ...open]);\n const text = (value: string, extra: Marks = []) => {\n const set = unique([...marks(), ...extra]);\n const clean = out[out.length - 1]?.type === 'hardBreak' ? value.replace(/^\\n/, '') : value;\n if (clean) out.push({ type: 'text', text: clean, ...(set.length ? { marks: set } : {}) });\n };\n const wrap = (children: Token[] | undefined, mark: Marks[number]) => out.push(...inline(children, [...marks(), mark]));\n for (const token of tokens) {\n if (token.type === 'text') {\n if (token.tokens) out.push(...inline(token.tokens, marks()));\n else text(decode(token.text));\n } else if (token.type === 'escape') text(decode(token.text));\n else if (token.type === 'strong') wrap(token.tokens, { type: 'bold' });\n else if (token.type === 'em') wrap(token.tokens, { type: 'italic' });\n else if (token.type === 'del') wrap(token.tokens, { type: 'strike' });\n else if (token.type === 'codespan') text(token.text, [{ type: 'code' }]);\n else if (token.type === 'br') out.push({ type: 'hardBreak' });\n else if (token.type === 'link') wrap(token.tokens, { type: 'link', attrs: { href: token.href } });\n else if (token.type === 'image') out.push({ type: 'image', attrs: { src: token.href, alt: token.text || null, title: token.title || null }, ...(marks().length ? { marks: marks() } : {}) });\n else if (token.type === 'html') {\n const tag = /^<(\\/?)([a-z]+)\\s*\\/?>$/i.exec(token.raw.trim());\n const name = tag?.[2].toLowerCase() ?? '';\n if (name === 'br') out.push({ type: 'hardBreak' });\n else if (!tags[name]) text(token.raw);\n else open = tag![1] ? open.filter(m => m.type !== tags[name]) : [...open, { type: tags[name] }];\n } else if (token.type !== 'checkbox') text(token.raw);\n }\n return out;\n}\n\nconst fill = (content: JSONContent[]) => content.length ? content : [{ type: 'paragraph' }];\n\nfunction block(token: Token, hints: Record<string, Hint>): JSONContent[] {\n const ref = (hint: Hint) => {\n const id = `md${Object.keys(hints).length + 1}`;\n hints[id] = hint;\n return id;\n };\n switch (token.type) {\n case 'space': case 'def': case 'checkbox': return [];\n case 'heading': return [{ type: 'heading', attrs: { level: token.depth }, content: inline(token.tokens) }];\n case 'paragraph': case 'text': return [{ type: 'paragraph', content: token.tokens ? inline(token.tokens) : inline([{ type: 'text', raw: token.text, text: token.text }]) }];\n case 'blockquote': return [{ type: 'blockquote', content: fill(token.tokens!.flatMap(t => block(t, hints))) }];\n case 'code': {\n const fence = /^ {0,3}(`{3,}|~{3,})/.exec(token.raw)?.[1][0];\n return [{ type: 'codeBlock', attrs: { language: token.lang || null, ref: fence ? ref({ fence: fence.repeat(3) }) : null }, content: token.text ? [{ type: 'text', text: token.text }] : [] }];\n }\n case 'html': return [{ type: 'codeBlock', attrs: { language: 'html' }, content: [{ type: 'text', text: token.raw.replace(/\\n+$/, '') }] }];\n case 'hr': return [{ type: 'horizontalRule' }];\n case 'list': {\n const list = token as Tokens.List;\n const tasks = list.items.every(entry => entry.task);\n const marker = /^\\s*(?:([-*+])|\\d+([.)]))/.exec(list.raw);\n const id = ref({ bullet: marker?.[1], delim: marker?.[2], loose: list.loose });\n return [{\n type: tasks ? 'taskList' : list.ordered ? 'orderedList' : 'bulletList',\n attrs: list.ordered && !tasks ? { start: list.start === '' ? 1 : Number(list.start), ref: id } : { ref: id },\n content: list.items.map(entry => {\n const content = fill(entry.tokens.flatMap(t => block(t, hints)));\n if (!tasks && entry.task) content[0].content = [{ type: 'text', text: entry.checked ? '[x] ' : '[ ] ' }, ...(content[0].content ?? [])];\n return tasks ? { type: 'taskItem', attrs: { checked: !!entry.checked }, content } : { type: 'listItem', content };\n }),\n }];\n }\n case 'table': {\n const table = token as Tokens.Table;\n const cell = (type: string) => (c: Tokens.TableCell, i: number) => ({ type, attrs: { align: table.align[i] }, content: [{ type: 'paragraph', content: inline(c.tokens) }] });\n return [{ type: 'table', content: [\n { type: 'tableRow', content: table.header.map(cell('tableHeader')) },\n ...table.rows.map(row => ({ type: 'tableRow', content: row.map(cell('tableCell')) })),\n ] }];\n }\n default: return [{ type: 'paragraph', content: inline([{ type: 'text', raw: token.raw, text: token.raw }]) }];\n }\n}\n\nconst opens = /^\\s*<!--\\s*toc\\s*-->\\s*$/i;\nconst shuts = /^\\s*<!--\\s*\\/toc\\s*-->\\s*$/i;\nconst row = /^(\\s*)[-*+]\\s+\\[((?:\\\\.|[^\\]\\\\])*)\\]\\(#[^)\\s]*\\)\\s*$/;\n\nfunction contents(tokens: Token[], i: number): { end: number; entries: [number, string][] } | null {\n if (tokens[i].type !== 'html' || !opens.test(tokens[i].raw)) return null;\n let j = i + 1;\n const skip = () => { while (tokens[j]?.type === 'space') j++; };\n skip();\n const list = tokens[j]?.type === 'list' ? tokens[j++] : null;\n skip();\n if (tokens[j]?.type !== 'html' || !shuts.test(tokens[j].raw)) return null;\n const rows = list ? list.raw.split('\\n').filter(line => line.trim()).map(line => row.exec(line)) : [];\n if (rows.some(r => !r)) return null;\n const steps = [...new Set(rows.map(r => r![1].length))].sort((a, b) => a - b);\n return { end: j, entries: rows.map(r => [steps.indexOf(r![1].length) + 1, r![2].replace(/\\\\(.)/g, '$1')]) };\n}\n\nconst slug = (text: string, seen: Map<string, number>) => {\n const base = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s_-]/gu, '').trim().replace(/\\s/g, '-');\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n return n ? `${base}-${n}` : base;\n};\n\nfunction sniff(tokens: Token[]): Style {\n const style: Style = { bullet: '-', delim: '.', em: '*', strong: '**', fence: '```', br: '\\\\\\n', loose: false };\n const seen = new Set<string>();\n const note = <K extends keyof Style>(key: K, value: Style[K]) => {\n if (seen.has(key)) return;\n seen.add(key);\n style[key] = value;\n };\n let loose = 0;\n marked.walkTokens(tokens, token => {\n if (token.type === 'list') {\n const marker = /^\\s*(?:([-*+])|\\d+([.)]))/.exec(token.raw);\n if (token.ordered) note('delim', marker?.[2] ?? '.');\n else note('bullet', marker?.[1] ?? '-');\n loose += token.loose ? 1 : -1;\n } else if (token.type === 'em') note('em', token.raw[0]);\n else if (token.type === 'strong') note('strong', token.raw.slice(0, 2));\n else if (token.type === 'code' && /^ {0,3}(```|~~~)/.test(token.raw)) note('fence', token.raw.trimStart().slice(0, 3));\n else if (token.type === 'br' && token.raw !== '<br>') note('br', token.raw.startsWith('\\\\') ? '\\\\\\n' : ' \\n');\n });\n style.loose = loose > 0;\n return style;\n}\n\nexport function fromMarkdown(source: string): Parsed {\n const bom = source.startsWith('');\n const crlf = source.includes('\\r\\n');\n const tokens = marked.lexer(source.slice(bom ? 1 : 0).replace(/\\r\\n?/g, '\\n'));\n const hints: Record<string, Hint> = {};\n const content: JSONContent[] = [];\n const raws: string[] = [];\n let head = '';\n let gap = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const toc = contents(tokens, i);\n const made = toc ? [{ type: 'toc', attrs: { entries: JSON.stringify(toc.entries) } }] : block(token, hints);\n if (!made.length) { gap += token.raw; continue; }\n if (raws.length) raws[raws.length - 1] += gap;\n else head = gap;\n gap = '';\n content.push(...made);\n raws.push(toc ? tokens.slice(i, toc.end + 1).map(t => t.raw).join('') : token.raw);\n if (toc) i = toc.end;\n }\n if (!content.length) { content.push({ type: 'paragraph' }); raws.push(''); head = ''; }\n return { doc: { type: 'doc', content }, raws, head, tail: gap, style: sniff(tokens), hints, crlf, bom };\n}\n\nexport const track = ({ doc: _json, ...parsed }: Parsed, doc: Node): Base => {\n const nodes: Node[] = [];\n doc.forEach(node => nodes.push(node));\n return nodes.length === parsed.raws.length ? { ...parsed, nodes } : { ...parsed, nodes: [], raws: [], head: '', tail: '\\n' };\n};\n\ntype Auto = { inAutolink?: boolean };\n\nconst ticks = (node: Node, side: number) => {\n const len = Math.max(0, ...(node.isText ? node.text!.match(/`+/g) ?? [] : []).map(run => run.length));\n return len ? (side > 0 ? ` ${'`'.repeat(len + 1)}` : `${'`'.repeat(len + 1)} `) : '`';\n};\n\nconst plain = (mark: Mark, parent: Node, index: number) => {\n const node = parent.child(index);\n const href = mark.attrs.href as string;\n if (!node.isText || node.marks.length !== 1 || (index + 1 < parent.childCount && mark.isInSet(parent.child(index + 1).marks))) return null;\n const text = node.text!;\n if (text !== href && `mailto:${text}` !== href && !(text.startsWith('www.') && `http://${text}` === href)) return null;\n const before = index ? parent.child(index - 1) : null;\n const after = index + 1 < parent.childCount ? parent.child(index + 1) : null;\n const left = before ? (before.isText ? before.text!.slice(-1) : 'x') : '';\n const right = after ? (after.isText ? after.text! : 'x') : '';\n return /^[\\s(*_~]?$/.test(left) && /^([\\s)]|[.,:;!?]+(\\s|$)|$)/.test(right) ? 'bare' : text === href || href.startsWith('mailto:') ? 'angle' : null;\n};\n\nfunction serializer(style: Style, hints: Record<string, Hint>, before: Node | null, cell = false) {\n let form: string | null = null;\n const hint = (node: Node) => hints[node.attrs.ref as string] ?? {};\n const run = (parent: Node, index: number, types: string[]) => {\n let n = 0;\n for (let i = index - 1; i >= 0 && types.includes(parent.child(i).type.name); i--) n++;\n if (!index && before && types.includes(before.type.name)) n++;\n return n % 2;\n };\n const tight = (state: MarkdownSerializerState, node: Node, render: () => void) => {\n const deep = node.content.content.some(entry => entry.content.content.filter(child => !child.type.name.endsWith('List')).length > 1);\n const was = state.options.tightLists;\n state.options.tightLists = !deep && !(hint(node).loose ?? style.loose);\n render();\n state.options.tightLists = was;\n };\n const list = (state: MarkdownSerializerState, node: Node, parent: Node, index: number) => {\n const bullet = hint(node).bullet ?? (run(parent, index, ['bulletList', 'taskList']) ? (style.bullet === '-' ? '*' : '-') : style.bullet);\n tight(state, node, () => state.renderList(node, ' ', () => `${bullet} `));\n };\n const blank = { open: '', close: '', mixable: true };\n const wrap = (open: string, close = open) => ({ open, close, mixable: true, expelEnclosingWhitespace: true });\n return new MarkdownSerializer({\n paragraph(state, node) { state.renderInline(node); state.closeBlock(node); },\n heading(state, node) { state.write(`${'#'.repeat(node.attrs.level)} `); state.renderInline(node, false); state.closeBlock(node); },\n blockquote(state, node) { state.wrapBlock('> ', null, node, () => state.renderContent(node)); },\n codeBlock(state, node) {\n const mark = (hint(node).fence ?? style.fence)[0];\n const longest = Math.max(2, ...(node.textContent.match(new RegExp(`${mark}{3,}`, 'g')) ?? []).map(r => r.length));\n const fence = mark.repeat(longest + 1);\n state.write(`${fence}${node.attrs.language ?? ''}\\n`);\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write(fence);\n state.closeBlock(node);\n },\n horizontalRule(state, node) { state.write('---'); state.closeBlock(node); },\n pageBreak(state, node) { state.closeBlock(node); },\n toc(state, node) {\n const seen = new Map<string, number>();\n const lines = (JSON.parse(node.attrs.entries) as [number, string][]).map(([level, text]) => `${' '.repeat(level - 1)}${style.bullet} [${text.replace(/[[\\]\\\\]/g, '\\\\$&')}](#${slug(text, seen)})\\n`);\n state.write(`<!-- toc -->\\n${lines.join('')}<!-- /toc -->`);\n state.closeBlock(node);\n },\n bulletList: list,\n taskList: list,\n orderedList(state, node, parent, index) {\n const start = (node.attrs.start as number | null) ?? 1;\n const delim = hint(node).delim ?? (run(parent, index, ['orderedList']) ? (style.delim === '.' ? ')' : '.') : style.delim);\n const width = String(start + node.childCount - 1).length;\n tight(state, node, () => state.renderList(node, ' '.repeat(width + 2), i => `${start + i}${delim} `));\n },\n listItem(state, node) { state.renderContent(node); },\n taskItem(state, node) { state.write(node.attrs.checked ? '[x] ' : '[ ] '); state.renderContent(node); },\n table(state, node) {\n const rows: string[][] = [];\n const aligns: (string | null)[] = [];\n node.forEach((row, _, r) => {\n const cells: string[] = [];\n row.forEach(c => {\n const span = (c.attrs.colspan as number) || 1;\n const text: string[] = [];\n c.forEach(child => text.push(serializer(style, hints, null, true).serialize(c.type.schema.topNodeType.create(null, child)).replace(/\\n+/g, ' ')));\n if (!r) aligns.push(c.attrs.align as string | null, ...Array(span - 1).fill(null));\n cells.push(text.join('<br>').replace(/\\|/g, '\\\\|'), ...Array(span - 1).fill(''));\n });\n rows.push(cells);\n });\n const width = Math.max(...rows.map(r => r.length));\n const line = (cells: string[]) => `| ${[...cells, ...Array(width - cells.length).fill('')].join(' | ')} |`;\n const rule = Array.from({ length: width }, (_, i) => ({ left: ':---', center: ':---:', right: '---:' })[aligns[i] ?? ''] ?? '---');\n [line(rows[0]), `| ${rule.join(' | ')} |`, ...rows.slice(1).map(line)].forEach((text, i) => {\n if (i) state.ensureNewLine();\n state.write(text);\n });\n state.closeBlock(node);\n },\n image(state, node) {\n const src = String(node.attrs.src ?? '');\n const title = node.attrs.title ? ` \"${String(node.attrs.title).replace(/\"/g, '\\\\\"')}\"` : '';\n state.write(` ? `<${src}>` : src.replace(/[()]/g, '\\\\$&')}${title})`);\n },\n hardBreak(state, node, parent, index) {\n for (let i = index + 1; i < parent.childCount; i++) {\n if (parent.child(i).type === node.type) continue;\n state.write(cell ? '<br>' : style.br);\n return;\n }\n },\n text(state, node) { state.text(node.text!, !(state as Auto).inAutolink); },\n }, {\n italic: wrap(style.em), bold: wrap(style.strong), strike: wrap('~~'), underline: wrap('<u>', '</u>'), highlight: wrap('<mark>', '</mark>'),\n textStyle: blank, comment: blank,\n link: {\n open(state, mark, parent, index) {\n form = plain(mark, parent, index);\n (state as Auto).inAutolink = !!form;\n return form === 'bare' ? '' : form === 'angle' ? '<' : '[';\n },\n close(state, mark) {\n (state as Auto).inAutolink = undefined;\n const was = form;\n form = null;\n return was === 'bare' ? '' : was === 'angle' ? '>' : `](${String(mark.attrs.href).replace(/[()\"]/g, '\\\\$&')})`;\n },\n mixable: true,\n },\n code: { open: (_s, _m, parent, index) => ticks(parent.child(index), -1), close: (_s, _m, parent, index) => ticks(parent.child(index - 1), 1), escape: false },\n }, { hardBreakNodeName: 'hardBreak', strict: false, escapeExtraCharacters: /<(?=[A-Za-z/!?])/g });\n}\n\nconst one = (node: Node, before: Node | null, base: Base) =>\n serializer(base.style, base.hints, before).serialize(node.type.schema.topNodeType.create(null, node)).replace(/\\n+$/, '');\n\nexport function toMarkdown(doc: Node, base: Base): { text: string; base: Base } {\n const nodes: Node[] = [];\n const found: number[] = [];\n let j = 0;\n doc.forEach(node => {\n let k = -1;\n for (let m = j; m < Math.min(base.nodes.length, j + 64) && k < 0; m++) if (base.nodes[m] === node || base.nodes[m].eq(node)) k = m;\n if (k >= 0) j = k + 1;\n nodes.push(node);\n found.push(k);\n });\n let out = base.head;\n const starts: number[] = [];\n nodes.forEach((node, i) => {\n const k = found[i];\n if (i && !(k >= 0 && found[i - 1] === k - 1)) out = out.replace(/\\n*$/, '\\n\\n');\n starts.push(out.length);\n out += k >= 0 ? base.raws[k] : one(node, i ? nodes[i - 1] : null, base);\n });\n const last = found[found.length - 1];\n const end = last >= 0 && last === base.nodes.length - 1;\n if (!end) out = out.replace(/\\n*$/, '\\n');\n const cut = out.length;\n out += end ? base.tail : base.tail.trim() ? `\\n${base.tail.replace(/^\\n+/, '')}` : '';\n const at = starts.map(s => Math.min(s, cut));\n const raws = at.map((s, i) => out.slice(s, i + 1 < at.length ? at[i + 1] : cut));\n const text = base.crlf ? out.replace(/\\n/g, '\\r\\n') : out;\n return { text: base.bom ? `${text}` : text, base: { ...base, nodes, raws, tail: out.slice(cut) } };\n}\n","import type { IWorkbookData } from '@univerjs/core';\n\nexport type Lines = { rows: string[]; cols: string[] };\n\nexport type CsvFormat = { delimiter: string; encoding: string; bom: boolean; eol: string; decimal: '.' | ','; end: boolean };\n\nexport type SheetModel = {\n book: IWorkbookData;\n lines: Record<string, Lines>;\n origin: { sheets: Record<string, number>; lines: Record<string, Lines> };\n csv?: CsvFormat;\n active?: string;\n};\n\nexport class SheetRefusal extends Error {\n constructor(public code: 'chartSource' | 'pivotSheet' | 'tableColumns', public sheet = '') {\n super(code);\n }\n}\n\nlet counter = 0;\nexport const fresh = (prefix: string) => `${prefix}${Date.now().toString(36)}${(counter++).toString(36)}${Math.random().toString(36).slice(2, 6)}`;\n\nexport const numbered = (prefix: string, count: number) => Array.from({ length: count }, (_, i) => `${prefix}${i}`);\n\nexport function insert(list: string[], at: number, count: number, prefix: string) {\n list.splice(at, 0, ...Array.from({ length: count }, () => fresh(prefix)));\n}\n\nexport function move(list: string[], from: number, count: number, to: number) {\n const taken = list.splice(from, count);\n list.splice(to > from ? to - count : to, 0, ...taken);\n}\n\nexport function resize(list: string[], count: number, prefix: string) {\n if (list.length > count) list.length = count;\n else insert(list, list.length, count - list.length, prefix);\n}\n\nexport function rebase(model: SheetModel, lines: Record<string, Lines>, sheets: Record<string, number>) {\n model.origin = { sheets, lines: Object.fromEntries(Object.entries(lines).map(([id, l]) => [id, { rows: [...l.rows], cols: [...l.cols] }])) };\n}\n","import type { ICellData, IWorkbookData } from '@univerjs/core';\nimport { numbered, type CsvFormat, type SheetModel } from './model';\n\ntype Field = { text: string; raw: string };\n\nfunction decode(bytes: Uint8Array): { text: string; encoding: string; bom: boolean } {\n if (bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) return { text: new TextDecoder('utf-8').decode(bytes.subarray(3)), encoding: 'utf-8', bom: true };\n if (bytes[0] === 0xff && bytes[1] === 0xfe) return { text: new TextDecoder('utf-16le').decode(bytes.subarray(2)), encoding: 'utf-16le', bom: true };\n if (bytes[0] === 0xfe && bytes[1] === 0xff) return { text: new TextDecoder('utf-16be').decode(bytes.subarray(2)), encoding: 'utf-16be', bom: true };\n try {\n return { text: new TextDecoder('utf-8', { fatal: true }).decode(bytes), encoding: 'utf-8', bom: false };\n } catch {\n const scored = ['windows-1252', 'windows-1250', 'windows-1251'].map(encoding => {\n const text = new TextDecoder(encoding).decode(bytes);\n let score = 0;\n for (const [word] of text.matchAll(/\\p{L}+/gu)) {\n const cyrillic = (word.match(/\\p{Script=Cyrillic}/gu) ?? []).length;\n const accented = (word.match(/[^\\x00-\\x7f\\p{Script=Cyrillic}]/gu) ?? []).length;\n if (cyrillic === word.length || (!cyrillic && accented * 2 <= word.length)) score += 1;\n else score -= 1;\n }\n score -= 3 * (text.match(/\\p{L}[^\\p{L}\\x00-\\x7f]|[^\\p{L}\\x00-\\x7f]\\p{L}/gu) ?? []).length;\n return { text, encoding, score };\n });\n const best = scored.reduce((a, b) => b.score > a.score ? b : a);\n return { text: best.text, encoding: best.encoding, bom: false };\n }\n}\n\nfunction encode(text: string, encoding: string, bom: boolean): Uint8Array {\n if (encoding === 'utf-8') {\n const body = new TextEncoder().encode(text);\n if (!bom) return body;\n const out = new Uint8Array(body.length + 3);\n out.set([0xef, 0xbb, 0xbf]);\n out.set(body, 3);\n return out;\n }\n if (encoding === 'utf-16le' || encoding === 'utf-16be') {\n const out = new Uint8Array(text.length * 2 + (bom ? 2 : 0));\n const view = new DataView(out.buffer);\n let at = 0;\n if (bom) { view.setUint16(0, 0xfeff, encoding === 'utf-16le'); at = 2; }\n for (let i = 0; i < text.length; i++) view.setUint16(at + i * 2, text.charCodeAt(i), encoding === 'utf-16le');\n return out;\n }\n const table = new Map<string, number>();\n const decoder = new TextDecoder(encoding);\n for (let b = 255; b >= 0; b--) table.set(decoder.decode(new Uint8Array([b])), b);\n const out = new Uint8Array(text.length);\n for (let i = 0; i < text.length; i++) out[i] = table.get(text[i]) ?? 63;\n return out;\n}\n\nfunction split(text: string, delimiter: string, limit = Infinity): Field[][] {\n const rows: Field[][] = [];\n let row: Field[] = [];\n let i = 0;\n const n = text.length;\n while (i <= n && rows.length < limit) {\n const start = i;\n let value = '';\n if (text[i] === '\"') {\n i++;\n while (i < n) {\n if (text[i] === '\"') {\n if (text[i + 1] === '\"') { value += '\"'; i += 2; continue; }\n i++;\n break;\n }\n value += text[i++];\n }\n while (i < n && text[i] !== delimiter && text[i] !== '\\n' && text[i] !== '\\r') value += text[i++];\n } else {\n while (i < n && text[i] !== delimiter && text[i] !== '\\n' && text[i] !== '\\r') i++;\n value = text.slice(start, i);\n }\n row.push({ text: value, raw: text.slice(start, i) });\n if (i >= n) { rows.push(row); break; }\n if (text[i] === delimiter) { i++; continue; }\n i += text[i] === '\\r' && text[i + 1] === '\\n' ? 2 : 1;\n rows.push(row);\n row = [];\n if (i >= n) break;\n }\n return rows;\n}\n\nfunction sniff(text: string) {\n let best = ',', score = -1;\n for (const d of [',', ';', '\\t', '|']) {\n const rows = split(text, d, 30).filter(r => r.length > 1 || r[0]?.text);\n if (!rows.length) continue;\n const counts = new Map<number, number>();\n for (const r of rows) counts.set(r.length, (counts.get(r.length) ?? 0) + 1);\n const [width, often] = [...counts].sort((a, b) => b[1] - a[1] || b[0] - a[0])[0];\n const s = width > 1 ? often * 100 + width : 0;\n if (s > score) { score = s; best = d; }\n }\n return best;\n}\n\nconst numeric = (s: string, decimal: string) => decimal === ',' ? /^-?(0|[1-9]\\d*)(,\\d+)?$/.test(s) : /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][-+]?\\d+)?$/.test(s);\n\nexport function readCsv(bytes: ArrayBuffer): SheetModel {\n const { text, encoding, bom } = decode(new Uint8Array(bytes));\n const delimiter = sniff(text);\n const eol = /\\r\\n/.test(text) ? '\\r\\n' : /\\r(?!\\n)/.test(text) && !text.includes('\\n') ? '\\r' : '\\n';\n const rows = split(text, delimiter);\n const end = /[\\r\\n]$/.test(text);\n if (end && rows.length && rows[rows.length - 1].length === 1 && rows[rows.length - 1][0].raw === '') rows.pop();\n let commas = 0, dots = 0;\n if (delimiter !== ',') for (const r of rows) for (const f of r) {\n if (/^-?\\d+,\\d+$/.test(f.text)) commas++;\n else if (/^-?\\d+\\.\\d+$/.test(f.text)) dots++;\n }\n const decimal: '.' | ',' = commas > dots ? ',' : '.';\n const cellData: Record<number, Record<number, ICellData>> = {};\n let width = 0;\n rows.forEach((r, i) => {\n width = Math.max(width, r.length);\n r.forEach((f, c) => {\n if (f.text === '') return;\n (cellData[i] ??= {})[c] = numeric(f.text, decimal) ? { v: Number(decimal === ',' ? f.text.replace(',', '.') : f.text), t: 2 } : { v: f.text, t: 1 };\n });\n });\n const height = Math.max(rows.length + 100, 1000);\n const cols = Math.max(width + 4, 26);\n const format: CsvFormat = { delimiter, encoding, bom, eol, decimal, end };\n const book: IWorkbookData = {\n id: 'book', name: '', appVersion: '', locale: 'enUS' as IWorkbookData['locale'], styles: {}, sheetOrder: ['s1'],\n sheets: { s1: { id: 's1', name: 'Sheet1', rowCount: height, columnCount: cols, cellData, defaultColumnWidth: 88, defaultRowHeight: 24 } },\n };\n return { book, csv: format, lines: { s1: { rows: numbered('r', height), cols: numbered('c', cols) } }, origin: { sheets: { s1: 1 }, lines: { s1: { rows: numbered('r', height), cols: numbered('c', cols) } } } };\n}\n\nfunction value(x: ICellData | undefined): string | number | boolean | null {\n if (!x) return null;\n const stream = x.p?.body?.dataStream;\n if (stream !== undefined && (x.v === undefined || x.v === null || x.v === '')) return stream.replace(/\\r?\\n$/, '').replace(/\\r\\n?/g, '\\n');\n if (x.t === 3 && typeof x.v === 'number') return x.v === 1;\n return x.v ?? null;\n}\n\nexport function writeCsv(original: ArrayBuffer, model: SheetModel): ArrayBuffer {\n const { text } = decode(new Uint8Array(original));\n const format = model.csv ?? readCsv(original).csv!;\n const old = split(text, format.delimiter);\n if (format.end && old.length && old[old.length - 1].length === 1 && old[old.length - 1][0].raw === '') old.pop();\n const sid = model.book.sheetOrder[0];\n const sheet = model.book.sheets[sid];\n const cells = (sheet.cellData ?? {}) as Record<number, Record<number, ICellData>>;\n const lines = model.lines[sid], origin = model.origin.lines[sid] ?? lines;\n const rowFrom = new Map(origin.rows.map((id, i) => [id, i])), colFrom = new Map(origin.cols.map((id, i) => [id, i]));\n const quote = (s: string) => s.includes(format.delimiter) || s.includes('\"') || s.includes('\\n') || s.includes('\\r') ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n const show = (v: string | number | boolean | null) => {\n if (v === null || v === undefined) return '';\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';\n if (typeof v === 'number') return format.decimal === ',' ? String(v).replace('.', ',') : String(v);\n return String(v);\n };\n const last = Math.max(-1, ...Object.keys(cells).map(Number).filter(r => Object.values(cells[r] ?? {}).some(x => show(value(x)) !== '')));\n const out: string[] = [];\n for (let r = 0; r <= last; r++) {\n const r0 = rowFrom.get(lines.rows[r]) ?? -1;\n const was = r0 >= 0 ? old[r0] : undefined;\n const line = cells[r] ?? {};\n const filled = Object.keys(line).map(Number).filter(c => show(value(line[c])) !== '');\n let count = filled.length ? Math.max(...filled) + 1 : 0;\n if (was) for (let c0 = 0; c0 < was.length; c0++) count = Math.max(count, lines.cols.indexOf(origin.cols[c0]) + 1);\n const fields: string[] = [];\n for (let c = 0; c < count; c++) {\n const c0 = colFrom.get(lines.cols[c]) ?? -1;\n const before = was && c0 >= 0 ? was[c0] : undefined;\n const now = show(value(line[c]));\n if (before && now === before.text) fields.push(before.raw);\n else if (before && before.text !== '' && now !== '' && numeric(before.text, format.decimal) && Number(before.text.replace(',', '.')) === Number(now.replace(',', '.'))) fields.push(before.raw);\n else fields.push(quote(now));\n }\n out.push(fields.join(format.delimiter));\n }\n const body = out.join(format.eol) + (format.end && out.length ? format.eol : '');\n const bytes = encode(body, format.encoding, format.bom);\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n","import { entry, inflate, unzip, zip, type Entry } from '../docx/zip';\nimport { attrs } from '../docx/xml';\n\nexport type Rel = { id: string; type: string; target: string; external: boolean };\n\nconst decoder = new TextDecoder();\n\nexport class Pack {\n entries: Entry[];\n names = new Map<string, number>();\n changed = new Map<string, string | Uint8Array | null>();\n\n constructor(bytes: ArrayBuffer) {\n this.entries = unzip(new Uint8Array(bytes));\n this.entries.forEach((e, i) => this.names.set(e.name.replace(/^\\//, ''), i));\n }\n\n bytes(name: string): Uint8Array | null {\n const next = this.changed.get(name);\n if (next !== undefined) return typeof next === 'string' ? new TextEncoder().encode(next) : next;\n const i = this.names.get(name);\n return i === undefined ? null : inflate(this.entries[i]);\n }\n\n text(name: string): string | null {\n const next = this.changed.get(name);\n if (typeof next === 'string') return next;\n const bytes = this.bytes(name);\n return bytes && decoder.decode(bytes);\n }\n\n put(name: string, value: string | Uint8Array | null) {\n this.changed.set(name, value);\n }\n\n rels(part: string): Rel[] {\n const xml = this.text(relsOf(part));\n if (!xml) return [];\n const base = part.includes('/') ? part.slice(0, part.lastIndexOf('/') + 1) : '';\n return [...xml.matchAll(/<(?:\\w+:)?Relationship\\b[^>]*>/g)].map(m => {\n const a = Object.fromEntries(attrs(m[0]));\n const external = a.TargetMode === 'External';\n return { id: a.Id, type: a.Type.slice(a.Type.lastIndexOf('/') + 1), target: external ? a.Target : resolve(base, a.Target), external };\n });\n }\n\n build(): Uint8Array {\n const out: Entry[] = [];\n const seen = new Set<string>();\n for (const e of this.entries) {\n const name = e.name.replace(/^\\//, '');\n seen.add(name);\n const next = this.changed.get(name);\n if (next === null) continue;\n out.push(next === undefined ? e : entry(e.name, typeof next === 'string' ? new TextEncoder().encode(next) : next, e));\n }\n const like = this.entries[0];\n for (const [name, next] of this.changed) if (!seen.has(name) && next !== null) out.push(entry(name, typeof next === 'string' ? new TextEncoder().encode(next) : next, like));\n return zip(out);\n }\n}\n\nexport const relsOf = (part: string) => {\n const i = part.lastIndexOf('/');\n return `${part.slice(0, i + 1)}_rels/${part.slice(i + 1)}.rels`;\n};\n\nexport function resolve(base: string, target: string) {\n if (target.startsWith('/')) return target.slice(1);\n const parts = (base + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.' && p !== '') out.push(p);\n }\n return out.join('/');\n}\n\nexport function relative(from: string, to: string) {\n const a = from.split('/').slice(0, -1), b = to.split('/');\n let i = 0;\n while (i < a.length && a[i] === b[i]) i++;\n return [...a.slice(i).map(() => '..'), ...b.slice(i)].join('/');\n}\n","export type Box = { startRow: number; startColumn: number; endRow: number; endColumn: number };\n\nexport type Map1 = (i: number) => number;\n\nconst MAX_ROW = 1048575;\nconst MAX_COL = 16383;\n\nexport function letters(c: number) {\n let s = '';\n for (let n = c + 1; n > 0; n = Math.floor((n - 1) / 26)) s = String.fromCharCode(65 + ((n - 1) % 26)) + s;\n return s;\n}\n\nexport function column(s: string) {\n let n = 0;\n for (let i = 0; i < s.length; i++) n = n * 26 + (s.charCodeAt(i) & ~32) - 64;\n return n - 1;\n}\n\nexport const a1 = (r: number, c: number) => letters(c) + (r + 1);\n\nexport function cell(ref: string): [number, number] {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref);\n return m ? [Number(m[2]) - 1, column(m[1])] : [-1, -1];\n}\n\ntype Side = { col: number | null; row: number | null; colAbs: boolean; rowAbs: boolean };\n\nfunction side(s: string): Side | null {\n const m = /^(\\$?)([A-Za-z]{1,3})?(\\$?)(\\d+)?$/.exec(s);\n if (!m || (!m[2] && !m[4])) return null;\n return {\n col: m[2] ? column(m[2]) : null,\n row: m[4] ? Number(m[4]) - 1 : null,\n colAbs: !!m[2] && m[1] === '$',\n rowAbs: m[2] ? m[3] === '$' : m[1] === '$' || m[3] === '$',\n };\n}\n\nconst write = (s: Side) => (s.col === null ? '' : (s.colAbs ? '$' : '') + letters(s.col)) + (s.row === null ? '' : (s.rowAbs ? '$' : '') + (s.row + 1));\n\nexport function box(ref: string): Box | null {\n const [a, b = a] = ref.split(':');\n const p = side(a), q = side(b);\n if (!p || !q) return null;\n const rows = [p.row ?? (p === q ? 0 : 0), q.row ?? MAX_ROW], cols = [p.col ?? 0, q.col ?? MAX_COL];\n return { startRow: Math.min(rows[0], rows[1]), endRow: Math.max(rows[0], rows[1]), startColumn: Math.min(cols[0], cols[1]), endColumn: Math.max(cols[0], cols[1]) };\n}\n\nexport const span = (b: Box) => b.startRow === b.endRow && b.startColumn === b.endColumn ? a1(b.startRow, b.startColumn) : `${a1(b.startRow, b.startColumn)}:${a1(b.endRow, b.endColumn)}`;\n\nexport function boxes(sqref: string) {\n return sqref.trim().split(/\\s+/).filter(Boolean).map(box).filter((b): b is Box => b !== null);\n}\n\nexport function squeeze(b: Box, rows: Map1, cols: Map1): Box | null {\n const edge = (from: number, to: number, map: Map1, max: number): [number, number] | null => {\n if (from === 0 && to === max) return [0, max];\n let a = -1, z = -1;\n for (let i = from; i <= to && a < 0; i++) a = map(i);\n for (let i = to; i >= from && z < 0; i--) z = map(i);\n return a < 0 || z < 0 ? null : [a, z];\n };\n const r = edge(b.startRow, b.endRow, rows, MAX_ROW), c = edge(b.startColumn, b.endColumn, cols, MAX_COL);\n return r && c ? { startRow: r[0], endRow: r[1], startColumn: c[0], endColumn: c[1] } : null;\n}\n\nconst token = /(\"(?:[^\"]|\"\")*\")|('(?:[^']|'')+'|[A-Za-z_À-][\\w.À-]*)!|(\\[(?:[^[\\]]|\\[[^\\]]*\\])*\\])|(\\$?[A-Za-z]{1,3}\\$?\\d+(?::\\$?[A-Za-z]{1,3}\\$?\\d+)?|\\$?[A-Za-z]{1,3}:\\$?[A-Za-z]{1,3}|\\$?\\d+:\\$?\\d+)(?![\\w(.!À-])/g;\n\nexport type Piece = { sheet: string | null; text: string };\n\nexport function refs(formula: string, visit: (piece: Piece) => string): string {\n let sheet: string | null = null;\n let outside = false;\n let last = 0;\n let out = '';\n token.lastIndex = 0;\n for (let m = token.exec(formula); m; m = token.exec(formula)) {\n if (m[1]) { sheet = null; continue; }\n if (m[3]) { outside = formula[m.index - 1] !== '!' && /^\\[\\d+\\]$/.test(m[3]); continue; }\n if (m[2]) {\n sheet = outside ? '\\u0000' : m[2].startsWith(\"'\") ? m[2].slice(1, -1).replace(/''/g, \"'\") : m[2];\n outside = false;\n continue;\n }\n const before = formula[m.index - 1];\n if (before && /[\\w.À-]/.test(before)) { sheet = null; continue; }\n out += formula.slice(last, m.index) + visit({ sheet: before === '!' ? sheet : null, text: m[4] });\n last = m.index + m[0].length;\n sheet = null;\n }\n return out + formula.slice(last);\n}\n\nexport function shifted(formula: string, dr: number, dc: number) {\n return refs(formula, p => {\n const ends = p.text.split(':').map(side);\n if (ends.some(e => !e)) return p.text;\n for (const e of ends as Side[]) {\n if (e.col !== null && !e.colAbs) e.col += dc;\n if (e.row !== null && !e.rowAbs) e.row += dr;\n if ((e.col ?? 0) < 0 || (e.row ?? 0) < 0 || (e.col ?? 0) > MAX_COL || (e.row ?? 0) > MAX_ROW) return '#REF!';\n }\n return (ends as Side[]).map(write).join(':');\n });\n}\n\nexport function remapped(formula: string, mine: (sheet: string | null) => boolean, rows: Map1, cols: Map1) {\n return refs(formula, p => {\n if (!mine(p.sheet)) return p.text;\n const b = box(p.text);\n const ends = p.text.split(':').map(side) as Side[];\n if (!b || ends.some(e => !e)) return p.text;\n const s = squeeze(b, rows, cols);\n if (!s) return '#REF!';\n const [first, second = first] = ends;\n const put = (e: Side, r: number, c: number) => ({ ...e, row: e.row === null ? null : r, col: e.col === null ? null : c });\n return ends.length === 1 ? write(put(first, s.startRow, s.startColumn)) : `${write(put(first, s.startRow, s.startColumn))}:${write(put(second, s.endRow, s.endColumn))}`;\n });\n}\n\nexport const quoted = (name: string) => /^[A-Za-z_À-][\\w.À-]*$/.test(name) && !/^[A-Za-z]{1,3}\\d+$/.test(name) && !/^(R|C|RC|R\\d+C\\d+)$/i.test(name) ? name : `'${name.replace(/'/g, \"''\")}'`;\n\nexport function renamed(formula: string, from: string, to: string) {\n token.lastIndex = 0;\n return formula.replace(token, (all, str: string | undefined, sheet: string | undefined) => {\n if (str || !sheet) return all;\n const name = sheet.startsWith(\"'\") ? sheet.slice(1, -1).replace(/''/g, \"'\") : sheet;\n return name === from ? `${quoted(to)}!` : all;\n });\n}\n\nconst future = 'ACOT ACOTH AGGREGATE ARABIC ARRAYTOTEXT BASE BETA.DIST BETA.INV BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR BYCOL BYROW CEILING.MATH CEILING.PRECISE CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSECOLS CHOOSEROWS COMBINA CONCAT CONFIDENCE.NORM CONFIDENCE.T COT COTH COVARIANCE.P COVARIANCE.S CSC CSCH DAYS DECIMAL DROP ERF.PRECISE ERFC.PRECISE EXPAND EXPON.DIST F.DIST F.DIST.RT F.INV F.INV.RT F.TEST FILTERXML FLOOR.MATH FLOOR.PRECISE FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT GAMMA GAMMA.DIST GAMMA.INV GAMMALN.PRECISE GAUSS HSTACK HYPGEOM.DIST IFNA IFS IMCOSH IMCOT IMCSC IMCSCH IMSEC IMSECH IMSINH IMTAN ISFORMULA ISOMITTED ISOWEEKNUM LAMBDA LET LOGNORM.DIST LOGNORM.INV MAKEARRAY MAP MAXIFS MINIFS MODE.MULT MODE.SNGL MUNIT NEGBINOM.DIST NETWORKDAYS.INTL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV NUMBERVALUE PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTRANK.EXC PERCENTRANK.INC PERMUTATIONA PHI POISSON.DIST QUARTILE.EXC QUARTILE.INC RANDARRAY RANK.AVG RANK.EQ REDUCE RRI SCAN SEC SECH SEQUENCE SHEET SHEETS SKEW.P STDEV.P STDEV.S SWITCH T.DIST T.DIST.2T T.DIST.RT T.INV T.INV.2T T.TEST TAKE TEXTAFTER TEXTBEFORE TEXTJOIN TEXTSPLIT TOCOL TOROW UNICHAR UNICODE UNIQUE VALUETOTEXT VAR.P VAR.S VSTACK WEBSERVICE WEIBULL.DIST WORKDAY.INTL WRAPCOLS WRAPROWS XLOOKUP XMATCH XOR Z.TEST';\nconst prefixes = new Map<string, string>([...future.split(' ').map(n => [n, '_xlfn.'] as const), ...'FILTER SORT SORTBY'.split(' ').map(n => [n, '_xlfn._xlws.'] as const)]);\n\nexport const plain = (formula: string) => formula.includes('_xl') ? formula.replace(/_xlfn\\.(?:_xlws\\.)?|_xlws\\./gi, '') : formula;\n\nexport function stored(formula: string) {\n let out = '';\n let last = 0;\n const re = /(\"(?:[^\"]|\"\")*\")|((?<![\\w.])[A-Za-z][\\w.]*)(?=\\()/g;\n for (let m = re.exec(formula); m; m = re.exec(formula)) {\n const prefix = m[2] && prefixes.get(m[2].toUpperCase());\n if (!prefix) continue;\n out += formula.slice(last, m.index) + prefix + m[2];\n last = m.index + m[2].length;\n }\n return out + formula.slice(last);\n}\n","import type { IBorderData, IStyleData } from '@univerjs/core';\nimport { attr, attrs, escape, parse, type El } from '../docx/xml';\n\nconst builtin: Record<number, string> = {\n 1: '0', 2: '0.00', 3: '#,##0', 4: '#,##0.00', 5: '\"$\"#,##0_);(\"$\"#,##0)', 6: '\"$\"#,##0_);[Red](\"$\"#,##0)', 7: '\"$\"#,##0.00_);(\"$\"#,##0.00)',\n 8: '\"$\"#,##0.00_);[Red](\"$\"#,##0.00)', 9: '0%', 10: '0.00%', 11: '0.00E+00', 12: '# ?/?', 13: '# ??/??', 14: 'yyyy-mm-dd', 15: 'd-mmm-yy', 16: 'd-mmm',\n 17: 'mmm-yy', 18: 'h:mm AM/PM', 19: 'h:mm:ss AM/PM', 20: 'h:mm', 21: 'h:mm:ss', 22: 'yyyy-mm-dd h:mm', 37: '#,##0 ;(#,##0)', 38: '#,##0 ;[Red](#,##0)',\n 39: '#,##0.00;(#,##0.00)', 40: '#,##0.00;[Red](#,##0.00)', 45: 'mm:ss', 46: '[h]:mm:ss', 47: 'mmss.0', 48: '##0.0E+0', 49: '@',\n};\n\nconst indexed = ['000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF', '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF',\n '00FFFF', '800000', '008000', '000080', '808000', '800080', '008080', 'C0C0C0', '808080', '9999FF', '993366', 'FFFFCC', 'CCFFFF', '660066', 'FF8080', '0066CC',\n 'CCCCFF', '000080', 'FF00FF', 'FFFF00', '00FFFF', '800080', '800000', '008080', '0000FF', '00CCFF', 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF', 'FF99CC', 'CC99FF',\n 'FFCC99', '3366FF', '33CCCC', '99CC00', 'FFCC00', 'FF9900', 'FF6600', '666699', '969696', '003366', '339966', '003300', '333300', '993300', '993366', '333399',\n '333333', '000000', 'FFFFFF'];\n\nconst lines = ['', 'thin', 'hair', 'dotted', 'dashed', 'dashDot', 'dashDotDot', 'double', 'medium', 'mediumDashed', 'mediumDashDot', 'mediumDashDotDot', 'slantDashDot', 'thick'];\nconst across = ['', 'left', 'center', 'right', 'justify', 'justify', 'distributed'];\nconst down = ['', 'top', 'center', 'bottom'];\nconst sides = [['l', 'left'], ['r', 'right'], ['t', 'top'], ['b', 'bottom']] as const;\nconst fontOrder = ['b', 'i', 'strike', 'condense', 'extend', 'outline', 'shadow', 'u', 'vertAlign', 'sz', 'color', 'name', 'family', 'charset', 'scheme'];\n\nfunction tinted(hex: string, tint: number) {\n if (!tint) return hex;\n const [r, g, b] = [0, 2, 4].map(i => parseInt(hex.slice(i, i + 2), 16) / 255);\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h /= 6;\n }\n l = tint < 0 ? l * (1 + tint) : l * (1 - tint) + tint;\n const hue = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t : t < 1 / 2 ? q : t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 : p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;\n const out = s === 0 ? [l, l, l] : [hue(p, q, h + 1 / 3), hue(p, q, h), hue(p, q, h - 1 / 3)];\n return out.map(v => Math.round(v * 255).toString(16).padStart(2, '0')).join('').toUpperCase();\n}\n\nfunction palette(theme: string | null): string[] {\n if (!theme) return ['FFFFFF', '000000', 'E7E6E6', '44546A', '4472C4', 'ED7D31', 'A5A5A5', 'FFC000', '5B9BD5', '70AD47', '0563C1', '954F72'];\n const scheme = /<(?:\\w+:)?clrScheme\\b[^>]*>([\\s\\S]*?)<\\/(?:\\w+:)?clrScheme>/.exec(theme)?.[1] ?? '';\n const pick = (name: string) => {\n const m = new RegExp(`<(?:\\\\w+:)?${name}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${name}>`).exec(scheme)?.[1] ?? '';\n return /(?:val|lastClr)=\"([0-9A-Fa-f]{6})\"/.exec(m.includes('lastClr') ? m.replace(/val=\"\\w+\"/, '') : m)?.[1]?.toUpperCase() ?? '000000';\n };\n const [dk1, lt1, dk2, lt2] = ['dk1', 'lt1', 'dk2', 'lt2'].map(pick);\n return [lt1, dk1, lt2, dk2, ...['accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'].map(pick)];\n}\n\nconst hex = (c: unknown) => {\n const s = String(c ?? '').trim();\n let m = /^#?([0-9a-f]{6})$/i.exec(s);\n if (m) return '#' + m[1].toUpperCase();\n m = /^#?([0-9a-f]{3})$/i.exec(s);\n if (m) return '#' + m[1].split('').map(x => x + x).join('').toUpperCase();\n m = /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i.exec(s);\n return m ? '#' + [m[1], m[2], m[3]].map(v => Number(v).toString(16).padStart(2, '0')).join('').toUpperCase() : null;\n};\n\nexport function norm(l: IStyleData): IStyleData {\n const out: IStyleData = {};\n if (l.bl) out.bl = 1;\n if (l.it) out.it = 1;\n if (l.ul?.s) out.ul = { s: 1 };\n if (l.st?.s) out.st = { s: 1 };\n if (l.va === 2 || l.va === 3) out.va = l.va;\n if (l.fs) out.fs = Number(l.fs);\n if (l.ff) out.ff = l.ff;\n const cl = hex(l.cl?.rgb);\n if (cl) out.cl = { rgb: cl };\n const bg = hex(l.bg?.rgb);\n if (bg) out.bg = { rgb: bg };\n if (l.bd) {\n const bd: IBorderData = {};\n for (const k of ['t', 'b', 'l', 'r', 'tl_br', 'bl_tr'] as const) {\n const b = l.bd[k];\n if (b && b.s) bd[k] = { s: b.s, cl: { rgb: hex(b.cl?.rgb) ?? '#000000' } };\n }\n if (Object.keys(bd).length) out.bd = bd;\n }\n if (l.ht) out.ht = l.ht;\n if (l.vt) out.vt = l.vt;\n if (l.tb === 3) out.tb = 3;\n if (l.tr && (l.tr.a || l.tr.v)) out.tr = { a: l.tr.a ?? 0, v: l.tr.v ? 1 : 0 };\n if (l.n?.pattern && l.n.pattern !== 'General') out.n = { pattern: l.n.pattern };\n return out;\n}\n\nexport class Styles {\n xml: string | null;\n root: El | null;\n formats = new Map<number, string>();\n fonts: string[] = [];\n fills: string[] = [];\n borders: string[] = [];\n xfs: string[] = [];\n looks: IStyleData[] = [];\n index = new Map<string, number>();\n added = false;\n private theme: string[];\n private custom: string[] | null = null;\n\n constructor(xml: string | null, theme: string | null) {\n this.xml = xml;\n this.theme = palette(theme);\n this.root = xml ? parse(xml).kids.find(k => !k.name.startsWith('?')) ?? null : null;\n const s = xml ?? '';\n const list = (name: string, tag: string) => {\n const el = this.root && this.child(this.root, name);\n return el ? el.kids.filter(k => this.bare(k.name) === tag).map(k => s.slice(k.start, k.end)) : [];\n };\n for (const f of list('numFmts', 'numFmt')) {\n const a = Object.fromEntries(attrs(f));\n this.formats.set(Number(a.numFmtId), a.formatCode);\n }\n const colours = this.root && this.child(this.root, 'colors');\n const custom = colours && this.child(colours, 'indexedColors');\n if (custom) this.custom = custom.kids.map(k => (attr(s, k, 'rgb') ?? 'FF000000').slice(-6).toUpperCase());\n this.fonts = list('fonts', 'font');\n this.fills = list('fills', 'fill');\n this.borders = list('borders', 'border');\n this.xfs = list('cellXfs', 'xf');\n if (!this.fonts.length) this.fonts = ['<font><sz val=\"11\"/><name val=\"Calibri\"/></font>'];\n if (!this.fills.length) this.fills = ['<fill><patternFill patternType=\"none\"/></fill>', '<fill><patternFill patternType=\"gray125\"/></fill>'];\n if (!this.borders.length) this.borders = ['<border><left/><right/><top/><bottom/><diagonal/></border>'];\n if (!this.xfs.length) this.xfs = ['<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>'];\n const raw = this.xfs.map(x => this.look(x));\n this.looks = raw.map(l => norm({ ...raw[0], ...l }));\n this.looks.forEach((l, i) => { const k = JSON.stringify(l); if (!this.index.has(k)) this.index.set(k, i); });\n }\n\n private prefix = () => this.root?.name.includes(':') ? this.root.name.slice(0, this.root.name.indexOf(':') + 1) : '';\n private bare = (name: string) => name.slice(name.indexOf(':') + 1);\n private child = (el: El, name: string) => el.kids.find(k => this.bare(k.name) === name);\n\n color(tag: string | undefined): string | undefined {\n if (!tag) return undefined;\n const a = Object.fromEntries(attrs(tag));\n if (a.auto === '1' || a.auto === 'true') return undefined;\n let hex: string | undefined;\n if (a.rgb) hex = a.rgb.slice(-6).toUpperCase();\n else if (a.theme !== undefined) hex = this.theme[Number(a.theme)];\n else if (a.indexed !== undefined) hex = (this.custom ?? indexed)[Number(a.indexed)] ?? (Number(a.indexed) === 64 ? '000000' : undefined);\n return hex && '#' + tinted(hex, Number(a.tint ?? 0));\n }\n\n private parts(xml: string) {\n const root = parse(xml).kids[0];\n const out = new Map<string, string>();\n if (root) for (const k of root.kids) out.set(this.bare(k.name), xml.slice(k.start, k.end));\n return { root, out, open: root ? xml.slice(root.start, root.open) : '' };\n }\n\n pattern(id: number) {\n return this.formats.get(id) ?? builtin[id] ?? (id === 0 ? 'General' : 'General');\n }\n\n look(xf: string): IStyleData {\n const a = Object.fromEntries(attrs(xf.slice(0, xf.indexOf('>') + 1)));\n const s: IStyleData = {};\n const font = this.parts(this.fonts[Number(a.fontId ?? 0)] ?? this.fonts[0]).out;\n const val = (tag: string | undefined) => tag && Object.fromEntries(attrs(tag)).val;\n const on = (tag: string | undefined) => tag !== undefined && !/^(0|false)$/.test(val(tag) ?? '1');\n if (on(font.get('b'))) s.bl = 1;\n if (on(font.get('i'))) s.it = 1;\n if (on(font.get('strike'))) s.st = { s: 1 };\n if (font.has('u') && val(font.get('u')) !== 'none') s.ul = { s: 1 };\n const va = val(font.get('vertAlign'));\n if (va === 'superscript') s.va = 3;\n if (va === 'subscript') s.va = 2;\n if (font.has('sz')) s.fs = Number(val(font.get('sz')));\n if (font.has('name')) s.ff = val(font.get('name'));\n const cl = this.color(font.get('color'));\n if (cl) s.cl = { rgb: cl };\n const fill = this.fills[Number(a.fillId ?? 0)];\n const pattern = fill && /patternType=\"(\\w+)\"/.exec(fill)?.[1];\n if (fill && pattern && pattern !== 'none' && pattern !== 'gray125') {\n const fg = this.color(/<(?:\\w+:)?fgColor\\b[^>]*>/.exec(fill)?.[0]);\n if (fg) s.bg = { rgb: fg };\n }\n const border = this.parts(this.borders[Number(a.borderId ?? 0)] ?? '<border/>');\n const bd: IBorderData = {};\n for (const [key, name] of sides) {\n const el = border.out.get(name) ?? border.out.get(name === 'left' ? 'start' : name === 'right' ? 'end' : name);\n const style = el && /style=\"(\\w+)\"/.exec(el)?.[1];\n if (!style || style === 'none') continue;\n bd[key] = { s: Math.max(1, lines.indexOf(style)), cl: { rgb: this.color(/<(?:\\w+:)?color\\b[^>]*>/.exec(el!)?.[0]) ?? '#000000' } };\n }\n const diagonal = border.out.get('diagonal');\n const dstyle = diagonal && /style=\"(\\w+)\"/.exec(diagonal)?.[1];\n if (dstyle && dstyle !== 'none') {\n const line = { s: Math.max(1, lines.indexOf(dstyle)), cl: { rgb: this.color(/<(?:\\w+:)?color\\b[^>]*>/.exec(diagonal!)?.[0]) ?? '#000000' } };\n const flags = Object.fromEntries(attrs(border.open));\n if (flags.diagonalDown === '1' || flags.diagonalDown === 'true') bd.tl_br = line;\n if (flags.diagonalUp === '1' || flags.diagonalUp === 'true') bd.bl_tr = line;\n }\n if (Object.keys(bd).length) s.bd = bd;\n const align = /<(?:\\w+:)?alignment\\b[^>]*>/.exec(xf)?.[0];\n if (align) {\n const al = Object.fromEntries(attrs(align));\n const ht = across.indexOf(al.horizontal === 'centerContinuous' ? 'center' : al.horizontal);\n if (ht > 0) s.ht = ht;\n const vt = down.indexOf(al.vertical);\n if (vt > 0) s.vt = vt;\n if (al.wrapText === '1' || al.wrapText === 'true') s.tb = 3;\n const turn = Number(al.textRotation ?? 0);\n if (turn === 255) s.tr = { a: 0, v: 1 };\n else if (turn) s.tr = { a: turn <= 90 ? turn : 90 - turn, v: 0 };\n }\n const id = Number(a.numFmtId ?? 0);\n if (id) s.n = { pattern: this.pattern(id) };\n return s;\n }\n\n find(look: IStyleData) {\n return this.index.get(JSON.stringify(norm(look)));\n }\n\n derive(base: number, look: IStyleData): number {\n look = norm(look);\n const key = JSON.stringify(look);\n const known = this.index.get(key);\n if (known !== undefined) return known;\n const was = this.looks[base] ?? {};\n const xf = this.xfs[base] ?? this.xfs[0];\n const head = xf.slice(0, xf.indexOf('>') + 1);\n const a = new Map(attrs(head));\n const same = (keys: (keyof IStyleData)[]) => keys.every(k => JSON.stringify(was[k]) === JSON.stringify(look[k]));\n const p = this.prefix();\n if (!same(['bl', 'it', 'st', 'ul', 'va', 'fs', 'ff', 'cl'])) {\n a.set('fontId', String(this.add('fonts', this.font(Number(a.get('fontId') ?? 0), was, look))));\n a.set('applyFont', '1');\n }\n if (!same(['bg'])) {\n a.set('fillId', String(look.bg?.rgb ? this.add('fills', `<${p}fill><${p}patternFill patternType=\"solid\"><${p}fgColor rgb=\"${argb(look.bg.rgb)}\"/><${p}bgColor indexed=\"64\"/></${p}patternFill></${p}fill>`) : 0));\n a.set('applyFill', '1');\n }\n if (!same(['bd'])) {\n a.set('borderId', String(this.add('borders', this.border(Number(a.get('borderId') ?? 0), was, look))));\n a.set('applyBorder', '1');\n }\n if (!same(['n'])) {\n a.set('numFmtId', String(this.format(look.n?.pattern ?? 'General')));\n a.set('applyNumberFormat', '1');\n }\n let inner = xf.endsWith('/>') && xf.indexOf('>') === xf.length - 1 ? '' : xf.slice(head.length, xf.lastIndexOf('<'));\n if (!same(['ht', 'vt', 'tb', 'tr'])) {\n const old = /<(?:\\w+:)?alignment\\b[^>]*>/.exec(inner)?.[0];\n const al = new Map(old ? attrs(old) : []);\n const put = (name: string, value: string | null) => value === null ? al.delete(name) : al.set(name, value);\n put('horizontal', look.ht ? across[look.ht] : null);\n put('vertical', look.vt ? down[look.vt] : null);\n put('wrapText', look.tb === 3 ? '1' : null);\n put('textRotation', look.tr?.v ? '255' : look.tr?.a ? String(look.tr.a > 0 ? look.tr.a : 90 - look.tr.a) : null);\n const tag = al.size ? `<${p}alignment ${[...al].map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : '';\n inner = old ? inner.replace(old, tag) : tag + inner;\n a.set('applyAlignment', '1');\n }\n const name = head.slice(1, head.search(/[\\s/>]/));\n const open = `<${name} ${[...a].map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}`;\n const next = inner ? `${open}>${inner}</${name}>` : `${open}/>`;\n this.xfs.push(next);\n this.added = true;\n const index = this.xfs.length - 1;\n this.looks.push(norm({ ...this.looks[0], ...this.look(next) }));\n this.index.set(key, index);\n return index;\n }\n\n private add(list: 'fonts' | 'fills' | 'borders', xml: string) {\n const at = this[list].indexOf(xml);\n if (at >= 0) return at;\n this[list].push(xml);\n this.added = true;\n return this[list].length - 1;\n }\n\n private font(id: number, was: IStyleData, look: IStyleData) {\n const p = this.prefix();\n const { out } = this.parts(this.fonts[id] ?? this.fonts[0]);\n const set = (name: string, xml: string | null) => xml === null ? out.delete(name) : out.set(name, xml);\n const diff = (k: keyof IStyleData) => JSON.stringify(was[k]) !== JSON.stringify(look[k]);\n if (diff('bl')) set('b', look.bl ? `<${p}b/>` : null);\n if (diff('it')) set('i', look.it ? `<${p}i/>` : null);\n if (diff('st')) set('strike', look.st?.s ? `<${p}strike/>` : null);\n if (diff('ul')) set('u', look.ul?.s ? `<${p}u/>` : null);\n if (diff('va')) set('vertAlign', look.va === 3 ? `<${p}vertAlign val=\"superscript\"/>` : look.va === 2 ? `<${p}vertAlign val=\"subscript\"/>` : null);\n if (diff('fs')) set('sz', `<${p}sz val=\"${look.fs ?? 11}\"/>`);\n if (diff('cl')) set('color', look.cl?.rgb ? `<${p}color rgb=\"${argb(look.cl.rgb)}\"/>` : null);\n if (diff('ff')) {\n set('name', `<${p}name val=\"${escape(look.ff ?? 'Calibri')}\"/>`);\n set('scheme', null);\n }\n return `<${p}font>${fontOrder.filter(k => out.has(k)).map(k => out.get(k)).join('')}</${p}font>`;\n }\n\n private border(id: number, was: IStyleData, look: IStyleData) {\n const p = this.prefix();\n const { out, open } = this.parts(this.borders[id] ?? this.borders[0]);\n const flags = new Map(open ? attrs(open) : []);\n const line = (name: string, b: IBorderData[keyof IBorderData] | undefined) => b ? `<${p}${name} style=\"${lines[b.s] || 'thin'}\"><${p}color rgb=\"${argb(b.cl?.rgb ?? '#000000')}\"/></${p}${name}>` : `<${p}${name}/>`;\n const before = was.bd ?? {}, after = look.bd ?? {};\n const parts: string[] = [];\n for (const [key, name] of sides) {\n const old = out.get(name) ?? out.get(name === 'left' ? 'start' : name === 'right' ? 'end' : name);\n parts.push(JSON.stringify(before[key]) === JSON.stringify(after[key]) && old ? old : line(name, after[key]));\n }\n const diagonal = after.tl_br ?? after.bl_tr;\n if (JSON.stringify(before.tl_br) === JSON.stringify(after.tl_br) && JSON.stringify(before.bl_tr) === JSON.stringify(after.bl_tr)) parts.push(out.get('diagonal') ?? `<${p}diagonal/>`);\n else {\n parts.push(line('diagonal', diagonal));\n if (after.tl_br) flags.set('diagonalDown', '1'); else flags.delete('diagonalDown');\n if (after.bl_tr) flags.set('diagonalUp', '1'); else flags.delete('diagonalUp');\n }\n for (const extra of ['vertical', 'horizontal']) if (out.has(extra)) parts.push(out.get(extra)!);\n const attributes = [...flags].map(([k, v]) => ` ${k}=\"${escape(v)}\"`).join('');\n return `<${p}border${attributes}>${parts.join('')}</${p}border>`;\n }\n\n format(pattern: string) {\n if (pattern === 'General') return 0;\n for (const [id, code] of this.formats) if (code === pattern) return id;\n for (const [id, code] of Object.entries(builtin)) if (code === pattern) return Number(id);\n const id = Math.max(163, ...this.formats.keys()) + 1;\n this.formats.set(id, pattern);\n this.added = true;\n return id;\n }\n\n build(): string | null {\n if (!this.added) return null;\n const p = this.prefix();\n const s = this.xml ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"></styleSheet>`;\n const root = parse(s).kids.find(k => !k.name.startsWith('?'))!;\n const order = ['numFmts', 'fonts', 'fills', 'borders', 'cellStyleXfs', 'cellXfs', 'cellStyles', 'dxfs', 'tableStyles', 'colors', 'extLst'];\n const lists: Record<string, string[]> = {\n numFmts: [...this.formats].map(([id, code]) => `<${p}numFmt numFmtId=\"${id}\" formatCode=\"${escape(code)}\"/>`),\n fonts: this.fonts, fills: this.fills, borders: this.borders, cellXfs: this.xfs,\n };\n const edits: [number, number, string][] = [];\n for (const name of Object.keys(lists)) {\n if (!lists[name].length) continue;\n const el = root.kids.find(k => this.bare(k.name) === name);\n if (el) {\n const open = s.slice(el.start, el.open).replace(/\\s*\\/?>$/, '').replace(/\\scount=\"\\d*\"/, '');\n edits.push([el.start, el.end, `${open} count=\"${lists[name].length}\">${lists[name].join('')}</${el.name}>`]);\n } else {\n const after = root.kids.find(k => order.indexOf(this.bare(k.name)) > order.indexOf(name));\n const at = after ? after.start : root.close;\n edits.push([at, at, `<${p}${name} count=\"${lists[name].length}\">${lists[name].join('')}</${p}${name}>`]);\n }\n }\n edits.sort((x, y) => y[0] - x[0]);\n let out = s;\n for (const [from, to, xml] of edits) out = out.slice(0, from) + xml + out.slice(to);\n return out;\n }\n}\n\nconst argb = (hex: string) => 'FF' + hex.replace('#', '').toUpperCase().padStart(6, '0').slice(-6);\n","import type { ICellData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport { unescape } from '../docx/xml';\nimport { numbered, type SheetModel } from './model';\nimport { Pack, type Rel } from './pack';\nimport { boxes, cell, plain, shifted } from './refs';\nimport { Styles } from './styles';\n\nexport type CellRec = { start: number; end: number; shared: boolean };\nexport type RowRec = { open: string };\nexport type ColSpec = { min: number; max: number; xml: string; width?: number; hidden: boolean; style?: number };\nexport type NoteRec = { ref: string; xml: string; text: string };\nexport type SheetRec = {\n sid: string; name: string; sheetId: number; part: string; xml: string; p: string; rels: Rel[];\n bounds: [number, number, number, number];\n rows: Map<number, RowRec>; cells: Map<number, CellRec>; cols: ColSpec[];\n merges: string[]; validations: string[]; notes: NoteRec[]; comments: string | null; vml: string | null; authors: string[];\n width: number;\n};\nexport type Book = {\n pack: Pack; part: string; xml: string; rels: Rel[]; styles: Styles; stylesPart: string | null;\n sheets: SheetRec[]; entries: { name: string; sheetId: number; rid: string; xml: string; sheet: boolean }[];\n};\n\nexport const key = (r: number, c: number) => r * 16384 + c;\nexport const px = { row: (pt: number) => Math.round(pt * 4 / 3 * 100) / 100, col: (w: number) => Math.round(w * 7 + 5) };\nexport const pt = { row: (h: number) => Math.round(h * 3 / 4 * 100) / 100, col: (w: number) => Math.max(0, Math.round((w - 5) / 7 * 100) / 100) };\n\nconst decodeX = (s: string) => s.includes('_x') ? s.replace(/_x([0-9A-Fa-f]{4})_/g, (_, h: string) => String.fromCharCode(parseInt(h, 16))) : s;\n\nexport function runs(xml: string) {\n const clean = xml.includes('rPh') ? xml.replace(/<(\\w+:)?rPh\\b[\\s\\S]*?<\\/(\\w+:)?rPh>/g, '') : xml;\n let out = '';\n for (const m of clean.matchAll(/<(?:\\w+:)?t(?:\\s[^>]*)?(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?t>)/g)) out += m[1] ?? '';\n return decodeX(unescape(out));\n}\n\nconst patterns = new Map<string, RegExp>();\nexport const attr = (tag: string, name: string) => {\n let re = patterns.get(name);\n if (!re) patterns.set(name, re = new RegExp(`\\\\s${name}=\"([^\"]*)\"`));\n const m = re.exec(tag);\n return m ? unescape(m[1]) : null;\n};\n\nconst element = (xml: string, name: string) => {\n const m = new RegExp(`<((?:\\\\w+:)?${name})\\\\b[^>]*?(\\\\/?)>`).exec(xml);\n if (!m) return null;\n if (m[2]) return { start: m.index, open: m.index + m[0].length, close: m.index + m[0].length, end: m.index + m[0].length, tag: m[0] };\n const close = xml.indexOf(`</${m[1]}>`, m.index);\n return { start: m.index, open: m.index + m[0].length, close, end: close + m[1].length + 3, tag: m[0] };\n};\n\nexport function worksheets(bytes: ArrayBuffer) {\n const pack = new Pack(bytes);\n const part = pack.rels('').find(r => r.type === 'officeDocument')?.target ?? 'xl/workbook.xml';\n const rels = pack.rels(part);\n return [...(pack.text(part) ?? '').matchAll(/<(?:\\w+:)?sheet\\b[^>]*\\/?>/g)]\n .filter(m => rels.find(r => r.id === /\\s[\\w]+:id=\"([^\"]*)\"/.exec(m[0])?.[1])?.type === 'worksheet')\n .map(m => Number(attr(m[0], 'sheetId')));\n}\n\nexport function load(bytes: ArrayBuffer): { model: SheetModel; book: Book } {\n const pack = new Pack(bytes);\n const office = pack.rels('').find(r => r.type === 'officeDocument');\n const part = office?.target ?? 'xl/workbook.xml';\n const xml = pack.text(part);\n if (!xml) throw new Error('No workbook');\n const rels = pack.rels(part);\n const target = (type: string) => rels.find(r => r.type === type)?.target;\n const themePart = target('theme');\n const stylesPart = target('styles');\n const styles = new Styles(stylesPart ? pack.text(stylesPart) : null, themePart ? pack.text(themePart) : null);\n const stringsPart = target('sharedStrings');\n const strings: string[] = [];\n const sst = stringsPart ? pack.text(stringsPart) : null;\n if (sst) for (const m of sst.matchAll(/<(?:\\w+:)?si\\b[^>]*?(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?si>)/g)) strings.push(m[1] ? runs(m[1]) : '');\n\n const date1904 = /<(?:\\w+:)?workbookPr\\b[^>]*\\bdate1904=\"(1|true)\"/.test(xml);\n const entries: Book['entries'] = [];\n for (const m of xml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*\\/?>/g)) {\n const tag = m[0];\n const rid = /\\s[\\w]+:id=\"([^\"]*)\"/.exec(tag)?.[1] ?? '';\n const rel = rels.find(r => r.id === rid);\n entries.push({ name: attr(tag, 'name') ?? '', sheetId: Number(attr(tag, 'sheetId')), rid, xml: tag, sheet: rel?.type === 'worksheet' });\n }\n\n const book: IWorkbookData = {\n id: 'book', name: '', appVersion: '', locale: 'enUS' as IWorkbookData['locale'], styles: {}, sheetOrder: [], sheets: {}, resources: [],\n defaultStyle: styles.looks[0],\n };\n if (date1904) book.dateSystem = 'date1904' as IWorkbookData['dateSystem'];\n const notes: Record<string, Record<number, Record<number, unknown>>> = {};\n const validations: Record<string, unknown[]> = {};\n const filters: Record<string, unknown> = {};\n const model: SheetModel = { book, lines: {}, origin: { sheets: {}, lines: {} } };\n const sheets: SheetRec[] = [];\n const active = Number(/<(?:\\w+:)?workbookView\\b[^>]*\\bactiveTab=\"(\\d+)\"/.exec(xml)?.[1] ?? 0);\n const useStyle = (xf: number) => {\n const id = `x${xf}`;\n if (!(id in book.styles)) book.styles[id] = styles.looks[xf] ?? {};\n return id;\n };\n\n for (const entry of entries) {\n if (!entry.sheet) continue;\n const rel = rels.find(r => r.id === entry.rid)!;\n const sxml = pack.text(rel.target);\n if (sxml === null) continue;\n const sid = `s${entry.sheetId}`;\n const p = /<(\\w+:)?worksheet\\b/.exec(sxml)?.[1] ?? '';\n const srels = pack.rels(rel.target);\n const sheet: Partial<IWorksheetData> = { id: sid, name: entry.name, cellData: {}, rowData: {}, columnData: {}, mergeData: [] };\n const state = attr(entry.xml, 'state');\n if (state === 'hidden') sheet.hidden = 1;\n if (state === 'veryHidden') sheet.hidden = 2 as IWorksheetData['hidden'];\n\n const open = element(sxml, `${p}sheetData`);\n const bounds: SheetRec['bounds'] = open ? [open.start, open.open, open.close, open.end] : [sxml.length, sxml.length, sxml.length, sxml.length];\n const head = open ? sxml.slice(0, open.start) : sxml;\n const tail = open ? sxml.slice(open.end) : '';\n\n const format = /<(?:\\w+:)?sheetFormatPr\\b[^>]*>/.exec(head)?.[0];\n const defaultRow = format && attr(format, 'defaultRowHeight') ? px.row(Number(attr(format, 'defaultRowHeight'))) : 20;\n const defaultCol = format && attr(format, 'defaultColWidth') ? px.col(Number(attr(format, 'defaultColWidth'))) : format && attr(format, 'baseColWidth') ? px.col(Number(attr(format, 'baseColWidth')) + 0.71) : 64;\n sheet.defaultRowHeight = defaultRow;\n sheet.defaultColumnWidth = defaultCol;\n\n const view = /<(?:\\w+:)?sheetView\\b[^>]*>/.exec(head)?.[0];\n if (view && attr(view, 'showGridLines') === '0') sheet.showGridlines = 0;\n if (view && attr(view, 'rightToLeft') === '1') sheet.rightToLeft = 1;\n if (view && attr(view, 'zoomScale')) sheet.zoomRatio = Number(attr(view, 'zoomScale')) / 100;\n const pane = /<(?:\\w+:)?pane\\b[^>]*>/.exec(head)?.[0];\n if (pane && /^frozen/.test(attr(pane, 'state') ?? '')) {\n const x = Number(attr(pane, 'xSplit') ?? 0), y = Number(attr(pane, 'ySplit') ?? 0);\n sheet.freeze = { xSplit: x, ySplit: y, startRow: y, startColumn: x };\n }\n const tab = /<(?:\\w+:)?tabColor\\b[^>]*>/.exec(head)?.[0];\n if (tab) {\n const c = styles.color(tab);\n if (c) sheet.tabColor = c;\n }\n\n const cols: ColSpec[] = [];\n for (const m of head.matchAll(/<(?:\\w+:)?col\\b[^>]*\\/?>/g)) {\n const t = m[0];\n const spec: ColSpec = { min: Number(attr(t, 'min')), max: Number(attr(t, 'max')), xml: t, hidden: /^(1|true)$/.test(attr(t, 'hidden') ?? '') };\n if (attr(t, 'width') !== null && /^(1|true)$/.test(attr(t, 'customWidth') ?? '1')) spec.width = px.col(Number(attr(t, 'width')));\n if (attr(t, 'style') !== null && attr(t, 'style') !== '0') spec.style = Number(attr(t, 'style'));\n cols.push(spec);\n }\n\n const cellData: Record<number, Record<number, ICellData>> = {};\n const rowData: Record<number, { h?: number; hd?: number; s?: string; ia?: number }> = {};\n const rows = new Map<number, RowRec>();\n const cells = new Map<number, CellRec>();\n const masters = new Map<string, { f: string; r: number; c: number }>();\n const children: [number, number, string][] = [];\n const rowStyles = new Map<number, number>();\n let maxRow = -1, maxCol = -1;\n if (open && open.close > open.open) {\n const end = open.close;\n let at = open.open, row = -1, col = -1;\n while (at < end) {\n const lt = sxml.indexOf('<', at);\n if (lt < 0 || lt >= end) break;\n const gt = sxml.indexOf('>', lt);\n if (sxml.charCodeAt(lt + 1) === 47) { at = gt + 1; continue; }\n let j = lt + 1;\n while (j < gt) {\n const ch = sxml.charCodeAt(j);\n if (ch === 32 || ch === 47 || ch === 9 || ch === 10 || ch === 13) break;\n j++;\n }\n const name = sxml.slice(lt + 1 + p.length, j);\n const tag = sxml.slice(lt, gt + 1);\n if (name === 'row') {\n const r = attr(tag, 'r');\n row = r ? Number(r) - 1 : row + 1;\n col = -1;\n rows.set(row, { open: tag });\n const rd: { h?: number; hd?: number; s?: string; ia?: number } = {};\n const ht = attr(tag, 'ht');\n if (ht !== null) rd.h = px.row(Number(ht));\n if (ht !== null && /^(1|true)$/.test(attr(tag, 'customHeight') ?? '')) rd.ia = 0;\n if (/^(1|true)$/.test(attr(tag, 'hidden') ?? '')) rd.hd = 1;\n const rs = attr(tag, 's');\n if (rs !== null && /^(1|true)$/.test(attr(tag, 'customFormat') ?? '')) {\n rowStyles.set(row, Number(rs));\n rd.s = useStyle(Number(rs));\n }\n if (Object.keys(rd).length) rowData[row] = rd;\n if (rd.h !== undefined || rd.hd || rd.s) maxRow = Math.max(maxRow, row);\n at = gt + 1;\n continue;\n }\n if (name !== 'c') { at = gt + 1; continue; }\n const ref = attr(tag, 'r');\n if (ref) [, col] = cell(ref);\n else col += 1;\n const self = sxml.charCodeAt(gt - 1) === 47;\n const close = self ? gt + 1 : sxml.indexOf(`</${p}c>`, gt);\n const stop = self ? gt + 1 : close + p.length + 4;\n const inner = self ? '' : sxml.slice(gt + 1, close);\n const t = attr(tag, 't');\n const s = Number(attr(tag, 's') ?? 0);\n const out: ICellData = {};\n let shared = false;\n if (inner) {\n const f = /<(?:\\w+:)?f\\b([^>]*?)(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?f>)/.exec(inner);\n if (f) {\n const kind = attr(f[0], 't');\n const formula = f[2] === undefined ? '' : unescape(f[2]);\n if (kind === 'shared') {\n shared = true;\n const si = attr(f[0], 'si') ?? '';\n if (formula) masters.set(si, { f: formula, r: row, c: col });\n else children.push([row, col, si]);\n if (formula) out.f = '=' + plain(formula);\n } else if (kind !== 'dataTable' && formula) out.f = '=' + plain(formula);\n }\n const v = /<(?:\\w+:)?v>([\\s\\S]*?)<\\/(?:\\w+:)?v>/.exec(inner)?.[1];\n if (t === 'inlineStr') {\n const is = /<(?:\\w+:)?is>([\\s\\S]*?)<\\/(?:\\w+:)?is>/.exec(inner)?.[1];\n if (is !== undefined) { out.v = runs(is); out.t = 1; }\n } else if (v !== undefined) {\n if (t === 's') { out.v = strings[Number(v)] ?? ''; out.t = 1; }\n else if (t === 'str' || t === 'e') { out.v = decodeX(unescape(v)); out.t = 1; }\n else if (t === 'b') { out.v = v === '1' || v === 'true'; out.t = 3; }\n else if (t === 'd') { const d = Date.parse(v); out.v = Number.isNaN(d) ? v : (d - Date.UTC(1899, 11, 30)) / 86400000; out.t = Number.isNaN(d) ? 1 : 2; }\n else { out.v = Number(v); out.t = 2; }\n }\n }\n const styled = s || rowStyles.has(row) || cols.some(spec => spec.style !== undefined && col + 1 >= spec.min && col + 1 <= spec.max);\n if (styled) out.s = useStyle(s);\n if (out.v !== undefined || out.f || out.s || shared) {\n (cellData[row] ??= {})[col] = out;\n if (out.v !== undefined || out.f || s) { maxRow = Math.max(maxRow, row); maxCol = Math.max(maxCol, col); }\n }\n cells.set(key(row, col), { start: lt, end: stop, shared });\n at = stop;\n }\n }\n for (const [r, c, si] of children) {\n const m = masters.get(si);\n const target = (cellData[r] ??= {})[c] ??= {};\n if (m) target.f = '=' + plain(shifted(m.f, r - m.r, c - m.c));\n }\n\n for (const spec of cols) if (spec.max <= 1024) maxCol = Math.max(maxCol, spec.max - 1);\n\n const merges: string[] = [];\n for (const m of tail.matchAll(/<(?:\\w+:)?mergeCell\\b[^>]*\\/?>/g)) {\n const ref = attr(m[0], 'ref');\n if (!ref) continue;\n merges.push(ref);\n for (const b of boxes(ref)) {\n sheet.mergeData!.push({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn });\n maxRow = Math.max(maxRow, b.endRow);\n maxCol = Math.max(maxCol, b.endColumn);\n }\n }\n\n const rules: unknown[] = [];\n const dvs: string[] = [];\n const dvBlock = element(tail, `${p}dataValidations`);\n if (dvBlock) for (const m of tail.slice(dvBlock.open, dvBlock.close).matchAll(/<(?:\\w+:)?dataValidation\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/(?:\\w+:)?dataValidation>)/g)) {\n const rule = validation(m[0], `dv${dvs.length}`);\n dvs.push(m[0]);\n if (rule) rules.push(rule);\n }\n if (rules.length) validations[sid] = rules;\n\n const af = /<(?:\\w+:)?autoFilter\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/(?:\\w+:)?autoFilter>)/.exec(tail)?.[0] ?? null;\n if (af) {\n const [b] = boxes(attr(af, 'ref') ?? '');\n if (b) filters[sid] = { ref: { ...b, rangeType: 0 }, filterColumns: criteria(af), cachedFilteredOut: [] };\n }\n\n const sheetNotes: NoteRec[] = [];\n const commentsRel = srels.find(r => r.type === 'comments');\n const vmlRel = srels.find(r => r.type === 'vmlDrawing');\n const authors: string[] = [];\n if (commentsRel) {\n const cx = pack.text(commentsRel.target) ?? '';\n for (const m of cx.matchAll(/<(?:\\w+:)?author>([\\s\\S]*?)<\\/(?:\\w+:)?author>|<(?:\\w+:)?author\\/>/g)) authors.push(unescape(m[1] ?? ''));\n for (const m of cx.matchAll(/<(?:\\w+:)?comment\\b[^>]*>[\\s\\S]*?<\\/(?:\\w+:)?comment>/g)) {\n const ref = attr(m[0], 'ref') ?? '';\n const textXml = /<(?:\\w+:)?text>([\\s\\S]*?)<\\/(?:\\w+:)?text>/.exec(m[0])?.[1] ?? '';\n const note = { ref, xml: m[0], text: runs(textXml) };\n sheetNotes.push(note);\n const [r, c] = cell(ref);\n if (r < 0) continue;\n ((notes[sid] ??= {})[r] ??= {})[c] = { note: note.text, width: 160, height: 72, show: false, id: `n${sheetNotes.length - 1}`, row: r, col: c };\n maxRow = Math.max(maxRow, r);\n maxCol = Math.max(maxCol, c);\n }\n }\n\n const height = Math.max(maxRow + 1 + 100, 1000);\n const width = Math.max(maxCol + 1 + 4, 26);\n for (const spec of cols) {\n for (let c = spec.min - 1; c < Math.min(spec.max, width); c++) {\n const cd: { w?: number; hd?: number; s?: string } = {};\n if (spec.width !== undefined) cd.w = spec.width;\n if (spec.hidden) cd.hd = 1;\n if (spec.style !== undefined) cd.s = useStyle(spec.style);\n if (Object.keys(cd).length) (sheet.columnData as Record<number, unknown>)[c] = cd;\n }\n }\n sheet.rowCount = height;\n sheet.columnCount = width;\n sheet.cellData = cellData;\n sheet.rowData = rowData;\n book.sheets[sid] = sheet;\n book.sheetOrder.push(sid);\n model.lines[sid] = { rows: numbered('r', height), cols: numbered('c', width) };\n model.origin.lines[sid] = { rows: numbered('r', height), cols: numbered('c', width) };\n model.origin.sheets[sid] = entry.sheetId;\n sheets.push({\n sid, name: entry.name, sheetId: entry.sheetId, part: rel.target, xml: sxml, p, rels: srels, bounds, rows, cells, cols, merges,\n validations: dvs, notes: sheetNotes, comments: commentsRel?.target ?? null, vml: vmlRel?.target ?? null, authors, width,\n });\n }\n\n const names: Record<string, unknown> = {};\n for (const m of xml.matchAll(/<(?:\\w+:)?definedName\\b([^>]*)>([\\s\\S]*?)<\\/(?:\\w+:)?definedName>/g)) {\n const name = attr(m[0], 'name') ?? '';\n if (name.startsWith('_xlnm.') || /^(1|true)$/.test(attr(m[0], 'hidden') ?? '')) continue;\n const local = attr(m[0], 'localSheetId');\n const scoped = local === null ? null : entries[Number(local)];\n const id = `d${Object.keys(names).length}`;\n names[id] = { id, name, formulaOrRefString: plain(unescape(m[2])), localSheetId: scoped ? `s${scoped.sheetId}` : 'AllDefaultWorkbook' };\n }\n\n const resources = book.resources!;\n if (Object.keys(names).length) resources.push({ name: 'SHEET_DEFINED_NAME_PLUGIN', data: JSON.stringify(names) });\n if (Object.keys(notes).length) resources.push({ name: 'SHEET_NOTE_PLUGIN', data: JSON.stringify(notes) });\n if (Object.keys(validations).length) resources.push({ name: 'SHEET_DATA_VALIDATION_PLUGIN', data: JSON.stringify(validations) });\n if (Object.keys(filters).length) resources.push({ name: 'SHEET_FILTER_PLUGIN', data: JSON.stringify(filters) });\n const shown = entries[active];\n if (shown?.sheet && book.sheetOrder.includes(`s${shown.sheetId}`)) model.active = `s${shown.sheetId}`;\n return { model, book: { pack, part, xml, rels, styles, stylesPart: stylesPart ?? null, sheets, entries } };\n}\n\nconst kinds: Record<string, string> = { whole: 'whole', decimal: 'decimal', list: 'list', textLength: 'textLength', custom: 'custom' };\nexport const stops: Record<string, number> = { information: 0, stop: 1, warning: 2 };\n\nexport function validation(xml: string, uid: string) {\n const type = attr(xml, 'type') ?? 'none';\n const kind = kinds[type];\n const ranges = boxes(attr(xml, 'sqref') ?? '');\n if (!kind || !ranges.length) return null;\n const f = (n: number) => {\n const m = new RegExp(`<(?:\\\\w+:)?formula${n}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?formula${n}>`).exec(xml)?.[1];\n return m === undefined ? undefined : plain(unescape(m));\n };\n let formula1 = f(1), formula2 = f(2);\n if (kind === 'list' && formula1 !== undefined) formula1 = /^\".*\"$/.test(formula1) ? formula1.slice(1, -1).replace(/\"\"/g, '\"') : '=' + formula1;\n else if (kind === 'custom' && formula1 !== undefined) formula1 = '=' + formula1;\n else if (formula1 !== undefined && !/^-?[\\d.]+$/.test(formula1)) formula1 = '=' + formula1;\n if (formula2 !== undefined && !/^-?[\\d.]+$/.test(formula2)) formula2 = '=' + formula2;\n const flag = (name: string) => /^(1|true)$/.test(attr(xml, name) ?? '');\n const rule: Record<string, unknown> = { uid, type: kind, ranges: ranges.map(b => ({ ...b, rangeType: 0 })) };\n const operator = attr(xml, 'operator');\n if (kind !== 'list' && kind !== 'custom') rule.operator = operator ?? 'between';\n if (formula1 !== undefined) rule.formula1 = formula1;\n if (formula2 !== undefined) rule.formula2 = formula2;\n if (flag('allowBlank')) rule.allowBlank = true;\n if (kind === 'list') rule.showDropDown = !flag('showDropDown');\n if (flag('showErrorMessage')) rule.showErrorMessage = true;\n if (flag('showInputMessage')) rule.showInputMessage = true;\n const style = attr(xml, 'errorStyle');\n if (style && style in stops) rule.errorStyle = stops[style];\n for (const name of ['error', 'errorTitle', 'prompt', 'promptTitle']) if (attr(xml, name) !== null) rule[name] = attr(xml, name);\n return rule;\n}\n\nexport function criteria(xml: string) {\n const out: unknown[] = [];\n for (const m of xml.matchAll(/<(?:\\w+:)?filterColumn\\b[^>]*>([\\s\\S]*?)<\\/(?:\\w+:)?filterColumn>/g)) {\n const colId = Number(attr(m[0], 'colId') ?? 0);\n const inner = m[1];\n if (/<(?:\\w+:)?filters\\b/.test(inner)) {\n const values = [...inner.matchAll(/<(?:\\w+:)?filter\\b[^>]*\\/?>/g)].map(f => attr(f[0], 'val') ?? '');\n const blank = /<(?:\\w+:)?filters\\b[^>]*\\bblank=\"(1|true)\"/.test(inner);\n out.push({ colId, filters: { ...(values.length && { filters: values }), ...(blank && { blank: true }) } });\n } else if (/<(?:\\w+:)?customFilters\\b/.test(inner)) {\n const and = /<(?:\\w+:)?customFilters\\b[^>]*\\band=\"(1|true)\"/.test(inner);\n const list = [...inner.matchAll(/<(?:\\w+:)?customFilter\\b[^>]*\\/?>/g)].map(f => ({ ...(attr(f[0], 'operator') && { operator: attr(f[0], 'operator') }), val: attr(f[0], 'val') ?? '' }));\n out.push({ colId, customFilters: { ...(and && { and: 1 }), customFilters: list } });\n }\n }\n return out;\n}\n","import type { ICellData, IStyleData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport { escape, unescape } from '../docx/xml';\nimport { SheetRefusal, type SheetModel } from './model';\nimport { relsOf, relative } from './pack';\nimport { a1, box, boxes, cell, quoted, remapped, renamed, shifted, span, squeeze, stored, type Box, type Map1 } from './refs';\nimport { norm } from './styles';\nimport { attr, key, load, pt, stops, type Book, type SheetRec } from './xlsx';\n\ntype Cells = Record<number, Record<number, ICellData>>;\ntype Sheet = Partial<IWorksheetData>;\ntype Rule = Record<string, unknown> & { uid: string; ranges: Box[] };\ntype Note = { note: string; row: number; col: number };\n\nconst order = ['sheetPr', 'dimension', 'sheetViews', 'sheetFormatPr', 'cols', 'sheetData', 'sheetCalcPr', 'sheetProtection', 'protectedRanges', 'scenarios', 'autoFilter',\n 'sortState', 'dataConsolidate', 'customSheetViews', 'mergeCells', 'phoneticPr', 'conditionalFormatting', 'dataValidations', 'hyperlinks', 'printOptions', 'pageMargins',\n 'pageSetup', 'headerFooter', 'rowBreaks', 'colBreaks', 'customProperties', 'cellWatches', 'ignoredErrors', 'smartTags', 'drawing', 'legacyDrawing', 'legacyDrawingHF',\n 'drawingHF', 'picture', 'oleObjects', 'controls', 'webPublishItems', 'tableParts', 'extLst'];\nconst errors = /^#(NULL!|DIV\\/0!|VALUE!|REF!|NAME\\?|NUM!|N\\/A|GETTING_DATA|SPILL!|CALC!)$/;\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst blankSheet = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><dimension ref=\"A1\"/><sheetViews><sheetView workbookViewId=\"0\"/></sheetViews><sheetFormatPr defaultRowHeight=\"15\"/><sheetData/><pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/></worksheet>';\n\nconst same = (a: unknown, b: unknown) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);\nconst blank = (v: unknown) => v === undefined || v === null || v === '';\nconst patterns = new Map<string, RegExp>();\nconst setAttr = (tag: string, name: string, value: string | null) => {\n let re = patterns.get(name);\n if (!re) patterns.set(name, re = new RegExp(`\\\\s${name}=\"[^\"]*\"`));\n if (value === null) return tag.replace(re, '');\n if (re.test(tag)) return tag.replace(re, () => ` ${name}=\"${escape(value)}\"`);\n return tag.replace(/\\s*(\\/?>)$/, end => ` ${name}=\"${escape(value)}\"${end.trim()}`);\n};\nconst literal = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nfunction resource(book: IWorkbookData, name: string): Record<string, unknown> | null {\n const found = book.resources?.find(r => r.name === name);\n return found ? JSON.parse(found.data || '{}') : null;\n}\n\nexport function textOf(c: ICellData | undefined): string | number | boolean | null {\n if (!c) return null;\n const stream = c.p?.body?.dataStream;\n if (stream !== undefined && blank(c.v)) return stream.replace(/\\r?\\n$/, '').replace(/\\r\\n?/g, '\\n');\n if (c.t === 3 && typeof c.v === 'number') return c.v === 1;\n return c.v ?? null;\n}\n\nfunction formulas(cells: Cells) {\n const masters = new Map<string, { f: string; r: number; c: number }>();\n for (const [r, line] of Object.entries(cells)) for (const [c, x] of Object.entries(line ?? {})) if (x?.si && x.f) masters.set(x.si, { f: x.f, r: +r, c: +c });\n return (r: number, c: number, x: ICellData) => {\n if (x.f) return x.f;\n if (!x.si) return null;\n const m = masters.get(x.si);\n return m ? '=' + shifted(m.f.replace(/^=/, ''), r - m.r, c - m.c) : null;\n };\n}\n\nfunction equalValue(a: unknown, b: unknown) {\n if (blank(a) && blank(b)) return true;\n if (typeof a === 'number' && typeof b === 'number') return a === b || Math.abs(a - b) <= 1e-9 * Math.max(1, Math.abs(a), Math.abs(b));\n return a === b;\n}\n\nfunction lookup(book: IWorkbookData, s: unknown): IStyleData {\n if (!s) return {};\n return (typeof s === 'string' ? book.styles[s] : s as IStyleData) ?? {};\n}\n\nexport class Axis {\n at: Map<string, number>;\n back: Map<string, number>;\n moved: boolean;\n shift: number;\n constructor(public old: string[], public now: string[]) {\n this.at = new Map(now.map((id, i) => [id, i]));\n this.back = new Map(old.map((id, i) => [id, i]));\n this.moved = old.some((id, i) => this.at.get(id) !== i);\n const last = old.length ? this.at.get(old[old.length - 1]) : undefined;\n this.shift = last === undefined ? now.length - old.length : last - (old.length - 1);\n }\n map: Map1 = i => i < this.old.length ? this.at.get(this.old[i]) ?? -1 : i + this.shift;\n from = (i: number) => i < this.now.length ? this.back.get(this.now[i]) ?? -1 : i - this.shift;\n near = (i: number) => {\n for (let j = i; j < this.old.length; j++) if (this.map(j) >= 0) return this.map(j);\n for (let j = i; j >= 0; j--) if (this.map(j) >= 0) return this.map(j);\n return 0;\n };\n}\n\nfunction find(xml: string, name: string) {\n const m = new RegExp(`<((?:\\\\w+:)?${name})\\\\b[^>]*?(\\\\/?)>`).exec(xml);\n if (!m) return null;\n if (m[2]) return { start: m.index, end: m.index + m[0].length, tag: m[0] };\n const close = xml.indexOf(`</${m[1]}>`, m.index);\n return { start: m.index, end: close + m[1].length + 3, tag: m[0] };\n}\n\nfunction place(xml: string, name: string, value: string | null) {\n const found = find(xml, name);\n if (found) return xml.slice(0, found.start) + (value ?? '') + xml.slice(found.end);\n if (value === null) return xml;\n const rank = order.indexOf(name);\n let at = -1;\n for (const later of order.slice(rank + 1)) {\n const f = find(xml, later);\n if (f && (at < 0 || f.start < at)) at = f.start;\n }\n if (at < 0) at = xml.search(/<\\/(?:\\w+:)?worksheet>\\s*$/);\n if (at < 0) at = xml.length;\n return xml.slice(0, at) + value + xml.slice(at);\n}\n\nfunction remapZone(xml: string, mine: (s: string | null) => boolean, rows: Axis, cols: Axis) {\n const ranges = (sqref: string) => boxes(sqref).map(b => squeeze(b, rows.map, cols.map)).filter((b): b is Box => b !== null).map(span).join(' ');\n const formula = (f: string) => remapped(f, mine, rows.map, cols.map);\n let out = xml.replace(/<((?:\\w+:)?)(conditionalFormatting|dataValidation|hyperlink|ignoredError|protectedRange)\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1\\2>)/g, (all: string) => {\n const sq = attr(all, 'sqref');\n const ref = attr(all, 'ref');\n let next = all;\n if (sq !== null) {\n const s = ranges(sq);\n if (!s) return '';\n next = setAttr(next.slice(0, next.indexOf('>') + 1), 'sqref', s) + next.slice(next.indexOf('>') + 1);\n }\n if (ref !== null) {\n const s = ranges(ref);\n if (!s) return '';\n next = setAttr(next.slice(0, next.indexOf('>') + 1), 'ref', s) + next.slice(next.indexOf('>') + 1);\n }\n return next.replace(/<((?:\\w+:)?)(formula|formula1|formula2)>([\\s\\S]*?)<\\/\\1\\2>/g, (_, p: string, n: string, f: string) => `<${p}${n}>${escape(formula(unescape(f)))}</${p}${n}>`);\n });\n out = out.replace(/<((?:\\w+:)?)(autoFilter|sortState|sortCondition)\\b[^>]*?>/g, (tag: string) => {\n const ref = attr(tag, 'ref');\n return ref === null ? tag : setAttr(tag, 'ref', ranges(ref) || ref);\n });\n out = out.replace(/<(xm:sqref)>([\\s\\S]*?)<\\/xm:sqref>/g, (_, n: string, s: string) => `<${n}>${ranges(s)}</${n}>`);\n out = out.replace(/<(xm:f)>([\\s\\S]*?)<\\/xm:f>/g, (_, n: string, f: string) => `<${n}>${escape(formula(unescape(f)))}</${n}>`);\n out = out.replace(/<((?:\\w+:)?)(selection|pane)\\b[^>]*?>/g, (tag: string) => {\n let next = tag;\n for (const name of ['activeCell', 'topLeftCell']) {\n const v = attr(next, name);\n if (v === null) continue;\n const [r, c] = cell(v);\n if (r >= 0) next = setAttr(next, name, a1(rows.near(r), cols.near(c)));\n }\n const sq = attr(next, 'sqref');\n return sq === null ? next : setAttr(next, 'sqref', ranges(sq) || 'A1');\n });\n return out;\n}\n\nfunction anchors(xml: string, rows: Axis, cols: Axis) {\n return xml.replace(/<((?:\\w+:)?)(from|to)>([\\s\\S]*?)<\\/\\1\\2>/g, (all: string, p: string, n: string, inner: string) => {\n const next = inner\n .replace(/<((?:\\w+:)?)col>(\\d+)<\\/\\1col>/, (_, q: string, v: string) => `<${q}col>${cols.near(Number(v))}</${q}col>`)\n .replace(/<((?:\\w+:)?)row>(\\d+)<\\/\\1row>/, (_, q: string, v: string) => `<${q}row>${rows.near(Number(v))}</${q}row>`);\n return `<${p}${n}>${next}</${p}${n}>`;\n });\n}\n\nexport function writeXlsx(original: ArrayBuffer, model: SheetModel): ArrayBuffer {\n const { model: base, book } = load(original);\n const { pack, styles } = book;\n const cur = model.book;\n const defaults = norm(styles.looks[0] ?? {});\n const bySheetId = new Map(book.sheets.map(s => [s.sheetId, s]));\n const kept = new Set(cur.sheetOrder.map(sid => model.origin.sheets[sid]).filter(id => bySheetId.has(id)));\n const removed = book.sheets.filter(s => !kept.has(s.sheetId));\n const charts = [...pack.names.keys()].filter(n => /^xl\\/charts\\/chart[^/]*\\.xml$/.test(n));\n const caches = book.rels.filter(r => r.type === 'pivotCacheDefinition').map(r => r.target);\n for (const gone of removed) {\n const pattern = new RegExp(`(^|[^\\\\w.])(${literal(gone.name)}|'${literal(gone.name.replace(/'/g, \"''\"))}')!`);\n const own = new Set(gone.rels.filter(r => r.type === 'drawing').flatMap(r => pack.rels(r.target)).filter(r => r.type === 'chart').map(r => r.target));\n if (charts.some(c => !own.has(c) && [...(pack.text(c) ?? '').matchAll(/<(?:\\w+:)?f>([\\s\\S]*?)<\\/(?:\\w+:)?f>/g)].some(m => pattern.test(unescape(m[1]))))) throw new SheetRefusal('chartSource', gone.name);\n if (caches.some(c => new RegExp(`<(?:\\\\w+:)?worksheetSource\\\\b[^>]*\\\\bsheet=\"${literal(escape(gone.name))}\"`).test(pack.text(c) ?? ''))) throw new SheetRefusal('pivotSheet', gone.name);\n }\n\n const names = new Map<string, string>();\n const axes = new Map<string, { rows: Axis; cols: Axis; rec: SheetRec }>();\n let touched = false;\n const sheetParts: { sid: string; rec: SheetRec | null; part: string; rid: string; sheetId: number }[] = [];\n let nextSheetId = Math.max(0, ...book.entries.map(e => e.sheetId)) + 1;\n let nextRid = Math.max(0, ...book.rels.map(r => Number(/\\d+$/.exec(r.id)?.[0] ?? 0))) + 1;\n const used = new Set(pack.names.keys());\n const fresh = (pattern: (n: number) => string) => {\n let n = 1;\n while (used.has(pattern(n)) || pack.changed.has(pattern(n))) n++;\n used.add(pattern(n));\n return pattern(n);\n };\n const types: [string, string | null][] = [];\n const defaultsNeeded = new Set<string>();\n\n for (const sid of cur.sheetOrder) {\n const id = model.origin.sheets[sid];\n const rec = id !== undefined ? bySheetId.get(id) ?? null : null;\n if (rec && [...axes.values()].every(a => a.rec !== rec)) {\n const lines = model.lines[sid], old = model.origin.lines[sid] ?? base.lines[rec.sid];\n axes.set(sid, { rows: new Axis(old.rows, lines.rows), cols: new Axis(old.cols, lines.cols), rec });\n sheetParts.push({ sid, rec, part: rec.part, rid: book.entries.find(e => e.sheetId === rec.sheetId)!.rid, sheetId: rec.sheetId });\n if (cur.sheets[sid].name !== rec.name) names.set(rec.name, cur.sheets[sid].name!);\n } else {\n const part = fresh(n => `xl/worksheets/sheet${n}.xml`);\n sheetParts.push({ sid, rec: null, part, rid: `rId${nextRid++}`, sheetId: nextSheetId++ });\n types.push([`/${part}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml']);\n }\n }\n\n const curNotes = resource(cur, 'SHEET_NOTE_PLUGIN') as Record<string, Record<string, Record<string, Note>>> | null;\n const curRules = resource(cur, 'SHEET_DATA_VALIDATION_PLUGIN') as Record<string, Rule[]> | null;\n const curFilters = resource(cur, 'SHEET_FILTER_PLUGIN') as Record<string, { ref: Box; filterColumns?: unknown[]; cachedFilteredOut?: number[] } | null> | null;\n const baseRules = (resource(base.book, 'SHEET_DATA_VALIDATION_PLUGIN') ?? {}) as Record<string, Rule[]>;\n const baseFilters = (resource(base.book, 'SHEET_FILTER_PLUGIN') ?? {}) as Record<string, { ref: Box; filterColumns?: unknown[] }>;\n const filterNames = new Map<number, string | null>();\n\n for (const entry of sheetParts) {\n const { sid, rec } = entry;\n const sheet = cur.sheets[sid] as Sheet;\n const ax = axes.get(sid);\n const rows = ax?.rows ?? new Axis([], model.lines[sid]?.rows ?? []);\n const cols = ax?.cols ?? new Axis([], model.lines[sid]?.cols ?? []);\n const old = rec ? base.book.sheets[rec.sid] as Sheet : {} as Sheet;\n const xml = rec?.xml ?? blankSheet;\n const p = rec?.p ?? '';\n const cells = (sheet.cellData ?? {}) as Cells;\n const oldCells = (old.cellData ?? {}) as Cells;\n const fOf = formulas(cells);\n const rowStyle = (sh: Sheet, r: number) => (sh.rowData as Record<number, { s?: unknown }> | undefined)?.[r]?.s;\n const colStyle = (sh: Sheet, c: number) => (sh.columnData as Record<number, { s?: unknown }> | undefined)?.[c]?.s;\n const seen = new Map<string, { look: IStyleData; json: string }>();\n const looks = (bk: IWorkbookData, sh: Sheet, r: number, c: number, x: ICellData | undefined) => {\n const s = x?.s ?? colStyle(sh, c) ?? rowStyle(sh, r);\n const id = typeof s === 'string' ? (bk === cur ? 'c' : 'b') + s : '';\n const known = id && seen.get(id);\n if (known) return known;\n const look = norm({ ...defaults, ...lookup(bk, s) });\n const made = { look, json: JSON.stringify(look) };\n if (id) seen.set(id, made);\n return made;\n };\n const xfOf = (s: unknown) => typeof s === 'string' && /^x\\d+$/.test(s) ? Number(s.slice(1)) : 0;\n const xfFor = (look: IStyleData, was: number) => {\n if (same(norm(styles.looks[was] ?? {}), look) || (was === 0 && same(defaults, look))) return was;\n return styles.find(look) ?? styles.derive(was, look);\n };\n let changed = !rec || rows.moved || cols.moved;\n let reused = 0, total = 0;\n for (const [r, line] of Object.entries(oldCells)) for (const c of Object.keys(line ?? {})) if (rows.map(+r) >= 0 && cols.map(+c) >= 0) total++;\n\n const body: string[] = [];\n const filtered = new Set(curFilters?.[sid]?.cachedFilteredOut ?? []);\n const indices = new Set<number>();\n for (const [r, line] of Object.entries(cells)) if (line && Object.keys(line).length) indices.add(+r);\n for (const [r, rd] of Object.entries(sheet.rowData ?? {})) if (rd && (rd.h !== undefined || rd.hd || rd.s)) indices.add(+r);\n if (rec) for (const r0 of rec.rows.keys()) { const r = rows.map(r0); if (r >= 0) indices.add(r); }\n for (const r of filtered) indices.add(r);\n let minR = Infinity, minC = Infinity, maxR = -1, maxC = -1;\n for (const r of [...indices].sort((a, b) => a - b)) {\n const r0 = rows.from(r);\n const orow = r0 >= 0 ? rec?.rows.get(r0) : undefined;\n const rd = (sheet.rowData as Record<number, { h?: number; hd?: number; s?: unknown }>)?.[r] ?? {};\n const od = r0 >= 0 ? (old.rowData as Record<number, { h?: number; hd?: number; s?: unknown }>)?.[r0] ?? {} : {};\n let tag = orow ? orow.open.replace(/\\s*\\/>$/, '>') : `<${p}row>`;\n tag = setAttr(tag, 'r', String(r + 1));\n if (orow && (rows.moved || cols.moved)) tag = setAttr(tag, 'spans', null);\n if (Math.abs((rd.h ?? -1) - (od.h ?? -1)) > 0.5) {\n changed = true;\n tag = setAttr(setAttr(tag, 'ht', rd.h === undefined ? null : String(pt.row(rd.h))), 'customHeight', rd.h === undefined ? null : '1');\n }\n const hidden = !!rd.hd || filtered.has(r);\n if (hidden !== !!od.hd) {\n changed = true;\n tag = setAttr(tag, 'hidden', hidden ? '1' : null);\n }\n const look = rd.s ? norm({ ...defaults, ...lookup(cur, rd.s) }) : null;\n const was = od.s ? norm({ ...defaults, ...lookup(base.book, od.s) }) : null;\n if (!same(look, was)) {\n changed = true;\n tag = setAttr(setAttr(tag, 's', look ? String(xfFor(look, xfOf(od.s))) : null), 'customFormat', look ? '1' : null);\n }\n const line = cells[r] ?? {};\n const parts: string[] = [];\n for (const c of Object.keys(line).map(Number).sort((a, b) => a - b)) {\n const x = line[c];\n if (!x) continue;\n const c0 = cols.from(c);\n const ox = r0 >= 0 && c0 >= 0 ? oldCells[r0]?.[c0] : undefined;\n const f = fOf(r, c, x);\n const v = textOf(x);\n const look = looks(cur, sheet, r, c, x);\n const orec = r0 >= 0 && c0 >= 0 ? rec?.cells.get(key(r0, c0)) : undefined;\n const unchanged = !!ox && (ox.f ?? null) === f && equalValue(textOf(ox), v) && looks(base.book, old, r0, c0, ox).json === look.json;\n if (unchanged) reused++;\n if (blank(v) && !f && !x.s) continue;\n if (unchanged && orec && !orec.shared) {\n const raw = xml.slice(orec.start, orec.end);\n parts.push(rows.moved || cols.moved ? raw.replace(/^<[^>]*>/, t => setAttr(t, 'r', a1(r, c))) : raw);\n } else {\n if (!unchanged) changed = true;\n const xf = xfFor(look.look, xfOf(ox?.s ?? colStyle(sheet, c) ?? rowStyle(sheet, r)));\n const out = cellXml(p, a1(r, c), xf, x, f, v);\n if (!out) continue;\n parts.push(out);\n }\n minR = Math.min(minR, r); maxR = Math.max(maxR, r); minC = Math.min(minC, c); maxC = Math.max(maxC, c);\n }\n if (!parts.length && !orow && !rd.h && !hidden && !look) continue;\n body.push(parts.length ? `${tag}${parts.join('')}</${p}row>` : tag.replace(/>$/, '/>'));\n }\n if (rec && reused !== total) changed = true;\n\n let head = xml.slice(0, rec ? rec.bounds[0] : xml.indexOf('<sheetData'));\n let tail = xml.slice(rec ? rec.bounds[3] : xml.indexOf('<sheetData/>') + 12);\n\n const mine = (s: string | null) => s === null || s === rec?.name;\n if (rec && (rows.moved || cols.moved)) {\n head = remapZone(head, mine, rows, cols);\n tail = remapZone(tail, mine, rows, cols);\n }\n\n const colXml = columns(p, rec, sheet, old, cols, defaults, cur, base.book, xfFor, xfOf);\n if (colXml !== undefined) { changed = true; head = place(head, 'cols', colXml); }\n\n const merges = (sheet.mergeData ?? []).map(m => span(m)).sort();\n const oldMerges = [...(rec?.merges ?? [])].map(m => span(box(m)!)).sort();\n if (!same(merges, oldMerges)) {\n changed = true;\n tail = place(tail, 'mergeCells', merges.length ? `<${p}mergeCells count=\"${merges.length}\">${merges.map(m => `<${p}mergeCell ref=\"${m}\"/>`).join('')}</${p}mergeCells>` : null);\n }\n\n const freeze = sheet.freeze && (sheet.freeze.xSplit > 0 || sheet.freeze.ySplit > 0) ? [sheet.freeze.xSplit, sheet.freeze.ySplit] : [0, 0];\n const oldFreeze = old.freeze ? [old.freeze.xSplit, old.freeze.ySplit] : [0, 0];\n if (!same(freeze, oldFreeze)) {\n changed = true;\n head = frozen(head, p, freeze[0], freeze[1]);\n }\n if ((sheet.showGridlines ?? 1) !== (old.showGridlines ?? 1)) {\n changed = true;\n head = head.replace(/<(?:\\w+:)?sheetView\\b[^>]*?>/, t => setAttr(t, 'showGridLines', sheet.showGridlines === 0 ? '0' : null));\n }\n if ((sheet.tabColor ?? '') !== (old.tabColor ?? '')) {\n changed = true;\n head = tabColour(head, p, sheet.tabColor ?? '');\n }\n\n const rules = (curRules ? curRules[sid] ?? [] : rec ? baseRules[rec.sid] ?? [] : []).map(r => ({ ...r, ranges: r.ranges.map(b => ({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn })) }));\n const oldRules = (rec ? baseRules[rec.sid] ?? [] : []).map(r => ({ ...r, ranges: r.ranges.map(b => squeeze(b, rows.map, cols.map)).filter(Boolean) }));\n if (curRules && !same(rules.map(canonRule), oldRules.map(canonRule))) {\n changed = true;\n const known = new Map((rec?.validations ?? []).map((v, i) => [`dv${i}`, v]));\n const shown = new Set(rules.map(r => r.uid));\n const hiddenRules = [...known].filter(([uid, v]) => !shown.has(uid) && !(rec && baseRules[rec.sid]?.some(r => r.uid === uid)) && v).map(([, v]) => rows.moved || cols.moved ? remapZone(v, mine, rows, cols) : v);\n const list = [...hiddenRules, ...rules.map(r => validationXml(p, r, known.get(r.uid)))].filter(Boolean);\n tail = place(tail, 'dataValidations', list.length ? `<${p}dataValidations count=\"${list.length}\">${list.join('')}</${p}dataValidations>` : null);\n }\n\n const oldFilter = rec ? baseFilters[rec.sid] ?? null : null;\n const filter = curFilters ? curFilters[sid] ?? null : oldFilter;\n const fref = filter?.ref ? span(filter.ref) : null;\n const oref = oldFilter?.ref ? (() => { const b = squeeze(oldFilter.ref, rows.map, cols.map); return b && span(b); })() : null;\n if (curFilters && (fref !== oref || !same(filter?.filterColumns ?? [], oldFilter?.filterColumns ?? []))) {\n changed = true;\n tail = place(tail, 'autoFilter', filter?.ref ? filterXml(p, filter.ref, filter.filterColumns ?? []) : null);\n filterNames.set(entry.sheetId, filter?.ref ? `${quoted(sheet.name!)}!${span(filter.ref).split(':').map(s => s.replace(/([A-Z]+)(\\d+)/, '$$$1$$$2')).join(':')}` : null);\n }\n\n const notes: Note[] = Object.values(curNotes?.[sid] ?? {}).flatMap(line => Object.values(line ?? {})).filter(n => n && !blank(n.note));\n const oldNotes = (rec?.notes ?? []).map(n => ({ ref: n.ref, text: n.text }));\n const nowNotes = notes.map(n => ({ ref: a1(n.row, n.col), text: n.note })).sort((a, b) => a.ref.localeCompare(b.ref));\n if (curNotes && !same(nowNotes, [...oldNotes].sort((a, b) => a.ref.localeCompare(b.ref)))) {\n changed = true;\n tail = writeNotes(book, entry, tail, p, notes, rows, cols, types, defaultsNeeded, fresh);\n }\n\n const rename = (s: string) => names.size ? s.replace(/<(xm:f|(?:\\w+:)?formula\\d?)>([\\s\\S]*?)<\\/\\1>/g, (_, n: string, f: string) =>\n `<${n}>${escape([...names].reduce((g, [from, to]) => renamed(g, from, to), unescape(f)))}</${n}>`) : s;\n if (!changed) {\n if (rec && rename(xml) !== xml) pack.put(entry.part, rename(xml));\n continue;\n }\n touched = true;\n head = rename(head);\n tail = rename(tail);\n if (/\\sr:id=\"/.test(tail) && !/xmlns:r=/.test(head)) head = head.replace(/<((?:\\w+:)?worksheet)\\b/, `<$1 xmlns:r=\"${REL}\"`);\n const dim = maxR < 0 ? 'A1' : span({ startRow: minR, startColumn: minC, endRow: maxR, endColumn: maxC });\n head = /<(?:\\w+:)?dimension\\b/.test(head) ? head.replace(/<((?:\\w+:)?)dimension\\b[^>]*\\/?>/, `<$1dimension ref=\"${dim}\"/>`) : place(head, 'dimension', `<${p}dimension ref=\"${dim}\"/>`);\n pack.put(entry.part, head + (body.length ? `<${p}sheetData>${body.join('')}</${p}sheetData>` : `<${p}sheetData/>`) + tail);\n\n if (rec && (rows.moved || cols.moved)) {\n for (const rel of rec.rels) {\n if (rel.external) continue;\n if (rel.type === 'drawing') {\n const d = pack.text(rel.target);\n if (d) pack.put(rel.target, anchors(d, rows, cols));\n }\n if (rel.type === 'table') {\n const t = pack.text(rel.target);\n if (!t) continue;\n const ref = attr(/<(?:\\w+:)?table\\b[^>]*>/.exec(t)?.[0] ?? '', 'ref');\n const b = ref && box(ref);\n const moved = b && squeeze(b, rows.map, cols.map);\n if (b && moved && moved.endColumn - moved.startColumn !== b.endColumn - b.startColumn) throw new SheetRefusal('tableColumns', rec.name);\n if (moved) pack.put(rel.target, t.replace(/(<(?:\\w+:)?(?:table|autoFilter)\\b[^>]*?\\sref=\")([^\"]*)\"/g, (_, a: string, r: string) => `${a}${span(squeeze(box(r)!, rows.map, cols.map) ?? box(r)!)}\"`));\n }\n }\n }\n }\n\n const sheetStyles = styles.build();\n if (sheetStyles) {\n const target = book.stylesPart ?? 'xl/styles.xml';\n pack.put(target, sheetStyles);\n if (!book.stylesPart) {\n types.push([`/${target}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml']);\n pack.put(relsOf(book.part), (pack.text(relsOf(book.part)) ?? '').replace(/<\\/(?:\\w+:)?Relationships>/, end => `<Relationship Id=\"rId${nextRid++}\" Type=\"${REL}/styles\" Target=\"${relative(book.part, target)}\"/>${end}`));\n }\n touched = true;\n }\n\n for (const [sid, ax] of axes) {\n if (!ax.rows.moved && !ax.cols.moved) continue;\n const name = ax.rec.name;\n const mine = (s: string | null) => s === name;\n for (const c of charts) {\n const t = pack.text(c);\n if (t && t.includes(name)) pack.put(c, t.replace(/<((?:\\w+:)?)f>([\\s\\S]*?)<\\/\\1f>/g, (_, p: string, f: string) => `<${p}f>${escape(remapped(unescape(f), mine, ax.rows.map, ax.cols.map))}</${p}f>`));\n }\n for (const c of caches) {\n const t = pack.text(c);\n if (t) pack.put(c, t.replace(/<(?:\\w+:)?worksheetSource\\b[^>]*>/g, tag => attr(tag, 'sheet') === name && attr(tag, 'ref') ? setAttr(tag, 'ref', span(squeeze(box(attr(tag, 'ref')!)!, ax.rows.map, ax.cols.map) ?? box(attr(tag, 'ref')!)!)) : tag));\n }\n for (const other of sheetParts) {\n if (other.sid === sid || !other.rec) continue;\n const t = pack.text(other.part);\n if (t && t.includes(name)) pack.put(other.part, t.replace(/<(xm:f|(?:\\w+:)?formula\\d?)>([\\s\\S]*?)<\\/\\1>/g, (_, n: string, f: string) => `<${n}>${escape(remapped(unescape(f), mine, ax.rows.map, ax.cols.map))}</${n}>`));\n }\n }\n for (const [from, to] of names) {\n for (const c of charts) {\n const t = pack.text(c);\n if (t && t.includes(from)) pack.put(c, t.replace(/<((?:\\w+:)?)f>([\\s\\S]*?)<\\/\\1f>/g, (_, p: string, f: string) => `<${p}f>${escape(renamed(unescape(f), from, to))}</${p}f>`));\n }\n for (const c of caches) {\n const t = pack.text(c);\n if (t) pack.put(c, t.replace(/(<(?:\\w+:)?worksheetSource\\b[^>]*\\ssheet=\")([^\"]*)\"/g, (all, a: string, s: string) => unescape(s) === from ? `${a}${escape(to)}\"` : all));\n }\n }\n\n const sheetsChanged = removed.length > 0 || names.size > 0 || sheetParts.some(s => !s.rec) || sheetParts.map(s => s.sheetId).join() !== book.entries.filter(e => e.sheet && kept.has(e.sheetId)).map(e => e.sheetId).join()\n || cur.sheetOrder.some(sid => { const rec = axes.get(sid)?.rec; return !!rec && (cur.sheets[sid].hidden ?? 0) !== (base.book.sheets[rec.sid].hidden ?? 0); });\n if (!touched && !sheetsChanged && !filterNames.size) return original;\n\n let wb = book.xml;\n const listed: { xml: string; sheetId: number; oldIndex: number }[] = [];\n const nonSheets = book.entries.map((e, i) => ({ e, i })).filter(x => !x.e.sheet);\n const indexOf = new Map(book.entries.map((e, i) => [e.sheetId, i]));\n const wp = /<(\\w+:)?workbook\\b/.exec(wb)?.[1] ?? '';\n const relPrefix = /xmlns:(\\w+)=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\"/.exec(wb)?.[1] ?? 'r';\n for (const s of sheetParts) {\n const sheet = cur.sheets[s.sid] as Sheet;\n const state = sheet.hidden === 2 ? 'veryHidden' : sheet.hidden ? 'hidden' : null;\n let tag = s.rec ? book.entries.find(e => e.sheetId === s.sheetId)!.xml : `<${wp}sheet name=\"\" sheetId=\"${s.sheetId}\" ${relPrefix}:id=\"${s.rid}\"/>`;\n tag = setAttr(setAttr(tag, 'name', sheet.name ?? `Sheet${s.sheetId}`), 'state', state);\n listed.push({ xml: tag, sheetId: s.sheetId, oldIndex: s.rec ? indexOf.get(s.sheetId)! : -1 });\n }\n for (const { e, i } of nonSheets) {\n let at = listed.findIndex(x => x.oldIndex > i);\n if (at < 0) at = listed.length;\n listed.splice(at, 0, { xml: e.xml, sheetId: e.sheetId, oldIndex: i });\n }\n wb = wb.replace(/(<(?:\\w+:)?sheets\\b[^>]*>)[\\s\\S]*?(<\\/(?:\\w+:)?sheets>)/, (_, a: string, b: string) => a + listed.map(x => x.xml).join('') + b);\n const newIndex = new Map(listed.map((x, i) => [x.oldIndex, i]));\n const sheetIndex = new Map(listed.map((x, i) => [x.sheetId, i]));\n const removedNames = new Set(removed.map(r => r.name));\n\n wb = wb.replace(/<((?:\\w+:)?)definedName\\b([^>]*)>([\\s\\S]*?)<\\/\\1definedName>/g, (all: string, p: string, attrs0: string, body: string) => {\n let tag = `<${p}definedName${attrs0}>`;\n const local = attr(tag, 'localSheetId');\n if (local !== null) {\n const next = newIndex.get(Number(local));\n if (next === undefined) return '';\n tag = setAttr(tag, 'localSheetId', String(next));\n const owner = listed[next];\n if (attr(tag, 'name') === '_xlnm._FilterDatabase' && filterNames.has(owner.sheetId)) {\n const f = filterNames.get(owner.sheetId)!;\n filterNames.delete(owner.sheetId);\n return f ? `${tag}${escape(f)}</${p}definedName>` : '';\n }\n }\n let f = unescape(body);\n for (const gone of removedNames) f = f.replace(new RegExp(`(?:'${literal(gone.replace(/'/g, \"''\"))}'|${literal(gone)})![$A-Z0-9:]+`, 'g'), '#REF!');\n for (const [, ax] of axes) if (ax.rows.moved || ax.cols.moved) f = remapped(f, s => s === ax.rec.name, ax.rows.map, ax.cols.map);\n for (const [from, to] of names) f = renamed(f, from, to);\n return `${tag}${escape(f)}</${p}definedName>`;\n });\n for (const [sheetId, f] of filterNames) {\n if (!f) continue;\n const def = `<${wp}definedName name=\"_xlnm._FilterDatabase\" localSheetId=\"${sheetIndex.get(sheetId)}\" hidden=\"1\">${escape(f)}</${wp}definedName>`;\n wb = /<(?:\\w+:)?definedNames\\b/.test(wb) ? wb.replace(/<\\/(?:\\w+:)?definedNames>/, end => def + end) : wb.replace(/<\\/(?:\\w+:)?sheets>/, end => `${end}<${wp}definedNames>${def}</${wp}definedNames>`);\n }\n wb = wb.replace(/<((?:\\w+:)?)definedNames>\\s*<\\/\\1definedNames>/, '');\n wb = wb.replace(/<(?:\\w+:)?workbookView\\b[^>]*>/g, tag => {\n const total = listed.length;\n let next = tag;\n const tab = attr(next, 'activeTab');\n if (tab !== null) next = setAttr(next, 'activeTab', String(Math.min(newIndex.get(Number(tab)) ?? 0, total - 1)));\n const first = attr(next, 'firstSheet');\n if (first !== null) next = setAttr(next, 'firstSheet', String(Math.min(newIndex.get(Number(first)) ?? 0, total - 1)));\n return next;\n });\n if (touched) {\n wb = /<(?:\\w+:)?calcPr\\b/.test(wb) ? wb.replace(/<(?:\\w+:)?calcPr\\b[^>]*?\\/?>/, tag => setAttr(tag, 'fullCalcOnLoad', '1')) : wb.replace(/(<\\/(?:\\w+:)?sheets>(?:\\s*<(?:\\w+:)?(?:functionGroups|externalReferences|definedNames)\\b[\\s\\S]*?<\\/(?:\\w+:)?(?:functionGroups|externalReferences|definedNames)>)*)/, `$1<${wp}calcPr fullCalcOnLoad=\"1\"/>`);\n }\n pack.put(book.part, wb);\n\n let rels = pack.text(relsOf(book.part)) ?? '';\n for (const gone of removed) {\n const entry = book.entries.find(e => e.sheetId === gone.sheetId)!;\n rels = rels.replace(new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*\\\\bId=\"${entry.rid}\"[^>]*\\\\/>`), '');\n pack.put(gone.part, null);\n pack.put(relsOf(gone.part), null);\n types.push([`/${gone.part}`, null]);\n }\n const calc = book.rels.find(r => r.type === 'calcChain');\n if (calc && touched) {\n rels = rels.replace(new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*\\\\bId=\"${calc.id}\"[^>]*\\\\/>`), '');\n pack.put(calc.target, null);\n types.push([`/${calc.target}`, null]);\n }\n for (const s of sheetParts) if (!s.rec) rels = rels.replace(/<\\/(?:\\w+:)?Relationships>/, end => `<Relationship Id=\"${s.rid}\" Type=\"${REL}/worksheet\" Target=\"${relative(book.part, s.part)}\"/>${end}`);\n pack.put(relsOf(book.part), rels);\n contentTypes(pack, types, defaultsNeeded);\n return copy(pack.build());\n}\n\nconst copy = (u: Uint8Array) => u.buffer.slice(u.byteOffset, u.byteOffset + u.byteLength) as ArrayBuffer;\n\nfunction contentTypes(pack: Book['pack'], types: [string, string | null][], defaults: Set<string>) {\n if (!types.length && !defaults.size) return;\n let ct = pack.text('[Content_Types].xml') ?? '';\n for (const [name, type] of types) {\n ct = ct.replace(new RegExp(`<Override\\\\b[^>]*PartName=\"${literal(name)}\"[^>]*\\\\/>`), '');\n if (type) ct = ct.replace('</Types>', () => `<Override PartName=\"${name}\" ContentType=\"${type}\"/></Types>`);\n }\n for (const ext of defaults) if (!new RegExp(`Extension=\"${ext}\"`, 'i').test(ct)) ct = ct.replace(/(<Types\\b[^>]*>)/, `$1<Default Extension=\"${ext}\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>`);\n pack.put('[Content_Types].xml', ct);\n}\n\nfunction cellXml(p: string, ref: string, xf: number, x: ICellData, f: string | null, v: string | number | boolean | null) {\n const s = xf ? ` s=\"${xf}\"` : '';\n if (f) {\n const body = escape(stored(f.replace(/^=/, '')));\n let t = '', val = '';\n if (typeof v === 'number' && Number.isFinite(v)) val = `<${p}v>${v}</${p}v>`;\n else if (typeof v === 'boolean' || x.t === 3) { t = ' t=\"b\"'; val = `<${p}v>${v === true || v === 1 ? 1 : 0}</${p}v>`; }\n else if (typeof v === 'string' && v !== '') { t = errors.test(v) ? ' t=\"e\"' : ' t=\"str\"'; val = `<${p}v>${escape(v)}</${p}v>`; }\n return `<${p}c r=\"${ref}\"${s}${t}><${p}f>${body}</${p}f>${val}</${p}c>`;\n }\n if (blank(v)) return xf ? `<${p}c r=\"${ref}\"${s}/>` : '';\n if (typeof v === 'boolean') return `<${p}c r=\"${ref}\"${s} t=\"b\"><${p}v>${v ? 1 : 0}</${p}v></${p}c>`;\n if (typeof v === 'number') return Number.isFinite(v) ? `<${p}c r=\"${ref}\"${s}><${p}v>${v}</${p}v></${p}c>` : `<${p}c r=\"${ref}\"${s} t=\"e\"><${p}v>#NUM!</${p}v></${p}c>`;\n const str = String(v);\n if (x.t === 2 && str.trim() !== '' && Number.isFinite(Number(str))) return `<${p}c r=\"${ref}\"${s}><${p}v>${Number(str)}</${p}v></${p}c>`;\n if (x.t !== 4 && errors.test(str)) return `<${p}c r=\"${ref}\"${s} t=\"e\"><${p}v>${escape(str)}</${p}v></${p}c>`;\n const space = /^\\s|\\s$|\\n/.test(str) ? ' xml:space=\"preserve\"' : '';\n return `<${p}c r=\"${ref}\"${s} t=\"inlineStr\"><${p}is><${p}t${space}>${escape(str)}</${p}t></${p}is></${p}c>`;\n}\n\nfunction columns(p: string, rec: SheetRec | null, sheet: Sheet, old: Sheet, cols: Axis, defaults: IStyleData,\n cur: IWorkbookData, baseBook: IWorkbookData, xfFor: (look: IStyleData, was: number) => number, xfOf: (s: unknown) => number): string | null | undefined {\n type Cd = { w?: number; hd?: number; s?: unknown };\n const now = (sheet.columnData ?? {}) as Record<number, Cd>, was = (old.columnData ?? {}) as Record<number, Cd>;\n const count = sheet.columnCount ?? 26;\n const look = (bk: IWorkbookData, s: unknown) => s ? norm({ ...defaults, ...lookup(bk, s) }) : null;\n let differs = cols.moved;\n for (let c = 0; c < count && !differs; c++) {\n const c0 = cols.from(c);\n const a = now[c] ?? {}, b = c0 >= 0 ? was[c0] ?? {} : {};\n if (Math.abs((a.w ?? -1) - (b.w ?? -1)) > 0.5 || !!a.hd !== !!b.hd || !same(look(cur, a.s), look(baseBook, b.s))) differs = true;\n }\n if (!differs) return undefined;\n const specs = rec?.cols ?? [];\n const specAt = (c0: number) => specs.find(s => c0 + 1 >= s.min && c0 + 1 <= s.max);\n const out: { c: number; attrs: Map<string, string> }[] = [];\n for (let c = 0; c < count; c++) {\n const c0 = cols.from(c);\n const spec = c0 >= 0 ? specAt(c0) : undefined;\n const a = new Map(spec ? [...spec.xml.matchAll(/([\\w:]+)=\"([^\"]*)\"/g)].map(m => [m[1], m[2]] as [string, string]) : []);\n a.delete('min');\n a.delete('max');\n const n = now[c] ?? {}, o = c0 >= 0 ? was[c0] ?? {} : {};\n if (Math.abs((n.w ?? -1) - (o.w ?? -1)) > 0.5) {\n if (n.w === undefined) { a.delete('width'); a.delete('customWidth'); }\n else { a.set('width', String(pt.col(n.w))); a.set('customWidth', '1'); }\n }\n if (!!n.hd !== !!o.hd) n.hd ? a.set('hidden', '1') : a.delete('hidden');\n const ln = look(cur, n.s), lo = look(baseBook, o.s);\n if (!same(ln, lo)) ln ? a.set('style', String(xfFor(ln, xfOf(o.s)))) : a.delete('style');\n if (!a.size) continue;\n if (!a.has('width')) a.set('width', String(pt.col(sheet.defaultColumnWidth ?? 64)));\n out.push({ c, attrs: a });\n }\n const runs: string[] = [];\n for (let i = 0; i < out.length; i++) {\n let j = i;\n const k = JSON.stringify([...out[i].attrs]);\n while (j + 1 < out.length && out[j + 1].c === out[j].c + 1 && JSON.stringify([...out[j + 1].attrs]) === k) j++;\n runs.push(`<${p}col min=\"${out[i].c + 1}\" max=\"${out[j].c + 1}\"${[...out[i].attrs].map(([n, v]) => ` ${n}=\"${v}\"`).join('')}/>`);\n i = j;\n }\n const shift = count - (rec?.width ?? count);\n for (const spec of specs) {\n if (spec.max <= (rec?.width ?? 0)) continue;\n const min = Math.max(count + 1, spec.min + shift), max = Math.min(16384, spec.max + shift);\n if (min <= max) runs.push(spec.xml.replace(/\\smin=\"\\d+\"/, ` min=\"${min}\"`).replace(/\\smax=\"\\d+\"/, ` max=\"${max}\"`));\n }\n return runs.length ? `<${p}cols>${runs.join('')}</${p}cols>` : null;\n}\n\nfunction frozen(head: string, p: string, x: number, y: number) {\n const pane = x || y ? `<${p}pane${x ? ` xSplit=\"${x}\"` : ''}${y ? ` ySplit=\"${y}\"` : ''} topLeftCell=\"${a1(y, x)}\" activePane=\"${x && y ? 'bottomRight' : y ? 'bottomLeft' : 'topRight'}\" state=\"frozen\"/>` : '';\n const selection = x || y ? `<${p}selection pane=\"${x && y ? 'bottomRight' : y ? 'bottomLeft' : 'topRight'}\" activeCell=\"${a1(y, x)}\" sqref=\"${a1(y, x)}\"/>` : `<${p}selection activeCell=\"A1\" sqref=\"A1\"/>`;\n const view = /<((?:\\w+:)?)sheetView\\b[^>]*?(\\/?)>/.exec(head);\n if (!view) return place(head, 'sheetViews', `<${p}sheetViews><${p}sheetView workbookViewId=\"0\">${pane}${selection}</${p}sheetView></${p}sheetViews>`);\n if (view[2]) return head.slice(0, view.index) + view[0].replace(/\\s*\\/>$/, '>') + pane + selection + `</${view[1]}sheetView>` + head.slice(view.index + view[0].length);\n const close = head.indexOf(`</${view[1]}sheetView>`, view.index);\n const inner = head.slice(view.index + view[0].length, close).replace(/<(?:\\w+:)?pane\\b[^>]*\\/>/g, '').replace(/<(?:\\w+:)?selection\\b[^>]*\\/>/g, '');\n return head.slice(0, view.index) + view[0] + pane + selection + inner + head.slice(close);\n}\n\nfunction tabColour(head: string, p: string, colour: string) {\n const tag = colour ? `<${p}tabColor rgb=\"FF${colour.replace('#', '').toUpperCase()}\"/>` : '';\n if (/<(?:\\w+:)?tabColor\\b/.test(head)) return head.replace(/<(?:\\w+:)?tabColor\\b[^>]*\\/>/, tag);\n if (!colour) return head;\n const pr = /<((?:\\w+:)?)sheetPr\\b[^>]*?(\\/?)>/.exec(head);\n if (!pr) return place(head, 'sheetPr', `<${p}sheetPr>${tag}</${p}sheetPr>`);\n if (pr[2]) return head.slice(0, pr.index) + pr[0].replace(/\\s*\\/>$/, '>') + tag + `</${pr[1]}sheetPr>` + head.slice(pr.index + pr[0].length);\n return head.slice(0, pr.index + pr[0].length) + tag + head.slice(pr.index + pr[0].length);\n}\n\nfunction canonRule(r: Record<string, unknown>) {\n const out: Record<string, unknown> = {};\n for (const k of ['uid', 'type', 'operator', 'formula1', 'formula2', 'allowBlank', 'showDropDown', 'showErrorMessage', 'showInputMessage', 'errorStyle', 'error', 'errorTitle', 'prompt', 'promptTitle']) {\n const v = r[k];\n if (v !== undefined && v !== null && v !== false && v !== '') out[k] = v;\n }\n if (out.type === 'list' && out.showDropDown === undefined) out.showDropDown = true;\n out.ranges = (r.ranges as Box[]).map(b => span(b)).sort();\n return out;\n}\n\nfunction validationXml(p: string, r: Rule, was: string | undefined) {\n if (!['whole', 'decimal', 'list', 'textLength', 'custom', 'date'].includes(String(r.type))) return '';\n let tag = was ? was.slice(0, was.indexOf('>') + 1).replace(/\\s*\\/>$/, '>') : `<${p}dataValidation>`;\n const bool = (name: string, on: unknown) => { tag = setAttr(tag, name, on ? '1' : null); };\n tag = setAttr(tag, 'type', String(r.type));\n tag = setAttr(tag, 'operator', r.type === 'list' || r.type === 'custom' || !r.operator || r.operator === 'between' ? null : String(r.operator));\n bool('allowBlank', r.allowBlank);\n bool('showDropDown', r.type === 'list' && r.showDropDown === false);\n bool('showInputMessage', r.showInputMessage);\n bool('showErrorMessage', r.showErrorMessage);\n const style = Object.entries(stops).find(([, v]) => v === r.errorStyle)?.[0];\n tag = setAttr(tag, 'errorStyle', style && style !== 'stop' ? style : null);\n for (const name of ['errorTitle', 'error', 'promptTitle', 'prompt']) tag = setAttr(tag, name, blank(r[name]) ? null : String(r[name]));\n tag = setAttr(tag, 'sqref', r.ranges.map(span).join(' '));\n const f1 = r.formula1 === undefined ? '' : r.type === 'list' && !String(r.formula1).startsWith('=') ? `\"${listText(String(r.formula1)).replace(/\"/g, '\"\"')}\"` : stored(String(r.formula1).replace(/^=/, ''));\n const f2 = r.formula2 === undefined ? '' : stored(String(r.formula2).replace(/^=/, ''));\n return `${tag}${f1 ? `<${p}formula1>${escape(f1)}</${p}formula1>` : ''}${f2 ? `<${p}formula2>${escape(f2)}</${p}formula2>` : ''}</${p}dataValidation>`;\n}\n\nfunction listText(f: string) {\n try {\n const list = JSON.parse(f);\n if (Array.isArray(list)) return list.join(',');\n } catch {\n return f;\n }\n return f;\n}\n\nfunction filterXml(p: string, ref: Box, columns: unknown[]) {\n const body = (columns as { colId: number; filters?: { filters?: string[]; blank?: boolean }; customFilters?: { and?: number; customFilters: { operator?: string; val: string }[] } }[]).map(c => {\n if (c.filters) return `<${p}filterColumn colId=\"${c.colId}\"><${p}filters${c.filters.blank ? ' blank=\"1\"' : ''}>${(c.filters.filters ?? []).map(v => `<${p}filter val=\"${escape(String(v))}\"/>`).join('')}</${p}filters></${p}filterColumn>`;\n if (c.customFilters) return `<${p}filterColumn colId=\"${c.colId}\"><${p}customFilters${c.customFilters.and ? ' and=\"1\"' : ''}>${c.customFilters.customFilters.map(f => `<${p}customFilter${f.operator ? ` operator=\"${f.operator}\"` : ''} val=\"${escape(String(f.val))}\"/>`).join('')}</${p}customFilters></${p}filterColumn>`;\n return '';\n }).join('');\n return body ? `<${p}autoFilter ref=\"${span(ref)}\">${body}</${p}autoFilter>` : `<${p}autoFilter ref=\"${span(ref)}\"/>`;\n}\n\nfunction writeNotes(book: Book, entry: { rec: SheetRec | null; part: string }, tail: string, p: string, notes: Note[], rows: Axis, cols: Axis,\n types: [string, string | null][], defaults: Set<string>, fresh: (pattern: (n: number) => string) => string) {\n const { pack } = book;\n const rec = entry.rec;\n const relsPart = relsOf(entry.part);\n let rels = pack.text(relsPart) ?? '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>';\n let nextRid = Math.max(0, ...[...rels.matchAll(/\\bId=\"rId(\\d+)\"/g)].map(m => Number(m[1]))) + 1;\n let commentsPart = rec?.comments ?? null;\n let vmlPart = rec?.vml ?? null;\n if (!commentsPart) {\n commentsPart = fresh(n => `xl/comments${n}.xml`);\n rels = rels.replace('</Relationships>', () => `<Relationship Id=\"rId${nextRid++}\" Type=\"${REL}/comments\" Target=\"${relative(entry.part, commentsPart!)}\"/></Relationships>`);\n types.push([`/${commentsPart}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml']);\n }\n if (!vmlPart) {\n vmlPart = fresh(n => `xl/drawings/vmlDrawing${n}.vml`);\n const rid = `rId${nextRid++}`;\n rels = rels.replace('</Relationships>', () => `<Relationship Id=\"${rid}\" Type=\"${REL}/vmlDrawing\" Target=\"${relative(entry.part, vmlPart!)}\"/></Relationships>`);\n defaults.add('vml');\n const relNs = /xmlns:(\\w+)=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\"/.exec(rec?.xml ?? '')?.[1];\n tail = place(tail, 'legacyDrawing', `<${p}legacyDrawing ${relNs ?? 'r'}:id=\"${rid}\"/>`);\n }\n pack.put(relsPart, rels);\n\n const authors = rec?.authors.length ? [...rec.authors] : ['Author'];\n const byOld = new Map((rec?.notes ?? []).map(n => {\n const [r, c] = cell(n.ref);\n return [a1(rows.map(r), cols.map(c)), n];\n }));\n const list = [...notes].sort((a, b) => a.row - b.row || a.col - b.col).map(n => {\n const ref = a1(n.row, n.col);\n const was = byOld.get(ref);\n if (was && was.text === n.note) return setAttr(was.xml.slice(0, was.xml.indexOf('>') + 1), 'ref', ref) + was.xml.slice(was.xml.indexOf('>') + 1);\n const authorId = was ? attr(was.xml, 'authorId') ?? '0' : '0';\n return `<${p}comment ref=\"${ref}\" authorId=\"${authorId}\"><${p}text><${p}r><${p}t xml:space=\"preserve\">${escape(n.note)}</${p}t></${p}r></${p}text></${p}comment>`;\n });\n const existing = pack.text(commentsPart);\n const authorsXml = `<${p}authors>${authors.map(a => `<${p}author>${escape(a)}</${p}author>`).join('')}</${p}authors>`;\n const commentsXml = existing\n ? existing.replace(/<((?:\\w+:)?)commentList\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1commentList>)/, () => `<${p}commentList>${list.join('')}</${p}commentList>`)\n : `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">${authorsXml}<commentList>${list.join('')}</commentList></comments>`;\n pack.put(commentsPart, commentsXml);\n\n const vml = pack.text(vmlPart) ?? '<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"><o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout><v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\"><v:stroke joinstyle=\"miter\"/><v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/></v:shapetype></xml>';\n const shapes = new Map<string, string>();\n let rest = vml.replace(/<v:shape\\b[^>]*>[\\s\\S]*?<\\/v:shape>/g, shape => {\n if (!/ObjectType=\"Note\"/.test(shape)) return shape;\n const r = Number(/<x:Row>(\\d+)<\\/x:Row>/.exec(shape)?.[1] ?? -1), c = Number(/<x:Column>(\\d+)<\\/x:Column>/.exec(shape)?.[1] ?? -1);\n if (r >= 0 && c >= 0) shapes.set(a1(rows.map(r), cols.map(c)), shape);\n return '';\n });\n let id = Math.max(1024, ...[...vml.matchAll(/_x0000_s(\\d+)/g)].map(m => Number(m[1])));\n const out = notes.map(n => {\n const ref = a1(n.row, n.col);\n const was = shapes.get(ref);\n if (was) return was.replace(/<x:Row>\\d+<\\/x:Row>/, `<x:Row>${n.row}</x:Row>`).replace(/<x:Column>\\d+<\\/x:Column>/, `<x:Column>${n.col}</x:Column>`)\n .replace(/<x:Anchor>([^<]*)<\\/x:Anchor>/, `<x:Anchor>${n.col + 1}, 15, ${n.row}, 2, ${n.col + 3}, 15, ${n.row + 4}, 16</x:Anchor>`);\n return `<v:shape id=\"_x0000_s${++id}\" type=\"#_x0000_t202\" style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:1;visibility:hidden\" fillcolor=\"#ffffe1\" o:insetmode=\"auto\"><v:fill color2=\"#ffffe1\"/><v:shadow on=\"t\" color=\"black\" obscured=\"t\"/><v:path o:connecttype=\"none\"/><v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox><x:ClientData ObjectType=\"Note\"><x:MoveWithCells/><x:SizeWithCells/><x:Anchor>${n.col + 1}, 15, ${n.row}, 2, ${n.col + 3}, 15, ${n.row + 4}, 16</x:Anchor><x:AutoFill>False</x:AutoFill><x:Row>${n.row}</x:Row><x:Column>${n.col}</x:Column></x:ClientData></v:shape>`;\n }).join('');\n rest = rest.replace(/<\\/xml>\\s*$/, () => `${out}</xml>`);\n pack.put(vmlPart, rest);\n return tail;\n}\n","import { readCsv, writeCsv } from './csv';\nimport type { SheetModel } from './model';\nimport { writeXlsx } from './write';\nimport { load } from './xlsx';\n\nexport function readSheet(bytes: ArrayBuffer, kind: 'xlsx' | 'csv'): SheetModel {\n return kind === 'csv' ? readCsv(bytes) : load(bytes).model;\n}\n\nexport function writeSheet(original: ArrayBuffer, model: SheetModel, kind: 'xlsx' | 'csv'): ArrayBuffer {\n return kind === 'csv' ? writeCsv(original, model) : writeXlsx(original, model);\n}\n","import type { ICellData, IColumnData, IRowData, IStyleData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport * as Y from 'yjs';\nimport { readSheet } from './book';\nimport { numbered, type Lines, type SheetModel } from './model';\nimport { cell, remapped, renamed, squeeze, type Box } from './refs';\nimport { Axis } from './write';\nimport { worksheets } from './xlsx';\n\nexport type Cell = Pick<ICellData, 'v' | 't' | 'f' | 'p'> & { s?: string };\nexport type Row = Pick<IRowData, 'h' | 'hd' | 'ia'> & { s?: string };\nexport type Col = Pick<IColumnData, 'w' | 'hd'> & { s?: string };\nexport type Note = { note: string; width: number; height: number };\ntype Value = Pick<ICellData, 'v' | 't'>;\ntype Origin = { id: number; name: string; rows: string[] | number; cols: string[] | number };\ntype Resource = { name: string; data: string };\n\nexport const props = ['name', 'hidden', 'tabColor', 'freeze', 'showGridlines', 'rightToLeft'] as const;\n\nexport const spot = (row: string, col: string) => `${row}:${col}`;\n\nexport const canon = (x: unknown): string => x === null || typeof x !== 'object' ? JSON.stringify(x ?? null)\n : Array.isArray(x) ? `[${x.map(canon).join(',')}]`\n : `{${Object.keys(x).filter(k => (x as Record<string, unknown>)[k] !== undefined).sort().map(k => `${JSON.stringify(k)}:${canon((x as Record<string, unknown>)[k])}`).join(',')}}`;\n\nexport const strip = <T extends object>(o: T) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== null)) as T;\n\nexport const fnv = (bytes: Uint8Array, h = 0x811c9dc5) => {\n for (const b of bytes) h = Math.imul(h ^ b, 0x01000193) >>> 0;\n return h;\n};\n\nexport function parts(doc: Y.Doc) {\n const book = doc.getMap<unknown>('book');\n return {\n book, values: doc.getMap<Value>('values'), origin: doc.getMap<Origin>('origin'),\n order: book.get('order') as Y.Array<string>, sheets: book.get('sheets') as Y.Map<Y.Map<unknown>>, styles: book.get('styles') as Y.Map<IStyleData>,\n };\n}\n\nexport const pieces = (m: Y.Map<unknown>) => ({\n rows: m.get('rows') as Y.Array<string>, cols: m.get('cols') as Y.Array<string>, cells: m.get('cells') as Y.Map<Cell>,\n rowData: m.get('rowData') as Y.Map<Row>, colData: m.get('colData') as Y.Map<Col>, merges: m.get('merges') as Y.Map<number>, notes: m.get('notes') as Y.Map<Note>,\n});\n\nexport function made(config: Partial<IWorksheetData>, lines: Lines) {\n const m = new Y.Map<unknown>();\n for (const name of props) if (config[name] !== undefined) m.set(name, config[name]);\n m.set('look', strip({ defaultRowHeight: config.defaultRowHeight, defaultColumnWidth: config.defaultColumnWidth, zoomRatio: config.zoomRatio }));\n m.set('rows', Y.Array.from(lines.rows));\n m.set('cols', Y.Array.from(lines.cols));\n for (const name of ['cells', 'rowData', 'colData', 'merges', 'notes']) m.set(name, new Y.Map());\n return m;\n}\n\nexport function fill(doc: Y.Doc, model: SheetModel) {\n const { book: wb, lines } = model;\n const book = doc.getMap<unknown>('book');\n const notes = JSON.parse(wb.resources?.find(r => r.name === 'SHEET_NOTE_PLUGIN')?.data ?? '{}') as Record<string, Record<number, Record<number, Note>>>;\n doc.transact(() => {\n book.set('head', strip({ id: wb.id, name: wb.name, appVersion: wb.appVersion, locale: wb.locale, defaultStyle: wb.defaultStyle, dateSystem: wb.dateSystem }));\n book.set('extras', (wb.resources ?? []).filter(r => r.name !== 'SHEET_NOTE_PLUGIN'));\n book.set('active', model.active ?? null);\n book.set('styles', new Y.Map());\n book.set('order', Y.Array.from(wb.sheetOrder));\n book.set('sheets', new Y.Map());\n const { sheets, styles, values, origin } = parts(doc);\n for (const [id, look] of Object.entries(wb.styles)) if (look) styles.set(id, look);\n for (const sid of wb.sheetOrder) {\n const sheet = wb.sheets[sid];\n const l = lines[sid];\n sheets.set(sid, made(sheet, l));\n origin.set(sid, { id: model.origin.sheets[sid], name: sheet.name ?? '', rows: l.rows.length, cols: l.cols.length });\n const { cells, rowData, colData, merges, notes: kept } = pieces(sheets.get(sid)!);\n for (const [r, line] of Object.entries((sheet.cellData ?? {}) as Record<number, Record<number, ICellData>>)) for (const [c, x] of Object.entries(line ?? {})) {\n if (!x) continue;\n const at = spot(l.rows[+r], l.cols[+c]);\n const out: Cell = {};\n if (x.f) {\n out.f = x.f;\n values.set(`${sid}:${at}`, { v: x.v ?? null, t: x.t ?? null });\n } else {\n if (x.v !== undefined && x.v !== null) out.v = x.v;\n if (x.t) out.t = x.t;\n }\n if (x.p) out.p = x.p;\n if (typeof x.s === 'string') out.s = x.s;\n cells.set(at, out);\n }\n for (const [r, rd] of Object.entries(sheet.rowData ?? {})) if (rd) rowData.set(l.rows[+r], strip({ h: rd.h, hd: rd.hd, ia: rd.ia, s: typeof rd.s === 'string' ? rd.s : undefined }));\n for (const [c, cd] of Object.entries(sheet.columnData ?? {})) if (cd) colData.set(l.cols[+c], strip({ w: cd.w, hd: cd.hd, s: typeof cd.s === 'string' ? cd.s : undefined }));\n for (const b of sheet.mergeData ?? []) merges.set([l.rows[b.startRow], l.cols[b.startColumn], l.rows[b.endRow], l.cols[b.endColumn]].join(':'), 1);\n for (const [r, line] of Object.entries(notes[sid] ?? {})) for (const [c, n] of Object.entries(line)) kept.set(spot(l.rows[+r], l.cols[+c]), { note: n.note, width: n.width, height: n.height });\n }\n });\n}\n\nexport function sheetOf(doc: Y.Doc, sid: string, l: Lines): Partial<IWorksheetData> {\n const { sheets, values } = parts(doc);\n const m = sheets.get(sid)!;\n const { cells, rowData, colData, merges } = pieces(m);\n const rows = new Map(l.rows.map((id, i) => [id, i])), cols = new Map(l.cols.map((id, i) => [id, i]));\n const cellData: Record<number, Record<number, ICellData>> = {};\n for (const [at, x] of cells) {\n const [row, col] = at.split(':');\n const r = rows.get(row), c = cols.get(col);\n if (r === undefined || c === undefined) continue;\n const kept = x.f ? values.get(`${sid}:${at}`) : undefined;\n (cellData[r] ??= {})[c] = kept ? { ...x, v: kept.v, t: kept.t } : { ...x };\n }\n const rowsOut: Record<number, IRowData> = {}, colsOut: Record<number, IColumnData> = {};\n for (const [id, x] of rowData) if (rows.has(id)) rowsOut[rows.get(id)!] = { ...x };\n for (const [id, x] of colData) if (cols.has(id)) colsOut[cols.get(id)!] = { ...x };\n const mergeData = [...merges.keys()].map(k => k.split(':')).map(([r0, c0, r1, c1]) => ({ startRow: rows.get(r0)!, startColumn: cols.get(c0)!, endRow: rows.get(r1)!, endColumn: cols.get(c1)! }))\n .filter(b => [b.startRow, b.startColumn, b.endRow, b.endColumn].every(n => n !== undefined));\n const out: Partial<IWorksheetData> = { ...(m.get('look') as object), id: sid, rowCount: l.rows.length, columnCount: l.cols.length, cellData, rowData: rowsOut, columnData: colsOut, mergeData };\n for (const name of props) if (m.has(name)) Object.assign(out, { [name]: m.get(name) });\n return out;\n}\n\nexport const notesOf = (m: Y.Map<unknown>, l: Lines) => {\n const rows = new Map(l.rows.map((id, i) => [id, i])), cols = new Map(l.cols.map((id, i) => [id, i]));\n return [...pieces(m).notes].map(([at, n]) => ({ ...n, row: rows.get(at.split(':')[0]), col: cols.get(at.split(':')[1]) }))\n .filter((n): n is Note & { row: number; col: number } => n.row !== undefined && n.col !== undefined);\n};\n\nexport function build(doc: Y.Doc): SheetModel {\n const { book, order, sheets, styles, origin } = parts(doc);\n const sheetOrder = [...new Set(order.toArray())].filter(sid => sheets.has(sid));\n const wb = { ...(book.get('head') as object), styles: styles.toJSON(), sheetOrder, sheets: {}, resources: [] } as unknown as IWorkbookData;\n const model: SheetModel = { book: wb, lines: {}, origin: { sheets: {}, lines: {} } };\n const notes: Record<string, Record<number, Record<number, unknown>>> = {};\n for (const sid of sheetOrder) {\n const { rows, cols } = pieces(sheets.get(sid)!);\n const l = { rows: rows.toArray(), cols: cols.toArray() };\n model.lines[sid] = l;\n wb.sheets[sid] = sheetOf(doc, sid, l);\n notesOf(sheets.get(sid)!, l).forEach((n, i) => { ((notes[sid] ??= {})[n.row] ??= {})[n.col] = { ...n, show: false, id: `n${i}` }; });\n const o = origin.get(sid);\n if (!o) continue;\n model.origin.sheets[sid] = o.id;\n model.origin.lines[sid] = { rows: typeof o.rows === 'number' ? numbered('r', o.rows) : o.rows, cols: typeof o.cols === 'number' ? numbered('c', o.cols) : o.cols };\n }\n wb.resources!.push({ name: 'SHEET_NOTE_PLUGIN', data: JSON.stringify(notes) });\n const active = book.get('active') as string | null;\n if (active && sheetOrder.includes(active)) model.active = active;\n return model;\n}\n\nexport function extras(doc: Y.Doc, model: SheetModel) {\n const { book, origin } = parts(doc);\n const own = new Map([...origin.entries()].filter(([sid]) => model.lines[sid]).map(([sid, o]) => {\n const old = model.origin.lines[sid], now = model.lines[sid];\n return [`s${o.id}`, { sid, name: o.name, rows: new Axis(old.rows, now.rows), cols: new Axis(old.cols, now.cols) }];\n }));\n const fix = (b: Box, sid: string) => { const a = own.get(sid)!; return squeeze(b, a.rows.map, a.cols.map); };\n for (const r of book.get('extras') as Resource[]) {\n const parsed = JSON.parse(r.data) as Record<string, unknown>;\n let out: Record<string, unknown> = {};\n if (r.name === 'SHEET_DEFINED_NAME_PLUGIN') out = Object.fromEntries(Object.entries(parsed as Record<string, { formulaOrRefString: string; localSheetId: string }>).map(([id, n]) => {\n let f = n.formulaOrRefString;\n for (const a of own.values()) {\n f = remapped(f, s => s === a.name, a.rows.map, a.cols.map);\n if (a.name !== model.book.sheets[a.sid].name) f = renamed(f, a.name, model.book.sheets[a.sid].name!);\n }\n return [id, { ...n, formulaOrRefString: f, localSheetId: own.get(n.localSheetId)?.sid ?? n.localSheetId }];\n }));\n else for (const [base, x] of Object.entries(parsed)) {\n const a = own.get(base);\n if (!a) continue;\n if (r.name === 'SHEET_DATA_VALIDATION_PLUGIN') out[a.sid] = (x as { ranges: Box[] }[]).map(rule => ({ ...rule, ranges: rule.ranges.map(b => fix(b, base)).filter(Boolean) })).filter(rule => rule.ranges.length);\n else if (r.name === 'SHEET_FILTER_PLUGIN') {\n const f = x as { ref: Box; cachedFilteredOut?: number[] };\n const ref = fix(f.ref, base);\n if (ref) out[a.sid] = { ...f, ref: { ...f.ref, ...ref }, cachedFilteredOut: (f.cachedFilteredOut ?? []).map(a.rows.map).filter(n => n >= 0) };\n } else out[a.sid] = x;\n }\n model.book.resources!.push({ name: r.name, data: JSON.stringify(out) });\n }\n return model;\n}\n\nexport function settle(doc: Y.Doc, model: SheetModel, bytes: ArrayBuffer, kind: 'xlsx' | 'csv') {\n const { book, origin } = parts(doc);\n const ids = kind === 'csv' ? [] : worksheets(bytes);\n const saved = readSheet(bytes, kind);\n const back = new Map<string, string>();\n model.book.sheetOrder.forEach((sid, i) => {\n const id = ids[i] ?? i + 1;\n back.set(`s${id}`, sid);\n origin.set(sid, { id, name: model.book.sheets[sid].name ?? '', rows: model.lines[sid].rows, cols: model.lines[sid].cols });\n });\n for (const sid of [...origin.keys()]) if (!model.lines[sid]) origin.delete(sid);\n book.set('extras', (saved.book.resources ?? []).filter(r => r.name !== 'SHEET_NOTE_PLUGIN'));\n}\n\nexport function applyCells(doc: Y.Doc, list: { sheet: string; ref: string; value?: string | number | boolean | null; formula?: string }[], origin: unknown) {\n const { order, sheets, values } = parts(doc);\n let done = 0;\n doc.transact(() => {\n for (const x of list) {\n const sid = order.toArray().find(id => sheets.get(id)?.get('name') === x.sheet);\n const [r, c] = cell(x.ref);\n if (!sid || r < 0) continue;\n const { rows, cols, cells } = pieces(sheets.get(sid)!);\n if (r >= rows.length || c >= cols.length) continue;\n const at = spot(rows.get(r), cols.get(c));\n const next: Cell = {};\n if (x.formula !== undefined) next.f = x.formula.startsWith('=') ? x.formula : `=${x.formula}`;\n else if (typeof x.value === 'boolean') Object.assign(next, { v: x.value ? 1 : 0, t: 3 });\n else if (x.value !== undefined && x.value !== null && x.value !== '') Object.assign(next, { v: x.value, t: typeof x.value === 'number' ? 2 : 1 });\n const s = cells.get(at)?.s;\n if (s) next.s = s;\n values.delete(`${sid}:${at}`);\n if (Object.keys(next).length) cells.set(at, next);\n else cells.delete(at);\n done++;\n }\n }, origin);\n return done;\n}\n","import type { Language } from '../types';\n\nconst en = {\n tools: 'Sheet tools', loading: 'Opening the sheet', failed: 'This sheet could not be opened', retry: 'Try again',\n undo: 'Undo', redo: 'Redo', bold: 'Bold', italic: 'Italic', underline: 'Underline', strike: 'Strike out',\n textColour: 'Text colour', fill: 'Fill colour', automatic: 'Automatic', noFill: 'No fill',\n borders: 'Borders', borderAll: 'All borders', borderOuter: 'Outer border', borderBottom: 'Bottom border', borderNone: 'No borders',\n alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', wrap: 'Wrap text', merge: 'Merge cells', unmerge: 'Split cells',\n format: 'Number format', general: 'General', number: 'Number', percent: 'Percent', currency: 'Currency', date: 'Date', time: 'Time', text: 'Text',\n rowAbove: 'Row above', rowBelow: 'Row below', columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRows: 'Delete rows', deleteColumns: 'Delete columns',\n freeze: 'Freeze', freezeNone: 'Unfreeze', freezeRow: 'First row', freezeColumn: 'First column', freezeHere: 'Up to the selected cell',\n sortUp: 'Sort A to Z', sortDown: 'Sort Z to A', filter: 'Filter', find: 'Find and replace', note: 'Note',\n save: 'Save', saving: 'Saving', saved: 'Saved', saveFailed: 'Could not save', editedNote: 'Sheet edited',\n viewOnly: 'View only', notesOnly: 'You can add notes',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this sheet', you: 'you',\n refused: {\n chartSource: 'A chart on another sheet uses data from “{sheet}”. Bring that sheet back to save.',\n pivotSheet: 'A pivot table reads its data from “{sheet}”. Bring that sheet back to save.',\n tableColumns: 'Columns changed inside a table on “{sheet}”. Undo that change to save.',\n },\n};\n\nexport type SheetText = typeof en;\n\nconst pl: SheetText = {\n tools: 'Narzędzia arkusza', loading: 'Otwieranie arkusza', failed: 'Nie udało się otworzyć tego arkusza', retry: 'Spróbuj ponownie',\n undo: 'Cofnij', redo: 'Ponów', bold: 'Pogrubienie', italic: 'Kursywa', underline: 'Podkreślenie', strike: 'Przekreślenie',\n textColour: 'Kolor tekstu', fill: 'Kolor wypełnienia', automatic: 'Automatyczny', noFill: 'Bez wypełnienia',\n borders: 'Obramowanie', borderAll: 'Wszystkie krawędzie', borderOuter: 'Krawędzie zewnętrzne', borderBottom: 'Dolna krawędź', borderNone: 'Bez krawędzi',\n alignLeft: 'Do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Do prawej', wrap: 'Zawijaj tekst', merge: 'Scal komórki', unmerge: 'Rozdziel komórki',\n format: 'Format liczb', general: 'Ogólny', number: 'Liczba', percent: 'Procent', currency: 'Waluta', date: 'Data', time: 'Godzina', text: 'Tekst',\n rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej', columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRows: 'Usuń wiersze', deleteColumns: 'Usuń kolumny',\n freeze: 'Zablokuj', freezeNone: 'Odblokuj', freezeRow: 'Pierwszy wiersz', freezeColumn: 'Pierwsza kolumna', freezeHere: 'Do zaznaczonej komórki',\n sortUp: 'Sortuj od A do Z', sortDown: 'Sortuj od Z do A', filter: 'Filtr', find: 'Znajdź i zamień', note: 'Notatka',\n save: 'Zapisz', saving: 'Zapisywanie', saved: 'Zapisano', saveFailed: 'Nie udało się zapisać', editedNote: 'Edycja arkusza',\n viewOnly: 'Tylko podgląd', notesOnly: 'Możesz dodawać notatki',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym arkuszu', you: 'ty',\n refused: {\n chartSource: 'Wykres na innym arkuszu korzysta z danych arkusza „{sheet}”. Przywróć ten arkusz, aby zapisać.',\n pivotSheet: 'Tabela przestawna pobiera dane z arkusza „{sheet}”. Przywróć ten arkusz, aby zapisać.',\n tableColumns: 'Kolumny zmieniły się wewnątrz tabeli na arkuszu „{sheet}”. Cofnij tę zmianę, aby zapisać.',\n },\n};\n\nconst uk: SheetText = {\n tools: 'Інструменти таблиці', loading: 'Відкриваємо таблицю', failed: 'Не вдалося відкрити цю таблицю', retry: 'Спробувати ще',\n undo: 'Відмінити', redo: 'Повторити', bold: 'Жирний', italic: 'Курсив', underline: 'Підкреслений', strike: 'Закреслений',\n textColour: 'Колір тексту', fill: 'Колір заливки', automatic: 'Автоматичний', noFill: 'Без заливки',\n borders: 'Межі', borderAll: 'Усі межі', borderOuter: 'Зовнішні межі', borderBottom: 'Нижня межа', borderNone: 'Без меж',\n alignLeft: 'Ліворуч', alignCenter: 'По центру', alignRight: 'Праворуч', wrap: 'Переносити текст', merge: 'Об’єднати клітинки', unmerge: 'Роз’єднати клітинки',\n format: 'Формат чисел', general: 'Загальний', number: 'Число', percent: 'Відсоток', currency: 'Валюта', date: 'Дата', time: 'Час', text: 'Текст',\n rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче', columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRows: 'Видалити рядки', deleteColumns: 'Видалити стовпці',\n freeze: 'Закріпити', freezeNone: 'Відкріпити', freezeRow: 'Перший рядок', freezeColumn: 'Перший стовпець', freezeHere: 'До виділеної клітинки',\n sortUp: 'Сортувати від А до Я', sortDown: 'Сортувати від Я до А', filter: 'Фільтр', find: 'Знайти й замінити', note: 'Примітка',\n save: 'Зберегти', saving: 'Збереження', saved: 'Збережено', saveFailed: 'Не вдалося зберегти', editedNote: 'Правка таблиці',\n viewOnly: 'Лише перегляд', notesOnly: 'Можна додавати примітки',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цій таблиці', you: 'ви',\n refused: {\n chartSource: 'Діаграма на іншому аркуші бере дані з аркуша «{sheet}». Поверніть цей аркуш, щоб зберегти.',\n pivotSheet: 'Зведена таблиця бере дані з аркуша «{sheet}». Поверніть цей аркуш, щоб зберегти.',\n tableColumns: 'Стовпці змінилися всередині таблиці на аркуші «{sheet}». Відмініть цю зміну, щоб зберегти.',\n },\n};\n\nexport const sheetTexts: Record<Language, SheetText> = { en, pl, uk };\n","import type { DocumentKind, Language, SignatureMethod } from './types';\n\nconst en = {\n documents: 'Documents', hint: 'Files of your projects: read, edit and comment in one place', loose: 'Without a folder', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n pick: 'Choose a document from the list', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'Updated by', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n allProjects: 'All projects', closePanel: 'Hide the panel', openPanel: 'Show the panel', zoomIn: 'Zoom in', zoomOut: 'Zoom out', fit: 'Actual size',\n pdfTools: 'PDF tools', pages: 'Pages', page: 'Page', fitWidth: 'Fit to width', fitPage: 'Fit to page', find: 'Find in the document', previous: 'Previous', next: 'Next',\n close: 'Close', searching: 'Searching', noHits: 'No results', selectText: 'Select text', highlight: 'Highlight', underline: 'Underline', strike: 'Strike out',\n note: 'Note', draw: 'Draw', eraser: 'Eraser', sign: 'Sign', colour: 'Colour', lineWidth: 'Line width', undo: 'Undo', redo: 'Redo', save: 'Save', saving: 'Saving',\n saved: 'Saved', saveFailed: 'Could not save', remove: 'Remove', notePlaceholder: 'Write a note', signature: 'Signature', placeHint: 'Click or tap where the signature goes',\n cancel: 'Cancel', signTitle: 'Add a signature', typed: 'Type', drawn: 'Draw', image: 'Image', yourName: 'Your name', drawHere: 'Sign with the mouse or a finger',\n clear: 'Clear', pickImage: 'Choose a PNG or JPEG image', useSign: 'Place the signature', marksNote: 'Marks', formNote: 'Form filled', signedNote: 'Signed',\n signatures: 'Signatures', noSignatures: 'Nobody has signed this file yet', version: 'Version', download: 'Download', openInDocuments: 'Open in Documents',\n textTools: 'Text tools', home: 'Home', insert: 'Insert', layout: 'Layout', review: 'Review', viewTab: 'View', paragraphStyle: 'Paragraph style', normal: 'Normal',\n heading: 'Heading', quote: 'Quote', code: 'Code', bold: 'Bold', italic: 'Italic', textColour: 'Text colour', automatic: 'Automatic', noColour: 'No colour',\n bullets: 'Bulleted list', numbers: 'Numbered list', tasks: 'Task list', alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', justify: 'Justify',\n indent: 'Increase indent', outdent: 'Decrease indent', clearFormat: 'Clear formatting', table: 'Table', rowAbove: 'Row above', rowBelow: 'Row below',\n columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRow: 'Delete row', deleteColumn: 'Delete column', deleteTable: 'Delete table',\n headerRow: 'Header row', mergeCells: 'Merge or split cells', imageLink: 'Image address', chooseFile: 'Choose a file', put: 'Insert', link: 'Link',\n linkAddress: 'Link address', apply: 'Apply', unlink: 'Remove link', pageBreak: 'Page break', rule: 'Horizontal line', pageSize: 'Page size', margins: 'Margins',\n marginsNormal: 'Normal', marginsNarrow: 'Narrow', marginsWide: 'Wide', addComment: 'Add comment', comments: 'Comments', noComments: 'No comments yet',\n commentHint: 'Select text and add a comment', writeComment: 'Write a comment', post: 'Post', reply: 'Reply', resolve: 'Resolve', reopen: 'Reopen',\n resolved: 'Resolved', showResolved: 'Show resolved', commentFailed: 'Could not send the comment', exportAs: 'Export', exportFailed: 'Could not export',\n editedNote: 'Text edited', documentText: 'Document text', locked: 'Kept as in the file', references: 'References', toc: 'Table of contents', tocInsert: 'Insert table of contents', tocGo: 'Go to the table',\n tocRemove: 'Remove the table', tocHint: 'It follows the headings as you write', tocEmpty: 'Add headings and they show here',\n suggest: 'Suggest changes', suggesting: 'Suggesting', suggestions: 'Suggestions', acceptAll: 'Accept all', rejectAll: 'Reject all', accept: 'Accept', reject: 'Reject',\n added: 'Added', removed: 'Deleted', someone: 'Someone', copyAs: 'Make an XLSX copy', copyFailed: 'Could not make the copy', editComment: 'Edit', delete: 'Delete',\n deleteAsk: 'Delete this comment?', deleteThread: 'Delete this comment and its replies?', changeFailed: 'Could not change the comment',\n unsavedTitle: 'Save your changes?', unsavedHint: 'This document has changes that are not saved yet.', discard: 'Discard', more: 'More tools',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this document', you: 'you',\n share: 'Share', sharing: 'Sharing', guestLinks: 'Guest links', viewLink: 'View link', commentLink: 'Comment link', madeBy: 'Made by {name}', endsOn: 'Ends {date}',\n untilOff: 'Until turned off', linkEnded: 'Ended', downloadOn: 'Download on', passwordOn: 'Password', copy: 'Copy', copied: 'Copied', changeLink: 'Change',\n turnOff: 'Turn off', newLink: 'New guest link', guestsCan: 'Guests can', canRead: 'Read', canComment: 'Read and comment', badgeRead: 'Read only',\n badgeComment: 'Read and comment', linkWorks: 'Link works', days7: '7 days', days30: '30 days', untilTurnOff: 'Until I turn it off', pickDay: 'Pick a day',\n passwordHint: 'Guests type it once on their device', passwordPlaceholder: 'Type the password', keepPassword: 'Leave empty to keep the password',\n downloadFile: 'Download the file', downloadHint: 'The original file and a PDF copy', askName: \"Ask the guest's name\", askNameHint: 'Shown to you in who opened it',\n lastSaved: 'Guests see the last saved version. A new version reaches the link when someone saves.', makeLink: 'Make the link', saveLink: 'Save the link',\n inTeam: 'Inside the team', peopleOf: 'People of {space}', teamHint: 'Everyone who sees Drive of this project reads it, people with edit rights change it.',\n noLinks: 'No guest links yet. A link opens this document without an account.', unnamed: 'Guests without a name', shareFailed: 'The link did not save. Try again.',\n sharedBy: 'Shared by {name}', openDoc: 'Open', passwordAsk: 'This document opens with a password. Type it to open the document on this device.',\n wrongPassword: 'The password does not fit. Try again.', endedTitle: 'This link has ended',\n endedText: 'The person who shared this document turned the link off or it reached its last day. Ask them for a new link.',\n missingTitle: 'This link opens nothing', missingText: 'Check the address or ask for a new link.',\n nameAsk: 'Type your name to read this document. The person who shared it sees who opened it.',\n nameHint: 'The person who shared this document sees your name and comments. The name stays on this device.', nameNeeded: 'Type your name to comment',\n guest: 'Guest', pdfCopy: 'PDF copy', tooMany: 'Too many tries. Try again in a few minutes.',\n openForms: { one: 'open', other: 'opens' } as Record<string, string>, commentForms: { one: 'comment', other: 'comments' } as Record<string, string>,\n methods: { typed: 'Typed', drawn: 'Drawn', image: 'Image' } satisfies Record<SignatureMethod, string>,\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', hint: 'Pliki Twoich projektów: czytaj, edytuj i komentuj w jednym miejscu', loose: 'Bez folderu', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n pick: 'Wybierz dokument z listy', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Zmienione przez', kind: 'Format', rights: 'Możesz', view: 'Przeglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n allProjects: 'Wszystkie projekty', closePanel: 'Ukryj panel', openPanel: 'Pokaż panel', zoomIn: 'Powiększ', zoomOut: 'Pomniejsz', fit: 'Rzeczywisty rozmiar',\n pdfTools: 'Narzędzia PDF', pages: 'Strony', page: 'Strona', fitWidth: 'Dopasuj do szerokości', fitPage: 'Cała strona', find: 'Szukaj w dokumencie', previous: 'Poprzedni', next: 'Następny',\n close: 'Zamknij', searching: 'Wyszukiwanie', noHits: 'Brak wyników', selectText: 'Zaznacz tekst', highlight: 'Wyróżnij', underline: 'Podkreśl', strike: 'Przekreśl',\n note: 'Notatka', draw: 'Rysuj', eraser: 'Gumka', sign: 'Podpisz', colour: 'Kolor', lineWidth: 'Grubość linii', undo: 'Cofnij', redo: 'Ponów', save: 'Zapisz', saving: 'Zapisywanie',\n saved: 'Zapisano', saveFailed: 'Nie udało się zapisać', remove: 'Usuń', notePlaceholder: 'Napisz notatkę', signature: 'Podpis', placeHint: 'Kliknij lub dotknij miejsca, gdzie ma być podpis',\n cancel: 'Anuluj', signTitle: 'Dodaj podpis', typed: 'Wpisz', drawn: 'Narysuj', image: 'Obraz', yourName: 'Imię i nazwisko', drawHere: 'Podpisz myszą lub palcem',\n clear: 'Wyczyść', pickImage: 'Wybierz obraz PNG lub JPEG', useSign: 'Wstaw podpis', marksNote: 'Oznaczenia', formNote: 'Wypełniony formularz', signedNote: 'Podpisano',\n signatures: 'Podpisy', noSignatures: 'Nikt jeszcze nie podpisał tego pliku', version: 'Wersja', download: 'Pobierz', openInDocuments: 'Otwórz w Dokumentach',\n textTools: 'Narzędzia tekstowe', home: 'Narzędzia główne', insert: 'Wstawianie', layout: 'Układ', review: 'Recenzja', viewTab: 'Widok', paragraphStyle: 'Styl akapitu', normal: 'Normalny',\n heading: 'Nagłówek', quote: 'Cytat', code: 'Kod', bold: 'Pogrubienie', italic: 'Kursywa', textColour: 'Kolor tekstu', automatic: 'Automatyczny', noColour: 'Bez koloru',\n bullets: 'Lista punktowana', numbers: 'Lista numerowana', tasks: 'Lista zadań', alignLeft: 'Wyrównaj do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Wyrównaj do prawej', justify: 'Wyjustuj',\n indent: 'Zwiększ wcięcie', outdent: 'Zmniejsz wcięcie', clearFormat: 'Wyczyść formatowanie', table: 'Tabela', rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej',\n columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRow: 'Usuń wiersz', deleteColumn: 'Usuń kolumnę', deleteTable: 'Usuń tabelę',\n headerRow: 'Wiersz nagłówka', mergeCells: 'Scal lub podziel komórki', imageLink: 'Adres obrazu', chooseFile: 'Wybierz plik', put: 'Wstaw', link: 'Link',\n linkAddress: 'Adres linku', apply: 'Zastosuj', unlink: 'Usuń link', pageBreak: 'Podział strony', rule: 'Linia pozioma', pageSize: 'Rozmiar strony', margins: 'Marginesy',\n marginsNormal: 'Normalne', marginsNarrow: 'Wąskie', marginsWide: 'Szerokie', addComment: 'Dodaj komentarz', comments: 'Komentarze', noComments: 'Nie ma jeszcze komentarzy',\n commentHint: 'Zaznacz tekst i dodaj komentarz', writeComment: 'Napisz komentarz', post: 'Dodaj', reply: 'Odpowiedz', resolve: 'Rozwiąż', reopen: 'Otwórz ponownie',\n resolved: 'Rozwiązany', showResolved: 'Pokaż rozwiązane', commentFailed: 'Nie udało się wysłać komentarza', exportAs: 'Eksport', exportFailed: 'Nie udało się wyeksportować',\n editedNote: 'Edycja tekstu', documentText: 'Tekst dokumentu', locked: 'Zachowane jak w pliku', references: 'Odwołania', toc: 'Spis treści', tocInsert: 'Wstaw spis treści', tocGo: 'Przejdź do spisu',\n tocRemove: 'Usuń spis', tocHint: 'Sam podąża za nagłówkami', tocEmpty: 'Dodaj nagłówki, a pojawią się tutaj',\n suggest: 'Sugeruj zmiany', suggesting: 'Sugerowanie', suggestions: 'Sugestie', acceptAll: 'Akceptuj wszystkie', rejectAll: 'Odrzuć wszystkie', accept: 'Akceptuj', reject: 'Odrzuć',\n added: 'Dodano', removed: 'Usunięto', someone: 'Ktoś', copyAs: 'Zrób kopię XLSX', copyFailed: 'Nie udało się zrobić kopii', editComment: 'Edytuj', delete: 'Usuń',\n deleteAsk: 'Usunąć ten komentarz?', deleteThread: 'Usunąć ten komentarz razem z odpowiedziami?', changeFailed: 'Nie udało się zmienić komentarza',\n unsavedTitle: 'Zapisać zmiany?', unsavedHint: 'Ten dokument ma niezapisane zmiany.', discard: 'Nie zapisuj', more: 'Więcej narzędzi',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym dokumencie', you: 'ty',\n share: 'Udostępnij', sharing: 'Udostępnianie', guestLinks: 'Linki dla gości', viewLink: 'Link do czytania', commentLink: 'Link do komentowania',\n madeBy: 'Utworzono przez {name}', endsOn: 'Działa do {date}', untilOff: 'Do wyłączenia', linkEnded: 'Wygasł', downloadOn: 'Pobieranie włączone', passwordOn: 'Hasło',\n copy: 'Kopiuj', copied: 'Skopiowano', changeLink: 'Zmień', turnOff: 'Wyłącz', newLink: 'Nowy link dla gości', guestsCan: 'Goście mogą', canRead: 'Czytać',\n canComment: 'Czytać i komentować', badgeRead: 'Tylko do odczytu', badgeComment: 'Czytanie i komentarze', linkWorks: 'Link działa', days7: '7 dni', days30: '30 dni',\n untilTurnOff: 'Dopóki go nie wyłączę', pickDay: 'Wybierz dzień', passwordHint: 'Goście wpisują je raz na swoim urządzeniu', passwordPlaceholder: 'Wpisz hasło',\n keepPassword: 'Zostaw puste, aby zachować hasło', downloadFile: 'Pobieranie pliku', downloadHint: 'Oryginalny plik i kopia PDF', askName: 'Pytaj gościa o imię',\n askNameHint: 'Widzisz je na liście osób, które otworzyły link', lastSaved: 'Goście widzą ostatnią zapisaną wersję. Nowa wersja trafia do linku, gdy ktoś zapisze.',\n makeLink: 'Utwórz link', saveLink: 'Zapisz link', inTeam: 'W zespole', peopleOf: 'Osoby z projektu {space}',\n teamHint: 'Każdy, kto widzi Dysk tego projektu, czyta go, a osoby z prawem edycji go zmieniają.',\n noLinks: 'Nie ma jeszcze linków dla gości. Link otwiera ten dokument bez konta.', unnamed: 'Goście bez imienia', shareFailed: 'Nie udało się zapisać linku. Spróbuj ponownie.',\n sharedBy: 'Udostępnione przez {name}', openDoc: 'Otwórz', passwordAsk: 'Ten dokument otwiera się hasłem. Wpisz je, aby otworzyć dokument na tym urządzeniu.',\n wrongPassword: 'Hasło nie pasuje. Spróbuj ponownie.', endedTitle: 'Ten link wygasł',\n endedText: 'Osoba, która udostępniła dokument, wyłączyła link albo minął jego ostatni dzień. Poproś ją o nowy link.',\n missingTitle: 'Ten link niczego nie otwiera', missingText: 'Sprawdź adres albo poproś o nowy link.',\n nameAsk: 'Wpisz swoje imię, aby przeczytać ten dokument. Osoba, która go udostępniła, widzi, kto go otworzył.',\n nameHint: 'Osoba, która udostępniła dokument, widzi Twoje imię i komentarze. Imię zostaje na tym urządzeniu.', nameNeeded: 'Wpisz imię, aby komentować',\n guest: 'Gość', pdfCopy: 'Kopia PDF', tooMany: 'Za dużo prób. Spróbuj za kilka minut.',\n openForms: { one: 'otwarcie', few: 'otwarcia', many: 'otwarć', other: 'otwarcia' }, commentForms: { one: 'komentarz', few: 'komentarze', many: 'komentarzy', other: 'komentarza' },\n methods: { typed: 'Wpisany', drawn: 'Narysowany', image: 'Obraz' },\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n};\n\nconst uk: Text = {\n documents: 'Документи', hint: 'Файли ваших проєктів: читайте, редагуйте й коментуйте в одному місці', loose: 'Без теки', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n pick: 'Виберіть документ у списку', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Хто змінив', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', unsupported: 'Цей файл поки не можна показати',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n allProjects: 'Усі проєкти', closePanel: 'Сховати панель', openPanel: 'Показати панель', zoomIn: 'Збільшити', zoomOut: 'Зменшити', fit: 'Справжній розмір',\n pdfTools: 'Інструменти PDF', pages: 'Сторінки', page: 'Сторінка', fitWidth: 'За шириною', fitPage: 'Сторінка цілком', find: 'Пошук у документі', previous: 'Попередній', next: 'Наступний',\n close: 'Закрити', searching: 'Пошук', noHits: 'Нічого не знайдено', selectText: 'Виділити текст', highlight: 'Маркер', underline: 'Підкреслити', strike: 'Закреслити',\n note: 'Нотатка', draw: 'Малювати', eraser: 'Гумка', sign: 'Підписати', colour: 'Колір', lineWidth: 'Товщина лінії', undo: 'Відмінити', redo: 'Повторити', save: 'Зберегти', saving: 'Збереження',\n saved: 'Збережено', saveFailed: 'Не вдалося зберегти', remove: 'Видалити', notePlaceholder: 'Напишіть нотатку', signature: 'Підпис', placeHint: 'Клацніть або торкніться місця, де має бути підпис',\n cancel: 'Скасувати', signTitle: 'Додати підпис', typed: 'Ввести', drawn: 'Намалювати', image: 'Зображення', yourName: 'Ваше ім’я', drawHere: 'Підпишіться мишею або пальцем',\n clear: 'Очистити', pickImage: 'Виберіть зображення PNG або JPEG', useSign: 'Поставити підпис', marksNote: 'Позначки', formNote: 'Заповнена форма', signedNote: 'Підписано',\n signatures: 'Підписи', noSignatures: 'Цей файл ще ніхто не підписав', version: 'Версія', download: 'Завантажити', openInDocuments: 'Відкрити в Документах',\n textTools: 'Інструменти для тексту', home: 'Основне', insert: 'Вставлення', layout: 'Макет', review: 'Рецензування', viewTab: 'Вигляд', paragraphStyle: 'Стиль абзацу', normal: 'Звичайний',\n heading: 'Заголовок', quote: 'Цитата', code: 'Код', bold: 'Жирний', italic: 'Курсив', textColour: 'Колір тексту', automatic: 'Автоматично', noColour: 'Без кольору',\n bullets: 'Маркований список', numbers: 'Нумерований список', tasks: 'Список завдань', alignLeft: 'По лівому краю', alignCenter: 'По центру', alignRight: 'По правому краю', justify: 'По ширині',\n indent: 'Збільшити відступ', outdent: 'Зменшити відступ', clearFormat: 'Очистити форматування', table: 'Таблиця', rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче',\n columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRow: 'Видалити рядок', deleteColumn: 'Видалити стовпець', deleteTable: 'Видалити таблицю',\n headerRow: 'Рядок заголовка', mergeCells: 'Об’єднати або розділити клітинки', imageLink: 'Адреса зображення', chooseFile: 'Вибрати файл', put: 'Вставити', link: 'Посилання',\n linkAddress: 'Адреса посилання', apply: 'Застосувати', unlink: 'Прибрати посилання', pageBreak: 'Розрив сторінки', rule: 'Горизонтальна лінія', pageSize: 'Розмір сторінки', margins: 'Поля',\n marginsNormal: 'Звичайні', marginsNarrow: 'Вузькі', marginsWide: 'Широкі', addComment: 'Додати коментар', comments: 'Коментарі', noComments: 'Коментарів ще немає',\n commentHint: 'Виділіть текст і додайте коментар', writeComment: 'Напишіть коментар', post: 'Додати', reply: 'Відповісти', resolve: 'Вирішити', reopen: 'Відкрити знову',\n resolved: 'Вирішено', showResolved: 'Показати вирішені', commentFailed: 'Не вдалося надіслати коментар', exportAs: 'Експорт', exportFailed: 'Не вдалося експортувати',\n editedNote: 'Правка тексту', documentText: 'Текст документа', locked: 'Лишається як у файлі', references: 'Посилання', toc: 'Зміст', tocInsert: 'Вставити зміст', tocGo: 'Перейти до змісту',\n tocRemove: 'Прибрати зміст', tocHint: 'Сам іде за заголовками', tocEmpty: 'Додайте заголовки, і вони з’являться тут',\n suggest: 'Пропонувати зміни', suggesting: 'Режим пропозицій', suggestions: 'Пропозиції', acceptAll: 'Прийняти всі', rejectAll: 'Відхилити всі', accept: 'Прийняти', reject: 'Відхилити',\n added: 'Додано', removed: 'Видалено', someone: 'Хтось', copyAs: 'Зробити копію XLSX', copyFailed: 'Не вдалося зробити копію', editComment: 'Змінити', delete: 'Видалити',\n deleteAsk: 'Видалити цей коментар?', deleteThread: 'Видалити цей коментар разом з відповідями?', changeFailed: 'Не вдалося змінити коментар',\n unsavedTitle: 'Зберегти зміни?', unsavedHint: 'У цьому документі є незбережені зміни.', discard: 'Не зберігати', more: 'Більше інструментів',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цьому документі', you: 'ви',\n share: 'Поділитися', sharing: 'Доступ', guestLinks: 'Посилання для гостей', viewLink: 'Посилання для читання', commentLink: 'Посилання для коментарів',\n madeBy: 'Автор: {name}', endsOn: 'Діє до {date}', untilOff: 'Доки не вимкнуть', linkEnded: 'Завершено', downloadOn: 'Завантаження ввімкнено', passwordOn: 'Пароль',\n copy: 'Копіювати', copied: 'Скопійовано', changeLink: 'Змінити', turnOff: 'Вимкнути', newLink: 'Нове посилання для гостей', guestsCan: 'Гості можуть', canRead: 'Читати',\n canComment: 'Читати й коментувати', badgeRead: 'Лише читання', badgeComment: 'Читання й коментарі', linkWorks: 'Посилання діє', days7: '7 днів', days30: '30 днів',\n untilTurnOff: 'Доки не вимкну', pickDay: 'Вибрати день', passwordHint: 'Гості вводять його один раз на своєму пристрої', passwordPlaceholder: 'Введіть пароль',\n keepPassword: 'Лишіть порожнім, щоб зберегти пароль', downloadFile: 'Завантаження файлу', downloadHint: 'Оригінальний файл і копія PDF', askName: 'Питати ім’я гостя',\n askNameHint: 'Ви бачите його серед тих, хто відкривав', lastSaved: 'Гості бачать останню збережену версію. Нова версія потрапляє за посиланням, коли хтось зберігає.',\n makeLink: 'Створити посилання', saveLink: 'Зберегти посилання', inTeam: 'У команді', peopleOf: 'Люди проєкту {space}',\n teamHint: 'Кожен, хто бачить Drive цього проєкту, читає його, а люди з правом правки змінюють.',\n noLinks: 'Посилань для гостей ще немає. Посилання відкриває цей документ без облікового запису.', unnamed: 'Гості без імені', shareFailed: 'Не вдалося зберегти посилання. Спробуйте ще.',\n sharedBy: 'Від {name}', openDoc: 'Відкрити', passwordAsk: 'Цей документ відкривається з паролем. Введіть його, щоб відкрити документ на цьому пристрої.',\n wrongPassword: 'Пароль не підходить. Спробуйте ще.', endedTitle: 'Це посилання більше не діє',\n endedText: 'Той, хто поділився документом, вимкнув посилання або минув його останній день. Попросіть нове посилання.',\n missingTitle: 'Це посилання нічого не відкриває', missingText: 'Перевірте адресу або попросіть нове посилання.',\n nameAsk: 'Введіть своє ім’я, щоб прочитати документ. Той, хто ним поділився, бачить, хто його відкривав.',\n nameHint: 'Той, хто поділився документом, бачить ваше ім’я та коментарі. Ім’я лишається на цьому пристрої.', nameNeeded: 'Введіть ім’я, щоб коментувати',\n guest: 'Гість', pdfCopy: 'Копія PDF', tooMany: 'Забагато спроб. Спробуйте за кілька хвилин.',\n openForms: { one: 'відкриття', few: 'відкриття', many: 'відкриттів', other: 'відкриття' }, commentForms: { one: 'коментар', few: 'коментарі', many: 'коментарів', other: 'коментаря' },\n methods: { typed: 'Введений', drawn: 'Намальований', image: 'Зображення' },\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n"],"mappings":"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","names":["parse","import_core","import_transform","import_y_tiptap","Y","key","order","parts","entries","pt","key","parts","key","entries","pieces","b","meta","box","span","grid","row","cell","down","px","key","picture","span","row","n","on","images","changed","listed","pending","size","same","boxes","box","id","side","R","shape","load","size","px","load","import_core","import_state","import_view","value","sig","attrs","pos","relative","paint","tr","parts","value","skip","attrs","pending","StarterKit","Image","Highlight","Collaboration","CollaborationCaret","inline","value","token","entry","table","cell","row","contents","skip","key","made","side","plain","blank","lines","span","decode","out","table","decoder","row","value","sniff","lines","filled","value","resolve","parts","plain","hex","p","q","Styles","on","fill","key","align","same","keys","inner","name","value","diff","parts","id","order","edits","pt","attr","Styles","entries","notes","entry","row","inner","plain","target","blank","REL","blank","patterns","value","find","attr","inner","lines","entry","made","changed","parts","look","notes","listed","f","runs","on","columns","vml","shape","props","row","lines","props","fill","notes","row","order","order","en","pl","uk","parse","fill","write","load","blocks","same","named","changed","refs"]}
|
|
1
|
+
{"version":3,"sources":["../src/collab.ts","../package.json","../src/docx/xml.ts","../src/docx/zip.ts","../src/docx/pkg.ts","../src/docx/read.ts","../src/docx/diff.ts","../src/docx/write.ts","../src/docx/index.ts","../src/editor/extensions.ts","../src/editor/pager.ts","../src/editor/markdown.ts","../src/sheets/model.ts","../src/sheets/csv.ts","../src/sheets/pack.ts","../src/sheets/refs.ts","../src/sheets/styles.ts","../src/sheets/xlsx.ts","../src/sheets/write.ts","../src/sheets/book.ts","../src/sheets/shared.ts","../src/sheets/text.ts","../src/text.ts"],"sourcesContent":["import { getSchema, type JSONContent } from '@tiptap/core';\nimport type { Node, Schema } from '@tiptap/pm/model';\nimport { Transform } from '@tiptap/pm/transform';\nimport { prosemirrorJSONToYXmlFragment, updateYFragment, yXmlFragmentToProseMirrorRootNode } from '@tiptap/y-tiptap';\nimport * as Y from 'yjs';\nimport { version } from '../package.json';\nimport { readDocx, writeDocx, type Img, type Setup } from './docx';\nimport { kit } from './editor/extensions';\nimport { fromMarkdown, toMarkdown, track } from './editor/markdown';\nimport { readSheet, writeSheet } from './sheets/book';\nimport { build, fill, fnv, settle } from './sheets/shared';\nimport { sheetTexts } from './sheets/text';\nimport { texts } from './text';\nimport type { Language } from './types';\n\nexport { applyCells } from './sheets/shared';\n\nexport type Kind = 'markdown' | 'docx' | 'xlsx' | 'csv';\nexport type Prose = 'markdown' | 'docx';\nexport type Author = { id: string; name: string; language: Language };\nexport type Saved = { bytes: ArrayBuffer; version: string | null };\n\nexport const ours = 'w100n-collab';\n\nconst schemas = new Map<Prose, Schema>();\nconst schemaOf = (kind: Prose) => schemas.get(kind) ?? schemas.set(kind, getSchema(kit(kind, texts.en))).get(kind)!;\n\nexport const parse = async (kind: Prose, bytes: ArrayBuffer): Promise<JSONContent> =>\n kind === 'docx' ? (await readDocx(bytes)).doc : fromMarkdown(new TextDecoder().decode(bytes)).doc;\n\nexport const edits = (tr: Y.Transaction) => tr.changedParentTypes.has(tr.doc.get('default')) || tr.changedParentTypes.has(tr.doc.get('book')) || tr.changedParentTypes.has(tr.doc.get('setup'));\n\nexport const filled = (doc: Y.Doc) => doc.getXmlFragment('default').length > 0 || doc.getMap('book').size > 0;\n\nexport function seed(doc: Y.Doc, kind: Kind, bytes: ArrayBuffer, json?: JSONContent) {\n if (filled(doc)) return false;\n const fixed = new Y.Doc();\n fixed.clientID = fnv(new Uint8Array(bytes), fnv(new TextEncoder().encode(`${version}:${kind}`)));\n if (kind === 'xlsx' || kind === 'csv') fill(fixed, readSheet(bytes, kind));\n else prosemirrorJSONToYXmlFragment(schemaOf(kind), json!, fixed.getXmlFragment('default'));\n Y.applyUpdate(doc, Y.encodeStateAsUpdate(fixed), ours);\n return true;\n}\n\nexport function follow(doc: Y.Doc, author: (origin: unknown) => Author | null) {\n const editors = doc.getMap<Author>('editors');\n const before = (tr: Y.Transaction) => tr.meta.set('fresh', !filled(doc));\n const after = (tr: Y.Transaction) => {\n const who = !tr.meta.get('fresh') && edits(tr) ? author(tr.origin) : null;\n if (who && !editors.has(who.id)) doc.transact(() => editors.set(who.id, who), ours);\n };\n doc.on('beforeTransaction', before);\n doc.on('afterTransaction', after);\n return () => {\n doc.off('beforeTransaction', before);\n doc.off('afterTransaction', after);\n };\n}\n\nexport const pending = (doc: Y.Doc) => doc.getMap<Author>('editors').size > 0;\n\nexport class Refusal extends Error {}\n\nexport function applyText(doc: Y.Doc, kind: Prose, changes: { find: string; replace: string }[], origin: unknown) {\n const schema = schemaOf(kind);\n const fragment = doc.getXmlFragment('default');\n const step = new Transform(yXmlFragmentToProseMirrorRootNode(fragment, schema));\n for (const c of changes) {\n const hits: number[] = [];\n step.doc.descendants((node, pos) => {\n if (!node.isTextblock) return true;\n const text = node.textBetween(0, node.content.size, undefined, '\\ufffc');\n for (let i = text.indexOf(c.find); c.find && i >= 0; i = text.indexOf(c.find, i + 1)) hits.push(pos + 1 + i);\n return false;\n });\n if (hits.length !== 1) throw new Refusal(`${hits.length ? 'more than once' : 'not'} in the document: ${c.find.slice(0, 80)}`);\n const [at] = hits;\n if (c.replace) step.replaceWith(at, at + c.find.length, schema.text(c.replace, step.doc.resolve(at + 1).marks()));\n else step.delete(at, at + c.find.length);\n }\n updateYFragment({ transact: run => doc.transact(run, origin) }, fragment, step.doc, { mapping: new Map(), isOMark: new Map() });\n return changes.length;\n}\n\nasync function write(kind: Prose, base: ArrayBuffer, node: Node, load?: (src: string) => Promise<Img>, setup?: Setup) {\n if (kind === 'docx') return writeDocx(base, node.toJSON(), load, setup);\n const parsed = fromMarkdown(new TextDecoder().decode(base));\n return new TextEncoder().encode(toMarkdown(node, track(parsed, node.type.schema.nodeFromJSON(parsed.doc))).text).buffer as ArrayBuffer;\n}\n\nconst blocks = (fragment: Y.XmlFragment, schema: Schema) => {\n const out: Y.XmlElement[] = [];\n const walk = (parent: Y.XmlFragment) => parent.toArray().forEach(child => {\n if (!(child instanceof Y.XmlElement) || !schema.nodes[child.nodeName]?.isBlock) return;\n out.push(child);\n walk(child);\n });\n walk(fragment);\n return out;\n};\n\nconst same = (a: ArrayBuffer, b: ArrayBuffer) => {\n const [x, y] = [new Uint8Array(a), new Uint8Array(b)];\n return x.length === y.length && x.every((v, i) => v === y[i]);\n};\n\nconst named = (label: string, who: Author[]) => {\n const names = who.map(w => w.name).join(', ');\n return `${label}: ${names.length > 180 ? `${names.slice(0, 177)}...` : names}`;\n};\n\nexport async function save(doc: Y.Doc, kind: Kind, base: ArrayBuffer, put: (bytes: ArrayBuffer, note: string) => Promise<string>, load?: (src: string) => Promise<Img>, note?: string): Promise<Saved | null> {\n const editors = doc.getMap<Author>('editors');\n const who = [...editors.values()];\n if (!who.length) return null;\n if (kind === 'xlsx' || kind === 'csv') return workbook(doc, kind, base, put, who, note);\n const schema = schemaOf(kind);\n const fragment = doc.getXmlFragment('default');\n const list = blocks(fragment, schema);\n const node = yXmlFragmentToProseMirrorRootNode(fragment, schema);\n let touched = false;\n const watch = (tr: Y.Transaction) => { touched ||= tr.origin !== ours && edits(tr); };\n doc.on('afterTransaction', watch);\n try {\n const bytes = await write(kind, base, node, load, doc.getMap('setup').size ? doc.getMap('setup').toJSON() as Setup : undefined);\n const changed = !same(bytes, base);\n const id = changed ? await put(bytes, note ?? named((texts[who[0].language] ?? texts.en).editedNote, who)) : null;\n const refs: [string, string | null][] = [];\n if (changed) schema.nodeFromJSON(await parse(kind, bytes)).descendants(n => { if (n.isBlock) refs.push([n.type.name, n.attrs.ref ?? null]); });\n doc.transact(() => {\n if (refs.length === list.length && list.every((el, i) => el.nodeName === refs[i][0])) list.forEach((el, i) => {\n const ref = refs[i][1];\n if ((el.getAttribute('ref') ?? null) === ref) return;\n if (ref === null) el.removeAttribute('ref');\n else el.setAttribute('ref', ref);\n });\n if (id) doc.getMap('meta').set('version', id);\n if (!touched) who.forEach(w => editors.delete(w.id));\n }, ours);\n return { bytes: changed ? bytes : base, version: id };\n } finally {\n doc.off('afterTransaction', watch);\n }\n}\n\nasync function workbook(doc: Y.Doc, kind: 'xlsx' | 'csv', base: ArrayBuffer, put: (bytes: ArrayBuffer, note: string) => Promise<string>, who: Author[], note?: string): Promise<Saved> {\n const editors = doc.getMap<Author>('editors');\n const model = build(doc);\n let touched = false;\n const watch = (tr: Y.Transaction) => { touched ||= tr.origin !== ours && edits(tr); };\n doc.on('afterTransaction', watch);\n try {\n const bytes = writeSheet(base, model, kind);\n const changed = !same(bytes, base);\n const id = changed ? await put(bytes, note ?? named((sheetTexts[who[0].language] ?? sheetTexts.en).editedNote, who)) : null;\n doc.transact(() => {\n if (changed) settle(doc, model, bytes, kind);\n if (id) doc.getMap('meta').set('version', id);\n if (!touched) who.forEach(w => editors.delete(w.id));\n }, ours);\n return { bytes: changed ? bytes : base, version: id };\n } finally {\n doc.off('afterTransaction', watch);\n }\n}\n","{\n \"name\": \"@w100n/documents\",\n \"version\": \"0.14.0\",\n \"description\": \"Documents workspace for Web100Now projects: DOCX, Markdown, PDF, slides and sheets\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./memory\": {\n \"types\": \"./dist/memory.d.ts\",\n \"import\": \"./dist/memory.js\",\n \"require\": \"./dist/memory.cjs\"\n },\n \"./kinds\": {\n \"types\": \"./dist/kinds.d.ts\",\n \"import\": \"./dist/kinds.js\",\n \"require\": \"./dist/kinds.cjs\"\n },\n \"./collab\": {\n \"types\": \"./dist/collab.d.ts\",\n \"import\": \"./dist/collab.js\",\n \"require\": \"./dist/collab.cjs\"\n },\n \"./styles.css\": \"./dist/index.css\",\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\"\n ],\n \"sideEffects\": [\n \"*.css\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"vite playground\",\n \"test\": \"vitest run\",\n \"type-check\": \"tsc --noEmit\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"dependencies\": {\n \"@embedpdf/engines\": \"^2.15.1\",\n \"@embedpdf/models\": \"^2.15.1\",\n \"@embedpdf/pdfium\": \"^2.15.1\",\n \"@hocuspocus/provider\": \"^4.7.1\",\n \"@tiptap/core\": \"^3.32.0\",\n \"@tiptap/extension-collaboration\": \"^3.32.0\",\n \"@tiptap/extension-collaboration-caret\": \"^3.32.0\",\n \"@tiptap/extension-highlight\": \"^3.32.0\",\n \"@tiptap/extension-image\": \"^3.32.0\",\n \"@tiptap/extension-list\": \"^3.32.0\",\n \"@tiptap/extension-table\": \"^3.32.0\",\n \"@tiptap/extension-text-style\": \"^3.32.0\",\n \"@tiptap/pm\": \"^3.32.0\",\n \"@tiptap/react\": \"^3.32.0\",\n \"@tiptap/starter-kit\": \"^3.32.0\",\n \"@tiptap/y-tiptap\": \"^3.0.10\",\n \"@univerjs/core\": \"1.0.4\",\n \"@univerjs/preset-sheets-core\": \"1.0.4\",\n \"@univerjs/preset-sheets-data-validation\": \"1.0.4\",\n \"@univerjs/preset-sheets-filter\": \"1.0.4\",\n \"@univerjs/preset-sheets-find-replace\": \"1.0.4\",\n \"@univerjs/preset-sheets-note\": \"1.0.4\",\n \"@univerjs/preset-sheets-sort\": \"1.0.4\",\n \"@univerjs/presets\": \"1.0.4\",\n \"@univerjs/sheets\": \"1.0.4\",\n \"docx-preview\": \"^0.4.1\",\n \"fflate\": \"^0.8.3\",\n \"lucide-react\": \"^0.562.0\",\n \"marked\": \"^18.1.1\",\n \"pdfjs-dist\": \"^6.4.299\",\n \"prosemirror-markdown\": \"^1.13.8\",\n \"rxjs\": \"^7.8.2\",\n \"y-protocols\": \"^1.0.7\",\n \"yjs\": \"^13.6.33\"\n },\n \"devDependencies\": {\n \"@testing-library/react\": \"^16.3.3\",\n \"@types/node\": \"^22.20.5\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@univerjs/data-validation\": \"1.0.4\",\n \"@univerjs/engine-formula\": \"1.0.4\",\n \"@univerjs/sheets-data-validation\": \"1.0.4\",\n \"@univerjs/sheets-filter\": \"1.0.4\",\n \"@univerjs/sheets-formula\": \"1.0.4\",\n \"@univerjs/sheets-note\": \"1.0.4\",\n \"@vitejs/plugin-react\": \"^5.0.5\",\n \"exceljs\": \"4.4.0\",\n \"jsdom\": \"^30.1.3\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.6.0\",\n \"vite\": \"^7.1.0\",\n \"vitest\": \"^4.1.10\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Web100Now-Organization/-w100n_documents.git\"\n },\n \"publishConfig\": {\n \"access\": \"restricted\"\n }\n}\n","export type El = { name: string; start: number; open: number; close: number; end: number; kids: El[] };\n\nexport function parse(s: string): El {\n const root: El = { name: '', start: 0, open: 0, close: s.length, end: s.length, kids: [] };\n const stack = [root];\n const n = s.length;\n let i = s.indexOf('<');\n while (i !== -1 && i < n) {\n const c = s.charCodeAt(i + 1);\n let next: number;\n if (c === 63) next = s.indexOf('?>', i) + 2;\n else if (c === 33) {\n if (s.startsWith('<!--', i)) next = s.indexOf('-->', i) + 3;\n else if (s.startsWith('<![CDATA[', i)) next = s.indexOf(']]>', i) + 3;\n else next = s.indexOf('>', i) + 1;\n } else if (c === 47) {\n next = s.indexOf('>', i) + 1;\n if (stack.length > 1) {\n const top = stack.pop()!;\n top.close = i;\n top.end = next;\n }\n } else {\n let j = i + 1;\n while (j < n) {\n const d = s.charCodeAt(j);\n if (d === 32 || d === 62 || d === 47 || d === 9 || d === 10 || d === 13) break;\n j++;\n }\n let k = j;\n for (; k < n; k++) {\n const d = s.charCodeAt(k);\n if (d === 34 || d === 39) {\n k = s.indexOf(d === 34 ? '\"' : \"'\", k + 1);\n if (k === -1) k = n;\n } else if (d === 62) break;\n }\n const self = s.charCodeAt(k - 1) === 47;\n const el: El = { name: s.slice(i + 1, j), start: i, open: k + 1, close: k + 1, end: k + 1, kids: [] };\n stack[stack.length - 1].kids.push(el);\n if (!self) stack.push(el);\n next = k + 1;\n }\n if (next <= i) break;\n i = s.indexOf('<', next);\n }\n return root;\n}\n\nexport function attr(s: string, el: El, name: string): string | null {\n const tag = s.slice(el.start, el.open);\n const key = name + '=';\n let i = tag.indexOf(key);\n while (i > 0) {\n const before = tag.charCodeAt(i - 1);\n if (before === 32 || before === 9 || before === 10 || before === 13) {\n const q = tag[i + key.length];\n return unescape(tag.slice(i + key.length + 1, tag.indexOf(q, i + key.length + 1)));\n }\n i = tag.indexOf(key, i + 1);\n }\n return null;\n}\n\nexport function attrs(tag: string): [string, string][] {\n const out: [string, string][] = [];\n const re = /([\\w:.-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n const body = tag.slice(tag.search(/[\\s/>]/));\n for (let m = re.exec(body); m; m = re.exec(body)) out.push([m[1], unescape(m[3] ?? m[4])]);\n return out;\n}\n\nexport function kid(el: El, name: string): El | undefined {\n for (const k of el.kids) if (k.name === name) return k;\n return undefined;\n}\n\nexport function find(el: El, name: string): El | undefined {\n for (const k of el.kids) {\n if (k.name === name) return k;\n const deep = find(k, name);\n if (deep) return deep;\n }\n return undefined;\n}\n\nexport function inner(s: string, el: El): string {\n return unescape(s.slice(el.open, el.close));\n}\n\nexport function on(s: string, el: El | undefined, name = 'w:val'): boolean {\n if (!el) return false;\n const v = attr(s, el, name);\n return v === null || !/^(0|false|off|none)$/.test(v);\n}\n\nconst named: Record<string, string> = { lt: '<', gt: '>', amp: '&', quot: '\"', apos: \"'\" };\n\nexport function unescape(s: string): string {\n if (s.indexOf('&') === -1) return s;\n return s.replace(/&(#x[0-9a-fA-F]+|#\\d+|\\w+);/g, (m, e: string) => {\n if (e[0] !== '#') return named[e] ?? m;\n const code = e[1] === 'x' ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);\n return String.fromCodePoint(code);\n });\n}\n\nexport function escape(s: string): string {\n return s\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uFFFE\\uFFFF]/g, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\nexport function opened(s: string, el: El): string {\n const tag = s.slice(el.start, el.open);\n return el.end === el.open ? tag.replace(/\\s*\\/>$/, '>') : tag;\n}\n\nexport function rebuild(pr: string, tag: string, order: string[], set: Record<string, string | null>): string {\n const root = parse(pr).kids[0];\n const parts: { name: string; xml: string }[] = root ? root.kids.map(k => ({ name: k.name, xml: pr.slice(k.start, k.end) })) : [];\n const seen = new Set<string>();\n const out: { name: string; xml: string }[] = [];\n for (const p of parts) {\n if (!(p.name in set)) out.push(p);\n else if (!seen.has(p.name)) {\n seen.add(p.name);\n if (set[p.name] !== null) out.push({ name: p.name, xml: set[p.name]! });\n }\n }\n for (const name in set) if (!seen.has(name) && set[name] !== null) out.push({ name, xml: set[name]! });\n if (!out.length) return '';\n const rank = (name: string) => {\n const i = order.indexOf(name);\n return i === -1 ? order.length : i;\n };\n const sorted = out.map((p, i) => ({ p, i })).sort((a, b) => rank(a.p.name) - rank(b.p.name) || a.i - b.i);\n const open = root ? opened(pr, root) : `<${tag}>`;\n return open + sorted.map(x => x.p.xml).join('') + `</${tag}>`;\n}\n","import { deflateSync, inflateSync } from 'fflate';\n\nexport type Entry = {\n name: string;\n path: Uint8Array;\n method: number;\n flags: number;\n time: number;\n date: number;\n crc: number;\n size: number;\n version: number;\n made: number;\n inner: number;\n outer: number;\n raw: Uint8Array;\n};\n\nexport function unzip(buf: Uint8Array): Entry[] {\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n let eocd = buf.length - 22;\n while (eocd >= 0 && view.getUint32(eocd, true) !== 0x06054b50) eocd--;\n if (eocd < 0) throw new Error('Not a DOCX file');\n const count = view.getUint16(eocd + 10, true);\n let at = view.getUint32(eocd + 16, true);\n if (count === 0xffff || at === 0xffffffff) throw new Error('ZIP64 DOCX files are not supported');\n const names = new TextDecoder();\n const out: Entry[] = [];\n for (let n = 0; n < count; n++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new Error('Broken DOCX file');\n const length = view.getUint16(at + 28, true);\n const extra = view.getUint16(at + 30, true);\n const note = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const csize = view.getUint32(at + 20, true);\n const path = buf.subarray(at + 46, at + 46 + length);\n const begin = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n out.push({\n name: names.decode(path),\n path,\n made: view.getUint16(at + 4, true),\n version: view.getUint16(at + 6, true),\n flags: view.getUint16(at + 8, true),\n method: view.getUint16(at + 10, true),\n time: view.getUint16(at + 12, true),\n date: view.getUint16(at + 14, true),\n crc: view.getUint32(at + 16, true),\n size: view.getUint32(at + 24, true),\n inner: view.getUint16(at + 36, true),\n outer: view.getUint32(at + 38, true),\n raw: buf.subarray(begin, begin + csize),\n });\n at += 46 + length + extra + note;\n }\n return out;\n}\n\nexport function inflate(e: Entry): Uint8Array {\n if (e.method === 0) return e.raw;\n if (e.method !== 8) throw new Error(`Unsupported compression in ${e.name}`);\n return inflateSync(e.raw, { out: new Uint8Array(e.size) });\n}\n\nconst table = (() => {\n const t = new Int32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = -1;\n for (let i = 0; i < bytes.length; i++) c = table[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);\n return (c ^ -1) >>> 0;\n}\n\nexport function entry(name: string, bytes: Uint8Array, like: Entry): Entry {\n const path = new TextEncoder().encode(name);\n return { ...like, name, path, method: 8, version: Math.max(like.version, 20), flags: like.flags & ~8, crc: crc32(bytes), size: bytes.length, raw: deflateSync(bytes, { level: 6 }) };\n}\n\nexport function zip(entries: Entry[]): Uint8Array {\n let total = 22;\n for (const e of entries) total += 30 + 46 + e.path.length * 2 + e.raw.length;\n const buf = new Uint8Array(total);\n const view = new DataView(buf.buffer);\n const offsets: number[] = [];\n let at = 0;\n for (const e of entries) {\n offsets.push(at);\n view.setUint32(at, 0x04034b50, true);\n view.setUint16(at + 4, e.version, true);\n view.setUint16(at + 6, e.flags & ~8, true);\n view.setUint16(at + 8, e.method, true);\n view.setUint16(at + 10, e.time, true);\n view.setUint16(at + 12, e.date, true);\n view.setUint32(at + 14, e.crc, true);\n view.setUint32(at + 18, e.raw.length, true);\n view.setUint32(at + 22, e.size, true);\n view.setUint16(at + 26, e.path.length, true);\n view.setUint16(at + 28, 0, true);\n buf.set(e.path, at + 30);\n buf.set(e.raw, at + 30 + e.path.length);\n at += 30 + e.path.length + e.raw.length;\n }\n const start = at;\n entries.forEach((e, n) => {\n view.setUint32(at, 0x02014b50, true);\n view.setUint16(at + 4, e.made, true);\n view.setUint16(at + 6, e.version, true);\n view.setUint16(at + 8, e.flags & ~8, true);\n view.setUint16(at + 10, e.method, true);\n view.setUint16(at + 12, e.time, true);\n view.setUint16(at + 14, e.date, true);\n view.setUint32(at + 16, e.crc, true);\n view.setUint32(at + 20, e.raw.length, true);\n view.setUint32(at + 24, e.size, true);\n view.setUint16(at + 28, e.path.length, true);\n view.setUint16(at + 36, e.inner, true);\n view.setUint32(at + 38, e.outer, true);\n view.setUint32(at + 42, offsets[n], true);\n buf.set(e.path, at + 46);\n at += 46 + e.path.length;\n });\n view.setUint32(at, 0x06054b50, true);\n view.setUint16(at + 8, entries.length, true);\n view.setUint16(at + 10, entries.length, true);\n view.setUint32(at + 12, at - start, true);\n view.setUint32(at + 16, start, true);\n return buf.subarray(0, at + 22);\n}\n","import { attr, find, kid, on, parse, type El } from './xml';\nimport { inflate, unzip, type Entry } from './zip';\n\nexport type Fmt = { b: boolean; i: boolean; u: boolean; s: boolean; code: boolean; link: string | null; hl: string | null; color: string | null; size: string | null; font: string | null; rev: string | null; va: 'sup' | 'sub' | null };\ntype Mark = { type: string; attrs?: Record<string, unknown> };\ntype Rel = { id: string; type: string; target: string; external: boolean };\n\nexport const plain: Fmt = { b: false, i: false, u: false, s: false, code: false, link: null, hl: null, color: null, size: null, font: null, rev: null, va: null };\n\nexport const highlights: Record<string, string> = {\n yellow: 'ffff00', green: '00ff00', cyan: '00ffff', magenta: 'ff00ff', blue: '0000ff', red: 'ff0000', darkBlue: '000080', darkCyan: '008080',\n darkGreen: '008000', darkMagenta: '800080', darkRed: '800000', darkYellow: '808000', darkGray: '808080', lightGray: 'c0c0c0', black: '000000', white: 'ffffff',\n};\n\nconst linkStyle = /^(hyperlink|followedhyperlink|internet link|visited internet link)$/i;\nconst headingName = /^(heading|заголовок|überschrift|titre|título|titolo|nagłówek|kop|rubrik|overskrift|otsikko|nadpis|başlık|címsor|naslov|заглавие|見出し|제목|标题|標題)\\s*(\\d)$/i;\n\nexport function color(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const t = v.trim().toLowerCase();\n let m = /^#?([0-9a-f]{6})$/.exec(t);\n if (m) return '#' + m[1];\n m = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(t);\n if (m) return '#' + m[1] + m[1] + m[2] + m[2] + m[3] + m[3];\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/.exec(t);\n if (m) return '#' + [m[1], m[2], m[3]].map(x => Math.min(255, +x).toString(16).padStart(2, '0')).join('');\n return highlights[v.trim()] ? '#' + highlights[v.trim()] : null;\n}\n\nexport function size(v: unknown): string | null {\n const m = /^\\s*([\\d.]+)\\s*(pt|px)?\\s*$/.exec(String(v ?? ''));\n if (!m || !+m[1]) return null;\n const pt = m[2] === 'px' ? +m[1] * 0.75 : +m[1];\n return `${Math.round(pt * 2) / 2}pt`;\n}\n\nexport function family(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const first = v.split(',')[0].trim().replace(/^[\"']|[\"']$/g, '');\n return first || null;\n}\n\nexport function fmtOf(marks: Mark[] | undefined): Fmt {\n const f = { ...plain };\n for (const m of marks ?? []) {\n const a = m.attrs ?? {};\n if (m.type === 'bold') f.b = true;\n else if (m.type === 'italic') f.i = true;\n else if (m.type === 'underline') f.u = true;\n else if (m.type === 'strike') f.s = true;\n else if (m.type === 'code') f.code = true;\n else if (m.type === 'superscript') f.va = 'sup';\n else if (m.type === 'subscript') f.va = 'sub';\n else if (m.type === 'link' && typeof a.href === 'string' && a.href) f.link = a.href;\n else if (m.type === 'highlight') f.hl = color(a.color) ?? '#ffff00';\n else if (m.type === 'textStyle') {\n f.color = color(a.color);\n f.size = size(a.fontSize);\n f.font = family(a.fontFamily);\n } else if (m.type === 'insertion' || m.type === 'deletion') f.rev = JSON.stringify([m.type === 'insertion' ? 'ins' : 'del', String(a.id ?? ''), String(a.author ?? ''), String(a.date ?? '')]);\n }\n if (f.code) f.font = null;\n return f;\n}\n\nexport function marksOf(f: Fmt): Mark[] | undefined {\n const out: Mark[] = [];\n if (f.b) out.push({ type: 'bold' });\n if (f.i) out.push({ type: 'italic' });\n if (f.u) out.push({ type: 'underline' });\n if (f.s) out.push({ type: 'strike' });\n if (f.code) out.push({ type: 'code' });\n if (f.va) out.push({ type: f.va === 'sup' ? 'superscript' : 'subscript' });\n if (f.link) out.push({ type: 'link', attrs: { href: f.link } });\n if (f.hl) out.push({ type: 'highlight', attrs: { color: f.hl } });\n if (f.color || f.size || f.font) out.push({ type: 'textStyle', attrs: { color: f.color, fontSize: f.size, fontFamily: f.font } });\n if (f.rev) {\n const [kind, id, author, date] = JSON.parse(f.rev) as string[];\n out.push({ type: kind === 'ins' ? 'insertion' : 'deletion', attrs: { id, author, date } });\n }\n return out.length ? out : undefined;\n}\n\nexport function keyOf(f: Fmt): string {\n return `${+f.b}${+f.i}${+f.u}${+f.s}${+f.code}|${f.link ?? ''}|${f.hl ?? ''}|${f.color ?? ''}|${f.size ?? ''}|${f.font ?? ''}|${f.rev ?? ''}|${f.va ?? ''}`;\n}\n\ntype Props = Partial<Fmt> & { hidden?: boolean; style?: string };\n\nexport class Styles {\n byId = new Map<string, El>();\n paragraph: string | null = null;\n private memo = new Map<string, unknown>();\n constructor(readonly s: string, readonly fonts: { major: string | null; minor: string | null }) {\n const root = find(parse(s), 'w:styles');\n for (const el of root?.kids ?? []) {\n if (el.name !== 'w:style') continue;\n const id = attr(s, el, 'w:styleId');\n if (id === null) continue;\n this.byId.set(id, el);\n if (attr(s, el, 'w:type') === 'paragraph' && on(s, el, 'w:default') && attr(s, el, 'w:default') !== null) this.paragraph = id;\n }\n }\n\n private cached<T>(key: string, make: () => T): T {\n if (!this.memo.has(key)) this.memo.set(key, make());\n return this.memo.get(key) as T;\n }\n\n type(id: string): string | null {\n const el = this.byId.get(id);\n return el ? attr(this.s, el, 'w:type') : null;\n }\n\n name(id: string): string {\n const el = this.byId.get(id);\n const n = el && kid(el, 'w:name');\n return n ? attr(this.s, n, 'w:val') ?? id : id;\n }\n\n private chain(id: string | null): El[] {\n const out: El[] = [];\n const seen = new Set<string>();\n while (id && !seen.has(id)) {\n seen.add(id);\n const el = this.byId.get(id);\n if (!el) break;\n out.push(el);\n const base = kid(el, 'w:basedOn');\n id = base ? attr(this.s, base, 'w:val') : null;\n }\n return out;\n }\n\n private pPr<T>(id: string | null, pick: (pPr: El) => T | undefined): T | undefined {\n for (const el of this.chain(id ?? this.paragraph)) {\n const pPr = kid(el, 'w:pPr');\n const v = pPr && pick(pPr);\n if (v !== undefined) return v;\n }\n return undefined;\n }\n\n heading(id: string | null): number | null {\n if (!id) return null;\n return this.cached('h' + id, () => {\n for (const el of this.chain(id)) {\n const n = kid(el, 'w:name');\n const name = n ? attr(this.s, n, 'w:val') ?? '' : '';\n const m = headingName.exec(name.trim());\n if (m) return +m[2] >= 1 ? Math.min(6, +m[2]) : null;\n if (/^title$/i.test(name.trim())) return 1;\n const lvl = kid(el, 'w:pPr') && kid(kid(el, 'w:pPr')!, 'w:outlineLvl');\n if (lvl) return outline(attr(this.s, lvl, 'w:val'));\n }\n return null;\n });\n }\n\n numPr(id: string | null): { num: number; lvl: number } | null {\n return this.cached('n' + id, () => {\n const pr = this.pPr(id, p => kid(p, 'w:numPr'));\n if (!pr) return null;\n const num = kid(pr, 'w:numId');\n const lvl = kid(pr, 'w:ilvl');\n return { num: num ? +(attr(this.s, num, 'w:val') ?? 0) : 0, lvl: lvl ? +(attr(this.s, lvl, 'w:val') ?? 0) : 0 };\n });\n }\n\n jc(id: string | null): string | null {\n return this.cached('j' + id, () => this.pPr(id, p => kid(p, 'w:jc') && attr(this.s, kid(p, 'w:jc')!, 'w:val')) ?? null);\n }\n\n left(id: string | null): number {\n return this.cached('l' + id, () => this.pPr(id, p => {\n const ind = kid(p, 'w:ind');\n const v = ind && (attr(this.s, ind, 'w:left') ?? attr(this.s, ind, 'w:start'));\n return v === null || v === undefined ? undefined : +v;\n }) ?? 0);\n }\n\n char(id: string): Props {\n return this.cached('c' + id, () => {\n const name = this.name(id);\n if (linkStyle.test(name) || linkStyle.test(id)) return {};\n const out: Props = {};\n for (const el of this.chain(id).reverse()) Object.assign(out, props(this.s, kid(el, 'w:rPr'), this.fonts));\n return out;\n });\n }\n\n isLink(id: string | null): boolean {\n return !!id && (linkStyle.test(this.name(id)) || linkStyle.test(id));\n }\n\n find(test: (name: string, id: string) => boolean, type = 'paragraph'): string | null {\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === type && test(this.name(id), id)) return id;\n return null;\n }\n\n headingId(level: number): string | null {\n return this.find(name => headingName.test(name.trim()) && +headingName.exec(name.trim())![2] === level)\n ?? this.find((_, id) => this.heading(id) === level && !/^title$/i.test(this.name(id)));\n }\n\n list(): { name: string; id: string; heading: number | null }[] {\n const out = [];\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === 'paragraph') out.push({ name: this.name(id), id, heading: this.heading(id) });\n return out;\n }\n}\n\nexport function outline(v: string | null): number | null {\n const n = Number(v);\n return v !== null && n >= 0 && n < 9 ? Math.min(6, n + 1) : null;\n}\n\nexport function props(s: string, rPr: El | undefined, fonts: { major: string | null; minor: string | null }): Props {\n const out: Props = {};\n if (!rPr) return out;\n for (const k of rPr.kids) {\n switch (k.name) {\n case 'w:rStyle': out.style = attr(s, k, 'w:val') ?? undefined; break;\n case 'w:b': out.b = on(s, k); break;\n case 'w:i': out.i = on(s, k); break;\n case 'w:u': out.u = on(s, k); break;\n case 'w:strike': case 'w:dstrike': out.s = on(s, k) || !!out.s; break;\n case 'w:vanish': out.hidden = on(s, k); break;\n case 'w:color': {\n const v = attr(s, k, 'w:val');\n out.color = v && v !== 'auto' ? color(v) : null;\n break;\n }\n case 'w:sz': out.size = size(+(attr(s, k, 'w:val') ?? 0) / 2); break;\n case 'w:vertAlign': {\n const v = attr(s, k, 'w:val');\n out.va = v === 'superscript' ? 'sup' : v === 'subscript' ? 'sub' : null;\n break;\n }\n case 'w:highlight': {\n const v = attr(s, k, 'w:val') ?? 'none';\n out.hl = highlights[v] ? '#' + highlights[v] : null;\n break;\n }\n case 'w:shd': {\n const v = attr(s, k, 'w:fill');\n if (v && v !== 'auto' && out.hl === undefined) out.hl = color(v);\n break;\n }\n case 'w:rFonts': {\n const theme = attr(s, k, 'w:asciiTheme') ?? attr(s, k, 'w:hAnsiTheme');\n const font = attr(s, k, 'w:ascii') ?? attr(s, k, 'w:hAnsi') ?? (theme ? (theme.startsWith('major') ? fonts.major : fonts.minor) : null);\n if (font) out.font = font;\n break;\n }\n }\n }\n return out;\n}\n\nexport class Numbering {\n nums = new Map<number, { abs: number; starts: Map<number, number> }>();\n abs = new Map<number, Map<number, { fmt: string; start: number; left: number | null }>>();\n maxNum = 0;\n maxAbs = -1;\n constructor(readonly s: string, styles: Styles) {\n const root = find(parse(s), 'w:numbering');\n const links = new Map<number, string>();\n for (const el of root?.kids ?? []) {\n if (el.name === 'w:abstractNum') {\n const id = +(attr(s, el, 'w:abstractNumId') ?? -1);\n this.maxAbs = Math.max(this.maxAbs, id);\n const lvls = new Map<number, { fmt: string; start: number; left: number | null }>();\n for (const l of el.kids) {\n if (l.name !== 'w:lvl') continue;\n const fmt = kid(l, 'w:numFmt');\n const start = kid(l, 'w:start');\n const ind = kid(l, 'w:pPr') && kid(kid(l, 'w:pPr')!, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n lvls.set(+(attr(s, l, 'w:ilvl') ?? 0), { fmt: fmt ? attr(s, fmt, 'w:val') ?? 'decimal' : 'decimal', start: start ? +(attr(s, start, 'w:val') ?? 1) : 1, left: left ? +left : null });\n }\n this.abs.set(id, lvls);\n const link = kid(el, 'w:numStyleLink');\n if (link) links.set(id, attr(s, link, 'w:val') ?? '');\n } else if (el.name === 'w:num') {\n const id = +(attr(s, el, 'w:numId') ?? 0);\n this.maxNum = Math.max(this.maxNum, id);\n const a = kid(el, 'w:abstractNumId');\n const starts = new Map<number, number>();\n for (const o of el.kids) {\n const so = o.name === 'w:lvlOverride' ? kid(o, 'w:startOverride') : undefined;\n if (so) starts.set(+(attr(s, o, 'w:ilvl') ?? 0), +(attr(s, so, 'w:val') ?? 1));\n }\n this.nums.set(id, { abs: a ? +(attr(s, a, 'w:val') ?? -1) : -1, starts });\n }\n }\n for (const [id, style] of links) {\n const pr = styles.numPr(style);\n const target = pr && this.nums.get(pr.num);\n if (target && this.abs.has(target.abs)) this.abs.set(id, this.abs.get(target.abs)!);\n }\n }\n\n level(num: number, lvl: number) {\n const n = this.nums.get(num);\n return n ? this.abs.get(n.abs)?.get(lvl) : undefined;\n }\n\n kind(num: number, lvl: number): 'bulletList' | 'orderedList' | null {\n const l = this.level(num, lvl);\n if (!l || l.fmt === 'none') return null;\n return l.fmt === 'bullet' ? 'bulletList' : 'orderedList';\n }\n\n start(num: number, lvl: number): number {\n return this.nums.get(num)?.starts.get(lvl) ?? this.level(num, lvl)?.start ?? 1;\n }\n}\n\nexport class Pkg {\n entries: Entry[];\n files = new Map<string, Entry>();\n main: string;\n doc: string;\n fp: string;\n rels = new Map<string, Rel>();\n styles: Styles;\n nums: Numbering;\n private texts = new Map<string, string | null>();\n\n constructor(readonly bytes: Uint8Array) {\n this.entries = unzip(bytes);\n for (const e of this.entries) this.files.set(e.name, e);\n const root = this.relsOf('');\n const office = [...root.values()].find(r => r.type.endsWith('/officeDocument'));\n this.main = office ? office.target : 'word/document.xml';\n const doc = this.text(this.main);\n if (doc === null) throw new Error('DOCX file has no document part');\n this.doc = doc;\n if (!/xmlns:w=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/wordprocessingml\\/2006\\/main\"/.test(doc.slice(0, doc.indexOf('>', doc.indexOf('<w:document')) + 1))) throw new Error('DOCX document does not use the w: prefix');\n this.fp = this.files.get(this.main)!.crc.toString(36);\n this.rels = this.relsOf(this.main);\n const theme = this.byType('/theme');\n const t = theme ? this.text(theme.target) ?? '' : '';\n const fonts = { major: /<a:majorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null, minor: /<a:minorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null };\n const styles = this.byType('/styles');\n this.styles = new Styles((styles && this.text(styles.target)) ?? '', fonts);\n const nums = this.byType('/numbering');\n this.nums = new Numbering((nums && this.text(nums.target)) ?? '', this.styles);\n }\n\n part(name: string): Uint8Array {\n return inflate(this.files.get(name)!);\n }\n\n text(name: string): string | null {\n if (!this.texts.has(name)) {\n const e = this.files.get(name);\n this.texts.set(name, e ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(inflate(e)) : null);\n }\n return this.texts.get(name)!;\n }\n\n byType(suffix: string): Rel | undefined {\n for (const r of this.rels.values()) if (r.type.endsWith(suffix) && !r.external) return r;\n return undefined;\n }\n\n relsPath(part: string): string {\n const slash = part.lastIndexOf('/');\n return `${part.slice(0, slash + 1)}_rels/${part.slice(slash + 1)}.rels`;\n }\n\n private relsOf(part: string): Map<string, Rel> {\n const out = new Map<string, Rel>();\n const s = this.text(this.relsPath(part));\n if (!s) return out;\n const dir = part.slice(0, part.lastIndexOf('/') + 1);\n for (const el of find(parse(s), 'Relationships')?.kids ?? []) {\n const id = attr(s, el, 'Id');\n const target = attr(s, el, 'Target') ?? '';\n const external = attr(s, el, 'TargetMode') === 'External';\n if (id) out.set(id, { id, type: attr(s, el, 'Type') ?? '', target: external ? target : resolve(dir, target), external });\n }\n return out;\n }\n}\n\nfunction resolve(dir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : dir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.') out.push(p);\n }\n return out.join('/');\n}\n","import type { JSONContent } from '@tiptap/core';\nimport { keyOf, marksOf, outline, plain, props, type Fmt, type Pkg, type Styles } from './pkg';\nimport { attr, attrs, find, inner, kid, on, opened, parse, unescape, type El } from './xml';\n\nexport type { JSONContent };\n\nexport type Run = { open: string; rPr: string; fmt: Fmt; el: El | null; parent: El | null };\nexport type Wrap = { open: string; close: string; link: string | null; ins: boolean; rev?: string };\nexport type Span = { xml: string; link: string | null };\nexport type Pic = { embed: string; cx: number; cy: number };\nexport type Piece = { text: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; box?: boolean; brk?: 'page' | 'hr'; pic?: Pic; img?: Record<string, unknown>; fld?: string; instr?: string };\nexport type ListCtx = { type: string; depth: number };\n\nexport type Block = {\n ref: string;\n kind: 'p' | 'tbl' | 'lock' | 'pb' | 'hr' | 'toc';\n el: El;\n start: number;\n end: number;\n lead: string;\n node: JSONContent;\n pieces: Piece[];\n list: { num: number; lvl: number; type: string; start: number } | null;\n ctx: ListCtx | null;\n task: boolean | null;\n quote: boolean;\n level: number | null;\n rows: Row[];\n cols: number;\n};\nexport type Row = { ref: string; el: El; lead: string; head: string; cells: Cell[]; node: JSONContent };\nexport type Cell = { ref: string; el: El; lead: string; col: number; span: number; vm: 'restart' | 'continue' | null; blocks: Block[]; tail: string; node: JSONContent | null };\n\nconst blank = () => ({ align: null, indent: 0, line: null, after: null, ref: null });\nconst mimes: Record<string, string> = { png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', bmp: 'image/bmp', webp: 'image/webp', svg: 'image/svg+xml' };\n\nexport function align(v: string | null | undefined): string | null {\n if (v === 'center') return 'center';\n if (v === 'right' || v === 'end') return 'right';\n if (v === 'both' || v === 'distribute' || (v && /Kashida|thaiDistribute/.test(v))) return 'justify';\n return null;\n}\n\nfunction base64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(bin);\n}\n\nexport class Reader {\n s: string;\n n = 0;\n refs = new Map<string, Block | Row | Cell>();\n private counters = new Map<number, number[]>();\n private fmts = new Map<string, Fmt & { hidden?: boolean; style?: string }>();\n private media = new Map<string, string | null>();\n\n constructor(readonly pkg: Pkg) {\n this.s = pkg.doc;\n }\n\n ref(): string {\n return `${this.pkg.fp}.${(this.n++).toString(36)}`;\n }\n\n body() {\n const body = find(parse(this.s), 'w:body');\n if (!body) throw new Error('DOCX document has no body');\n const { list, tail } = this.blocks(body);\n return { body, list, tail, sect: kid(body, 'w:sectPr') };\n }\n\n fmt(rPr: El | undefined): Fmt & { hidden?: boolean; style?: string } {\n const key = rPr ? this.s.slice(rPr.start, rPr.end) : '';\n let f = this.fmts.get(key);\n if (!f) {\n const direct = props(this.s, rPr, this.pkg.styles.fonts);\n const style = direct.style ? this.pkg.styles.char(direct.style) : {};\n f = { ...plain, ...style, ...direct };\n this.fmts.set(key, f);\n }\n return f;\n }\n\n blocks(parent: El): { list: Block[]; tail: number } {\n const s = this.s;\n const list: Block[] = [];\n let prev = parent.open;\n let group: Block | null = null;\n let depth = 0;\n for (const k of parent.kids) {\n if (k.name === 'w:tcPr') {\n prev = k.end;\n continue;\n }\n if (k.name === 'w:sectPr') break;\n if (group) {\n group.end = k.end;\n depth += net(s.slice(k.start, k.end));\n if (depth <= 0) {\n if (/<w:instrText\\b[^>]*>\\s*TOC\\b/.test(s.slice(group.start, group.el.end))) {\n const toc = this.toc(group.el, group.end);\n toc.lead = group.lead;\n list[list.length - 1] = toc;\n }\n group = null;\n }\n prev = k.end;\n continue;\n }\n let b: Block | null = null;\n if (k.name === 'w:p') b = this.paragraph(k);\n else if (k.name === 'w:tbl') b = this.table(k);\n else if (k.name === 'w:sdt' && sdtLabel(s, k) === 'Table of contents') b = this.toc(k);\n else if (k.name === 'w:sdt' || k.name === 'w:customXml' || k.name === 'w:altChunk') b = this.lock(k, sdtLabel(s, k));\n if (!b) continue;\n b.lead = s.slice(prev, k.start);\n prev = k.end;\n list.push(b);\n if (b.kind === 'lock' && k.name === 'w:p') {\n depth = net(s.slice(k.start, k.end));\n if (depth > 0) group = b;\n }\n }\n return { list, tail: prev };\n }\n\n private block(kind: Block['kind'], el: El, node: JSONContent, ref: string): Block {\n const b: Block = { ref, kind, el, start: el.start, end: el.end, lead: '', node, pieces: [], list: null, ctx: null, task: null, quote: false, level: null, rows: [], cols: 0 };\n this.refs.set(ref, b);\n return b;\n }\n\n toc(el: El, end = el.end): Block {\n const ref = this.ref();\n const { entries, title } = contents(this.s.slice(el.start, end), this.pkg.styles);\n const b = this.block('toc', el, { type: 'toc', attrs: { entries: JSON.stringify(entries), title, align: null, indent: 0, ref } }, ref);\n b.end = end;\n return b;\n }\n\n lock(el: El, label: string, ref = 'lock:' + this.ref()): Block {\n return this.block('lock', el, { type: 'paragraph', attrs: { align: null, indent: 0, ref }, content: [{ type: 'text', text: `[${label}]` }] }, ref);\n }\n\n paragraph(el: El): Block {\n const s = this.s;\n const st = { lock: null as string | null, task: null as boolean | null, box: false, open: false };\n const pieces: Piece[] = [];\n this.walk(el.kids, [], el, pieces, st);\n const fields = this.fields(pieces, st);\n if (st.lock || st.open || !fields) {\n const label = st.lock ?? (/\\bTOC\\b/.test(pieces.map(p => p.instr ?? '').join('')) ? 'Table of contents' : 'Field');\n const text = st.open ? '' : pieces.map(p => p.text ?? '').join('');\n const b = this.lock(el, label);\n if (text.trim()) b.node.content![0].text += ' ' + text.trim();\n return b;\n }\n const final = fields;\n for (const p of final) {\n const src = p.pic && this.src(p.pic.embed);\n if (!src) continue;\n const meta = Object.fromEntries(attrs(/<wp:docPr\\b[^>]*>/.exec(p.raw!)?.[0] ?? '<x>'));\n p.img = { src, alt: meta.descr ?? null, title: meta.title ?? null, width: Math.round(p.pic!.cx / 9525), height: Math.round(p.pic!.cy / 9525),\n wrap: /<wp:anchor\\b/.test(p.raw!) ? /<wp:positionH\\b[^>]*>\\s*<wp:align>right</.test(p.raw!) ? 'right' : 'left' : null };\n }\n const pPr = kid(el, 'w:pPr');\n const styles = this.pkg.styles;\n const sEl = pPr && kid(pPr, 'w:pStyle');\n const style = sEl ? attr(s, sEl, 'w:val') : null;\n const jc = pPr && kid(pPr, 'w:jc');\n const visible = final.some(p => p.text !== null || p.img);\n if (!visible && final.some(p => p.pic)) return this.lock(el, 'Picture');\n const ref = this.ref();\n if (!visible && final.some(p => p.brk === 'page')) return this.block('pb', el, { type: 'pageBreak', attrs: { align: null, indent: 0, ref } }, ref);\n const bdr = pPr && kid(pPr, 'w:pBdr');\n if (!visible && (final.some(p => p.brk === 'hr') || (bdr && kid(bdr, 'w:bottom') && !kid(bdr, 'w:top')))) return this.block('hr', el, { type: 'horizontalRule', attrs: { align: null, indent: 0, ref } }, ref);\n\n const ol = pPr && kid(pPr, 'w:outlineLvl');\n const level = ol ? outline(attr(s, ol, 'w:val')) : styles.heading(style);\n const np = pPr && kid(pPr, 'w:numPr');\n let num: { num: number; lvl: number } | null = null;\n if (np) {\n const id = kid(np, 'w:numId');\n const lv = kid(np, 'w:ilvl');\n const fromStyle = styles.numPr(style);\n num = { num: id ? +(attr(s, id, 'w:val') ?? 0) : fromStyle?.num ?? 0, lvl: lv ? +(attr(s, lv, 'w:val') ?? 0) : fromStyle?.lvl ?? 0 };\n } else num = styles.numPr(style);\n const type = num && num.num ? this.pkg.nums.kind(num.num, num.lvl) : null;\n const isList = !!type && st.task === null && level === null;\n const ind = pPr && kid(pPr, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n const indent = isList ? 0 : Math.max(0, Math.round((left !== null && left !== undefined ? +left : styles.left(style)) / 720));\n const sp = pPr && kid(pPr, 'w:spacing');\n const lineAt = sp && attr(s, sp, 'w:line');\n const afterAt = sp && attr(s, sp, 'w:after');\n const auto = !sp || !attr(s, sp, 'w:lineRule') || attr(s, sp, 'w:lineRule') === 'auto';\n const base = { align: align(jc ? attr(s, jc, 'w:val') : styles.jc(style)), indent, line: lineAt && auto ? Math.round(+lineAt / 2.4) / 100 : null, after: afterAt ? +afterAt / 20 : null, ref };\n const node: JSONContent = level ? { type: 'heading', attrs: { level, ...base } } : { type: 'paragraph', attrs: base };\n const content = inline(final);\n if (content.length) node.content = content;\n const b = this.block('p', el, node, ref);\n b.pieces = final;\n b.level = level;\n b.task = level === null ? st.task : null;\n b.quote = !isList && b.task === null && level === null && !!style && /quote|block text|цитата/i.test(styles.name(style));\n if (isList) {\n const counts = this.counters.get(num!.num) ?? [];\n counts[num!.lvl] = counts[num!.lvl] === undefined ? this.pkg.nums.start(num!.num, num!.lvl) : counts[num!.lvl] + 1;\n counts.length = num!.lvl + 1;\n this.counters.set(num!.num, counts);\n b.list = { num: num!.num, lvl: num!.lvl, type: type!, start: counts[num!.lvl] };\n }\n return b;\n }\n\n private src(embed: string): string | null {\n if (!this.media.has(embed)) {\n const rel = this.pkg.rels.get(embed);\n const ext = rel && !rel.external ? rel.target.split('.').pop()!.toLowerCase() : '';\n const e = rel && this.pkg.files.get(rel.target);\n this.media.set(embed, e && mimes[ext] ? `data:${mimes[ext]};base64,${base64(this.pkg.part(rel!.target))}` : null);\n }\n return this.media.get(embed)!;\n }\n\n private walk(kids: El[], ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n for (const k of kids) {\n const name = k.name;\n if (name === 'w:pPr') continue;\n if (name === 'w:r') this.run(k, ctx, parent, out, st);\n else if (name === 'w:hyperlink' && k.end !== k.open) {\n const id = attr(s, k, 'r:id');\n const anchor = attr(s, k, 'w:anchor');\n const rel = id ? this.pkg.rels.get(id) : undefined;\n const href = (rel ? rel.target : '') + (anchor ? '#' + anchor : '') || null;\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: '</w:hyperlink>', link: href, ins: false }], k, out, st);\n } else if ((name === 'w:ins' || name === 'w:moveTo' || name === 'w:del' || name === 'w:moveFrom') && k.end !== k.open) {\n const rev = JSON.stringify([name === 'w:ins' || name === 'w:moveTo' ? 'ins' : 'del', attr(s, k, 'w:id') ?? '', attr(s, k, 'w:author') ?? '', attr(s, k, 'w:date') ?? '']);\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: `</${name}>`, link: null, ins: true, rev }], k, out, st);\n } else if ((name === 'w:smartTag' || name === 'w:customXml' || name === 'w:dir' || name === 'w:bdo') && k.end !== k.open) {\n const pr = k.kids[0] && /Pr$/.test(k.kids[0].name) ? k.kids[0] : null;\n this.walk(pr ? k.kids.slice(1) : k.kids, [...ctx, { open: s.slice(k.start, pr ? pr.end : k.open), close: `</${name}>`, link: null, ins: false }], k, out, st);\n } else if (name === 'w:sdt') {\n const pr = kid(k, 'w:sdtPr');\n const box = pr && find(pr, 'w14:checkbox');\n if (box && st.task === null && !out.some(p => p.text !== null)) {\n const c = find(box, 'w14:checked');\n st.task = !!c && on(s, c, 'w14:val');\n st.box = true;\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null, box: true });\n } else {\n const content = kid(k, 'w:sdtContent');\n const inside: Piece[] = [];\n if (content) this.walk(content.kids, ctx, content, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, null);\n }\n } else if (name === 'w:fldSimple') {\n const inside: Piece[] = [];\n this.walk(k.kids, ctx, k, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, hyperlink(attr(s, k, 'w:instr') ?? ''));\n } else if (name === 'm:oMath') {\n const text = s.slice(k.start, k.end).match(/<m:t(?:\\s[^>]*)?>[^<]*<\\/m:t>/g)?.map(t => inner(t, parse(t).kids[0])).join('') ?? '';\n this.span(s.slice(k.start, k.end), text ? [{ text, raw: null, run: null, ctx, span: null }] : [], out, ctx, null);\n } else if (name === 'm:oMathPara') st.lock = 'Equation';\n else out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n }\n }\n\n private span(xml: string, inside: Piece[], out: Piece[], ctx: Wrap[], link: string | null) {\n const shown = inside.filter(p => p.text !== null);\n if (!shown.length) {\n out.push({ text: null, raw: xml, run: null, ctx, span: null });\n return;\n }\n const span: Span = { xml, link };\n for (const p of shown) out.push({ ...p, span });\n }\n\n private run(k: El, ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n const rPrEl = kid(k, 'w:rPr');\n const f = this.fmt(rPrEl);\n if (f.hidden || k.end === k.open) {\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n return;\n }\n const run: Run = { open: opened(s, k), rPr: rPrEl ? s.slice(rPrEl.start, rPrEl.end) : '', fmt: f, el: k, parent };\n const push = (text: string | null, raw: string | null, extra?: Partial<Piece>) => {\n if (text !== null && st.box) {\n st.box = false;\n if (text.startsWith(' ') && raw === null) {\n out.push({ text: null, raw: '<w:t xml:space=\"preserve\"> </w:t>', run, ctx, span: null, box: true });\n text = text.slice(1);\n if (!text) return;\n }\n }\n out.push({ text, raw, run, ctx, span: null, ...extra });\n };\n for (const c of k.kids) {\n const raw = s.slice(c.start, c.end);\n switch (c.name) {\n case 'w:rPr': break;\n case 'w:t': case 'w:delText': {\n const text = inner(s, c).replace(/[\\r\\n]/g, ' ');\n if (text) push(text, null);\n break;\n }\n case 'w:tab': case 'w:ptab': push('\\t', raw); break;\n case 'w:cr': push('\\n', raw); break;\n case 'w:noBreakHyphen': push('\\u2011', raw); break;\n case 'w:softHyphen': push('\\u00AD', raw); break;\n case 'w:br': {\n const type = attr(s, c, 'w:type');\n if (type === 'page') push(null, raw, { brk: 'page' });\n else if (type === 'column') push(null, raw);\n else push('\\n', raw);\n break;\n }\n case 'w:fldChar': push(null, raw, { fld: attr(s, c, 'w:fldCharType') ?? '' }); break;\n case 'w:instrText': push(null, raw, { instr: inner(s, c) }); break;\n case 'w:drawing': {\n const pic = picture(raw);\n if (pic) push(null, raw, { pic });\n else st.lock = shape(raw);\n break;\n }\n case 'w:pict': {\n const pic = /textbox/.test(raw) ? null : vml(raw);\n if (/o:hr=\"t\"/.test(raw)) push(null, raw, { brk: 'hr' });\n else if (pic) push(null, raw, { pic });\n else st.lock = /textbox/.test(raw) ? 'Text box' : 'Shape';\n break;\n }\n case 'mc:AlternateContent': st.lock = shape(raw); break;\n case 'w:object': st.lock = 'Object'; break;\n default: push(null, raw);\n }\n }\n }\n\n private fields(pieces: Piece[], st: { open: boolean }): Piece[] | null {\n if (!pieces.some(p => p.fld)) return pieces;\n const out: Piece[] = [];\n let depth = 0;\n let begin = -1;\n for (let i = 0; i < pieces.length; i++) {\n const p = pieces[i];\n if (p.fld === 'begin') {\n if (depth++ === 0) begin = i;\n } else if (p.fld === 'end' && depth > 0 && --depth === 0) {\n const a = pieces[begin].run!;\n const z = p.run!;\n if (a.parent !== z.parent) return null;\n let first = begin;\n while (first > 0 && pieces[first - 1].run === a) first--;\n let last = i;\n while (last + 1 < pieces.length && pieces[last + 1].run === z) last++;\n out.length -= begin - first;\n const shown: Piece[] = [];\n const code: boolean[] = [];\n let hidden = 0;\n let instr = '';\n for (let j = first; j <= last; j++) {\n const q = pieces[j];\n if (q.fld === 'begin') {\n code.push(true);\n hidden++;\n } else if (q.fld === 'separate' && code[code.length - 1]) {\n code[code.length - 1] = false;\n hidden--;\n } else if (q.fld === 'end') {\n if (code.pop()) hidden--;\n } else if (q.instr && code.length === 1) instr += q.instr;\n else if (q.text !== null && hidden === 0) shown.push(q);\n }\n this.span(this.s.slice(a.el!.start, z.el!.end), shown, out, pieces[first].ctx, hyperlink(instr));\n i = last;\n } else if (depth === 0) out.push(p);\n }\n if (depth > 0) st.open = true;\n return out;\n }\n\n table(el: El): Block {\n const s = this.s;\n if (el.kids.some(k => k.name === 'w:sdt' || k.name === 'w:customXml' || (k.name === 'w:tr' && k.kids.some(c => c.name === 'w:sdt' || c.name === 'w:customXml')))) return this.lock(el, 'Table');\n const ref = this.ref();\n const pr = kid(el, 'w:tblPr');\n const jc = pr && kid(pr, 'w:jc');\n const bd = pr && kid(pr, 'w:tblBorders');\n const bare = !!bd && bd.kids.length > 0 && bd.kids.every(k => /^(none|nil)$/.test(attr(s, k, 'w:val') ?? ''));\n const node: JSONContent = { type: 'table', attrs: { align: align(jc ? attr(s, jc, 'w:val') : null), indent: 0, borders: bare ? 'none' : null, ref }, content: [] };\n const b = this.block('tbl', el, node, ref);\n const grid = kid(el, 'w:tblGrid');\n b.cols = grid ? grid.kids.filter(k => k.name === 'w:gridCol').length : 0;\n const widths = grid ? grid.kids.filter(k => k.name === 'w:gridCol').map(k => Math.floor(+(attr(s, k, 'w:w') ?? 0) / 15)) : [];\n const open: (JSONContent | null)[] = [];\n let prev = grid ? grid.end : pr ? pr.end : el.open;\n for (const tr of el.kids) {\n if (tr.name !== 'w:tr') continue;\n const rref = this.ref();\n const row: Row = { ref: rref, el: tr, lead: s.slice(prev, tr.start), head: '', cells: [], node: { type: 'tableRow', attrs: { align: null, indent: 0, ref: rref }, content: [] } };\n this.refs.set(rref, row);\n prev = tr.end;\n const trPr = kid(tr, 'w:trPr');\n const header = !!trPr && on(s, kid(trPr, 'w:tblHeader'));\n const before = trPr && kid(trPr, 'w:gridBefore');\n let col = before ? +(attr(s, before, 'w:val') ?? 0) : 0;\n let last = tr.open;\n for (const c of tr.kids) {\n if (c.name === 'w:tc') break;\n if (c.name === 'w:trPr' || c.name === 'w:tblPrEx') last = c.end;\n }\n row.head = s.slice(tr.open, last);\n for (const tc of tr.kids) {\n if (tc.name !== 'w:tc') continue;\n const tcPr = kid(tc, 'w:tcPr');\n const gs = tcPr && kid(tcPr, 'w:gridSpan');\n const vmEl = tcPr && kid(tcPr, 'w:vMerge');\n const vmVal = vmEl ? attr(s, vmEl, 'w:val') : null;\n const span = gs ? Math.max(1, +(attr(s, gs, 'w:val') ?? 1)) : 1;\n let vm: Cell['vm'] = vmEl ? (vmVal === 'restart' ? 'restart' : 'continue') : null;\n if (vm === 'continue' && !open[col]) vm = null;\n const cref = this.ref();\n const inside = this.blocks(tc);\n const cell: Cell = { ref: cref, el: tc, lead: s.slice(last, tc.start), col, span, vm, blocks: inside.list, tail: s.slice(inside.tail, tc.close), node: null };\n last = tc.end;\n this.refs.set(cref, cell);\n if (vm === 'continue') open[col]!.attrs!.rowspan++;\n else {\n const content = assemble(inside.list);\n const own = widths.slice(col, col + span);\n const shd = tcPr && kid(tcPr, 'w:shd');\n const fill = shd ? attr(s, shd, 'w:fill') : null;\n cell.node = { type: header ? 'tableHeader' : 'tableCell', attrs: { colspan: span, rowspan: 1, colwidth: own.length === span && own.every(w => w > 0) ? own : null, background: fill && /^[0-9a-f]{6}$/i.test(fill) ? `#${fill.toLowerCase()}` : null, align: null, indent: 0, ref: cref }, content: content.length ? content : [{ type: 'paragraph', attrs: blank() }] };\n row.node.content!.push(cell.node);\n for (let c = col; c < col + span; c++) open[c] = null;\n if (vm === 'restart') open[col] = cell.node;\n }\n col += span;\n row.cells.push(cell);\n }\n b.rows.push(row);\n node.content!.push(row.node);\n }\n return b;\n }\n}\n\nfunction net(xml: string): number {\n let n = 0;\n if (xml.indexOf('w:fldCharType') === -1) return 0;\n for (const m of xml.matchAll(/w:fldCharType=\"(begin|end)\"/g)) n += m[1] === 'begin' ? 1 : -1;\n return n;\n}\n\nfunction hyperlink(instr: string): string | null {\n const m = /^\\s*HYPERLINK\\s+(?:\"([^\"]*)\")?(?:.*?\\\\l\\s+\"([^\"]*)\")?/.exec(instr);\n if (!m || (!m[1] && !m[2])) return null;\n return (m[1] ?? '') + (m[2] ? '#' + m[2] : '');\n}\n\nfunction contents(xml: string, styles: Styles): { entries: [number, string][]; title: string | null } {\n const entries: [number, string][] = [];\n let title: string | null = null;\n let begun = false;\n for (const p of xml.match(/<w:p\\b(?:[^>]*\\/>|[\\s\\S]*?<\\/w:p>)/g) ?? []) {\n const id = /<w:pStyle w:val=\"([^\"]*)\"/.exec(p)?.[1] ?? '';\n const level = Number(/^toc ?(\\d)$/i.exec(styles.name(id).trim())?.[1] ?? /^TOC(\\d)$/i.exec(id)?.[1] ?? 0);\n begun ||= level > 0 || /w:fldCharType=\"begin\"/.test(p);\n const text = (p.replace(/<w:instrText\\b[\\s\\S]*?<\\/w:instrText>/g, '').match(/<w:t(?:\\s[^>]*)?>[^<]*<\\/w:t>|<w:tab\\/>/g) ?? [])\n .map(m => m === '<w:tab/>' ? '\\t' : unescape(m.replace(/<[^>]*>/g, ''))).join('');\n const shown = (text.includes('\\t') ? text.slice(0, text.lastIndexOf('\\t')) : text).trim();\n if (!shown) continue;\n if (begun) entries.push([level || 1, shown]);\n else title ??= shown;\n }\n return { entries, title };\n}\n\nfunction sdtLabel(s: string, el: El): string {\n if (el.name === 'w:altChunk') return 'Imported content';\n const xml = s.slice(el.start, Math.min(el.end, el.start + 4000));\n if (/w:docPartGallery w:val=\"Table of Contents\"/.test(xml) || /TOC \\\\/.test(s.slice(el.start, el.end))) return 'Table of contents';\n const alias = /<w:alias w:val=\"([^\"]*)\"/.exec(xml);\n return alias ? alias[1] : 'Content control';\n}\n\nfunction picture(raw: string): Pic | null {\n if (!/drawingml\\/2006\\/picture\"/.test(raw) || /wps:|wpg:|wpc:|c:chart|dgm:|txbxContent/.test(raw)) return null;\n const embed = /<a:blip\\b[^>]*\\br:embed=\"([^\"]*)\"/.exec(raw);\n const ext = /<wp:extent\\b[^>]*\\bcx=\"(\\d+)\"[^>]*\\bcy=\"(\\d+)\"/.exec(raw);\n return embed && ext ? { embed: embed[1], cx: +ext[1], cy: +ext[2] } : null;\n}\n\nfunction vml(raw: string): Pic | null {\n const embed = /<v:imagedata\\b[^>]*\\br:id=\"([^\"]*)\"/.exec(raw);\n const style = /<v:shape\\b[^>]*\\bstyle=\"([^\"]*)\"/.exec(raw)?.[1] ?? '';\n const emu = (key: string) => {\n const m = new RegExp(`(?:^|;)\\\\s*${key}:\\\\s*([\\\\d.]+)(pt|px|in|cm|mm)?`).exec(style);\n return m ? Math.round(+m[1] * (({ px: 9525, in: 914400, cm: 360000, mm: 36000 } as Record<string, number>)[m[2]] ?? 12700)) : 0;\n };\n return embed ? { embed: embed[1], cx: emu('width'), cy: emu('height') } : null;\n}\n\nfunction shape(raw: string): string {\n if (/txbxContent|v:textbox/.test(raw)) return 'Text box';\n if (/c:chart/.test(raw)) return 'Chart';\n if (/dgm:/.test(raw)) return 'Diagram';\n if (/m:oMath/.test(raw)) return 'Equation';\n return /drawingml\\/2006\\/picture\"/.test(raw) ? 'Picture' : 'Shape';\n}\n\nexport function fmtAt(p: Piece): Fmt {\n const f = p.run ? p.run.fmt : plain;\n let link: string | null = null;\n let rev: string | null = null;\n for (const w of p.ctx) {\n if (w.link) link = w.link;\n if (w.rev) rev = w.rev;\n }\n link ??= p.span?.link ?? null;\n return link === f.link && rev === f.rev ? f : { ...f, link, rev };\n}\n\nexport function inline(pieces: Piece[]): JSONContent[] {\n const out: JSONContent[] = [];\n let key = '';\n for (const p of pieces) {\n if (p.img) {\n out.push({ type: 'image', attrs: { ...p.img } });\n key = '';\n continue;\n }\n if (p.text === null) continue;\n if (p.text === '\\n') {\n out.push({ type: 'hardBreak' });\n key = '';\n continue;\n }\n const f = fmtAt(p);\n const k = keyOf(f);\n const last = out[out.length - 1];\n if (last && last.type === 'text' && k === key) last.text += p.text;\n else {\n const node: JSONContent = { type: 'text', text: p.text };\n const marks = marksOf(f);\n if (marks) node.marks = marks;\n out.push(node);\n key = k;\n }\n }\n return out;\n}\n\nexport function assemble(list: Block[]): JSONContent[] {\n const out: JSONContent[] = [];\n for (let i = 0; i < list.length; ) {\n const b = list[i];\n let j = i + 1;\n if (b.list) {\n while (j < list.length && list[j].list && !(list[j].list!.num !== b.list.num && list[j].list!.lvl <= b.list.lvl)) j++;\n out.push(nest(list.slice(i, j)));\n } else if (b.task !== null) {\n while (j < list.length && list[j].task !== null) j++;\n out.push({ type: 'taskList', attrs: blank(), content: list.slice(i, j).map(t => ({ type: 'taskItem', attrs: { checked: t.task, ...blank() }, content: [t.node] })) });\n } else if (b.quote) {\n while (j < list.length && list[j].quote) j++;\n out.push({ type: 'blockquote', attrs: blank(), content: list.slice(i, j).map(q => q.node) });\n } else out.push(b.node);\n i = j;\n }\n return out;\n}\n\nfunction nest(list: Block[]): JSONContent {\n const make = (b: Block): JSONContent => ({ type: b.list!.type, attrs: b.list!.type === 'orderedList' ? { start: b.list!.start, ...blank() } : blank(), content: [] });\n const root = make(list[0]);\n const stack = [{ list: root, lvl: list[0].list!.lvl }];\n for (const b of list) {\n let top = stack[stack.length - 1];\n while (b.list!.lvl < top.lvl && stack.length > 1) {\n stack.pop();\n top = stack[stack.length - 1];\n }\n if (b.list!.lvl > top.lvl && top.list.content!.length) {\n const sub = make(b);\n top.list.content![top.list.content!.length - 1].content!.push(sub);\n stack.push({ list: sub, lvl: b.list!.lvl });\n top = stack[stack.length - 1];\n }\n b.ctx = { type: top.list.type!, depth: stack.length - 1 };\n top.list.content!.push({ type: 'listItem', attrs: blank(), content: [b.node] });\n }\n return root;\n}\n","export function diff(a: string[], b: string[]): Int32Array {\n const map = new Int32Array(b.length).fill(-1);\n let p = 0;\n while (p < a.length && p < b.length && a[p] === b[p]) map[p] = p++;\n let q = 0;\n while (q < a.length - p && q < b.length - p && a[a.length - 1 - q] === b[b.length - 1 - q]) {\n map[b.length - 1 - q] = a.length - 1 - q;\n q++;\n }\n const n = a.length - p - q;\n const m = b.length - p - q;\n if (!n || !m) return map;\n const max = Math.min(n + m, 1200);\n const off = max + 1;\n const v = new Int32Array(2 * max + 3);\n const trace: Int32Array[] = [];\n for (let d = 0; d <= max; d++) {\n trace.push(v.slice(off - d - 1, off + d + 2));\n for (let k = -d; k <= d; k += 2) {\n let x = k === -d || (k !== d && v[off + k - 1] < v[off + k + 1]) ? v[off + k + 1] : v[off + k - 1] + 1;\n let y = x - k;\n while (x < n && y < m && a[p + x] === b[p + y]) {\n x++;\n y++;\n }\n v[off + k] = x;\n if (x >= n && y >= m) {\n for (let e = d; e > 0; e--) {\n const t = trace[e];\n const at = (j: number) => t[j + e + 1];\n const down = k === -e || (k !== e && at(k - 1) < at(k + 1));\n const pk = down ? k + 1 : k - 1;\n const px = at(pk);\n const py = px - pk;\n while (x > px && y > py) map[p + --y] = p + --x;\n x = px;\n y = py;\n k = pk;\n }\n while (x > 0 && y > 0) map[p + --y] = p + --x;\n return map;\n }\n }\n }\n return map;\n}\n","import { diff } from './diff';\nimport { color, fmtOf, highlights, keyOf, plain, Pkg, type Fmt } from './pkg';\nimport { align, assemble, fmtAt, Reader, type Block, type Cell, type JSONContent, type Row, type Run, type Span, type Wrap } from './read';\nimport { attr, attrs, escape, kid, opened, parse, rebuild } from './xml';\nimport { entry, zip, type Entry } from './zip';\n\nconst P = ['w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore', 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers', 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku', 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE', 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid', 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents', 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment', 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle', 'w:rPr', 'w:sectPr', 'w:pPrChange'];\nconst R = ['w:rStyle', 'w:rFonts', 'w:b', 'w:bCs', 'w:i', 'w:iCs', 'w:caps', 'w:smallCaps', 'w:strike', 'w:dstrike', 'w:outline', 'w:shadow', 'w:emboss', 'w:imprint', 'w:noProof', 'w:snapToGrid', 'w:vanish', 'w:webHidden', 'w:color', 'w:spacing', 'w:w', 'w:kern', 'w:position', 'w:sz', 'w:szCs', 'w:highlight', 'w:u', 'w:effect', 'w:bdr', 'w:shd', 'w:fitText', 'w:vertAlign', 'w:rtl', 'w:cs', 'w:em', 'w:lang', 'w:eastAsianLayout', 'w:specVanish', 'w:oMath'];\nconst TC = ['w:cnfStyle', 'w:tcW', 'w:gridSpan', 'w:hMerge', 'w:vMerge', 'w:tcBorders', 'w:shd', 'w:noWrap', 'w:tcMar', 'w:textDirection', 'w:tcFitText', 'w:vAlign', 'w:hideMark', 'w:headers', 'w:cellIns', 'w:cellDel', 'w:cellMerge', 'w:tcPrChange'];\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst special: Record<string, string> = { '\\t': '<w:tab/>', '\\n': '<w:br/>', '\\u2011': '<w:noBreakHyphen/>', '\\u00AD': '<w:softHyphen/>' };\n\ntype Out = { kind: 'p' | 'pb' | 'hr' | 'tbl' | 'code' | 'toc'; node: JSONContent; list: { type: string; depth: number; group: number; start: number } | null; task: boolean | null; quote: boolean; cont: { depth: number; group: number } | null };\ntype Unit = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; idx: number; fmt: Fmt; base: Fmt; box?: boolean; img?: Record<string, unknown> };\ntype Glyph = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; u: Unit | null; fmt: Fmt; xml?: string };\nexport type Img = { bytes: Uint8Array; mime: string };\nexport type Setup = { page?: { width: number; height: number; margins: [number, number, number, number] }; header?: string; footer?: string; numbers?: boolean };\n\nconst keys: Record<string, [string, unknown][]> = {\n paragraph: [['align', null], ['indent', 0], ['line', null], ['after', null]],\n heading: [['level', 1], ['align', null], ['indent', 0], ['line', null], ['after', null]],\n table: [['align', null], ['borders', null]],\n tableCell: [['colspan', 1], ['rowspan', 1], ['colwidth', null], ['background', null]],\n tableHeader: [['colspan', 1], ['rowspan', 1], ['colwidth', null], ['background', null]],\n orderedList: [['start', 1]],\n taskItem: [['checked', false]],\n codeBlock: [['language', null]],\n toc: [['entries', '[]'], ['title', null]],\n image: [['src', null], ['alt', null], ['title', null], ['width', null], ['height', null], ['wrap', null]],\n};\n\nfunction value(key: string, v: unknown): unknown {\n if (v === undefined || v === '' || v === null) return null;\n if (key === 'align') return v === 'left' ? null : v;\n if (key === 'width' || key === 'height') return Math.round(Number(v)) || null;\n if (key === 'line' || key === 'after') return Number.isFinite(Number(v)) ? Number(v) : null;\n if (key === 'colwidth') return Array.isArray(v) && v.length && v.every(w => Number(w) > 0) ? v.map(w => Math.round(Number(w))) : null;\n if (key === 'indent' || key === 'level' || key === 'colspan' || key === 'rowspan' || key === 'start') return Number(v) || 0;\n if (key === 'checked') return !!v;\n return v;\n}\n\nfunction sig(n: JSONContent): string {\n if (n.type === 'text' || n.type === 'hardBreak') return inlineSig([n]);\n const a = n.attrs ?? {};\n let out = `${n.type}(${(keys[n.type ?? ''] ?? []).map(([k, d]) => { const v = value(k, a[k]); return v === value(k, d) ? '' : `${k}=${JSON.stringify(v)}`; }).join(',')}${a.ref ? '#' + a.ref : ''})`;\n const kids = n.content ?? [];\n if (kids.length && (kids[0].type === 'text' || kids[0].type === 'hardBreak' || kids.some(k => k.type === 'text'))) return out + inlineSig(kids);\n out += '[' + kids.map(sig).join(',') + ']';\n return out;\n}\n\nfunction inlineSig(kids: JSONContent[]): string {\n let out = '';\n let key: string | null = null;\n for (const k of kids) {\n if (k.type === 'text') {\n if (!k.text) continue;\n const next = keyOf(fmtOf(k.marks as never));\n out += (next === key ? '' : `\\u0001${next}\\u0002`) + k.text;\n key = next;\n } else {\n out += `\\u0003${k.type}${k.type === 'image' ? picture(k.attrs ?? {}) : ''}\\u0004`;\n key = null;\n }\n }\n return out;\n}\n\nfunction picture(a: Record<string, unknown>): string {\n return JSON.stringify([a.src ?? null, a.alt || null, a.title || null, Math.round(Number(a.width)) || null, Math.round(Number(a.height)) || null, a.wrap || null]);\n}\n\nlet groups = 0;\n\nfunction flatten(content: JSONContent[], out: Out[] = [], quote = false): Out[] {\n for (const node of content) {\n const t = node.type;\n const add = (kind: Out['kind'], extra: Partial<Out> = {}) => out.push({ kind, node, list: null, task: null, quote, cont: null, ...extra });\n if (t === 'paragraph' || t === 'heading') add('p');\n else if (t === 'bulletList' || t === 'orderedList') listed(node, 0, ++groups, out, quote);\n else if (t === 'taskList') {\n for (const li of node.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: null, task: !!li.attrs?.checked, quote, cont: null });\n else flatten([c], out, quote);\n });\n }\n } else if (t === 'blockquote') flatten(node.content ?? [], out, true);\n else if (t === 'table') add('tbl');\n else if (t === 'image') out.push({ kind: 'p', node: { type: 'paragraph', attrs: { align: null, indent: 0, ref: null }, content: [node] }, list: null, task: null, quote, cont: null });\n else if (t === 'pageBreak') add('pb');\n else if (t === 'toc') add('toc');\n else if (t === 'horizontalRule') add('hr');\n else if (t === 'codeBlock') add('code');\n else if (node.content) flatten(node.content, out, quote);\n }\n return out;\n}\n\nfunction listed(list: JSONContent, depth: number, group: number, out: Out[], quote: boolean) {\n for (const li of list.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: { type: list.type!, depth, group, start: Number(list.attrs?.start ?? 1) || 1 }, task: null, quote, cont: null });\n else if (c.type === 'bulletList' || c.type === 'orderedList') listed(c, depth + 1, group, out, quote);\n else if (c.type === 'paragraph' || c.type === 'heading') out.push({ kind: 'p', node: c, list: null, task: null, quote, cont: { depth, group } });\n else flatten([c], out, quote);\n });\n }\n}\n\ntype Slot = { col: number; span: number; cell: JSONContent | null; from: JSONContent | null };\n\nfunction grid(rows: JSONContent[]): Slot[][] {\n const taken: number[] = [];\n const from: JSONContent[] = [];\n const span = (c: JSONContent) => Math.max(1, Number(c.attrs?.colspan ?? 1) || 1);\n return rows.map(row => {\n const cells = row.content ?? [];\n const slots: Slot[] = [];\n let col = 0;\n let i = 0;\n while (i < cells.length || taken.some((t, k) => k >= col && t > 0)) {\n if ((taken[col] ?? 0) > 0) {\n const f = from[col];\n const n = span(f);\n for (let k = col; k < col + n; k++) taken[k]--;\n slots.push({ col, span: n, cell: null, from: f });\n col += n;\n continue;\n }\n if (i >= cells.length) {\n col++;\n continue;\n }\n const c = cells[i++];\n const n = span(c);\n const rs = Math.max(1, Number(c.attrs?.rowspan ?? 1) || 1);\n slots.push({ col, span: n, cell: c, from: null });\n if (rs > 1) for (let k = col; k < col + n; k++) {\n taken[k] = rs - 1;\n from[k] = c;\n }\n col += n;\n }\n return slots;\n });\n}\n\nfunction dims(bytes: Uint8Array): [number, number] | null {\n const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (bytes[0] === 0x89 && bytes[1] === 0x50) return [v.getUint32(16), v.getUint32(20)];\n if (bytes[0] === 0x47 && bytes[1] === 0x49) return [v.getUint16(6, true), v.getUint16(8, true)];\n if (bytes[0] === 0xff && bytes[1] === 0xd8) {\n for (let i = 2; i + 9 < bytes.length; ) {\n if (bytes[i] !== 0xff) return null;\n const m = bytes[i + 1];\n if (m >= 0xc0 && m <= 0xcf && m !== 0xc4 && m !== 0xc8 && m !== 0xcc) return [v.getUint16(i + 7), v.getUint16(i + 5)];\n i += 2 + v.getUint16(i + 2);\n }\n }\n return null;\n}\n\nfunction meta(tag: string, img: Record<string, unknown>): string {\n const extra = `${img.alt ? ` descr=\"${escape(String(img.alt))}\"` : ''}${img.title ? ` title=\"${escape(String(img.title))}\"` : ''}`;\n return tag.replace(/\\s(descr|title)=\"[^\"]*\"/g, '').replace(/\\s*\\/?>$/, end => extra + end);\n}\n\nfunction checked(xml: string, on: boolean): string {\n const yes = /w14:checkedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2612';\n const no = /w14:uncheckedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2610';\n const [from, to] = on ? [no, yes] : [yes, no];\n let out = /<w14:checked\\b/.test(xml) ? xml.replace(/(<w14:checked\\b[^>]*w14:val=\")[^\"]*\"/, `$1${on ? 1 : 0}\"`) : xml.replace(/(<w14:checkbox\\b[^>]*>)/, `$1<w14:checked w14:val=\"${on ? 1 : 0}\"/>`);\n const at = out.indexOf('<w:sdtContent');\n if (at === -1) return out;\n const tail = out.slice(at).replace(new RegExp(`w:char=\"${from}\"`, 'i'), `w:char=\"${to}\"`).replace(`>${String.fromCharCode(parseInt(from, 16))}<`, `>${String.fromCharCode(parseInt(to, 16))}<`);\n out = out.slice(0, at) + tail;\n return out;\n}\n\nexport class Writer {\n s: string;\n r: Reader;\n claimed = new Map<JSONContent, Block | Row | Cell>();\n used = new Set<Block | Row | Cell>();\n carry = new Map<Block, string>();\n left = new Map<Cell, string>();\n rels: string[] = [];\n private relIds = new Set<string>();\n private links = new Map<string, string>();\n private media: { name: string; bytes: Uint8Array }[] = [];\n private types = new Set<string>();\n private numbering: { abs: string[]; nums: string[] } = { abs: [], nums: [] };\n private kinds = new Map<number, string>();\n private nextNum: number;\n private nextAbs: number;\n private styleXml: string[] = [];\n private groupNum = new Map<number, { num: number; base: number }>();\n private extra = new Map<string, number>();\n private docPr: number;\n private body!: ReturnType<Reader['body']>;\n private last: Out['kind'] | null = null;\n private wraps = new Map<string, Wrap>();\n private srcs: Map<string, string> | null = null;\n private tocs = false;\n private revs = new Map<string, Wrap>();\n private nextRev: number;\n\n constructor(readonly pkg: Pkg, private images: Map<string, Img>) {\n this.r = new Reader(pkg);\n this.s = pkg.doc;\n for (const id of pkg.rels.keys()) this.relIds.add(id);\n this.nextNum = pkg.nums.maxNum + 1;\n this.nextAbs = pkg.nums.maxAbs + 1;\n let max = 0;\n for (const m of this.s.matchAll(/<wp:docPr\\b[^>]*\\bid=\"(\\d+)\"/g)) max = Math.max(max, +m[1]);\n this.docPr = max + 1;\n this.nextRev = Math.max(0, ...[...this.s.matchAll(/\\bw:id=\"(\\d+)\"/g)].map(m => +m[1])) + 1;\n }\n\n run(doc: JSONContent, setup?: Setup): Uint8Array | null {\n const s = this.s;\n this.body = this.r.body();\n const { list, tail, body } = this.body;\n assemble(list);\n this.claim(doc.content ?? []);\n let rest = '';\n this.carryOver(list, x => (rest = x));\n let xml = this.container(flatten(doc.content ?? []), list, null);\n if (this.last === 'tbl' && list[list.length - 1]?.kind !== 'tbl') xml += '<w:p/>';\n const changed = new Map<string, string | Uint8Array>();\n const text = this.marginal(s.slice(0, body.open) + xml + rest + s.slice(tail), setup, changed);\n if (text !== s) changed.set(this.pkg.main, text);\n if (this.rels.length) {\n const path = this.pkg.relsPath(this.pkg.main);\n const old = this.pkg.text(path) ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>`;\n changed.set(path, old.replace(/<\\/Relationships>\\s*$/, this.rels.join('') + '</Relationships>'));\n }\n if (this.numbering.abs.length || this.numbering.nums.length) {\n const rel = this.pkg.byType('/numbering');\n let n = rel ? this.pkg.text(rel.target) : null;\n const path = rel ? rel.target : 'word/numbering.xml';\n if (n === null) {\n n = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"></w:numbering>`;\n this.types.add(`<Override PartName=\"/${path}\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>`);\n }\n const at = n.search(/<w:num\\b[\\s>]/);\n const abs = this.numbering.abs.join('');\n n = at === -1 ? n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, abs + '$1') : n.slice(0, at) + abs + n.slice(at);\n n = n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, this.numbering.nums.join('') + '$1');\n changed.set(path, n);\n if (!rel) {\n const id = this.relId();\n const path2 = this.pkg.relsPath(this.pkg.main);\n const old = (changed.get(path2) as string | undefined) ?? this.pkg.text(path2)!;\n changed.set(path2, old.replace(/<\\/Relationships>\\s*$/, `<Relationship Id=\"${id}\" Type=\"${REL}/numbering\" Target=\"numbering.xml\"/></Relationships>`));\n }\n }\n const settings = this.tocs && this.pkg.byType('/settings');\n const listed = settings && this.pkg.text(settings.target);\n if (settings && listed && !/<w:updateFields\\b/.test(listed)) {\n const at = listed.search(/<(?:w:hdrShapeDefaults|w:footnotePr|w:endnotePr|w:compat|w:docVars|w:rsids|m:mathPr|w:attachedSchema|w:themeFontLang|w:clrSchemeMapping|w:doNotIncludeSubdocsInStats|w:doNotAutoCompressPictures|w:forceUpgrade|w:captions|w:readModeInkLockDown|w:smartTagType|sl:schemaLibrary|w:shapeDefaults|w:doNotEmbedSmartTags|w:decimalSymbol|w:listSeparator)\\b|<\\/w:settings>/);\n changed.set(settings.target, listed.slice(0, at) + '<w:updateFields w:val=\"true\"/>' + listed.slice(at));\n }\n if (this.styleXml.length) {\n const rel = this.pkg.byType('/styles');\n if (rel) changed.set(rel.target, this.pkg.text(rel.target)!.replace(/<\\/w:styles>\\s*$/, this.styleXml.join('') + '</w:styles>'));\n }\n for (const m of this.media) {\n changed.set(m.name, m.bytes);\n const ext = m.name.split('.').pop()!.toLowerCase();\n const ct = this.pkg.text('[Content_Types].xml') ?? '';\n if (!new RegExp(`<Default\\\\b[^>]*Extension=\"${ext}\"`, 'i').test(ct)) this.types.add(`<Default Extension=\"${ext}\" ContentType=\"${({ jpg: 'image/jpeg', svg: 'image/svg+xml' } as Record<string, string>)[ext] ?? 'image/' + ext}\"/>`);\n }\n if (this.types.size) changed.set('[Content_Types].xml', (this.pkg.text('[Content_Types].xml') ?? '').replace(/<\\/Types>\\s*$/, [...this.types].join('') + '</Types>'));\n if (!changed.size) return null;\n const enc = new TextEncoder();\n const main = this.pkg.files.get(this.pkg.main)!;\n const out: Entry[] = this.pkg.entries.map(e => {\n const v = changed.get(e.name);\n if (v === undefined) return e;\n changed.delete(e.name);\n return entry(e.name, typeof v === 'string' ? enc.encode(v) : v, e);\n });\n for (const [name, v] of changed) out.push(entry(name, typeof v === 'string' ? enc.encode(v) : v, main));\n return zip(out);\n }\n\n private claim(nodes: JSONContent[]) {\n for (const n of nodes) {\n const ref = n.attrs?.ref;\n const o = typeof ref === 'string' ? this.r.refs.get(ref) : undefined;\n if (o && !this.used.has(o) && this.fits(n, o)) {\n this.used.add(o);\n this.claimed.set(n, o);\n }\n if (n.content) this.claim(n.content);\n }\n }\n\n private fits(n: JSONContent, o: Block | Row | Cell): boolean {\n if ('cells' in o) return n.type === 'tableRow';\n if ('col' in o) return (n.type === 'tableCell' || n.type === 'tableHeader') && o.node !== null;\n if (o.kind === 'p') return n.type === 'paragraph' || n.type === 'heading';\n if (o.kind === 'lock') return n.type === 'paragraph';\n if (o.kind === 'toc') return n.type === 'toc';\n return ({ pb: 'pageBreak', hr: 'horizontalRule', tbl: 'table' } as Record<string, string>)[o.kind] === n.type;\n }\n\n private carryOver(list: Block[], end: (x: string) => void) {\n let pending = '';\n for (const b of list) {\n if (this.used.has(b)) {\n if (pending) this.carry.set(b, pending);\n pending = '';\n } else {\n if (b.lead.trim()) pending += b.lead;\n const pPr = b.el.name === 'w:p' && kid(b.el, 'w:pPr');\n if (pPr && kid(pPr, 'w:sectPr')) pending += `<w:p>${this.s.slice(pPr.start, pPr.end)}</w:p>`;\n }\n for (const row of b.rows) for (const c of row.cells) this.carryOver(c.blocks, x => this.left.set(c, x));\n }\n if (pending) end(pending);\n }\n\n private container(outs: Out[], list: Block[], fallback: Block | null): string {\n const pairs = outs.map(o => ({ o, b: (this.claimed.get(o.node) ?? null) as Block | null }));\n const lists = new Map<number, { o: Out; b: Block | null }[]>();\n for (const p of pairs) if (p.o.list) lists.get(p.o.list.group)?.push(p) ?? lists.set(p.o.list.group, [p]);\n for (const [group, mine] of lists) this.decide(group, mine);\n let xml = '';\n this.last = null;\n pairs.forEach(({ o, b }, i) => {\n const near = (test: (b: Block) => boolean): Block | null => {\n for (let d = 1; d < pairs.length; d++) {\n const x = pairs[i - d]?.b;\n if (x && test(x)) return x;\n const y = pairs[i + d]?.b;\n if (y && test(y)) return y;\n }\n for (const x of list) if (test(x)) return x;\n return fallback && test(fallback) ? fallback : null;\n };\n const prefix = b ? (this.carry.get(b) ?? '') + b.lead : '';\n xml += prefix + this.emit(o, b, near, fallback);\n this.last = o.kind;\n });\n return xml;\n }\n\n private emit(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const s = this.s;\n if (b && b.kind === 'lock') return s.slice(b.start, b.end);\n if (o.kind === 'p') return this.para(o, b, near, fallback);\n if (o.kind === 'pb') return b ? s.slice(b.start, b.end) : '<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>';\n if (o.kind === 'hr') return b ? s.slice(b.start, b.end) : '<w:p><w:pPr><w:pBdr><w:bottom w:val=\"single\" w:sz=\"6\" w:space=\"1\" w:color=\"auto\"/></w:pBdr></w:pPr></w:p>';\n if (o.kind === 'tbl') return this.table(o, b, near);\n if (o.kind === 'toc') return b && sig(o.node) === sig(b.node) ? s.slice(b.start, b.end) : this.toc(o.node);\n return this.code(o);\n }\n\n private marginal(text: string, setup: Setup | undefined, changed: Map<string, string | Uint8Array>): string {\n if (!setup || (!setup.page && setup.header === undefined && setup.footer === undefined && setup.numbers === undefined)) return text;\n const end = text.lastIndexOf('</w:body>');\n const opens = (i: number) => /^<w:sectPr[\\s>/]/.test(text.slice(i, i + 11));\n let start = -1;\n let close = text.lastIndexOf('</w:sectPr>', end);\n if (close >= 0 && !text.slice(close + 11, end).trim()) {\n let depth = 1;\n let i = close;\n while (depth > 0 && i > 0) {\n let o = text.lastIndexOf('<w:sectPr', i - 1);\n while (o >= 0 && !opens(o)) o = text.lastIndexOf('<w:sectPr', o - 1);\n const c = text.lastIndexOf('</w:sectPr>', i - 1);\n if (c > o) { depth++; i = c; } else if (o < 0) break; else { if (text[text.indexOf('>', o) - 1] !== '/') depth--; i = o; }\n }\n start = i;\n close += 11;\n } else {\n start = close = end;\n }\n let sec = start === end ? '<w:sectPr></w:sectPr>' : text.slice(start, close);\n if (sec.endsWith('/>') && !sec.includes('</w:sectPr>')) sec = sec.slice(0, -2) + '></w:sectPr>';\n const after = ['w:pgMar', 'w:paperSrc', 'w:pgBorders', 'w:lnNumType', 'w:pgNumType', 'w:cols', 'w:formProt', 'w:vAlign', 'w:noEndnote', 'w:titlePg', 'w:textDirection', 'w:bidi', 'w:rtlGutter', 'w:docGrid', 'w:printerSettings', 'w:sectPrChange'];\n const put = (name: string, xml: string, before: string[]) => {\n const re = new RegExp(`<${name}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${name}>)`);\n if (re.test(sec)) { sec = sec.replace(re, xml); return; }\n const at = before.map(b => sec.search(new RegExp(`<${b}[\\\\s>/]`))).filter(i => i >= 0);\n const i = at.length ? Math.min(...at) : sec.lastIndexOf('</w:sectPr>');\n sec = sec.slice(0, i) + xml + sec.slice(i);\n };\n const tw = (px: number) => Math.round(px * 15);\n if (setup.page) {\n const { width, height, margins: [top, right, bottom, left] } = setup.page;\n put('w:pgSz', `<w:pgSz w:w=\"${tw(width)}\" w:h=\"${tw(height)}\"${width > height ? ' w:orient=\"landscape\"' : ''}/>`, after);\n const was = /<w:pgMar\\b[^>]*\\/>/.exec(sec)?.[0] ?? '';\n const keep = attrs(was.replace(/^<w:pgMar|\\/>$/g, '')).filter(([k]) => !['w:top', 'w:right', 'w:bottom', 'w:left'].includes(k));\n if (!keep.some(([k]) => k === 'w:header')) keep.push(['w:header', '708'], ['w:footer', '708'], ['w:gutter', '0']);\n put('w:pgMar', `<w:pgMar w:top=\"${tw(top)}\" w:right=\"${tw(right)}\" w:bottom=\"${tw(bottom)}\" w:left=\"${tw(left)}\" ${keep.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>`, after.slice(1));\n }\n const part = (kind: 'header' | 'footer', body: string) => {\n sec = sec.replace(new RegExp(`<w:${kind}Reference\\\\b[^>]*\\\\bw:type=\"default\"[^>]*/>`), '');\n if (!body) return;\n let n = 1;\n while (this.pkg.files.has(`word/${kind}${n}.xml`) || changed.has(`word/${kind}${n}.xml`)) n++;\n const id = this.relId();\n const tag = kind === 'header' ? 'w:hdr' : 'w:ftr';\n changed.set(`word/${kind}${n}.xml`, `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<${tag} xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"${REL}\">${body}</${tag}>`);\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/${kind}\" Target=\"${kind}${n}.xml\"/>`);\n this.types.add(`<Override PartName=\"/word/${kind}${n}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.${kind}+xml\"/>`);\n const open = sec.indexOf('>') + 1;\n sec = sec.slice(0, open) + `<w:${kind}Reference w:type=\"default\" r:id=\"${id}\"/>` + sec.slice(open);\n };\n const line = (words: string, page: boolean) => {\n const field = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> PAGE </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r><w:r><w:t>1</w:t></w:r><w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const run = words ? `<w:r><w:t xml:space=\"preserve\">${escape(words)}</w:t></w:r>` : '';\n if (!words && !page) return '';\n return `<w:p><w:pPr>${page && words ? `<w:tabs><w:tab w:val=\"right\" w:pos=\"${this.textWidth()}\"/></w:tabs>` : page ? '<w:jc w:val=\"right\"/>' : ''}</w:pPr>${run}${page && words ? '<w:r><w:tab/></w:r>' : ''}${page ? field : ''}</w:p>`;\n };\n if (setup.header !== undefined) part('header', line(setup.header, false));\n if (setup.footer !== undefined || setup.numbers !== undefined) part('footer', line(setup.footer ?? '', !!setup.numbers));\n return text.slice(0, start) + sec + text.slice(close);\n }\n\n private toc(node: JSONContent): string {\n this.tocs = true;\n const styles = this.pkg.styles;\n const sect = this.body.sect;\n const twips = (el: ReturnType<typeof kid>, name: string, fallback: number) => Number((el && attr(this.s, el, name)) ?? fallback);\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const width = twips(size, 'w:w', 12240) - twips(mar, 'w:left', 1440) - twips(mar, 'w:right', 1440);\n const list = JSON.parse(String(node.attrs?.entries ?? '[]')) as [number, string][];\n const begin = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> TOC \\\\o \"1-3\" \\\\h \\\\z \\\\u </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>';\n const end = '<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const style = (test: RegExp, fallback: string) => escape(styles.find(name => test.test(name.trim())) ?? fallback);\n const title = node.attrs?.title ? `<w:p><w:pPr><w:pStyle w:val=\"${style(/^toc heading$/i, 'TOCHeading')}\"/></w:pPr><w:r><w:t xml:space=\"preserve\">${escape(String(node.attrs.title))}</w:t></w:r></w:p>` : '';\n const rows = list.length\n ? list.map(([level, text], i) => `<w:p><w:pPr><w:pStyle w:val=\"${style(new RegExp(`^toc ${level}$`, 'i'), `TOC${level}`)}\"/><w:tabs><w:tab w:val=\"right\" w:leader=\"dot\" w:pos=\"${width}\"/></w:tabs></w:pPr>${i ? '' : begin}<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>${i === list.length - 1 ? end : ''}</w:p>`).join('')\n : `<w:p>${begin}<w:r><w:t>No table of contents entries found.</w:t></w:r>${end}</w:p>`;\n return `<w:sdt><w:sdtPr><w:docPartObj><w:docPartGallery w:val=\"Table of Contents\"/><w:docPartUnique/></w:docPartObj></w:sdtPr><w:sdtContent>${title}${rows}</w:sdtContent></w:sdt>`;\n }\n\n private decide(group: number, mine: { o: Out; b: Block | null }[]) {\n const top = mine.find(p => p.o.list!.depth === 0) ?? mine[0];\n const type = top.o.list!.type;\n const hit = mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type && p.o.list!.depth === 0 && this.kindOf(p.b.list.num, p.b.list.lvl) === type)\n ?? mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type);\n if (hit) this.groupNum.set(group, { num: hit.b!.list!.num, base: Math.max(0, hit.b!.list!.lvl - hit.o.list!.depth) });\n else this.groupNum.set(group, { num: this.newNum(type, top.o.list!.start), base: 0 });\n }\n\n private kindOf(num: number, lvl: number): string | null {\n return this.kinds.get(num) ?? this.pkg.nums.kind(num, lvl);\n }\n\n private newNum(type: string, start: number): number {\n let abs = -1;\n for (const b of this.r.refs.values()) if ('kind' in b && b.list && b.list.lvl === 0 && b.list.type === type) {\n abs = this.pkg.nums.nums.get(b.list.num)?.abs ?? -1;\n break;\n }\n if (abs === -1) for (const [id, lvls] of this.pkg.nums.abs) if ((lvls.get(0)?.fmt === 'bullet') === (type === 'bulletList') && lvls.get(0)?.fmt !== 'none') {\n abs = id;\n break;\n }\n if (abs === -1) {\n abs = this.nextAbs++;\n const fmts = type === 'bulletList' ? ['bullet'] : ['decimal', 'lowerLetter', 'lowerRoman'];\n const lvls = Array.from({ length: 9 }, (_, l) => {\n const fmt = fmts[l % fmts.length];\n const text = fmt === 'bullet' ? ['•', '◦', '▪'][l % 3] : `%${l + 1}.`;\n return `<w:lvl w:ilvl=\"${l}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"${fmt}\"/><w:lvlText w:val=\"${text}\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"${720 * (l + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }).join('');\n this.numbering.abs.push(`<w:abstractNum w:abstractNumId=\"${abs}\"><w:multiLevelType w:val=\"hybridMultilevel\"/>${lvls}</w:abstractNum>`);\n }\n const num = this.nextNum++;\n this.kinds.set(num, type);\n this.numbering.nums.push(`<w:num w:numId=\"${num}\"><w:abstractNumId w:val=\"${abs}\"/>${type === 'orderedList' ? `<w:lvlOverride w:ilvl=\"0\"><w:startOverride w:val=\"${start}\"/></w:lvlOverride>` : ''}</w:num>`);\n return num;\n }\n\n private listPr(o: Out, b: Block | null): { num: number; lvl: number } | null {\n if (!o.list) return null;\n const g = this.groupNum.get(o.list.group)!;\n if (b?.list && b.ctx && b.ctx.type === o.list.type && b.ctx.depth === o.list.depth && (o.list.depth > 0 || b.list.num === g.num)) return b.list;\n const lvl = Math.min(8, g.base + o.list.depth);\n if (this.kindOf(g.num, lvl) === o.list.type) return { num: g.num, lvl };\n const key = `${o.list.group}:${o.list.type}`;\n if (!this.extra.has(key)) this.extra.set(key, this.newNum(o.list.type, o.list.start));\n return { num: this.extra.get(key)!, lvl };\n }\n\n private kindTest(o: Out): (b: Block) => boolean {\n const level = o.node.type === 'heading' ? Number(o.node.attrs?.level ?? 1) : null;\n if (o.task !== null) return b => b.kind === 'p' && b.task !== null;\n if (level) return b => b.kind === 'p' && b.level === level;\n if (o.list) return b => b.kind === 'p' && !!b.list && b.ctx?.type === o.list!.type;\n if (o.quote) return b => b.kind === 'p' && b.quote;\n return b => b.kind === 'p' && !b.list && b.task === null && !b.level && !b.quote;\n }\n\n private para(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const pr = this.listPr(o, b);\n const same = b && o.cont === null && o.quote === b.quote && (o.task ?? null) === b.task && (pr ? !!b.list && pr.num === b.list.num && pr.lvl === b.list.lvl : !b.list);\n if (b && same && sig(o.node) === sig(b.node)) return this.s.slice(b.start, b.end);\n const src = b ?? near(this.kindTest(o)) ?? (fallback?.kind === 'p' ? fallback : null);\n return (b ? opened(this.s, b.el) : '<w:p>') + this.pPr(o, b, src, pr) + this.inline(o, b, src, near) + '</w:p>';\n }\n\n private pPr(o: Out, b: Block | null, src: Block | null, pr: { num: number; lvl: number } | null): string {\n const s = this.s;\n const styles = this.pkg.styles;\n const el = src && kid(src.el, 'w:pPr');\n let xml = el ? s.slice(el.start, el.end) : '';\n const set: Record<string, string | null> = {};\n if (!b && xml) {\n const rPr = kid(el!, 'w:rPr');\n xml = rebuild(xml, 'w:pPr', P, { 'w:sectPr': null, 'w:pPrChange': null, 'w:rPr': rPr ? rebuild(s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null }) || null : null });\n }\n const root = xml ? parse(xml).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:pStyle');\n const was = { style: styleEl ? attr(xml, styleEl, 'w:val') : null, level: src?.level ?? null, quote: src?.quote ?? false, list: src?.list ?? null };\n let style = was.style;\n const level = o.node.type === 'heading' ? Math.min(6, Math.max(1, Number(o.node.attrs?.level ?? 1))) : null;\n if (level !== was.level) {\n set['w:outlineLvl'] = null;\n if (level) style = this.headingStyle(level);\n else if (styles.heading(style)) style = null;\n }\n if (!level && o.quote !== was.quote) style = o.quote ? this.quoteStyle() : null;\n if (pr) {\n if (!(was.list && was.list.num === pr.num && was.list.lvl === pr.lvl)) set['w:numPr'] = `<w:numPr><w:ilvl w:val=\"${pr.lvl}\"/><w:numId w:val=\"${pr.num}\"/></w:numPr>`;\n if (!was.list) {\n set['w:ind'] = null;\n if (!src) style = styles.find(name => /^list paragraph$/i.test(name));\n }\n } else if (was.list || get('w:numPr')) {\n set['w:numPr'] = null;\n if (styles.numPr(style)) style = null;\n }\n if (style !== was.style) set['w:pStyle'] = style ? `<w:pStyle w:val=\"${escape(style)}\"/>` : null;\n const jcEl = 'w:jc' in set ? undefined : get('w:jc');\n const direct = jcEl ? attr(xml, jcEl, 'w:val') : null;\n const want = value('align', o.node.attrs?.align) as string | null;\n if (align(direct ?? styles.jc(style)) !== want) {\n set['w:jc'] = align(styles.jc(style)) === want ? null : `<w:jc w:val=\"${({ center: 'center', right: 'right', justify: 'both' } as Record<string, string>)[want ?? ''] ?? 'left'}\"/>`;\n }\n const spEl = get('w:spacing');\n const spacing = spEl ? attrs(xml.slice(spEl.start, spEl.open)) : [];\n const had = (name: string) => spacing.find(([k]) => k === name)?.[1] ?? null;\n const line = value('line', o.node.attrs?.line) as number | null;\n const after = value('after', o.node.attrs?.after) as number | null;\n const auto = !had('w:lineRule') || had('w:lineRule') === 'auto';\n const drift = (had('w:line') && auto ? Math.round(+had('w:line')! / 2.4) / 100 : null) !== line || (had('w:after') ? +had('w:after')! / 20 : null) !== after;\n if ((b || line !== null || after !== null) && drift) {\n const kept = spacing.filter(([k]) => k !== 'w:line' && k !== 'w:lineRule' && k !== 'w:after' && !(k === 'w:afterAutospacing' && after !== null));\n if (line !== null) kept.push(['w:line', String(Math.round(line * 240))], ['w:lineRule', 'auto']);\n else if (had('w:line') && !auto) kept.push(['w:line', had('w:line')!], ['w:lineRule', had('w:lineRule')!]);\n if (after !== null) kept.push(['w:after', String(Math.round(after * 20))]);\n set['w:spacing'] = kept.length ? `<w:spacing ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (!pr) {\n const indEl = 'w:ind' in set ? undefined : get('w:ind');\n const list = indEl ? attrs(xml.slice(indEl.start, indEl.open)).filter(([k]) => k !== 'w:left' && k !== 'w:start') : [];\n const left = indEl ? attr(xml, indEl, 'w:left') ?? attr(xml, indEl, 'w:start') : null;\n const target = o.cont !== null ? this.contLeft(o) : 720 * (Number(o.node.attrs?.indent ?? 0) || 0);\n const now = left !== null ? +left : styles.left(style);\n if (o.cont !== null ? now !== target : Math.max(0, Math.round(now / 720)) !== Math.round(target / 720)) {\n if (target !== styles.left(style)) list.unshift(['w:left', String(target)]);\n set['w:ind'] = list.length ? `<w:ind ${list.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n }\n return Object.keys(set).length ? rebuild(xml, 'w:pPr', P, set) : xml;\n }\n\n private contLeft(o: Out): number {\n const g = this.groupNum.get(o.cont!.group);\n const left = g ? this.pkg.nums.level(g.num, g.base + o.cont!.depth)?.left : null;\n return left ?? 720 * (o.cont!.depth + 1);\n }\n\n private headingStyle(level: number): string {\n const found = this.pkg.styles.headingId(level);\n if (found) return found;\n const id = this.pkg.styles.byId.has(`Heading${level}`) ? `Heading${level}W` : `Heading${level}`;\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n const size = [32, 28, 26, 24, 22, 22][level - 1];\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"heading ${level}\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"9\"/><w:qFormat/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"${level - 1}\"/></w:pPr><w:rPr><w:b/><w:bCs/><w:sz w:val=\"${size}\"/><w:szCs w:val=\"${size}\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private quoteStyle(): string {\n const found = this.pkg.styles.find(name => /^quote$/i.test(name)) ?? this.pkg.styles.find(name => /quote/i.test(name));\n if (found) return found;\n const id = this.pkg.styles.byId.has('Quote') ? 'QuoteW' : 'Quote';\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"Quote\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"29\"/><w:qFormat/><w:pPr><w:spacing w:before=\"200\" w:after=\"160\"/><w:ind w:left=\"864\" w:right=\"864\"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val=\"404040\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private markRun(b: Block): { run: Run; fmt: Fmt } {\n const pPr = kid(b.el, 'w:pPr');\n const rPr = pPr && kid(pPr, 'w:rPr');\n if (!rPr) return { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n const xml = rebuild(this.s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null });\n const fmt = this.r.fmt(rPr);\n return { run: { open: '<w:r>', rPr: xml, fmt, el: null, parent: null }, fmt };\n }\n\n private inline(o: Out, b: Block | null, src: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const units: Unit[] = [];\n const counts = new Map<Run, number>();\n for (const p of b ? b.pieces : []) {\n let n = p.run ? counts.get(p.run) ?? 0 : 0;\n const fmt = fmtAt(p);\n const base = p.span ? fmtAt({ ...p, span: null }) : fmt;\n if (p.img) units.push({ ch: '\\uFFFC', raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, img: p.img });\n else if (p.text === null) units.push({ ch: null, raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, box: p.box });\n else if (p.raw !== null) units.push({ ch: p.text, raw: p.raw, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n else for (const ch of p.text) units.push({ ch, raw: null, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n if (p.run) counts.set(p.run, n);\n }\n const A = units.filter(u => u.ch !== null);\n const B: { ch: string; fmt: Fmt; key: string; img?: Record<string, unknown> }[] = [];\n let lastFmt = plain;\n for (const n of o.node.content ?? []) {\n if (n.type === 'text') {\n const f = fmtOf(n.marks as never);\n const k = keyOf(f);\n lastFmt = f;\n for (const ch of n.text ?? '') B.push({ ch: ch === '\\r' ? '\\n' : ch, fmt: f, key: k });\n } else if (n.type === 'hardBreak') B.push({ ch: '\\n', fmt: lastFmt, key: keyOf(lastFmt) });\n else if (n.type === 'image') B.push({ ch: '\\uFFFC', fmt: lastFmt, key: keyOf(lastFmt), img: n.attrs ?? {} });\n }\n const boxes = units.filter(u => u.box);\n let box: string | null = null;\n if (o.task !== null && !boxes.some(u => !u.run)) {\n const tpl = near(x => x.task !== null) ?? [...this.r.refs.values()].find((x): x is Block => 'kind' in x && x.task !== null) ?? null;\n const sdt = tpl?.pieces.find(p => p.box && !p.run)?.raw;\n box = checked(sdt ?? '<w:sdt><w:sdtPr><w14:checkbox xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\"><w14:checked w14:val=\"0\"/><w14:checkedState w14:val=\"2612\" w14:font=\"MS Gothic\"/><w14:uncheckedState w14:val=\"2610\" w14:font=\"MS Gothic\"/></w14:checkbox></w:sdtPr><w:sdtContent><w:r><w:rPr><w:rFonts w:ascii=\"MS Gothic\" w:eastAsia=\"MS Gothic\" w:hAnsi=\"MS Gothic\" w:hint=\"eastAsia\"/></w:rPr><w:t>☐</w:t></w:r></w:sdtContent></w:sdt>', o.task);\n B.unshift({ ch: ' ', fmt: B[0]?.fmt ?? plain, key: B[0]?.key ?? keyOf(plain) });\n }\n const map = diff(A.map(u => u.ch!), B.map(x => x.ch));\n const back = new Int32Array(A.length).fill(-1);\n map.forEach((i, j) => { if (i >= 0) back[i] = j; });\n const intact = new Set<Span>();\n const spans = new Map<Span, number[]>();\n A.forEach((u, i) => { if (u.span) spans.get(u.span)?.push(i) ?? spans.set(u.span, [i]); });\n for (const [sp, idx] of spans) {\n const j0 = back[idx[0]];\n if (idx.every((i, k) => back[i] === j0 + k && j0 >= 0 && B[back[i]].key === keyOf(A[i].fmt))) intact.add(sp);\n }\n const slot = new Int32Array(A.length + 1);\n for (let k = 1; k <= A.length; k++) slot[k] = back[k - 1] >= 0 ? back[k - 1] + 1 : slot[k - 1];\n const at: Unit[][] = Array.from({ length: B.length + 1 }, () => []);\n let chars = 0;\n for (const u of units) {\n if (u.ch !== null) chars++;\n else if (!u.box || o.task !== null) at[slot[chars]].push(u);\n }\n const paraBase = b ? this.markRun(b) : this.firstRun(src);\n const out: Glyph[] = [];\n if (box) out.push({ ch: null, raw: box, run: null, ctx: [], u: null, fmt: plain });\n this.wraps.clear();\n for (const u of units) for (const w of u.ctx) if (w.link && !this.wraps.has(w.link)) this.wraps.set(w.link, w);\n const lastChar = () => { for (let k = out.length - 1; k >= 0; k--) if (out[k].ch !== null) return out[k]; return null; };\n const next = new Int32Array(B.length + 1).fill(-1);\n for (let k = B.length - 1; k >= 0; k--) next[k] = map[k] >= 0 ? map[k] : next[k + 1];\n for (let j = 0; j <= B.length; j++) {\n for (const u of at[j]) out.push({ ch: null, raw: u.box && !u.run && b && b.task !== o.task ? checked(u.raw!, !!o.task) : u.raw, run: u.run, ctx: u.ctx, u, fmt: u.fmt });\n if (j === B.length) break;\n const i = map[j];\n const want = B[j];\n if (want.img) {\n const u = i >= 0 ? A[i] : null;\n if (u?.img) {\n const kept = picture(u.img) === picture(want.img);\n out.push({ ch: u.ch, raw: kept ? u.raw : this.patch(u.raw!, u.img, want.img), run: u.run, ctx: u.ctx, u: kept ? u : null, fmt: u.fmt });\n } else out.push({ ch: want.ch, raw: this.drawing(want.img), run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, ctx: [], u: null, fmt: plain });\n continue;\n }\n if (i >= 0) {\n const u = A[i];\n if (u.span && intact.has(u.span)) {\n if (i === 0 || A[i - 1].span !== u.span) out.push({ ch: null, raw: null, run: null, ctx: u.ctx, u: null, fmt: u.fmt, xml: u.span.xml });\n continue;\n }\n const from = u.span ? u.base : u.fmt;\n const keep = u.ch === '\\n' || keyOf(from) === want.key;\n const fmt = keep ? from : want.fmt;\n const run = keep && u.run ? u.run : this.derive(u.run ?? paraBase.run, from, want.fmt);\n out.push({ ch: u.ch, raw: u.raw, run, ctx: this.revised(this.linked(u.ctx, fmt.link, lastChar()), fmt.rev), u: keep && u.run ? u : null, fmt });\n } else {\n const left = lastChar();\n const right = next[j + 1] >= 0 ? A[next[j + 1]] : null;\n const base = left ? { run: left.run!, fmt: left.fmt } : right ? { run: right.run ?? paraBase.run, fmt: right.span ? right.base : right.fmt } : paraBase;\n const run = keyOf(base.fmt) === want.key ? base.run : this.derive(base.run, base.fmt, want.fmt);\n const shared: Wrap[] = [];\n if (left && right) for (let k = 0; k < left.ctx.length && left.ctx[k] === right.ctx[k]; k++) if (!left.ctx[k].link) shared.push(left.ctx[k]);\n out.push({ ch: want.ch, raw: null, run, ctx: this.revised(this.linked(shared, want.fmt.link, left), want.fmt.rev), u: null, fmt: want.fmt });\n }\n }\n let xml = '';\n let stack: Wrap[] = [];\n let cur: { run: Run; glyphs: Glyph[] } | null = null;\n const flush = () => {\n if (cur) xml += this.runXml(cur.run, cur.glyphs, counts);\n cur = null;\n };\n const sync = (ctx: Wrap[]) => {\n let k = 0;\n while (k < stack.length && k < ctx.length && stack[k] === ctx[k]) k++;\n if (k === stack.length && k === ctx.length) return;\n flush();\n for (let x = stack.length - 1; x >= k; x--) xml += stack[x].close;\n for (let x = k; x < ctx.length; x++) xml += ctx[x].open;\n stack = ctx;\n };\n for (const g of out) {\n sync(g.ctx);\n if (g.xml || !g.run) {\n flush();\n xml += g.xml ?? g.raw ?? '';\n continue;\n }\n if (!cur || cur.run !== g.run) {\n flush();\n cur = { run: g.run, glyphs: [] };\n }\n cur.glyphs.push(g);\n }\n flush();\n sync([]);\n return xml;\n }\n\n private firstRun(src: Block | null): { run: Run; fmt: Fmt } {\n const p = src?.pieces.find(x => x.text !== null && x.run && !x.span);\n if (p) return { run: { ...p.run!, open: '<w:r>', el: null }, fmt: p.run!.fmt };\n return src ? this.markRun(src) : { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n }\n\n private linked(ctx: Wrap[], link: string | null, left: Glyph | null): Wrap[] {\n let cur: string | null = null;\n for (const w of ctx) if (w.link) cur = w.link;\n if (cur === link) return ctx;\n const out = ctx.filter(w => !w.link);\n if (!link) return out;\n let wrap = left?.ctx.find(w => w.link === link) ?? this.wraps.get(link);\n if (!wrap) {\n const tag = link.startsWith('#') ? `<w:hyperlink w:anchor=\"${escape(link.slice(1))}\" w:history=\"1\">` : `<w:hyperlink r:id=\"${this.link(link)}\" w:history=\"1\">`;\n wrap = { open: tag, close: '</w:hyperlink>', link, ins: false };\n this.wraps.set(link, wrap);\n }\n const at = out.findIndex(w => w.ins);\n return at === -1 ? [...out, wrap] : [...out.slice(0, at), wrap, ...out.slice(at)];\n }\n\n private revised(ctx: Wrap[], rev: string | null): Wrap[] {\n const out = ctx.filter(w => !w.rev || w.rev === rev);\n if (!rev || out.some(w => w.rev === rev)) return out;\n let wrap = this.revs.get(rev);\n if (!wrap) {\n const [kind, , author, date] = JSON.parse(rev) as string[];\n const tag = kind === 'ins' ? 'w:ins' : 'w:del';\n wrap = { open: `<${tag} w:id=\"${this.nextRev++}\" w:author=\"${escape(author || 'Documents')}\" w:date=\"${escape(date || new Date().toISOString().replace(/\\.\\d+Z$/, 'Z'))}\">`, close: `</${tag}>`, link: null, ins: true, rev };\n this.revs.set(rev, wrap);\n }\n return [...out, wrap];\n }\n\n private link(href: string): string {\n for (const r of this.pkg.rels.values()) if (r.external && r.target === href && r.type.endsWith('/hyperlink')) return r.id;\n if (!this.links.has(href)) {\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/hyperlink\" Target=\"${escape(href)}\" TargetMode=\"External\"/>`);\n this.links.set(href, id);\n }\n return this.links.get(href)!;\n }\n\n private relId(): string {\n let n = this.relIds.size + 1;\n while (this.relIds.has(`rId${n}`)) n++;\n this.relIds.add(`rId${n}`);\n return `rId${n}`;\n }\n\n private derive(run: Run, from: Fmt, to: Fmt): Run {\n const cache = ((run as Run & { derived?: Map<string, Run> }).derived ??= new Map());\n const key = keyOf(from) + '>' + keyOf(to);\n if (!cache.has(key)) cache.set(key, { open: run.open, rPr: this.delta(run.rPr, from, to), fmt: to, el: null, parent: null });\n return cache.get(key)!;\n }\n\n private delta(rPr: string, from: Fmt, to: Fmt): string {\n const root = rPr ? parse(rPr).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:rStyle');\n const style = styleEl ? attr(rPr, styleEl, 'w:val') : null;\n const sf = style ? this.pkg.styles.char(style) : {};\n const set: Record<string, string | null> = {};\n const toggle = (on: boolean, was: boolean, name: string, cs: string, given: boolean | undefined) => {\n if (on === was) return;\n set[name] = on ? `<${name}/>` : given ? `<${name} w:val=\"0\"/>` : null;\n if (!on) set[cs] = null;\n };\n toggle(to.b, from.b, 'w:b', 'w:bCs', sf.b);\n toggle(to.i, from.i, 'w:i', 'w:iCs', sf.i);\n if (to.u !== from.u) set['w:u'] = to.u ? '<w:u w:val=\"single\"/>' : sf.u ? '<w:u w:val=\"none\"/>' : null;\n if (to.s !== from.s) {\n set['w:strike'] = to.s ? '<w:strike/>' : sf.s ? '<w:strike w:val=\"0\"/>' : null;\n if (!to.s) set['w:dstrike'] = null;\n }\n if (to.va !== from.va) set['w:vertAlign'] = to.va ? `<w:vertAlign w:val=\"${to.va === 'sup' ? 'superscript' : 'subscript'}\"/>` : sf.va ? '<w:vertAlign w:val=\"baseline\"/>' : null;\n if (to.color !== from.color) set['w:color'] = to.color ? `<w:color w:val=\"${to.color.slice(1).toUpperCase()}\"/>` : sf.color ? '<w:color w:val=\"auto\"/>' : null;\n if (to.size !== from.size) {\n const hp = to.size ? Math.round(parseFloat(to.size) * 2) : 0;\n set['w:sz'] = hp ? `<w:sz w:val=\"${hp}\"/>` : null;\n set['w:szCs'] = hp ? `<w:szCs w:val=\"${hp}\"/>` : null;\n }\n if (to.hl !== from.hl) {\n const name = to.hl ? Object.keys(highlights).find(k => '#' + highlights[k] === to.hl) : undefined;\n set['w:highlight'] = name ? `<w:highlight w:val=\"${name}\"/>` : null;\n const shd = get('w:shd');\n if (to.hl && !name) set['w:shd'] = `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${to.hl.slice(1).toUpperCase()}\"/>`;\n else if (shd && color(attr(rPr, shd, 'w:fill'))) set['w:shd'] = null;\n }\n if (to.font !== from.font || to.code !== from.code) {\n const want = to.code ? 'Courier New' : to.font;\n const fonts = get('w:rFonts');\n const kept = fonts ? attrs(rPr.slice(fonts.start, fonts.open)).filter(([k]) => !/^w:(ascii|hAnsi|cs|asciiTheme|hAnsiTheme|cstheme)$/.test(k)) : [];\n if (want) kept.unshift(['w:ascii', want], ['w:hAnsi', want], ['w:cs', want]);\n set['w:rFonts'] = kept.length ? `<w:rFonts ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (to.link && !from.link && !style) {\n const id = this.pkg.styles.find((name, id) => /^hyperlink$/i.test(name) || id === 'Hyperlink', 'character');\n if (id) set['w:rStyle'] = `<w:rStyle w:val=\"${escape(id)}\"/>`;\n } else if (!to.link && from.link && this.pkg.styles.isLink(style)) set['w:rStyle'] = null;\n return Object.keys(set).length ? rebuild(rPr, 'w:rPr', R, set) : rPr;\n }\n\n private runXml(run: Run, glyphs: Glyph[], counts: Map<Run, number>): string {\n if (run.el && glyphs.length === counts.get(run) && glyphs.every((g, n) => g.u && g.u.run === run && g.u.idx === n)) return this.s.slice(run.el.start, run.el.end);\n let body = '';\n let text = '';\n const tag = glyphs[0]?.ctx.some(w => w.rev?.startsWith('[\"del\"')) ? 'w:delText' : 'w:t';\n const flush = () => {\n if (text) body += `<${tag}${/^\\s|\\s$/.test(text) ? ' xml:space=\"preserve\"' : ''}>${escape(text)}</${tag}>`;\n text = '';\n };\n for (const g of glyphs) {\n if (g.ch === null || g.raw !== null || special[g.ch]) {\n flush();\n body += g.raw ?? special[g.ch!];\n } else text += g.ch;\n }\n flush();\n return run.open + run.rPr + body + '</w:r>';\n }\n\n private embed(src: string): { id: string; size: [number, number] | null } {\n if (!this.srcs) {\n this.srcs = new Map();\n for (const b of this.r.refs.values()) if ('pieces' in b) for (const p of b.pieces) if (p.img && p.pic) this.srcs.set(String(p.img.src), p.pic.embed);\n }\n const id = this.srcs.get(src);\n if (id) return { id, size: null };\n const added = this.addMedia(src);\n if (!added) throw new Error('Image could not be read');\n this.srcs.set(src, added.id);\n return added;\n }\n\n private wrapped(raw: string, side: unknown): string {\n const anchor = /<wp:anchor\\b/.test(raw);\n if (!side && !anchor) return raw;\n const ns = (tag: string) => attrs((/<wp:(?:inline|anchor)\\b([^>]*)>/.exec(tag)?.[1] ?? '')).filter(([k]) => k.startsWith('xmlns')).map(([k, v]) => ` ${k}=\"${v}\"`).join('');\n const part = (name: string) => new RegExp(`<${name}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${name}>)`).exec(raw)?.[0] ?? '';\n const body = part('wp:extent') + part('wp:effectExtent');\n const rest = part('wp:docPr') + part('wp:cNvGraphicFramePr') + part('a:graphic');\n if (!side) return raw.replace(/<wp:anchor\\b[\\s\\S]*<\\/wp:anchor>/, `<wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"${ns(raw)}>${body}${rest}</wp:inline>`);\n const head = `<wp:anchor distT=\"0\" distB=\"0\" distL=\"114300\" distR=\"114300\" simplePos=\"0\" relativeHeight=\"251658240\" behindDoc=\"0\" locked=\"0\" layoutInCell=\"1\" allowOverlap=\"1\"${ns(raw)}>`\n + `<wp:simplePos x=\"0\" y=\"0\"/><wp:positionH relativeFrom=\"column\"><wp:align>${side === 'right' ? 'right' : 'left'}</wp:align></wp:positionH><wp:positionV relativeFrom=\"paragraph\"><wp:posOffset>0</wp:posOffset></wp:positionV>`;\n return raw.replace(anchor ? /<wp:anchor\\b[\\s\\S]*<\\/wp:anchor>/ : /<wp:inline\\b[\\s\\S]*<\\/wp:inline>/, `${head}${body}<wp:wrapSquare wrapText=\"bothSides\"/>${rest}</wp:anchor>`);\n }\n\n private drawing(img: Record<string, unknown>): string {\n const media = this.embed(String(img.src ?? ''));\n const max = Math.round(this.textWidth() / 15);\n let w = Math.round(Number(img.width)) || 0;\n let h = Math.round(Number(img.height)) || 0;\n const [nw, nh] = media.size ?? [w || 300, h || 200];\n if (!w && !h) [w, h] = nw > max ? [max, Math.round((nh * max) / nw)] : [nw, nh];\n else if (!h) h = Math.round((w * nh) / nw);\n else if (!w) w = Math.round((h * nw) / nh);\n const id = this.docPr++;\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n const xml = `<w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"><wp:extent ${ext}/><wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>${meta(`<wp:docPr id=\"${id}\" name=\"Picture ${id}\"/>`, img)}<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"Picture ${id}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${media.id}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext ${ext}/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing>`;\n return img.wrap ? this.wrapped(xml, img.wrap) : xml;\n }\n\n private patch(raw: string, old: Record<string, unknown>, img: Record<string, unknown>): string {\n let xml = raw;\n const w = Math.round(Number(img.width)) || Number(old.width);\n const h = Math.round(Number(img.height)) || Number(old.height);\n if (w !== old.width || h !== old.height) {\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n xml = xml.replace(/<wp:extent\\b[^>]*\\/>/, `<wp:extent ${ext}/>`).replace(/(<a:xfrm\\b[^>]*>[\\s\\S]*?<a:ext)\\b[^>]*\\/>/, `$1 ${ext}/>`);\n }\n if ((img.alt || null) !== (old.alt || null) || (img.title || null) !== (old.title || null)) xml = xml.replace(/<wp:docPr\\b[^>]*>/, tag => meta(tag, img));\n if (img.src !== old.src) xml = xml.replace(/(<a:blip\\b[^>]*\\br:embed=\")[^\"]*\"/, `$1${this.embed(String(img.src ?? '')).id}\"`);\n if ((img.wrap || null) !== (old.wrap || null)) xml = this.wrapped(xml, img.wrap);\n return xml;\n }\n\n private textWidth(): number {\n const sect = this.body.sect;\n const s = this.s;\n const sz = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n return (sz ? +(attr(s, sz, 'w:w') ?? 12240) : 12240) - (mar ? +(attr(s, mar, 'w:left') ?? 1440) + +(attr(s, mar, 'w:right') ?? 1440) : 2880);\n }\n\n private addMedia(src: string): { id: string; name: string; size: [number, number] | null } | null {\n const m = /^data:([^;,]+)(;base64)?,(.*)$/s.exec(src);\n let img = this.images.get(src);\n if (m) {\n const raw = m[2] ? atob(m[3]) : decodeURIComponent(m[3]);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);\n img = { bytes, mime: m[1] };\n }\n if (!img) return null;\n const ext = ({ 'image/jpeg': 'jpeg', 'image/svg+xml': 'svg' } as Record<string, string>)[img.mime] ?? img.mime.split('/')[1] ?? 'png';\n let n = this.media.length + 1;\n while (this.pkg.files.has(`word/media/w100n-${n}.${ext}`)) n++;\n const name = `w100n-${n}.${ext}`;\n const dir = this.pkg.main.slice(0, this.pkg.main.lastIndexOf('/') + 1);\n this.media.push({ name: `${dir}media/${name}`, bytes: img.bytes });\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/image\" Target=\"media/${name}\"/>`);\n return { id, name, size: dims(img.bytes) };\n }\n\n private code(o: Out): string {\n const style = this.pkg.styles.find(name => /^(source code|html preformatted|code|plain text)$/i.test(name));\n const text = (o.node.content ?? []).map(n => n.text ?? '').join('');\n const pPr = style ? `<w:pPr><w:pStyle w:val=\"${escape(style)}\"/></w:pPr>` : '<w:pPr><w:spacing w:after=\"0\"/></w:pPr>';\n const rPr = style ? '' : '<w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\"/></w:rPr>';\n return text.split('\\n').map(line => `<w:p>${pPr}${line ? `<w:r>${rPr}<w:t xml:space=\"preserve\">${escape(line).replace(/\\t/g, '</w:t><w:tab/><w:t xml:space=\"preserve\">')}</w:t></w:r>` : ''}</w:p>`).join('');\n }\n\n private table(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const s = this.s;\n if (b && sig(o.node) === sig(b.node)) return s.slice(b.start, b.end);\n const rows = o.node.content ?? [];\n const layout = grid(rows);\n const cols = Math.max(1, ...layout.map(r => r.reduce((m, sl) => Math.max(m, sl.col + sl.span), 0)));\n let head: string;\n let tail = '';\n if (b) {\n const first = b.rows[0];\n const last = b.rows[b.rows.length - 1];\n head = opened(s, b.el) + s.slice(b.el.open, first ? first.el.start - first.lead.length : b.el.close);\n if (last) tail = s.slice(last.el.end, b.el.close);\n if (b.cols && cols !== b.cols) {\n head = head.replace(/(<w:tblGrid\\b[^>]*>)([\\s\\S]*?)(<\\/w:tblGrid>)/, (_, open: string, inside: string, close: string) => {\n const list: string[] = [...(inside.match(/<w:gridCol\\b[^>]*\\/>/g) ?? [])];\n while (list.length < cols) list.push(list[list.length - 1] ?? '<w:gridCol/>');\n return open + list.slice(0, cols).join('') + close;\n });\n }\n } else {\n const tpl = near(x => x.kind === 'tbl');\n const pr = tpl && kid(tpl.el, 'w:tblPr');\n const style = this.pkg.styles.find(name => /^(table grid|сітка таблиці|сетка таблицы)$/i.test(name), 'table');\n const line = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>`;\n const tblPr = pr ? s.slice(pr.start, pr.end) : `<w:tblPr>${style ? `<w:tblStyle w:val=\"${escape(style)}\"/>` : ''}<w:tblW w:w=\"0\" w:type=\"auto\"/>${style ? '' : `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`}<w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr>`;\n head = `<w:tbl>${tblPr}<w:tblGrid>${`<w:gridCol w:w=\"${Math.floor(this.textWidth() / cols)}\"/>`.repeat(cols)}</w:tblGrid>`;\n }\n const width = Math.floor(this.textWidth() / cols);\n const sized: number[] = [];\n for (const r of layout) for (const sl of r) {\n const own = sl.cell && value('colwidth', sl.cell.attrs?.colwidth) as number[] | null;\n if (own && own.length === sl.span) own.forEach((w, k) => (sized[sl.col + k] ??= w));\n }\n const known = sized.length === cols && sized.every(Boolean);\n const had = [...head.matchAll(/<w:gridCol\\b[^>]*\\bw:w=\"(\\d+)\"/g)].map(m => Math.floor(+m[1] / 15));\n if (known && had.join() !== sized.join()) {\n const list = sized.map(w => `<w:gridCol w:w=\"${Math.round(w * 15)}\"/>`).join('');\n head = head.replace(/(<w:tblGrid\\b[^>]*>)[\\s\\S]*?(<\\/w:tblGrid>)/, `$1${list}$2`);\n }\n const own = (col: number, span: number) => known ? sized.slice(col, col + span) : null;\n const borders = value('borders', o.node.attrs?.borders);\n if (borders !== value('borders', b?.node.attrs?.borders)) {\n const line = (side: string) => `<w:${side} w:val=\"${borders === 'none' ? 'none' : 'single'}\" w:sz=\"4\" w:space=\"0\" w:color=\"${borders === 'none' ? 'auto' : '94A3B8'}\"/>`;\n const all = `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`;\n head = /<w:tblBorders\\b/.test(head) ? head.replace(/<w:tblBorders\\b[\\s\\S]*?<\\/w:tblBorders>|<w:tblBorders\\/>/, all)\n : head.replace(/(<w:tblPr\\b[^>]*>(?:(?!<\\/w:tblPr>)[\\s\\S])*?)(<w:shd\\b|<w:tblLayout\\b|<w:tblCellMar\\b|<w:tblLook\\b|<w:tblCaption\\b|<w:tblDescription\\b|<w:tblPrChange\\b|<\\/w:tblPr>)/, `$1${all}$2`);\n }\n let xml = head;\n let above: (Cell | null)[] = [];\n let aboveRow: Row | null = null;\n const cover = new Map<JSONContent, Cell | null>();\n const firstRow = rows.map(r => this.claimed.get(r) as Row | undefined).find(Boolean) ?? null;\n rows.forEach((node, r) => {\n const R = (this.claimed.get(node) as Row | undefined) ?? null;\n const slots = layout[r];\n const shape = (sl: Slot) => (sl.cell ? `${(this.claimed.get(sl.cell) as Cell | undefined)?.ref ?? '-'}@${sl.col}` : `c${sl.col}`);\n const now: (Cell | null)[] = [];\n if (R && sig(node) === sig(R.node) && R.cells.map(c => (c.vm === 'continue' ? `c${c.col}` : `${c.ref}@${c.col}`)).join() === slots.map(shape).join()) {\n xml += R.lead + s.slice(R.el.start, R.el.end);\n for (const c of R.cells) for (let k = c.col; k < c.col + c.span; k++) now[k] = c;\n for (const sl of slots) if (sl.cell && Number(sl.cell.attrs?.rowspan ?? 1) > 1) cover.set(sl.cell, (this.claimed.get(sl.cell) as Cell | undefined) ?? null);\n above = now;\n aboveRow = R;\n return;\n }\n const srcRow = R ?? aboveRow ?? firstRow;\n const header = (node.content ?? []).length > 0 && (node.content ?? []).every(c => c.type === 'tableHeader');\n let rowHead = R ? R.head : srcRow ? srcRow.head.replace(/<w:(ins|del)\\b[^>]*\\/>|<w:trPrChange\\b[\\s\\S]*?<\\/w:trPrChange>/g, '') : '';\n if (!R) {\n if (!header) rowHead = rowHead.replace(/<w:tblHeader\\b[^>]*\\/>/g, '').replace(/<w:trPr><\\/w:trPr>|<w:trPr\\/>/, '');\n else if (!/<w:tblHeader\\b/.test(rowHead)) rowHead = /<w:trPr>/.test(rowHead) ? rowHead.replace('<w:trPr>', '<w:trPr><w:tblHeader/>') : rowHead + '<w:trPr><w:tblHeader/></w:trPr>';\n }\n xml += (R ? R.lead + opened(s, R.el) : '<w:tr>') + rowHead;\n for (const sl of slots) {\n if (!sl.cell) {\n const cont = R?.cells.find(c => c.vm === 'continue' && c.col === sl.col);\n if (cont) xml += cont.lead + s.slice(cont.el.start, cont.el.end);\n else xml += `<w:tc>${this.tcPr(cover.get(sl.from!) ?? above[sl.col] ?? null, sl.span, 'continue', width, true, own(sl.col, sl.span))}<w:p/></w:tc>`;\n now[sl.col] = cover.get(sl.from!) ?? null;\n continue;\n }\n const C = (this.claimed.get(sl.cell) as Cell | undefined) ?? null;\n const vm = Number(sl.cell.attrs?.rowspan ?? 1) > 1 ? 'restart' : null;\n const srcCell = C ?? above[sl.col] ?? (srcRow?.cells.find(c => c.col === sl.col) ?? null);\n if (vm) cover.set(sl.cell, srcCell);\n for (let k = sl.col; k < sl.col + sl.span; k++) now[k] = srcCell;\n if (C && sig(sl.cell) === sig(C.node!) && C.span === sl.span && C.vm === vm) {\n xml += C.lead + s.slice(C.el.start, C.el.end);\n continue;\n }\n const fallback = srcCell?.blocks.find(x => x.kind === 'p') ?? null;\n let inside = this.container(flatten(sl.cell.content ?? []), C ? C.blocks : [], fallback) + (C ? this.left.get(C) ?? '' : '');\n if (!this.last || this.last === 'tbl') inside += '<w:p/>';\n xml += (C ? C.lead + opened(s, C.el) : '<w:tc>') + this.tcPr(srcCell, sl.span, vm, width, !C, own(sl.col, sl.span), value('background', sl.cell.attrs?.background) as string | null) + inside + (C ? C.tail : '') + '</w:tc>';\n }\n const lastCell = R?.cells[R.cells.length - 1];\n xml += (R && lastCell ? s.slice(lastCell.el.end, R.el.close) : '') + '</w:tr>';\n above = now;\n aboveRow = srcRow;\n });\n return xml + tail + '</w:tbl>';\n }\n\n private tcPr(src: Cell | null, span: number, vm: 'restart' | 'continue' | null, width: number, clone = true, own: number[] | null = null, fill?: string | null): string {\n const s = this.s;\n const el = src && kid(src.el, 'w:tcPr');\n const xml = el ? s.slice(el.start, el.end) : '';\n const tcW = el && kid(el, 'w:tcW');\n const sized = own ? Math.round(own.reduce((a, w) => a + w, 0) * 15) : null;\n const resized = sized !== null && !(tcW && attr(s, tcW, 'w:type') === 'dxa' && Math.abs(+(attr(s, tcW, 'w:w') ?? 0) - sized) < 15);\n const was = src?.node ? value('background', src.node.attrs?.background) : null;\n const painted = fill !== undefined && fill !== was;\n if (!clone && src && src.span === span && src.vm === vm && !resized && !painted) return xml;\n const set: Record<string, string | null> = { 'w:gridSpan': span > 1 ? `<w:gridSpan w:val=\"${span}\"/>` : null, 'w:vMerge': vm === 'restart' ? '<w:vMerge w:val=\"restart\"/>' : vm ? '<w:vMerge/>' : null, 'w:hMerge': null };\n if (clone) Object.assign(set, { 'w:cellIns': null, 'w:cellDel': null, 'w:cellMerge': null, 'w:tcPrChange': null });\n if (painted) set['w:shd'] = fill ? `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${fill.slice(1).toUpperCase()}\"/>` : null;\n if (resized) set['w:tcW'] = `<w:tcW w:w=\"${sized}\" w:type=\"dxa\"/>`;\n else if (!tcW && !src) set['w:tcW'] = `<w:tcW w:w=\"${width * span}\" w:type=\"dxa\"/>`;\n else if (tcW && src && src.span !== span && attr(xml, tcW, 'w:type') === 'dxa') set['w:tcW'] = `<w:tcW w:w=\"${Math.round((+(attr(xml, tcW, 'w:w') ?? 0) * span) / src.span)}\" w:type=\"dxa\"/>`;\n return rebuild(xml, 'w:tcPr', TC, set);\n }\n}\n\nexport async function fetched(src: string): Promise<Img> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`Image could not be read: ${src}`);\n return { bytes: new Uint8Array(await res.arrayBuffer()), mime: res.headers.get('content-type')?.split(';')[0] || 'image/png' };\n}\n\nexport async function images(doc: JSONContent, load: (src: string) => Promise<Img>): Promise<Map<string, Img>> {\n const out = new Map<string, Img>();\n const walk = async (n: JSONContent) => {\n if (n.type === 'image' && typeof n.attrs?.src === 'string' && !out.has(n.attrs.src)) {\n const src: string = n.attrs.src;\n if (src && !src.startsWith('data:')) out.set(src, await load(src));\n }\n for (const k of n.content ?? []) await walk(k);\n };\n await walk(doc);\n return out;\n}\n","import { Pkg } from './pkg';\nimport { assemble, Reader, type JSONContent } from './read';\nimport { fetched, images, Writer, type Img, type Setup } from './write';\nimport { attr, kid } from './xml';\n\nexport type { JSONContent } from './read';\nexport type { Img, Setup } from './write';\n\nexport type DocxModel = { marginal: { header: string; footer: string; numbers: boolean }; doc: JSONContent; styles: { name: string; id: string; heading: number | null }[]; page: { width: number; height: number; margins: [number, number, number, number] } };\n\nexport async function readDocx(bytes: ArrayBuffer): Promise<DocxModel> {\n const pkg = new Pkg(new Uint8Array(bytes));\n const { list, sect } = new Reader(pkg).body();\n const content = assemble(list);\n const s = pkg.doc;\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const px = (el: typeof size, name: string, fallback: number) => Math.round((Math.abs(+((el && attr(s, el, name)) ?? fallback)) / 15) * 100) / 100;\n const words = (kind: string) => {\n const ref = sect?.kids.find(k => k.name === `w:${kind}Reference` && attr(s, k, 'w:type') === 'default');\n const part = ref && pkg.rels.get(attr(s, ref, 'r:id') ?? '');\n const xml = part ? pkg.text(part.target) ?? '' : '';\n return { text: [...xml.matchAll(/<w:t(?:\\s[^>]*)?>([^<]*)<\\/w:t>/g)].map(m => m[1]).join('').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').trim(), page: /\\bPAGE\\b/.test(xml) };\n };\n const head = words('header');\n const foot = words('footer');\n return {\n marginal: { header: head.text, footer: foot.page ? foot.text.replace(/\\s*\\d+$/, '') : foot.text, numbers: foot.page },\n doc: { type: 'doc', content: content.length ? content : [{ type: 'paragraph', attrs: { align: null, indent: 0, ref: null } }] },\n styles: pkg.styles.list(),\n page: { width: px(size, 'w:w', 12240), height: px(size, 'w:h', 15840), margins: [px(mar, 'w:top', 1440), px(mar, 'w:right', 1440), px(mar, 'w:bottom', 1440), px(mar, 'w:left', 1440)] },\n };\n}\n\nexport async function writeDocx(original: ArrayBuffer, doc: JSONContent, load: (src: string) => Promise<Img> = fetched, setup?: Setup): Promise<ArrayBuffer> {\n const pkg = new Pkg(new Uint8Array(original));\n const out = new Writer(pkg, await images(doc, load)).run(doc, setup);\n return out ? out.slice().buffer : original.slice(0);\n}\n","import { Extension, Mark, Node, type Editor } from '@tiptap/core';\nimport Collaboration from '@tiptap/extension-collaboration';\nimport CollaborationCaret from '@tiptap/extension-collaboration-caret';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport { TaskItem, TaskList } from '@tiptap/extension-list';\nimport { TableKit } from '@tiptap/extension-table';\nimport { Color, FontFamily, FontSize, TextStyle } from '@tiptap/extension-text-style';\nimport type { Node as Block, Slice } from '@tiptap/pm/model';\nimport { Plugin, PluginKey, TextSelection, type EditorState, type Transaction } from '@tiptap/pm/state';\nimport { StepMap, type Mappable } from '@tiptap/pm/transform';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\nimport StarterKit from '@tiptap/starter-kit';\nimport { ySyncPluginKey } from '@tiptap/y-tiptap';\nimport type * as Y from 'yjs';\nimport type { Text } from '../text';\nimport { Pager } from './pager';\n\nexport type Spot = { id: string; from: number; to: number };\ntype Notes = { spots: Spot[]; active: string | null; pending: { from: number; to: number } | null; set: DecorationSet };\n\nexport const notes = new PluginKey<Notes>('w100n-notes');\n\nconst blocks = ['paragraph', 'heading', 'bulletList', 'orderedList', 'listItem', 'taskList', 'taskItem', 'blockquote', 'codeBlock', 'horizontalRule',\n 'table', 'tableRow', 'tableHeader', 'tableCell', 'pageBreak', 'toc'];\n\nconst changed = (trs: readonly Transaction[]) => {\n const ranges: [number, number][] = [];\n trs.forEach((tr, n) => tr.steps.forEach((step, i) => {\n const slice = (step as { slice?: { openStart: number; openEnd: number; content: { firstChild: Block | null } } }).slice;\n if (!slice || (!slice.openStart && !slice.openEnd && !slice.content.firstChild?.isBlock)) return;\n const after = tr.mapping.slice(i + 1);\n for (const later of trs.slice(n + 1)) after.appendMapping(later.mapping);\n step.getMap().forEach((_a, _b, from, to) => ranges.push([after.map(from, -1), after.map(to, 1)]));\n }));\n return ranges;\n};\n\nconst Cells = Extension.create({\n name: 'cells',\n addGlobalAttributes: () => [\n { types: ['tableCell', 'tableHeader'], attributes: { background: { default: null, parseHTML: el => el.dataset.fill ?? null, renderHTML: attrs => attrs.background ? { 'data-fill': attrs.background, style: `background-color: ${attrs.background}` } : {} } } },\n { types: ['table'], attributes: { borders: { default: null, parseHTML: el => el.dataset.borders ?? null, renderHTML: attrs => attrs.borders ? { 'data-borders': attrs.borders } : {} } } },\n ],\n});\n\ntype Search = { query: string; matchCase: boolean; hits: { from: number; to: number }[]; at: number; set: DecorationSet };\n\nexport const searching = new PluginKey<Search>('w100n-search');\n\nconst lookup = (doc: Block, query: string, matchCase: boolean) => {\n const hits: { from: number; to: number }[] = [];\n if (!query) return hits;\n const needle = matchCase ? query : query.toLowerCase();\n doc.descendants((node, pos) => {\n if (!node.isTextblock) return true;\n let text = '';\n const at: number[] = [];\n node.forEach((child, offset) => {\n const part = child.isText ? child.text! : '\\uFFFC';\n for (let i = 0; i < part.length; i++) at.push(pos + 1 + offset + i);\n text += part;\n });\n const hay = matchCase ? text : text.toLowerCase();\n for (let i = hay.indexOf(needle); i >= 0; i = hay.indexOf(needle, i + needle.length)) hits.push({ from: at[i], to: at[i + needle.length - 1] + 1 });\n return false;\n });\n return hits;\n};\n\nconst Search = Extension.create({\n name: 'search',\n addProseMirrorPlugins: () => [new Plugin<Search>({\n key: searching,\n state: {\n init: () => ({ query: '', matchCase: false, hits: [], at: 0, set: DecorationSet.empty }),\n apply(tr, value) {\n const meta = tr.getMeta(searching) as Partial<Pick<Search, 'query' | 'matchCase' | 'at'>> | undefined;\n if (!meta && !tr.docChanged) return value;\n const next = { ...value, ...meta };\n const hits = lookup(tr.doc, next.query, next.matchCase);\n const at = hits.length ? ((next.at % hits.length) + hits.length) % hits.length : 0;\n return { ...next, hits, at, set: DecorationSet.create(tr.doc, hits.map((h, i) => Decoration.inline(h.from, h.to, { class: i === at ? 'w100n-found is-current' : 'w100n-found' }))) };\n },\n },\n props: { decorations: state => searching.getState(state)!.set },\n })],\n});\n\nexport const replace = (editor: Editor, text: string, all: boolean) => {\n const { hits, at } = searching.getState(editor.state)!;\n if (!hits.length) return 0;\n const tr = editor.state.tr;\n for (const hit of all ? [...hits].reverse() : [hits[at]]) tr.insertText(text, hit.from, hit.to);\n editor.view.dispatch(tr);\n return all ? hits.length : 1;\n};\n\nexport const cleanPaste = (html: string) => html\n .replace(/<!--\\[if[\\s\\S]*?<!\\[endif\\]-->/g, '')\n .replace(/<o:p>[\\s\\S]*?<\\/o:p>/g, '')\n .replace(/\\sclass=(\"|')?Mso[^\"'\\s>]*\\1?/g, '')\n .replace(/<img\\b[^>]*\\ssrc=(\"|')file:[^\"']*\\1[^>]*>/gi, '')\n .replace(/\\sstyle=(\"|')([^\"']*)\\1/g, (_, q: string, css: string) => {\n const kept = css.split(';').map(x => x.trim()).filter(x => x && !/^mso-|^tab-stops|^font-family:\\s*[\"']?(Symbol|Wingdings)/i.test(x)).join('; ');\n return kept ? ` style=${q}${kept}${q}` : '';\n });\n\nconst Blocks = Extension.create({\n name: 'blocks',\n addGlobalAttributes: () => [{\n types: blocks,\n attributes: {\n align: { default: null, parseHTML: el => el.style.textAlign || null, renderHTML: attrs => attrs.align ? { style: `text-align: ${attrs.align}` } : {} },\n indent: { default: 0, parseHTML: el => Number(el.dataset.indent) || 0, renderHTML: attrs => attrs.indent ? { 'data-indent': attrs.indent, style: `margin-left: ${attrs.indent * 0.5}in` } : {} },\n line: { default: null, parseHTML: el => Number(el.dataset.line) || null, renderHTML: attrs => attrs.line ? { 'data-line': attrs.line, style: `line-height: ${attrs.line * 1.15}` } : {} },\n after: { default: null, parseHTML: el => el.dataset.after ? Number(el.dataset.after) : null, renderHTML: attrs => attrs.after === null || attrs.after === undefined ? {} : { 'data-after': attrs.after, style: `margin-bottom: ${attrs.after}pt` } },\n ref: { default: null, rendered: false, keepOnSplit: false },\n },\n }],\n addProseMirrorPlugins: () => [new Plugin({\n appendTransaction(trs, _old, state) {\n const ranges = changed(trs);\n if (!ranges.length) return null;\n const seen = new Map<string, { pos: number; node: Block }>();\n const drop: number[] = [];\n const visit = (node: Block, pos: number) => {\n const ref = node.attrs.ref as string | null;\n if (!ref) return;\n const first = seen.get(ref);\n if (!first) seen.set(ref, { pos, node });\n else if (!first.node.textContent && node.textContent) { drop.push(first.pos); seen.set(ref, { pos, node }); }\n else drop.push(pos);\n };\n const from = Math.max(0, Math.min(...ranges.map(r => r[0])));\n const to = Math.min(state.doc.content.size, Math.max(...ranges.map(r => r[1])));\n const $from = state.doc.resolve(from);\n const $to = state.doc.resolve(to);\n const start = Math.max(0, $from.index(0) - 1);\n const end = Math.min(state.doc.childCount, $to.index(0) + 2);\n let pos = 0;\n for (let i = 0; i < start; i++) pos += state.doc.child(i).nodeSize;\n for (let i = start; i < end; i++) {\n const top = state.doc.child(i);\n visit(top, pos);\n top.descendants((node, at) => visit(node, pos + 1 + at));\n pos += top.nodeSize;\n }\n if (!drop.length) return null;\n const tr = state.tr;\n for (const at of drop) tr.setNodeAttribute(at, 'ref', null);\n return tr;\n },\n })],\n});\n\nconst PageBreak = Node.create<{ label: string }>({\n name: 'pageBreak',\n group: 'block',\n atom: true,\n selectable: true,\n addOptions: () => ({ label: '' }),\n parseHTML: () => [{ tag: 'div[data-page-break]' }],\n renderHTML() {\n return ['div', { 'data-page-break': '', 'data-label': this.options.label, class: 'w100n-text-break', contenteditable: 'false' }];\n },\n});\n\nexport type Entry = [number, string];\n\nconst headings = (doc: Block, after: number) => {\n const found: { pos: number; level: number; text: string }[] = [];\n doc.descendants((node, pos) => {\n if (pos > after && node.type.name === 'heading' && node.attrs.level <= 3 && node.textContent.trim()) found.push({ pos, level: node.attrs.level, text: node.textContent.trim() });\n return !node.isTextblock;\n });\n return found;\n};\n\nexport function entries(doc: Block, relative: boolean, after: number): Entry[] {\n const list = headings(doc, after).map(h => [h.level, h.text] as Entry);\n const top = relative && list.length ? Math.min(...list.map(([level]) => level)) - 1 : 0;\n return list.map(([level, text]) => [level - top, text]);\n}\n\nconst Toc = Node.create<{ relative: boolean; label: string; empty: string }>({\n name: 'toc',\n group: 'block',\n atom: true,\n selectable: true,\n addOptions: () => ({ relative: false, label: '', empty: '' }),\n addAttributes: () => ({ entries: { default: '[]' }, title: { default: null } }),\n parseHTML: () => [{ tag: 'nav[data-toc]' }],\n renderHTML() {\n return ['nav', { 'data-toc': '', class: 'w100n-text-toc' }];\n },\n addNodeView() {\n return ({ editor, getPos }) => {\n const dom = document.createElement('nav');\n dom.className = 'w100n-text-toc';\n dom.contentEditable = 'false';\n const paint = () => {\n const at = getPos() ?? 0;\n const list = entries(editor.state.doc, this.options.relative, at);\n const head = document.createElement('b');\n head.textContent = this.options.label;\n const items = list.map(([level, text], i) => {\n const go = document.createElement('button');\n go.type = 'button';\n go.textContent = text;\n go.dataset.level = String(level);\n go.onclick = () => {\n const hit = headings(editor.state.doc, getPos() ?? 0)[i];\n if (hit) (editor.view.nodeDOM(hit.pos) as HTMLElement | null)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n };\n return go;\n });\n const empty = document.createElement('small');\n empty.textContent = this.options.empty;\n dom.replaceChildren(head, ...(items.length ? items : [empty]));\n };\n paint();\n return {\n dom,\n update: node => {\n if (node.type.name !== 'toc') return false;\n paint();\n return true;\n },\n ignoreMutation: () => true,\n };\n };\n },\n addProseMirrorPlugins() {\n const relative = this.options.relative;\n return [new Plugin({\n appendTransaction(trs, _old, state) {\n if (!trs.some(tr => tr.docChanged && !tr.getMeta(ySyncPluginKey))) return null;\n const at: number[] = [];\n state.doc.forEach((node, pos) => { if (node.type.name === 'toc') at.push(pos); });\n if (!at.length) return null;\n const tr = state.tr;\n for (const pos of at) {\n const fresh = JSON.stringify(entries(state.doc, relative, pos));\n if (state.doc.nodeAt(pos)!.attrs.entries !== fresh) tr.setNodeAttribute(pos, 'entries', fresh);\n }\n return tr.docChanged ? tr : null;\n },\n })];\n },\n});\n\nconst revision = (name: 'insertion' | 'deletion', tag: 'ins' | 'del') => Mark.create({\n name,\n inclusive: false,\n excludes: 'insertion deletion',\n addAttributes: () => ({ id: { default: null }, author: { default: '' }, date: { default: '' } }),\n parseHTML: () => [{ tag: `${tag}[data-rev]` }],\n renderHTML: ({ HTMLAttributes }) => [tag, { 'data-rev': HTMLAttributes.id, class: 'w100n-text-rev', title: HTMLAttributes.author }, 0],\n});\n\nexport type Change = { id: string; kind: 'insertion' | 'deletion'; author: string; date: string; text: string; from: number; to: number };\n\nconst seen = new WeakMap<Block, Change[]>();\n\nexport function changes(doc: Block): Change[] {\n const hit = seen.get(doc);\n if (hit) return hit;\n const out: Change[] = [];\n doc.descendants((node, pos) => {\n if (!node.isText) return;\n const mark = node.marks.find(m => m.type.name === 'insertion' || m.type.name === 'deletion');\n if (!mark) return;\n const last = out[out.length - 1];\n if (last && last.id === mark.attrs.id && last.kind === mark.type.name && last.to === pos) Object.assign(last, { text: last.text + node.text, to: pos + node.nodeSize });\n else out.push({ id: mark.attrs.id, kind: mark.type.name as Change['kind'], author: mark.attrs.author, date: mark.attrs.date, text: node.text!, from: pos, to: pos + node.nodeSize });\n });\n seen.set(doc, out);\n return out;\n}\n\nexport function decide(editor: Editor, accept: boolean, id?: string) {\n const { state } = editor;\n const tr = state.tr;\n for (const c of changes(state.doc).filter(c => !id || c.id === id).reverse()) {\n if ((c.kind === 'insertion') === accept) tr.removeMark(c.from, c.to, state.schema.marks[c.kind].create({ id: c.id, author: c.author, date: c.date }));\n else tr.delete(c.from, c.to);\n }\n if (tr.docChanged) editor.view.dispatch(tr);\n}\n\ntype Suggesting = { on: boolean; me: string };\nexport const suggesting = new PluginKey<Suggesting>('w100n-suggest');\n\nconst Suggest = Extension.create({\n name: 'suggest',\n addProseMirrorPlugins() {\n const stamp = (state: EditorState, kind: 'insertion' | 'deletion', from: number, to: number) => {\n const me = suggesting.getState(state)!.me;\n const own = [state.doc.resolve(from).nodeBefore, state.doc.resolve(to).nodeAfter].flatMap(n => n?.marks ?? []).find(m => m.type.name === kind && m.attrs.author === me);\n return state.schema.marks[kind].create(own ? own.attrs : { id: Math.random().toString(36).slice(2, 10), author: me, date: new Date().toISOString().replace(/\\.\\d+Z$/, 'Z') });\n };\n const strike = (tr: Transaction, state: EditorState, from: number, to: number) => {\n const parts: { from: number; to: number; added: boolean }[] = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n const a = Math.max(from, pos), b = Math.min(to, pos + node.nodeSize);\n if (b > a && !node.marks.some(m => m.type.name === 'deletion')) parts.push({ from: a, to: b, added: node.marks.some(m => m.type.name === 'insertion') });\n });\n const mark = stamp(state, 'deletion', from, to);\n for (const p of parts.reverse()) {\n if (p.added) tr.delete(p.from, p.to);\n else tr.addMark(p.from, p.to, mark);\n }\n };\n const type = (view: EditorView, from: number, to: number, text: string) => {\n const { state } = view;\n const tr = state.tr;\n if (to > from) strike(tr, state, from, to);\n const at = tr.mapping.map(to);\n const kept = (state.storedMarks ?? state.doc.resolve(from).marks()).filter(m => m.type.name !== 'insertion' && m.type.name !== 'deletion');\n tr.insert(at, state.schema.text(text, [...kept, stamp(state, 'insertion', from, to)]));\n tr.setSelection(TextSelection.create(tr.doc, at + text.length));\n view.dispatch(tr.scrollIntoView());\n return true;\n };\n return [new Plugin<Suggesting>({\n key: suggesting,\n state: {\n init: () => ({ on: false, me: '' }),\n apply: (tr, value) => tr.getMeta(suggesting) ?? value,\n },\n props: {\n handleTextInput(view, from, to, text) {\n return suggesting.getState(view.state)!.on && type(view, from, to, text);\n },\n handlePaste(view, _event, slice) {\n if (!suggesting.getState(view.state)!.on) return false;\n const { from, to } = view.state.selection;\n return type(view, from, to, slice.content.textBetween(0, slice.content.size, '\\n'));\n },\n handleKeyDown(view, event) {\n const { state } = view;\n if (!suggesting.getState(state)!.on || (event.key !== 'Backspace' && event.key !== 'Delete') || event.metaKey || event.ctrlKey || event.altKey) return false;\n const { from, to, empty, $from } = state.selection;\n const back = event.key === 'Backspace';\n let at = from;\n if (empty) {\n const skip = (pos: number) => state.doc.resolve(pos)[back ? 'nodeBefore' : 'nodeAfter']?.marks.some(m => m.type.name === 'deletion');\n while (skip(at)) at += back ? -1 : 1;\n if (back ? at <= $from.start() : at >= $from.end()) return false;\n }\n const tr = state.tr;\n if (empty) strike(tr, state, back ? at - 1 : at, back ? at : at + 1);\n else strike(tr, state, from, to);\n const caret = empty ? tr.mapping.map(back ? at - 1 : at + 1, back ? -1 : 1) : tr.mapping.map(back ? from : to);\n tr.setSelection(TextSelection.create(tr.doc, caret));\n view.dispatch(tr.scrollIntoView());\n return true;\n },\n },\n })];\n },\n});\n\nconst Note = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n addAttributes: () => ({ id: { default: null, renderHTML: attrs => ({ 'data-comment': attrs.id }) } }),\n renderHTML: ({ HTMLAttributes }) => ['span', HTMLAttributes, 0],\n});\n\nconst locks = new PluginKey<{ spans: { from: number; to: number }[]; set: DecorationSet }>('w100n-locks');\nconst locked = (node: Block) => node.type.name === 'paragraph' && String(node.attrs.ref ?? '').startsWith('lock:');\nconst scan = (doc: Block) => {\n const spans: { from: number; to: number }[] = [];\n doc.descendants((node, pos) => {\n if (!locked(node)) return true;\n spans.push({ from: pos, to: pos + node.nodeSize });\n return false;\n });\n return spans;\n};\n\nconst Locks = Extension.create<{ label: string }>({\n name: 'locks',\n addOptions: () => ({ label: '' }),\n addProseMirrorPlugins() {\n const shade = (doc: Block, spans: { from: number; to: number }[]) =>\n DecorationSet.create(doc, spans.map(s => Decoration.node(s.from, s.to, { class: 'w100n-text-lock', contenteditable: 'false', 'data-label': this.options.label })));\n return [new Plugin({\n key: locks,\n state: {\n init: (_config, state) => {\n const spans = scan(state.doc);\n return { spans, set: shade(state.doc, spans) };\n },\n apply(tr, value) {\n if (!tr.docChanged) return value;\n const fresh = tr.steps.some(step => {\n let found = false;\n (step as { slice?: Slice }).slice?.content.descendants(node => { found ||= locked(node); return !found; });\n return found;\n });\n const spans = fresh ? scan(tr.doc) : value.spans.map(s => ({ from: tr.mapping.map(s.from, 1), to: tr.mapping.map(s.to, -1) })).filter(s => s.to > s.from);\n return { spans, set: spans.length ? shade(tr.doc, spans) : DecorationSet.empty };\n },\n },\n filterTransaction(tr, state) {\n let spans = locks.getState(state)!.spans;\n if (!spans.length || !tr.docChanged) return true;\n return tr.mapping.maps.every(map => {\n let ok = true;\n map.forEach((from, to) => {\n for (const s of spans) if (((from < s.to && to > s.from) || (from > s.from && from < s.to)) && !(from <= s.from && to >= s.to)) ok = false;\n });\n spans = spans.map(s => ({ from: map.map(s.from, 1), to: map.map(s.to, -1) }));\n return ok;\n });\n },\n props: {\n decorations: state => locks.getState(state)!.set,\n handleKeyDown(view, event) {\n const back = event.key === 'Backspace';\n const { $from, empty } = view.state.selection;\n if ((!back && event.key !== 'Delete') || !empty || $from.depth < 1) return false;\n if (back ? $from.parentOffset !== 0 : $from.parentOffset !== $from.parent.content.size) return false;\n const at = back ? $from.before() : $from.after();\n const node = back ? view.state.doc.resolve(at).nodeBefore : view.state.doc.resolve(at).nodeAfter;\n if (!node || !locked(node)) return false;\n view.dispatch(view.state.tr.delete(back ? at - node.nodeSize : at, back ? at : at + node.nodeSize));\n return true;\n },\n },\n })];\n },\n});\n\nconst paint = (doc: Block, spots: Spot[], active: string | null, pending: Notes['pending']) => DecorationSet.create(doc, [\n ...spots.filter(s => s.to > s.from).map(s => Decoration.inline(s.from, s.to, { class: s.id === active ? 'w100n-text-note is-active' : 'w100n-text-note', 'data-note': s.id })),\n ...(pending && pending.to > pending.from ? [Decoration.inline(pending.from, pending.to, { class: 'w100n-text-note is-active' })] : []),\n]);\n\nconst remap = (tr: Transaction): Mappable => {\n const start = tr.before.content.findDiffStart(tr.doc.content);\n if (!tr.getMeta(ySyncPluginKey) || start === null) return tr.mapping;\n let { a, b } = tr.before.content.findDiffEnd(tr.doc.content)!;\n if (a < start) [a, b] = [start, b + start - a];\n if (b < start) [a, b] = [a + start - b, start];\n return new StepMap([start, a - start, b - start]);\n};\n\nconst Notes = Extension.create({\n name: 'notes',\n addProseMirrorPlugins: () => [new Plugin<Notes>({\n key: notes,\n state: {\n init: (_config, state) => ({ spots: [], active: null, pending: null, set: DecorationSet.create(state.doc, []) }),\n apply(tr, value) {\n const next = tr.getMeta(notes) as Partial<Notes> | undefined;\n if (!next && (!tr.docChanged || (!value.spots.length && !value.pending))) return value;\n const by = remap(tr);\n const map = <T extends { from: number; to: number }>(r: T): T => ({ ...r, from: by.map(r.from, 1), to: by.map(r.to, -1) });\n const merged = { ...value, spots: value.spots.map(map), pending: value.pending && map(value.pending), ...next };\n return { ...merged, set: paint(tr.doc, merged.spots, merged.active, merged.pending) };\n },\n },\n props: { decorations: state => notes.getState(state)!.set },\n })],\n});\n\nconst script = (name: 'superscript' | 'subscript', tag: 'sup' | 'sub', other: string) => Mark.create({\n name, excludes: other,\n parseHTML: () => [{ tag }, { style: `vertical-align=${name === 'superscript' ? 'super' : 'sub'}` }],\n renderHTML: () => [tag, 0],\n addKeyboardShortcuts() {\n return { [name === 'superscript' ? 'Mod-.' : 'Mod-,']: () => this.editor.commands.toggleMark(name) };\n },\n});\n\nexport function kit(kind: 'markdown' | 'docx', t: Pick<Text, 'pageBreak' | 'tasks' | 'locked' | 'toc' | 'tocEmpty'>, live?: { doc: Y.Doc; link: { awareness: unknown }; user: Record<string, string> } | null) {\n return [\n StarterKit.configure({ trailingNode: false, link: { openOnClick: false, autolink: true, defaultProtocol: 'https' }, dropcursor: { color: '#8b5cf6', width: 2 }, ...(live ? { undoRedo: false } as const : {}) }),\n TaskList, TaskItem.configure({ nested: true, a11y: { checkboxLabel: node => node.textContent || t.tasks } }),\n TableKit.configure({ table: { resizable: true, cellMinWidth: 32 } }), Cells, Search,\n Image.extend({\n addAttributes() {\n return { ...this.parent?.(), wrap: { default: null, parseHTML: el => el.dataset.wrap ?? null, renderHTML: attrs => attrs.wrap ? { 'data-wrap': attrs.wrap } : {} } };\n },\n }).configure({ inline: true, allowBase64: true, resize: { enabled: true, directions: ['top-left', 'top-right', 'bottom-left', 'bottom-right'], minWidth: 24, minHeight: 24, alwaysPreserveAspectRatio: true } }),\n Highlight.configure({ multicolor: true }), TextStyle, Color, FontSize, FontFamily, script('superscript', 'sup', 'subscript'), script('subscript', 'sub', 'superscript'),\n Blocks, PageBreak.configure({ label: t.pageBreak }), Toc.configure({ relative: kind === 'markdown', label: t.toc, empty: t.tocEmpty }), Note, Notes,\n ...(kind === 'docx' ? [Pager, Locks.configure({ label: t.locked }), revision('insertion', 'ins'), revision('deletion', 'del'), Suggest] : []),\n ...(live ? [Collaboration.configure({ document: live.doc }), CollaborationCaret.configure({ provider: live.link, user: live.user })] : []),\n ];\n}\n\nconst textblocks = (editor: Editor, change: (attrs: Record<string, unknown>) => Record<string, unknown>) => editor.chain().focus().command(({ tr, state }) => {\n state.doc.nodesBetween(state.selection.from, state.selection.to, (node, pos) => {\n if (!node.isTextblock) return true;\n for (const [key, value] of Object.entries(change(node.attrs))) if (node.attrs[key] !== value) tr.setNodeAttribute(pos, key, value);\n return false;\n });\n return true;\n}).run();\n\nexport const align = (editor: Editor, value: string | null) => textblocks(editor, () => ({ align: value === 'left' ? null : value }));\n\nexport const spacing = (editor: Editor, change: { line?: number | null; after?: number | null }) => textblocks(editor, () => change);\n\nexport const indent = (editor: Editor, step: number) => {\n const type = editor.isActive('taskItem') ? 'taskItem' : editor.isActive('listItem') ? 'listItem' : null;\n if (type) return step > 0 ? editor.chain().focus().sinkListItem(type).run() : editor.chain().focus().liftListItem(type).run();\n return textblocks(editor, attrs => ({ indent: Math.min(8, Math.max(0, Number(attrs.indent) + step)) }));\n};\n\nexport const clear = (editor: Editor) => {\n const chain = editor.chain().focus();\n for (const mark of ['bold', 'italic', 'underline', 'strike', 'code', 'highlight', 'textStyle']) chain.unsetMark(mark);\n chain.run();\n return textblocks(editor, () => ({ align: null, indent: 0 }));\n};\n\nexport function locate(doc: Block, list: { id: string; quote: string; anchor?: string }[]): Spot[] {\n if (!list.length) return [];\n const marked = new Map<string, { from: number; to: number; text: string }>();\n doc.descendants((node, pos) => {\n if (!node.isText) return;\n for (const mark of node.marks) {\n if (mark.type.name !== 'comment') continue;\n const found = marked.get(mark.attrs.id);\n if (found) Object.assign(found, { to: pos + node.nodeSize, text: found.text + node.text });\n else marked.set(mark.attrs.id, { from: pos, to: pos + node.nodeSize, text: node.text! });\n }\n });\n const claimed = new Set<string>();\n const search = (quote: string) => {\n const line = quote.split('\\n').find(part => part.trim())?.trim();\n let hit: { from: number; to: number } | null = null;\n if (line) doc.descendants((node, pos) => {\n if (hit) return false;\n if (!node.isTextblock) return true;\n const at = node.textBetween(0, node.content.size, undefined, '').indexOf(line);\n if (at >= 0) hit = { from: pos + 1 + at, to: pos + 1 + at + line.length };\n return false;\n });\n return hit;\n };\n return list.flatMap(c => {\n const own = [c.anchor, c.id].find(id => id && marked.has(id));\n let range: { from: number; to: number } | null | undefined = own ? marked.get(own) : undefined;\n if (!range) {\n const twin = [...marked].find(([id, m]) => !claimed.has(id) && m.text === c.quote);\n if (twin) { claimed.add(twin[0]); range = twin[1]; }\n }\n range ??= search(c.quote);\n return range ? [{ id: c.id, from: range.from, to: range.to }] : [];\n });\n}\n","import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\n\nexport type Page = { width: number; height: number; margins: [number, number, number, number] };\n\nexport const a4: Page = { width: 793.73, height: 1122.53, margins: [96, 96, 96, 96] };\nexport const letter = { width: 816, height: 1056 };\n\ntype Paging = { set: DecorationSet; page: Page; marks: { header: string; footer: string } };\n\nexport const paging = new PluginKey<Paging>('w100n-pager');\nconst skip = (el: Element) => el.classList.contains('w100n-text-gap') || el.classList.contains('ProseMirror-gapcursor');\n\nfunction measure(view: EditorView) {\n const { page } = paging.getState(view.state)!;\n const [top, , bottom] = page.margins;\n const room = page.height - top - bottom;\n const els = [...view.dom.children] as HTMLElement[];\n const gaps: { pos: number; height: number; page: number; end?: boolean }[] = [];\n let i = 0;\n let shift = 0;\n let start = 0;\n let last = 0;\n view.state.doc.forEach((node, offset) => {\n let el = els[i++];\n while (el && skip(el)) {\n if (el.classList.contains('w100n-text-gap')) shift += el.offsetHeight;\n el = els[i++];\n }\n if (!el) return;\n const y = el.offsetTop - shift;\n const end = y + el.offsetHeight;\n if (node.type.name === 'pageBreak') {\n gaps.push({ pos: offset + node.nodeSize, height: start + room - end + bottom + 24 + top, page: gaps.length + 1 });\n start = end;\n } else if (end > start + room && y > start) {\n gaps.push({ pos: offset, height: start + room - y + bottom + 24 + top, page: gaps.length + 1 });\n start = y;\n }\n while (end > start + room) start += room;\n last = end;\n });\n gaps.push({ pos: view.state.doc.content.size, height: Math.max(0, start + room - last), page: gaps.length + 1, end: true });\n return gaps.map(g => ({ ...g, height: Math.max(0, Math.round(g.height)) }));\n}\n\nexport const Pager = Extension.create({\n name: 'pager',\n addProseMirrorPlugins: () => [new Plugin<Paging>({\n key: paging,\n state: {\n init: () => ({ set: DecorationSet.empty, page: a4, marks: { header: '', footer: '' } }),\n apply(tr, value) {\n const next = tr.getMeta(paging) as Partial<Paging> | undefined;\n return { set: next?.set ?? value.set.map(tr.mapping, tr.doc), page: next?.page ?? value.page, marks: next?.marks ?? value.marks };\n },\n },\n props: { decorations: state => paging.getState(state)!.set },\n view(view) {\n let timer = 0;\n let sig = '';\n const run = () => {\n if (!view.dom.isConnected) return;\n const gaps = measure(view);\n const { marks } = paging.getState(view.state)!;\n const next = gaps.map(g => `${g.pos}:${g.height}`).join() + `|${marks.header}|${marks.footer}`;\n if (next === sig) return;\n sig = next;\n const line = (parent: HTMLElement, cls: string, text: string) => {\n if (!text) return;\n const span = document.createElement('span');\n span.className = cls;\n span.textContent = text;\n parent.append(span);\n };\n const first = Decoration.widget(0, () => {\n const el = document.createElement('div');\n el.className = 'w100n-text-first';\n el.contentEditable = 'false';\n line(el, 'w100n-text-head', marks.header);\n return el;\n }, { key: `first:${marks.header}`, side: -1, ignoreSelection: true });\n const set = DecorationSet.create(view.state.doc, [first, ...gaps.map(g => Decoration.widget(g.pos, () => {\n const el = document.createElement('div');\n el.className = g.end ? 'w100n-text-gap is-end' : 'w100n-text-gap';\n el.style.height = `${g.height}px`;\n el.dataset.page = String(g.page);\n el.contentEditable = 'false';\n line(el, 'w100n-text-foot', marks.footer);\n if (!g.end) line(el, 'w100n-text-head', marks.header);\n return el;\n }, { key: `${g.pos}:${g.height}:${g.page}:${marks.header}:${marks.footer}`, side: -1, ignoreSelection: true }))]);\n view.dispatch(view.state.tr.setMeta(paging, { set }).setMeta('addToHistory', false));\n };\n const later = (ms: number) => {\n clearTimeout(timer);\n timer = window.setTimeout(run, ms);\n };\n const watch = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => later(200));\n watch?.observe(view.dom);\n later(0);\n return {\n update: (next, prev) => {\n if (paging.getState(next.state)!.page !== paging.getState(prev)!.page || paging.getState(next.state)!.marks !== paging.getState(prev)!.marks) later(0);\n else if (next.state.doc !== prev.doc) later(400);\n },\n destroy: () => { clearTimeout(timer); watch?.disconnect(); },\n };\n },\n })],\n});\n","import type { JSONContent } from '@tiptap/core';\nimport type { Mark, Node } from '@tiptap/pm/model';\nimport { marked, type Token, type Tokens } from 'marked';\nimport { MarkdownSerializer, type MarkdownSerializerState } from 'prosemirror-markdown';\n\ntype Style = { bullet: string; delim: string; em: string; strong: string; fence: string; br: string; loose: boolean };\ntype Hint = { bullet?: string; delim?: string; loose?: boolean; fence?: string };\ntype Marks = { type: string; attrs?: Record<string, unknown> }[];\n\nexport type Parsed = { doc: JSONContent; raws: string[]; head: string; tail: string; style: Style; hints: Record<string, Hint>; crlf: boolean; bom: boolean };\nexport type Base = Omit<Parsed, 'doc'> & { nodes: Node[] };\n\nconst tags: Record<string, string> = { u: 'underline', ins: 'underline', mark: 'highlight', s: 'strike', del: 'strike', b: 'bold', strong: 'bold', i: 'italic', em: 'italic' };\n\nconst decode = (text: string) => text.includes('&')\n ? new DOMParser().parseFromString(`<p>${text.replace(/</g, '<')}</p>`, 'text/html').body.textContent ?? text\n : text;\n\nconst unique = (marks: Marks) => [...new Map(marks.map(m => [m.type, m])).values()];\n\nfunction inline(tokens: Token[] = [], outer: Marks = []): JSONContent[] {\n const out: JSONContent[] = [];\n let open: Marks = [];\n const marks = () => unique([...outer, ...open]);\n const text = (value: string, extra: Marks = []) => {\n const set = unique([...marks(), ...extra]);\n const clean = out[out.length - 1]?.type === 'hardBreak' ? value.replace(/^\\n/, '') : value;\n if (clean) out.push({ type: 'text', text: clean, ...(set.length ? { marks: set } : {}) });\n };\n const wrap = (children: Token[] | undefined, mark: Marks[number]) => out.push(...inline(children, [...marks(), mark]));\n for (const token of tokens) {\n if (token.type === 'text') {\n if (token.tokens) out.push(...inline(token.tokens, marks()));\n else text(decode(token.text));\n } else if (token.type === 'escape') text(decode(token.text));\n else if (token.type === 'strong') wrap(token.tokens, { type: 'bold' });\n else if (token.type === 'em') wrap(token.tokens, { type: 'italic' });\n else if (token.type === 'del') wrap(token.tokens, { type: 'strike' });\n else if (token.type === 'codespan') text(token.text, [{ type: 'code' }]);\n else if (token.type === 'br') out.push({ type: 'hardBreak' });\n else if (token.type === 'link') wrap(token.tokens, { type: 'link', attrs: { href: token.href } });\n else if (token.type === 'image') out.push({ type: 'image', attrs: { src: token.href, alt: token.text || null, title: token.title || null }, ...(marks().length ? { marks: marks() } : {}) });\n else if (token.type === 'html') {\n const tag = /^<(\\/?)([a-z]+)\\s*\\/?>$/i.exec(token.raw.trim());\n const name = tag?.[2].toLowerCase() ?? '';\n if (name === 'br') out.push({ type: 'hardBreak' });\n else if (!tags[name]) text(token.raw);\n else open = tag![1] ? open.filter(m => m.type !== tags[name]) : [...open, { type: tags[name] }];\n } else if (token.type !== 'checkbox') text(token.raw);\n }\n return out;\n}\n\nconst fill = (content: JSONContent[]) => content.length ? content : [{ type: 'paragraph' }];\n\nfunction block(token: Token, hints: Record<string, Hint>): JSONContent[] {\n const ref = (hint: Hint) => {\n const id = `md${Object.keys(hints).length + 1}`;\n hints[id] = hint;\n return id;\n };\n switch (token.type) {\n case 'space': case 'def': case 'checkbox': return [];\n case 'heading': return [{ type: 'heading', attrs: { level: token.depth }, content: inline(token.tokens) }];\n case 'paragraph': case 'text': return [{ type: 'paragraph', content: token.tokens ? inline(token.tokens) : inline([{ type: 'text', raw: token.text, text: token.text }]) }];\n case 'blockquote': return [{ type: 'blockquote', content: fill(token.tokens!.flatMap(t => block(t, hints))) }];\n case 'code': {\n const fence = /^ {0,3}(`{3,}|~{3,})/.exec(token.raw)?.[1][0];\n return [{ type: 'codeBlock', attrs: { language: token.lang || null, ref: fence ? ref({ fence: fence.repeat(3) }) : null }, content: token.text ? [{ type: 'text', text: token.text }] : [] }];\n }\n case 'html': return [{ type: 'codeBlock', attrs: { language: 'html' }, content: [{ type: 'text', text: token.raw.replace(/\\n+$/, '') }] }];\n case 'hr': return [{ type: 'horizontalRule' }];\n case 'list': {\n const list = token as Tokens.List;\n const tasks = list.items.every(entry => entry.task);\n const marker = /^\\s*(?:([-*+])|\\d+([.)]))/.exec(list.raw);\n const id = ref({ bullet: marker?.[1], delim: marker?.[2], loose: list.loose });\n return [{\n type: tasks ? 'taskList' : list.ordered ? 'orderedList' : 'bulletList',\n attrs: list.ordered && !tasks ? { start: list.start === '' ? 1 : Number(list.start), ref: id } : { ref: id },\n content: list.items.map(entry => {\n const content = fill(entry.tokens.flatMap(t => block(t, hints)));\n if (!tasks && entry.task) content[0].content = [{ type: 'text', text: entry.checked ? '[x] ' : '[ ] ' }, ...(content[0].content ?? [])];\n return tasks ? { type: 'taskItem', attrs: { checked: !!entry.checked }, content } : { type: 'listItem', content };\n }),\n }];\n }\n case 'table': {\n const table = token as Tokens.Table;\n const cell = (type: string) => (c: Tokens.TableCell, i: number) => ({ type, attrs: { align: table.align[i] }, content: [{ type: 'paragraph', content: inline(c.tokens) }] });\n return [{ type: 'table', content: [\n { type: 'tableRow', content: table.header.map(cell('tableHeader')) },\n ...table.rows.map(row => ({ type: 'tableRow', content: row.map(cell('tableCell')) })),\n ] }];\n }\n default: return [{ type: 'paragraph', content: inline([{ type: 'text', raw: token.raw, text: token.raw }]) }];\n }\n}\n\nconst opens = /^\\s*<!--\\s*toc\\s*-->\\s*$/i;\nconst shuts = /^\\s*<!--\\s*\\/toc\\s*-->\\s*$/i;\nconst row = /^(\\s*)[-*+]\\s+\\[((?:\\\\.|[^\\]\\\\])*)\\]\\(#[^)\\s]*\\)\\s*$/;\n\nfunction contents(tokens: Token[], i: number): { end: number; entries: [number, string][] } | null {\n if (tokens[i].type !== 'html' || !opens.test(tokens[i].raw)) return null;\n let j = i + 1;\n const skip = () => { while (tokens[j]?.type === 'space') j++; };\n skip();\n const list = tokens[j]?.type === 'list' ? tokens[j++] : null;\n skip();\n if (tokens[j]?.type !== 'html' || !shuts.test(tokens[j].raw)) return null;\n const rows = list ? list.raw.split('\\n').filter(line => line.trim()).map(line => row.exec(line)) : [];\n if (rows.some(r => !r)) return null;\n const steps = [...new Set(rows.map(r => r![1].length))].sort((a, b) => a - b);\n return { end: j, entries: rows.map(r => [steps.indexOf(r![1].length) + 1, r![2].replace(/\\\\(.)/g, '$1')]) };\n}\n\nconst slug = (text: string, seen: Map<string, number>) => {\n const base = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s_-]/gu, '').trim().replace(/\\s/g, '-');\n const n = seen.get(base) ?? 0;\n seen.set(base, n + 1);\n return n ? `${base}-${n}` : base;\n};\n\nfunction sniff(tokens: Token[]): Style {\n const style: Style = { bullet: '-', delim: '.', em: '*', strong: '**', fence: '```', br: '\\\\\\n', loose: false };\n const seen = new Set<string>();\n const note = <K extends keyof Style>(key: K, value: Style[K]) => {\n if (seen.has(key)) return;\n seen.add(key);\n style[key] = value;\n };\n let loose = 0;\n marked.walkTokens(tokens, token => {\n if (token.type === 'list') {\n const marker = /^\\s*(?:([-*+])|\\d+([.)]))/.exec(token.raw);\n if (token.ordered) note('delim', marker?.[2] ?? '.');\n else note('bullet', marker?.[1] ?? '-');\n loose += token.loose ? 1 : -1;\n } else if (token.type === 'em') note('em', token.raw[0]);\n else if (token.type === 'strong') note('strong', token.raw.slice(0, 2));\n else if (token.type === 'code' && /^ {0,3}(```|~~~)/.test(token.raw)) note('fence', token.raw.trimStart().slice(0, 3));\n else if (token.type === 'br' && token.raw !== '<br>') note('br', token.raw.startsWith('\\\\') ? '\\\\\\n' : ' \\n');\n });\n style.loose = loose > 0;\n return style;\n}\n\nexport function fromMarkdown(source: string): Parsed {\n const bom = source.startsWith('');\n const crlf = source.includes('\\r\\n');\n const tokens = marked.lexer(source.slice(bom ? 1 : 0).replace(/\\r\\n?/g, '\\n'));\n const hints: Record<string, Hint> = {};\n const content: JSONContent[] = [];\n const raws: string[] = [];\n let head = '';\n let gap = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const toc = contents(tokens, i);\n const made = toc ? [{ type: 'toc', attrs: { entries: JSON.stringify(toc.entries) } }] : block(token, hints);\n if (!made.length) { gap += token.raw; continue; }\n if (raws.length) raws[raws.length - 1] += gap;\n else head = gap;\n gap = '';\n content.push(...made);\n raws.push(toc ? tokens.slice(i, toc.end + 1).map(t => t.raw).join('') : token.raw);\n if (toc) i = toc.end;\n }\n if (!content.length) { content.push({ type: 'paragraph' }); raws.push(''); head = ''; }\n return { doc: { type: 'doc', content }, raws, head, tail: gap, style: sniff(tokens), hints, crlf, bom };\n}\n\nexport const track = ({ doc: _json, ...parsed }: Parsed, doc: Node): Base => {\n const nodes: Node[] = [];\n doc.forEach(node => nodes.push(node));\n return nodes.length === parsed.raws.length ? { ...parsed, nodes } : { ...parsed, nodes: [], raws: [], head: '', tail: '\\n' };\n};\n\ntype Auto = { inAutolink?: boolean };\n\nconst ticks = (node: Node, side: number) => {\n const len = Math.max(0, ...(node.isText ? node.text!.match(/`+/g) ?? [] : []).map(run => run.length));\n return len ? (side > 0 ? ` ${'`'.repeat(len + 1)}` : `${'`'.repeat(len + 1)} `) : '`';\n};\n\nconst plain = (mark: Mark, parent: Node, index: number) => {\n const node = parent.child(index);\n const href = mark.attrs.href as string;\n if (!node.isText || node.marks.length !== 1 || (index + 1 < parent.childCount && mark.isInSet(parent.child(index + 1).marks))) return null;\n const text = node.text!;\n if (text !== href && `mailto:${text}` !== href && !(text.startsWith('www.') && `http://${text}` === href)) return null;\n const before = index ? parent.child(index - 1) : null;\n const after = index + 1 < parent.childCount ? parent.child(index + 1) : null;\n const left = before ? (before.isText ? before.text!.slice(-1) : 'x') : '';\n const right = after ? (after.isText ? after.text! : 'x') : '';\n return /^[\\s(*_~]?$/.test(left) && /^([\\s)]|[.,:;!?]+(\\s|$)|$)/.test(right) ? 'bare' : text === href || href.startsWith('mailto:') ? 'angle' : null;\n};\n\nfunction serializer(style: Style, hints: Record<string, Hint>, before: Node | null, cell = false) {\n let form: string | null = null;\n const hint = (node: Node) => hints[node.attrs.ref as string] ?? {};\n const run = (parent: Node, index: number, types: string[]) => {\n let n = 0;\n for (let i = index - 1; i >= 0 && types.includes(parent.child(i).type.name); i--) n++;\n if (!index && before && types.includes(before.type.name)) n++;\n return n % 2;\n };\n const tight = (state: MarkdownSerializerState, node: Node, render: () => void) => {\n const deep = node.content.content.some(entry => entry.content.content.filter(child => !child.type.name.endsWith('List')).length > 1);\n const was = state.options.tightLists;\n state.options.tightLists = !deep && !(hint(node).loose ?? style.loose);\n render();\n state.options.tightLists = was;\n };\n const list = (state: MarkdownSerializerState, node: Node, parent: Node, index: number) => {\n const bullet = hint(node).bullet ?? (run(parent, index, ['bulletList', 'taskList']) ? (style.bullet === '-' ? '*' : '-') : style.bullet);\n tight(state, node, () => state.renderList(node, ' ', () => `${bullet} `));\n };\n const blank = { open: '', close: '', mixable: true };\n const wrap = (open: string, close = open) => ({ open, close, mixable: true, expelEnclosingWhitespace: true });\n return new MarkdownSerializer({\n paragraph(state, node) { state.renderInline(node); state.closeBlock(node); },\n heading(state, node) { state.write(`${'#'.repeat(node.attrs.level)} `); state.renderInline(node, false); state.closeBlock(node); },\n blockquote(state, node) { state.wrapBlock('> ', null, node, () => state.renderContent(node)); },\n codeBlock(state, node) {\n const mark = (hint(node).fence ?? style.fence)[0];\n const longest = Math.max(2, ...(node.textContent.match(new RegExp(`${mark}{3,}`, 'g')) ?? []).map(r => r.length));\n const fence = mark.repeat(longest + 1);\n state.write(`${fence}${node.attrs.language ?? ''}\\n`);\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write(fence);\n state.closeBlock(node);\n },\n horizontalRule(state, node) { state.write('---'); state.closeBlock(node); },\n pageBreak(state, node) { state.closeBlock(node); },\n toc(state, node) {\n const seen = new Map<string, number>();\n const lines = (JSON.parse(node.attrs.entries) as [number, string][]).map(([level, text]) => `${' '.repeat(level - 1)}${style.bullet} [${text.replace(/[[\\]\\\\]/g, '\\\\$&')}](#${slug(text, seen)})\\n`);\n state.write(`<!-- toc -->\\n${lines.join('')}<!-- /toc -->`);\n state.closeBlock(node);\n },\n bulletList: list,\n taskList: list,\n orderedList(state, node, parent, index) {\n const start = (node.attrs.start as number | null) ?? 1;\n const delim = hint(node).delim ?? (run(parent, index, ['orderedList']) ? (style.delim === '.' ? ')' : '.') : style.delim);\n const width = String(start + node.childCount - 1).length;\n tight(state, node, () => state.renderList(node, ' '.repeat(width + 2), i => `${start + i}${delim} `));\n },\n listItem(state, node) { state.renderContent(node); },\n taskItem(state, node) { state.write(node.attrs.checked ? '[x] ' : '[ ] '); state.renderContent(node); },\n table(state, node) {\n const rows: string[][] = [];\n const aligns: (string | null)[] = [];\n node.forEach((row, _, r) => {\n const cells: string[] = [];\n row.forEach(c => {\n const span = (c.attrs.colspan as number) || 1;\n const text: string[] = [];\n c.forEach(child => text.push(serializer(style, hints, null, true).serialize(c.type.schema.topNodeType.create(null, child)).replace(/\\n+/g, ' ')));\n if (!r) aligns.push(c.attrs.align as string | null, ...Array(span - 1).fill(null));\n cells.push(text.join('<br>').replace(/\\|/g, '\\\\|'), ...Array(span - 1).fill(''));\n });\n rows.push(cells);\n });\n const width = Math.max(...rows.map(r => r.length));\n const line = (cells: string[]) => `| ${[...cells, ...Array(width - cells.length).fill('')].join(' | ')} |`;\n const rule = Array.from({ length: width }, (_, i) => ({ left: ':---', center: ':---:', right: '---:' })[aligns[i] ?? ''] ?? '---');\n [line(rows[0]), `| ${rule.join(' | ')} |`, ...rows.slice(1).map(line)].forEach((text, i) => {\n if (i) state.ensureNewLine();\n state.write(text);\n });\n state.closeBlock(node);\n },\n image(state, node) {\n const src = String(node.attrs.src ?? '');\n const title = node.attrs.title ? ` \"${String(node.attrs.title).replace(/\"/g, '\\\\\"')}\"` : '';\n state.write(` ? `<${src}>` : src.replace(/[()]/g, '\\\\$&')}${title})`);\n },\n hardBreak(state, node, parent, index) {\n for (let i = index + 1; i < parent.childCount; i++) {\n if (parent.child(i).type === node.type) continue;\n state.write(cell ? '<br>' : style.br);\n return;\n }\n },\n text(state, node) { state.text(node.text!, !(state as Auto).inAutolink); },\n }, {\n italic: wrap(style.em), bold: wrap(style.strong), strike: wrap('~~'), underline: wrap('<u>', '</u>'), highlight: wrap('<mark>', '</mark>'),\n textStyle: blank, comment: blank,\n link: {\n open(state, mark, parent, index) {\n form = plain(mark, parent, index);\n (state as Auto).inAutolink = !!form;\n return form === 'bare' ? '' : form === 'angle' ? '<' : '[';\n },\n close(state, mark) {\n (state as Auto).inAutolink = undefined;\n const was = form;\n form = null;\n return was === 'bare' ? '' : was === 'angle' ? '>' : `](${String(mark.attrs.href).replace(/[()\"]/g, '\\\\$&')})`;\n },\n mixable: true,\n },\n code: { open: (_s, _m, parent, index) => ticks(parent.child(index), -1), close: (_s, _m, parent, index) => ticks(parent.child(index - 1), 1), escape: false },\n }, { hardBreakNodeName: 'hardBreak', strict: false, escapeExtraCharacters: /<(?=[A-Za-z/!?])/g });\n}\n\nconst one = (node: Node, before: Node | null, base: Base) =>\n serializer(base.style, base.hints, before).serialize(node.type.schema.topNodeType.create(null, node)).replace(/\\n+$/, '');\n\nexport function toMarkdown(doc: Node, base: Base): { text: string; base: Base } {\n const nodes: Node[] = [];\n const found: number[] = [];\n let j = 0;\n doc.forEach(node => {\n let k = -1;\n for (let m = j; m < Math.min(base.nodes.length, j + 64) && k < 0; m++) if (base.nodes[m] === node || base.nodes[m].eq(node)) k = m;\n if (k >= 0) j = k + 1;\n nodes.push(node);\n found.push(k);\n });\n let out = base.head;\n const starts: number[] = [];\n nodes.forEach((node, i) => {\n const k = found[i];\n if (i && !(k >= 0 && found[i - 1] === k - 1)) out = out.replace(/\\n*$/, '\\n\\n');\n starts.push(out.length);\n out += k >= 0 ? base.raws[k] : one(node, i ? nodes[i - 1] : null, base);\n });\n const last = found[found.length - 1];\n const end = last >= 0 && last === base.nodes.length - 1;\n if (!end) out = out.replace(/\\n*$/, '\\n');\n const cut = out.length;\n out += end ? base.tail : base.tail.trim() ? `\\n${base.tail.replace(/^\\n+/, '')}` : '';\n const at = starts.map(s => Math.min(s, cut));\n const raws = at.map((s, i) => out.slice(s, i + 1 < at.length ? at[i + 1] : cut));\n const text = base.crlf ? out.replace(/\\n/g, '\\r\\n') : out;\n return { text: base.bom ? `${text}` : text, base: { ...base, nodes, raws, tail: out.slice(cut) } };\n}\n","import type { IWorkbookData } from '@univerjs/core';\n\nexport type Lines = { rows: string[]; cols: string[] };\n\nexport type CsvFormat = { delimiter: string; encoding: string; bom: boolean; eol: string; decimal: '.' | ','; end: boolean };\n\nexport type SheetModel = {\n book: IWorkbookData;\n lines: Record<string, Lines>;\n origin: { sheets: Record<string, number>; lines: Record<string, Lines> };\n csv?: CsvFormat;\n active?: string;\n};\n\nexport class SheetRefusal extends Error {\n constructor(public code: 'chartSource' | 'pivotSheet' | 'tableColumns', public sheet = '') {\n super(code);\n }\n}\n\nlet counter = 0;\nexport const fresh = (prefix: string) => `${prefix}${Date.now().toString(36)}${(counter++).toString(36)}${Math.random().toString(36).slice(2, 6)}`;\n\nexport const numbered = (prefix: string, count: number) => Array.from({ length: count }, (_, i) => `${prefix}${i}`);\n\nexport function insert(list: string[], at: number, count: number, prefix: string) {\n list.splice(at, 0, ...Array.from({ length: count }, () => fresh(prefix)));\n}\n\nexport function move(list: string[], from: number, count: number, to: number) {\n const taken = list.splice(from, count);\n list.splice(to > from ? to - count : to, 0, ...taken);\n}\n\nexport function resize(list: string[], count: number, prefix: string) {\n if (list.length > count) list.length = count;\n else insert(list, list.length, count - list.length, prefix);\n}\n\nexport function rebase(model: SheetModel, lines: Record<string, Lines>, sheets: Record<string, number>) {\n model.origin = { sheets, lines: Object.fromEntries(Object.entries(lines).map(([id, l]) => [id, { rows: [...l.rows], cols: [...l.cols] }])) };\n}\n","import type { ICellData, IWorkbookData } from '@univerjs/core';\nimport { numbered, type CsvFormat, type SheetModel } from './model';\n\ntype Field = { text: string; raw: string };\n\nfunction decode(bytes: Uint8Array): { text: string; encoding: string; bom: boolean } {\n if (bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) return { text: new TextDecoder('utf-8').decode(bytes.subarray(3)), encoding: 'utf-8', bom: true };\n if (bytes[0] === 0xff && bytes[1] === 0xfe) return { text: new TextDecoder('utf-16le').decode(bytes.subarray(2)), encoding: 'utf-16le', bom: true };\n if (bytes[0] === 0xfe && bytes[1] === 0xff) return { text: new TextDecoder('utf-16be').decode(bytes.subarray(2)), encoding: 'utf-16be', bom: true };\n try {\n return { text: new TextDecoder('utf-8', { fatal: true }).decode(bytes), encoding: 'utf-8', bom: false };\n } catch {\n const scored = ['windows-1252', 'windows-1250', 'windows-1251'].map(encoding => {\n const text = new TextDecoder(encoding).decode(bytes);\n let score = 0;\n for (const [word] of text.matchAll(/\\p{L}+/gu)) {\n const cyrillic = (word.match(/\\p{Script=Cyrillic}/gu) ?? []).length;\n const accented = (word.match(/[^\\x00-\\x7f\\p{Script=Cyrillic}]/gu) ?? []).length;\n if (cyrillic === word.length || (!cyrillic && accented * 2 <= word.length)) score += 1;\n else score -= 1;\n }\n score -= 3 * (text.match(/\\p{L}[^\\p{L}\\x00-\\x7f]|[^\\p{L}\\x00-\\x7f]\\p{L}/gu) ?? []).length;\n return { text, encoding, score };\n });\n const best = scored.reduce((a, b) => b.score > a.score ? b : a);\n return { text: best.text, encoding: best.encoding, bom: false };\n }\n}\n\nfunction encode(text: string, encoding: string, bom: boolean): Uint8Array {\n if (encoding === 'utf-8') {\n const body = new TextEncoder().encode(text);\n if (!bom) return body;\n const out = new Uint8Array(body.length + 3);\n out.set([0xef, 0xbb, 0xbf]);\n out.set(body, 3);\n return out;\n }\n if (encoding === 'utf-16le' || encoding === 'utf-16be') {\n const out = new Uint8Array(text.length * 2 + (bom ? 2 : 0));\n const view = new DataView(out.buffer);\n let at = 0;\n if (bom) { view.setUint16(0, 0xfeff, encoding === 'utf-16le'); at = 2; }\n for (let i = 0; i < text.length; i++) view.setUint16(at + i * 2, text.charCodeAt(i), encoding === 'utf-16le');\n return out;\n }\n const table = new Map<string, number>();\n const decoder = new TextDecoder(encoding);\n for (let b = 255; b >= 0; b--) table.set(decoder.decode(new Uint8Array([b])), b);\n const out = new Uint8Array(text.length);\n for (let i = 0; i < text.length; i++) out[i] = table.get(text[i]) ?? 63;\n return out;\n}\n\nfunction split(text: string, delimiter: string, limit = Infinity): Field[][] {\n const rows: Field[][] = [];\n let row: Field[] = [];\n let i = 0;\n const n = text.length;\n while (i <= n && rows.length < limit) {\n const start = i;\n let value = '';\n if (text[i] === '\"') {\n i++;\n while (i < n) {\n if (text[i] === '\"') {\n if (text[i + 1] === '\"') { value += '\"'; i += 2; continue; }\n i++;\n break;\n }\n value += text[i++];\n }\n while (i < n && text[i] !== delimiter && text[i] !== '\\n' && text[i] !== '\\r') value += text[i++];\n } else {\n while (i < n && text[i] !== delimiter && text[i] !== '\\n' && text[i] !== '\\r') i++;\n value = text.slice(start, i);\n }\n row.push({ text: value, raw: text.slice(start, i) });\n if (i >= n) { rows.push(row); break; }\n if (text[i] === delimiter) { i++; continue; }\n i += text[i] === '\\r' && text[i + 1] === '\\n' ? 2 : 1;\n rows.push(row);\n row = [];\n if (i >= n) break;\n }\n return rows;\n}\n\nfunction sniff(text: string) {\n let best = ',', score = -1;\n for (const d of [',', ';', '\\t', '|']) {\n const rows = split(text, d, 30).filter(r => r.length > 1 || r[0]?.text);\n if (!rows.length) continue;\n const counts = new Map<number, number>();\n for (const r of rows) counts.set(r.length, (counts.get(r.length) ?? 0) + 1);\n const [width, often] = [...counts].sort((a, b) => b[1] - a[1] || b[0] - a[0])[0];\n const s = width > 1 ? often * 100 + width : 0;\n if (s > score) { score = s; best = d; }\n }\n return best;\n}\n\nconst numeric = (s: string, decimal: string) => decimal === ',' ? /^-?(0|[1-9]\\d*)(,\\d+)?$/.test(s) : /^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][-+]?\\d+)?$/.test(s);\n\nexport function readCsv(bytes: ArrayBuffer): SheetModel {\n const { text, encoding, bom } = decode(new Uint8Array(bytes));\n const delimiter = sniff(text);\n const eol = /\\r\\n/.test(text) ? '\\r\\n' : /\\r(?!\\n)/.test(text) && !text.includes('\\n') ? '\\r' : '\\n';\n const rows = split(text, delimiter);\n const end = /[\\r\\n]$/.test(text);\n if (end && rows.length && rows[rows.length - 1].length === 1 && rows[rows.length - 1][0].raw === '') rows.pop();\n let commas = 0, dots = 0;\n if (delimiter !== ',') for (const r of rows) for (const f of r) {\n if (/^-?\\d+,\\d+$/.test(f.text)) commas++;\n else if (/^-?\\d+\\.\\d+$/.test(f.text)) dots++;\n }\n const decimal: '.' | ',' = commas > dots ? ',' : '.';\n const cellData: Record<number, Record<number, ICellData>> = {};\n let width = 0;\n rows.forEach((r, i) => {\n width = Math.max(width, r.length);\n r.forEach((f, c) => {\n if (f.text === '') return;\n (cellData[i] ??= {})[c] = numeric(f.text, decimal) ? { v: Number(decimal === ',' ? f.text.replace(',', '.') : f.text), t: 2 } : { v: f.text, t: 1 };\n });\n });\n const height = Math.max(rows.length + 100, 1000);\n const cols = Math.max(width + 4, 26);\n const format: CsvFormat = { delimiter, encoding, bom, eol, decimal, end };\n const book: IWorkbookData = {\n id: 'book', name: '', appVersion: '', locale: 'enUS' as IWorkbookData['locale'], styles: {}, sheetOrder: ['s1'],\n sheets: { s1: { id: 's1', name: 'Sheet1', rowCount: height, columnCount: cols, cellData, defaultColumnWidth: 88, defaultRowHeight: 24 } },\n };\n return { book, csv: format, lines: { s1: { rows: numbered('r', height), cols: numbered('c', cols) } }, origin: { sheets: { s1: 1 }, lines: { s1: { rows: numbered('r', height), cols: numbered('c', cols) } } } };\n}\n\nfunction value(x: ICellData | undefined): string | number | boolean | null {\n if (!x) return null;\n const stream = x.p?.body?.dataStream;\n if (stream !== undefined && (x.v === undefined || x.v === null || x.v === '')) return stream.replace(/\\r?\\n$/, '').replace(/\\r\\n?/g, '\\n');\n if (x.t === 3 && typeof x.v === 'number') return x.v === 1;\n return x.v ?? null;\n}\n\nexport function writeCsv(original: ArrayBuffer, model: SheetModel): ArrayBuffer {\n const { text } = decode(new Uint8Array(original));\n const format = model.csv ?? readCsv(original).csv!;\n const old = split(text, format.delimiter);\n if (format.end && old.length && old[old.length - 1].length === 1 && old[old.length - 1][0].raw === '') old.pop();\n const sid = model.book.sheetOrder[0];\n const sheet = model.book.sheets[sid];\n const cells = (sheet.cellData ?? {}) as Record<number, Record<number, ICellData>>;\n const lines = model.lines[sid], origin = model.origin.lines[sid] ?? lines;\n const rowFrom = new Map(origin.rows.map((id, i) => [id, i])), colFrom = new Map(origin.cols.map((id, i) => [id, i]));\n const quote = (s: string) => s.includes(format.delimiter) || s.includes('\"') || s.includes('\\n') || s.includes('\\r') ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n const show = (v: string | number | boolean | null) => {\n if (v === null || v === undefined) return '';\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';\n if (typeof v === 'number') return format.decimal === ',' ? String(v).replace('.', ',') : String(v);\n return String(v);\n };\n const last = Math.max(-1, ...Object.keys(cells).map(Number).filter(r => Object.values(cells[r] ?? {}).some(x => show(value(x)) !== '')));\n const out: string[] = [];\n for (let r = 0; r <= last; r++) {\n const r0 = rowFrom.get(lines.rows[r]) ?? -1;\n const was = r0 >= 0 ? old[r0] : undefined;\n const line = cells[r] ?? {};\n const filled = Object.keys(line).map(Number).filter(c => show(value(line[c])) !== '');\n let count = filled.length ? Math.max(...filled) + 1 : 0;\n if (was) for (let c0 = 0; c0 < was.length; c0++) count = Math.max(count, lines.cols.indexOf(origin.cols[c0]) + 1);\n const fields: string[] = [];\n for (let c = 0; c < count; c++) {\n const c0 = colFrom.get(lines.cols[c]) ?? -1;\n const before = was && c0 >= 0 ? was[c0] : undefined;\n const now = show(value(line[c]));\n if (before && now === before.text) fields.push(before.raw);\n else if (before && before.text !== '' && now !== '' && numeric(before.text, format.decimal) && Number(before.text.replace(',', '.')) === Number(now.replace(',', '.'))) fields.push(before.raw);\n else fields.push(quote(now));\n }\n out.push(fields.join(format.delimiter));\n }\n const body = out.join(format.eol) + (format.end && out.length ? format.eol : '');\n const bytes = encode(body, format.encoding, format.bom);\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n","import { entry, inflate, unzip, zip, type Entry } from '../docx/zip';\nimport { attrs } from '../docx/xml';\n\nexport type Rel = { id: string; type: string; target: string; external: boolean };\n\nconst decoder = new TextDecoder();\n\nexport class Pack {\n entries: Entry[];\n names = new Map<string, number>();\n changed = new Map<string, string | Uint8Array | null>();\n\n constructor(bytes: ArrayBuffer) {\n this.entries = unzip(new Uint8Array(bytes));\n this.entries.forEach((e, i) => this.names.set(e.name.replace(/^\\//, ''), i));\n }\n\n bytes(name: string): Uint8Array | null {\n const next = this.changed.get(name);\n if (next !== undefined) return typeof next === 'string' ? new TextEncoder().encode(next) : next;\n const i = this.names.get(name);\n return i === undefined ? null : inflate(this.entries[i]);\n }\n\n text(name: string): string | null {\n const next = this.changed.get(name);\n if (typeof next === 'string') return next;\n const bytes = this.bytes(name);\n return bytes && decoder.decode(bytes);\n }\n\n put(name: string, value: string | Uint8Array | null) {\n this.changed.set(name, value);\n }\n\n rels(part: string): Rel[] {\n const xml = this.text(relsOf(part));\n if (!xml) return [];\n const base = part.includes('/') ? part.slice(0, part.lastIndexOf('/') + 1) : '';\n return [...xml.matchAll(/<(?:\\w+:)?Relationship\\b[^>]*>/g)].map(m => {\n const a = Object.fromEntries(attrs(m[0]));\n const external = a.TargetMode === 'External';\n return { id: a.Id, type: a.Type.slice(a.Type.lastIndexOf('/') + 1), target: external ? a.Target : resolve(base, a.Target), external };\n });\n }\n\n build(): Uint8Array {\n const out: Entry[] = [];\n const seen = new Set<string>();\n for (const e of this.entries) {\n const name = e.name.replace(/^\\//, '');\n seen.add(name);\n const next = this.changed.get(name);\n if (next === null) continue;\n out.push(next === undefined ? e : entry(e.name, typeof next === 'string' ? new TextEncoder().encode(next) : next, e));\n }\n const like = this.entries[0];\n for (const [name, next] of this.changed) if (!seen.has(name) && next !== null) out.push(entry(name, typeof next === 'string' ? new TextEncoder().encode(next) : next, like));\n return zip(out);\n }\n}\n\nexport const relsOf = (part: string) => {\n const i = part.lastIndexOf('/');\n return `${part.slice(0, i + 1)}_rels/${part.slice(i + 1)}.rels`;\n};\n\nexport function resolve(base: string, target: string) {\n if (target.startsWith('/')) return target.slice(1);\n const parts = (base + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.' && p !== '') out.push(p);\n }\n return out.join('/');\n}\n\nexport function relative(from: string, to: string) {\n const a = from.split('/').slice(0, -1), b = to.split('/');\n let i = 0;\n while (i < a.length && a[i] === b[i]) i++;\n return [...a.slice(i).map(() => '..'), ...b.slice(i)].join('/');\n}\n","export type Box = { startRow: number; startColumn: number; endRow: number; endColumn: number };\n\nexport type Map1 = (i: number) => number;\n\nconst MAX_ROW = 1048575;\nconst MAX_COL = 16383;\n\nexport function letters(c: number) {\n let s = '';\n for (let n = c + 1; n > 0; n = Math.floor((n - 1) / 26)) s = String.fromCharCode(65 + ((n - 1) % 26)) + s;\n return s;\n}\n\nexport function column(s: string) {\n let n = 0;\n for (let i = 0; i < s.length; i++) n = n * 26 + (s.charCodeAt(i) & ~32) - 64;\n return n - 1;\n}\n\nexport const a1 = (r: number, c: number) => letters(c) + (r + 1);\n\nexport function cell(ref: string): [number, number] {\n const m = /^\\$?([A-Za-z]{1,3})\\$?(\\d+)$/.exec(ref);\n return m ? [Number(m[2]) - 1, column(m[1])] : [-1, -1];\n}\n\ntype Side = { col: number | null; row: number | null; colAbs: boolean; rowAbs: boolean };\n\nfunction side(s: string): Side | null {\n const m = /^(\\$?)([A-Za-z]{1,3})?(\\$?)(\\d+)?$/.exec(s);\n if (!m || (!m[2] && !m[4])) return null;\n return {\n col: m[2] ? column(m[2]) : null,\n row: m[4] ? Number(m[4]) - 1 : null,\n colAbs: !!m[2] && m[1] === '$',\n rowAbs: m[2] ? m[3] === '$' : m[1] === '$' || m[3] === '$',\n };\n}\n\nconst write = (s: Side) => (s.col === null ? '' : (s.colAbs ? '$' : '') + letters(s.col)) + (s.row === null ? '' : (s.rowAbs ? '$' : '') + (s.row + 1));\n\nexport function box(ref: string): Box | null {\n const [a, b = a] = ref.split(':');\n const p = side(a), q = side(b);\n if (!p || !q) return null;\n const rows = [p.row ?? (p === q ? 0 : 0), q.row ?? MAX_ROW], cols = [p.col ?? 0, q.col ?? MAX_COL];\n return { startRow: Math.min(rows[0], rows[1]), endRow: Math.max(rows[0], rows[1]), startColumn: Math.min(cols[0], cols[1]), endColumn: Math.max(cols[0], cols[1]) };\n}\n\nexport const span = (b: Box) => b.startRow === b.endRow && b.startColumn === b.endColumn ? a1(b.startRow, b.startColumn) : `${a1(b.startRow, b.startColumn)}:${a1(b.endRow, b.endColumn)}`;\n\nexport function boxes(sqref: string) {\n return sqref.trim().split(/\\s+/).filter(Boolean).map(box).filter((b): b is Box => b !== null);\n}\n\nexport function squeeze(b: Box, rows: Map1, cols: Map1): Box | null {\n const edge = (from: number, to: number, map: Map1, max: number): [number, number] | null => {\n if (from === 0 && to === max) return [0, max];\n let a = -1, z = -1;\n for (let i = from; i <= to && a < 0; i++) a = map(i);\n for (let i = to; i >= from && z < 0; i--) z = map(i);\n return a < 0 || z < 0 ? null : [a, z];\n };\n const r = edge(b.startRow, b.endRow, rows, MAX_ROW), c = edge(b.startColumn, b.endColumn, cols, MAX_COL);\n return r && c ? { startRow: r[0], endRow: r[1], startColumn: c[0], endColumn: c[1] } : null;\n}\n\nconst token = /(\"(?:[^\"]|\"\")*\")|('(?:[^']|'')+'|[A-Za-z_À-][\\w.À-]*)!|(\\[(?:[^[\\]]|\\[[^\\]]*\\])*\\])|(\\$?[A-Za-z]{1,3}\\$?\\d+(?::\\$?[A-Za-z]{1,3}\\$?\\d+)?|\\$?[A-Za-z]{1,3}:\\$?[A-Za-z]{1,3}|\\$?\\d+:\\$?\\d+)(?![\\w(.!À-])/g;\n\nexport type Piece = { sheet: string | null; text: string };\n\nexport function refs(formula: string, visit: (piece: Piece) => string): string {\n let sheet: string | null = null;\n let outside = false;\n let last = 0;\n let out = '';\n token.lastIndex = 0;\n for (let m = token.exec(formula); m; m = token.exec(formula)) {\n if (m[1]) { sheet = null; continue; }\n if (m[3]) { outside = formula[m.index - 1] !== '!' && /^\\[\\d+\\]$/.test(m[3]); continue; }\n if (m[2]) {\n sheet = outside ? '\\u0000' : m[2].startsWith(\"'\") ? m[2].slice(1, -1).replace(/''/g, \"'\") : m[2];\n outside = false;\n continue;\n }\n const before = formula[m.index - 1];\n if (before && /[\\w.À-]/.test(before)) { sheet = null; continue; }\n out += formula.slice(last, m.index) + visit({ sheet: before === '!' ? sheet : null, text: m[4] });\n last = m.index + m[0].length;\n sheet = null;\n }\n return out + formula.slice(last);\n}\n\nexport function shifted(formula: string, dr: number, dc: number) {\n return refs(formula, p => {\n const ends = p.text.split(':').map(side);\n if (ends.some(e => !e)) return p.text;\n for (const e of ends as Side[]) {\n if (e.col !== null && !e.colAbs) e.col += dc;\n if (e.row !== null && !e.rowAbs) e.row += dr;\n if ((e.col ?? 0) < 0 || (e.row ?? 0) < 0 || (e.col ?? 0) > MAX_COL || (e.row ?? 0) > MAX_ROW) return '#REF!';\n }\n return (ends as Side[]).map(write).join(':');\n });\n}\n\nexport function remapped(formula: string, mine: (sheet: string | null) => boolean, rows: Map1, cols: Map1) {\n return refs(formula, p => {\n if (!mine(p.sheet)) return p.text;\n const b = box(p.text);\n const ends = p.text.split(':').map(side) as Side[];\n if (!b || ends.some(e => !e)) return p.text;\n const s = squeeze(b, rows, cols);\n if (!s) return '#REF!';\n const [first, second = first] = ends;\n const put = (e: Side, r: number, c: number) => ({ ...e, row: e.row === null ? null : r, col: e.col === null ? null : c });\n return ends.length === 1 ? write(put(first, s.startRow, s.startColumn)) : `${write(put(first, s.startRow, s.startColumn))}:${write(put(second, s.endRow, s.endColumn))}`;\n });\n}\n\nexport const quoted = (name: string) => /^[A-Za-z_À-][\\w.À-]*$/.test(name) && !/^[A-Za-z]{1,3}\\d+$/.test(name) && !/^(R|C|RC|R\\d+C\\d+)$/i.test(name) ? name : `'${name.replace(/'/g, \"''\")}'`;\n\nexport function renamed(formula: string, from: string, to: string) {\n token.lastIndex = 0;\n return formula.replace(token, (all, str: string | undefined, sheet: string | undefined) => {\n if (str || !sheet) return all;\n const name = sheet.startsWith(\"'\") ? sheet.slice(1, -1).replace(/''/g, \"'\") : sheet;\n return name === from ? `${quoted(to)}!` : all;\n });\n}\n\nconst future = 'ACOT ACOTH AGGREGATE ARABIC ARRAYTOTEXT BASE BETA.DIST BETA.INV BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR BYCOL BYROW CEILING.MATH CEILING.PRECISE CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSECOLS CHOOSEROWS COMBINA CONCAT CONFIDENCE.NORM CONFIDENCE.T COT COTH COVARIANCE.P COVARIANCE.S CSC CSCH DAYS DECIMAL DROP ERF.PRECISE ERFC.PRECISE EXPAND EXPON.DIST F.DIST F.DIST.RT F.INV F.INV.RT F.TEST FILTERXML FLOOR.MATH FLOOR.PRECISE FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT GAMMA GAMMA.DIST GAMMA.INV GAMMALN.PRECISE GAUSS HSTACK HYPGEOM.DIST IFNA IFS IMCOSH IMCOT IMCSC IMCSCH IMSEC IMSECH IMSINH IMTAN ISFORMULA ISOMITTED ISOWEEKNUM LAMBDA LET LOGNORM.DIST LOGNORM.INV MAKEARRAY MAP MAXIFS MINIFS MODE.MULT MODE.SNGL MUNIT NEGBINOM.DIST NETWORKDAYS.INTL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV NUMBERVALUE PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTRANK.EXC PERCENTRANK.INC PERMUTATIONA PHI POISSON.DIST QUARTILE.EXC QUARTILE.INC RANDARRAY RANK.AVG RANK.EQ REDUCE RRI SCAN SEC SECH SEQUENCE SHEET SHEETS SKEW.P STDEV.P STDEV.S SWITCH T.DIST T.DIST.2T T.DIST.RT T.INV T.INV.2T T.TEST TAKE TEXTAFTER TEXTBEFORE TEXTJOIN TEXTSPLIT TOCOL TOROW UNICHAR UNICODE UNIQUE VALUETOTEXT VAR.P VAR.S VSTACK WEBSERVICE WEIBULL.DIST WORKDAY.INTL WRAPCOLS WRAPROWS XLOOKUP XMATCH XOR Z.TEST';\nconst prefixes = new Map<string, string>([...future.split(' ').map(n => [n, '_xlfn.'] as const), ...'FILTER SORT SORTBY'.split(' ').map(n => [n, '_xlfn._xlws.'] as const)]);\n\nexport const plain = (formula: string) => formula.includes('_xl') ? formula.replace(/_xlfn\\.(?:_xlws\\.)?|_xlws\\./gi, '') : formula;\n\nexport function stored(formula: string) {\n let out = '';\n let last = 0;\n const re = /(\"(?:[^\"]|\"\")*\")|((?<![\\w.])[A-Za-z][\\w.]*)(?=\\()/g;\n for (let m = re.exec(formula); m; m = re.exec(formula)) {\n const prefix = m[2] && prefixes.get(m[2].toUpperCase());\n if (!prefix) continue;\n out += formula.slice(last, m.index) + prefix + m[2];\n last = m.index + m[2].length;\n }\n return out + formula.slice(last);\n}\n","import type { IBorderData, IStyleData } from '@univerjs/core';\nimport { attr, attrs, escape, parse, type El } from '../docx/xml';\n\nconst builtin: Record<number, string> = {\n 1: '0', 2: '0.00', 3: '#,##0', 4: '#,##0.00', 5: '\"$\"#,##0_);(\"$\"#,##0)', 6: '\"$\"#,##0_);[Red](\"$\"#,##0)', 7: '\"$\"#,##0.00_);(\"$\"#,##0.00)',\n 8: '\"$\"#,##0.00_);[Red](\"$\"#,##0.00)', 9: '0%', 10: '0.00%', 11: '0.00E+00', 12: '# ?/?', 13: '# ??/??', 14: 'yyyy-mm-dd', 15: 'd-mmm-yy', 16: 'd-mmm',\n 17: 'mmm-yy', 18: 'h:mm AM/PM', 19: 'h:mm:ss AM/PM', 20: 'h:mm', 21: 'h:mm:ss', 22: 'yyyy-mm-dd h:mm', 37: '#,##0 ;(#,##0)', 38: '#,##0 ;[Red](#,##0)',\n 39: '#,##0.00;(#,##0.00)', 40: '#,##0.00;[Red](#,##0.00)', 45: 'mm:ss', 46: '[h]:mm:ss', 47: 'mmss.0', 48: '##0.0E+0', 49: '@',\n};\n\nconst indexed = ['000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF', '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF',\n '00FFFF', '800000', '008000', '000080', '808000', '800080', '008080', 'C0C0C0', '808080', '9999FF', '993366', 'FFFFCC', 'CCFFFF', '660066', 'FF8080', '0066CC',\n 'CCCCFF', '000080', 'FF00FF', 'FFFF00', '00FFFF', '800080', '800000', '008080', '0000FF', '00CCFF', 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF', 'FF99CC', 'CC99FF',\n 'FFCC99', '3366FF', '33CCCC', '99CC00', 'FFCC00', 'FF9900', 'FF6600', '666699', '969696', '003366', '339966', '003300', '333300', '993300', '993366', '333399',\n '333333', '000000', 'FFFFFF'];\n\nconst lines = ['', 'thin', 'hair', 'dotted', 'dashed', 'dashDot', 'dashDotDot', 'double', 'medium', 'mediumDashed', 'mediumDashDot', 'mediumDashDotDot', 'slantDashDot', 'thick'];\nconst across = ['', 'left', 'center', 'right', 'justify', 'justify', 'distributed'];\nconst down = ['', 'top', 'center', 'bottom'];\nconst sides = [['l', 'left'], ['r', 'right'], ['t', 'top'], ['b', 'bottom']] as const;\nconst fontOrder = ['b', 'i', 'strike', 'condense', 'extend', 'outline', 'shadow', 'u', 'vertAlign', 'sz', 'color', 'name', 'family', 'charset', 'scheme'];\n\nfunction tinted(hex: string, tint: number) {\n if (!tint) return hex;\n const [r, g, b] = [0, 2, 4].map(i => parseInt(hex.slice(i, i + 2), 16) / 255);\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h /= 6;\n }\n l = tint < 0 ? l * (1 + tint) : l * (1 - tint) + tint;\n const hue = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n return t < 1 / 6 ? p + (q - p) * 6 * t : t < 1 / 2 ? q : t < 2 / 3 ? p + (q - p) * (2 / 3 - t) * 6 : p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s, p = 2 * l - q;\n const out = s === 0 ? [l, l, l] : [hue(p, q, h + 1 / 3), hue(p, q, h), hue(p, q, h - 1 / 3)];\n return out.map(v => Math.round(v * 255).toString(16).padStart(2, '0')).join('').toUpperCase();\n}\n\nfunction palette(theme: string | null): string[] {\n if (!theme) return ['FFFFFF', '000000', 'E7E6E6', '44546A', '4472C4', 'ED7D31', 'A5A5A5', 'FFC000', '5B9BD5', '70AD47', '0563C1', '954F72'];\n const scheme = /<(?:\\w+:)?clrScheme\\b[^>]*>([\\s\\S]*?)<\\/(?:\\w+:)?clrScheme>/.exec(theme)?.[1] ?? '';\n const pick = (name: string) => {\n const m = new RegExp(`<(?:\\\\w+:)?${name}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?${name}>`).exec(scheme)?.[1] ?? '';\n return /(?:val|lastClr)=\"([0-9A-Fa-f]{6})\"/.exec(m.includes('lastClr') ? m.replace(/val=\"\\w+\"/, '') : m)?.[1]?.toUpperCase() ?? '000000';\n };\n const [dk1, lt1, dk2, lt2] = ['dk1', 'lt1', 'dk2', 'lt2'].map(pick);\n return [lt1, dk1, lt2, dk2, ...['accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'].map(pick)];\n}\n\nconst hex = (c: unknown) => {\n const s = String(c ?? '').trim();\n let m = /^#?([0-9a-f]{6})$/i.exec(s);\n if (m) return '#' + m[1].toUpperCase();\n m = /^#?([0-9a-f]{3})$/i.exec(s);\n if (m) return '#' + m[1].split('').map(x => x + x).join('').toUpperCase();\n m = /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i.exec(s);\n return m ? '#' + [m[1], m[2], m[3]].map(v => Number(v).toString(16).padStart(2, '0')).join('').toUpperCase() : null;\n};\n\nexport function norm(l: IStyleData): IStyleData {\n const out: IStyleData = {};\n if (l.bl) out.bl = 1;\n if (l.it) out.it = 1;\n if (l.ul?.s) out.ul = { s: 1 };\n if (l.st?.s) out.st = { s: 1 };\n if (l.va === 2 || l.va === 3) out.va = l.va;\n if (l.fs) out.fs = Number(l.fs);\n if (l.ff) out.ff = l.ff;\n const cl = hex(l.cl?.rgb);\n if (cl) out.cl = { rgb: cl };\n const bg = hex(l.bg?.rgb);\n if (bg) out.bg = { rgb: bg };\n if (l.bd) {\n const bd: IBorderData = {};\n for (const k of ['t', 'b', 'l', 'r', 'tl_br', 'bl_tr'] as const) {\n const b = l.bd[k];\n if (b && b.s) bd[k] = { s: b.s, cl: { rgb: hex(b.cl?.rgb) ?? '#000000' } };\n }\n if (Object.keys(bd).length) out.bd = bd;\n }\n if (l.ht) out.ht = l.ht;\n if (l.vt) out.vt = l.vt;\n if (l.tb === 3) out.tb = 3;\n if (l.tr && (l.tr.a || l.tr.v)) out.tr = { a: l.tr.a ?? 0, v: l.tr.v ? 1 : 0 };\n if (l.n?.pattern && l.n.pattern !== 'General') out.n = { pattern: l.n.pattern };\n return out;\n}\n\nexport class Styles {\n xml: string | null;\n root: El | null;\n formats = new Map<number, string>();\n fonts: string[] = [];\n fills: string[] = [];\n borders: string[] = [];\n xfs: string[] = [];\n looks: IStyleData[] = [];\n index = new Map<string, number>();\n added = false;\n private theme: string[];\n private custom: string[] | null = null;\n\n constructor(xml: string | null, theme: string | null) {\n this.xml = xml;\n this.theme = palette(theme);\n this.root = xml ? parse(xml).kids.find(k => !k.name.startsWith('?')) ?? null : null;\n const s = xml ?? '';\n const list = (name: string, tag: string) => {\n const el = this.root && this.child(this.root, name);\n return el ? el.kids.filter(k => this.bare(k.name) === tag).map(k => s.slice(k.start, k.end)) : [];\n };\n for (const f of list('numFmts', 'numFmt')) {\n const a = Object.fromEntries(attrs(f));\n this.formats.set(Number(a.numFmtId), a.formatCode);\n }\n const colours = this.root && this.child(this.root, 'colors');\n const custom = colours && this.child(colours, 'indexedColors');\n if (custom) this.custom = custom.kids.map(k => (attr(s, k, 'rgb') ?? 'FF000000').slice(-6).toUpperCase());\n this.fonts = list('fonts', 'font');\n this.fills = list('fills', 'fill');\n this.borders = list('borders', 'border');\n this.xfs = list('cellXfs', 'xf');\n if (!this.fonts.length) this.fonts = ['<font><sz val=\"11\"/><name val=\"Calibri\"/></font>'];\n if (!this.fills.length) this.fills = ['<fill><patternFill patternType=\"none\"/></fill>', '<fill><patternFill patternType=\"gray125\"/></fill>'];\n if (!this.borders.length) this.borders = ['<border><left/><right/><top/><bottom/><diagonal/></border>'];\n if (!this.xfs.length) this.xfs = ['<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>'];\n const raw = this.xfs.map(x => this.look(x));\n this.looks = raw.map(l => norm({ ...raw[0], ...l }));\n this.looks.forEach((l, i) => { const k = JSON.stringify(l); if (!this.index.has(k)) this.index.set(k, i); });\n }\n\n private prefix = () => this.root?.name.includes(':') ? this.root.name.slice(0, this.root.name.indexOf(':') + 1) : '';\n private bare = (name: string) => name.slice(name.indexOf(':') + 1);\n private child = (el: El, name: string) => el.kids.find(k => this.bare(k.name) === name);\n\n color(tag: string | undefined): string | undefined {\n if (!tag) return undefined;\n const a = Object.fromEntries(attrs(tag));\n if (a.auto === '1' || a.auto === 'true') return undefined;\n let hex: string | undefined;\n if (a.rgb) hex = a.rgb.slice(-6).toUpperCase();\n else if (a.theme !== undefined) hex = this.theme[Number(a.theme)];\n else if (a.indexed !== undefined) hex = (this.custom ?? indexed)[Number(a.indexed)] ?? (Number(a.indexed) === 64 ? '000000' : undefined);\n return hex && '#' + tinted(hex, Number(a.tint ?? 0));\n }\n\n private parts(xml: string) {\n const root = parse(xml).kids[0];\n const out = new Map<string, string>();\n if (root) for (const k of root.kids) out.set(this.bare(k.name), xml.slice(k.start, k.end));\n return { root, out, open: root ? xml.slice(root.start, root.open) : '' };\n }\n\n pattern(id: number) {\n return this.formats.get(id) ?? builtin[id] ?? (id === 0 ? 'General' : 'General');\n }\n\n look(xf: string): IStyleData {\n const a = Object.fromEntries(attrs(xf.slice(0, xf.indexOf('>') + 1)));\n const s: IStyleData = {};\n const font = this.parts(this.fonts[Number(a.fontId ?? 0)] ?? this.fonts[0]).out;\n const val = (tag: string | undefined) => tag && Object.fromEntries(attrs(tag)).val;\n const on = (tag: string | undefined) => tag !== undefined && !/^(0|false)$/.test(val(tag) ?? '1');\n if (on(font.get('b'))) s.bl = 1;\n if (on(font.get('i'))) s.it = 1;\n if (on(font.get('strike'))) s.st = { s: 1 };\n if (font.has('u') && val(font.get('u')) !== 'none') s.ul = { s: 1 };\n const va = val(font.get('vertAlign'));\n if (va === 'superscript') s.va = 3;\n if (va === 'subscript') s.va = 2;\n if (font.has('sz')) s.fs = Number(val(font.get('sz')));\n if (font.has('name')) s.ff = val(font.get('name'));\n const cl = this.color(font.get('color'));\n if (cl) s.cl = { rgb: cl };\n const fill = this.fills[Number(a.fillId ?? 0)];\n const pattern = fill && /patternType=\"(\\w+)\"/.exec(fill)?.[1];\n if (fill && pattern && pattern !== 'none' && pattern !== 'gray125') {\n const fg = this.color(/<(?:\\w+:)?fgColor\\b[^>]*>/.exec(fill)?.[0]);\n if (fg) s.bg = { rgb: fg };\n }\n const border = this.parts(this.borders[Number(a.borderId ?? 0)] ?? '<border/>');\n const bd: IBorderData = {};\n for (const [key, name] of sides) {\n const el = border.out.get(name) ?? border.out.get(name === 'left' ? 'start' : name === 'right' ? 'end' : name);\n const style = el && /style=\"(\\w+)\"/.exec(el)?.[1];\n if (!style || style === 'none') continue;\n bd[key] = { s: Math.max(1, lines.indexOf(style)), cl: { rgb: this.color(/<(?:\\w+:)?color\\b[^>]*>/.exec(el!)?.[0]) ?? '#000000' } };\n }\n const diagonal = border.out.get('diagonal');\n const dstyle = diagonal && /style=\"(\\w+)\"/.exec(diagonal)?.[1];\n if (dstyle && dstyle !== 'none') {\n const line = { s: Math.max(1, lines.indexOf(dstyle)), cl: { rgb: this.color(/<(?:\\w+:)?color\\b[^>]*>/.exec(diagonal!)?.[0]) ?? '#000000' } };\n const flags = Object.fromEntries(attrs(border.open));\n if (flags.diagonalDown === '1' || flags.diagonalDown === 'true') bd.tl_br = line;\n if (flags.diagonalUp === '1' || flags.diagonalUp === 'true') bd.bl_tr = line;\n }\n if (Object.keys(bd).length) s.bd = bd;\n const align = /<(?:\\w+:)?alignment\\b[^>]*>/.exec(xf)?.[0];\n if (align) {\n const al = Object.fromEntries(attrs(align));\n const ht = across.indexOf(al.horizontal === 'centerContinuous' ? 'center' : al.horizontal);\n if (ht > 0) s.ht = ht;\n const vt = down.indexOf(al.vertical);\n if (vt > 0) s.vt = vt;\n if (al.wrapText === '1' || al.wrapText === 'true') s.tb = 3;\n const turn = Number(al.textRotation ?? 0);\n if (turn === 255) s.tr = { a: 0, v: 1 };\n else if (turn) s.tr = { a: turn <= 90 ? turn : 90 - turn, v: 0 };\n }\n const id = Number(a.numFmtId ?? 0);\n if (id) s.n = { pattern: this.pattern(id) };\n return s;\n }\n\n find(look: IStyleData) {\n return this.index.get(JSON.stringify(norm(look)));\n }\n\n derive(base: number, look: IStyleData): number {\n look = norm(look);\n const key = JSON.stringify(look);\n const known = this.index.get(key);\n if (known !== undefined) return known;\n const was = this.looks[base] ?? {};\n const xf = this.xfs[base] ?? this.xfs[0];\n const head = xf.slice(0, xf.indexOf('>') + 1);\n const a = new Map(attrs(head));\n const same = (keys: (keyof IStyleData)[]) => keys.every(k => JSON.stringify(was[k]) === JSON.stringify(look[k]));\n const p = this.prefix();\n if (!same(['bl', 'it', 'st', 'ul', 'va', 'fs', 'ff', 'cl'])) {\n a.set('fontId', String(this.add('fonts', this.font(Number(a.get('fontId') ?? 0), was, look))));\n a.set('applyFont', '1');\n }\n if (!same(['bg'])) {\n a.set('fillId', String(look.bg?.rgb ? this.add('fills', `<${p}fill><${p}patternFill patternType=\"solid\"><${p}fgColor rgb=\"${argb(look.bg.rgb)}\"/><${p}bgColor indexed=\"64\"/></${p}patternFill></${p}fill>`) : 0));\n a.set('applyFill', '1');\n }\n if (!same(['bd'])) {\n a.set('borderId', String(this.add('borders', this.border(Number(a.get('borderId') ?? 0), was, look))));\n a.set('applyBorder', '1');\n }\n if (!same(['n'])) {\n a.set('numFmtId', String(this.format(look.n?.pattern ?? 'General')));\n a.set('applyNumberFormat', '1');\n }\n let inner = xf.endsWith('/>') && xf.indexOf('>') === xf.length - 1 ? '' : xf.slice(head.length, xf.lastIndexOf('<'));\n if (!same(['ht', 'vt', 'tb', 'tr'])) {\n const old = /<(?:\\w+:)?alignment\\b[^>]*>/.exec(inner)?.[0];\n const al = new Map(old ? attrs(old) : []);\n const put = (name: string, value: string | null) => value === null ? al.delete(name) : al.set(name, value);\n put('horizontal', look.ht ? across[look.ht] : null);\n put('vertical', look.vt ? down[look.vt] : null);\n put('wrapText', look.tb === 3 ? '1' : null);\n put('textRotation', look.tr?.v ? '255' : look.tr?.a ? String(look.tr.a > 0 ? look.tr.a : 90 - look.tr.a) : null);\n const tag = al.size ? `<${p}alignment ${[...al].map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : '';\n inner = old ? inner.replace(old, tag) : tag + inner;\n a.set('applyAlignment', '1');\n }\n const name = head.slice(1, head.search(/[\\s/>]/));\n const open = `<${name} ${[...a].map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}`;\n const next = inner ? `${open}>${inner}</${name}>` : `${open}/>`;\n this.xfs.push(next);\n this.added = true;\n const index = this.xfs.length - 1;\n this.looks.push(norm({ ...this.looks[0], ...this.look(next) }));\n this.index.set(key, index);\n return index;\n }\n\n private add(list: 'fonts' | 'fills' | 'borders', xml: string) {\n const at = this[list].indexOf(xml);\n if (at >= 0) return at;\n this[list].push(xml);\n this.added = true;\n return this[list].length - 1;\n }\n\n private font(id: number, was: IStyleData, look: IStyleData) {\n const p = this.prefix();\n const { out } = this.parts(this.fonts[id] ?? this.fonts[0]);\n const set = (name: string, xml: string | null) => xml === null ? out.delete(name) : out.set(name, xml);\n const diff = (k: keyof IStyleData) => JSON.stringify(was[k]) !== JSON.stringify(look[k]);\n if (diff('bl')) set('b', look.bl ? `<${p}b/>` : null);\n if (diff('it')) set('i', look.it ? `<${p}i/>` : null);\n if (diff('st')) set('strike', look.st?.s ? `<${p}strike/>` : null);\n if (diff('ul')) set('u', look.ul?.s ? `<${p}u/>` : null);\n if (diff('va')) set('vertAlign', look.va === 3 ? `<${p}vertAlign val=\"superscript\"/>` : look.va === 2 ? `<${p}vertAlign val=\"subscript\"/>` : null);\n if (diff('fs')) set('sz', `<${p}sz val=\"${look.fs ?? 11}\"/>`);\n if (diff('cl')) set('color', look.cl?.rgb ? `<${p}color rgb=\"${argb(look.cl.rgb)}\"/>` : null);\n if (diff('ff')) {\n set('name', `<${p}name val=\"${escape(look.ff ?? 'Calibri')}\"/>`);\n set('scheme', null);\n }\n return `<${p}font>${fontOrder.filter(k => out.has(k)).map(k => out.get(k)).join('')}</${p}font>`;\n }\n\n private border(id: number, was: IStyleData, look: IStyleData) {\n const p = this.prefix();\n const { out, open } = this.parts(this.borders[id] ?? this.borders[0]);\n const flags = new Map(open ? attrs(open) : []);\n const line = (name: string, b: IBorderData[keyof IBorderData] | undefined) => b ? `<${p}${name} style=\"${lines[b.s] || 'thin'}\"><${p}color rgb=\"${argb(b.cl?.rgb ?? '#000000')}\"/></${p}${name}>` : `<${p}${name}/>`;\n const before = was.bd ?? {}, after = look.bd ?? {};\n const parts: string[] = [];\n for (const [key, name] of sides) {\n const old = out.get(name) ?? out.get(name === 'left' ? 'start' : name === 'right' ? 'end' : name);\n parts.push(JSON.stringify(before[key]) === JSON.stringify(after[key]) && old ? old : line(name, after[key]));\n }\n const diagonal = after.tl_br ?? after.bl_tr;\n if (JSON.stringify(before.tl_br) === JSON.stringify(after.tl_br) && JSON.stringify(before.bl_tr) === JSON.stringify(after.bl_tr)) parts.push(out.get('diagonal') ?? `<${p}diagonal/>`);\n else {\n parts.push(line('diagonal', diagonal));\n if (after.tl_br) flags.set('diagonalDown', '1'); else flags.delete('diagonalDown');\n if (after.bl_tr) flags.set('diagonalUp', '1'); else flags.delete('diagonalUp');\n }\n for (const extra of ['vertical', 'horizontal']) if (out.has(extra)) parts.push(out.get(extra)!);\n const attributes = [...flags].map(([k, v]) => ` ${k}=\"${escape(v)}\"`).join('');\n return `<${p}border${attributes}>${parts.join('')}</${p}border>`;\n }\n\n format(pattern: string) {\n if (pattern === 'General') return 0;\n for (const [id, code] of this.formats) if (code === pattern) return id;\n for (const [id, code] of Object.entries(builtin)) if (code === pattern) return Number(id);\n const id = Math.max(163, ...this.formats.keys()) + 1;\n this.formats.set(id, pattern);\n this.added = true;\n return id;\n }\n\n build(): string | null {\n if (!this.added) return null;\n const p = this.prefix();\n const s = this.xml ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"></styleSheet>`;\n const root = parse(s).kids.find(k => !k.name.startsWith('?'))!;\n const order = ['numFmts', 'fonts', 'fills', 'borders', 'cellStyleXfs', 'cellXfs', 'cellStyles', 'dxfs', 'tableStyles', 'colors', 'extLst'];\n const lists: Record<string, string[]> = {\n numFmts: [...this.formats].map(([id, code]) => `<${p}numFmt numFmtId=\"${id}\" formatCode=\"${escape(code)}\"/>`),\n fonts: this.fonts, fills: this.fills, borders: this.borders, cellXfs: this.xfs,\n };\n const edits: [number, number, string][] = [];\n for (const name of Object.keys(lists)) {\n if (!lists[name].length) continue;\n const el = root.kids.find(k => this.bare(k.name) === name);\n if (el) {\n const open = s.slice(el.start, el.open).replace(/\\s*\\/?>$/, '').replace(/\\scount=\"\\d*\"/, '');\n edits.push([el.start, el.end, `${open} count=\"${lists[name].length}\">${lists[name].join('')}</${el.name}>`]);\n } else {\n const after = root.kids.find(k => order.indexOf(this.bare(k.name)) > order.indexOf(name));\n const at = after ? after.start : root.close;\n edits.push([at, at, `<${p}${name} count=\"${lists[name].length}\">${lists[name].join('')}</${p}${name}>`]);\n }\n }\n edits.sort((x, y) => y[0] - x[0]);\n let out = s;\n for (const [from, to, xml] of edits) out = out.slice(0, from) + xml + out.slice(to);\n return out;\n }\n}\n\nconst argb = (hex: string) => 'FF' + hex.replace('#', '').toUpperCase().padStart(6, '0').slice(-6);\n","import type { ICellData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport { unescape } from '../docx/xml';\nimport { numbered, type SheetModel } from './model';\nimport { Pack, type Rel } from './pack';\nimport { boxes, cell, plain, shifted } from './refs';\nimport { Styles } from './styles';\n\nexport type CellRec = { start: number; end: number; shared: boolean };\nexport type RowRec = { open: string };\nexport type ColSpec = { min: number; max: number; xml: string; width?: number; hidden: boolean; style?: number };\nexport type NoteRec = { ref: string; xml: string; text: string };\nexport type SheetRec = {\n sid: string; name: string; sheetId: number; part: string; xml: string; p: string; rels: Rel[];\n bounds: [number, number, number, number];\n rows: Map<number, RowRec>; cells: Map<number, CellRec>; cols: ColSpec[];\n merges: string[]; validations: string[]; notes: NoteRec[]; comments: string | null; vml: string | null; authors: string[];\n width: number;\n};\nexport type Book = {\n pack: Pack; part: string; xml: string; rels: Rel[]; styles: Styles; stylesPart: string | null;\n sheets: SheetRec[]; entries: { name: string; sheetId: number; rid: string; xml: string; sheet: boolean }[];\n};\n\nexport const key = (r: number, c: number) => r * 16384 + c;\nexport const px = { row: (pt: number) => Math.round(pt * 4 / 3 * 100) / 100, col: (w: number) => Math.round(w * 7 + 5) };\nexport const pt = { row: (h: number) => Math.round(h * 3 / 4 * 100) / 100, col: (w: number) => Math.max(0, Math.round((w - 5) / 7 * 100) / 100) };\n\nconst decodeX = (s: string) => s.includes('_x') ? s.replace(/_x([0-9A-Fa-f]{4})_/g, (_, h: string) => String.fromCharCode(parseInt(h, 16))) : s;\n\nexport function runs(xml: string) {\n const clean = xml.includes('rPh') ? xml.replace(/<(\\w+:)?rPh\\b[\\s\\S]*?<\\/(\\w+:)?rPh>/g, '') : xml;\n let out = '';\n for (const m of clean.matchAll(/<(?:\\w+:)?t(?:\\s[^>]*)?(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?t>)/g)) out += m[1] ?? '';\n return decodeX(unescape(out));\n}\n\nconst patterns = new Map<string, RegExp>();\nexport const attr = (tag: string, name: string) => {\n let re = patterns.get(name);\n if (!re) patterns.set(name, re = new RegExp(`\\\\s${name}=\"([^\"]*)\"`));\n const m = re.exec(tag);\n return m ? unescape(m[1]) : null;\n};\n\nconst element = (xml: string, name: string) => {\n const m = new RegExp(`<((?:\\\\w+:)?${name})\\\\b[^>]*?(\\\\/?)>`).exec(xml);\n if (!m) return null;\n if (m[2]) return { start: m.index, open: m.index + m[0].length, close: m.index + m[0].length, end: m.index + m[0].length, tag: m[0] };\n const close = xml.indexOf(`</${m[1]}>`, m.index);\n return { start: m.index, open: m.index + m[0].length, close, end: close + m[1].length + 3, tag: m[0] };\n};\n\nexport function worksheets(bytes: ArrayBuffer) {\n const pack = new Pack(bytes);\n const part = pack.rels('').find(r => r.type === 'officeDocument')?.target ?? 'xl/workbook.xml';\n const rels = pack.rels(part);\n return [...(pack.text(part) ?? '').matchAll(/<(?:\\w+:)?sheet\\b[^>]*\\/?>/g)]\n .filter(m => rels.find(r => r.id === /\\s[\\w]+:id=\"([^\"]*)\"/.exec(m[0])?.[1])?.type === 'worksheet')\n .map(m => Number(attr(m[0], 'sheetId')));\n}\n\nexport function load(bytes: ArrayBuffer): { model: SheetModel; book: Book } {\n const pack = new Pack(bytes);\n const office = pack.rels('').find(r => r.type === 'officeDocument');\n const part = office?.target ?? 'xl/workbook.xml';\n const xml = pack.text(part);\n if (!xml) throw new Error('No workbook');\n const rels = pack.rels(part);\n const target = (type: string) => rels.find(r => r.type === type)?.target;\n const themePart = target('theme');\n const stylesPart = target('styles');\n const styles = new Styles(stylesPart ? pack.text(stylesPart) : null, themePart ? pack.text(themePart) : null);\n const stringsPart = target('sharedStrings');\n const strings: string[] = [];\n const sst = stringsPart ? pack.text(stringsPart) : null;\n if (sst) for (const m of sst.matchAll(/<(?:\\w+:)?si\\b[^>]*?(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?si>)/g)) strings.push(m[1] ? runs(m[1]) : '');\n\n const date1904 = /<(?:\\w+:)?workbookPr\\b[^>]*\\bdate1904=\"(1|true)\"/.test(xml);\n const entries: Book['entries'] = [];\n for (const m of xml.matchAll(/<(?:\\w+:)?sheet\\b[^>]*\\/?>/g)) {\n const tag = m[0];\n const rid = /\\s[\\w]+:id=\"([^\"]*)\"/.exec(tag)?.[1] ?? '';\n const rel = rels.find(r => r.id === rid);\n entries.push({ name: attr(tag, 'name') ?? '', sheetId: Number(attr(tag, 'sheetId')), rid, xml: tag, sheet: rel?.type === 'worksheet' });\n }\n\n const book: IWorkbookData = {\n id: 'book', name: '', appVersion: '', locale: 'enUS' as IWorkbookData['locale'], styles: {}, sheetOrder: [], sheets: {}, resources: [],\n defaultStyle: styles.looks[0],\n };\n if (date1904) book.dateSystem = 'date1904' as IWorkbookData['dateSystem'];\n const notes: Record<string, Record<number, Record<number, unknown>>> = {};\n const validations: Record<string, unknown[]> = {};\n const filters: Record<string, unknown> = {};\n const model: SheetModel = { book, lines: {}, origin: { sheets: {}, lines: {} } };\n const sheets: SheetRec[] = [];\n const active = Number(/<(?:\\w+:)?workbookView\\b[^>]*\\bactiveTab=\"(\\d+)\"/.exec(xml)?.[1] ?? 0);\n const useStyle = (xf: number) => {\n const id = `x${xf}`;\n if (!(id in book.styles)) book.styles[id] = styles.looks[xf] ?? {};\n return id;\n };\n\n for (const entry of entries) {\n if (!entry.sheet) continue;\n const rel = rels.find(r => r.id === entry.rid)!;\n const sxml = pack.text(rel.target);\n if (sxml === null) continue;\n const sid = `s${entry.sheetId}`;\n const p = /<(\\w+:)?worksheet\\b/.exec(sxml)?.[1] ?? '';\n const srels = pack.rels(rel.target);\n const sheet: Partial<IWorksheetData> = { id: sid, name: entry.name, cellData: {}, rowData: {}, columnData: {}, mergeData: [] };\n const state = attr(entry.xml, 'state');\n if (state === 'hidden') sheet.hidden = 1;\n if (state === 'veryHidden') sheet.hidden = 2 as IWorksheetData['hidden'];\n\n const open = element(sxml, `${p}sheetData`);\n const bounds: SheetRec['bounds'] = open ? [open.start, open.open, open.close, open.end] : [sxml.length, sxml.length, sxml.length, sxml.length];\n const head = open ? sxml.slice(0, open.start) : sxml;\n const tail = open ? sxml.slice(open.end) : '';\n\n const format = /<(?:\\w+:)?sheetFormatPr\\b[^>]*>/.exec(head)?.[0];\n const defaultRow = format && attr(format, 'defaultRowHeight') ? px.row(Number(attr(format, 'defaultRowHeight'))) : 20;\n const defaultCol = format && attr(format, 'defaultColWidth') ? px.col(Number(attr(format, 'defaultColWidth'))) : format && attr(format, 'baseColWidth') ? px.col(Number(attr(format, 'baseColWidth')) + 0.71) : 64;\n sheet.defaultRowHeight = defaultRow;\n sheet.defaultColumnWidth = defaultCol;\n\n const view = /<(?:\\w+:)?sheetView\\b[^>]*>/.exec(head)?.[0];\n if (view && attr(view, 'showGridLines') === '0') sheet.showGridlines = 0;\n if (view && attr(view, 'rightToLeft') === '1') sheet.rightToLeft = 1;\n if (view && attr(view, 'zoomScale')) sheet.zoomRatio = Number(attr(view, 'zoomScale')) / 100;\n const pane = /<(?:\\w+:)?pane\\b[^>]*>/.exec(head)?.[0];\n if (pane && /^frozen/.test(attr(pane, 'state') ?? '')) {\n const x = Number(attr(pane, 'xSplit') ?? 0), y = Number(attr(pane, 'ySplit') ?? 0);\n sheet.freeze = { xSplit: x, ySplit: y, startRow: y, startColumn: x };\n }\n const tab = /<(?:\\w+:)?tabColor\\b[^>]*>/.exec(head)?.[0];\n if (tab) {\n const c = styles.color(tab);\n if (c) sheet.tabColor = c;\n }\n\n const cols: ColSpec[] = [];\n for (const m of head.matchAll(/<(?:\\w+:)?col\\b[^>]*\\/?>/g)) {\n const t = m[0];\n const spec: ColSpec = { min: Number(attr(t, 'min')), max: Number(attr(t, 'max')), xml: t, hidden: /^(1|true)$/.test(attr(t, 'hidden') ?? '') };\n if (attr(t, 'width') !== null && /^(1|true)$/.test(attr(t, 'customWidth') ?? '1')) spec.width = px.col(Number(attr(t, 'width')));\n if (attr(t, 'style') !== null && attr(t, 'style') !== '0') spec.style = Number(attr(t, 'style'));\n cols.push(spec);\n }\n\n const cellData: Record<number, Record<number, ICellData>> = {};\n const rowData: Record<number, { h?: number; hd?: number; s?: string; ia?: number }> = {};\n const rows = new Map<number, RowRec>();\n const cells = new Map<number, CellRec>();\n const masters = new Map<string, { f: string; r: number; c: number }>();\n const children: [number, number, string][] = [];\n const rowStyles = new Map<number, number>();\n let maxRow = -1, maxCol = -1;\n if (open && open.close > open.open) {\n const end = open.close;\n let at = open.open, row = -1, col = -1;\n while (at < end) {\n const lt = sxml.indexOf('<', at);\n if (lt < 0 || lt >= end) break;\n const gt = sxml.indexOf('>', lt);\n if (sxml.charCodeAt(lt + 1) === 47) { at = gt + 1; continue; }\n let j = lt + 1;\n while (j < gt) {\n const ch = sxml.charCodeAt(j);\n if (ch === 32 || ch === 47 || ch === 9 || ch === 10 || ch === 13) break;\n j++;\n }\n const name = sxml.slice(lt + 1 + p.length, j);\n const tag = sxml.slice(lt, gt + 1);\n if (name === 'row') {\n const r = attr(tag, 'r');\n row = r ? Number(r) - 1 : row + 1;\n col = -1;\n rows.set(row, { open: tag });\n const rd: { h?: number; hd?: number; s?: string; ia?: number } = {};\n const ht = attr(tag, 'ht');\n if (ht !== null) rd.h = px.row(Number(ht));\n if (ht !== null && /^(1|true)$/.test(attr(tag, 'customHeight') ?? '')) rd.ia = 0;\n if (/^(1|true)$/.test(attr(tag, 'hidden') ?? '')) rd.hd = 1;\n const rs = attr(tag, 's');\n if (rs !== null && /^(1|true)$/.test(attr(tag, 'customFormat') ?? '')) {\n rowStyles.set(row, Number(rs));\n rd.s = useStyle(Number(rs));\n }\n if (Object.keys(rd).length) rowData[row] = rd;\n if (rd.h !== undefined || rd.hd || rd.s) maxRow = Math.max(maxRow, row);\n at = gt + 1;\n continue;\n }\n if (name !== 'c') { at = gt + 1; continue; }\n const ref = attr(tag, 'r');\n if (ref) [, col] = cell(ref);\n else col += 1;\n const self = sxml.charCodeAt(gt - 1) === 47;\n const close = self ? gt + 1 : sxml.indexOf(`</${p}c>`, gt);\n const stop = self ? gt + 1 : close + p.length + 4;\n const inner = self ? '' : sxml.slice(gt + 1, close);\n const t = attr(tag, 't');\n const s = Number(attr(tag, 's') ?? 0);\n const out: ICellData = {};\n let shared = false;\n if (inner) {\n const f = /<(?:\\w+:)?f\\b([^>]*?)(?:\\/>|>([\\s\\S]*?)<\\/(?:\\w+:)?f>)/.exec(inner);\n if (f) {\n const kind = attr(f[0], 't');\n const formula = f[2] === undefined ? '' : unescape(f[2]);\n if (kind === 'shared') {\n shared = true;\n const si = attr(f[0], 'si') ?? '';\n if (formula) masters.set(si, { f: formula, r: row, c: col });\n else children.push([row, col, si]);\n if (formula) out.f = '=' + plain(formula);\n } else if (kind !== 'dataTable' && formula) out.f = '=' + plain(formula);\n }\n const v = /<(?:\\w+:)?v>([\\s\\S]*?)<\\/(?:\\w+:)?v>/.exec(inner)?.[1];\n if (t === 'inlineStr') {\n const is = /<(?:\\w+:)?is>([\\s\\S]*?)<\\/(?:\\w+:)?is>/.exec(inner)?.[1];\n if (is !== undefined) { out.v = runs(is); out.t = 1; }\n } else if (v !== undefined) {\n if (t === 's') { out.v = strings[Number(v)] ?? ''; out.t = 1; }\n else if (t === 'str' || t === 'e') { out.v = decodeX(unescape(v)); out.t = 1; }\n else if (t === 'b') { out.v = v === '1' || v === 'true'; out.t = 3; }\n else if (t === 'd') { const d = Date.parse(v); out.v = Number.isNaN(d) ? v : (d - Date.UTC(1899, 11, 30)) / 86400000; out.t = Number.isNaN(d) ? 1 : 2; }\n else { out.v = Number(v); out.t = 2; }\n }\n }\n const styled = s || rowStyles.has(row) || cols.some(spec => spec.style !== undefined && col + 1 >= spec.min && col + 1 <= spec.max);\n if (styled) out.s = useStyle(s);\n if (out.v !== undefined || out.f || out.s || shared) {\n (cellData[row] ??= {})[col] = out;\n if (out.v !== undefined || out.f || s) { maxRow = Math.max(maxRow, row); maxCol = Math.max(maxCol, col); }\n }\n cells.set(key(row, col), { start: lt, end: stop, shared });\n at = stop;\n }\n }\n for (const [r, c, si] of children) {\n const m = masters.get(si);\n const target = (cellData[r] ??= {})[c] ??= {};\n if (m) target.f = '=' + plain(shifted(m.f, r - m.r, c - m.c));\n }\n\n for (const spec of cols) if (spec.max <= 1024) maxCol = Math.max(maxCol, spec.max - 1);\n\n const merges: string[] = [];\n for (const m of tail.matchAll(/<(?:\\w+:)?mergeCell\\b[^>]*\\/?>/g)) {\n const ref = attr(m[0], 'ref');\n if (!ref) continue;\n merges.push(ref);\n for (const b of boxes(ref)) {\n sheet.mergeData!.push({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn });\n maxRow = Math.max(maxRow, b.endRow);\n maxCol = Math.max(maxCol, b.endColumn);\n }\n }\n\n const rules: unknown[] = [];\n const dvs: string[] = [];\n const dvBlock = element(tail, `${p}dataValidations`);\n if (dvBlock) for (const m of tail.slice(dvBlock.open, dvBlock.close).matchAll(/<(?:\\w+:)?dataValidation\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/(?:\\w+:)?dataValidation>)/g)) {\n const rule = validation(m[0], `dv${dvs.length}`);\n dvs.push(m[0]);\n if (rule) rules.push(rule);\n }\n if (rules.length) validations[sid] = rules;\n\n const af = /<(?:\\w+:)?autoFilter\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/(?:\\w+:)?autoFilter>)/.exec(tail)?.[0] ?? null;\n if (af) {\n const [b] = boxes(attr(af, 'ref') ?? '');\n if (b) filters[sid] = { ref: { ...b, rangeType: 0 }, filterColumns: criteria(af), cachedFilteredOut: [] };\n }\n\n const sheetNotes: NoteRec[] = [];\n const commentsRel = srels.find(r => r.type === 'comments');\n const vmlRel = srels.find(r => r.type === 'vmlDrawing');\n const authors: string[] = [];\n if (commentsRel) {\n const cx = pack.text(commentsRel.target) ?? '';\n for (const m of cx.matchAll(/<(?:\\w+:)?author>([\\s\\S]*?)<\\/(?:\\w+:)?author>|<(?:\\w+:)?author\\/>/g)) authors.push(unescape(m[1] ?? ''));\n for (const m of cx.matchAll(/<(?:\\w+:)?comment\\b[^>]*>[\\s\\S]*?<\\/(?:\\w+:)?comment>/g)) {\n const ref = attr(m[0], 'ref') ?? '';\n const textXml = /<(?:\\w+:)?text>([\\s\\S]*?)<\\/(?:\\w+:)?text>/.exec(m[0])?.[1] ?? '';\n const note = { ref, xml: m[0], text: runs(textXml) };\n sheetNotes.push(note);\n const [r, c] = cell(ref);\n if (r < 0) continue;\n ((notes[sid] ??= {})[r] ??= {})[c] = { note: note.text, width: 160, height: 72, show: false, id: `n${sheetNotes.length - 1}`, row: r, col: c };\n maxRow = Math.max(maxRow, r);\n maxCol = Math.max(maxCol, c);\n }\n }\n\n const height = Math.max(maxRow + 1 + 100, 1000);\n const width = Math.max(maxCol + 1 + 4, 26);\n for (const spec of cols) {\n for (let c = spec.min - 1; c < Math.min(spec.max, width); c++) {\n const cd: { w?: number; hd?: number; s?: string } = {};\n if (spec.width !== undefined) cd.w = spec.width;\n if (spec.hidden) cd.hd = 1;\n if (spec.style !== undefined) cd.s = useStyle(spec.style);\n if (Object.keys(cd).length) (sheet.columnData as Record<number, unknown>)[c] = cd;\n }\n }\n sheet.rowCount = height;\n sheet.columnCount = width;\n sheet.cellData = cellData;\n sheet.rowData = rowData;\n book.sheets[sid] = sheet;\n book.sheetOrder.push(sid);\n model.lines[sid] = { rows: numbered('r', height), cols: numbered('c', width) };\n model.origin.lines[sid] = { rows: numbered('r', height), cols: numbered('c', width) };\n model.origin.sheets[sid] = entry.sheetId;\n sheets.push({\n sid, name: entry.name, sheetId: entry.sheetId, part: rel.target, xml: sxml, p, rels: srels, bounds, rows, cells, cols, merges,\n validations: dvs, notes: sheetNotes, comments: commentsRel?.target ?? null, vml: vmlRel?.target ?? null, authors, width,\n });\n }\n\n const names: Record<string, unknown> = {};\n for (const m of xml.matchAll(/<(?:\\w+:)?definedName\\b([^>]*)>([\\s\\S]*?)<\\/(?:\\w+:)?definedName>/g)) {\n const name = attr(m[0], 'name') ?? '';\n if (name.startsWith('_xlnm.') || /^(1|true)$/.test(attr(m[0], 'hidden') ?? '')) continue;\n const local = attr(m[0], 'localSheetId');\n const scoped = local === null ? null : entries[Number(local)];\n const id = `d${Object.keys(names).length}`;\n names[id] = { id, name, formulaOrRefString: plain(unescape(m[2])), localSheetId: scoped ? `s${scoped.sheetId}` : 'AllDefaultWorkbook' };\n }\n\n const resources = book.resources!;\n if (Object.keys(names).length) resources.push({ name: 'SHEET_DEFINED_NAME_PLUGIN', data: JSON.stringify(names) });\n if (Object.keys(notes).length) resources.push({ name: 'SHEET_NOTE_PLUGIN', data: JSON.stringify(notes) });\n if (Object.keys(validations).length) resources.push({ name: 'SHEET_DATA_VALIDATION_PLUGIN', data: JSON.stringify(validations) });\n if (Object.keys(filters).length) resources.push({ name: 'SHEET_FILTER_PLUGIN', data: JSON.stringify(filters) });\n const shown = entries[active];\n if (shown?.sheet && book.sheetOrder.includes(`s${shown.sheetId}`)) model.active = `s${shown.sheetId}`;\n return { model, book: { pack, part, xml, rels, styles, stylesPart: stylesPart ?? null, sheets, entries } };\n}\n\nconst kinds: Record<string, string> = { whole: 'whole', decimal: 'decimal', list: 'list', textLength: 'textLength', custom: 'custom' };\nexport const stops: Record<string, number> = { information: 0, stop: 1, warning: 2 };\n\nexport function validation(xml: string, uid: string) {\n const type = attr(xml, 'type') ?? 'none';\n const kind = kinds[type];\n const ranges = boxes(attr(xml, 'sqref') ?? '');\n if (!kind || !ranges.length) return null;\n const f = (n: number) => {\n const m = new RegExp(`<(?:\\\\w+:)?formula${n}>([\\\\s\\\\S]*?)</(?:\\\\w+:)?formula${n}>`).exec(xml)?.[1];\n return m === undefined ? undefined : plain(unescape(m));\n };\n let formula1 = f(1), formula2 = f(2);\n if (kind === 'list' && formula1 !== undefined) formula1 = /^\".*\"$/.test(formula1) ? formula1.slice(1, -1).replace(/\"\"/g, '\"') : '=' + formula1;\n else if (kind === 'custom' && formula1 !== undefined) formula1 = '=' + formula1;\n else if (formula1 !== undefined && !/^-?[\\d.]+$/.test(formula1)) formula1 = '=' + formula1;\n if (formula2 !== undefined && !/^-?[\\d.]+$/.test(formula2)) formula2 = '=' + formula2;\n const flag = (name: string) => /^(1|true)$/.test(attr(xml, name) ?? '');\n const rule: Record<string, unknown> = { uid, type: kind, ranges: ranges.map(b => ({ ...b, rangeType: 0 })) };\n const operator = attr(xml, 'operator');\n if (kind !== 'list' && kind !== 'custom') rule.operator = operator ?? 'between';\n if (formula1 !== undefined) rule.formula1 = formula1;\n if (formula2 !== undefined) rule.formula2 = formula2;\n if (flag('allowBlank')) rule.allowBlank = true;\n if (kind === 'list') rule.showDropDown = !flag('showDropDown');\n if (flag('showErrorMessage')) rule.showErrorMessage = true;\n if (flag('showInputMessage')) rule.showInputMessage = true;\n const style = attr(xml, 'errorStyle');\n if (style && style in stops) rule.errorStyle = stops[style];\n for (const name of ['error', 'errorTitle', 'prompt', 'promptTitle']) if (attr(xml, name) !== null) rule[name] = attr(xml, name);\n return rule;\n}\n\nexport function criteria(xml: string) {\n const out: unknown[] = [];\n for (const m of xml.matchAll(/<(?:\\w+:)?filterColumn\\b[^>]*>([\\s\\S]*?)<\\/(?:\\w+:)?filterColumn>/g)) {\n const colId = Number(attr(m[0], 'colId') ?? 0);\n const inner = m[1];\n if (/<(?:\\w+:)?filters\\b/.test(inner)) {\n const values = [...inner.matchAll(/<(?:\\w+:)?filter\\b[^>]*\\/?>/g)].map(f => attr(f[0], 'val') ?? '');\n const blank = /<(?:\\w+:)?filters\\b[^>]*\\bblank=\"(1|true)\"/.test(inner);\n out.push({ colId, filters: { ...(values.length && { filters: values }), ...(blank && { blank: true }) } });\n } else if (/<(?:\\w+:)?customFilters\\b/.test(inner)) {\n const and = /<(?:\\w+:)?customFilters\\b[^>]*\\band=\"(1|true)\"/.test(inner);\n const list = [...inner.matchAll(/<(?:\\w+:)?customFilter\\b[^>]*\\/?>/g)].map(f => ({ ...(attr(f[0], 'operator') && { operator: attr(f[0], 'operator') }), val: attr(f[0], 'val') ?? '' }));\n out.push({ colId, customFilters: { ...(and && { and: 1 }), customFilters: list } });\n }\n }\n return out;\n}\n","import type { ICellData, IStyleData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport { escape, unescape } from '../docx/xml';\nimport { SheetRefusal, type SheetModel } from './model';\nimport { relsOf, relative } from './pack';\nimport { a1, box, boxes, cell, quoted, remapped, renamed, shifted, span, squeeze, stored, type Box, type Map1 } from './refs';\nimport { norm } from './styles';\nimport { attr, key, load, pt, stops, type Book, type SheetRec } from './xlsx';\n\ntype Cells = Record<number, Record<number, ICellData>>;\ntype Sheet = Partial<IWorksheetData>;\ntype Rule = Record<string, unknown> & { uid: string; ranges: Box[] };\ntype Note = { note: string; row: number; col: number };\n\nconst order = ['sheetPr', 'dimension', 'sheetViews', 'sheetFormatPr', 'cols', 'sheetData', 'sheetCalcPr', 'sheetProtection', 'protectedRanges', 'scenarios', 'autoFilter',\n 'sortState', 'dataConsolidate', 'customSheetViews', 'mergeCells', 'phoneticPr', 'conditionalFormatting', 'dataValidations', 'hyperlinks', 'printOptions', 'pageMargins',\n 'pageSetup', 'headerFooter', 'rowBreaks', 'colBreaks', 'customProperties', 'cellWatches', 'ignoredErrors', 'smartTags', 'drawing', 'legacyDrawing', 'legacyDrawingHF',\n 'drawingHF', 'picture', 'oleObjects', 'controls', 'webPublishItems', 'tableParts', 'extLst'];\nconst errors = /^#(NULL!|DIV\\/0!|VALUE!|REF!|NAME\\?|NUM!|N\\/A|GETTING_DATA|SPILL!|CALC!)$/;\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst blankSheet = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><dimension ref=\"A1\"/><sheetViews><sheetView workbookViewId=\"0\"/></sheetViews><sheetFormatPr defaultRowHeight=\"15\"/><sheetData/><pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/></worksheet>';\n\nconst same = (a: unknown, b: unknown) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);\nconst blank = (v: unknown) => v === undefined || v === null || v === '';\nconst patterns = new Map<string, RegExp>();\nconst setAttr = (tag: string, name: string, value: string | null) => {\n let re = patterns.get(name);\n if (!re) patterns.set(name, re = new RegExp(`\\\\s${name}=\"[^\"]*\"`));\n if (value === null) return tag.replace(re, '');\n if (re.test(tag)) return tag.replace(re, () => ` ${name}=\"${escape(value)}\"`);\n return tag.replace(/\\s*(\\/?>)$/, end => ` ${name}=\"${escape(value)}\"${end.trim()}`);\n};\nconst literal = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nfunction resource(book: IWorkbookData, name: string): Record<string, unknown> | null {\n const found = book.resources?.find(r => r.name === name);\n return found ? JSON.parse(found.data || '{}') : null;\n}\n\nexport function textOf(c: ICellData | undefined): string | number | boolean | null {\n if (!c) return null;\n const stream = c.p?.body?.dataStream;\n if (stream !== undefined && blank(c.v)) return stream.replace(/\\r?\\n$/, '').replace(/\\r\\n?/g, '\\n');\n if (c.t === 3 && typeof c.v === 'number') return c.v === 1;\n return c.v ?? null;\n}\n\nfunction formulas(cells: Cells) {\n const masters = new Map<string, { f: string; r: number; c: number }>();\n for (const [r, line] of Object.entries(cells)) for (const [c, x] of Object.entries(line ?? {})) if (x?.si && x.f) masters.set(x.si, { f: x.f, r: +r, c: +c });\n return (r: number, c: number, x: ICellData) => {\n if (x.f) return x.f;\n if (!x.si) return null;\n const m = masters.get(x.si);\n return m ? '=' + shifted(m.f.replace(/^=/, ''), r - m.r, c - m.c) : null;\n };\n}\n\nfunction equalValue(a: unknown, b: unknown) {\n if (blank(a) && blank(b)) return true;\n if (typeof a === 'number' && typeof b === 'number') return a === b || Math.abs(a - b) <= 1e-9 * Math.max(1, Math.abs(a), Math.abs(b));\n return a === b;\n}\n\nfunction lookup(book: IWorkbookData, s: unknown): IStyleData {\n if (!s) return {};\n return (typeof s === 'string' ? book.styles[s] : s as IStyleData) ?? {};\n}\n\nexport class Axis {\n at: Map<string, number>;\n back: Map<string, number>;\n moved: boolean;\n shift: number;\n constructor(public old: string[], public now: string[]) {\n this.at = new Map(now.map((id, i) => [id, i]));\n this.back = new Map(old.map((id, i) => [id, i]));\n this.moved = old.some((id, i) => this.at.get(id) !== i);\n const last = old.length ? this.at.get(old[old.length - 1]) : undefined;\n this.shift = last === undefined ? now.length - old.length : last - (old.length - 1);\n }\n map: Map1 = i => i < this.old.length ? this.at.get(this.old[i]) ?? -1 : i + this.shift;\n from = (i: number) => i < this.now.length ? this.back.get(this.now[i]) ?? -1 : i - this.shift;\n near = (i: number) => {\n for (let j = i; j < this.old.length; j++) if (this.map(j) >= 0) return this.map(j);\n for (let j = i; j >= 0; j--) if (this.map(j) >= 0) return this.map(j);\n return 0;\n };\n}\n\nfunction find(xml: string, name: string) {\n const m = new RegExp(`<((?:\\\\w+:)?${name})\\\\b[^>]*?(\\\\/?)>`).exec(xml);\n if (!m) return null;\n if (m[2]) return { start: m.index, end: m.index + m[0].length, tag: m[0] };\n const close = xml.indexOf(`</${m[1]}>`, m.index);\n return { start: m.index, end: close + m[1].length + 3, tag: m[0] };\n}\n\nfunction place(xml: string, name: string, value: string | null) {\n const found = find(xml, name);\n if (found) return xml.slice(0, found.start) + (value ?? '') + xml.slice(found.end);\n if (value === null) return xml;\n const rank = order.indexOf(name);\n let at = -1;\n for (const later of order.slice(rank + 1)) {\n const f = find(xml, later);\n if (f && (at < 0 || f.start < at)) at = f.start;\n }\n if (at < 0) at = xml.search(/<\\/(?:\\w+:)?worksheet>\\s*$/);\n if (at < 0) at = xml.length;\n return xml.slice(0, at) + value + xml.slice(at);\n}\n\nfunction remapZone(xml: string, mine: (s: string | null) => boolean, rows: Axis, cols: Axis) {\n const ranges = (sqref: string) => boxes(sqref).map(b => squeeze(b, rows.map, cols.map)).filter((b): b is Box => b !== null).map(span).join(' ');\n const formula = (f: string) => remapped(f, mine, rows.map, cols.map);\n let out = xml.replace(/<((?:\\w+:)?)(conditionalFormatting|dataValidation|hyperlink|ignoredError|protectedRange)\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1\\2>)/g, (all: string) => {\n const sq = attr(all, 'sqref');\n const ref = attr(all, 'ref');\n let next = all;\n if (sq !== null) {\n const s = ranges(sq);\n if (!s) return '';\n next = setAttr(next.slice(0, next.indexOf('>') + 1), 'sqref', s) + next.slice(next.indexOf('>') + 1);\n }\n if (ref !== null) {\n const s = ranges(ref);\n if (!s) return '';\n next = setAttr(next.slice(0, next.indexOf('>') + 1), 'ref', s) + next.slice(next.indexOf('>') + 1);\n }\n return next.replace(/<((?:\\w+:)?)(formula|formula1|formula2)>([\\s\\S]*?)<\\/\\1\\2>/g, (_, p: string, n: string, f: string) => `<${p}${n}>${escape(formula(unescape(f)))}</${p}${n}>`);\n });\n out = out.replace(/<((?:\\w+:)?)(autoFilter|sortState|sortCondition)\\b[^>]*?>/g, (tag: string) => {\n const ref = attr(tag, 'ref');\n return ref === null ? tag : setAttr(tag, 'ref', ranges(ref) || ref);\n });\n out = out.replace(/<(xm:sqref)>([\\s\\S]*?)<\\/xm:sqref>/g, (_, n: string, s: string) => `<${n}>${ranges(s)}</${n}>`);\n out = out.replace(/<(xm:f)>([\\s\\S]*?)<\\/xm:f>/g, (_, n: string, f: string) => `<${n}>${escape(formula(unescape(f)))}</${n}>`);\n out = out.replace(/<((?:\\w+:)?)(selection|pane)\\b[^>]*?>/g, (tag: string) => {\n let next = tag;\n for (const name of ['activeCell', 'topLeftCell']) {\n const v = attr(next, name);\n if (v === null) continue;\n const [r, c] = cell(v);\n if (r >= 0) next = setAttr(next, name, a1(rows.near(r), cols.near(c)));\n }\n const sq = attr(next, 'sqref');\n return sq === null ? next : setAttr(next, 'sqref', ranges(sq) || 'A1');\n });\n return out;\n}\n\nfunction anchors(xml: string, rows: Axis, cols: Axis) {\n return xml.replace(/<((?:\\w+:)?)(from|to)>([\\s\\S]*?)<\\/\\1\\2>/g, (all: string, p: string, n: string, inner: string) => {\n const next = inner\n .replace(/<((?:\\w+:)?)col>(\\d+)<\\/\\1col>/, (_, q: string, v: string) => `<${q}col>${cols.near(Number(v))}</${q}col>`)\n .replace(/<((?:\\w+:)?)row>(\\d+)<\\/\\1row>/, (_, q: string, v: string) => `<${q}row>${rows.near(Number(v))}</${q}row>`);\n return `<${p}${n}>${next}</${p}${n}>`;\n });\n}\n\nexport function writeXlsx(original: ArrayBuffer, model: SheetModel): ArrayBuffer {\n const { model: base, book } = load(original);\n const { pack, styles } = book;\n const cur = model.book;\n const defaults = norm(styles.looks[0] ?? {});\n const bySheetId = new Map(book.sheets.map(s => [s.sheetId, s]));\n const kept = new Set(cur.sheetOrder.map(sid => model.origin.sheets[sid]).filter(id => bySheetId.has(id)));\n const removed = book.sheets.filter(s => !kept.has(s.sheetId));\n const charts = [...pack.names.keys()].filter(n => /^xl\\/charts\\/chart[^/]*\\.xml$/.test(n));\n const caches = book.rels.filter(r => r.type === 'pivotCacheDefinition').map(r => r.target);\n for (const gone of removed) {\n const pattern = new RegExp(`(^|[^\\\\w.])(${literal(gone.name)}|'${literal(gone.name.replace(/'/g, \"''\"))}')!`);\n const own = new Set(gone.rels.filter(r => r.type === 'drawing').flatMap(r => pack.rels(r.target)).filter(r => r.type === 'chart').map(r => r.target));\n if (charts.some(c => !own.has(c) && [...(pack.text(c) ?? '').matchAll(/<(?:\\w+:)?f>([\\s\\S]*?)<\\/(?:\\w+:)?f>/g)].some(m => pattern.test(unescape(m[1]))))) throw new SheetRefusal('chartSource', gone.name);\n if (caches.some(c => new RegExp(`<(?:\\\\w+:)?worksheetSource\\\\b[^>]*\\\\bsheet=\"${literal(escape(gone.name))}\"`).test(pack.text(c) ?? ''))) throw new SheetRefusal('pivotSheet', gone.name);\n }\n\n const names = new Map<string, string>();\n const axes = new Map<string, { rows: Axis; cols: Axis; rec: SheetRec }>();\n let touched = false;\n const sheetParts: { sid: string; rec: SheetRec | null; part: string; rid: string; sheetId: number }[] = [];\n let nextSheetId = Math.max(0, ...book.entries.map(e => e.sheetId)) + 1;\n let nextRid = Math.max(0, ...book.rels.map(r => Number(/\\d+$/.exec(r.id)?.[0] ?? 0))) + 1;\n const used = new Set(pack.names.keys());\n const fresh = (pattern: (n: number) => string) => {\n let n = 1;\n while (used.has(pattern(n)) || pack.changed.has(pattern(n))) n++;\n used.add(pattern(n));\n return pattern(n);\n };\n const types: [string, string | null][] = [];\n const defaultsNeeded = new Set<string>();\n\n for (const sid of cur.sheetOrder) {\n const id = model.origin.sheets[sid];\n const rec = id !== undefined ? bySheetId.get(id) ?? null : null;\n if (rec && [...axes.values()].every(a => a.rec !== rec)) {\n const lines = model.lines[sid], old = model.origin.lines[sid] ?? base.lines[rec.sid];\n axes.set(sid, { rows: new Axis(old.rows, lines.rows), cols: new Axis(old.cols, lines.cols), rec });\n sheetParts.push({ sid, rec, part: rec.part, rid: book.entries.find(e => e.sheetId === rec.sheetId)!.rid, sheetId: rec.sheetId });\n if (cur.sheets[sid].name !== rec.name) names.set(rec.name, cur.sheets[sid].name!);\n } else {\n const part = fresh(n => `xl/worksheets/sheet${n}.xml`);\n sheetParts.push({ sid, rec: null, part, rid: `rId${nextRid++}`, sheetId: nextSheetId++ });\n types.push([`/${part}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml']);\n }\n }\n\n const curNotes = resource(cur, 'SHEET_NOTE_PLUGIN') as Record<string, Record<string, Record<string, Note>>> | null;\n const curRules = resource(cur, 'SHEET_DATA_VALIDATION_PLUGIN') as Record<string, Rule[]> | null;\n const curFilters = resource(cur, 'SHEET_FILTER_PLUGIN') as Record<string, { ref: Box; filterColumns?: unknown[]; cachedFilteredOut?: number[] } | null> | null;\n const baseRules = (resource(base.book, 'SHEET_DATA_VALIDATION_PLUGIN') ?? {}) as Record<string, Rule[]>;\n const baseFilters = (resource(base.book, 'SHEET_FILTER_PLUGIN') ?? {}) as Record<string, { ref: Box; filterColumns?: unknown[] }>;\n const filterNames = new Map<number, string | null>();\n\n for (const entry of sheetParts) {\n const { sid, rec } = entry;\n const sheet = cur.sheets[sid] as Sheet;\n const ax = axes.get(sid);\n const rows = ax?.rows ?? new Axis([], model.lines[sid]?.rows ?? []);\n const cols = ax?.cols ?? new Axis([], model.lines[sid]?.cols ?? []);\n const old = rec ? base.book.sheets[rec.sid] as Sheet : {} as Sheet;\n const xml = rec?.xml ?? blankSheet;\n const p = rec?.p ?? '';\n const cells = (sheet.cellData ?? {}) as Cells;\n const oldCells = (old.cellData ?? {}) as Cells;\n const fOf = formulas(cells);\n const rowStyle = (sh: Sheet, r: number) => (sh.rowData as Record<number, { s?: unknown }> | undefined)?.[r]?.s;\n const colStyle = (sh: Sheet, c: number) => (sh.columnData as Record<number, { s?: unknown }> | undefined)?.[c]?.s;\n const seen = new Map<string, { look: IStyleData; json: string }>();\n const looks = (bk: IWorkbookData, sh: Sheet, r: number, c: number, x: ICellData | undefined) => {\n const s = x?.s ?? colStyle(sh, c) ?? rowStyle(sh, r);\n const id = typeof s === 'string' ? (bk === cur ? 'c' : 'b') + s : '';\n const known = id && seen.get(id);\n if (known) return known;\n const look = norm({ ...defaults, ...lookup(bk, s) });\n const made = { look, json: JSON.stringify(look) };\n if (id) seen.set(id, made);\n return made;\n };\n const xfOf = (s: unknown) => typeof s === 'string' && /^x\\d+$/.test(s) ? Number(s.slice(1)) : 0;\n const xfFor = (look: IStyleData, was: number) => {\n if (same(norm(styles.looks[was] ?? {}), look) || (was === 0 && same(defaults, look))) return was;\n return styles.find(look) ?? styles.derive(was, look);\n };\n let changed = !rec || rows.moved || cols.moved;\n let reused = 0, total = 0;\n for (const [r, line] of Object.entries(oldCells)) for (const c of Object.keys(line ?? {})) if (rows.map(+r) >= 0 && cols.map(+c) >= 0) total++;\n\n const body: string[] = [];\n const filtered = new Set(curFilters?.[sid]?.cachedFilteredOut ?? []);\n const indices = new Set<number>();\n for (const [r, line] of Object.entries(cells)) if (line && Object.keys(line).length) indices.add(+r);\n for (const [r, rd] of Object.entries(sheet.rowData ?? {})) if (rd && (rd.h !== undefined || rd.hd || rd.s)) indices.add(+r);\n if (rec) for (const r0 of rec.rows.keys()) { const r = rows.map(r0); if (r >= 0) indices.add(r); }\n for (const r of filtered) indices.add(r);\n let minR = Infinity, minC = Infinity, maxR = -1, maxC = -1;\n for (const r of [...indices].sort((a, b) => a - b)) {\n const r0 = rows.from(r);\n const orow = r0 >= 0 ? rec?.rows.get(r0) : undefined;\n const rd = (sheet.rowData as Record<number, { h?: number; hd?: number; s?: unknown }>)?.[r] ?? {};\n const od = r0 >= 0 ? (old.rowData as Record<number, { h?: number; hd?: number; s?: unknown }>)?.[r0] ?? {} : {};\n let tag = orow ? orow.open.replace(/\\s*\\/>$/, '>') : `<${p}row>`;\n tag = setAttr(tag, 'r', String(r + 1));\n if (orow && (rows.moved || cols.moved)) tag = setAttr(tag, 'spans', null);\n if (Math.abs((rd.h ?? -1) - (od.h ?? -1)) > 0.5) {\n changed = true;\n tag = setAttr(setAttr(tag, 'ht', rd.h === undefined ? null : String(pt.row(rd.h))), 'customHeight', rd.h === undefined ? null : '1');\n }\n const hidden = !!rd.hd || filtered.has(r);\n if (hidden !== !!od.hd) {\n changed = true;\n tag = setAttr(tag, 'hidden', hidden ? '1' : null);\n }\n const look = rd.s ? norm({ ...defaults, ...lookup(cur, rd.s) }) : null;\n const was = od.s ? norm({ ...defaults, ...lookup(base.book, od.s) }) : null;\n if (!same(look, was)) {\n changed = true;\n tag = setAttr(setAttr(tag, 's', look ? String(xfFor(look, xfOf(od.s))) : null), 'customFormat', look ? '1' : null);\n }\n const line = cells[r] ?? {};\n const parts: string[] = [];\n for (const c of Object.keys(line).map(Number).sort((a, b) => a - b)) {\n const x = line[c];\n if (!x) continue;\n const c0 = cols.from(c);\n const ox = r0 >= 0 && c0 >= 0 ? oldCells[r0]?.[c0] : undefined;\n const f = fOf(r, c, x);\n const v = textOf(x);\n const look = looks(cur, sheet, r, c, x);\n const orec = r0 >= 0 && c0 >= 0 ? rec?.cells.get(key(r0, c0)) : undefined;\n const unchanged = !!ox && (ox.f ?? null) === f && equalValue(textOf(ox), v) && looks(base.book, old, r0, c0, ox).json === look.json;\n if (unchanged) reused++;\n if (blank(v) && !f && !x.s) continue;\n if (unchanged && orec && !orec.shared) {\n const raw = xml.slice(orec.start, orec.end);\n parts.push(rows.moved || cols.moved ? raw.replace(/^<[^>]*>/, t => setAttr(t, 'r', a1(r, c))) : raw);\n } else {\n if (!unchanged) changed = true;\n const xf = xfFor(look.look, xfOf(ox?.s ?? colStyle(sheet, c) ?? rowStyle(sheet, r)));\n const out = cellXml(p, a1(r, c), xf, x, f, v);\n if (!out) continue;\n parts.push(out);\n }\n minR = Math.min(minR, r); maxR = Math.max(maxR, r); minC = Math.min(minC, c); maxC = Math.max(maxC, c);\n }\n if (!parts.length && !orow && !rd.h && !hidden && !look) continue;\n body.push(parts.length ? `${tag}${parts.join('')}</${p}row>` : tag.replace(/>$/, '/>'));\n }\n if (rec && reused !== total) changed = true;\n\n let head = xml.slice(0, rec ? rec.bounds[0] : xml.indexOf('<sheetData'));\n let tail = xml.slice(rec ? rec.bounds[3] : xml.indexOf('<sheetData/>') + 12);\n\n const mine = (s: string | null) => s === null || s === rec?.name;\n if (rec && (rows.moved || cols.moved)) {\n head = remapZone(head, mine, rows, cols);\n tail = remapZone(tail, mine, rows, cols);\n }\n\n const colXml = columns(p, rec, sheet, old, cols, defaults, cur, base.book, xfFor, xfOf);\n if (colXml !== undefined) { changed = true; head = place(head, 'cols', colXml); }\n\n const merges = (sheet.mergeData ?? []).map(m => span(m)).sort();\n const oldMerges = [...(rec?.merges ?? [])].map(m => span(box(m)!)).sort();\n if (!same(merges, oldMerges)) {\n changed = true;\n tail = place(tail, 'mergeCells', merges.length ? `<${p}mergeCells count=\"${merges.length}\">${merges.map(m => `<${p}mergeCell ref=\"${m}\"/>`).join('')}</${p}mergeCells>` : null);\n }\n\n const freeze = sheet.freeze && (sheet.freeze.xSplit > 0 || sheet.freeze.ySplit > 0) ? [sheet.freeze.xSplit, sheet.freeze.ySplit] : [0, 0];\n const oldFreeze = old.freeze ? [old.freeze.xSplit, old.freeze.ySplit] : [0, 0];\n if (!same(freeze, oldFreeze)) {\n changed = true;\n head = frozen(head, p, freeze[0], freeze[1]);\n }\n if ((sheet.showGridlines ?? 1) !== (old.showGridlines ?? 1)) {\n changed = true;\n head = head.replace(/<(?:\\w+:)?sheetView\\b[^>]*?>/, t => setAttr(t, 'showGridLines', sheet.showGridlines === 0 ? '0' : null));\n }\n if ((sheet.tabColor ?? '') !== (old.tabColor ?? '')) {\n changed = true;\n head = tabColour(head, p, sheet.tabColor ?? '');\n }\n\n const rules = (curRules ? curRules[sid] ?? [] : rec ? baseRules[rec.sid] ?? [] : []).map(r => ({ ...r, ranges: r.ranges.map(b => ({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn })) }));\n const oldRules = (rec ? baseRules[rec.sid] ?? [] : []).map(r => ({ ...r, ranges: r.ranges.map(b => squeeze(b, rows.map, cols.map)).filter(Boolean) }));\n if (curRules && !same(rules.map(canonRule), oldRules.map(canonRule))) {\n changed = true;\n const known = new Map((rec?.validations ?? []).map((v, i) => [`dv${i}`, v]));\n const shown = new Set(rules.map(r => r.uid));\n const hiddenRules = [...known].filter(([uid, v]) => !shown.has(uid) && !(rec && baseRules[rec.sid]?.some(r => r.uid === uid)) && v).map(([, v]) => rows.moved || cols.moved ? remapZone(v, mine, rows, cols) : v);\n const list = [...hiddenRules, ...rules.map(r => validationXml(p, r, known.get(r.uid)))].filter(Boolean);\n tail = place(tail, 'dataValidations', list.length ? `<${p}dataValidations count=\"${list.length}\">${list.join('')}</${p}dataValidations>` : null);\n }\n\n const oldFilter = rec ? baseFilters[rec.sid] ?? null : null;\n const filter = curFilters ? curFilters[sid] ?? null : oldFilter;\n const fref = filter?.ref ? span(filter.ref) : null;\n const oref = oldFilter?.ref ? (() => { const b = squeeze(oldFilter.ref, rows.map, cols.map); return b && span(b); })() : null;\n if (curFilters && (fref !== oref || !same(filter?.filterColumns ?? [], oldFilter?.filterColumns ?? []))) {\n changed = true;\n tail = place(tail, 'autoFilter', filter?.ref ? filterXml(p, filter.ref, filter.filterColumns ?? []) : null);\n filterNames.set(entry.sheetId, filter?.ref ? `${quoted(sheet.name!)}!${span(filter.ref).split(':').map(s => s.replace(/([A-Z]+)(\\d+)/, '$$$1$$$2')).join(':')}` : null);\n }\n\n const notes: Note[] = Object.values(curNotes?.[sid] ?? {}).flatMap(line => Object.values(line ?? {})).filter(n => n && !blank(n.note));\n const oldNotes = (rec?.notes ?? []).map(n => ({ ref: n.ref, text: n.text }));\n const nowNotes = notes.map(n => ({ ref: a1(n.row, n.col), text: n.note })).sort((a, b) => a.ref.localeCompare(b.ref));\n if (curNotes && !same(nowNotes, [...oldNotes].sort((a, b) => a.ref.localeCompare(b.ref)))) {\n changed = true;\n tail = writeNotes(book, entry, tail, p, notes, rows, cols, types, defaultsNeeded, fresh);\n }\n\n const rename = (s: string) => names.size ? s.replace(/<(xm:f|(?:\\w+:)?formula\\d?)>([\\s\\S]*?)<\\/\\1>/g, (_, n: string, f: string) =>\n `<${n}>${escape([...names].reduce((g, [from, to]) => renamed(g, from, to), unescape(f)))}</${n}>`) : s;\n if (!changed) {\n if (rec && rename(xml) !== xml) pack.put(entry.part, rename(xml));\n continue;\n }\n touched = true;\n head = rename(head);\n tail = rename(tail);\n if (/\\sr:id=\"/.test(tail) && !/xmlns:r=/.test(head)) head = head.replace(/<((?:\\w+:)?worksheet)\\b/, `<$1 xmlns:r=\"${REL}\"`);\n const dim = maxR < 0 ? 'A1' : span({ startRow: minR, startColumn: minC, endRow: maxR, endColumn: maxC });\n head = /<(?:\\w+:)?dimension\\b/.test(head) ? head.replace(/<((?:\\w+:)?)dimension\\b[^>]*\\/?>/, `<$1dimension ref=\"${dim}\"/>`) : place(head, 'dimension', `<${p}dimension ref=\"${dim}\"/>`);\n pack.put(entry.part, head + (body.length ? `<${p}sheetData>${body.join('')}</${p}sheetData>` : `<${p}sheetData/>`) + tail);\n\n if (rec && (rows.moved || cols.moved)) {\n for (const rel of rec.rels) {\n if (rel.external) continue;\n if (rel.type === 'drawing') {\n const d = pack.text(rel.target);\n if (d) pack.put(rel.target, anchors(d, rows, cols));\n }\n if (rel.type === 'table') {\n const t = pack.text(rel.target);\n if (!t) continue;\n const ref = attr(/<(?:\\w+:)?table\\b[^>]*>/.exec(t)?.[0] ?? '', 'ref');\n const b = ref && box(ref);\n const moved = b && squeeze(b, rows.map, cols.map);\n if (b && moved && moved.endColumn - moved.startColumn !== b.endColumn - b.startColumn) throw new SheetRefusal('tableColumns', rec.name);\n if (moved) pack.put(rel.target, t.replace(/(<(?:\\w+:)?(?:table|autoFilter)\\b[^>]*?\\sref=\")([^\"]*)\"/g, (_, a: string, r: string) => `${a}${span(squeeze(box(r)!, rows.map, cols.map) ?? box(r)!)}\"`));\n }\n }\n }\n }\n\n const sheetStyles = styles.build();\n if (sheetStyles) {\n const target = book.stylesPart ?? 'xl/styles.xml';\n pack.put(target, sheetStyles);\n if (!book.stylesPart) {\n types.push([`/${target}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml']);\n pack.put(relsOf(book.part), (pack.text(relsOf(book.part)) ?? '').replace(/<\\/(?:\\w+:)?Relationships>/, end => `<Relationship Id=\"rId${nextRid++}\" Type=\"${REL}/styles\" Target=\"${relative(book.part, target)}\"/>${end}`));\n }\n touched = true;\n }\n\n for (const [sid, ax] of axes) {\n if (!ax.rows.moved && !ax.cols.moved) continue;\n const name = ax.rec.name;\n const mine = (s: string | null) => s === name;\n for (const c of charts) {\n const t = pack.text(c);\n if (t && t.includes(name)) pack.put(c, t.replace(/<((?:\\w+:)?)f>([\\s\\S]*?)<\\/\\1f>/g, (_, p: string, f: string) => `<${p}f>${escape(remapped(unescape(f), mine, ax.rows.map, ax.cols.map))}</${p}f>`));\n }\n for (const c of caches) {\n const t = pack.text(c);\n if (t) pack.put(c, t.replace(/<(?:\\w+:)?worksheetSource\\b[^>]*>/g, tag => attr(tag, 'sheet') === name && attr(tag, 'ref') ? setAttr(tag, 'ref', span(squeeze(box(attr(tag, 'ref')!)!, ax.rows.map, ax.cols.map) ?? box(attr(tag, 'ref')!)!)) : tag));\n }\n for (const other of sheetParts) {\n if (other.sid === sid || !other.rec) continue;\n const t = pack.text(other.part);\n if (t && t.includes(name)) pack.put(other.part, t.replace(/<(xm:f|(?:\\w+:)?formula\\d?)>([\\s\\S]*?)<\\/\\1>/g, (_, n: string, f: string) => `<${n}>${escape(remapped(unescape(f), mine, ax.rows.map, ax.cols.map))}</${n}>`));\n }\n }\n for (const [from, to] of names) {\n for (const c of charts) {\n const t = pack.text(c);\n if (t && t.includes(from)) pack.put(c, t.replace(/<((?:\\w+:)?)f>([\\s\\S]*?)<\\/\\1f>/g, (_, p: string, f: string) => `<${p}f>${escape(renamed(unescape(f), from, to))}</${p}f>`));\n }\n for (const c of caches) {\n const t = pack.text(c);\n if (t) pack.put(c, t.replace(/(<(?:\\w+:)?worksheetSource\\b[^>]*\\ssheet=\")([^\"]*)\"/g, (all, a: string, s: string) => unescape(s) === from ? `${a}${escape(to)}\"` : all));\n }\n }\n\n const sheetsChanged = removed.length > 0 || names.size > 0 || sheetParts.some(s => !s.rec) || sheetParts.map(s => s.sheetId).join() !== book.entries.filter(e => e.sheet && kept.has(e.sheetId)).map(e => e.sheetId).join()\n || cur.sheetOrder.some(sid => { const rec = axes.get(sid)?.rec; return !!rec && (cur.sheets[sid].hidden ?? 0) !== (base.book.sheets[rec.sid].hidden ?? 0); });\n if (!touched && !sheetsChanged && !filterNames.size) return original;\n\n let wb = book.xml;\n const listed: { xml: string; sheetId: number; oldIndex: number }[] = [];\n const nonSheets = book.entries.map((e, i) => ({ e, i })).filter(x => !x.e.sheet);\n const indexOf = new Map(book.entries.map((e, i) => [e.sheetId, i]));\n const wp = /<(\\w+:)?workbook\\b/.exec(wb)?.[1] ?? '';\n const relPrefix = /xmlns:(\\w+)=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\"/.exec(wb)?.[1] ?? 'r';\n for (const s of sheetParts) {\n const sheet = cur.sheets[s.sid] as Sheet;\n const state = sheet.hidden === 2 ? 'veryHidden' : sheet.hidden ? 'hidden' : null;\n let tag = s.rec ? book.entries.find(e => e.sheetId === s.sheetId)!.xml : `<${wp}sheet name=\"\" sheetId=\"${s.sheetId}\" ${relPrefix}:id=\"${s.rid}\"/>`;\n tag = setAttr(setAttr(tag, 'name', sheet.name ?? `Sheet${s.sheetId}`), 'state', state);\n listed.push({ xml: tag, sheetId: s.sheetId, oldIndex: s.rec ? indexOf.get(s.sheetId)! : -1 });\n }\n for (const { e, i } of nonSheets) {\n let at = listed.findIndex(x => x.oldIndex > i);\n if (at < 0) at = listed.length;\n listed.splice(at, 0, { xml: e.xml, sheetId: e.sheetId, oldIndex: i });\n }\n wb = wb.replace(/(<(?:\\w+:)?sheets\\b[^>]*>)[\\s\\S]*?(<\\/(?:\\w+:)?sheets>)/, (_, a: string, b: string) => a + listed.map(x => x.xml).join('') + b);\n const newIndex = new Map(listed.map((x, i) => [x.oldIndex, i]));\n const sheetIndex = new Map(listed.map((x, i) => [x.sheetId, i]));\n const removedNames = new Set(removed.map(r => r.name));\n\n wb = wb.replace(/<((?:\\w+:)?)definedName\\b([^>]*)>([\\s\\S]*?)<\\/\\1definedName>/g, (all: string, p: string, attrs0: string, body: string) => {\n let tag = `<${p}definedName${attrs0}>`;\n const local = attr(tag, 'localSheetId');\n if (local !== null) {\n const next = newIndex.get(Number(local));\n if (next === undefined) return '';\n tag = setAttr(tag, 'localSheetId', String(next));\n const owner = listed[next];\n if (attr(tag, 'name') === '_xlnm._FilterDatabase' && filterNames.has(owner.sheetId)) {\n const f = filterNames.get(owner.sheetId)!;\n filterNames.delete(owner.sheetId);\n return f ? `${tag}${escape(f)}</${p}definedName>` : '';\n }\n }\n let f = unescape(body);\n for (const gone of removedNames) f = f.replace(new RegExp(`(?:'${literal(gone.replace(/'/g, \"''\"))}'|${literal(gone)})![$A-Z0-9:]+`, 'g'), '#REF!');\n for (const [, ax] of axes) if (ax.rows.moved || ax.cols.moved) f = remapped(f, s => s === ax.rec.name, ax.rows.map, ax.cols.map);\n for (const [from, to] of names) f = renamed(f, from, to);\n return `${tag}${escape(f)}</${p}definedName>`;\n });\n for (const [sheetId, f] of filterNames) {\n if (!f) continue;\n const def = `<${wp}definedName name=\"_xlnm._FilterDatabase\" localSheetId=\"${sheetIndex.get(sheetId)}\" hidden=\"1\">${escape(f)}</${wp}definedName>`;\n wb = /<(?:\\w+:)?definedNames\\b/.test(wb) ? wb.replace(/<\\/(?:\\w+:)?definedNames>/, end => def + end) : wb.replace(/<\\/(?:\\w+:)?sheets>/, end => `${end}<${wp}definedNames>${def}</${wp}definedNames>`);\n }\n wb = wb.replace(/<((?:\\w+:)?)definedNames>\\s*<\\/\\1definedNames>/, '');\n wb = wb.replace(/<(?:\\w+:)?workbookView\\b[^>]*>/g, tag => {\n const total = listed.length;\n let next = tag;\n const tab = attr(next, 'activeTab');\n if (tab !== null) next = setAttr(next, 'activeTab', String(Math.min(newIndex.get(Number(tab)) ?? 0, total - 1)));\n const first = attr(next, 'firstSheet');\n if (first !== null) next = setAttr(next, 'firstSheet', String(Math.min(newIndex.get(Number(first)) ?? 0, total - 1)));\n return next;\n });\n if (touched) {\n wb = /<(?:\\w+:)?calcPr\\b/.test(wb) ? wb.replace(/<(?:\\w+:)?calcPr\\b[^>]*?\\/?>/, tag => setAttr(tag, 'fullCalcOnLoad', '1')) : wb.replace(/(<\\/(?:\\w+:)?sheets>(?:\\s*<(?:\\w+:)?(?:functionGroups|externalReferences|definedNames)\\b[\\s\\S]*?<\\/(?:\\w+:)?(?:functionGroups|externalReferences|definedNames)>)*)/, `$1<${wp}calcPr fullCalcOnLoad=\"1\"/>`);\n }\n pack.put(book.part, wb);\n\n let rels = pack.text(relsOf(book.part)) ?? '';\n for (const gone of removed) {\n const entry = book.entries.find(e => e.sheetId === gone.sheetId)!;\n rels = rels.replace(new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*\\\\bId=\"${entry.rid}\"[^>]*\\\\/>`), '');\n pack.put(gone.part, null);\n pack.put(relsOf(gone.part), null);\n types.push([`/${gone.part}`, null]);\n }\n const calc = book.rels.find(r => r.type === 'calcChain');\n if (calc && touched) {\n rels = rels.replace(new RegExp(`<(?:\\\\w+:)?Relationship\\\\b[^>]*\\\\bId=\"${calc.id}\"[^>]*\\\\/>`), '');\n pack.put(calc.target, null);\n types.push([`/${calc.target}`, null]);\n }\n for (const s of sheetParts) if (!s.rec) rels = rels.replace(/<\\/(?:\\w+:)?Relationships>/, end => `<Relationship Id=\"${s.rid}\" Type=\"${REL}/worksheet\" Target=\"${relative(book.part, s.part)}\"/>${end}`);\n pack.put(relsOf(book.part), rels);\n contentTypes(pack, types, defaultsNeeded);\n return copy(pack.build());\n}\n\nconst copy = (u: Uint8Array) => u.buffer.slice(u.byteOffset, u.byteOffset + u.byteLength) as ArrayBuffer;\n\nfunction contentTypes(pack: Book['pack'], types: [string, string | null][], defaults: Set<string>) {\n if (!types.length && !defaults.size) return;\n let ct = pack.text('[Content_Types].xml') ?? '';\n for (const [name, type] of types) {\n ct = ct.replace(new RegExp(`<Override\\\\b[^>]*PartName=\"${literal(name)}\"[^>]*\\\\/>`), '');\n if (type) ct = ct.replace('</Types>', () => `<Override PartName=\"${name}\" ContentType=\"${type}\"/></Types>`);\n }\n for (const ext of defaults) if (!new RegExp(`Extension=\"${ext}\"`, 'i').test(ct)) ct = ct.replace(/(<Types\\b[^>]*>)/, `$1<Default Extension=\"${ext}\" ContentType=\"application/vnd.openxmlformats-officedocument.vmlDrawing\"/>`);\n pack.put('[Content_Types].xml', ct);\n}\n\nfunction cellXml(p: string, ref: string, xf: number, x: ICellData, f: string | null, v: string | number | boolean | null) {\n const s = xf ? ` s=\"${xf}\"` : '';\n if (f) {\n const body = escape(stored(f.replace(/^=/, '')));\n let t = '', val = '';\n if (typeof v === 'number' && Number.isFinite(v)) val = `<${p}v>${v}</${p}v>`;\n else if (typeof v === 'boolean' || x.t === 3) { t = ' t=\"b\"'; val = `<${p}v>${v === true || v === 1 ? 1 : 0}</${p}v>`; }\n else if (typeof v === 'string' && v !== '') { t = errors.test(v) ? ' t=\"e\"' : ' t=\"str\"'; val = `<${p}v>${escape(v)}</${p}v>`; }\n return `<${p}c r=\"${ref}\"${s}${t}><${p}f>${body}</${p}f>${val}</${p}c>`;\n }\n if (blank(v)) return xf ? `<${p}c r=\"${ref}\"${s}/>` : '';\n if (typeof v === 'boolean') return `<${p}c r=\"${ref}\"${s} t=\"b\"><${p}v>${v ? 1 : 0}</${p}v></${p}c>`;\n if (typeof v === 'number') return Number.isFinite(v) ? `<${p}c r=\"${ref}\"${s}><${p}v>${v}</${p}v></${p}c>` : `<${p}c r=\"${ref}\"${s} t=\"e\"><${p}v>#NUM!</${p}v></${p}c>`;\n const str = String(v);\n if (x.t === 2 && str.trim() !== '' && Number.isFinite(Number(str))) return `<${p}c r=\"${ref}\"${s}><${p}v>${Number(str)}</${p}v></${p}c>`;\n if (x.t !== 4 && errors.test(str)) return `<${p}c r=\"${ref}\"${s} t=\"e\"><${p}v>${escape(str)}</${p}v></${p}c>`;\n const space = /^\\s|\\s$|\\n/.test(str) ? ' xml:space=\"preserve\"' : '';\n return `<${p}c r=\"${ref}\"${s} t=\"inlineStr\"><${p}is><${p}t${space}>${escape(str)}</${p}t></${p}is></${p}c>`;\n}\n\nfunction columns(p: string, rec: SheetRec | null, sheet: Sheet, old: Sheet, cols: Axis, defaults: IStyleData,\n cur: IWorkbookData, baseBook: IWorkbookData, xfFor: (look: IStyleData, was: number) => number, xfOf: (s: unknown) => number): string | null | undefined {\n type Cd = { w?: number; hd?: number; s?: unknown };\n const now = (sheet.columnData ?? {}) as Record<number, Cd>, was = (old.columnData ?? {}) as Record<number, Cd>;\n const count = sheet.columnCount ?? 26;\n const look = (bk: IWorkbookData, s: unknown) => s ? norm({ ...defaults, ...lookup(bk, s) }) : null;\n let differs = cols.moved;\n for (let c = 0; c < count && !differs; c++) {\n const c0 = cols.from(c);\n const a = now[c] ?? {}, b = c0 >= 0 ? was[c0] ?? {} : {};\n if (Math.abs((a.w ?? -1) - (b.w ?? -1)) > 0.5 || !!a.hd !== !!b.hd || !same(look(cur, a.s), look(baseBook, b.s))) differs = true;\n }\n if (!differs) return undefined;\n const specs = rec?.cols ?? [];\n const specAt = (c0: number) => specs.find(s => c0 + 1 >= s.min && c0 + 1 <= s.max);\n const out: { c: number; attrs: Map<string, string> }[] = [];\n for (let c = 0; c < count; c++) {\n const c0 = cols.from(c);\n const spec = c0 >= 0 ? specAt(c0) : undefined;\n const a = new Map(spec ? [...spec.xml.matchAll(/([\\w:]+)=\"([^\"]*)\"/g)].map(m => [m[1], m[2]] as [string, string]) : []);\n a.delete('min');\n a.delete('max');\n const n = now[c] ?? {}, o = c0 >= 0 ? was[c0] ?? {} : {};\n if (Math.abs((n.w ?? -1) - (o.w ?? -1)) > 0.5) {\n if (n.w === undefined) { a.delete('width'); a.delete('customWidth'); }\n else { a.set('width', String(pt.col(n.w))); a.set('customWidth', '1'); }\n }\n if (!!n.hd !== !!o.hd) n.hd ? a.set('hidden', '1') : a.delete('hidden');\n const ln = look(cur, n.s), lo = look(baseBook, o.s);\n if (!same(ln, lo)) ln ? a.set('style', String(xfFor(ln, xfOf(o.s)))) : a.delete('style');\n if (!a.size) continue;\n if (!a.has('width')) a.set('width', String(pt.col(sheet.defaultColumnWidth ?? 64)));\n out.push({ c, attrs: a });\n }\n const runs: string[] = [];\n for (let i = 0; i < out.length; i++) {\n let j = i;\n const k = JSON.stringify([...out[i].attrs]);\n while (j + 1 < out.length && out[j + 1].c === out[j].c + 1 && JSON.stringify([...out[j + 1].attrs]) === k) j++;\n runs.push(`<${p}col min=\"${out[i].c + 1}\" max=\"${out[j].c + 1}\"${[...out[i].attrs].map(([n, v]) => ` ${n}=\"${v}\"`).join('')}/>`);\n i = j;\n }\n const shift = count - (rec?.width ?? count);\n for (const spec of specs) {\n if (spec.max <= (rec?.width ?? 0)) continue;\n const min = Math.max(count + 1, spec.min + shift), max = Math.min(16384, spec.max + shift);\n if (min <= max) runs.push(spec.xml.replace(/\\smin=\"\\d+\"/, ` min=\"${min}\"`).replace(/\\smax=\"\\d+\"/, ` max=\"${max}\"`));\n }\n return runs.length ? `<${p}cols>${runs.join('')}</${p}cols>` : null;\n}\n\nfunction frozen(head: string, p: string, x: number, y: number) {\n const pane = x || y ? `<${p}pane${x ? ` xSplit=\"${x}\"` : ''}${y ? ` ySplit=\"${y}\"` : ''} topLeftCell=\"${a1(y, x)}\" activePane=\"${x && y ? 'bottomRight' : y ? 'bottomLeft' : 'topRight'}\" state=\"frozen\"/>` : '';\n const selection = x || y ? `<${p}selection pane=\"${x && y ? 'bottomRight' : y ? 'bottomLeft' : 'topRight'}\" activeCell=\"${a1(y, x)}\" sqref=\"${a1(y, x)}\"/>` : `<${p}selection activeCell=\"A1\" sqref=\"A1\"/>`;\n const view = /<((?:\\w+:)?)sheetView\\b[^>]*?(\\/?)>/.exec(head);\n if (!view) return place(head, 'sheetViews', `<${p}sheetViews><${p}sheetView workbookViewId=\"0\">${pane}${selection}</${p}sheetView></${p}sheetViews>`);\n if (view[2]) return head.slice(0, view.index) + view[0].replace(/\\s*\\/>$/, '>') + pane + selection + `</${view[1]}sheetView>` + head.slice(view.index + view[0].length);\n const close = head.indexOf(`</${view[1]}sheetView>`, view.index);\n const inner = head.slice(view.index + view[0].length, close).replace(/<(?:\\w+:)?pane\\b[^>]*\\/>/g, '').replace(/<(?:\\w+:)?selection\\b[^>]*\\/>/g, '');\n return head.slice(0, view.index) + view[0] + pane + selection + inner + head.slice(close);\n}\n\nfunction tabColour(head: string, p: string, colour: string) {\n const tag = colour ? `<${p}tabColor rgb=\"FF${colour.replace('#', '').toUpperCase()}\"/>` : '';\n if (/<(?:\\w+:)?tabColor\\b/.test(head)) return head.replace(/<(?:\\w+:)?tabColor\\b[^>]*\\/>/, tag);\n if (!colour) return head;\n const pr = /<((?:\\w+:)?)sheetPr\\b[^>]*?(\\/?)>/.exec(head);\n if (!pr) return place(head, 'sheetPr', `<${p}sheetPr>${tag}</${p}sheetPr>`);\n if (pr[2]) return head.slice(0, pr.index) + pr[0].replace(/\\s*\\/>$/, '>') + tag + `</${pr[1]}sheetPr>` + head.slice(pr.index + pr[0].length);\n return head.slice(0, pr.index + pr[0].length) + tag + head.slice(pr.index + pr[0].length);\n}\n\nfunction canonRule(r: Record<string, unknown>) {\n const out: Record<string, unknown> = {};\n for (const k of ['uid', 'type', 'operator', 'formula1', 'formula2', 'allowBlank', 'showDropDown', 'showErrorMessage', 'showInputMessage', 'errorStyle', 'error', 'errorTitle', 'prompt', 'promptTitle']) {\n const v = r[k];\n if (v !== undefined && v !== null && v !== false && v !== '') out[k] = v;\n }\n if (out.type === 'list' && out.showDropDown === undefined) out.showDropDown = true;\n out.ranges = (r.ranges as Box[]).map(b => span(b)).sort();\n return out;\n}\n\nfunction validationXml(p: string, r: Rule, was: string | undefined) {\n if (!['whole', 'decimal', 'list', 'textLength', 'custom', 'date'].includes(String(r.type))) return '';\n let tag = was ? was.slice(0, was.indexOf('>') + 1).replace(/\\s*\\/>$/, '>') : `<${p}dataValidation>`;\n const bool = (name: string, on: unknown) => { tag = setAttr(tag, name, on ? '1' : null); };\n tag = setAttr(tag, 'type', String(r.type));\n tag = setAttr(tag, 'operator', r.type === 'list' || r.type === 'custom' || !r.operator || r.operator === 'between' ? null : String(r.operator));\n bool('allowBlank', r.allowBlank);\n bool('showDropDown', r.type === 'list' && r.showDropDown === false);\n bool('showInputMessage', r.showInputMessage);\n bool('showErrorMessage', r.showErrorMessage);\n const style = Object.entries(stops).find(([, v]) => v === r.errorStyle)?.[0];\n tag = setAttr(tag, 'errorStyle', style && style !== 'stop' ? style : null);\n for (const name of ['errorTitle', 'error', 'promptTitle', 'prompt']) tag = setAttr(tag, name, blank(r[name]) ? null : String(r[name]));\n tag = setAttr(tag, 'sqref', r.ranges.map(span).join(' '));\n const f1 = r.formula1 === undefined ? '' : r.type === 'list' && !String(r.formula1).startsWith('=') ? `\"${listText(String(r.formula1)).replace(/\"/g, '\"\"')}\"` : stored(String(r.formula1).replace(/^=/, ''));\n const f2 = r.formula2 === undefined ? '' : stored(String(r.formula2).replace(/^=/, ''));\n return `${tag}${f1 ? `<${p}formula1>${escape(f1)}</${p}formula1>` : ''}${f2 ? `<${p}formula2>${escape(f2)}</${p}formula2>` : ''}</${p}dataValidation>`;\n}\n\nfunction listText(f: string) {\n try {\n const list = JSON.parse(f);\n if (Array.isArray(list)) return list.join(',');\n } catch {\n return f;\n }\n return f;\n}\n\nfunction filterXml(p: string, ref: Box, columns: unknown[]) {\n const body = (columns as { colId: number; filters?: { filters?: string[]; blank?: boolean }; customFilters?: { and?: number; customFilters: { operator?: string; val: string }[] } }[]).map(c => {\n if (c.filters) return `<${p}filterColumn colId=\"${c.colId}\"><${p}filters${c.filters.blank ? ' blank=\"1\"' : ''}>${(c.filters.filters ?? []).map(v => `<${p}filter val=\"${escape(String(v))}\"/>`).join('')}</${p}filters></${p}filterColumn>`;\n if (c.customFilters) return `<${p}filterColumn colId=\"${c.colId}\"><${p}customFilters${c.customFilters.and ? ' and=\"1\"' : ''}>${c.customFilters.customFilters.map(f => `<${p}customFilter${f.operator ? ` operator=\"${f.operator}\"` : ''} val=\"${escape(String(f.val))}\"/>`).join('')}</${p}customFilters></${p}filterColumn>`;\n return '';\n }).join('');\n return body ? `<${p}autoFilter ref=\"${span(ref)}\">${body}</${p}autoFilter>` : `<${p}autoFilter ref=\"${span(ref)}\"/>`;\n}\n\nfunction writeNotes(book: Book, entry: { rec: SheetRec | null; part: string }, tail: string, p: string, notes: Note[], rows: Axis, cols: Axis,\n types: [string, string | null][], defaults: Set<string>, fresh: (pattern: (n: number) => string) => string) {\n const { pack } = book;\n const rec = entry.rec;\n const relsPart = relsOf(entry.part);\n let rels = pack.text(relsPart) ?? '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>';\n let nextRid = Math.max(0, ...[...rels.matchAll(/\\bId=\"rId(\\d+)\"/g)].map(m => Number(m[1]))) + 1;\n let commentsPart = rec?.comments ?? null;\n let vmlPart = rec?.vml ?? null;\n if (!commentsPart) {\n commentsPart = fresh(n => `xl/comments${n}.xml`);\n rels = rels.replace('</Relationships>', () => `<Relationship Id=\"rId${nextRid++}\" Type=\"${REL}/comments\" Target=\"${relative(entry.part, commentsPart!)}\"/></Relationships>`);\n types.push([`/${commentsPart}`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml']);\n }\n if (!vmlPart) {\n vmlPart = fresh(n => `xl/drawings/vmlDrawing${n}.vml`);\n const rid = `rId${nextRid++}`;\n rels = rels.replace('</Relationships>', () => `<Relationship Id=\"${rid}\" Type=\"${REL}/vmlDrawing\" Target=\"${relative(entry.part, vmlPart!)}\"/></Relationships>`);\n defaults.add('vml');\n const relNs = /xmlns:(\\w+)=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\"/.exec(rec?.xml ?? '')?.[1];\n tail = place(tail, 'legacyDrawing', `<${p}legacyDrawing ${relNs ?? 'r'}:id=\"${rid}\"/>`);\n }\n pack.put(relsPart, rels);\n\n const authors = rec?.authors.length ? [...rec.authors] : ['Author'];\n const byOld = new Map((rec?.notes ?? []).map(n => {\n const [r, c] = cell(n.ref);\n return [a1(rows.map(r), cols.map(c)), n];\n }));\n const list = [...notes].sort((a, b) => a.row - b.row || a.col - b.col).map(n => {\n const ref = a1(n.row, n.col);\n const was = byOld.get(ref);\n if (was && was.text === n.note) return setAttr(was.xml.slice(0, was.xml.indexOf('>') + 1), 'ref', ref) + was.xml.slice(was.xml.indexOf('>') + 1);\n const authorId = was ? attr(was.xml, 'authorId') ?? '0' : '0';\n return `<${p}comment ref=\"${ref}\" authorId=\"${authorId}\"><${p}text><${p}r><${p}t xml:space=\"preserve\">${escape(n.note)}</${p}t></${p}r></${p}text></${p}comment>`;\n });\n const existing = pack.text(commentsPart);\n const authorsXml = `<${p}authors>${authors.map(a => `<${p}author>${escape(a)}</${p}author>`).join('')}</${p}authors>`;\n const commentsXml = existing\n ? existing.replace(/<((?:\\w+:)?)commentList\\b[^>]*?(?:\\/>|>[\\s\\S]*?<\\/\\1commentList>)/, () => `<${p}commentList>${list.join('')}</${p}commentList>`)\n : `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">${authorsXml}<commentList>${list.join('')}</commentList></comments>`;\n pack.put(commentsPart, commentsXml);\n\n const vml = pack.text(vmlPart) ?? '<xml xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"><o:shapelayout v:ext=\"edit\"><o:idmap v:ext=\"edit\" data=\"1\"/></o:shapelayout><v:shapetype id=\"_x0000_t202\" coordsize=\"21600,21600\" o:spt=\"202\" path=\"m,l,21600r21600,l21600,xe\"><v:stroke joinstyle=\"miter\"/><v:path gradientshapeok=\"t\" o:connecttype=\"rect\"/></v:shapetype></xml>';\n const shapes = new Map<string, string>();\n let rest = vml.replace(/<v:shape\\b[^>]*>[\\s\\S]*?<\\/v:shape>/g, shape => {\n if (!/ObjectType=\"Note\"/.test(shape)) return shape;\n const r = Number(/<x:Row>(\\d+)<\\/x:Row>/.exec(shape)?.[1] ?? -1), c = Number(/<x:Column>(\\d+)<\\/x:Column>/.exec(shape)?.[1] ?? -1);\n if (r >= 0 && c >= 0) shapes.set(a1(rows.map(r), cols.map(c)), shape);\n return '';\n });\n let id = Math.max(1024, ...[...vml.matchAll(/_x0000_s(\\d+)/g)].map(m => Number(m[1])));\n const out = notes.map(n => {\n const ref = a1(n.row, n.col);\n const was = shapes.get(ref);\n if (was) return was.replace(/<x:Row>\\d+<\\/x:Row>/, `<x:Row>${n.row}</x:Row>`).replace(/<x:Column>\\d+<\\/x:Column>/, `<x:Column>${n.col}</x:Column>`)\n .replace(/<x:Anchor>([^<]*)<\\/x:Anchor>/, `<x:Anchor>${n.col + 1}, 15, ${n.row}, 2, ${n.col + 3}, 15, ${n.row + 4}, 16</x:Anchor>`);\n return `<v:shape id=\"_x0000_s${++id}\" type=\"#_x0000_t202\" style=\"position:absolute;margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:1;visibility:hidden\" fillcolor=\"#ffffe1\" o:insetmode=\"auto\"><v:fill color2=\"#ffffe1\"/><v:shadow on=\"t\" color=\"black\" obscured=\"t\"/><v:path o:connecttype=\"none\"/><v:textbox style=\"mso-direction-alt:auto\"><div style=\"text-align:left\"></div></v:textbox><x:ClientData ObjectType=\"Note\"><x:MoveWithCells/><x:SizeWithCells/><x:Anchor>${n.col + 1}, 15, ${n.row}, 2, ${n.col + 3}, 15, ${n.row + 4}, 16</x:Anchor><x:AutoFill>False</x:AutoFill><x:Row>${n.row}</x:Row><x:Column>${n.col}</x:Column></x:ClientData></v:shape>`;\n }).join('');\n rest = rest.replace(/<\\/xml>\\s*$/, () => `${out}</xml>`);\n pack.put(vmlPart, rest);\n return tail;\n}\n","import { readCsv, writeCsv } from './csv';\nimport type { SheetModel } from './model';\nimport { writeXlsx } from './write';\nimport { load } from './xlsx';\n\nexport function readSheet(bytes: ArrayBuffer, kind: 'xlsx' | 'csv'): SheetModel {\n return kind === 'csv' ? readCsv(bytes) : load(bytes).model;\n}\n\nexport function writeSheet(original: ArrayBuffer, model: SheetModel, kind: 'xlsx' | 'csv'): ArrayBuffer {\n return kind === 'csv' ? writeCsv(original, model) : writeXlsx(original, model);\n}\n","import type { ICellData, IColumnData, IRowData, IStyleData, IWorkbookData, IWorksheetData } from '@univerjs/core';\nimport * as Y from 'yjs';\nimport { readSheet } from './book';\nimport { numbered, type Lines, type SheetModel } from './model';\nimport { cell, remapped, renamed, squeeze, type Box } from './refs';\nimport { Axis } from './write';\nimport { worksheets } from './xlsx';\n\nexport type Cell = Pick<ICellData, 'v' | 't' | 'f' | 'p'> & { s?: string };\nexport type Row = Pick<IRowData, 'h' | 'hd' | 'ia'> & { s?: string };\nexport type Col = Pick<IColumnData, 'w' | 'hd'> & { s?: string };\nexport type Note = { note: string; width: number; height: number };\ntype Value = Pick<ICellData, 'v' | 't'>;\ntype Origin = { id: number; name: string; rows: string[] | number; cols: string[] | number };\ntype Resource = { name: string; data: string };\n\nexport const props = ['name', 'hidden', 'tabColor', 'freeze', 'showGridlines', 'rightToLeft'] as const;\n\nexport const spot = (row: string, col: string) => `${row}:${col}`;\n\nexport const canon = (x: unknown): string => x === null || typeof x !== 'object' ? JSON.stringify(x ?? null)\n : Array.isArray(x) ? `[${x.map(canon).join(',')}]`\n : `{${Object.keys(x).filter(k => (x as Record<string, unknown>)[k] !== undefined).sort().map(k => `${JSON.stringify(k)}:${canon((x as Record<string, unknown>)[k])}`).join(',')}}`;\n\nexport const strip = <T extends object>(o: T) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== null)) as T;\n\nexport const fnv = (bytes: Uint8Array, h = 0x811c9dc5) => {\n for (const b of bytes) h = Math.imul(h ^ b, 0x01000193) >>> 0;\n return h;\n};\n\nexport function parts(doc: Y.Doc) {\n const book = doc.getMap<unknown>('book');\n return {\n book, values: doc.getMap<Value>('values'), origin: doc.getMap<Origin>('origin'),\n order: book.get('order') as Y.Array<string>, sheets: book.get('sheets') as Y.Map<Y.Map<unknown>>, styles: book.get('styles') as Y.Map<IStyleData>,\n };\n}\n\nexport const pieces = (m: Y.Map<unknown>) => ({\n rows: m.get('rows') as Y.Array<string>, cols: m.get('cols') as Y.Array<string>, cells: m.get('cells') as Y.Map<Cell>,\n rowData: m.get('rowData') as Y.Map<Row>, colData: m.get('colData') as Y.Map<Col>, merges: m.get('merges') as Y.Map<number>, notes: m.get('notes') as Y.Map<Note>,\n});\n\nexport function made(config: Partial<IWorksheetData>, lines: Lines) {\n const m = new Y.Map<unknown>();\n for (const name of props) if (config[name] !== undefined) m.set(name, config[name]);\n m.set('look', strip({ defaultRowHeight: config.defaultRowHeight, defaultColumnWidth: config.defaultColumnWidth, zoomRatio: config.zoomRatio }));\n m.set('rows', Y.Array.from(lines.rows));\n m.set('cols', Y.Array.from(lines.cols));\n for (const name of ['cells', 'rowData', 'colData', 'merges', 'notes']) m.set(name, new Y.Map());\n return m;\n}\n\nexport function fill(doc: Y.Doc, model: SheetModel) {\n const { book: wb, lines } = model;\n const book = doc.getMap<unknown>('book');\n const notes = JSON.parse(wb.resources?.find(r => r.name === 'SHEET_NOTE_PLUGIN')?.data ?? '{}') as Record<string, Record<number, Record<number, Note>>>;\n doc.transact(() => {\n book.set('head', strip({ id: wb.id, name: wb.name, appVersion: wb.appVersion, locale: wb.locale, defaultStyle: wb.defaultStyle, dateSystem: wb.dateSystem }));\n book.set('extras', (wb.resources ?? []).filter(r => r.name !== 'SHEET_NOTE_PLUGIN'));\n book.set('active', model.active ?? null);\n book.set('styles', new Y.Map());\n book.set('order', Y.Array.from(wb.sheetOrder));\n book.set('sheets', new Y.Map());\n const { sheets, styles, values, origin } = parts(doc);\n for (const [id, look] of Object.entries(wb.styles)) if (look) styles.set(id, look);\n for (const sid of wb.sheetOrder) {\n const sheet = wb.sheets[sid];\n const l = lines[sid];\n sheets.set(sid, made(sheet, l));\n origin.set(sid, { id: model.origin.sheets[sid], name: sheet.name ?? '', rows: l.rows.length, cols: l.cols.length });\n const { cells, rowData, colData, merges, notes: kept } = pieces(sheets.get(sid)!);\n for (const [r, line] of Object.entries((sheet.cellData ?? {}) as Record<number, Record<number, ICellData>>)) for (const [c, x] of Object.entries(line ?? {})) {\n if (!x) continue;\n const at = spot(l.rows[+r], l.cols[+c]);\n const out: Cell = {};\n if (x.f) {\n out.f = x.f;\n values.set(`${sid}:${at}`, { v: x.v ?? null, t: x.t ?? null });\n } else {\n if (x.v !== undefined && x.v !== null) out.v = x.v;\n if (x.t) out.t = x.t;\n }\n if (x.p) out.p = x.p;\n if (typeof x.s === 'string') out.s = x.s;\n cells.set(at, out);\n }\n for (const [r, rd] of Object.entries(sheet.rowData ?? {})) if (rd) rowData.set(l.rows[+r], strip({ h: rd.h, hd: rd.hd, ia: rd.ia, s: typeof rd.s === 'string' ? rd.s : undefined }));\n for (const [c, cd] of Object.entries(sheet.columnData ?? {})) if (cd) colData.set(l.cols[+c], strip({ w: cd.w, hd: cd.hd, s: typeof cd.s === 'string' ? cd.s : undefined }));\n for (const b of sheet.mergeData ?? []) merges.set([l.rows[b.startRow], l.cols[b.startColumn], l.rows[b.endRow], l.cols[b.endColumn]].join(':'), 1);\n for (const [r, line] of Object.entries(notes[sid] ?? {})) for (const [c, n] of Object.entries(line)) kept.set(spot(l.rows[+r], l.cols[+c]), { note: n.note, width: n.width, height: n.height });\n }\n });\n}\n\nexport function sheetOf(doc: Y.Doc, sid: string, l: Lines): Partial<IWorksheetData> {\n const { sheets, values } = parts(doc);\n const m = sheets.get(sid)!;\n const { cells, rowData, colData, merges } = pieces(m);\n const rows = new Map(l.rows.map((id, i) => [id, i])), cols = new Map(l.cols.map((id, i) => [id, i]));\n const cellData: Record<number, Record<number, ICellData>> = {};\n for (const [at, x] of cells) {\n const [row, col] = at.split(':');\n const r = rows.get(row), c = cols.get(col);\n if (r === undefined || c === undefined) continue;\n const kept = x.f ? values.get(`${sid}:${at}`) : undefined;\n (cellData[r] ??= {})[c] = kept ? { ...x, v: kept.v, t: kept.t } : { ...x };\n }\n const rowsOut: Record<number, IRowData> = {}, colsOut: Record<number, IColumnData> = {};\n for (const [id, x] of rowData) if (rows.has(id)) rowsOut[rows.get(id)!] = { ...x };\n for (const [id, x] of colData) if (cols.has(id)) colsOut[cols.get(id)!] = { ...x };\n const mergeData = [...merges.keys()].map(k => k.split(':')).map(([r0, c0, r1, c1]) => ({ startRow: rows.get(r0)!, startColumn: cols.get(c0)!, endRow: rows.get(r1)!, endColumn: cols.get(c1)! }))\n .filter(b => [b.startRow, b.startColumn, b.endRow, b.endColumn].every(n => n !== undefined));\n const out: Partial<IWorksheetData> = { ...(m.get('look') as object), id: sid, rowCount: l.rows.length, columnCount: l.cols.length, cellData, rowData: rowsOut, columnData: colsOut, mergeData };\n for (const name of props) if (m.has(name)) Object.assign(out, { [name]: m.get(name) });\n return out;\n}\n\nexport const notesOf = (m: Y.Map<unknown>, l: Lines) => {\n const rows = new Map(l.rows.map((id, i) => [id, i])), cols = new Map(l.cols.map((id, i) => [id, i]));\n return [...pieces(m).notes].map(([at, n]) => ({ ...n, row: rows.get(at.split(':')[0]), col: cols.get(at.split(':')[1]) }))\n .filter((n): n is Note & { row: number; col: number } => n.row !== undefined && n.col !== undefined);\n};\n\nexport function build(doc: Y.Doc): SheetModel {\n const { book, order, sheets, styles, origin } = parts(doc);\n const sheetOrder = [...new Set(order.toArray())].filter(sid => sheets.has(sid));\n const wb = { ...(book.get('head') as object), styles: styles.toJSON(), sheetOrder, sheets: {}, resources: [] } as unknown as IWorkbookData;\n const model: SheetModel = { book: wb, lines: {}, origin: { sheets: {}, lines: {} } };\n const notes: Record<string, Record<number, Record<number, unknown>>> = {};\n for (const sid of sheetOrder) {\n const { rows, cols } = pieces(sheets.get(sid)!);\n const l = { rows: rows.toArray(), cols: cols.toArray() };\n model.lines[sid] = l;\n wb.sheets[sid] = sheetOf(doc, sid, l);\n notesOf(sheets.get(sid)!, l).forEach((n, i) => { ((notes[sid] ??= {})[n.row] ??= {})[n.col] = { ...n, show: false, id: `n${i}` }; });\n const o = origin.get(sid);\n if (!o) continue;\n model.origin.sheets[sid] = o.id;\n model.origin.lines[sid] = { rows: typeof o.rows === 'number' ? numbered('r', o.rows) : o.rows, cols: typeof o.cols === 'number' ? numbered('c', o.cols) : o.cols };\n }\n wb.resources!.push({ name: 'SHEET_NOTE_PLUGIN', data: JSON.stringify(notes) });\n const active = book.get('active') as string | null;\n if (active && sheetOrder.includes(active)) model.active = active;\n return model;\n}\n\nexport function extras(doc: Y.Doc, model: SheetModel) {\n const { book, origin } = parts(doc);\n const own = new Map([...origin.entries()].filter(([sid]) => model.lines[sid]).map(([sid, o]) => {\n const old = model.origin.lines[sid], now = model.lines[sid];\n return [`s${o.id}`, { sid, name: o.name, rows: new Axis(old.rows, now.rows), cols: new Axis(old.cols, now.cols) }];\n }));\n const fix = (b: Box, sid: string) => { const a = own.get(sid)!; return squeeze(b, a.rows.map, a.cols.map); };\n for (const r of book.get('extras') as Resource[]) {\n const parsed = JSON.parse(r.data) as Record<string, unknown>;\n let out: Record<string, unknown> = {};\n if (r.name === 'SHEET_DEFINED_NAME_PLUGIN') out = Object.fromEntries(Object.entries(parsed as Record<string, { formulaOrRefString: string; localSheetId: string }>).map(([id, n]) => {\n let f = n.formulaOrRefString;\n for (const a of own.values()) {\n f = remapped(f, s => s === a.name, a.rows.map, a.cols.map);\n if (a.name !== model.book.sheets[a.sid].name) f = renamed(f, a.name, model.book.sheets[a.sid].name!);\n }\n return [id, { ...n, formulaOrRefString: f, localSheetId: own.get(n.localSheetId)?.sid ?? n.localSheetId }];\n }));\n else for (const [base, x] of Object.entries(parsed)) {\n const a = own.get(base);\n if (!a) continue;\n if (r.name === 'SHEET_DATA_VALIDATION_PLUGIN') out[a.sid] = (x as { ranges: Box[] }[]).map(rule => ({ ...rule, ranges: rule.ranges.map(b => fix(b, base)).filter(Boolean) })).filter(rule => rule.ranges.length);\n else if (r.name === 'SHEET_FILTER_PLUGIN') {\n const f = x as { ref: Box; cachedFilteredOut?: number[] };\n const ref = fix(f.ref, base);\n if (ref) out[a.sid] = { ...f, ref: { ...f.ref, ...ref }, cachedFilteredOut: (f.cachedFilteredOut ?? []).map(a.rows.map).filter(n => n >= 0) };\n } else out[a.sid] = x;\n }\n model.book.resources!.push({ name: r.name, data: JSON.stringify(out) });\n }\n return model;\n}\n\nexport function settle(doc: Y.Doc, model: SheetModel, bytes: ArrayBuffer, kind: 'xlsx' | 'csv') {\n const { book, origin } = parts(doc);\n const ids = kind === 'csv' ? [] : worksheets(bytes);\n const saved = readSheet(bytes, kind);\n const back = new Map<string, string>();\n model.book.sheetOrder.forEach((sid, i) => {\n const id = ids[i] ?? i + 1;\n back.set(`s${id}`, sid);\n origin.set(sid, { id, name: model.book.sheets[sid].name ?? '', rows: model.lines[sid].rows, cols: model.lines[sid].cols });\n });\n for (const sid of [...origin.keys()]) if (!model.lines[sid]) origin.delete(sid);\n book.set('extras', (saved.book.resources ?? []).filter(r => r.name !== 'SHEET_NOTE_PLUGIN'));\n}\n\nexport function applyCells(doc: Y.Doc, list: { sheet: string; ref: string; value?: string | number | boolean | null; formula?: string }[], origin: unknown) {\n const { order, sheets, values } = parts(doc);\n let done = 0;\n doc.transact(() => {\n for (const x of list) {\n const sid = order.toArray().find(id => sheets.get(id)?.get('name') === x.sheet);\n const [r, c] = cell(x.ref);\n if (!sid || r < 0) continue;\n const { rows, cols, cells } = pieces(sheets.get(sid)!);\n if (r >= rows.length || c >= cols.length) continue;\n const at = spot(rows.get(r), cols.get(c));\n const next: Cell = {};\n if (x.formula !== undefined) next.f = x.formula.startsWith('=') ? x.formula : `=${x.formula}`;\n else if (typeof x.value === 'boolean') Object.assign(next, { v: x.value ? 1 : 0, t: 3 });\n else if (x.value !== undefined && x.value !== null && x.value !== '') Object.assign(next, { v: x.value, t: typeof x.value === 'number' ? 2 : 1 });\n const s = cells.get(at)?.s;\n if (s) next.s = s;\n values.delete(`${sid}:${at}`);\n if (Object.keys(next).length) cells.set(at, next);\n else cells.delete(at);\n done++;\n }\n }, origin);\n return done;\n}\n","import type { Language } from '../types';\n\nconst en = {\n asCurrency: 'Format as euro', asPercent: 'Format as percent', fewerDecimals: 'Fewer decimal places', moreDecimals: 'More decimal places', sum: 'Sum', tools: 'Sheet tools', loading: 'Opening the sheet', failed: 'This sheet could not be opened', retry: 'Try again',\n undo: 'Undo', redo: 'Redo', bold: 'Bold', italic: 'Italic', underline: 'Underline', strike: 'Strike out',\n textColour: 'Text colour', fill: 'Fill colour', automatic: 'Automatic', noFill: 'No fill',\n borders: 'Borders', borderAll: 'All borders', borderOuter: 'Outer border', borderBottom: 'Bottom border', borderNone: 'No borders',\n alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', wrap: 'Wrap text', merge: 'Merge cells', unmerge: 'Split cells',\n format: 'Number format', general: 'General', number: 'Number', percent: 'Percent', currency: 'Currency', date: 'Date', time: 'Time', text: 'Text',\n rowAbove: 'Row above', rowBelow: 'Row below', columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRows: 'Delete rows', deleteColumns: 'Delete columns',\n freeze: 'Freeze', freezeNone: 'Unfreeze', freezeRow: 'First row', freezeColumn: 'First column', freezeHere: 'Up to the selected cell',\n sortUp: 'Sort A to Z', sortDown: 'Sort Z to A', filter: 'Filter', find: 'Find and replace', note: 'Note',\n save: 'Save', saving: 'Saving', saved: 'Saved', saveFailed: 'Could not save', editedNote: 'Sheet edited',\n viewOnly: 'View only', notesOnly: 'You can add notes',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this sheet', you: 'you',\n refused: {\n chartSource: 'A chart on another sheet uses data from “{sheet}”. Bring that sheet back to save.',\n pivotSheet: 'A pivot table reads its data from “{sheet}”. Bring that sheet back to save.',\n tableColumns: 'Columns changed inside a table on “{sheet}”. Undo that change to save.',\n },\n};\n\nexport type SheetText = typeof en;\n\nconst pl: SheetText = {\n asCurrency: 'Formatuj jako euro', asPercent: 'Formatuj jako procent', fewerDecimals: 'Mniej miejsc po przecinku', moreDecimals: 'Więcej miejsc po przecinku', sum: 'Suma', tools: 'Narzędzia arkusza', loading: 'Otwieranie arkusza', failed: 'Nie udało się otworzyć tego arkusza', retry: 'Spróbuj ponownie',\n undo: 'Cofnij', redo: 'Ponów', bold: 'Pogrubienie', italic: 'Kursywa', underline: 'Podkreślenie', strike: 'Przekreślenie',\n textColour: 'Kolor tekstu', fill: 'Kolor wypełnienia', automatic: 'Automatyczny', noFill: 'Bez wypełnienia',\n borders: 'Obramowanie', borderAll: 'Wszystkie krawędzie', borderOuter: 'Krawędzie zewnętrzne', borderBottom: 'Dolna krawędź', borderNone: 'Bez krawędzi',\n alignLeft: 'Do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Do prawej', wrap: 'Zawijaj tekst', merge: 'Scal komórki', unmerge: 'Rozdziel komórki',\n format: 'Format liczb', general: 'Ogólny', number: 'Liczba', percent: 'Procent', currency: 'Waluta', date: 'Data', time: 'Godzina', text: 'Tekst',\n rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej', columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRows: 'Usuń wiersze', deleteColumns: 'Usuń kolumny',\n freeze: 'Zablokuj', freezeNone: 'Odblokuj', freezeRow: 'Pierwszy wiersz', freezeColumn: 'Pierwsza kolumna', freezeHere: 'Do zaznaczonej komórki',\n sortUp: 'Sortuj od A do Z', sortDown: 'Sortuj od Z do A', filter: 'Filtr', find: 'Znajdź i zamień', note: 'Notatka',\n save: 'Zapisz', saving: 'Zapisywanie', saved: 'Zapisano', saveFailed: 'Nie udało się zapisać', editedNote: 'Edycja arkusza',\n viewOnly: 'Tylko podgląd', notesOnly: 'Możesz dodawać notatki',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym arkuszu', you: 'ty',\n refused: {\n chartSource: 'Wykres na innym arkuszu korzysta z danych arkusza „{sheet}”. Przywróć ten arkusz, aby zapisać.',\n pivotSheet: 'Tabela przestawna pobiera dane z arkusza „{sheet}”. Przywróć ten arkusz, aby zapisać.',\n tableColumns: 'Kolumny zmieniły się wewnątrz tabeli na arkuszu „{sheet}”. Cofnij tę zmianę, aby zapisać.',\n },\n};\n\nconst uk: SheetText = {\n asCurrency: 'Формат євро', asPercent: 'Формат відсотків', fewerDecimals: 'Менше знаків після коми', moreDecimals: 'Більше знаків після коми', sum: 'Сума', tools: 'Інструменти таблиці', loading: 'Відкриваємо таблицю', failed: 'Не вдалося відкрити цю таблицю', retry: 'Спробувати ще',\n undo: 'Відмінити', redo: 'Повторити', bold: 'Жирний', italic: 'Курсив', underline: 'Підкреслений', strike: 'Закреслений',\n textColour: 'Колір тексту', fill: 'Колір заливки', automatic: 'Автоматичний', noFill: 'Без заливки',\n borders: 'Межі', borderAll: 'Усі межі', borderOuter: 'Зовнішні межі', borderBottom: 'Нижня межа', borderNone: 'Без меж',\n alignLeft: 'Ліворуч', alignCenter: 'По центру', alignRight: 'Праворуч', wrap: 'Переносити текст', merge: 'Об’єднати клітинки', unmerge: 'Роз’єднати клітинки',\n format: 'Формат чисел', general: 'Загальний', number: 'Число', percent: 'Відсоток', currency: 'Валюта', date: 'Дата', time: 'Час', text: 'Текст',\n rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче', columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRows: 'Видалити рядки', deleteColumns: 'Видалити стовпці',\n freeze: 'Закріпити', freezeNone: 'Відкріпити', freezeRow: 'Перший рядок', freezeColumn: 'Перший стовпець', freezeHere: 'До виділеної клітинки',\n sortUp: 'Сортувати від А до Я', sortDown: 'Сортувати від Я до А', filter: 'Фільтр', find: 'Знайти й замінити', note: 'Примітка',\n save: 'Зберегти', saving: 'Збереження', saved: 'Збережено', saveFailed: 'Не вдалося зберегти', editedNote: 'Правка таблиці',\n viewOnly: 'Лише перегляд', notesOnly: 'Можна додавати примітки',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цій таблиці', you: 'ви',\n refused: {\n chartSource: 'Діаграма на іншому аркуші бере дані з аркуша «{sheet}». Поверніть цей аркуш, щоб зберегти.',\n pivotSheet: 'Зведена таблиця бере дані з аркуша «{sheet}». Поверніть цей аркуш, щоб зберегти.',\n tableColumns: 'Стовпці змінилися всередині таблиці на аркуші «{sheet}». Відмініть цю зміну, щоб зберегти.',\n },\n};\n\nexport const sheetTexts: Record<Language, SheetText> = { en, pl, uk };\n","import type { DocumentKind, Language, SignatureMethod } from './types';\n\nconst en = {\n documents: 'Documents', hint: 'Files of your projects: read, edit and comment in one place', loose: 'Without a folder', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n pick: 'Choose a document from the list', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', findHeading: 'Find a heading', read: 'read', showSections: 'Show sections', hideSections: 'Hide sections', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'Updated by', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n allProjects: 'All projects', closePanel: 'Hide the panel', openPanel: 'Show the panel', zoomIn: 'Zoom in', zoomOut: 'Zoom out', fit: 'Actual size',\n pdfTools: 'PDF tools', pages: 'Pages', page: 'Page', fitWidth: 'Fit to width', fitPage: 'Fit to page', find: 'Find in the document', previous: 'Previous', next: 'Next',\n close: 'Close', searching: 'Searching', noHits: 'No results', selectText: 'Select text', highlight: 'Highlight', underline: 'Underline', strike: 'Strike out',\n note: 'Note', draw: 'Draw', eraser: 'Eraser', sign: 'Sign', colour: 'Colour', lineWidth: 'Line width', undo: 'Undo', redo: 'Redo', save: 'Save', saving: 'Saving',\n saved: 'Saved', align: 'Align', moreTools: 'More tools', fewerTools: 'Fewer tools', typeFilter: 'Type', selectAll: 'Select all', clearPick: 'Clear', saveFailed: 'Could not save', remove: 'Remove', notePlaceholder: 'Write a note', signature: 'Signature', placeHint: 'Click or tap where the signature goes',\n cancel: 'Cancel', signTitle: 'Add a signature', typed: 'Type', drawn: 'Draw', image: 'Image', yourName: 'Your name', drawHere: 'Sign with the mouse or a finger',\n clear: 'Clear', pickImage: 'Choose a PNG or JPEG image', useSign: 'Place the signature', marksNote: 'Marks', formNote: 'Form filled', signedNote: 'Signed',\n signatures: 'Signatures', noSignatures: 'Nobody has signed this file yet', version: 'Version', download: 'Download', openInDocuments: 'Open in Documents',\n textTools: 'Text tools', home: 'Home', insert: 'Insert', layout: 'Layout', review: 'Review', viewTab: 'View', paragraphStyle: 'Paragraph style', normal: 'Normal',\n heading: 'Heading', quote: 'Quote', code: 'Code', bold: 'Bold', italic: 'Italic', textColour: 'Text colour', automatic: 'Automatic', noColour: 'No colour',\n bullets: 'Bulleted list', numbers: 'Numbered list', tasks: 'Task list', alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', justify: 'Justify',\n indent: 'Increase indent', outdent: 'Decrease indent', clearFormat: 'Clear formatting', table: 'Table', rowAbove: 'Row above', rowBelow: 'Row below',\n columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRow: 'Delete row', deleteColumn: 'Delete column', deleteTable: 'Delete table',\n headerRow: 'Header row', mergeCells: 'Merge or split cells', imageLink: 'Image address', chooseFile: 'Choose a file', put: 'Insert', link: 'Link',\n linkAddress: 'Link address', apply: 'Apply', unlink: 'Remove link', pageBreak: 'Page break', rule: 'Horizontal line', pageSize: 'Page size', margins: 'Margins',\n marginsNormal: 'Normal', marginsNarrow: 'Narrow', marginsWide: 'Wide', addComment: 'Add comment', comments: 'Comments', noComments: 'No comments yet',\n commentHint: 'Select text and add a comment', writeComment: 'Write a comment', post: 'Post', reply: 'Reply', resolve: 'Resolve', reopen: 'Reopen',\n resolved: 'Resolved', showResolved: 'Show resolved', commentFailed: 'Could not send the comment', exportAs: 'Export', exportFailed: 'Could not export',\n editedNote: 'Text edited', documentText: 'Document text', locked: 'Kept as in the file', references: 'References', toc: 'Table of contents', tocInsert: 'Insert table of contents', tocGo: 'Go to the table',\n tocRemove: 'Remove the table', tocHint: 'It follows the headings as you write', tocEmpty: 'Add headings and they show here',\n suggest: 'Suggest changes', suggesting: 'Suggesting', suggestions: 'Suggestions', acceptAll: 'Accept all', rejectAll: 'Reject all', accept: 'Accept', reject: 'Reject',\n added: 'Added', removed: 'Deleted', someone: 'Someone', copyAs: 'Make an XLSX copy', copyFailed: 'Could not make the copy', downloadAs: 'Download as', makeCopy: 'Make a copy', copyOf: 'Copy of', rename: 'Rename', renameFailed: 'Could not rename', editComment: 'Edit', delete: 'Delete',\n deleteAsk: 'Delete this comment?', deleteThread: 'Delete this comment and its replies?', changeFailed: 'Could not change the comment',\n unsavedTitle: 'Save your changes?', unsavedHint: 'This document has changes that are not saved yet.', discard: 'Discard', more: 'More tools',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this document', you: 'you',\n share: 'Share', sharing: 'Sharing', guestLinks: 'Guest links', viewLink: 'View link', commentLink: 'Comment link', madeBy: 'Made by {name}', endsOn: 'Ends {date}',\n untilOff: 'Until turned off', linkEnded: 'Ended', downloadOn: 'Download on', passwordOn: 'Password', copy: 'Copy', copied: 'Copied', changeLink: 'Change',\n turnOff: 'Turn off', newLink: 'New guest link', guestsCan: 'Guests can', canRead: 'Read', canComment: 'Read and comment', badgeRead: 'Read only',\n badgeComment: 'Read and comment', linkWorks: 'Link works', days7: '7 days', days30: '30 days', untilTurnOff: 'Until I turn it off', pickDay: 'Pick a day',\n passwordHint: 'Guests type it once on their device', passwordPlaceholder: 'Type the password', keepPassword: 'Leave empty to keep the password',\n downloadFile: 'Download the file', downloadHint: 'The original file and a PDF copy', askName: \"Ask the guest's name\", askNameHint: 'Shown to you in who opened it',\n lastSaved: 'Guests see the last saved version. A new version reaches the link when someone saves.', makeLink: 'Make the link', saveLink: 'Save the link',\n inTeam: 'Inside the team', peopleOf: 'People of {space}', teamHint: 'Everyone who sees Drive of this project reads it, people with edit rights change it.',\n noLinks: 'No guest links yet. A link opens this document without an account.', unnamed: 'Guests without a name', shareFailed: 'The link did not save. Try again.',\n sharedBy: 'Shared by {name}', openDoc: 'Open', passwordAsk: 'This document opens with a password. Type it to open the document on this device.',\n wrongPassword: 'The password does not fit. Try again.', endedTitle: 'This link has ended',\n endedText: 'The person who shared this document turned the link off or it reached its last day. Ask them for a new link.',\n missingTitle: 'This link opens nothing', missingText: 'Check the address or ask for a new link.',\n nameAsk: 'Type your name to read this document. The person who shared it sees who opened it.',\n nameHint: 'The person who shared this document sees your name and comments. The name stays on this device.', nameNeeded: 'Type your name to comment',\n guest: 'Guest', pdfCopy: 'PDF copy', tooMany: 'Too many tries. Try again in a few minutes.',\n openForms: { one: 'open', other: 'opens' } as Record<string, string>, commentForms: { one: 'comment', other: 'comments' } as Record<string, string>,\n methods: { typed: 'Typed', drawn: 'Drawn', image: 'Image' } satisfies Record<SignatureMethod, string>,\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n create: 'New', newTitle: 'New document', startFrom: 'Start from', name: 'Name', savesTo: 'Saves to', make: 'Create', making: 'Creating', makeFailed: 'Could not create the document',\n untitled: 'Untitled', kindHints: { docx: 'Word, DOCX', markdown: 'MD, same editor', sheet: 'Excel, XLSX', slides: 'HTML slides' },\n newKinds: { docx: 'Document', markdown: 'Markdown', sheet: 'Spreadsheet', slides: 'Presentation' },\n templates: { blank: 'Blank', letter: 'Letter', contract: 'Contract', notes: 'Meeting notes', invoice: 'Invoice', report: 'Report' },\n menuFile: 'File', menuEdit: 'Edit', menuFormat: 'Format', menuTools: 'Tools', zoom: 'Zoom',\n font: 'Font', fontSize: 'Font size', defaultFont: 'Default', lineSpacing: 'Line and paragraph spacing', single: 'Single', double: 'Double', spaceAfter: 'Add space after paragraph', noSpaceAfter: 'Remove space after paragraph',\n superscript: 'Superscript', subscript: 'Subscript', painter: 'Paint format', painterHint: 'Select text to paint, double click keeps it on, Esc stops',\n pageSetup: 'Page setup', orientation: 'Orientation', portrait: 'Portrait', landscape: 'Landscape', marginsCm: 'Margins, cm', mTop: 'Top', mRight: 'Right', mBottom: 'Bottom', mLeft: 'Left',\n headerText: 'Header', footerText: 'Footer', pageNumbers: 'Page numbers in the footer',\n wrapInline: 'In line with text', wrapLeft: 'Text wraps on the right', wrapRight: 'Text wraps on the left',\n cellFill: 'Cell fill', tableBorders: 'Table borders',\n findReplace: 'Find and replace', replaceWith: 'Replace with', replaceOne: 'Replace', replaceAll: 'Replace all', matchCase: 'Match case', words: 'Words', print: 'Print',\n autosavedNote: 'Autosaved',\n uploadFile: 'Upload a file', uploading: 'Uploading', uploadFailed: 'Could not upload the file',\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', hint: 'Pliki Twoich projektów: czytaj, edytuj i komentuj w jednym miejscu', loose: 'Bez folderu', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n pick: 'Wybierz dokument z listy', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', findHeading: 'Znajdź nagłówek', read: 'przeczytano', showSections: 'Pokaż sekcje', hideSections: 'Ukryj sekcje', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Zmienione przez', kind: 'Format', rights: 'Możesz', view: 'Przeglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n allProjects: 'Wszystkie projekty', closePanel: 'Ukryj panel', openPanel: 'Pokaż panel', zoomIn: 'Powiększ', zoomOut: 'Pomniejsz', fit: 'Rzeczywisty rozmiar',\n pdfTools: 'Narzędzia PDF', pages: 'Strony', page: 'Strona', fitWidth: 'Dopasuj do szerokości', fitPage: 'Cała strona', find: 'Szukaj w dokumencie', previous: 'Poprzedni', next: 'Następny',\n close: 'Zamknij', searching: 'Wyszukiwanie', noHits: 'Brak wyników', selectText: 'Zaznacz tekst', highlight: 'Wyróżnij', underline: 'Podkreśl', strike: 'Przekreśl',\n note: 'Notatka', draw: 'Rysuj', eraser: 'Gumka', sign: 'Podpisz', colour: 'Kolor', lineWidth: 'Grubość linii', undo: 'Cofnij', redo: 'Ponów', save: 'Zapisz', saving: 'Zapisywanie',\n saved: 'Zapisano', align: 'Wyrównanie', moreTools: 'Więcej narzędzi', fewerTools: 'Mniej narzędzi', typeFilter: 'Typ', selectAll: 'Zaznacz wszystkie', clearPick: 'Wyczyść', saveFailed: 'Nie udało się zapisać', remove: 'Usuń', notePlaceholder: 'Napisz notatkę', signature: 'Podpis', placeHint: 'Kliknij lub dotknij miejsca, gdzie ma być podpis',\n cancel: 'Anuluj', signTitle: 'Dodaj podpis', typed: 'Wpisz', drawn: 'Narysuj', image: 'Obraz', yourName: 'Imię i nazwisko', drawHere: 'Podpisz myszą lub palcem',\n clear: 'Wyczyść', pickImage: 'Wybierz obraz PNG lub JPEG', useSign: 'Wstaw podpis', marksNote: 'Oznaczenia', formNote: 'Wypełniony formularz', signedNote: 'Podpisano',\n signatures: 'Podpisy', noSignatures: 'Nikt jeszcze nie podpisał tego pliku', version: 'Wersja', download: 'Pobierz', openInDocuments: 'Otwórz w Dokumentach',\n textTools: 'Narzędzia tekstowe', home: 'Narzędzia główne', insert: 'Wstawianie', layout: 'Układ', review: 'Recenzja', viewTab: 'Widok', paragraphStyle: 'Styl akapitu', normal: 'Normalny',\n heading: 'Nagłówek', quote: 'Cytat', code: 'Kod', bold: 'Pogrubienie', italic: 'Kursywa', textColour: 'Kolor tekstu', automatic: 'Automatyczny', noColour: 'Bez koloru',\n bullets: 'Lista punktowana', numbers: 'Lista numerowana', tasks: 'Lista zadań', alignLeft: 'Wyrównaj do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Wyrównaj do prawej', justify: 'Wyjustuj',\n indent: 'Zwiększ wcięcie', outdent: 'Zmniejsz wcięcie', clearFormat: 'Wyczyść formatowanie', table: 'Tabela', rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej',\n columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRow: 'Usuń wiersz', deleteColumn: 'Usuń kolumnę', deleteTable: 'Usuń tabelę',\n headerRow: 'Wiersz nagłówka', mergeCells: 'Scal lub podziel komórki', imageLink: 'Adres obrazu', chooseFile: 'Wybierz plik', put: 'Wstaw', link: 'Link',\n linkAddress: 'Adres linku', apply: 'Zastosuj', unlink: 'Usuń link', pageBreak: 'Podział strony', rule: 'Linia pozioma', pageSize: 'Rozmiar strony', margins: 'Marginesy',\n marginsNormal: 'Normalne', marginsNarrow: 'Wąskie', marginsWide: 'Szerokie', addComment: 'Dodaj komentarz', comments: 'Komentarze', noComments: 'Nie ma jeszcze komentarzy',\n commentHint: 'Zaznacz tekst i dodaj komentarz', writeComment: 'Napisz komentarz', post: 'Dodaj', reply: 'Odpowiedz', resolve: 'Rozwiąż', reopen: 'Otwórz ponownie',\n resolved: 'Rozwiązany', showResolved: 'Pokaż rozwiązane', commentFailed: 'Nie udało się wysłać komentarza', exportAs: 'Eksport', exportFailed: 'Nie udało się wyeksportować',\n editedNote: 'Edycja tekstu', documentText: 'Tekst dokumentu', locked: 'Zachowane jak w pliku', references: 'Odwołania', toc: 'Spis treści', tocInsert: 'Wstaw spis treści', tocGo: 'Przejdź do spisu',\n tocRemove: 'Usuń spis', tocHint: 'Sam podąża za nagłówkami', tocEmpty: 'Dodaj nagłówki, a pojawią się tutaj',\n suggest: 'Sugeruj zmiany', suggesting: 'Sugerowanie', suggestions: 'Sugestie', acceptAll: 'Akceptuj wszystkie', rejectAll: 'Odrzuć wszystkie', accept: 'Akceptuj', reject: 'Odrzuć',\n added: 'Dodano', removed: 'Usunięto', someone: 'Ktoś', copyAs: 'Zrób kopię XLSX', downloadAs: 'Pobierz jako', makeCopy: 'Utwórz kopię', copyOf: 'Kopia', rename: 'Zmień nazwę', renameFailed: 'Nie udało się zmienić nazwy', copyFailed: 'Nie udało się zrobić kopii', editComment: 'Edytuj', delete: 'Usuń',\n deleteAsk: 'Usunąć ten komentarz?', deleteThread: 'Usunąć ten komentarz razem z odpowiedziami?', changeFailed: 'Nie udało się zmienić komentarza',\n unsavedTitle: 'Zapisać zmiany?', unsavedHint: 'Ten dokument ma niezapisane zmiany.', discard: 'Nie zapisuj', more: 'Więcej narzędzi',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym dokumencie', you: 'ty',\n share: 'Udostępnij', sharing: 'Udostępnianie', guestLinks: 'Linki dla gości', viewLink: 'Link do czytania', commentLink: 'Link do komentowania',\n madeBy: 'Utworzono przez {name}', endsOn: 'Działa do {date}', untilOff: 'Do wyłączenia', linkEnded: 'Wygasł', downloadOn: 'Pobieranie włączone', passwordOn: 'Hasło',\n copy: 'Kopiuj', copied: 'Skopiowano', changeLink: 'Zmień', turnOff: 'Wyłącz', newLink: 'Nowy link dla gości', guestsCan: 'Goście mogą', canRead: 'Czytać',\n canComment: 'Czytać i komentować', badgeRead: 'Tylko do odczytu', badgeComment: 'Czytanie i komentarze', linkWorks: 'Link działa', days7: '7 dni', days30: '30 dni',\n untilTurnOff: 'Dopóki go nie wyłączę', pickDay: 'Wybierz dzień', passwordHint: 'Goście wpisują je raz na swoim urządzeniu', passwordPlaceholder: 'Wpisz hasło',\n keepPassword: 'Zostaw puste, aby zachować hasło', downloadFile: 'Pobieranie pliku', downloadHint: 'Oryginalny plik i kopia PDF', askName: 'Pytaj gościa o imię',\n askNameHint: 'Widzisz je na liście osób, które otworzyły link', lastSaved: 'Goście widzą ostatnią zapisaną wersję. Nowa wersja trafia do linku, gdy ktoś zapisze.',\n makeLink: 'Utwórz link', saveLink: 'Zapisz link', inTeam: 'W zespole', peopleOf: 'Osoby z projektu {space}',\n teamHint: 'Każdy, kto widzi Dysk tego projektu, czyta go, a osoby z prawem edycji go zmieniają.',\n noLinks: 'Nie ma jeszcze linków dla gości. Link otwiera ten dokument bez konta.', unnamed: 'Goście bez imienia', shareFailed: 'Nie udało się zapisać linku. Spróbuj ponownie.',\n sharedBy: 'Udostępnione przez {name}', openDoc: 'Otwórz', passwordAsk: 'Ten dokument otwiera się hasłem. Wpisz je, aby otworzyć dokument na tym urządzeniu.',\n wrongPassword: 'Hasło nie pasuje. Spróbuj ponownie.', endedTitle: 'Ten link wygasł',\n endedText: 'Osoba, która udostępniła dokument, wyłączyła link albo minął jego ostatni dzień. Poproś ją o nowy link.',\n missingTitle: 'Ten link niczego nie otwiera', missingText: 'Sprawdź adres albo poproś o nowy link.',\n nameAsk: 'Wpisz swoje imię, aby przeczytać ten dokument. Osoba, która go udostępniła, widzi, kto go otworzył.',\n nameHint: 'Osoba, która udostępniła dokument, widzi Twoje imię i komentarze. Imię zostaje na tym urządzeniu.', nameNeeded: 'Wpisz imię, aby komentować',\n guest: 'Gość', pdfCopy: 'Kopia PDF', tooMany: 'Za dużo prób. Spróbuj za kilka minut.',\n openForms: { one: 'otwarcie', few: 'otwarcia', many: 'otwarć', other: 'otwarcia' }, commentForms: { one: 'komentarz', few: 'komentarze', many: 'komentarzy', other: 'komentarza' },\n methods: { typed: 'Wpisany', drawn: 'Narysowany', image: 'Obraz' },\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n create: 'Nowy', newTitle: 'Nowy dokument', startFrom: 'Zacznij od', name: 'Nazwa', savesTo: 'Zapisze się w', make: 'Utwórz', making: 'Tworzenie', makeFailed: 'Nie udało się utworzyć dokumentu',\n untitled: 'Bez tytułu', kindHints: { docx: 'Word, DOCX', markdown: 'MD, ten sam edytor', sheet: 'Excel, XLSX', slides: 'Slajdy HTML' },\n newKinds: { docx: 'Dokument', markdown: 'Markdown', sheet: 'Arkusz', slides: 'Prezentacja' },\n templates: { blank: 'Pusty', letter: 'List', contract: 'Umowa', notes: 'Notatki ze spotkania', invoice: 'Faktura', report: 'Raport' },\n menuFile: 'Plik', menuEdit: 'Edycja', menuFormat: 'Format', menuTools: 'Narzędzia', zoom: 'Powiększenie',\n font: 'Czcionka', fontSize: 'Rozmiar czcionki', defaultFont: 'Domyślna', lineSpacing: 'Interlinia i odstępy', single: 'Pojedyncza', double: 'Podwójna', spaceAfter: 'Dodaj odstęp po akapicie', noSpaceAfter: 'Usuń odstęp po akapicie',\n superscript: 'Indeks górny', subscript: 'Indeks dolny', painter: 'Malarz formatów', painterHint: 'Zaznacz tekst, dwuklik zostawia włączone, Esc kończy',\n pageSetup: 'Ustawienia strony', orientation: 'Orientacja', portrait: 'Pionowa', landscape: 'Pozioma', marginsCm: 'Marginesy, cm', mTop: 'Górny', mRight: 'Prawy', mBottom: 'Dolny', mLeft: 'Lewy',\n headerText: 'Nagłówek', footerText: 'Stopka', pageNumbers: 'Numery stron w stopce',\n wrapInline: 'W linii z tekstem', wrapLeft: 'Tekst opływa z prawej', wrapRight: 'Tekst opływa z lewej',\n cellFill: 'Wypełnienie komórki', tableBorders: 'Obramowanie tabeli',\n findReplace: 'Znajdź i zamień', replaceWith: 'Zamień na', replaceOne: 'Zamień', replaceAll: 'Zamień wszystko', matchCase: 'Uwzględnij wielkość liter', words: 'Słowa', print: 'Drukuj',\n autosavedNote: 'Zapisano automatycznie',\n uploadFile: 'Wgraj plik', uploading: 'Wysyłanie', uploadFailed: 'Nie udało się wgrać pliku',\n};\n\nconst uk: Text = {\n documents: 'Документи', hint: 'Файли ваших проєктів: читайте, редагуйте й коментуйте в одному місці', loose: 'Без теки', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n pick: 'Виберіть документ у списку', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', findHeading: 'Знайти заголовок', read: 'прочитано', showSections: 'Показати розділи', hideSections: 'Сховати розділи', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Хто змінив', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', unsupported: 'Цей файл поки не можна показати',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n allProjects: 'Усі проєкти', closePanel: 'Сховати панель', openPanel: 'Показати панель', zoomIn: 'Збільшити', zoomOut: 'Зменшити', fit: 'Справжній розмір',\n pdfTools: 'Інструменти PDF', pages: 'Сторінки', page: 'Сторінка', fitWidth: 'За шириною', fitPage: 'Сторінка цілком', find: 'Пошук у документі', previous: 'Попередній', next: 'Наступний',\n close: 'Закрити', searching: 'Пошук', noHits: 'Нічого не знайдено', selectText: 'Виділити текст', highlight: 'Маркер', underline: 'Підкреслити', strike: 'Закреслити',\n note: 'Нотатка', draw: 'Малювати', eraser: 'Гумка', sign: 'Підписати', colour: 'Колір', lineWidth: 'Товщина лінії', undo: 'Відмінити', redo: 'Повторити', save: 'Зберегти', saving: 'Збереження',\n saved: 'Збережено', align: 'Вирівнювання', moreTools: 'Більше інструментів', fewerTools: 'Менше інструментів', typeFilter: 'Тип', selectAll: 'Вибрати всі', clearPick: 'Очистити', saveFailed: 'Не вдалося зберегти', remove: 'Видалити', notePlaceholder: 'Напишіть нотатку', signature: 'Підпис', placeHint: 'Клацніть або торкніться місця, де має бути підпис',\n cancel: 'Скасувати', signTitle: 'Додати підпис', typed: 'Ввести', drawn: 'Намалювати', image: 'Зображення', yourName: 'Ваше ім’я', drawHere: 'Підпишіться мишею або пальцем',\n clear: 'Очистити', pickImage: 'Виберіть зображення PNG або JPEG', useSign: 'Поставити підпис', marksNote: 'Позначки', formNote: 'Заповнена форма', signedNote: 'Підписано',\n signatures: 'Підписи', noSignatures: 'Цей файл ще ніхто не підписав', version: 'Версія', download: 'Завантажити', openInDocuments: 'Відкрити в Документах',\n textTools: 'Інструменти для тексту', home: 'Основне', insert: 'Вставлення', layout: 'Макет', review: 'Рецензування', viewTab: 'Вигляд', paragraphStyle: 'Стиль абзацу', normal: 'Звичайний',\n heading: 'Заголовок', quote: 'Цитата', code: 'Код', bold: 'Жирний', italic: 'Курсив', textColour: 'Колір тексту', automatic: 'Автоматично', noColour: 'Без кольору',\n bullets: 'Маркований список', numbers: 'Нумерований список', tasks: 'Список завдань', alignLeft: 'По лівому краю', alignCenter: 'По центру', alignRight: 'По правому краю', justify: 'По ширині',\n indent: 'Збільшити відступ', outdent: 'Зменшити відступ', clearFormat: 'Очистити форматування', table: 'Таблиця', rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче',\n columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRow: 'Видалити рядок', deleteColumn: 'Видалити стовпець', deleteTable: 'Видалити таблицю',\n headerRow: 'Рядок заголовка', mergeCells: 'Об’єднати або розділити клітинки', imageLink: 'Адреса зображення', chooseFile: 'Вибрати файл', put: 'Вставити', link: 'Посилання',\n linkAddress: 'Адреса посилання', apply: 'Застосувати', unlink: 'Прибрати посилання', pageBreak: 'Розрив сторінки', rule: 'Горизонтальна лінія', pageSize: 'Розмір сторінки', margins: 'Поля',\n marginsNormal: 'Звичайні', marginsNarrow: 'Вузькі', marginsWide: 'Широкі', addComment: 'Додати коментар', comments: 'Коментарі', noComments: 'Коментарів ще немає',\n commentHint: 'Виділіть текст і додайте коментар', writeComment: 'Напишіть коментар', post: 'Додати', reply: 'Відповісти', resolve: 'Вирішити', reopen: 'Відкрити знову',\n resolved: 'Вирішено', showResolved: 'Показати вирішені', commentFailed: 'Не вдалося надіслати коментар', exportAs: 'Експорт', exportFailed: 'Не вдалося експортувати',\n editedNote: 'Правка тексту', documentText: 'Текст документа', locked: 'Лишається як у файлі', references: 'Посилання', toc: 'Зміст', tocInsert: 'Вставити зміст', tocGo: 'Перейти до змісту',\n tocRemove: 'Прибрати зміст', tocHint: 'Сам іде за заголовками', tocEmpty: 'Додайте заголовки, і вони з’являться тут',\n suggest: 'Пропонувати зміни', suggesting: 'Режим пропозицій', suggestions: 'Пропозиції', acceptAll: 'Прийняти всі', rejectAll: 'Відхилити всі', accept: 'Прийняти', reject: 'Відхилити',\n added: 'Додано', removed: 'Видалено', someone: 'Хтось', copyAs: 'Зробити копію XLSX', downloadAs: 'Завантажити як', makeCopy: 'Зробити копію', copyOf: 'Копія', rename: 'Перейменувати', renameFailed: 'Не вдалося перейменувати', copyFailed: 'Не вдалося зробити копію', editComment: 'Змінити', delete: 'Видалити',\n deleteAsk: 'Видалити цей коментар?', deleteThread: 'Видалити цей коментар разом з відповідями?', changeFailed: 'Не вдалося змінити коментар',\n unsavedTitle: 'Зберегти зміни?', unsavedHint: 'У цьому документі є незбережені зміни.', discard: 'Не зберігати', more: 'Більше інструментів',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цьому документі', you: 'ви',\n share: 'Поділитися', sharing: 'Доступ', guestLinks: 'Посилання для гостей', viewLink: 'Посилання для читання', commentLink: 'Посилання для коментарів',\n madeBy: 'Автор: {name}', endsOn: 'Діє до {date}', untilOff: 'Доки не вимкнуть', linkEnded: 'Завершено', downloadOn: 'Завантаження ввімкнено', passwordOn: 'Пароль',\n copy: 'Копіювати', copied: 'Скопійовано', changeLink: 'Змінити', turnOff: 'Вимкнути', newLink: 'Нове посилання для гостей', guestsCan: 'Гості можуть', canRead: 'Читати',\n canComment: 'Читати й коментувати', badgeRead: 'Лише читання', badgeComment: 'Читання й коментарі', linkWorks: 'Посилання діє', days7: '7 днів', days30: '30 днів',\n untilTurnOff: 'Доки не вимкну', pickDay: 'Вибрати день', passwordHint: 'Гості вводять його один раз на своєму пристрої', passwordPlaceholder: 'Введіть пароль',\n keepPassword: 'Лишіть порожнім, щоб зберегти пароль', downloadFile: 'Завантаження файлу', downloadHint: 'Оригінальний файл і копія PDF', askName: 'Питати ім’я гостя',\n askNameHint: 'Ви бачите його серед тих, хто відкривав', lastSaved: 'Гості бачать останню збережену версію. Нова версія потрапляє за посиланням, коли хтось зберігає.',\n makeLink: 'Створити посилання', saveLink: 'Зберегти посилання', inTeam: 'У команді', peopleOf: 'Люди проєкту {space}',\n teamHint: 'Кожен, хто бачить Drive цього проєкту, читає його, а люди з правом правки змінюють.',\n noLinks: 'Посилань для гостей ще немає. Посилання відкриває цей документ без облікового запису.', unnamed: 'Гості без імені', shareFailed: 'Не вдалося зберегти посилання. Спробуйте ще.',\n sharedBy: 'Від {name}', openDoc: 'Відкрити', passwordAsk: 'Цей документ відкривається з паролем. Введіть його, щоб відкрити документ на цьому пристрої.',\n wrongPassword: 'Пароль не підходить. Спробуйте ще.', endedTitle: 'Це посилання більше не діє',\n endedText: 'Той, хто поділився документом, вимкнув посилання або минув його останній день. Попросіть нове посилання.',\n missingTitle: 'Це посилання нічого не відкриває', missingText: 'Перевірте адресу або попросіть нове посилання.',\n nameAsk: 'Введіть своє ім’я, щоб прочитати документ. Той, хто ним поділився, бачить, хто його відкривав.',\n nameHint: 'Той, хто поділився документом, бачить ваше ім’я та коментарі. Ім’я лишається на цьому пристрої.', nameNeeded: 'Введіть ім’я, щоб коментувати',\n guest: 'Гість', pdfCopy: 'Копія PDF', tooMany: 'Забагато спроб. Спробуйте за кілька хвилин.',\n openForms: { one: 'відкриття', few: 'відкриття', many: 'відкриттів', other: 'відкриття' }, commentForms: { one: 'коментар', few: 'коментарі', many: 'коментарів', other: 'коментаря' },\n methods: { typed: 'Введений', drawn: 'Намальований', image: 'Зображення' },\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n create: 'Новий', newTitle: 'Новий документ', startFrom: 'Почати з', name: 'Назва', savesTo: 'Збережеться в', make: 'Створити', making: 'Створення', makeFailed: 'Не вдалося створити документ',\n untitled: 'Без назви', kindHints: { docx: 'Word, DOCX', markdown: 'MD, той самий редактор', sheet: 'Excel, XLSX', slides: 'HTML-слайди' },\n newKinds: { docx: 'Документ', markdown: 'Markdown', sheet: 'Таблиця', slides: 'Презентація' },\n templates: { blank: 'Порожній', letter: 'Лист', contract: 'Договір', notes: 'Нотатки зустрічі', invoice: 'Рахунок', report: 'Звіт' },\n menuFile: 'Файл', menuEdit: 'Правка', menuFormat: 'Формат', menuTools: 'Інструменти', zoom: 'Масштаб',\n font: 'Шрифт', fontSize: 'Розмір шрифту', defaultFont: 'Типовий', lineSpacing: 'Міжрядковий інтервал і відступи', single: 'Одинарний', double: 'Подвійний', spaceAfter: 'Додати відступ після абзацу', noSpaceAfter: 'Прибрати відступ після абзацу',\n superscript: 'Верхній індекс', subscript: 'Нижній індекс', painter: 'Копіювати формат', painterHint: 'Виділіть текст, подвійний клік лишає увімкненим, Esc вимикає',\n pageSetup: 'Параметри сторінки', orientation: 'Орієнтація', portrait: 'Книжкова', landscape: 'Альбомна', marginsCm: 'Поля, см', mTop: 'Верхнє', mRight: 'Праве', mBottom: 'Нижнє', mLeft: 'Ліве',\n headerText: 'Верхній колонтитул', footerText: 'Нижній колонтитул', pageNumbers: 'Номери сторінок унизу',\n wrapInline: 'У рядку з текстом', wrapLeft: 'Текст обтікає праворуч', wrapRight: 'Текст обтікає ліворуч',\n cellFill: 'Заливка клітинки', tableBorders: 'Межі таблиці',\n findReplace: 'Знайти й замінити', replaceWith: 'Замінити на', replaceOne: 'Замінити', replaceAll: 'Замінити всі', matchCase: 'З урахуванням регістру', words: 'Слова', print: 'Друк',\n autosavedNote: 'Збережено автоматично',\n uploadFile: 'Завантажити файл', uploading: 'Завантаження', uploadFailed: 'Не вдалося завантажити файл',\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n"],"mappings":"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","names":["parse","import_core","import_transform","import_y_tiptap","Y","key","order","parts","entries","pt","key","parts","key","entries","pieces","b","meta","box","span","grid","row","cell","fill","down","px","key","picture","span","row","n","on","images","changed","listed","pending","opens","i","px","size","same","boxes","box","id","side","own","R","shape","fill","load","size","px","load","import_core","import_state","import_view","value","sig","span","attrs","value","meta","attrs","pos","relative","paint","tr","parts","value","skip","attrs","pending","StarterKit","Image","Highlight","Collaboration","CollaborationCaret","inline","value","token","entry","table","cell","row","contents","skip","key","made","side","plain","blank","lines","span","decode","out","table","decoder","row","value","sniff","lines","filled","value","resolve","parts","plain","hex","p","q","Styles","on","fill","key","align","same","keys","inner","name","value","diff","parts","id","order","edits","pt","attr","Styles","entries","notes","entry","row","inner","plain","target","blank","REL","blank","patterns","value","lookup","find","attr","inner","lines","entry","made","changed","parts","look","notes","listed","f","runs","on","columns","vml","shape","props","row","lines","props","fill","notes","row","order","order","en","pl","uk","parse","fill","write","load","blocks","same","named","changed","refs"]}
|