@w100n/documents 0.16.1 → 0.16.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/collab.ts","../package.json","../src/editor/extensions.ts","../src/editor/pager.ts","../src/sheets/model.ts","../src/sheets/csv.ts","../src/sheets/pack.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"],"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.16.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","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';\nimport { mathml } from './math';\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\nconst Formula = Node.create({\n name: 'math',\n group: 'inline',\n inline: true,\n atom: true,\n selectable: true,\n addAttributes: () => ({ latex: { default: '', parseHTML: el => el.getAttribute('data-math') ?? '' } }),\n parseHTML: () => [{ tag: 'span[data-math]' }],\n renderHTML: ({ node }) => ['span', { 'data-math': node.attrs.latex, class: 'w100n-math' }],\n addNodeView: () => ({ node }) => {\n const dom = document.createElement('span');\n dom.className = 'w100n-math';\n dom.dataset.math = node.attrs.latex;\n dom.contentEditable = 'false';\n dom.innerHTML = mathml(node.attrs.latex);\n return { dom };\n },\n});\n\nconst Footnote = Node.create({\n name: 'footnote',\n group: 'inline',\n inline: true,\n atom: true,\n selectable: true,\n addAttributes: () => ({\n id: { default: null, parseHTML: el => el.getAttribute('data-note-id') },\n text: { default: '', parseHTML: el => el.getAttribute('title') ?? '' },\n }),\n parseHTML: () => [{ tag: 'sup[data-footnote]' }],\n renderHTML: ({ node }) => ['sup', { 'data-footnote': '', 'data-note-id': node.attrs.id ?? undefined, title: node.attrs.text, class: 'w100n-fn', contenteditable: 'false' }],\n});\n\nconst EndNotes = Extension.create({\n name: 'endNotes',\n addProseMirrorPlugins: () => [new Plugin({\n props: {\n decorations(state) {\n const notes: string[] = [];\n state.doc.descendants(n => { if (n.type.name === 'footnote') notes.push(n.attrs.text); });\n if (!notes.length) return null;\n return DecorationSet.create(state.doc, [Decoration.widget(state.doc.content.size, () => {\n const list = document.createElement('div');\n list.className = 'w100n-text-endnotes';\n list.contentEditable = 'false';\n notes.forEach((text, i) => {\n const p = list.appendChild(document.createElement('p'));\n p.appendChild(document.createElement('sup')).textContent = String(i + 1);\n p.append(text);\n });\n return list;\n }, { key: notes.join('\\n'), side: 1, ignoreSelection: true })]);\n },\n },\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 Formula, Footnote, EndNotes,\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 }; flow: boolean };\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; notes: string[] }[] = [];\n const line = page.width - page.margins[1] - page.margins[3];\n const area = (list: string[]) => list.length ? 14 + list.reduce((h, text) => h + 15 * Math.max(1, Math.ceil(text.length * 5.6 / line)), 0) : 0;\n let notes: string[] = [];\n let count = 0;\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 const mine: string[] = [];\n node.descendants(d => { if (d.type.name === 'footnote') mine.push(`${count + mine.length + 1} ${d.attrs.text}`); });\n if (node.type.name === 'pageBreak') {\n gaps.push({ pos: offset + node.nodeSize, height: start + room - end + bottom + 24 + top, page: gaps.length + 1, notes });\n notes = [];\n start = end;\n } else if (end > start + room - area([...notes, ...mine]) && y > start) {\n gaps.push({ pos: offset, height: start + room - y + bottom + 24 + top, page: gaps.length + 1, notes });\n notes = [];\n start = y;\n }\n notes.push(...mine);\n count += mine.length;\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, notes });\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: '' }, flow: false }),\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, flow: next?.flow ?? value.flow };\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 { marks, flow } = paging.getState(view.state)!;\n if (flow) {\n if (sig !== 'flow') view.dispatch(view.state.tr.setMeta(paging, { set: DecorationSet.empty }).setMeta('addToHistory', false));\n sig = 'flow';\n return;\n }\n const gaps = measure(view);\n const next = gaps.map(g => `${g.pos}:${g.height}:${g.notes.join('\\n')}`).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 if (g.notes.length) {\n const list = document.createElement('div');\n list.className = 'w100n-text-footnotes';\n for (const note of g.notes) {\n const p = document.createElement('p');\n const n = document.createElement('sup');\n n.textContent = note.slice(0, note.indexOf(' '));\n p.append(n, note.slice(note.indexOf(' ')));\n list.append(p);\n }\n el.append(list);\n }\n return el;\n }, { key: `${g.pos}:${g.height}:${g.page}:${marks.header}:${marks.footer}:${g.notes.join('\\n')}`, 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 const now = paging.getState(next.state)!, was = paging.getState(prev)!;\n if (now.page !== was.page || now.marks !== was.marks || now.flow !== was.flow) 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 { 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","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"],"mappings":"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","names":["Y","Extension","Plugin","PluginKey","Decoration","DecorationSet","notes","value","span","PluginKey","Extension","attrs","Plugin","DecorationSet","value","Decoration","seen","pos","notes","relative","paint","tr","fresh","c","parts","skip","pending","key","lines","out","decoder","value","lines","filled","value","seen","parts","hex","p","q","fill","key","align","same","name","value","parts","id","order","edits","pt","attr","entries","notes","entry","target","blank","patterns","value","lookup","attr","fresh","lines","entry","seen","made","changed","parts","look","notes","f","runs","columns","lines","notes","order","parse","changes","load","blocks","same","changed"]}
1
+ {"version":3,"sources":["../src/collab.ts","../package.json","../src/editor/extensions.ts","../src/editor/pager.ts","../src/sheets/model.ts","../src/sheets/csv.ts","../src/sheets/pack.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"],"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.16.2\",\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","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';\nimport { mathml } from './math';\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\nconst Formula = Node.create({\n name: 'math',\n group: 'inline',\n inline: true,\n atom: true,\n selectable: true,\n addAttributes: () => ({ latex: { default: '', parseHTML: el => el.getAttribute('data-math') ?? '' } }),\n parseHTML: () => [{ tag: 'span[data-math]' }],\n renderHTML: ({ node }) => ['span', { 'data-math': node.attrs.latex, class: 'w100n-math' }],\n addNodeView: () => ({ node }) => {\n const dom = document.createElement('span');\n dom.className = 'w100n-math';\n dom.dataset.math = node.attrs.latex;\n dom.contentEditable = 'false';\n dom.innerHTML = mathml(node.attrs.latex);\n return { dom };\n },\n});\n\nconst Footnote = Node.create({\n name: 'footnote',\n group: 'inline',\n inline: true,\n atom: true,\n selectable: true,\n addAttributes: () => ({\n id: { default: null, parseHTML: el => el.getAttribute('data-note-id') },\n text: { default: '', parseHTML: el => el.getAttribute('title') ?? '' },\n }),\n parseHTML: () => [{ tag: 'sup[data-footnote]' }],\n renderHTML: ({ node }) => ['sup', { 'data-footnote': '', 'data-note-id': node.attrs.id ?? undefined, title: node.attrs.text, class: 'w100n-fn', contenteditable: 'false' }],\n});\n\nconst EndNotes = Extension.create({\n name: 'endNotes',\n addProseMirrorPlugins: () => [new Plugin({\n props: {\n decorations(state) {\n const notes: string[] = [];\n state.doc.descendants(n => { if (n.type.name === 'footnote') notes.push(n.attrs.text); });\n if (!notes.length) return null;\n return DecorationSet.create(state.doc, [Decoration.widget(state.doc.content.size, () => {\n const list = document.createElement('div');\n list.className = 'w100n-text-endnotes';\n list.contentEditable = 'false';\n notes.forEach((text, i) => {\n const p = list.appendChild(document.createElement('p'));\n p.appendChild(document.createElement('sup')).textContent = String(i + 1);\n p.append(text);\n });\n return list;\n }, { key: notes.join('\\n'), side: 1, ignoreSelection: true })]);\n },\n },\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 Formula, Footnote, EndNotes,\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 }; flow: boolean };\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; notes: string[] }[] = [];\n const line = page.width - page.margins[1] - page.margins[3];\n const area = (list: string[]) => list.length ? 14 + list.reduce((h, text) => h + 15 * Math.max(1, Math.ceil(text.length * 5.6 / line)), 0) : 0;\n let notes: string[] = [];\n let count = 0;\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 const mine: string[] = [];\n node.descendants(d => { if (d.type.name === 'footnote') mine.push(`${count + mine.length + 1} ${d.attrs.text}`); });\n if (node.type.name === 'pageBreak') {\n gaps.push({ pos: offset + node.nodeSize, height: start + room - end + bottom + 24 + top, page: gaps.length + 1, notes });\n notes = [];\n start = end;\n } else if (end > start + room - area([...notes, ...mine]) && y > start) {\n gaps.push({ pos: offset, height: start + room - y + bottom + 24 + top, page: gaps.length + 1, notes });\n notes = [];\n start = y;\n }\n notes.push(...mine);\n count += mine.length;\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, notes });\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: '' }, flow: false }),\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, flow: next?.flow ?? value.flow };\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 { marks, flow } = paging.getState(view.state)!;\n if (flow) {\n if (sig !== 'flow') view.dispatch(view.state.tr.setMeta(paging, { set: DecorationSet.empty }).setMeta('addToHistory', false));\n sig = 'flow';\n return;\n }\n const gaps = measure(view);\n const next = gaps.map(g => `${g.pos}:${g.height}:${g.notes.join('\\n')}`).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 if (g.notes.length) {\n const list = document.createElement('div');\n list.className = 'w100n-text-footnotes';\n for (const note of g.notes) {\n const p = document.createElement('p');\n const n = document.createElement('sup');\n n.textContent = note.slice(0, note.indexOf(' '));\n p.append(n, note.slice(note.indexOf(' ')));\n list.append(p);\n }\n el.append(list);\n }\n return el;\n }, { key: `${g.pos}:${g.height}:${g.page}:${marks.header}:${marks.footer}:${g.notes.join('\\n')}`, 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 const now = paging.getState(next.state)!, was = paging.getState(prev)!;\n if (now.page !== was.page || now.marks !== was.marks || now.flow !== was.flow) 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 { 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","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"],"mappings":"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","names":["Y","Extension","Plugin","PluginKey","Decoration","DecorationSet","notes","value","span","PluginKey","Extension","attrs","Plugin","DecorationSet","value","Decoration","seen","pos","notes","relative","paint","tr","fresh","c","parts","skip","pending","key","lines","out","decoder","value","lines","filled","value","seen","parts","hex","p","q","fill","key","align","same","name","value","parts","id","order","edits","pt","attr","entries","notes","entry","target","blank","patterns","value","lookup","attr","fresh","lines","entry","seen","made","changed","parts","look","notes","f","runs","columns","lines","notes","order","parse","changes","load","blocks","same","changed"]}