@gilav21/shadcn-angular-rte 0.2.0 → 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.
Files changed (19) hide show
  1. package/fesm2022/{gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs → gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs} +63 -38
  2. package/fesm2022/gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs.map +1 -0
  3. package/fesm2022/{gilav21-shadcn-angular-rte-docx-to-editor-html-Cl9eIhkC.mjs → gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs} +43 -33
  4. package/fesm2022/gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs.map +1 -0
  5. package/fesm2022/{gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs → gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs} +3492 -1899
  6. package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs.map +1 -0
  7. package/fesm2022/gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs +69 -0
  8. package/fesm2022/gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs.map +1 -0
  9. package/fesm2022/{gilav21-shadcn-angular-rte-pdf-readable-DmE-CIxv.mjs → gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.mjs} +445 -124
  10. package/fesm2022/gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.mjs.map +1 -0
  11. package/fesm2022/gilav21-shadcn-angular-rte.mjs +1 -1
  12. package/package.json +1 -1
  13. package/styles.css +1 -1
  14. package/types/gilav21-shadcn-angular-rte.d.ts +359 -113
  15. package/types/gilav21-shadcn-angular-rte.d.ts.map +1 -1
  16. package/fesm2022/gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs.map +0 -1
  17. package/fesm2022/gilav21-shadcn-angular-rte-docx-to-editor-html-Cl9eIhkC.mjs.map +0 -1
  18. package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs.map +0 -1
  19. package/fesm2022/gilav21-shadcn-angular-rte-pdf-readable-DmE-CIxv.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { i as inflate } from './gilav21-shadcn-angular-rte-inflate-laXxypva.mjs';
2
- import { i as isValidImageMagicBytes } from './gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs';
2
+ import { i as isValidImageMagicBytes } from './gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs';
3
3
 
4
4
  const DEFAULT_MAX_UNCOMPRESSED = 1024 * 1024 * 1024;
5
5
  const DEFAULT_MAX_FILE_SIZE = 200 * 1024 * 1024;
@@ -279,6 +279,31 @@ const HIGHLIGHT_COLOR_MAP = {
279
279
  black: '#000000',
280
280
  white: '#FFFFFF',
281
281
  };
