oasis-editor 0.0.35 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { EditorNamedStyle, EditorTextRun } from '../../../core/model.js';
2
2
  import { DocContext } from '../docxTypes.js';
3
+ import { SerializeBlocksXml } from './textBoxRunXml.js';
3
4
 
4
- export declare function serializeRun(run: EditorTextRun, context: DocContext, paragraphStyleId: string | undefined, styles: Record<string, EditorNamedStyle> | undefined): string;
5
- export declare function serializeRunWithRelationships(run: EditorTextRun, context: DocContext, paragraphStyleId: string | undefined, styles: Record<string, EditorNamedStyle> | undefined): string;
5
+ export declare function serializeRun(run: EditorTextRun, context: DocContext, paragraphStyleId: string | undefined, styles: Record<string, EditorNamedStyle> | undefined, serializeBlocksXml: SerializeBlocksXml): string;
6
+ export declare function serializeRunWithRelationships(run: EditorTextRun, context: DocContext, paragraphStyleId: string | undefined, styles: Record<string, EditorNamedStyle> | undefined, serializeBlocksXml: SerializeBlocksXml): string;
@@ -1,4 +1,11 @@
1
- import { EditorNamedStyle, EditorTextBoxData, EditorTextRun } from '../../../core/model.js';
1
+ import { EditorBlockNode, EditorNamedStyle, EditorTextBoxData, EditorTextRun } from '../../../core/model.js';
2
2
  import { DocContext } from '../docxTypes.js';
3
3
 
4
- export declare function serializeTextBoxRun(run: EditorTextRun, textBox: EditorTextBoxData, context: DocContext, styles: Record<string, EditorNamedStyle> | undefined, rPrXml: string): string;
4
+ /**
5
+ * Serializes a list of blocks (paragraphs/tables) to `w:p`/`w:tbl` XML. A text
6
+ * box's body recurses into this. Injected as a callback by the orchestrator
7
+ * (`blocksXml`) rather than imported, so this module does not import back into
8
+ * `blocksXml` (which serializes runs through `runXml` -> here).
9
+ */
10
+ export type SerializeBlocksXml = (blocks: EditorBlockNode[], context: DocContext, styles: Record<string, EditorNamedStyle> | undefined) => string;
11
+ export declare function serializeTextBoxRun(run: EditorTextRun, textBox: EditorTextBoxData, context: DocContext, styles: Record<string, EditorNamedStyle> | undefined, rPrXml: string, serializeBlocksXml: SerializeBlocksXml): string;
@@ -4,7 +4,15 @@ import { EditorBlockNode } from '../../core/model.js';
4
4
  import { AssetRegistry } from './assetRegistry.js';
5
5
  import { DocxImportTheme } from './theme.js';
6
6
  import { NumberingMaps } from './numbering.js';
7
+ import { ParseNestedBlocks } from './runs/types.js';
7
8
 
