@superdoc-dev/cli 0.2.0-next.2 → 0.2.0-next.4

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 (2) hide show
  1. package/dist/index.js +662 -380
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -534,19 +534,12 @@ function mutationOperation(options) {
534
534
  function projectFromDefinitions(fn) {
535
535
  return Object.fromEntries(OPERATION_IDS.map((id) => [id, fn(id, OPERATION_DEFINITIONS[id])]));
536
536
  }
537
- var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_COMMAND, T_NOT_FOUND_TRACKED, T_NOT_FOUND_COMMAND_TRACKED, T_PLAN_ENGINE, T_QUERY_MATCH, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
537
+ var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_CAPABLE, T_PLAN_ENGINE, T_QUERY_MATCH, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
538
538
  var init_operation_definitions = __esm(() => {
539
539
  NONE_FAILURES = [];
540
540
  NONE_THROWS = [];
541
541
  T_NOT_FOUND = ["TARGET_NOT_FOUND"];
542
- T_NOT_FOUND_COMMAND = ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"];
543
- T_NOT_FOUND_TRACKED = ["TARGET_NOT_FOUND", "TRACK_CHANGE_COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"];
544
- T_NOT_FOUND_COMMAND_TRACKED = [
545
- "TARGET_NOT_FOUND",
546
- "COMMAND_UNAVAILABLE",
547
- "TRACK_CHANGE_COMMAND_UNAVAILABLE",
548
- "CAPABILITY_UNAVAILABLE"
549
- ];
542
+ T_NOT_FOUND_CAPABLE = ["TARGET_NOT_FOUND", "CAPABILITY_UNAVAILABLE"];
550
543
  T_PLAN_ENGINE = [
551
544
  "REVISION_MISMATCH",
552
545
  "MATCH_NOT_FOUND",
@@ -569,6 +562,7 @@ var init_operation_definitions = __esm(() => {
569
562
  requiresDocumentContext: true,
570
563
  metadata: readOperation({
571
564
  idempotency: "idempotent",
565
+ throws: ["CAPABILITY_UNAVAILABLE", "INVALID_INPUT"],
572
566
  deterministicTargetResolution: false
573
567
  }),
574
568
  referenceDocPath: "find.mdx",
@@ -621,7 +615,7 @@ var init_operation_definitions = __esm(() => {
621
615
  supportsDryRun: true,
622
616
  supportsTrackedMode: true,
623
617
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
624
- throws: [...T_NOT_FOUND_TRACKED, "INVALID_TARGET"]
618
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
625
619
  }),
626
620
  referenceDocPath: "insert.mdx",
627
621
  referenceGroup: "core"
@@ -635,7 +629,7 @@ var init_operation_definitions = __esm(() => {
635
629
  supportsDryRun: true,
636
630
  supportsTrackedMode: true,
637
631
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
638
- throws: [...T_NOT_FOUND_TRACKED, "INVALID_TARGET"]
632
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
639
633
  }),
640
634
  referenceDocPath: "replace.mdx",
641
635
  referenceGroup: "core"
@@ -649,7 +643,7 @@ var init_operation_definitions = __esm(() => {
649
643
  supportsDryRun: true,
650
644
  supportsTrackedMode: true,
651
645
  possibleFailureCodes: ["NO_OP"],
652
- throws: [...T_NOT_FOUND_TRACKED, "INVALID_TARGET"]
646
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
653
647
  }),
654
648
  referenceDocPath: "delete.mdx",
655
649
  referenceGroup: "core"
@@ -663,7 +657,7 @@ var init_operation_definitions = __esm(() => {
663
657
  supportsDryRun: true,
664
658
  supportsTrackedMode: true,
665
659
  possibleFailureCodes: ["INVALID_TARGET"],
666
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET", "INVALID_INPUT"]
660
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
667
661
  }),
668
662
  referenceDocPath: "format/apply.mdx",
669
663
  referenceGroup: "format"
@@ -677,7 +671,7 @@ var init_operation_definitions = __esm(() => {
677
671
  supportsDryRun: true,
678
672
  supportsTrackedMode: true,
679
673
  possibleFailureCodes: ["INVALID_TARGET"],
680
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
674
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
681
675
  }),
682
676
  referenceDocPath: "create/paragraph.mdx",
683
677
  referenceGroup: "create"
@@ -691,7 +685,7 @@ var init_operation_definitions = __esm(() => {
691
685
  supportsDryRun: true,
692
686
  supportsTrackedMode: true,
693
687
  possibleFailureCodes: ["INVALID_TARGET"],
694
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
688
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
695
689
  }),
696
690
  referenceDocPath: "create/heading.mdx",
697
691
  referenceGroup: "create"
@@ -702,7 +696,7 @@ var init_operation_definitions = __esm(() => {
702
696
  requiresDocumentContext: true,
703
697
  metadata: readOperation({
704
698
  idempotency: "idempotent",
705
- throws: T_NOT_FOUND
699
+ throws: ["TARGET_NOT_FOUND", "INVALID_TARGET", "INVALID_INPUT"]
706
700
  }),
707
701
  referenceDocPath: "lists/list.mdx",
708
702
  referenceGroup: "lists"
@@ -727,7 +721,7 @@ var init_operation_definitions = __esm(() => {
727
721
  supportsDryRun: true,
728
722
  supportsTrackedMode: true,
729
723
  possibleFailureCodes: ["INVALID_TARGET"],
730
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
724
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
731
725
  }),
732
726
  referenceDocPath: "lists/insert.mdx",
733
727
  referenceGroup: "lists"
@@ -741,7 +735,7 @@ var init_operation_definitions = __esm(() => {
741
735
  supportsDryRun: true,
742
736
  supportsTrackedMode: false,
743
737
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
744
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
738
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
745
739
  }),
746
740
  referenceDocPath: "lists/set-type.mdx",
747
741
  referenceGroup: "lists"
@@ -755,7 +749,7 @@ var init_operation_definitions = __esm(() => {
755
749
  supportsDryRun: true,
756
750
  supportsTrackedMode: false,
757
751
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
758
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
752
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
759
753
  }),
760
754
  referenceDocPath: "lists/indent.mdx",
761
755
  referenceGroup: "lists"
@@ -769,7 +763,7 @@ var init_operation_definitions = __esm(() => {
769
763
  supportsDryRun: true,
770
764
  supportsTrackedMode: false,
771
765
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
772
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
766
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
773
767
  }),
774
768
  referenceDocPath: "lists/outdent.mdx",
775
769
  referenceGroup: "lists"
@@ -783,7 +777,7 @@ var init_operation_definitions = __esm(() => {
783
777
  supportsDryRun: true,
784
778
  supportsTrackedMode: false,
785
779
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
786
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
780
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
787
781
  }),
788
782
  referenceDocPath: "lists/restart.mdx",
789
783
  referenceGroup: "lists"
@@ -797,7 +791,7 @@ var init_operation_definitions = __esm(() => {
797
791
  supportsDryRun: true,
798
792
  supportsTrackedMode: false,
799
793
  possibleFailureCodes: ["INVALID_TARGET"],
800
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
794
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
801
795
  }),
802
796
  referenceDocPath: "lists/exit.mdx",
803
797
  referenceGroup: "lists"
@@ -811,7 +805,7 @@ var init_operation_definitions = __esm(() => {
811
805
  supportsDryRun: false,
812
806
  supportsTrackedMode: false,
813
807
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
814
- throws: [...T_NOT_FOUND_COMMAND, "INVALID_TARGET"]
808
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
815
809
  }),
816
810
  referenceDocPath: "comments/create.mdx",
817
811
  referenceGroup: "comments"
@@ -825,7 +819,7 @@ var init_operation_definitions = __esm(() => {
825
819
  supportsDryRun: false,
826
820
  supportsTrackedMode: false,
827
821
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
828
- throws: [...T_NOT_FOUND_COMMAND, "INVALID_TARGET", "INVALID_INPUT"]
822
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
829
823
  }),
830
824
  referenceDocPath: "comments/patch.mdx",
831
825
  referenceGroup: "comments"
@@ -839,7 +833,7 @@ var init_operation_definitions = __esm(() => {
839
833
  supportsDryRun: false,
840
834
  supportsTrackedMode: false,
841
835
  possibleFailureCodes: ["NO_OP"],
842
- throws: T_NOT_FOUND_COMMAND
836
+ throws: T_NOT_FOUND_CAPABLE
843
837
  }),
844
838
  referenceDocPath: "comments/delete.mdx",
845
839
  referenceGroup: "comments"
@@ -860,7 +854,8 @@ var init_operation_definitions = __esm(() => {
860
854
  description: "List all comment threads in the document.",
861
855
  requiresDocumentContext: true,
862
856
  metadata: readOperation({
863
- idempotency: "idempotent"
857
+ idempotency: "idempotent",
858
+ throws: ["INVALID_INPUT"]
864
859
  }),
865
860
  referenceDocPath: "comments/list.mdx",
866
861
  referenceGroup: "comments"
@@ -870,7 +865,8 @@ var init_operation_definitions = __esm(() => {
870
865
  description: "List all tracked changes in the document.",
871
866
  requiresDocumentContext: true,
872
867
  metadata: readOperation({
873
- idempotency: "idempotent"
868
+ idempotency: "idempotent",
869
+ throws: ["INVALID_INPUT"]
874
870
  }),
875
871
  referenceDocPath: "track-changes/list.mdx",
876
872
  referenceGroup: "trackChanges"
@@ -895,7 +891,7 @@ var init_operation_definitions = __esm(() => {
895
891
  supportsDryRun: false,
896
892
  supportsTrackedMode: false,
897
893
  possibleFailureCodes: ["NO_OP"],
898
- throws: [...T_NOT_FOUND_COMMAND, "INVALID_INPUT", "INVALID_TARGET"]
894
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_INPUT", "INVALID_TARGET"]
899
895
  }),
900
896
  referenceDocPath: "track-changes/decide.mdx",
901
897
  referenceGroup: "trackChanges"
@@ -1136,7 +1132,7 @@ function buildInternalContractSchemas() {
1136
1132
  operations
1137
1133
  };
1138
1134
  }
1139
- var nodeTypeValues, blockNodeTypeValues, inlineNodeTypeValues, knownTargetKindValues, SHARED_DEFS, rangeSchema, positionSchema, inlineAnchorSchema, targetKindSchema, textAddressSchema, blockNodeAddressSchema, paragraphAddressSchema, headingAddressSchema, listItemAddressSchema, inlineNodeAddressSchema, nodeAddressSchema, commentAddressSchema, trackedChangeAddressSchema, entityAddressSchema, resolvedHandleSchema, pageInfoSchema, receiptSuccessSchema, textMutationRangeSchema, textMutationResolutionSchema, textMutationSuccessSchema, matchRunSchema, matchBlockSchema, trackChangeRefSchema, createParagraphSuccessSchema, createHeadingSuccessSchema, headingLevelSchema, listsInsertSuccessSchema, listsMutateItemSuccessSchema, listsExitSuccessSchema, nodeSummarySchema, nodeInfoSchema, matchContextSchema, unknownNodeDiagnosticSchema, textSelectorSchema, nodeSelectorSchema, selectorShorthandSchema, selectSchema, findInputSchema, findItemDomainSchema, findOutputSchema, documentInfoCountsSchema, documentInfoOutlineItemSchema, documentInfoCapabilitiesSchema, documentInfoSchema, listKindSchema, listInsertPositionSchema, listItemInfoSchema, listItemDomainItemSchema, listsListResultSchema, commentInfoSchema, commentDomainItemSchema, commentsListResultSchema, trackChangeInfoSchema, trackChangeDomainItemSchema, trackChangesListResultSchema, capabilityReasonCodeSchema, capabilityReasonsSchema, capabilityFlagSchema, operationRuntimeCapabilitySchema, operationCapabilitiesSchema, formatCapabilitiesSchema, capabilitiesOutputSchema, strictEmptyObjectSchema, insertInputSchema, operationSchemas;
1135
+ var nodeTypeValues, blockNodeTypeValues, inlineNodeTypeValues, knownTargetKindValues, SHARED_DEFS, rangeSchema, positionSchema, inlineAnchorSchema, targetKindSchema, textAddressSchema, textTargetSchema, blockNodeAddressSchema, paragraphAddressSchema, headingAddressSchema, listItemAddressSchema, inlineNodeAddressSchema, nodeAddressSchema, commentAddressSchema, trackedChangeAddressSchema, entityAddressSchema, resolvedHandleSchema, pageInfoSchema, receiptSuccessSchema, textMutationRangeSchema, textMutationResolutionSchema, textMutationSuccessSchema, matchRunSchema, matchBlockSchema, trackChangeRefSchema, createParagraphSuccessSchema, createHeadingSuccessSchema, headingLevelSchema, listsInsertSuccessSchema, listsMutateItemSuccessSchema, listsExitSuccessSchema, nodeSummarySchema, nodeInfoSchema, matchContextSchema, unknownNodeDiagnosticSchema, textSelectorSchema, nodeSelectorSchema, selectorShorthandSchema, selectSchema, findInputSchema, findItemDomainSchema, findOutputSchema, documentInfoCountsSchema, documentInfoOutlineItemSchema, documentInfoCapabilitiesSchema, documentInfoSchema, listKindSchema, listInsertPositionSchema, listItemInfoSchema, listItemDomainItemSchema, listsListResultSchema, commentInfoSchema, commentDomainItemSchema, commentsListResultSchema, trackChangeInfoSchema, trackChangeDomainItemSchema, trackChangesListResultSchema, capabilityReasonCodeSchema, capabilityReasonsSchema, capabilityFlagSchema, operationRuntimeCapabilitySchema, operationCapabilitiesSchema, formatCapabilitiesSchema, capabilitiesOutputSchema, strictEmptyObjectSchema, insertInputSchema, operationSchemas;
1140
1136
  var init_schemas = __esm(() => {
1141
1137
  init_command_catalog();
1142
1138
  init_types2();
@@ -1178,6 +1174,14 @@ var init_schemas = __esm(() => {
1178
1174
  blockId: { type: "string" },
1179
1175
  range: ref("Range")
1180
1176
  }, ["kind", "blockId", "range"]),
1177
+ TextSegment: objectSchema({
1178
+ blockId: { type: "string" },
1179
+ range: ref("Range")
1180
+ }, ["blockId", "range"]),
1181
+ TextTarget: objectSchema({
1182
+ kind: { const: "text" },
1183
+ segments: { type: "array", items: ref("TextSegment"), minItems: 1 }
1184
+ }, ["kind", "segments"]),
1181
1185
  BlockNodeAddress: objectSchema({
1182
1186
  kind: { const: "block" },
1183
1187
  nodeType: { enum: [...blockNodeTypeValues] },
@@ -1287,6 +1291,7 @@ var init_schemas = __esm(() => {
1287
1291
  inlineAnchorSchema = ref("InlineAnchor");
1288
1292
  targetKindSchema = ref("TargetKind");
1289
1293
  textAddressSchema = ref("TextAddress");
1294
+ textTargetSchema = ref("TextTarget");
1290
1295
  blockNodeAddressSchema = ref("BlockNodeAddress");
1291
1296
  paragraphAddressSchema = ref("ParagraphAddress");
1292
1297
  headingAddressSchema = ref("HeadingAddress");
@@ -1453,7 +1458,8 @@ var init_schemas = __esm(() => {
1453
1458
  text: { type: "string" },
1454
1459
  isInternal: { type: "boolean" },
1455
1460
  status: { enum: ["open", "resolved"] },
1456
- target: textAddressSchema,
1461
+ target: textTargetSchema,
1462
+ anchoredText: { type: "string" },
1457
1463
  createdTime: { type: "number" },
1458
1464
  creatorName: { type: "string" },
1459
1465
  creatorEmail: { type: "string" }
@@ -1465,7 +1471,8 @@ var init_schemas = __esm(() => {
1465
1471
  text: { type: "string" },
1466
1472
  isInternal: { type: "boolean" },
1467
1473
  status: { enum: ["open", "resolved"] },
1468
- target: textAddressSchema,
1474
+ target: textTargetSchema,
1475
+ anchoredText: { type: "string" },
1469
1476
  createdTime: { type: "number" },
1470
1477
  creatorName: { type: "string" },
1471
1478
  creatorEmail: { type: "string" }
@@ -2297,19 +2304,8 @@ var init_insert = __esm(() => {
2297
2304
 
2298
2305
  // ../../packages/document-api/src/lists/lists.ts
2299
2306
  function validateListTarget(input, operationName) {
2300
- const hasTarget = input.target !== undefined;
2301
- const hasNodeId = input.nodeId !== undefined;
2302
- if (hasTarget && hasNodeId) {
2303
- throw new DocumentApiValidationError("INVALID_TARGET", `Cannot combine target with nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["target", "nodeId"] });
2304
- }
2305
- if (!hasTarget && !hasNodeId) {
2306
- throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} requires a target. Provide either target or nodeId.`);
2307
- }
2308
- if (hasNodeId && typeof input.nodeId !== "string") {
2309
- throw new DocumentApiValidationError("INVALID_TARGET", `nodeId must be a string, got ${typeof input.nodeId}.`, {
2310
- field: "nodeId",
2311
- value: input.nodeId
2312
- });
2307
+ if (input.target === undefined) {
2308
+ throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} requires a target.`);
2313
2309
  }
2314
2310
  }
2315
2311
  function executeListsList(adapter, query2) {
@@ -2385,19 +2381,8 @@ function validateCreateLocation(at, operationName) {
2385
2381
  if (at.kind !== "before" && at.kind !== "after")
2386
2382
  return;
2387
2383
  const loc = at;
2388
- const hasTarget = loc.target !== undefined;
2389
- const hasNodeId = loc.nodeId !== undefined;
2390
- if (hasTarget && hasNodeId) {
2391
- throw new DocumentApiValidationError("INVALID_TARGET", `Cannot combine at.target with at.nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["at.target", "at.nodeId"] });
2392
- }
2393
- if (!hasTarget && !hasNodeId) {
2394
- throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires either at.target or at.nodeId.`, { fields: ["at.target", "at.nodeId"] });
2395
- }
2396
- if (hasNodeId && typeof loc.nodeId !== "string") {
2397
- throw new DocumentApiValidationError("INVALID_TARGET", `at.nodeId must be a string, got ${typeof loc.nodeId}.`, {
2398
- field: "at.nodeId",
2399
- value: loc.nodeId
2400
- });
2384
+ if (loc.target === undefined) {
2385
+ throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires at.target.`, { fields: ["at.target"] });
2401
2386
  }
2402
2387
  }
2403
2388
  function normalizeParagraphCreateLocation(location2) {
@@ -18045,7 +18030,7 @@ var init_constants_DBKi0Amm_es = __esm(() => {
18045
18030
  ]);
18046
18031
  });
18047
18032
 
18048
- // ../../packages/superdoc/dist/chunks/SuperConverter-D9XMPi6H.es.js
18033
+ // ../../packages/superdoc/dist/chunks/SuperConverter-Cf1y7bFA.es.js
18049
18034
  function getExtensionConfigField(extension, field, context = { name: "" }) {
18050
18035
  const fieldValue = extension.config[field];
18051
18036
  if (typeof fieldValue === "function")
@@ -35280,6 +35265,16 @@ var isRegExp = (value) => {
35280
35265
  i2++;
35281
35266
  continue;
35282
35267
  }
35268
+ const childElements = node2.elements || [];
35269
+ if (childElements.length > 0) {
35270
+ for (const child of childElements) {
35271
+ if (Array.isArray(child.elements))
35272
+ child.elements = preProcessPageFieldsOnly(child.elements, depth + 1).processedNodes;
35273
+ processedNodes.push(child);
35274
+ }
35275
+ i2++;
35276
+ continue;
35277
+ }
35283
35278
  }
35284
35279
  if (fldType === "begin") {
35285
35280
  const fieldInfo = scanFieldSequence(nodes, i2);
@@ -35301,6 +35296,12 @@ var isRegExp = (value) => {
35301
35296
  continue;
35302
35297
  }
35303
35298
  }
35299
+ if (node2.name === "w:r" && node2.elements?.some((el) => el.name === "w:pgNum")) {
35300
+ const processedField = preProcessPageInstruction([], "", node2.elements.find((el) => el.name === "w:rPr") || null);
35301
+ processedNodes.push(...processedField);
35302
+ i2++;
35303
+ continue;
35304
+ }
35304
35305
  if (Array.isArray(node2.elements))
35305
35306
  node2.elements = preProcessPageFieldsOnly(node2.elements, depth + 1).processedNodes;
35306
35307
  processedNodes.push(node2);
@@ -41780,7 +41781,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41780
41781
  state.kern = kernNode.attributes["w:val"];
41781
41782
  }
41782
41783
  }, SuperConverter;
41783
- var init_SuperConverter_D9XMPi6H_es = __esm(() => {
41784
+ var init_SuperConverter_Cf1y7bFA_es = __esm(() => {
41784
41785
  init_rolldown_runtime_B2q5OVn9_es();
41785
41786
  init_jszip_ChlR43oI_es();
41786
41787
  init_xml_js_DLE8mr0n_es();
@@ -87168,9 +87169,9 @@ var init_remark_gfm_RDxetNVS_es = __esm(() => {
87168
87169
  emptyOptions4 = {};
87169
87170
  });
87170
87171
 
87171
- // ../../packages/superdoc/dist/chunks/src-CYnAk7Cg.es.js
87172
- var exports_src_CYnAk7Cg_es = {};
87173
- __export(exports_src_CYnAk7Cg_es, {
87172
+ // ../../packages/superdoc/dist/chunks/src-DsAtPNrg.es.js
87173
+ var exports_src_DsAtPNrg_es = {};
87174
+ __export(exports_src_DsAtPNrg_es, {
87174
87175
  zt: () => defineMark,
87175
87176
  z: () => cM,
87176
87177
  yt: () => removeAwarenessStates,
@@ -94186,17 +94187,8 @@ function executeInsert2(adapter, input2, options) {
94186
94187
  }, options);
94187
94188
  }
94188
94189
  function validateListTarget2(input2, operationName) {
94189
- const hasTarget = input2.target !== undefined;
94190
- const hasNodeId = input2.nodeId !== undefined;
94191
- if (hasTarget && hasNodeId)
94192
- throw new DocumentApiValidationError2("INVALID_TARGET", `Cannot combine target with nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["target", "nodeId"] });
94193
- if (!hasTarget && !hasNodeId)
94194
- throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} requires a target. Provide either target or nodeId.`);
94195
- if (hasNodeId && typeof input2.nodeId !== "string")
94196
- throw new DocumentApiValidationError2("INVALID_TARGET", `nodeId must be a string, got ${typeof input2.nodeId}.`, {
94197
- field: "nodeId",
94198
- value: input2.nodeId
94199
- });
94190
+ if (input2.target === undefined)
94191
+ throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} requires a target.`);
94200
94192
  }
94201
94193
  function executeListsList2(adapter, query2) {
94202
94194
  return adapter.list(query2);
@@ -94257,18 +94249,8 @@ function executeReplace2(adapter, input2, options) {
94257
94249
  function validateCreateLocation2(at, operationName) {
94258
94250
  if (at.kind !== "before" && at.kind !== "after")
94259
94251
  return;
94260
- const loc = at;
94261
- const hasTarget = loc.target !== undefined;
94262
- const hasNodeId = loc.nodeId !== undefined;
94263
- if (hasTarget && hasNodeId)
94264
- throw new DocumentApiValidationError2("INVALID_TARGET", `Cannot combine at.target with at.nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["at.target", "at.nodeId"] });
94265
- if (!hasTarget && !hasNodeId)
94266
- throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires either at.target or at.nodeId.`, { fields: ["at.target", "at.nodeId"] });
94267
- if (hasNodeId && typeof loc.nodeId !== "string")
94268
- throw new DocumentApiValidationError2("INVALID_TARGET", `at.nodeId must be a string, got ${typeof loc.nodeId}.`, {
94269
- field: "at.nodeId",
94270
- value: loc.nodeId
94271
- });
94252
+ if (at.target === undefined)
94253
+ throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires at.target.`, { fields: ["at.target"] });
94272
94254
  }
94273
94255
  function normalizeParagraphCreateLocation2(location$1) {
94274
94256
  return location$1 ?? { kind: "documentEnd" };
@@ -95855,10 +95837,7 @@ function isRefWhere(where) {
95855
95837
  return where.by === "ref";
95856
95838
  }
95857
95839
  function isV3Ref(payload) {
95858
- return "v" in payload && payload.v === 3;
95859
- }
95860
- function isV2Ref(payload) {
95861
- return "v" in payload && payload.v === 2;
95840
+ return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
95862
95841
  }
95863
95842
  function resolveAbsoluteRange(editor, candidate, from$12, to, stepId) {
95864
95843
  const resolved = resolveTextRangeInBlock(candidate.node, candidate.pos, {
@@ -96088,62 +96067,6 @@ function decodeTextRefPayload(encoded, stepId) {
96088
96067
  throw planError("INVALID_INPUT", "invalid text ref encoding", stepId);
96089
96068
  }
96090
96069
  }
96091
- function resolveV1TextRef(editor, index2, step, refData) {
96092
- const currentRevision = getRevision(editor);
96093
- if (refData.rev !== currentRevision)
96094
- throw planError("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, {
96095
- refRevision: refData.rev,
96096
- currentRevision
96097
- });
96098
- if (!refData.ranges?.length)
96099
- return [];
96100
- const coalesced = normalizeMatchRanges(step.id, refData.ranges);
96101
- const candidate = index2.candidates.find((c$3) => c$3.nodeId === coalesced.blockId);
96102
- if (!candidate)
96103
- return [];
96104
- const matchText = getBlockText(editor, candidate).slice(coalesced.from, coalesced.to);
96105
- return [buildRangeTarget(editor, step, {
96106
- blockId: coalesced.blockId,
96107
- from: coalesced.from,
96108
- to: coalesced.to,
96109
- text: matchText,
96110
- marks: [],
96111
- blockPos: candidate.pos
96112
- }, candidate)];
96113
- }
96114
- function resolveV2TextRef(editor, index2, step, refData) {
96115
- const currentRevision = getRevision(editor);
96116
- if (refData.rev !== currentRevision)
96117
- throw planError("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, {
96118
- refRevision: refData.rev,
96119
- currentRevision
96120
- });
96121
- if (!refData.segments?.length)
96122
- return [];
96123
- const segments = refData.segments.map((s2) => ({
96124
- blockId: s2.blockId,
96125
- from: s2.start,
96126
- to: s2.end
96127
- }));
96128
- if (segments.length === 1) {
96129
- const seg = segments[0];
96130
- const candidate = index2.candidates.find((c$3) => c$3.nodeId === seg.blockId);
96131
- if (!candidate)
96132
- return [];
96133
- const matchText = getBlockText(editor, candidate).slice(seg.from, seg.to);
96134
- const target = buildRangeTarget(editor, step, {
96135
- blockId: seg.blockId,
96136
- from: seg.from,
96137
- to: seg.to,
96138
- text: matchText,
96139
- marks: [],
96140
- blockPos: candidate.pos
96141
- }, candidate);
96142
- target.matchId = refData.matchId;
96143
- return [target];
96144
- }
96145
- return [buildSpanTarget(editor, index2, step, segments, refData.matchId)];
96146
- }
96147
96070
  function resolveV3TextRef(editor, index2, step, refData) {
96148
96071
  const currentRevision = getRevision(editor);
96149
96072
  if (refData.rev !== currentRevision)
@@ -96179,11 +96102,9 @@ function resolveV3TextRef(editor, index2, step, refData) {
96179
96102
  }
96180
96103
  function resolveTextRef(editor, index2, step, ref$2) {
96181
96104
  const payload = decodeTextRefPayload(ref$2.slice(5), step.id);
96182
- if (isV3Ref(payload))
96183
- return resolveV3TextRef(editor, index2, step, payload);
96184
- if (isV2Ref(payload))
96185
- return resolveV2TextRef(editor, index2, step, payload);
96186
- return resolveV1TextRef(editor, index2, step, payload);
96105
+ if (!isV3Ref(payload))
96106
+ throw planError("INVALID_INPUT", "only V3 text refs are supported", step.id);
96107
+ return resolveV3TextRef(editor, index2, step, payload);
96187
96108
  }
96188
96109
  function resolveBlockRef(editor, index2, step, ref$2) {
96189
96110
  const candidate = index2.candidates.find((c$3) => c$3.nodeId === ref$2);
@@ -96206,8 +96127,6 @@ function dispatchRefHandler(editor, index2, step, ref$2) {
96206
96127
  return resolveBlockRef(editor, index2, step, ref$2);
96207
96128
  }
96208
96129
  function resolveRefTargets(editor, index2, step, where) {
96209
- if (where.require !== undefined && where.require !== "exactlyOne")
96210
- throw planError("INVALID_INPUT", `ref-based targeting only accepts require: 'exactlyOne' (received '${where.require}')`, step.id);
96211
96130
  return dispatchRefHandler(editor, index2, step, where.ref);
96212
96131
  }
96213
96132
  function resolveStepTargets(editor, index2, step) {
@@ -97394,6 +97313,7 @@ function toCommentInfo(entry, options = {}) {
97394
97313
  isInternal: typeof entry.isInternal === "boolean" ? entry.isInternal : undefined,
97395
97314
  status,
97396
97315
  target: options.target,
97316
+ anchoredText: options.anchoredText,
97397
97317
  createdTime: typeof entry.createdTime === "number" ? entry.createdTime : undefined,
97398
97318
  creatorName: typeof entry.creatorName === "string" ? entry.creatorName : undefined,
97399
97319
  creatorEmail: typeof entry.creatorEmail === "string" ? entry.creatorEmail : undefined
@@ -97517,7 +97437,74 @@ function resolveCommentIdentity(editor, commentId) {
97517
97437
  anchors
97518
97438
  };
97519
97439
  }
97520
- function mergeAnchorData(infosById, anchors) {
97440
+ function canonicalizeAnchors(sorted) {
97441
+ if (sorted.length === 0)
97442
+ return [];
97443
+ const result = [];
97444
+ let current = {
97445
+ blockId: sorted[0].target.blockId,
97446
+ range: {
97447
+ start: sorted[0].target.range.start,
97448
+ end: sorted[0].target.range.end
97449
+ },
97450
+ pos: sorted[0].pos,
97451
+ end: sorted[0].end
97452
+ };
97453
+ for (let i$1 = 1;i$1 < sorted.length; i$1++) {
97454
+ const anchor = sorted[i$1];
97455
+ const sameBlock = anchor.target.blockId === current.blockId;
97456
+ const overlapsOrAdjacent = anchor.target.range.start <= current.range.end;
97457
+ if (sameBlock && overlapsOrAdjacent) {
97458
+ current.range.end = Math.max(current.range.end, anchor.target.range.end);
97459
+ current.end = Math.max(current.end, anchor.end);
97460
+ } else {
97461
+ result.push(current);
97462
+ current = {
97463
+ blockId: anchor.target.blockId,
97464
+ range: {
97465
+ start: anchor.target.range.start,
97466
+ end: anchor.target.range.end
97467
+ },
97468
+ pos: anchor.pos,
97469
+ end: anchor.end
97470
+ };
97471
+ }
97472
+ }
97473
+ result.push(current);
97474
+ return result;
97475
+ }
97476
+ function extractSegmentText(editor, pos, end$1) {
97477
+ try {
97478
+ const cleaned = editor.state.doc.textBetween(pos, end$1, " ", "").replace(/\ufffc/g, "").trim();
97479
+ return cleaned.length > 0 ? cleaned : undefined;
97480
+ } catch {
97481
+ return;
97482
+ }
97483
+ }
97484
+ function buildAnchoredText(editor, canonical) {
97485
+ const parts = [];
97486
+ for (const anchor of canonical) {
97487
+ const text4 = extractSegmentText(editor, anchor.pos, anchor.end);
97488
+ if (text4)
97489
+ parts.push(text4);
97490
+ }
97491
+ return parts.length > 0 ? normalizeExcerpt(parts.join(" ")) : undefined;
97492
+ }
97493
+ function buildTextTarget(canonical) {
97494
+ if (canonical.length === 0)
97495
+ return;
97496
+ return {
97497
+ kind: "text",
97498
+ segments: canonical.map((a2) => ({
97499
+ blockId: a2.blockId,
97500
+ range: {
97501
+ start: a2.range.start,
97502
+ end: a2.range.end
97503
+ }
97504
+ }))
97505
+ };
97506
+ }
97507
+ function mergeAnchorData(editor, infosById, anchors) {
97521
97508
  const grouped = /* @__PURE__ */ new Map;
97522
97509
  for (const anchor of anchors) {
97523
97510
  const group = grouped.get(anchor.commentId) ?? [];
@@ -97526,28 +97513,34 @@ function mergeAnchorData(infosById, anchors) {
97526
97513
  }
97527
97514
  for (const [commentId, commentAnchors] of grouped.entries()) {
97528
97515
  const sorted = [...commentAnchors].sort((a2, b$1) => a2.pos === b$1.pos ? a2.end - b$1.end : a2.pos - b$1.pos);
97529
- const primary = sorted[0];
97516
+ const firstAnchor = sorted[0];
97530
97517
  const status = sorted.every((anchor) => anchor.status === "resolved") ? "resolved" : "open";
97518
+ const canonical = canonicalizeAnchors(sorted);
97519
+ const target = buildTextTarget(canonical);
97520
+ const anchoredText = buildAnchoredText(editor, canonical);
97531
97521
  const existing = infosById.get(commentId);
97532
97522
  if (existing) {
97533
- if (!existing.target)
97534
- existing.target = primary.target;
97535
- if (!existing.importedId && primary.importedId)
97536
- existing.importedId = primary.importedId;
97537
- if (existing.isInternal == null && primary.isInternal != null)
97538
- existing.isInternal = primary.isInternal;
97523
+ if (!existing.target && target)
97524
+ existing.target = target;
97525
+ if (!existing.importedId && firstAnchor.importedId)
97526
+ existing.importedId = firstAnchor.importedId;
97527
+ if (existing.isInternal == null && firstAnchor.isInternal != null)
97528
+ existing.isInternal = firstAnchor.isInternal;
97539
97529
  if (status === "open")
97540
97530
  existing.status = "open";
97531
+ if (existing.anchoredText == null && anchoredText != null)
97532
+ existing.anchoredText = anchoredText;
97541
97533
  continue;
97542
97534
  }
97543
97535
  infosById.set(commentId, toCommentInfo({
97544
97536
  commentId,
97545
- importedId: primary.importedId,
97546
- isInternal: primary.isInternal,
97537
+ importedId: firstAnchor.importedId,
97538
+ isInternal: firstAnchor.isInternal,
97547
97539
  isDone: status === "resolved"
97548
97540
  }, {
97549
- target: primary.target,
97550
- status
97541
+ target,
97542
+ status,
97543
+ anchoredText
97551
97544
  }));
97552
97545
  }
97553
97546
  }
@@ -97563,15 +97556,33 @@ function buildCommentInfos(editor) {
97563
97556
  commentId
97564
97557
  }));
97565
97558
  }
97566
- mergeAnchorData(infosById, listCommentAnchorsSafe(editor));
97559
+ mergeAnchorData(editor, infosById, listCommentAnchorsSafe(editor));
97560
+ for (const info of infosById.values()) {
97561
+ if (info.target != null && info.anchoredText != null || !info.parentCommentId)
97562
+ continue;
97563
+ const visited = /* @__PURE__ */ new Set;
97564
+ let cursor = info;
97565
+ while (cursor?.parentCommentId && !visited.has(cursor.parentCommentId)) {
97566
+ visited.add(cursor.parentCommentId);
97567
+ const ancestor = infosById.get(cursor.parentCommentId);
97568
+ if (ancestor?.target != null) {
97569
+ if (info.target == null)
97570
+ info.target = ancestor.target;
97571
+ if (info.anchoredText == null && ancestor.anchoredText != null)
97572
+ info.anchoredText = ancestor.anchoredText;
97573
+ break;
97574
+ }
97575
+ cursor = ancestor;
97576
+ }
97577
+ }
97567
97578
  const infos = Array.from(infosById.values());
97568
97579
  infos.sort((left$1, right$1) => {
97569
97580
  const leftCreated = left$1.createdTime ?? 0;
97570
97581
  const rightCreated = right$1.createdTime ?? 0;
97571
97582
  if (leftCreated !== rightCreated)
97572
97583
  return leftCreated - rightCreated;
97573
- const leftStart = left$1.target?.range.start ?? Number.MAX_SAFE_INTEGER;
97574
- const rightStart = right$1.target?.range.start ?? Number.MAX_SAFE_INTEGER;
97584
+ const leftStart = left$1.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
97585
+ const rightStart = right$1.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
97575
97586
  if (leftStart !== rightStart)
97576
97587
  return leftStart - rightStart;
97577
97588
  return left$1.commentId.localeCompare(right$1.commentId);
@@ -97579,7 +97590,7 @@ function buildCommentInfos(editor) {
97579
97590
  return infos;
97580
97591
  }
97581
97592
  function addCommentHandler(editor, input2, options) {
97582
- requireEditorCommand(editor.commands?.addComment, "comments.add (addComment)");
97593
+ requireEditorCommand(editor.commands?.addComment, "comments.create (addComment)");
97583
97594
  if (input2.target.range.start === input2.target.range.end)
97584
97595
  return {
97585
97596
  success: false,
@@ -97610,7 +97621,7 @@ function addCommentHandler(editor, input2, options) {
97610
97621
  };
97611
97622
  const commentId = v4_default();
97612
97623
  if (executeDomainCommand(editor, () => {
97613
- const didInsert = requireEditorCommand(editor.commands?.addComment, "comments.add (addComment)")({
97624
+ const didInsert = requireEditorCommand(editor.commands?.addComment, "comments.create (addComment)")({
97614
97625
  content: input2.text,
97615
97626
  isInternal: false,
97616
97627
  commentId
@@ -97650,7 +97661,7 @@ function addCommentHandler(editor, input2, options) {
97650
97661
  };
97651
97662
  }
97652
97663
  function editCommentHandler(editor, input2, options) {
97653
- const editComment = requireEditorCommand(editor.commands?.editComment, "comments.edit (editComment)");
97664
+ const editComment = requireEditorCommand(editor.commands?.editComment, "comments.patch (editComment)");
97654
97665
  const store = getCommentEntityStore(editor);
97655
97666
  const identity$1 = resolveCommentIdentity(editor, input2.commentId);
97656
97667
  const existing = findCommentEntity(store, identity$1.commentId);
@@ -97689,7 +97700,7 @@ function editCommentHandler(editor, input2, options) {
97689
97700
  };
97690
97701
  }
97691
97702
  function replyToCommentHandler(editor, input2, options) {
97692
- const addCommentReply = requireEditorCommand(editor.commands?.addCommentReply, "comments.reply (addCommentReply)");
97703
+ const addCommentReply = requireEditorCommand(editor.commands?.addCommentReply, "comments.create (addCommentReply)");
97693
97704
  if (!input2.parentCommentId)
97694
97705
  return {
97695
97706
  success: false,
@@ -97739,7 +97750,7 @@ function replyToCommentHandler(editor, input2, options) {
97739
97750
  };
97740
97751
  }
97741
97752
  function moveCommentHandler(editor, input2, options) {
97742
- const moveComment = requireEditorCommand(editor.commands?.moveComment, "comments.move (moveComment)");
97753
+ const moveComment = requireEditorCommand(editor.commands?.moveComment, "comments.patch (moveComment)");
97743
97754
  if (input2.target.range.start === input2.target.range.end)
97744
97755
  return {
97745
97756
  success: false,
@@ -97803,7 +97814,7 @@ function moveCommentHandler(editor, input2, options) {
97803
97814
  };
97804
97815
  }
97805
97816
  function resolveCommentHandler(editor, input2, options) {
97806
- const resolveComment = requireEditorCommand(editor.commands?.resolveComment, "comments.resolve (resolveComment)");
97817
+ const resolveComment = requireEditorCommand(editor.commands?.resolveComment, "comments.patch (resolveComment)");
97807
97818
  const store = getCommentEntityStore(editor);
97808
97819
  const identity$1 = resolveCommentIdentity(editor, input2.commentId);
97809
97820
  const existing = findCommentEntity(store, identity$1.commentId);
@@ -97961,7 +97972,7 @@ function listCommentsHandler(editor, query2) {
97961
97972
  const paged = paginate(filtered, query2?.offset, query2?.limit);
97962
97973
  const items = paged.items.map((comment2) => {
97963
97974
  const handle3 = buildResolvedHandle2(`comment:${comment2.commentId}`, "stable", "comment");
97964
- const { importedId, parentCommentId, text: text4, isInternal, status, target, createdTime, creatorName, creatorEmail, address: address2 } = comment2;
97975
+ const { importedId, parentCommentId, text: text4, isInternal, status, target, anchoredText, createdTime, creatorName, creatorEmail, address: address2 } = comment2;
97965
97976
  return buildDiscoveryItem2(comment2.commentId, handle3, {
97966
97977
  address: address2,
97967
97978
  importedId,
@@ -97970,6 +97981,7 @@ function listCommentsHandler(editor, query2) {
97970
97981
  isInternal,
97971
97982
  status,
97972
97983
  target,
97984
+ anchoredText,
97973
97985
  createdTime,
97974
97986
  creatorName,
97975
97987
  creatorEmail
@@ -107085,24 +107097,26 @@ function normalizeClientPoint(options, clientX, clientY) {
107085
107097
  const baseX = (clientX - rect.left + scrollLeft) / options.zoom;
107086
107098
  const baseY = (clientY - rect.top + scrollTop) / options.zoom;
107087
107099
  let adjustedX = baseX;
107088
- let adjustedY = baseY;
107100
+ let detectedPageIndex;
107101
+ let pageLocalY;
107089
107102
  const doc$2 = options.visibleHost.ownerDocument ?? document;
107090
107103
  const hitChain = typeof doc$2.elementsFromPoint === "function" ? doc$2.elementsFromPoint(clientX, clientY) : [];
107091
107104
  const pageEl = Array.isArray(hitChain) ? hitChain.find((el) => el?.classList?.contains("superdoc-page")) : null;
107092
107105
  if (pageEl) {
107093
107106
  const pageIndex = Number(pageEl.dataset.pageIndex ?? "NaN");
107094
107107
  if (Number.isFinite(pageIndex)) {
107108
+ detectedPageIndex = pageIndex;
107095
107109
  const pageOffsetX = options.getPageOffsetX(pageIndex);
107096
107110
  if (pageOffsetX != null)
107097
107111
  adjustedX = baseX - pageOffsetX;
107098
- const pageOffsetY = options.getPageOffsetY(pageIndex);
107099
- if (pageOffsetY != null)
107100
- adjustedY = baseY - pageOffsetY;
107112
+ pageLocalY = (clientY - pageEl.getBoundingClientRect().top) / options.zoom;
107101
107113
  }
107102
107114
  }
107103
107115
  return {
107104
107116
  x: adjustedX,
107105
- y: adjustedY
107117
+ y: baseY,
107118
+ pageIndex: detectedPageIndex,
107119
+ pageLocalY
107106
107120
  };
107107
107121
  }
107108
107122
  function denormalizeClientPoint(options, layoutX, layoutY, pageIndex, height) {
@@ -107474,7 +107488,9 @@ function publishSectionMetadata(sectionRanges, options) {
107474
107488
  footerRefs: section.footerRefs,
107475
107489
  numbering: section.numbering,
107476
107490
  titlePg: section.titlePg,
107477
- vAlign: section.vAlign
107491
+ vAlign: section.vAlign,
107492
+ margins: section.margins,
107493
+ pageSize: section.pageSize
107478
107494
  });
107479
107495
  });
107480
107496
  }
@@ -116255,6 +116271,84 @@ async function measureListBlock(block, constraints) {
116255
116271
  totalHeight
116256
116272
  };
116257
116273
  }
116274
+ function buildSectionContentWidth(section, fallback) {
116275
+ const pageW = section.pageSize?.w ?? fallback.pageWidth;
116276
+ const marginL = section.margins?.left ?? fallback.margins.left;
116277
+ const marginR = section.margins?.right ?? fallback.margins.right;
116278
+ return pageW - marginL - marginR;
116279
+ }
116280
+ function buildConstraintsForSection(section, fallback, minWidth) {
116281
+ const pageW = section.pageSize?.w ?? fallback.pageWidth;
116282
+ const marginL = section.margins?.left ?? fallback.margins.left;
116283
+ const marginR = section.margins?.right ?? fallback.margins.right;
116284
+ const contentWidth = pageW - marginL - marginR;
116285
+ const maxWidth = pageW - marginL;
116286
+ return {
116287
+ width: minWidth ? Math.min(Math.max(contentWidth, minWidth), maxWidth) : contentWidth,
116288
+ height: fallback.height,
116289
+ pageWidth: pageW,
116290
+ margins: {
116291
+ left: marginL,
116292
+ right: marginR
116293
+ }
116294
+ };
116295
+ }
116296
+ function getTableWidthSpec(blocks2) {
116297
+ let result;
116298
+ let maxResolvedWidth = 0;
116299
+ for (const block of blocks2) {
116300
+ if (block.kind !== "table")
116301
+ continue;
116302
+ const tableWidth = block.attrs?.tableWidth;
116303
+ const widthValue = tableWidth?.width ?? tableWidth?.value;
116304
+ if (tableWidth?.type === "pct" && typeof widthValue === "number" && widthValue > 0) {
116305
+ if (!result || result.type !== "pct" || widthValue > result.value) {
116306
+ result = {
116307
+ type: "pct",
116308
+ value: widthValue
116309
+ };
116310
+ maxResolvedWidth = Infinity;
116311
+ }
116312
+ } else if ((tableWidth?.type === "px" || tableWidth?.type === "pixel") && typeof widthValue === "number") {
116313
+ if (widthValue > maxResolvedWidth) {
116314
+ maxResolvedWidth = widthValue;
116315
+ result = {
116316
+ type: "px",
116317
+ value: widthValue
116318
+ };
116319
+ }
116320
+ } else if (block.columnWidths && block.columnWidths.length > 0) {
116321
+ const gridTotal = block.columnWidths.reduce((sum, w2) => sum + w2, 0);
116322
+ if (gridTotal > maxResolvedWidth) {
116323
+ maxResolvedWidth = gridTotal;
116324
+ result = {
116325
+ type: "grid",
116326
+ value: gridTotal
116327
+ };
116328
+ }
116329
+ }
116330
+ }
116331
+ return result;
116332
+ }
116333
+ function resolveTableMinWidth(spec, contentWidth) {
116334
+ if (!spec)
116335
+ return 0;
116336
+ if (spec.type === "pct")
116337
+ return contentWidth * (spec.value / OOXML_PCT_DIVISOR);
116338
+ return spec.value;
116339
+ }
116340
+ function resolveRIdPerSection(sectionMetadata, kind) {
116341
+ const result = /* @__PURE__ */ new Map;
116342
+ let inherited;
116343
+ for (const section of sectionMetadata) {
116344
+ const rId = (kind === "header" ? section.headerRefs : section.footerRefs)?.default;
116345
+ if (rId)
116346
+ inherited = rId;
116347
+ if (inherited)
116348
+ result.set(section.sectionIndex, inherited);
116349
+ }
116350
+ return result;
116351
+ }
116258
116352
  async function layoutPerRIdHeaderFooters(headerFooterInput, layout, sectionMetadata, deps) {
116259
116353
  deps.headerLayoutsByRId.clear();
116260
116354
  deps.footerLayoutsByRId.clear();
@@ -116269,42 +116363,127 @@ async function layoutPerRIdHeaderFooters(headerFooterInput, layout, sectionMetad
116269
116363
  totalPages
116270
116364
  };
116271
116365
  };
116272
- if (headerBlocksByRId)
116273
- for (const [rId, blocks2] of headerBlocksByRId) {
116274
- if (!blocks2 || blocks2.length === 0)
116275
- continue;
116276
- try {
116277
- const batchResult = await layoutHeaderFooterWithCache({ default: blocks2 }, constraints, (block, c$3) => measureBlock(block, c$3), undefined, undefined, pageResolver);
116278
- if (batchResult.default)
116279
- deps.headerLayoutsByRId.set(rId, {
116280
- kind: "header",
116281
- type: "default",
116282
- layout: batchResult.default.layout,
116283
- blocks: batchResult.default.blocks,
116284
- measures: batchResult.default.measures
116285
- });
116286
- } catch (error) {
116287
- console.warn(`[PresentationEditor] Failed to layout header rId=${rId}:`, error);
116288
- }
116366
+ if (sectionMetadata.length > 1 && sectionMetadata.some((s2) => s2.margins || s2.pageSize)) {
116367
+ await layoutWithPerSectionConstraints("header", headerBlocksByRId, sectionMetadata, constraints, pageResolver, deps.headerLayoutsByRId);
116368
+ await layoutWithPerSectionConstraints("footer", footerBlocksByRId, sectionMetadata, constraints, pageResolver, deps.footerLayoutsByRId);
116369
+ } else {
116370
+ await layoutBlocksByRId("header", headerBlocksByRId, constraints, pageResolver, deps.headerLayoutsByRId);
116371
+ await layoutBlocksByRId("footer", footerBlocksByRId, constraints, pageResolver, deps.footerLayoutsByRId);
116372
+ }
116373
+ }
116374
+ async function layoutBlocksByRId(kind, blocksByRId, constraints, pageResolver, layoutsByRId) {
116375
+ if (!blocksByRId)
116376
+ return;
116377
+ for (const [rId, blocks2] of blocksByRId) {
116378
+ if (!blocks2 || blocks2.length === 0)
116379
+ continue;
116380
+ try {
116381
+ const batchResult = await layoutHeaderFooterWithCache({ default: blocks2 }, constraints, (block, c$3) => measureBlock(block, c$3), undefined, undefined, pageResolver);
116382
+ if (batchResult.default)
116383
+ layoutsByRId.set(rId, {
116384
+ kind,
116385
+ type: "default",
116386
+ layout: batchResult.default.layout,
116387
+ blocks: batchResult.default.blocks,
116388
+ measures: batchResult.default.measures
116389
+ });
116390
+ } catch (error) {
116391
+ console.warn(`[PresentationEditor] Failed to layout ${kind} rId=${rId}:`, error);
116289
116392
  }
116290
- if (footerBlocksByRId)
116291
- for (const [rId, blocks2] of footerBlocksByRId) {
116292
- if (!blocks2 || blocks2.length === 0)
116393
+ }
116394
+ }
116395
+ function cloneHeaderFooterLayout(layout) {
116396
+ return {
116397
+ ...layout,
116398
+ pages: layout.pages.map((page) => ({
116399
+ ...page,
116400
+ fragments: page.fragments.map((f) => ({ ...f }))
116401
+ }))
116402
+ };
116403
+ }
116404
+ function adjustFramePositionsForContentWidth(layout, blocks2, effectiveWidth, contentWidth) {
116405
+ if (effectiveWidth <= contentWidth)
116406
+ return;
116407
+ const widthDiff = effectiveWidth - contentWidth;
116408
+ const blockById = /* @__PURE__ */ new Map;
116409
+ for (const block of blocks2)
116410
+ blockById.set(block.id, block);
116411
+ for (const page of layout.pages)
116412
+ for (const fragment of page.fragments) {
116413
+ if (fragment.kind !== "para")
116293
116414
  continue;
116294
- try {
116295
- const batchResult = await layoutHeaderFooterWithCache({ default: blocks2 }, constraints, (block, c$3) => measureBlock(block, c$3), undefined, undefined, pageResolver);
116296
- if (batchResult.default)
116297
- deps.footerLayoutsByRId.set(rId, {
116298
- kind: "footer",
116415
+ const block = blockById.get(fragment.blockId);
116416
+ if (!block || block.kind !== "paragraph")
116417
+ continue;
116418
+ const frame = block.attrs?.frame;
116419
+ if (!frame || frame.wrap !== "none")
116420
+ continue;
116421
+ if (frame.xAlign === "right")
116422
+ fragment.x -= widthDiff;
116423
+ else if (frame.xAlign === "center")
116424
+ fragment.x -= widthDiff / 2;
116425
+ }
116426
+ }
116427
+ async function layoutWithPerSectionConstraints(kind, blocksByRId, sectionMetadata, fallbackConstraints, pageResolver, layoutsByRId) {
116428
+ if (!blocksByRId)
116429
+ return;
116430
+ const rIdPerSection = resolveRIdPerSection(sectionMetadata, kind);
116431
+ const tableWidthSpecByRId = /* @__PURE__ */ new Map;
116432
+ for (const [rId, blocks2] of blocksByRId) {
116433
+ const spec = getTableWidthSpec(blocks2);
116434
+ if (spec)
116435
+ tableWidthSpecByRId.set(rId, spec);
116436
+ }
116437
+ const groups = /* @__PURE__ */ new Map;
116438
+ for (const section of sectionMetadata) {
116439
+ const rId = rIdPerSection.get(section.sectionIndex);
116440
+ if (!rId || !blocksByRId.has(rId))
116441
+ continue;
116442
+ const contentWidth = buildSectionContentWidth(section, fallbackConstraints);
116443
+ const sectionConstraints = buildConstraintsForSection(section, fallbackConstraints, resolveTableMinWidth(tableWidthSpecByRId.get(rId), contentWidth) || undefined);
116444
+ const effectiveWidth = sectionConstraints.width;
116445
+ const groupKey = `${rId}::w${effectiveWidth}`;
116446
+ let group = groups.get(groupKey);
116447
+ if (!group) {
116448
+ group = {
116449
+ sectionConstraints,
116450
+ sectionIndices: [],
116451
+ rId,
116452
+ effectiveWidth
116453
+ };
116454
+ groups.set(groupKey, group);
116455
+ }
116456
+ group.sectionIndices.push(section.sectionIndex);
116457
+ }
116458
+ for (const [, group] of groups) {
116459
+ const blocks2 = blocksByRId.get(group.rId);
116460
+ if (!blocks2 || blocks2.length === 0)
116461
+ continue;
116462
+ try {
116463
+ const batchResult = await layoutHeaderFooterWithCache({ default: blocks2 }, group.sectionConstraints, (block, c$3) => measureBlock(block, c$3), undefined, undefined, pageResolver);
116464
+ if (batchResult.default)
116465
+ for (const sectionIndex of group.sectionIndices) {
116466
+ const contentWidth = buildSectionContentWidth(sectionMetadata.find((s2) => s2.sectionIndex === sectionIndex), fallbackConstraints);
116467
+ const needsFrameAdjust = group.effectiveWidth > contentWidth;
116468
+ let layout = batchResult.default.layout;
116469
+ if (needsFrameAdjust) {
116470
+ layout = cloneHeaderFooterLayout(layout);
116471
+ adjustFramePositionsForContentWidth(layout, batchResult.default.blocks, group.effectiveWidth, contentWidth);
116472
+ }
116473
+ const result = {
116474
+ kind,
116299
116475
  type: "default",
116300
- layout: batchResult.default.layout,
116476
+ layout,
116301
116477
  blocks: batchResult.default.blocks,
116302
- measures: batchResult.default.measures
116303
- });
116304
- } catch (error) {
116305
- console.warn(`[PresentationEditor] Failed to layout footer rId=${rId}:`, error);
116306
- }
116478
+ measures: batchResult.default.measures,
116479
+ effectiveWidth: needsFrameAdjust ? group.effectiveWidth : undefined
116480
+ };
116481
+ layoutsByRId.set(`${group.rId}::s${sectionIndex}`, result);
116482
+ }
116483
+ } catch (error) {
116484
+ console.warn(`[PresentationEditor] Failed to layout ${kind} rId=${group.rId}:`, error);
116307
116485
  }
116486
+ }
116308
116487
  }
116309
116488
  function dropCursor(options = {}) {
116310
116489
  return new Plugin({ view(editorView) {
@@ -134091,7 +134270,7 @@ var Node$13 = class Node$14 {
134091
134270
  console.warn("Failed to initialize developer tools:", error);
134092
134271
  }
134093
134272
  }
134094
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_COMMAND2, T_NOT_FOUND_TRACKED2, T_NOT_FOUND_COMMAND_TRACKED2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, nodeTypeValues2, blockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, blockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, DocumentApiValidationError2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, STYLE_MARK_SCHEMA_NAMES, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, REF_HANDLERS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
134273
+ }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, nodeTypeValues2, blockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, DocumentApiValidationError2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, STYLE_MARK_SCHEMA_NAMES, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, REF_HANDLERS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
134095
134274
  constructor(config2) {
134096
134275
  this.search = config2.search;
134097
134276
  this.caseSensitive = !!config2.caseSensitive;
@@ -143527,11 +143706,13 @@ var Node$13 = class Node$14 {
143527
143706
  return;
143528
143707
  }
143529
143708
  if ((this.#deps.getHeaderFooterSession()?.session?.mode ?? "body") !== "body") {
143530
- if (this.#handleClickInHeaderFooterMode(event, x2, y$1))
143709
+ if (this.#handleClickInHeaderFooterMode(event, x2, y$1, normalizedPoint.pageIndex, normalizedPoint.pageLocalY))
143531
143710
  return;
143532
143711
  }
143533
- if (this.#callbacks.hitTestHeaderFooterRegion?.(x2, y$1))
143712
+ if (this.#callbacks.hitTestHeaderFooterRegion?.(x2, y$1, normalizedPoint.pageIndex, normalizedPoint.pageLocalY)) {
143713
+ event.preventDefault();
143534
143714
  return;
143715
+ }
143535
143716
  const viewportHost = this.#deps.getViewportHost();
143536
143717
  const pageGeometryHelper = this.#deps.getPageGeometryHelper();
143537
143718
  const rawHit = clickToPosition(layoutState.layout, layoutState.blocks, layoutState.measures, {
@@ -143758,15 +143939,10 @@ var Node$13 = class Node$14 {
143758
143939
  }
143759
143940
  if (!this.#deps.getLayoutState().layout)
143760
143941
  return;
143761
- const viewportHost = this.#deps.getViewportHost();
143762
- const visibleHost = this.#deps.getVisibleHost();
143763
- const zoom = this.#deps.getZoom();
143764
- const rect = viewportHost.getBoundingClientRect();
143765
- const scrollLeft = visibleHost.scrollLeft ?? 0;
143766
- const scrollTop = visibleHost.scrollTop ?? 0;
143767
- const x2 = (event.clientX - rect.left + scrollLeft) / zoom;
143768
- const y$1 = (event.clientY - rect.top + scrollTop) / zoom;
143769
- const region = this.#callbacks.hitTestHeaderFooterRegion?.(x2, y$1);
143942
+ const normalized = this.#callbacks.normalizeClientPoint?.(event.clientX, event.clientY);
143943
+ if (!normalized)
143944
+ return;
143945
+ const region = this.#callbacks.hitTestHeaderFooterRegion?.(normalized.x, normalized.y, normalized.pageIndex, normalized.pageLocalY);
143770
143946
  if (region) {
143771
143947
  event.preventDefault();
143772
143948
  event.stopPropagation();
@@ -144020,15 +144196,15 @@ var Node$13 = class Node$14 {
144020
144196
  document.activeElement.blur();
144021
144197
  this.#focusEditorAtFirstPosition();
144022
144198
  }
144023
- #handleClickInHeaderFooterMode(event, x2, y$1) {
144199
+ #handleClickInHeaderFooterMode(event, x2, y$1, pageIndex, pageLocalY) {
144024
144200
  const activeEditorHost = this.#deps?.getHeaderFooterSession()?.overlayManager?.getActiveEditorHost?.();
144025
144201
  if (activeEditorHost && (activeEditorHost.contains(event.target) || activeEditorHost === event.target))
144026
144202
  return true;
144027
- if (!this.#callbacks.hitTestHeaderFooterRegion?.(x2, y$1)) {
144203
+ if (!this.#callbacks.hitTestHeaderFooterRegion?.(x2, y$1, pageIndex, pageLocalY)) {
144028
144204
  this.#callbacks.exitHeaderFooterMode?.();
144029
144205
  return false;
144030
144206
  }
144031
- return true;
144207
+ return false;
144032
144208
  }
144033
144209
  #handleInlineImageClick(event, targetImg, rawHit, doc$2, epochMapper) {
144034
144210
  if (!targetImg)
@@ -144230,7 +144406,7 @@ var Node$13 = class Node$14 {
144230
144406
  this.#callbacks.clearHoverRegion?.();
144231
144407
  return;
144232
144408
  }
144233
- const region = this.#callbacks.hitTestHeaderFooterRegion?.(normalized.x, normalized.y);
144409
+ const region = this.#callbacks.hitTestHeaderFooterRegion?.(normalized.x, normalized.y, normalized.pageIndex, normalized.pageLocalY);
144234
144410
  if (!region) {
144235
144411
  this.#callbacks.clearHoverRegion?.();
144236
144412
  return;
@@ -145000,6 +145176,7 @@ var Node$13 = class Node$14 {
145000
145176
  pm.style.minHeight = "100%";
145001
145177
  pm.style.outline = "none";
145002
145178
  pm.style.border = "none";
145179
+ pm.classList.add("sd-header-footer");
145003
145180
  pm.setAttribute("role", "textbox");
145004
145181
  pm.setAttribute("aria-multiline", true);
145005
145182
  pm.setAttribute("aria-label", `${type} content area. Double click to start typing.`);
@@ -145242,7 +145419,7 @@ var Node$13 = class Node$14 {
145242
145419
  position: "absolute",
145243
145420
  pointerEvents: "auto",
145244
145421
  visibility: "hidden",
145245
- overflow: "hidden",
145422
+ overflow: "visible",
145246
145423
  boxSizing: "border-box"
145247
145424
  });
145248
145425
  if (decorationContainer)
@@ -145669,12 +145846,14 @@ var Node$13 = class Node$14 {
145669
145846
  const actualPageHeight = page.size?.h ?? pageHeight;
145670
145847
  const headerPayload = this.#headerDecorationProvider?.(page.number, margins, page);
145671
145848
  const headerBox = this.#computeDecorationBox("header", margins, actualPageHeight);
145849
+ const displayPageNumber = page.numberText ?? String(page.number);
145672
145850
  this.#headerRegions.set(pageIndex, {
145673
145851
  kind: "header",
145674
145852
  headerId: headerPayload?.headerId,
145675
145853
  sectionType: headerPayload?.sectionType ?? this.#computeExpectedSectionType("header", page, sectionFirstPageNumbers),
145676
145854
  pageIndex,
145677
145855
  pageNumber: page.number,
145856
+ displayPageNumber,
145678
145857
  localX: headerPayload?.hitRegion?.x ?? headerBox.x,
145679
145858
  localY: headerPayload?.hitRegion?.y ?? headerBox.offset,
145680
145859
  width: headerPayload?.hitRegion?.width ?? headerBox.width,
@@ -145689,6 +145868,7 @@ var Node$13 = class Node$14 {
145689
145868
  sectionType: footerPayload?.sectionType ?? this.#computeExpectedSectionType("footer", page, sectionFirstPageNumbers),
145690
145869
  pageIndex,
145691
145870
  pageNumber: page.number,
145871
+ displayPageNumber,
145692
145872
  localX: footerPayload?.hitRegion?.x ?? footerBox.x,
145693
145873
  localY: footerPayload?.hitRegion?.y ?? footerBox.offset,
145694
145874
  width: footerPayload?.hitRegion?.width ?? footerBox.width,
@@ -145698,16 +145878,29 @@ var Node$13 = class Node$14 {
145698
145878
  });
145699
145879
  });
145700
145880
  }
145701
- hitTestRegion(x2, y$1, layout) {
145881
+ hitTestRegion(x2, y$1, layout, knownPageIndex, knownPageLocalY) {
145702
145882
  if (!layout)
145703
145883
  return null;
145704
145884
  const layoutOptions = this.#deps?.getLayoutOptions() ?? {};
145705
- const pageHeight = layout.pageSize?.h ?? layoutOptions.pageSize?.h ?? this.#options.defaultPageSize.h;
145885
+ const defaultPageHeight = layout.pageSize?.h ?? layoutOptions.pageSize?.h ?? this.#options.defaultPageSize.h;
145706
145886
  const pageGap = layout.pageGap ?? 0;
145707
- if (pageHeight <= 0)
145887
+ if (defaultPageHeight <= 0)
145708
145888
  return null;
145709
- const pageIndex = Math.max(0, Math.floor(y$1 / (pageHeight + pageGap)));
145710
- const pageLocalY = y$1 - pageIndex * (pageHeight + pageGap);
145889
+ let pageIndex;
145890
+ let pageLocalY;
145891
+ if (knownPageIndex != null && knownPageLocalY != null) {
145892
+ pageIndex = knownPageIndex;
145893
+ pageLocalY = knownPageLocalY;
145894
+ } else if (knownPageIndex != null) {
145895
+ pageIndex = knownPageIndex;
145896
+ let pageTopY = 0;
145897
+ for (let i$1 = 0;i$1 < pageIndex && i$1 < layout.pages.length; i$1++)
145898
+ pageTopY += (layout.pages[i$1].size?.h ?? defaultPageHeight) + pageGap;
145899
+ pageLocalY = y$1 - pageTopY;
145900
+ } else {
145901
+ pageIndex = Math.max(0, Math.floor(y$1 / (defaultPageHeight + pageGap)));
145902
+ pageLocalY = y$1 - pageIndex * (defaultPageHeight + pageGap);
145903
+ }
145711
145904
  const headerRegion = this.#headerRegions.get(pageIndex);
145712
145905
  if (headerRegion && this.#pointInRegion(headerRegion, x2, pageLocalY))
145713
145906
  return headerRegion;
@@ -145795,6 +145988,15 @@ var Node$13 = class Node$14 {
145795
145988
  this.clearHover();
145796
145989
  return;
145797
145990
  }
145991
+ if (this.#session.mode !== "body") {
145992
+ if (this.#activeEditor) {
145993
+ this.#activeEditor.setEditable(false);
145994
+ this.#activeEditor.setOptions({ documentMode: "viewing" });
145995
+ }
145996
+ this.#overlayManager.hideEditingOverlay();
145997
+ this.#activeEditor = null;
145998
+ this.#session = { mode: "body" };
145999
+ }
145798
146000
  const descriptor = this.#resolveDescriptorForRegion(region);
145799
146001
  if (!descriptor) {
145800
146002
  console.warn("[HeaderFooterSessionManager] No descriptor found for region:", region);
@@ -145849,7 +146051,7 @@ var Node$13 = class Node$14 {
145849
146051
  });
145850
146052
  return;
145851
146053
  }
145852
- const layout = this.#headerLayoutResults?.[0]?.layout;
146054
+ const bodyPageCount = this.#deps?.getBodyPageCount() ?? 1;
145853
146055
  let editor;
145854
146056
  try {
145855
146057
  editor = await this.#headerFooterManager.ensureEditor(descriptor, {
@@ -145857,7 +146059,7 @@ var Node$13 = class Node$14 {
145857
146059
  availableWidth: region.width,
145858
146060
  availableHeight: region.height,
145859
146061
  currentPageNumber: region.pageNumber,
145860
- totalPageCount: layout?.pages?.length ?? 1
146062
+ totalPageCount: bodyPageCount
145861
146063
  });
145862
146064
  } catch (editorError) {
145863
146065
  console.error("[HeaderFooterSessionManager] Error creating editor:", editorError);
@@ -146310,8 +146512,10 @@ var Node$13 = class Node$14 {
146310
146512
  }
146311
146513
  if (!headerFooterType)
146312
146514
  return null;
146313
- if (sectionRId && layoutsByRId.has(sectionRId)) {
146314
- const rIdLayout = layoutsByRId.get(sectionRId);
146515
+ const compositeKey = sectionRId ? `${sectionRId}::s${sectionIndex}` : undefined;
146516
+ const rIdLayoutKey = compositeKey && layoutsByRId.has(compositeKey) && compositeKey || sectionRId && layoutsByRId.has(sectionRId) && sectionRId || undefined;
146517
+ if (rIdLayoutKey) {
146518
+ const rIdLayout = layoutsByRId.get(rIdLayoutKey);
146315
146519
  if (!rIdLayout)
146316
146520
  console.warn(`[HeaderFooterSessionManager] Inconsistent state: layoutsByRId.has('${sectionRId}') returned true but get() returned undefined`);
146317
146521
  else {
@@ -146322,6 +146526,7 @@ var Node$13 = class Node$14 {
146322
146526
  const margins$1 = pageMargins ?? layout.pages[0]?.margins ?? layoutOptions.margins ?? defaultMargins;
146323
146527
  const decorationMargins$1 = kind === "footer" ? this.#stripFootnoteReserveFromBottomMargin(margins$1, page ?? null) : margins$1;
146324
146528
  const box$1 = this.#computeDecorationBox(kind, decorationMargins$1, pageHeight$1);
146529
+ const effectiveWidth = rIdLayout.effectiveWidth ?? box$1.width;
146325
146530
  const rawLayoutHeight$1 = rIdLayout.layout.height ?? 0;
146326
146531
  const metrics$1 = this.#computeMetrics(kind, rawLayoutHeight$1, box$1, pageHeight$1, margins$1?.footer ?? 0);
146327
146532
  const layoutMinY$1 = rIdLayout.layout.minY ?? 0;
@@ -146334,20 +146539,20 @@ var Node$13 = class Node$14 {
146334
146539
  contentHeight: metrics$1.layoutHeight > 0 ? metrics$1.layoutHeight : metrics$1.containerHeight,
146335
146540
  offset: metrics$1.offset,
146336
146541
  marginLeft: box$1.x,
146337
- contentWidth: box$1.width,
146542
+ contentWidth: effectiveWidth,
146338
146543
  headerId: sectionRId,
146339
146544
  sectionType: headerFooterType,
146340
146545
  minY: layoutMinY$1,
146341
146546
  box: {
146342
146547
  x: box$1.x,
146343
146548
  y: metrics$1.offset,
146344
- width: box$1.width,
146549
+ width: effectiveWidth,
146345
146550
  height: metrics$1.containerHeight
146346
146551
  },
146347
146552
  hitRegion: {
146348
146553
  x: box$1.x,
146349
146554
  y: metrics$1.offset,
146350
- width: box$1.width,
146555
+ width: effectiveWidth,
146351
146556
  height: metrics$1.containerHeight
146352
146557
  }
146353
146558
  };
@@ -148922,7 +149127,7 @@ var Node$13 = class Node$14 {
148922
149127
  };
148923
149128
  case "total-page-number":
148924
149129
  return {
148925
- text: editor.options.parentEditor?.currentTotalPages || "1",
149130
+ text: editor.options.totalPageCount || editor.options.parentEditor?.currentTotalPages || "1",
148926
149131
  className: "sd-editor-auto-total-pages",
148927
149132
  dataId: "auto-total-pages",
148928
149133
  ariaLabel: "Total page count node"
@@ -148984,6 +149189,10 @@ var Node$13 = class Node$14 {
148984
149189
  if (!incomingType || incomingType !== currentType)
148985
149190
  return false;
148986
149191
  this.node = node3;
149192
+ const attrs = getNodeAttributes(this.node.type.name, this.editor);
149193
+ const newText = String(attrs.text);
149194
+ if (this.dom.textContent !== newText)
149195
+ this.dom.textContent = newText;
148987
149196
  return true;
148988
149197
  }
148989
149198
  }, getMarksFromNeighbors = (currentPos, view) => {
@@ -152132,9 +152341,9 @@ var Node$13 = class Node$14 {
152132
152341
  trackedChanges: context.trackedChanges ?? []
152133
152342
  });
152134
152343
  }, _hoisted_1$6, _hoisted_2$1, _hoisted_3, _hoisted_4, ContextMenu_default, _hoisted_1$5, BasicUpload_default, _hoisted_1$4, MIN_WIDTH = 200, PPI = 96, alignment = "flex-end", Ruler_default, GenericPopover_default, _hoisted_1$3, RESIZE_HANDLE_WIDTH_PX = 9, RESIZE_HANDLE_OFFSET_PX = 4, DRAG_OVERLAY_EXTENSION_PX = 1000, MIN_DRAG_OVERLAY_WIDTH_PX = 2000, THROTTLE_INTERVAL_MS = 16, MIN_RESIZE_DELTA_PX = 1, TableResizeOverlay_default, _hoisted_1$2, OVERLAY_EXPANSION_PX = 2000, RESIZE_HANDLE_SIZE_PX = 12, MOUSE_MOVE_THROTTLE_MS = 16, DIMENSION_CHANGE_THRESHOLD_PX = 1, Z_INDEX_OVERLAY = 10, Z_INDEX_HANDLE = 15, Z_INDEX_GUIDELINE = 20, ImageResizeOverlay_default, LINK_CLICK_DEBOUNCE_MS = 300, CURSOR_UPDATE_TIMEOUT_MS = 10, LinkClickHandler_default, _hoisted_1$1, _hoisted_2, DOCX2 = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", TABLE_RESIZE_HOVER_THRESHOLD = 8, TABLE_RESIZE_THROTTLE_MS = 16, SuperEditor_default, _hoisted_1, SuperInput_default, SlashMenu, Extensions;
152135
- var init_src_CYnAk7Cg_es = __esm(() => {
152344
+ var init_src_DsAtPNrg_es = __esm(() => {
152136
152345
  init_rolldown_runtime_B2q5OVn9_es();
152137
- init_SuperConverter_D9XMPi6H_es();
152346
+ init_SuperConverter_Cf1y7bFA_es();
152138
152347
  init_jszip_ChlR43oI_es();
152139
152348
  init_uuid_2IzDu5nl_es();
152140
152349
  init_constants_DBKi0Amm_es();
@@ -160232,22 +160441,7 @@ function print() { __p += __j.call(arguments, '') }
160232
160441
  NONE_FAILURES2 = [];
160233
160442
  NONE_THROWS2 = [];
160234
160443
  T_NOT_FOUND2 = ["TARGET_NOT_FOUND"];
160235
- T_NOT_FOUND_COMMAND2 = [
160236
- "TARGET_NOT_FOUND",
160237
- "COMMAND_UNAVAILABLE",
160238
- "CAPABILITY_UNAVAILABLE"
160239
- ];
160240
- T_NOT_FOUND_TRACKED2 = [
160241
- "TARGET_NOT_FOUND",
160242
- "TRACK_CHANGE_COMMAND_UNAVAILABLE",
160243
- "CAPABILITY_UNAVAILABLE"
160244
- ];
160245
- T_NOT_FOUND_COMMAND_TRACKED2 = [
160246
- "TARGET_NOT_FOUND",
160247
- "COMMAND_UNAVAILABLE",
160248
- "TRACK_CHANGE_COMMAND_UNAVAILABLE",
160249
- "CAPABILITY_UNAVAILABLE"
160250
- ];
160444
+ T_NOT_FOUND_CAPABLE2 = ["TARGET_NOT_FOUND", "CAPABILITY_UNAVAILABLE"];
160251
160445
  T_PLAN_ENGINE2 = [
160252
160446
  "REVISION_MISMATCH",
160253
160447
  "MATCH_NOT_FOUND",
@@ -160275,6 +160469,7 @@ function print() { __p += __j.call(arguments, '') }
160275
160469
  requiresDocumentContext: true,
160276
160470
  metadata: readOperation2({
160277
160471
  idempotency: "idempotent",
160472
+ throws: ["CAPABILITY_UNAVAILABLE", "INVALID_INPUT"],
160278
160473
  deterministicTargetResolution: false
160279
160474
  }),
160280
160475
  referenceDocPath: "find.mdx",
@@ -160327,7 +160522,7 @@ function print() { __p += __j.call(arguments, '') }
160327
160522
  supportsDryRun: true,
160328
160523
  supportsTrackedMode: true,
160329
160524
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160330
- throws: [...T_NOT_FOUND_TRACKED2, "INVALID_TARGET"]
160525
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160331
160526
  }),
160332
160527
  referenceDocPath: "insert.mdx",
160333
160528
  referenceGroup: "core"
@@ -160341,7 +160536,7 @@ function print() { __p += __j.call(arguments, '') }
160341
160536
  supportsDryRun: true,
160342
160537
  supportsTrackedMode: true,
160343
160538
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160344
- throws: [...T_NOT_FOUND_TRACKED2, "INVALID_TARGET"]
160539
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160345
160540
  }),
160346
160541
  referenceDocPath: "replace.mdx",
160347
160542
  referenceGroup: "core"
@@ -160355,7 +160550,7 @@ function print() { __p += __j.call(arguments, '') }
160355
160550
  supportsDryRun: true,
160356
160551
  supportsTrackedMode: true,
160357
160552
  possibleFailureCodes: ["NO_OP"],
160358
- throws: [...T_NOT_FOUND_TRACKED2, "INVALID_TARGET"]
160553
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160359
160554
  }),
160360
160555
  referenceDocPath: "delete.mdx",
160361
160556
  referenceGroup: "core"
@@ -160370,7 +160565,7 @@ function print() { __p += __j.call(arguments, '') }
160370
160565
  supportsTrackedMode: true,
160371
160566
  possibleFailureCodes: ["INVALID_TARGET"],
160372
160567
  throws: [
160373
- ...T_NOT_FOUND_COMMAND_TRACKED2,
160568
+ ...T_NOT_FOUND_CAPABLE2,
160374
160569
  "INVALID_TARGET",
160375
160570
  "INVALID_INPUT"
160376
160571
  ]
@@ -160388,7 +160583,7 @@ function print() { __p += __j.call(arguments, '') }
160388
160583
  supportsTrackedMode: true,
160389
160584
  possibleFailureCodes: ["INVALID_TARGET"],
160390
160585
  throws: [
160391
- ...T_NOT_FOUND_COMMAND_TRACKED2,
160586
+ ...T_NOT_FOUND_CAPABLE2,
160392
160587
  "INVALID_TARGET",
160393
160588
  "AMBIGUOUS_TARGET"
160394
160589
  ]
@@ -160406,7 +160601,7 @@ function print() { __p += __j.call(arguments, '') }
160406
160601
  supportsTrackedMode: true,
160407
160602
  possibleFailureCodes: ["INVALID_TARGET"],
160408
160603
  throws: [
160409
- ...T_NOT_FOUND_COMMAND_TRACKED2,
160604
+ ...T_NOT_FOUND_CAPABLE2,
160410
160605
  "INVALID_TARGET",
160411
160606
  "AMBIGUOUS_TARGET"
160412
160607
  ]
@@ -160420,7 +160615,11 @@ function print() { __p += __j.call(arguments, '') }
160420
160615
  requiresDocumentContext: true,
160421
160616
  metadata: readOperation2({
160422
160617
  idempotency: "idempotent",
160423
- throws: T_NOT_FOUND2
160618
+ throws: [
160619
+ "TARGET_NOT_FOUND",
160620
+ "INVALID_TARGET",
160621
+ "INVALID_INPUT"
160622
+ ]
160424
160623
  }),
160425
160624
  referenceDocPath: "lists/list.mdx",
160426
160625
  referenceGroup: "lists"
@@ -160445,7 +160644,7 @@ function print() { __p += __j.call(arguments, '') }
160445
160644
  supportsDryRun: true,
160446
160645
  supportsTrackedMode: true,
160447
160646
  possibleFailureCodes: ["INVALID_TARGET"],
160448
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
160647
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160449
160648
  }),
160450
160649
  referenceDocPath: "lists/insert.mdx",
160451
160650
  referenceGroup: "lists"
@@ -160459,7 +160658,7 @@ function print() { __p += __j.call(arguments, '') }
160459
160658
  supportsDryRun: true,
160460
160659
  supportsTrackedMode: false,
160461
160660
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160462
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
160661
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160463
160662
  }),
160464
160663
  referenceDocPath: "lists/set-type.mdx",
160465
160664
  referenceGroup: "lists"
@@ -160473,7 +160672,7 @@ function print() { __p += __j.call(arguments, '') }
160473
160672
  supportsDryRun: true,
160474
160673
  supportsTrackedMode: false,
160475
160674
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160476
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
160675
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160477
160676
  }),
160478
160677
  referenceDocPath: "lists/indent.mdx",
160479
160678
  referenceGroup: "lists"
@@ -160487,7 +160686,7 @@ function print() { __p += __j.call(arguments, '') }
160487
160686
  supportsDryRun: true,
160488
160687
  supportsTrackedMode: false,
160489
160688
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160490
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
160689
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160491
160690
  }),
160492
160691
  referenceDocPath: "lists/outdent.mdx",
160493
160692
  referenceGroup: "lists"
@@ -160501,7 +160700,7 @@ function print() { __p += __j.call(arguments, '') }
160501
160700
  supportsDryRun: true,
160502
160701
  supportsTrackedMode: false,
160503
160702
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160504
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
160703
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160505
160704
  }),
160506
160705
  referenceDocPath: "lists/restart.mdx",
160507
160706
  referenceGroup: "lists"
@@ -160515,7 +160714,7 @@ function print() { __p += __j.call(arguments, '') }
160515
160714
  supportsDryRun: true,
160516
160715
  supportsTrackedMode: false,
160517
160716
  possibleFailureCodes: ["INVALID_TARGET"],
160518
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
160717
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160519
160718
  }),
160520
160719
  referenceDocPath: "lists/exit.mdx",
160521
160720
  referenceGroup: "lists"
@@ -160529,7 +160728,7 @@ function print() { __p += __j.call(arguments, '') }
160529
160728
  supportsDryRun: false,
160530
160729
  supportsTrackedMode: false,
160531
160730
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160532
- throws: [...T_NOT_FOUND_COMMAND2, "INVALID_TARGET"]
160731
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160533
160732
  }),
160534
160733
  referenceDocPath: "comments/create.mdx",
160535
160734
  referenceGroup: "comments"
@@ -160544,7 +160743,7 @@ function print() { __p += __j.call(arguments, '') }
160544
160743
  supportsTrackedMode: false,
160545
160744
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160546
160745
  throws: [
160547
- ...T_NOT_FOUND_COMMAND2,
160746
+ ...T_NOT_FOUND_CAPABLE2,
160548
160747
  "INVALID_TARGET",
160549
160748
  "INVALID_INPUT"
160550
160749
  ]
@@ -160561,7 +160760,7 @@ function print() { __p += __j.call(arguments, '') }
160561
160760
  supportsDryRun: false,
160562
160761
  supportsTrackedMode: false,
160563
160762
  possibleFailureCodes: ["NO_OP"],
160564
- throws: T_NOT_FOUND_COMMAND2
160763
+ throws: T_NOT_FOUND_CAPABLE2
160565
160764
  }),
160566
160765
  referenceDocPath: "comments/delete.mdx",
160567
160766
  referenceGroup: "comments"
@@ -160581,7 +160780,10 @@ function print() { __p += __j.call(arguments, '') }
160581
160780
  memberPath: "comments.list",
160582
160781
  description: "List all comment threads in the document.",
160583
160782
  requiresDocumentContext: true,
160584
- metadata: readOperation2({ idempotency: "idempotent" }),
160783
+ metadata: readOperation2({
160784
+ idempotency: "idempotent",
160785
+ throws: ["INVALID_INPUT"]
160786
+ }),
160585
160787
  referenceDocPath: "comments/list.mdx",
160586
160788
  referenceGroup: "comments"
160587
160789
  },
@@ -160589,7 +160791,10 @@ function print() { __p += __j.call(arguments, '') }
160589
160791
  memberPath: "trackChanges.list",
160590
160792
  description: "List all tracked changes in the document.",
160591
160793
  requiresDocumentContext: true,
160592
- metadata: readOperation2({ idempotency: "idempotent" }),
160794
+ metadata: readOperation2({
160795
+ idempotency: "idempotent",
160796
+ throws: ["INVALID_INPUT"]
160797
+ }),
160593
160798
  referenceDocPath: "track-changes/list.mdx",
160594
160799
  referenceGroup: "trackChanges"
160595
160800
  },
@@ -160614,7 +160819,7 @@ function print() { __p += __j.call(arguments, '') }
160614
160819
  supportsTrackedMode: false,
160615
160820
  possibleFailureCodes: ["NO_OP"],
160616
160821
  throws: [
160617
- ...T_NOT_FOUND_COMMAND2,
160822
+ ...T_NOT_FOUND_CAPABLE2,
160618
160823
  "INVALID_INPUT",
160619
160824
  "INVALID_TARGET"
160620
160825
  ]
@@ -160701,6 +160906,16 @@ function print() { __p += __j.call(arguments, '') }
160701
160906
  "blockId",
160702
160907
  "range"
160703
160908
  ]), objectSchema2({
160909
+ blockId: { type: "string" },
160910
+ range: ref$1("Range")
160911
+ }, ["blockId", "range"]), objectSchema2({
160912
+ kind: { const: "text" },
160913
+ segments: {
160914
+ type: "array",
160915
+ items: ref$1("TextSegment"),
160916
+ minItems: 1
160917
+ }
160918
+ }, ["kind", "segments"]), objectSchema2({
160704
160919
  kind: { const: "block" },
160705
160920
  nodeType: { enum: [...blockNodeTypeValues2] },
160706
160921
  nodeId: { type: "string" }
@@ -160857,6 +161072,7 @@ function print() { __p += __j.call(arguments, '') }
160857
161072
  ref$1("InlineAnchor");
160858
161073
  ref$1("TargetKind");
160859
161074
  textAddressSchema2 = ref$1("TextAddress");
161075
+ textTargetSchema2 = ref$1("TextTarget");
160860
161076
  blockNodeAddressSchema2 = ref$1("BlockNodeAddress");
160861
161077
  paragraphAddressSchema2 = ref$1("ParagraphAddress");
160862
161078
  headingAddressSchema2 = ref$1("HeadingAddress");
@@ -161059,7 +161275,8 @@ function print() { __p += __j.call(arguments, '') }
161059
161275
  text: { type: "string" },
161060
161276
  isInternal: { type: "boolean" },
161061
161277
  status: { enum: ["open", "resolved"] },
161062
- target: textAddressSchema2,
161278
+ target: textTargetSchema2,
161279
+ anchoredText: { type: "string" },
161063
161280
  createdTime: { type: "number" },
161064
161281
  creatorName: { type: "string" },
161065
161282
  creatorEmail: { type: "string" }
@@ -161075,7 +161292,8 @@ function print() { __p += __j.call(arguments, '') }
161075
161292
  text: { type: "string" },
161076
161293
  isInternal: { type: "boolean" },
161077
161294
  status: { enum: ["open", "resolved"] },
161078
- target: textAddressSchema2,
161295
+ target: textTargetSchema2,
161296
+ anchoredText: { type: "string" },
161079
161297
  createdTime: { type: "number" },
161080
161298
  creatorName: { type: "string" },
161081
161299
  creatorEmail: { type: "string" }
@@ -170753,8 +170971,10 @@ function print() { __p += __j.call(arguments, '') }
170753
170971
  updateOptions.availableWidth = options.availableWidth;
170754
170972
  if (options.availableHeight !== undefined)
170755
170973
  updateOptions.availableHeight = options.availableHeight;
170756
- if (Object.keys(updateOptions).length > 0)
170974
+ if (Object.keys(updateOptions).length > 0) {
170757
170975
  existing.editor.setOptions(updateOptions);
170976
+ this.#refreshPageNumberDisplay(existing.editor);
170977
+ }
170758
170978
  }
170759
170979
  return existing.editor;
170760
170980
  }
@@ -170785,6 +171005,25 @@ function print() { __p += __j.call(arguments, '') }
170785
171005
  this.#pendingCreations.set(descriptor.id, creationPromise);
170786
171006
  return creationPromise;
170787
171007
  }
171008
+ #refreshPageNumberDisplay(editor) {
171009
+ const container = editor.view?.dom;
171010
+ if (!container)
171011
+ return;
171012
+ const opts = editor.options;
171013
+ const parentEditor = opts.parentEditor;
171014
+ const currentPage = String(opts.currentPageNumber || "1");
171015
+ const totalPages = String(opts.totalPageCount || parentEditor?.currentTotalPages || "1");
171016
+ const pageNumberEls = container.querySelectorAll('[data-id="auto-page-number"]');
171017
+ const totalPagesEls = container.querySelectorAll('[data-id="auto-total-pages"]');
171018
+ pageNumberEls.forEach((el) => {
171019
+ if (el.textContent !== currentPage)
171020
+ el.textContent = currentPage;
171021
+ });
171022
+ totalPagesEls.forEach((el) => {
171023
+ if (el.textContent !== totalPages)
171024
+ el.textContent = totalPages;
171025
+ });
171026
+ }
170788
171027
  getEditor(descriptor) {
170789
171028
  if (!descriptor?.id)
170790
171029
  return null;
@@ -172465,7 +172704,7 @@ function print() { __p += __j.call(arguments, '') }
172465
172704
  goToAnchor: (href) => this.goToAnchor(href),
172466
172705
  emit: (event, payload) => this.emit(event, payload),
172467
172706
  normalizeClientPoint: (clientX, clientY) => this.#normalizeClientPoint(clientX, clientY),
172468
- hitTestHeaderFooterRegion: (x2, y$1) => this.#hitTestHeaderFooterRegion(x2, y$1),
172707
+ hitTestHeaderFooterRegion: (x2, y$1, pageIndex, pageLocalY) => this.#hitTestHeaderFooterRegion(x2, y$1, pageIndex, pageLocalY),
172469
172708
  exitHeaderFooterMode: () => this.#exitHeaderFooterMode(),
172470
172709
  activateHeaderFooterRegion: (region) => this.#activateHeaderFooterRegion(region),
172471
172710
  createDefaultHeaderFooter: (region) => this.#createDefaultHeaderFooter(region),
@@ -172588,7 +172827,8 @@ function print() { __p += __j.call(arguments, '') }
172588
172827
  scheduleRerender: () => this.#scheduleRerender(),
172589
172828
  setPendingDocChange: () => {
172590
172829
  this.#pendingDocChange = true;
172591
- }
172830
+ },
172831
+ getBodyPageCount: () => this.#layoutState?.layout?.pages?.length ?? 1
172592
172832
  });
172593
172833
  this.#headerFooterSession.setCallbacks({
172594
172834
  onModeChanged: (session) => {
@@ -173504,8 +173744,8 @@ function print() { __p += __j.call(arguments, '') }
173504
173744
  #updateDecorationProviders(layout) {
173505
173745
  this.#headerFooterSession?.updateDecorationProviders(layout);
173506
173746
  }
173507
- #hitTestHeaderFooterRegion(x2, y$1) {
173508
- return this.#headerFooterSession?.hitTestRegion(x2, y$1, this.#layoutState.layout) ?? null;
173747
+ #hitTestHeaderFooterRegion(x2, y$1, pageIndex, pageLocalY) {
173748
+ return this.#headerFooterSession?.hitTestRegion(x2, y$1, this.#layoutState.layout, pageIndex, pageLocalY) ?? null;
173509
173749
  }
173510
173750
  #activateHeaderFooterRegion(region) {
173511
173751
  this.#headerFooterSession?.activateRegion(region);
@@ -178257,7 +178497,7 @@ function print() { __p += __j.call(arguments, '') }
178257
178497
  const { schema } = state;
178258
178498
  if (!schema.nodes?.["total-page-number"])
178259
178499
  return false;
178260
- const currentPages = editor?.options?.parentEditor?.currentTotalPages || 1;
178500
+ const currentPages = editor?.options?.totalPageCount || editor?.options?.parentEditor?.currentTotalPages || 1;
178261
178501
  const pageNumberNode = {
178262
178502
  type: "total-page-number",
178263
178503
  content: [{
@@ -183582,8 +183822,8 @@ function print() { __p += __j.call(arguments, '') }
183582
183822
  return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
183583
183823
  };
183584
183824
  stubFalse_default = stubFalse;
183585
- freeExports$2 = typeof exports_src_CYnAk7Cg_es == "object" && exports_src_CYnAk7Cg_es && !exports_src_CYnAk7Cg_es.nodeType && exports_src_CYnAk7Cg_es;
183586
- freeModule$2 = freeExports$2 && typeof module_src_CYnAk7Cg_es == "object" && module_src_CYnAk7Cg_es && !module_src_CYnAk7Cg_es.nodeType && module_src_CYnAk7Cg_es;
183825
+ freeExports$2 = typeof exports_src_DsAtPNrg_es == "object" && exports_src_DsAtPNrg_es && !exports_src_DsAtPNrg_es.nodeType && exports_src_DsAtPNrg_es;
183826
+ freeModule$2 = freeExports$2 && typeof module_src_DsAtPNrg_es == "object" && module_src_DsAtPNrg_es && !module_src_DsAtPNrg_es.nodeType && module_src_DsAtPNrg_es;
183587
183827
  Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
183588
183828
  isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
183589
183829
  typedArrayTags = {};
@@ -183591,8 +183831,8 @@ function print() { __p += __j.call(arguments, '') }
183591
183831
  typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;
183592
183832
  _baseIsTypedArray_default = baseIsTypedArray;
183593
183833
  _baseUnary_default = baseUnary;
183594
- freeExports$1 = typeof exports_src_CYnAk7Cg_es == "object" && exports_src_CYnAk7Cg_es && !exports_src_CYnAk7Cg_es.nodeType && exports_src_CYnAk7Cg_es;
183595
- freeModule$1 = freeExports$1 && typeof module_src_CYnAk7Cg_es == "object" && module_src_CYnAk7Cg_es && !module_src_CYnAk7Cg_es.nodeType && module_src_CYnAk7Cg_es;
183834
+ freeExports$1 = typeof exports_src_DsAtPNrg_es == "object" && exports_src_DsAtPNrg_es && !exports_src_DsAtPNrg_es.nodeType && exports_src_DsAtPNrg_es;
183835
+ freeModule$1 = freeExports$1 && typeof module_src_DsAtPNrg_es == "object" && module_src_DsAtPNrg_es && !module_src_DsAtPNrg_es.nodeType && module_src_DsAtPNrg_es;
183596
183836
  freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
183597
183837
  _nodeUtil_default = function() {
183598
183838
  try {
@@ -183697,8 +183937,8 @@ function print() { __p += __j.call(arguments, '') }
183697
183937
  Stack.prototype.has = _stackHas_default;
183698
183938
  Stack.prototype.set = _stackSet_default;
183699
183939
  _Stack_default = Stack;
183700
- freeExports = typeof exports_src_CYnAk7Cg_es == "object" && exports_src_CYnAk7Cg_es && !exports_src_CYnAk7Cg_es.nodeType && exports_src_CYnAk7Cg_es;
183701
- freeModule = freeExports && typeof module_src_CYnAk7Cg_es == "object" && module_src_CYnAk7Cg_es && !module_src_CYnAk7Cg_es.nodeType && module_src_CYnAk7Cg_es;
183940
+ freeExports = typeof exports_src_DsAtPNrg_es == "object" && exports_src_DsAtPNrg_es && !exports_src_DsAtPNrg_es.nodeType && exports_src_DsAtPNrg_es;
183941
+ freeModule = freeExports && typeof module_src_DsAtPNrg_es == "object" && module_src_DsAtPNrg_es && !module_src_DsAtPNrg_es.nodeType && module_src_DsAtPNrg_es;
183702
183942
  Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
183703
183943
  allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
183704
183944
  _cloneBuffer_default = cloneBuffer;
@@ -191317,8 +191557,8 @@ var init_zipper_BJHqrQMq_es = __esm(() => {
191317
191557
 
191318
191558
  // ../../packages/superdoc/dist/super-editor.es.js
191319
191559
  var init_super_editor_es = __esm(() => {
191320
- init_src_CYnAk7Cg_es();
191321
- init_SuperConverter_D9XMPi6H_es();
191560
+ init_src_DsAtPNrg_es();
191561
+ init_SuperConverter_Cf1y7bFA_es();
191322
191562
  init_jszip_ChlR43oI_es();
191323
191563
  init_xml_js_DLE8mr0n_es();
191324
191564
  init_constants_DBKi0Amm_es();
@@ -197434,10 +197674,7 @@ function isRefWhere2(where) {
197434
197674
  return where.by === "ref";
197435
197675
  }
197436
197676
  function isV3Ref2(payload) {
197437
- return "v" in payload && payload.v === 3;
197438
- }
197439
- function isV2Ref2(payload) {
197440
- return "v" in payload && payload.v === 2;
197677
+ return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
197441
197678
  }
197442
197679
  function resolveAbsoluteRange2(editor, candidate, from3, to, stepId) {
197443
197680
  const resolved = resolveTextRangeInBlock2(candidate.node, candidate.pos, { start: from3, end: to });
@@ -197660,58 +197897,6 @@ function decodeTextRefPayload2(encoded, stepId) {
197660
197897
  throw planError2("INVALID_INPUT", "invalid text ref encoding", stepId);
197661
197898
  }
197662
197899
  }
197663
- function resolveV1TextRef2(editor, index2, step, refData) {
197664
- const currentRevision = getRevision2(editor);
197665
- if (refData.rev !== currentRevision) {
197666
- throw planError2("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, { refRevision: refData.rev, currentRevision });
197667
- }
197668
- if (!refData.ranges?.length)
197669
- return [];
197670
- const coalesced = normalizeMatchRanges2(step.id, refData.ranges);
197671
- const candidate = index2.candidates.find((c2) => c2.nodeId === coalesced.blockId);
197672
- if (!candidate)
197673
- return [];
197674
- const blockText = getBlockText2(editor, candidate);
197675
- const matchText = blockText.slice(coalesced.from, coalesced.to);
197676
- const addr = {
197677
- blockId: coalesced.blockId,
197678
- from: coalesced.from,
197679
- to: coalesced.to,
197680
- text: matchText,
197681
- marks: [],
197682
- blockPos: candidate.pos
197683
- };
197684
- return [buildRangeTarget2(editor, step, addr, candidate)];
197685
- }
197686
- function resolveV2TextRef2(editor, index2, step, refData) {
197687
- const currentRevision = getRevision2(editor);
197688
- if (refData.rev !== currentRevision) {
197689
- throw planError2("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, { refRevision: refData.rev, currentRevision });
197690
- }
197691
- if (!refData.segments?.length)
197692
- return [];
197693
- const segments = refData.segments.map((s2) => ({ blockId: s2.blockId, from: s2.start, to: s2.end }));
197694
- if (segments.length === 1) {
197695
- const seg = segments[0];
197696
- const candidate = index2.candidates.find((c2) => c2.nodeId === seg.blockId);
197697
- if (!candidate)
197698
- return [];
197699
- const blockText = getBlockText2(editor, candidate);
197700
- const matchText = blockText.slice(seg.from, seg.to);
197701
- const addr = {
197702
- blockId: seg.blockId,
197703
- from: seg.from,
197704
- to: seg.to,
197705
- text: matchText,
197706
- marks: [],
197707
- blockPos: candidate.pos
197708
- };
197709
- const target = buildRangeTarget2(editor, step, addr, candidate);
197710
- target.matchId = refData.matchId;
197711
- return [target];
197712
- }
197713
- return [buildSpanTarget2(editor, index2, step, segments, refData.matchId)];
197714
- }
197715
197900
  function resolveV3TextRef2(editor, index2, step, refData) {
197716
197901
  const currentRevision = getRevision2(editor);
197717
197902
  if (refData.rev !== currentRevision) {
@@ -197744,13 +197929,10 @@ function resolveV3TextRef2(editor, index2, step, refData) {
197744
197929
  function resolveTextRef2(editor, index2, step, ref3) {
197745
197930
  const encoded = ref3.slice(5);
197746
197931
  const payload = decodeTextRefPayload2(encoded, step.id);
197747
- if (isV3Ref2(payload)) {
197748
- return resolveV3TextRef2(editor, index2, step, payload);
197932
+ if (!isV3Ref2(payload)) {
197933
+ throw planError2("INVALID_INPUT", "only V3 text refs are supported", step.id);
197749
197934
  }
197750
- if (isV2Ref2(payload)) {
197751
- return resolveV2TextRef2(editor, index2, step, payload);
197752
- }
197753
- return resolveV1TextRef2(editor, index2, step, payload);
197935
+ return resolveV3TextRef2(editor, index2, step, payload);
197754
197936
  }
197755
197937
  function resolveBlockRef2(editor, index2, step, ref3) {
197756
197938
  const candidate = index2.candidates.find((c2) => c2.nodeId === ref3);
@@ -197776,9 +197958,6 @@ function dispatchRefHandler2(editor, index2, step, ref3) {
197776
197958
  return resolveBlockRef2(editor, index2, step, ref3);
197777
197959
  }
197778
197960
  function resolveRefTargets2(editor, index2, step, where) {
197779
- if (where.require !== undefined && where.require !== "exactlyOne") {
197780
- throw planError2("INVALID_INPUT", `ref-based targeting only accepts require: 'exactlyOne' (received '${where.require}')`, step.id);
197781
- }
197782
197961
  return dispatchRefHandler2(editor, index2, step, where.ref);
197783
197962
  }
197784
197963
  function resolveStepTargets2(editor, index2, step) {
@@ -198988,6 +199167,7 @@ function toCommentInfo2(entry, options = {}) {
198988
199167
  isInternal: typeof entry.isInternal === "boolean" ? entry.isInternal : undefined,
198989
199168
  status,
198990
199169
  target: options.target,
199170
+ anchoredText: options.anchoredText,
198991
199171
  createdTime: typeof entry.createdTime === "number" ? entry.createdTime : undefined,
198992
199172
  creatorName: typeof entry.creatorName === "string" ? entry.creatorName : undefined,
198993
199173
  creatorEmail: typeof entry.creatorEmail === "string" ? entry.creatorEmail : undefined
@@ -199124,7 +199304,64 @@ function resolveCommentIdentity2(editor, commentId) {
199124
199304
  anchors
199125
199305
  };
199126
199306
  }
199127
- function mergeAnchorData2(infosById, anchors) {
199307
+ function canonicalizeAnchors2(sorted) {
199308
+ if (sorted.length === 0)
199309
+ return [];
199310
+ const result = [];
199311
+ let current = {
199312
+ blockId: sorted[0].target.blockId,
199313
+ range: { start: sorted[0].target.range.start, end: sorted[0].target.range.end },
199314
+ pos: sorted[0].pos,
199315
+ end: sorted[0].end
199316
+ };
199317
+ for (let i4 = 1;i4 < sorted.length; i4++) {
199318
+ const anchor = sorted[i4];
199319
+ const sameBlock = anchor.target.blockId === current.blockId;
199320
+ const overlapsOrAdjacent = anchor.target.range.start <= current.range.end;
199321
+ if (sameBlock && overlapsOrAdjacent) {
199322
+ current.range.end = Math.max(current.range.end, anchor.target.range.end);
199323
+ current.end = Math.max(current.end, anchor.end);
199324
+ } else {
199325
+ result.push(current);
199326
+ current = {
199327
+ blockId: anchor.target.blockId,
199328
+ range: { start: anchor.target.range.start, end: anchor.target.range.end },
199329
+ pos: anchor.pos,
199330
+ end: anchor.end
199331
+ };
199332
+ }
199333
+ }
199334
+ result.push(current);
199335
+ return result;
199336
+ }
199337
+ function extractSegmentText2(editor, pos, end) {
199338
+ try {
199339
+ const raw = editor.state.doc.textBetween(pos, end, " ", "");
199340
+ const cleaned = raw.replace(/\ufffc/g, "").trim();
199341
+ return cleaned.length > 0 ? cleaned : undefined;
199342
+ } catch {
199343
+ return;
199344
+ }
199345
+ }
199346
+ function buildAnchoredText2(editor, canonical) {
199347
+ const parts = [];
199348
+ for (const anchor of canonical) {
199349
+ const text4 = extractSegmentText2(editor, anchor.pos, anchor.end);
199350
+ if (text4)
199351
+ parts.push(text4);
199352
+ }
199353
+ return parts.length > 0 ? normalizeExcerpt2(parts.join(" ")) : undefined;
199354
+ }
199355
+ function buildTextTarget2(canonical) {
199356
+ if (canonical.length === 0)
199357
+ return;
199358
+ const segments = canonical.map((a2) => ({
199359
+ blockId: a2.blockId,
199360
+ range: { start: a2.range.start, end: a2.range.end }
199361
+ }));
199362
+ return { kind: "text", segments };
199363
+ }
199364
+ function mergeAnchorData2(editor, infosById, anchors) {
199128
199365
  const grouped = new Map;
199129
199366
  for (const anchor of anchors) {
199130
199367
  const group = grouped.get(anchor.commentId) ?? [];
@@ -199133,28 +199370,34 @@ function mergeAnchorData2(infosById, anchors) {
199133
199370
  }
199134
199371
  for (const [commentId, commentAnchors] of grouped.entries()) {
199135
199372
  const sorted = [...commentAnchors].sort((a2, b3) => a2.pos === b3.pos ? a2.end - b3.end : a2.pos - b3.pos);
199136
- const primary = sorted[0];
199373
+ const firstAnchor = sorted[0];
199137
199374
  const status = sorted.every((anchor) => anchor.status === "resolved") ? "resolved" : "open";
199375
+ const canonical = canonicalizeAnchors2(sorted);
199376
+ const target = buildTextTarget2(canonical);
199377
+ const anchoredText = buildAnchoredText2(editor, canonical);
199138
199378
  const existing = infosById.get(commentId);
199139
199379
  if (existing) {
199140
- if (!existing.target)
199141
- existing.target = primary.target;
199142
- if (!existing.importedId && primary.importedId)
199143
- existing.importedId = primary.importedId;
199144
- if (existing.isInternal == null && primary.isInternal != null)
199145
- existing.isInternal = primary.isInternal;
199380
+ if (!existing.target && target)
199381
+ existing.target = target;
199382
+ if (!existing.importedId && firstAnchor.importedId)
199383
+ existing.importedId = firstAnchor.importedId;
199384
+ if (existing.isInternal == null && firstAnchor.isInternal != null)
199385
+ existing.isInternal = firstAnchor.isInternal;
199146
199386
  if (status === "open")
199147
199387
  existing.status = "open";
199388
+ if (existing.anchoredText == null && anchoredText != null)
199389
+ existing.anchoredText = anchoredText;
199148
199390
  continue;
199149
199391
  }
199150
199392
  infosById.set(commentId, toCommentInfo2({
199151
199393
  commentId,
199152
- importedId: primary.importedId,
199153
- isInternal: primary.isInternal,
199394
+ importedId: firstAnchor.importedId,
199395
+ isInternal: firstAnchor.isInternal,
199154
199396
  isDone: status === "resolved"
199155
199397
  }, {
199156
- target: primary.target,
199157
- status
199398
+ target,
199399
+ status,
199400
+ anchoredText
199158
199401
  }));
199159
199402
  }
199160
199403
  }
@@ -199167,15 +199410,33 @@ function buildCommentInfos2(editor) {
199167
199410
  continue;
199168
199411
  infosById.set(commentId, toCommentInfo2({ ...entry, commentId }));
199169
199412
  }
199170
- mergeAnchorData2(infosById, listCommentAnchorsSafe2(editor));
199413
+ mergeAnchorData2(editor, infosById, listCommentAnchorsSafe2(editor));
199414
+ for (const info of infosById.values()) {
199415
+ if (info.target != null && info.anchoredText != null || !info.parentCommentId)
199416
+ continue;
199417
+ const visited = new Set;
199418
+ let cursor = info;
199419
+ while (cursor?.parentCommentId && !visited.has(cursor.parentCommentId)) {
199420
+ visited.add(cursor.parentCommentId);
199421
+ const ancestor = infosById.get(cursor.parentCommentId);
199422
+ if (ancestor?.target != null) {
199423
+ if (info.target == null)
199424
+ info.target = ancestor.target;
199425
+ if (info.anchoredText == null && ancestor.anchoredText != null)
199426
+ info.anchoredText = ancestor.anchoredText;
199427
+ break;
199428
+ }
199429
+ cursor = ancestor;
199430
+ }
199431
+ }
199171
199432
  const infos = Array.from(infosById.values());
199172
199433
  infos.sort((left2, right2) => {
199173
199434
  const leftCreated = left2.createdTime ?? 0;
199174
199435
  const rightCreated = right2.createdTime ?? 0;
199175
199436
  if (leftCreated !== rightCreated)
199176
199437
  return leftCreated - rightCreated;
199177
- const leftStart = left2.target?.range.start ?? Number.MAX_SAFE_INTEGER;
199178
- const rightStart = right2.target?.range.start ?? Number.MAX_SAFE_INTEGER;
199438
+ const leftStart = left2.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
199439
+ const rightStart = right2.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
199179
199440
  if (leftStart !== rightStart)
199180
199441
  return leftStart - rightStart;
199181
199442
  return left2.commentId.localeCompare(right2.commentId);
@@ -199183,7 +199444,7 @@ function buildCommentInfos2(editor) {
199183
199444
  return infos;
199184
199445
  }
199185
199446
  function addCommentHandler2(editor, input2, options) {
199186
- requireEditorCommand2(editor.commands?.addComment, "comments.add (addComment)");
199447
+ requireEditorCommand2(editor.commands?.addComment, "comments.create (addComment)");
199187
199448
  if (input2.target.range.start === input2.target.range.end) {
199188
199449
  return {
199189
199450
  success: false,
@@ -199220,7 +199481,7 @@ function addCommentHandler2(editor, input2, options) {
199220
199481
  }
199221
199482
  const commentId = v42();
199222
199483
  const receipt2 = executeDomainCommand2(editor, () => {
199223
- const addComment = requireEditorCommand2(editor.commands?.addComment, "comments.add (addComment)");
199484
+ const addComment = requireEditorCommand2(editor.commands?.addComment, "comments.create (addComment)");
199224
199485
  const didInsert = addComment({ content: input2.text, isInternal: false, commentId }) === true;
199225
199486
  if (didInsert) {
199226
199487
  clearIndexCache2(editor);
@@ -199253,7 +199514,7 @@ function addCommentHandler2(editor, input2, options) {
199253
199514
  return { success: true, inserted: [toCommentAddress2(commentId)] };
199254
199515
  }
199255
199516
  function editCommentHandler2(editor, input2, options) {
199256
- const editComment = requireEditorCommand2(editor.commands?.editComment, "comments.edit (editComment)");
199517
+ const editComment = requireEditorCommand2(editor.commands?.editComment, "comments.patch (editComment)");
199257
199518
  const store = getCommentEntityStore2(editor);
199258
199519
  const identity2 = resolveCommentIdentity2(editor, input2.commentId);
199259
199520
  const existing = findCommentEntity2(store, identity2.commentId);
@@ -199288,7 +199549,7 @@ function editCommentHandler2(editor, input2, options) {
199288
199549
  return { success: true, updated: [toCommentAddress2(identity2.commentId)] };
199289
199550
  }
199290
199551
  function replyToCommentHandler2(editor, input2, options) {
199291
- const addCommentReply = requireEditorCommand2(editor.commands?.addCommentReply, "comments.reply (addCommentReply)");
199552
+ const addCommentReply = requireEditorCommand2(editor.commands?.addCommentReply, "comments.create (addCommentReply)");
199292
199553
  if (!input2.parentCommentId) {
199293
199554
  return {
199294
199555
  success: false,
@@ -199336,7 +199597,7 @@ function replyToCommentHandler2(editor, input2, options) {
199336
199597
  return { success: true, inserted: [toCommentAddress2(replyId)] };
199337
199598
  }
199338
199599
  function moveCommentHandler2(editor, input2, options) {
199339
- const moveComment = requireEditorCommand2(editor.commands?.moveComment, "comments.move (moveComment)");
199600
+ const moveComment = requireEditorCommand2(editor.commands?.moveComment, "comments.patch (moveComment)");
199340
199601
  if (input2.target.range.start === input2.target.range.end) {
199341
199602
  return {
199342
199603
  success: false,
@@ -199386,7 +199647,7 @@ function moveCommentHandler2(editor, input2, options) {
199386
199647
  return { success: true, updated: [toCommentAddress2(identity2.commentId)] };
199387
199648
  }
199388
199649
  function resolveCommentHandler2(editor, input2, options) {
199389
- const resolveComment = requireEditorCommand2(editor.commands?.resolveComment, "comments.resolve (resolveComment)");
199650
+ const resolveComment = requireEditorCommand2(editor.commands?.resolveComment, "comments.patch (resolveComment)");
199390
199651
  const store = getCommentEntityStore2(editor);
199391
199652
  const identity2 = resolveCommentIdentity2(editor, input2.commentId);
199392
199653
  const existing = findCommentEntity2(store, identity2.commentId);
@@ -199553,6 +199814,7 @@ function listCommentsHandler2(editor, query2) {
199553
199814
  isInternal,
199554
199815
  status,
199555
199816
  target,
199817
+ anchoredText,
199556
199818
  createdTime,
199557
199819
  creatorName,
199558
199820
  creatorEmail,
@@ -199566,6 +199828,7 @@ function listCommentsHandler2(editor, query2) {
199566
199828
  isInternal,
199567
199829
  status,
199568
199830
  target,
199831
+ anchoredText,
199569
199832
  createdTime,
199570
199833
  creatorName,
199571
199834
  creatorEmail
@@ -219406,6 +219669,18 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES3, shouldSkipFieldProcessing3 = (node3) => S
219406
219669
  i4++;
219407
219670
  continue;
219408
219671
  }
219672
+ const childElements = node3.elements || [];
219673
+ if (childElements.length > 0) {
219674
+ for (const child of childElements) {
219675
+ if (Array.isArray(child.elements)) {
219676
+ const childResult = preProcessPageFieldsOnly2(child.elements, depth + 1);
219677
+ child.elements = childResult.processedNodes;
219678
+ }
219679
+ processedNodes.push(child);
219680
+ }
219681
+ i4++;
219682
+ continue;
219683
+ }
219409
219684
  }
219410
219685
  if (fldType === "begin") {
219411
219686
  const fieldInfo = scanFieldSequence2(nodes, i4);
@@ -219431,6 +219706,13 @@ var SKIP_FIELD_PROCESSING_NODE_NAMES3, shouldSkipFieldProcessing3 = (node3) => S
219431
219706
  }
219432
219707
  }
219433
219708
  }
219709
+ if (node3.name === "w:r" && node3.elements?.some((el) => el.name === "w:pgNum")) {
219710
+ const rPr = node3.elements.find((el) => el.name === "w:rPr") || null;
219711
+ const processedField = preProcessPageInstruction2([], "", rPr);
219712
+ processedNodes.push(...processedField);
219713
+ i4++;
219714
+ continue;
219715
+ }
219434
219716
  if (Array.isArray(node3.elements)) {
219435
219717
  const childResult = preProcessPageFieldsOnly2(node3.elements, depth + 1);
219436
219718
  node3.elements = childResult.processedNodes;