@w100n/documents 0.11.0 → 0.12.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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/docx/xml.ts","../src/docx/zip.ts","../src/docx/pkg.ts","../src/docx/read.ts","../src/docx/diff.ts","../src/docx/write.ts","../src/docx/index.ts","../src/text.ts"],"sourcesContent":["export type El = { name: string; start: number; open: number; close: number; end: number; kids: El[] };\n\nexport function parse(s: string): El {\n const root: El = { name: '', start: 0, open: 0, close: s.length, end: s.length, kids: [] };\n const stack = [root];\n const n = s.length;\n let i = s.indexOf('<');\n while (i !== -1 && i < n) {\n const c = s.charCodeAt(i + 1);\n let next: number;\n if (c === 63) next = s.indexOf('?>', i) + 2;\n else if (c === 33) {\n if (s.startsWith('<!--', i)) next = s.indexOf('-->', i) + 3;\n else if (s.startsWith('<![CDATA[', i)) next = s.indexOf(']]>', i) + 3;\n else next = s.indexOf('>', i) + 1;\n } else if (c === 47) {\n next = s.indexOf('>', i) + 1;\n if (stack.length > 1) {\n const top = stack.pop()!;\n top.close = i;\n top.end = next;\n }\n } else {\n let j = i + 1;\n while (j < n) {\n const d = s.charCodeAt(j);\n if (d === 32 || d === 62 || d === 47 || d === 9 || d === 10 || d === 13) break;\n j++;\n }\n let k = j;\n for (; k < n; k++) {\n const d = s.charCodeAt(k);\n if (d === 34 || d === 39) {\n k = s.indexOf(d === 34 ? '\"' : \"'\", k + 1);\n if (k === -1) k = n;\n } else if (d === 62) break;\n }\n const self = s.charCodeAt(k - 1) === 47;\n const el: El = { name: s.slice(i + 1, j), start: i, open: k + 1, close: k + 1, end: k + 1, kids: [] };\n stack[stack.length - 1].kids.push(el);\n if (!self) stack.push(el);\n next = k + 1;\n }\n if (next <= i) break;\n i = s.indexOf('<', next);\n }\n return root;\n}\n\nexport function attr(s: string, el: El, name: string): string | null {\n const tag = s.slice(el.start, el.open);\n const key = name + '=';\n let i = tag.indexOf(key);\n while (i > 0) {\n const before = tag.charCodeAt(i - 1);\n if (before === 32 || before === 9 || before === 10 || before === 13) {\n const q = tag[i + key.length];\n return unescape(tag.slice(i + key.length + 1, tag.indexOf(q, i + key.length + 1)));\n }\n i = tag.indexOf(key, i + 1);\n }\n return null;\n}\n\nexport function attrs(tag: string): [string, string][] {\n const out: [string, string][] = [];\n const re = /([\\w:.-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n const body = tag.slice(tag.search(/[\\s/>]/));\n for (let m = re.exec(body); m; m = re.exec(body)) out.push([m[1], unescape(m[3] ?? m[4])]);\n return out;\n}\n\nexport function kid(el: El, name: string): El | undefined {\n for (const k of el.kids) if (k.name === name) return k;\n return undefined;\n}\n\nexport function find(el: El, name: string): El | undefined {\n for (const k of el.kids) {\n if (k.name === name) return k;\n const deep = find(k, name);\n if (deep) return deep;\n }\n return undefined;\n}\n\nexport function inner(s: string, el: El): string {\n return unescape(s.slice(el.open, el.close));\n}\n\nexport function on(s: string, el: El | undefined, name = 'w:val'): boolean {\n if (!el) return false;\n const v = attr(s, el, name);\n return v === null || !/^(0|false|off|none)$/.test(v);\n}\n\nconst named: Record<string, string> = { lt: '<', gt: '>', amp: '&', quot: '\"', apos: \"'\" };\n\nexport function unescape(s: string): string {\n if (s.indexOf('&') === -1) return s;\n return s.replace(/&(#x[0-9a-fA-F]+|#\\d+|\\w+);/g, (m, e: string) => {\n if (e[0] !== '#') return named[e] ?? m;\n const code = e[1] === 'x' ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);\n return String.fromCodePoint(code);\n });\n}\n\nexport function escape(s: string): string {\n return s\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uFFFE\\uFFFF]/g, '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nexport function opened(s: string, el: El): string {\n const tag = s.slice(el.start, el.open);\n return el.end === el.open ? tag.replace(/\\s*\\/>$/, '>') : tag;\n}\n\nexport function rebuild(pr: string, tag: string, order: string[], set: Record<string, string | null>): string {\n const root = parse(pr).kids[0];\n const parts: { name: string; xml: string }[] = root ? root.kids.map(k => ({ name: k.name, xml: pr.slice(k.start, k.end) })) : [];\n const seen = new Set<string>();\n const out: { name: string; xml: string }[] = [];\n for (const p of parts) {\n if (!(p.name in set)) out.push(p);\n else if (!seen.has(p.name)) {\n seen.add(p.name);\n if (set[p.name] !== null) out.push({ name: p.name, xml: set[p.name]! });\n }\n }\n for (const name in set) if (!seen.has(name) && set[name] !== null) out.push({ name, xml: set[name]! });\n if (!out.length) return '';\n const rank = (name: string) => {\n const i = order.indexOf(name);\n return i === -1 ? order.length : i;\n };\n const sorted = out.map((p, i) => ({ p, i })).sort((a, b) => rank(a.p.name) - rank(b.p.name) || a.i - b.i);\n const open = root ? opened(pr, root) : `<${tag}>`;\n return open + sorted.map(x => x.p.xml).join('') + `</${tag}>`;\n}\n","import { deflateSync, inflateSync } from 'fflate';\n\nexport type Entry = {\n name: string;\n path: Uint8Array;\n method: number;\n flags: number;\n time: number;\n date: number;\n crc: number;\n size: number;\n version: number;\n made: number;\n inner: number;\n outer: number;\n raw: Uint8Array;\n};\n\nexport function unzip(buf: Uint8Array): Entry[] {\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n let eocd = buf.length - 22;\n while (eocd >= 0 && view.getUint32(eocd, true) !== 0x06054b50) eocd--;\n if (eocd < 0) throw new Error('Not a DOCX file');\n const count = view.getUint16(eocd + 10, true);\n let at = view.getUint32(eocd + 16, true);\n if (count === 0xffff || at === 0xffffffff) throw new Error('ZIP64 DOCX files are not supported');\n const names = new TextDecoder();\n const out: Entry[] = [];\n for (let n = 0; n < count; n++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new Error('Broken DOCX file');\n const length = view.getUint16(at + 28, true);\n const extra = view.getUint16(at + 30, true);\n const note = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const csize = view.getUint32(at + 20, true);\n const path = buf.subarray(at + 46, at + 46 + length);\n const begin = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n out.push({\n name: names.decode(path),\n path,\n made: view.getUint16(at + 4, true),\n version: view.getUint16(at + 6, true),\n flags: view.getUint16(at + 8, true),\n method: view.getUint16(at + 10, true),\n time: view.getUint16(at + 12, true),\n date: view.getUint16(at + 14, true),\n crc: view.getUint32(at + 16, true),\n size: view.getUint32(at + 24, true),\n inner: view.getUint16(at + 36, true),\n outer: view.getUint32(at + 38, true),\n raw: buf.subarray(begin, begin + csize),\n });\n at += 46 + length + extra + note;\n }\n return out;\n}\n\nexport function inflate(e: Entry): Uint8Array {\n if (e.method === 0) return e.raw;\n if (e.method !== 8) throw new Error(`Unsupported compression in ${e.name}`);\n return inflateSync(e.raw, { out: new Uint8Array(e.size) });\n}\n\nconst table = (() => {\n const t = new Int32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = -1;\n for (let i = 0; i < bytes.length; i++) c = table[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);\n return (c ^ -1) >>> 0;\n}\n\nexport function entry(name: string, bytes: Uint8Array, like: Entry): Entry {\n const path = new TextEncoder().encode(name);\n return { ...like, name, path, method: 8, version: Math.max(like.version, 20), flags: like.flags & ~8, crc: crc32(bytes), size: bytes.length, raw: deflateSync(bytes, { level: 6 }) };\n}\n\nexport function zip(entries: Entry[]): Uint8Array {\n let total = 22;\n for (const e of entries) total += 30 + 46 + e.path.length * 2 + e.raw.length;\n const buf = new Uint8Array(total);\n const view = new DataView(buf.buffer);\n const offsets: number[] = [];\n let at = 0;\n for (const e of entries) {\n offsets.push(at);\n view.setUint32(at, 0x04034b50, true);\n view.setUint16(at + 4, e.version, true);\n view.setUint16(at + 6, e.flags & ~8, true);\n view.setUint16(at + 8, e.method, true);\n view.setUint16(at + 10, e.time, true);\n view.setUint16(at + 12, e.date, true);\n view.setUint32(at + 14, e.crc, true);\n view.setUint32(at + 18, e.raw.length, true);\n view.setUint32(at + 22, e.size, true);\n view.setUint16(at + 26, e.path.length, true);\n view.setUint16(at + 28, 0, true);\n buf.set(e.path, at + 30);\n buf.set(e.raw, at + 30 + e.path.length);\n at += 30 + e.path.length + e.raw.length;\n }\n const start = at;\n entries.forEach((e, n) => {\n view.setUint32(at, 0x02014b50, true);\n view.setUint16(at + 4, e.made, true);\n view.setUint16(at + 6, e.version, true);\n view.setUint16(at + 8, e.flags & ~8, true);\n view.setUint16(at + 10, e.method, true);\n view.setUint16(at + 12, e.time, true);\n view.setUint16(at + 14, e.date, true);\n view.setUint32(at + 16, e.crc, true);\n view.setUint32(at + 20, e.raw.length, true);\n view.setUint32(at + 24, e.size, true);\n view.setUint16(at + 28, e.path.length, true);\n view.setUint16(at + 36, e.inner, true);\n view.setUint32(at + 38, e.outer, true);\n view.setUint32(at + 42, offsets[n], true);\n buf.set(e.path, at + 46);\n at += 46 + e.path.length;\n });\n view.setUint32(at, 0x06054b50, true);\n view.setUint16(at + 8, entries.length, true);\n view.setUint16(at + 10, entries.length, true);\n view.setUint32(at + 12, at - start, true);\n view.setUint32(at + 16, start, true);\n return buf.subarray(0, at + 22);\n}\n","import { attr, find, kid, on, parse, type El } from './xml';\nimport { inflate, unzip, type Entry } from './zip';\n\nexport type Fmt = { b: boolean; i: boolean; u: boolean; s: boolean; code: boolean; link: string | null; hl: string | null; color: string | null; size: string | null; font: string | null; rev: string | null };\ntype Mark = { type: string; attrs?: Record<string, unknown> };\ntype Rel = { id: string; type: string; target: string; external: boolean };\n\nexport const plain: Fmt = { b: false, i: false, u: false, s: false, code: false, link: null, hl: null, color: null, size: null, font: null, rev: null };\n\nexport const highlights: Record<string, string> = {\n yellow: 'ffff00', green: '00ff00', cyan: '00ffff', magenta: 'ff00ff', blue: '0000ff', red: 'ff0000', darkBlue: '000080', darkCyan: '008080',\n darkGreen: '008000', darkMagenta: '800080', darkRed: '800000', darkYellow: '808000', darkGray: '808080', lightGray: 'c0c0c0', black: '000000', white: 'ffffff',\n};\n\nconst linkStyle = /^(hyperlink|followedhyperlink|internet link|visited internet link)$/i;\nconst headingName = /^(heading|заголовок|überschrift|titre|título|titolo|nagłówek|kop|rubrik|overskrift|otsikko|nadpis|başlık|címsor|naslov|заглавие|見出し|제목|标题|標題)\\s*(\\d)$/i;\n\nexport function color(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const t = v.trim().toLowerCase();\n let m = /^#?([0-9a-f]{6})$/.exec(t);\n if (m) return '#' + m[1];\n m = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(t);\n if (m) return '#' + m[1] + m[1] + m[2] + m[2] + m[3] + m[3];\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/.exec(t);\n if (m) return '#' + [m[1], m[2], m[3]].map(x => Math.min(255, +x).toString(16).padStart(2, '0')).join('');\n return highlights[v.trim()] ? '#' + highlights[v.trim()] : null;\n}\n\nexport function size(v: unknown): string | null {\n const m = /^\\s*([\\d.]+)\\s*(pt|px)?\\s*$/.exec(String(v ?? ''));\n if (!m || !+m[1]) return null;\n const pt = m[2] === 'px' ? +m[1] * 0.75 : +m[1];\n return `${Math.round(pt * 2) / 2}pt`;\n}\n\nexport function family(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const first = v.split(',')[0].trim().replace(/^[\"']|[\"']$/g, '');\n return first || null;\n}\n\nexport function fmtOf(marks: Mark[] | undefined): Fmt {\n const f = { ...plain };\n for (const m of marks ?? []) {\n const a = m.attrs ?? {};\n if (m.type === 'bold') f.b = true;\n else if (m.type === 'italic') f.i = true;\n else if (m.type === 'underline') f.u = true;\n else if (m.type === 'strike') f.s = true;\n else if (m.type === 'code') f.code = true;\n else if (m.type === 'link' && typeof a.href === 'string' && a.href) f.link = a.href;\n else if (m.type === 'highlight') f.hl = color(a.color) ?? '#ffff00';\n else if (m.type === 'textStyle') {\n f.color = color(a.color);\n f.size = size(a.fontSize);\n f.font = family(a.fontFamily);\n } else if (m.type === 'insertion' || m.type === 'deletion') f.rev = JSON.stringify([m.type === 'insertion' ? 'ins' : 'del', String(a.id ?? ''), String(a.author ?? ''), String(a.date ?? '')]);\n }\n if (f.code) f.font = null;\n return f;\n}\n\nexport function marksOf(f: Fmt): Mark[] | undefined {\n const out: Mark[] = [];\n if (f.b) out.push({ type: 'bold' });\n if (f.i) out.push({ type: 'italic' });\n if (f.u) out.push({ type: 'underline' });\n if (f.s) out.push({ type: 'strike' });\n if (f.code) out.push({ type: 'code' });\n if (f.link) out.push({ type: 'link', attrs: { href: f.link } });\n if (f.hl) out.push({ type: 'highlight', attrs: { color: f.hl } });\n if (f.color || f.size || f.font) out.push({ type: 'textStyle', attrs: { color: f.color, fontSize: f.size, fontFamily: f.font } });\n if (f.rev) {\n const [kind, id, author, date] = JSON.parse(f.rev) as string[];\n out.push({ type: kind === 'ins' ? 'insertion' : 'deletion', attrs: { id, author, date } });\n }\n return out.length ? out : undefined;\n}\n\nexport function keyOf(f: Fmt): string {\n return `${+f.b}${+f.i}${+f.u}${+f.s}${+f.code}|${f.link ?? ''}|${f.hl ?? ''}|${f.color ?? ''}|${f.size ?? ''}|${f.font ?? ''}|${f.rev ?? ''}`;\n}\n\ntype Props = Partial<Fmt> & { hidden?: boolean; style?: string };\n\nexport class Styles {\n byId = new Map<string, El>();\n paragraph: string | null = null;\n private memo = new Map<string, unknown>();\n constructor(readonly s: string, readonly fonts: { major: string | null; minor: string | null }) {\n const root = find(parse(s), 'w:styles');\n for (const el of root?.kids ?? []) {\n if (el.name !== 'w:style') continue;\n const id = attr(s, el, 'w:styleId');\n if (id === null) continue;\n this.byId.set(id, el);\n if (attr(s, el, 'w:type') === 'paragraph' && on(s, el, 'w:default') && attr(s, el, 'w:default') !== null) this.paragraph = id;\n }\n }\n\n private cached<T>(key: string, make: () => T): T {\n if (!this.memo.has(key)) this.memo.set(key, make());\n return this.memo.get(key) as T;\n }\n\n type(id: string): string | null {\n const el = this.byId.get(id);\n return el ? attr(this.s, el, 'w:type') : null;\n }\n\n name(id: string): string {\n const el = this.byId.get(id);\n const n = el && kid(el, 'w:name');\n return n ? attr(this.s, n, 'w:val') ?? id : id;\n }\n\n private chain(id: string | null): El[] {\n const out: El[] = [];\n const seen = new Set<string>();\n while (id && !seen.has(id)) {\n seen.add(id);\n const el = this.byId.get(id);\n if (!el) break;\n out.push(el);\n const base = kid(el, 'w:basedOn');\n id = base ? attr(this.s, base, 'w:val') : null;\n }\n return out;\n }\n\n private pPr<T>(id: string | null, pick: (pPr: El) => T | undefined): T | undefined {\n for (const el of this.chain(id ?? this.paragraph)) {\n const pPr = kid(el, 'w:pPr');\n const v = pPr && pick(pPr);\n if (v !== undefined) return v;\n }\n return undefined;\n }\n\n heading(id: string | null): number | null {\n if (!id) return null;\n return this.cached('h' + id, () => {\n for (const el of this.chain(id)) {\n const n = kid(el, 'w:name');\n const name = n ? attr(this.s, n, 'w:val') ?? '' : '';\n const m = headingName.exec(name.trim());\n if (m) return +m[2] >= 1 ? Math.min(6, +m[2]) : null;\n if (/^title$/i.test(name.trim())) return 1;\n const lvl = kid(el, 'w:pPr') && kid(kid(el, 'w:pPr')!, 'w:outlineLvl');\n if (lvl) return outline(attr(this.s, lvl, 'w:val'));\n }\n return null;\n });\n }\n\n numPr(id: string | null): { num: number; lvl: number } | null {\n return this.cached('n' + id, () => {\n const pr = this.pPr(id, p => kid(p, 'w:numPr'));\n if (!pr) return null;\n const num = kid(pr, 'w:numId');\n const lvl = kid(pr, 'w:ilvl');\n return { num: num ? +(attr(this.s, num, 'w:val') ?? 0) : 0, lvl: lvl ? +(attr(this.s, lvl, 'w:val') ?? 0) : 0 };\n });\n }\n\n jc(id: string | null): string | null {\n return this.cached('j' + id, () => this.pPr(id, p => kid(p, 'w:jc') && attr(this.s, kid(p, 'w:jc')!, 'w:val')) ?? null);\n }\n\n left(id: string | null): number {\n return this.cached('l' + id, () => this.pPr(id, p => {\n const ind = kid(p, 'w:ind');\n const v = ind && (attr(this.s, ind, 'w:left') ?? attr(this.s, ind, 'w:start'));\n return v === null || v === undefined ? undefined : +v;\n }) ?? 0);\n }\n\n char(id: string): Props {\n return this.cached('c' + id, () => {\n const name = this.name(id);\n if (linkStyle.test(name) || linkStyle.test(id)) return {};\n const out: Props = {};\n for (const el of this.chain(id).reverse()) Object.assign(out, props(this.s, kid(el, 'w:rPr'), this.fonts));\n return out;\n });\n }\n\n isLink(id: string | null): boolean {\n return !!id && (linkStyle.test(this.name(id)) || linkStyle.test(id));\n }\n\n find(test: (name: string, id: string) => boolean, type = 'paragraph'): string | null {\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === type && test(this.name(id), id)) return id;\n return null;\n }\n\n headingId(level: number): string | null {\n return this.find(name => headingName.test(name.trim()) && +headingName.exec(name.trim())![2] === level)\n ?? this.find((_, id) => this.heading(id) === level && !/^title$/i.test(this.name(id)));\n }\n\n list(): { name: string; id: string; heading: number | null }[] {\n const out = [];\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === 'paragraph') out.push({ name: this.name(id), id, heading: this.heading(id) });\n return out;\n }\n}\n\nexport function outline(v: string | null): number | null {\n const n = Number(v);\n return v !== null && n >= 0 && n < 9 ? Math.min(6, n + 1) : null;\n}\n\nexport function props(s: string, rPr: El | undefined, fonts: { major: string | null; minor: string | null }): Props {\n const out: Props = {};\n if (!rPr) return out;\n for (const k of rPr.kids) {\n switch (k.name) {\n case 'w:rStyle': out.style = attr(s, k, 'w:val') ?? undefined; break;\n case 'w:b': out.b = on(s, k); break;\n case 'w:i': out.i = on(s, k); break;\n case 'w:u': out.u = on(s, k); break;\n case 'w:strike': case 'w:dstrike': out.s = on(s, k) || !!out.s; break;\n case 'w:vanish': out.hidden = on(s, k); break;\n case 'w:color': {\n const v = attr(s, k, 'w:val');\n out.color = v && v !== 'auto' ? color(v) : null;\n break;\n }\n case 'w:sz': out.size = size(+(attr(s, k, 'w:val') ?? 0) / 2); break;\n case 'w:highlight': {\n const v = attr(s, k, 'w:val') ?? 'none';\n out.hl = highlights[v] ? '#' + highlights[v] : null;\n break;\n }\n case 'w:shd': {\n const v = attr(s, k, 'w:fill');\n if (v && v !== 'auto' && out.hl === undefined) out.hl = color(v);\n break;\n }\n case 'w:rFonts': {\n const theme = attr(s, k, 'w:asciiTheme') ?? attr(s, k, 'w:hAnsiTheme');\n const font = attr(s, k, 'w:ascii') ?? attr(s, k, 'w:hAnsi') ?? (theme ? (theme.startsWith('major') ? fonts.major : fonts.minor) : null);\n if (font) out.font = font;\n break;\n }\n }\n }\n return out;\n}\n\nexport class Numbering {\n nums = new Map<number, { abs: number; starts: Map<number, number> }>();\n abs = new Map<number, Map<number, { fmt: string; start: number; left: number | null }>>();\n maxNum = 0;\n maxAbs = -1;\n constructor(readonly s: string, styles: Styles) {\n const root = find(parse(s), 'w:numbering');\n const links = new Map<number, string>();\n for (const el of root?.kids ?? []) {\n if (el.name === 'w:abstractNum') {\n const id = +(attr(s, el, 'w:abstractNumId') ?? -1);\n this.maxAbs = Math.max(this.maxAbs, id);\n const lvls = new Map<number, { fmt: string; start: number; left: number | null }>();\n for (const l of el.kids) {\n if (l.name !== 'w:lvl') continue;\n const fmt = kid(l, 'w:numFmt');\n const start = kid(l, 'w:start');\n const ind = kid(l, 'w:pPr') && kid(kid(l, 'w:pPr')!, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n lvls.set(+(attr(s, l, 'w:ilvl') ?? 0), { fmt: fmt ? attr(s, fmt, 'w:val') ?? 'decimal' : 'decimal', start: start ? +(attr(s, start, 'w:val') ?? 1) : 1, left: left ? +left : null });\n }\n this.abs.set(id, lvls);\n const link = kid(el, 'w:numStyleLink');\n if (link) links.set(id, attr(s, link, 'w:val') ?? '');\n } else if (el.name === 'w:num') {\n const id = +(attr(s, el, 'w:numId') ?? 0);\n this.maxNum = Math.max(this.maxNum, id);\n const a = kid(el, 'w:abstractNumId');\n const starts = new Map<number, number>();\n for (const o of el.kids) {\n const so = o.name === 'w:lvlOverride' ? kid(o, 'w:startOverride') : undefined;\n if (so) starts.set(+(attr(s, o, 'w:ilvl') ?? 0), +(attr(s, so, 'w:val') ?? 1));\n }\n this.nums.set(id, { abs: a ? +(attr(s, a, 'w:val') ?? -1) : -1, starts });\n }\n }\n for (const [id, style] of links) {\n const pr = styles.numPr(style);\n const target = pr && this.nums.get(pr.num);\n if (target && this.abs.has(target.abs)) this.abs.set(id, this.abs.get(target.abs)!);\n }\n }\n\n level(num: number, lvl: number) {\n const n = this.nums.get(num);\n return n ? this.abs.get(n.abs)?.get(lvl) : undefined;\n }\n\n kind(num: number, lvl: number): 'bulletList' | 'orderedList' | null {\n const l = this.level(num, lvl);\n if (!l || l.fmt === 'none') return null;\n return l.fmt === 'bullet' ? 'bulletList' : 'orderedList';\n }\n\n start(num: number, lvl: number): number {\n return this.nums.get(num)?.starts.get(lvl) ?? this.level(num, lvl)?.start ?? 1;\n }\n}\n\nexport class Pkg {\n entries: Entry[];\n files = new Map<string, Entry>();\n main: string;\n doc: string;\n fp: string;\n rels = new Map<string, Rel>();\n styles: Styles;\n nums: Numbering;\n private texts = new Map<string, string | null>();\n\n constructor(readonly bytes: Uint8Array) {\n this.entries = unzip(bytes);\n for (const e of this.entries) this.files.set(e.name, e);\n const root = this.relsOf('');\n const office = [...root.values()].find(r => r.type.endsWith('/officeDocument'));\n this.main = office ? office.target : 'word/document.xml';\n const doc = this.text(this.main);\n if (doc === null) throw new Error('DOCX file has no document part');\n this.doc = doc;\n if (!/xmlns:w=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/wordprocessingml\\/2006\\/main\"/.test(doc.slice(0, doc.indexOf('>', doc.indexOf('<w:document')) + 1))) throw new Error('DOCX document does not use the w: prefix');\n this.fp = this.files.get(this.main)!.crc.toString(36);\n this.rels = this.relsOf(this.main);\n const theme = this.byType('/theme');\n const t = theme ? this.text(theme.target) ?? '' : '';\n const fonts = { major: /<a:majorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null, minor: /<a:minorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null };\n const styles = this.byType('/styles');\n this.styles = new Styles((styles && this.text(styles.target)) ?? '', fonts);\n const nums = this.byType('/numbering');\n this.nums = new Numbering((nums && this.text(nums.target)) ?? '', this.styles);\n }\n\n part(name: string): Uint8Array {\n return inflate(this.files.get(name)!);\n }\n\n text(name: string): string | null {\n if (!this.texts.has(name)) {\n const e = this.files.get(name);\n this.texts.set(name, e ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(inflate(e)) : null);\n }\n return this.texts.get(name)!;\n }\n\n byType(suffix: string): Rel | undefined {\n for (const r of this.rels.values()) if (r.type.endsWith(suffix) && !r.external) return r;\n return undefined;\n }\n\n relsPath(part: string): string {\n const slash = part.lastIndexOf('/');\n return `${part.slice(0, slash + 1)}_rels/${part.slice(slash + 1)}.rels`;\n }\n\n private relsOf(part: string): Map<string, Rel> {\n const out = new Map<string, Rel>();\n const s = this.text(this.relsPath(part));\n if (!s) return out;\n const dir = part.slice(0, part.lastIndexOf('/') + 1);\n for (const el of find(parse(s), 'Relationships')?.kids ?? []) {\n const id = attr(s, el, 'Id');\n const target = attr(s, el, 'Target') ?? '';\n const external = attr(s, el, 'TargetMode') === 'External';\n if (id) out.set(id, { id, type: attr(s, el, 'Type') ?? '', target: external ? target : resolve(dir, target), external });\n }\n return out;\n }\n}\n\nfunction resolve(dir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : dir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.') out.push(p);\n }\n return out.join('/');\n}\n","import type { JSONContent } from '@tiptap/core';\nimport { keyOf, marksOf, outline, plain, props, type Fmt, type Pkg, type Styles } from './pkg';\nimport { attr, attrs, find, inner, kid, on, opened, parse, unescape, type El } from './xml';\n\nexport type { JSONContent };\n\nexport type Run = { open: string; rPr: string; fmt: Fmt; el: El | null; parent: El | null };\nexport type Wrap = { open: string; close: string; link: string | null; ins: boolean; rev?: string };\nexport type Span = { xml: string; link: string | null };\nexport type Pic = { embed: string; cx: number; cy: number };\nexport type Piece = { text: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; box?: boolean; brk?: 'page' | 'hr'; pic?: Pic; img?: Record<string, unknown>; fld?: string; instr?: string };\nexport type ListCtx = { type: string; depth: number };\n\nexport type Block = {\n ref: string;\n kind: 'p' | 'tbl' | 'lock' | 'pb' | 'hr' | 'toc';\n el: El;\n start: number;\n end: number;\n lead: string;\n node: JSONContent;\n pieces: Piece[];\n list: { num: number; lvl: number; type: string; start: number } | null;\n ctx: ListCtx | null;\n task: boolean | null;\n quote: boolean;\n level: number | null;\n rows: Row[];\n cols: number;\n};\nexport type Row = { ref: string; el: El; lead: string; head: string; cells: Cell[]; node: JSONContent };\nexport type Cell = { ref: string; el: El; lead: string; col: number; span: number; vm: 'restart' | 'continue' | null; blocks: Block[]; tail: string; node: JSONContent | null };\n\nconst blank = () => ({ align: null, indent: 0, ref: null });\nconst mimes: Record<string, string> = { png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', bmp: 'image/bmp', webp: 'image/webp', svg: 'image/svg+xml' };\n\nexport function align(v: string | null | undefined): string | null {\n if (v === 'center') return 'center';\n if (v === 'right' || v === 'end') return 'right';\n if (v === 'both' || v === 'distribute' || (v && /Kashida|thaiDistribute/.test(v))) return 'justify';\n return null;\n}\n\nfunction base64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(bin);\n}\n\nexport class Reader {\n s: string;\n n = 0;\n refs = new Map<string, Block | Row | Cell>();\n private counters = new Map<number, number[]>();\n private fmts = new Map<string, Fmt & { hidden?: boolean; style?: string }>();\n private media = new Map<string, string | null>();\n\n constructor(readonly pkg: Pkg) {\n this.s = pkg.doc;\n }\n\n ref(): string {\n return `${this.pkg.fp}.${(this.n++).toString(36)}`;\n }\n\n body() {\n const body = find(parse(this.s), 'w:body');\n if (!body) throw new Error('DOCX document has no body');\n const { list, tail } = this.blocks(body);\n return { body, list, tail, sect: kid(body, 'w:sectPr') };\n }\n\n fmt(rPr: El | undefined): Fmt & { hidden?: boolean; style?: string } {\n const key = rPr ? this.s.slice(rPr.start, rPr.end) : '';\n let f = this.fmts.get(key);\n if (!f) {\n const direct = props(this.s, rPr, this.pkg.styles.fonts);\n const style = direct.style ? this.pkg.styles.char(direct.style) : {};\n f = { ...plain, ...style, ...direct };\n this.fmts.set(key, f);\n }\n return f;\n }\n\n blocks(parent: El): { list: Block[]; tail: number } {\n const s = this.s;\n const list: Block[] = [];\n let prev = parent.open;\n let group: Block | null = null;\n let depth = 0;\n for (const k of parent.kids) {\n if (k.name === 'w:tcPr') {\n prev = k.end;\n continue;\n }\n if (k.name === 'w:sectPr') break;\n if (group) {\n group.end = k.end;\n depth += net(s.slice(k.start, k.end));\n if (depth <= 0) {\n if (/<w:instrText\\b[^>]*>\\s*TOC\\b/.test(s.slice(group.start, group.el.end))) {\n const toc = this.toc(group.el, group.end);\n toc.lead = group.lead;\n list[list.length - 1] = toc;\n }\n group = null;\n }\n prev = k.end;\n continue;\n }\n let b: Block | null = null;\n if (k.name === 'w:p') b = this.paragraph(k);\n else if (k.name === 'w:tbl') b = this.table(k);\n else if (k.name === 'w:sdt' && sdtLabel(s, k) === 'Table of contents') b = this.toc(k);\n else if (k.name === 'w:sdt' || k.name === 'w:customXml' || k.name === 'w:altChunk') b = this.lock(k, sdtLabel(s, k));\n if (!b) continue;\n b.lead = s.slice(prev, k.start);\n prev = k.end;\n list.push(b);\n if (b.kind === 'lock' && k.name === 'w:p') {\n depth = net(s.slice(k.start, k.end));\n if (depth > 0) group = b;\n }\n }\n return { list, tail: prev };\n }\n\n private block(kind: Block['kind'], el: El, node: JSONContent, ref: string): Block {\n const b: Block = { ref, kind, el, start: el.start, end: el.end, lead: '', node, pieces: [], list: null, ctx: null, task: null, quote: false, level: null, rows: [], cols: 0 };\n this.refs.set(ref, b);\n return b;\n }\n\n toc(el: El, end = el.end): Block {\n const ref = this.ref();\n const { entries, title } = contents(this.s.slice(el.start, end), this.pkg.styles);\n const b = this.block('toc', el, { type: 'toc', attrs: { entries: JSON.stringify(entries), title, align: null, indent: 0, ref } }, ref);\n b.end = end;\n return b;\n }\n\n lock(el: El, label: string, ref = 'lock:' + this.ref()): Block {\n return this.block('lock', el, { type: 'paragraph', attrs: { align: null, indent: 0, ref }, content: [{ type: 'text', text: `[${label}]` }] }, ref);\n }\n\n paragraph(el: El): Block {\n const s = this.s;\n const st = { lock: null as string | null, task: null as boolean | null, box: false, open: false };\n const pieces: Piece[] = [];\n this.walk(el.kids, [], el, pieces, st);\n const fields = this.fields(pieces, st);\n if (st.lock || st.open || !fields) {\n const label = st.lock ?? (/\\bTOC\\b/.test(pieces.map(p => p.instr ?? '').join('')) ? 'Table of contents' : 'Field');\n const text = st.open ? '' : pieces.map(p => p.text ?? '').join('');\n const b = this.lock(el, label);\n if (text.trim()) b.node.content![0].text += ' ' + text.trim();\n return b;\n }\n const final = fields;\n for (const p of final) {\n const src = p.pic && this.src(p.pic.embed);\n if (!src) continue;\n const meta = Object.fromEntries(attrs(/<wp:docPr\\b[^>]*>/.exec(p.raw!)?.[0] ?? '<x>'));\n p.img = { src, alt: meta.descr ?? null, title: meta.title ?? null, width: Math.round(p.pic!.cx / 9525), height: Math.round(p.pic!.cy / 9525) };\n }\n const pPr = kid(el, 'w:pPr');\n const styles = this.pkg.styles;\n const sEl = pPr && kid(pPr, 'w:pStyle');\n const style = sEl ? attr(s, sEl, 'w:val') : null;\n const jc = pPr && kid(pPr, 'w:jc');\n const visible = final.some(p => p.text !== null || p.img);\n if (!visible && final.some(p => p.pic)) return this.lock(el, 'Picture');\n const ref = this.ref();\n if (!visible && final.some(p => p.brk === 'page')) return this.block('pb', el, { type: 'pageBreak', attrs: { align: null, indent: 0, ref } }, ref);\n const bdr = pPr && kid(pPr, 'w:pBdr');\n if (!visible && (final.some(p => p.brk === 'hr') || (bdr && kid(bdr, 'w:bottom') && !kid(bdr, 'w:top')))) return this.block('hr', el, { type: 'horizontalRule', attrs: { align: null, indent: 0, ref } }, ref);\n\n const ol = pPr && kid(pPr, 'w:outlineLvl');\n const level = ol ? outline(attr(s, ol, 'w:val')) : styles.heading(style);\n const np = pPr && kid(pPr, 'w:numPr');\n let num: { num: number; lvl: number } | null = null;\n if (np) {\n const id = kid(np, 'w:numId');\n const lv = kid(np, 'w:ilvl');\n const fromStyle = styles.numPr(style);\n num = { num: id ? +(attr(s, id, 'w:val') ?? 0) : fromStyle?.num ?? 0, lvl: lv ? +(attr(s, lv, 'w:val') ?? 0) : fromStyle?.lvl ?? 0 };\n } else num = styles.numPr(style);\n const type = num && num.num ? this.pkg.nums.kind(num.num, num.lvl) : null;\n const isList = !!type && st.task === null && level === null;\n const ind = pPr && kid(pPr, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n const indent = isList ? 0 : Math.max(0, Math.round((left !== null && left !== undefined ? +left : styles.left(style)) / 720));\n const base = { align: align(jc ? attr(s, jc, 'w:val') : styles.jc(style)), indent, ref };\n const node: JSONContent = level ? { type: 'heading', attrs: { level, ...base } } : { type: 'paragraph', attrs: base };\n const content = inline(final);\n if (content.length) node.content = content;\n const b = this.block('p', el, node, ref);\n b.pieces = final;\n b.level = level;\n b.task = level === null ? st.task : null;\n b.quote = !isList && b.task === null && level === null && !!style && /quote|block text|цитата/i.test(styles.name(style));\n if (isList) {\n const counts = this.counters.get(num!.num) ?? [];\n counts[num!.lvl] = counts[num!.lvl] === undefined ? this.pkg.nums.start(num!.num, num!.lvl) : counts[num!.lvl] + 1;\n counts.length = num!.lvl + 1;\n this.counters.set(num!.num, counts);\n b.list = { num: num!.num, lvl: num!.lvl, type: type!, start: counts[num!.lvl] };\n }\n return b;\n }\n\n private src(embed: string): string | null {\n if (!this.media.has(embed)) {\n const rel = this.pkg.rels.get(embed);\n const ext = rel && !rel.external ? rel.target.split('.').pop()!.toLowerCase() : '';\n const e = rel && this.pkg.files.get(rel.target);\n this.media.set(embed, e && mimes[ext] ? `data:${mimes[ext]};base64,${base64(this.pkg.part(rel!.target))}` : null);\n }\n return this.media.get(embed)!;\n }\n\n private walk(kids: El[], ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n for (const k of kids) {\n const name = k.name;\n if (name === 'w:pPr') continue;\n if (name === 'w:r') this.run(k, ctx, parent, out, st);\n else if (name === 'w:hyperlink' && k.end !== k.open) {\n const id = attr(s, k, 'r:id');\n const anchor = attr(s, k, 'w:anchor');\n const rel = id ? this.pkg.rels.get(id) : undefined;\n const href = (rel ? rel.target : '') + (anchor ? '#' + anchor : '') || null;\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: '</w:hyperlink>', link: href, ins: false }], k, out, st);\n } else if ((name === 'w:ins' || name === 'w:moveTo' || name === 'w:del' || name === 'w:moveFrom') && k.end !== k.open) {\n const rev = JSON.stringify([name === 'w:ins' || name === 'w:moveTo' ? 'ins' : 'del', attr(s, k, 'w:id') ?? '', attr(s, k, 'w:author') ?? '', attr(s, k, 'w:date') ?? '']);\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: `</${name}>`, link: null, ins: true, rev }], k, out, st);\n } else if ((name === 'w:smartTag' || name === 'w:customXml' || name === 'w:dir' || name === 'w:bdo') && k.end !== k.open) {\n const pr = k.kids[0] && /Pr$/.test(k.kids[0].name) ? k.kids[0] : null;\n this.walk(pr ? k.kids.slice(1) : k.kids, [...ctx, { open: s.slice(k.start, pr ? pr.end : k.open), close: `</${name}>`, link: null, ins: false }], k, out, st);\n } else if (name === 'w:sdt') {\n const pr = kid(k, 'w:sdtPr');\n const box = pr && find(pr, 'w14:checkbox');\n if (box && st.task === null && !out.some(p => p.text !== null)) {\n const c = find(box, 'w14:checked');\n st.task = !!c && on(s, c, 'w14:val');\n st.box = true;\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null, box: true });\n } else {\n const content = kid(k, 'w:sdtContent');\n const inside: Piece[] = [];\n if (content) this.walk(content.kids, ctx, content, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, null);\n }\n } else if (name === 'w:fldSimple') {\n const inside: Piece[] = [];\n this.walk(k.kids, ctx, k, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, hyperlink(attr(s, k, 'w:instr') ?? ''));\n } else if (name === 'm:oMath') {\n const text = s.slice(k.start, k.end).match(/<m:t(?:\\s[^>]*)?>[^<]*<\\/m:t>/g)?.map(t => inner(t, parse(t).kids[0])).join('') ?? '';\n this.span(s.slice(k.start, k.end), text ? [{ text, raw: null, run: null, ctx, span: null }] : [], out, ctx, null);\n } else if (name === 'm:oMathPara') st.lock = 'Equation';\n else out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n }\n }\n\n private span(xml: string, inside: Piece[], out: Piece[], ctx: Wrap[], link: string | null) {\n const shown = inside.filter(p => p.text !== null);\n if (!shown.length) {\n out.push({ text: null, raw: xml, run: null, ctx, span: null });\n return;\n }\n const span: Span = { xml, link };\n for (const p of shown) out.push({ ...p, span });\n }\n\n private run(k: El, ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n const rPrEl = kid(k, 'w:rPr');\n const f = this.fmt(rPrEl);\n if (f.hidden || k.end === k.open) {\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n return;\n }\n const run: Run = { open: opened(s, k), rPr: rPrEl ? s.slice(rPrEl.start, rPrEl.end) : '', fmt: f, el: k, parent };\n const push = (text: string | null, raw: string | null, extra?: Partial<Piece>) => {\n if (text !== null && st.box) {\n st.box = false;\n if (text.startsWith(' ') && raw === null) {\n out.push({ text: null, raw: '<w:t xml:space=\"preserve\"> </w:t>', run, ctx, span: null, box: true });\n text = text.slice(1);\n if (!text) return;\n }\n }\n out.push({ text, raw, run, ctx, span: null, ...extra });\n };\n for (const c of k.kids) {\n const raw = s.slice(c.start, c.end);\n switch (c.name) {\n case 'w:rPr': break;\n case 'w:t': case 'w:delText': {\n const text = inner(s, c).replace(/[\\r\\n]/g, ' ');\n if (text) push(text, null);\n break;\n }\n case 'w:tab': case 'w:ptab': push('\\t', raw); break;\n case 'w:cr': push('\\n', raw); break;\n case 'w:noBreakHyphen': push('\\u2011', raw); break;\n case 'w:softHyphen': push('\\u00AD', raw); break;\n case 'w:br': {\n const type = attr(s, c, 'w:type');\n if (type === 'page') push(null, raw, { brk: 'page' });\n else if (type === 'column') push(null, raw);\n else push('\\n', raw);\n break;\n }\n case 'w:fldChar': push(null, raw, { fld: attr(s, c, 'w:fldCharType') ?? '' }); break;\n case 'w:instrText': push(null, raw, { instr: inner(s, c) }); break;\n case 'w:drawing': {\n const pic = picture(raw);\n if (pic) push(null, raw, { pic });\n else st.lock = shape(raw);\n break;\n }\n case 'w:pict': {\n const pic = /textbox/.test(raw) ? null : vml(raw);\n if (/o:hr=\"t\"/.test(raw)) push(null, raw, { brk: 'hr' });\n else if (pic) push(null, raw, { pic });\n else st.lock = /textbox/.test(raw) ? 'Text box' : 'Shape';\n break;\n }\n case 'mc:AlternateContent': st.lock = shape(raw); break;\n case 'w:object': st.lock = 'Object'; break;\n default: push(null, raw);\n }\n }\n }\n\n private fields(pieces: Piece[], st: { open: boolean }): Piece[] | null {\n if (!pieces.some(p => p.fld)) return pieces;\n const out: Piece[] = [];\n let depth = 0;\n let begin = -1;\n for (let i = 0; i < pieces.length; i++) {\n const p = pieces[i];\n if (p.fld === 'begin') {\n if (depth++ === 0) begin = i;\n } else if (p.fld === 'end' && depth > 0 && --depth === 0) {\n const a = pieces[begin].run!;\n const z = p.run!;\n if (a.parent !== z.parent) return null;\n let first = begin;\n while (first > 0 && pieces[first - 1].run === a) first--;\n let last = i;\n while (last + 1 < pieces.length && pieces[last + 1].run === z) last++;\n out.length -= begin - first;\n const shown: Piece[] = [];\n const code: boolean[] = [];\n let hidden = 0;\n let instr = '';\n for (let j = first; j <= last; j++) {\n const q = pieces[j];\n if (q.fld === 'begin') {\n code.push(true);\n hidden++;\n } else if (q.fld === 'separate' && code[code.length - 1]) {\n code[code.length - 1] = false;\n hidden--;\n } else if (q.fld === 'end') {\n if (code.pop()) hidden--;\n } else if (q.instr && code.length === 1) instr += q.instr;\n else if (q.text !== null && hidden === 0) shown.push(q);\n }\n this.span(this.s.slice(a.el!.start, z.el!.end), shown, out, pieces[first].ctx, hyperlink(instr));\n i = last;\n } else if (depth === 0) out.push(p);\n }\n if (depth > 0) st.open = true;\n return out;\n }\n\n table(el: El): Block {\n const s = this.s;\n if (el.kids.some(k => k.name === 'w:sdt' || k.name === 'w:customXml' || (k.name === 'w:tr' && k.kids.some(c => c.name === 'w:sdt' || c.name === 'w:customXml')))) return this.lock(el, 'Table');\n const ref = this.ref();\n const pr = kid(el, 'w:tblPr');\n const jc = pr && kid(pr, 'w:jc');\n const node: JSONContent = { type: 'table', attrs: { align: align(jc ? attr(s, jc, 'w:val') : null), indent: 0, ref }, content: [] };\n const b = this.block('tbl', el, node, ref);\n const grid = kid(el, 'w:tblGrid');\n b.cols = grid ? grid.kids.filter(k => k.name === 'w:gridCol').length : 0;\n const open: (JSONContent | null)[] = [];\n let prev = grid ? grid.end : pr ? pr.end : el.open;\n for (const tr of el.kids) {\n if (tr.name !== 'w:tr') continue;\n const rref = this.ref();\n const row: Row = { ref: rref, el: tr, lead: s.slice(prev, tr.start), head: '', cells: [], node: { type: 'tableRow', attrs: { align: null, indent: 0, ref: rref }, content: [] } };\n this.refs.set(rref, row);\n prev = tr.end;\n const trPr = kid(tr, 'w:trPr');\n const header = !!trPr && on(s, kid(trPr, 'w:tblHeader'));\n const before = trPr && kid(trPr, 'w:gridBefore');\n let col = before ? +(attr(s, before, 'w:val') ?? 0) : 0;\n let last = tr.open;\n for (const c of tr.kids) {\n if (c.name === 'w:tc') break;\n if (c.name === 'w:trPr' || c.name === 'w:tblPrEx') last = c.end;\n }\n row.head = s.slice(tr.open, last);\n for (const tc of tr.kids) {\n if (tc.name !== 'w:tc') continue;\n const tcPr = kid(tc, 'w:tcPr');\n const gs = tcPr && kid(tcPr, 'w:gridSpan');\n const vmEl = tcPr && kid(tcPr, 'w:vMerge');\n const vmVal = vmEl ? attr(s, vmEl, 'w:val') : null;\n const span = gs ? Math.max(1, +(attr(s, gs, 'w:val') ?? 1)) : 1;\n let vm: Cell['vm'] = vmEl ? (vmVal === 'restart' ? 'restart' : 'continue') : null;\n if (vm === 'continue' && !open[col]) vm = null;\n const cref = this.ref();\n const inside = this.blocks(tc);\n const cell: Cell = { ref: cref, el: tc, lead: s.slice(last, tc.start), col, span, vm, blocks: inside.list, tail: s.slice(inside.tail, tc.close), node: null };\n last = tc.end;\n this.refs.set(cref, cell);\n if (vm === 'continue') open[col]!.attrs!.rowspan++;\n else {\n const content = assemble(inside.list);\n cell.node = { type: header ? 'tableHeader' : 'tableCell', attrs: { colspan: span, rowspan: 1, align: null, indent: 0, ref: cref }, content: content.length ? content : [{ type: 'paragraph', attrs: blank() }] };\n row.node.content!.push(cell.node);\n for (let c = col; c < col + span; c++) open[c] = null;\n if (vm === 'restart') open[col] = cell.node;\n }\n col += span;\n row.cells.push(cell);\n }\n b.rows.push(row);\n node.content!.push(row.node);\n }\n return b;\n }\n}\n\nfunction net(xml: string): number {\n let n = 0;\n if (xml.indexOf('w:fldCharType') === -1) return 0;\n for (const m of xml.matchAll(/w:fldCharType=\"(begin|end)\"/g)) n += m[1] === 'begin' ? 1 : -1;\n return n;\n}\n\nfunction hyperlink(instr: string): string | null {\n const m = /^\\s*HYPERLINK\\s+(?:\"([^\"]*)\")?(?:.*?\\\\l\\s+\"([^\"]*)\")?/.exec(instr);\n if (!m || (!m[1] && !m[2])) return null;\n return (m[1] ?? '') + (m[2] ? '#' + m[2] : '');\n}\n\nfunction contents(xml: string, styles: Styles): { entries: [number, string][]; title: string | null } {\n const entries: [number, string][] = [];\n let title: string | null = null;\n let begun = false;\n for (const p of xml.match(/<w:p\\b(?:[^>]*\\/>|[\\s\\S]*?<\\/w:p>)/g) ?? []) {\n const id = /<w:pStyle w:val=\"([^\"]*)\"/.exec(p)?.[1] ?? '';\n const level = Number(/^toc ?(\\d)$/i.exec(styles.name(id).trim())?.[1] ?? /^TOC(\\d)$/i.exec(id)?.[1] ?? 0);\n begun ||= level > 0 || /w:fldCharType=\"begin\"/.test(p);\n const text = (p.replace(/<w:instrText\\b[\\s\\S]*?<\\/w:instrText>/g, '').match(/<w:t(?:\\s[^>]*)?>[^<]*<\\/w:t>|<w:tab\\/>/g) ?? [])\n .map(m => m === '<w:tab/>' ? '\\t' : unescape(m.replace(/<[^>]*>/g, ''))).join('');\n const shown = (text.includes('\\t') ? text.slice(0, text.lastIndexOf('\\t')) : text).trim();\n if (!shown) continue;\n if (begun) entries.push([level || 1, shown]);\n else title ??= shown;\n }\n return { entries, title };\n}\n\nfunction sdtLabel(s: string, el: El): string {\n if (el.name === 'w:altChunk') return 'Imported content';\n const xml = s.slice(el.start, Math.min(el.end, el.start + 4000));\n if (/w:docPartGallery w:val=\"Table of Contents\"/.test(xml) || /TOC \\\\/.test(s.slice(el.start, el.end))) return 'Table of contents';\n const alias = /<w:alias w:val=\"([^\"]*)\"/.exec(xml);\n return alias ? alias[1] : 'Content control';\n}\n\nfunction picture(raw: string): Pic | null {\n if (!/drawingml\\/2006\\/picture\"/.test(raw) || /wps:|wpg:|wpc:|c:chart|dgm:|txbxContent/.test(raw)) return null;\n const embed = /<a:blip\\b[^>]*\\br:embed=\"([^\"]*)\"/.exec(raw);\n const ext = /<wp:extent\\b[^>]*\\bcx=\"(\\d+)\"[^>]*\\bcy=\"(\\d+)\"/.exec(raw);\n return embed && ext ? { embed: embed[1], cx: +ext[1], cy: +ext[2] } : null;\n}\n\nfunction vml(raw: string): Pic | null {\n const embed = /<v:imagedata\\b[^>]*\\br:id=\"([^\"]*)\"/.exec(raw);\n const style = /<v:shape\\b[^>]*\\bstyle=\"([^\"]*)\"/.exec(raw)?.[1] ?? '';\n const emu = (key: string) => {\n const m = new RegExp(`(?:^|;)\\\\s*${key}:\\\\s*([\\\\d.]+)(pt|px|in|cm|mm)?`).exec(style);\n return m ? Math.round(+m[1] * (({ px: 9525, in: 914400, cm: 360000, mm: 36000 } as Record<string, number>)[m[2]] ?? 12700)) : 0;\n };\n return embed ? { embed: embed[1], cx: emu('width'), cy: emu('height') } : null;\n}\n\nfunction shape(raw: string): string {\n if (/txbxContent|v:textbox/.test(raw)) return 'Text box';\n if (/c:chart/.test(raw)) return 'Chart';\n if (/dgm:/.test(raw)) return 'Diagram';\n if (/m:oMath/.test(raw)) return 'Equation';\n return /drawingml\\/2006\\/picture\"/.test(raw) ? 'Picture' : 'Shape';\n}\n\nexport function fmtAt(p: Piece): Fmt {\n const f = p.run ? p.run.fmt : plain;\n let link: string | null = null;\n let rev: string | null = null;\n for (const w of p.ctx) {\n if (w.link) link = w.link;\n if (w.rev) rev = w.rev;\n }\n link ??= p.span?.link ?? null;\n return link === f.link && rev === f.rev ? f : { ...f, link, rev };\n}\n\nexport function inline(pieces: Piece[]): JSONContent[] {\n const out: JSONContent[] = [];\n let key = '';\n for (const p of pieces) {\n if (p.img) {\n out.push({ type: 'image', attrs: { ...p.img } });\n key = '';\n continue;\n }\n if (p.text === null) continue;\n if (p.text === '\\n') {\n out.push({ type: 'hardBreak' });\n key = '';\n continue;\n }\n const f = fmtAt(p);\n const k = keyOf(f);\n const last = out[out.length - 1];\n if (last && last.type === 'text' && k === key) last.text += p.text;\n else {\n const node: JSONContent = { type: 'text', text: p.text };\n const marks = marksOf(f);\n if (marks) node.marks = marks;\n out.push(node);\n key = k;\n }\n }\n return out;\n}\n\nexport function assemble(list: Block[]): JSONContent[] {\n const out: JSONContent[] = [];\n for (let i = 0; i < list.length; ) {\n const b = list[i];\n let j = i + 1;\n if (b.list) {\n while (j < list.length && list[j].list && !(list[j].list!.num !== b.list.num && list[j].list!.lvl <= b.list.lvl)) j++;\n out.push(nest(list.slice(i, j)));\n } else if (b.task !== null) {\n while (j < list.length && list[j].task !== null) j++;\n out.push({ type: 'taskList', attrs: blank(), content: list.slice(i, j).map(t => ({ type: 'taskItem', attrs: { checked: t.task, ...blank() }, content: [t.node] })) });\n } else if (b.quote) {\n while (j < list.length && list[j].quote) j++;\n out.push({ type: 'blockquote', attrs: blank(), content: list.slice(i, j).map(q => q.node) });\n } else out.push(b.node);\n i = j;\n }\n return out;\n}\n\nfunction nest(list: Block[]): JSONContent {\n const make = (b: Block): JSONContent => ({ type: b.list!.type, attrs: b.list!.type === 'orderedList' ? { start: b.list!.start, ...blank() } : blank(), content: [] });\n const root = make(list[0]);\n const stack = [{ list: root, lvl: list[0].list!.lvl }];\n for (const b of list) {\n let top = stack[stack.length - 1];\n while (b.list!.lvl < top.lvl && stack.length > 1) {\n stack.pop();\n top = stack[stack.length - 1];\n }\n if (b.list!.lvl > top.lvl && top.list.content!.length) {\n const sub = make(b);\n top.list.content![top.list.content!.length - 1].content!.push(sub);\n stack.push({ list: sub, lvl: b.list!.lvl });\n top = stack[stack.length - 1];\n }\n b.ctx = { type: top.list.type!, depth: stack.length - 1 };\n top.list.content!.push({ type: 'listItem', attrs: blank(), content: [b.node] });\n }\n return root;\n}\n","export function diff(a: string[], b: string[]): Int32Array {\n const map = new Int32Array(b.length).fill(-1);\n let p = 0;\n while (p < a.length && p < b.length && a[p] === b[p]) map[p] = p++;\n let q = 0;\n while (q < a.length - p && q < b.length - p && a[a.length - 1 - q] === b[b.length - 1 - q]) {\n map[b.length - 1 - q] = a.length - 1 - q;\n q++;\n }\n const n = a.length - p - q;\n const m = b.length - p - q;\n if (!n || !m) return map;\n const max = Math.min(n + m, 1200);\n const off = max + 1;\n const v = new Int32Array(2 * max + 3);\n const trace: Int32Array[] = [];\n for (let d = 0; d <= max; d++) {\n trace.push(v.slice(off - d - 1, off + d + 2));\n for (let k = -d; k <= d; k += 2) {\n let x = k === -d || (k !== d && v[off + k - 1] < v[off + k + 1]) ? v[off + k + 1] : v[off + k - 1] + 1;\n let y = x - k;\n while (x < n && y < m && a[p + x] === b[p + y]) {\n x++;\n y++;\n }\n v[off + k] = x;\n if (x >= n && y >= m) {\n for (let e = d; e > 0; e--) {\n const t = trace[e];\n const at = (j: number) => t[j + e + 1];\n const down = k === -e || (k !== e && at(k - 1) < at(k + 1));\n const pk = down ? k + 1 : k - 1;\n const px = at(pk);\n const py = px - pk;\n while (x > px && y > py) map[p + --y] = p + --x;\n x = px;\n y = py;\n k = pk;\n }\n while (x > 0 && y > 0) map[p + --y] = p + --x;\n return map;\n }\n }\n }\n return map;\n}\n","import { diff } from './diff';\nimport { color, fmtOf, highlights, keyOf, plain, Pkg, type Fmt } from './pkg';\nimport { align, assemble, fmtAt, Reader, type Block, type Cell, type JSONContent, type Row, type Run, type Span, type Wrap } from './read';\nimport { attr, attrs, escape, kid, opened, parse, rebuild } from './xml';\nimport { entry, zip, type Entry } from './zip';\n\nconst P = ['w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore', 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers', 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku', 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE', 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid', 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents', 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment', 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle', 'w:rPr', 'w:sectPr', 'w:pPrChange'];\nconst R = ['w:rStyle', 'w:rFonts', 'w:b', 'w:bCs', 'w:i', 'w:iCs', 'w:caps', 'w:smallCaps', 'w:strike', 'w:dstrike', 'w:outline', 'w:shadow', 'w:emboss', 'w:imprint', 'w:noProof', 'w:snapToGrid', 'w:vanish', 'w:webHidden', 'w:color', 'w:spacing', 'w:w', 'w:kern', 'w:position', 'w:sz', 'w:szCs', 'w:highlight', 'w:u', 'w:effect', 'w:bdr', 'w:shd', 'w:fitText', 'w:vertAlign', 'w:rtl', 'w:cs', 'w:em', 'w:lang', 'w:eastAsianLayout', 'w:specVanish', 'w:oMath'];\nconst TC = ['w:cnfStyle', 'w:tcW', 'w:gridSpan', 'w:hMerge', 'w:vMerge', 'w:tcBorders', 'w:shd', 'w:noWrap', 'w:tcMar', 'w:textDirection', 'w:tcFitText', 'w:vAlign', 'w:hideMark', 'w:headers', 'w:cellIns', 'w:cellDel', 'w:cellMerge', 'w:tcPrChange'];\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst special: Record<string, string> = { '\\t': '<w:tab/>', '\\n': '<w:br/>', '\\u2011': '<w:noBreakHyphen/>', '\\u00AD': '<w:softHyphen/>' };\n\ntype Out = { kind: 'p' | 'pb' | 'hr' | 'tbl' | 'code' | 'toc'; node: JSONContent; list: { type: string; depth: number; group: number; start: number } | null; task: boolean | null; quote: boolean; cont: { depth: number; group: number } | null };\ntype Unit = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; idx: number; fmt: Fmt; base: Fmt; box?: boolean; img?: Record<string, unknown> };\ntype Glyph = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; u: Unit | null; fmt: Fmt; xml?: string };\nexport type Img = { bytes: Uint8Array; mime: string };\n\nconst keys: Record<string, [string, unknown][]> = {\n paragraph: [['align', null], ['indent', 0]],\n heading: [['level', 1], ['align', null], ['indent', 0]],\n table: [['align', null]],\n tableCell: [['colspan', 1], ['rowspan', 1]],\n tableHeader: [['colspan', 1], ['rowspan', 1]],\n orderedList: [['start', 1]],\n taskItem: [['checked', false]],\n codeBlock: [['language', null]],\n toc: [['entries', '[]'], ['title', null]],\n};\n\nfunction value(key: string, v: unknown): unknown {\n if (v === undefined || v === '' || v === null) return null;\n if (key === 'align') return v === 'left' ? null : v;\n if (key === 'width' || key === 'height') return Math.round(Number(v)) || null;\n if (key === 'indent' || key === 'level' || key === 'colspan' || key === 'rowspan' || key === 'start') return Number(v) || 0;\n if (key === 'checked') return !!v;\n return v;\n}\n\nfunction sig(n: JSONContent): string {\n if (n.type === 'text' || n.type === 'hardBreak') return inlineSig([n]);\n const a = n.attrs ?? {};\n let out = `${n.type}(${(keys[n.type ?? ''] ?? []).map(([k, d]) => { const v = value(k, a[k]); return v === value(k, d) ? '' : `${k}=${JSON.stringify(v)}`; }).join(',')}${a.ref ? '#' + a.ref : ''})`;\n const kids = n.content ?? [];\n if (kids.length && (kids[0].type === 'text' || kids[0].type === 'hardBreak' || kids.some(k => k.type === 'text'))) return out + inlineSig(kids);\n out += '[' + kids.map(sig).join(',') + ']';\n return out;\n}\n\nfunction inlineSig(kids: JSONContent[]): string {\n let out = '';\n let key: string | null = null;\n for (const k of kids) {\n if (k.type === 'text') {\n if (!k.text) continue;\n const next = keyOf(fmtOf(k.marks as never));\n out += (next === key ? '' : `\\u0001${next}\\u0002`) + k.text;\n key = next;\n } else {\n out += `\\u0003${k.type}${k.type === 'image' ? picture(k.attrs ?? {}) : ''}\\u0004`;\n key = null;\n }\n }\n return out;\n}\n\nfunction picture(a: Record<string, unknown>): string {\n return JSON.stringify([a.src ?? null, a.alt || null, a.title || null, Math.round(Number(a.width)) || null, Math.round(Number(a.height)) || null]);\n}\n\nlet groups = 0;\n\nfunction flatten(content: JSONContent[], out: Out[] = [], quote = false): Out[] {\n for (const node of content) {\n const t = node.type;\n const add = (kind: Out['kind'], extra: Partial<Out> = {}) => out.push({ kind, node, list: null, task: null, quote, cont: null, ...extra });\n if (t === 'paragraph' || t === 'heading') add('p');\n else if (t === 'bulletList' || t === 'orderedList') listed(node, 0, ++groups, out, quote);\n else if (t === 'taskList') {\n for (const li of node.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: null, task: !!li.attrs?.checked, quote, cont: null });\n else flatten([c], out, quote);\n });\n }\n } else if (t === 'blockquote') flatten(node.content ?? [], out, true);\n else if (t === 'table') add('tbl');\n else if (t === 'image') out.push({ kind: 'p', node: { type: 'paragraph', attrs: { align: null, indent: 0, ref: null }, content: [node] }, list: null, task: null, quote, cont: null });\n else if (t === 'pageBreak') add('pb');\n else if (t === 'toc') add('toc');\n else if (t === 'horizontalRule') add('hr');\n else if (t === 'codeBlock') add('code');\n else if (node.content) flatten(node.content, out, quote);\n }\n return out;\n}\n\nfunction listed(list: JSONContent, depth: number, group: number, out: Out[], quote: boolean) {\n for (const li of list.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: { type: list.type!, depth, group, start: Number(list.attrs?.start ?? 1) || 1 }, task: null, quote, cont: null });\n else if (c.type === 'bulletList' || c.type === 'orderedList') listed(c, depth + 1, group, out, quote);\n else if (c.type === 'paragraph' || c.type === 'heading') out.push({ kind: 'p', node: c, list: null, task: null, quote, cont: { depth, group } });\n else flatten([c], out, quote);\n });\n }\n}\n\ntype Slot = { col: number; span: number; cell: JSONContent | null; from: JSONContent | null };\n\nfunction grid(rows: JSONContent[]): Slot[][] {\n const taken: number[] = [];\n const from: JSONContent[] = [];\n const span = (c: JSONContent) => Math.max(1, Number(c.attrs?.colspan ?? 1) || 1);\n return rows.map(row => {\n const cells = row.content ?? [];\n const slots: Slot[] = [];\n let col = 0;\n let i = 0;\n while (i < cells.length || taken.some((t, k) => k >= col && t > 0)) {\n if ((taken[col] ?? 0) > 0) {\n const f = from[col];\n const n = span(f);\n for (let k = col; k < col + n; k++) taken[k]--;\n slots.push({ col, span: n, cell: null, from: f });\n col += n;\n continue;\n }\n if (i >= cells.length) {\n col++;\n continue;\n }\n const c = cells[i++];\n const n = span(c);\n const rs = Math.max(1, Number(c.attrs?.rowspan ?? 1) || 1);\n slots.push({ col, span: n, cell: c, from: null });\n if (rs > 1) for (let k = col; k < col + n; k++) {\n taken[k] = rs - 1;\n from[k] = c;\n }\n col += n;\n }\n return slots;\n });\n}\n\nfunction dims(bytes: Uint8Array): [number, number] | null {\n const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (bytes[0] === 0x89 && bytes[1] === 0x50) return [v.getUint32(16), v.getUint32(20)];\n if (bytes[0] === 0x47 && bytes[1] === 0x49) return [v.getUint16(6, true), v.getUint16(8, true)];\n if (bytes[0] === 0xff && bytes[1] === 0xd8) {\n for (let i = 2; i + 9 < bytes.length; ) {\n if (bytes[i] !== 0xff) return null;\n const m = bytes[i + 1];\n if (m >= 0xc0 && m <= 0xcf && m !== 0xc4 && m !== 0xc8 && m !== 0xcc) return [v.getUint16(i + 7), v.getUint16(i + 5)];\n i += 2 + v.getUint16(i + 2);\n }\n }\n return null;\n}\n\nfunction meta(tag: string, img: Record<string, unknown>): string {\n const extra = `${img.alt ? ` descr=\"${escape(String(img.alt))}\"` : ''}${img.title ? ` title=\"${escape(String(img.title))}\"` : ''}`;\n return tag.replace(/\\s(descr|title)=\"[^\"]*\"/g, '').replace(/\\s*\\/?>$/, end => extra + end);\n}\n\nfunction checked(xml: string, on: boolean): string {\n const yes = /w14:checkedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2612';\n const no = /w14:uncheckedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2610';\n const [from, to] = on ? [no, yes] : [yes, no];\n let out = /<w14:checked\\b/.test(xml) ? xml.replace(/(<w14:checked\\b[^>]*w14:val=\")[^\"]*\"/, `$1${on ? 1 : 0}\"`) : xml.replace(/(<w14:checkbox\\b[^>]*>)/, `$1<w14:checked w14:val=\"${on ? 1 : 0}\"/>`);\n const at = out.indexOf('<w:sdtContent');\n if (at === -1) return out;\n const tail = out.slice(at).replace(new RegExp(`w:char=\"${from}\"`, 'i'), `w:char=\"${to}\"`).replace(`>${String.fromCharCode(parseInt(from, 16))}<`, `>${String.fromCharCode(parseInt(to, 16))}<`);\n out = out.slice(0, at) + tail;\n return out;\n}\n\nexport class Writer {\n s: string;\n r: Reader;\n claimed = new Map<JSONContent, Block | Row | Cell>();\n used = new Set<Block | Row | Cell>();\n carry = new Map<Block, string>();\n left = new Map<Cell, string>();\n rels: string[] = [];\n private relIds = new Set<string>();\n private links = new Map<string, string>();\n private media: { name: string; bytes: Uint8Array }[] = [];\n private types = new Set<string>();\n private numbering: { abs: string[]; nums: string[] } = { abs: [], nums: [] };\n private kinds = new Map<number, string>();\n private nextNum: number;\n private nextAbs: number;\n private styleXml: string[] = [];\n private groupNum = new Map<number, { num: number; base: number }>();\n private extra = new Map<string, number>();\n private docPr: number;\n private body!: ReturnType<Reader['body']>;\n private last: Out['kind'] | null = null;\n private wraps = new Map<string, Wrap>();\n private srcs: Map<string, string> | null = null;\n private tocs = false;\n private revs = new Map<string, Wrap>();\n private nextRev: number;\n\n constructor(readonly pkg: Pkg, private images: Map<string, Img>) {\n this.r = new Reader(pkg);\n this.s = pkg.doc;\n for (const id of pkg.rels.keys()) this.relIds.add(id);\n this.nextNum = pkg.nums.maxNum + 1;\n this.nextAbs = pkg.nums.maxAbs + 1;\n let max = 0;\n for (const m of this.s.matchAll(/<wp:docPr\\b[^>]*\\bid=\"(\\d+)\"/g)) max = Math.max(max, +m[1]);\n this.docPr = max + 1;\n this.nextRev = Math.max(0, ...[...this.s.matchAll(/\\bw:id=\"(\\d+)\"/g)].map(m => +m[1])) + 1;\n }\n\n run(doc: JSONContent): Uint8Array | null {\n const s = this.s;\n this.body = this.r.body();\n const { list, tail, body } = this.body;\n assemble(list);\n this.claim(doc.content ?? []);\n let rest = '';\n this.carryOver(list, x => (rest = x));\n let xml = this.container(flatten(doc.content ?? []), list, null);\n if (this.last === 'tbl' && list[list.length - 1]?.kind !== 'tbl') xml += '<w:p/>';\n const text = s.slice(0, body.open) + xml + rest + s.slice(tail);\n const changed = new Map<string, string | Uint8Array>();\n if (text !== s) changed.set(this.pkg.main, text);\n if (this.rels.length) {\n const path = this.pkg.relsPath(this.pkg.main);\n const old = this.pkg.text(path) ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>`;\n changed.set(path, old.replace(/<\\/Relationships>\\s*$/, this.rels.join('') + '</Relationships>'));\n }\n if (this.numbering.abs.length || this.numbering.nums.length) {\n const rel = this.pkg.byType('/numbering');\n let n = rel ? this.pkg.text(rel.target) : null;\n const path = rel ? rel.target : 'word/numbering.xml';\n if (n === null) {\n n = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"></w:numbering>`;\n this.types.add(`<Override PartName=\"/${path}\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>`);\n }\n const at = n.search(/<w:num\\b[\\s>]/);\n const abs = this.numbering.abs.join('');\n n = at === -1 ? n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, abs + '$1') : n.slice(0, at) + abs + n.slice(at);\n n = n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, this.numbering.nums.join('') + '$1');\n changed.set(path, n);\n if (!rel) {\n const id = this.relId();\n const path2 = this.pkg.relsPath(this.pkg.main);\n const old = (changed.get(path2) as string | undefined) ?? this.pkg.text(path2)!;\n changed.set(path2, old.replace(/<\\/Relationships>\\s*$/, `<Relationship Id=\"${id}\" Type=\"${REL}/numbering\" Target=\"numbering.xml\"/></Relationships>`));\n }\n }\n const settings = this.tocs && this.pkg.byType('/settings');\n const listed = settings && this.pkg.text(settings.target);\n if (settings && listed && !/<w:updateFields\\b/.test(listed)) {\n const at = listed.search(/<(?:w:hdrShapeDefaults|w:footnotePr|w:endnotePr|w:compat|w:docVars|w:rsids|m:mathPr|w:attachedSchema|w:themeFontLang|w:clrSchemeMapping|w:doNotIncludeSubdocsInStats|w:doNotAutoCompressPictures|w:forceUpgrade|w:captions|w:readModeInkLockDown|w:smartTagType|sl:schemaLibrary|w:shapeDefaults|w:doNotEmbedSmartTags|w:decimalSymbol|w:listSeparator)\\b|<\\/w:settings>/);\n changed.set(settings.target, listed.slice(0, at) + '<w:updateFields w:val=\"true\"/>' + listed.slice(at));\n }\n if (this.styleXml.length) {\n const rel = this.pkg.byType('/styles');\n if (rel) changed.set(rel.target, this.pkg.text(rel.target)!.replace(/<\\/w:styles>\\s*$/, this.styleXml.join('') + '</w:styles>'));\n }\n for (const m of this.media) {\n changed.set(m.name, m.bytes);\n const ext = m.name.split('.').pop()!.toLowerCase();\n const ct = this.pkg.text('[Content_Types].xml') ?? '';\n if (!new RegExp(`<Default\\\\b[^>]*Extension=\"${ext}\"`, 'i').test(ct)) this.types.add(`<Default Extension=\"${ext}\" ContentType=\"${({ jpg: 'image/jpeg', svg: 'image/svg+xml' } as Record<string, string>)[ext] ?? 'image/' + ext}\"/>`);\n }\n if (this.types.size) changed.set('[Content_Types].xml', (this.pkg.text('[Content_Types].xml') ?? '').replace(/<\\/Types>\\s*$/, [...this.types].join('') + '</Types>'));\n if (!changed.size) return null;\n const enc = new TextEncoder();\n const main = this.pkg.files.get(this.pkg.main)!;\n const out: Entry[] = this.pkg.entries.map(e => {\n const v = changed.get(e.name);\n if (v === undefined) return e;\n changed.delete(e.name);\n return entry(e.name, typeof v === 'string' ? enc.encode(v) : v, e);\n });\n for (const [name, v] of changed) out.push(entry(name, typeof v === 'string' ? enc.encode(v) : v, main));\n return zip(out);\n }\n\n private claim(nodes: JSONContent[]) {\n for (const n of nodes) {\n const ref = n.attrs?.ref;\n const o = typeof ref === 'string' ? this.r.refs.get(ref) : undefined;\n if (o && !this.used.has(o) && this.fits(n, o)) {\n this.used.add(o);\n this.claimed.set(n, o);\n }\n if (n.content) this.claim(n.content);\n }\n }\n\n private fits(n: JSONContent, o: Block | Row | Cell): boolean {\n if ('cells' in o) return n.type === 'tableRow';\n if ('col' in o) return (n.type === 'tableCell' || n.type === 'tableHeader') && o.node !== null;\n if (o.kind === 'p') return n.type === 'paragraph' || n.type === 'heading';\n if (o.kind === 'lock') return n.type === 'paragraph';\n if (o.kind === 'toc') return n.type === 'toc';\n return ({ pb: 'pageBreak', hr: 'horizontalRule', tbl: 'table' } as Record<string, string>)[o.kind] === n.type;\n }\n\n private carryOver(list: Block[], end: (x: string) => void) {\n let pending = '';\n for (const b of list) {\n if (this.used.has(b)) {\n if (pending) this.carry.set(b, pending);\n pending = '';\n } else {\n if (b.lead.trim()) pending += b.lead;\n const pPr = b.el.name === 'w:p' && kid(b.el, 'w:pPr');\n if (pPr && kid(pPr, 'w:sectPr')) pending += `<w:p>${this.s.slice(pPr.start, pPr.end)}</w:p>`;\n }\n for (const row of b.rows) for (const c of row.cells) this.carryOver(c.blocks, x => this.left.set(c, x));\n }\n if (pending) end(pending);\n }\n\n private container(outs: Out[], list: Block[], fallback: Block | null): string {\n const pairs = outs.map(o => ({ o, b: (this.claimed.get(o.node) ?? null) as Block | null }));\n const lists = new Map<number, { o: Out; b: Block | null }[]>();\n for (const p of pairs) if (p.o.list) lists.get(p.o.list.group)?.push(p) ?? lists.set(p.o.list.group, [p]);\n for (const [group, mine] of lists) this.decide(group, mine);\n let xml = '';\n this.last = null;\n pairs.forEach(({ o, b }, i) => {\n const near = (test: (b: Block) => boolean): Block | null => {\n for (let d = 1; d < pairs.length; d++) {\n const x = pairs[i - d]?.b;\n if (x && test(x)) return x;\n const y = pairs[i + d]?.b;\n if (y && test(y)) return y;\n }\n for (const x of list) if (test(x)) return x;\n return fallback && test(fallback) ? fallback : null;\n };\n const prefix = b ? (this.carry.get(b) ?? '') + b.lead : '';\n xml += prefix + this.emit(o, b, near, fallback);\n this.last = o.kind;\n });\n return xml;\n }\n\n private emit(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const s = this.s;\n if (b && b.kind === 'lock') return s.slice(b.start, b.end);\n if (o.kind === 'p') return this.para(o, b, near, fallback);\n if (o.kind === 'pb') return b ? s.slice(b.start, b.end) : '<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>';\n if (o.kind === 'hr') return b ? s.slice(b.start, b.end) : '<w:p><w:pPr><w:pBdr><w:bottom w:val=\"single\" w:sz=\"6\" w:space=\"1\" w:color=\"auto\"/></w:pBdr></w:pPr></w:p>';\n if (o.kind === 'tbl') return this.table(o, b, near);\n if (o.kind === 'toc') return b && sig(o.node) === sig(b.node) ? s.slice(b.start, b.end) : this.toc(o.node);\n return this.code(o);\n }\n\n private toc(node: JSONContent): string {\n this.tocs = true;\n const styles = this.pkg.styles;\n const sect = this.body.sect;\n const twips = (el: ReturnType<typeof kid>, name: string, fallback: number) => Number((el && attr(this.s, el, name)) ?? fallback);\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const width = twips(size, 'w:w', 12240) - twips(mar, 'w:left', 1440) - twips(mar, 'w:right', 1440);\n const list = JSON.parse(String(node.attrs?.entries ?? '[]')) as [number, string][];\n const begin = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> TOC \\\\o \"1-3\" \\\\h \\\\z \\\\u </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>';\n const end = '<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const style = (test: RegExp, fallback: string) => escape(styles.find(name => test.test(name.trim())) ?? fallback);\n const title = node.attrs?.title ? `<w:p><w:pPr><w:pStyle w:val=\"${style(/^toc heading$/i, 'TOCHeading')}\"/></w:pPr><w:r><w:t xml:space=\"preserve\">${escape(String(node.attrs.title))}</w:t></w:r></w:p>` : '';\n const rows = list.length\n ? list.map(([level, text], i) => `<w:p><w:pPr><w:pStyle w:val=\"${style(new RegExp(`^toc ${level}$`, 'i'), `TOC${level}`)}\"/><w:tabs><w:tab w:val=\"right\" w:leader=\"dot\" w:pos=\"${width}\"/></w:tabs></w:pPr>${i ? '' : begin}<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>${i === list.length - 1 ? end : ''}</w:p>`).join('')\n : `<w:p>${begin}<w:r><w:t>No table of contents entries found.</w:t></w:r>${end}</w:p>`;\n return `<w:sdt><w:sdtPr><w:docPartObj><w:docPartGallery w:val=\"Table of Contents\"/><w:docPartUnique/></w:docPartObj></w:sdtPr><w:sdtContent>${title}${rows}</w:sdtContent></w:sdt>`;\n }\n\n private decide(group: number, mine: { o: Out; b: Block | null }[]) {\n const top = mine.find(p => p.o.list!.depth === 0) ?? mine[0];\n const type = top.o.list!.type;\n const hit = mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type && p.o.list!.depth === 0 && this.kindOf(p.b.list.num, p.b.list.lvl) === type)\n ?? mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type);\n if (hit) this.groupNum.set(group, { num: hit.b!.list!.num, base: Math.max(0, hit.b!.list!.lvl - hit.o.list!.depth) });\n else this.groupNum.set(group, { num: this.newNum(type, top.o.list!.start), base: 0 });\n }\n\n private kindOf(num: number, lvl: number): string | null {\n return this.kinds.get(num) ?? this.pkg.nums.kind(num, lvl);\n }\n\n private newNum(type: string, start: number): number {\n let abs = -1;\n for (const b of this.r.refs.values()) if ('kind' in b && b.list && b.list.lvl === 0 && b.list.type === type) {\n abs = this.pkg.nums.nums.get(b.list.num)?.abs ?? -1;\n break;\n }\n if (abs === -1) for (const [id, lvls] of this.pkg.nums.abs) if ((lvls.get(0)?.fmt === 'bullet') === (type === 'bulletList') && lvls.get(0)?.fmt !== 'none') {\n abs = id;\n break;\n }\n if (abs === -1) {\n abs = this.nextAbs++;\n const fmts = type === 'bulletList' ? ['bullet'] : ['decimal', 'lowerLetter', 'lowerRoman'];\n const lvls = Array.from({ length: 9 }, (_, l) => {\n const fmt = fmts[l % fmts.length];\n const text = fmt === 'bullet' ? ['•', '◦', '▪'][l % 3] : `%${l + 1}.`;\n return `<w:lvl w:ilvl=\"${l}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"${fmt}\"/><w:lvlText w:val=\"${text}\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"${720 * (l + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }).join('');\n this.numbering.abs.push(`<w:abstractNum w:abstractNumId=\"${abs}\"><w:multiLevelType w:val=\"hybridMultilevel\"/>${lvls}</w:abstractNum>`);\n }\n const num = this.nextNum++;\n this.kinds.set(num, type);\n this.numbering.nums.push(`<w:num w:numId=\"${num}\"><w:abstractNumId w:val=\"${abs}\"/>${type === 'orderedList' ? `<w:lvlOverride w:ilvl=\"0\"><w:startOverride w:val=\"${start}\"/></w:lvlOverride>` : ''}</w:num>`);\n return num;\n }\n\n private listPr(o: Out, b: Block | null): { num: number; lvl: number } | null {\n if (!o.list) return null;\n const g = this.groupNum.get(o.list.group)!;\n if (b?.list && b.ctx && b.ctx.type === o.list.type && b.ctx.depth === o.list.depth && (o.list.depth > 0 || b.list.num === g.num)) return b.list;\n const lvl = Math.min(8, g.base + o.list.depth);\n if (this.kindOf(g.num, lvl) === o.list.type) return { num: g.num, lvl };\n const key = `${o.list.group}:${o.list.type}`;\n if (!this.extra.has(key)) this.extra.set(key, this.newNum(o.list.type, o.list.start));\n return { num: this.extra.get(key)!, lvl };\n }\n\n private kindTest(o: Out): (b: Block) => boolean {\n const level = o.node.type === 'heading' ? Number(o.node.attrs?.level ?? 1) : null;\n if (o.task !== null) return b => b.kind === 'p' && b.task !== null;\n if (level) return b => b.kind === 'p' && b.level === level;\n if (o.list) return b => b.kind === 'p' && !!b.list && b.ctx?.type === o.list!.type;\n if (o.quote) return b => b.kind === 'p' && b.quote;\n return b => b.kind === 'p' && !b.list && b.task === null && !b.level && !b.quote;\n }\n\n private para(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const pr = this.listPr(o, b);\n const same = b && o.cont === null && o.quote === b.quote && (o.task ?? null) === b.task && (pr ? !!b.list && pr.num === b.list.num && pr.lvl === b.list.lvl : !b.list);\n if (b && same && sig(o.node) === sig(b.node)) return this.s.slice(b.start, b.end);\n const src = b ?? near(this.kindTest(o)) ?? (fallback?.kind === 'p' ? fallback : null);\n return (b ? opened(this.s, b.el) : '<w:p>') + this.pPr(o, b, src, pr) + this.inline(o, b, src, near) + '</w:p>';\n }\n\n private pPr(o: Out, b: Block | null, src: Block | null, pr: { num: number; lvl: number } | null): string {\n const s = this.s;\n const styles = this.pkg.styles;\n const el = src && kid(src.el, 'w:pPr');\n let xml = el ? s.slice(el.start, el.end) : '';\n const set: Record<string, string | null> = {};\n if (!b && xml) {\n const rPr = kid(el!, 'w:rPr');\n xml = rebuild(xml, 'w:pPr', P, { 'w:sectPr': null, 'w:pPrChange': null, 'w:rPr': rPr ? rebuild(s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null }) || null : null });\n }\n const root = xml ? parse(xml).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:pStyle');\n const was = { style: styleEl ? attr(xml, styleEl, 'w:val') : null, level: src?.level ?? null, quote: src?.quote ?? false, list: src?.list ?? null };\n let style = was.style;\n const level = o.node.type === 'heading' ? Math.min(6, Math.max(1, Number(o.node.attrs?.level ?? 1))) : null;\n if (level !== was.level) {\n set['w:outlineLvl'] = null;\n if (level) style = this.headingStyle(level);\n else if (styles.heading(style)) style = null;\n }\n if (!level && o.quote !== was.quote) style = o.quote ? this.quoteStyle() : null;\n if (pr) {\n if (!(was.list && was.list.num === pr.num && was.list.lvl === pr.lvl)) set['w:numPr'] = `<w:numPr><w:ilvl w:val=\"${pr.lvl}\"/><w:numId w:val=\"${pr.num}\"/></w:numPr>`;\n if (!was.list) {\n set['w:ind'] = null;\n if (!src) style = styles.find(name => /^list paragraph$/i.test(name));\n }\n } else if (was.list || get('w:numPr')) {\n set['w:numPr'] = null;\n if (styles.numPr(style)) style = null;\n }\n if (style !== was.style) set['w:pStyle'] = style ? `<w:pStyle w:val=\"${escape(style)}\"/>` : null;\n const jcEl = 'w:jc' in set ? undefined : get('w:jc');\n const direct = jcEl ? attr(xml, jcEl, 'w:val') : null;\n const want = value('align', o.node.attrs?.align) as string | null;\n if (align(direct ?? styles.jc(style)) !== want) {\n set['w:jc'] = align(styles.jc(style)) === want ? null : `<w:jc w:val=\"${({ center: 'center', right: 'right', justify: 'both' } as Record<string, string>)[want ?? ''] ?? 'left'}\"/>`;\n }\n if (!pr) {\n const indEl = 'w:ind' in set ? undefined : get('w:ind');\n const list = indEl ? attrs(xml.slice(indEl.start, indEl.open)).filter(([k]) => k !== 'w:left' && k !== 'w:start') : [];\n const left = indEl ? attr(xml, indEl, 'w:left') ?? attr(xml, indEl, 'w:start') : null;\n const target = o.cont !== null ? this.contLeft(o) : 720 * (Number(o.node.attrs?.indent ?? 0) || 0);\n const now = left !== null ? +left : styles.left(style);\n if (o.cont !== null ? now !== target : Math.max(0, Math.round(now / 720)) !== Math.round(target / 720)) {\n if (target !== styles.left(style)) list.unshift(['w:left', String(target)]);\n set['w:ind'] = list.length ? `<w:ind ${list.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n }\n return Object.keys(set).length ? rebuild(xml, 'w:pPr', P, set) : xml;\n }\n\n private contLeft(o: Out): number {\n const g = this.groupNum.get(o.cont!.group);\n const left = g ? this.pkg.nums.level(g.num, g.base + o.cont!.depth)?.left : null;\n return left ?? 720 * (o.cont!.depth + 1);\n }\n\n private headingStyle(level: number): string {\n const found = this.pkg.styles.headingId(level);\n if (found) return found;\n const id = this.pkg.styles.byId.has(`Heading${level}`) ? `Heading${level}W` : `Heading${level}`;\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n const size = [32, 28, 26, 24, 22, 22][level - 1];\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"heading ${level}\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"9\"/><w:qFormat/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"${level - 1}\"/></w:pPr><w:rPr><w:b/><w:bCs/><w:sz w:val=\"${size}\"/><w:szCs w:val=\"${size}\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private quoteStyle(): string {\n const found = this.pkg.styles.find(name => /^quote$/i.test(name)) ?? this.pkg.styles.find(name => /quote/i.test(name));\n if (found) return found;\n const id = this.pkg.styles.byId.has('Quote') ? 'QuoteW' : 'Quote';\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"Quote\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"29\"/><w:qFormat/><w:pPr><w:spacing w:before=\"200\" w:after=\"160\"/><w:ind w:left=\"864\" w:right=\"864\"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val=\"404040\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private markRun(b: Block): { run: Run; fmt: Fmt } {\n const pPr = kid(b.el, 'w:pPr');\n const rPr = pPr && kid(pPr, 'w:rPr');\n if (!rPr) return { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n const xml = rebuild(this.s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null });\n const fmt = this.r.fmt(rPr);\n return { run: { open: '<w:r>', rPr: xml, fmt, el: null, parent: null }, fmt };\n }\n\n private inline(o: Out, b: Block | null, src: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const units: Unit[] = [];\n const counts = new Map<Run, number>();\n for (const p of b ? b.pieces : []) {\n let n = p.run ? counts.get(p.run) ?? 0 : 0;\n const fmt = fmtAt(p);\n const base = p.span ? fmtAt({ ...p, span: null }) : fmt;\n if (p.img) units.push({ ch: '\\uFFFC', raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, img: p.img });\n else if (p.text === null) units.push({ ch: null, raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, box: p.box });\n else if (p.raw !== null) units.push({ ch: p.text, raw: p.raw, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n else for (const ch of p.text) units.push({ ch, raw: null, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n if (p.run) counts.set(p.run, n);\n }\n const A = units.filter(u => u.ch !== null);\n const B: { ch: string; fmt: Fmt; key: string; img?: Record<string, unknown> }[] = [];\n let lastFmt = plain;\n for (const n of o.node.content ?? []) {\n if (n.type === 'text') {\n const f = fmtOf(n.marks as never);\n const k = keyOf(f);\n lastFmt = f;\n for (const ch of n.text ?? '') B.push({ ch: ch === '\\r' ? '\\n' : ch, fmt: f, key: k });\n } else if (n.type === 'hardBreak') B.push({ ch: '\\n', fmt: lastFmt, key: keyOf(lastFmt) });\n else if (n.type === 'image') B.push({ ch: '\\uFFFC', fmt: lastFmt, key: keyOf(lastFmt), img: n.attrs ?? {} });\n }\n const boxes = units.filter(u => u.box);\n let box: string | null = null;\n if (o.task !== null && !boxes.some(u => !u.run)) {\n const tpl = near(x => x.task !== null) ?? [...this.r.refs.values()].find((x): x is Block => 'kind' in x && x.task !== null) ?? null;\n const sdt = tpl?.pieces.find(p => p.box && !p.run)?.raw;\n box = checked(sdt ?? '<w:sdt><w:sdtPr><w14:checkbox xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\"><w14:checked w14:val=\"0\"/><w14:checkedState w14:val=\"2612\" w14:font=\"MS Gothic\"/><w14:uncheckedState w14:val=\"2610\" w14:font=\"MS Gothic\"/></w14:checkbox></w:sdtPr><w:sdtContent><w:r><w:rPr><w:rFonts w:ascii=\"MS Gothic\" w:eastAsia=\"MS Gothic\" w:hAnsi=\"MS Gothic\" w:hint=\"eastAsia\"/></w:rPr><w:t>☐</w:t></w:r></w:sdtContent></w:sdt>', o.task);\n B.unshift({ ch: ' ', fmt: B[0]?.fmt ?? plain, key: B[0]?.key ?? keyOf(plain) });\n }\n const map = diff(A.map(u => u.ch!), B.map(x => x.ch));\n const back = new Int32Array(A.length).fill(-1);\n map.forEach((i, j) => { if (i >= 0) back[i] = j; });\n const intact = new Set<Span>();\n const spans = new Map<Span, number[]>();\n A.forEach((u, i) => { if (u.span) spans.get(u.span)?.push(i) ?? spans.set(u.span, [i]); });\n for (const [sp, idx] of spans) {\n const j0 = back[idx[0]];\n if (idx.every((i, k) => back[i] === j0 + k && j0 >= 0 && B[back[i]].key === keyOf(A[i].fmt))) intact.add(sp);\n }\n const slot = new Int32Array(A.length + 1);\n for (let k = 1; k <= A.length; k++) slot[k] = back[k - 1] >= 0 ? back[k - 1] + 1 : slot[k - 1];\n const at: Unit[][] = Array.from({ length: B.length + 1 }, () => []);\n let chars = 0;\n for (const u of units) {\n if (u.ch !== null) chars++;\n else if (!u.box || o.task !== null) at[slot[chars]].push(u);\n }\n const paraBase = b ? this.markRun(b) : this.firstRun(src);\n const out: Glyph[] = [];\n if (box) out.push({ ch: null, raw: box, run: null, ctx: [], u: null, fmt: plain });\n this.wraps.clear();\n for (const u of units) for (const w of u.ctx) if (w.link && !this.wraps.has(w.link)) this.wraps.set(w.link, w);\n const lastChar = () => { for (let k = out.length - 1; k >= 0; k--) if (out[k].ch !== null) return out[k]; return null; };\n const next = new Int32Array(B.length + 1).fill(-1);\n for (let k = B.length - 1; k >= 0; k--) next[k] = map[k] >= 0 ? map[k] : next[k + 1];\n for (let j = 0; j <= B.length; j++) {\n for (const u of at[j]) out.push({ ch: null, raw: u.box && !u.run && b && b.task !== o.task ? checked(u.raw!, !!o.task) : u.raw, run: u.run, ctx: u.ctx, u, fmt: u.fmt });\n if (j === B.length) break;\n const i = map[j];\n const want = B[j];\n if (want.img) {\n const u = i >= 0 ? A[i] : null;\n if (u?.img) {\n const kept = picture(u.img) === picture(want.img);\n out.push({ ch: u.ch, raw: kept ? u.raw : this.patch(u.raw!, u.img, want.img), run: u.run, ctx: u.ctx, u: kept ? u : null, fmt: u.fmt });\n } else out.push({ ch: want.ch, raw: this.drawing(want.img), run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, ctx: [], u: null, fmt: plain });\n continue;\n }\n if (i >= 0) {\n const u = A[i];\n if (u.span && intact.has(u.span)) {\n if (i === 0 || A[i - 1].span !== u.span) out.push({ ch: null, raw: null, run: null, ctx: u.ctx, u: null, fmt: u.fmt, xml: u.span.xml });\n continue;\n }\n const from = u.span ? u.base : u.fmt;\n const keep = u.ch === '\\n' || keyOf(from) === want.key;\n const fmt = keep ? from : want.fmt;\n const run = keep && u.run ? u.run : this.derive(u.run ?? paraBase.run, from, want.fmt);\n out.push({ ch: u.ch, raw: u.raw, run, ctx: this.revised(this.linked(u.ctx, fmt.link, lastChar()), fmt.rev), u: keep && u.run ? u : null, fmt });\n } else {\n const left = lastChar();\n const right = next[j + 1] >= 0 ? A[next[j + 1]] : null;\n const base = left ? { run: left.run!, fmt: left.fmt } : right ? { run: right.run ?? paraBase.run, fmt: right.span ? right.base : right.fmt } : paraBase;\n const run = keyOf(base.fmt) === want.key ? base.run : this.derive(base.run, base.fmt, want.fmt);\n const shared: Wrap[] = [];\n if (left && right) for (let k = 0; k < left.ctx.length && left.ctx[k] === right.ctx[k]; k++) if (!left.ctx[k].link) shared.push(left.ctx[k]);\n out.push({ ch: want.ch, raw: null, run, ctx: this.revised(this.linked(shared, want.fmt.link, left), want.fmt.rev), u: null, fmt: want.fmt });\n }\n }\n let xml = '';\n let stack: Wrap[] = [];\n let cur: { run: Run; glyphs: Glyph[] } | null = null;\n const flush = () => {\n if (cur) xml += this.runXml(cur.run, cur.glyphs, counts);\n cur = null;\n };\n const sync = (ctx: Wrap[]) => {\n let k = 0;\n while (k < stack.length && k < ctx.length && stack[k] === ctx[k]) k++;\n if (k === stack.length && k === ctx.length) return;\n flush();\n for (let x = stack.length - 1; x >= k; x--) xml += stack[x].close;\n for (let x = k; x < ctx.length; x++) xml += ctx[x].open;\n stack = ctx;\n };\n for (const g of out) {\n sync(g.ctx);\n if (g.xml || !g.run) {\n flush();\n xml += g.xml ?? g.raw ?? '';\n continue;\n }\n if (!cur || cur.run !== g.run) {\n flush();\n cur = { run: g.run, glyphs: [] };\n }\n cur.glyphs.push(g);\n }\n flush();\n sync([]);\n return xml;\n }\n\n private firstRun(src: Block | null): { run: Run; fmt: Fmt } {\n const p = src?.pieces.find(x => x.text !== null && x.run && !x.span);\n if (p) return { run: { ...p.run!, open: '<w:r>', el: null }, fmt: p.run!.fmt };\n return src ? this.markRun(src) : { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n }\n\n private linked(ctx: Wrap[], link: string | null, left: Glyph | null): Wrap[] {\n let cur: string | null = null;\n for (const w of ctx) if (w.link) cur = w.link;\n if (cur === link) return ctx;\n const out = ctx.filter(w => !w.link);\n if (!link) return out;\n let wrap = left?.ctx.find(w => w.link === link) ?? this.wraps.get(link);\n if (!wrap) {\n const tag = link.startsWith('#') ? `<w:hyperlink w:anchor=\"${escape(link.slice(1))}\" w:history=\"1\">` : `<w:hyperlink r:id=\"${this.link(link)}\" w:history=\"1\">`;\n wrap = { open: tag, close: '</w:hyperlink>', link, ins: false };\n this.wraps.set(link, wrap);\n }\n const at = out.findIndex(w => w.ins);\n return at === -1 ? [...out, wrap] : [...out.slice(0, at), wrap, ...out.slice(at)];\n }\n\n private revised(ctx: Wrap[], rev: string | null): Wrap[] {\n const out = ctx.filter(w => !w.rev || w.rev === rev);\n if (!rev || out.some(w => w.rev === rev)) return out;\n let wrap = this.revs.get(rev);\n if (!wrap) {\n const [kind, , author, date] = JSON.parse(rev) as string[];\n const tag = kind === 'ins' ? 'w:ins' : 'w:del';\n wrap = { open: `<${tag} w:id=\"${this.nextRev++}\" w:author=\"${escape(author || 'Documents')}\" w:date=\"${escape(date || new Date().toISOString().replace(/\\.\\d+Z$/, 'Z'))}\">`, close: `</${tag}>`, link: null, ins: true, rev };\n this.revs.set(rev, wrap);\n }\n return [...out, wrap];\n }\n\n private link(href: string): string {\n for (const r of this.pkg.rels.values()) if (r.external && r.target === href && r.type.endsWith('/hyperlink')) return r.id;\n if (!this.links.has(href)) {\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/hyperlink\" Target=\"${escape(href)}\" TargetMode=\"External\"/>`);\n this.links.set(href, id);\n }\n return this.links.get(href)!;\n }\n\n private relId(): string {\n let n = this.relIds.size + 1;\n while (this.relIds.has(`rId${n}`)) n++;\n this.relIds.add(`rId${n}`);\n return `rId${n}`;\n }\n\n private derive(run: Run, from: Fmt, to: Fmt): Run {\n const cache = ((run as Run & { derived?: Map<string, Run> }).derived ??= new Map());\n const key = keyOf(from) + '>' + keyOf(to);\n if (!cache.has(key)) cache.set(key, { open: run.open, rPr: this.delta(run.rPr, from, to), fmt: to, el: null, parent: null });\n return cache.get(key)!;\n }\n\n private delta(rPr: string, from: Fmt, to: Fmt): string {\n const root = rPr ? parse(rPr).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:rStyle');\n const style = styleEl ? attr(rPr, styleEl, 'w:val') : null;\n const sf = style ? this.pkg.styles.char(style) : {};\n const set: Record<string, string | null> = {};\n const toggle = (on: boolean, was: boolean, name: string, cs: string, given: boolean | undefined) => {\n if (on === was) return;\n set[name] = on ? `<${name}/>` : given ? `<${name} w:val=\"0\"/>` : null;\n if (!on) set[cs] = null;\n };\n toggle(to.b, from.b, 'w:b', 'w:bCs', sf.b);\n toggle(to.i, from.i, 'w:i', 'w:iCs', sf.i);\n if (to.u !== from.u) set['w:u'] = to.u ? '<w:u w:val=\"single\"/>' : sf.u ? '<w:u w:val=\"none\"/>' : null;\n if (to.s !== from.s) {\n set['w:strike'] = to.s ? '<w:strike/>' : sf.s ? '<w:strike w:val=\"0\"/>' : null;\n if (!to.s) set['w:dstrike'] = null;\n }\n if (to.color !== from.color) set['w:color'] = to.color ? `<w:color w:val=\"${to.color.slice(1).toUpperCase()}\"/>` : sf.color ? '<w:color w:val=\"auto\"/>' : null;\n if (to.size !== from.size) {\n const hp = to.size ? Math.round(parseFloat(to.size) * 2) : 0;\n set['w:sz'] = hp ? `<w:sz w:val=\"${hp}\"/>` : null;\n set['w:szCs'] = hp ? `<w:szCs w:val=\"${hp}\"/>` : null;\n }\n if (to.hl !== from.hl) {\n const name = to.hl ? Object.keys(highlights).find(k => '#' + highlights[k] === to.hl) : undefined;\n set['w:highlight'] = name ? `<w:highlight w:val=\"${name}\"/>` : null;\n const shd = get('w:shd');\n if (to.hl && !name) set['w:shd'] = `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${to.hl.slice(1).toUpperCase()}\"/>`;\n else if (shd && color(attr(rPr, shd, 'w:fill'))) set['w:shd'] = null;\n }\n if (to.font !== from.font || to.code !== from.code) {\n const want = to.code ? 'Courier New' : to.font;\n const fonts = get('w:rFonts');\n const kept = fonts ? attrs(rPr.slice(fonts.start, fonts.open)).filter(([k]) => !/^w:(ascii|hAnsi|cs|asciiTheme|hAnsiTheme|cstheme)$/.test(k)) : [];\n if (want) kept.unshift(['w:ascii', want], ['w:hAnsi', want], ['w:cs', want]);\n set['w:rFonts'] = kept.length ? `<w:rFonts ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (to.link && !from.link && !style) {\n const id = this.pkg.styles.find((name, id) => /^hyperlink$/i.test(name) || id === 'Hyperlink', 'character');\n if (id) set['w:rStyle'] = `<w:rStyle w:val=\"${escape(id)}\"/>`;\n } else if (!to.link && from.link && this.pkg.styles.isLink(style)) set['w:rStyle'] = null;\n return Object.keys(set).length ? rebuild(rPr, 'w:rPr', R, set) : rPr;\n }\n\n private runXml(run: Run, glyphs: Glyph[], counts: Map<Run, number>): string {\n if (run.el && glyphs.length === counts.get(run) && glyphs.every((g, n) => g.u && g.u.run === run && g.u.idx === n)) return this.s.slice(run.el.start, run.el.end);\n let body = '';\n let text = '';\n const tag = glyphs[0]?.ctx.some(w => w.rev?.startsWith('[\"del\"')) ? 'w:delText' : 'w:t';\n const flush = () => {\n if (text) body += `<${tag}${/^\\s|\\s$/.test(text) ? ' xml:space=\"preserve\"' : ''}>${escape(text)}</${tag}>`;\n text = '';\n };\n for (const g of glyphs) {\n if (g.ch === null || g.raw !== null || special[g.ch]) {\n flush();\n body += g.raw ?? special[g.ch!];\n } else text += g.ch;\n }\n flush();\n return run.open + run.rPr + body + '</w:r>';\n }\n\n private embed(src: string): { id: string; size: [number, number] | null } {\n if (!this.srcs) {\n this.srcs = new Map();\n for (const b of this.r.refs.values()) if ('pieces' in b) for (const p of b.pieces) if (p.img && p.pic) this.srcs.set(String(p.img.src), p.pic.embed);\n }\n const id = this.srcs.get(src);\n if (id) return { id, size: null };\n const added = this.addMedia(src);\n if (!added) throw new Error('Image could not be read');\n this.srcs.set(src, added.id);\n return added;\n }\n\n private drawing(img: Record<string, unknown>): string {\n const media = this.embed(String(img.src ?? ''));\n const max = Math.round(this.textWidth() / 15);\n let w = Math.round(Number(img.width)) || 0;\n let h = Math.round(Number(img.height)) || 0;\n const [nw, nh] = media.size ?? [w || 300, h || 200];\n if (!w && !h) [w, h] = nw > max ? [max, Math.round((nh * max) / nw)] : [nw, nh];\n else if (!h) h = Math.round((w * nh) / nw);\n else if (!w) w = Math.round((h * nw) / nh);\n const id = this.docPr++;\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n return `<w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"><wp:extent ${ext}/><wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>${meta(`<wp:docPr id=\"${id}\" name=\"Picture ${id}\"/>`, img)}<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"Picture ${id}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${media.id}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext ${ext}/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing>`;\n }\n\n private patch(raw: string, old: Record<string, unknown>, img: Record<string, unknown>): string {\n let xml = raw;\n const w = Math.round(Number(img.width)) || Number(old.width);\n const h = Math.round(Number(img.height)) || Number(old.height);\n if (w !== old.width || h !== old.height) {\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n xml = xml.replace(/<wp:extent\\b[^>]*\\/>/, `<wp:extent ${ext}/>`).replace(/(<a:xfrm\\b[^>]*>[\\s\\S]*?<a:ext)\\b[^>]*\\/>/, `$1 ${ext}/>`);\n }\n if ((img.alt || null) !== (old.alt || null) || (img.title || null) !== (old.title || null)) xml = xml.replace(/<wp:docPr\\b[^>]*>/, tag => meta(tag, img));\n if (img.src !== old.src) xml = xml.replace(/(<a:blip\\b[^>]*\\br:embed=\")[^\"]*\"/, `$1${this.embed(String(img.src ?? '')).id}\"`);\n return xml;\n }\n\n private textWidth(): number {\n const sect = this.body.sect;\n const s = this.s;\n const sz = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n return (sz ? +(attr(s, sz, 'w:w') ?? 12240) : 12240) - (mar ? +(attr(s, mar, 'w:left') ?? 1440) + +(attr(s, mar, 'w:right') ?? 1440) : 2880);\n }\n\n private addMedia(src: string): { id: string; name: string; size: [number, number] | null } | null {\n const m = /^data:([^;,]+)(;base64)?,(.*)$/s.exec(src);\n let img = this.images.get(src);\n if (m) {\n const raw = m[2] ? atob(m[3]) : decodeURIComponent(m[3]);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);\n img = { bytes, mime: m[1] };\n }\n if (!img) return null;\n const ext = ({ 'image/jpeg': 'jpeg', 'image/svg+xml': 'svg' } as Record<string, string>)[img.mime] ?? img.mime.split('/')[1] ?? 'png';\n let n = this.media.length + 1;\n while (this.pkg.files.has(`word/media/w100n-${n}.${ext}`)) n++;\n const name = `w100n-${n}.${ext}`;\n const dir = this.pkg.main.slice(0, this.pkg.main.lastIndexOf('/') + 1);\n this.media.push({ name: `${dir}media/${name}`, bytes: img.bytes });\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/image\" Target=\"media/${name}\"/>`);\n return { id, name, size: dims(img.bytes) };\n }\n\n private code(o: Out): string {\n const style = this.pkg.styles.find(name => /^(source code|html preformatted|code|plain text)$/i.test(name));\n const text = (o.node.content ?? []).map(n => n.text ?? '').join('');\n const pPr = style ? `<w:pPr><w:pStyle w:val=\"${escape(style)}\"/></w:pPr>` : '<w:pPr><w:spacing w:after=\"0\"/></w:pPr>';\n const rPr = style ? '' : '<w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\"/></w:rPr>';\n return text.split('\\n').map(line => `<w:p>${pPr}${line ? `<w:r>${rPr}<w:t xml:space=\"preserve\">${escape(line).replace(/\\t/g, '</w:t><w:tab/><w:t xml:space=\"preserve\">')}</w:t></w:r>` : ''}</w:p>`).join('');\n }\n\n private table(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const s = this.s;\n if (b && sig(o.node) === sig(b.node)) return s.slice(b.start, b.end);\n const rows = o.node.content ?? [];\n const layout = grid(rows);\n const cols = Math.max(1, ...layout.map(r => r.reduce((m, sl) => Math.max(m, sl.col + sl.span), 0)));\n let head: string;\n let tail = '';\n if (b) {\n const first = b.rows[0];\n const last = b.rows[b.rows.length - 1];\n head = opened(s, b.el) + s.slice(b.el.open, first ? first.el.start - first.lead.length : b.el.close);\n if (last) tail = s.slice(last.el.end, b.el.close);\n if (b.cols && cols !== b.cols) {\n head = head.replace(/(<w:tblGrid\\b[^>]*>)([\\s\\S]*?)(<\\/w:tblGrid>)/, (_, open: string, inside: string, close: string) => {\n const list: string[] = [...(inside.match(/<w:gridCol\\b[^>]*\\/>/g) ?? [])];\n while (list.length < cols) list.push(list[list.length - 1] ?? '<w:gridCol/>');\n return open + list.slice(0, cols).join('') + close;\n });\n }\n } else {\n const tpl = near(x => x.kind === 'tbl');\n const pr = tpl && kid(tpl.el, 'w:tblPr');\n const style = this.pkg.styles.find(name => /^(table grid|сітка таблиці|сетка таблицы)$/i.test(name), 'table');\n const line = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>`;\n const tblPr = pr ? s.slice(pr.start, pr.end) : `<w:tblPr>${style ? `<w:tblStyle w:val=\"${escape(style)}\"/>` : ''}<w:tblW w:w=\"0\" w:type=\"auto\"/>${style ? '' : `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`}<w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr>`;\n head = `<w:tbl>${tblPr}<w:tblGrid>${`<w:gridCol w:w=\"${Math.floor(this.textWidth() / cols)}\"/>`.repeat(cols)}</w:tblGrid>`;\n }\n const width = Math.floor(this.textWidth() / cols);\n let xml = head;\n let above: (Cell | null)[] = [];\n let aboveRow: Row | null = null;\n const cover = new Map<JSONContent, Cell | null>();\n const firstRow = rows.map(r => this.claimed.get(r) as Row | undefined).find(Boolean) ?? null;\n rows.forEach((node, r) => {\n const R = (this.claimed.get(node) as Row | undefined) ?? null;\n const slots = layout[r];\n const shape = (sl: Slot) => (sl.cell ? `${(this.claimed.get(sl.cell) as Cell | undefined)?.ref ?? '-'}@${sl.col}` : `c${sl.col}`);\n const now: (Cell | null)[] = [];\n if (R && sig(node) === sig(R.node) && R.cells.map(c => (c.vm === 'continue' ? `c${c.col}` : `${c.ref}@${c.col}`)).join() === slots.map(shape).join()) {\n xml += R.lead + s.slice(R.el.start, R.el.end);\n for (const c of R.cells) for (let k = c.col; k < c.col + c.span; k++) now[k] = c;\n for (const sl of slots) if (sl.cell && Number(sl.cell.attrs?.rowspan ?? 1) > 1) cover.set(sl.cell, (this.claimed.get(sl.cell) as Cell | undefined) ?? null);\n above = now;\n aboveRow = R;\n return;\n }\n const srcRow = R ?? aboveRow ?? firstRow;\n const header = (node.content ?? []).length > 0 && (node.content ?? []).every(c => c.type === 'tableHeader');\n let rowHead = R ? R.head : srcRow ? srcRow.head.replace(/<w:(ins|del)\\b[^>]*\\/>|<w:trPrChange\\b[\\s\\S]*?<\\/w:trPrChange>/g, '') : '';\n if (!R) {\n if (!header) rowHead = rowHead.replace(/<w:tblHeader\\b[^>]*\\/>/g, '').replace(/<w:trPr><\\/w:trPr>|<w:trPr\\/>/, '');\n else if (!/<w:tblHeader\\b/.test(rowHead)) rowHead = /<w:trPr>/.test(rowHead) ? rowHead.replace('<w:trPr>', '<w:trPr><w:tblHeader/>') : rowHead + '<w:trPr><w:tblHeader/></w:trPr>';\n }\n xml += (R ? R.lead + opened(s, R.el) : '<w:tr>') + rowHead;\n for (const sl of slots) {\n if (!sl.cell) {\n const cont = R?.cells.find(c => c.vm === 'continue' && c.col === sl.col);\n if (cont) xml += cont.lead + s.slice(cont.el.start, cont.el.end);\n else xml += `<w:tc>${this.tcPr(cover.get(sl.from!) ?? above[sl.col] ?? null, sl.span, 'continue', width)}<w:p/></w:tc>`;\n now[sl.col] = cover.get(sl.from!) ?? null;\n continue;\n }\n const C = (this.claimed.get(sl.cell) as Cell | undefined) ?? null;\n const vm = Number(sl.cell.attrs?.rowspan ?? 1) > 1 ? 'restart' : null;\n const srcCell = C ?? above[sl.col] ?? (srcRow?.cells.find(c => c.col === sl.col) ?? null);\n if (vm) cover.set(sl.cell, srcCell);\n for (let k = sl.col; k < sl.col + sl.span; k++) now[k] = srcCell;\n if (C && sig(sl.cell) === sig(C.node!) && C.span === sl.span && C.vm === vm) {\n xml += C.lead + s.slice(C.el.start, C.el.end);\n continue;\n }\n const fallback = srcCell?.blocks.find(x => x.kind === 'p') ?? null;\n let inside = this.container(flatten(sl.cell.content ?? []), C ? C.blocks : [], fallback) + (C ? this.left.get(C) ?? '' : '');\n if (!this.last || this.last === 'tbl') inside += '<w:p/>';\n xml += (C ? C.lead + opened(s, C.el) : '<w:tc>') + this.tcPr(srcCell, sl.span, vm, width, !C) + inside + (C ? C.tail : '') + '</w:tc>';\n }\n const lastCell = R?.cells[R.cells.length - 1];\n xml += (R && lastCell ? s.slice(lastCell.el.end, R.el.close) : '') + '</w:tr>';\n above = now;\n aboveRow = srcRow;\n });\n return xml + tail + '</w:tbl>';\n }\n\n private tcPr(src: Cell | null, span: number, vm: 'restart' | 'continue' | null, width: number, clone = true): string {\n const s = this.s;\n const el = src && kid(src.el, 'w:tcPr');\n const xml = el ? s.slice(el.start, el.end) : '';\n if (!clone && src && src.span === span && src.vm === vm) return xml;\n const set: Record<string, string | null> = { 'w:gridSpan': span > 1 ? `<w:gridSpan w:val=\"${span}\"/>` : null, 'w:vMerge': vm === 'restart' ? '<w:vMerge w:val=\"restart\"/>' : vm ? '<w:vMerge/>' : null, 'w:hMerge': null };\n if (clone) Object.assign(set, { 'w:cellIns': null, 'w:cellDel': null, 'w:cellMerge': null, 'w:tcPrChange': null });\n const tcW = el && kid(el, 'w:tcW');\n if (!tcW && !src) set['w:tcW'] = `<w:tcW w:w=\"${width * span}\" w:type=\"dxa\"/>`;\n else if (tcW && src && src.span !== span && attr(xml, tcW, 'w:type') === 'dxa') set['w:tcW'] = `<w:tcW w:w=\"${Math.round((+(attr(xml, tcW, 'w:w') ?? 0) * span) / src.span)}\" w:type=\"dxa\"/>`;\n return rebuild(xml, 'w:tcPr', TC, set);\n }\n}\n\nexport async function fetched(src: string): Promise<Img> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`Image could not be read: ${src}`);\n return { bytes: new Uint8Array(await res.arrayBuffer()), mime: res.headers.get('content-type')?.split(';')[0] || 'image/png' };\n}\n\nexport async function images(doc: JSONContent, load: (src: string) => Promise<Img>): Promise<Map<string, Img>> {\n const out = new Map<string, Img>();\n const walk = async (n: JSONContent) => {\n if (n.type === 'image' && typeof n.attrs?.src === 'string' && !out.has(n.attrs.src)) {\n const src: string = n.attrs.src;\n if (src && !src.startsWith('data:')) out.set(src, await load(src));\n }\n for (const k of n.content ?? []) await walk(k);\n };\n await walk(doc);\n return out;\n}\n","import { Pkg } from './pkg';\nimport { assemble, Reader, type JSONContent } from './read';\nimport { fetched, images, Writer, type Img } from './write';\nimport { attr, kid } from './xml';\n\nexport type { JSONContent } from './read';\nexport type { Img } from './write';\n\nexport type DocxModel = { doc: JSONContent; styles: { name: string; id: string; heading: number | null }[]; page: { width: number; height: number; margins: [number, number, number, number] } };\n\nexport async function readDocx(bytes: ArrayBuffer): Promise<DocxModel> {\n const pkg = new Pkg(new Uint8Array(bytes));\n const { list, sect } = new Reader(pkg).body();\n const content = assemble(list);\n const s = pkg.doc;\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const px = (el: typeof size, name: string, fallback: number) => Math.round((Math.abs(+((el && attr(s, el, name)) ?? fallback)) / 15) * 100) / 100;\n return {\n doc: { type: 'doc', content: content.length ? content : [{ type: 'paragraph', attrs: { align: null, indent: 0, ref: null } }] },\n styles: pkg.styles.list(),\n page: { width: px(size, 'w:w', 12240), height: px(size, 'w:h', 15840), margins: [px(mar, 'w:top', 1440), px(mar, 'w:right', 1440), px(mar, 'w:bottom', 1440), px(mar, 'w:left', 1440)] },\n };\n}\n\nexport async function writeDocx(original: ArrayBuffer, doc: JSONContent, load: (src: string) => Promise<Img> = fetched): Promise<ArrayBuffer> {\n const pkg = new Pkg(new Uint8Array(original));\n const out = new Writer(pkg, await images(doc, load)).run(doc);\n return out ? out.slice().buffer : original.slice(0);\n}\n","import type { DocumentKind, Language, SignatureMethod } from './types';\n\nconst en = {\n documents: 'Documents', loose: 'Without a folder', search: 'Search documents', all: 'All', empty: 'No documents here yet', nothing: 'Nothing matches the search',\n pick: 'Choose a document from the list', closeList: 'Hide the list', openList: 'Show the list',\n outline: 'Outline', versions: 'Versions', details: 'Details', noOutline: 'This document has no headings', current: 'Current',\n size: 'Size', updated: 'Updated', by: 'Updated by', kind: 'Format', rights: 'You can', view: 'View', comment: 'Comment', edit: 'Edit',\n failed: 'Could not load', retry: 'Try again', loading: 'Loading', unsupported: 'This file cannot be shown yet',\n restore: 'Restore this version', restoreFailed: 'Could not restore',\n allProjects: 'All projects', closePanel: 'Hide the panel', openPanel: 'Show the panel', zoomIn: 'Zoom in', zoomOut: 'Zoom out', fit: 'Actual size',\n pdfTools: 'PDF tools', pages: 'Pages', page: 'Page', fitWidth: 'Fit to width', fitPage: 'Fit to page', find: 'Find in the document', previous: 'Previous', next: 'Next',\n close: 'Close', searching: 'Searching', noHits: 'No results', selectText: 'Select text', highlight: 'Highlight', underline: 'Underline', strike: 'Strike out',\n note: 'Note', draw: 'Draw', eraser: 'Eraser', sign: 'Sign', colour: 'Colour', lineWidth: 'Line width', undo: 'Undo', redo: 'Redo', save: 'Save', saving: 'Saving',\n saved: 'Saved', saveFailed: 'Could not save', remove: 'Remove', notePlaceholder: 'Write a note', signature: 'Signature', placeHint: 'Click or tap where the signature goes',\n cancel: 'Cancel', signTitle: 'Add a signature', typed: 'Type', drawn: 'Draw', image: 'Image', yourName: 'Your name', drawHere: 'Sign with the mouse or a finger',\n clear: 'Clear', pickImage: 'Choose a PNG or JPEG image', useSign: 'Place the signature', marksNote: 'Marks', formNote: 'Form filled', signedNote: 'Signed',\n signatures: 'Signatures', noSignatures: 'Nobody has signed this file yet', version: 'Version', download: 'Download', openInDocuments: 'Open in Documents',\n textTools: 'Text tools', home: 'Home', insert: 'Insert', layout: 'Layout', review: 'Review', viewTab: 'View', paragraphStyle: 'Paragraph style', normal: 'Normal',\n heading: 'Heading', quote: 'Quote', code: 'Code', bold: 'Bold', italic: 'Italic', textColour: 'Text colour', automatic: 'Automatic', noColour: 'No colour',\n bullets: 'Bulleted list', numbers: 'Numbered list', tasks: 'Task list', alignLeft: 'Align left', alignCenter: 'Centre', alignRight: 'Align right', justify: 'Justify',\n indent: 'Increase indent', outdent: 'Decrease indent', clearFormat: 'Clear formatting', table: 'Table', rowAbove: 'Row above', rowBelow: 'Row below',\n columnLeft: 'Column on the left', columnRight: 'Column on the right', deleteRow: 'Delete row', deleteColumn: 'Delete column', deleteTable: 'Delete table',\n headerRow: 'Header row', mergeCells: 'Merge or split cells', imageLink: 'Image address', chooseFile: 'Choose a file', put: 'Insert', link: 'Link',\n linkAddress: 'Link address', apply: 'Apply', unlink: 'Remove link', pageBreak: 'Page break', rule: 'Horizontal line', pageSize: 'Page size', margins: 'Margins',\n marginsNormal: 'Normal', marginsNarrow: 'Narrow', marginsWide: 'Wide', addComment: 'Add comment', comments: 'Comments', noComments: 'No comments yet',\n commentHint: 'Select text and add a comment', writeComment: 'Write a comment', post: 'Post', reply: 'Reply', resolve: 'Resolve', reopen: 'Reopen',\n resolved: 'Resolved', showResolved: 'Show resolved', commentFailed: 'Could not send the comment', exportAs: 'Export', exportFailed: 'Could not export',\n editedNote: 'Text edited', documentText: 'Document text', locked: 'Kept as in the file', references: 'References', toc: 'Table of contents', tocInsert: 'Insert table of contents', tocGo: 'Go to the table',\n tocRemove: 'Remove the table', tocHint: 'It follows the headings as you write', tocEmpty: 'Add headings and they show here',\n suggest: 'Suggest changes', suggesting: 'Suggesting', suggestions: 'Suggestions', acceptAll: 'Accept all', rejectAll: 'Reject all', accept: 'Accept', reject: 'Reject',\n added: 'Added', removed: 'Deleted', someone: 'Someone', copyAs: 'Make an XLSX copy', copyFailed: 'Could not make the copy', editComment: 'Edit', delete: 'Delete',\n deleteAsk: 'Delete this comment?', deleteThread: 'Delete this comment and its replies?', changeFailed: 'Could not change the comment',\n unsavedTitle: 'Save your changes?', unsavedHint: 'This document has changes that are not saved yet.', discard: 'Discard', more: 'More tools',\n offline: 'Offline', offlineHint: 'Your changes stay here and sync when the connection is back', liveOff: 'Live editing is unavailable', people: 'People in this document', you: 'you',\n share: 'Share', sharing: 'Sharing', guestLinks: 'Guest links', viewLink: 'View link', commentLink: 'Comment link', madeBy: 'Made by {name}', endsOn: 'Ends {date}',\n untilOff: 'Until turned off', linkEnded: 'Ended', downloadOn: 'Download on', passwordOn: 'Password', copy: 'Copy', copied: 'Copied', changeLink: 'Change',\n turnOff: 'Turn off', newLink: 'New guest link', guestsCan: 'Guests can', canRead: 'Read', canComment: 'Read and comment', badgeRead: 'Read only',\n badgeComment: 'Read and comment', linkWorks: 'Link works', days7: '7 days', days30: '30 days', untilTurnOff: 'Until I turn it off', pickDay: 'Pick a day',\n passwordHint: 'Guests type it once on their device', passwordPlaceholder: 'Type the password', keepPassword: 'Leave empty to keep the password',\n downloadFile: 'Download the file', downloadHint: 'The original file and a PDF copy', askName: \"Ask the guest's name\", askNameHint: 'Shown to you in who opened it',\n lastSaved: 'Guests see the last saved version. A new version reaches the link when someone saves.', makeLink: 'Make the link', saveLink: 'Save the link',\n inTeam: 'Inside the team', peopleOf: 'People of {space}', teamHint: 'Everyone who sees Drive of this project reads it, people with edit rights change it.',\n noLinks: 'No guest links yet. A link opens this document without an account.', unnamed: 'Guests without a name', shareFailed: 'The link did not save. Try again.',\n sharedBy: 'Shared by {name}', openDoc: 'Open', passwordAsk: 'This document opens with a password. Type it to open the document on this device.',\n wrongPassword: 'The password does not fit. Try again.', endedTitle: 'This link has ended',\n endedText: 'The person who shared this document turned the link off or it reached its last day. Ask them for a new link.',\n missingTitle: 'This link opens nothing', missingText: 'Check the address or ask for a new link.',\n nameAsk: 'Type your name to read this document. The person who shared it sees who opened it.',\n nameHint: 'The person who shared this document sees your name and comments. The name stays on this device.', nameNeeded: 'Type your name to comment',\n guest: 'Guest', pdfCopy: 'PDF copy', tooMany: 'Too many tries. Try again in a few minutes.',\n openForms: { one: 'open', other: 'opens' } as Record<string, string>, commentForms: { one: 'comment', other: 'comments' } as Record<string, string>,\n methods: { typed: 'Typed', drawn: 'Drawn', image: 'Image' } satisfies Record<SignatureMethod, string>,\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Sheets', slides: 'Slides' } satisfies Record<DocumentKind, string>,\n};\n\nexport type Text = typeof en;\n\nconst pl: Text = {\n documents: 'Dokumenty', loose: 'Bez folderu', search: 'Szukaj dokumentów', all: 'Wszystkie', empty: 'Nie ma tu jeszcze dokumentów', nothing: 'Nic nie pasuje do wyszukiwania',\n pick: 'Wybierz dokument z listy', closeList: 'Ukryj listę', openList: 'Pokaż listę',\n outline: 'Spis treści', versions: 'Wersje', details: 'Szczegóły', noOutline: 'Ten dokument nie ma nagłówków', current: 'Bieżąca',\n size: 'Rozmiar', updated: 'Zmieniono', by: 'Zmienione przez', kind: 'Format', rights: 'Możesz', view: 'Przeglądać', comment: 'Komentować', edit: 'Edytować',\n failed: 'Nie udało się wczytać', retry: 'Spróbuj ponownie', loading: 'Wczytywanie', unsupported: 'Tego pliku nie da się jeszcze pokazać',\n restore: 'Przywróć tę wersję', restoreFailed: 'Nie udało się przywrócić',\n allProjects: 'Wszystkie projekty', closePanel: 'Ukryj panel', openPanel: 'Pokaż panel', zoomIn: 'Powiększ', zoomOut: 'Pomniejsz', fit: 'Rzeczywisty rozmiar',\n pdfTools: 'Narzędzia PDF', pages: 'Strony', page: 'Strona', fitWidth: 'Dopasuj do szerokości', fitPage: 'Cała strona', find: 'Szukaj w dokumencie', previous: 'Poprzedni', next: 'Następny',\n close: 'Zamknij', searching: 'Wyszukiwanie', noHits: 'Brak wyników', selectText: 'Zaznacz tekst', highlight: 'Wyróżnij', underline: 'Podkreśl', strike: 'Przekreśl',\n note: 'Notatka', draw: 'Rysuj', eraser: 'Gumka', sign: 'Podpisz', colour: 'Kolor', lineWidth: 'Grubość linii', undo: 'Cofnij', redo: 'Ponów', save: 'Zapisz', saving: 'Zapisywanie',\n saved: 'Zapisano', saveFailed: 'Nie udało się zapisać', remove: 'Usuń', notePlaceholder: 'Napisz notatkę', signature: 'Podpis', placeHint: 'Kliknij lub dotknij miejsca, gdzie ma być podpis',\n cancel: 'Anuluj', signTitle: 'Dodaj podpis', typed: 'Wpisz', drawn: 'Narysuj', image: 'Obraz', yourName: 'Imię i nazwisko', drawHere: 'Podpisz myszą lub palcem',\n clear: 'Wyczyść', pickImage: 'Wybierz obraz PNG lub JPEG', useSign: 'Wstaw podpis', marksNote: 'Oznaczenia', formNote: 'Wypełniony formularz', signedNote: 'Podpisano',\n signatures: 'Podpisy', noSignatures: 'Nikt jeszcze nie podpisał tego pliku', version: 'Wersja', download: 'Pobierz', openInDocuments: 'Otwórz w Dokumentach',\n textTools: 'Narzędzia tekstowe', home: 'Narzędzia główne', insert: 'Wstawianie', layout: 'Układ', review: 'Recenzja', viewTab: 'Widok', paragraphStyle: 'Styl akapitu', normal: 'Normalny',\n heading: 'Nagłówek', quote: 'Cytat', code: 'Kod', bold: 'Pogrubienie', italic: 'Kursywa', textColour: 'Kolor tekstu', automatic: 'Automatyczny', noColour: 'Bez koloru',\n bullets: 'Lista punktowana', numbers: 'Lista numerowana', tasks: 'Lista zadań', alignLeft: 'Wyrównaj do lewej', alignCenter: 'Wyśrodkuj', alignRight: 'Wyrównaj do prawej', justify: 'Wyjustuj',\n indent: 'Zwiększ wcięcie', outdent: 'Zmniejsz wcięcie', clearFormat: 'Wyczyść formatowanie', table: 'Tabela', rowAbove: 'Wiersz powyżej', rowBelow: 'Wiersz poniżej',\n columnLeft: 'Kolumna po lewej', columnRight: 'Kolumna po prawej', deleteRow: 'Usuń wiersz', deleteColumn: 'Usuń kolumnę', deleteTable: 'Usuń tabelę',\n headerRow: 'Wiersz nagłówka', mergeCells: 'Scal lub podziel komórki', imageLink: 'Adres obrazu', chooseFile: 'Wybierz plik', put: 'Wstaw', link: 'Link',\n linkAddress: 'Adres linku', apply: 'Zastosuj', unlink: 'Usuń link', pageBreak: 'Podział strony', rule: 'Linia pozioma', pageSize: 'Rozmiar strony', margins: 'Marginesy',\n marginsNormal: 'Normalne', marginsNarrow: 'Wąskie', marginsWide: 'Szerokie', addComment: 'Dodaj komentarz', comments: 'Komentarze', noComments: 'Nie ma jeszcze komentarzy',\n commentHint: 'Zaznacz tekst i dodaj komentarz', writeComment: 'Napisz komentarz', post: 'Dodaj', reply: 'Odpowiedz', resolve: 'Rozwiąż', reopen: 'Otwórz ponownie',\n resolved: 'Rozwiązany', showResolved: 'Pokaż rozwiązane', commentFailed: 'Nie udało się wysłać komentarza', exportAs: 'Eksport', exportFailed: 'Nie udało się wyeksportować',\n editedNote: 'Edycja tekstu', documentText: 'Tekst dokumentu', locked: 'Zachowane jak w pliku', references: 'Odwołania', toc: 'Spis treści', tocInsert: 'Wstaw spis treści', tocGo: 'Przejdź do spisu',\n tocRemove: 'Usuń spis', tocHint: 'Sam podąża za nagłówkami', tocEmpty: 'Dodaj nagłówki, a pojawią się tutaj',\n suggest: 'Sugeruj zmiany', suggesting: 'Sugerowanie', suggestions: 'Sugestie', acceptAll: 'Akceptuj wszystkie', rejectAll: 'Odrzuć wszystkie', accept: 'Akceptuj', reject: 'Odrzuć',\n added: 'Dodano', removed: 'Usunięto', someone: 'Ktoś', copyAs: 'Zrób kopię XLSX', copyFailed: 'Nie udało się zrobić kopii', editComment: 'Edytuj', delete: 'Usuń',\n deleteAsk: 'Usunąć ten komentarz?', deleteThread: 'Usunąć ten komentarz razem z odpowiedziami?', changeFailed: 'Nie udało się zmienić komentarza',\n unsavedTitle: 'Zapisać zmiany?', unsavedHint: 'Ten dokument ma niezapisane zmiany.', discard: 'Nie zapisuj', more: 'Więcej narzędzi',\n offline: 'Offline', offlineHint: 'Zmiany zostają tutaj i zsynchronizują się po powrocie połączenia', liveOff: 'Wspólna edycja jest niedostępna', people: 'Osoby w tym dokumencie', you: 'ty',\n share: 'Udostępnij', sharing: 'Udostępnianie', guestLinks: 'Linki dla gości', viewLink: 'Link do czytania', commentLink: 'Link do komentowania',\n madeBy: 'Utworzono przez {name}', endsOn: 'Działa do {date}', untilOff: 'Do wyłączenia', linkEnded: 'Wygasł', downloadOn: 'Pobieranie włączone', passwordOn: 'Hasło',\n copy: 'Kopiuj', copied: 'Skopiowano', changeLink: 'Zmień', turnOff: 'Wyłącz', newLink: 'Nowy link dla gości', guestsCan: 'Goście mogą', canRead: 'Czytać',\n canComment: 'Czytać i komentować', badgeRead: 'Tylko do odczytu', badgeComment: 'Czytanie i komentarze', linkWorks: 'Link działa', days7: '7 dni', days30: '30 dni',\n untilTurnOff: 'Dopóki go nie wyłączę', pickDay: 'Wybierz dzień', passwordHint: 'Goście wpisują je raz na swoim urządzeniu', passwordPlaceholder: 'Wpisz hasło',\n keepPassword: 'Zostaw puste, aby zachować hasło', downloadFile: 'Pobieranie pliku', downloadHint: 'Oryginalny plik i kopia PDF', askName: 'Pytaj gościa o imię',\n askNameHint: 'Widzisz je na liście osób, które otworzyły link', lastSaved: 'Goście widzą ostatnią zapisaną wersję. Nowa wersja trafia do linku, gdy ktoś zapisze.',\n makeLink: 'Utwórz link', saveLink: 'Zapisz link', inTeam: 'W zespole', peopleOf: 'Osoby z projektu {space}',\n teamHint: 'Każdy, kto widzi Dysk tego projektu, czyta go, a osoby z prawem edycji go zmieniają.',\n noLinks: 'Nie ma jeszcze linków dla gości. Link otwiera ten dokument bez konta.', unnamed: 'Goście bez imienia', shareFailed: 'Nie udało się zapisać linku. Spróbuj ponownie.',\n sharedBy: 'Udostępnione przez {name}', openDoc: 'Otwórz', passwordAsk: 'Ten dokument otwiera się hasłem. Wpisz je, aby otworzyć dokument na tym urządzeniu.',\n wrongPassword: 'Hasło nie pasuje. Spróbuj ponownie.', endedTitle: 'Ten link wygasł',\n endedText: 'Osoba, która udostępniła dokument, wyłączyła link albo minął jego ostatni dzień. Poproś ją o nowy link.',\n missingTitle: 'Ten link niczego nie otwiera', missingText: 'Sprawdź adres albo poproś o nowy link.',\n nameAsk: 'Wpisz swoje imię, aby przeczytać ten dokument. Osoba, która go udostępniła, widzi, kto go otworzył.',\n nameHint: 'Osoba, która udostępniła dokument, widzi Twoje imię i komentarze. Imię zostaje na tym urządzeniu.', nameNeeded: 'Wpisz imię, aby komentować',\n guest: 'Gość', pdfCopy: 'Kopia PDF', tooMany: 'Za dużo prób. Spróbuj za kilka minut.',\n openForms: { one: 'otwarcie', few: 'otwarcia', many: 'otwarć', other: 'otwarcia' }, commentForms: { one: 'komentarz', few: 'komentarze', many: 'komentarzy', other: 'komentarza' },\n methods: { typed: 'Wpisany', drawn: 'Narysowany', image: 'Obraz' },\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Arkusze', slides: 'Slajdy' },\n};\n\nconst uk: Text = {\n documents: 'Документи', loose: 'Без теки', search: 'Пошук документів', all: 'Усі', empty: 'Тут ще немає документів', nothing: 'Нічого не знайдено',\n pick: 'Виберіть документ у списку', closeList: 'Сховати список', openList: 'Показати список',\n outline: 'Зміст', versions: 'Версії', details: 'Деталі', noOutline: 'У документі немає заголовків', current: 'Поточна',\n size: 'Розмір', updated: 'Змінено', by: 'Хто змінив', kind: 'Формат', rights: 'Ви можете', view: 'Дивитися', comment: 'Коментувати', edit: 'Правити',\n failed: 'Не вдалося завантажити', retry: 'Спробувати ще', loading: 'Завантаження', unsupported: 'Цей файл поки не можна показати',\n restore: 'Відновити цю версію', restoreFailed: 'Не вдалося відновити',\n allProjects: 'Усі проєкти', closePanel: 'Сховати панель', openPanel: 'Показати панель', zoomIn: 'Збільшити', zoomOut: 'Зменшити', fit: 'Справжній розмір',\n pdfTools: 'Інструменти PDF', pages: 'Сторінки', page: 'Сторінка', fitWidth: 'За шириною', fitPage: 'Сторінка цілком', find: 'Пошук у документі', previous: 'Попередній', next: 'Наступний',\n close: 'Закрити', searching: 'Пошук', noHits: 'Нічого не знайдено', selectText: 'Виділити текст', highlight: 'Маркер', underline: 'Підкреслити', strike: 'Закреслити',\n note: 'Нотатка', draw: 'Малювати', eraser: 'Гумка', sign: 'Підписати', colour: 'Колір', lineWidth: 'Товщина лінії', undo: 'Відмінити', redo: 'Повторити', save: 'Зберегти', saving: 'Збереження',\n saved: 'Збережено', saveFailed: 'Не вдалося зберегти', remove: 'Видалити', notePlaceholder: 'Напишіть нотатку', signature: 'Підпис', placeHint: 'Клацніть або торкніться місця, де має бути підпис',\n cancel: 'Скасувати', signTitle: 'Додати підпис', typed: 'Ввести', drawn: 'Намалювати', image: 'Зображення', yourName: 'Ваше ім’я', drawHere: 'Підпишіться мишею або пальцем',\n clear: 'Очистити', pickImage: 'Виберіть зображення PNG або JPEG', useSign: 'Поставити підпис', marksNote: 'Позначки', formNote: 'Заповнена форма', signedNote: 'Підписано',\n signatures: 'Підписи', noSignatures: 'Цей файл ще ніхто не підписав', version: 'Версія', download: 'Завантажити', openInDocuments: 'Відкрити в Документах',\n textTools: 'Інструменти для тексту', home: 'Основне', insert: 'Вставлення', layout: 'Макет', review: 'Рецензування', viewTab: 'Вигляд', paragraphStyle: 'Стиль абзацу', normal: 'Звичайний',\n heading: 'Заголовок', quote: 'Цитата', code: 'Код', bold: 'Жирний', italic: 'Курсив', textColour: 'Колір тексту', automatic: 'Автоматично', noColour: 'Без кольору',\n bullets: 'Маркований список', numbers: 'Нумерований список', tasks: 'Список завдань', alignLeft: 'По лівому краю', alignCenter: 'По центру', alignRight: 'По правому краю', justify: 'По ширині',\n indent: 'Збільшити відступ', outdent: 'Зменшити відступ', clearFormat: 'Очистити форматування', table: 'Таблиця', rowAbove: 'Рядок вище', rowBelow: 'Рядок нижче',\n columnLeft: 'Стовпець ліворуч', columnRight: 'Стовпець праворуч', deleteRow: 'Видалити рядок', deleteColumn: 'Видалити стовпець', deleteTable: 'Видалити таблицю',\n headerRow: 'Рядок заголовка', mergeCells: 'Об’єднати або розділити клітинки', imageLink: 'Адреса зображення', chooseFile: 'Вибрати файл', put: 'Вставити', link: 'Посилання',\n linkAddress: 'Адреса посилання', apply: 'Застосувати', unlink: 'Прибрати посилання', pageBreak: 'Розрив сторінки', rule: 'Горизонтальна лінія', pageSize: 'Розмір сторінки', margins: 'Поля',\n marginsNormal: 'Звичайні', marginsNarrow: 'Вузькі', marginsWide: 'Широкі', addComment: 'Додати коментар', comments: 'Коментарі', noComments: 'Коментарів ще немає',\n commentHint: 'Виділіть текст і додайте коментар', writeComment: 'Напишіть коментар', post: 'Додати', reply: 'Відповісти', resolve: 'Вирішити', reopen: 'Відкрити знову',\n resolved: 'Вирішено', showResolved: 'Показати вирішені', commentFailed: 'Не вдалося надіслати коментар', exportAs: 'Експорт', exportFailed: 'Не вдалося експортувати',\n editedNote: 'Правка тексту', documentText: 'Текст документа', locked: 'Лишається як у файлі', references: 'Посилання', toc: 'Зміст', tocInsert: 'Вставити зміст', tocGo: 'Перейти до змісту',\n tocRemove: 'Прибрати зміст', tocHint: 'Сам іде за заголовками', tocEmpty: 'Додайте заголовки, і вони з’являться тут',\n suggest: 'Пропонувати зміни', suggesting: 'Режим пропозицій', suggestions: 'Пропозиції', acceptAll: 'Прийняти всі', rejectAll: 'Відхилити всі', accept: 'Прийняти', reject: 'Відхилити',\n added: 'Додано', removed: 'Видалено', someone: 'Хтось', copyAs: 'Зробити копію XLSX', copyFailed: 'Не вдалося зробити копію', editComment: 'Змінити', delete: 'Видалити',\n deleteAsk: 'Видалити цей коментар?', deleteThread: 'Видалити цей коментар разом з відповідями?', changeFailed: 'Не вдалося змінити коментар',\n unsavedTitle: 'Зберегти зміни?', unsavedHint: 'У цьому документі є незбережені зміни.', discard: 'Не зберігати', more: 'Більше інструментів',\n offline: 'Офлайн', offlineHint: 'Зміни лишаються тут і синхронізуються, коли з’явиться зв’язок', liveOff: 'Спільне редагування недоступне', people: 'Люди в цьому документі', you: 'ви',\n share: 'Поділитися', sharing: 'Доступ', guestLinks: 'Посилання для гостей', viewLink: 'Посилання для читання', commentLink: 'Посилання для коментарів',\n madeBy: 'Автор: {name}', endsOn: 'Діє до {date}', untilOff: 'Доки не вимкнуть', linkEnded: 'Завершено', downloadOn: 'Завантаження ввімкнено', passwordOn: 'Пароль',\n copy: 'Копіювати', copied: 'Скопійовано', changeLink: 'Змінити', turnOff: 'Вимкнути', newLink: 'Нове посилання для гостей', guestsCan: 'Гості можуть', canRead: 'Читати',\n canComment: 'Читати й коментувати', badgeRead: 'Лише читання', badgeComment: 'Читання й коментарі', linkWorks: 'Посилання діє', days7: '7 днів', days30: '30 днів',\n untilTurnOff: 'Доки не вимкну', pickDay: 'Вибрати день', passwordHint: 'Гості вводять його один раз на своєму пристрої', passwordPlaceholder: 'Введіть пароль',\n keepPassword: 'Лишіть порожнім, щоб зберегти пароль', downloadFile: 'Завантаження файлу', downloadHint: 'Оригінальний файл і копія PDF', askName: 'Питати ім’я гостя',\n askNameHint: 'Ви бачите його серед тих, хто відкривав', lastSaved: 'Гості бачать останню збережену версію. Нова версія потрапляє за посиланням, коли хтось зберігає.',\n makeLink: 'Створити посилання', saveLink: 'Зберегти посилання', inTeam: 'У команді', peopleOf: 'Люди проєкту {space}',\n teamHint: 'Кожен, хто бачить Drive цього проєкту, читає його, а люди з правом правки змінюють.',\n noLinks: 'Посилань для гостей ще немає. Посилання відкриває цей документ без облікового запису.', unnamed: 'Гості без імені', shareFailed: 'Не вдалося зберегти посилання. Спробуйте ще.',\n sharedBy: 'Від {name}', openDoc: 'Відкрити', passwordAsk: 'Цей документ відкривається з паролем. Введіть його, щоб відкрити документ на цьому пристрої.',\n wrongPassword: 'Пароль не підходить. Спробуйте ще.', endedTitle: 'Це посилання більше не діє',\n endedText: 'Той, хто поділився документом, вимкнув посилання або минув його останній день. Попросіть нове посилання.',\n missingTitle: 'Це посилання нічого не відкриває', missingText: 'Перевірте адресу або попросіть нове посилання.',\n nameAsk: 'Введіть своє ім’я, щоб прочитати документ. Той, хто ним поділився, бачить, хто його відкривав.',\n nameHint: 'Той, хто поділився документом, бачить ваше ім’я та коментарі. Ім’я лишається на цьому пристрої.', nameNeeded: 'Введіть ім’я, щоб коментувати',\n guest: 'Гість', pdfCopy: 'Копія PDF', tooMany: 'Забагато спроб. Спробуйте за кілька хвилин.',\n openForms: { one: 'відкриття', few: 'відкриття', many: 'відкриттів', other: 'відкриття' }, commentForms: { one: 'коментар', few: 'коментарі', many: 'коментарів', other: 'коментаря' },\n methods: { typed: 'Введений', drawn: 'Намальований', image: 'Зображення' },\n kinds: { docx: 'DOCX', markdown: 'Markdown', pdf: 'PDF', sheet: 'Таблиці', slides: 'Слайди' },\n};\n\nexport const texts: Record<Language, Text> = { en, pl, uk };\n"],"mappings":"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","names":["b","meta","grid","picture","n","on","images","listed","size","id","R","shape","size"]}