9
+ /**
10
+ * Build a `ParseNestedBlocks` callback bound to an import context. The paragraph
11
+ * and table parsers receive this so a text-box run can recurse into block-level
12
+ * content without importing this module (which imports them) — keeping the
13
+ * recursion acyclic with `nestedBlocks` as the orchestrator.
14
+ */
15
+ export declare function createNestedBlockParser(numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme): ParseNestedBlocks;
8
16
  /**
9
17
  * Parse the block-level content of a `w:txbxContent` (text box body) into the
10
18
  * editor block model. Handles `w:p` (paragraphs) and `w:tbl` (tables), mirroring
@@ -4,10 +4,11 @@ import { EditorDropCap, EditorParagraphNode, EditorParagraphStyle } from '../../
4
4
  import { AssetRegistry } from './assetRegistry.js';
5
5
  import { DocxImportTheme } from './theme.js';
6
6
  import { NumberingMaps } from './numbering.js';
7
+ import { ParseNestedBlocks } from './runs/types.js';
7
8
 
8
- export declare function parseParagraphNodes(paragraphNode: XmlElement, numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme, inheritedStyle?: EditorParagraphStyle): Promise<{
9
+ export declare function parseParagraphNodes(paragraphNode: XmlElement, numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme, parseNestedBlocks: ParseNestedBlocks, inheritedStyle?: EditorParagraphStyle): Promise<{
9
10
  paragraphs: EditorParagraphNode[];
10
11
  pageBreakAfter: boolean;
11
12
  dropCapFrame?: EditorDropCap;
12
13
  }>;
13
- export declare function parseParagraphNode(paragraphNode: XmlElement, numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme, inheritedStyle?: EditorParagraphStyle): Promise<EditorParagraphNode>;
14
+ export declare function parseParagraphNode(paragraphNode: XmlElement, numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme, parseNestedBlocks: ParseNestedBlocks, inheritedStyle?: EditorParagraphStyle): Promise<EditorParagraphNode>;
@@ -4,5 +4,6 @@ import { EditorNamedStyle, EditorTableNode } from '../../core/model.js';
4
4
  import { AssetRegistry } from './assetRegistry.js';
5
5
  import { DocxImportTheme } from './theme.js';
6
6
  import { NumberingMaps } from './numbering.js';
7
+ import { ParseNestedBlocks } from './runs/types.js';
7
8
 
8
- export declare function parseTableNode(tableNode: XmlElement, numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme, styles?: Record<string, EditorNamedStyle>): Promise<EditorTableNode>;
9
+ export declare function parseTableNode(tableNode: XmlElement, numberingMaps: NumberingMaps, zip: JSZip, relsMap: Map<string, string>, assets: AssetRegistry, theme: DocxImportTheme, parseNestedBlocks: ParseNestedBlocks, styles?: Record<string, EditorNamedStyle>): Promise<EditorTableNode>;
@@ -2483,7 +2483,7 @@ function OasisEditorAppLazy(props = {}) {
2483
2483
  onCleanup(() => {
2484
2484
  cancelled = true;
2485
2485
  });
2486
- import("./OasisEditorApp-s0BpEyzt.js").then((m) => {
2486
+ import("./OasisEditorApp-_Y9wmRVS.js").then((m) => {
2487
2487
  cancelled = true;
2488
2488
  setProgress(1);
2489
2489
  setTimeout(() => setApp(() => m.OasisEditorApp), 180);
@@ -33603,6 +33603,207 @@ async function parseRunsContainer(container, numberingMaps, zip, relsMap, assets
33603
33603
  }
33604
33604
  return runs;
33605
33605
  }
33606
+ function parseDropCapFrame(paragraphProperties, runs) {
33607
+ var _a;
33608
+ const framePr = getFirstChildByTagNameNS(
33609
+ paragraphProperties,
33610
+ WORD_NS,
33611
+ "framePr"
33612
+ );
33613
+ if (!framePr) {
33614
+ return null;
33615
+ }
33616
+ const dropCap = getAttributeValue(framePr, "dropCap");
33617
+ if (!dropCap || dropCap === "none") {
33618
+ return null;
33619
+ }
33620
+ const text = runs.map((run) => run.text).join("");
33621
+ if (text.length === 0) {
33622
+ return null;
33623
+ }
33624
+ const lines = Number(getAttributeValue(framePr, "lines"));
33625
+ return {
33626
+ text,
33627
+ lines: Number.isFinite(lines) && lines > 0 ? lines : 3,
33628
+ type: dropCap === "margin" ? "margin" : "drop",
33629
+ style: (_a = runs[0]) == null ? void 0 : _a.styles
33630
+ };
33631
+ }
33632
+ function createImportedParagraph(runs, paragraphStyle, list, markRunStyle) {
33633
+ var _a;
33634
+ const paragraph = createEditorParagraphFromRuns(
33635
+ runs.length > 0 ? runs.map((run) => ({
33636
+ text: run.text,
33637
+ styles: run.styles,
33638
+ image: run.image
33639
+ })) : (
33640
+ // An empty paragraph still carries the formatting of its paragraph mark
33641
+ // (`w:pPr/w:rPr`), which Word uses to render the blank line's font/size.
33642
+ // Apply it so empty lines match Word instead of falling back to defaults.
33643
+ [{ text: "", styles: markRunStyle }]
33644
+ )
33645
+ );
33646
+ runs.forEach((run, index) => {
33647
+ if (run.field) {
33648
+ paragraph.runs[index].field = { ...run.field };
33649
+ }
33650
+ if (run.fieldChar) {
33651
+ paragraph.runs[index].fieldChar = { ...run.fieldChar };
33652
+ }
33653
+ if (run.fieldInstruction !== void 0) {
33654
+ paragraph.runs[index].fieldInstruction = run.fieldInstruction;
33655
+ }
33656
+ if (run.textBox) {
33657
+ paragraph.runs[index].textBox = run.textBox;
33658
+ }
33659
+ if (run.footnoteReference) {
33660
+ paragraph.runs[index].__importedFootnoteRef = {
33661
+ ...run.footnoteReference
33662
+ };
33663
+ }
33664
+ if (run.endnoteReference) {
33665
+ paragraph.runs[index].__importedEndnoteRef = {
33666
+ ...run.endnoteReference
33667
+ };
33668
+ }
33669
+ if (run.bookmark) {
33670
+ paragraph.runs[index].__importedBookmark = { ...run.bookmark };
33671
+ }
33672
+ if (run.comment) {
33673
+ paragraph.runs[index].__importedComment = { ...run.comment };
33674
+ }
33675
+ if (run.sym) {
33676
+ paragraph.runs[index].sym = { ...run.sym };
33677
+ }
33678
+ });
33679
+ paragraph.style = paragraphStyle ? { ...paragraphStyle } : void 0;
33680
+ for (const run of paragraph.runs) {
33681
+ run.styles = normalizeImportedRunStyle(
33682
+ run.styles,
33683
+ (_a = paragraph.style) == null ? void 0 : _a.styleId
33684
+ );
33685
+ }
33686
+ paragraph.list = list ? { ...list } : void 0;
33687
+ return paragraph;
33688
+ }
33689
+ function splitRunsAtPageBreaks(runs) {
33690
+ const segments = [[]];
33691
+ let hasPageBreak = false;
33692
+ const appendRun = (run, text) => {
33693
+ if (text.length === 0 && !run.image && !run.textBox && !run.field && !run.fieldChar && run.fieldInstruction === void 0 && !run.bookmark && !run.comment) {
33694
+ return;
33695
+ }
33696
+ segments[segments.length - 1].push({
33697
+ ...run,
33698
+ text
33699
+ });
33700
+ };
33701
+ for (const run of runs) {
33702
+ if (!run.text.includes(PAGE_BREAK_MARKER)) {
33703
+ appendRun(run, run.text);
33704
+ continue;
33705
+ }
33706
+ const parts = run.text.split(PAGE_BREAK_MARKER);
33707
+ parts.forEach((part, index) => {
33708
+ appendRun(run, part);
33709
+ if (index < parts.length - 1) {
33710
+ hasPageBreak = true;
33711
+ segments.push([]);
33712
+ }
33713
+ });
33714
+ }
33715
+ return { segments, hasPageBreak };
33716
+ }
33717
+ function paragraphHasVisibleContent(runs) {
33718
+ return runs.some(
33719
+ (run) => run.image || run.textBox || run.field || run.fieldChar || run.fieldInstruction !== void 0 || run.bookmark || run.comment || run.text.replace(/\s/g, "").length > 0
33720
+ );
33721
+ }
33722
+ async function parseParagraphNodes(paragraphNode, numberingMaps, zip, relsMap, assets, theme, parseNestedBlocks, inheritedStyle) {
33723
+ const paragraphProperties = getFirstChildByTagNameNS(
33724
+ paragraphNode,
33725
+ WORD_NS,
33726
+ "pPr"
33727
+ );
33728
+ const runs = await parseRunsContainer(
33729
+ paragraphNode,
33730
+ numberingMaps,
33731
+ zip,
33732
+ relsMap,
33733
+ assets,
33734
+ theme,
33735
+ void 0,
33736
+ parseNestedBlocks
33737
+ );
33738
+ const parsedStyle = withDocxImplicitSingleLineHeight(
33739
+ parseParagraphStyle$1(paragraphProperties)
33740
+ );
33741
+ const markRunStyle = parseRunStyle(
33742
+ getFirstChildByTagNameNS(paragraphProperties, WORD_NS, "rPr"),
33743
+ theme
33744
+ );
33745
+ const listResult = parseParagraphList(paragraphProperties, numberingMaps);
33746
+ const list = listResult == null ? void 0 : listResult.list;
33747
+ let styleWithListIndent = parsedStyle;
33748
+ if (listResult == null ? void 0 : listResult.indent) {
33749
+ const { left, hanging } = listResult.indent;
33750
+ const base = parsedStyle ?? {};
33751
+ styleWithListIndent = {
33752
+ ...base,
33753
+ ...base.indentLeft === void 0 && left !== void 0 ? { indentLeft: left } : {},
33754
+ ...base.indentHanging === void 0 && hanging !== void 0 ? { indentHanging: hanging } : {}
33755
+ };
33756
+ }
33757
+ const paragraphStyle = normalizeImportedParagraphStyle(
33758
+ inheritedStyle ? { ...inheritedStyle, ...styleWithListIndent ?? {} } : styleWithListIndent
33759
+ );
33760
+ const dropCapFrame = parseDropCapFrame(paragraphProperties, runs);
33761
+ if (dropCapFrame) {
33762
+ return { paragraphs: [], pageBreakAfter: false, dropCapFrame };
33763
+ }
33764
+ const { segments, hasPageBreak } = splitRunsAtPageBreaks(runs);
33765
+ if (!hasPageBreak) {
33766
+ return {
33767
+ paragraphs: [
33768
+ createImportedParagraph(runs, paragraphStyle, list, markRunStyle)
33769
+ ],
33770
+ pageBreakAfter: false
33771
+ };
33772
+ }
33773
+ const paragraphs = [];
33774
+ let pendingPageBreakBefore = false;
33775
+ for (let index = 0; index < segments.length; index += 1) {
33776
+ const segment = segments[index];
33777
+ if (index > 0) {
33778
+ pendingPageBreakBefore = true;
33779
+ }
33780
+ if (!paragraphHasVisibleContent(segment)) {
33781
+ continue;
33782
+ }
33783
+ const style2 = pendingPageBreakBefore ? { ...paragraphStyle ?? {}, pageBreakBefore: true } : paragraphStyle;
33784
+ paragraphs.push(
33785
+ createImportedParagraph(segment, style2, list, markRunStyle)
33786
+ );
33787
+ pendingPageBreakBefore = false;
33788
+ }
33789
+ return {
33790
+ paragraphs,
33791
+ pageBreakAfter: pendingPageBreakBefore
33792
+ };
33793
+ }
33794
+ async function parseParagraphNode(paragraphNode, numberingMaps, zip, relsMap, assets, theme, parseNestedBlocks, inheritedStyle) {
33795
+ const parsed = await parseParagraphNodes(
33796
+ paragraphNode,
33797
+ numberingMaps,
33798
+ zip,
33799
+ relsMap,
33800
+ assets,
33801
+ theme,
33802
+ parseNestedBlocks,
33803
+ inheritedStyle
33804
+ );
33805
+ return parsed.paragraphs[0] ?? createEditorParagraphFromRuns([{ text: "" }]);
33806
+ }
33606
33807
  function parseDocxWidthValue(element) {
33607
33808
  if (!element) {
33608
33809
  return void 0;
@@ -34131,7 +34332,7 @@ function tableStyleParagraphInheritance(tableStylePPr, paragraphStyleId, styles)
34131
34332
  }
34132
34333
  return emptyOrUndefined(filtered);
34133
34334
  }
34134
- async function parseTableNode(tableNode, numberingMaps, zip, relsMap, assets, theme, styles) {
34335
+ async function parseTableNode(tableNode, numberingMaps, zip, relsMap, assets, theme, parseNestedBlocks, styles) {
34135
34336
  var _a, _b;
34136
34337
  const gridCols = [];
34137
34338
  const tblGrid = getFirstChildByTagNameNS(tableNode, WORD_NS, "tblGrid");
@@ -34224,6 +34425,7 @@ async function parseTableNode(tableNode, numberingMaps, zip, relsMap, assets, th
34224
34425
  relsMap,
34225
34426
  assets,
34226
34427
  theme,
34428
+ parseNestedBlocks,
34227
34429
  cellInheritedStyle
34228
34430
  )
34229
34431
  );
@@ -34364,7 +34566,24 @@ async function parseTableNode(tableNode, numberingMaps, zip, relsMap, assets, th
34364
34566
  }
34365
34567
  return table;
34366
34568
  }
34569
+ function createNestedBlockParser(numberingMaps, zip, relsMap, assets, theme) {
34570
+ return (container) => parseTxbxContentBlocks(
34571
+ container,
34572
+ numberingMaps,
34573
+ zip,
34574
+ relsMap,
34575
+ assets,
34576
+ theme
34577
+ );
34578
+ }
34367
34579
  async function parseTxbxContentBlocks(container, numberingMaps, zip, relsMap, assets, theme) {
34580
+ const parseNestedBlocks = createNestedBlockParser(
34581
+ numberingMaps,
34582
+ zip,
34583
+ relsMap,
34584
+ assets,
34585
+ theme
34586
+ );
34368
34587
  const blocks = [];
34369
34588
  for (let index = 0; index < container.childNodes.length; index += 1) {
34370
34589
  const node = container.childNodes[index];
@@ -34382,7 +34601,8 @@ async function parseTxbxContentBlocks(container, numberingMaps, zip, relsMap, as
34382
34601
  zip,
34383
34602
  relsMap,
34384
34603
  assets,
34385
- theme
34604
+ theme,
34605
+ parseNestedBlocks
34386
34606
  );
34387
34607
  for (const paragraph of parsed.paragraphs) {
34388
34608
  blocks.push(paragraph);
@@ -34395,220 +34615,14 @@ async function parseTxbxContentBlocks(container, numberingMaps, zip, relsMap, as
34395
34615
  zip,
34396
34616
  relsMap,
34397
34617
  assets,
34398
- theme
34618
+ theme,
34619
+ parseNestedBlocks
34399
34620
  )
34400
34621
  );
34401
34622
  }
34402
34623
  }
34403
34624
  return blocks;
34404
34625
  }
34405
- function parseDropCapFrame(paragraphProperties, runs) {
34406
- var _a;
34407
- const framePr = getFirstChildByTagNameNS(
34408
- paragraphProperties,
34409
- WORD_NS,
34410
- "framePr"
34411
- );
34412
- if (!framePr) {
34413
- return null;
34414
- }
34415
- const dropCap = getAttributeValue(framePr, "dropCap");
34416
- if (!dropCap || dropCap === "none") {
34417
- return null;
34418
- }
34419
- const text = runs.map((run) => run.text).join("");
34420
- if (text.length === 0) {
34421
- return null;
34422
- }
34423
- const lines = Number(getAttributeValue(framePr, "lines"));
34424
- return {
34425
- text,
34426
- lines: Number.isFinite(lines) && lines > 0 ? lines : 3,
34427
- type: dropCap === "margin" ? "margin" : "drop",
34428
- style: (_a = runs[0]) == null ? void 0 : _a.styles
34429
- };
34430
- }
34431
- function createImportedParagraph(runs, paragraphStyle, list, markRunStyle) {
34432
- var _a;
34433
- const paragraph = createEditorParagraphFromRuns(
34434
- runs.length > 0 ? runs.map((run) => ({
34435
- text: run.text,
34436
- styles: run.styles,
34437
- image: run.image
34438
- })) : (
34439
- // An empty paragraph still carries the formatting of its paragraph mark
34440
- // (`w:pPr/w:rPr`), which Word uses to render the blank line's font/size.
34441
- // Apply it so empty lines match Word instead of falling back to defaults.
34442
- [{ text: "", styles: markRunStyle }]
34443
- )
34444
- );
34445
- runs.forEach((run, index) => {
34446
- if (run.field) {
34447
- paragraph.runs[index].field = { ...run.field };
34448
- }
34449
- if (run.fieldChar) {
34450
- paragraph.runs[index].fieldChar = { ...run.fieldChar };
34451
- }
34452
- if (run.fieldInstruction !== void 0) {
34453
- paragraph.runs[index].fieldInstruction = run.fieldInstruction;
34454
- }
34455
- if (run.textBox) {
34456
- paragraph.runs[index].textBox = run.textBox;
34457
- }
34458
- if (run.footnoteReference) {
34459
- paragraph.runs[index].__importedFootnoteRef = {
34460
- ...run.footnoteReference
34461
- };
34462
- }
34463
- if (run.endnoteReference) {
34464
- paragraph.runs[index].__importedEndnoteRef = {
34465
- ...run.endnoteReference
34466
- };
34467
- }
34468
- if (run.bookmark) {
34469
- paragraph.runs[index].__importedBookmark = { ...run.bookmark };
34470
- }
34471
- if (run.comment) {
34472
- paragraph.runs[index].__importedComment = { ...run.comment };
34473
- }
34474
- if (run.sym) {
34475
- paragraph.runs[index].sym = { ...run.sym };
34476
- }
34477
- });
34478
- paragraph.style = paragraphStyle ? { ...paragraphStyle } : void 0;
34479
- for (const run of paragraph.runs) {
34480
- run.styles = normalizeImportedRunStyle(
34481
- run.styles,
34482
- (_a = paragraph.style) == null ? void 0 : _a.styleId
34483
- );
34484
- }
34485
- paragraph.list = list ? { ...list } : void 0;
34486
- return paragraph;
34487
- }
34488
- function splitRunsAtPageBreaks(runs) {
34489
- const segments = [[]];
34490
- let hasPageBreak = false;
34491
- const appendRun = (run, text) => {
34492
- if (text.length === 0 && !run.image && !run.textBox && !run.field && !run.fieldChar && run.fieldInstruction === void 0 && !run.bookmark && !run.comment) {
34493
- return;
34494
- }
34495
- segments[segments.length - 1].push({
34496
- ...run,
34497
- text
34498
- });
34499
- };
34500
- for (const run of runs) {
34501
- if (!run.text.includes(PAGE_BREAK_MARKER)) {
34502
- appendRun(run, run.text);
34503
- continue;
34504
- }
34505
- const parts = run.text.split(PAGE_BREAK_MARKER);
34506
- parts.forEach((part, index) => {
34507
- appendRun(run, part);
34508
- if (index < parts.length - 1) {
34509
- hasPageBreak = true;
34510
- segments.push([]);
34511
- }
34512
- });
34513
- }
34514
- return { segments, hasPageBreak };
34515
- }
34516
- function paragraphHasVisibleContent(runs) {
34517
- return runs.some(
34518
- (run) => run.image || run.textBox || run.field || run.fieldChar || run.fieldInstruction !== void 0 || run.bookmark || run.comment || run.text.replace(/\s/g, "").length > 0
34519
- );
34520
- }
34521
- async function parseParagraphNodes(paragraphNode, numberingMaps, zip, relsMap, assets, theme, inheritedStyle) {
34522
- const paragraphProperties = getFirstChildByTagNameNS(
34523
- paragraphNode,
34524
- WORD_NS,
34525
- "pPr"
34526
- );
34527
- const runs = await parseRunsContainer(
34528
- paragraphNode,
34529
- numberingMaps,
34530
- zip,
34531
- relsMap,
34532
- assets,
34533
- theme,
34534
- void 0,
34535
- (container) => parseTxbxContentBlocks(
34536
- container,
34537
- numberingMaps,
34538
- zip,
34539
- relsMap,
34540
- assets,
34541
- theme
34542
- )
34543
- );
34544
- const parsedStyle = withDocxImplicitSingleLineHeight(
34545
- parseParagraphStyle$1(paragraphProperties)
34546
- );
34547
- const markRunStyle = parseRunStyle(
34548
- getFirstChildByTagNameNS(paragraphProperties, WORD_NS, "rPr"),
34549
- theme
34550
- );
34551
- const listResult = parseParagraphList(paragraphProperties, numberingMaps);
34552
- const list = listResult == null ? void 0 : listResult.list;
34553
- let styleWithListIndent = parsedStyle;
34554
- if (listResult == null ? void 0 : listResult.indent) {
34555
- const { left, hanging } = listResult.indent;
34556
- const base = parsedStyle ?? {};
34557
- styleWithListIndent = {
34558
- ...base,
34559
- ...base.indentLeft === void 0 && left !== void 0 ? { indentLeft: left } : {},
34560
- ...base.indentHanging === void 0 && hanging !== void 0 ? { indentHanging: hanging } : {}
34561
- };
34562
- }
34563
- const paragraphStyle = normalizeImportedParagraphStyle(
34564
- inheritedStyle ? { ...inheritedStyle, ...styleWithListIndent ?? {} } : styleWithListIndent
34565
- );
34566
- const dropCapFrame = parseDropCapFrame(paragraphProperties, runs);
34567
- if (dropCapFrame) {
34568
- return { paragraphs: [], pageBreakAfter: false, dropCapFrame };
34569
- }
34570
- const { segments, hasPageBreak } = splitRunsAtPageBreaks(runs);
34571
- if (!hasPageBreak) {
34572
- return {
34573
- paragraphs: [
34574
- createImportedParagraph(runs, paragraphStyle, list, markRunStyle)
34575
- ],
34576
- pageBreakAfter: false
34577
- };
34578
- }
34579
- const paragraphs = [];
34580
- let pendingPageBreakBefore = false;
34581
- for (let index = 0; index < segments.length; index += 1) {
34582
- const segment = segments[index];
34583
- if (index > 0) {
34584
- pendingPageBreakBefore = true;
34585
- }
34586
- if (!paragraphHasVisibleContent(segment)) {
34587
- continue;
34588
- }
34589
- const style2 = pendingPageBreakBefore ? { ...paragraphStyle ?? {}, pageBreakBefore: true } : paragraphStyle;
34590
- paragraphs.push(
34591
- createImportedParagraph(segment, style2, list, markRunStyle)
34592
- );
34593
- pendingPageBreakBefore = false;
34594
- }
34595
- return {
34596
- paragraphs,
34597
- pageBreakAfter: pendingPageBreakBefore
34598
- };
34599
- }
34600
- async function parseParagraphNode(paragraphNode, numberingMaps, zip, relsMap, assets, theme, inheritedStyle) {
34601
- const parsed = await parseParagraphNodes(
34602
- paragraphNode,
34603
- numberingMaps,
34604
- zip,
34605
- relsMap,
34606
- assets,
34607
- theme,
34608
- inheritedStyle
34609
- );
34610
- return parsed.paragraphs[0] ?? createEditorParagraphFromRuns([{ text: "" }]);
34611
- }
34612
34626
  async function parseHeaderFooterXml(xmlContent, numberingMaps, zip, relsMap, assets, theme, styles) {
34613
34627
  if (!xmlContent) {
34614
34628
  return [];
@@ -34618,6 +34632,13 @@ async function parseHeaderFooterXml(xmlContent, numberingMaps, zip, relsMap, ass
34618
34632
  if (!root) {
34619
34633
  return [];
34620
34634
  }
34635
+ const parseNestedBlocks = createNestedBlockParser(
34636
+ numberingMaps,
34637
+ zip,
34638
+ relsMap,
34639
+ assets,
34640
+ theme
34641
+ );
34621
34642
  const blocks = [];
34622
34643
  for (let index = 0; index < root.childNodes.length; index += 1) {
34623
34644
  const node = root.childNodes[index];
@@ -34633,7 +34654,8 @@ async function parseHeaderFooterXml(xmlContent, numberingMaps, zip, relsMap, ass
34633
34654
  zip,
34634
34655
  relsMap,
34635
34656
  assets,
34636
- theme
34657
+ theme,
34658
+ parseNestedBlocks
34637
34659
  )
34638
34660
  );
34639
34661
  } else if (element.localName === "tbl" && element.namespaceURI === WORD_NS) {
@@ -34645,6 +34667,7 @@ async function parseHeaderFooterXml(xmlContent, numberingMaps, zip, relsMap, ass
34645
34667
  relsMap,
34646
34668
  assets,
34647
34669
  theme,
34670
+ parseNestedBlocks,
34648
34671
  styles
34649
34672
  )
34650
34673
  );
@@ -34676,6 +34699,13 @@ async function parseFootnotesXml(xmlContent, numberingMaps, zip, relsMap, assets
34676
34699
  let continuationSeparator;
34677
34700
  const footnoteElements = getChildrenByTagNameNS(root, WORD_NS, "footnote");
34678
34701
  let counter2 = 0;
34702
+ const parseNestedBlocks = createNestedBlockParser(
34703
+ numberingMaps,
34704
+ zip,
34705
+ relsMap,
34706
+ assets,
34707
+ theme
34708
+ );
34679
34709
  for (const footnoteEl of footnoteElements) {
34680
34710
  const idAttr = getAttributeValue(footnoteEl, "id") ?? "";
34681
34711
  const type = getAttributeValue(footnoteEl, "type") ?? "";
@@ -34693,7 +34723,8 @@ async function parseFootnotesXml(xmlContent, numberingMaps, zip, relsMap, assets
34693
34723
  zip,
34694
34724
  relsMap,
34695
34725
  assets,
34696
- theme
34726
+ theme,
34727
+ parseNestedBlocks
34697
34728
  )
34698
34729
  );
34699
34730
  } else if (element.localName === "tbl") {
@@ -34705,6 +34736,7 @@ async function parseFootnotesXml(xmlContent, numberingMaps, zip, relsMap, assets
34705
34736
  relsMap,
34706
34737
  assets,
34707
34738
  theme,
34739
+ parseNestedBlocks,
34708
34740
  styles
34709
34741
  )
34710
34742
  );
@@ -34766,6 +34798,13 @@ async function parseEndnotesXml(xmlContent, numberingMaps, zip, relsMap, assets,
34766
34798
  let continuationSeparator;
34767
34799
  const endnoteElements = getChildrenByTagNameNS(root, WORD_NS, "endnote");
34768
34800
  let counter2 = 0;
34801
+ const parseNestedBlocks = createNestedBlockParser(
34802
+ numberingMaps,
34803
+ zip,
34804
+ relsMap,
34805
+ assets,
34806
+ theme
34807
+ );
34769
34808
  for (const endnoteEl of endnoteElements) {
34770
34809
  const idAttr = getAttributeValue(endnoteEl, "id") ?? "";
34771
34810
  const type = getAttributeValue(endnoteEl, "type") ?? "";
@@ -34783,7 +34822,8 @@ async function parseEndnotesXml(xmlContent, numberingMaps, zip, relsMap, assets,
34783
34822
  zip,
34784
34823
  relsMap,
34785
34824
  assets,
34786
- theme
34825
+ theme,
34826
+ parseNestedBlocks
34787
34827
  )
34788
34828
  );
34789
34829
  } else if (element.localName === "tbl") {
@@ -34795,6 +34835,7 @@ async function parseEndnotesXml(xmlContent, numberingMaps, zip, relsMap, assets,
34795
34835
  relsMap,
34796
34836
  assets,
34797
34837
  theme,
34838
+ parseNestedBlocks,
34798
34839
  styles
34799
34840
  )
34800
34841
  );
@@ -35153,6 +35194,13 @@ async function importDocxToEditorDocument(buffer, options = {}) {
35153
35194
  );
35154
35195
  }
35155
35196
  };
35197
+ const parseNestedBlocks = createNestedBlockParser(
35198
+ numberingMaps,
35199
+ zip,
35200
+ relsMap,
35201
+ assets,
35202
+ theme
35203
+ );
35156
35204
  for (let index = 0; index < body.childNodes.length; index += 1) {
35157
35205
  const node = body.childNodes[index];
35158
35206
  if ((node == null ? void 0 : node.nodeType) !== node.ELEMENT_NODE) {
@@ -35173,7 +35221,8 @@ async function importDocxToEditorDocument(buffer, options = {}) {
35173
35221
  zip,
35174
35222
  relsMap,
35175
35223
  assets,
35176
- theme
35224
+ theme,
35225
+ parseNestedBlocks
35177
35226
  );
35178
35227
  for (const paragraph of parsedParagraph.paragraphs) {
35179
35228
  appendBodyBlock(paragraph);
@@ -35194,6 +35243,7 @@ async function importDocxToEditorDocument(buffer, options = {}) {
35194
35243
  relsMap,
35195
35244
  assets,
35196
35245
  theme,
35246
+ parseNestedBlocks,
35197
35247
  importedStyles
35198
35248
  )
35199
35249
  );
@@ -35539,7 +35589,7 @@ function importDocxInWorker(buffer, options = {}) {
35539
35589
  const worker = new Worker(
35540
35590
  new URL(
35541
35591
  /* @vite-ignore */
