@w100n/documents 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SheetView-F4CBWEOS.js → SheetView-PUSRW7W2.js} +3 -3
- package/dist/{TextEditor-ZY4B7YIF.js → TextEditor-Z4KSBLBV.js} +3 -3
- package/dist/{chunk-2G34AIPU.js → chunk-JSJEB2CO.js} +192 -60
- package/dist/chunk-JSJEB2CO.js.map +1 -0
- package/dist/{chunk-TSB2QS56.js → chunk-ZQYSBWLK.js} +2 -2
- package/dist/collab.cjs +326 -187
- package/dist/collab.cjs.map +1 -1
- package/dist/collab.d.cts +27 -1
- package/dist/collab.d.ts +27 -1
- package/dist/collab.js +9 -1
- package/dist/index.cjs +364 -389
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +123 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +366 -395
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-2G34AIPU.js.map +0 -1
- /package/dist/{SheetView-F4CBWEOS.js.map → SheetView-PUSRW7W2.js.map} +0 -0
- /package/dist/{TextEditor-ZY4B7YIF.js.map → TextEditor-Z4KSBLBV.js.map} +0 -0
- /package/dist/{chunk-TSB2QS56.js.map → chunk-ZQYSBWLK.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/collab.ts","../package.json","../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.18.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 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","lines","out","decoder","value","lines","filled","value","parts","hex","p","q","fill","key","same","name","value","parts","id","order","edits","pt","attr","entry","target","blank","patterns","value","attr","fresh","lines","entry","made","parts","look","f","runs","columns","lines","order","parse","load","same"]}
|