@extend-ai/react-docx 0.7.6 → 0.8.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 CHANGED
@@ -227,9 +227,23 @@ Notes:
227
227
  - `useDocxLineSpacing(editor)` for selected line spacing state
228
228
  - `useDocxBorders(editor)` for paragraph/table border presets
229
229
  - `useDocxFormFields(editor)` for DOCX form-field state and updates
230
- - `useDocxTrackChanges(editor)` for tracked-change UI state
230
+ - `useDocxTrackChanges(editor)` for tracked-change state plus safe
231
+ `acceptChange` / `rejectChange` actions
232
+ - `useDocxComments(editor)` for comment state, selected-range comment creation,
233
+ and resolve/reopen actions
231
234
  - `useDocxImageWrapMenu(editor)` for image wrapping controls
232
235
 
236
+ Annotation mutations intentionally fail closed. Accept/reject currently
237
+ supports a single top-level, text-only `w:ins` or `w:del`; comment creation
238
+ supports one non-empty plain-text range in a top-level paragraph. Moves,
239
+ formatting revisions, fields, hyperlinks, tables, nested revisions, drawings,
240
+ and cross-paragraph ranges return an `unsupported`, `stale`, or `unsafe-xml`
241
+ result without changing the document. Successful actions participate in the
242
+ editor's normal undo/redo history. Pass the current `DocxTrackedChange` or
243
+ `DocxComment` object back to its action; handles are document- and
244
+ source-scoped, so a handle retained across an import or conflicting edit
245
+ returns `stale` instead of targeting a reused OOXML id.
246
+
233
247
  ## Lower-level APIs
234
248
 
235
249
  The package also re-exports the lower-level internals used by the viewer:
@@ -244,11 +258,7 @@ The package also re-exports the lower-level internals used by the viewer:
244
258
  This means you can build your own pipeline, for example:
245
259
 