282
+ /**
283
+ * OOXML `ST_HexColor`: exactly six hex digits (`auto` and anything else is not a
284
+ * colour). The model's colour fields hold only this form, so a value read out of
285
+ * the document can never carry a quote, a `;` or a `url(` into the markup.
286
+ */
287
+ function hexColor(raw) {
288
+ return raw && /^[\dA-Fa-f]{6}$/.test(raw) ? `#${raw}` : undefined;
289
+ }
290
+ const TEXT_ALIGN_BY_JC = new Map([
291
+ ['both', 'justify'], ['distribute', 'justify'],
292
+ ['center', 'center'],
293
+ ['left', 'left'], ['start', 'left'],
294
+ ['right', 'right'], ['end', 'right'],
295
+ ]);
296
+ const VERTICAL_ALIGN_BY_VALIGN = new Map([
297
+ ['top', 'top'], ['center', 'middle'], ['bottom', 'bottom'],
298
+ ]);
299
+ /** The CSS `text-align` keyword for an OOXML `w:jc` value, or `undefined` for a value outside the vocabulary. */
300
+ function textAlignFromJc(jc) {
301
+ return TEXT_ALIGN_BY_JC.get(jc);
302
+ }
303
+ /** The CSS `vertical-align` keyword for an OOXML `w:vAlign` value, or `undefined` for a value outside the vocabulary. */
304
+ function verticalAlignFromVAlign(vAlign) {
305
+ return VERTICAL_ALIGN_BY_VALIGN.get(vAlign);
306
+ }
282
307
  function parseXml(xmlString) {
283
308
  const parser = new DOMParser();
284
309
  return parser.parseFromString(xmlString, 'application/xml');
@@ -393,7 +418,7 @@ function parseFontSizeAndColor(rPr, result, themeColors) {
393
418
  function parseColorElement(color, themeColors) {
394
419
  const val = getAttrVal(color, NS_W, 'val');
395
420
  if (val && val !== 'auto')
396
- return `#${val}`;
421
+ return hexColor(val);
397
422
  if (!themeColors)
398
423
  return undefined;
399
424
  const themeColor = getAttrVal(color, NS_W, 'themeColor');
@@ -416,16 +441,20 @@ function applyTintShade(hex, tint, shade) {
416
441
  const r = Number.parseInt(hex.substring(1, 3), 16);
417
442
  const g = Number.parseInt(hex.substring(3, 5), 16);
418
443
  const b = Number.parseInt(hex.substring(5, 7), 16);
419
- if (tint) {
420
- const t = Number.parseInt(tint, 16) / 255;
444
+ const t = tint ? hexFraction(tint) : undefined;
445
+ if (t !== undefined) {
421
446
  return rgbToHex(Math.round(r + (255 - r) * t), Math.round(g + (255 - g) * t), Math.round(b + (255 - b) * t));
422
447
  }
423
- if (shade) {
424
- const s = Number.parseInt(shade, 16) / 255;
448
+ const s = shade ? hexFraction(shade) : undefined;
449
+ if (s !== undefined) {
425
450
  return rgbToHex(Math.round(r * s), Math.round(g * s), Math.round(b * s));
426
451
  }
427
452
  return hex;
428
453
  }
454
+ /** `00`-`FF` as 0-1; `undefined` for a value that is not hex, so a bad tint leaves the colour as it was. */
455
+ function hexFraction(value) {
456
+ return /^[\dA-Fa-f]{1,2}$/.test(value) ? Number.parseInt(value, 16) / 255 : undefined;
457
+ }
429
458
  function rgbToHex(r, g, b) {
430
459
  const toHex = (v) => Math.min(255, Math.max(0, v)).toString(16).padStart(2, '0');
431
460
  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
@@ -452,15 +481,16 @@ function parseHighlightAndShading(rPr, result) {
452
481
  const highlightEl = getChildNS(rPr, NS_W, 'highlight');
453
482
  if (highlightEl) {
454
483
  const val = getAttrVal(highlightEl, NS_W, 'val');
455
- if (val && val !== 'none') {
456
- result.highlight = HIGHLIGHT_COLOR_MAP[val] ?? `#${val}`;
457
- }
484
+ // An own-property lookup: `constructor` and `__proto__` are not highlight names.
485
+ const highlight = val && Object.hasOwn(HIGHLIGHT_COLOR_MAP, val) ? HIGHLIGHT_COLOR_MAP[val] : hexColor(val);
486
+ if (highlight)
487
+ result.highlight = highlight;
458
488
  }
459
489
  const shd = getChildNS(rPr, NS_W, 'shd');
460
490
  if (shd) {
461
- const fill = getAttrVal(shd, NS_W, 'fill');
462
- if (fill && fill !== 'auto')
463
- result.backgroundColor = `#${fill}`;
491
+ const fill = hexColor(getAttrVal(shd, NS_W, 'fill'));
492
+ if (fill)
493
+ result.backgroundColor = fill;
464
494
  }
465
495
  }
466
496
  function parseVertAlignAndRtl(rPr, result) {
@@ -549,9 +579,9 @@ function parseParagraphBordersAndShading(pPr) {
549
579
  const result = {};
550
580
  const shd = getChildNS(pPr, NS_W, 'shd');
551
581
  if (shd) {
552
- const fill = getAttrVal(shd, NS_W, 'fill');
553
- if (fill && fill !== 'auto')
554
- result.shading = `#${fill}`;
582
+ const fill = hexColor(getAttrVal(shd, NS_W, 'fill'));
583
+ if (fill)
584
+ result.shading = fill;
555
585
  }
556
586
  const pBdr = getChildNS(pPr, NS_W, 'pBdr');
557
587
  if (pBdr) {
@@ -577,8 +607,7 @@ function parseBorderSet(borderParent) {
577
607
  }
578
608
  function parseSingleBorder(el) {
579
609
  const style = getAttrVal(el, NS_W, 'val') ?? 'single';
580
- const colorVal = getAttrVal(el, NS_W, 'color');
581
- const color = colorVal && colorVal !== 'auto' ? `#${colorVal}` : '#000000';
610
+ const color = hexColor(getAttrVal(el, NS_W, 'color')) ?? '#000000';
582
611
  const sizeVal = getAttrVal(el, NS_W, 'sz');
583
612
  const size = sizeVal ? Number.parseInt(sizeVal, 10) / 8 : 1;
584
613
  return { style, color, size };
@@ -616,9 +645,9 @@ function parseBidiAndAlignment(pPr) {
616
645
  }
617
646
  const jcEl = getChildNS(pPr, NS_W, 'jc');
618
647
  if (jcEl) {
619
- const val = getAttrVal(jcEl, NS_W, 'val');
620
- if (val)
621
- result.alignment = val;
648
+ const alignment = textAlignFromJc(getAttrVal(jcEl, NS_W, 'val') ?? '');
649
+ if (alignment)
650
+ result.alignment = alignment;
622
651
  }
623
652
  return result;
624
653
  }
@@ -968,17 +997,17 @@ function buildCellStyle(tcPr) {
968
997
  let hasStyle = false;
969
998
  const shd = getChildNS(tcPr, NS_W, 'shd');
970
999
  if (shd) {
971
- const fill = getAttrVal(shd, NS_W, 'fill');
972
- if (fill && fill !== 'auto') {
973
- style.backgroundColor = `#${fill}`;
1000
+ const fill = hexColor(getAttrVal(shd, NS_W, 'fill'));
1001
+ if (fill) {
1002
+ style.backgroundColor = fill;
974
1003
  hasStyle = true;
975
1004
  }
976
1005
  }
977
1006
  const vAlign = getChildNS(tcPr, NS_W, 'vAlign');
978
1007
  if (vAlign) {
979
- const val = getAttrVal(vAlign, NS_W, 'val');
980
- if (val) {
981
- style.verticalAlign = val;
1008
+ const verticalAlign = verticalAlignFromVAlign(getAttrVal(vAlign, NS_W, 'val') ?? '');
1009
+ if (verticalAlign) {
1010
+ style.verticalAlign = verticalAlign;
982
1011
  hasStyle = true;
983
1012
  }
984
1013
  }
@@ -1225,14 +1254,10 @@ function parseThemeColors(files) {
1225
1254
  if (!el)
1226
1255
  continue;
1227
1256
  const srgb = getChildNS(el, NS_A, 'srgbClr');
1228
- if (srgb) {
1229
- map.set(name, `#${srgb.getAttribute('val') ?? '000000'}`);
1230
- continue;
1231
- }
1232
1257
  const sys = getChildNS(el, NS_A, 'sysClr');
1233
- if (sys) {
1234
- map.set(name, `#${sys.getAttribute('lastClr') ?? sys.getAttribute('val') ?? '000000'}`);
1235
- }
1258
+ const hex = hexColor(srgb ? srgb.getAttribute('val') : sys?.getAttribute('lastClr'));
1259
+ if (hex)
1260
+ map.set(name, hex);
1236
1261
  }
1237
1262
  return map;
1238
1263
  }
@@ -1370,9 +1395,9 @@ function extractParagraphStyleProps(pPr) {
1370
1395
  const result = {};
1371
1396
  const jcEl = getChildNS(pPr, NS_W, 'jc');
1372
1397
  if (jcEl) {
1373
- const val = getAttrVal(jcEl, NS_W, 'val');
1374
- if (val)
1375
- result.alignment = val;
1398
+ const alignment = textAlignFromJc(getAttrVal(jcEl, NS_W, 'val') ?? '');
1399
+ if (alignment)
1400
+ result.alignment = alignment;
1376
1401
  }
1377
1402
  extractSpacingProps(pPr, result);
1378
1403
  extractIndentProps(pPr, result);
@@ -1524,5 +1549,5 @@ function parseDocx(data) {
1524
1549
  return { elements, plainText, footnotes, endnotes, comments, headers, footers };
1525
1550
  }
1526
1551
 
1527
- export { parseDocx };
1528
- //# sourceMappingURL=gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs.map
1552
+ export { parseDocx, textAlignFromJc, verticalAlignFromVAlign };
1553
+ //# sourceMappingURL=gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs.map
@@ -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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"}