@gilav21/shadcn-angular-rte 0.1.2 → 0.2.1
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-B8BeJWtY.mjs → gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs} +63 -38
- package/fesm2022/gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs.map +1 -0
- package/fesm2022/{gilav21-shadcn-angular-rte-docx-to-editor-html-Cl9eIhkC.mjs → gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs} +43 -33
- package/fesm2022/gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs.map +1 -0
- package/fesm2022/{gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-CfjU_y-y.mjs → gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs} +3561 -1901
- package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs.map +1 -0
- package/fesm2022/gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs +69 -0
- package/fesm2022/gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs.map +1 -0
- package/fesm2022/{gilav21-shadcn-angular-rte-pdf-readable-DmE-CIxv.mjs → gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.mjs} +445 -124
- package/fesm2022/gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.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 +365 -114
- package/types/gilav21-shadcn-angular-rte.d.ts.map +1 -1
- package/fesm2022/gilav21-shadcn-angular-rte-docx-parser-B8BeJWtY.mjs.map +0 -1
- package/fesm2022/gilav21-shadcn-angular-rte-docx-to-editor-html-Cl9eIhkC.mjs.map +0 -1
- package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-CfjU_y-y.mjs.map +0 -1
- package/fesm2022/gilav21-shadcn-angular-rte-pdf-readable-DmE-CIxv.mjs.map +0 -1
- package/theme.css +0 -159
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.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\n/**\n * OOXML `ST_HexColor`: exactly six hex digits (`auto` and anything else is not a\n * colour). The model's colour fields hold only this form, so a value read out of\n * the document can never carry a quote, a `;` or a `url(` into the markup.\n */\nfunction hexColor(raw: string | null | undefined): string | undefined {\n return raw && /^[\\dA-Fa-f]{6}$/.test(raw) ? `#${raw}` : undefined;\n}\n\nconst TEXT_ALIGN_BY_JC: ReadonlyMap<string, string> = new Map([\n ['both', 'justify'], ['distribute', 'justify'],\n ['center', 'center'],\n ['left', 'left'], ['start', 'left'],\n ['right', 'right'], ['end', 'right'],\n]);\n\nconst VERTICAL_ALIGN_BY_VALIGN: ReadonlyMap<string, string> = new Map([\n ['top', 'top'], ['center', 'middle'], ['bottom', 'bottom'],\n]);\n\n/** The CSS `text-align` keyword for an OOXML `w:jc` value, or `undefined` for a value outside the vocabulary. */\nexport function textAlignFromJc(jc: string): string | undefined {\n return TEXT_ALIGN_BY_JC.get(jc);\n}\n\n/** The CSS `vertical-align` keyword for an OOXML `w:vAlign` value, or `undefined` for a value outside the vocabulary. */\nexport function verticalAlignFromVAlign(vAlign: string): string | undefined {\n return VERTICAL_ALIGN_BY_VALIGN.get(vAlign);\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 hexColor(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 const t = tint ? hexFraction(tint) : undefined;\n if (t !== undefined) {\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 const s = shade ? hexFraction(shade) : undefined;\n if (s !== undefined) {\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\n/** `00`-`FF` as 0-1; `undefined` for a value that is not hex, so a bad tint leaves the colour as it was. */\nfunction hexFraction(value: string): number | undefined {\n return /^[\\dA-Fa-f]{1,2}$/.test(value) ? Number.parseInt(value, 16) / 255 : undefined;\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 // An own-property lookup: `constructor` and `__proto__` are not highlight names.\n const highlight = val && Object.hasOwn(HIGHLIGHT_COLOR_MAP, val) ? HIGHLIGHT_COLOR_MAP[val] : hexColor(val);\n if (highlight) result.highlight = highlight;\n }\n\n const shd = getChildNS(rPr, NS_W, 'shd');\n if (shd) {\n const fill = hexColor(getAttrVal(shd, NS_W, 'fill'));\n if (fill) 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 = hexColor(getAttrVal(shd, NS_W, 'fill'));\n if (fill) 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 color = hexColor(getAttrVal(el, NS_W, 'color')) ?? '#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 alignment = textAlignFromJc(getAttrVal(jcEl, NS_W, 'val') ?? '');\n if (alignment) result.alignment = alignment;\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 = hexColor(getAttrVal(shd, NS_W, 'fill'));\n if (fill) { style.backgroundColor = fill; hasStyle = true; }\n }\n\n const vAlign = getChildNS(tcPr, NS_W, 'vAlign');\n if (vAlign) {\n const verticalAlign = verticalAlignFromVAlign(getAttrVal(vAlign, NS_W, 'val') ?? '');\n if (verticalAlign) { style.verticalAlign = verticalAlign; 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 const sys = getChildNS(el, NS_A, 'sysClr');\n const hex = hexColor(srgb ? srgb.getAttribute('val') : sys?.getAttribute('lastClr'));\n if (hex) map.set(name, hex);\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 alignment = textAlignFromJc(getAttrVal(jcEl, NS_W, 'val') ?? '');\n if (alignment) result.alignment = alignment;\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,3 +1,5 @@
|
|
|
1
|
+
import { e as escapeAttribute, c as cssColor, a as cssFontFamily, s as safeLinkHref, i as imageDataUrl } from './gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Renders a DocxParseResult into inline-styled HTML suitable for
|
|
3
5
|
* insertion into the rich text editor. Uses only inline styles
|
|
@@ -81,6 +83,12 @@ function renderListItem(elements, index, baseLevel, output) {
|
|
|
81
83
|
return index + 1;
|
|
82
84
|
}
|
|
83
85
|
// --- Paragraph rendering ---
|
|
86
|
+
/**
|
|
87
|
+
* The parser only ever produces these keywords; a model built by hand may hold
|
|
88
|
+
* anything, and a keyword is written into a declaration unquoted.
|
|
89
|
+
*/
|
|
90
|
+
const TEXT_ALIGNS = new Set(['left', 'right', 'center', 'justify']);
|
|
91
|
+
const VERTICAL_ALIGNS = new Set(['top', 'middle', 'bottom']);
|
|
84
92
|
function renderParagraph(p) {
|
|
85
93
|
const pageBreak = p.runs.some(r => r.breakType === 'page');
|
|
86
94
|
let prefix = '';
|
|
@@ -94,16 +102,16 @@ function renderParagraph(p) {
|
|
|
94
102
|
const level = Math.min(Number(headingMatch[1]), 6);
|
|
95
103
|
const tag = `h${level}`;
|
|
96
104
|
const styleAttr = buildParagraphStyle(p);
|
|
97
|
-
const styleStr = styleAttr ? ` style="${styleAttr}"` : '';
|
|
105
|
+
const styleStr = styleAttr ? ` style="${escapeAttribute(styleAttr)}"` : '';
|
|
98
106
|
return `${prefix}<${tag}${dirAttr}${styleStr}>${content}</${tag}>`;
|
|
99
107
|
}
|
|
100
108
|
const styleAttr = buildParagraphStyle(p);
|
|
101
|
-
const styleStr = styleAttr ? ` style="${styleAttr}"` : '';
|
|
109
|
+
const styleStr = styleAttr ? ` style="${escapeAttribute(styleAttr)}"` : '';
|
|
102
110
|
return `${prefix}<p${dirAttr}${styleStr}>${content}</p>`;
|
|
103
111
|
}
|
|
104
112
|
function buildParagraphStyle(p) {
|
|
105
113
|
const styles = [];
|
|
106
|
-
if (p.alignment) {
|
|
114
|
+
if (p.alignment && TEXT_ALIGNS.has(p.alignment)) {
|
|
107
115
|
styles.push(`text-align:${p.alignment}`);
|
|
108
116
|
}
|
|
109
117
|
if (p.spacingBefore != null) {
|
|
@@ -132,8 +140,9 @@ function buildParagraphStyle(p) {
|
|
|
132
140
|
styles.push(`line-height:${p.lineSpacing.toFixed(2)}`);
|
|
133
141
|
}
|
|
134
142
|
}
|
|
135
|
-
|
|
136
|
-
|
|
143
|
+
const shading = cssColor(p.shading);
|
|
144
|
+
if (shading) {
|
|
145
|
+
styles.push(`background-color:${shading}`);
|
|
137
146
|
}
|
|
138
147
|
if (p.borders) {
|
|
139
148
|
appendParagraphBorders(styles, p.borders);
|
|
@@ -156,7 +165,8 @@ function appendParagraphBorders(styles, borders) {
|
|
|
156
165
|
function formatBorder(b) {
|
|
157
166
|
const widthPt = Math.max(b.size, 0.5);
|
|
158
167
|
const style = mapBorderStyle(b.style);
|
|
159
|
-
|
|
168
|
+
const color = cssColor(b.color);
|
|
169
|
+
return color ? `${widthPt}pt ${style} ${color}` : `${widthPt}pt ${style}`;
|
|
160
170
|
}
|
|
161
171
|
const DASHED_BORDER_STYLES = new Set(['dashed', 'dashDotStroked', 'dashSmallGap']);
|
|
162
172
|
const DOTTED_BORDER_STYLES = new Set(['dotted', 'dotDash', 'dotDotDash']);
|
|
@@ -215,23 +225,26 @@ function applyRunFormatting(html, style) {
|
|
|
215
225
|
const spanStyle = buildRunSpanStyle(style);
|
|
216
226
|
const dirAttr = style.rtl ? ' dir="rtl"' : '';
|
|
217
227
|
if (spanStyle || dirAttr) {
|
|
218
|
-
const styleAttr = spanStyle ? ` style="${spanStyle}"` : '';
|
|
228
|
+
const styleAttr = spanStyle ? ` style="${escapeAttribute(spanStyle)}"` : '';
|
|
219
229
|
result = `<span${dirAttr}${styleAttr}>${result}</span>`;
|
|
220
230
|
}
|
|
221
231
|
return result;
|
|
222
232
|
}
|
|
223
233
|
function buildRunSpanStyle(style) {
|
|
224
234
|
const parts = [];
|
|
225
|
-
|
|
226
|
-
|
|
235
|
+
const color = cssColor(style.color);
|
|
236
|
+
if (color)
|
|
237
|
+
parts.push(`color:${color}`);
|
|
227
238
|
if (style.fontSize)
|
|
228
239
|
parts.push(`font-size:${style.fontSize}pt`);
|
|
229
240
|
if (style.fontFamily)
|
|
230
|
-
parts.push(`font-family:${
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
241
|
+
parts.push(`font-family:${cssFontFamily(style.fontFamily)}`);
|
|
242
|
+
const highlight = cssColor(style.highlight);
|
|
243
|
+
if (highlight)
|
|
244
|
+
parts.push(`background-color:${highlight}`);
|
|
245
|
+
const background = cssColor(style.backgroundColor);
|
|
246
|
+
if (background)
|
|
247
|
+
parts.push(`background-color:${background}`);
|
|
235
248
|
if (style.charSpacing)
|
|
236
249
|
parts.push(`letter-spacing:${formatPt(style.charSpacing)}pt`);
|
|
237
250
|
if (style.smallCaps)
|
|
@@ -248,17 +261,20 @@ function applyTrackChanges(html, run) {
|
|
|
248
261
|
return html;
|
|
249
262
|
}
|
|
250
263
|
function applyHyperlink(html, run) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
return html
|
|
264
|
+
const href = run.href ? safeLinkHref(run.href) : undefined;
|
|
265
|
+
if (href === undefined)
|
|
266
|
+
return html;
|
|
267
|
+
return `<a href="${escapeAttribute(href)}" target="_blank" rel="noopener noreferrer">${html}</a>`;
|
|
255
268
|
}
|
|
256
269
|
// --- Image rendering ---
|
|
257
270
|
function renderImage(img) {
|
|
271
|
+
const src = imageDataUrl(img.dataUrl);
|
|
272
|
+
if (src === undefined)
|
|
273
|
+
return '';
|
|
258
274
|
const widthAttr = img.width > 0 ? ` width="${img.width}"` : '';
|
|
259
275
|
const heightAttr = img.height > 0 ? ` height="${img.height}"` : '';
|
|
260
|
-
const alt =
|
|
261
|
-
return `<img src="${
|
|
276
|
+
const alt = escapeAttribute(img.altText || 'image');
|
|
277
|
+
return `<img src="${escapeAttribute(src)}"${widthAttr}${heightAttr} alt="${alt}">`;
|
|
262
278
|
}
|
|
263
279
|
// --- Table rendering ---
|
|
264
280
|
function buildBorderFallbacks(table) {
|
|
@@ -286,7 +302,7 @@ function splitTableRows(rows) {
|
|
|
286
302
|
}
|
|
287
303
|
function renderTable(table) {
|
|
288
304
|
const tableStyle = buildTableStyle(table.tableStyle);
|
|
289
|
-
const styleStr = tableStyle ? ` style="${tableStyle}"` : '';
|
|
305
|
+
const styleStr = tableStyle ? ` style="${escapeAttribute(tableStyle)}"` : '';
|
|
290
306
|
const borderFallbacks = buildBorderFallbacks(table);
|
|
291
307
|
const { headerRows, bodyRows } = splitTableRows(table.rows);
|
|
292
308
|
const totalRows = table.rows.length;
|
|
@@ -339,16 +355,17 @@ function renderTableCell(cell, tag, fallbacks, rowIndex, colIndex, totalRows, to
|
|
|
339
355
|
attrs.push(`rowspan="${cell.rowSpan}"`);
|
|
340
356
|
const cellStyle = buildCellStyle(cell.cellStyle, fallbacks, rowIndex, colIndex, totalRows, totalCols);
|
|
341
357
|
if (cellStyle)
|
|
342
|
-
attrs.push(`style="${cellStyle}"`);
|
|
358
|
+
attrs.push(`style="${escapeAttribute(cellStyle)}"`);
|
|
343
359
|
const attrStr = attrs.length > 0 ? ` ${attrs.join(' ')}` : '';
|
|
344
360
|
const content = renderCellContent(cell.elements);
|
|
345
361
|
return `<${tag}${attrStr}>${content}</${tag}>`;
|
|
346
362
|
}
|
|
347
363
|
function buildCellStyle(style, fallbacks, rowIndex, colIndex, totalRows, totalCols) {
|
|
348
364
|
const parts = [];
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
365
|
+
const background = cssColor(style?.backgroundColor);
|
|
366
|
+
if (background)
|
|
367
|
+
parts.push(`background-color:${background}`);
|
|
368
|
+
if (style?.verticalAlign && VERTICAL_ALIGNS.has(style.verticalAlign))
|
|
352
369
|
parts.push(`vertical-align:${style.verticalAlign}`);
|
|
353
370
|
if (style?.width) {
|
|
354
371
|
const unit = style.widthUnit === 'pct' ? '%' : 'pt';
|
|
@@ -411,13 +428,6 @@ function escapeHtml(text) {
|
|
|
411
428
|
.replaceAll('"', '"')
|
|
412
429
|
.replaceAll('\t', '\u2003');
|
|
413
430
|
}
|
|
414
|
-
function escapeAttr(value) {
|
|
415
|
-
return value
|
|
416
|
-
.replaceAll('&', '&')
|
|
417
|
-
.replaceAll('"', '"')
|
|
418
|
-
.replaceAll('<', '<')
|
|
419
|
-
.replaceAll('>', '>');
|
|
420
|
-
}
|
|
421
431
|
|
|
422
432
|
export { renderDocxForEditor };
|
|
423
|
-
//# sourceMappingURL=gilav21-shadcn-angular-rte-docx-to-editor-html-
|
|
433
|
+
//# sourceMappingURL=gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs","sources":["../../../packages/rte-package/src/lib/parsers/docx-to-editor-html.ts"],"sourcesContent":["import type {\n DocxParseResult,\n DocxElement,\n DocxParagraph,\n DocxTable,\n DocxImage,\n DocxRun,\n DocxRunStyle,\n DocxTableCell,\n DocxTableRow,\n DocxBorder,\n DocxTableBorder,\n DocxParagraphBorders,\n DocxTableCellStyle,\n DocxTableStyle,\n} from './docx-parser';\nimport { cssColor, cssFontFamily, escapeAttribute, imageDataUrl, safeLinkHref } from './markup-safety';\n\n/**\n * Renders a DocxParseResult into inline-styled HTML suitable for\n * insertion into the rich text editor. Uses only inline styles\n * (no Tailwind classes) so the editor sanitizer preserves them.\n */\nexport function renderDocxForEditor(result: DocxParseResult): string {\n return renderElements(result.elements);\n}\n\nfunction renderElements(elements: ReadonlyArray<DocxElement>): string {\n const parts: string[] = [];\n let i = 0;\n\n while (i < elements.length) {\n const el = elements[i];\n\n if (el.type === 'paragraph' && el.listLevel != null && el.listType) {\n i = renderListGroup(elements, i, parts);\n } else if (el.type === 'paragraph') {\n parts.push(renderParagraph(el));\n i++;\n } else if (el.type === 'table') {\n parts.push(renderTable(el));\n i++;\n } else {\n parts.push(renderImage(el));\n i++;\n }\n }\n\n return parts.join('');\n}\n\n// --- List grouping ---\n\nfunction hasNestedListChild(\n elements: ReadonlyArray<DocxElement>,\n index: number,\n baseLevel: number,\n): boolean {\n if (index + 1 >= elements.length) return false;\n const next = elements[index + 1];\n return next.type === 'paragraph' &&\n next.listLevel != null &&\n next.listType != null &&\n next.listLevel > baseLevel;\n}\n\nfunction renderListGroup(\n elements: ReadonlyArray<DocxElement>,\n startIndex: number,\n output: string[],\n): number {\n const first = elements[startIndex];\n if (first.type !== 'paragraph') return startIndex;\n const listType = first.listType ?? 'bullet';\n const baseLevel = first.listLevel ?? 0;\n const tag = listType === 'numbered' ? 'ol' : 'ul';\n\n output.push(`<${tag}>`);\n let i = startIndex;\n\n while (i < elements.length) {\n const el = elements[i];\n if (el.type !== 'paragraph' || el.listLevel == null || el.listType == null) break;\n if (el.listLevel < baseLevel) break;\n\n if (el.listLevel === baseLevel && el.listType === listType) {\n i = renderListItem(elements, i, baseLevel, output);\n } else if (el.listLevel > baseLevel) {\n i = renderListGroup(elements, i, output);\n } else {\n break;\n }\n }\n\n output.push(`</${tag}>`);\n return i;\n}\n\nfunction renderListItem(\n elements: ReadonlyArray<DocxElement>,\n index: number,\n baseLevel: number,\n output: string[],\n): number {\n const el = elements[index];\n if (el.type !== 'paragraph') return index + 1;\n output.push(`<li>${renderRuns(el.runs)}`);\n\n if (hasNestedListChild(elements, index, baseLevel)) {\n const nextIndex = renderListGroup(elements, index + 1, output);\n output.push('</li>');\n return nextIndex;\n }\n\n output.push('</li>');\n return index + 1;\n}\n\n// --- Paragraph rendering ---\n\n/**\n * The parser only ever produces these keywords; a model built by hand may hold\n * anything, and a keyword is written into a declaration unquoted.\n */\nconst TEXT_ALIGNS: ReadonlySet<string> = new Set(['left', 'right', 'center', 'justify']);\nconst VERTICAL_ALIGNS: ReadonlySet<string> = new Set(['top', 'middle', 'bottom']);\n\nfunction renderParagraph(p: DocxParagraph): string {\n const pageBreak = p.runs.some(r => r.breakType === 'page');\n let prefix = '';\n if (pageBreak) {\n prefix = '<hr>';\n }\n\n const dirAttr = p.rtl ? ' dir=\"rtl\"' : '';\n const content = renderRuns(p.runs) || '<br>';\n\n const headingMatch = /^Heading(\\d)$/i.exec(p.style);\n if (headingMatch) {\n const level = Math.min(Number(headingMatch[1]), 6);\n const tag = `h${level}`;\n const styleAttr = buildParagraphStyle(p);\n const styleStr = styleAttr ? ` style=\"${escapeAttribute(styleAttr)}\"` : '';\n return `${prefix}<${tag}${dirAttr}${styleStr}>${content}</${tag}>`;\n }\n\n const styleAttr = buildParagraphStyle(p);\n const styleStr = styleAttr ? ` style=\"${escapeAttribute(styleAttr)}\"` : '';\n return `${prefix}<p${dirAttr}${styleStr}>${content}</p>`;\n}\n\nfunction buildParagraphStyle(p: DocxParagraph): string {\n const styles: string[] = [];\n\n if (p.alignment && TEXT_ALIGNS.has(p.alignment)) {\n styles.push(`text-align:${p.alignment}`);\n }\n if (p.spacingBefore != null) {\n styles.push(`margin-top:${formatPt(p.spacingBefore)}pt`);\n }\n if (p.spacingAfter != null) {\n styles.push(`margin-bottom:${formatPt(p.spacingAfter)}pt`);\n }\n if (p.indentLeft != null) {\n styles.push(`margin-left:${formatPt(p.indentLeft)}pt`);\n }\n if (p.indentRight != null) {\n styles.push(`margin-right:${formatPt(p.indentRight)}pt`);\n }\n if (p.indentFirstLine != null) {\n styles.push(`text-indent:${formatPt(p.indentFirstLine)}pt`);\n }\n if (p.indentHanging != null && p.indentFirstLine == null) {\n styles.push(`text-indent:-${formatPt(p.indentHanging)}pt`);\n }\n if (p.lineSpacing != null) {\n if (p.lineSpacing > 4) {\n styles.push(`line-height:${p.lineSpacing.toFixed(1)}pt`);\n } else {\n styles.push(`line-height:${p.lineSpacing.toFixed(2)}`);\n }\n }\n const shading = cssColor(p.shading);\n if (shading) {\n styles.push(`background-color:${shading}`);\n }\n if (p.borders) {\n appendParagraphBorders(styles, p.borders);\n }\n\n return styles.join(';');\n}\n\nfunction appendParagraphBorders(styles: string[], borders: DocxParagraphBorders): void {\n if (borders.top) styles.push(`border-top:${formatBorder(borders.top)}`);\n if (borders.bottom) styles.push(`border-bottom:${formatBorder(borders.bottom)}`);\n if (borders.left) styles.push(`border-left:${formatBorder(borders.left)}`);\n if (borders.right) styles.push(`border-right:${formatBorder(borders.right)}`);\n if (borders.top || borders.bottom || borders.left || borders.right) {\n styles.push('padding:2pt 4pt');\n }\n}\n\nfunction formatBorder(b: DocxBorder | DocxTableBorder): string {\n const widthPt = Math.max(b.size, 0.5);\n const style = mapBorderStyle(b.style);\n const color = cssColor(b.color);\n return color ? `${widthPt}pt ${style} ${color}` : `${widthPt}pt ${style}`;\n}\n\nconst DASHED_BORDER_STYLES = new Set(['dashed', 'dashDotStroked', 'dashSmallGap']);\nconst DOTTED_BORDER_STYLES = new Set(['dotted', 'dotDash', 'dotDotDash']);\nconst DOUBLE_BORDER_STYLES = new Set([\n 'double', 'triple', 'thinThickSmallGap', 'thickThinSmallGap',\n 'thinThickMediumGap', 'thickThinMediumGap', 'thinThickLargeGap', 'thickThinLargeGap',\n]);\n\nfunction mapBorderStyle(docxStyle: string): string {\n if (DASHED_BORDER_STYLES.has(docxStyle)) return 'dashed';\n if (DOTTED_BORDER_STYLES.has(docxStyle)) return 'dotted';\n if (DOUBLE_BORDER_STYLES.has(docxStyle)) return 'double';\n if (docxStyle === 'none' || docxStyle === 'nil') return 'none';\n return 'solid';\n}\n\n// --- Run rendering ---\n\nfunction renderRuns(runs: ReadonlyArray<DocxRun>): string {\n const parts: string[] = [];\n\n for (const run of runs) {\n if (run.style.hidden) continue;\n if (run.breakType === 'page') continue;\n if (run.breakType === 'textWrapping' || run.breakType === 'column') {\n parts.push('<br>');\n continue;\n }\n\n let html = escapeHtml(run.text);\n\n html = applyRunFormatting(html, run.style);\n html = applyTrackChanges(html, run);\n html = applyHyperlink(html, run);\n\n parts.push(html);\n }\n\n return parts.join('');\n}\n\nfunction applyRunFormatting(html: string, style: DocxRunStyle): string {\n let result = html;\n\n if (style.bold) result = `<strong>${result}</strong>`;\n if (style.italic) result = `<em>${result}</em>`;\n if (style.underline) result = `<u>${result}</u>`;\n if (style.strikethrough) result = `<s>${result}</s>`;\n if (style.doubleStrikethrough) {\n result = `<s style=\"text-decoration-style:double\">${result}</s>`;\n }\n if (style.vertAlign === 'superscript') result = `<sup>${result}</sup>`;\n if (style.vertAlign === 'subscript') result = `<sub>${result}</sub>`;\n\n const spanStyle = buildRunSpanStyle(style);\n const dirAttr = style.rtl ? ' dir=\"rtl\"' : '';\n if (spanStyle || dirAttr) {\n const styleAttr = spanStyle ? ` style=\"${escapeAttribute(spanStyle)}\"` : '';\n result = `<span${dirAttr}${styleAttr}>${result}</span>`;\n }\n\n return result;\n}\n\nfunction buildRunSpanStyle(style: DocxRunStyle): string {\n const parts: string[] = [];\n\n const color = cssColor(style.color);\n if (color) parts.push(`color:${color}`);\n if (style.fontSize) parts.push(`font-size:${style.fontSize}pt`);\n if (style.fontFamily) parts.push(`font-family:${cssFontFamily(style.fontFamily)}`);\n const highlight = cssColor(style.highlight);\n if (highlight) parts.push(`background-color:${highlight}`);\n const background = cssColor(style.backgroundColor);\n if (background) parts.push(`background-color:${background}`);\n if (style.charSpacing) parts.push(`letter-spacing:${formatPt(style.charSpacing)}pt`);\n if (style.smallCaps) parts.push('font-variant:small-caps');\n if (style.caps) parts.push('text-transform:uppercase');\n\n return parts.join(';');\n}\n\nfunction applyTrackChanges(html: string, run: DocxRun): string {\n if (run.isInserted) return `<ins>${html}</ins>`;\n if (run.isDeleted) return `<del>${html}</del>`;\n return html;\n}\n\nfunction applyHyperlink(html: string, run: DocxRun): string {\n const href = run.href ? safeLinkHref(run.href) : undefined;\n if (href === undefined) return html;\n return `<a href=\"${escapeAttribute(href)}\" target=\"_blank\" rel=\"noopener noreferrer\">${html}</a>`;\n}\n\n// --- Image rendering ---\n\nfunction renderImage(img: DocxImage): string {\n const src = imageDataUrl(img.dataUrl);\n if (src === undefined) return '';\n const widthAttr = img.width > 0 ? ` width=\"${img.width}\"` : '';\n const heightAttr = img.height > 0 ? ` height=\"${img.height}\"` : '';\n const alt = escapeAttribute(img.altText || 'image');\n return `<img src=\"${escapeAttribute(src)}\"${widthAttr}${heightAttr} alt=\"${alt}\">`;\n}\n\n// --- Table rendering ---\n\nfunction buildBorderFallbacks(table: DocxTable): TableBorderFallbacks {\n return {\n insideH: table.tableStyle?.borders?.insideH,\n insideV: table.tableStyle?.borders?.insideV,\n top: table.tableStyle?.borders?.top,\n bottom: table.tableStyle?.borders?.bottom,\n left: table.tableStyle?.borders?.left,\n right: table.tableStyle?.borders?.right,\n };\n}\n\nfunction splitTableRows(rows: readonly DocxTableRow[]): { headerRows: DocxTableRow[]; bodyRows: DocxTableRow[] } {\n const headerRows: DocxTableRow[] = [];\n const bodyRows: DocxTableRow[] = [];\n for (const row of rows) {\n if (row.rowStyle?.isHeader) { headerRows.push(row); } else { bodyRows.push(row); }\n }\n return { headerRows, bodyRows };\n}\n\nfunction renderTable(table: DocxTable): string {\n const tableStyle = buildTableStyle(table.tableStyle);\n const styleStr = tableStyle ? ` style=\"${escapeAttribute(tableStyle)}\"` : '';\n const borderFallbacks = buildBorderFallbacks(table);\n const { headerRows, bodyRows } = splitTableRows(table.rows);\n const totalRows = table.rows.length;\n const parts: string[] = [`<table${styleStr}>`];\n let rowIndex = 0;\n\n if (headerRows.length > 0) {\n parts.push('<thead>');\n for (const row of headerRows) {\n parts.push(renderTableRow(row, true, borderFallbacks, rowIndex, totalRows));\n rowIndex++;\n }\n parts.push('</thead>');\n }\n\n parts.push('<tbody>');\n for (const row of bodyRows) {\n parts.push(renderTableRow(row, false, borderFallbacks, rowIndex, totalRows));\n rowIndex++;\n }\n parts.push('</tbody>', '</table>');\n return parts.join('');\n}\n\nfunction buildTableStyle(style?: DocxTableStyle): string {\n const parts: string[] = ['border-collapse:collapse'];\n\n if (style?.width) {\n const unit = style.widthUnit === 'pct' ? '%' : 'pt';\n const value = unit === '%' ? (style.width / 50).toFixed(1) : twipsToPt(style.width);\n parts.push(`width:${value}${unit}`);\n }\n\n return parts.join(';');\n}\n\ninterface TableBorderFallbacks {\n readonly insideH?: DocxTableBorder;\n readonly insideV?: DocxTableBorder;\n readonly top?: DocxTableBorder;\n readonly bottom?: DocxTableBorder;\n readonly left?: DocxTableBorder;\n readonly right?: DocxTableBorder;\n}\n\nfunction renderTableRow(\n row: DocxTableRow, isHeader: boolean,\n fallbacks: TableBorderFallbacks, rowIndex: number, totalRows: number,\n): string {\n const heightStyle = row.rowStyle?.height\n ? ` style=\"height:${formatPt(row.rowStyle.height)}pt\"`\n : '';\n const tag = isHeader ? 'th' : 'td';\n const totalCols = row.cells.reduce((sum, c) => sum + c.colSpan, 0);\n\n let colIndex = 0;\n const cellsHtml: string[] = [];\n for (const cell of row.cells) {\n cellsHtml.push(renderTableCell(cell, tag, fallbacks, rowIndex, colIndex, totalRows, totalCols));\n colIndex += cell.colSpan;\n }\n return `<tr${heightStyle}>${cellsHtml.join('')}</tr>`;\n}\n\nfunction renderTableCell(\n cell: DocxTableCell, tag: string,\n fallbacks: TableBorderFallbacks, rowIndex: number, colIndex: number,\n totalRows: number, totalCols: number,\n): string {\n const attrs: string[] = [];\n\n if (cell.colSpan > 1) attrs.push(`colspan=\"${cell.colSpan}\"`);\n if (cell.rowSpan > 1) attrs.push(`rowspan=\"${cell.rowSpan}\"`);\n\n const cellStyle = buildCellStyle(cell.cellStyle, fallbacks, rowIndex, colIndex, totalRows, totalCols);\n if (cellStyle) attrs.push(`style=\"${escapeAttribute(cellStyle)}\"`);\n\n const attrStr = attrs.length > 0 ? ` ${attrs.join(' ')}` : '';\n const content = renderCellContent(cell.elements);\n return `<${tag}${attrStr}>${content}</${tag}>`;\n}\n\nfunction buildCellStyle(\n style: DocxTableCellStyle | undefined,\n fallbacks: TableBorderFallbacks, rowIndex: number, colIndex: number,\n totalRows: number, totalCols: number,\n): string {\n const parts: string[] = [];\n\n const background = cssColor(style?.backgroundColor);\n if (background) parts.push(`background-color:${background}`);\n if (style?.verticalAlign && VERTICAL_ALIGNS.has(style.verticalAlign)) parts.push(`vertical-align:${style.verticalAlign}`);\n if (style?.width) {\n const unit = style.widthUnit === 'pct' ? '%' : 'pt';\n const value = unit === '%' ? (style.width / 50).toFixed(1) : twipsToPt(style.width);\n parts.push(`width:${value}${unit}`);\n }\n\n appendCellBorders(parts, style, fallbacks, rowIndex, colIndex, totalRows, totalCols);\n if (style) appendCellPaddings(parts, style);\n\n return parts.join(';');\n}\n\nfunction resolveCellBorder(\n own: DocxTableBorder | undefined,\n isEdge: boolean,\n edgeFallback: DocxTableBorder | undefined,\n innerFallback: DocxTableBorder | undefined,\n): DocxTableBorder | undefined {\n return own ?? (isEdge ? edgeFallback : innerFallback);\n}\n\nfunction appendCellBorders(\n parts: string[], style: DocxTableCellStyle | undefined,\n fallbacks: TableBorderFallbacks, rowIndex: number, colIndex: number,\n totalRows: number, totalCols: number,\n): void {\n const top = resolveCellBorder(style?.borders?.top, rowIndex === 0, fallbacks.top, fallbacks.insideH);\n const bottom = resolveCellBorder(style?.borders?.bottom, rowIndex === totalRows - 1, fallbacks.bottom, fallbacks.insideH);\n const left = resolveCellBorder(style?.borders?.left, colIndex === 0, fallbacks.left, fallbacks.insideV);\n const right = resolveCellBorder(style?.borders?.right, colIndex === totalCols - 1, fallbacks.right, fallbacks.insideV);\n\n if (top) parts.push(`border-top:${formatBorder(top)}`);\n if (bottom) parts.push(`border-bottom:${formatBorder(bottom)}`);\n if (left) parts.push(`border-left:${formatBorder(left)}`);\n if (right) parts.push(`border-right:${formatBorder(right)}`);\n}\n\nfunction appendCellPaddings(parts: string[], style: DocxTableCellStyle): void {\n if (!style.paddings) return;\n if (style.paddings.top != null) parts.push(`padding-top:${formatPt(style.paddings.top)}pt`);\n if (style.paddings.bottom != null) parts.push(`padding-bottom:${formatPt(style.paddings.bottom)}pt`);\n if (style.paddings.left != null) parts.push(`padding-left:${formatPt(style.paddings.left)}pt`);\n if (style.paddings.right != null) parts.push(`padding-right:${formatPt(style.paddings.right)}pt`);\n}\n\nfunction renderCellContent(elements: ReadonlyArray<DocxParagraph | DocxTable>): string {\n return elements.map(el => {\n if (el.type === 'table') return renderTable(el);\n return renderParagraph(el);\n }).join('');\n}\n\n// --- Utilities ---\n\nfunction formatPt(pts: number): string {\n return pts.toFixed(1).replace(/\\.0$/, '');\n}\n\nfunction twipsToPt(twips: number): string {\n return (twips / 20).toFixed(1).replace(/\\.0$/, '');\n}\n\nfunction escapeHtml(text: string): string {\n return text\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"')\n .replaceAll('\\t', '\\u2003');\n}\n"],"names":[],"mappings":"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"}
|