246
260
  ```ts
247
- import {
248
- buildDocModel,
249
- parseDocx,
250
- serializeDocx,
251
- } from "@extend-ai/react-docx";
261
+ import { buildDocModel, parseDocx, serializeDocx } from "@extend-ai/react-docx";
252
262
 
253
263
  const pkg = await parseDocx(arrayBuffer);
254
264
  const model = buildDocModel(pkg);
@@ -91,6 +91,95 @@ function normalizeDocModel(model) {
91
91
  };
92
92
  }
93
93
 
94
+ // ../doc-model/src/block-id.ts
95
+ var nextBlockIdValue = 1;
96
+ function allocateBlockId() {
97
+ const value = nextBlockIdValue;
98
+ nextBlockIdValue += 1;
99
+ return `b${value}`;
100
+ }
101
+ function ensureNodeBlockIds(node) {
102
+ if (!node.blockId) {
103
+ node.blockId = allocateBlockId();
104
+ }
105
+ if (node.type !== "table") {
106
+ return;
107
+ }
108
+ for (const row of node.rows) {
109
+ for (const cell of row.cells) {
110
+ for (const child of cell.nodes) {
111
+ ensureNodeBlockIds(child);
112
+ }
113
+ }
114
+ }
115
+ }
116
+ function ensureDocModelBlockIds(model) {
117
+ model.nodes.forEach(ensureNodeBlockIds);
118
+ for (const section of model.metadata.headerSections ?? []) {
119
+ section.nodes.forEach(ensureNodeBlockIds);
120
+ }
121
+ for (const section of model.metadata.footerSections ?? []) {
122
+ section.nodes.forEach(ensureNodeBlockIds);
123
+ }
124
+ for (const section of model.metadata.sections ?? []) {
125
+ for (const headerSection of section.headerSections ?? []) {
126
+ headerSection.nodes.forEach(ensureNodeBlockIds);
127
+ }
128
+ for (const footerSection of section.footerSections ?? []) {
129
+ footerSection.nodes.forEach(ensureNodeBlockIds);
130
+ }
131
+ }
132
+ for (const note of model.metadata.footnotes ?? []) {
133
+ note.nodes?.forEach(ensureNodeBlockIds);
134
+ }
135
+ for (const note of model.metadata.endnotes ?? []) {
136
+ note.nodes?.forEach(ensureNodeBlockIds);
137
+ }
138
+ return model;
139
+ }
140
+ function collectNodeBlockIds(node, seen, duplicates) {
141
+ if (node.blockId) {
142
+ if (seen.has(node.blockId)) {
143
+ duplicates.add(node.blockId);
144
+ }
145
+ seen.add(node.blockId);
146
+ }
147
+ if (node.type !== "table") {
148
+ return;
149
+ }
150
+ for (const row of node.rows) {
151
+ for (const cell of row.cells) {
152
+ for (const child of cell.nodes) {
153
+ collectNodeBlockIds(child, seen, duplicates);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ function collectDuplicateDocModelBlockIds(model) {
159
+ const duplicates = /* @__PURE__ */ new Set();
160
+ const visitContainer = (nodes) => {
161
+ if (!nodes) {
162
+ return;
163
+ }
164
+ const seen = /* @__PURE__ */ new Set();
165
+ nodes.forEach((node) => collectNodeBlockIds(node, seen, duplicates));
166
+ };
167
+ visitContainer(model.nodes);
168
+ for (const section of model.metadata.headerSections ?? []) {
169
+ visitContainer(section.nodes);
170
+ }
171
+ for (const section of model.metadata.footerSections ?? []) {
172
+ visitContainer(section.nodes);
173
+ }
174
+ for (const note of model.metadata.footnotes ?? []) {
175
+ visitContainer(note.nodes);
176
+ }
177
+ for (const note of model.metadata.endnotes ?? []) {
178
+ visitContainer(note.nodes);
179
+ }
180
+ return Array.from(duplicates);
181
+ }
182
+
94
183
  // ../doc-model/src/clone.ts
95
184
  function isParagraphCellContent(node) {
96
185
  return node.type === "paragraph";
@@ -149,19 +238,47 @@ function cloneParagraphStyle(style) {
149
238
  } : void 0
150
239
  };
151
240
  }
241
+ function cloneTextStyle(style) {
242
+ return style ? {
243
+ ...style,
244
+ runBorder: style.runBorder ? { ...style.runBorder } : void 0
245
+ } : void 0;
246
+ }
247
+ function cloneParagraphNode(paragraph) {
248
+ return cloneParagraph(paragraph);
249
+ }
250
+ function cloneTableNode(table) {
251
+ return cloneTable(table);
252
+ }
152
253
  function cloneParagraph(paragraph) {
153
254
  return {
154
255
  type: "paragraph",
256
+ blockId: paragraph.blockId,
155
257
  style: cloneParagraphStyle(paragraph.style),
156
258
  paragraphMarkDeleted: paragraph.paragraphMarkDeleted,
157
259
  sourceXml: paragraph.sourceXml,
260
+ sourceTextPatch: paragraph.sourceTextPatch ? {
261
+ runs: paragraph.sourceTextPatch.runs.map((run) => ({
262
+ style: cloneTextStyle(run.style),
263
+ link: run.link,
264
+ noteReference: run.noteReference ? { ...run.noteReference } : void 0
265
+ }))
266
+ } : void 0,
267
+ sourceRunProvenance: paragraph.sourceRunProvenance ? {
268
+ runs: paragraph.sourceRunProvenance.runs.map((run) => ({
269
+ style: cloneTextStyle(run.style),
270
+ link: run.link,
271
+ noteReference: run.noteReference ? { ...run.noteReference } : void 0
272
+ }))
273
+ } : void 0,
158
274
  children: paragraph.children.map((child) => {
159
275
  if (child.type === "text") {
160
276
  return {
161
277
  type: "text",
162
278
  text: child.text,
163
- style: child.style ? { ...child.style } : void 0,
164
- link: child.link
279
+ style: cloneTextStyle(child.style),
280
+ link: child.link,
281
+ noteReference: child.noteReference ? { ...child.noteReference } : void 0
165
282
  };
166
283
  }
167
284
  if (child.type === "form-field") {
@@ -281,7 +398,12 @@ function cloneTableFloatingStyle(floating) {
281
398
  function cloneTable(table) {
282
399
  return {
283
400
  type: "table",
401
+ blockId: table.blockId,
284
402
  sourceXml: table.sourceXml,
403
+ sourceTextPatches: table.sourceTextPatches?.map((patch) => ({
404
+ sourceParagraphXml: patch.sourceParagraphXml,
405
+ paragraph: cloneParagraph(patch.paragraph)
406
+ })),
285
407
  style: table.style ? {
286
408
  widthTwips: table.style.widthTwips,
287
409
  indentTwips: table.style.indentTwips,
@@ -395,6 +517,33 @@ function cloneDocModel(model) {
395
517
  };
396
518
  }
397
519
 
520
+ // ../doc-model/src/freeze.ts
521
+ function deepFreezeValue(value) {
522
+ if (typeof value !== "object" || value === null) {
523
+ return;
524
+ }
525
+ if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {
526
+ return;
527
+ }
528
+ if (Object.isFrozen(value)) {
529
+ return;
530
+ }
531
+ Object.freeze(value);
532
+ if (Array.isArray(value)) {
533
+ for (const entry of value) {
534
+ deepFreezeValue(entry);
535
+ }
536
+ return;
537
+ }
538
+ for (const key of Object.keys(value)) {
539
+ deepFreezeValue(value[key]);
540
+ }
541
+ }
542
+ function deepFreezeDocModel(model) {
543
+ deepFreezeValue(model);
544
+ return model;
545
+ }
546
+
398
547
  // ../doc-model/src/index.ts
399
548
  async function buildDocModel(pkg) {
400
549
  const wasmPackage = mapsToWasmPackage({
@@ -415,8 +564,14 @@ async function buildDocModelFromBytes(bytes) {
415
564
 
416
565
  export {
417
566
  normalizeDocModel,
567
+ allocateBlockId,
568
+ ensureDocModelBlockIds,
569
+ collectDuplicateDocModelBlockIds,
570
+ cloneParagraphNode,
571
+ cloneTableNode,
418
572
  cloneDocModel,
573
+ deepFreezeDocModel,
419
574
  buildDocModel,
420
575
  buildDocModelFromBytes
421
576
  };
422
- //# sourceMappingURL=chunk-P3MKA55V.js.map
577
+ //# sourceMappingURL=chunk-YE7GQOST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../doc-model/src/normalize.ts","../../doc-model/src/block-id.ts","../../doc-model/src/clone.ts","../../doc-model/src/freeze.ts","../../doc-model/src/index.ts"],"sourcesContent":["import type {\n DocModel,\n DocNode,\n ImageRunNode,\n ParagraphChildNode,\n TableCellContentNode\n} from \"./types\";\n\nfunction normalizeUint8Array(value: unknown): Uint8Array | undefined {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (Array.isArray(value)) {\n return Uint8Array.from(value as number[]);\n }\n return undefined;\n}\n\nfunction normalizeParagraphChild(child: ParagraphChildNode): ParagraphChildNode {\n if (child.type !== \"image\") {\n return child;\n }\n\n const image = child as ImageRunNode;\n const data = normalizeUint8Array(image.data);\n if (data === image.data) {\n return child;\n }\n\n return {\n ...image,\n data\n };\n}\n\nfunction normalizeTableCellContent(node: TableCellContentNode): TableCellContentNode {\n if (node.type === \"table\") {\n return normalizeDocNode(node) as TableCellContentNode;\n }\n\n return {\n ...node,\n children: node.children.map(normalizeParagraphChild)\n };\n}\n\nfunction normalizeDocNode(node: DocNode): DocNode {\n if (node.type === \"paragraph\") {\n return {\n ...node,\n children: node.children.map(normalizeParagraphChild)\n };\n }\n\n return {\n ...node,\n rows: node.rows.map((row) => ({\n ...row,\n cells: row.cells.map((cell) => ({\n ...cell,\n nodes: cell.nodes.map(normalizeTableCellContent)\n }))\n }))\n };\n}\n\nexport function normalizeDocModel(model: DocModel): DocModel {\n return {\n ...model,\n nodes: model.nodes.map(normalizeDocNode),\n metadata: {\n ...model.metadata,\n headerSections: model.metadata.headerSections.map((section) => ({\n ...section,\n nodes: section.nodes.map(normalizeDocNode)\n })),\n footerSections: model.metadata.footerSections.map((section) => ({\n ...section,\n nodes: section.nodes.map(normalizeDocNode)\n })),\n sections: model.metadata.sections?.map((section) => ({\n ...section,\n headerSections: section.headerSections.map((header) => ({\n ...header,\n nodes: header.nodes.map(normalizeDocNode)\n })),\n footerSections: section.footerSections.map((footer) => ({\n ...footer,\n nodes: footer.nodes.map(normalizeDocNode)\n }))\n })),\n footnotes: model.metadata.footnotes?.map((note) => ({\n ...note,\n nodes: note.nodes?.map(normalizeDocNode)\n })),\n endnotes: model.metadata.endnotes?.map((note) => ({\n ...note,\n nodes: note.nodes?.map(normalizeDocNode)\n }))\n }\n };\n}\n","import type { DocModel, DocNode, TableCellContentNode } from \"./types\";\n\nlet nextBlockIdValue = 1;\n\n/** Returns a fresh block id, unique for the lifetime of this module instance. */\nexport function allocateBlockId(): string {\n const value = nextBlockIdValue;\n nextBlockIdValue += 1;\n return `b${value}`;\n}\n\nfunction ensureNodeBlockIds(node: DocNode | TableCellContentNode): void {\n if (!node.blockId) {\n node.blockId = allocateBlockId();\n }\n\n if (node.type !== \"table\") {\n return;\n }\n\n for (const row of node.rows) {\n for (const cell of row.cells) {\n for (const child of cell.nodes) {\n ensureNodeBlockIds(child);\n }\n }\n }\n}\n\n/**\n * Assigns a fresh block id to every paragraph/table node (body, headers,\n * footers, footnotes, endnotes, nested table content) that does not already\n * have one. Mutates the model in place and returns it.\n */\nexport function ensureDocModelBlockIds(model: DocModel): DocModel {\n model.nodes.forEach(ensureNodeBlockIds);\n\n for (const section of model.metadata.headerSections ?? []) {\n section.nodes.forEach(ensureNodeBlockIds);\n }\n for (const section of model.metadata.footerSections ?? []) {\n section.nodes.forEach(ensureNodeBlockIds);\n }\n for (const section of model.metadata.sections ?? []) {\n for (const headerSection of section.headerSections ?? []) {\n headerSection.nodes.forEach(ensureNodeBlockIds);\n }\n for (const footerSection of section.footerSections ?? []) {\n footerSection.nodes.forEach(ensureNodeBlockIds);\n }\n }\n for (const note of model.metadata.footnotes ?? []) {\n note.nodes?.forEach(ensureNodeBlockIds);\n }\n for (const note of model.metadata.endnotes ?? []) {\n note.nodes?.forEach(ensureNodeBlockIds);\n }\n\n return model;\n}\n\nfunction collectNodeBlockIds(\n node: DocNode | TableCellContentNode,\n seen: Set<string>,\n duplicates: Set<string>\n): void {\n if (node.blockId) {\n if (seen.has(node.blockId)) {\n duplicates.add(node.blockId);\n }\n seen.add(node.blockId);\n }\n\n if (node.type !== \"table\") {\n return;\n }\n\n for (const row of node.rows) {\n for (const cell of row.cells) {\n for (const child of cell.nodes) {\n collectNodeBlockIds(child, seen, duplicates);\n }\n }\n }\n}\n\n/**\n * Returns block ids that appear on more than one node within the same\n * container (body, a header/footer part, a note). Nodes without ids are\n * ignored, and the same id may legitimately recur across containers (section\n * views reference the same header/footer parts as the flat metadata lists).\n */\nexport function collectDuplicateDocModelBlockIds(model: DocModel): string[] {\n const duplicates = new Set<string>();\n\n const visitContainer = (nodes: DocNode[] | undefined): void => {\n if (!nodes) {\n return;\n }\n const seen = new Set<string>();\n nodes.forEach((node) => collectNodeBlockIds(node, seen, duplicates));\n };\n\n visitContainer(model.nodes);\n for (const section of model.metadata.headerSections ?? []) {\n visitContainer(section.nodes);\n }\n for (const section of model.metadata.footerSections ?? []) {\n visitContainer(section.nodes);\n }\n for (const note of model.metadata.footnotes ?? []) {\n visitContainer(note.nodes);\n }\n for (const note of model.metadata.endnotes ?? []) {\n visitContainer(note.nodes);\n }\n\n return Array.from(duplicates);\n}\n","import type {\n DocModel,\n DocNode,\n FooterSection,\n HeaderSection,\n NumberingDefinitionSet,\n ParagraphBorderSet,\n ParagraphBorderStyle,\n ParagraphIndent,\n ParagraphNode,\n ParagraphNumbering,\n ParagraphSpacing,\n ParagraphStyle,\n ParagraphStyleDefinition,\n TableBorderSet,\n TableBorderStyle,\n TableBoxSpacing,\n TableCellContentNode,\n TableNode,\n TableStyle,\n TextStyle,\n} from \"./types\";\n\nfunction isParagraphCellContent(\n node: TableCellContentNode\n): node is ParagraphNode {\n return node.type === \"paragraph\";\n}\n\nfunction isTableCellContentTable(\n node: TableCellContentNode\n): node is TableNode {\n return node.type === \"table\";\n}\n\nfunction cloneTableCellContent(\n nodes: TableCellContentNode[]\n): TableCellContentNode[] {\n return nodes.map((node) => {\n if (isParagraphCellContent(node)) {\n return cloneParagraph(node);\n }\n\n if (isTableCellContentTable(node)) {\n return cloneTable(node);\n }\n\n return node;\n });\n}\n\nfunction cloneParagraphNumbering(\n numbering?: ParagraphNumbering\n): ParagraphNumbering | undefined {\n return numbering ? { ...numbering } : undefined;\n}\n\nfunction cloneParagraphSpacing(\n spacing?: ParagraphSpacing\n): ParagraphSpacing | undefined {\n return spacing ? { ...spacing } : undefined;\n}\n\nfunction cloneParagraphIndent(\n indent?: ParagraphIndent\n): ParagraphIndent | undefined {\n return indent ? { ...indent } : undefined;\n}\n\nfunction cloneParagraphBorderStyle(\n border?: ParagraphBorderStyle\n): ParagraphBorderStyle | undefined {\n return border ? { ...border } : undefined;\n}\n\nfunction cloneParagraphBorderSet(\n borders?: ParagraphBorderSet\n): ParagraphBorderSet | undefined {\n if (!borders) {\n return undefined;\n }\n\n return {\n top: cloneParagraphBorderStyle(borders.top),\n right: cloneParagraphBorderStyle(borders.right),\n bottom: cloneParagraphBorderStyle(borders.bottom),\n left: cloneParagraphBorderStyle(borders.left),\n between: cloneParagraphBorderStyle(borders.between),\n bar: cloneParagraphBorderStyle(borders.bar),\n };\n}\n\nfunction cloneParagraphStyle(\n style?: ParagraphStyle\n): ParagraphStyle | undefined {\n if (!style) {\n return undefined;\n }\n\n return {\n ...style,\n numbering: cloneParagraphNumbering(style.numbering),\n spacing: cloneParagraphSpacing(style.spacing),\n indent: cloneParagraphIndent(style.indent),\n borders: cloneParagraphBorderSet(style.borders),\n dropCap: style.dropCap\n ? {\n ...style.dropCap,\n }\n : undefined,\n };\n}\n\nfunction cloneTextStyle(style?: TextStyle): TextStyle | undefined {\n return style\n ? {\n ...style,\n runBorder: style.runBorder ? { ...style.runBorder } : undefined,\n }\n : undefined;\n}\n\nexport function cloneParagraphNode(paragraph: ParagraphNode): ParagraphNode {\n return cloneParagraph(paragraph);\n}\n\nexport function cloneTableNode(table: TableNode): TableNode {\n return cloneTable(table);\n}\n\nfunction cloneParagraph(paragraph: ParagraphNode): ParagraphNode {\n return {\n type: \"paragraph\",\n blockId: paragraph.blockId,\n style: cloneParagraphStyle(paragraph.style),\n paragraphMarkDeleted: paragraph.paragraphMarkDeleted,\n sourceXml: paragraph.sourceXml,\n sourceTextPatch: paragraph.sourceTextPatch\n ? {\n runs: paragraph.sourceTextPatch.runs.map((run) => ({\n style: cloneTextStyle(run.style),\n link: run.link,\n noteReference: run.noteReference\n ? { ...run.noteReference }\n : undefined,\n })),\n }\n : undefined,\n sourceRunProvenance: paragraph.sourceRunProvenance\n ? {\n runs: paragraph.sourceRunProvenance.runs.map((run) => ({\n style: cloneTextStyle(run.style),\n link: run.link,\n noteReference: run.noteReference\n ? { ...run.noteReference }\n : undefined,\n })),\n }\n : undefined,\n children: paragraph.children.map((child) => {\n if (child.type === \"text\") {\n return {\n type: \"text\" as const,\n text: child.text,\n style: cloneTextStyle(child.style),\n link: child.link,\n noteReference: child.noteReference\n ? { ...child.noteReference }\n : undefined,\n };\n }\n\n if (child.type === \"form-field\") {\n return {\n type: \"form-field\" as const,\n fieldType: child.fieldType,\n sourceKind: child.sourceKind,\n id: child.id,\n tag: child.tag,\n title: child.title,\n placeholder: child.placeholder,\n checked: child.checked,\n value: child.value,\n options: child.options?.map((option) => ({\n displayText: option.displayText,\n value: option.value,\n })),\n widget: child.widget\n ? {\n name: child.widget.name,\n enabled: child.widget.enabled,\n calcOnExit: child.widget.calcOnExit,\n text: child.widget.text\n ? {\n inputType: child.widget.text.inputType,\n defaultText: child.widget.text.defaultText,\n maxLength: child.widget.text.maxLength,\n textFormat: child.widget.text.textFormat,\n }\n : undefined,\n checkbox: child.widget.checkbox\n ? {\n defaultChecked: child.widget.checkbox.defaultChecked,\n sizeMode: child.widget.checkbox.sizeMode,\n sizePt: child.widget.checkbox.sizePt,\n }\n : undefined,\n dropdown: child.widget.dropdown\n ? {\n defaultValue: child.widget.dropdown.defaultValue,\n }\n : undefined,\n }\n : undefined,\n checkedSymbol: child.checkedSymbol,\n uncheckedSymbol: child.uncheckedSymbol,\n style: child.style ? { ...child.style } : undefined,\n link: child.link,\n sourceXml: child.sourceXml,\n };\n }\n\n return {\n type: \"image\" as const,\n src: child.src,\n alt: child.alt,\n widthPx: child.widthPx,\n heightPx: child.heightPx,\n partName: child.partName,\n contentType: child.contentType,\n data: child.data ? new Uint8Array(child.data) : undefined,\n sourceXml: child.sourceXml,\n crop: child.crop ? { ...child.crop } : undefined,\n cssFilter: child.cssFilter,\n cssOpacity: child.cssOpacity,\n floating: child.floating ? { ...child.floating } : undefined,\n syntheticTextBox: child.syntheticTextBox,\n textBoxText: child.textBoxText,\n };\n }),\n };\n}\n\nfunction cloneTableBoxSpacing(\n spacing?: TableBoxSpacing\n): TableBoxSpacing | undefined {\n if (!spacing) {\n return undefined;\n }\n\n return {\n topTwips: spacing.topTwips,\n rightTwips: spacing.rightTwips,\n bottomTwips: spacing.bottomTwips,\n leftTwips: spacing.leftTwips,\n };\n}\n\nfunction cloneTableBorderStyle(\n border?: TableBorderStyle\n): TableBorderStyle | undefined {\n if (!border) {\n return undefined;\n }\n\n return {\n type: border.type,\n color: border.color,\n sizeEighthPt: border.sizeEighthPt,\n };\n}\n\nfunction cloneTableBorderSet(\n borders?: TableBorderSet\n): TableBorderSet | undefined {\n if (!borders) {\n return undefined;\n }\n\n return {\n top: cloneTableBorderStyle(borders.top),\n right: cloneTableBorderStyle(borders.right),\n bottom: cloneTableBorderStyle(borders.bottom),\n left: cloneTableBorderStyle(borders.left),\n insideH: cloneTableBorderStyle(borders.insideH),\n insideV: cloneTableBorderStyle(borders.insideV),\n tl2br: cloneTableBorderStyle(borders.tl2br),\n tr2bl: cloneTableBorderStyle(borders.tr2bl),\n };\n}\n\nfunction cloneTableFloatingStyle(\n floating?: NonNullable<TableStyle[\"floating\"]>\n): NonNullable<TableStyle[\"floating\"]> | undefined {\n if (!floating) {\n return undefined;\n }\n\n return {\n xTwips: floating.xTwips,\n yTwips: floating.yTwips,\n leftFromTextTwips: floating.leftFromTextTwips,\n rightFromTextTwips: floating.rightFromTextTwips,\n topFromTextTwips: floating.topFromTextTwips,\n bottomFromTextTwips: floating.bottomFromTextTwips,\n horizontalAnchor: floating.horizontalAnchor,\n verticalAnchor: floating.verticalAnchor,\n horizontalAlign: floating.horizontalAlign,\n verticalAlign: floating.verticalAlign,\n };\n}\n\nfunction cloneTable(table: TableNode): TableNode {\n return {\n type: \"table\",\n blockId: table.blockId,\n sourceXml: table.sourceXml,\n sourceTextPatches: table.sourceTextPatches?.map((patch) => ({\n sourceParagraphXml: patch.sourceParagraphXml,\n paragraph: cloneParagraph(patch.paragraph),\n })),\n style: table.style\n ? {\n widthTwips: table.style.widthTwips,\n indentTwips: table.style.indentTwips,\n layout: table.style.layout,\n cellSpacingTwips: table.style.cellSpacingTwips,\n floating: cloneTableFloatingStyle(table.style.floating),\n cellMarginTwips: cloneTableBoxSpacing(table.style.cellMarginTwips),\n columnWidthsTwips: table.style.columnWidthsTwips\n ? [...table.style.columnWidthsTwips]\n : undefined,\n borders: cloneTableBorderSet(table.style.borders),\n }\n : undefined,\n rows: table.rows.map((row) => ({\n type: \"table-row\",\n style: row.style ? { ...row.style } : undefined,\n cells: row.cells.map((cell) => ({\n type: \"table-cell\",\n style: cell.style\n ? {\n ...cell.style,\n marginTwips: cloneTableBoxSpacing(cell.style.marginTwips),\n borders: cloneTableBorderSet(cell.style.borders),\n }\n : undefined,\n nodes: cloneTableCellContent(cell.nodes),\n })),\n })),\n };\n}\n\nfunction cloneDocNode(node: DocNode): DocNode {\n return node.type === \"paragraph\" ? cloneParagraph(node) : cloneTable(node);\n}\n\nfunction cloneNumberingDefinitions(\n numberingDefinitions?: NumberingDefinitionSet\n): NumberingDefinitionSet | undefined {\n if (!numberingDefinitions) {\n return undefined;\n }\n\n return {\n abstracts: numberingDefinitions.abstracts.map((abstractDefinition) => ({\n abstractNumId: abstractDefinition.abstractNumId,\n levels: abstractDefinition.levels.map((level) => ({\n ...level,\n runStyle: level.runStyle ? { ...level.runStyle } : undefined,\n pictureBullet: level.pictureBullet\n ? { ...level.pictureBullet }\n : undefined,\n })),\n })),\n instances: numberingDefinitions.instances.map((instanceDefinition) => ({\n numId: instanceDefinition.numId,\n abstractNumId: instanceDefinition.abstractNumId,\n levelStartOverrides: instanceDefinition.levelStartOverrides\n ? { ...instanceDefinition.levelStartOverrides }\n : undefined,\n levelOverrides: instanceDefinition.levelOverrides\n ? instanceDefinition.levelOverrides.map((level) => ({\n ...level,\n runStyle: level.runStyle ? { ...level.runStyle } : undefined,\n pictureBullet: level.pictureBullet\n ? { ...level.pictureBullet }\n : undefined,\n }))\n : undefined,\n })),\n };\n}\n\nexport function cloneDocModel(model: DocModel): DocModel {\n return {\n nodes: model.nodes.map(cloneDocNode),\n metadata: {\n sourceParts: model.metadata.sourceParts,\n warnings: [...model.metadata.warnings],\n documentPageCount: model.metadata.documentPageCount,\n documentOpenTag: model.metadata.documentOpenTag,\n documentBackgroundColor: model.metadata.documentBackgroundColor,\n sectionPropertiesXml: model.metadata.sectionPropertiesXml,\n sections: model.metadata.sections?.map((section) => ({\n startNodeIndex: section.startNodeIndex,\n sectionPropertiesXml: section.sectionPropertiesXml,\n headerSections: (section.headerSections ?? []).map((headerSection) => ({\n partName: headerSection.partName,\n referenceType: headerSection.referenceType,\n nodes: headerSection.nodes.map(cloneDocNode),\n })),\n footerSections: (section.footerSections ?? []).map((footerSection) => ({\n partName: footerSection.partName,\n referenceType: footerSection.referenceType,\n nodes: footerSection.nodes.map(cloneDocNode),\n })),\n })),\n headerSections: (model.metadata.headerSections ?? []).map((section) => ({\n partName: section.partName,\n referenceType: section.referenceType,\n nodes: section.nodes.map(cloneDocNode),\n })),\n footerSections: (model.metadata.footerSections ?? []).map((section) => ({\n partName: section.partName,\n referenceType: section.referenceType,\n nodes: section.nodes.map(cloneDocNode),\n })),\n paragraphStyles: (model.metadata.paragraphStyles ?? []).map((style) => ({\n ...style,\n runStyle: style.runStyle ? { ...style.runStyle } : undefined,\n numbering: cloneParagraphNumbering(style.numbering),\n spacing: cloneParagraphSpacing(style.spacing),\n indent: cloneParagraphIndent(style.indent),\n borders: cloneParagraphBorderSet(style.borders),\n })),\n defaultParagraphStyleId: model.metadata.defaultParagraphStyleId,\n numberingDefinitions: cloneNumberingDefinitions(\n model.metadata.numberingDefinitions\n ),\n compatibility: model.metadata.compatibility\n ? { ...model.metadata.compatibility }\n : undefined,\n footnotes: model.metadata.footnotes?.map((note) => ({\n ...note,\n nodes: note.nodes?.map(cloneDocNode),\n })),\n endnotes: model.metadata.endnotes?.map((note) => ({\n ...note,\n nodes: note.nodes?.map(cloneDocNode),\n })),\n comments: model.metadata.comments?.map((comment) => ({ ...comment })),\n },\n };\n}\n","import type { DocModel } from \"./types\";\n\nfunction deepFreezeValue(value: unknown): void {\n if (typeof value !== \"object\" || value === null) {\n return;\n }\n // Freezing a typed array throws; image byte payloads stay unfrozen.\n if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return;\n }\n if (Object.isFrozen(value)) {\n return;\n }\n\n Object.freeze(value);\n if (Array.isArray(value)) {\n for (const entry of value) {\n deepFreezeValue(entry);\n }\n return;\n }\n\n for (const key of Object.keys(value)) {\n deepFreezeValue((value as Record<string, unknown>)[key]);\n }\n}\n\n/**\n * Dev-only commit guard: freezes a committed model so in-place mutation of\n * structure shared with history snapshots throws instead of corrupting them.\n * Already-frozen subtrees are skipped, so once a model is frozen, freezing a\n * structurally shared successor only pays for the changed nodes.\n */\nexport function deepFreezeDocModel(model: DocModel): DocModel {\n deepFreezeValue(model);\n return model;\n}\n","import type { OoxmlPackage } from \"@extend-ai/react-docx-ooxml-core\";\nimport {\n mapsToWasmPackage,\n wasmBuildDocModelFromPackage,\n wasmPackageToMaps\n} from \"@extend-ai/react-docx-wasm\";\n\nimport { normalizeDocModel } from \"./normalize\";\nimport type { DocModel } from \"./types\";\n\nexport * from \"./types\";\nexport {\n allocateBlockId,\n collectDuplicateDocModelBlockIds,\n ensureDocModelBlockIds\n} from \"./block-id\";\nexport { cloneDocModel, cloneParagraphNode, cloneTableNode } from \"./clone\";\nexport { deepFreezeDocModel } from \"./freeze\";\nexport { normalizeDocModel } from \"./normalize\";\n\nexport async function buildDocModel(pkg: OoxmlPackage): Promise<DocModel> {\n const wasmPackage = mapsToWasmPackage({\n parts: pkg.parts,\n binaryAssets: pkg.binaryAssets\n });\n const model = (await wasmBuildDocModelFromPackage(wasmPackage)) as DocModel;\n return normalizeDocModel(model);\n}\n\nexport async function buildDocModelFromBytes(bytes: ArrayBuffer | Uint8Array): Promise<{\n package: OoxmlPackage;\n model: DocModel;\n}> {\n const { parseDocx } = await import(\"@extend-ai/react-docx-ooxml-core\");\n const payload = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n const buffer =\n payload.buffer.slice(payload.byteOffset, payload.byteOffset + payload.byteLength) as ArrayBuffer;\n const pkg = await parseDocx(buffer);\n const model = await buildDocModel(pkg);\n return { package: pkg, model };\n}\n"],"mappings":"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","names":[]}
@@ -655,9 +655,15 @@ function normalizeDocModel(model) {
655
655
  // ../doc-model/src/types.ts
656
656
  init_cjs_shims();
657
657
 
658
+ // ../doc-model/src/block-id.ts
659
+ init_cjs_shims();
660
+
658
661
  // ../doc-model/src/clone.ts
659
662
  init_cjs_shims();
660
663
 
664
+ // ../doc-model/src/freeze.ts
665
+ init_cjs_shims();
666
+
661
667
  // ../doc-model/src/index.ts
662
668
  async function buildDocModel(pkg) {
663
669
  const wasmPackage = mapsToWasmPackage({