@superdoc-dev/cli 0.5.0-next.81 → 0.5.0-next.82

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 +1150 -918
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -1608,6 +1608,17 @@ var init_operation_definitions = __esm(() => {
1608
1608
  intentGroup: "get_content",
1609
1609
  intentAction: "info"
1610
1610
  },
1611
+ extract: {
1612
+ memberPath: "extract",
1613
+ description: "Extract all document content with stable IDs for RAG pipelines. Returns blocks with full text, comments, and tracked changes — each with an ID compatible with scrollToElement().",
1614
+ expectedResult: "Returns an ExtractResult with blocks (nodeId, type, text, headingLevel), comments (entityId, text, anchoredText, blockId, status, author), tracked changes (entityId, type, excerpt, author, date), and revision.",
1615
+ requiresDocumentContext: true,
1616
+ metadata: readOperation(),
1617
+ referenceDocPath: "extract.mdx",
1618
+ referenceGroup: "core",
1619
+ intentGroup: "get_content",
1620
+ intentAction: "extract"
1621
+ },
1611
1622
  clearContent: {
1612
1623
  memberPath: "clearContent",
1613
1624
  description: "Clear all document body content, leaving a single empty paragraph.",
@@ -9598,6 +9609,48 @@ var init_schemas = __esm(() => {
9598
9609
  input: strictEmptyObjectSchema,
9599
9610
  output: documentInfoSchema
9600
9611
  },
9612
+ extract: {
9613
+ input: strictEmptyObjectSchema,
9614
+ output: objectSchema({
9615
+ blocks: {
9616
+ type: "array",
9617
+ items: objectSchema({
9618
+ nodeId: { type: "string", description: "Stable block ID — pass to scrollToElement() for navigation." },
9619
+ type: { type: "string", description: "Block type: paragraph, heading, listItem, table, image, etc." },
9620
+ text: { type: "string", description: "Full plain text content of the block." },
9621
+ headingLevel: { type: "integer", description: "Heading level (1–6). Only present for headings." }
9622
+ }, ["nodeId", "type", "text"])
9623
+ },
9624
+ comments: {
9625
+ type: "array",
9626
+ items: objectSchema({
9627
+ entityId: {
9628
+ type: "string",
9629
+ description: "Comment entity ID — pass to scrollToElement() for navigation."
9630
+ },
9631
+ text: { type: "string", description: "Comment body text." },
9632
+ anchoredText: { type: "string", description: "The document text the comment is anchored to." },
9633
+ blockId: { type: "string", description: "Block ID the comment is anchored to." },
9634
+ status: { type: "string", enum: ["open", "resolved"] },
9635
+ author: { type: "string", description: "Comment author name." }
9636
+ }, ["entityId", "status"])
9637
+ },
9638
+ trackedChanges: {
9639
+ type: "array",
9640
+ items: objectSchema({
9641
+ entityId: {
9642
+ type: "string",
9643
+ description: "Tracked change entity ID — pass to scrollToElement() for navigation."
9644
+ },
9645
+ type: { type: "string", enum: ["insert", "delete", "format"] },
9646
+ excerpt: { type: "string", description: "Short text excerpt of the changed content." },
9647
+ author: { type: "string", description: "Change author name." },
9648
+ date: { type: "string", description: "Change date (ISO string)." }
9649
+ }, ["entityId", "type"])
9650
+ },
9651
+ revision: { type: "string", description: "Document revision at the time of extraction." }
9652
+ }, ["blocks", "comments", "trackedChanges", "revision"])
9653
+ },
9601
9654
  clearContent: {
9602
9655
  input: strictEmptyObjectSchema,
9603
9656
  output: receiptResultSchemaFor("clearContent"),
@@ -13717,6 +13770,11 @@ function executeInfo(adapter, input) {
13717
13770
  return adapter.info(input);
13718
13771
  }
13719
13772
 
13773
+ // ../../packages/document-api/src/extract/extract.ts
13774
+ function executeExtract(adapter, input) {
13775
+ return adapter.extract(input);
13776
+ }
13777
+
13720
13778
  // ../../packages/document-api/src/clear-content/clear-content.ts
13721
13779
  function executeClearContent(adapter, input, options) {
13722
13780
  return adapter.clearContent(input, options);
@@ -15452,6 +15510,7 @@ function buildDispatchTable(api) {
15452
15510
  getHtml: (input) => api.getHtml(input),
15453
15511
  markdownToFragment: (input) => api.markdownToFragment(input),
15454
15512
  info: (input) => api.info(input),
15513
+ extract: (input) => api.extract(input),
15455
15514
  clearContent: (input, options) => api.clearContent(input, options),
15456
15515
  insert: (input, options) => api.insert(input, options),
15457
15516
  replace: (input, options) => api.replace(input, options),
@@ -18175,6 +18234,9 @@ function createDocumentApi(adapters) {
18175
18234
  info(input) {
18176
18235
  return executeInfo(adapters.info, input);
18177
18236
  },
18237
+ extract(input) {
18238
+ return executeExtract(adapters.extract, input);
18239
+ },
18178
18240
  clearContent(input, options) {
18179
18241
  return executeClearContent(adapters.clearContent, input, options);
18180
18242
  },
@@ -42460,6 +42522,7 @@ var init_operation_hints = __esm(() => {
42460
42522
  getMarkdown: "extracted markdown",
42461
42523
  getHtml: "extracted html",
42462
42524
  info: "retrieved info",
42525
+ extract: "extracted content",
42463
42526
  clearContent: "cleared document content",
42464
42527
  insert: "inserted text",
42465
42528
  replace: "replaced text",
@@ -42598,6 +42661,7 @@ var init_operation_hints = __esm(() => {
42598
42661
  getMarkdown: "plain",
42599
42662
  getHtml: "plain",
42600
42663
  info: "documentInfo",
42664
+ extract: "plain",
42601
42665
  clearContent: "receipt",
42602
42666
  insert: "mutationReceipt",
42603
42667
  replace: "mutationReceipt",
@@ -42736,6 +42800,7 @@ var init_operation_hints = __esm(() => {
42736
42800
  getMarkdown: "markdown",
42737
42801
  getHtml: "html",
42738
42802
  info: null,
42803
+ extract: null,
42739
42804
  clearContent: "receipt",
42740
42805
  insert: null,
42741
42806
  replace: null,
@@ -42890,6 +42955,7 @@ var init_operation_hints = __esm(() => {
42890
42955
  getMarkdown: "query",
42891
42956
  getHtml: "query",
42892
42957
  info: "general",
42958
+ extract: "general",
42893
42959
  clearContent: "general",
42894
42960
  insert: "textMutation",
42895
42961
  replace: "textMutation",
@@ -65886,7 +65952,7 @@ var init_remark_gfm_BhnWr3yf_es = __esm(() => {
65886
65952
  emptyOptions2 = {};
65887
65953
  });
65888
65954
 
65889
- // ../../packages/superdoc/dist/chunks/SuperConverter-C87tnocN.es.js
65955
+ // ../../packages/superdoc/dist/chunks/SuperConverter-CorFllow.es.js
65890
65956
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
65891
65957
  const fieldValue = extension$1.config[field];
65892
65958
  if (typeof fieldValue === "function")
@@ -68774,6 +68840,9 @@ function executeGetHtml2(adapter, input) {
68774
68840
  function executeInfo2(adapter, input) {
68775
68841
  return adapter.info(input);
68776
68842
  }
68843
+ function executeExtract2(adapter, input) {
68844
+ return adapter.extract(input);
68845
+ }
68777
68846
  function executeClearContent2(adapter, input, options) {
68778
68847
  return adapter.clearContent(input, options);
68779
68848
  }
@@ -70275,6 +70344,7 @@ function buildDispatchTable2(api) {
70275
70344
  getHtml: (input) => api.getHtml(input),
70276
70345
  markdownToFragment: (input) => api.markdownToFragment(input),
70277
70346
  info: (input) => api.info(input),
70347
+ extract: (input) => api.extract(input),
70278
70348
  clearContent: (input, options) => api.clearContent(input, options),
70279
70349
  insert: (input, options) => api.insert(input, options),
70280
70350
  replace: (input, options) => api.replace(input, options),
@@ -72644,6 +72714,9 @@ function createDocumentApi2(adapters) {
72644
72714
  info(input) {
72645
72715
  return executeInfo2(adapters.info, input);
72646
72716
  },
72717
+ extract(input) {
72718
+ return executeExtract2(adapters.extract, input);
72719
+ },
72647
72720
  clearContent(input, options) {
72648
72721
  return executeClearContent2(adapters.clearContent, input, options);
72649
72722
  },
@@ -117546,7 +117619,7 @@ var isRegExp = (value) => {
117546
117619
  state.kern = kernNode.attributes["w:val"];
117547
117620
  }
117548
117621
  }, SuperConverter;
117549
- var init_SuperConverter_C87tnocN_es = __esm(() => {
117622
+ var init_SuperConverter_CorFllow_es = __esm(() => {
117550
117623
  init_rolldown_runtime_Bg48TavK_es();
117551
117624
  init_jszip_C49i9kUs_es();
117552
117625
  init_xml_js_CqGKpaft_es();
@@ -120688,6 +120761,17 @@ var init_SuperConverter_C87tnocN_es = __esm(() => {
120688
120761
  intentGroup: "get_content",
120689
120762
  intentAction: "info"
120690
120763
  },
120764
+ extract: {
120765
+ memberPath: "extract",
120766
+ description: "Extract all document content with stable IDs for RAG pipelines. Returns blocks with full text, comments, and tracked changes — each with an ID compatible with scrollToElement().",
120767
+ expectedResult: "Returns an ExtractResult with blocks (nodeId, type, text, headingLevel), comments (entityId, text, anchoredText, blockId, status, author), tracked changes (entityId, type, excerpt, author, date), and revision.",
120768
+ requiresDocumentContext: true,
120769
+ metadata: readOperation2(),
120770
+ referenceDocPath: "extract.mdx",
120771
+ referenceGroup: "core",
120772
+ intentGroup: "get_content",
120773
+ intentAction: "extract"
120774
+ },
120691
120775
  clearContent: {
120692
120776
  memberPath: "clearContent",
120693
120777
  description: "Clear all document body content, leaving a single empty paragraph.",
@@ -128576,6 +128660,99 @@ var init_SuperConverter_C87tnocN_es = __esm(() => {
128576
128660
  "fragment",
128577
128661
  "lossy",
128578
128662
  "diagnostics"
128663
+ ]), objectSchema2({
128664
+ blocks: {
128665
+ type: "array",
128666
+ items: objectSchema2({
128667
+ nodeId: {
128668
+ type: "string",
128669
+ description: "Stable block ID — pass to scrollToElement() for navigation."
128670
+ },
128671
+ type: {
128672
+ type: "string",
128673
+ description: "Block type: paragraph, heading, listItem, table, image, etc."
128674
+ },
128675
+ text: {
128676
+ type: "string",
128677
+ description: "Full plain text content of the block."
128678
+ },
128679
+ headingLevel: {
128680
+ type: "integer",
128681
+ description: "Heading level (1–6). Only present for headings."
128682
+ }
128683
+ }, [
128684
+ "nodeId",
128685
+ "type",
128686
+ "text"
128687
+ ])
128688
+ },
128689
+ comments: {
128690
+ type: "array",
128691
+ items: objectSchema2({
128692
+ entityId: {
128693
+ type: "string",
128694
+ description: "Comment entity ID — pass to scrollToElement() for navigation."
128695
+ },
128696
+ text: {
128697
+ type: "string",
128698
+ description: "Comment body text."
128699
+ },
128700
+ anchoredText: {
128701
+ type: "string",
128702
+ description: "The document text the comment is anchored to."
128703
+ },
128704
+ blockId: {
128705
+ type: "string",
128706
+ description: "Block ID the comment is anchored to."
128707
+ },
128708
+ status: {
128709
+ type: "string",
128710
+ enum: ["open", "resolved"]
128711
+ },
128712
+ author: {
128713
+ type: "string",
128714
+ description: "Comment author name."
128715
+ }
128716
+ }, ["entityId", "status"])
128717
+ },
128718
+ trackedChanges: {
128719
+ type: "array",
128720
+ items: objectSchema2({
128721
+ entityId: {
128722
+ type: "string",
128723
+ description: "Tracked change entity ID — pass to scrollToElement() for navigation."
128724
+ },
128725
+ type: {
128726
+ type: "string",
128727
+ enum: [
128728
+ "insert",
128729
+ "delete",
128730
+ "format"
128731
+ ]
128732
+ },
128733
+ excerpt: {
128734
+ type: "string",
128735
+ description: "Short text excerpt of the changed content."
128736
+ },
128737
+ author: {
128738
+ type: "string",
128739
+ description: "Change author name."
128740
+ },
128741
+ date: {
128742
+ type: "string",
128743
+ description: "Change date (ISO string)."
128744
+ }
128745
+ }, ["entityId", "type"])
128746
+ },
128747
+ revision: {
128748
+ type: "string",
128749
+ description: "Document revision at the time of extraction."
128750
+ }
128751
+ }, [
128752
+ "blocks",
128753
+ "comments",
128754
+ "trackedChanges",
128755
+ "revision"
128579
128756
  ]), receiptResultSchemaFor2("clearContent"), receiptFailureResultSchemaFor2("clearContent"), sdMutationResultSchemaFor2("insert"), sdMutationFailureSchemaFor2("insert"), { ...targetLocatorWithPayload2({
128580
128757
  in: storyLocatorSchema2,
128581
128758
  text: {
@@ -154638,7 +154815,7 @@ var init_SuperConverter_C87tnocN_es = __esm(() => {
154638
154815
  };
154639
154816
  });
154640
154817
 
154641
- // ../../packages/superdoc/dist/chunks/create-headless-toolbar-sUHsO53v.es.js
154818
+ // ../../packages/superdoc/dist/chunks/create-headless-toolbar-B7Y50cRk.es.js
154642
154819
  function parseSizeUnit(val = "0") {
154643
154820
  const length3 = val.toString() || "0";
154644
154821
  const value = Number.parseFloat(length3);
@@ -156249,8 +156426,8 @@ var CSS_DIMENSION_REGEX, DOM_SIZE_UNITS, Extension = class Extension2 {
156249
156426
  return false;
156250
156427
  return Boolean(checker(attrs));
156251
156428
  };
156252
- var init_create_headless_toolbar_sUHsO53v_es = __esm(() => {
156253
- init_SuperConverter_C87tnocN_es();
156429
+ var init_create_headless_toolbar_B7Y50cRk_es = __esm(() => {
156430
+ init_SuperConverter_CorFllow_es();
156254
156431
  init_constants_CGhJRd87_es();
156255
156432
  init_dist_B8HfvhaK_es();
156256
156433
  CSS_DIMENSION_REGEX = /[\d-.]+(\w+)$/;
@@ -204688,7 +204865,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
204688
204865
  init_remark_gfm_BhnWr3yf_es();
204689
204866
  });
204690
204867
 
204691
- // ../../packages/superdoc/dist/chunks/src-D3Yvsm9K.es.js
204868
+ // ../../packages/superdoc/dist/chunks/src-DwJWNVLl.es.js
204692
204869
  function deleteProps(obj, propOrProps) {
204693
204870
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
204694
204871
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -220982,228 +221159,6 @@ function infoAdapter(editor, _input) {
220982
221159
  defaults: defaults2
220983
221160
  };
220984
221161
  }
220985
- function hasCommand(editor, command$1) {
220986
- return typeof editor.commands?.[command$1] === "function";
220987
- }
220988
- function hasAllCommands(editor, operationId) {
220989
- const required = REQUIRED_COMMANDS[operationId];
220990
- if (!required || required.length === 0)
220991
- return true;
220992
- return required.every((command$1) => hasCommand(editor, command$1));
220993
- }
220994
- function hasSchemaNode(editor, ...names) {
220995
- const nodes = editor.schema?.nodes;
220996
- if (!nodes)
220997
- return false;
220998
- return names.some((n) => Boolean(nodes[n]));
220999
- }
221000
- function hasRequiredHelpers(editor, operationId) {
221001
- const check = REQUIRED_HELPERS[operationId];
221002
- if (!check)
221003
- return true;
221004
- return check(editor);
221005
- }
221006
- function hasMarkCapability(editor, markName) {
221007
- return Boolean(editor.schema?.marks?.[markName]);
221008
- }
221009
- function isMarkBackedOperation(operationId) {
221010
- return operationId === "format.apply" || getInlineAliasKey(operationId) !== undefined;
221011
- }
221012
- function getInlineAliasKey(operationId) {
221013
- if (!operationId.startsWith("format."))
221014
- return;
221015
- const key2 = operationId.slice(7);
221016
- if (INLINE_PROPERTY_KEY_SET2.has(key2))
221017
- return key2;
221018
- }
221019
- function isInlinePropertyAvailable(editor, property) {
221020
- if (property.storage === "mark") {
221021
- if (property.carrier.storage !== "mark")
221022
- return false;
221023
- const markName = property.carrier.markName;
221024
- if (!hasMarkCapability(editor, markName))
221025
- return false;
221026
- if (markName === "textStyle" && property.carrier.textStyleAttr) {
221027
- const textStyleMark = editor.schema.marks.textStyle;
221028
- const markAttrs = textStyleMark?.spec?.attrs ?? textStyleMark?.attrs;
221029
- if (!markAttrs || !Object.prototype.hasOwnProperty.call(markAttrs, property.carrier.textStyleAttr))
221030
- return false;
221031
- }
221032
- return true;
221033
- }
221034
- return Boolean(editor.schema?.nodes?.run);
221035
- }
221036
- function hasTrackedModeCapability(editor, operationId) {
221037
- if (!hasCommand(editor, "insertTrackedChange"))
221038
- return false;
221039
- if (!editor.options?.user)
221040
- return false;
221041
- const inlineKey2 = getInlineAliasKey(operationId);
221042
- if (inlineKey2 !== undefined) {
221043
- if (!INLINE_PROPERTY_BY_KEY2[inlineKey2].tracked)
221044
- return false;
221045
- return Boolean(editor.schema?.marks?.[TrackFormatMarkName]);
221046
- }
221047
- if (operationId === "format.apply") {
221048
- if (!editor.schema?.marks?.["trackFormat"])
221049
- return false;
221050
- return INLINE_PROPERTY_REGISTRY2.some((property) => property.tracked && isInlinePropertyAvailable(editor, property));
221051
- }
221052
- if (isMarkBackedOperation(operationId))
221053
- return Boolean(editor.schema?.marks?.[TrackFormatMarkName]);
221054
- return true;
221055
- }
221056
- function getNamespaceOperationIds(prefix2) {
221057
- return Object.keys(REQUIRED_COMMANDS).filter((id2) => id2.startsWith(`${prefix2}.`));
221058
- }
221059
- function isCommentsNamespaceEnabled(editor) {
221060
- return getNamespaceOperationIds("comments").every((id2) => hasAllCommands(editor, id2));
221061
- }
221062
- function isListsNamespaceEnabled(editor) {
221063
- return getNamespaceOperationIds("lists").every((id2) => hasAllCommands(editor, id2));
221064
- }
221065
- function isHistoryNamespaceEnabled(editor) {
221066
- return hasCommand(editor, "undo") && hasCommand(editor, "redo");
221067
- }
221068
- function isTrackChangesEnabled(editor) {
221069
- return hasCommand(editor, "insertTrackedChange") && hasCommand(editor, "acceptTrackedChangeById") && hasCommand(editor, "rejectTrackedChangeById") && hasCommand(editor, "acceptAllTrackedChanges") && hasCommand(editor, "rejectAllTrackedChanges");
221070
- }
221071
- function getNamespaceReason(enabled) {
221072
- return enabled ? undefined : ["NAMESPACE_UNAVAILABLE"];
221073
- }
221074
- function pushReason(reasons, reason) {
221075
- if (!VALID_CAPABILITY_REASON_CODES.has(reason))
221076
- return;
221077
- if (!reasons.includes(reason))
221078
- reasons.push(reason);
221079
- }
221080
- function isNonCommandBackedOperation(operationId) {
221081
- return operationId === "format.apply" || operationId === "styles.apply" || getInlineAliasKey(operationId) !== undefined;
221082
- }
221083
- function hasStylesRoot(stylesPart) {
221084
- return stylesPart?.elements?.some((el) => el.name === "w:styles") === true;
221085
- }
221086
- function isStylesApplyAvailable(editor) {
221087
- const converter = editor.converter;
221088
- if (!converter?.convertedXml?.["word/styles.xml"])
221089
- return false;
221090
- if (!hasStylesRoot(converter.convertedXml["word/styles.xml"]))
221091
- return false;
221092
- return true;
221093
- }
221094
- function getStylesApplyUnavailableReason(editor) {
221095
- const converter = editor.converter;
221096
- if (!converter)
221097
- return "OPERATION_UNAVAILABLE";
221098
- if (!converter.convertedXml?.["word/styles.xml"])
221099
- return "STYLES_PART_MISSING";
221100
- if (!hasStylesRoot(converter.convertedXml["word/styles.xml"]))
221101
- return "STYLES_PART_MISSING";
221102
- }
221103
- function isOperationAvailable(editor, operationId) {
221104
- if (operationId === "format.apply")
221105
- return INLINE_PROPERTY_REGISTRY2.some((property) => isInlinePropertyAvailable(editor, property));
221106
- const inlineKey2 = getInlineAliasKey(operationId);
221107
- if (inlineKey2 !== undefined)
221108
- return isInlinePropertyAvailable(editor, INLINE_PROPERTY_BY_KEY2[inlineKey2]);
221109
- if (operationId === "styles.apply")
221110
- return isStylesApplyAvailable(editor);
221111
- return hasAllCommands(editor, operationId) && hasRequiredHelpers(editor, operationId);
221112
- }
221113
- function isCommandBackedAvailability(operationId) {
221114
- return !isNonCommandBackedOperation(operationId);
221115
- }
221116
- function buildOperationCapabilities(editor) {
221117
- const operations = {};
221118
- for (const operationId of OPERATION_IDS2) {
221119
- const metadata = COMMAND_CATALOG3[operationId];
221120
- const available = isOperationAvailable(editor, operationId);
221121
- const tracked = available && metadata.supportsTrackedMode && hasTrackedModeCapability(editor, operationId);
221122
- const dryRun = metadata.supportsDryRun && available;
221123
- const reasons = [];
221124
- if (!available) {
221125
- if (operationId === "styles.apply") {
221126
- const stylesReason = getStylesApplyUnavailableReason(editor);
221127
- if (stylesReason)
221128
- pushReason(reasons, stylesReason);
221129
- } else if (isCommandBackedAvailability(operationId)) {
221130
- if (!hasAllCommands(editor, operationId))
221131
- pushReason(reasons, "COMMAND_UNAVAILABLE");
221132
- if (!hasRequiredHelpers(editor, operationId))
221133
- pushReason(reasons, "HELPER_UNAVAILABLE");
221134
- }
221135
- pushReason(reasons, "OPERATION_UNAVAILABLE");
221136
- }
221137
- if (metadata.supportsTrackedMode && !tracked)
221138
- pushReason(reasons, "TRACKED_MODE_UNAVAILABLE");
221139
- if (metadata.supportsDryRun && !dryRun)
221140
- pushReason(reasons, "DRY_RUN_UNAVAILABLE");
221141
- operations[operationId] = {
221142
- available,
221143
- tracked,
221144
- dryRun,
221145
- reasons: reasons.length > 0 ? reasons : undefined
221146
- };
221147
- }
221148
- return operations;
221149
- }
221150
- function buildFormatCapabilities(editor) {
221151
- const trackedInlinePropertiesSupported = hasTrackedModeCapability(editor, "format.apply");
221152
- const supportedInlineProperties = {};
221153
- for (const property of INLINE_PROPERTY_REGISTRY2) {
221154
- const available = isInlinePropertyAvailable(editor, property);
221155
- supportedInlineProperties[property.key] = {
221156
- available,
221157
- tracked: available && property.tracked && trackedInlinePropertiesSupported,
221158
- type: property.type,
221159
- storage: property.storage
221160
- };
221161
- }
221162
- return { supportedInlineProperties };
221163
- }
221164
- function buildPlanEngineCapabilities() {
221165
- return {
221166
- supportedStepOps: PUBLIC_MUTATION_STEP_OP_IDS2,
221167
- supportedNonUniformStrategies: SUPPORTED_NON_UNIFORM_STRATEGIES,
221168
- supportedSetMarks: SUPPORTED_SET_MARKS,
221169
- regex: { maxPatternLength: REGEX_MAX_PATTERN_LENGTH }
221170
- };
221171
- }
221172
- function getDocumentApiCapabilities(editor) {
221173
- const operations = buildOperationCapabilities(editor);
221174
- const commentsEnabled = isCommentsNamespaceEnabled(editor);
221175
- const listsEnabled = isListsNamespaceEnabled(editor);
221176
- const trackChangesEnabled = isTrackChangesEnabled(editor);
221177
- const historyEnabled = isHistoryNamespaceEnabled(editor);
221178
- const dryRunEnabled = OPERATION_IDS2.some((operationId) => operations[operationId].dryRun);
221179
- return {
221180
- global: {
221181
- trackChanges: {
221182
- enabled: trackChangesEnabled,
221183
- reasons: getNamespaceReason(trackChangesEnabled)
221184
- },
221185
- comments: {
221186
- enabled: commentsEnabled,
221187
- reasons: getNamespaceReason(commentsEnabled)
221188
- },
221189
- lists: {
221190
- enabled: listsEnabled,
221191
- reasons: getNamespaceReason(listsEnabled)
221192
- },
221193
- dryRun: {
221194
- enabled: dryRunEnabled,
221195
- reasons: dryRunEnabled ? undefined : ["DRY_RUN_UNAVAILABLE"]
221196
- },
221197
- history: {
221198
- enabled: historyEnabled,
221199
- reasons: getNamespaceReason(historyEnabled)
221200
- }
221201
- },
221202
- format: buildFormatCapabilities(editor),
221203
- operations,
221204
- planEngine: buildPlanEngineCapabilities()
221205
- };
221206
- }
221207
221162
  function registerStepExecutor(opPrefix, executor) {
221208
221163
  if (registry.has(opPrefix))
221209
221164
  throw new Error(`Step executor already registered for op prefix "${opPrefix}"`);
@@ -225637,6 +225592,300 @@ function executeStructuralReplaceWrapper(editor, input2, options) {
225637
225592
  };
225638
225593
  }
225639
225594
  }
225595
+ function extractTextPreview(node3) {
225596
+ if (!node3.isTextblock)
225597
+ return null;
225598
+ const text5 = node3.textContent;
225599
+ if (text5.length <= TEXT_PREVIEW_MAX_LENGTH)
225600
+ return text5;
225601
+ return text5.slice(0, TEXT_PREVIEW_MAX_LENGTH);
225602
+ }
225603
+ function extractBlockFormatting(node3) {
225604
+ const pProps = node3.attrs.paragraphProperties;
225605
+ const styleId = pProps?.styleId ?? null;
225606
+ let fontFamily;
225607
+ let fontSize;
225608
+ let bold2;
225609
+ let underline;
225610
+ let color2;
225611
+ node3.descendants((child) => {
225612
+ if (fontFamily !== undefined)
225613
+ return false;
225614
+ const marks = child.marks ?? [];
225615
+ if (!child.isText || marks.length === 0)
225616
+ return;
225617
+ for (const mark2 of marks) {
225618
+ const markName = mark2.type.name;
225619
+ const attrs = mark2.attrs;
225620
+ if (markName === "textStyle") {
225621
+ if (typeof attrs.fontFamily === "string" && attrs.fontFamily)
225622
+ fontFamily = attrs.fontFamily;
225623
+ if (attrs.fontSize != null) {
225624
+ const raw = typeof attrs.fontSize === "string" ? parseFloat(attrs.fontSize) : attrs.fontSize;
225625
+ if (typeof raw === "number" && Number.isFinite(raw))
225626
+ fontSize = raw;
225627
+ }
225628
+ if (typeof attrs.color === "string" && attrs.color)
225629
+ color2 = attrs.color;
225630
+ }
225631
+ if (markName === "bold" && attrs.value === true)
225632
+ bold2 = true;
225633
+ if (markName === "underline")
225634
+ underline = true;
225635
+ }
225636
+ return false;
225637
+ });
225638
+ if (color2 === "auto")
225639
+ color2 = undefined;
225640
+ let headingLevel;
225641
+ if (typeof styleId === "string") {
225642
+ const m$1 = HEADING_PATTERN.exec(styleId);
225643
+ if (m$1)
225644
+ headingLevel = parseInt(m$1[1], 10);
225645
+ }
225646
+ return {
225647
+ ...styleId ? { styleId } : {},
225648
+ ...fontFamily ? { fontFamily } : {},
225649
+ ...fontSize !== undefined ? { fontSize } : {},
225650
+ ...bold2 ? { bold: bold2 } : {},
225651
+ ...underline ? { underline } : {},
225652
+ ...color2 ? { color: color2 } : {},
225653
+ ...pProps?.justification ? { alignment: pProps.justification } : {},
225654
+ ...headingLevel ? { headingLevel } : {}
225655
+ };
225656
+ }
225657
+ function toBlockSummary(candidate, ordinal) {
225658
+ return {
225659
+ ordinal,
225660
+ nodeId: candidate.nodeId,
225661
+ nodeType: candidate.nodeType,
225662
+ textPreview: extractTextPreview(candidate.node)
225663
+ };
225664
+ }
225665
+ function resolveSdBlockId(candidate) {
225666
+ const sdBlockId = candidate.node.attrs?.sdBlockId;
225667
+ if (typeof sdBlockId === "string" && sdBlockId.length > 0)
225668
+ return sdBlockId;
225669
+ throw new DocumentApiAdapterError("INTERNAL_ERROR", "Resolved block candidate is missing sdBlockId attribute. This indicates a schema/extension invariant violation.", { attrs: candidate.node.attrs });
225670
+ }
225671
+ function validateDeleteTargetNodeType(nodeType) {
225672
+ if (REJECTED_DELETE_NODE_TYPES3.has(nodeType))
225673
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
225674
+ if (!SUPPORTED_DELETE_NODE_TYPES3.has(nodeType))
225675
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, { nodeType });
225676
+ }
225677
+ function validateCommandLayerUniqueness(editor, sdBlockId) {
225678
+ const getBlockNodeById = editor.helpers?.blockNode?.getBlockNodeById;
225679
+ if (typeof getBlockNodeById !== "function")
225680
+ throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "blocks.delete requires the blockNode helper to be registered.", { reason: "missing_helper" });
225681
+ const matches2 = getBlockNodeById(sdBlockId);
225682
+ if (!matches2 || Array.isArray(matches2) && matches2.length === 0)
225683
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Block with sdBlockId "${sdBlockId}" was not found at the command layer.`, { sdBlockId });
225684
+ if (Array.isArray(matches2) && matches2.length > 1)
225685
+ throw new DocumentApiAdapterError("AMBIGUOUS_TARGET", `Multiple blocks share sdBlockId "${sdBlockId}" at the command layer.`, {
225686
+ sdBlockId,
225687
+ count: matches2.length
225688
+ });
225689
+ }
225690
+ function collectTopLevelBlocks(editor) {
225691
+ const doc$12 = editor.state.doc;
225692
+ const results = [];
225693
+ let offset$1 = 0;
225694
+ for (let i4 = 0;i4 < doc$12.childCount; i4++) {
225695
+ const child = doc$12.child(i4);
225696
+ const nodeType = mapBlockNodeType(child);
225697
+ const pos = offset$1;
225698
+ if (nodeType) {
225699
+ const nodeId = resolveBlockNodeId(child, pos, nodeType, [i4]);
225700
+ if (nodeId)
225701
+ results.push({
225702
+ node: child,
225703
+ pos,
225704
+ end: pos + child.nodeSize,
225705
+ nodeType,
225706
+ nodeId
225707
+ });
225708
+ }
225709
+ offset$1 += child.nodeSize;
225710
+ }
225711
+ return results;
225712
+ }
225713
+ function blocksListWrapper(editor, input2) {
225714
+ const topLevel = collectTopLevelBlocks(editor);
225715
+ const filtered = input2?.nodeTypes ? topLevel.filter((b$1) => input2.nodeTypes.includes(b$1.nodeType)) : topLevel;
225716
+ const total = filtered.length;
225717
+ const offset$1 = input2?.offset ?? 0;
225718
+ const limit = input2?.limit ?? total;
225719
+ const paged = filtered.slice(offset$1, offset$1 + limit);
225720
+ const rev = getRevision(editor);
225721
+ return {
225722
+ total,
225723
+ blocks: paged.map((candidate, i4) => {
225724
+ const textLength = computeTextContentLength(candidate.node);
225725
+ const ref$1 = textLength > 0 ? encodeV4Ref({
225726
+ v: 4,
225727
+ rev,
225728
+ storyKey: "body",
225729
+ scope: "block",
225730
+ matchId: candidate.nodeId,
225731
+ segments: [{
225732
+ blockId: candidate.nodeId,
225733
+ start: 0,
225734
+ end: textLength
225735
+ }],
225736
+ blockIndex: offset$1 + i4
225737
+ }) : undefined;
225738
+ return {
225739
+ ordinal: offset$1 + i4,
225740
+ nodeId: candidate.nodeId,
225741
+ nodeType: candidate.nodeType,
225742
+ textPreview: extractTextPreview(candidate.node),
225743
+ isEmpty: textLength === 0,
225744
+ ...extractBlockFormatting(candidate.node),
225745
+ ...ref$1 ? { ref: ref$1 } : {}
225746
+ };
225747
+ }),
225748
+ revision: rev
225749
+ };
225750
+ }
225751
+ function blocksDeleteWrapper(editor, input2, options) {
225752
+ rejectTrackedMode("blocks.delete", options);
225753
+ const candidate = findBlockByIdStrict(getBlockIndex(editor), input2.target);
225754
+ validateDeleteTargetNodeType(candidate.nodeType);
225755
+ const deletedBlock = toBlockSummary(candidate, collectTopLevelBlocks(editor).findIndex((b$1) => b$1.nodeId === candidate.nodeId && b$1.nodeType === candidate.nodeType));
225756
+ const sdBlockId = resolveSdBlockId(candidate);
225757
+ const deleteBlockNodeById = requireEditorCommand(editor.commands?.deleteBlockNodeById, "blocks.delete");
225758
+ validateCommandLayerUniqueness(editor, sdBlockId);
225759
+ if (options?.dryRun)
225760
+ return {
225761
+ success: true,
225762
+ deleted: input2.target,
225763
+ deletedBlock
225764
+ };
225765
+ if (executeDomainCommand(editor, () => {
225766
+ const didApply = deleteBlockNodeById(sdBlockId);
225767
+ if (didApply)
225768
+ clearIndexCache(editor);
225769
+ return didApply;
225770
+ }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
225771
+ throw new DocumentApiAdapterError("INTERNAL_ERROR", "blocks.delete command returned false despite passing all pre-apply checks. This is an internal invariant violation.", {
225772
+ sdBlockId,
225773
+ target: input2.target
225774
+ });
225775
+ return {
225776
+ success: true,
225777
+ deleted: input2.target,
225778
+ deletedBlock
225779
+ };
225780
+ }
225781
+ function hasSectionBreak(candidate) {
225782
+ const pPr = candidate.node.attrs?.paragraphProperties;
225783
+ return pPr?.sectPr != null && typeof pPr.sectPr === "object";
225784
+ }
225785
+ function resolveTopLevelOrdinal(topLevel, candidate, label) {
225786
+ const idx = topLevel.findIndex((b$1) => b$1.nodeId === candidate.nodeId && b$1.nodeType === candidate.nodeType);
225787
+ if (idx !== -1)
225788
+ return idx;
225789
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange ${label} resolved to a nested block (not a direct document child). Only top-level blocks are supported.`, {
225790
+ nodeId: candidate.nodeId,
225791
+ nodeType: candidate.nodeType
225792
+ });
225793
+ }
225794
+ function resolveRangeEndpoint(index2, address2, label) {
225795
+ const key2 = `${address2.nodeType}:${address2.nodeId}`;
225796
+ if (index2.ambiguous.has(key2))
225797
+ throw new DocumentApiAdapterError("AMBIGUOUS_TARGET", `Multiple blocks share key "${key2}".`, { target: address2 });
225798
+ const candidate = index2.byId.get(key2);
225799
+ if (candidate)
225800
+ return candidate;
225801
+ const mismatch = index2.candidates.find((c) => c.nodeId === address2.nodeId);
225802
+ if (mismatch)
225803
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange ${label} expected ${address2.nodeType}:${address2.nodeId} but resolved to ${mismatch.nodeType}.`, {
225804
+ expected: address2.nodeType,
225805
+ actual: mismatch.nodeType,
225806
+ nodeId: address2.nodeId
225807
+ });
225808
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Block "${key2}" was not found.`, { target: address2 });
225809
+ }
225810
+ function rejectUnmappedNodesInRange(doc$12, rangeBlocks) {
225811
+ if (rangeBlocks.length === 0)
225812
+ return;
225813
+ const rangeFrom = rangeBlocks[0].pos;
225814
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
225815
+ const recognizedPositions = new Set(rangeBlocks.map((b$1) => b$1.pos));
225816
+ let offset$1 = 0;
225817
+ for (let i4 = 0;i4 < doc$12.childCount; i4++) {
225818
+ const child = doc$12.child(i4);
225819
+ const childEnd = offset$1 + child.nodeSize;
225820
+ if (childEnd > rangeFrom && offset$1 < rangeTo && !recognizedPositions.has(offset$1)) {
225821
+ if (!RANGE_DELETE_SAFE_NODE_TYPES.has(child.type.name))
225822
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange cannot delete range: unrecognized node "${child.type.name}" at position ${offset$1} would be silently removed.`, {
225823
+ pmNodeType: child.type.name,
225824
+ pos: offset$1
225825
+ });
225826
+ }
225827
+ offset$1 = childEnd;
225828
+ }
225829
+ }
225830
+ function blocksDeleteRangeWrapper(editor, input2, options) {
225831
+ rejectTrackedMode("blocks.deleteRange", options);
225832
+ const topLevel = collectTopLevelBlocks(editor);
225833
+ const index2 = getBlockIndex(editor);
225834
+ const startCandidate = resolveRangeEndpoint(index2, input2.start, "start");
225835
+ const endCandidate = resolveRangeEndpoint(index2, input2.end, "end");
225836
+ const startOrdinal = resolveTopLevelOrdinal(topLevel, startCandidate, "start");
225837
+ const endOrdinal = resolveTopLevelOrdinal(topLevel, endCandidate, "end");
225838
+ if (startOrdinal > endOrdinal)
225839
+ throw new DocumentApiAdapterError("INVALID_INPUT", `blocks.deleteRange start ordinal (${startOrdinal}) is after end ordinal (${endOrdinal}). The start must precede or equal the end.`, {
225840
+ startOrdinal,
225841
+ endOrdinal
225842
+ });
225843
+ const rangeBlocks = topLevel.slice(startOrdinal, endOrdinal + 1);
225844
+ rejectUnmappedNodesInRange(editor.state.doc, rangeBlocks);
225845
+ for (const block of rangeBlocks)
225846
+ if (hasSectionBreak(block))
225847
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange cannot delete a range that includes a section break (block "${block.nodeId}" at ordinal ${topLevel.indexOf(block)}).`, {
225848
+ nodeId: block.nodeId,
225849
+ nodeType: block.nodeType
225850
+ });
225851
+ const deletedBlocks = rangeBlocks.map((c, i4) => toBlockSummary(c, startOrdinal + i4));
225852
+ const revisionBefore = getRevision(editor);
225853
+ if (options?.dryRun)
225854
+ return {
225855
+ success: true,
225856
+ deletedCount: rangeBlocks.length,
225857
+ deletedBlocks,
225858
+ revision: {
225859
+ before: revisionBefore,
225860
+ after: revisionBefore
225861
+ },
225862
+ dryRun: true
225863
+ };
225864
+ const rangeFrom = rangeBlocks[0].pos;
225865
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
225866
+ if (executeDomainCommand(editor, () => {
225867
+ const tr = editor.state.tr;
225868
+ tr.delete(rangeFrom, rangeTo);
225869
+ editor.dispatch(tr);
225870
+ clearIndexCache(editor);
225871
+ return true;
225872
+ }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
225873
+ throw new DocumentApiAdapterError("INTERNAL_ERROR", "blocks.deleteRange command returned false despite passing all pre-apply checks.", {
225874
+ start: input2.start,
225875
+ end: input2.end
225876
+ });
225877
+ const revisionAfter = getRevision(editor);
225878
+ return {
225879
+ success: true,
225880
+ deletedCount: rangeBlocks.length,
225881
+ deletedBlocks,
225882
+ revision: {
225883
+ before: revisionBefore,
225884
+ after: revisionAfter
225885
+ },
225886
+ dryRun: false
225887
+ };
225888
+ }
225640
225889
  function ensureFallbackStore(editor) {
225641
225890
  if (!editor.storage)
225642
225891
  editor.storage = {};
@@ -226467,6 +226716,401 @@ function createCommentsWrapper(editor) {
226467
226716
  list: (query2) => listCommentsHandler(editor, query2)
226468
226717
  };
226469
226718
  }
226719
+ function normalizeWordRevisionIds(wordRevisionIds) {
226720
+ if (!wordRevisionIds)
226721
+ return;
226722
+ const normalized = {};
226723
+ if (wordRevisionIds.insert)
226724
+ normalized.insert = wordRevisionIds.insert;
226725
+ if (wordRevisionIds.delete)
226726
+ normalized.delete = wordRevisionIds.delete;
226727
+ if (wordRevisionIds.format)
226728
+ normalized.format = wordRevisionIds.format;
226729
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
226730
+ }
226731
+ function buildTrackChangeInfo(editor, change) {
226732
+ const excerpt = normalizeExcerpt(editor.state.doc.textBetween(change.from, change.to, " ", ""));
226733
+ const type = resolveTrackedChangeType(change);
226734
+ return {
226735
+ address: {
226736
+ kind: "entity",
226737
+ entityType: "trackedChange",
226738
+ entityId: change.id
226739
+ },
226740
+ id: change.id,
226741
+ type,
226742
+ wordRevisionIds: normalizeWordRevisionIds(change.wordRevisionIds),
226743
+ author: toNonEmptyString(change.attrs.author),
226744
+ authorEmail: toNonEmptyString(change.attrs.authorEmail),
226745
+ authorImage: toNonEmptyString(change.attrs.authorImage),
226746
+ date: toNonEmptyString(change.attrs.date),
226747
+ excerpt
226748
+ };
226749
+ }
226750
+ function filterByType(changes, requestedType) {
226751
+ if (!requestedType)
226752
+ return changes;
226753
+ return changes.filter((change) => resolveTrackedChangeType(change) === requestedType);
226754
+ }
226755
+ function requireTrackChangeById(editor, id2) {
226756
+ const change = resolveTrackedChange(editor, id2);
226757
+ if (change)
226758
+ return change;
226759
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Tracked change "${id2}" was not found.`, { id: id2 });
226760
+ }
226761
+ function toNoOpReceipt(message, details) {
226762
+ return {
226763
+ success: false,
226764
+ failure: {
226765
+ code: "NO_OP",
226766
+ message,
226767
+ details
226768
+ }
226769
+ };
226770
+ }
226771
+ function trackChangesListWrapper(editor, input2) {
226772
+ const query2 = input2;
226773
+ validatePaginationInput(query2?.offset, query2?.limit);
226774
+ const paged = paginate(filterByType(groupTrackedChanges(editor), query2?.type), query2?.offset, query2?.limit);
226775
+ const evaluatedRevision = getRevision(editor);
226776
+ const items = paged.items.map((change) => {
226777
+ const info = buildTrackChangeInfo(editor, change);
226778
+ const handle3 = buildResolvedHandle(`tc:${info.id}`, "stable", "trackedChange");
226779
+ const { address: address2, type, wordRevisionIds, author, authorEmail, authorImage, date, excerpt } = info;
226780
+ return buildDiscoveryItem(info.id, handle3, {
226781
+ address: address2,
226782
+ type,
226783
+ wordRevisionIds,
226784
+ author,
226785
+ authorEmail,
226786
+ authorImage,
226787
+ date,
226788
+ excerpt
226789
+ });
226790
+ });
226791
+ return buildDiscoveryResult({
226792
+ evaluatedRevision,
226793
+ total: paged.total,
226794
+ items,
226795
+ page: {
226796
+ limit: query2?.limit ?? paged.total,
226797
+ offset: query2?.offset ?? 0,
226798
+ returned: items.length
226799
+ }
226800
+ });
226801
+ }
226802
+ function trackChangesGetWrapper(editor, input2) {
226803
+ const { id: id2 } = input2;
226804
+ return buildTrackChangeInfo(editor, requireTrackChangeById(editor, id2));
226805
+ }
226806
+ function trackChangesAcceptWrapper(editor, input2, options) {
226807
+ const { id: id2 } = input2;
226808
+ const change = requireTrackChangeById(editor, id2);
226809
+ const acceptById = requireEditorCommand(editor.commands?.acceptTrackedChangeById, "Accept tracked change");
226810
+ if (executeDomainCommand(editor, () => Boolean(acceptById(change.rawId)), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
226811
+ return toNoOpReceipt(`Accept tracked change "${id2}" produced no change.`, { id: id2 });
226812
+ return { success: true };
226813
+ }
226814
+ function trackChangesRejectWrapper(editor, input2, options) {
226815
+ const { id: id2 } = input2;
226816
+ const change = requireTrackChangeById(editor, id2);
226817
+ const rejectById = requireEditorCommand(editor.commands?.rejectTrackedChangeById, "Reject tracked change");
226818
+ if (executeDomainCommand(editor, () => Boolean(rejectById(change.rawId)), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
226819
+ return toNoOpReceipt(`Reject tracked change "${id2}" produced no change.`, { id: id2 });
226820
+ return { success: true };
226821
+ }
226822
+ function trackChangesAcceptAllWrapper(editor, _input, options) {
226823
+ const acceptAll = requireEditorCommand(editor.commands?.acceptAllTrackedChanges, "Accept all tracked changes");
226824
+ if (groupTrackedChanges(editor).length === 0)
226825
+ return toNoOpReceipt("Accept all tracked changes produced no change.");
226826
+ if (executeDomainCommand(editor, () => Boolean(acceptAll()), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
226827
+ return toNoOpReceipt("Accept all tracked changes produced no change.");
226828
+ return { success: true };
226829
+ }
226830
+ function trackChangesRejectAllWrapper(editor, _input, options) {
226831
+ const rejectAll = requireEditorCommand(editor.commands?.rejectAllTrackedChanges, "Reject all tracked changes");
226832
+ if (groupTrackedChanges(editor).length === 0)
226833
+ return toNoOpReceipt("Reject all tracked changes produced no change.");
226834
+ if (executeDomainCommand(editor, () => Boolean(rejectAll()), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
226835
+ return toNoOpReceipt("Reject all tracked changes produced no change.");
226836
+ return { success: true };
226837
+ }
226838
+ function collectBlocks(editor) {
226839
+ return collectTopLevelBlocks(editor).map((candidate) => {
226840
+ const pProps = candidate.node.attrs.paragraphProperties;
226841
+ const headingLevel = getHeadingLevel(pProps?.styleId);
226842
+ const block = {
226843
+ nodeId: candidate.nodeId,
226844
+ type: candidate.nodeType,
226845
+ text: candidate.node.textContent
226846
+ };
226847
+ if (headingLevel !== undefined)
226848
+ block.headingLevel = headingLevel;
226849
+ return block;
226850
+ });
226851
+ }
226852
+ function collectComments(editor) {
226853
+ return createCommentsWrapper(editor).list({ includeResolved: true }).items.map((item) => {
226854
+ const comment2 = {
226855
+ entityId: item.address.entityId,
226856
+ status: item.status
226857
+ };
226858
+ if (item.text)
226859
+ comment2.text = item.text;
226860
+ if (item.anchoredText)
226861
+ comment2.anchoredText = item.anchoredText;
226862
+ if (item.target?.segments?.[0]?.blockId)
226863
+ comment2.blockId = item.target.segments[0].blockId;
226864
+ if (item.creatorName)
226865
+ comment2.author = item.creatorName;
226866
+ return comment2;
226867
+ });
226868
+ }
226869
+ function collectTrackedChanges$1(editor) {
226870
+ return trackChangesListWrapper(editor).items.map((item) => {
226871
+ const tc = {
226872
+ entityId: item.address.entityId,
226873
+ type: item.type
226874
+ };
226875
+ if (item.excerpt)
226876
+ tc.excerpt = item.excerpt;
226877
+ if (item.author)
226878
+ tc.author = item.author;
226879
+ if (item.date)
226880
+ tc.date = item.date;
226881
+ return tc;
226882
+ });
226883
+ }
226884
+ function extractAdapter(editor, _input) {
226885
+ return {
226886
+ blocks: collectBlocks(editor),
226887
+ comments: collectComments(editor),
226888
+ trackedChanges: collectTrackedChanges$1(editor),
226889
+ revision: getRevision(editor)
226890
+ };
226891
+ }
226892
+ function hasCommand(editor, command$1) {
226893
+ return typeof editor.commands?.[command$1] === "function";
226894
+ }
226895
+ function hasAllCommands(editor, operationId) {
226896
+ const required = REQUIRED_COMMANDS[operationId];
226897
+ if (!required || required.length === 0)
226898
+ return true;
226899
+ return required.every((command$1) => hasCommand(editor, command$1));
226900
+ }
226901
+ function hasSchemaNode(editor, ...names) {
226902
+ const nodes = editor.schema?.nodes;
226903
+ if (!nodes)
226904
+ return false;
226905
+ return names.some((n) => Boolean(nodes[n]));
226906
+ }
226907
+ function hasRequiredHelpers(editor, operationId) {
226908
+ const check = REQUIRED_HELPERS[operationId];
226909
+ if (!check)
226910
+ return true;
226911
+ return check(editor);
226912
+ }
226913
+ function hasMarkCapability(editor, markName) {
226914
+ return Boolean(editor.schema?.marks?.[markName]);
226915
+ }
226916
+ function isMarkBackedOperation(operationId) {
226917
+ return operationId === "format.apply" || getInlineAliasKey(operationId) !== undefined;
226918
+ }
226919
+ function getInlineAliasKey(operationId) {
226920
+ if (!operationId.startsWith("format."))
226921
+ return;
226922
+ const key2 = operationId.slice(7);
226923
+ if (INLINE_PROPERTY_KEY_SET2.has(key2))
226924
+ return key2;
226925
+ }
226926
+ function isInlinePropertyAvailable(editor, property) {
226927
+ if (property.storage === "mark") {
226928
+ if (property.carrier.storage !== "mark")
226929
+ return false;
226930
+ const markName = property.carrier.markName;
226931
+ if (!hasMarkCapability(editor, markName))
226932
+ return false;
226933
+ if (markName === "textStyle" && property.carrier.textStyleAttr) {
226934
+ const textStyleMark = editor.schema.marks.textStyle;
226935
+ const markAttrs = textStyleMark?.spec?.attrs ?? textStyleMark?.attrs;
226936
+ if (!markAttrs || !Object.prototype.hasOwnProperty.call(markAttrs, property.carrier.textStyleAttr))
226937
+ return false;
226938
+ }
226939
+ return true;
226940
+ }
226941
+ return Boolean(editor.schema?.nodes?.run);
226942
+ }
226943
+ function hasTrackedModeCapability(editor, operationId) {
226944
+ if (!hasCommand(editor, "insertTrackedChange"))
226945
+ return false;
226946
+ if (!editor.options?.user)
226947
+ return false;
226948
+ const inlineKey2 = getInlineAliasKey(operationId);
226949
+ if (inlineKey2 !== undefined) {
226950
+ if (!INLINE_PROPERTY_BY_KEY2[inlineKey2].tracked)
226951
+ return false;
226952
+ return Boolean(editor.schema?.marks?.[TrackFormatMarkName]);
226953
+ }
226954
+ if (operationId === "format.apply") {
226955
+ if (!editor.schema?.marks?.["trackFormat"])
226956
+ return false;
226957
+ return INLINE_PROPERTY_REGISTRY2.some((property) => property.tracked && isInlinePropertyAvailable(editor, property));
226958
+ }
226959
+ if (isMarkBackedOperation(operationId))
226960
+ return Boolean(editor.schema?.marks?.[TrackFormatMarkName]);
226961
+ return true;
226962
+ }
226963
+ function getNamespaceOperationIds(prefix2) {
226964
+ return Object.keys(REQUIRED_COMMANDS).filter((id2) => id2.startsWith(`${prefix2}.`));
226965
+ }
226966
+ function isCommentsNamespaceEnabled(editor) {
226967
+ return getNamespaceOperationIds("comments").every((id2) => hasAllCommands(editor, id2));
226968
+ }
226969
+ function isListsNamespaceEnabled(editor) {
226970
+ return getNamespaceOperationIds("lists").every((id2) => hasAllCommands(editor, id2));
226971
+ }
226972
+ function isHistoryNamespaceEnabled(editor) {
226973
+ return hasCommand(editor, "undo") && hasCommand(editor, "redo");
226974
+ }
226975
+ function isTrackChangesEnabled(editor) {
226976
+ return hasCommand(editor, "insertTrackedChange") && hasCommand(editor, "acceptTrackedChangeById") && hasCommand(editor, "rejectTrackedChangeById") && hasCommand(editor, "acceptAllTrackedChanges") && hasCommand(editor, "rejectAllTrackedChanges");
226977
+ }
226978
+ function getNamespaceReason(enabled) {
226979
+ return enabled ? undefined : ["NAMESPACE_UNAVAILABLE"];
226980
+ }
226981
+ function pushReason(reasons, reason) {
226982
+ if (!VALID_CAPABILITY_REASON_CODES.has(reason))
226983
+ return;
226984
+ if (!reasons.includes(reason))
226985
+ reasons.push(reason);
226986
+ }
226987
+ function isNonCommandBackedOperation(operationId) {
226988
+ return operationId === "format.apply" || operationId === "styles.apply" || getInlineAliasKey(operationId) !== undefined;
226989
+ }
226990
+ function hasStylesRoot(stylesPart) {
226991
+ return stylesPart?.elements?.some((el) => el.name === "w:styles") === true;
226992
+ }
226993
+ function isStylesApplyAvailable(editor) {
226994
+ const converter = editor.converter;
226995
+ if (!converter?.convertedXml?.["word/styles.xml"])
226996
+ return false;
226997
+ if (!hasStylesRoot(converter.convertedXml["word/styles.xml"]))
226998
+ return false;
226999
+ return true;
227000
+ }
227001
+ function getStylesApplyUnavailableReason(editor) {
227002
+ const converter = editor.converter;
227003
+ if (!converter)
227004
+ return "OPERATION_UNAVAILABLE";
227005
+ if (!converter.convertedXml?.["word/styles.xml"])
227006
+ return "STYLES_PART_MISSING";
227007
+ if (!hasStylesRoot(converter.convertedXml["word/styles.xml"]))
227008
+ return "STYLES_PART_MISSING";
227009
+ }
227010
+ function isOperationAvailable(editor, operationId) {
227011
+ if (operationId === "format.apply")
227012
+ return INLINE_PROPERTY_REGISTRY2.some((property) => isInlinePropertyAvailable(editor, property));
227013
+ const inlineKey2 = getInlineAliasKey(operationId);
227014
+ if (inlineKey2 !== undefined)
227015
+ return isInlinePropertyAvailable(editor, INLINE_PROPERTY_BY_KEY2[inlineKey2]);
227016
+ if (operationId === "styles.apply")
227017
+ return isStylesApplyAvailable(editor);
227018
+ return hasAllCommands(editor, operationId) && hasRequiredHelpers(editor, operationId);
227019
+ }
227020
+ function isCommandBackedAvailability(operationId) {
227021
+ return !isNonCommandBackedOperation(operationId);
227022
+ }
227023
+ function buildOperationCapabilities(editor) {
227024
+ const operations = {};
227025
+ for (const operationId of OPERATION_IDS2) {
227026
+ const metadata = COMMAND_CATALOG3[operationId];
227027
+ const available = isOperationAvailable(editor, operationId);
227028
+ const tracked = available && metadata.supportsTrackedMode && hasTrackedModeCapability(editor, operationId);
227029
+ const dryRun = metadata.supportsDryRun && available;
227030
+ const reasons = [];
227031
+ if (!available) {
227032
+ if (operationId === "styles.apply") {
227033
+ const stylesReason = getStylesApplyUnavailableReason(editor);
227034
+ if (stylesReason)
227035
+ pushReason(reasons, stylesReason);
227036
+ } else if (isCommandBackedAvailability(operationId)) {
227037
+ if (!hasAllCommands(editor, operationId))
227038
+ pushReason(reasons, "COMMAND_UNAVAILABLE");
227039
+ if (!hasRequiredHelpers(editor, operationId))
227040
+ pushReason(reasons, "HELPER_UNAVAILABLE");
227041
+ }
227042
+ pushReason(reasons, "OPERATION_UNAVAILABLE");
227043
+ }
227044
+ if (metadata.supportsTrackedMode && !tracked)
227045
+ pushReason(reasons, "TRACKED_MODE_UNAVAILABLE");
227046
+ if (metadata.supportsDryRun && !dryRun)
227047
+ pushReason(reasons, "DRY_RUN_UNAVAILABLE");
227048
+ operations[operationId] = {
227049
+ available,
227050
+ tracked,
227051
+ dryRun,
227052
+ reasons: reasons.length > 0 ? reasons : undefined
227053
+ };
227054
+ }
227055
+ return operations;
227056
+ }
227057
+ function buildFormatCapabilities(editor) {
227058
+ const trackedInlinePropertiesSupported = hasTrackedModeCapability(editor, "format.apply");
227059
+ const supportedInlineProperties = {};
227060
+ for (const property of INLINE_PROPERTY_REGISTRY2) {
227061
+ const available = isInlinePropertyAvailable(editor, property);
227062
+ supportedInlineProperties[property.key] = {
227063
+ available,
227064
+ tracked: available && property.tracked && trackedInlinePropertiesSupported,
227065
+ type: property.type,
227066
+ storage: property.storage
227067
+ };
227068
+ }
227069
+ return { supportedInlineProperties };
227070
+ }
227071
+ function buildPlanEngineCapabilities() {
227072
+ return {
227073
+ supportedStepOps: PUBLIC_MUTATION_STEP_OP_IDS2,
227074
+ supportedNonUniformStrategies: SUPPORTED_NON_UNIFORM_STRATEGIES,
227075
+ supportedSetMarks: SUPPORTED_SET_MARKS,
227076
+ regex: { maxPatternLength: REGEX_MAX_PATTERN_LENGTH }
227077
+ };
227078
+ }
227079
+ function getDocumentApiCapabilities(editor) {
227080
+ const operations = buildOperationCapabilities(editor);
227081
+ const commentsEnabled = isCommentsNamespaceEnabled(editor);
227082
+ const listsEnabled = isListsNamespaceEnabled(editor);
227083
+ const trackChangesEnabled = isTrackChangesEnabled(editor);
227084
+ const historyEnabled = isHistoryNamespaceEnabled(editor);
227085
+ const dryRunEnabled = OPERATION_IDS2.some((operationId) => operations[operationId].dryRun);
227086
+ return {
227087
+ global: {
227088
+ trackChanges: {
227089
+ enabled: trackChangesEnabled,
227090
+ reasons: getNamespaceReason(trackChangesEnabled)
227091
+ },
227092
+ comments: {
227093
+ enabled: commentsEnabled,
227094
+ reasons: getNamespaceReason(commentsEnabled)
227095
+ },
227096
+ lists: {
227097
+ enabled: listsEnabled,
227098
+ reasons: getNamespaceReason(listsEnabled)
227099
+ },
227100
+ dryRun: {
227101
+ enabled: dryRunEnabled,
227102
+ reasons: dryRunEnabled ? undefined : ["DRY_RUN_UNAVAILABLE"]
227103
+ },
227104
+ history: {
227105
+ enabled: historyEnabled,
227106
+ reasons: getNamespaceReason(historyEnabled)
227107
+ }
227108
+ },
227109
+ format: buildFormatCapabilities(editor),
227110
+ operations,
227111
+ planEngine: buildPlanEngineCapabilities()
227112
+ };
227113
+ }
226470
227114
  function isDocumentEmpty(editor) {
226471
227115
  const { doc: doc$12 } = editor.state;
226472
227116
  if (doc$12.childCount !== 1)
@@ -227074,125 +227718,6 @@ function paragraphsClearDirectionWrapper(editor, input2, options) {
227074
227718
  return result;
227075
227719
  }, options);
227076
227720
  }
227077
- function normalizeWordRevisionIds(wordRevisionIds) {
227078
- if (!wordRevisionIds)
227079
- return;
227080
- const normalized = {};
227081
- if (wordRevisionIds.insert)
227082
- normalized.insert = wordRevisionIds.insert;
227083
- if (wordRevisionIds.delete)
227084
- normalized.delete = wordRevisionIds.delete;
227085
- if (wordRevisionIds.format)
227086
- normalized.format = wordRevisionIds.format;
227087
- return Object.keys(normalized).length > 0 ? normalized : undefined;
227088
- }
227089
- function buildTrackChangeInfo(editor, change) {
227090
- const excerpt = normalizeExcerpt(editor.state.doc.textBetween(change.from, change.to, " ", ""));
227091
- const type = resolveTrackedChangeType(change);
227092
- return {
227093
- address: {
227094
- kind: "entity",
227095
- entityType: "trackedChange",
227096
- entityId: change.id
227097
- },
227098
- id: change.id,
227099
- type,
227100
- wordRevisionIds: normalizeWordRevisionIds(change.wordRevisionIds),
227101
- author: toNonEmptyString(change.attrs.author),
227102
- authorEmail: toNonEmptyString(change.attrs.authorEmail),
227103
- authorImage: toNonEmptyString(change.attrs.authorImage),
227104
- date: toNonEmptyString(change.attrs.date),
227105
- excerpt
227106
- };
227107
- }
227108
- function filterByType(changes, requestedType) {
227109
- if (!requestedType)
227110
- return changes;
227111
- return changes.filter((change) => resolveTrackedChangeType(change) === requestedType);
227112
- }
227113
- function requireTrackChangeById(editor, id2) {
227114
- const change = resolveTrackedChange(editor, id2);
227115
- if (change)
227116
- return change;
227117
- throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Tracked change "${id2}" was not found.`, { id: id2 });
227118
- }
227119
- function toNoOpReceipt(message, details) {
227120
- return {
227121
- success: false,
227122
- failure: {
227123
- code: "NO_OP",
227124
- message,
227125
- details
227126
- }
227127
- };
227128
- }
227129
- function trackChangesListWrapper(editor, input2) {
227130
- const query2 = input2;
227131
- validatePaginationInput(query2?.offset, query2?.limit);
227132
- const paged = paginate(filterByType(groupTrackedChanges(editor), query2?.type), query2?.offset, query2?.limit);
227133
- const evaluatedRevision = getRevision(editor);
227134
- const items = paged.items.map((change) => {
227135
- const info = buildTrackChangeInfo(editor, change);
227136
- const handle3 = buildResolvedHandle(`tc:${info.id}`, "stable", "trackedChange");
227137
- const { address: address2, type, wordRevisionIds, author, authorEmail, authorImage, date, excerpt } = info;
227138
- return buildDiscoveryItem(info.id, handle3, {
227139
- address: address2,
227140
- type,
227141
- wordRevisionIds,
227142
- author,
227143
- authorEmail,
227144
- authorImage,
227145
- date,
227146
- excerpt
227147
- });
227148
- });
227149
- return buildDiscoveryResult({
227150
- evaluatedRevision,
227151
- total: paged.total,
227152
- items,
227153
- page: {
227154
- limit: query2?.limit ?? paged.total,
227155
- offset: query2?.offset ?? 0,
227156
- returned: items.length
227157
- }
227158
- });
227159
- }
227160
- function trackChangesGetWrapper(editor, input2) {
227161
- const { id: id2 } = input2;
227162
- return buildTrackChangeInfo(editor, requireTrackChangeById(editor, id2));
227163
- }
227164
- function trackChangesAcceptWrapper(editor, input2, options) {
227165
- const { id: id2 } = input2;
227166
- const change = requireTrackChangeById(editor, id2);
227167
- const acceptById = requireEditorCommand(editor.commands?.acceptTrackedChangeById, "Accept tracked change");
227168
- if (executeDomainCommand(editor, () => Boolean(acceptById(change.rawId)), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
227169
- return toNoOpReceipt(`Accept tracked change "${id2}" produced no change.`, { id: id2 });
227170
- return { success: true };
227171
- }
227172
- function trackChangesRejectWrapper(editor, input2, options) {
227173
- const { id: id2 } = input2;
227174
- const change = requireTrackChangeById(editor, id2);
227175
- const rejectById = requireEditorCommand(editor.commands?.rejectTrackedChangeById, "Reject tracked change");
227176
- if (executeDomainCommand(editor, () => Boolean(rejectById(change.rawId)), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
227177
- return toNoOpReceipt(`Reject tracked change "${id2}" produced no change.`, { id: id2 });
227178
- return { success: true };
227179
- }
227180
- function trackChangesAcceptAllWrapper(editor, _input, options) {
227181
- const acceptAll = requireEditorCommand(editor.commands?.acceptAllTrackedChanges, "Accept all tracked changes");
227182
- if (groupTrackedChanges(editor).length === 0)
227183
- return toNoOpReceipt("Accept all tracked changes produced no change.");
227184
- if (executeDomainCommand(editor, () => Boolean(acceptAll()), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
227185
- return toNoOpReceipt("Accept all tracked changes produced no change.");
227186
- return { success: true };
227187
- }
227188
- function trackChangesRejectAllWrapper(editor, _input, options) {
227189
- const rejectAll = requireEditorCommand(editor.commands?.rejectAllTrackedChanges, "Reject all tracked changes");
227190
- if (groupTrackedChanges(editor).length === 0)
227191
- return toNoOpReceipt("Reject all tracked changes produced no change.");
227192
- if (executeDomainCommand(editor, () => Boolean(rejectAll()), { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
227193
- return toNoOpReceipt("Reject all tracked changes produced no change.");
227194
- return { success: true };
227195
- }
227196
227721
  function collectTrackInsertRefsInRange(editor, from$1, to) {
227197
227722
  if (to <= from$1)
227198
227723
  return;
@@ -227468,300 +227993,6 @@ function createHeadingWrapper(editor, input2, options) {
227468
227993
  disposeEphemeralWriteRuntime(runtime);
227469
227994
  }
227470
227995
  }
227471
- function extractTextPreview(node3) {
227472
- if (!node3.isTextblock)
227473
- return null;
227474
- const text5 = node3.textContent;
227475
- if (text5.length <= TEXT_PREVIEW_MAX_LENGTH)
227476
- return text5;
227477
- return text5.slice(0, TEXT_PREVIEW_MAX_LENGTH);
227478
- }
227479
- function extractBlockFormatting(node3) {
227480
- const pProps = node3.attrs.paragraphProperties;
227481
- const styleId = pProps?.styleId ?? null;
227482
- let fontFamily;
227483
- let fontSize;
227484
- let bold2;
227485
- let underline;
227486
- let color2;
227487
- node3.descendants((child) => {
227488
- if (fontFamily !== undefined)
227489
- return false;
227490
- const marks = child.marks ?? [];
227491
- if (!child.isText || marks.length === 0)
227492
- return;
227493
- for (const mark2 of marks) {
227494
- const markName = mark2.type.name;
227495
- const attrs = mark2.attrs;
227496
- if (markName === "textStyle") {
227497
- if (typeof attrs.fontFamily === "string" && attrs.fontFamily)
227498
- fontFamily = attrs.fontFamily;
227499
- if (attrs.fontSize != null) {
227500
- const raw = typeof attrs.fontSize === "string" ? parseFloat(attrs.fontSize) : attrs.fontSize;
227501
- if (typeof raw === "number" && Number.isFinite(raw))
227502
- fontSize = raw;
227503
- }
227504
- if (typeof attrs.color === "string" && attrs.color)
227505
- color2 = attrs.color;
227506
- }
227507
- if (markName === "bold" && attrs.value === true)
227508
- bold2 = true;
227509
- if (markName === "underline")
227510
- underline = true;
227511
- }
227512
- return false;
227513
- });
227514
- if (color2 === "auto")
227515
- color2 = undefined;
227516
- let headingLevel;
227517
- if (typeof styleId === "string") {
227518
- const m$1 = HEADING_PATTERN.exec(styleId);
227519
- if (m$1)
227520
- headingLevel = parseInt(m$1[1], 10);
227521
- }
227522
- return {
227523
- ...styleId ? { styleId } : {},
227524
- ...fontFamily ? { fontFamily } : {},
227525
- ...fontSize !== undefined ? { fontSize } : {},
227526
- ...bold2 ? { bold: bold2 } : {},
227527
- ...underline ? { underline } : {},
227528
- ...color2 ? { color: color2 } : {},
227529
- ...pProps?.justification ? { alignment: pProps.justification } : {},
227530
- ...headingLevel ? { headingLevel } : {}
227531
- };
227532
- }
227533
- function toBlockSummary(candidate, ordinal) {
227534
- return {
227535
- ordinal,
227536
- nodeId: candidate.nodeId,
227537
- nodeType: candidate.nodeType,
227538
- textPreview: extractTextPreview(candidate.node)
227539
- };
227540
- }
227541
- function resolveSdBlockId(candidate) {
227542
- const sdBlockId = candidate.node.attrs?.sdBlockId;
227543
- if (typeof sdBlockId === "string" && sdBlockId.length > 0)
227544
- return sdBlockId;
227545
- throw new DocumentApiAdapterError("INTERNAL_ERROR", "Resolved block candidate is missing sdBlockId attribute. This indicates a schema/extension invariant violation.", { attrs: candidate.node.attrs });
227546
- }
227547
- function validateDeleteTargetNodeType(nodeType) {
227548
- if (REJECTED_DELETE_NODE_TYPES3.has(nodeType))
227549
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
227550
- if (!SUPPORTED_DELETE_NODE_TYPES3.has(nodeType))
227551
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, { nodeType });
227552
- }
227553
- function validateCommandLayerUniqueness(editor, sdBlockId) {
227554
- const getBlockNodeById = editor.helpers?.blockNode?.getBlockNodeById;
227555
- if (typeof getBlockNodeById !== "function")
227556
- throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "blocks.delete requires the blockNode helper to be registered.", { reason: "missing_helper" });
227557
- const matches2 = getBlockNodeById(sdBlockId);
227558
- if (!matches2 || Array.isArray(matches2) && matches2.length === 0)
227559
- throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Block with sdBlockId "${sdBlockId}" was not found at the command layer.`, { sdBlockId });
227560
- if (Array.isArray(matches2) && matches2.length > 1)
227561
- throw new DocumentApiAdapterError("AMBIGUOUS_TARGET", `Multiple blocks share sdBlockId "${sdBlockId}" at the command layer.`, {
227562
- sdBlockId,
227563
- count: matches2.length
227564
- });
227565
- }
227566
- function collectTopLevelBlocks(editor) {
227567
- const doc$12 = editor.state.doc;
227568
- const results = [];
227569
- let offset$1 = 0;
227570
- for (let i4 = 0;i4 < doc$12.childCount; i4++) {
227571
- const child = doc$12.child(i4);
227572
- const nodeType = mapBlockNodeType(child);
227573
- const pos = offset$1;
227574
- if (nodeType) {
227575
- const nodeId = resolveBlockNodeId(child, pos, nodeType, [i4]);
227576
- if (nodeId)
227577
- results.push({
227578
- node: child,
227579
- pos,
227580
- end: pos + child.nodeSize,
227581
- nodeType,
227582
- nodeId
227583
- });
227584
- }
227585
- offset$1 += child.nodeSize;
227586
- }
227587
- return results;
227588
- }
227589
- function blocksListWrapper(editor, input2) {
227590
- const topLevel = collectTopLevelBlocks(editor);
227591
- const filtered = input2?.nodeTypes ? topLevel.filter((b$1) => input2.nodeTypes.includes(b$1.nodeType)) : topLevel;
227592
- const total = filtered.length;
227593
- const offset$1 = input2?.offset ?? 0;
227594
- const limit = input2?.limit ?? total;
227595
- const paged = filtered.slice(offset$1, offset$1 + limit);
227596
- const rev = getRevision(editor);
227597
- return {
227598
- total,
227599
- blocks: paged.map((candidate, i4) => {
227600
- const textLength = computeTextContentLength(candidate.node);
227601
- const ref$1 = textLength > 0 ? encodeV4Ref({
227602
- v: 4,
227603
- rev,
227604
- storyKey: "body",
227605
- scope: "block",
227606
- matchId: candidate.nodeId,
227607
- segments: [{
227608
- blockId: candidate.nodeId,
227609
- start: 0,
227610
- end: textLength
227611
- }],
227612
- blockIndex: offset$1 + i4
227613
- }) : undefined;
227614
- return {
227615
- ordinal: offset$1 + i4,
227616
- nodeId: candidate.nodeId,
227617
- nodeType: candidate.nodeType,
227618
- textPreview: extractTextPreview(candidate.node),
227619
- isEmpty: textLength === 0,
227620
- ...extractBlockFormatting(candidate.node),
227621
- ...ref$1 ? { ref: ref$1 } : {}
227622
- };
227623
- }),
227624
- revision: rev
227625
- };
227626
- }
227627
- function blocksDeleteWrapper(editor, input2, options) {
227628
- rejectTrackedMode("blocks.delete", options);
227629
- const candidate = findBlockByIdStrict(getBlockIndex(editor), input2.target);
227630
- validateDeleteTargetNodeType(candidate.nodeType);
227631
- const deletedBlock = toBlockSummary(candidate, collectTopLevelBlocks(editor).findIndex((b$1) => b$1.nodeId === candidate.nodeId && b$1.nodeType === candidate.nodeType));
227632
- const sdBlockId = resolveSdBlockId(candidate);
227633
- const deleteBlockNodeById = requireEditorCommand(editor.commands?.deleteBlockNodeById, "blocks.delete");
227634
- validateCommandLayerUniqueness(editor, sdBlockId);
227635
- if (options?.dryRun)
227636
- return {
227637
- success: true,
227638
- deleted: input2.target,
227639
- deletedBlock
227640
- };
227641
- if (executeDomainCommand(editor, () => {
227642
- const didApply = deleteBlockNodeById(sdBlockId);
227643
- if (didApply)
227644
- clearIndexCache(editor);
227645
- return didApply;
227646
- }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
227647
- throw new DocumentApiAdapterError("INTERNAL_ERROR", "blocks.delete command returned false despite passing all pre-apply checks. This is an internal invariant violation.", {
227648
- sdBlockId,
227649
- target: input2.target
227650
- });
227651
- return {
227652
- success: true,
227653
- deleted: input2.target,
227654
- deletedBlock
227655
- };
227656
- }
227657
- function hasSectionBreak(candidate) {
227658
- const pPr = candidate.node.attrs?.paragraphProperties;
227659
- return pPr?.sectPr != null && typeof pPr.sectPr === "object";
227660
- }
227661
- function resolveTopLevelOrdinal(topLevel, candidate, label) {
227662
- const idx = topLevel.findIndex((b$1) => b$1.nodeId === candidate.nodeId && b$1.nodeType === candidate.nodeType);
227663
- if (idx !== -1)
227664
- return idx;
227665
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange ${label} resolved to a nested block (not a direct document child). Only top-level blocks are supported.`, {
227666
- nodeId: candidate.nodeId,
227667
- nodeType: candidate.nodeType
227668
- });
227669
- }
227670
- function resolveRangeEndpoint(index2, address2, label) {
227671
- const key2 = `${address2.nodeType}:${address2.nodeId}`;
227672
- if (index2.ambiguous.has(key2))
227673
- throw new DocumentApiAdapterError("AMBIGUOUS_TARGET", `Multiple blocks share key "${key2}".`, { target: address2 });
227674
- const candidate = index2.byId.get(key2);
227675
- if (candidate)
227676
- return candidate;
227677
- const mismatch = index2.candidates.find((c) => c.nodeId === address2.nodeId);
227678
- if (mismatch)
227679
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange ${label} expected ${address2.nodeType}:${address2.nodeId} but resolved to ${mismatch.nodeType}.`, {
227680
- expected: address2.nodeType,
227681
- actual: mismatch.nodeType,
227682
- nodeId: address2.nodeId
227683
- });
227684
- throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Block "${key2}" was not found.`, { target: address2 });
227685
- }
227686
- function rejectUnmappedNodesInRange(doc$12, rangeBlocks) {
227687
- if (rangeBlocks.length === 0)
227688
- return;
227689
- const rangeFrom = rangeBlocks[0].pos;
227690
- const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
227691
- const recognizedPositions = new Set(rangeBlocks.map((b$1) => b$1.pos));
227692
- let offset$1 = 0;
227693
- for (let i4 = 0;i4 < doc$12.childCount; i4++) {
227694
- const child = doc$12.child(i4);
227695
- const childEnd = offset$1 + child.nodeSize;
227696
- if (childEnd > rangeFrom && offset$1 < rangeTo && !recognizedPositions.has(offset$1)) {
227697
- if (!RANGE_DELETE_SAFE_NODE_TYPES.has(child.type.name))
227698
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange cannot delete range: unrecognized node "${child.type.name}" at position ${offset$1} would be silently removed.`, {
227699
- pmNodeType: child.type.name,
227700
- pos: offset$1
227701
- });
227702
- }
227703
- offset$1 = childEnd;
227704
- }
227705
- }
227706
- function blocksDeleteRangeWrapper(editor, input2, options) {
227707
- rejectTrackedMode("blocks.deleteRange", options);
227708
- const topLevel = collectTopLevelBlocks(editor);
227709
- const index2 = getBlockIndex(editor);
227710
- const startCandidate = resolveRangeEndpoint(index2, input2.start, "start");
227711
- const endCandidate = resolveRangeEndpoint(index2, input2.end, "end");
227712
- const startOrdinal = resolveTopLevelOrdinal(topLevel, startCandidate, "start");
227713
- const endOrdinal = resolveTopLevelOrdinal(topLevel, endCandidate, "end");
227714
- if (startOrdinal > endOrdinal)
227715
- throw new DocumentApiAdapterError("INVALID_INPUT", `blocks.deleteRange start ordinal (${startOrdinal}) is after end ordinal (${endOrdinal}). The start must precede or equal the end.`, {
227716
- startOrdinal,
227717
- endOrdinal
227718
- });
227719
- const rangeBlocks = topLevel.slice(startOrdinal, endOrdinal + 1);
227720
- rejectUnmappedNodesInRange(editor.state.doc, rangeBlocks);
227721
- for (const block of rangeBlocks)
227722
- if (hasSectionBreak(block))
227723
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange cannot delete a range that includes a section break (block "${block.nodeId}" at ordinal ${topLevel.indexOf(block)}).`, {
227724
- nodeId: block.nodeId,
227725
- nodeType: block.nodeType
227726
- });
227727
- const deletedBlocks = rangeBlocks.map((c, i4) => toBlockSummary(c, startOrdinal + i4));
227728
- const revisionBefore = getRevision(editor);
227729
- if (options?.dryRun)
227730
- return {
227731
- success: true,
227732
- deletedCount: rangeBlocks.length,
227733
- deletedBlocks,
227734
- revision: {
227735
- before: revisionBefore,
227736
- after: revisionBefore
227737
- },
227738
- dryRun: true
227739
- };
227740
- const rangeFrom = rangeBlocks[0].pos;
227741
- const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
227742
- if (executeDomainCommand(editor, () => {
227743
- const tr = editor.state.tr;
227744
- tr.delete(rangeFrom, rangeTo);
227745
- editor.dispatch(tr);
227746
- clearIndexCache(editor);
227747
- return true;
227748
- }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
227749
- throw new DocumentApiAdapterError("INTERNAL_ERROR", "blocks.deleteRange command returned false despite passing all pre-apply checks.", {
227750
- start: input2.start,
227751
- end: input2.end
227752
- });
227753
- const revisionAfter = getRevision(editor);
227754
- return {
227755
- success: true,
227756
- deletedCount: rangeBlocks.length,
227757
- deletedBlocks,
227758
- revision: {
227759
- before: revisionBefore,
227760
- after: revisionAfter
227761
- },
227762
- dryRun: false
227763
- };
227764
- }
227765
227996
  function findLevelElement(abstract, ilvl) {
227766
227997
  const ilvlStr = String(ilvl);
227767
227998
  return abstract.elements?.find((el) => el.name === "w:lvl" && el.attributes?.["w:ilvl"] === ilvlStr);
@@ -242805,6 +243036,7 @@ function assembleDocumentApiAdapters(editor) {
242805
243036
  getHtml: { getHtml: (input2) => getHtmlAdapter(editor, input2) },
242806
243037
  markdownToFragment: { markdownToFragment: (input2) => markdownToFragmentAdapter(editor, input2) },
242807
243038
  info: { info: (input2) => infoAdapter(editor, input2) },
243039
+ extract: { extract: (input2) => extractAdapter(editor, input2) },
242808
243040
  clearContent: { clearContent: (input2, options) => clearContentWrapper(editor, input2, options) },
242809
243041
  capabilities: { get: () => getDocumentApiCapabilities(editor) },
242810
243042
  comments: createCommentsWrapper(editor),
@@ -274159,7 +274391,7 @@ var Node$13 = class Node$14 {
274159
274391
  console.warn("Failed to initialize developer tools:", error3);
274160
274392
  }
274161
274393
  }
274162
- }, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, DEBUG_TEXT_REWRITE, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, PRESET_KIND_MAP, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, _setValueDelegate, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES$1, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART$1 = "word/settings.xml", WORD_DEFAULT_TBL_LOOK, FLAG_TO_OOXML_KEY, INVERTED_FLAGS, XML_KEY_TO_STYLE_OPTION, CLEARED_BORDER_OOXML, TABLE_MARGIN_KEY_GROUPS, TABLE_ADAPTER_DISPATCH, ROW_TARGETED_TABLE_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, V2_COVERAGE, SNAPSHOT_VERSION_V2 = "sd-diff-snapshot/v2", PAYLOAD_VERSION_V1 = "sd-diff-payload/v1", PAYLOAD_VERSION_V2 = "sd-diff-payload/v2", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SETTINGS_PART, SPECIAL_NOTE_TYPES, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.25.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension2) => {
274394
+ }, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, DEBUG_TEXT_REWRITE, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, FALLBACK_STORE_KEY = "__documentApiComments", REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, PRESET_KIND_MAP, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, _setValueDelegate, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES$1, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART$1 = "word/settings.xml", WORD_DEFAULT_TBL_LOOK, FLAG_TO_OOXML_KEY, INVERTED_FLAGS, XML_KEY_TO_STYLE_OPTION, CLEARED_BORDER_OOXML, TABLE_MARGIN_KEY_GROUPS, TABLE_ADAPTER_DISPATCH, ROW_TARGETED_TABLE_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, V2_COVERAGE, SNAPSHOT_VERSION_V2 = "sd-diff-snapshot/v2", PAYLOAD_VERSION_V1 = "sd-diff-payload/v1", PAYLOAD_VERSION_V2 = "sd-diff-payload/v2", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SETTINGS_PART, SPECIAL_NOTE_TYPES, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.25.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension2) => {
274163
274395
  const extensionLike = extension2;
274164
274396
  const config2 = extensionLike?.config;
274165
274397
  const ExtensionCtor = extensionLike?.constructor;
@@ -287757,12 +287989,12 @@ var Node$13 = class Node$14 {
287757
287989
  return;
287758
287990
  console.log(...args$1);
287759
287991
  }, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions;
287760
- var init_src_D3Yvsm9K_es = __esm(() => {
287992
+ var init_src_DwJWNVLl_es = __esm(() => {
287761
287993
  init_rolldown_runtime_Bg48TavK_es();
287762
- init_SuperConverter_C87tnocN_es();
287994
+ init_SuperConverter_CorFllow_es();
287763
287995
  init_jszip_C49i9kUs_es();
287764
287996
  init_uuid_qzgm05fK_es();
287765
- init_create_headless_toolbar_sUHsO53v_es();
287997
+ init_create_headless_toolbar_B7Y50cRk_es();
287766
287998
  init_constants_CGhJRd87_es();
287767
287999
  init_dist_B8HfvhaK_es();
287768
288000
  init_unified_Dsuw2be5_es();
@@ -310176,272 +310408,6 @@ function print() { __p += __j.call(arguments, '') }
310176
310408
  fences: true
310177
310409
  });
310178
310410
  HEADING_STYLE_PATTERN = /^Heading\d$/;
310179
- REQUIRED_COMMANDS = {
310180
- "create.paragraph": ["insertParagraphAt"],
310181
- "create.heading": ["insertHeadingAt"],
310182
- "lists.insert": ["insertListItemAt"],
310183
- "lists.indent": [],
310184
- "lists.outdent": [],
310185
- "lists.create": [],
310186
- "lists.attach": [],
310187
- "lists.detach": [],
310188
- "lists.join": [],
310189
- "lists.separate": [],
310190
- "lists.setLevel": [],
310191
- "lists.setValue": [],
310192
- "lists.continuePrevious": [],
310193
- "lists.setLevelRestart": [],
310194
- "lists.convertToText": [],
310195
- "lists.applyTemplate": [],
310196
- "lists.applyPreset": [],
310197
- "lists.captureTemplate": [],
310198
- "lists.setLevelNumbering": [],
310199
- "lists.setLevelBullet": [],
310200
- "lists.setLevelPictureBullet": [],
310201
- "lists.setLevelAlignment": [],
310202
- "lists.setLevelIndents": [],
310203
- "lists.setLevelTrailingCharacter": [],
310204
- "lists.setLevelMarkerFont": [],
310205
- "lists.clearLevelOverrides": [],
310206
- "blocks.delete": ["deleteBlockNodeById"],
310207
- "comments.create": [
310208
- "addComment",
310209
- "setTextSelection",
310210
- "addCommentReply"
310211
- ],
310212
- "comments.patch": [
310213
- "editComment",
310214
- "moveComment",
310215
- "resolveComment",
310216
- "setCommentInternal"
310217
- ],
310218
- "comments.delete": ["removeComment"],
310219
- "trackChanges.decide": [
310220
- "acceptTrackedChangeById",
310221
- "rejectTrackedChangeById",
310222
- "acceptAllTrackedChanges",
310223
- "rejectAllTrackedChanges"
310224
- ],
310225
- "history.undo": ["undo"],
310226
- "history.redo": ["redo"],
310227
- "create.table": ["insertTableAt"],
310228
- "tables.delete": ["insertTableAt"],
310229
- "tables.clearContents": ["insertTableAt"],
310230
- "tables.move": ["insertTableAt"],
310231
- "tables.setLayout": ["insertTableAt"],
310232
- "tables.setAltText": ["insertTableAt"],
310233
- "tables.insertRow": ["insertTableAt"],
310234
- "tables.deleteRow": ["insertTableAt"],
310235
- "tables.setRowHeight": ["insertTableAt"],
310236
- "tables.distributeRows": ["insertTableAt"],
310237
- "tables.setRowOptions": ["insertTableAt"],
310238
- "tables.insertColumn": ["insertTableAt"],
310239
- "tables.deleteColumn": ["insertTableAt"],
310240
- "tables.setColumnWidth": ["insertTableAt"],
310241
- "tables.distributeColumns": ["insertTableAt"],
310242
- "tables.insertCell": ["insertTableAt"],
310243
- "tables.deleteCell": ["insertTableAt"],
310244
- "tables.mergeCells": ["insertTableAt"],
310245
- "tables.unmergeCells": ["insertTableAt"],
310246
- "tables.splitCell": ["insertTableAt"],
310247
- "tables.setCellProperties": ["insertTableAt"],
310248
- "tables.convertFromText": ["insertTableAt"],
310249
- "tables.split": ["insertTableAt"],
310250
- "tables.convertToText": ["insertTableAt"],
310251
- "tables.sort": ["insertTableAt"],
310252
- "tables.setStyle": ["insertTableAt"],
310253
- "tables.clearStyle": ["insertTableAt"],
310254
- "tables.setStyleOption": ["insertTableAt"],
310255
- "tables.setBorder": ["insertTableAt"],
310256
- "tables.clearBorder": ["insertTableAt"],
310257
- "tables.applyBorderPreset": ["insertTableAt"],
310258
- "tables.setShading": ["insertTableAt"],
310259
- "tables.clearShading": ["insertTableAt"],
310260
- "tables.setTablePadding": ["insertTableAt"],
310261
- "tables.setCellPadding": ["insertTableAt"],
310262
- "tables.setCellSpacing": ["insertTableAt"],
310263
- "tables.clearCellSpacing": ["insertTableAt"],
310264
- "create.tableOfContents": ["insertTableOfContentsAt"],
310265
- "toc.configure": ["setTableOfContentsInstructionById"],
310266
- "toc.update": ["replaceTableOfContentsContentById"],
310267
- "toc.remove": ["deleteTableOfContentsById"],
310268
- "toc.markEntry": ["insertTableOfContentsEntryAt"],
310269
- "toc.unmarkEntry": ["deleteTableOfContentsEntryAt"],
310270
- "toc.editEntry": ["updateTableOfContentsEntryAt"],
310271
- "bookmarks.list": ["insertBookmark"],
310272
- "bookmarks.get": ["insertBookmark"],
310273
- "bookmarks.insert": ["insertBookmark"],
310274
- "bookmarks.rename": ["insertBookmark"],
310275
- "bookmarks.remove": ["insertBookmark"],
310276
- "footnotes.list": ["insertContent"],
310277
- "footnotes.get": ["insertContent"],
310278
- "footnotes.insert": ["insertContent"],
310279
- "footnotes.update": ["insertContent"],
310280
- "footnotes.remove": ["insertContent"],
310281
- "footnotes.configure": ["insertContent"],
310282
- "crossRefs.list": ["insertContent"],
310283
- "crossRefs.get": ["insertContent"],
310284
- "crossRefs.insert": ["insertContent"],
310285
- "crossRefs.rebuild": ["insertContent"],
310286
- "crossRefs.remove": ["insertContent"],
310287
- "index.list": ["insertContent"],
310288
- "index.get": ["insertContent"],
310289
- "index.insert": ["insertContent"],
310290
- "index.configure": ["insertContent"],
310291
- "index.rebuild": ["insertContent"],
310292
- "index.remove": ["insertContent"],
310293
- "index.entries.list": ["insertContent"],
310294
- "index.entries.get": ["insertContent"],
310295
- "index.entries.insert": ["insertContent"],
310296
- "index.entries.update": ["insertContent"],
310297
- "index.entries.remove": ["insertContent"],
310298
- "captions.list": ["insertContent"],
310299
- "captions.get": ["insertContent"],
310300
- "captions.insert": ["insertContent"],
310301
- "captions.update": ["insertContent"],
310302
- "captions.remove": ["insertContent"],
310303
- "captions.configure": ["insertContent"],
310304
- "fields.list": ["insertContent"],
310305
- "fields.get": ["insertContent"],
310306
- "fields.insert": ["insertContent"],
310307
- "fields.rebuild": ["insertContent"],
310308
- "fields.remove": ["insertContent"],
310309
- "citations.list": ["insertContent"],
310310
- "citations.get": ["insertContent"],
310311
- "citations.insert": ["insertContent"],
310312
- "citations.update": ["insertContent"],
310313
- "citations.remove": ["insertContent"],
310314
- "citations.sources.list": ["insertContent"],
310315
- "citations.sources.get": ["insertContent"],
310316
- "citations.sources.insert": ["insertContent"],
310317
- "citations.sources.update": ["insertContent"],
310318
- "citations.sources.remove": ["insertContent"],
310319
- "citations.bibliography.get": ["insertContent"],
310320
- "citations.bibliography.insert": ["insertContent"],
310321
- "citations.bibliography.configure": ["insertContent"],
310322
- "citations.bibliography.rebuild": ["insertContent"],
310323
- "citations.bibliography.remove": ["insertContent"],
310324
- "authorities.list": ["insertContent"],
310325
- "authorities.get": ["insertContent"],
310326
- "authorities.insert": ["insertContent"],
310327
- "authorities.configure": ["insertContent"],
310328
- "authorities.rebuild": ["insertContent"],
310329
- "authorities.remove": ["insertContent"],
310330
- "authorities.entries.list": ["insertContent"],
310331
- "authorities.entries.get": ["insertContent"],
310332
- "authorities.entries.insert": ["insertContent"],
310333
- "authorities.entries.update": ["insertContent"],
310334
- "authorities.entries.remove": ["insertContent"],
310335
- "create.image": ["setImage"],
310336
- "images.delete": ["setImage"],
310337
- "images.move": ["setImage"],
310338
- "images.convertToInline": ["setImage"],
310339
- "images.convertToFloating": ["setImage"],
310340
- "images.setSize": ["setImage"],
310341
- "images.setWrapType": ["setImage"],
310342
- "images.setWrapSide": ["setImage"],
310343
- "images.setWrapDistances": ["setImage"],
310344
- "images.setPosition": ["setImage"],
310345
- "images.setAnchorOptions": ["setImage"],
310346
- "images.setZOrder": ["setImage"],
310347
- "images.scale": ["setImage"],
310348
- "images.setLockAspectRatio": ["setImage"],
310349
- "images.rotate": ["setImage"],
310350
- "images.flip": ["setImage"],
310351
- "images.crop": ["setImage"],
310352
- "images.resetCrop": ["setImage"],
310353
- "images.replaceSource": ["setImage"],
310354
- "images.setAltText": ["setImage"],
310355
- "images.setDecorative": ["setImage"],
310356
- "images.setName": ["setImage"],
310357
- "images.setHyperlink": ["setImage"],
310358
- "images.insertCaption": ["setImage"],
310359
- "images.updateCaption": ["setImage"],
310360
- "images.removeCaption": ["setImage"]
310361
- };
310362
- VALID_CAPABILITY_REASON_CODES = new Set(CAPABILITY_REASON_CODES);
310363
- REQUIRED_HELPERS = {
310364
- "blocks.delete": (editor) => typeof editor.helpers?.blockNode?.getBlockNodeById === "function",
310365
- "sections.setOddEvenHeadersFooters": (editor) => Boolean(editor.converter),
310366
- "sections.setHeaderFooterRef": (editor) => Boolean(editor.converter),
310367
- "tables.setDefaultStyle": (editor) => Boolean(editor.converter),
310368
- "tables.clearDefaultStyle": (editor) => Boolean(editor.converter),
310369
- "headerFooters.refs.set": (editor) => Boolean(editor.converter),
310370
- "headerFooters.refs.setLinkedToPrevious": (editor) => Boolean(editor.converter),
310371
- "headerFooters.parts.list": (editor) => Boolean(editor.converter),
310372
- "headerFooters.parts.create": (editor) => Boolean(editor.converter),
310373
- "headerFooters.parts.delete": (editor) => Boolean(editor.converter),
310374
- "lists.setLevelPictureBullet": (editor) => {
310375
- const converter = editor.converter;
310376
- return Boolean(converter?.convertedXml?.["word/numbering.xml"]);
310377
- }
310378
- };
310379
- SCHEMA_NODE_GATES = [
310380
- {
310381
- prefix: "crossRefs.",
310382
- nodes: ["crossReference"]
310383
- },
310384
- {
310385
- prefix: "citations.bibliography.",
310386
- nodes: ["bibliography"]
310387
- },
310388
- {
310389
- prefix: "citations.sources.",
310390
- nodes: ["citation"]
310391
- },
310392
- {
310393
- prefix: "citations.",
310394
- nodes: ["citation"]
310395
- },
310396
- {
310397
- prefix: "authorities.entries.",
310398
- nodes: ["authorityEntry"]
310399
- },
310400
- {
310401
- prefix: "authorities.",
310402
- nodes: ["tableOfAuthorities"]
310403
- },
310404
- {
310405
- prefix: "index.entries.",
310406
- nodes: ["indexEntry"]
310407
- },
310408
- {
310409
- prefix: "index.",
310410
- nodes: ["documentIndex", "index"]
310411
- },
310412
- {
310413
- prefix: "fields.",
310414
- nodes: ["sequenceField"]
310415
- },
310416
- {
310417
- prefix: "footnotes.",
310418
- nodes: ["footnoteReference", "endnoteReference"]
310419
- }
310420
- ];
310421
- schemaGatedIds = /* @__PURE__ */ new Set;
310422
- for (const gate of SCHEMA_NODE_GATES) {
310423
- const matchingIds = Object.keys(REQUIRED_COMMANDS).filter((id2) => id2.startsWith(gate.prefix) && !schemaGatedIds.has(id2));
310424
- for (const id2 of matchingIds) {
310425
- schemaGatedIds.add(id2);
310426
- const existingCheck = REQUIRED_HELPERS[id2];
310427
- if (existingCheck)
310428
- REQUIRED_HELPERS[id2] = (editor) => existingCheck(editor) && hasSchemaNode(editor, ...gate.nodes);
310429
- else
310430
- REQUIRED_HELPERS[id2] = (editor) => hasSchemaNode(editor, ...gate.nodes);
310431
- }
310432
- }
310433
- SUPPORTED_NON_UNIFORM_STRATEGIES = [
310434
- "error",
310435
- "useLeadingRun",
310436
- "majority",
310437
- "union"
310438
- ];
310439
- SUPPORTED_SET_MARKS = [
310440
- "bold",
310441
- "italic",
310442
- "underline",
310443
- "strike"
310444
- ];
310445
310411
  registry = /* @__PURE__ */ new Map;
310446
310412
  VALID_CREATE_POSITIONS = ["before", "after"];
310447
310413
  REF_HANDLERS = [
@@ -310729,6 +310695,276 @@ function print() { __p += __j.call(arguments, '') }
310729
310695
  "sdt",
310730
310696
  "image"
310731
310697
  ]);
310698
+ SUPPORTED_DELETE_NODE_TYPES3 = new Set(DELETABLE_BLOCK_NODE_TYPES2);
310699
+ REJECTED_DELETE_NODE_TYPES3 = new Set(["tableRow", "tableCell"]);
310700
+ RANGE_DELETE_SAFE_NODE_TYPES = new Set(["passthroughBlock", "passthroughInline"]);
310701
+ HEADING_PATTERN = /^Heading(\d)$/;
310702
+ REQUIRED_COMMANDS = {
310703
+ "create.paragraph": ["insertParagraphAt"],
310704
+ "create.heading": ["insertHeadingAt"],
310705
+ "lists.insert": ["insertListItemAt"],
310706
+ "lists.indent": [],
310707
+ "lists.outdent": [],
310708
+ "lists.create": [],
310709
+ "lists.attach": [],
310710
+ "lists.detach": [],
310711
+ "lists.join": [],
310712
+ "lists.separate": [],
310713
+ "lists.setLevel": [],
310714
+ "lists.setValue": [],
310715
+ "lists.continuePrevious": [],
310716
+ "lists.setLevelRestart": [],
310717
+ "lists.convertToText": [],
310718
+ "lists.applyTemplate": [],
310719
+ "lists.applyPreset": [],
310720
+ "lists.captureTemplate": [],
310721
+ "lists.setLevelNumbering": [],
310722
+ "lists.setLevelBullet": [],
310723
+ "lists.setLevelPictureBullet": [],
310724
+ "lists.setLevelAlignment": [],
310725
+ "lists.setLevelIndents": [],
310726
+ "lists.setLevelTrailingCharacter": [],
310727
+ "lists.setLevelMarkerFont": [],
310728
+ "lists.clearLevelOverrides": [],
310729
+ "blocks.delete": ["deleteBlockNodeById"],
310730
+ "comments.create": [
310731
+ "addComment",
310732
+ "setTextSelection",
310733
+ "addCommentReply"
310734
+ ],
310735
+ "comments.patch": [
310736
+ "editComment",
310737
+ "moveComment",
310738
+ "resolveComment",
310739
+ "setCommentInternal"
310740
+ ],
310741
+ "comments.delete": ["removeComment"],
310742
+ "trackChanges.decide": [
310743
+ "acceptTrackedChangeById",
310744
+ "rejectTrackedChangeById",
310745
+ "acceptAllTrackedChanges",
310746
+ "rejectAllTrackedChanges"
310747
+ ],
310748
+ "history.undo": ["undo"],
310749
+ "history.redo": ["redo"],
310750
+ "create.table": ["insertTableAt"],
310751
+ "tables.delete": ["insertTableAt"],
310752
+ "tables.clearContents": ["insertTableAt"],
310753
+ "tables.move": ["insertTableAt"],
310754
+ "tables.setLayout": ["insertTableAt"],
310755
+ "tables.setAltText": ["insertTableAt"],
310756
+ "tables.insertRow": ["insertTableAt"],
310757
+ "tables.deleteRow": ["insertTableAt"],
310758
+ "tables.setRowHeight": ["insertTableAt"],
310759
+ "tables.distributeRows": ["insertTableAt"],
310760
+ "tables.setRowOptions": ["insertTableAt"],
310761
+ "tables.insertColumn": ["insertTableAt"],
310762
+ "tables.deleteColumn": ["insertTableAt"],
310763
+ "tables.setColumnWidth": ["insertTableAt"],
310764
+ "tables.distributeColumns": ["insertTableAt"],
310765
+ "tables.insertCell": ["insertTableAt"],
310766
+ "tables.deleteCell": ["insertTableAt"],
310767
+ "tables.mergeCells": ["insertTableAt"],
310768
+ "tables.unmergeCells": ["insertTableAt"],
310769
+ "tables.splitCell": ["insertTableAt"],
310770
+ "tables.setCellProperties": ["insertTableAt"],
310771
+ "tables.convertFromText": ["insertTableAt"],
310772
+ "tables.split": ["insertTableAt"],
310773
+ "tables.convertToText": ["insertTableAt"],
310774
+ "tables.sort": ["insertTableAt"],
310775
+ "tables.setStyle": ["insertTableAt"],
310776
+ "tables.clearStyle": ["insertTableAt"],
310777
+ "tables.setStyleOption": ["insertTableAt"],
310778
+ "tables.setBorder": ["insertTableAt"],
310779
+ "tables.clearBorder": ["insertTableAt"],
310780
+ "tables.applyBorderPreset": ["insertTableAt"],
310781
+ "tables.setShading": ["insertTableAt"],
310782
+ "tables.clearShading": ["insertTableAt"],
310783
+ "tables.setTablePadding": ["insertTableAt"],
310784
+ "tables.setCellPadding": ["insertTableAt"],
310785
+ "tables.setCellSpacing": ["insertTableAt"],
310786
+ "tables.clearCellSpacing": ["insertTableAt"],
310787
+ "create.tableOfContents": ["insertTableOfContentsAt"],
310788
+ "toc.configure": ["setTableOfContentsInstructionById"],
310789
+ "toc.update": ["replaceTableOfContentsContentById"],
310790
+ "toc.remove": ["deleteTableOfContentsById"],
310791
+ "toc.markEntry": ["insertTableOfContentsEntryAt"],
310792
+ "toc.unmarkEntry": ["deleteTableOfContentsEntryAt"],
310793
+ "toc.editEntry": ["updateTableOfContentsEntryAt"],
310794
+ "bookmarks.list": ["insertBookmark"],
310795
+ "bookmarks.get": ["insertBookmark"],
310796
+ "bookmarks.insert": ["insertBookmark"],
310797
+ "bookmarks.rename": ["insertBookmark"],
310798
+ "bookmarks.remove": ["insertBookmark"],
310799
+ "footnotes.list": ["insertContent"],
310800
+ "footnotes.get": ["insertContent"],
310801
+ "footnotes.insert": ["insertContent"],
310802
+ "footnotes.update": ["insertContent"],
310803
+ "footnotes.remove": ["insertContent"],
310804
+ "footnotes.configure": ["insertContent"],
310805
+ "crossRefs.list": ["insertContent"],
310806
+ "crossRefs.get": ["insertContent"],
310807
+ "crossRefs.insert": ["insertContent"],
310808
+ "crossRefs.rebuild": ["insertContent"],
310809
+ "crossRefs.remove": ["insertContent"],
310810
+ "index.list": ["insertContent"],
310811
+ "index.get": ["insertContent"],
310812
+ "index.insert": ["insertContent"],
310813
+ "index.configure": ["insertContent"],
310814
+ "index.rebuild": ["insertContent"],
310815
+ "index.remove": ["insertContent"],
310816
+ "index.entries.list": ["insertContent"],
310817
+ "index.entries.get": ["insertContent"],
310818
+ "index.entries.insert": ["insertContent"],
310819
+ "index.entries.update": ["insertContent"],
310820
+ "index.entries.remove": ["insertContent"],
310821
+ "captions.list": ["insertContent"],
310822
+ "captions.get": ["insertContent"],
310823
+ "captions.insert": ["insertContent"],
310824
+ "captions.update": ["insertContent"],
310825
+ "captions.remove": ["insertContent"],
310826
+ "captions.configure": ["insertContent"],
310827
+ "fields.list": ["insertContent"],
310828
+ "fields.get": ["insertContent"],
310829
+ "fields.insert": ["insertContent"],
310830
+ "fields.rebuild": ["insertContent"],
310831
+ "fields.remove": ["insertContent"],
310832
+ "citations.list": ["insertContent"],
310833
+ "citations.get": ["insertContent"],
310834
+ "citations.insert": ["insertContent"],
310835
+ "citations.update": ["insertContent"],
310836
+ "citations.remove": ["insertContent"],
310837
+ "citations.sources.list": ["insertContent"],
310838
+ "citations.sources.get": ["insertContent"],
310839
+ "citations.sources.insert": ["insertContent"],
310840
+ "citations.sources.update": ["insertContent"],
310841
+ "citations.sources.remove": ["insertContent"],
310842
+ "citations.bibliography.get": ["insertContent"],
310843
+ "citations.bibliography.insert": ["insertContent"],
310844
+ "citations.bibliography.configure": ["insertContent"],
310845
+ "citations.bibliography.rebuild": ["insertContent"],
310846
+ "citations.bibliography.remove": ["insertContent"],
310847
+ "authorities.list": ["insertContent"],
310848
+ "authorities.get": ["insertContent"],
310849
+ "authorities.insert": ["insertContent"],
310850
+ "authorities.configure": ["insertContent"],
310851
+ "authorities.rebuild": ["insertContent"],
310852
+ "authorities.remove": ["insertContent"],
310853
+ "authorities.entries.list": ["insertContent"],
310854
+ "authorities.entries.get": ["insertContent"],
310855
+ "authorities.entries.insert": ["insertContent"],
310856
+ "authorities.entries.update": ["insertContent"],
310857
+ "authorities.entries.remove": ["insertContent"],
310858
+ "create.image": ["setImage"],
310859
+ "images.delete": ["setImage"],
310860
+ "images.move": ["setImage"],
310861
+ "images.convertToInline": ["setImage"],
310862
+ "images.convertToFloating": ["setImage"],
310863
+ "images.setSize": ["setImage"],
310864
+ "images.setWrapType": ["setImage"],
310865
+ "images.setWrapSide": ["setImage"],
310866
+ "images.setWrapDistances": ["setImage"],
310867
+ "images.setPosition": ["setImage"],
310868
+ "images.setAnchorOptions": ["setImage"],
310869
+ "images.setZOrder": ["setImage"],
310870
+ "images.scale": ["setImage"],
310871
+ "images.setLockAspectRatio": ["setImage"],
310872
+ "images.rotate": ["setImage"],
310873
+ "images.flip": ["setImage"],
310874
+ "images.crop": ["setImage"],
310875
+ "images.resetCrop": ["setImage"],
310876
+ "images.replaceSource": ["setImage"],
310877
+ "images.setAltText": ["setImage"],
310878
+ "images.setDecorative": ["setImage"],
310879
+ "images.setName": ["setImage"],
310880
+ "images.setHyperlink": ["setImage"],
310881
+ "images.insertCaption": ["setImage"],
310882
+ "images.updateCaption": ["setImage"],
310883
+ "images.removeCaption": ["setImage"]
310884
+ };
310885
+ VALID_CAPABILITY_REASON_CODES = new Set(CAPABILITY_REASON_CODES);
310886
+ REQUIRED_HELPERS = {
310887
+ "blocks.delete": (editor) => typeof editor.helpers?.blockNode?.getBlockNodeById === "function",
310888
+ "sections.setOddEvenHeadersFooters": (editor) => Boolean(editor.converter),
310889
+ "sections.setHeaderFooterRef": (editor) => Boolean(editor.converter),
310890
+ "tables.setDefaultStyle": (editor) => Boolean(editor.converter),
310891
+ "tables.clearDefaultStyle": (editor) => Boolean(editor.converter),
310892
+ "headerFooters.refs.set": (editor) => Boolean(editor.converter),
310893
+ "headerFooters.refs.setLinkedToPrevious": (editor) => Boolean(editor.converter),
310894
+ "headerFooters.parts.list": (editor) => Boolean(editor.converter),
310895
+ "headerFooters.parts.create": (editor) => Boolean(editor.converter),
310896
+ "headerFooters.parts.delete": (editor) => Boolean(editor.converter),
310897
+ "lists.setLevelPictureBullet": (editor) => {
310898
+ const converter = editor.converter;
310899
+ return Boolean(converter?.convertedXml?.["word/numbering.xml"]);
310900
+ }
310901
+ };
310902
+ SCHEMA_NODE_GATES = [
310903
+ {
310904
+ prefix: "crossRefs.",
310905
+ nodes: ["crossReference"]
310906
+ },
310907
+ {
310908
+ prefix: "citations.bibliography.",
310909
+ nodes: ["bibliography"]
310910
+ },
310911
+ {
310912
+ prefix: "citations.sources.",
310913
+ nodes: ["citation"]
310914
+ },
310915
+ {
310916
+ prefix: "citations.",
310917
+ nodes: ["citation"]
310918
+ },
310919
+ {
310920
+ prefix: "authorities.entries.",
310921
+ nodes: ["authorityEntry"]
310922
+ },
310923
+ {
310924
+ prefix: "authorities.",
310925
+ nodes: ["tableOfAuthorities"]
310926
+ },
310927
+ {
310928
+ prefix: "index.entries.",
310929
+ nodes: ["indexEntry"]
310930
+ },
310931
+ {
310932
+ prefix: "index.",
310933
+ nodes: ["documentIndex", "index"]
310934
+ },
310935
+ {
310936
+ prefix: "fields.",
310937
+ nodes: ["sequenceField"]
310938
+ },
310939
+ {
310940
+ prefix: "footnotes.",
310941
+ nodes: ["footnoteReference", "endnoteReference"]
310942
+ }
310943
+ ];
310944
+ schemaGatedIds = /* @__PURE__ */ new Set;
310945
+ for (const gate of SCHEMA_NODE_GATES) {
310946
+ const matchingIds = Object.keys(REQUIRED_COMMANDS).filter((id2) => id2.startsWith(gate.prefix) && !schemaGatedIds.has(id2));
310947
+ for (const id2 of matchingIds) {
310948
+ schemaGatedIds.add(id2);
310949
+ const existingCheck = REQUIRED_HELPERS[id2];
310950
+ if (existingCheck)
310951
+ REQUIRED_HELPERS[id2] = (editor) => existingCheck(editor) && hasSchemaNode(editor, ...gate.nodes);
310952
+ else
310953
+ REQUIRED_HELPERS[id2] = (editor) => hasSchemaNode(editor, ...gate.nodes);
310954
+ }
310955
+ }
310956
+ SUPPORTED_NON_UNIFORM_STRATEGIES = [
310957
+ "error",
310958
+ "useLeadingRun",
310959
+ "majority",
310960
+ "union"
310961
+ ];
310962
+ SUPPORTED_SET_MARKS = [
310963
+ "bold",
310964
+ "italic",
310965
+ "underline",
310966
+ "strike"
310967
+ ];
310732
310968
  PROPERTIES_KEY_BY_CHANNEL = {
310733
310969
  run: "runProperties",
310734
310970
  paragraph: "paragraphProperties"
@@ -310772,10 +311008,6 @@ function print() { __p += __j.call(arguments, '') }
310772
311008
  right: "right",
310773
311009
  justify: "both"
310774
311010
  };
310775
- SUPPORTED_DELETE_NODE_TYPES3 = new Set(DELETABLE_BLOCK_NODE_TYPES2);
310776
- REJECTED_DELETE_NODE_TYPES3 = new Set(["tableRow", "tableCell"]);
310777
- RANGE_DELETE_SAFE_NODE_TYPES = new Set(["passthroughBlock", "passthroughInline"]);
310778
- HEADING_PATTERN = /^Heading(\d)$/;
310779
311011
  ORDERED_PRESET_CONFIG = {
310780
311012
  decimal: {
310781
311013
  numFmt: "decimal",
@@ -322484,11 +322716,11 @@ var init_zipper_DbkgrypV_es = __esm(() => {
322484
322716
 
322485
322717
  // ../../packages/superdoc/dist/super-editor.es.js
322486
322718
  var init_super_editor_es = __esm(() => {
322487
- init_src_D3Yvsm9K_es();
322488
- init_SuperConverter_C87tnocN_es();
322719
+ init_src_DwJWNVLl_es();
322720
+ init_SuperConverter_CorFllow_es();
322489
322721
  init_jszip_C49i9kUs_es();
322490
322722
  init_xml_js_CqGKpaft_es();
322491
- init_create_headless_toolbar_sUHsO53v_es();
322723
+ init_create_headless_toolbar_B7Y50cRk_es();
322492
322724
  init_constants_CGhJRd87_es();
322493
322725
  init_dist_B8HfvhaK_es();
322494
322726
  init_unified_Dsuw2be5_es();