@gilav21/shadcn-angular-rte 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -27
- package/fesm2022/{gilav21-shadcn-angular-rte-docx-parser-CFx_4GC5.mjs → gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs} +2 -2
- package/fesm2022/{gilav21-shadcn-angular-rte-docx-parser-CFx_4GC5.mjs.map → gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs.map} +1 -1
- package/fesm2022/{gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-DWSBW7Gw.mjs → gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs} +933 -62
- package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs.map +1 -0
- package/fesm2022/gilav21-shadcn-angular-rte.mjs +1 -1
- package/package.json +6 -2
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.cjs +169 -0
- package/schematics/ng-add/schema.json +13 -0
- package/styles.css +2 -0
- package/types/gilav21-shadcn-angular-rte.d.ts +143 -3
- package/types/gilav21-shadcn-angular-rte.d.ts.map +1 -1
- package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-DWSBW7Gw.mjs.map +0 -1
- package/theme.css +0 -159
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gilav21-shadcn-angular-rte-docx-parser-CFx_4GC5.mjs","sources":["../../../packages/rte-package/src/lib/parsers/zip-reader.ts","../../../packages/rte-package/src/lib/parsers/docx-parser.ts"],"sourcesContent":["import { inflate } from './inflate';\n\nexport interface ZipEntry {\n readonly path: string;\n readonly compressedSize: number;\n readonly uncompressedSize: number;\n readonly compressionMethod: number;\n readonly crc32: number;\n readonly offset: number;\n readonly flags: number;\n}\n\nexport interface ZipReadOptions {\n readonly maxUncompressedSize?: number;\n /** @deprecated No longer enforced. Kept for API compatibility. */\n readonly maxFileCount?: number;\n readonly maxFileSize?: number;\n}\n\nconst DEFAULT_MAX_UNCOMPRESSED = 1024 * 1024 * 1024;\nconst DEFAULT_MAX_FILE_SIZE = 200 * 1024 * 1024;\n\nconst ZIP_LOCAL_HEADER = 0x04034b50;\nconst ZIP_CENTRAL_DIR = 0x02014b50;\nconst ZIP_END_OF_CENTRAL = 0x06054b50;\nconst ZIP64_END_OF_CENTRAL = 0x06064b50;\nconst ZIP64_END_LOCATOR = 0x07064b50;\n\nconst CRC32_TABLE = buildCrc32Table();\n\nfunction buildCrc32Table(): Uint32Array {\n const table = new Uint32Array(256);\n for (let i = 0; i < 256; i++) {\n let c = i;\n for (let j = 0; j < 8; j++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[i] = c;\n }\n return table;\n}\n\nfunction crc32(data: Uint8Array): number {\n let crc = 0xffffffff;\n for (const byte of data) {\n crc = CRC32_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction readU16LE(data: Uint8Array, offset: number): number {\n return data[offset] | (data[offset + 1] << 8);\n}\n\nfunction readU32LE(data: Uint8Array, offset: number): number {\n return (data[offset] | (data[offset + 1] << 8) | (data[offset + 2] << 16) | (data[offset + 3] << 24)) >>> 0;\n}\n\nfunction readU64LE(data: Uint8Array, offset: number): number {\n const low = readU32LE(data, offset);\n const high = readU32LE(data, offset + 4);\n return high * 0x100000000 + low;\n}\n\nfunction validateZipMagic(data: Uint8Array): void {\n if (data.length < 22) {\n throw new Error('Data too small to be a ZIP file');\n }\n if (readU32LE(data, 0) !== ZIP_LOCAL_HEADER) {\n throw new Error('Invalid ZIP file: missing PK signature');\n }\n}\n\nfunction validatePath(path: string): void {\n if (path.startsWith('/') || path.startsWith('\\\\')) {\n throw new Error(`Absolute path rejected: ${path}`);\n }\n const segments = path.split(/[/\\\\]/);\n for (const seg of segments) {\n if (seg === '..') {\n throw new Error(`Path traversal rejected: ${path}`);\n }\n }\n}\n\nfunction findEndOfCentralDir(data: Uint8Array): number {\n const searchStart = Math.max(0, data.length - 65557);\n for (let i = data.length - 22; i >= searchStart; i--) {\n if (readU32LE(data, i) === ZIP_END_OF_CENTRAL) {\n return i;\n }\n }\n throw new Error('Cannot find end of central directory');\n}\n\nfunction tryReadZip64Eocd(data: Uint8Array, eocdOffset: number): { entryCount: number; centralDirOffset: number } | null {\n if (eocdOffset < 20) return null;\n\n const locatorOffset = eocdOffset - 20;\n if (readU32LE(data, locatorOffset) !== ZIP64_END_LOCATOR) return null;\n\n const zip64EocdOffset = readU64LE(data, locatorOffset + 8);\n if (zip64EocdOffset + 56 > data.length) return null;\n if (readU32LE(data, zip64EocdOffset) !== ZIP64_END_OF_CENTRAL) return null;\n\n const entryCount = readU64LE(data, zip64EocdOffset + 32);\n const centralDirOffset = readU64LE(data, zip64EocdOffset + 48);\n\n return { entryCount, centralDirOffset };\n}\n\ninterface ZipSizes { uncompressedSize: number; compressedSize: number; localHeaderOffset: number; }\n\nfunction applyZip64Extra(zip64Extra: Zip64ExtraResult | null, current: ZipSizes): void {\n if (!zip64Extra) return;\n if (zip64Extra.uncompressedSize !== undefined) current.uncompressedSize = zip64Extra.uncompressedSize;\n if (zip64Extra.compressedSize !== undefined) current.compressedSize = zip64Extra.compressedSize;\n if (zip64Extra.localHeaderOffset !== undefined) current.localHeaderOffset = zip64Extra.localHeaderOffset;\n}\n\nfunction parseCentralDirectory(data: Uint8Array): ZipEntry[] {\n const eocdOffset = findEndOfCentralDir(data);\n\n const zip64 = tryReadZip64Eocd(data, eocdOffset);\n\n let entryCount: number;\n let centralDirOffset: number;\n\n if (zip64) {\n entryCount = zip64.entryCount;\n centralDirOffset = zip64.centralDirOffset;\n } else {\n entryCount = readU16LE(data, eocdOffset + 10);\n centralDirOffset = readU32LE(data, eocdOffset + 16);\n }\n\n const entries: ZipEntry[] = [];\n let pos = centralDirOffset;\n\n for (let i = 0; i < entryCount; i++) {\n if (pos + 46 > data.length) break;\n if (readU32LE(data, pos) !== ZIP_CENTRAL_DIR) break;\n\n const flags = readU16LE(data, pos + 8);\n const compressionMethod = readU16LE(data, pos + 10);\n const entryCrc32 = readU32LE(data, pos + 16);\n const nameLen = readU16LE(data, pos + 28);\n const extraLen = readU16LE(data, pos + 30);\n const commentLen = readU16LE(data, pos + 32);\n const sizes: ZipSizes = {\n compressedSize: readU32LE(data, pos + 20),\n uncompressedSize: readU32LE(data, pos + 24),\n localHeaderOffset: readU32LE(data, pos + 42),\n };\n\n const pathBytes = data.subarray(pos + 46, pos + 46 + nameLen);\n const path = new TextDecoder().decode(pathBytes);\n\n if (sizes.compressedSize === 0xFFFFFFFF || sizes.uncompressedSize === 0xFFFFFFFF || sizes.localHeaderOffset === 0xFFFFFFFF) {\n const zip64Extra = findZip64ExtraField(data, pos + 46 + nameLen, extraLen, sizes.uncompressedSize, sizes.compressedSize, sizes.localHeaderOffset);\n applyZip64Extra(zip64Extra, sizes);\n }\n\n entries.push({\n path,\n compressedSize: sizes.compressedSize,\n uncompressedSize: sizes.uncompressedSize,\n compressionMethod,\n crc32: entryCrc32,\n offset: sizes.localHeaderOffset,\n flags,\n });\n\n pos += 46 + nameLen + extraLen + commentLen;\n }\n\n return entries;\n}\n\ninterface Zip64ExtraResult {\n readonly uncompressedSize?: number;\n readonly compressedSize?: number;\n readonly localHeaderOffset?: number;\n}\n\nfunction findZip64ExtraField(\n data: Uint8Array,\n extraStart: number,\n extraLen: number,\n origUncompressed: number,\n origCompressed: number,\n origOffset: number,\n): Zip64ExtraResult | null {\n let offset = extraStart;\n const end = extraStart + extraLen;\n\n while (offset + 4 <= end) {\n const headerId = readU16LE(data, offset);\n const dataSize = readU16LE(data, offset + 2);\n if (headerId === 0x0001) {\n const result: { uncompressedSize?: number; compressedSize?: number; localHeaderOffset?: number } = {};\n let fieldOffset = offset + 4;\n if (origUncompressed === 0xFFFFFFFF && fieldOffset + 8 <= end) {\n result.uncompressedSize = readU64LE(data, fieldOffset);\n fieldOffset += 8;\n }\n if (origCompressed === 0xFFFFFFFF && fieldOffset + 8 <= end) {\n result.compressedSize = readU64LE(data, fieldOffset);\n fieldOffset += 8;\n }\n if (origOffset === 0xFFFFFFFF && fieldOffset + 8 <= end) {\n result.localHeaderOffset = readU64LE(data, fieldOffset);\n }\n return result;\n }\n offset += 4 + dataSize;\n }\n return null;\n}\n\nfunction checkEncrypted(entry: ZipEntry): void {\n if (entry.flags & 0x01) {\n throw new Error(`Encrypted ZIP entry not supported: ${entry.path}`);\n }\n}\n\nfunction extractEntryData(data: Uint8Array, entry: ZipEntry, maxFileSize: number): Uint8Array {\n checkEncrypted(entry);\n\n if (entry.uncompressedSize > maxFileSize) {\n throw new Error(`File too large: ${entry.path} (${entry.uncompressedSize} bytes)`);\n }\n\n const localOffset = entry.offset;\n if (localOffset + 30 > data.length) {\n throw new Error(`Invalid local header offset for ${entry.path}`);\n }\n if (readU32LE(data, localOffset) !== ZIP_LOCAL_HEADER) {\n throw new Error(`Invalid local header for ${entry.path}`);\n }\n\n const localNameLen = readU16LE(data, localOffset + 26);\n const localExtraLen = readU16LE(data, localOffset + 28);\n const dataStart = localOffset + 30 + localNameLen + localExtraLen;\n const compressedData = data.subarray(dataStart, dataStart + entry.compressedSize);\n\n let result: Uint8Array;\n if (entry.compressionMethod === 0) {\n result = compressedData.slice();\n } else if (entry.compressionMethod === 8) {\n // Bound the ACTUAL output, not the size the archive claims: an entry's\n // `uncompressedSize` is attacker-written metadata, so a crafted zip can\n // under-declare a bomb and slip past the checks above. CRC only catches\n // the lie after the stream has already inflated in memory.\n result = inflate(compressedData, { maxOutputBytes: maxFileSize });\n } else {\n throw new Error(`Unsupported compression method ${entry.compressionMethod} for ${entry.path}`);\n }\n\n const actualCrc = crc32(result);\n if (actualCrc !== entry.crc32) {\n throw new Error(`CRC32 mismatch for ${entry.path}: expected ${entry.crc32}, got ${actualCrc}`);\n }\n\n return result;\n}\n\nexport function listZipEntries(data: Uint8Array): ZipEntry[] {\n validateZipMagic(data);\n return parseCentralDirectory(data);\n}\n\nexport function extractZipEntry(data: Uint8Array, path: string, options?: ZipReadOptions): Uint8Array | null {\n validateZipMagic(data);\n const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;\n const entries = parseCentralDirectory(data);\n const entry = entries.find(e => e.path === path);\n if (!entry) return null;\n validatePath(entry.path);\n return extractEntryData(data, entry, maxFileSize);\n}\n\nexport function readZip(data: Uint8Array, options?: ZipReadOptions): Map<string, Uint8Array> {\n validateZipMagic(data);\n\n const maxUncompressed = options?.maxUncompressedSize ?? DEFAULT_MAX_UNCOMPRESSED;\n const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;\n\n const entries = parseCentralDirectory(data);\n\n let totalUncompressed = 0;\n for (const entry of entries) {\n totalUncompressed += entry.uncompressedSize;\n }\n if (totalUncompressed > maxUncompressed) {\n throw new Error(`Total uncompressed size too large: ${totalUncompressed} bytes (max ${maxUncompressed})`);\n }\n\n const files = new Map<string, Uint8Array>();\n\n for (const entry of entries) {\n if (entry.path.endsWith('/')) continue;\n validatePath(entry.path);\n files.set(entry.path, extractEntryData(data, entry, maxFileSize));\n }\n\n return files;\n}\n","import { readZip } from './zip-reader';\nimport { isValidImageMagicBytes } from './image-validator';\n\nexport type DocxVertAlign = 'superscript' | 'subscript';\nexport type DocxBreakType = 'page' | 'column' | 'textWrapping';\nexport type DocxListType = 'bullet' | 'numbered';\ntype FieldState = 'none' | 'begin' | 'separate';\n\nexport interface DocxRunStyle {\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: boolean;\n readonly strikethrough?: boolean;\n readonly doubleStrikethrough?: boolean;\n readonly caps?: boolean;\n readonly smallCaps?: boolean;\n readonly fontSize?: number;\n readonly color?: string;\n readonly fontFamily?: string;\n readonly highlight?: string;\n readonly backgroundColor?: string;\n readonly vertAlign?: DocxVertAlign;\n readonly rtl?: boolean;\n readonly charSpacing?: number;\n readonly hidden?: boolean;\n}\n\nexport interface DocxRun {\n readonly text: string;\n readonly style: DocxRunStyle;\n readonly href?: string;\n readonly breakType?: DocxBreakType;\n readonly isInserted?: boolean;\n readonly isDeleted?: boolean;\n readonly anchorId?: string;\n}\n\nexport interface DocxBorder {\n readonly style: string;\n readonly color: string;\n readonly size: number;\n}\n\nexport interface DocxParagraphBorders {\n readonly top?: DocxBorder;\n readonly bottom?: DocxBorder;\n readonly left?: DocxBorder;\n readonly right?: DocxBorder;\n}\n\nexport interface DocxParagraph {\n readonly type: 'paragraph';\n readonly runs: ReadonlyArray<DocxRun>;\n readonly style: string;\n readonly listLevel?: number;\n readonly listType?: DocxListType;\n readonly rtl?: boolean;\n readonly alignment?: string;\n readonly spacingBefore?: number;\n readonly spacingAfter?: number;\n readonly lineSpacing?: number;\n readonly indentLeft?: number;\n readonly indentRight?: number;\n readonly indentHanging?: number;\n readonly indentFirstLine?: number;\n readonly shading?: string;\n readonly borders?: DocxParagraphBorders;\n}\n\nexport interface DocxTableBorder {\n readonly style: string;\n readonly color: string;\n readonly size: number;\n}\n\nexport interface DocxTableCellStyle {\n readonly backgroundColor?: string;\n readonly verticalAlign?: string;\n readonly width?: number;\n readonly widthUnit?: string;\n readonly borders?: {\n readonly top?: DocxTableBorder;\n readonly bottom?: DocxTableBorder;\n readonly left?: DocxTableBorder;\n readonly right?: DocxTableBorder;\n };\n readonly paddings?: {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n };\n}\n\nexport interface DocxTableCell {\n readonly elements: ReadonlyArray<DocxParagraph | DocxTable>;\n readonly colSpan: number;\n readonly rowSpan: number;\n readonly cellStyle?: DocxTableCellStyle;\n}\n\nexport interface DocxTableRowStyle {\n readonly height?: number;\n readonly isHeader?: boolean;\n}\n\nexport interface DocxTableRow {\n readonly cells: ReadonlyArray<DocxTableCell>;\n readonly rowStyle?: DocxTableRowStyle;\n}\n\nexport interface DocxTableStyle {\n readonly width?: number;\n readonly widthUnit?: string;\n readonly borders?: {\n readonly top?: DocxTableBorder;\n readonly bottom?: DocxTableBorder;\n readonly left?: DocxTableBorder;\n readonly right?: DocxTableBorder;\n readonly insideH?: DocxTableBorder;\n readonly insideV?: DocxTableBorder;\n };\n}\n\nexport interface DocxTable {\n readonly type: 'table';\n readonly rows: ReadonlyArray<DocxTableRow>;\n readonly tableStyle?: DocxTableStyle;\n}\n\nexport interface DocxImage {\n readonly type: 'image';\n readonly dataUrl: string;\n readonly width: number;\n readonly height: number;\n readonly altText: string;\n}\n\nexport interface DocxFootnote {\n readonly id: string;\n readonly paragraphs: ReadonlyArray<DocxParagraph>;\n}\n\nexport type DocxElement = DocxParagraph | DocxTable | DocxImage;\n\nexport interface DocxComment {\n readonly id: string;\n readonly author: string;\n readonly date: string;\n readonly paragraphs: ReadonlyArray<DocxParagraph>;\n}\n\nexport interface DocxParseResult {\n readonly elements: ReadonlyArray<DocxElement>;\n readonly plainText: string;\n readonly footnotes: ReadonlyArray<DocxFootnote>;\n readonly endnotes: ReadonlyArray<DocxFootnote>;\n readonly comments: ReadonlyArray<DocxComment>;\n readonly headers: ReadonlyArray<ReadonlyArray<DocxElement>>;\n readonly footers: ReadonlyArray<ReadonlyArray<DocxElement>>;\n}\n\n/**\n * How deep nested tables may go before the parser stops descending.\n * Far beyond any real document; it exists so a crafted file cannot overflow\n * the stack.\n */\nconst MAX_TABLE_NESTING = 20;\n\nconst NS_W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\nconst NS_R = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst NS_WP = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\nconst NS_A = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nconst NS_MC = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n\ntype ThemeColorMap = ReadonlyMap<string, string>;\n\nconst SCHEME_COLOR_ALIASES: ReadonlyMap<string, string> = new Map([\n ['tx1', 'dk1'], ['tx2', 'dk2'],\n ['bg1', 'lt1'], ['bg2', 'lt2'],\n]);\n\nconst EMU_PER_PIXEL = 9525;\nconst TWIPS_PER_PT = 20;\n\nconst HIGHLIGHT_COLOR_MAP: Record<string, string> = {\n yellow: '#FFFF00',\n green: '#00FF00',\n cyan: '#00FFFF',\n magenta: '#FF00FF',\n blue: '#0000FF',\n red: '#FF0000',\n darkBlue: '#00008B',\n darkCyan: '#008B8B',\n darkGreen: '#006400',\n darkMagenta: '#8B008B',\n darkRed: '#8B0000',\n darkYellow: '#808000',\n darkGray: '#A9A9A9',\n lightGray: '#D3D3D3',\n black: '#000000',\n white: '#FFFFFF',\n};\n\nfunction parseXml(xmlString: string): Document {\n const parser = new DOMParser();\n return parser.parseFromString(xmlString, 'application/xml');\n}\n\nfunction getChildNS(parent: Element, ns: string, localName: string): Element | null {\n const children = parent.getElementsByTagNameNS(ns, localName);\n return children.length > 0 ? children[0] : null;\n}\n\nfunction getAllChildrenNS(parent: Element, ns: string, localName: string): Element[] {\n return Array.from(parent.getElementsByTagNameNS(ns, localName));\n}\n\nfunction getAttrVal(element: Element, ns: string, localName: string): string | null {\n const nsVal = element.getAttributeNS(ns, localName);\n if (nsVal) return nsVal;\n return element.getAttribute(localName);\n}\n\nfunction parseRelationships(files: Map<string, Uint8Array>): Map<string, string> {\n const relsFile = files.get('word/_rels/document.xml.rels');\n if (!relsFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(relsFile));\n const rels = doc.getElementsByTagName('Relationship');\n const map = new Map<string, string>();\n\n for (const rel of Array.from(rels)) {\n const id = rel.getAttribute('Id') ?? '';\n const target = rel.getAttribute('Target') ?? '';\n map.set(id, target);\n }\n\n return map;\n}\n\ninterface NumberingDefinition {\n readonly numFmt: string;\n}\n\nfunction parseNumberingDefinitions(files: Map<string, Uint8Array>): Map<string, Map<number, NumberingDefinition>> {\n const numFile = files.get('word/numbering.xml');\n if (!numFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(numFile));\n const abstractNums = new Map<string, Map<number, NumberingDefinition>>();\n\n const abstractNumEls = getAllChildrenNS(doc.documentElement, NS_W, 'abstractNum');\n for (const abstractNum of abstractNumEls) {\n const abstractId = getAttrVal(abstractNum, NS_W, 'abstractNumId') ?? '';\n const levels = new Map<number, NumberingDefinition>();\n\n const lvlEls = getAllChildrenNS(abstractNum, NS_W, 'lvl');\n for (const lvl of lvlEls) {\n const ilvl = Number.parseInt(getAttrVal(lvl, NS_W, 'ilvl') ?? '0', 10);\n const numFmtEl = getChildNS(lvl, NS_W, 'numFmt');\n const numFmt = numFmtEl ? (getAttrVal(numFmtEl, NS_W, 'val') ?? 'bullet') : 'bullet';\n levels.set(ilvl, { numFmt });\n }\n abstractNums.set(abstractId, levels);\n }\n\n const numMap = new Map<string, Map<number, NumberingDefinition>>();\n const numEls = getAllChildrenNS(doc.documentElement, NS_W, 'num');\n for (const num of numEls) {\n const numId = getAttrVal(num, NS_W, 'numId') ?? '';\n const abstractNumIdEl = getChildNS(num, NS_W, 'abstractNumId');\n const abstractId = abstractNumIdEl ? (getAttrVal(abstractNumIdEl, NS_W, 'val') ?? '') : '';\n const levels = abstractNums.get(abstractId);\n if (levels) {\n numMap.set(numId, levels);\n }\n }\n\n return numMap;\n}\n\nfunction parseRunStyle(rPr: Element | null, themeColors?: ThemeColorMap): DocxRunStyle {\n if (!rPr) return {};\n\n const result: {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n doubleStrikethrough?: boolean;\n caps?: boolean;\n smallCaps?: boolean;\n fontSize?: number;\n color?: string;\n fontFamily?: string;\n highlight?: string;\n backgroundColor?: string;\n vertAlign?: DocxVertAlign;\n rtl?: boolean;\n charSpacing?: number;\n hidden?: boolean;\n } = {};\n\n parseBoldItalic(rPr, result);\n if (getChildNS(rPr, NS_W, 'u')) result.underline = true;\n if (getChildNS(rPr, NS_W, 'strike')) result.strikethrough = true;\n if (getChildNS(rPr, NS_W, 'dstrike')) result.doubleStrikethrough = true;\n if (getChildNS(rPr, NS_W, 'caps')) result.caps = true;\n if (getChildNS(rPr, NS_W, 'smallCaps')) result.smallCaps = true;\n if (getChildNS(rPr, NS_W, 'vanish')) result.hidden = true;\n\n parseFontSizeAndColor(rPr, result, themeColors);\n parseFontFamily(rPr, result);\n parseHighlightAndShading(rPr, result);\n parseVertAlignAndRtl(rPr, result);\n parseCharSpacing(rPr, result);\n\n return result;\n}\n\nfunction parseBoldItalic(rPr: Element, result: { bold?: boolean; italic?: boolean }): void {\n const bEl = getChildNS(rPr, NS_W, 'b');\n if (bEl) {\n const bVal = getAttrVal(bEl, NS_W, 'val');\n result.bold = !bVal || bVal !== '0';\n }\n const iEl = getChildNS(rPr, NS_W, 'i');\n if (iEl) {\n const iVal = getAttrVal(iEl, NS_W, 'val');\n result.italic = !iVal || iVal !== '0';\n }\n}\n\nfunction parseFontSizeAndColor(\n rPr: Element,\n result: { fontSize?: number; color?: string },\n themeColors?: ThemeColorMap,\n): void {\n const sz = getChildNS(rPr, NS_W, 'sz');\n if (sz) {\n const val = getAttrVal(sz, NS_W, 'val');\n if (val) result.fontSize = Number.parseInt(val, 10) / 2;\n }\n\n const color = getChildNS(rPr, NS_W, 'color');\n if (color) {\n result.color = parseColorElement(color, themeColors);\n }\n}\n\nfunction parseColorElement(color: Element, themeColors?: ThemeColorMap): string | undefined {\n const val = getAttrVal(color, NS_W, 'val');\n if (val && val !== 'auto') return `#${val}`;\n if (!themeColors) return undefined;\n const themeColor = getAttrVal(color, NS_W, 'themeColor');\n if (!themeColor) return undefined;\n const resolved = resolveThemeColor(themeColor, themeColors);\n if (!resolved) return undefined;\n const tint = getAttrVal(color, NS_W, 'themeTint');\n const shade = getAttrVal(color, NS_W, 'themeShade');\n return applyTintShade(resolved, tint, shade);\n}\n\nfunction resolveThemeColor(themeColor: string, themeColors: ThemeColorMap): string | undefined {\n const mapped = SCHEME_COLOR_ALIASES.get(themeColor) ?? themeColor;\n return themeColors.get(mapped);\n}\n\nfunction applyTintShade(hex: string, tint: string | null, shade: string | null): string {\n if (!tint && !shade) return hex;\n\n const r = Number.parseInt(hex.substring(1, 3), 16);\n const g = Number.parseInt(hex.substring(3, 5), 16);\n const b = Number.parseInt(hex.substring(5, 7), 16);\n\n if (tint) {\n const t = Number.parseInt(tint, 16) / 255;\n return rgbToHex(\n Math.round(r + (255 - r) * t),\n Math.round(g + (255 - g) * t),\n Math.round(b + (255 - b) * t),\n );\n }\n\n if (shade) {\n const s = Number.parseInt(shade, 16) / 255;\n return rgbToHex(\n Math.round(r * s),\n Math.round(g * s),\n Math.round(b * s),\n );\n }\n\n return hex;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const toHex = (v: number): string => Math.min(255, Math.max(0, v)).toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nfunction parseCharSpacing(rPr: Element, result: { charSpacing?: number }): void {\n const spacing = getChildNS(rPr, NS_W, 'spacing');\n if (spacing) {\n const val = getAttrVal(spacing, NS_W, 'val');\n if (val) result.charSpacing = Number.parseInt(val, 10) / TWIPS_PER_PT;\n }\n}\n\nfunction parseFontFamily(rPr: Element, result: { fontFamily?: string }): void {\n const rFonts = getChildNS(rPr, NS_W, 'rFonts');\n if (rFonts) {\n const ascii = getAttrVal(rFonts, NS_W, 'ascii')\n ?? getAttrVal(rFonts, NS_W, 'hAnsi')\n ?? getAttrVal(rFonts, NS_W, 'cs');\n if (ascii) result.fontFamily = ascii;\n }\n}\n\nfunction parseHighlightAndShading(rPr: Element, result: { highlight?: string; backgroundColor?: string }): void {\n const highlightEl = getChildNS(rPr, NS_W, 'highlight');\n if (highlightEl) {\n const val = getAttrVal(highlightEl, NS_W, 'val');\n if (val && val !== 'none') {\n result.highlight = HIGHLIGHT_COLOR_MAP[val] ?? `#${val}`;\n }\n }\n\n const shd = getChildNS(rPr, NS_W, 'shd');\n if (shd) {\n const fill = getAttrVal(shd, NS_W, 'fill');\n if (fill && fill !== 'auto') result.backgroundColor = `#${fill}`;\n }\n}\n\nfunction parseVertAlignAndRtl(rPr: Element, result: { vertAlign?: DocxVertAlign; rtl?: boolean }): void {\n const vertAlignEl = getChildNS(rPr, NS_W, 'vertAlign');\n if (vertAlignEl) {\n const val = getAttrVal(vertAlignEl, NS_W, 'val');\n if (val === 'superscript' || val === 'subscript') {\n result.vertAlign = val;\n }\n }\n\n const rtlEl = getChildNS(rPr, NS_W, 'rtl');\n if (rtlEl) {\n const rtlVal = getAttrVal(rtlEl, NS_W, 'val');\n result.rtl = !rtlVal || rtlVal !== '0';\n }\n}\n\nfunction extractImageFromDrawing(\n drawing: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): DocxImage | null {\n const blipEl = getAllChildrenNS(drawing, NS_A, 'blip')[0];\n if (!blipEl) return null;\n\n const rId = blipEl.getAttributeNS(NS_R, 'embed') ?? '';\n if (!rId) return null;\n\n const target = relationships.get(rId);\n if (!target) return null;\n\n const imagePath = target.startsWith('/') ? target.substring(1) : `word/${target}`;\n const imageData = files.get(imagePath);\n if (!imageData || !isValidImageMagicBytes(imageData)) return null;\n\n let width = 200;\n let height = 200;\n const extent = getAllChildrenNS(drawing, NS_WP, 'extent')[0]\n ?? getAllChildrenNS(drawing, NS_A, 'ext')[0];\n if (extent) {\n const cx = extent.getAttribute('cx');\n const cy = extent.getAttribute('cy');\n if (cx) width = Math.round(Number.parseInt(cx, 10) / EMU_PER_PIXEL);\n if (cy) height = Math.round(Number.parseInt(cy, 10) / EMU_PER_PIXEL);\n }\n\n const mimeType = guessMimeType(imageData);\n const base64 = uint8ArrayToBase64(imageData);\n const dataUrl = `data:${mimeType};base64,${base64}`;\n\n const altText = drawing.getAttribute('descr') ?? '';\n\n return { type: 'image', dataUrl, width, height, altText };\n}\n\nfunction guessMimeType(data: Uint8Array): string {\n if (data[0] === 0xFF && data[1] === 0xD8) return 'image/jpeg';\n if (data[0] === 0x89 && data[1] === 0x50) return 'image/png';\n if (data[0] === 0x47 && data[1] === 0x49) return 'image/gif';\n if (data.length >= 12 && data[0] === 0x52 && data[8] === 0x57) return 'image/webp';\n return 'image/png';\n}\n\nfunction uint8ArrayToBase64(data: Uint8Array): string {\n let binary = '';\n const chunkSize = 8192;\n for (let i = 0; i < data.length; i += chunkSize) {\n const slice = data.subarray(i, Math.min(i + chunkSize, data.length));\n for (const byte of slice) {\n binary += String.fromCodePoint(byte);\n }\n }\n return btoa(binary);\n}\n\ninterface ParagraphStyleResult {\n readonly style: string;\n readonly listLevel?: number;\n readonly listType?: DocxListType;\n readonly rtl?: boolean;\n readonly alignment?: string;\n readonly spacingBefore?: number;\n readonly spacingAfter?: number;\n readonly lineSpacing?: number;\n readonly indentLeft?: number;\n readonly indentRight?: number;\n readonly indentHanging?: number;\n readonly indentFirstLine?: number;\n readonly shading?: string;\n readonly borders?: DocxParagraphBorders;\n}\n\nfunction parseParagraphStyle(\n pPr: Element | null,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n): ParagraphStyleResult {\n if (!pPr) return { style: '' };\n\n const pStyleEl = getChildNS(pPr, NS_W, 'pStyle');\n const style = (pStyleEl ? getAttrVal(pStyleEl, NS_W, 'val') : null) ?? '';\n\n return {\n style,\n ...parseListProperties(pPr, numberingMap),\n ...parseBidiAndAlignment(pPr),\n ...parseSpacingProperties(pPr),\n ...parseIndentProperties(pPr),\n ...parseParagraphBordersAndShading(pPr),\n };\n}\n\nfunction parseParagraphBordersAndShading(pPr: Element): {\n shading?: string; borders?: DocxParagraphBorders;\n} {\n const result: { shading?: string; borders?: DocxParagraphBorders } = {};\n\n const shd = getChildNS(pPr, NS_W, 'shd');\n if (shd) {\n const fill = getAttrVal(shd, NS_W, 'fill');\n if (fill && fill !== 'auto') result.shading = `#${fill}`;\n }\n\n const pBdr = getChildNS(pPr, NS_W, 'pBdr');\n if (pBdr) {\n result.borders = parseBorderSet(pBdr);\n }\n\n return result;\n}\n\nfunction parseBorderSet(borderParent: Element): DocxParagraphBorders {\n const borders: {\n top?: DocxBorder; bottom?: DocxBorder; left?: DocxBorder; right?: DocxBorder;\n } = {};\n\n const top = getChildNS(borderParent, NS_W, 'top');\n if (top) borders.top = parseSingleBorder(top);\n\n const bottom = getChildNS(borderParent, NS_W, 'bottom');\n if (bottom) borders.bottom = parseSingleBorder(bottom);\n\n const left = getChildNS(borderParent, NS_W, 'left');\n if (left) borders.left = parseSingleBorder(left);\n\n const right = getChildNS(borderParent, NS_W, 'right');\n if (right) borders.right = parseSingleBorder(right);\n\n return borders;\n}\n\nfunction parseSingleBorder(el: Element): DocxBorder {\n const style = getAttrVal(el, NS_W, 'val') ?? 'single';\n const colorVal = getAttrVal(el, NS_W, 'color');\n const color = colorVal && colorVal !== 'auto' ? `#${colorVal}` : '#000000';\n const sizeVal = getAttrVal(el, NS_W, 'sz');\n const size = sizeVal ? Number.parseInt(sizeVal, 10) / 8 : 1;\n return { style, color, size };\n}\n\nfunction parseListProperties(\n pPr: Element,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n): { listLevel?: number; listType?: 'bullet' | 'numbered' } {\n const numPr = getChildNS(pPr, NS_W, 'numPr');\n if (!numPr) return {};\n\n const ilvl = getChildNS(numPr, NS_W, 'ilvl');\n const level = ilvl ? Number.parseInt(getAttrVal(ilvl, NS_W, 'val') ?? '0', 10) : 0;\n const numId = getChildNS(numPr, NS_W, 'numId');\n const numIdVal = numId ? (getAttrVal(numId, NS_W, 'val') ?? '0') : '0';\n\n if (numIdVal === '0') return {};\n\n return { listLevel: level, listType: resolveListType(numberingMap, numIdVal, level) };\n}\n\nfunction resolveListType(\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n numIdVal: string,\n level: number,\n): 'bullet' | 'numbered' {\n const levels = numberingMap.get(numIdVal);\n if (!levels) return 'bullet';\n\n const def = levels.get(level);\n if (!def) return 'bullet';\n\n const fmt = def.numFmt;\n if (fmt === 'bullet' || fmt === 'none') return 'bullet';\n return 'numbered';\n}\n\nfunction parseBidiAndAlignment(pPr: Element): { rtl?: boolean; alignment?: string } {\n const result: { rtl?: boolean; alignment?: string } = {};\n\n const bidi = getChildNS(pPr, NS_W, 'bidi');\n if (bidi) {\n const bidiVal = getAttrVal(bidi, NS_W, 'val');\n result.rtl = !bidiVal || bidiVal !== '0';\n }\n\n const jcEl = getChildNS(pPr, NS_W, 'jc');\n if (jcEl) {\n const val = getAttrVal(jcEl, NS_W, 'val');\n if (val) result.alignment = val;\n }\n\n return result;\n}\n\nfunction parseSpacingProperties(pPr: Element): { spacingBefore?: number; spacingAfter?: number; lineSpacing?: number } {\n const spacing = getChildNS(pPr, NS_W, 'spacing');\n if (!spacing) return {};\n\n const result: { spacingBefore?: number; spacingAfter?: number; lineSpacing?: number } = {};\n\n const before = getAttrVal(spacing, NS_W, 'before');\n if (before) result.spacingBefore = Number.parseInt(before, 10) / TWIPS_PER_PT;\n\n const after = getAttrVal(spacing, NS_W, 'after');\n if (after) result.spacingAfter = Number.parseInt(after, 10) / TWIPS_PER_PT;\n\n const line = getAttrVal(spacing, NS_W, 'line');\n const lineRule = getAttrVal(spacing, NS_W, 'lineRule');\n if (line) {\n const lineVal = Number.parseInt(line, 10);\n if (lineRule === 'exact' || lineRule === 'atLeast') {\n result.lineSpacing = lineVal / TWIPS_PER_PT;\n } else {\n result.lineSpacing = lineVal / 240;\n }\n }\n\n return result;\n}\n\nfunction parseIndentProperties(pPr: Element): {\n indentLeft?: number; indentRight?: number; indentHanging?: number; indentFirstLine?: number;\n} {\n const ind = getChildNS(pPr, NS_W, 'ind');\n if (!ind) return {};\n\n const result: { indentLeft?: number; indentRight?: number; indentHanging?: number; indentFirstLine?: number } = {};\n\n const left = getAttrVal(ind, NS_W, 'left') ?? getAttrVal(ind, NS_W, 'start');\n if (left) result.indentLeft = Number.parseInt(left, 10) / TWIPS_PER_PT;\n\n const right = getAttrVal(ind, NS_W, 'right') ?? getAttrVal(ind, NS_W, 'end');\n if (right) result.indentRight = Number.parseInt(right, 10) / TWIPS_PER_PT;\n\n const hanging = getAttrVal(ind, NS_W, 'hanging');\n if (hanging) result.indentHanging = Number.parseInt(hanging, 10) / TWIPS_PER_PT;\n\n const firstLine = getAttrVal(ind, NS_W, 'firstLine');\n if (firstLine) result.indentFirstLine = Number.parseInt(firstLine, 10) / TWIPS_PER_PT;\n\n return result;\n}\n\nfunction parseRunChildren(\n run: Element,\n style: DocxRunStyle,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const runs: DocxRun[] = [];\n const images: DocxImage[] = [];\n\n for (const child of Array.from(run.childNodes)) {\n if (child instanceof Element) {\n parseRunChildElement(child, style, runs, images, relationships, files);\n }\n }\n\n return { runs, images };\n}\n\nconst SIMPLE_RUN_CHARS: Record<string, string> = {\n tab: '\\t',\n noBreakHyphen: '\\u2011',\n softHyphen: '\\u00AD',\n};\n\nfunction parseRunChildElement(\n child: Element,\n style: DocxRunStyle,\n runs: DocxRun[],\n images: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): void {\n const localName = child.localName;\n\n if (localName === 't' || localName === 'delText') {\n const text = child.textContent ?? '';\n if (text) runs.push({ text, style });\n return;\n }\n if (localName === 'br') {\n runs.push({ text: '\\n', style, breakType: parseBreakType(child) });\n return;\n }\n const simpleChar = SIMPLE_RUN_CHARS[localName];\n if (simpleChar) { runs.push({ text: simpleChar, style }); return; }\n if (localName === 'sym') {\n const symRun = parseSymbol(child, style);\n if (symRun) runs.push(symRun);\n return;\n }\n parseRunChildElementExtended(child, localName, style, runs, images, relationships, files);\n}\n\nfunction parseRunChildElementExtended(\n child: Element,\n localName: string,\n style: DocxRunStyle,\n runs: DocxRun[],\n images: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): void {\n if (localName === 'drawing' || localName === 'pict') {\n const img = extractImageFromDrawing(child, relationships, files);\n if (img) images.push(img);\n return;\n }\n if (localName === 'footnoteReference' || localName === 'endnoteReference') {\n parseNoteReference(child, localName, style, runs);\n return;\n }\n if (localName === 'commentReference') {\n const commentId = getAttrVal(child, NS_W, 'id');\n if (commentId) {\n runs.push({ text: `*${commentId}`, style: { ...style, vertAlign: 'superscript' } });\n }\n }\n}\n\nfunction parseNoteReference(\n child: Element,\n localName: string,\n style: DocxRunStyle,\n runs: DocxRun[],\n): void {\n const noteId = getAttrVal(child, NS_W, 'id');\n if (noteId) {\n const marker = localName === 'footnoteReference' ? `[${noteId}]` : `{${noteId}}`;\n runs.push({ text: marker, style: { ...style, vertAlign: 'superscript' } });\n }\n}\n\nfunction parseBreakType(br: Element): DocxBreakType | undefined {\n const typeAttr = getAttrVal(br, NS_W, 'type');\n if (typeAttr === 'page') return 'page';\n if (typeAttr === 'column') return 'column';\n return undefined;\n}\n\nfunction parseSymbol(sym: Element, baseStyle: DocxRunStyle): DocxRun | null {\n const charCode = getAttrVal(sym, NS_W, 'char');\n if (!charCode) return null;\n const codePoint = Number.parseInt(charCode, 16);\n const text = String.fromCodePoint(codePoint);\n const font = getAttrVal(sym, NS_W, 'font');\n const style = font ? { ...baseStyle, fontFamily: font } : baseStyle;\n return { text, style };\n}\n\nfunction parseRun(\n run: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const rPr = getChildNS(run, NS_W, 'rPr');\n const style = parseRunStyle(rPr, themeColors);\n return parseRunChildren(run, style, relationships, files);\n}\n\nfunction parseHyperlinkRuns(\n hyperlink: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const allRuns: DocxRun[] = [];\n const allImages: DocxImage[] = [];\n\n const rId = hyperlink.getAttributeNS(NS_R, 'id') ?? hyperlink.getAttribute('r:id') ?? '';\n const target = rId ? (relationships.get(rId) ?? '') : '';\n const anchor = hyperlink.getAttributeNS(NS_W, 'anchor') ?? hyperlink.getAttribute('w:anchor') ?? '';\n const href = target || (anchor ? `#bookmark-${anchor}` : '');\n\n const runElements = getAllChildrenNS(hyperlink, NS_W, 'r');\n for (const run of runElements) {\n const { runs, images } = parseRun(run, relationships, files, themeColors);\n for (const r of runs) {\n if (href && r.text.trim()) {\n allRuns.push({\n text: r.text,\n style: { ...r.style, underline: true, color: r.style.color ?? '#0563C1' },\n href,\n });\n } else {\n allRuns.push(r);\n }\n }\n allImages.push(...images);\n }\n\n return { runs: allRuns, images: allImages };\n}\n\nfunction collectDirectChildRuns(\n para: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const allRuns: DocxRun[] = [];\n const allImages: DocxImage[] = [];\n let fieldState: FieldState = 'none';\n\n for (const child of Array.from(para.childNodes)) {\n if (!(child instanceof Element)) continue;\n fieldState = processDirectChild(child, fieldState, allRuns, allImages, relationships, files, themeColors);\n }\n\n return { runs: allRuns, images: allImages };\n}\n\nfunction processDirectChild(\n child: Element,\n fieldState: FieldState,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): FieldState {\n if (child.localName === 'r' && child.namespaceURI === NS_W) {\n return processRunInField(child, fieldState, allRuns, allImages, relationships, files, themeColors);\n }\n\n if (fieldState !== 'begin') {\n collectChildElement(child, allRuns, allImages, relationships, files, themeColors);\n }\n return fieldState;\n}\n\nfunction processRunInField(\n child: Element,\n fieldState: FieldState,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): FieldState {\n const fldCharResult = checkFieldChar(child);\n if (fldCharResult === 'begin') return 'begin';\n if (fldCharResult === 'separate') return 'separate';\n if (fldCharResult === 'end') return 'none';\n\n if (fieldState === 'begin') return fieldState;\n if (fieldState === 'separate') {\n const { runs, images } = parseRun(child, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n return fieldState;\n }\n\n collectChildElement(child, allRuns, allImages, relationships, files, themeColors);\n return fieldState;\n}\n\nfunction checkFieldChar(run: Element): 'begin' | 'separate' | 'end' | null {\n for (const child of Array.from(run.childNodes)) {\n if (child instanceof Element && child.localName === 'fldChar') {\n const fldCharType = getAttrVal(child, NS_W, 'fldCharType');\n if (fldCharType === 'begin') return 'begin';\n if (fldCharType === 'separate') return 'separate';\n if (fldCharType === 'end') return 'end';\n }\n }\n return null;\n}\n\nfunction collectChildElement(\n child: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const localName = child.localName;\n\n if (localName === 'r') {\n const { runs, images } = parseRun(child, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n } else if (localName === 'hyperlink') {\n const { runs, images } = parseHyperlinkRuns(child, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n } else if (localName === 'drawing') {\n const img = extractImageFromDrawing(child, relationships, files);\n if (img) allImages.push(img);\n } else if (localName === 'bookmarkStart') {\n const name = getAttrVal(child, NS_W, 'name');\n if (name && name !== '_GoBack') {\n allRuns.push({ text: '', style: {}, anchorId: `bookmark-${name}` });\n }\n } else if (localName === 'ins') {\n collectTrackChangeRuns(child, allRuns, allImages, relationships, files, true, themeColors);\n } else if (localName === 'del') {\n collectTrackChangeRuns(child, allRuns, allImages, relationships, files, false, themeColors);\n } else if (localName === 'fldSimple') {\n collectFieldSimpleRuns(child, allRuns, allImages, relationships, files, themeColors);\n } else if (isUnwrappableElement(localName)) {\n unwrapAndCollect(child, allRuns, allImages, relationships, files, themeColors);\n } else if (localName === 'AlternateContent' && child.namespaceURI === NS_MC) {\n collectAlternateContent(child, allRuns, allImages, relationships, files, themeColors);\n }\n}\n\nfunction isUnwrappableElement(localName: string): boolean {\n return localName === 'sdt' || localName === 'smartTag' || localName === 'customXml';\n}\n\nfunction unwrapAndCollect(\n wrapper: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const content = wrapper.localName === 'sdt'\n ? getChildNS(wrapper, NS_W, 'sdtContent')\n : wrapper;\n if (!content) return;\n\n const { runs, images } = collectDirectChildRuns(content, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n}\n\nfunction collectTrackChangeRuns(\n element: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n isInserted: boolean,\n themeColors?: ThemeColorMap,\n): void {\n for (const child of Array.from(element.childNodes)) {\n if (!(child instanceof Element)) continue;\n\n if (child.localName === 'r') {\n const { runs, images } = parseRun(child, relationships, files, themeColors);\n for (const r of runs) {\n allRuns.push(isInserted\n ? { ...r, isInserted: true }\n : { ...r, isDeleted: true });\n }\n allImages.push(...images);\n } else {\n collectChildElement(child, allRuns, allImages, relationships, files, themeColors);\n }\n }\n}\n\nfunction collectFieldSimpleRuns(\n fldSimple: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const { runs, images } = collectDirectChildRuns(fldSimple, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n}\n\nfunction collectAlternateContent(\n mc: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const choice = getChildNS(mc, NS_MC, 'Choice');\n const target = choice ?? getChildNS(mc, NS_MC, 'Fallback');\n if (!target) return;\n\n const { runs, images } = collectDirectChildRuns(target, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n}\n\nfunction parseParagraph(\n para: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): { paragraph: DocxParagraph; images: DocxImage[] } {\n const pPr = getChildNS(para, NS_W, 'pPr');\n const styleResult = parseParagraphStyle(pPr, numberingMap);\n\n const { runs: allRuns, images: allImages } = collectDirectChildRuns(para, relationships, files, themeColors);\n\n const paragraph: DocxParagraph = buildParagraphFromStyle(styleResult, allRuns);\n return { paragraph, images: allImages };\n}\n\nfunction buildParagraphFromStyle(\n sr: ParagraphStyleResult,\n runs: ReadonlyArray<DocxRun>,\n): DocxParagraph {\n const paragraph: DocxParagraph = {\n type: 'paragraph',\n runs,\n style: sr.style,\n ...(sr.listLevel === undefined ? {} : { listLevel: sr.listLevel }),\n ...(sr.listType === undefined ? {} : { listType: sr.listType }),\n ...(sr.rtl === undefined ? {} : { rtl: sr.rtl }),\n ...(sr.alignment === undefined ? {} : { alignment: sr.alignment }),\n ...(sr.spacingBefore === undefined ? {} : { spacingBefore: sr.spacingBefore }),\n ...(sr.spacingAfter === undefined ? {} : { spacingAfter: sr.spacingAfter }),\n ...(sr.lineSpacing === undefined ? {} : { lineSpacing: sr.lineSpacing }),\n ...(sr.indentLeft === undefined ? {} : { indentLeft: sr.indentLeft }),\n ...(sr.indentRight === undefined ? {} : { indentRight: sr.indentRight }),\n ...(sr.indentHanging === undefined ? {} : { indentHanging: sr.indentHanging }),\n ...(sr.indentFirstLine === undefined ? {} : { indentFirstLine: sr.indentFirstLine }),\n ...(sr.shading === undefined ? {} : { shading: sr.shading }),\n ...(sr.borders === undefined ? {} : { borders: sr.borders }),\n };\n return paragraph;\n}\n\nfunction parseTableCellStyle(tcPr: Element | null): {\n colSpan: number; rowSpan: number; cellStyle?: DocxTableCellStyle;\n} {\n if (!tcPr) return { colSpan: 1, rowSpan: 1 };\n\n let colSpan = 1;\n let rowSpan = 1;\n\n const gridSpan = getChildNS(tcPr, NS_W, 'gridSpan');\n if (gridSpan) {\n colSpan = Number.parseInt(getAttrVal(gridSpan, NS_W, 'val') ?? '1', 10);\n }\n\n const vMerge = getChildNS(tcPr, NS_W, 'vMerge');\n if (vMerge) {\n const mergeVal = getAttrVal(vMerge, NS_W, 'val');\n if (!mergeVal || mergeVal === 'continue') {\n rowSpan = 0;\n }\n }\n\n const cellStyle = buildCellStyle(tcPr);\n return { colSpan, rowSpan, cellStyle };\n}\n\nfunction buildCellStyle(tcPr: Element): DocxTableCellStyle | undefined {\n const style: {\n backgroundColor?: string; verticalAlign?: string;\n width?: number; widthUnit?: string;\n borders?: NonNullable<DocxTableCellStyle['borders']>;\n paddings?: NonNullable<DocxTableCellStyle['paddings']>;\n } = {};\n let hasStyle = false;\n\n const shd = getChildNS(tcPr, NS_W, 'shd');\n if (shd) {\n const fill = getAttrVal(shd, NS_W, 'fill');\n if (fill && fill !== 'auto') { style.backgroundColor = `#${fill}`; hasStyle = true; }\n }\n\n const vAlign = getChildNS(tcPr, NS_W, 'vAlign');\n if (vAlign) {\n const val = getAttrVal(vAlign, NS_W, 'val');\n if (val) { style.verticalAlign = val; hasStyle = true; }\n }\n\n const tcW = getChildNS(tcPr, NS_W, 'tcW');\n if (tcW) {\n const w = getAttrVal(tcW, NS_W, 'w');\n const wType = getAttrVal(tcW, NS_W, 'type') ?? 'dxa';\n if (w) { style.width = Number.parseInt(w, 10); style.widthUnit = wType; hasStyle = true; }\n }\n\n const tcBorders = getChildNS(tcPr, NS_W, 'tcBorders');\n if (tcBorders) {\n style.borders = parseTableBorderSet(tcBorders);\n hasStyle = true;\n }\n\n const tcMar = getChildNS(tcPr, NS_W, 'tcMar');\n if (tcMar) {\n style.paddings = parseCellMargins(tcMar);\n hasStyle = true;\n }\n\n return hasStyle ? style : undefined;\n}\n\nfunction parseCellMargins(tcMar: Element): DocxTableCellStyle['paddings'] {\n const paddings: { top?: number; bottom?: number; left?: number; right?: number } = {};\n const sideToNs: Record<string, string> = { left: 'start', right: 'end' };\n for (const side of ['top', 'bottom', 'left', 'right'] as const) {\n const nsName = sideToNs[side] ?? side;\n const el = getChildNS(tcMar, NS_W, nsName) ?? getChildNS(tcMar, NS_W, side);\n if (el) {\n const w = getAttrVal(el, NS_W, 'w');\n if (w) paddings[side] = Number.parseInt(w, 10) / TWIPS_PER_PT;\n }\n }\n return paddings;\n}\n\nfunction parseTableBorderSet(borderParent: Element): DocxTableCellStyle['borders'] {\n const borders: {\n top?: DocxTableBorder; bottom?: DocxTableBorder;\n left?: DocxTableBorder; right?: DocxTableBorder;\n } = {};\n\n for (const side of ['top', 'bottom', 'left', 'right'] as const) {\n const el = getChildNS(borderParent, NS_W, side);\n if (el) borders[side] = parseTableBorderElement(el);\n }\n\n return borders;\n}\n\nfunction parseTableBorderElement(el: Element): DocxTableBorder {\n return parseSingleBorder(el);\n}\n\nfunction getDirectChildElements(parent: Element, ns: string, localName: string): Element[] {\n const result: Element[] = [];\n for (const child of Array.from(parent.childNodes)) {\n if (child instanceof Element && child.namespaceURI === ns && child.localName === localName) {\n result.push(child);\n }\n }\n return result;\n}\n\nfunction parseTableCell(\n tc: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n depth = 0,\n): DocxTableCell {\n const tcPr = getChildNS(tc, NS_W, 'tcPr');\n const { colSpan, rowSpan, cellStyle } = parseTableCellStyle(tcPr);\n\n const elements: (DocxParagraph | DocxTable)[] = [];\n for (const child of Array.from(tc.childNodes)) {\n if (!(child instanceof Element)) continue;\n\n if (child.localName === 'p' && child.namespaceURI === NS_W) {\n const { paragraph } = parseParagraph(child, relationships, files, numberingMap, themeColors);\n elements.push(paragraph);\n } else if (child.localName === 'tbl' && child.namespaceURI === NS_W\n && depth < MAX_TABLE_NESTING) {\n elements.push(parseTable(child, relationships, files, numberingMap, themeColors, depth + 1));\n }\n }\n\n return { elements, colSpan, rowSpan, cellStyle };\n}\n\nfunction parseTableStyle(tblPr: Element | null): DocxTableStyle | undefined {\n if (!tblPr) return undefined;\n\n const style: {\n width?: number; widthUnit?: string; borders?: NonNullable<DocxTableStyle['borders']>;\n } = {};\n let hasStyle = false;\n\n const tblW = getChildNS(tblPr, NS_W, 'tblW');\n if (tblW) {\n const w = getAttrVal(tblW, NS_W, 'w');\n const wType = getAttrVal(tblW, NS_W, 'type') ?? 'dxa';\n if (w) { style.width = Number.parseInt(w, 10); style.widthUnit = wType; hasStyle = true; }\n }\n\n const tblBorders = getChildNS(tblPr, NS_W, 'tblBorders');\n if (tblBorders) {\n const borders: {\n top?: DocxTableBorder; bottom?: DocxTableBorder;\n left?: DocxTableBorder; right?: DocxTableBorder;\n insideH?: DocxTableBorder; insideV?: DocxTableBorder;\n } = {};\n for (const side of ['top', 'bottom', 'left', 'right', 'insideH', 'insideV'] as const) {\n const el = getChildNS(tblBorders, NS_W, side);\n if (el) borders[side] = parseTableBorderElement(el);\n }\n style.borders = borders;\n hasStyle = true;\n }\n\n return hasStyle ? style : undefined;\n}\n\nfunction parseRowStyle(tr: Element): DocxTableRowStyle | undefined {\n const trPr = getChildNS(tr, NS_W, 'trPr');\n if (!trPr) return undefined;\n\n const style: { height?: number; isHeader?: boolean } = {};\n let hasStyle = false;\n\n const trHeight = getChildNS(trPr, NS_W, 'trHeight');\n if (trHeight) {\n const val = getAttrVal(trHeight, NS_W, 'val');\n if (val) { style.height = Number.parseInt(val, 10) / TWIPS_PER_PT; hasStyle = true; }\n }\n\n const tblHeader = getChildNS(trPr, NS_W, 'tblHeader');\n if (tblHeader) { style.isHeader = true; hasStyle = true; }\n\n return hasStyle ? style : undefined;\n}\n\n/**\n * Tables nest, so this recurses through cells — bounded by\n * {@link MAX_TABLE_NESTING}. A document is data from wherever the user got it,\n * and XML nesting compresses to almost nothing, so an unbounded walk turns a\n * tiny file into a stack overflow. Content past the limit is dropped rather\n * than crashing the import.\n */\nfunction parseTable(\n tbl: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n depth = 0,\n): DocxTable {\n const tblPr = getChildNS(tbl, NS_W, 'tblPr');\n const tableStyle = parseTableStyle(tblPr);\n\n const rows: DocxTableRow[] = [];\n const trElements = getDirectChildElements(tbl, NS_W, 'tr');\n\n for (const tr of trElements) {\n const cells: DocxTableCell[] = [];\n const tcElements = getDirectChildElements(tr, NS_W, 'tc');\n for (const tc of tcElements) {\n cells.push(parseTableCell(tc, relationships, files, numberingMap, themeColors, depth));\n }\n const rowStyle = parseRowStyle(tr);\n rows.push({ cells, rowStyle });\n }\n\n fixRowSpans(rows);\n return { type: 'table', rows, tableStyle };\n}\n\nfunction fixRowSpans(rows: ReadonlyArray<DocxTableRow>): void {\n if (rows.length === 0) return;\n\n const maxCols = Math.max(...rows.map(r => r.cells.length));\n for (let col = 0; col < maxCols; col++) {\n let startRow = -1;\n for (let row = 0; row < rows.length; row++) {\n const cell: DocxTableCell | undefined = rows[row].cells[col];\n if (!cell) continue;\n\n if (cell.rowSpan === 0 && startRow >= 0) {\n const startCell = rows[startRow].cells[col] as { rowSpan: number };\n startCell.rowSpan++;\n } else if (cell.rowSpan !== 0) {\n startRow = row;\n }\n }\n }\n}\n\nfunction extractPlainText(elements: ReadonlyArray<DocxElement>): string {\n const parts: string[] = [];\n\n for (const el of elements) {\n if (el.type === 'paragraph') {\n const text = el.runs.map(r => r.text).join('');\n if (text.trim()) parts.push(text);\n } else if (el.type === 'table') {\n for (const row of el.rows) {\n const cellTexts = row.cells.map(cell =>\n extractCellText(cell)\n );\n parts.push(cellTexts.join('\\t'));\n }\n }\n }\n\n return parts.join('\\n');\n}\n\nfunction extractCellText(cell: DocxTableCell): string {\n return cell.elements.map(el => {\n if (el.type === 'paragraph') {\n return el.runs.map(r => r.text).join('');\n }\n return '';\n }).join(' ');\n}\n\nfunction parseBodyElements(\n body: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): DocxElement[] {\n const elements: DocxElement[] = [];\n\n for (const child of Array.from(body.childNodes)) {\n if (!(child instanceof Element)) continue;\n\n parseBodyChild(child, elements, relationships, files, numberingMap, themeColors);\n }\n\n return elements;\n}\n\nfunction parseBodyChild(\n child: Element,\n elements: DocxElement[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): void {\n const localName = child.localName;\n\n if (localName === 'p') {\n const { paragraph, images } = parseParagraph(child, relationships, files, numberingMap, themeColors);\n elements.push(...images, paragraph);\n } else if (localName === 'tbl') {\n elements.push(parseTable(child, relationships, files, numberingMap, themeColors));\n } else if (localName === 'sdt' || localName === 'customXml' || localName === 'smartTag') {\n const content = localName === 'sdt'\n ? getChildNS(child, NS_W, 'sdtContent')\n : child;\n if (content) {\n elements.push(...parseBodyElements(content, relationships, files, numberingMap, themeColors));\n }\n } else if (localName === 'AlternateContent' && child.namespaceURI === NS_MC) {\n const choice = getChildNS(child, NS_MC, 'Choice');\n const target = choice ?? getChildNS(child, NS_MC, 'Fallback');\n if (target) {\n elements.push(...parseBodyElements(target, relationships, files, numberingMap, themeColors));\n }\n }\n}\n\nfunction parseThemeColors(files: Map<string, Uint8Array>): ThemeColorMap {\n const themeFile = files.get('word/theme/theme1.xml');\n if (!themeFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(themeFile));\n const map = new Map<string, string>();\n\n const themeElements = getChildNS(doc.documentElement, NS_A, 'themeElements');\n const clrScheme = themeElements ? getChildNS(themeElements, NS_A, 'clrScheme') : null;\n if (!clrScheme) return map;\n\n const colorNames = ['dk1', 'lt1', 'dk2', 'lt2', 'accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'];\n for (const name of colorNames) {\n const el = getChildNS(clrScheme, NS_A, name);\n if (!el) continue;\n\n const srgb = getChildNS(el, NS_A, 'srgbClr');\n if (srgb) {\n map.set(name, `#${srgb.getAttribute('val') ?? '000000'}`);\n continue;\n }\n const sys = getChildNS(el, NS_A, 'sysClr');\n if (sys) {\n map.set(name, `#${sys.getAttribute('lastClr') ?? sys.getAttribute('val') ?? '000000'}`);\n }\n }\n\n return map;\n}\n\nfunction parseFootnotesOrEndnotes(\n files: Map<string, Uint8Array>,\n fileName: string,\n relationships: Map<string, string>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): DocxFootnote[] {\n const file = files.get(fileName);\n if (!file) return [];\n\n const doc = parseXml(new TextDecoder().decode(file));\n const tagName = fileName.includes('footnote') ? 'footnote' : 'endnote';\n const noteElements = getAllChildrenNS(doc.documentElement, NS_W, tagName);\n const notes: DocxFootnote[] = [];\n\n for (const note of noteElements) {\n const id = getAttrVal(note, NS_W, 'id') ?? '';\n const noteType = getAttrVal(note, NS_W, 'type');\n if (noteType === 'separator' || noteType === 'continuationSeparator') continue;\n\n const paragraphs: DocxParagraph[] = [];\n const paraElements = getAllChildrenNS(note, NS_W, 'p');\n for (const para of paraElements) {\n const { paragraph } = parseParagraph(para, relationships, files, numberingMap, themeColors);\n paragraphs.push(paragraph);\n }\n\n if (paragraphs.length > 0) {\n notes.push({ id, paragraphs });\n }\n }\n\n return notes;\n}\n\ninterface ResolvedStyle {\n readonly runStyle?: DocxRunStyle;\n readonly paragraphAlignment?: string;\n readonly paragraphSpacingBefore?: number;\n readonly paragraphSpacingAfter?: number;\n readonly paragraphIndentLeft?: number;\n readonly paragraphIndentRight?: number;\n readonly paragraphIndentFirstLine?: number;\n}\n\ntype StyleMap = ReadonlyMap<string, ResolvedStyle>;\n\nfunction parseStyles(files: Map<string, Uint8Array>, themeColors?: ThemeColorMap): StyleMap {\n const stylesFile = files.get('word/styles.xml');\n if (!stylesFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(stylesFile));\n const rawStyles = new Map<string, { basedOn?: string; rPr?: Element; pPr?: Element }>();\n\n const defaultRunStyle = extractDocDefaults(doc, themeColors);\n const styleElements = getAllChildrenNS(doc.documentElement, NS_W, 'style');\n\n for (const styleEl of styleElements) {\n const styleId = getAttrVal(styleEl, NS_W, 'styleId') ?? '';\n if (!styleId) continue;\n\n const basedOnEl = getChildNS(styleEl, NS_W, 'basedOn');\n const basedOn = basedOnEl ? (getAttrVal(basedOnEl, NS_W, 'val') ?? undefined) : undefined;\n const rPr = getChildNS(styleEl, NS_W, 'rPr') ?? undefined;\n const pPr = getChildNS(styleEl, NS_W, 'pPr') ?? undefined;\n\n rawStyles.set(styleId, { basedOn, rPr, pPr });\n }\n\n return resolveAllStyles(rawStyles, defaultRunStyle, themeColors);\n}\n\nfunction extractDocDefaults(doc: Document, themeColors?: ThemeColorMap): DocxRunStyle {\n const docDefaults = getChildNS(doc.documentElement, NS_W, 'docDefaults');\n if (!docDefaults) return {};\n\n const rPrDefault = getChildNS(docDefaults, NS_W, 'rPrDefault');\n if (!rPrDefault) return {};\n\n const rPr = getChildNS(rPrDefault, NS_W, 'rPr');\n return parseRunStyle(rPr, themeColors);\n}\n\nfunction resolveAllStyles(\n rawStyles: Map<string, { basedOn?: string; rPr?: Element; pPr?: Element }>,\n defaultRunStyle: DocxRunStyle,\n themeColors?: ThemeColorMap,\n): Map<string, ResolvedStyle> {\n const resolved = new Map<string, ResolvedStyle>();\n const resolving = new Set<string>();\n\n for (const styleId of rawStyles.keys()) {\n resolveStyleChain(styleId, rawStyles, resolved, resolving, defaultRunStyle, themeColors);\n }\n\n return resolved;\n}\n\nfunction resolveStyleChain(\n styleId: string,\n rawStyles: Map<string, { basedOn?: string; rPr?: Element; pPr?: Element }>,\n resolved: Map<string, ResolvedStyle>,\n resolving: Set<string>,\n defaultRunStyle: DocxRunStyle,\n themeColors?: ThemeColorMap,\n): ResolvedStyle {\n const cached = resolved.get(styleId);\n if (cached !== undefined) return cached;\n if (resolving.has(styleId)) return {};\n resolving.add(styleId);\n\n const raw = rawStyles.get(styleId);\n if (!raw) { resolving.delete(styleId); return {}; }\n\n let base: ResolvedStyle = {};\n if (raw.basedOn) {\n base = resolveStyleChain(raw.basedOn, rawStyles, resolved, resolving, defaultRunStyle, themeColors);\n }\n\n const ownRun = raw.rPr ? parseRunStyle(raw.rPr, themeColors) : {};\n const mergedRun = mergeRunStyles(defaultRunStyle, base.runStyle ?? {}, ownRun);\n const ownPara = extractParagraphStyleProps(raw.pPr);\n\n const result: ResolvedStyle = {\n runStyle: mergedRun,\n paragraphAlignment: ownPara.alignment ?? base.paragraphAlignment,\n paragraphSpacingBefore: ownPara.spacingBefore ?? base.paragraphSpacingBefore,\n paragraphSpacingAfter: ownPara.spacingAfter ?? base.paragraphSpacingAfter,\n paragraphIndentLeft: ownPara.indentLeft ?? base.paragraphIndentLeft,\n paragraphIndentRight: ownPara.indentRight ?? base.paragraphIndentRight,\n paragraphIndentFirstLine: ownPara.indentFirstLine ?? base.paragraphIndentFirstLine,\n };\n\n resolved.set(styleId, result);\n resolving.delete(styleId);\n return result;\n}\n\nfunction mergeRunStyles(\n defaults: DocxRunStyle,\n base: DocxRunStyle,\n own: DocxRunStyle,\n): DocxRunStyle {\n return {\n ...mergeRunStylesText(defaults, base, own),\n ...mergeRunStylesDecoration(defaults, base, own),\n };\n}\n\nfunction mergeField<T>(own: T | undefined, base: T | undefined, def: T | undefined): T | undefined {\n return own ?? base ?? def;\n}\n\nfunction mergeRunStylesText(\n defaults: DocxRunStyle,\n base: DocxRunStyle,\n own: DocxRunStyle,\n): Partial<DocxRunStyle> {\n return {\n bold: mergeField(own.bold, base.bold, defaults.bold),\n italic: mergeField(own.italic, base.italic, defaults.italic),\n fontSize: mergeField(own.fontSize, base.fontSize, defaults.fontSize),\n color: mergeField(own.color, base.color, defaults.color),\n fontFamily: mergeField(own.fontFamily, base.fontFamily, defaults.fontFamily),\n rtl: mergeField(own.rtl, base.rtl, defaults.rtl),\n charSpacing: mergeField(own.charSpacing, base.charSpacing, defaults.charSpacing),\n hidden: mergeField(own.hidden, base.hidden, defaults.hidden),\n vertAlign: mergeField(own.vertAlign, base.vertAlign, defaults.vertAlign),\n };\n}\n\nfunction mergeRunStylesDecoration(\n defaults: DocxRunStyle,\n base: DocxRunStyle,\n own: DocxRunStyle,\n): Partial<DocxRunStyle> {\n return {\n underline: mergeField(own.underline, base.underline, defaults.underline),\n strikethrough: mergeField(own.strikethrough, base.strikethrough, defaults.strikethrough),\n doubleStrikethrough: mergeField(own.doubleStrikethrough, base.doubleStrikethrough, defaults.doubleStrikethrough),\n caps: mergeField(own.caps, base.caps, defaults.caps),\n smallCaps: mergeField(own.smallCaps, base.smallCaps, defaults.smallCaps),\n highlight: mergeField(own.highlight, base.highlight, defaults.highlight),\n backgroundColor: mergeField(own.backgroundColor, base.backgroundColor, defaults.backgroundColor),\n };\n}\n\nfunction extractParagraphStyleProps(pPr: Element | undefined): {\n alignment?: string; spacingBefore?: number; spacingAfter?: number;\n indentLeft?: number; indentRight?: number; indentFirstLine?: number;\n} {\n if (!pPr) return {};\n const result: {\n alignment?: string; spacingBefore?: number; spacingAfter?: number;\n indentLeft?: number; indentRight?: number; indentFirstLine?: number;\n } = {};\n\n const jcEl = getChildNS(pPr, NS_W, 'jc');\n if (jcEl) {\n const val = getAttrVal(jcEl, NS_W, 'val');\n if (val) result.alignment = val;\n }\n\n extractSpacingProps(pPr, result);\n extractIndentProps(pPr, result);\n\n return result;\n}\n\nfunction extractSpacingProps(\n pPr: Element,\n result: { spacingBefore?: number; spacingAfter?: number },\n): void {\n const spacing = getChildNS(pPr, NS_W, 'spacing');\n if (!spacing) return;\n const before = getAttrVal(spacing, NS_W, 'before');\n if (before) result.spacingBefore = Number.parseInt(before, 10) / TWIPS_PER_PT;\n const after = getAttrVal(spacing, NS_W, 'after');\n if (after) result.spacingAfter = Number.parseInt(after, 10) / TWIPS_PER_PT;\n}\n\nfunction extractIndentProps(\n pPr: Element,\n result: { indentLeft?: number; indentRight?: number; indentFirstLine?: number },\n): void {\n const ind = getChildNS(pPr, NS_W, 'ind');\n if (!ind) return;\n const left = getAttrVal(ind, NS_W, 'left') ?? getAttrVal(ind, NS_W, 'start');\n if (left) result.indentLeft = Number.parseInt(left, 10) / TWIPS_PER_PT;\n const right = getAttrVal(ind, NS_W, 'right') ?? getAttrVal(ind, NS_W, 'end');\n if (right) result.indentRight = Number.parseInt(right, 10) / TWIPS_PER_PT;\n const firstLine = getAttrVal(ind, NS_W, 'firstLine');\n if (firstLine) result.indentFirstLine = Number.parseInt(firstLine, 10) / TWIPS_PER_PT;\n}\n\nfunction parseComments(\n files: Map<string, Uint8Array>,\n relationships: Map<string, string>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): DocxComment[] {\n const file = files.get('word/comments.xml');\n if (!file) return [];\n\n const doc = parseXml(new TextDecoder().decode(file));\n const commentElements = getAllChildrenNS(doc.documentElement, NS_W, 'comment');\n const comments: DocxComment[] = [];\n\n for (const comment of commentElements) {\n const id = getAttrVal(comment, NS_W, 'id') ?? '';\n const author = getAttrVal(comment, NS_W, 'author') ?? '';\n const date = getAttrVal(comment, NS_W, 'date') ?? '';\n\n const paragraphs: DocxParagraph[] = [];\n const paraElements = getAllChildrenNS(comment, NS_W, 'p');\n for (const para of paraElements) {\n const { paragraph } = parseParagraph(para, relationships, files, numberingMap, themeColors);\n paragraphs.push(paragraph);\n }\n\n if (paragraphs.length > 0) {\n comments.push({ id, author, date, paragraphs });\n }\n }\n\n return comments;\n}\n\nfunction parseHeadersFooters(\n files: Map<string, Uint8Array>,\n relationships: Map<string, string>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): { headers: DocxElement[][]; footers: DocxElement[][] } {\n const headers: DocxElement[][] = [];\n const footers: DocxElement[][] = [];\n\n for (const [, target] of relationships) {\n if (!target.startsWith('header') && !target.startsWith('footer')) continue;\n const filePath = target.startsWith('/') ? target.substring(1) : `word/${target}`;\n const file = files.get(filePath);\n if (!file) continue;\n\n const doc = parseXml(new TextDecoder().decode(file));\n const body = doc.documentElement;\n const elements = parseBodyElements(body, relationships, files, numberingMap, themeColors);\n\n if (target.startsWith('header')) {\n headers.push(elements);\n } else {\n footers.push(elements);\n }\n }\n\n return { headers, footers };\n}\n\nfunction applyStyleInheritance(\n elements: DocxElement[],\n styleMap: StyleMap,\n): DocxElement[] {\n return elements.map(el => {\n if (el.type === 'paragraph') return applyStyleToParagraph(el, styleMap);\n if (el.type === 'table') return applyStyleToTable(el, styleMap);\n return el;\n });\n}\n\nfunction applyStyleToParagraph(para: DocxParagraph, styleMap: StyleMap): DocxParagraph {\n if (!para.style) return para;\n const resolved = styleMap.get(para.style);\n if (!resolved) return para;\n\n const mergedRuns = para.runs.map(run => applyStyleToRun(run, resolved));\n\n return {\n ...para,\n runs: mergedRuns,\n alignment: para.alignment ?? resolved.paragraphAlignment,\n spacingBefore: para.spacingBefore ?? resolved.paragraphSpacingBefore,\n spacingAfter: para.spacingAfter ?? resolved.paragraphSpacingAfter,\n indentLeft: para.indentLeft ?? resolved.paragraphIndentLeft,\n indentRight: para.indentRight ?? resolved.paragraphIndentRight,\n indentFirstLine: para.indentFirstLine ?? resolved.paragraphIndentFirstLine,\n };\n}\n\nfunction applyStyleToRun(run: DocxRun, resolved: ResolvedStyle): DocxRun {\n if (!resolved.runStyle) return run;\n const rs = resolved.runStyle;\n return { ...run, style: mergeRunStyles(rs, {}, run.style) };\n}\n\nfunction applyStyleToTable(table: DocxTable, styleMap: StyleMap): DocxTable {\n return {\n ...table,\n rows: table.rows.map(row => ({\n ...row,\n cells: row.cells.map(cell => ({\n ...cell,\n elements: cell.elements.map(el => {\n if (el.type === 'paragraph') return applyStyleToParagraph(el, styleMap);\n if (el.type === 'table') return applyStyleToTable(el, styleMap);\n return el;\n }),\n })),\n })),\n };\n}\n\nexport function parseDocx(data: Uint8Array): DocxParseResult {\n const files = readZip(data);\n const documentFile = files.get('word/document.xml');\n if (!documentFile) {\n throw new Error('Invalid DOCX: missing word/document.xml');\n }\n\n const relationships = parseRelationships(files);\n const numberingMap = parseNumberingDefinitions(files);\n const themeColors = parseThemeColors(files);\n const styleMap = parseStyles(files, themeColors);\n const doc = parseXml(new TextDecoder().decode(documentFile));\n const body = doc.getElementsByTagNameNS(NS_W, 'body')[0];\n if (!body) {\n throw new Error('Invalid DOCX: missing document body');\n }\n\n let elements = parseBodyElements(body, relationships, files, numberingMap, themeColors);\n elements = applyStyleInheritance(elements, styleMap);\n\n const { headers, footers } = parseHeadersFooters(files, relationships, numberingMap, themeColors);\n const footnotes = parseFootnotesOrEndnotes(files, 'word/footnotes.xml', relationships, numberingMap, themeColors);\n const endnotes = parseFootnotesOrEndnotes(files, 'word/endnotes.xml', relationships, numberingMap, themeColors);\n const comments = parseComments(files, relationships, numberingMap, themeColors);\n\n const plainText = extractPlainText(elements);\n return { elements, plainText, footnotes, endnotes, comments, headers, footers };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs","sources":["../../../packages/rte-package/src/lib/parsers/zip-reader.ts","../../../packages/rte-package/src/lib/parsers/docx-parser.ts"],"sourcesContent":["import { inflate } from './inflate';\n\nexport interface ZipEntry {\n readonly path: string;\n readonly compressedSize: number;\n readonly uncompressedSize: number;\n readonly compressionMethod: number;\n readonly crc32: number;\n readonly offset: number;\n readonly flags: number;\n}\n\nexport interface ZipReadOptions {\n readonly maxUncompressedSize?: number;\n /** @deprecated No longer enforced. Kept for API compatibility. */\n readonly maxFileCount?: number;\n readonly maxFileSize?: number;\n}\n\nconst DEFAULT_MAX_UNCOMPRESSED = 1024 * 1024 * 1024;\nconst DEFAULT_MAX_FILE_SIZE = 200 * 1024 * 1024;\n\nconst ZIP_LOCAL_HEADER = 0x04034b50;\nconst ZIP_CENTRAL_DIR = 0x02014b50;\nconst ZIP_END_OF_CENTRAL = 0x06054b50;\nconst ZIP64_END_OF_CENTRAL = 0x06064b50;\nconst ZIP64_END_LOCATOR = 0x07064b50;\n\nconst CRC32_TABLE = buildCrc32Table();\n\nfunction buildCrc32Table(): Uint32Array {\n const table = new Uint32Array(256);\n for (let i = 0; i < 256; i++) {\n let c = i;\n for (let j = 0; j < 8; j++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[i] = c;\n }\n return table;\n}\n\nfunction crc32(data: Uint8Array): number {\n let crc = 0xffffffff;\n for (const byte of data) {\n crc = CRC32_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction readU16LE(data: Uint8Array, offset: number): number {\n return data[offset] | (data[offset + 1] << 8);\n}\n\nfunction readU32LE(data: Uint8Array, offset: number): number {\n return (data[offset] | (data[offset + 1] << 8) | (data[offset + 2] << 16) | (data[offset + 3] << 24)) >>> 0;\n}\n\nfunction readU64LE(data: Uint8Array, offset: number): number {\n const low = readU32LE(data, offset);\n const high = readU32LE(data, offset + 4);\n return high * 0x100000000 + low;\n}\n\nfunction validateZipMagic(data: Uint8Array): void {\n if (data.length < 22) {\n throw new Error('Data too small to be a ZIP file');\n }\n if (readU32LE(data, 0) !== ZIP_LOCAL_HEADER) {\n throw new Error('Invalid ZIP file: missing PK signature');\n }\n}\n\nfunction validatePath(path: string): void {\n if (path.startsWith('/') || path.startsWith('\\\\')) {\n throw new Error(`Absolute path rejected: ${path}`);\n }\n const segments = path.split(/[/\\\\]/);\n for (const seg of segments) {\n if (seg === '..') {\n throw new Error(`Path traversal rejected: ${path}`);\n }\n }\n}\n\nfunction findEndOfCentralDir(data: Uint8Array): number {\n const searchStart = Math.max(0, data.length - 65557);\n for (let i = data.length - 22; i >= searchStart; i--) {\n if (readU32LE(data, i) === ZIP_END_OF_CENTRAL) {\n return i;\n }\n }\n throw new Error('Cannot find end of central directory');\n}\n\nfunction tryReadZip64Eocd(data: Uint8Array, eocdOffset: number): { entryCount: number; centralDirOffset: number } | null {\n if (eocdOffset < 20) return null;\n\n const locatorOffset = eocdOffset - 20;\n if (readU32LE(data, locatorOffset) !== ZIP64_END_LOCATOR) return null;\n\n const zip64EocdOffset = readU64LE(data, locatorOffset + 8);\n if (zip64EocdOffset + 56 > data.length) return null;\n if (readU32LE(data, zip64EocdOffset) !== ZIP64_END_OF_CENTRAL) return null;\n\n const entryCount = readU64LE(data, zip64EocdOffset + 32);\n const centralDirOffset = readU64LE(data, zip64EocdOffset + 48);\n\n return { entryCount, centralDirOffset };\n}\n\ninterface ZipSizes { uncompressedSize: number; compressedSize: number; localHeaderOffset: number; }\n\nfunction applyZip64Extra(zip64Extra: Zip64ExtraResult | null, current: ZipSizes): void {\n if (!zip64Extra) return;\n if (zip64Extra.uncompressedSize !== undefined) current.uncompressedSize = zip64Extra.uncompressedSize;\n if (zip64Extra.compressedSize !== undefined) current.compressedSize = zip64Extra.compressedSize;\n if (zip64Extra.localHeaderOffset !== undefined) current.localHeaderOffset = zip64Extra.localHeaderOffset;\n}\n\nfunction parseCentralDirectory(data: Uint8Array): ZipEntry[] {\n const eocdOffset = findEndOfCentralDir(data);\n\n const zip64 = tryReadZip64Eocd(data, eocdOffset);\n\n let entryCount: number;\n let centralDirOffset: number;\n\n if (zip64) {\n entryCount = zip64.entryCount;\n centralDirOffset = zip64.centralDirOffset;\n } else {\n entryCount = readU16LE(data, eocdOffset + 10);\n centralDirOffset = readU32LE(data, eocdOffset + 16);\n }\n\n const entries: ZipEntry[] = [];\n let pos = centralDirOffset;\n\n for (let i = 0; i < entryCount; i++) {\n if (pos + 46 > data.length) break;\n if (readU32LE(data, pos) !== ZIP_CENTRAL_DIR) break;\n\n const flags = readU16LE(data, pos + 8);\n const compressionMethod = readU16LE(data, pos + 10);\n const entryCrc32 = readU32LE(data, pos + 16);\n const nameLen = readU16LE(data, pos + 28);\n const extraLen = readU16LE(data, pos + 30);\n const commentLen = readU16LE(data, pos + 32);\n const sizes: ZipSizes = {\n compressedSize: readU32LE(data, pos + 20),\n uncompressedSize: readU32LE(data, pos + 24),\n localHeaderOffset: readU32LE(data, pos + 42),\n };\n\n const pathBytes = data.subarray(pos + 46, pos + 46 + nameLen);\n const path = new TextDecoder().decode(pathBytes);\n\n if (sizes.compressedSize === 0xFFFFFFFF || sizes.uncompressedSize === 0xFFFFFFFF || sizes.localHeaderOffset === 0xFFFFFFFF) {\n const zip64Extra = findZip64ExtraField(data, pos + 46 + nameLen, extraLen, sizes.uncompressedSize, sizes.compressedSize, sizes.localHeaderOffset);\n applyZip64Extra(zip64Extra, sizes);\n }\n\n entries.push({\n path,\n compressedSize: sizes.compressedSize,\n uncompressedSize: sizes.uncompressedSize,\n compressionMethod,\n crc32: entryCrc32,\n offset: sizes.localHeaderOffset,\n flags,\n });\n\n pos += 46 + nameLen + extraLen + commentLen;\n }\n\n return entries;\n}\n\ninterface Zip64ExtraResult {\n readonly uncompressedSize?: number;\n readonly compressedSize?: number;\n readonly localHeaderOffset?: number;\n}\n\nfunction findZip64ExtraField(\n data: Uint8Array,\n extraStart: number,\n extraLen: number,\n origUncompressed: number,\n origCompressed: number,\n origOffset: number,\n): Zip64ExtraResult | null {\n let offset = extraStart;\n const end = extraStart + extraLen;\n\n while (offset + 4 <= end) {\n const headerId = readU16LE(data, offset);\n const dataSize = readU16LE(data, offset + 2);\n if (headerId === 0x0001) {\n const result: { uncompressedSize?: number; compressedSize?: number; localHeaderOffset?: number } = {};\n let fieldOffset = offset + 4;\n if (origUncompressed === 0xFFFFFFFF && fieldOffset + 8 <= end) {\n result.uncompressedSize = readU64LE(data, fieldOffset);\n fieldOffset += 8;\n }\n if (origCompressed === 0xFFFFFFFF && fieldOffset + 8 <= end) {\n result.compressedSize = readU64LE(data, fieldOffset);\n fieldOffset += 8;\n }\n if (origOffset === 0xFFFFFFFF && fieldOffset + 8 <= end) {\n result.localHeaderOffset = readU64LE(data, fieldOffset);\n }\n return result;\n }\n offset += 4 + dataSize;\n }\n return null;\n}\n\nfunction checkEncrypted(entry: ZipEntry): void {\n if (entry.flags & 0x01) {\n throw new Error(`Encrypted ZIP entry not supported: ${entry.path}`);\n }\n}\n\nfunction extractEntryData(data: Uint8Array, entry: ZipEntry, maxFileSize: number): Uint8Array {\n checkEncrypted(entry);\n\n if (entry.uncompressedSize > maxFileSize) {\n throw new Error(`File too large: ${entry.path} (${entry.uncompressedSize} bytes)`);\n }\n\n const localOffset = entry.offset;\n if (localOffset + 30 > data.length) {\n throw new Error(`Invalid local header offset for ${entry.path}`);\n }\n if (readU32LE(data, localOffset) !== ZIP_LOCAL_HEADER) {\n throw new Error(`Invalid local header for ${entry.path}`);\n }\n\n const localNameLen = readU16LE(data, localOffset + 26);\n const localExtraLen = readU16LE(data, localOffset + 28);\n const dataStart = localOffset + 30 + localNameLen + localExtraLen;\n const compressedData = data.subarray(dataStart, dataStart + entry.compressedSize);\n\n let result: Uint8Array;\n if (entry.compressionMethod === 0) {\n result = compressedData.slice();\n } else if (entry.compressionMethod === 8) {\n // Bound the ACTUAL output, not the size the archive claims: an entry's\n // `uncompressedSize` is attacker-written metadata, so a crafted zip can\n // under-declare a bomb and slip past the checks above. CRC only catches\n // the lie after the stream has already inflated in memory.\n result = inflate(compressedData, { maxOutputBytes: maxFileSize });\n } else {\n throw new Error(`Unsupported compression method ${entry.compressionMethod} for ${entry.path}`);\n }\n\n const actualCrc = crc32(result);\n if (actualCrc !== entry.crc32) {\n throw new Error(`CRC32 mismatch for ${entry.path}: expected ${entry.crc32}, got ${actualCrc}`);\n }\n\n return result;\n}\n\nexport function listZipEntries(data: Uint8Array): ZipEntry[] {\n validateZipMagic(data);\n return parseCentralDirectory(data);\n}\n\nexport function extractZipEntry(data: Uint8Array, path: string, options?: ZipReadOptions): Uint8Array | null {\n validateZipMagic(data);\n const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;\n const entries = parseCentralDirectory(data);\n const entry = entries.find(e => e.path === path);\n if (!entry) return null;\n validatePath(entry.path);\n return extractEntryData(data, entry, maxFileSize);\n}\n\nexport function readZip(data: Uint8Array, options?: ZipReadOptions): Map<string, Uint8Array> {\n validateZipMagic(data);\n\n const maxUncompressed = options?.maxUncompressedSize ?? DEFAULT_MAX_UNCOMPRESSED;\n const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;\n\n const entries = parseCentralDirectory(data);\n\n let totalUncompressed = 0;\n for (const entry of entries) {\n totalUncompressed += entry.uncompressedSize;\n }\n if (totalUncompressed > maxUncompressed) {\n throw new Error(`Total uncompressed size too large: ${totalUncompressed} bytes (max ${maxUncompressed})`);\n }\n\n const files = new Map<string, Uint8Array>();\n\n for (const entry of entries) {\n if (entry.path.endsWith('/')) continue;\n validatePath(entry.path);\n files.set(entry.path, extractEntryData(data, entry, maxFileSize));\n }\n\n return files;\n}\n","import { readZip } from './zip-reader';\nimport { isValidImageMagicBytes } from './image-validator';\n\nexport type DocxVertAlign = 'superscript' | 'subscript';\nexport type DocxBreakType = 'page' | 'column' | 'textWrapping';\nexport type DocxListType = 'bullet' | 'numbered';\ntype FieldState = 'none' | 'begin' | 'separate';\n\nexport interface DocxRunStyle {\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: boolean;\n readonly strikethrough?: boolean;\n readonly doubleStrikethrough?: boolean;\n readonly caps?: boolean;\n readonly smallCaps?: boolean;\n readonly fontSize?: number;\n readonly color?: string;\n readonly fontFamily?: string;\n readonly highlight?: string;\n readonly backgroundColor?: string;\n readonly vertAlign?: DocxVertAlign;\n readonly rtl?: boolean;\n readonly charSpacing?: number;\n readonly hidden?: boolean;\n}\n\nexport interface DocxRun {\n readonly text: string;\n readonly style: DocxRunStyle;\n readonly href?: string;\n readonly breakType?: DocxBreakType;\n readonly isInserted?: boolean;\n readonly isDeleted?: boolean;\n readonly anchorId?: string;\n}\n\nexport interface DocxBorder {\n readonly style: string;\n readonly color: string;\n readonly size: number;\n}\n\nexport interface DocxParagraphBorders {\n readonly top?: DocxBorder;\n readonly bottom?: DocxBorder;\n readonly left?: DocxBorder;\n readonly right?: DocxBorder;\n}\n\nexport interface DocxParagraph {\n readonly type: 'paragraph';\n readonly runs: ReadonlyArray<DocxRun>;\n readonly style: string;\n readonly listLevel?: number;\n readonly listType?: DocxListType;\n readonly rtl?: boolean;\n readonly alignment?: string;\n readonly spacingBefore?: number;\n readonly spacingAfter?: number;\n readonly lineSpacing?: number;\n readonly indentLeft?: number;\n readonly indentRight?: number;\n readonly indentHanging?: number;\n readonly indentFirstLine?: number;\n readonly shading?: string;\n readonly borders?: DocxParagraphBorders;\n}\n\nexport interface DocxTableBorder {\n readonly style: string;\n readonly color: string;\n readonly size: number;\n}\n\nexport interface DocxTableCellStyle {\n readonly backgroundColor?: string;\n readonly verticalAlign?: string;\n readonly width?: number;\n readonly widthUnit?: string;\n readonly borders?: {\n readonly top?: DocxTableBorder;\n readonly bottom?: DocxTableBorder;\n readonly left?: DocxTableBorder;\n readonly right?: DocxTableBorder;\n };\n readonly paddings?: {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n };\n}\n\nexport interface DocxTableCell {\n readonly elements: ReadonlyArray<DocxParagraph | DocxTable>;\n readonly colSpan: number;\n readonly rowSpan: number;\n readonly cellStyle?: DocxTableCellStyle;\n}\n\nexport interface DocxTableRowStyle {\n readonly height?: number;\n readonly isHeader?: boolean;\n}\n\nexport interface DocxTableRow {\n readonly cells: ReadonlyArray<DocxTableCell>;\n readonly rowStyle?: DocxTableRowStyle;\n}\n\nexport interface DocxTableStyle {\n readonly width?: number;\n readonly widthUnit?: string;\n readonly borders?: {\n readonly top?: DocxTableBorder;\n readonly bottom?: DocxTableBorder;\n readonly left?: DocxTableBorder;\n readonly right?: DocxTableBorder;\n readonly insideH?: DocxTableBorder;\n readonly insideV?: DocxTableBorder;\n };\n}\n\nexport interface DocxTable {\n readonly type: 'table';\n readonly rows: ReadonlyArray<DocxTableRow>;\n readonly tableStyle?: DocxTableStyle;\n}\n\nexport interface DocxImage {\n readonly type: 'image';\n readonly dataUrl: string;\n readonly width: number;\n readonly height: number;\n readonly altText: string;\n}\n\nexport interface DocxFootnote {\n readonly id: string;\n readonly paragraphs: ReadonlyArray<DocxParagraph>;\n}\n\nexport type DocxElement = DocxParagraph | DocxTable | DocxImage;\n\nexport interface DocxComment {\n readonly id: string;\n readonly author: string;\n readonly date: string;\n readonly paragraphs: ReadonlyArray<DocxParagraph>;\n}\n\nexport interface DocxParseResult {\n readonly elements: ReadonlyArray<DocxElement>;\n readonly plainText: string;\n readonly footnotes: ReadonlyArray<DocxFootnote>;\n readonly endnotes: ReadonlyArray<DocxFootnote>;\n readonly comments: ReadonlyArray<DocxComment>;\n readonly headers: ReadonlyArray<ReadonlyArray<DocxElement>>;\n readonly footers: ReadonlyArray<ReadonlyArray<DocxElement>>;\n}\n\n/**\n * How deep nested tables may go before the parser stops descending.\n * Far beyond any real document; it exists so a crafted file cannot overflow\n * the stack.\n */\nconst MAX_TABLE_NESTING = 20;\n\nconst NS_W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\nconst NS_R = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst NS_WP = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\nconst NS_A = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nconst NS_MC = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n\ntype ThemeColorMap = ReadonlyMap<string, string>;\n\nconst SCHEME_COLOR_ALIASES: ReadonlyMap<string, string> = new Map([\n ['tx1', 'dk1'], ['tx2', 'dk2'],\n ['bg1', 'lt1'], ['bg2', 'lt2'],\n]);\n\nconst EMU_PER_PIXEL = 9525;\nconst TWIPS_PER_PT = 20;\n\nconst HIGHLIGHT_COLOR_MAP: Record<string, string> = {\n yellow: '#FFFF00',\n green: '#00FF00',\n cyan: '#00FFFF',\n magenta: '#FF00FF',\n blue: '#0000FF',\n red: '#FF0000',\n darkBlue: '#00008B',\n darkCyan: '#008B8B',\n darkGreen: '#006400',\n darkMagenta: '#8B008B',\n darkRed: '#8B0000',\n darkYellow: '#808000',\n darkGray: '#A9A9A9',\n lightGray: '#D3D3D3',\n black: '#000000',\n white: '#FFFFFF',\n};\n\nfunction parseXml(xmlString: string): Document {\n const parser = new DOMParser();\n return parser.parseFromString(xmlString, 'application/xml');\n}\n\nfunction getChildNS(parent: Element, ns: string, localName: string): Element | null {\n const children = parent.getElementsByTagNameNS(ns, localName);\n return children.length > 0 ? children[0] : null;\n}\n\nfunction getAllChildrenNS(parent: Element, ns: string, localName: string): Element[] {\n return Array.from(parent.getElementsByTagNameNS(ns, localName));\n}\n\nfunction getAttrVal(element: Element, ns: string, localName: string): string | null {\n const nsVal = element.getAttributeNS(ns, localName);\n if (nsVal) return nsVal;\n return element.getAttribute(localName);\n}\n\nfunction parseRelationships(files: Map<string, Uint8Array>): Map<string, string> {\n const relsFile = files.get('word/_rels/document.xml.rels');\n if (!relsFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(relsFile));\n const rels = doc.getElementsByTagName('Relationship');\n const map = new Map<string, string>();\n\n for (const rel of Array.from(rels)) {\n const id = rel.getAttribute('Id') ?? '';\n const target = rel.getAttribute('Target') ?? '';\n map.set(id, target);\n }\n\n return map;\n}\n\ninterface NumberingDefinition {\n readonly numFmt: string;\n}\n\nfunction parseNumberingDefinitions(files: Map<string, Uint8Array>): Map<string, Map<number, NumberingDefinition>> {\n const numFile = files.get('word/numbering.xml');\n if (!numFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(numFile));\n const abstractNums = new Map<string, Map<number, NumberingDefinition>>();\n\n const abstractNumEls = getAllChildrenNS(doc.documentElement, NS_W, 'abstractNum');\n for (const abstractNum of abstractNumEls) {\n const abstractId = getAttrVal(abstractNum, NS_W, 'abstractNumId') ?? '';\n const levels = new Map<number, NumberingDefinition>();\n\n const lvlEls = getAllChildrenNS(abstractNum, NS_W, 'lvl');\n for (const lvl of lvlEls) {\n const ilvl = Number.parseInt(getAttrVal(lvl, NS_W, 'ilvl') ?? '0', 10);\n const numFmtEl = getChildNS(lvl, NS_W, 'numFmt');\n const numFmt = numFmtEl ? (getAttrVal(numFmtEl, NS_W, 'val') ?? 'bullet') : 'bullet';\n levels.set(ilvl, { numFmt });\n }\n abstractNums.set(abstractId, levels);\n }\n\n const numMap = new Map<string, Map<number, NumberingDefinition>>();\n const numEls = getAllChildrenNS(doc.documentElement, NS_W, 'num');\n for (const num of numEls) {\n const numId = getAttrVal(num, NS_W, 'numId') ?? '';\n const abstractNumIdEl = getChildNS(num, NS_W, 'abstractNumId');\n const abstractId = abstractNumIdEl ? (getAttrVal(abstractNumIdEl, NS_W, 'val') ?? '') : '';\n const levels = abstractNums.get(abstractId);\n if (levels) {\n numMap.set(numId, levels);\n }\n }\n\n return numMap;\n}\n\nfunction parseRunStyle(rPr: Element | null, themeColors?: ThemeColorMap): DocxRunStyle {\n if (!rPr) return {};\n\n const result: {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n doubleStrikethrough?: boolean;\n caps?: boolean;\n smallCaps?: boolean;\n fontSize?: number;\n color?: string;\n fontFamily?: string;\n highlight?: string;\n backgroundColor?: string;\n vertAlign?: DocxVertAlign;\n rtl?: boolean;\n charSpacing?: number;\n hidden?: boolean;\n } = {};\n\n parseBoldItalic(rPr, result);\n if (getChildNS(rPr, NS_W, 'u')) result.underline = true;\n if (getChildNS(rPr, NS_W, 'strike')) result.strikethrough = true;\n if (getChildNS(rPr, NS_W, 'dstrike')) result.doubleStrikethrough = true;\n if (getChildNS(rPr, NS_W, 'caps')) result.caps = true;\n if (getChildNS(rPr, NS_W, 'smallCaps')) result.smallCaps = true;\n if (getChildNS(rPr, NS_W, 'vanish')) result.hidden = true;\n\n parseFontSizeAndColor(rPr, result, themeColors);\n parseFontFamily(rPr, result);\n parseHighlightAndShading(rPr, result);\n parseVertAlignAndRtl(rPr, result);\n parseCharSpacing(rPr, result);\n\n return result;\n}\n\nfunction parseBoldItalic(rPr: Element, result: { bold?: boolean; italic?: boolean }): void {\n const bEl = getChildNS(rPr, NS_W, 'b');\n if (bEl) {\n const bVal = getAttrVal(bEl, NS_W, 'val');\n result.bold = !bVal || bVal !== '0';\n }\n const iEl = getChildNS(rPr, NS_W, 'i');\n if (iEl) {\n const iVal = getAttrVal(iEl, NS_W, 'val');\n result.italic = !iVal || iVal !== '0';\n }\n}\n\nfunction parseFontSizeAndColor(\n rPr: Element,\n result: { fontSize?: number; color?: string },\n themeColors?: ThemeColorMap,\n): void {\n const sz = getChildNS(rPr, NS_W, 'sz');\n if (sz) {\n const val = getAttrVal(sz, NS_W, 'val');\n if (val) result.fontSize = Number.parseInt(val, 10) / 2;\n }\n\n const color = getChildNS(rPr, NS_W, 'color');\n if (color) {\n result.color = parseColorElement(color, themeColors);\n }\n}\n\nfunction parseColorElement(color: Element, themeColors?: ThemeColorMap): string | undefined {\n const val = getAttrVal(color, NS_W, 'val');\n if (val && val !== 'auto') return `#${val}`;\n if (!themeColors) return undefined;\n const themeColor = getAttrVal(color, NS_W, 'themeColor');\n if (!themeColor) return undefined;\n const resolved = resolveThemeColor(themeColor, themeColors);\n if (!resolved) return undefined;\n const tint = getAttrVal(color, NS_W, 'themeTint');\n const shade = getAttrVal(color, NS_W, 'themeShade');\n return applyTintShade(resolved, tint, shade);\n}\n\nfunction resolveThemeColor(themeColor: string, themeColors: ThemeColorMap): string | undefined {\n const mapped = SCHEME_COLOR_ALIASES.get(themeColor) ?? themeColor;\n return themeColors.get(mapped);\n}\n\nfunction applyTintShade(hex: string, tint: string | null, shade: string | null): string {\n if (!tint && !shade) return hex;\n\n const r = Number.parseInt(hex.substring(1, 3), 16);\n const g = Number.parseInt(hex.substring(3, 5), 16);\n const b = Number.parseInt(hex.substring(5, 7), 16);\n\n if (tint) {\n const t = Number.parseInt(tint, 16) / 255;\n return rgbToHex(\n Math.round(r + (255 - r) * t),\n Math.round(g + (255 - g) * t),\n Math.round(b + (255 - b) * t),\n );\n }\n\n if (shade) {\n const s = Number.parseInt(shade, 16) / 255;\n return rgbToHex(\n Math.round(r * s),\n Math.round(g * s),\n Math.round(b * s),\n );\n }\n\n return hex;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const toHex = (v: number): string => Math.min(255, Math.max(0, v)).toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nfunction parseCharSpacing(rPr: Element, result: { charSpacing?: number }): void {\n const spacing = getChildNS(rPr, NS_W, 'spacing');\n if (spacing) {\n const val = getAttrVal(spacing, NS_W, 'val');\n if (val) result.charSpacing = Number.parseInt(val, 10) / TWIPS_PER_PT;\n }\n}\n\nfunction parseFontFamily(rPr: Element, result: { fontFamily?: string }): void {\n const rFonts = getChildNS(rPr, NS_W, 'rFonts');\n if (rFonts) {\n const ascii = getAttrVal(rFonts, NS_W, 'ascii')\n ?? getAttrVal(rFonts, NS_W, 'hAnsi')\n ?? getAttrVal(rFonts, NS_W, 'cs');\n if (ascii) result.fontFamily = ascii;\n }\n}\n\nfunction parseHighlightAndShading(rPr: Element, result: { highlight?: string; backgroundColor?: string }): void {\n const highlightEl = getChildNS(rPr, NS_W, 'highlight');\n if (highlightEl) {\n const val = getAttrVal(highlightEl, NS_W, 'val');\n if (val && val !== 'none') {\n result.highlight = HIGHLIGHT_COLOR_MAP[val] ?? `#${val}`;\n }\n }\n\n const shd = getChildNS(rPr, NS_W, 'shd');\n if (shd) {\n const fill = getAttrVal(shd, NS_W, 'fill');\n if (fill && fill !== 'auto') result.backgroundColor = `#${fill}`;\n }\n}\n\nfunction parseVertAlignAndRtl(rPr: Element, result: { vertAlign?: DocxVertAlign; rtl?: boolean }): void {\n const vertAlignEl = getChildNS(rPr, NS_W, 'vertAlign');\n if (vertAlignEl) {\n const val = getAttrVal(vertAlignEl, NS_W, 'val');\n if (val === 'superscript' || val === 'subscript') {\n result.vertAlign = val;\n }\n }\n\n const rtlEl = getChildNS(rPr, NS_W, 'rtl');\n if (rtlEl) {\n const rtlVal = getAttrVal(rtlEl, NS_W, 'val');\n result.rtl = !rtlVal || rtlVal !== '0';\n }\n}\n\nfunction extractImageFromDrawing(\n drawing: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): DocxImage | null {\n const blipEl = getAllChildrenNS(drawing, NS_A, 'blip')[0];\n if (!blipEl) return null;\n\n const rId = blipEl.getAttributeNS(NS_R, 'embed') ?? '';\n if (!rId) return null;\n\n const target = relationships.get(rId);\n if (!target) return null;\n\n const imagePath = target.startsWith('/') ? target.substring(1) : `word/${target}`;\n const imageData = files.get(imagePath);\n if (!imageData || !isValidImageMagicBytes(imageData)) return null;\n\n let width = 200;\n let height = 200;\n const extent = getAllChildrenNS(drawing, NS_WP, 'extent')[0]\n ?? getAllChildrenNS(drawing, NS_A, 'ext')[0];\n if (extent) {\n const cx = extent.getAttribute('cx');\n const cy = extent.getAttribute('cy');\n if (cx) width = Math.round(Number.parseInt(cx, 10) / EMU_PER_PIXEL);\n if (cy) height = Math.round(Number.parseInt(cy, 10) / EMU_PER_PIXEL);\n }\n\n const mimeType = guessMimeType(imageData);\n const base64 = uint8ArrayToBase64(imageData);\n const dataUrl = `data:${mimeType};base64,${base64}`;\n\n const altText = drawing.getAttribute('descr') ?? '';\n\n return { type: 'image', dataUrl, width, height, altText };\n}\n\nfunction guessMimeType(data: Uint8Array): string {\n if (data[0] === 0xFF && data[1] === 0xD8) return 'image/jpeg';\n if (data[0] === 0x89 && data[1] === 0x50) return 'image/png';\n if (data[0] === 0x47 && data[1] === 0x49) return 'image/gif';\n if (data.length >= 12 && data[0] === 0x52 && data[8] === 0x57) return 'image/webp';\n return 'image/png';\n}\n\nfunction uint8ArrayToBase64(data: Uint8Array): string {\n let binary = '';\n const chunkSize = 8192;\n for (let i = 0; i < data.length; i += chunkSize) {\n const slice = data.subarray(i, Math.min(i + chunkSize, data.length));\n for (const byte of slice) {\n binary += String.fromCodePoint(byte);\n }\n }\n return btoa(binary);\n}\n\ninterface ParagraphStyleResult {\n readonly style: string;\n readonly listLevel?: number;\n readonly listType?: DocxListType;\n readonly rtl?: boolean;\n readonly alignment?: string;\n readonly spacingBefore?: number;\n readonly spacingAfter?: number;\n readonly lineSpacing?: number;\n readonly indentLeft?: number;\n readonly indentRight?: number;\n readonly indentHanging?: number;\n readonly indentFirstLine?: number;\n readonly shading?: string;\n readonly borders?: DocxParagraphBorders;\n}\n\nfunction parseParagraphStyle(\n pPr: Element | null,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n): ParagraphStyleResult {\n if (!pPr) return { style: '' };\n\n const pStyleEl = getChildNS(pPr, NS_W, 'pStyle');\n const style = (pStyleEl ? getAttrVal(pStyleEl, NS_W, 'val') : null) ?? '';\n\n return {\n style,\n ...parseListProperties(pPr, numberingMap),\n ...parseBidiAndAlignment(pPr),\n ...parseSpacingProperties(pPr),\n ...parseIndentProperties(pPr),\n ...parseParagraphBordersAndShading(pPr),\n };\n}\n\nfunction parseParagraphBordersAndShading(pPr: Element): {\n shading?: string; borders?: DocxParagraphBorders;\n} {\n const result: { shading?: string; borders?: DocxParagraphBorders } = {};\n\n const shd = getChildNS(pPr, NS_W, 'shd');\n if (shd) {\n const fill = getAttrVal(shd, NS_W, 'fill');\n if (fill && fill !== 'auto') result.shading = `#${fill}`;\n }\n\n const pBdr = getChildNS(pPr, NS_W, 'pBdr');\n if (pBdr) {\n result.borders = parseBorderSet(pBdr);\n }\n\n return result;\n}\n\nfunction parseBorderSet(borderParent: Element): DocxParagraphBorders {\n const borders: {\n top?: DocxBorder; bottom?: DocxBorder; left?: DocxBorder; right?: DocxBorder;\n } = {};\n\n const top = getChildNS(borderParent, NS_W, 'top');\n if (top) borders.top = parseSingleBorder(top);\n\n const bottom = getChildNS(borderParent, NS_W, 'bottom');\n if (bottom) borders.bottom = parseSingleBorder(bottom);\n\n const left = getChildNS(borderParent, NS_W, 'left');\n if (left) borders.left = parseSingleBorder(left);\n\n const right = getChildNS(borderParent, NS_W, 'right');\n if (right) borders.right = parseSingleBorder(right);\n\n return borders;\n}\n\nfunction parseSingleBorder(el: Element): DocxBorder {\n const style = getAttrVal(el, NS_W, 'val') ?? 'single';\n const colorVal = getAttrVal(el, NS_W, 'color');\n const color = colorVal && colorVal !== 'auto' ? `#${colorVal}` : '#000000';\n const sizeVal = getAttrVal(el, NS_W, 'sz');\n const size = sizeVal ? Number.parseInt(sizeVal, 10) / 8 : 1;\n return { style, color, size };\n}\n\nfunction parseListProperties(\n pPr: Element,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n): { listLevel?: number; listType?: 'bullet' | 'numbered' } {\n const numPr = getChildNS(pPr, NS_W, 'numPr');\n if (!numPr) return {};\n\n const ilvl = getChildNS(numPr, NS_W, 'ilvl');\n const level = ilvl ? Number.parseInt(getAttrVal(ilvl, NS_W, 'val') ?? '0', 10) : 0;\n const numId = getChildNS(numPr, NS_W, 'numId');\n const numIdVal = numId ? (getAttrVal(numId, NS_W, 'val') ?? '0') : '0';\n\n if (numIdVal === '0') return {};\n\n return { listLevel: level, listType: resolveListType(numberingMap, numIdVal, level) };\n}\n\nfunction resolveListType(\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n numIdVal: string,\n level: number,\n): 'bullet' | 'numbered' {\n const levels = numberingMap.get(numIdVal);\n if (!levels) return 'bullet';\n\n const def = levels.get(level);\n if (!def) return 'bullet';\n\n const fmt = def.numFmt;\n if (fmt === 'bullet' || fmt === 'none') return 'bullet';\n return 'numbered';\n}\n\nfunction parseBidiAndAlignment(pPr: Element): { rtl?: boolean; alignment?: string } {\n const result: { rtl?: boolean; alignment?: string } = {};\n\n const bidi = getChildNS(pPr, NS_W, 'bidi');\n if (bidi) {\n const bidiVal = getAttrVal(bidi, NS_W, 'val');\n result.rtl = !bidiVal || bidiVal !== '0';\n }\n\n const jcEl = getChildNS(pPr, NS_W, 'jc');\n if (jcEl) {\n const val = getAttrVal(jcEl, NS_W, 'val');\n if (val) result.alignment = val;\n }\n\n return result;\n}\n\nfunction parseSpacingProperties(pPr: Element): { spacingBefore?: number; spacingAfter?: number; lineSpacing?: number } {\n const spacing = getChildNS(pPr, NS_W, 'spacing');\n if (!spacing) return {};\n\n const result: { spacingBefore?: number; spacingAfter?: number; lineSpacing?: number } = {};\n\n const before = getAttrVal(spacing, NS_W, 'before');\n if (before) result.spacingBefore = Number.parseInt(before, 10) / TWIPS_PER_PT;\n\n const after = getAttrVal(spacing, NS_W, 'after');\n if (after) result.spacingAfter = Number.parseInt(after, 10) / TWIPS_PER_PT;\n\n const line = getAttrVal(spacing, NS_W, 'line');\n const lineRule = getAttrVal(spacing, NS_W, 'lineRule');\n if (line) {\n const lineVal = Number.parseInt(line, 10);\n if (lineRule === 'exact' || lineRule === 'atLeast') {\n result.lineSpacing = lineVal / TWIPS_PER_PT;\n } else {\n result.lineSpacing = lineVal / 240;\n }\n }\n\n return result;\n}\n\nfunction parseIndentProperties(pPr: Element): {\n indentLeft?: number; indentRight?: number; indentHanging?: number; indentFirstLine?: number;\n} {\n const ind = getChildNS(pPr, NS_W, 'ind');\n if (!ind) return {};\n\n const result: { indentLeft?: number; indentRight?: number; indentHanging?: number; indentFirstLine?: number } = {};\n\n const left = getAttrVal(ind, NS_W, 'left') ?? getAttrVal(ind, NS_W, 'start');\n if (left) result.indentLeft = Number.parseInt(left, 10) / TWIPS_PER_PT;\n\n const right = getAttrVal(ind, NS_W, 'right') ?? getAttrVal(ind, NS_W, 'end');\n if (right) result.indentRight = Number.parseInt(right, 10) / TWIPS_PER_PT;\n\n const hanging = getAttrVal(ind, NS_W, 'hanging');\n if (hanging) result.indentHanging = Number.parseInt(hanging, 10) / TWIPS_PER_PT;\n\n const firstLine = getAttrVal(ind, NS_W, 'firstLine');\n if (firstLine) result.indentFirstLine = Number.parseInt(firstLine, 10) / TWIPS_PER_PT;\n\n return result;\n}\n\nfunction parseRunChildren(\n run: Element,\n style: DocxRunStyle,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const runs: DocxRun[] = [];\n const images: DocxImage[] = [];\n\n for (const child of Array.from(run.childNodes)) {\n if (child instanceof Element) {\n parseRunChildElement(child, style, runs, images, relationships, files);\n }\n }\n\n return { runs, images };\n}\n\nconst SIMPLE_RUN_CHARS: Record<string, string> = {\n tab: '\\t',\n noBreakHyphen: '\\u2011',\n softHyphen: '\\u00AD',\n};\n\nfunction parseRunChildElement(\n child: Element,\n style: DocxRunStyle,\n runs: DocxRun[],\n images: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): void {\n const localName = child.localName;\n\n if (localName === 't' || localName === 'delText') {\n const text = child.textContent ?? '';\n if (text) runs.push({ text, style });\n return;\n }\n if (localName === 'br') {\n runs.push({ text: '\\n', style, breakType: parseBreakType(child) });\n return;\n }\n const simpleChar = SIMPLE_RUN_CHARS[localName];\n if (simpleChar) { runs.push({ text: simpleChar, style }); return; }\n if (localName === 'sym') {\n const symRun = parseSymbol(child, style);\n if (symRun) runs.push(symRun);\n return;\n }\n parseRunChildElementExtended(child, localName, style, runs, images, relationships, files);\n}\n\nfunction parseRunChildElementExtended(\n child: Element,\n localName: string,\n style: DocxRunStyle,\n runs: DocxRun[],\n images: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n): void {\n if (localName === 'drawing' || localName === 'pict') {\n const img = extractImageFromDrawing(child, relationships, files);\n if (img) images.push(img);\n return;\n }\n if (localName === 'footnoteReference' || localName === 'endnoteReference') {\n parseNoteReference(child, localName, style, runs);\n return;\n }\n if (localName === 'commentReference') {\n const commentId = getAttrVal(child, NS_W, 'id');\n if (commentId) {\n runs.push({ text: `*${commentId}`, style: { ...style, vertAlign: 'superscript' } });\n }\n }\n}\n\nfunction parseNoteReference(\n child: Element,\n localName: string,\n style: DocxRunStyle,\n runs: DocxRun[],\n): void {\n const noteId = getAttrVal(child, NS_W, 'id');\n if (noteId) {\n const marker = localName === 'footnoteReference' ? `[${noteId}]` : `{${noteId}}`;\n runs.push({ text: marker, style: { ...style, vertAlign: 'superscript' } });\n }\n}\n\nfunction parseBreakType(br: Element): DocxBreakType | undefined {\n const typeAttr = getAttrVal(br, NS_W, 'type');\n if (typeAttr === 'page') return 'page';\n if (typeAttr === 'column') return 'column';\n return undefined;\n}\n\nfunction parseSymbol(sym: Element, baseStyle: DocxRunStyle): DocxRun | null {\n const charCode = getAttrVal(sym, NS_W, 'char');\n if (!charCode) return null;\n const codePoint = Number.parseInt(charCode, 16);\n const text = String.fromCodePoint(codePoint);\n const font = getAttrVal(sym, NS_W, 'font');\n const style = font ? { ...baseStyle, fontFamily: font } : baseStyle;\n return { text, style };\n}\n\nfunction parseRun(\n run: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const rPr = getChildNS(run, NS_W, 'rPr');\n const style = parseRunStyle(rPr, themeColors);\n return parseRunChildren(run, style, relationships, files);\n}\n\nfunction parseHyperlinkRuns(\n hyperlink: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const allRuns: DocxRun[] = [];\n const allImages: DocxImage[] = [];\n\n const rId = hyperlink.getAttributeNS(NS_R, 'id') ?? hyperlink.getAttribute('r:id') ?? '';\n const target = rId ? (relationships.get(rId) ?? '') : '';\n const anchor = hyperlink.getAttributeNS(NS_W, 'anchor') ?? hyperlink.getAttribute('w:anchor') ?? '';\n const href = target || (anchor ? `#bookmark-${anchor}` : '');\n\n const runElements = getAllChildrenNS(hyperlink, NS_W, 'r');\n for (const run of runElements) {\n const { runs, images } = parseRun(run, relationships, files, themeColors);\n for (const r of runs) {\n if (href && r.text.trim()) {\n allRuns.push({\n text: r.text,\n style: { ...r.style, underline: true, color: r.style.color ?? '#0563C1' },\n href,\n });\n } else {\n allRuns.push(r);\n }\n }\n allImages.push(...images);\n }\n\n return { runs: allRuns, images: allImages };\n}\n\nfunction collectDirectChildRuns(\n para: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): { runs: DocxRun[]; images: DocxImage[] } {\n const allRuns: DocxRun[] = [];\n const allImages: DocxImage[] = [];\n let fieldState: FieldState = 'none';\n\n for (const child of Array.from(para.childNodes)) {\n if (!(child instanceof Element)) continue;\n fieldState = processDirectChild(child, fieldState, allRuns, allImages, relationships, files, themeColors);\n }\n\n return { runs: allRuns, images: allImages };\n}\n\nfunction processDirectChild(\n child: Element,\n fieldState: FieldState,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): FieldState {\n if (child.localName === 'r' && child.namespaceURI === NS_W) {\n return processRunInField(child, fieldState, allRuns, allImages, relationships, files, themeColors);\n }\n\n if (fieldState !== 'begin') {\n collectChildElement(child, allRuns, allImages, relationships, files, themeColors);\n }\n return fieldState;\n}\n\nfunction processRunInField(\n child: Element,\n fieldState: FieldState,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): FieldState {\n const fldCharResult = checkFieldChar(child);\n if (fldCharResult === 'begin') return 'begin';\n if (fldCharResult === 'separate') return 'separate';\n if (fldCharResult === 'end') return 'none';\n\n if (fieldState === 'begin') return fieldState;\n if (fieldState === 'separate') {\n const { runs, images } = parseRun(child, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n return fieldState;\n }\n\n collectChildElement(child, allRuns, allImages, relationships, files, themeColors);\n return fieldState;\n}\n\nfunction checkFieldChar(run: Element): 'begin' | 'separate' | 'end' | null {\n for (const child of Array.from(run.childNodes)) {\n if (child instanceof Element && child.localName === 'fldChar') {\n const fldCharType = getAttrVal(child, NS_W, 'fldCharType');\n if (fldCharType === 'begin') return 'begin';\n if (fldCharType === 'separate') return 'separate';\n if (fldCharType === 'end') return 'end';\n }\n }\n return null;\n}\n\nfunction collectChildElement(\n child: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const localName = child.localName;\n\n if (localName === 'r') {\n const { runs, images } = parseRun(child, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n } else if (localName === 'hyperlink') {\n const { runs, images } = parseHyperlinkRuns(child, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n } else if (localName === 'drawing') {\n const img = extractImageFromDrawing(child, relationships, files);\n if (img) allImages.push(img);\n } else if (localName === 'bookmarkStart') {\n const name = getAttrVal(child, NS_W, 'name');\n if (name && name !== '_GoBack') {\n allRuns.push({ text: '', style: {}, anchorId: `bookmark-${name}` });\n }\n } else if (localName === 'ins') {\n collectTrackChangeRuns(child, allRuns, allImages, relationships, files, true, themeColors);\n } else if (localName === 'del') {\n collectTrackChangeRuns(child, allRuns, allImages, relationships, files, false, themeColors);\n } else if (localName === 'fldSimple') {\n collectFieldSimpleRuns(child, allRuns, allImages, relationships, files, themeColors);\n } else if (isUnwrappableElement(localName)) {\n unwrapAndCollect(child, allRuns, allImages, relationships, files, themeColors);\n } else if (localName === 'AlternateContent' && child.namespaceURI === NS_MC) {\n collectAlternateContent(child, allRuns, allImages, relationships, files, themeColors);\n }\n}\n\nfunction isUnwrappableElement(localName: string): boolean {\n return localName === 'sdt' || localName === 'smartTag' || localName === 'customXml';\n}\n\nfunction unwrapAndCollect(\n wrapper: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const content = wrapper.localName === 'sdt'\n ? getChildNS(wrapper, NS_W, 'sdtContent')\n : wrapper;\n if (!content) return;\n\n const { runs, images } = collectDirectChildRuns(content, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n}\n\nfunction collectTrackChangeRuns(\n element: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n isInserted: boolean,\n themeColors?: ThemeColorMap,\n): void {\n for (const child of Array.from(element.childNodes)) {\n if (!(child instanceof Element)) continue;\n\n if (child.localName === 'r') {\n const { runs, images } = parseRun(child, relationships, files, themeColors);\n for (const r of runs) {\n allRuns.push(isInserted\n ? { ...r, isInserted: true }\n : { ...r, isDeleted: true });\n }\n allImages.push(...images);\n } else {\n collectChildElement(child, allRuns, allImages, relationships, files, themeColors);\n }\n }\n}\n\nfunction collectFieldSimpleRuns(\n fldSimple: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const { runs, images } = collectDirectChildRuns(fldSimple, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n}\n\nfunction collectAlternateContent(\n mc: Element,\n allRuns: DocxRun[],\n allImages: DocxImage[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n themeColors?: ThemeColorMap,\n): void {\n const choice = getChildNS(mc, NS_MC, 'Choice');\n const target = choice ?? getChildNS(mc, NS_MC, 'Fallback');\n if (!target) return;\n\n const { runs, images } = collectDirectChildRuns(target, relationships, files, themeColors);\n allRuns.push(...runs);\n allImages.push(...images);\n}\n\nfunction parseParagraph(\n para: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): { paragraph: DocxParagraph; images: DocxImage[] } {\n const pPr = getChildNS(para, NS_W, 'pPr');\n const styleResult = parseParagraphStyle(pPr, numberingMap);\n\n const { runs: allRuns, images: allImages } = collectDirectChildRuns(para, relationships, files, themeColors);\n\n const paragraph: DocxParagraph = buildParagraphFromStyle(styleResult, allRuns);\n return { paragraph, images: allImages };\n}\n\nfunction buildParagraphFromStyle(\n sr: ParagraphStyleResult,\n runs: ReadonlyArray<DocxRun>,\n): DocxParagraph {\n const paragraph: DocxParagraph = {\n type: 'paragraph',\n runs,\n style: sr.style,\n ...(sr.listLevel === undefined ? {} : { listLevel: sr.listLevel }),\n ...(sr.listType === undefined ? {} : { listType: sr.listType }),\n ...(sr.rtl === undefined ? {} : { rtl: sr.rtl }),\n ...(sr.alignment === undefined ? {} : { alignment: sr.alignment }),\n ...(sr.spacingBefore === undefined ? {} : { spacingBefore: sr.spacingBefore }),\n ...(sr.spacingAfter === undefined ? {} : { spacingAfter: sr.spacingAfter }),\n ...(sr.lineSpacing === undefined ? {} : { lineSpacing: sr.lineSpacing }),\n ...(sr.indentLeft === undefined ? {} : { indentLeft: sr.indentLeft }),\n ...(sr.indentRight === undefined ? {} : { indentRight: sr.indentRight }),\n ...(sr.indentHanging === undefined ? {} : { indentHanging: sr.indentHanging }),\n ...(sr.indentFirstLine === undefined ? {} : { indentFirstLine: sr.indentFirstLine }),\n ...(sr.shading === undefined ? {} : { shading: sr.shading }),\n ...(sr.borders === undefined ? {} : { borders: sr.borders }),\n };\n return paragraph;\n}\n\nfunction parseTableCellStyle(tcPr: Element | null): {\n colSpan: number; rowSpan: number; cellStyle?: DocxTableCellStyle;\n} {\n if (!tcPr) return { colSpan: 1, rowSpan: 1 };\n\n let colSpan = 1;\n let rowSpan = 1;\n\n const gridSpan = getChildNS(tcPr, NS_W, 'gridSpan');\n if (gridSpan) {\n colSpan = Number.parseInt(getAttrVal(gridSpan, NS_W, 'val') ?? '1', 10);\n }\n\n const vMerge = getChildNS(tcPr, NS_W, 'vMerge');\n if (vMerge) {\n const mergeVal = getAttrVal(vMerge, NS_W, 'val');\n if (!mergeVal || mergeVal === 'continue') {\n rowSpan = 0;\n }\n }\n\n const cellStyle = buildCellStyle(tcPr);\n return { colSpan, rowSpan, cellStyle };\n}\n\nfunction buildCellStyle(tcPr: Element): DocxTableCellStyle | undefined {\n const style: {\n backgroundColor?: string; verticalAlign?: string;\n width?: number; widthUnit?: string;\n borders?: NonNullable<DocxTableCellStyle['borders']>;\n paddings?: NonNullable<DocxTableCellStyle['paddings']>;\n } = {};\n let hasStyle = false;\n\n const shd = getChildNS(tcPr, NS_W, 'shd');\n if (shd) {\n const fill = getAttrVal(shd, NS_W, 'fill');\n if (fill && fill !== 'auto') { style.backgroundColor = `#${fill}`; hasStyle = true; }\n }\n\n const vAlign = getChildNS(tcPr, NS_W, 'vAlign');\n if (vAlign) {\n const val = getAttrVal(vAlign, NS_W, 'val');\n if (val) { style.verticalAlign = val; hasStyle = true; }\n }\n\n const tcW = getChildNS(tcPr, NS_W, 'tcW');\n if (tcW) {\n const w = getAttrVal(tcW, NS_W, 'w');\n const wType = getAttrVal(tcW, NS_W, 'type') ?? 'dxa';\n if (w) { style.width = Number.parseInt(w, 10); style.widthUnit = wType; hasStyle = true; }\n }\n\n const tcBorders = getChildNS(tcPr, NS_W, 'tcBorders');\n if (tcBorders) {\n style.borders = parseTableBorderSet(tcBorders);\n hasStyle = true;\n }\n\n const tcMar = getChildNS(tcPr, NS_W, 'tcMar');\n if (tcMar) {\n style.paddings = parseCellMargins(tcMar);\n hasStyle = true;\n }\n\n return hasStyle ? style : undefined;\n}\n\nfunction parseCellMargins(tcMar: Element): DocxTableCellStyle['paddings'] {\n const paddings: { top?: number; bottom?: number; left?: number; right?: number } = {};\n const sideToNs: Record<string, string> = { left: 'start', right: 'end' };\n for (const side of ['top', 'bottom', 'left', 'right'] as const) {\n const nsName = sideToNs[side] ?? side;\n const el = getChildNS(tcMar, NS_W, nsName) ?? getChildNS(tcMar, NS_W, side);\n if (el) {\n const w = getAttrVal(el, NS_W, 'w');\n if (w) paddings[side] = Number.parseInt(w, 10) / TWIPS_PER_PT;\n }\n }\n return paddings;\n}\n\nfunction parseTableBorderSet(borderParent: Element): DocxTableCellStyle['borders'] {\n const borders: {\n top?: DocxTableBorder; bottom?: DocxTableBorder;\n left?: DocxTableBorder; right?: DocxTableBorder;\n } = {};\n\n for (const side of ['top', 'bottom', 'left', 'right'] as const) {\n const el = getChildNS(borderParent, NS_W, side);\n if (el) borders[side] = parseTableBorderElement(el);\n }\n\n return borders;\n}\n\nfunction parseTableBorderElement(el: Element): DocxTableBorder {\n return parseSingleBorder(el);\n}\n\nfunction getDirectChildElements(parent: Element, ns: string, localName: string): Element[] {\n const result: Element[] = [];\n for (const child of Array.from(parent.childNodes)) {\n if (child instanceof Element && child.namespaceURI === ns && child.localName === localName) {\n result.push(child);\n }\n }\n return result;\n}\n\nfunction parseTableCell(\n tc: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n depth = 0,\n): DocxTableCell {\n const tcPr = getChildNS(tc, NS_W, 'tcPr');\n const { colSpan, rowSpan, cellStyle } = parseTableCellStyle(tcPr);\n\n const elements: (DocxParagraph | DocxTable)[] = [];\n for (const child of Array.from(tc.childNodes)) {\n if (!(child instanceof Element)) continue;\n\n if (child.localName === 'p' && child.namespaceURI === NS_W) {\n const { paragraph } = parseParagraph(child, relationships, files, numberingMap, themeColors);\n elements.push(paragraph);\n } else if (child.localName === 'tbl' && child.namespaceURI === NS_W\n && depth < MAX_TABLE_NESTING) {\n elements.push(parseTable(child, relationships, files, numberingMap, themeColors, depth + 1));\n }\n }\n\n return { elements, colSpan, rowSpan, cellStyle };\n}\n\nfunction parseTableStyle(tblPr: Element | null): DocxTableStyle | undefined {\n if (!tblPr) return undefined;\n\n const style: {\n width?: number; widthUnit?: string; borders?: NonNullable<DocxTableStyle['borders']>;\n } = {};\n let hasStyle = false;\n\n const tblW = getChildNS(tblPr, NS_W, 'tblW');\n if (tblW) {\n const w = getAttrVal(tblW, NS_W, 'w');\n const wType = getAttrVal(tblW, NS_W, 'type') ?? 'dxa';\n if (w) { style.width = Number.parseInt(w, 10); style.widthUnit = wType; hasStyle = true; }\n }\n\n const tblBorders = getChildNS(tblPr, NS_W, 'tblBorders');\n if (tblBorders) {\n const borders: {\n top?: DocxTableBorder; bottom?: DocxTableBorder;\n left?: DocxTableBorder; right?: DocxTableBorder;\n insideH?: DocxTableBorder; insideV?: DocxTableBorder;\n } = {};\n for (const side of ['top', 'bottom', 'left', 'right', 'insideH', 'insideV'] as const) {\n const el = getChildNS(tblBorders, NS_W, side);\n if (el) borders[side] = parseTableBorderElement(el);\n }\n style.borders = borders;\n hasStyle = true;\n }\n\n return hasStyle ? style : undefined;\n}\n\nfunction parseRowStyle(tr: Element): DocxTableRowStyle | undefined {\n const trPr = getChildNS(tr, NS_W, 'trPr');\n if (!trPr) return undefined;\n\n const style: { height?: number; isHeader?: boolean } = {};\n let hasStyle = false;\n\n const trHeight = getChildNS(trPr, NS_W, 'trHeight');\n if (trHeight) {\n const val = getAttrVal(trHeight, NS_W, 'val');\n if (val) { style.height = Number.parseInt(val, 10) / TWIPS_PER_PT; hasStyle = true; }\n }\n\n const tblHeader = getChildNS(trPr, NS_W, 'tblHeader');\n if (tblHeader) { style.isHeader = true; hasStyle = true; }\n\n return hasStyle ? style : undefined;\n}\n\n/**\n * Tables nest, so this recurses through cells — bounded by\n * {@link MAX_TABLE_NESTING}. A document is data from wherever the user got it,\n * and XML nesting compresses to almost nothing, so an unbounded walk turns a\n * tiny file into a stack overflow. Content past the limit is dropped rather\n * than crashing the import.\n */\nfunction parseTable(\n tbl: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n depth = 0,\n): DocxTable {\n const tblPr = getChildNS(tbl, NS_W, 'tblPr');\n const tableStyle = parseTableStyle(tblPr);\n\n const rows: DocxTableRow[] = [];\n const trElements = getDirectChildElements(tbl, NS_W, 'tr');\n\n for (const tr of trElements) {\n const cells: DocxTableCell[] = [];\n const tcElements = getDirectChildElements(tr, NS_W, 'tc');\n for (const tc of tcElements) {\n cells.push(parseTableCell(tc, relationships, files, numberingMap, themeColors, depth));\n }\n const rowStyle = parseRowStyle(tr);\n rows.push({ cells, rowStyle });\n }\n\n fixRowSpans(rows);\n return { type: 'table', rows, tableStyle };\n}\n\nfunction fixRowSpans(rows: ReadonlyArray<DocxTableRow>): void {\n if (rows.length === 0) return;\n\n const maxCols = Math.max(...rows.map(r => r.cells.length));\n for (let col = 0; col < maxCols; col++) {\n let startRow = -1;\n for (let row = 0; row < rows.length; row++) {\n const cell: DocxTableCell | undefined = rows[row].cells[col];\n if (!cell) continue;\n\n if (cell.rowSpan === 0 && startRow >= 0) {\n const startCell = rows[startRow].cells[col] as { rowSpan: number };\n startCell.rowSpan++;\n } else if (cell.rowSpan !== 0) {\n startRow = row;\n }\n }\n }\n}\n\nfunction extractPlainText(elements: ReadonlyArray<DocxElement>): string {\n const parts: string[] = [];\n\n for (const el of elements) {\n if (el.type === 'paragraph') {\n const text = el.runs.map(r => r.text).join('');\n if (text.trim()) parts.push(text);\n } else if (el.type === 'table') {\n for (const row of el.rows) {\n const cellTexts = row.cells.map(cell =>\n extractCellText(cell)\n );\n parts.push(cellTexts.join('\\t'));\n }\n }\n }\n\n return parts.join('\\n');\n}\n\nfunction extractCellText(cell: DocxTableCell): string {\n return cell.elements.map(el => {\n if (el.type === 'paragraph') {\n return el.runs.map(r => r.text).join('');\n }\n return '';\n }).join(' ');\n}\n\nfunction parseBodyElements(\n body: Element,\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): DocxElement[] {\n const elements: DocxElement[] = [];\n\n for (const child of Array.from(body.childNodes)) {\n if (!(child instanceof Element)) continue;\n\n parseBodyChild(child, elements, relationships, files, numberingMap, themeColors);\n }\n\n return elements;\n}\n\nfunction parseBodyChild(\n child: Element,\n elements: DocxElement[],\n relationships: Map<string, string>,\n files: Map<string, Uint8Array>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): void {\n const localName = child.localName;\n\n if (localName === 'p') {\n const { paragraph, images } = parseParagraph(child, relationships, files, numberingMap, themeColors);\n elements.push(...images, paragraph);\n } else if (localName === 'tbl') {\n elements.push(parseTable(child, relationships, files, numberingMap, themeColors));\n } else if (localName === 'sdt' || localName === 'customXml' || localName === 'smartTag') {\n const content = localName === 'sdt'\n ? getChildNS(child, NS_W, 'sdtContent')\n : child;\n if (content) {\n elements.push(...parseBodyElements(content, relationships, files, numberingMap, themeColors));\n }\n } else if (localName === 'AlternateContent' && child.namespaceURI === NS_MC) {\n const choice = getChildNS(child, NS_MC, 'Choice');\n const target = choice ?? getChildNS(child, NS_MC, 'Fallback');\n if (target) {\n elements.push(...parseBodyElements(target, relationships, files, numberingMap, themeColors));\n }\n }\n}\n\nfunction parseThemeColors(files: Map<string, Uint8Array>): ThemeColorMap {\n const themeFile = files.get('word/theme/theme1.xml');\n if (!themeFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(themeFile));\n const map = new Map<string, string>();\n\n const themeElements = getChildNS(doc.documentElement, NS_A, 'themeElements');\n const clrScheme = themeElements ? getChildNS(themeElements, NS_A, 'clrScheme') : null;\n if (!clrScheme) return map;\n\n const colorNames = ['dk1', 'lt1', 'dk2', 'lt2', 'accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink'];\n for (const name of colorNames) {\n const el = getChildNS(clrScheme, NS_A, name);\n if (!el) continue;\n\n const srgb = getChildNS(el, NS_A, 'srgbClr');\n if (srgb) {\n map.set(name, `#${srgb.getAttribute('val') ?? '000000'}`);\n continue;\n }\n const sys = getChildNS(el, NS_A, 'sysClr');\n if (sys) {\n map.set(name, `#${sys.getAttribute('lastClr') ?? sys.getAttribute('val') ?? '000000'}`);\n }\n }\n\n return map;\n}\n\nfunction parseFootnotesOrEndnotes(\n files: Map<string, Uint8Array>,\n fileName: string,\n relationships: Map<string, string>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): DocxFootnote[] {\n const file = files.get(fileName);\n if (!file) return [];\n\n const doc = parseXml(new TextDecoder().decode(file));\n const tagName = fileName.includes('footnote') ? 'footnote' : 'endnote';\n const noteElements = getAllChildrenNS(doc.documentElement, NS_W, tagName);\n const notes: DocxFootnote[] = [];\n\n for (const note of noteElements) {\n const id = getAttrVal(note, NS_W, 'id') ?? '';\n const noteType = getAttrVal(note, NS_W, 'type');\n if (noteType === 'separator' || noteType === 'continuationSeparator') continue;\n\n const paragraphs: DocxParagraph[] = [];\n const paraElements = getAllChildrenNS(note, NS_W, 'p');\n for (const para of paraElements) {\n const { paragraph } = parseParagraph(para, relationships, files, numberingMap, themeColors);\n paragraphs.push(paragraph);\n }\n\n if (paragraphs.length > 0) {\n notes.push({ id, paragraphs });\n }\n }\n\n return notes;\n}\n\ninterface ResolvedStyle {\n readonly runStyle?: DocxRunStyle;\n readonly paragraphAlignment?: string;\n readonly paragraphSpacingBefore?: number;\n readonly paragraphSpacingAfter?: number;\n readonly paragraphIndentLeft?: number;\n readonly paragraphIndentRight?: number;\n readonly paragraphIndentFirstLine?: number;\n}\n\ntype StyleMap = ReadonlyMap<string, ResolvedStyle>;\n\nfunction parseStyles(files: Map<string, Uint8Array>, themeColors?: ThemeColorMap): StyleMap {\n const stylesFile = files.get('word/styles.xml');\n if (!stylesFile) return new Map();\n\n const doc = parseXml(new TextDecoder().decode(stylesFile));\n const rawStyles = new Map<string, { basedOn?: string; rPr?: Element; pPr?: Element }>();\n\n const defaultRunStyle = extractDocDefaults(doc, themeColors);\n const styleElements = getAllChildrenNS(doc.documentElement, NS_W, 'style');\n\n for (const styleEl of styleElements) {\n const styleId = getAttrVal(styleEl, NS_W, 'styleId') ?? '';\n if (!styleId) continue;\n\n const basedOnEl = getChildNS(styleEl, NS_W, 'basedOn');\n const basedOn = basedOnEl ? (getAttrVal(basedOnEl, NS_W, 'val') ?? undefined) : undefined;\n const rPr = getChildNS(styleEl, NS_W, 'rPr') ?? undefined;\n const pPr = getChildNS(styleEl, NS_W, 'pPr') ?? undefined;\n\n rawStyles.set(styleId, { basedOn, rPr, pPr });\n }\n\n return resolveAllStyles(rawStyles, defaultRunStyle, themeColors);\n}\n\nfunction extractDocDefaults(doc: Document, themeColors?: ThemeColorMap): DocxRunStyle {\n const docDefaults = getChildNS(doc.documentElement, NS_W, 'docDefaults');\n if (!docDefaults) return {};\n\n const rPrDefault = getChildNS(docDefaults, NS_W, 'rPrDefault');\n if (!rPrDefault) return {};\n\n const rPr = getChildNS(rPrDefault, NS_W, 'rPr');\n return parseRunStyle(rPr, themeColors);\n}\n\nfunction resolveAllStyles(\n rawStyles: Map<string, { basedOn?: string; rPr?: Element; pPr?: Element }>,\n defaultRunStyle: DocxRunStyle,\n themeColors?: ThemeColorMap,\n): Map<string, ResolvedStyle> {\n const resolved = new Map<string, ResolvedStyle>();\n const resolving = new Set<string>();\n\n for (const styleId of rawStyles.keys()) {\n resolveStyleChain(styleId, rawStyles, resolved, resolving, defaultRunStyle, themeColors);\n }\n\n return resolved;\n}\n\nfunction resolveStyleChain(\n styleId: string,\n rawStyles: Map<string, { basedOn?: string; rPr?: Element; pPr?: Element }>,\n resolved: Map<string, ResolvedStyle>,\n resolving: Set<string>,\n defaultRunStyle: DocxRunStyle,\n themeColors?: ThemeColorMap,\n): ResolvedStyle {\n const cached = resolved.get(styleId);\n if (cached !== undefined) return cached;\n if (resolving.has(styleId)) return {};\n resolving.add(styleId);\n\n const raw = rawStyles.get(styleId);\n if (!raw) { resolving.delete(styleId); return {}; }\n\n let base: ResolvedStyle = {};\n if (raw.basedOn) {\n base = resolveStyleChain(raw.basedOn, rawStyles, resolved, resolving, defaultRunStyle, themeColors);\n }\n\n const ownRun = raw.rPr ? parseRunStyle(raw.rPr, themeColors) : {};\n const mergedRun = mergeRunStyles(defaultRunStyle, base.runStyle ?? {}, ownRun);\n const ownPara = extractParagraphStyleProps(raw.pPr);\n\n const result: ResolvedStyle = {\n runStyle: mergedRun,\n paragraphAlignment: ownPara.alignment ?? base.paragraphAlignment,\n paragraphSpacingBefore: ownPara.spacingBefore ?? base.paragraphSpacingBefore,\n paragraphSpacingAfter: ownPara.spacingAfter ?? base.paragraphSpacingAfter,\n paragraphIndentLeft: ownPara.indentLeft ?? base.paragraphIndentLeft,\n paragraphIndentRight: ownPara.indentRight ?? base.paragraphIndentRight,\n paragraphIndentFirstLine: ownPara.indentFirstLine ?? base.paragraphIndentFirstLine,\n };\n\n resolved.set(styleId, result);\n resolving.delete(styleId);\n return result;\n}\n\nfunction mergeRunStyles(\n defaults: DocxRunStyle,\n base: DocxRunStyle,\n own: DocxRunStyle,\n): DocxRunStyle {\n return {\n ...mergeRunStylesText(defaults, base, own),\n ...mergeRunStylesDecoration(defaults, base, own),\n };\n}\n\nfunction mergeField<T>(own: T | undefined, base: T | undefined, def: T | undefined): T | undefined {\n return own ?? base ?? def;\n}\n\nfunction mergeRunStylesText(\n defaults: DocxRunStyle,\n base: DocxRunStyle,\n own: DocxRunStyle,\n): Partial<DocxRunStyle> {\n return {\n bold: mergeField(own.bold, base.bold, defaults.bold),\n italic: mergeField(own.italic, base.italic, defaults.italic),\n fontSize: mergeField(own.fontSize, base.fontSize, defaults.fontSize),\n color: mergeField(own.color, base.color, defaults.color),\n fontFamily: mergeField(own.fontFamily, base.fontFamily, defaults.fontFamily),\n rtl: mergeField(own.rtl, base.rtl, defaults.rtl),\n charSpacing: mergeField(own.charSpacing, base.charSpacing, defaults.charSpacing),\n hidden: mergeField(own.hidden, base.hidden, defaults.hidden),\n vertAlign: mergeField(own.vertAlign, base.vertAlign, defaults.vertAlign),\n };\n}\n\nfunction mergeRunStylesDecoration(\n defaults: DocxRunStyle,\n base: DocxRunStyle,\n own: DocxRunStyle,\n): Partial<DocxRunStyle> {\n return {\n underline: mergeField(own.underline, base.underline, defaults.underline),\n strikethrough: mergeField(own.strikethrough, base.strikethrough, defaults.strikethrough),\n doubleStrikethrough: mergeField(own.doubleStrikethrough, base.doubleStrikethrough, defaults.doubleStrikethrough),\n caps: mergeField(own.caps, base.caps, defaults.caps),\n smallCaps: mergeField(own.smallCaps, base.smallCaps, defaults.smallCaps),\n highlight: mergeField(own.highlight, base.highlight, defaults.highlight),\n backgroundColor: mergeField(own.backgroundColor, base.backgroundColor, defaults.backgroundColor),\n };\n}\n\nfunction extractParagraphStyleProps(pPr: Element | undefined): {\n alignment?: string; spacingBefore?: number; spacingAfter?: number;\n indentLeft?: number; indentRight?: number; indentFirstLine?: number;\n} {\n if (!pPr) return {};\n const result: {\n alignment?: string; spacingBefore?: number; spacingAfter?: number;\n indentLeft?: number; indentRight?: number; indentFirstLine?: number;\n } = {};\n\n const jcEl = getChildNS(pPr, NS_W, 'jc');\n if (jcEl) {\n const val = getAttrVal(jcEl, NS_W, 'val');\n if (val) result.alignment = val;\n }\n\n extractSpacingProps(pPr, result);\n extractIndentProps(pPr, result);\n\n return result;\n}\n\nfunction extractSpacingProps(\n pPr: Element,\n result: { spacingBefore?: number; spacingAfter?: number },\n): void {\n const spacing = getChildNS(pPr, NS_W, 'spacing');\n if (!spacing) return;\n const before = getAttrVal(spacing, NS_W, 'before');\n if (before) result.spacingBefore = Number.parseInt(before, 10) / TWIPS_PER_PT;\n const after = getAttrVal(spacing, NS_W, 'after');\n if (after) result.spacingAfter = Number.parseInt(after, 10) / TWIPS_PER_PT;\n}\n\nfunction extractIndentProps(\n pPr: Element,\n result: { indentLeft?: number; indentRight?: number; indentFirstLine?: number },\n): void {\n const ind = getChildNS(pPr, NS_W, 'ind');\n if (!ind) return;\n const left = getAttrVal(ind, NS_W, 'left') ?? getAttrVal(ind, NS_W, 'start');\n if (left) result.indentLeft = Number.parseInt(left, 10) / TWIPS_PER_PT;\n const right = getAttrVal(ind, NS_W, 'right') ?? getAttrVal(ind, NS_W, 'end');\n if (right) result.indentRight = Number.parseInt(right, 10) / TWIPS_PER_PT;\n const firstLine = getAttrVal(ind, NS_W, 'firstLine');\n if (firstLine) result.indentFirstLine = Number.parseInt(firstLine, 10) / TWIPS_PER_PT;\n}\n\nfunction parseComments(\n files: Map<string, Uint8Array>,\n relationships: Map<string, string>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): DocxComment[] {\n const file = files.get('word/comments.xml');\n if (!file) return [];\n\n const doc = parseXml(new TextDecoder().decode(file));\n const commentElements = getAllChildrenNS(doc.documentElement, NS_W, 'comment');\n const comments: DocxComment[] = [];\n\n for (const comment of commentElements) {\n const id = getAttrVal(comment, NS_W, 'id') ?? '';\n const author = getAttrVal(comment, NS_W, 'author') ?? '';\n const date = getAttrVal(comment, NS_W, 'date') ?? '';\n\n const paragraphs: DocxParagraph[] = [];\n const paraElements = getAllChildrenNS(comment, NS_W, 'p');\n for (const para of paraElements) {\n const { paragraph } = parseParagraph(para, relationships, files, numberingMap, themeColors);\n paragraphs.push(paragraph);\n }\n\n if (paragraphs.length > 0) {\n comments.push({ id, author, date, paragraphs });\n }\n }\n\n return comments;\n}\n\nfunction parseHeadersFooters(\n files: Map<string, Uint8Array>,\n relationships: Map<string, string>,\n numberingMap: Map<string, Map<number, NumberingDefinition>>,\n themeColors?: ThemeColorMap,\n): { headers: DocxElement[][]; footers: DocxElement[][] } {\n const headers: DocxElement[][] = [];\n const footers: DocxElement[][] = [];\n\n for (const [, target] of relationships) {\n if (!target.startsWith('header') && !target.startsWith('footer')) continue;\n const filePath = target.startsWith('/') ? target.substring(1) : `word/${target}`;\n const file = files.get(filePath);\n if (!file) continue;\n\n const doc = parseXml(new TextDecoder().decode(file));\n const body = doc.documentElement;\n const elements = parseBodyElements(body, relationships, files, numberingMap, themeColors);\n\n if (target.startsWith('header')) {\n headers.push(elements);\n } else {\n footers.push(elements);\n }\n }\n\n return { headers, footers };\n}\n\nfunction applyStyleInheritance(\n elements: DocxElement[],\n styleMap: StyleMap,\n): DocxElement[] {\n return elements.map(el => {\n if (el.type === 'paragraph') return applyStyleToParagraph(el, styleMap);\n if (el.type === 'table') return applyStyleToTable(el, styleMap);\n return el;\n });\n}\n\nfunction applyStyleToParagraph(para: DocxParagraph, styleMap: StyleMap): DocxParagraph {\n if (!para.style) return para;\n const resolved = styleMap.get(para.style);\n if (!resolved) return para;\n\n const mergedRuns = para.runs.map(run => applyStyleToRun(run, resolved));\n\n return {\n ...para,\n runs: mergedRuns,\n alignment: para.alignment ?? resolved.paragraphAlignment,\n spacingBefore: para.spacingBefore ?? resolved.paragraphSpacingBefore,\n spacingAfter: para.spacingAfter ?? resolved.paragraphSpacingAfter,\n indentLeft: para.indentLeft ?? resolved.paragraphIndentLeft,\n indentRight: para.indentRight ?? resolved.paragraphIndentRight,\n indentFirstLine: para.indentFirstLine ?? resolved.paragraphIndentFirstLine,\n };\n}\n\nfunction applyStyleToRun(run: DocxRun, resolved: ResolvedStyle): DocxRun {\n if (!resolved.runStyle) return run;\n const rs = resolved.runStyle;\n return { ...run, style: mergeRunStyles(rs, {}, run.style) };\n}\n\nfunction applyStyleToTable(table: DocxTable, styleMap: StyleMap): DocxTable {\n return {\n ...table,\n rows: table.rows.map(row => ({\n ...row,\n cells: row.cells.map(cell => ({\n ...cell,\n elements: cell.elements.map(el => {\n if (el.type === 'paragraph') return applyStyleToParagraph(el, styleMap);\n if (el.type === 'table') return applyStyleToTable(el, styleMap);\n return el;\n }),\n })),\n })),\n };\n}\n\nexport function parseDocx(data: Uint8Array): DocxParseResult {\n const files = readZip(data);\n const documentFile = files.get('word/document.xml');\n if (!documentFile) {\n throw new Error('Invalid DOCX: missing word/document.xml');\n }\n\n const relationships = parseRelationships(files);\n const numberingMap = parseNumberingDefinitions(files);\n const themeColors = parseThemeColors(files);\n const styleMap = parseStyles(files, themeColors);\n const doc = parseXml(new TextDecoder().decode(documentFile));\n const body = doc.getElementsByTagNameNS(NS_W, 'body')[0];\n if (!body) {\n throw new Error('Invalid DOCX: missing document body');\n }\n\n let elements = parseBodyElements(body, relationships, files, numberingMap, themeColors);\n elements = applyStyleInheritance(elements, styleMap);\n\n const { headers, footers } = parseHeadersFooters(files, relationships, numberingMap, themeColors);\n const footnotes = parseFootnotesOrEndnotes(files, 'word/footnotes.xml', relationships, numberingMap, themeColors);\n const endnotes = parseFootnotesOrEndnotes(files, 'word/endnotes.xml', relationships, numberingMap, themeColors);\n const comments = parseComments(files, relationships, numberingMap, themeColors);\n\n const plainText = extractPlainText(elements);\n return { elements, plainText, footnotes, endnotes, comments, headers, footers };\n}\n"],"names":[],"mappings":"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"}
|