35542
- "" + new URL("assets/importDocxWorker-xRrspiYv.js", import.meta.url).href,
35592
+ "" + new URL("assets/importDocxWorker-CMMv6C-7.js", import.meta.url).href,
35543
35593
  import.meta.url
35544
35594
  ),
35545
35595
  {
@@ -1,4 +1,4 @@
1
- import { aX, bP, bQ, bR, bS, bT, bd, bU, aY, aT, bV, bW, bX, aW, bY, aR, bZ, b_, b$, c0, c1, bJ, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, bi, cd, bI, ce, bR as bR2, bW as bW2, bY as bY2, c5 as c52, c7 as c72, cc as cc2, cf, aV, aQ, cg, ch, ci, aS, cj, ck, aU } from "./index-BOYdiFMb.js";
1
+ import { aX, bP, bQ, bR, bS, bT, bd, bU, aY, aT, bV, bW, bX, aW, bY, aR, bZ, b_, b$, c0, c1, bJ, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, bi, cd, bI, ce, bR as bR2, bW as bW2, bY as bY2, c5 as c52, c7 as c72, cc as cc2, cf, aV, aQ, cg, ch, ci, aS, cj, ck, aU } from "./index-CXQHbZ10.js";
2
2
  export {
3
3
  aX as BalloonShell,
4
4
  bP as Button,