@superdoc-dev/cli 0.2.0-next.123 → 0.2.0-next.125

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 (3) hide show
  1. package/README.md +128 -22
  2. package/dist/index.js +1118 -221
  3. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -1306,7 +1306,7 @@ var init_operation_definitions = __esm(() => {
1306
1306
  },
1307
1307
  find: {
1308
1308
  memberPath: "find",
1309
- description: "Search the document for text or node matches using SDM/1 selectors.",
1309
+ description: "Search the document for text or node matches using SDM/1 selectors. Returns discovery-grade results — for mutation targeting, use query.match instead.",
1310
1310
  expectedResult: "Returns an SDFindResult envelope ({ total, limit, offset, items }). Each item is an SDNodeResult ({ node, address }).",
1311
1311
  requiresDocumentContext: true,
1312
1312
  metadata: readOperation({
@@ -1406,7 +1406,7 @@ var init_operation_definitions = __esm(() => {
1406
1406
  },
1407
1407
  insert: {
1408
1408
  memberPath: "insert",
1409
- description: "Insert content at a target position, or at the end of the document when target is omitted. " + "Accepts two input shapes: legacy string-based (value + type) or structural SDFragment (content). " + "Supports text (default), markdown, and html content types via the `type` field in legacy mode. " + "Structural mode accepts an SDFragment with typed nodes (paragraphs, tables, images, etc.).",
1409
+ description: "Insert inline content at a text position within an existing block, or at the end of the document when target is omitted. " + "This is NOT for creating sibling blocks — use create.paragraph, create.heading, or lists.insert for that. " + "Accepts two input shapes: legacy string-based (value + type) or structural SDFragment (content). " + "Supports text (default), markdown, and html content types via the `type` field in legacy mode. " + "Structural mode accepts an SDFragment with typed nodes (paragraphs, tables, images, etc.).",
1410
1410
  expectedResult: "Returns a TextMutationReceipt with applied status; receipt reports NO_OP if the insertion point is invalid or content is empty.",
1411
1411
  requiresDocumentContext: true,
1412
1412
  metadata: mutationOperation({
@@ -1495,10 +1495,22 @@ var init_operation_definitions = __esm(() => {
1495
1495
  referenceDocPath: "delete.mdx",
1496
1496
  referenceGroup: "core"
1497
1497
  },
1498
+ "blocks.list": {
1499
+ memberPath: "blocks.list",
1500
+ description: "List top-level blocks in document order with IDs, types, and text previews. Supports pagination via offset/limit and optional nodeType filtering.",
1501
+ expectedResult: "Returns a BlocksListResult with total block count, an ordered array of block entries (ordinal, nodeId, nodeType, textPreview, isEmpty), and the current document revision.",
1502
+ requiresDocumentContext: true,
1503
+ metadata: readOperation({
1504
+ throws: ["INVALID_INPUT"]
1505
+ }),
1506
+ referenceDocPath: "blocks/list.mdx",
1507
+ referenceGroup: "blocks",
1508
+ essential: true
1509
+ },
1498
1510
  "blocks.delete": {
1499
1511
  memberPath: "blocks.delete",
1500
1512
  description: "Delete an entire block node (paragraph, heading, list item, table, image, or sdt) deterministically.",
1501
- expectedResult: "Returns a BlocksDeleteResult receipt confirming the block was removed from the document.",
1513
+ expectedResult: "Returns a BlocksDeleteResult receipt confirming the block was removed, including a deletedBlock summary with ordinal, nodeType, and textPreview.",
1502
1514
  requiresDocumentContext: true,
1503
1515
  metadata: mutationOperation({
1504
1516
  idempotency: "conditional",
@@ -1517,6 +1529,28 @@ var init_operation_definitions = __esm(() => {
1517
1529
  referenceDocPath: "blocks/delete.mdx",
1518
1530
  referenceGroup: "blocks"
1519
1531
  },
1532
+ "blocks.deleteRange": {
1533
+ memberPath: "blocks.deleteRange",
1534
+ description: "Delete a contiguous range of top-level blocks between two endpoints (inclusive). Both endpoints must be direct children of the document node. Supports dry-run preview.",
1535
+ expectedResult: "Returns a BlocksDeleteRangeResult with deletedCount, deletedBlocks array (each with ordinal, nodeId, nodeType, textPreview), before/after revision, and dryRun flag.",
1536
+ requiresDocumentContext: true,
1537
+ metadata: mutationOperation({
1538
+ idempotency: "conditional",
1539
+ supportsDryRun: true,
1540
+ supportsTrackedMode: false,
1541
+ possibleFailureCodes: NONE_FAILURES,
1542
+ throws: [
1543
+ "TARGET_NOT_FOUND",
1544
+ "AMBIGUOUS_TARGET",
1545
+ "INVALID_TARGET",
1546
+ "INVALID_INPUT",
1547
+ "CAPABILITY_UNAVAILABLE",
1548
+ "INTERNAL_ERROR"
1549
+ ]
1550
+ }),
1551
+ referenceDocPath: "blocks/delete-range.mdx",
1552
+ referenceGroup: "blocks"
1553
+ },
1520
1554
  "format.apply": {
1521
1555
  memberPath: "format.apply",
1522
1556
  description: "Apply inline run-property patch changes to the target range with explicit set/clear semantics.",
@@ -1551,7 +1585,7 @@ var init_operation_definitions = __esm(() => {
1551
1585
  },
1552
1586
  "create.paragraph": {
1553
1587
  memberPath: "create.paragraph",
1554
- description: "Create a new paragraph at the target position.",
1588
+ description: "Create a standalone paragraph at the target position. To add a list item, use lists.insert instead.",
1555
1589
  expectedResult: "Returns a CreateParagraphResult with the new paragraph block ID and address.",
1556
1590
  requiresDocumentContext: true,
1557
1591
  metadata: mutationOperation({
@@ -2185,7 +2219,7 @@ var init_operation_definitions = __esm(() => {
2185
2219
  },
2186
2220
  "lists.insert": {
2187
2221
  memberPath: "lists.insert",
2188
- description: "Insert a new list at the target position.",
2222
+ description: "Insert a new list item before or after an existing list item. The new item inherits the target list context.",
2189
2223
  expectedResult: "Returns a ListsInsertResult with the new list item address and block ID.",
2190
2224
  requiresDocumentContext: true,
2191
2225
  metadata: mutationOperation({
@@ -2702,7 +2736,7 @@ var init_operation_definitions = __esm(() => {
2702
2736
  },
2703
2737
  "query.match": {
2704
2738
  memberPath: "query.match",
2705
- description: "Deterministic selector-based search with cardinality contracts for mutation targeting.",
2739
+ description: "Deterministic selector-based search returning mutation-grade addresses and text ranges. Use this to discover targets before any mutation.",
2706
2740
  expectedResult: "Returns a QueryMatchOutput with the resolved target address and cardinality metadata.",
2707
2741
  requiresDocumentContext: true,
2708
2742
  metadata: readOperation({
@@ -3559,7 +3593,7 @@ var init_operation_definitions = __esm(() => {
3559
3593
  "history.undo": {
3560
3594
  memberPath: "history.undo",
3561
3595
  description: "Undo the most recent history-safe mutation in the active editor.",
3562
- expectedResult: "Returns a HistoryActionResult with noop flag and revision before/after; noop is true when the undo stack is empty.",
3596
+ expectedResult: "Returns a HistoryActionResult with noop flag, reason (EMPTY_UNDO_STACK | NO_EFFECT when noop), and revision before/after.",
3563
3597
  requiresDocumentContext: true,
3564
3598
  metadata: mutationOperation({
3565
3599
  idempotency: "non-idempotent",
@@ -3575,7 +3609,7 @@ var init_operation_definitions = __esm(() => {
3575
3609
  "history.redo": {
3576
3610
  memberPath: "history.redo",
3577
3611
  description: "Redo the most recently undone action in the active editor.",
3578
- expectedResult: "Returns a HistoryActionResult with noop flag and revision before/after; noop is true when the redo stack is empty.",
3612
+ expectedResult: "Returns a HistoryActionResult with noop flag, reason (EMPTY_REDO_STACK | NO_EFFECT when noop), and revision before/after.",
3579
3613
  requiresDocumentContext: true,
3580
3614
  metadata: mutationOperation({
3581
3615
  idempotency: "non-idempotent",
@@ -8622,20 +8656,85 @@ var init_schemas = __esm(() => {
8622
8656
  failure: textMutationFailureSchemaFor("format.apply")
8623
8657
  },
8624
8658
  ...formatInlineAliasOperationSchemas,
8659
+ "blocks.list": {
8660
+ input: objectSchema({
8661
+ offset: { type: "number", minimum: 0 },
8662
+ limit: { type: "number", minimum: 1 },
8663
+ nodeTypes: { type: "array", items: { enum: [...blockNodeTypeValues] } }
8664
+ }),
8665
+ output: objectSchema({
8666
+ total: { type: "number" },
8667
+ blocks: {
8668
+ type: "array",
8669
+ items: objectSchema({
8670
+ ordinal: { type: "number" },
8671
+ nodeId: { type: "string" },
8672
+ nodeType: { enum: [...blockNodeTypeValues] },
8673
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] },
8674
+ isEmpty: { type: "boolean" }
8675
+ }, ["ordinal", "nodeId", "nodeType", "textPreview", "isEmpty"])
8676
+ },
8677
+ revision: { type: "string" }
8678
+ }, ["total", "blocks", "revision"])
8679
+ },
8625
8680
  "blocks.delete": {
8626
8681
  input: objectSchema({
8627
8682
  target: deletableBlockNodeAddressSchema
8628
8683
  }, ["target"]),
8629
8684
  output: objectSchema({
8630
8685
  success: { const: true },
8631
- deleted: deletableBlockNodeAddressSchema
8686
+ deleted: deletableBlockNodeAddressSchema,
8687
+ deletedBlock: objectSchema({
8688
+ ordinal: { type: "number" },
8689
+ nodeId: { type: "string" },
8690
+ nodeType: { type: "string" },
8691
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] }
8692
+ })
8632
8693
  }, ["success", "deleted"]),
8633
8694
  success: objectSchema({
8634
8695
  success: { const: true },
8635
- deleted: deletableBlockNodeAddressSchema
8696
+ deleted: deletableBlockNodeAddressSchema,
8697
+ deletedBlock: objectSchema({
8698
+ ordinal: { type: "number" },
8699
+ nodeId: { type: "string" },
8700
+ nodeType: { type: "string" },
8701
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] }
8702
+ })
8636
8703
  }, ["success", "deleted"]),
8637
8704
  failure: preApplyFailureResultSchemaFor("blocks.delete")
8638
8705
  },
8706
+ "blocks.deleteRange": {
8707
+ input: objectSchema({
8708
+ start: blockNodeAddressSchema,
8709
+ end: blockNodeAddressSchema
8710
+ }, ["start", "end"]),
8711
+ output: objectSchema({
8712
+ success: { const: true },
8713
+ deletedCount: { type: "number" },
8714
+ deletedBlocks: {
8715
+ type: "array",
8716
+ items: objectSchema({
8717
+ ordinal: { type: "number" },
8718
+ nodeId: { type: "string" },
8719
+ nodeType: { type: "string" },
8720
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] }
8721
+ }, ["ordinal", "nodeId", "nodeType", "textPreview"])
8722
+ },
8723
+ revision: objectSchema({
8724
+ before: { type: "string" },
8725
+ after: { type: "string" }
8726
+ }, ["before", "after"]),
8727
+ dryRun: { type: "boolean" }
8728
+ }, ["success", "deletedCount", "deletedBlocks", "revision", "dryRun"]),
8729
+ success: objectSchema({
8730
+ success: { const: true },
8731
+ deletedCount: { type: "number" },
8732
+ deletedBlocks: { type: "array" },
8733
+ revision: objectSchema({ before: { type: "string" }, after: { type: "string" } }, ["before", "after"]),
8734
+ dryRun: { type: "boolean" }
8735
+ }, ["success", "deletedCount", "deletedBlocks", "revision", "dryRun"]),
8736
+ failure: preApplyFailureResultSchemaFor("blocks.deleteRange")
8737
+ },
8639
8738
  "styles.paragraph.setStyle": {
8640
8739
  input: objectSchema({ target: paragraphTargetSchema, styleId: { type: "string", minLength: 1 } }, [
8641
8740
  "target",
@@ -12940,6 +13039,35 @@ var init_create = __esm(() => {
12940
13039
  });
12941
13040
 
12942
13041
  // ../../packages/document-api/src/blocks/blocks.ts
13042
+ function validateBlocksListInput(input) {
13043
+ if (!input)
13044
+ return;
13045
+ if (input.offset != null && (typeof input.offset !== "number" || input.offset < 0)) {
13046
+ throw new DocumentApiValidationError("INVALID_INPUT", "blocks.list offset must be a non-negative number.", {
13047
+ fields: ["offset"]
13048
+ });
13049
+ }
13050
+ if (input.limit != null && (typeof input.limit !== "number" || input.limit < 1)) {
13051
+ throw new DocumentApiValidationError("INVALID_INPUT", "blocks.list limit must be a positive number.", {
13052
+ fields: ["limit"]
13053
+ });
13054
+ }
13055
+ if (input.nodeTypes != null) {
13056
+ if (!Array.isArray(input.nodeTypes) || input.nodeTypes.length === 0) {
13057
+ throw new DocumentApiValidationError("INVALID_INPUT", "blocks.list nodeTypes must be a non-empty array.", {
13058
+ fields: ["nodeTypes"]
13059
+ });
13060
+ }
13061
+ for (const nt of input.nodeTypes) {
13062
+ if (!VALID_BLOCK_NODE_TYPES.has(nt)) {
13063
+ throw new DocumentApiValidationError("INVALID_INPUT", `blocks.list nodeTypes contains unknown type "${nt}".`, {
13064
+ fields: ["nodeTypes"],
13065
+ nodeType: nt
13066
+ });
13067
+ }
13068
+ }
13069
+ }
13070
+ }
12943
13071
  function validateBlocksDeleteInput(input) {
12944
13072
  if (!input || typeof input !== "object") {
12945
13073
  throw new DocumentApiValidationError("INVALID_INPUT", "blocks.delete requires an input object.", {
@@ -12972,16 +13100,57 @@ function validateBlocksDeleteInput(input) {
12972
13100
  });
12973
13101
  }
12974
13102
  }
13103
+ function validateBlockNodeAddress(address2, label) {
13104
+ if (!address2 || typeof address2 !== "object") {
13105
+ throw new DocumentApiValidationError("INVALID_INPUT", `blocks.deleteRange requires a ${label} address.`, {
13106
+ fields: [label]
13107
+ });
13108
+ }
13109
+ const addr = address2;
13110
+ if (addr.kind !== "block") {
13111
+ throw new DocumentApiValidationError("INVALID_INPUT", `blocks.deleteRange ${label} must have kind "block".`, {
13112
+ fields: [`${label}.kind`]
13113
+ });
13114
+ }
13115
+ if (!addr.nodeId || typeof addr.nodeId !== "string") {
13116
+ throw new DocumentApiValidationError("INVALID_INPUT", `blocks.deleteRange ${label} requires a nodeId string.`, {
13117
+ fields: [`${label}.nodeId`]
13118
+ });
13119
+ }
13120
+ if (!addr.nodeType || typeof addr.nodeType !== "string") {
13121
+ throw new DocumentApiValidationError("INVALID_INPUT", `blocks.deleteRange ${label} requires a nodeType string.`, {
13122
+ fields: [`${label}.nodeType`]
13123
+ });
13124
+ }
13125
+ }
13126
+ function validateBlocksDeleteRangeInput(input) {
13127
+ if (!input || typeof input !== "object") {
13128
+ throw new DocumentApiValidationError("INVALID_INPUT", "blocks.deleteRange requires an input object.", {
13129
+ fields: ["input"]
13130
+ });
13131
+ }
13132
+ validateBlockNodeAddress(input.start, "start");
13133
+ validateBlockNodeAddress(input.end, "end");
13134
+ }
13135
+ function executeBlocksList(adapter, input) {
13136
+ validateBlocksListInput(input);
13137
+ return adapter.list(input);
13138
+ }
12975
13139
  function executeBlocksDelete(adapter, input, options) {
12976
13140
  validateBlocksDeleteInput(input);
12977
13141
  return adapter.delete(input, normalizeMutationOptions(options));
12978
13142
  }
12979
- var SUPPORTED_DELETE_NODE_TYPES, REJECTED_DELETE_NODE_TYPES;
13143
+ function executeBlocksDeleteRange(adapter, input, options) {
13144
+ validateBlocksDeleteRangeInput(input);
13145
+ return adapter.deleteRange(input, normalizeMutationOptions(options));
13146
+ }
13147
+ var SUPPORTED_DELETE_NODE_TYPES, REJECTED_DELETE_NODE_TYPES, VALID_BLOCK_NODE_TYPES;
12980
13148
  var init_blocks = __esm(() => {
12981
13149
  init_base();
12982
13150
  init_errors2();
12983
13151
  SUPPORTED_DELETE_NODE_TYPES = new Set(DELETABLE_BLOCK_NODE_TYPES);
12984
13152
  REJECTED_DELETE_NODE_TYPES = new Set(["tableRow", "tableCell"]);
13153
+ VALID_BLOCK_NODE_TYPES = new Set(BLOCK_NODE_TYPES);
12985
13154
  });
12986
13155
 
12987
13156
  // ../../packages/document-api/src/track-changes/track-changes.ts
@@ -13051,7 +13220,9 @@ function buildDispatchTable(api) {
13051
13220
  insert: (input, options) => api.insert(input, options),
13052
13221
  replace: (input, options) => api.replace(input, options),
13053
13222
  delete: (input, options) => api.delete(input, options),
13223
+ "blocks.list": (input) => api.blocks.list(input),
13054
13224
  "blocks.delete": (input, options) => api.blocks.delete(input, options),
13225
+ "blocks.deleteRange": (input, options) => api.blocks.deleteRange(input, options),
13055
13226
  "format.apply": (input, options) => api.format.apply(input, options),
13056
13227
  ...formatInlineAliasDispatch,
13057
13228
  "styles.paragraph.setStyle": (input, options) => api.styles.paragraph.setStyle(input, options),
@@ -15147,8 +15318,14 @@ function createDocumentApi(adapters) {
15147
15318
  }
15148
15319
  },
15149
15320
  blocks: {
15321
+ list(input) {
15322
+ return executeBlocksList(adapters.blocks, input);
15323
+ },
15150
15324
  delete(input, options) {
15151
15325
  return executeBlocksDelete(adapters.blocks, input, options);
15326
+ },
15327
+ deleteRange(input, options) {
15328
+ return executeBlocksDeleteRange(adapters.blocks, input, options);
15152
15329
  }
15153
15330
  },
15154
15331
  create: {
@@ -16685,7 +16862,9 @@ var init_operation_hints = __esm(() => {
16685
16862
  insert: "inserted text",
16686
16863
  replace: "replaced text",
16687
16864
  delete: "deleted text",
16865
+ "blocks.list": "listed blocks",
16688
16866
  "blocks.delete": "deleted block",
16867
+ "blocks.deleteRange": "deleted block range",
16689
16868
  "format.apply": "applied style",
16690
16869
  ...buildFormatInlineAliasRecord("applied style"),
16691
16870
  ...buildParagraphRecord("updated paragraph formatting"),
@@ -16818,7 +16997,9 @@ var init_operation_hints = __esm(() => {
16818
16997
  insert: "mutationReceipt",
16819
16998
  replace: "mutationReceipt",
16820
16999
  delete: "mutationReceipt",
17000
+ "blocks.list": "plain",
16821
17001
  "blocks.delete": "plain",
17002
+ "blocks.deleteRange": "plain",
16822
17003
  "format.apply": "mutationReceipt",
16823
17004
  ...buildFormatInlineAliasRecord("mutationReceipt"),
16824
17005
  ...buildParagraphRecord("plain"),
@@ -16951,7 +17132,9 @@ var init_operation_hints = __esm(() => {
16951
17132
  insert: null,
16952
17133
  replace: null,
16953
17134
  delete: null,
17135
+ "blocks.list": "result",
16954
17136
  "blocks.delete": "result",
17137
+ "blocks.deleteRange": "result",
16955
17138
  "format.apply": null,
16956
17139
  ...buildFormatInlineAliasRecord(null),
16957
17140
  ...buildParagraphRecord("result"),
@@ -17100,7 +17283,9 @@ var init_operation_hints = __esm(() => {
17100
17283
  insert: "textMutation",
17101
17284
  replace: "textMutation",
17102
17285
  delete: "textMutation",
17286
+ "blocks.list": "blocks",
17103
17287
  "blocks.delete": "blocks",
17288
+ "blocks.deleteRange": "blocks",
17104
17289
  "format.apply": "textMutation",
17105
17290
  ...buildFormatInlineAliasRecord("textMutation"),
17106
17291
  ...buildParagraphRecord("textMutation"),
@@ -17230,10 +17415,11 @@ var init_cli_only_operation_definitions = __esm(() => {
17230
17415
  description: "Open a document and create a persistent editing session. Optionally override the document body with contentOverride + overrideType (markdown, html, or text).",
17231
17416
  requiresDocumentContext: false,
17232
17417
  intentName: "open_document",
17233
- sdkMetadata: { mutates: false, idempotency: "non-idempotent", supportsTrackedMode: false, supportsDryRun: false },
17418
+ sdkMetadata: { mutates: true, idempotency: "non-idempotent", supportsTrackedMode: false, supportsDryRun: false },
17234
17419
  outputSchema: {
17235
17420
  type: "object",
17236
17421
  properties: {
17422
+ active: { type: "boolean" },
17237
17423
  contextId: { type: "string" },
17238
17424
  sessionType: { type: "string" },
17239
17425
  document: {
@@ -17241,9 +17427,11 @@ var init_cli_only_operation_definitions = __esm(() => {
17241
17427
  properties: {
17242
17428
  path: { type: "string" },
17243
17429
  source: { type: "string" },
17430
+ byteLength: { type: "number" },
17244
17431
  revision: { type: "number" }
17245
17432
  }
17246
17433
  },
17434
+ dirty: { type: "boolean" },
17247
17435
  collaboration: {
17248
17436
  type: "object",
17249
17437
  properties: {
@@ -17258,9 +17446,11 @@ var init_cli_only_operation_definitions = __esm(() => {
17258
17446
  bootstrapApplied: { type: "boolean" },
17259
17447
  bootstrapSource: { type: "string" }
17260
17448
  }
17261
- }
17449
+ },
17450
+ openedAt: { type: "string" },
17451
+ updatedAt: { type: "string" }
17262
17452
  },
17263
- required: ["contextId", "sessionType"]
17453
+ required: ["active", "contextId", "sessionType"]
17264
17454
  }
17265
17455
  },
17266
17456
  save: {
@@ -17307,7 +17497,7 @@ var init_cli_only_operation_definitions = __esm(() => {
17307
17497
  description: "Close the active editing session and clean up resources.",
17308
17498
  requiresDocumentContext: false,
17309
17499
  intentName: "close_document",
17310
- sdkMetadata: { mutates: false, idempotency: "conditional", supportsTrackedMode: false, supportsDryRun: false },
17500
+ sdkMetadata: { mutates: true, idempotency: "conditional", supportsTrackedMode: false, supportsDryRun: false },
17311
17501
  outputSchema: {
17312
17502
  type: "object",
17313
17503
  properties: {
@@ -17338,19 +17528,35 @@ var init_cli_only_operation_definitions = __esm(() => {
17338
17528
  outputSchema: {
17339
17529
  type: "object",
17340
17530
  properties: {
17531
+ active: { type: "boolean" },
17341
17532
  contextId: { type: "string" },
17533
+ activeSessionId: { type: "string" },
17534
+ requestedSessionId: { type: "string" },
17535
+ projectRoot: { type: "string" },
17342
17536
  sessionType: { type: "string" },
17343
17537
  dirty: { type: "boolean" },
17344
- revision: { type: "number" },
17345
17538
  document: {
17346
17539
  type: "object",
17347
17540
  properties: {
17348
17541
  path: { type: "string" },
17349
- source: { type: "string" }
17542
+ source: { type: "string" },
17543
+ sourceByteLength: { oneOf: [{ type: "number" }, { type: "null" }] },
17544
+ byteLength: { type: "number" },
17545
+ revision: { type: "number" }
17350
17546
  }
17351
- }
17547
+ },
17548
+ collaboration: {
17549
+ type: "object",
17550
+ properties: {
17551
+ documentId: { type: "string" },
17552
+ url: { type: "string" }
17553
+ }
17554
+ },
17555
+ openedAt: { type: "string" },
17556
+ updatedAt: { type: "string" },
17557
+ lastSavedAt: { type: "string" }
17352
17558
  },
17353
- required: ["contextId"]
17559
+ required: ["active"]
17354
17560
  }
17355
17561
  },
17356
17562
  describe: {
@@ -17464,7 +17670,7 @@ var init_cli_only_operation_definitions = __esm(() => {
17464
17670
  description: "Close a specific editing session by ID.",
17465
17671
  requiresDocumentContext: false,
17466
17672
  intentName: "close_session",
17467
- sdkMetadata: { mutates: false, idempotency: "conditional", supportsTrackedMode: false, supportsDryRun: false },
17673
+ sdkMetadata: { mutates: true, idempotency: "conditional", supportsTrackedMode: false, supportsDryRun: false },
17468
17674
  outputSchema: {
17469
17675
  type: "object",
17470
17676
  properties: {
@@ -17492,7 +17698,7 @@ var init_cli_only_operation_definitions = __esm(() => {
17492
17698
  description: "Set the default session for subsequent commands.",
17493
17699
  requiresDocumentContext: false,
17494
17700
  intentName: "set_default_session",
17495
- sdkMetadata: { mutates: false, idempotency: "conditional", supportsTrackedMode: false, supportsDryRun: false },
17701
+ sdkMetadata: { mutates: true, idempotency: "conditional", supportsTrackedMode: false, supportsDryRun: false },
17496
17702
  outputSchema: {
17497
17703
  type: "object",
17498
17704
  properties: {
@@ -38237,7 +38443,7 @@ var init_remark_gfm_z_sDF4ss_es = __esm(() => {
38237
38443
  emptyOptions2 = {};
38238
38444
  });
38239
38445
 
38240
- // ../../packages/superdoc/dist/chunks/SuperConverter-BeR1rqZz.es.js
38446
+ // ../../packages/superdoc/dist/chunks/SuperConverter-Cw5CEerM.es.js
38241
38447
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
38242
38448
  const fieldValue = extension$1.config[field];
38243
38449
  if (typeof fieldValue === "function")
@@ -41780,6 +41986,24 @@ function executeCreateTableOfContents2(adapter, input, options) {
41780
41986
  validateTargetOnlyCreateLocation2(at, "create.tableOfContents");
41781
41987
  return adapter.tableOfContents(normalized, normalizeMutationOptions2(options));
41782
41988
  }
41989
+ function validateBlocksListInput2(input) {
41990
+ if (!input)
41991
+ return;
41992
+ if (input.offset != null && (typeof input.offset !== "number" || input.offset < 0))
41993
+ throw new DocumentApiValidationError2("INVALID_INPUT", "blocks.list offset must be a non-negative number.", { fields: ["offset"] });
41994
+ if (input.limit != null && (typeof input.limit !== "number" || input.limit < 1))
41995
+ throw new DocumentApiValidationError2("INVALID_INPUT", "blocks.list limit must be a positive number.", { fields: ["limit"] });
41996
+ if (input.nodeTypes != null) {
41997
+ if (!Array.isArray(input.nodeTypes) || input.nodeTypes.length === 0)
41998
+ throw new DocumentApiValidationError2("INVALID_INPUT", "blocks.list nodeTypes must be a non-empty array.", { fields: ["nodeTypes"] });
41999
+ for (const nt of input.nodeTypes)
42000
+ if (!VALID_BLOCK_NODE_TYPES2.has(nt))
42001
+ throw new DocumentApiValidationError2("INVALID_INPUT", `blocks.list nodeTypes contains unknown type "${nt}".`, {
42002
+ fields: ["nodeTypes"],
42003
+ nodeType: nt
42004
+ });
42005
+ }
42006
+ }
41783
42007
  function validateBlocksDeleteInput2(input) {
41784
42008
  if (!input || typeof input !== "object")
41785
42009
  throw new DocumentApiValidationError2("INVALID_INPUT", "blocks.delete requires an input object.", { fields: ["input"] });
@@ -41801,10 +42025,35 @@ function validateBlocksDeleteInput2(input) {
41801
42025
  nodeType
41802
42026
  });
41803
42027
  }
42028
+ function validateBlockNodeAddress2(address2, label) {
42029
+ if (!address2 || typeof address2 !== "object")
42030
+ throw new DocumentApiValidationError2("INVALID_INPUT", `blocks.deleteRange requires a ${label} address.`, { fields: [label] });
42031
+ const addr = address2;
42032
+ if (addr.kind !== "block")
42033
+ throw new DocumentApiValidationError2("INVALID_INPUT", `blocks.deleteRange ${label} must have kind "block".`, { fields: [`${label}.kind`] });
42034
+ if (!addr.nodeId || typeof addr.nodeId !== "string")
42035
+ throw new DocumentApiValidationError2("INVALID_INPUT", `blocks.deleteRange ${label} requires a nodeId string.`, { fields: [`${label}.nodeId`] });
42036
+ if (!addr.nodeType || typeof addr.nodeType !== "string")
42037
+ throw new DocumentApiValidationError2("INVALID_INPUT", `blocks.deleteRange ${label} requires a nodeType string.`, { fields: [`${label}.nodeType`] });
42038
+ }
42039
+ function validateBlocksDeleteRangeInput2(input) {
42040
+ if (!input || typeof input !== "object")
42041
+ throw new DocumentApiValidationError2("INVALID_INPUT", "blocks.deleteRange requires an input object.", { fields: ["input"] });
42042
+ validateBlockNodeAddress2(input.start, "start");
42043
+ validateBlockNodeAddress2(input.end, "end");
42044
+ }
42045
+ function executeBlocksList2(adapter, input) {
42046
+ validateBlocksListInput2(input);
42047
+ return adapter.list(input);
42048
+ }
41804
42049
  function executeBlocksDelete2(adapter, input, options) {
41805
42050
  validateBlocksDeleteInput2(input);
41806
42051
  return adapter.delete(input, normalizeMutationOptions2(options));
41807
42052
  }
42053
+ function executeBlocksDeleteRange2(adapter, input, options) {
42054
+ validateBlocksDeleteRangeInput2(input);
42055
+ return adapter.deleteRange(input, normalizeMutationOptions2(options));
42056
+ }
41808
42057
  function executeTrackChangesList2(adapter, input) {
41809
42058
  return adapter.list(input);
41810
42059
  }
@@ -41865,7 +42114,9 @@ function buildDispatchTable2(api) {
41865
42114
  insert: (input, options) => api.insert(input, options),
41866
42115
  replace: (input, options) => api.replace(input, options),
41867
42116
  delete: (input, options) => api.delete(input, options),
42117
+ "blocks.list": (input) => api.blocks.list(input),
41868
42118
  "blocks.delete": (input, options) => api.blocks.delete(input, options),
42119
+ "blocks.deleteRange": (input, options) => api.blocks.deleteRange(input, options),
41869
42120
  "format.apply": (input, options) => api.format.apply(input, options),
41870
42121
  ...formatInlineAliasDispatch,
41871
42122
  "styles.paragraph.setStyle": (input, options) => api.styles.paragraph.setStyle(input, options),
@@ -43678,9 +43929,17 @@ function createDocumentApi2(adapters) {
43678
43929
  return executeTrackChangesDecide2(adapters.trackChanges, input, options);
43679
43930
  }
43680
43931
  },
43681
- blocks: { delete(input, options) {
43682
- return executeBlocksDelete2(adapters.blocks, input, options);
43683
- } },
43932
+ blocks: {
43933
+ list(input) {
43934
+ return executeBlocksList2(adapters.blocks, input);
43935
+ },
43936
+ delete(input, options) {
43937
+ return executeBlocksDelete2(adapters.blocks, input, options);
43938
+ },
43939
+ deleteRange(input, options) {
43940
+ return executeBlocksDeleteRange2(adapters.blocks, input, options);
43941
+ }
43942
+ },
43684
43943
  create: {
43685
43944
  paragraph(input, options) {
43686
43945
  return executeCreateParagraph2(adapters.create, input, options);
@@ -62721,7 +62980,7 @@ var isRegExp = (value) => {
62721
62980
  tracked: false,
62722
62981
  carrier: runAttributeCarrier2(runPropertyKey ?? key),
62723
62982
  schema
62724
- }), INLINE_PROPERTY_REGISTRY2, INLINE_PROPERTY_KEY_SET2, INLINE_PROPERTY_BY_KEY2, UNDERLINE_OBJECT_ALLOWED_KEYS2, SHADING_ALLOWED_KEYS2, BORDER_ALLOWED_KEYS2, FIT_TEXT_ALLOWED_KEYS2, LANG_ALLOWED_KEYS2, RFONTS_ALLOWED_KEYS2, EAST_ASIAN_LAYOUT_ALLOWED_KEYS2, STYLISTIC_SET_ALLOWED_KEYS2, VERT_ALIGN_VALUES2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_NOT_FOUND_COMMAND2, T_NOT_FOUND_COMMAND_TRACKED2, T_IMAGE_COMMAND2, T_CC_READ2, T_CC_MUTATION2, T_CC_TYPED2, T_CC_TYPED_READ2, T_CC_RAW2, T_QUERY_MATCH2, T_SECTION_CREATE2, T_SECTION_READ2, T_PARAGRAPH_MUTATION2, T_SECTION_MUTATION2, T_SECTION_SETTINGS_MUTATION2, T_HEADER_FOOTER_MUTATION2, T_REF_READ_LIST2, T_REF_MUTATION2, T_REF_MUTATION_REMOVE2, T_REF_INSERT2, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG3, PARAGRAPH_ALIGNMENTS2, TAB_STOP_ALIGNMENTS2, TAB_STOP_LEADERS2, BORDER_SIDES2, CLEAR_BORDER_SIDES2, LINE_RULES2, PARAGRAPH_BLOCK_TYPES2, SET_STYLE_KEYS2, CLEAR_STYLE_KEYS2, RESET_DIRECT_FORMATTING_KEYS2, SET_ALIGNMENT_KEYS2, CLEAR_ALIGNMENT_KEYS2, SET_INDENTATION_KEYS2, CLEAR_INDENTATION_KEYS2, SET_SPACING_KEYS2, CLEAR_SPACING_KEYS2, SET_KEEP_OPTIONS_KEYS2, SET_OUTLINE_LEVEL_KEYS2, SET_FLOW_OPTIONS_KEYS2, SET_TAB_STOP_KEYS2, CLEAR_TAB_STOP_KEYS2, CLEAR_ALL_TAB_STOPS_KEYS2, SET_BORDER_KEYS2, CLEAR_BORDER_KEYS2, SET_SHADING_KEYS2, CLEAR_SHADING_KEYS2, ST_ON_OFF_ON_VALUES2, ST_ON_OFF_OFF_VALUES2, ST_UNDERLINE_VALUES2, ST_UNDERLINE_VALUE_SET2, ST_VERTICAL_ALIGN_RUN2, ST_EM2, ST_TEXT_ALIGNMENT2, ST_TEXT_DIRECTION2, ST_TEXTBOX_TIGHT_WRAP2, ST_TEXT_TRANSFORM2, ST_JUSTIFICATION2, FONT_FAMILY_SCHEMA2, COLOR_SCHEMA2, SPACING_SCHEMA2, INDENT_SCHEMA2, UNDERLINE_SCHEMA2, BORDER_PROPERTIES_SCHEMA2, SHADING_SCHEMA2, LANG_SCHEMA2, EAST_ASIAN_LAYOUT_SCHEMA2, FIT_TEXT_SCHEMA2, NUMBERING_PROPERTIES_SCHEMA2, FRAME_PR_SCHEMA2, PARAGRAPH_BORDERS_SCHEMA2, TAB_STOP_SCHEMA2, PROPERTY_REGISTRY3, ALLOWED_KEYS_BY_CHANNEL2, PROPERTY_INDEX2, EXCLUDED_KEYS2, INPUT_ALLOWED_KEYS2, TARGET_ALLOWED_KEYS2, OPTIONS_ALLOWED_KEYS2, VALID_CHANNELS2, Z_ORDER_RELATIVE_HEIGHT_MAX2 = 4294967295, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, paragraphTargetSchema2, sectionAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, entityAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, textSelectorSchema2, nodeSelectorSchema2, sdSelectorSchema2, sdAddressSchema2, sdMutationResolutionSchema2, sdMutationSuccessSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, sectionBreakTypeSchema2, sectionOrientationSchema2, sectionVerticalAlignSchema2, sectionDirectionSchema2, sectionHeaderFooterKindSchema2, sectionHeaderFooterVariantSchema2, sectionLineNumberRestartSchema2, sectionPageNumberFormatSchema2, sectionRangeDomainSchema2, sectionPageMarginsSchema2, sectionHeaderFooterMarginsSchema2, sectionPageSetupSchema2, sectionColumnsSchema2, sectionLineNumberingSchema2, sectionPageNumberingSchema2, sectionHeaderFooterRefsSchema2, sectionBorderSpecSchema2, sectionPageBordersSchema2, sectionMutationSuccessSchema2, documentMutationSuccessSchema2, paragraphMutationTargetSchema2, paragraphMutationSuccessSchema2, createSectionBreakSuccessSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, inlinePropertyCapabilitySchema2, formatCapabilitiesSchema2, planEngineCapabilitiesSchema2, tableCreateLocationSchema2, formatInlineAliasOperationSchemas2, tocMutationFailureSchema2, tocMutationSuccessSchema2, tocEntryMutationFailureSchema2, tocEntryMutationSuccessSchema2, hyperlinkTargetSchema2, hyperlinkReadPropertiesSchema2, hyperlinkSpecSchema2, hyperlinkPatchSchema2, hyperlinkDomainSchema2, hyperlinkMutationSuccessSchema2, hyperlinkMutationFailureSchema2, contentControlTargetSchema2, contentControlMutationSuccessSchema2, contentControlMutationFailureSchema2, ccListResultSchema2, ccInfoSchema2, refFailureSchema2, bookmarkAddressSchema2, bookmarkMutation2, footnoteAddressSchema2, footnoteConfigScopeSchema2, footnoteNumberingSchema2, footnoteMutation2, footnoteConfig2, crossRefAddressSchema2, crossRefTargetSchema2, crossRefDisplaySchema2, crossRefMutation2, indexAddressSchema2, indexEntryAddressSchema2, indexConfigSchema2, indexEntryDataSchema2, indexEntryPatchSchema2, indexMutation2, indexEntryMutation2, captionAddressSchema2, captionMutation2, captionConfig2, fieldAddressSchema2, fieldMutation2, citationAddressSchema2, citationSourceAddressSchema2, bibliographyAddressSchema2, citationMutation2, citationSourceMutation2, bibliographyMutation2, citationPersonSchema2, citationSourceFieldsSchema2, tocCreateLocationSchema2, authoritiesAddressSchema2, authorityEntryAddressSchema2, authoritiesConfigSchema2, authorityEntryDataSchema2, authorityEntryPatchSchema2, authoritiesMutation2, authorityEntryMutation2, GROUP_METADATA2, STEP_OP_CATALOG_UNFROZEN2, PUBLIC_STEP_OP_CATALOG_UNFROZEN2, PUBLIC_MUTATION_STEP_OP_IDS2, PUBLIC_MUTATION_STEP_OP_SET2, CAPABILITY_REASON_CODES2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, CONTENT_KIND_SET2, INLINE_KIND_SET2, LEGACY_TOP_LEVEL_TYPES2, LEGACY_INSERT_ALLOWED_KEYS2, STRUCTURAL_INSERT_ALLOWED_KEYS2, VALID_INSERT_TYPES2, LEGACY_REPLACE_ALLOWED_KEYS2, STRUCTURAL_REPLACE_ALLOWED_KEYS2, SECTION_BREAK_TYPES$1, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, TABLE_LOCATOR_OPS2, ROW_LOCATOR_OPS2, COLUMN_LOCATOR_OPS2, MERGE_RANGE_LOCATOR_OPS2, HEADER_FOOTER_KINDS$1, HEADER_FOOTER_VARIANTS$1, DEFAULT_SECTIONS_LIST_LIMIT2 = 250, SECTION_BREAK_TYPES3, SECTION_ORIENTATIONS2, SECTION_VERTICAL_ALIGNS2, SECTION_DIRECTIONS2, HEADER_FOOTER_KINDS3, HEADER_FOOTER_VARIANTS3, LINE_NUMBER_RESTARTS2, PAGE_NUMBER_FORMATS2, PAGE_BORDER_DISPLAYS2, PAGE_BORDER_OFFSET_FROM_VALUES2, PAGE_BORDER_Z_ORDER_VALUES2, VALID_WRAP_TYPES2, VALID_WRAP_SIDES2, VALID_IMAGE_SIZE_UNITS2, PATCH_FIELDS2, ADAPTER_GATED_PREFIXES2, _buffers, _defaultCollectionId = null, _nextCollectionId = 1, generateV2HandlerEntity = (handlerName, translator$215) => ({
62983
+ }), INLINE_PROPERTY_REGISTRY2, INLINE_PROPERTY_KEY_SET2, INLINE_PROPERTY_BY_KEY2, UNDERLINE_OBJECT_ALLOWED_KEYS2, SHADING_ALLOWED_KEYS2, BORDER_ALLOWED_KEYS2, FIT_TEXT_ALLOWED_KEYS2, LANG_ALLOWED_KEYS2, RFONTS_ALLOWED_KEYS2, EAST_ASIAN_LAYOUT_ALLOWED_KEYS2, STYLISTIC_SET_ALLOWED_KEYS2, VERT_ALIGN_VALUES2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_NOT_FOUND_COMMAND2, T_NOT_FOUND_COMMAND_TRACKED2, T_IMAGE_COMMAND2, T_CC_READ2, T_CC_MUTATION2, T_CC_TYPED2, T_CC_TYPED_READ2, T_CC_RAW2, T_QUERY_MATCH2, T_SECTION_CREATE2, T_SECTION_READ2, T_PARAGRAPH_MUTATION2, T_SECTION_MUTATION2, T_SECTION_SETTINGS_MUTATION2, T_HEADER_FOOTER_MUTATION2, T_REF_READ_LIST2, T_REF_MUTATION2, T_REF_MUTATION_REMOVE2, T_REF_INSERT2, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG3, PARAGRAPH_ALIGNMENTS2, TAB_STOP_ALIGNMENTS2, TAB_STOP_LEADERS2, BORDER_SIDES2, CLEAR_BORDER_SIDES2, LINE_RULES2, PARAGRAPH_BLOCK_TYPES2, SET_STYLE_KEYS2, CLEAR_STYLE_KEYS2, RESET_DIRECT_FORMATTING_KEYS2, SET_ALIGNMENT_KEYS2, CLEAR_ALIGNMENT_KEYS2, SET_INDENTATION_KEYS2, CLEAR_INDENTATION_KEYS2, SET_SPACING_KEYS2, CLEAR_SPACING_KEYS2, SET_KEEP_OPTIONS_KEYS2, SET_OUTLINE_LEVEL_KEYS2, SET_FLOW_OPTIONS_KEYS2, SET_TAB_STOP_KEYS2, CLEAR_TAB_STOP_KEYS2, CLEAR_ALL_TAB_STOPS_KEYS2, SET_BORDER_KEYS2, CLEAR_BORDER_KEYS2, SET_SHADING_KEYS2, CLEAR_SHADING_KEYS2, ST_ON_OFF_ON_VALUES2, ST_ON_OFF_OFF_VALUES2, ST_UNDERLINE_VALUES2, ST_UNDERLINE_VALUE_SET2, ST_VERTICAL_ALIGN_RUN2, ST_EM2, ST_TEXT_ALIGNMENT2, ST_TEXT_DIRECTION2, ST_TEXTBOX_TIGHT_WRAP2, ST_TEXT_TRANSFORM2, ST_JUSTIFICATION2, FONT_FAMILY_SCHEMA2, COLOR_SCHEMA2, SPACING_SCHEMA2, INDENT_SCHEMA2, UNDERLINE_SCHEMA2, BORDER_PROPERTIES_SCHEMA2, SHADING_SCHEMA2, LANG_SCHEMA2, EAST_ASIAN_LAYOUT_SCHEMA2, FIT_TEXT_SCHEMA2, NUMBERING_PROPERTIES_SCHEMA2, FRAME_PR_SCHEMA2, PARAGRAPH_BORDERS_SCHEMA2, TAB_STOP_SCHEMA2, PROPERTY_REGISTRY3, ALLOWED_KEYS_BY_CHANNEL2, PROPERTY_INDEX2, EXCLUDED_KEYS2, INPUT_ALLOWED_KEYS2, TARGET_ALLOWED_KEYS2, OPTIONS_ALLOWED_KEYS2, VALID_CHANNELS2, Z_ORDER_RELATIVE_HEIGHT_MAX2 = 4294967295, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, paragraphTargetSchema2, sectionAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, entityAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, textSelectorSchema2, nodeSelectorSchema2, sdSelectorSchema2, sdAddressSchema2, sdMutationResolutionSchema2, sdMutationSuccessSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, sectionBreakTypeSchema2, sectionOrientationSchema2, sectionVerticalAlignSchema2, sectionDirectionSchema2, sectionHeaderFooterKindSchema2, sectionHeaderFooterVariantSchema2, sectionLineNumberRestartSchema2, sectionPageNumberFormatSchema2, sectionRangeDomainSchema2, sectionPageMarginsSchema2, sectionHeaderFooterMarginsSchema2, sectionPageSetupSchema2, sectionColumnsSchema2, sectionLineNumberingSchema2, sectionPageNumberingSchema2, sectionHeaderFooterRefsSchema2, sectionBorderSpecSchema2, sectionPageBordersSchema2, sectionMutationSuccessSchema2, documentMutationSuccessSchema2, paragraphMutationTargetSchema2, paragraphMutationSuccessSchema2, createSectionBreakSuccessSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, inlinePropertyCapabilitySchema2, formatCapabilitiesSchema2, planEngineCapabilitiesSchema2, tableCreateLocationSchema2, formatInlineAliasOperationSchemas2, tocMutationFailureSchema2, tocMutationSuccessSchema2, tocEntryMutationFailureSchema2, tocEntryMutationSuccessSchema2, hyperlinkTargetSchema2, hyperlinkReadPropertiesSchema2, hyperlinkSpecSchema2, hyperlinkPatchSchema2, hyperlinkDomainSchema2, hyperlinkMutationSuccessSchema2, hyperlinkMutationFailureSchema2, contentControlTargetSchema2, contentControlMutationSuccessSchema2, contentControlMutationFailureSchema2, ccListResultSchema2, ccInfoSchema2, refFailureSchema2, bookmarkAddressSchema2, bookmarkMutation2, footnoteAddressSchema2, footnoteConfigScopeSchema2, footnoteNumberingSchema2, footnoteMutation2, footnoteConfig2, crossRefAddressSchema2, crossRefTargetSchema2, crossRefDisplaySchema2, crossRefMutation2, indexAddressSchema2, indexEntryAddressSchema2, indexConfigSchema2, indexEntryDataSchema2, indexEntryPatchSchema2, indexMutation2, indexEntryMutation2, captionAddressSchema2, captionMutation2, captionConfig2, fieldAddressSchema2, fieldMutation2, citationAddressSchema2, citationSourceAddressSchema2, bibliographyAddressSchema2, citationMutation2, citationSourceMutation2, bibliographyMutation2, citationPersonSchema2, citationSourceFieldsSchema2, tocCreateLocationSchema2, authoritiesAddressSchema2, authorityEntryAddressSchema2, authoritiesConfigSchema2, authorityEntryDataSchema2, authorityEntryPatchSchema2, authoritiesMutation2, authorityEntryMutation2, GROUP_METADATA2, STEP_OP_CATALOG_UNFROZEN2, PUBLIC_STEP_OP_CATALOG_UNFROZEN2, PUBLIC_MUTATION_STEP_OP_IDS2, PUBLIC_MUTATION_STEP_OP_SET2, CAPABILITY_REASON_CODES2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, CONTENT_KIND_SET2, INLINE_KIND_SET2, LEGACY_TOP_LEVEL_TYPES2, LEGACY_INSERT_ALLOWED_KEYS2, STRUCTURAL_INSERT_ALLOWED_KEYS2, VALID_INSERT_TYPES2, LEGACY_REPLACE_ALLOWED_KEYS2, STRUCTURAL_REPLACE_ALLOWED_KEYS2, SECTION_BREAK_TYPES$1, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, VALID_BLOCK_NODE_TYPES2, TABLE_LOCATOR_OPS2, ROW_LOCATOR_OPS2, COLUMN_LOCATOR_OPS2, MERGE_RANGE_LOCATOR_OPS2, HEADER_FOOTER_KINDS$1, HEADER_FOOTER_VARIANTS$1, DEFAULT_SECTIONS_LIST_LIMIT2 = 250, SECTION_BREAK_TYPES3, SECTION_ORIENTATIONS2, SECTION_VERTICAL_ALIGNS2, SECTION_DIRECTIONS2, HEADER_FOOTER_KINDS3, HEADER_FOOTER_VARIANTS3, LINE_NUMBER_RESTARTS2, PAGE_NUMBER_FORMATS2, PAGE_BORDER_DISPLAYS2, PAGE_BORDER_OFFSET_FROM_VALUES2, PAGE_BORDER_Z_ORDER_VALUES2, VALID_WRAP_TYPES2, VALID_WRAP_SIDES2, VALID_IMAGE_SIZE_UNITS2, PATCH_FIELDS2, ADAPTER_GATED_PREFIXES2, _buffers, _defaultCollectionId = null, _nextCollectionId = 1, generateV2HandlerEntity = (handlerName, translator$215) => ({
62725
62984
  handlerName,
62726
62985
  handler: (params) => {
62727
62986
  const { nodes } = params;
@@ -74601,7 +74860,7 @@ var isRegExp = (value) => {
74601
74860
  state.kern = kernNode.attributes["w:val"];
74602
74861
  }
74603
74862
  }, SuperConverter;
74604
- var init_SuperConverter_BeR1rqZz_es = __esm(() => {
74863
+ var init_SuperConverter_Cw5CEerM_es = __esm(() => {
74605
74864
  init_rolldown_runtime_B2q5OVn9_es();
74606
74865
  init_jszip_ChlR43oI_es();
74607
74866
  init_xml_js_DLE8mr0n_es();
@@ -77533,7 +77792,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
77533
77792
  },
77534
77793
  find: {
77535
77794
  memberPath: "find",
77536
- description: "Search the document for text or node matches using SDM/1 selectors.",
77795
+ description: "Search the document for text or node matches using SDM/1 selectors. Returns discovery-grade results — for mutation targeting, use query.match instead.",
77537
77796
  expectedResult: "Returns an SDFindResult envelope ({ total, limit, offset, items }). Each item is an SDNodeResult ({ node, address }).",
77538
77797
  requiresDocumentContext: true,
77539
77798
  metadata: readOperation2({
@@ -77637,7 +77896,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
77637
77896
  },
77638
77897
  insert: {
77639
77898
  memberPath: "insert",
77640
- description: "Insert content at a target position, or at the end of the document when target is omitted. Accepts two input shapes: legacy string-based (value + type) or structural SDFragment (content). Supports text (default), markdown, and html content types via the `type` field in legacy mode. Structural mode accepts an SDFragment with typed nodes (paragraphs, tables, images, etc.).",
77899
+ description: "Insert inline content at a text position within an existing block, or at the end of the document when target is omitted. This is NOT for creating sibling blocks — use create.paragraph, create.heading, or lists.insert for that. Accepts two input shapes: legacy string-based (value + type) or structural SDFragment (content). Supports text (default), markdown, and html content types via the `type` field in legacy mode. Structural mode accepts an SDFragment with typed nodes (paragraphs, tables, images, etc.).",
77641
77900
  expectedResult: "Returns a TextMutationReceipt with applied status; receipt reports NO_OP if the insertion point is invalid or content is empty.",
77642
77901
  requiresDocumentContext: true,
77643
77902
  metadata: mutationOperation2({
@@ -77726,10 +77985,20 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
77726
77985
  referenceDocPath: "delete.mdx",
77727
77986
  referenceGroup: "core"
77728
77987
  },
77988
+ "blocks.list": {
77989
+ memberPath: "blocks.list",
77990
+ description: "List top-level blocks in document order with IDs, types, and text previews. Supports pagination via offset/limit and optional nodeType filtering.",
77991
+ expectedResult: "Returns a BlocksListResult with total block count, an ordered array of block entries (ordinal, nodeId, nodeType, textPreview, isEmpty), and the current document revision.",
77992
+ requiresDocumentContext: true,
77993
+ metadata: readOperation2({ throws: ["INVALID_INPUT"] }),
77994
+ referenceDocPath: "blocks/list.mdx",
77995
+ referenceGroup: "blocks",
77996
+ essential: true
77997
+ },
77729
77998
  "blocks.delete": {
77730
77999
  memberPath: "blocks.delete",
77731
78000
  description: "Delete an entire block node (paragraph, heading, list item, table, image, or sdt) deterministically.",
77732
- expectedResult: "Returns a BlocksDeleteResult receipt confirming the block was removed from the document.",
78001
+ expectedResult: "Returns a BlocksDeleteResult receipt confirming the block was removed, including a deletedBlock summary with ordinal, nodeType, and textPreview.",
77733
78002
  requiresDocumentContext: true,
77734
78003
  metadata: mutationOperation2({
77735
78004
  idempotency: "conditional",
@@ -77748,6 +78017,28 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
77748
78017
  referenceDocPath: "blocks/delete.mdx",
77749
78018
  referenceGroup: "blocks"
77750
78019
  },
78020
+ "blocks.deleteRange": {
78021
+ memberPath: "blocks.deleteRange",
78022
+ description: "Delete a contiguous range of top-level blocks between two endpoints (inclusive). Both endpoints must be direct children of the document node. Supports dry-run preview.",
78023
+ expectedResult: "Returns a BlocksDeleteRangeResult with deletedCount, deletedBlocks array (each with ordinal, nodeId, nodeType, textPreview), before/after revision, and dryRun flag.",
78024
+ requiresDocumentContext: true,
78025
+ metadata: mutationOperation2({
78026
+ idempotency: "conditional",
78027
+ supportsDryRun: true,
78028
+ supportsTrackedMode: false,
78029
+ possibleFailureCodes: NONE_FAILURES2,
78030
+ throws: [
78031
+ "TARGET_NOT_FOUND",
78032
+ "AMBIGUOUS_TARGET",
78033
+ "INVALID_TARGET",
78034
+ "INVALID_INPUT",
78035
+ "CAPABILITY_UNAVAILABLE",
78036
+ "INTERNAL_ERROR"
78037
+ ]
78038
+ }),
78039
+ referenceDocPath: "blocks/delete-range.mdx",
78040
+ referenceGroup: "blocks"
78041
+ },
77751
78042
  "format.apply": {
77752
78043
  memberPath: "format.apply",
77753
78044
  description: "Apply inline run-property patch changes to the target range with explicit set/clear semantics.",
@@ -77791,7 +78082,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
77791
78082
  },
77792
78083
  "create.paragraph": {
77793
78084
  memberPath: "create.paragraph",
77794
- description: "Create a new paragraph at the target position.",
78085
+ description: "Create a standalone paragraph at the target position. To add a list item, use lists.insert instead.",
77795
78086
  expectedResult: "Returns a CreateParagraphResult with the new paragraph block ID and address.",
77796
78087
  requiresDocumentContext: true,
77797
78088
  metadata: mutationOperation2({
@@ -78497,7 +78788,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
78497
78788
  },
78498
78789
  "lists.insert": {
78499
78790
  memberPath: "lists.insert",
78500
- description: "Insert a new list at the target position.",
78791
+ description: "Insert a new list item before or after an existing list item. The new item inherits the target list context.",
78501
78792
  expectedResult: "Returns a ListsInsertResult with the new list item address and block ID.",
78502
78793
  requiresDocumentContext: true,
78503
78794
  metadata: mutationOperation2({
@@ -79123,7 +79414,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
79123
79414
  },
79124
79415
  "query.match": {
79125
79416
  memberPath: "query.match",
79126
- description: "Deterministic selector-based search with cardinality contracts for mutation targeting.",
79417
+ description: "Deterministic selector-based search returning mutation-grade addresses and text ranges. Use this to discover targets before any mutation.",
79127
79418
  expectedResult: "Returns a QueryMatchOutput with the resolved target address and cardinality metadata.",
79128
79419
  requiresDocumentContext: true,
79129
79420
  metadata: readOperation2({
@@ -80014,7 +80305,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
80014
80305
  "history.undo": {
80015
80306
  memberPath: "history.undo",
80016
80307
  description: "Undo the most recent history-safe mutation in the active editor.",
80017
- expectedResult: "Returns a HistoryActionResult with noop flag and revision before/after; noop is true when the undo stack is empty.",
80308
+ expectedResult: "Returns a HistoryActionResult with noop flag, reason (EMPTY_UNDO_STACK | NO_EFFECT when noop), and revision before/after.",
80018
80309
  requiresDocumentContext: true,
80019
80310
  metadata: mutationOperation2({
80020
80311
  idempotency: "non-idempotent",
@@ -80030,7 +80321,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
80030
80321
  "history.redo": {
80031
80322
  memberPath: "history.redo",
80032
80323
  description: "Redo the most recently undone action in the active editor.",
80033
- expectedResult: "Returns a HistoryActionResult with noop flag and revision before/after; noop is true when the redo stack is empty.",
80324
+ expectedResult: "Returns a HistoryActionResult with noop flag, reason (EMPTY_REDO_STACK | NO_EFFECT when noop), and revision before/after.",
80034
80325
  requiresDocumentContext: true,
80035
80326
  metadata: mutationOperation2({
80036
80327
  idempotency: "non-idempotent",
@@ -84569,13 +84860,107 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
84569
84860
  }, ["target", "text"]), sdMutationResultSchemaFor2("replace"), sdMutationFailureSchemaFor2("replace"), objectSchema2({ target: textAddressSchema2 }, ["target"]), textMutationResultSchemaFor2("delete"), textMutationFailureSchemaFor2("delete"), objectSchema2({
84570
84861
  target: textAddressSchema2,
84571
84862
  inline: buildInlineRunPatchSchema2()
84572
- }, ["target", "inline"]), textMutationResultSchemaFor2("format.apply"), textMutationFailureSchemaFor2("format.apply"), { ...formatInlineAliasOperationSchemas2 }, objectSchema2({ target: deletableBlockNodeAddressSchema2 }, ["target"]), objectSchema2({
84863
+ }, ["target", "inline"]), textMutationResultSchemaFor2("format.apply"), textMutationFailureSchemaFor2("format.apply"), { ...formatInlineAliasOperationSchemas2 }, objectSchema2({
84864
+ offset: {
84865
+ type: "number",
84866
+ minimum: 0
84867
+ },
84868
+ limit: {
84869
+ type: "number",
84870
+ minimum: 1
84871
+ },
84872
+ nodeTypes: {
84873
+ type: "array",
84874
+ items: { enum: [...blockNodeTypeValues2] }
84875
+ }
84876
+ }), objectSchema2({
84877
+ total: { type: "number" },
84878
+ blocks: {
84879
+ type: "array",
84880
+ items: objectSchema2({
84881
+ ordinal: { type: "number" },
84882
+ nodeId: { type: "string" },
84883
+ nodeType: { enum: [...blockNodeTypeValues2] },
84884
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] },
84885
+ isEmpty: { type: "boolean" }
84886
+ }, [
84887
+ "ordinal",
84888
+ "nodeId",
84889
+ "nodeType",
84890
+ "textPreview",
84891
+ "isEmpty"
84892
+ ])
84893
+ },
84894
+ revision: { type: "string" }
84895
+ }, [
84896
+ "total",
84897
+ "blocks",
84898
+ "revision"
84899
+ ]), objectSchema2({ target: deletableBlockNodeAddressSchema2 }, ["target"]), objectSchema2({
84573
84900
  success: { const: true },
84574
- deleted: deletableBlockNodeAddressSchema2
84901
+ deleted: deletableBlockNodeAddressSchema2,
84902
+ deletedBlock: objectSchema2({
84903
+ ordinal: { type: "number" },
84904
+ nodeId: { type: "string" },
84905
+ nodeType: { type: "string" },
84906
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] }
84907
+ })
84575
84908
  }, ["success", "deleted"]), objectSchema2({
84576
84909
  success: { const: true },
84577
- deleted: deletableBlockNodeAddressSchema2
84910
+ deleted: deletableBlockNodeAddressSchema2,
84911
+ deletedBlock: objectSchema2({
84912
+ ordinal: { type: "number" },
84913
+ nodeId: { type: "string" },
84914
+ nodeType: { type: "string" },
84915
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] }
84916
+ })
84578
84917
  }, ["success", "deleted"]), preApplyFailureResultSchemaFor2("blocks.delete"), objectSchema2({
84918
+ start: blockNodeAddressSchema2,
84919
+ end: blockNodeAddressSchema2
84920
+ }, ["start", "end"]), objectSchema2({
84921
+ success: { const: true },
84922
+ deletedCount: { type: "number" },
84923
+ deletedBlocks: {
84924
+ type: "array",
84925
+ items: objectSchema2({
84926
+ ordinal: { type: "number" },
84927
+ nodeId: { type: "string" },
84928
+ nodeType: { type: "string" },
84929
+ textPreview: { oneOf: [{ type: "string" }, { type: "null" }] }
84930
+ }, [
84931
+ "ordinal",
84932
+ "nodeId",
84933
+ "nodeType",
84934
+ "textPreview"
84935
+ ])
84936
+ },
84937
+ revision: objectSchema2({
84938
+ before: { type: "string" },
84939
+ after: { type: "string" }
84940
+ }, ["before", "after"]),
84941
+ dryRun: { type: "boolean" }
84942
+ }, [
84943
+ "success",
84944
+ "deletedCount",
84945
+ "deletedBlocks",
84946
+ "revision",
84947
+ "dryRun"
84948
+ ]), objectSchema2({
84949
+ success: { const: true },
84950
+ deletedCount: { type: "number" },
84951
+ deletedBlocks: { type: "array" },
84952
+ revision: objectSchema2({
84953
+ before: { type: "string" },
84954
+ after: { type: "string" }
84955
+ }, ["before", "after"]),
84956
+ dryRun: { type: "boolean" }
84957
+ }, [
84958
+ "success",
84959
+ "deletedCount",
84960
+ "deletedBlocks",
84961
+ "revision",
84962
+ "dryRun"
84963
+ ]), preApplyFailureResultSchemaFor2("blocks.deleteRange"), objectSchema2({
84579
84964
  target: paragraphTargetSchema2,
84580
84965
  styleId: {
84581
84966
  type: "string",
@@ -87232,6 +87617,7 @@ var init_SuperConverter_BeR1rqZz_es = __esm(() => {
87232
87617
  ];
87233
87618
  SUPPORTED_DELETE_NODE_TYPES2 = new Set(DELETABLE_BLOCK_NODE_TYPES2);
87234
87619
  REJECTED_DELETE_NODE_TYPES2 = new Set(["tableRow", "tableCell"]);
87620
+ VALID_BLOCK_NODE_TYPES2 = new Set(BLOCK_NODE_TYPES2);
87235
87621
  TABLE_LOCATOR_OPS2 = new Set([
87236
87622
  "tables.delete",
87237
87623
  "tables.clearContents",
@@ -134686,7 +135072,7 @@ var init_remark_gfm_CjV8kaUy_es = __esm(() => {
134686
135072
  init_remark_gfm_z_sDF4ss_es();
134687
135073
  });
134688
135074
 
134689
- // ../../packages/superdoc/dist/chunks/src-BnjrN0Yi.es.js
135075
+ // ../../packages/superdoc/dist/chunks/src-Gw0CeXiy.es.js
134690
135076
  function deleteProps(obj, propOrProps) {
134691
135077
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
134692
135078
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -143217,7 +143603,18 @@ function buildTextMutationResolution(input2) {
143217
143603
  };
143218
143604
  }
143219
143605
  function findTextBlockCandidates(index2, blockId) {
143220
- return index2.candidates.filter((candidate) => candidate.nodeId === blockId && isTextBlockCandidate(candidate));
143606
+ const primary = index2.candidates.filter((c) => c.nodeId === blockId && isTextBlockCandidate(c));
143607
+ if (primary.length > 0)
143608
+ return primary;
143609
+ try {
143610
+ const resolved = findBlockByNodeIdOnly(index2, blockId);
143611
+ if (isTextBlockCandidate(resolved))
143612
+ return [resolved];
143613
+ } catch (e) {
143614
+ if (e instanceof DocumentApiAdapterError && e.code === "AMBIGUOUS_TARGET")
143615
+ throw e;
143616
+ }
143617
+ return [];
143221
143618
  }
143222
143619
  function assertUnambiguous(matches2, blockId) {
143223
143620
  if (matches2.length > 1)
@@ -148095,6 +148492,30 @@ function resolveBlockInsertionPos(editor, anchorBlockId, position4, stepId) {
148095
148492
  throw planError("TARGET_NOT_FOUND", `block "${anchorBlockId}" not found`, stepId);
148096
148493
  return position4 === "before" ? candidate.pos : candidate.end;
148097
148494
  }
148495
+ function resolveCreateAnchor(editor, target, position4, stepId) {
148496
+ const index2 = getBlockIndex(editor);
148497
+ let candidate;
148498
+ try {
148499
+ candidate = findBlockByNodeIdOnly(index2, target.nodeId);
148500
+ } catch (e) {
148501
+ if (e instanceof Error && "code" in e)
148502
+ throw planError(e.code, e.message, stepId, e.details);
148503
+ throw e;
148504
+ }
148505
+ if (target.nodeType && candidate.nodeType !== target.nodeType) {
148506
+ const remediation = candidate.nodeType === "listItem" ? "Use lists.insert to add an item to a list sequence." : `The block is a ${candidate.nodeType}, not a ${target.nodeType}.`;
148507
+ throw planError("INVALID_TARGET", `Expected ${target.nodeType}:${target.nodeId} but found ${candidate.nodeType}:${candidate.nodeId}.`, stepId, {
148508
+ requestedNodeType: target.nodeType,
148509
+ actualNodeType: candidate.nodeType,
148510
+ nodeId: target.nodeId,
148511
+ remediation
148512
+ });
148513
+ }
148514
+ return {
148515
+ pos: position4 === "before" ? candidate.pos : candidate.end,
148516
+ anchor: candidate
148517
+ };
148518
+ }
148098
148519
  function applyDirectMutationMeta(tr) {
148099
148520
  tr.setMeta("inputType", "programmatic");
148100
148521
  tr.setMeta("skipTrackChanges", true);
@@ -152399,13 +152820,14 @@ function collectTrackInsertRefsInRange(editor, from$1, to) {
152399
152820
  entityId: id2
152400
152821
  }));
152401
152822
  }
152402
- function resolveCreateInsertPosition(editor, at, operationLabel) {
152823
+ function resolveCreateInsertPosition(editor, at) {
152403
152824
  const location$1 = at ?? { kind: "documentEnd" };
152404
152825
  if (location$1.kind === "documentStart")
152405
152826
  return 0;
152406
152827
  if (location$1.kind === "documentEnd")
152407
152828
  return editor.state.doc.content.size;
152408
- return resolveBlockInsertionPos(editor, location$1.target.nodeId, location$1.kind);
152829
+ const { pos } = resolveCreateAnchor(editor, location$1.target, location$1.kind);
152830
+ return pos;
152409
152831
  }
152410
152832
  function resolveCreatedBlock(editor, nodeType, blockId) {
152411
152833
  const index2 = getBlockIndex(editor);
@@ -152468,7 +152890,7 @@ function createParagraphWrapper(editor, input2, options) {
152468
152890
  const mode = options?.changeMode ?? "direct";
152469
152891
  if (mode === "tracked")
152470
152892
  ensureTrackedCapability(editor, { operation: "create.paragraph" });
152471
- const insertAt = resolveCreateInsertPosition(editor, input2.at, "paragraph");
152893
+ const insertAt = resolveCreateInsertPosition(editor, input2.at);
152472
152894
  if (options?.dryRun) {
152473
152895
  if (!editor.can().insertParagraphAt?.({
152474
152896
  pos: insertAt,
@@ -152500,6 +152922,7 @@ function createParagraphWrapper(editor, input2, options) {
152500
152922
  };
152501
152923
  }
152502
152924
  const paragraphId = v4_default();
152925
+ let canonicalId = paragraphId;
152503
152926
  let trackedChangeRefs;
152504
152927
  if (executeDomainCommand(editor, () => {
152505
152928
  const didApply = insertParagraphAt$1({
@@ -152512,6 +152935,7 @@ function createParagraphWrapper(editor, input2, options) {
152512
152935
  clearIndexCache(editor);
152513
152936
  try {
152514
152937
  const paragraph2 = resolveCreatedBlock(editor, "paragraph", paragraphId);
152938
+ canonicalId = paragraph2.nodeId;
152515
152939
  if (mode === "tracked")
152516
152940
  trackedChangeRefs = collectTrackInsertRefsInRange(editor, paragraph2.pos, paragraph2.end);
152517
152941
  } catch (e) {
@@ -152528,14 +152952,14 @@ function createParagraphWrapper(editor, input2, options) {
152528
152952
  message: "Paragraph creation could not be applied at the requested location."
152529
152953
  }
152530
152954
  };
152531
- return buildParagraphCreateSuccess(paragraphId, trackedChangeRefs);
152955
+ return buildParagraphCreateSuccess(canonicalId, trackedChangeRefs);
152532
152956
  }
152533
152957
  function createHeadingWrapper(editor, input2, options) {
152534
152958
  const insertHeadingAt$1 = requireEditorCommand(editor.commands?.insertHeadingAt, "create.heading");
152535
152959
  const mode = options?.changeMode ?? "direct";
152536
152960
  if (mode === "tracked")
152537
152961
  ensureTrackedCapability(editor, { operation: "create.heading" });
152538
- const insertAt = resolveCreateInsertPosition(editor, input2.at, "heading");
152962
+ const insertAt = resolveCreateInsertPosition(editor, input2.at);
152539
152963
  if (options?.dryRun) {
152540
152964
  if (!editor.can().insertHeadingAt?.({
152541
152965
  pos: insertAt,
@@ -152568,6 +152992,7 @@ function createHeadingWrapper(editor, input2, options) {
152568
152992
  };
152569
152993
  }
152570
152994
  const headingId = v4_default();
152995
+ let canonicalId = headingId;
152571
152996
  let trackedChangeRefs;
152572
152997
  if (executeDomainCommand(editor, () => {
152573
152998
  const didApply = insertHeadingAt$1({
@@ -152581,6 +153006,7 @@ function createHeadingWrapper(editor, input2, options) {
152581
153006
  clearIndexCache(editor);
152582
153007
  try {
152583
153008
  const heading3 = resolveCreatedBlock(editor, "heading", headingId);
153009
+ canonicalId = heading3.nodeId;
152584
153010
  if (mode === "tracked")
152585
153011
  trackedChangeRefs = collectTrackInsertRefsInRange(editor, heading3.pos, heading3.end);
152586
153012
  } catch (e) {
@@ -152597,13 +153023,23 @@ function createHeadingWrapper(editor, input2, options) {
152597
153023
  message: "Heading creation could not be applied at the requested location."
152598
153024
  }
152599
153025
  };
152600
- return buildHeadingCreateSuccess(headingId, trackedChangeRefs);
153026
+ return buildHeadingCreateSuccess(canonicalId, trackedChangeRefs);
152601
153027
  }
152602
- function validateTargetNodeType(nodeType) {
152603
- if (REJECTED_NODE_TYPES.has(nodeType))
152604
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
152605
- if (!SUPPORTED_NODE_TYPES.has(nodeType))
152606
- throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, { nodeType });
153028
+ function extractTextPreview(node3) {
153029
+ if (!node3.isTextblock)
153030
+ return null;
153031
+ const text5 = node3.textContent;
153032
+ if (text5.length <= TEXT_PREVIEW_MAX_LENGTH)
153033
+ return text5;
153034
+ return text5.slice(0, TEXT_PREVIEW_MAX_LENGTH);
153035
+ }
153036
+ function toBlockSummary(candidate, ordinal) {
153037
+ return {
153038
+ ordinal,
153039
+ nodeId: candidate.nodeId,
153040
+ nodeType: candidate.nodeType,
153041
+ textPreview: extractTextPreview(candidate.node)
153042
+ };
152607
153043
  }
152608
153044
  function resolveSdBlockId(candidate) {
152609
153045
  const sdBlockId = candidate.node.attrs?.sdBlockId;
@@ -152611,6 +153047,12 @@ function resolveSdBlockId(candidate) {
152611
153047
  return sdBlockId;
152612
153048
  throw new DocumentApiAdapterError("INTERNAL_ERROR", "Resolved block candidate is missing sdBlockId attribute. This indicates a schema/extension invariant violation.", { attrs: candidate.node.attrs });
152613
153049
  }
153050
+ function validateDeleteTargetNodeType(nodeType) {
153051
+ if (REJECTED_DELETE_NODE_TYPES3.has(nodeType))
153052
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
153053
+ if (!SUPPORTED_DELETE_NODE_TYPES3.has(nodeType))
153054
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, { nodeType });
153055
+ }
152614
153056
  function validateCommandLayerUniqueness(editor, sdBlockId) {
152615
153057
  const getBlockNodeById = editor.helpers?.blockNode?.getBlockNodeById;
152616
153058
  if (typeof getBlockNodeById !== "function")
@@ -152624,17 +153066,60 @@ function validateCommandLayerUniqueness(editor, sdBlockId) {
152624
153066
  count: matches2.length
152625
153067
  });
152626
153068
  }
153069
+ function collectTopLevelBlocks(editor) {
153070
+ const doc$2 = editor.state.doc;
153071
+ const results = [];
153072
+ let offset$1 = 0;
153073
+ for (let i$1 = 0;i$1 < doc$2.childCount; i$1++) {
153074
+ const child = doc$2.child(i$1);
153075
+ const nodeType = mapBlockNodeType(child);
153076
+ const pos = offset$1;
153077
+ if (nodeType) {
153078
+ const nodeId = resolveBlockNodeId(child, pos, nodeType);
153079
+ if (nodeId)
153080
+ results.push({
153081
+ node: child,
153082
+ pos,
153083
+ end: pos + child.nodeSize,
153084
+ nodeType,
153085
+ nodeId
153086
+ });
153087
+ }
153088
+ offset$1 += child.nodeSize;
153089
+ }
153090
+ return results;
153091
+ }
153092
+ function blocksListWrapper(editor, input2) {
153093
+ const topLevel = collectTopLevelBlocks(editor);
153094
+ const filtered = input2?.nodeTypes ? topLevel.filter((b$1) => input2.nodeTypes.includes(b$1.nodeType)) : topLevel;
153095
+ const total = filtered.length;
153096
+ const offset$1 = input2?.offset ?? 0;
153097
+ const limit = input2?.limit ?? total;
153098
+ return {
153099
+ total,
153100
+ blocks: filtered.slice(offset$1, offset$1 + limit).map((candidate, i$1) => ({
153101
+ ordinal: offset$1 + i$1,
153102
+ nodeId: candidate.nodeId,
153103
+ nodeType: candidate.nodeType,
153104
+ textPreview: extractTextPreview(candidate.node),
153105
+ isEmpty: candidate.node.textContent.length === 0
153106
+ })),
153107
+ revision: getRevision(editor)
153108
+ };
153109
+ }
152627
153110
  function blocksDeleteWrapper(editor, input2, options) {
152628
153111
  rejectTrackedMode("blocks.delete", options);
152629
153112
  const candidate = findBlockByIdStrict(getBlockIndex(editor), input2.target);
152630
- validateTargetNodeType(candidate.nodeType);
153113
+ validateDeleteTargetNodeType(candidate.nodeType);
153114
+ const deletedBlock = toBlockSummary(candidate, collectTopLevelBlocks(editor).findIndex((b$1) => b$1.nodeId === candidate.nodeId && b$1.nodeType === candidate.nodeType));
152631
153115
  const sdBlockId = resolveSdBlockId(candidate);
152632
153116
  const deleteBlockNodeById = requireEditorCommand(editor.commands?.deleteBlockNodeById, "blocks.delete");
152633
153117
  validateCommandLayerUniqueness(editor, sdBlockId);
152634
153118
  if (options?.dryRun)
152635
153119
  return {
152636
153120
  success: true,
152637
- deleted: input2.target
153121
+ deleted: input2.target,
153122
+ deletedBlock
152638
153123
  };
152639
153124
  if (executeDomainCommand(editor, () => {
152640
153125
  const didApply = deleteBlockNodeById(sdBlockId);
@@ -152648,7 +153133,116 @@ function blocksDeleteWrapper(editor, input2, options) {
152648
153133
  });
152649
153134
  return {
152650
153135
  success: true,
152651
- deleted: input2.target
153136
+ deleted: input2.target,
153137
+ deletedBlock
153138
+ };
153139
+ }
153140
+ function hasSectionBreak(candidate) {
153141
+ const pPr = candidate.node.attrs?.paragraphProperties;
153142
+ return pPr?.sectPr != null && typeof pPr.sectPr === "object";
153143
+ }
153144
+ function resolveTopLevelOrdinal(topLevel, candidate, label) {
153145
+ const idx = topLevel.findIndex((b$1) => b$1.nodeId === candidate.nodeId && b$1.nodeType === candidate.nodeType);
153146
+ if (idx !== -1)
153147
+ return idx;
153148
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange ${label} resolved to a nested block (not a direct document child). Only top-level blocks are supported.`, {
153149
+ nodeId: candidate.nodeId,
153150
+ nodeType: candidate.nodeType
153151
+ });
153152
+ }
153153
+ function resolveRangeEndpoint(index2, address2, label) {
153154
+ const key$1 = `${address2.nodeType}:${address2.nodeId}`;
153155
+ if (index2.ambiguous.has(key$1))
153156
+ throw new DocumentApiAdapterError("AMBIGUOUS_TARGET", `Multiple blocks share key "${key$1}".`, { target: address2 });
153157
+ const candidate = index2.byId.get(key$1);
153158
+ if (candidate)
153159
+ return candidate;
153160
+ const mismatch = index2.candidates.find((c) => c.nodeId === address2.nodeId);
153161
+ if (mismatch)
153162
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange ${label} expected ${address2.nodeType}:${address2.nodeId} but resolved to ${mismatch.nodeType}.`, {
153163
+ expected: address2.nodeType,
153164
+ actual: mismatch.nodeType,
153165
+ nodeId: address2.nodeId
153166
+ });
153167
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Block "${key$1}" was not found.`, { target: address2 });
153168
+ }
153169
+ function rejectUnmappedNodesInRange(doc$2, rangeBlocks) {
153170
+ if (rangeBlocks.length === 0)
153171
+ return;
153172
+ const rangeFrom = rangeBlocks[0].pos;
153173
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
153174
+ const recognizedPositions = new Set(rangeBlocks.map((b$1) => b$1.pos));
153175
+ let offset$1 = 0;
153176
+ for (let i$1 = 0;i$1 < doc$2.childCount; i$1++) {
153177
+ const child = doc$2.child(i$1);
153178
+ const childEnd = offset$1 + child.nodeSize;
153179
+ if (childEnd > rangeFrom && offset$1 < rangeTo && !recognizedPositions.has(offset$1)) {
153180
+ if (!RANGE_DELETE_SAFE_NODE_TYPES.has(child.type.name))
153181
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange cannot delete range: unrecognized node "${child.type.name}" at position ${offset$1} would be silently removed.`, {
153182
+ pmNodeType: child.type.name,
153183
+ pos: offset$1
153184
+ });
153185
+ }
153186
+ offset$1 = childEnd;
153187
+ }
153188
+ }
153189
+ function blocksDeleteRangeWrapper(editor, input2, options) {
153190
+ rejectTrackedMode("blocks.deleteRange", options);
153191
+ const topLevel = collectTopLevelBlocks(editor);
153192
+ const index2 = getBlockIndex(editor);
153193
+ const startCandidate = resolveRangeEndpoint(index2, input2.start, "start");
153194
+ const endCandidate = resolveRangeEndpoint(index2, input2.end, "end");
153195
+ const startOrdinal = resolveTopLevelOrdinal(topLevel, startCandidate, "start");
153196
+ const endOrdinal = resolveTopLevelOrdinal(topLevel, endCandidate, "end");
153197
+ if (startOrdinal > endOrdinal)
153198
+ throw new DocumentApiAdapterError("INVALID_INPUT", `blocks.deleteRange start ordinal (${startOrdinal}) is after end ordinal (${endOrdinal}). The start must precede or equal the end.`, {
153199
+ startOrdinal,
153200
+ endOrdinal
153201
+ });
153202
+ const rangeBlocks = topLevel.slice(startOrdinal, endOrdinal + 1);
153203
+ rejectUnmappedNodesInRange(editor.state.doc, rangeBlocks);
153204
+ for (const block of rangeBlocks)
153205
+ if (hasSectionBreak(block))
153206
+ throw new DocumentApiAdapterError("INVALID_TARGET", `blocks.deleteRange cannot delete a range that includes a section break (block "${block.nodeId}" at ordinal ${topLevel.indexOf(block)}).`, {
153207
+ nodeId: block.nodeId,
153208
+ nodeType: block.nodeType
153209
+ });
153210
+ const deletedBlocks = rangeBlocks.map((c, i$1) => toBlockSummary(c, startOrdinal + i$1));
153211
+ const revisionBefore = getRevision(editor);
153212
+ if (options?.dryRun)
153213
+ return {
153214
+ success: true,
153215
+ deletedCount: rangeBlocks.length,
153216
+ deletedBlocks,
153217
+ revision: {
153218
+ before: revisionBefore,
153219
+ after: revisionBefore
153220
+ },
153221
+ dryRun: true
153222
+ };
153223
+ const rangeFrom = rangeBlocks[0].pos;
153224
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
153225
+ if (executeDomainCommand(editor, () => {
153226
+ const tr = editor.state.tr;
153227
+ tr.delete(rangeFrom, rangeTo);
153228
+ editor.dispatch(tr);
153229
+ clearIndexCache(editor);
153230
+ return true;
153231
+ }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
153232
+ throw new DocumentApiAdapterError("INTERNAL_ERROR", "blocks.deleteRange command returned false despite passing all pre-apply checks.", {
153233
+ start: input2.start,
153234
+ end: input2.end
153235
+ });
153236
+ const revisionAfter = getRevision(editor);
153237
+ return {
153238
+ success: true,
153239
+ deletedCount: rangeBlocks.length,
153240
+ deletedBlocks,
153241
+ revision: {
153242
+ before: revisionBefore,
153243
+ after: revisionAfter
153244
+ },
153245
+ dryRun: false
152652
153246
  };
152653
153247
  }
152654
153248
  function resolveBlock(editor, nodeId) {
@@ -159290,10 +159884,20 @@ function createHistoryAdapter(editor) {
159290
159884
  if (typeof editor.commands?.undo !== "function")
159291
159885
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "history.undo command is not available.", { reason: "missing_command" });
159292
159886
  const revBefore = getRevision(editor);
159887
+ if (getUndoDepth(editor) === 0)
159888
+ return {
159889
+ noop: true,
159890
+ reason: "EMPTY_UNDO_STACK",
159891
+ revision: {
159892
+ before: revBefore,
159893
+ after: revBefore
159894
+ }
159895
+ };
159293
159896
  const success = Boolean(editor.commands.undo());
159294
159897
  const revAfter = getRevision(editor);
159295
159898
  return {
159296
159899
  noop: !success,
159900
+ reason: success ? undefined : "NO_EFFECT",
159297
159901
  revision: {
159298
159902
  before: revBefore,
159299
159903
  after: revAfter
@@ -159304,10 +159908,20 @@ function createHistoryAdapter(editor) {
159304
159908
  if (typeof editor.commands?.redo !== "function")
159305
159909
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "history.redo command is not available.", { reason: "missing_command" });
159306
159910
  const revBefore = getRevision(editor);
159911
+ if (getRedoDepth(editor) === 0)
159912
+ return {
159913
+ noop: true,
159914
+ reason: "EMPTY_REDO_STACK",
159915
+ revision: {
159916
+ before: revBefore,
159917
+ after: revBefore
159918
+ }
159919
+ };
159307
159920
  const success = Boolean(editor.commands.redo());
159308
159921
  const revAfter = getRevision(editor);
159309
159922
  return {
159310
159923
  noop: !success,
159924
+ reason: success ? undefined : "NO_EFFECT",
159311
159925
  revision: {
159312
159926
  before: revBefore,
159313
159927
  after: revAfter
@@ -159951,7 +160565,7 @@ function createTableOfContentsWrapper(editor, input2, options) {
159951
160565
  else if (at.kind === "documentEnd")
159952
160566
  pos = editor.state.doc.content.size;
159953
160567
  else
159954
- pos = resolveBlockInsertionPos(editor, at.target.nodeId, at.kind);
160568
+ pos = resolveCreateAnchor(editor, at.target, at.kind).pos;
159955
160569
  const config2 = input2.config ? applyTocPatchTyped(DEFAULT_TOC_CONFIG, input2.config) : DEFAULT_TOC_CONFIG;
159956
160570
  const instruction = serializeTocInstruction(config2);
159957
160571
  const content3 = materializeTocContent(editor.state.doc, withRightAlign(config2, input2.config?.rightAlignPageNumbers), editor);
@@ -160535,9 +161149,11 @@ function resolveImageInsertPosition(editor, location$1) {
160535
161149
  return editor.state.doc.content.size;
160536
161150
  case "before":
160537
161151
  case "after":
160538
- return resolveBlockInsertionPos(editor, location$1.target.nodeId, location$1.kind);
160539
- case "inParagraph":
160540
- return resolveBlockInsertionPos(editor, location$1.target.nodeId, "before") + 1 + (location$1.offset ?? 0);
161152
+ return resolveCreateAnchor(editor, location$1.target, location$1.kind).pos;
161153
+ case "inParagraph": {
161154
+ const { pos } = resolveCreateAnchor(editor, location$1.target, "before");
161155
+ return pos + 1 + (location$1.offset ?? 0);
161156
+ }
160541
161157
  default:
160542
161158
  throw new DocumentApiAdapterError("INVALID_TARGET", `Unknown image location kind: "${location$1.kind}".`);
160543
161159
  }
@@ -166977,7 +167593,11 @@ function assembleDocumentApiAdapters(editor) {
166977
167593
  acceptAll: (input2, options) => trackChangesAcceptAllWrapper(editor, input2, options),
166978
167594
  rejectAll: (input2, options) => trackChangesRejectAllWrapper(editor, input2, options)
166979
167595
  },
166980
- blocks: { delete: (input2, options) => blocksDeleteWrapper(editor, input2, options) },
167596
+ blocks: {
167597
+ list: (input2) => blocksListWrapper(editor, input2),
167598
+ delete: (input2, options) => blocksDeleteWrapper(editor, input2, options),
167599
+ deleteRange: (input2, options) => blocksDeleteRangeWrapper(editor, input2, options)
167600
+ },
166981
167601
  create: {
166982
167602
  paragraph: (input2, options) => createParagraphWrapper(editor, input2, options),
166983
167603
  heading: (input2, options) => createHeadingWrapper(editor, input2, options),
@@ -198446,7 +199066,7 @@ var Node$13 = class Node$14 {
198446
199066
  console.warn("Failed to initialize developer tools:", error);
198447
199067
  }
198448
199068
  }
198449
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES, VALID_APPEARANCES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, 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, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, STUB_WHERE, 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, ALIGNMENT_TO_JUSTIFICATION, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, CSS_NAMED_COLORS, SETTINGS_PART_PATH = "word/settings.xml", POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART = "word/settings.xml", TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS$1 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, DOCUMENT_RELS_PATH$1 = "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", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN$1, FOOTER_FILE_PATTERN$1, HISTORY_UNSAFE_OPS, DEFAULT_LEVEL = 1, SWITCH_PATTERN, DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, DEFAULT_MIME_TYPE = "application/octet-stream", simpleHash2 = (str) => {
199069
+ }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,UEsDBBQAAAAIAAAAIQAykW9XXgEAAKUFAAATABwAW0NvbnRlbnRfVHlwZXNdLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1lMtqwzAQRfeF/oPRNthKuiilxMmij2UbaPoBijRORPVCmrz+vuM4NaWkMeSxMcgz994zQsxwvLEmW0FM2ruSDYo+y8BJr7Sbl+xz+po/sCyhcEoY76BkW0hsPLq9GU63AVJGapdKtkAMj5wnuQArUuEDOKpUPlqBdIxzHoT8EnPgd/3+PZfeITjMsfZgo+EzVGJpMHvZ0O+GJIJJLHtqGuuskokQjJYCqc5XTv1JyfcJBSl3PWmhQ+pRA+MHE+rK/wF73TtdTdQKsomI+CYsdfG1j4orL5eWlMVxmwOcvqq0hFZfu4XoJaREd25N0Vas0K7XxeGWdgaRlJcHaa07IRJuDaTLEzS+3fGASIJrAOydOxHWMPu4GsUv806QinKnYmbg8hitdScE0hqA5js4m2NncyySOifRh0RrJZ4w9s/eqNU5DRwgoj7+6tpEsj57PqhXkgJ1IJvvluzoG1BLAwQKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAcAGRvY1Byb3BzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhACEYr1llAQAAxQIAABAAHABkb2NQcm9wcy9hcHAueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ1STU/DMAy9I/Efqt63dBwmNHlBaAhx4GPSCpyjxG0j0iRKson9e5wVSoEbOdnP9st7TuDqvTfFAUPUzq7LxbwqC7TSKW3bdflc384uyyImYZUwzuK6PGIsr/j5GWyD8xiSxlgQhY3rskvJrxiLssNexDmVLVUaF3qRKA0tc02jJd44ue/RJnZRVUuG7wmtQjXzI2E5MK4O6b+kysmsL77UR098HGrsvREJ+WOeNHPlUg9sRKF2SZha98grgscEtqLFyBfAhgBeXVAx9wwBbDoRhEy0vwxOMrj23mgpEu2VP2gZXHRNKp5OYos8DWzaAmRgh3IfdDpmqmkK99ri6YIhIFVBtEH47gROMthJYXBD1nkjTERg3wBsXO+FJTo2RsT3Fp997W7yFj5HfoITi686dTsvJP4yO8FhRygqUj8KGAG4o8cIJrPTrG1RffX8LeT1vQy/ki+W84rOaV9fGLkevwv/AFBLAwQUAAAACAAAACEACvOn+GYBAADtAgAAEQAcAGRvY1Byb3BzL2NvcmUueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ2SXU+DMBSG7038D6T3UGBqDAGWTLMrZ0yc0XhX27Otjn6k7cb27y0wmMRdeXc+nvP29G3z6UFUwR6M5UoWKIliFICkinG5LtDbch7eo8A6IhmplIQCHcGiaXl9lVOdUWXgxSgNxnGwgVeSNqO6QBvndIaxpRsQxEaekL65UkYQ51OzxprQLVkDTuP4DgtwhBFHcCMY6kERnSQZHST1zlStAKMYKhAgncVJlOAz68AIe3Gg7fwiBXdHDRfRvjnQB8sHsK7rqJ60qN8/wR+Lp9f2qiGXjVcUUJkzmjnuKihzfA59ZHdf30BdVx4SH1MDxClTPnO6DWZgJKlapq83jm/hWCvDrJ8eZR5jYKnh2vl37LRHBU9XxLqFf9gVBzY7jo/5224mDOx58y/KtCWGND+Z3K0GLPDmZJ2Vfed98vC4nKMyjdObMEnD5G6Zpll8m8XxZ7PdaP4sKE4L/FuxF+gMGn/Q8gdQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAYAHABfcmVscy9VVAkAA4Yc7WiHHO1odXgLAAEE9QEAAAQUAAAAUEsDBBQAAAAIAAAAIQAekRq36QAAAE4CAAALABwAX3JlbHMvLnJlbHNVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAArZLBasMwDEDvg/2D0b1R2sEYo04vY9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZVDYq9Cdb5XsNb+7x4AJWFvKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2kiKc/UYySzo55xVdf3mH4zoJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop9SwabDAvJZyRYqwKGvC80ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wFQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAHAB3b3JkL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAHAB3b3JkL2ZvbnRUYWJsZS54bWxVVAkAA54c7WieHO1odXgLAAEE9QEAAAQUAAAAvZPBbqMwEIbvlfoOlu8NhpA0RSFV222kvexh1T6AY0ywFtvI44Tk7dcYiBSyuy3tqiCEGf75mPnHLO8PskR7bkBoleJwQjDiiulMqG2KX1/WNwuMwFKV0VIrnuIjB3y/ur5a1kmulQXk8hUkkqW4sLZKggBYwSWFia64ci9zbSS17tFsA0nNr111w7SsqBUbUQp7DCJC5vj6CrmjZZn3oHSeC8a/abaTXFkPCQwvHVYrKEQFZ8j6Pcham6wymnEA170sW6ikQp2zwviCJgUzGnRuJ663rjbPc4yQ+JUsB5TZOEr0Z8qc8cM40KIDBS7zAiaycbD5CSayIexjZQ0p2W4UJ5r2FTW3Jn0IhMxmxThmP8GgyaWWFhSKCywf1+/sxDxKNwgkWfJ9q7Shm9KR3CZDbosgD0btZJobaieO+j6Qdwiv2mK6nxLViaLSUV6E5IB+8Br91JKqXtZJK6o08NCp97RMMWkanZMpmZHYXZFbxTg4T2EFNcDtKYUMBTmVojz2743/6kBSCcuKXrGnRjQdD0Ugtk6ygw1J8TMhJHper3EbCVP85CK3i9ljF4maSvxx10WmpwhpIsxz/GPYcpjnnDT915dB6+Bf/HzSOyO4aRx908tb59+d97TxMv60l1Jn3PzbzFwcePYRJ+PpVzv54MZevunho9uPsfewPT/rIdQC4P/sx4evdrFfwuo3UEsDBBQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABwAd29yZC9kb2N1bWVudC54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAApZZbb9sgFMffJ+07WH5v8S1OYjWttGab+jCpWrcPQIDEqAYsILd9+h3s+LJ5qxz3CXPg/PjDORxz93AShXdg2nAlV354G/gek0RRLncr/+ePLzcL3zMWS4oLJdnKPzPjP9x//HB3zKgie8Gk9QAhTXYsycrPrS0zhAzJmcDmVnCilVFbe0uUQGq75YSho9IURUEYVF+lVoQZA+s9YnnAxr/gyGkcjWp8BGcHTBDJsbbs1DHCqyEztESLISiaAIIdRuEQFV+NSpFTNQAlk0CgakCaTSP9Y3PpNFI0JM2nkeIhaTGNNEgnMUxwVTIJg1ulBbbQ1TsksH7dlzcALrHlG15wewZmkDYYzOXrBEXg1RJETK8mzJFQlBUxbShq5e+1zC7+N62/k57V/pem9WDFuGVhuSViJ1sY2/jqMWdXu68vhaU6NaRZAeeopMl52VYHMZUGg3kDObx1AAdR+G1lC0detf+VtnUdhg44Rv4ldqKolb9NDIMR0XSI1mOMhD/XbJQIyOBu4UlH0zvccGTxaQDRAJASNvJn0TAWFwYi3e12HD7yWjWctOVw2uNME9MD0P1ViChudLjGufdYhlqaX4drYoScL7Y4xybvE9l1G5y1uLPonXe5e9+l+qrVvuxo/H20p668HuV1GwzSvyNYmveJeclxCVVXkOxpJ5XGmwIUwVXz4LZ4VQS8Ol1d49U3wGti7VUJ5Lmq5d/DO22j6Nm1JQwkWYk1foI0T8JlmqTz0K+s8Jezzhoks+VivpyBNYM3If0OJkiveD3/1JqetTPGYZA8fm6Na7bF+8IOpz/3JiMnwzBin/VYfiV89/ILBqFihVGUBG4iJHQ4W8A3qid8w45oFRTWMKmnaL7LbdfdKGuV6PoF2/ZGc4Ypg3XnUdXdKmV73d3eVt3LckQVBqymxITVcyozvIe/aheSrOCSPXNLQGWcVqOo2Xf1WUcEdU/o+99QSwMEFAAAAAgAAAAhAMrnZYorBAAAvgwAABEAHAB3b3JkL3NldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1V22PmzgQ/n7S/QfE58uG1ySLmq3yervV5lqVre6zAZNYa2Nkm03T0/33GwwO9BZVSav9hJln5pnxeGYM795/ZdR6wUISXsxt98axLVykPCPFfm5/edqOZrYlFSoyRHmB5/YJS/v93e+/vTtGEisFatICikJGLJ3bB6XKaDyW6QEzJG94iQsAcy4YUvAq9mOGxHNVjlLOSqRIQihRp7HnOBO7peFzuxJF1FKMGEkFlzxXtUnE85ykuH0YC3GJ38ZkzdOK4UJpj2OBKcTAC3kgpTRs7GfZADwYkpcfbeKFUaN3dJ0LtnvkIjtbXBJebVAKnmIp4YAYNQGSonMcvCI6+74B3+0WNRWYu45e9SMPryPwXhFMUvz1Oo5ZyzEGyz4Pya7jmZx5SNbj+blgegRZdRWF55s46kdt3uOSmcoO19GZMxrXtkihA5KHPiO+boPhme7EunxLekkFNtAjSQQSp375sTR62BdcoIRCOFCGFlSSpaOzmqOsH1ZTHZbJg6WTa9/B1PnGObOOUYlFCq0HI8tz7HENQMHzPFZIAVEkS0ypnmEpxQj8HqO9QAymj5FomwznqKLqCSWx4iUovSDY3tRQpgckUKqwiEuUAtuKF0pwavQy/hdXK5hkAhqttdBzrVvFzYwEiwIx2PB3c2/HM1xHVgly+cnYxrsb9l3+3xGHmS5Ihp/qRMfqRPEWgo/JN7wosg+VVAQY9fT7hQh+FAAuas8foTSeTiXeYqQqSNMbOdMnsaWk3BEhuHgoMqiNN3NG8hwLcECg1nZQPkTwo87zPUYZXKVv5LeS+G9Qhs70n6Asn5dcKc7uT+UBcv1rJ6nrfdwvX/ggyKRZfOZcnVVhbPnr6bKJtEYvQXzXCVabQWTibN1hm0XgO/4gsnLXbjCMhLPlaggJboOJuxhCJqG3CcIhZLH0Zv5sCFku3Wk4iKxW/srfDiIbZz28n83Km04HY9vees7tpj2d9kxYVH9qfBJmVTe2xRqLFWKJIMja1R8j41ojEc9LUhg8wTClcR+Jq8SAo1EDSIYo3UKJGcBp5BmR5Rrnek13SOw73lZDDEphyn44c9VTG4s/Ba/KBj0KVDYNa1TcIGgtSaEeCTNyWSWxsSrgXulBVZF9fBE6T116jpGCBtCD7xHpRtK6uBh9idtGoyKumwTvUFk2vZbs3blNyf6g3Lo9FLxl8M2qX5K912KexrwG0y8orXcG2u2ik3lG1tPzjczvZIGRBZ0sNLKwk02MbFLLDjBdBVx1z9D2ZlnLc04pP+LsvsNficwlmBI48fjEku5uu2kwSiTMoRKuQcWFwf7QmBtEGU8f6vs6aOT+YhGuF860gUN9fSo9qiC1n3G+RBJnLWZMw8b0n8nEmbjuajYKZpvb0WYaBKOZu7wdTafO1PW3rufPnH/bPjA/Hnf/AVBLAwQUAAAACAAAACEA24Vsw30EAACXHQAAEgAcAHdvcmQvbnVtYmVyaW5nLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAADNmc1u4zYQx+8F+g6CgB4Tifq2sM4iySZFFttF0U3RMy3RlhB+CBRlx9d9mT5CH2tfoaRkyXLkxJIctz4pJjk/zQxnyL+dDx+fCdaWiOcpo1MdXJq6hmjE4pQupvqfj/cXga7lAtIYYkbRVF+jXP949fNPH1YhLcgMcblQkwyah6ssmuqJEFloGHmUIALzS5JGnOVsLi4jRgw2n6cRMlaMx4ZlArP8K+MsQnkuObeQLmGub3DRcz9azOFKGiugY0QJ5AI9bxlgMMQ1JkbQBVkjQDJCC3RR9mCUZyivOiBnFEh61SG540h7gvPGkawuyR9HsrukYBypU06kW+AsQ1ROzhknUMiPfGEQyJ+K7EKCMyjSWYpTsZZM06sxMKVPIzySVg2B2PFggm8QFiNsxzWFTfWC03Bjf9HYK9fDyn7zaCwQ7vda+bqJgZ4FzkVty/vkrjL/xKKCICrKrBkcYZlHRvMkzZrTgYylycmkhizfSsCSYL052UDPVnvtaPtUbcMW2Mf9zd4RXHn+NhGYPXZTIRqLPi7svrP2hMgK3r54VGpayQU9D58aYHUAXoR6XhY1I9gwjGjb3YqT9myrmuM1nDRuccY50wLExSCEZdd+qIcyb7HyWMTJMFy9R4ayhQImME/aRDQsQLfBrUkr39niuKb6lbMi29LS42gP2+N1RYcFaHovdzDLj3PmWwIzeeqSKHxYUMbhDEuPZKtpslu0cge0qlzVQ6s6QKv3WisLSFOnln4lhRqc5YLDSHwtiLbz6UFWuxR8khlyJFUeV4OVprueC8RvOIJPaomi0Fy9LVxCeQUAD1jejenrhpohBRbpF7RE+HGdoXpNsp7xNP5NzWE1V60VJMP1Chfc3Tp3ZlDN4KWaSOWjcioUGZb3remYE9M0QelD6WPjRGUnZeg9aQZnBcZINMRHeQfVUz++/9OMf47qUYzmm+XZ71w9UqrCVMNT3bdKTxJIF6Ugtj1TrTWaxXzzuGdU5Cq5eZTKOvy2JjOGS9NrmbedgZRKcIzmUGZmAyspRunYy0yATibsckTeZ/JSXCK14ujMsKF5AY4zLjG3rOAp4tpXtGpl58VolHcXDsua1cma+/5Z+/H976F5s4A3Lm9/ydXqO1neytru2LAE2Xsa7AQJGtxwVhD83x3nnGXHyTycdce5Z9pxjj3yCH/vjvPOtONcc+RR/n4d559lx7n+yLP6P+q44Ew7znNGHuHHd5yxo24PSl8wRvq6gW8C++b6OOl7d+c5wL91+kjf+57bGKMoJRDv3cdfwOU7a9+echVMRhYlZivEvyAh92J/RNbgiA6p1p5aEtwcE9IfjEC6PyJ7X0Q8XSQDBCUIeoTUVX/3I0N6s+acwTt0SP71VGynKzp3cEiHhFtPOXWyovOGF11HU/Uquq4AOknR+YN36JAC6ilaTld0wfCQDmiXnoriZEU3GV50HVnxStF1NQAt737auvPVD2dhXJQ/q5WDMlTHn3jWy5/LHpprv34X3cO09jGdwHWB7wDwOhO0mUbrH6pX/wJQSwMEFAAAAAgAAAAhAL5+dmJWAQAA0AMAABQAHAB3b3JkL3dlYlNldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAACd01FvwiAQAOD3JfsPhHelumlMYzVZFpe9LEu2/QAKV0sGXAO46n79aLWuiy92T0DLfbnjYLneG02+wHmFNqOTcUIJWIFS2W1GP943owUlPnAruUYLGT2Ap+vV7c2yTmvI3yCEuNOTqFifGpHRMoQqZcyLEgz3Y6zAxp8FOsNDXLotM9x97qqRQFPxoHKlVTiwaZLM6Ylx1yhYFErAI4qdARvaeOZARxGtL1XlO62+RqvRycqhAO9jPUYfPcOVPTOT+wvIKOHQYxHGsZhTRi0VwydJOzP6F5gNA6YXwFzAfpixOBksRvYdJYc587OjZM/5XzI9QO4GEdO7Lo9maMJ7lpdBlsO4rkesieWBl9yXfRGGFTg7cwfTnLcR6fPWouO5jlK8QSReAtLC5NiFZiDHxpKuBNKeC13FJ4ZVUEZ9wwbdg8Pag2PNZ6411q8vT3HB/rzD1Q9QSwMEFAAAAAgAAAAhAD+v4WZfDwAADaYAAA8AHAB3b3JkL3N0eWxlcy54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA3Z1tc9s2Esff38x9B45e9V6ksp5lT92O7STnzCWpWzvX1xAJWaj5oCOpOO6nPwB8EKUlKC64UdRMZlqL4v4I4L+7xIIU+dMvXwLf+czjREThZW/w41nP4aEbeSJ8vOx9enj7at5zkpSFHvOjkF/2XnjS++Xnf/7jp+eLJH3xeeJIQJhcBO5lb5Wm64t+P3FXPGDJj9Gah/LLZRQHLJUf48d+wOKnzfqVGwVrloqF8EX60h+enU17OSZuQ4mWS+Hy15G7CXiYavt+zH1JjMJkJdZJQXtuQ3uOYm8dRy5PEtnpwM94ARNhiRmMASgQbhwl0TL9UXYmb5FGSfPBmf4r8LeACQ4wBICpy7/gGPOc0ZeWVY7wcJxpyRFehWPXmArA26AQw1HRDvU/ZV5hJV7qrXC4QqO+smUpW7FkVSVyXAcnJe4lUOMduBfvHsMoZgtfkqQHOdIJHA12MhXU/5xMWKfogqPHpfezjC4vcl/zJdv4aaI+xndx/jH/pP/3NgrTxHm+YIkrxGXvKhZMDvHzBWdJepUI9iBbLg8fCNmS26swEerLlfqjsrObXPYeRCBD+SN/dn6PAhY6P1xH3otzc/+vXl8d6InHodzzM/Mve8NsU/JXuWFcbLlJ9rf5LHwstvHw1af7ausqmxbCk01i8av7K204GF/44pGlm1g2S33ShCwRxd6N7Db/km5k++XO/Xw8+vujtC4/ZXvtDalMGDJ93GdZTH7Ll+8j94l796n84rJ31ss2fnp3F4solpnqsnd+nm+854G4FZ7Hw8qO4Up4/I8VDz8l3Ntu/+2tzjb5BjfahPLv0WyqZfYT780Xl69V7pLfhkzp9VEZaG02Yntwbf6/AjbIB7jOfsWZSuDOYB9xjkYMlUVS6W09c7PX9wH6QKNjHWh8rANNjnWg6bEONDvWgebHOtD51z6QCD2Z3wf1hwHUQxxDNKI5hmBDcwyxhOYYQgXNMUQCmmNwdDTH4MdojsFNEZw0ck1eWHH2kcHbm7mHzxF23MOnBDvu4TOAHfdwwrfjHs7vdtzD6dyOezh723EPJ2s8N5tqOe9kmIVp5yhbRlEaRil31PS0M42FkqWrWhqeOunxmKSTBJgss+Un4s40l+nPhz1k0u18nqqCzomWzlI8quKkc8N5+Jn70Zo7zPMkjxAYc1k+GUbExqdjvuQxD11O6dh0UF+E3Ak3wYLAN9fskYzFQ494+AoiSVIoHZpt0pUKEkHg1AFz44hgzsLI8sN7kXQfKwVxrje+z4lYH2lcTLO61wYa07000JjulYHGdC8MKppRDVFOIxqpnEY0YDmNaNwy/6Qat5xGNG45jWjcclr3cXsQqc/3Zx2D9mt3N36UUCS8e/EY6vXTzqR8zdS5YzF7jNl65ahl54MzLfRx9JLzA8U5rSRRzeu1i6hVZxFuug/oDo0quEoeUXiVPKIAK3ndQ+yDnCarCdotTT1zv1mktUHbviq4Z/4mm9B2jzaWdvewbQC8FXFCFgb1WAIP/qims7dEU71tK7s3bMvqHlb7WYm0eTmSoJV+5D7RpOHblzWPZVn21Jn0NvL96Jl7dMT7NI4yX6uG/HDYOuTfBOsVS0QCEO1P9cUdDM4Htu7coTufiZBGtzevAiZ8h24Gcfvw4b3zEK1VmakGhgZ4HaVpFJAx85XAH/7gi3/RNPBKFsHhC1Fvr4iWhzTsRhCcZDJS5BGR5DRThILkHKp5/+Evi4jFHg3tLubZTUMpJyLes2DtU8WWzIvPMv8QzIY0778sFmpdiCqoHkhglWXDZLP4k7vdU93HyCFZGfp1k+r1Rz3V7X61dwfXfZqwg+s+RdBqytOD8l+Czu7gund2B0fV2RufJYkwXkK15lF1t+BR97d78ZfzIj+KlxufbgALINkIFkCyIYz8TRAmlD3WPMIOax51fwldRvMIluQ079+x8MjE0DAqJTSMSgYNo9JAw0gF6H6HTgXW/TadCqz7vToZjGgKUIFR+Rnp6Z/oKk8FRuVnGkblZxpG5WcaRuVno9cOXy7lJJjuFFNBUvlcBUl3oglTHqyjmMUvRMg3Pn9kBAukGe0ujpbq1yRRmN3ETTGd3SxSysl2hqMS+Q++IGuaYlG2i2BFlPl+FBGtrW1PONpy9961Q2b65xydm3DnM5evIt/jsaFPjfXy/Zq5Ai6dtr9Y8l48rlLnflWu9lcx07ODlkXBvmN2+IB1Yz4dNl5m8sQmKBoKf0wxHbU3HgLj8WHj7Uxix3LS0hIec3rYcjtL3rGctbSEx5y3tBwBy6Z4eM3ip1pHmDX5T1njGZxv1nhhvjCuPWyTI5WWdS44a/KinVBxrlxXXS2A6rSLGbN9u+Ax22OiyEzBhJOZ0jquzIimAPudfxZJ7Rr1gevf5d0TIO+PW2fO3zZRCi5TD9v/qOudnDiFCXdqOaP2F652sox5HFunGzOidd4xI1onIDOiVSYymqNSkpnSOjeZEa2TlBmBzlbwjIDLVtAel62gvU22ghSbbNVhFmBGtJ4OmBHoQIUIdKB2mCmYEahABeZWgQop6ECFCHSgQgQ6UOEEDBeo0B4XqNDeJlAhxSZQIQUdqBCBDlSIQAcqRKADFSLQgWo5tzeaWwUqpKADFSLQgQoR6EAddwxUaI8LVGhvE6iQYhOokIIOVIhABypEoAMVItCBChHoQIUIVKACc6tAhRR0oEIEOlAhAh2ok46BCu1xgQrtbQIVUmwCFVLQgQoR6ECFCHSgQgQ6UCECHagQgQpUYG4VqJCCDlSIQAcqRKADddoxUKE9LlChvU2gQopNoEIKOlAhAh2oEIEOVIhABypEoAMVIlCBCsytAhVS0IEKEehAhYgm/8wvUZpusx/gVz2Nd+wjfueTNer36k+5d9ZQ26OKVplZ7X+LcB1FT07tDw9Ho/YQsfBFpJeoDZfVq9wZ+sLnrzfNv/Bp8RiPtl3Jfwuhr5kC+LitJVhTGTe5fNUSFHnjJk+vWoJZ57gp+1YtwWlw3JR0dVwWN6XI0xEwbkozFeOBwbwpW1fM4RA35eiKIRzhpsxcMYQD3JSPK4YTRyXnfetJy3GalveXAkKTO1YIMzOhyS2hVsa1/daimQlt1TMT2spoJqD0NGLwwppRaIXNKDupYZhhpbYPVDMBKzUkWEkNMPZSQ5S11BBlJzVMjFipIQErtX1yNhOspAYYe6khylpqiLKTGp7KsFJDAlZqSMBK3fGEbMTYSw1R1lJDlJ3UcHKHlRoSsFJDAlZqSLCSGmDspYYoa6khyk5qUCWjpYYErNSQgJUaEqykBhh7qSHKWmqIapJar6LYV0sVc9wkrGKIOyFXDHHJuWJoUS1VrC2rpQrBslqCWtlVS1XR7Kqlqnp21VJVRrtqCehpVy3VCmtXLdUqbFctmaXGVUt1UtsHql21VCc1rloySo2rlhqlxlVLjVLjqiWz1LhqqU5qXLVUJ7V9crarloxS46qlRqlx1VKj1LhqySw1rlqqkxpXLdVJjauW6qTueEK2q5YapcZVS41S46ols9S4aqlOaly1VCc1rlqqkxpXLRmlxlVLjVLjqqVGqXHVkllqXLVUJzWuWqqTGlct1UmNq5aMUuOqpUapcdVSo9S4aumDNBEEj4C6D1icOnTPi7tlySpl3R9O+CmMeRL5n7nn0Hb1PaqX/eed118ptn6dn9w/lWOmnoBe+bmSlz0BNgfqHd955WuqlLFqiZO/5yvfrBucX67NjqgNDxyqhOfXigcAv325lT7Cgsle/RrWHTxUD0as2a4cotheHOZmxeLs262rFvuc7/fl+SJO1Avcsq/Pzoaj0evZdbbXOns12xPn64/y+P3ig9SHJ/pTkv2AVpov1DPF5AiMpvq3V2yZ8viyN8+jNsqe2vT+s18eKZcuP0btW+CKV76xPyuvfNt/H5z68k2+TX2vXwlXa+kmaWXztfBE1jhXRXnZrrfj2VT7ht5ZZ4DLHtPxv92sbkpR9xm8zQjbF8gVF5urL5AbF30tXu1m4zxDo/MMKZ1n2MJ5tmGZ7bcTlF/ZvQYt3WvwfbrXaAjdK9vW0b1GRvcaUbrX6Dtxr2Gzex1yomO4ynAOXSXb1tFVxkZXGVO6yvjEXWVe9ZSx0VNGX8dTRPbfm4TEbzp6xMToERNKj5h8Hx4xPs3c0dEHpkYfmFL6wPTEfcAs++ToiWByrv7tO4F609LWBR6EeoPv1ZTAA2ZGD5hResDsb+sB0yME/pE1nxs1n1NqPj8pzaGys6PH9nCm/rXR+TXFnO/cqPM5pc7nJ67z/AgRTK+sKweVufkD1Q3rX/mLkcon++jXIu1rbnh7kkGvQTu9zO1O1SpsQ5v1Km3jwl3+sHaTQ7X2qHThZ1LLP96FyqGe83fYZy31vrBeseMN9/0PLNs7Wpt39fkyzb4dnM1rvl9kr4Qw2sf62oER0N9tTL/shHm8s5dE5j9qMa6T6keGweHOHiXWcaRb+rC7SeTQ6OXe/fbtrIHut/K2WG51tnlmL3HVxoEpXQ0OpCpz8vle1qO6LHciJR02SjokknSIO/t8/wp3WXFEKjxqVHhEpPDoayn8d1/0Q6o1blRrTKTW+NTUOvbCG1KVSaMqEyJVJqemysnpMG3UYUqkw/TUdDjqahRSklmjJDMiSWanJslpiTBvFGFOJML81EQ46koOUpLzRknOiSQ5PzVJvslyWvZgi/2xzrZSrKNpUtMi2iAv2FBrZNtF7r0L4656fcWXdMP8/En6jctjxyyBtk3W3XpV9PuJx+XgbifLZXqcwunzhDgRbiWqdYOu4VbxJbP6p1m2Hl+z+iAtX6K9L1D5BUWoFrDGaB1YRGu4CbI/hA/vhyq/BDE9mB64Je+bTECAVwwm36Lm3RHL5BZdQ3fXvczecOJzxq8sWX3MZq8B2Fcm20oRrZrUFKpDmztrD92ANige3venW3BUEcvj2khtmGSOz9S/NhpS18PbgasVp2vMVBQ2a3IwYI46cvUOrC6fbN+rsT9We6/dOOTRcChGYwv3FPpSl7pQpZ6R12LO19Jdyk7nD44rn2a3323wuDuco9R4BOqEetg7jnifVT4W9Ylu920oFAmverimvDeyKSjW117lAqneL5GelL9X+y91j5yTZUeuJ61OPuyW6+PlpdSvfKT+tmeHfhgxKjJ7NcbmU90afWU3+0SS/L/peijwo0bX7Xo62AmSAx57cnHfmCO3z9Y0DeB2j65Zsrjmh8qSi+yo+WglMqn4N2xNM3ZgSjmpH9Hir+Tn/wNQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL3RoZW1lL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAHAB3b3JkL3RoZW1lL3RoZW1lMS54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA7VlPb9s2FL8P2HcgdHf1x5IsBXUL/23XJm3RpB16ZGRaYkyJAkknMYoCQ3vaZcCAbthlwG47DMMKrMCKXfZhCrTYug8xSnZs0abatE23AksMxCL5e48/vvf4+ExdvHycEnCIGMc0axv2BcsAKIvoCGdx27izN2wEBuACZiNIaIbaxgxx4/KlTz+5CLdEglIEpHzGt2DbSITIt0yTR7Ib8gs0R5kcG1OWQiGbLDZHDB5JvSkxHcvyzRTizAAZTKXam+MxjhDYK1Qal06UD4j8lwledESE7UbljFWJEjua2MUXn/EeYeAQkrYh5xnRoz10LAxAIBdyoG1Y5Z9hXrpoLoWIqJGtyA3Lv4XcQmA0cUo5Fu8vBa2BE7j2Ur8z17+JGwTFZ6mvBMAokiu1N7C251uBs8BWQPNHje6wZTdVfEV/c1N/6HcdV8E3V3h3c43DcND3FLy7wnsb+I7ldMOmgvdWeH8D7w46LWeg4EtQQnA22UT7rSDwF+glZEzJVS089H2r1V/AVyizEl1z+UzUxVoKDygbSkDpXChwBsQsR2MYSVwnF5SDPuY5gTMD5DCjXHZbjm3LwHMtZ/kpLQ63EKxIz7sivtFV8AE8YjgXbeOa1GpUIC+ePXv+8Onzh789f/To+cNfwDaOE6GRuwqzuCr36sev//7+C/DXrz+8evyNHs+r+Jc/f/ny9z9ep14otL598vLpkxffffXnT4818A6D+1X4Hk4RBzfQEbhNU7lAzQRon72dxF4CcVWik8UcZrCQ0aAHIlHQN2aQQA2ui1Q73mUyXeiAV6YHCuHdhE0F1gCvJ6kC3KGUdCnTrul6MVfVCtMs1k/OplXcbQgPdXP31rw8mOYy7rFOZS9BCs1bRLocxihDAhRjdIKQRuwexopdd3DEKKdjAe5h0IVYa5I9vC/0QldxKv0y0xGU/lZss3MXdCnRqe+jQxUp9wYkOpWIKGa8AqcCplrGMCVV5DYUiY7k7oxFisG5kJ6OEaFgMEKc62RusplC9zqUeUvr9h0yS1UkE3iiQ25DSqvIPp30EpjmWs44S6rYz/hEhigEt6jQkqDqDina0g8wq3X3XYzE2+3tOzIN6QOkGJky3ZZAVN2PMzKGSKe8w1IlxXYY1kZHdxorob2NEIFHcIQQuPOZDk9zqid9LZFZ5SrS2eYaVGO1aGeIy1qpKG40jsVcCdldFNMaPjuztcQzg1kKWZ3mGxM1ZAb7TG5GXbySaKKkUsyKTasncZOn8FRabyVQCauizfXxOmPZ2+4xKXPwDjLorWVkYj+1bfYgQfqA2YMYbOvSrRSZ6kWK7VSKTbVyY3XTrtxgrhU9Kc7eUAH9N5XPB6t5zr7aqUso6zVOHW69sulRNsIff2HTh9PsFpJnyXldc17X/B/rmrr9fF7NnFcz59XMv1bNrAoYs3rZU2pJa29+xpiQXTEjaJuXpQ+Xe380lJ1loxRaXjTliXxcTKfgYgbLZ8Co+ByLZDeBuZzGLmeI+UJ1zEFOuSyfjFrdZfE1TXfoaHGPZ5/cbUoBKFb9lrfsl6WamPf6rdVF6FJ92Yp5lYBXKj09icpkKommhkSreToStnVWLEINi8B+HQuz4hV5OAFYXIt77pyRDDcZ0qPCT3P5E++euafrjKku29EsL3TPzNMKiUq4qSQqYZjIw2O9+4x9HYZ6VztaGq3gQ/ja3MwNJFNb4EjuuaYn1UQwbxtj+bNJPqa51MeLTAVJnLWNSCwM/S6ZJWdc9CFP5rByaL7+FAvEAMGpjPWqG0i24mY7LevjJRdaH5/lzHUno/EYRaKmZ9WUY3Ml2tH3BBcNOpWkd5PREdgnU3YbSkN5Lbsw4AhzsbTmCLNKcK+suJauFltReQO02qKQ5AlcnCjVZD6Hl89LOpV1lEzXV2XqTLgfD8/i1H2z0FrSrDlAWrVZ7MMd8hVWTT0rT5vrwsB6/Snx/gdChVqgp9bUU6s7O86wIKhM59fYzan15nueButRa1bqyrK18XKb7h/IyO/LanVKBJ9fkB3L8rt38lpyngnK3pPscizAlOG2cd/yOm7P8XoNK/AGDbfpWo3A6zQbHc9r2gPPtvpd54E0ikhS25vPPZQ/9sls8e6+7N94f5+elNoXIpqatKyDzVK4fH9vO/Xv7wGWlrnvO8OwGXb9RtjsDBtuvxs0wp7fbfT9Xqs/7Pe8IBw+MMBhCXY7zZ7rD4KGb/d6Dde3CvpB2Gi5jtNxW51g4HYeLGwtV37yfWLektelfwBQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL19yZWxzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhALO+ix3+AAAAtgMAABwAHAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQJAAMw0M4SiBztaHV4CwABBPUBAAAEFAAAAK2TzWrDMBCE74W+g9h7LTttQwmRcymBXFv3AWR7/UP1Y6RNWr99RUoShwbTg44zYme+hdV6860VO6DzvTUCsiQFhqaydW9aAR/F9uEFmCdpaqmsQQEjetjk93frN1SSwpDv+sGzkGK8gI5oWHHuqw619Ikd0ISXxjotKUjX8kFWn7JFvkjTJXfTDMivMtmuFuB29SOwYhzwP9m2afoKX22112joRgX3SBQ28yFTuhZJwMlJQhbw2wiLqAg0KpwCHPVcfRaz3ux1iS5sfCE4W3MQy5gQFGbxAnCUv2Y2x/Ack6GxhgpZqgnH2ZqDeIoJ8YXl+5+TnJgnEH712/IfUEsBAh4DFAAAAAgAAAAhADKRb1deAQAApQUAABMAGAAAAAAAAQAAAKSBAAAAAFtDb250ZW50X1R5cGVzXS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGrAQAAZG9jUHJvcHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhACEYr1llAQAAxQIAABAAGAAAAAAAAQAAAKSB7gEAAGRvY1Byb3BzL2FwcC54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEACvOn+GYBAADtAgAAEQAYAAAAAAABAAAApIGdAwAAZG9jUHJvcHMvY29yZS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAABgAYAAAAAAAAABAA7UFOBQAAX3JlbHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAB6RGrfpAAAATgIAAAsAGAAAAAAAAQAAAKSBjgUAAF9yZWxzLy5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BvAYAAHdvcmQvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAGAAAAAAAAQAAAKSB+wYAAHdvcmQvZm9udFRhYmxlLnhtbFVUBQADnhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABgAAAAAAAEAAACkgVcJAAB3b3JkL2RvY3VtZW50LnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDK52WKKwQAAL4MAAARABgAAAAAAAEAAACkgXcMAAB3b3JkL3NldHRpbmdzLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDbhWzDfQQAAJcdAAASABgAAAAAAAEAAACkge0QAAB3b3JkL251bWJlcmluZy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAvn52YlYBAADQAwAAFAAYAAAAAAABAAAApIG2FQAAd29yZC93ZWJTZXR0aW5ncy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAP6/hZl8PAAANpgAADwAYAAAAAAABAAAApIFaFwAAd29yZC9zdHlsZXMueG1sVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BAicAAHdvcmQvdGhlbWUvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAGAAAAAAAAQAAAKSBRycAAHdvcmQvdGhlbWUvdGhlbWUxLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJNkTVsAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQTEuAAB3b3JkL19yZWxzL1VUBQADhhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCzvosd/gAAALYDAAAcABgAAAAAAAEAAACkgXYuAAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAARABEAqQUAAMovAAAAAA==`, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES, VALID_APPEARANCES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, 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, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, STUB_WHERE, 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, ALIGNMENT_TO_JUSTIFICATION, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, CSS_NAMED_COLORS, SETTINGS_PART_PATH = "word/settings.xml", POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART = "word/settings.xml", TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS$1 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, DOCUMENT_RELS_PATH$1 = "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", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN$1, FOOTER_FILE_PATTERN$1, HISTORY_UNSAFE_OPS, DEFAULT_LEVEL = 1, SWITCH_PATTERN, DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, DEFAULT_MIME_TYPE = "application/octet-stream", simpleHash2 = (str) => {
198450
199070
  let hash$3 = 0;
198451
199071
  for (let i$1 = 0;i$1 < str.length; i$1++) {
198452
199072
  const char = str.charCodeAt(i$1);
@@ -201620,7 +202240,7 @@ var Node$13 = class Node$14 {
201620
202240
  pmStart: start$1,
201621
202241
  pmEnd: (typeof attrs.pmEnd === "number" ? attrs.pmEnd : undefined) ?? (start$1 != null ? start$1 + 1 : undefined)
201622
202242
  };
201623
- }, TWIPS_PER_INCH$1 = 1440, PX_PER_PT2, VALID_TRACKED_MODES, DEFAULT_HYPERLINK_CONFIG, ATOMIC_INLINE_TYPES, TOKEN_INLINE_TYPES, twipsToPx$1 = (value) => value / TWIPS_PER_INCH$1 * 96, ptToPx = (pt) => {
202243
+ }, SUBSCRIPT_SUPERSCRIPT_SCALE2 = 0.65, TWIPS_PER_INCH$1 = 1440, PX_PER_PT2, VALID_TRACKED_MODES, DEFAULT_HYPERLINK_CONFIG, ATOMIC_INLINE_TYPES, TOKEN_INLINE_TYPES, twipsToPx$1 = (value) => value / TWIPS_PER_INCH$1 * 96, ptToPx = (pt) => {
201624
202244
  if (pt == null || !Number.isFinite(pt))
201625
202245
  return;
201626
202246
  return pt * PX_PER_PT2;
@@ -203504,6 +204124,8 @@ var Node$13 = class Node$14 {
203504
204124
  textRun.strike ? 1 : 0,
203505
204125
  textRun.highlight ?? "",
203506
204126
  textRun.letterSpacing != null ? textRun.letterSpacing : "",
204127
+ textRun.vertAlign ?? "",
204128
+ textRun.baselineShift != null ? textRun.baselineShift : "",
203507
204129
  textRun.token ?? "",
203508
204130
  textRun.trackedChange ? 1 : 0,
203509
204131
  textRun.comments?.length ?? 0
@@ -203685,6 +204307,8 @@ var Node$13 = class Node$14 {
203685
204307
  hash$3 = hashString(hash$3, getRunUnderlineStyle(run2));
203686
204308
  hash$3 = hashString(hash$3, getRunUnderlineColor(run2));
203687
204309
  hash$3 = hashString(hash$3, getRunBooleanProp(run2, "strike") ? "1" : "");
204310
+ hash$3 = hashString(hash$3, getRunStringProp(run2, "vertAlign"));
204311
+ hash$3 = hashNumber(hash$3, getRunNumberProp(run2, "baselineShift"));
203688
204312
  }
203689
204313
  }
203690
204314
  }
@@ -203748,6 +204372,14 @@ var Node$13 = class Node$14 {
203748
204372
  decorations.push("line-through");
203749
204373
  if (decorations.length > 0)
203750
204374
  element3.style.textDecorationLine = decorations.join(" ");
204375
+ if (run2.baselineShift != null && Number.isFinite(run2.baselineShift))
204376
+ element3.style.verticalAlign = `${run2.baselineShift}pt`;
204377
+ else if (run2.vertAlign === "superscript")
204378
+ element3.style.verticalAlign = "super";
204379
+ else if (run2.vertAlign === "subscript")
204380
+ element3.style.verticalAlign = "sub";
204381
+ else if (run2.vertAlign === "baseline")
204382
+ element3.style.verticalAlign = "baseline";
203751
204383
  }, CLIP_PATH_PREFIXES, readClipPathValue = (value) => {
203752
204384
  if (typeof value !== "string")
203753
204385
  return "";
@@ -204226,6 +204858,8 @@ var Node$13 = class Node$14 {
204226
204858
  delete run2.highlight;
204227
204859
  delete run2.link;
204228
204860
  delete run2.letterSpacing;
204861
+ delete run2.vertAlign;
204862
+ delete run2.baselineShift;
204229
204863
  }, applyFormatChangeMarks = (run2, config2, hyperlinkConfig, applyMarksToRun$1, themeColors, enableComments = true) => {
204230
204864
  const tracked = run2.trackedChange;
204231
204865
  if (!tracked || tracked.kind !== "format")
@@ -204830,9 +205464,14 @@ var Node$13 = class Node$14 {
204830
205464
  fontFamily = resolveDocxFontFamily(runProps.fontFamily, converterContext.docx) || defaultFontFamily;
204831
205465
  else
204832
205466
  fontFamily = runProps.fontFamily?.ascii || runProps.fontFamily?.hAnsi || runProps.fontFamily?.eastAsia || defaultFontFamily;
205467
+ const vertAlign = runProps.vertAlign;
205468
+ const hasPosition = runProps.position != null && Number.isFinite(runProps.position);
205469
+ let fontSize = runProps.fontSize ? ptToPx(runProps.fontSize / 2) : defaultFontSizePx;
205470
+ if (!hasPosition && (vertAlign === "superscript" || vertAlign === "subscript"))
205471
+ fontSize *= SUBSCRIPT_SUPERSCRIPT_SCALE2;
204833
205472
  return {
204834
205473
  fontFamily: toCssFontFamily(fontFamily),
204835
- fontSize: runProps.fontSize ? ptToPx(runProps.fontSize / 2) : defaultFontSizePx,
205474
+ fontSize,
204836
205475
  bold: runProps.bold,
204837
205476
  italic: runProps.italic,
204838
205477
  underline: runProps.underline && runProps.underline["w:val"] && runProps.underline["w:val"] !== "none" ? {
@@ -204846,7 +205485,9 @@ var Node$13 = class Node$14 {
204846
205485
  allCaps: runProps?.textTransform === "uppercase",
204847
205486
  letterSpacing: runProps.letterSpacing ? twipsToPx$1(runProps.letterSpacing) : undefined,
204848
205487
  lang: runProps.lang?.val || undefined,
204849
- vanish: runProps.vanish
205488
+ vanish: runProps.vanish,
205489
+ vertAlign,
205490
+ baselineShift: hasPosition ? runProps.position / 2 : undefined
204850
205491
  };
204851
205492
  }, VALID_LINK_TARGETS, toTrimmedString = (value) => {
204852
205493
  if (typeof value !== "string")
@@ -205295,6 +205936,18 @@ var Node$13 = class Node$14 {
205295
205936
  if (transform === "uppercase" || transform === "lowercase" || transform === "capitalize" || transform === "none")
205296
205937
  run2.textTransform = transform;
205297
205938
  }
205939
+ if (typeof attrs.vertAlign === "string") {
205940
+ const va = attrs.vertAlign;
205941
+ if (va === "superscript" || va === "subscript" || va === "baseline")
205942
+ run2.vertAlign = va;
205943
+ }
205944
+ if (attrs.position != null && typeof attrs.position === "string") {
205945
+ const parsed = parseFloat(attrs.position);
205946
+ if (Number.isFinite(parsed))
205947
+ run2.baselineShift = parsed;
205948
+ }
205949
+ if (run2.baselineShift == null && (run2.vertAlign === "superscript" || run2.vertAlign === "subscript"))
205950
+ run2.fontSize *= SUBSCRIPT_SUPERSCRIPT_SCALE2;
205298
205951
  }, DEFAULT_HYPERLINK_CONFIG$1, applyMarksToRun = (run2, marks, hyperlinkConfig = DEFAULT_HYPERLINK_CONFIG$1, themeColors, backgroundColor, enableComments = true) => {
205299
205952
  if (!enableComments && "comments" in run2 && run2.comments)
205300
205953
  delete run2.comments;
@@ -212133,7 +212786,7 @@ var Node$13 = class Node$14 {
212133
212786
  this.#hoverRegion = null;
212134
212787
  this.#overlayManager = null;
212135
212788
  }
212136
- }, DEFAULT_SEMANTIC_FOOTNOTE_HEADING_STYLE, SUBSCRIPT_SUPERSCRIPT_SCALE2 = 0.65, DEFAULT_PAGE_SIZE, DEFAULT_MARGINS, DEFAULT_PAGE_GAP = 24, DEFAULT_HORIZONTAL_PAGE_GAP = 20, layoutDebugEnabled, perfLog = (...args$1) => {
212789
+ }, DEFAULT_SEMANTIC_FOOTNOTE_HEADING_STYLE, DEFAULT_PAGE_SIZE, DEFAULT_MARGINS, DEFAULT_PAGE_GAP = 24, DEFAULT_HORIZONTAL_PAGE_GAP = 20, layoutDebugEnabled, perfLog = (...args$1) => {
212137
212790
  if (!layoutDebugEnabled)
212138
212791
  return;
212139
212792
  console.log(...args$1);
@@ -217138,9 +217791,9 @@ var Node$13 = class Node$14 {
217138
217791
  return false;
217139
217792
  return Boolean(checker(attrs));
217140
217793
  }, SuperToolbar, ICONS, TEXTS, tableActionsOptions;
217141
- var init_src_BnjrN0Yi_es = __esm(() => {
217794
+ var init_src_Gw0CeXiy_es = __esm(() => {
217142
217795
  init_rolldown_runtime_B2q5OVn9_es();
217143
- init_SuperConverter_BeR1rqZz_es();
217796
+ init_SuperConverter_Cw5CEerM_es();
217144
217797
  init_jszip_ChlR43oI_es();
217145
217798
  init_uuid_qzgm05fK_es();
217146
217799
  init_constants_CMPtQbp7_es();
@@ -225692,8 +226345,9 @@ function print() { __p += __j.call(arguments, '') }
225692
226345
  justify: "both"
225693
226346
  };
225694
226347
  groupedCache = /* @__PURE__ */ new WeakMap;
225695
- SUPPORTED_NODE_TYPES = new Set(DELETABLE_BLOCK_NODE_TYPES2);
225696
- REJECTED_NODE_TYPES = new Set(["tableRow", "tableCell"]);
226348
+ SUPPORTED_DELETE_NODE_TYPES3 = new Set(DELETABLE_BLOCK_NODE_TYPES2);
226349
+ REJECTED_DELETE_NODE_TYPES3 = new Set(["tableRow", "tableCell"]);
226350
+ RANGE_DELETE_SAFE_NODE_TYPES = new Set(["passthroughBlock", "passthroughInline"]);
225697
226351
  ORDERED_PRESET_CONFIG = {
225698
226352
  decimal: {
225699
226353
  numFmt: "decimal",
@@ -237928,7 +238582,6 @@ function print() { __p += __j.call(arguments, '') }
237928
238582
  painter.paint(layout, this.#painterHost, mapping ?? undefined);
237929
238583
  perfLog(`[Perf] painter.paint: ${(perfNow() - painterPaintStart).toFixed(2)}ms`);
237930
238584
  const painterPostStart = perfNow();
237931
- this.#applyVertAlignToLayout();
237932
238585
  this.#rebuildDomPositionIndex();
237933
238586
  this.#syncDecorations();
237934
238587
  this.#domIndexObserverManager?.resume();
@@ -239208,75 +239861,6 @@ function print() { __p += __j.call(arguments, '') }
239208
239861
  return false;
239209
239862
  return this.#documentMode === "viewing";
239210
239863
  }
239211
- #applyVertAlignToLayout() {
239212
- const doc$2 = this.#editor?.state?.doc;
239213
- if (!doc$2 || !this.#painterHost)
239214
- return;
239215
- try {
239216
- this.#painterHost.querySelectorAll(".superdoc-line span[data-pm-start]").forEach((span) => {
239217
- try {
239218
- if (span.closest(".superdoc-page-header, .superdoc-page-footer"))
239219
- return;
239220
- const pmStart = Number(span.dataset.pmStart ?? "NaN");
239221
- if (!Number.isFinite(pmStart))
239222
- return;
239223
- const pos = Math.max(0, Math.min(pmStart, doc$2.content.size));
239224
- const $pos = doc$2.resolve(pos);
239225
- let runNode = null;
239226
- for (let depth = $pos.depth;depth >= 0; depth--) {
239227
- const node3 = $pos.node(depth);
239228
- if (node3.type.name === "run") {
239229
- runNode = node3;
239230
- break;
239231
- }
239232
- }
239233
- let vertAlign = runNode?.attrs?.runProperties?.vertAlign ?? null;
239234
- let position4 = runNode?.attrs?.runProperties?.position ?? null;
239235
- let fontSizeHalfPts = runNode?.attrs?.runProperties?.fontSize ?? null;
239236
- if (!vertAlign && position4 == null && runNode)
239237
- runNode.forEach((child) => {
239238
- if (!child.isText || !child.marks?.length)
239239
- return;
239240
- const rpr = decodeRPrFromMarks(child.marks);
239241
- if (rpr.vertAlign && !vertAlign)
239242
- vertAlign = rpr.vertAlign;
239243
- if (rpr.position != null && position4 == null)
239244
- position4 = rpr.position;
239245
- if (rpr.fontSize != null && fontSizeHalfPts == null)
239246
- fontSizeHalfPts = rpr.fontSize;
239247
- });
239248
- if (vertAlign == null && position4 == null)
239249
- return;
239250
- const styleEntries = [];
239251
- if (position4 != null && Number.isFinite(position4)) {
239252
- const pts = halfPointToPoints(position4);
239253
- if (Number.isFinite(pts))
239254
- styleEntries.push(`vertical-align: ${pts}pt`);
239255
- } else if (vertAlign === "superscript" || vertAlign === "subscript") {
239256
- styleEntries.push(`vertical-align: ${vertAlign === "superscript" ? "super" : "sub"}`);
239257
- if (fontSizeHalfPts != null && Number.isFinite(fontSizeHalfPts)) {
239258
- const scaledPts = halfPointToPoints(fontSizeHalfPts * SUBSCRIPT_SUPERSCRIPT_SCALE2);
239259
- if (Number.isFinite(scaledPts))
239260
- styleEntries.push(`font-size: ${scaledPts}pt`);
239261
- else
239262
- styleEntries.push(`font-size: ${SUBSCRIPT_SUPERSCRIPT_SCALE2 * 100}%`);
239263
- } else
239264
- styleEntries.push(`font-size: ${SUBSCRIPT_SUPERSCRIPT_SCALE2 * 100}%`);
239265
- } else if (vertAlign === "baseline")
239266
- styleEntries.push("vertical-align: baseline");
239267
- if (!styleEntries.length)
239268
- return;
239269
- const existing = span.getAttribute("style");
239270
- const merged = existing ? `${existing}; ${styleEntries.join("; ")}` : styleEntries.join("; ");
239271
- span.setAttribute("style", merged);
239272
- } catch (error) {
239273
- console.error("Failed to apply vertical alignment to span:", error);
239274
- }
239275
- });
239276
- } catch (error) {
239277
- console.error("Failed to apply vertical alignment to layout:", error);
239278
- }
239279
- }
239280
239864
  };
239281
239865
  Color = Extension.create({
239282
239866
  name: "color",
@@ -250808,8 +251392,8 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
250808
251392
 
250809
251393
  // ../../packages/superdoc/dist/super-editor.es.js
250810
251394
  var init_super_editor_es = __esm(() => {
250811
- init_src_BnjrN0Yi_es();
250812
- init_SuperConverter_BeR1rqZz_es();
251395
+ init_src_Gw0CeXiy_es();
251396
+ init_SuperConverter_Cw5CEerM_es();
250813
251397
  init_jszip_ChlR43oI_es();
250814
251398
  init_xml_js_DLE8mr0n_es();
250815
251399
  init_constants_CMPtQbp7_es();
@@ -252258,7 +252842,18 @@ var OBJECT_REPLACEMENT_CHAR2 = "";
252258
252842
 
252259
252843
  // ../../packages/super-editor/src/document-api-adapters/helpers/adapter-utils.ts
252260
252844
  function findTextBlockCandidates2(index2, blockId) {
252261
- return index2.candidates.filter((candidate) => candidate.nodeId === blockId && isTextBlockCandidate2(candidate));
252845
+ const primary = index2.candidates.filter((c) => c.nodeId === blockId && isTextBlockCandidate2(c));
252846
+ if (primary.length > 0)
252847
+ return primary;
252848
+ try {
252849
+ const resolved = findBlockByNodeIdOnly2(index2, blockId);
252850
+ if (isTextBlockCandidate2(resolved))
252851
+ return [resolved];
252852
+ } catch (e) {
252853
+ if (e instanceof DocumentApiAdapterError3 && e.code === "AMBIGUOUS_TARGET")
252854
+ throw e;
252855
+ }
252856
+ return [];
252262
252857
  }
252263
252858
  function assertUnambiguous2(matches2, blockId) {
252264
252859
  if (matches2.length > 1) {
@@ -319805,8 +320400,32 @@ function resolveBlockInsertionPos2(editor, anchorBlockId, position5, stepId) {
319805
320400
  }
319806
320401
  return position5 === "before" ? candidate.pos : candidate.end;
319807
320402
  }
320403
+ function resolveCreateAnchor2(editor, target, position5, stepId) {
320404
+ const index3 = getBlockIndex2(editor);
320405
+ let candidate;
320406
+ try {
320407
+ candidate = findBlockByNodeIdOnly2(index3, target.nodeId);
320408
+ } catch (e) {
320409
+ if (e instanceof Error && "code" in e) {
320410
+ throw planError2(e.code, e.message, stepId, e.details);
320411
+ }
320412
+ throw e;
320413
+ }
320414
+ if (target.nodeType && candidate.nodeType !== target.nodeType) {
320415
+ const remediation = candidate.nodeType === "listItem" ? "Use lists.insert to add an item to a list sequence." : `The block is a ${candidate.nodeType}, not a ${target.nodeType}.`;
320416
+ throw planError2("INVALID_TARGET", `Expected ${target.nodeType}:${target.nodeId} but found ${candidate.nodeType}:${candidate.nodeId}.`, stepId, {
320417
+ requestedNodeType: target.nodeType,
320418
+ actualNodeType: candidate.nodeType,
320419
+ nodeId: target.nodeId,
320420
+ remediation
320421
+ });
320422
+ }
320423
+ const pos = position5 === "before" ? candidate.pos : candidate.end;
320424
+ return { pos, anchor: candidate };
320425
+ }
319808
320426
  var init_create_insertion = __esm(() => {
319809
320427
  init_index_cache();
320428
+ init_node_address_resolver();
319810
320429
  init_errors4();
319811
320430
  });
319812
320431
 
@@ -324397,13 +325016,14 @@ var init_tracked_change_refs = __esm(() => {
324397
325016
  });
324398
325017
 
324399
325018
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/create-wrappers.ts
324400
- function resolveCreateInsertPosition2(editor, at, operationLabel) {
325019
+ function resolveCreateInsertPosition2(editor, at) {
324401
325020
  const location3 = at ?? { kind: "documentEnd" };
324402
325021
  if (location3.kind === "documentStart")
324403
325022
  return 0;
324404
325023
  if (location3.kind === "documentEnd")
324405
325024
  return editor.state.doc.content.size;
324406
- return resolveBlockInsertionPos2(editor, location3.target.nodeId, location3.kind);
325025
+ const { pos } = resolveCreateAnchor2(editor, location3.target, location3.kind);
325026
+ return pos;
324407
325027
  }
324408
325028
  function resolveCreatedBlock2(editor, nodeType, blockId) {
324409
325029
  const index3 = getBlockIndex2(editor);
@@ -324463,7 +325083,7 @@ function createParagraphWrapper2(editor, input2, options) {
324463
325083
  if (mode === "tracked") {
324464
325084
  ensureTrackedCapability2(editor, { operation: "create.paragraph" });
324465
325085
  }
324466
- const insertAt = resolveCreateInsertPosition2(editor, input2.at, "paragraph");
325086
+ const insertAt = resolveCreateInsertPosition2(editor, input2.at);
324467
325087
  if (options?.dryRun) {
324468
325088
  const canInsert = editor.can().insertParagraphAt?.({
324469
325089
  pos: insertAt,
@@ -324494,6 +325114,7 @@ function createParagraphWrapper2(editor, input2, options) {
324494
325114
  };
324495
325115
  }
324496
325116
  const paragraphId = v42();
325117
+ let canonicalId = paragraphId;
324497
325118
  let trackedChangeRefs;
324498
325119
  const receipt2 = executeDomainCommand2(editor, () => {
324499
325120
  const didApply = insertParagraphAt2({
@@ -324506,6 +325127,7 @@ function createParagraphWrapper2(editor, input2, options) {
324506
325127
  clearIndexCache2(editor);
324507
325128
  try {
324508
325129
  const paragraph3 = resolveCreatedBlock2(editor, "paragraph", paragraphId);
325130
+ canonicalId = paragraph3.nodeId;
324509
325131
  if (mode === "tracked") {
324510
325132
  trackedChangeRefs = collectTrackInsertRefsInRange2(editor, paragraph3.pos, paragraph3.end);
324511
325133
  }
@@ -324525,7 +325147,7 @@ function createParagraphWrapper2(editor, input2, options) {
324525
325147
  }
324526
325148
  };
324527
325149
  }
324528
- return buildParagraphCreateSuccess2(paragraphId, trackedChangeRefs);
325150
+ return buildParagraphCreateSuccess2(canonicalId, trackedChangeRefs);
324529
325151
  }
324530
325152
  function createHeadingWrapper2(editor, input2, options) {
324531
325153
  const insertHeadingAt2 = requireEditorCommand2(editor.commands?.insertHeadingAt, "create.heading");
@@ -324533,7 +325155,7 @@ function createHeadingWrapper2(editor, input2, options) {
324533
325155
  if (mode === "tracked") {
324534
325156
  ensureTrackedCapability2(editor, { operation: "create.heading" });
324535
325157
  }
324536
- const insertAt = resolveCreateInsertPosition2(editor, input2.at, "heading");
325158
+ const insertAt = resolveCreateInsertPosition2(editor, input2.at);
324537
325159
  if (options?.dryRun) {
324538
325160
  const canInsert = editor.can().insertHeadingAt?.({
324539
325161
  pos: insertAt,
@@ -324565,6 +325187,7 @@ function createHeadingWrapper2(editor, input2, options) {
324565
325187
  };
324566
325188
  }
324567
325189
  const headingId = v42();
325190
+ let canonicalId = headingId;
324568
325191
  let trackedChangeRefs;
324569
325192
  const receipt2 = executeDomainCommand2(editor, () => {
324570
325193
  const didApply = insertHeadingAt2({
@@ -324578,6 +325201,7 @@ function createHeadingWrapper2(editor, input2, options) {
324578
325201
  clearIndexCache2(editor);
324579
325202
  try {
324580
325203
  const heading4 = resolveCreatedBlock2(editor, "heading", headingId);
325204
+ canonicalId = heading4.nodeId;
324581
325205
  if (mode === "tracked") {
324582
325206
  trackedChangeRefs = collectTrackInsertRefsInRange2(editor, heading4.pos, heading4.end);
324583
325207
  }
@@ -324597,7 +325221,7 @@ function createHeadingWrapper2(editor, input2, options) {
324597
325221
  }
324598
325222
  };
324599
325223
  }
324600
- return buildHeadingCreateSuccess2(headingId, trackedChangeRefs);
325224
+ return buildHeadingCreateSuccess2(canonicalId, trackedChangeRefs);
324601
325225
  }
324602
325226
  var init_create_wrappers = __esm(() => {
324603
325227
  init_wrapper();
@@ -324610,15 +325234,21 @@ var init_create_wrappers = __esm(() => {
324610
325234
  });
324611
325235
 
324612
325236
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/blocks-wrappers.ts
324613
- function validateTargetNodeType2(nodeType) {
324614
- if (REJECTED_NODE_TYPES2.has(nodeType)) {
324615
- throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
324616
- }
324617
- if (!SUPPORTED_NODE_TYPES2.has(nodeType)) {
324618
- throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, {
324619
- nodeType
324620
- });
324621
- }
325237
+ function extractTextPreview2(node4) {
325238
+ if (!node4.isTextblock)
325239
+ return null;
325240
+ const text9 = node4.textContent;
325241
+ if (text9.length <= TEXT_PREVIEW_MAX_LENGTH2)
325242
+ return text9;
325243
+ return text9.slice(0, TEXT_PREVIEW_MAX_LENGTH2);
325244
+ }
325245
+ function toBlockSummary2(candidate, ordinal) {
325246
+ return {
325247
+ ordinal,
325248
+ nodeId: candidate.nodeId,
325249
+ nodeType: candidate.nodeType,
325250
+ textPreview: extractTextPreview2(candidate.node)
325251
+ };
324622
325252
  }
324623
325253
  function resolveSdBlockId2(candidate) {
324624
325254
  const sdBlockId = candidate.node.attrs?.sdBlockId;
@@ -324626,6 +325256,16 @@ function resolveSdBlockId2(candidate) {
324626
325256
  return sdBlockId;
324627
325257
  throw new DocumentApiAdapterError3("INTERNAL_ERROR", "Resolved block candidate is missing sdBlockId attribute. This indicates a schema/extension invariant violation.", { attrs: candidate.node.attrs });
324628
325258
  }
325259
+ function validateDeleteTargetNodeType2(nodeType) {
325260
+ if (REJECTED_DELETE_NODE_TYPES4.has(nodeType)) {
325261
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
325262
+ }
325263
+ if (!SUPPORTED_DELETE_NODE_TYPES4.has(nodeType)) {
325264
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, {
325265
+ nodeType
325266
+ });
325267
+ }
325268
+ }
324629
325269
  function validateCommandLayerUniqueness2(editor, sdBlockId) {
324630
325270
  const getBlockNodeById = editor.helpers?.blockNode?.getBlockNodeById;
324631
325271
  if (typeof getBlockNodeById !== "function") {
@@ -324639,30 +325279,163 @@ function validateCommandLayerUniqueness2(editor, sdBlockId) {
324639
325279
  throw new DocumentApiAdapterError3("AMBIGUOUS_TARGET", `Multiple blocks share sdBlockId "${sdBlockId}" at the command layer.`, { sdBlockId, count: matches3.length });
324640
325280
  }
324641
325281
  }
325282
+ function collectTopLevelBlocks2(editor) {
325283
+ const doc4 = editor.state.doc;
325284
+ const results = [];
325285
+ let offset2 = 0;
325286
+ for (let i4 = 0;i4 < doc4.childCount; i4++) {
325287
+ const child = doc4.child(i4);
325288
+ const nodeType = mapBlockNodeType2(child);
325289
+ const pos = offset2;
325290
+ if (nodeType) {
325291
+ const nodeId = resolveBlockNodeId2(child, pos, nodeType);
325292
+ if (nodeId) {
325293
+ results.push({ node: child, pos, end: pos + child.nodeSize, nodeType, nodeId });
325294
+ }
325295
+ }
325296
+ offset2 += child.nodeSize;
325297
+ }
325298
+ return results;
325299
+ }
325300
+ function blocksListWrapper2(editor, input2) {
325301
+ const topLevel = collectTopLevelBlocks2(editor);
325302
+ const filtered = input2?.nodeTypes ? topLevel.filter((b2) => input2.nodeTypes.includes(b2.nodeType)) : topLevel;
325303
+ const total = filtered.length;
325304
+ const offset2 = input2?.offset ?? 0;
325305
+ const limit = input2?.limit ?? total;
325306
+ const paged = filtered.slice(offset2, offset2 + limit);
325307
+ const blocks2 = paged.map((candidate, i4) => ({
325308
+ ordinal: offset2 + i4,
325309
+ nodeId: candidate.nodeId,
325310
+ nodeType: candidate.nodeType,
325311
+ textPreview: extractTextPreview2(candidate.node),
325312
+ isEmpty: candidate.node.textContent.length === 0
325313
+ }));
325314
+ return { total, blocks: blocks2, revision: getRevision2(editor) };
325315
+ }
324642
325316
  function blocksDeleteWrapper2(editor, input2, options) {
324643
325317
  rejectTrackedMode2("blocks.delete", options);
324644
325318
  const index3 = getBlockIndex2(editor);
324645
325319
  const candidate = findBlockByIdStrict2(index3, input2.target);
324646
- validateTargetNodeType2(candidate.nodeType);
325320
+ validateDeleteTargetNodeType2(candidate.nodeType);
325321
+ const topLevel = collectTopLevelBlocks2(editor);
325322
+ const candidateOrdinal = topLevel.findIndex((b2) => b2.nodeId === candidate.nodeId && b2.nodeType === candidate.nodeType);
325323
+ const deletedBlock = toBlockSummary2(candidate, candidateOrdinal);
324647
325324
  const sdBlockId = resolveSdBlockId2(candidate);
324648
325325
  const deleteBlockNodeById = requireEditorCommand2(editor.commands?.deleteBlockNodeById, "blocks.delete");
324649
325326
  validateCommandLayerUniqueness2(editor, sdBlockId);
324650
325327
  if (options?.dryRun) {
324651
- return { success: true, deleted: input2.target };
325328
+ return { success: true, deleted: input2.target, deletedBlock };
324652
325329
  }
324653
325330
  const receipt2 = executeDomainCommand2(editor, () => {
324654
325331
  const didApply = deleteBlockNodeById(sdBlockId);
324655
- if (didApply) {
325332
+ if (didApply)
324656
325333
  clearIndexCache2(editor);
324657
- }
324658
325334
  return didApply;
324659
325335
  }, { expectedRevision: options?.expectedRevision });
324660
325336
  if (receipt2.steps[0]?.effect !== "changed") {
324661
325337
  throw new DocumentApiAdapterError3("INTERNAL_ERROR", "blocks.delete command returned false despite passing all pre-apply checks. This is an internal invariant violation.", { sdBlockId, target: input2.target });
324662
325338
  }
324663
- return { success: true, deleted: input2.target };
325339
+ return { success: true, deleted: input2.target, deletedBlock };
325340
+ }
325341
+ function hasSectionBreak2(candidate) {
325342
+ const attrs = candidate.node.attrs;
325343
+ const pPr = attrs?.paragraphProperties;
325344
+ return pPr?.sectPr != null && typeof pPr.sectPr === "object";
325345
+ }
325346
+ function resolveTopLevelOrdinal2(topLevel, candidate, label) {
325347
+ const idx = topLevel.findIndex((b2) => b2.nodeId === candidate.nodeId && b2.nodeType === candidate.nodeType);
325348
+ if (idx !== -1)
325349
+ return idx;
325350
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.deleteRange ${label} resolved to a nested block (not a direct document child). Only top-level blocks are supported.`, { nodeId: candidate.nodeId, nodeType: candidate.nodeType });
325351
+ }
325352
+ function resolveRangeEndpoint2(index3, address2, label) {
325353
+ const key2 = `${address2.nodeType}:${address2.nodeId}`;
325354
+ if (index3.ambiguous.has(key2)) {
325355
+ throw new DocumentApiAdapterError3("AMBIGUOUS_TARGET", `Multiple blocks share key "${key2}".`, {
325356
+ target: address2
325357
+ });
325358
+ }
325359
+ const candidate = index3.byId.get(key2);
325360
+ if (candidate)
325361
+ return candidate;
325362
+ const mismatch = index3.candidates.find((c) => c.nodeId === address2.nodeId);
325363
+ if (mismatch) {
325364
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.deleteRange ${label} expected ${address2.nodeType}:${address2.nodeId} but resolved to ${mismatch.nodeType}.`, { expected: address2.nodeType, actual: mismatch.nodeType, nodeId: address2.nodeId });
325365
+ }
325366
+ throw new DocumentApiAdapterError3("TARGET_NOT_FOUND", `Block "${key2}" was not found.`, {
325367
+ target: address2
325368
+ });
325369
+ }
325370
+ function rejectUnmappedNodesInRange2(doc4, rangeBlocks) {
325371
+ if (rangeBlocks.length === 0)
325372
+ return;
325373
+ const rangeFrom = rangeBlocks[0].pos;
325374
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
325375
+ const recognizedPositions = new Set(rangeBlocks.map((b2) => b2.pos));
325376
+ let offset2 = 0;
325377
+ for (let i4 = 0;i4 < doc4.childCount; i4++) {
325378
+ const child = doc4.child(i4);
325379
+ const childEnd = offset2 + child.nodeSize;
325380
+ if (childEnd > rangeFrom && offset2 < rangeTo && !recognizedPositions.has(offset2)) {
325381
+ if (!RANGE_DELETE_SAFE_NODE_TYPES2.has(child.type.name)) {
325382
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.deleteRange cannot delete range: unrecognized node "${child.type.name}" at position ${offset2} would be silently removed.`, { pmNodeType: child.type.name, pos: offset2 });
325383
+ }
325384
+ }
325385
+ offset2 = childEnd;
325386
+ }
325387
+ }
325388
+ function blocksDeleteRangeWrapper2(editor, input2, options) {
325389
+ rejectTrackedMode2("blocks.deleteRange", options);
325390
+ const topLevel = collectTopLevelBlocks2(editor);
325391
+ const index3 = getBlockIndex2(editor);
325392
+ const startCandidate = resolveRangeEndpoint2(index3, input2.start, "start");
325393
+ const endCandidate = resolveRangeEndpoint2(index3, input2.end, "end");
325394
+ const startOrdinal = resolveTopLevelOrdinal2(topLevel, startCandidate, "start");
325395
+ const endOrdinal = resolveTopLevelOrdinal2(topLevel, endCandidate, "end");
325396
+ if (startOrdinal > endOrdinal) {
325397
+ throw new DocumentApiAdapterError3("INVALID_INPUT", `blocks.deleteRange start ordinal (${startOrdinal}) is after end ordinal (${endOrdinal}). The start must precede or equal the end.`, { startOrdinal, endOrdinal });
325398
+ }
325399
+ const rangeBlocks = topLevel.slice(startOrdinal, endOrdinal + 1);
325400
+ rejectUnmappedNodesInRange2(editor.state.doc, rangeBlocks);
325401
+ for (const block of rangeBlocks) {
325402
+ if (hasSectionBreak2(block)) {
325403
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.deleteRange cannot delete a range that includes a section break (block "${block.nodeId}" at ordinal ${topLevel.indexOf(block)}).`, { nodeId: block.nodeId, nodeType: block.nodeType });
325404
+ }
325405
+ }
325406
+ const deletedBlocks = rangeBlocks.map((c, i4) => toBlockSummary2(c, startOrdinal + i4));
325407
+ const revisionBefore = getRevision2(editor);
325408
+ if (options?.dryRun) {
325409
+ return {
325410
+ success: true,
325411
+ deletedCount: rangeBlocks.length,
325412
+ deletedBlocks,
325413
+ revision: { before: revisionBefore, after: revisionBefore },
325414
+ dryRun: true
325415
+ };
325416
+ }
325417
+ const rangeFrom = rangeBlocks[0].pos;
325418
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
325419
+ const receipt2 = executeDomainCommand2(editor, () => {
325420
+ const tr = editor.state.tr;
325421
+ tr.delete(rangeFrom, rangeTo);
325422
+ editor.dispatch(tr);
325423
+ clearIndexCache2(editor);
325424
+ return true;
325425
+ }, { expectedRevision: options?.expectedRevision });
325426
+ if (receipt2.steps[0]?.effect !== "changed") {
325427
+ throw new DocumentApiAdapterError3("INTERNAL_ERROR", "blocks.deleteRange command returned false despite passing all pre-apply checks.", { start: input2.start, end: input2.end });
325428
+ }
325429
+ const revisionAfter = getRevision2(editor);
325430
+ return {
325431
+ success: true,
325432
+ deletedCount: rangeBlocks.length,
325433
+ deletedBlocks,
325434
+ revision: { before: revisionBefore, after: revisionAfter },
325435
+ dryRun: false
325436
+ };
324664
325437
  }
324665
- var SUPPORTED_NODE_TYPES2, REJECTED_NODE_TYPES2;
325438
+ var SUPPORTED_DELETE_NODE_TYPES4, REJECTED_DELETE_NODE_TYPES4, TEXT_PREVIEW_MAX_LENGTH2 = 80, RANGE_DELETE_SAFE_NODE_TYPES2;
324666
325439
  var init_blocks_wrappers = __esm(() => {
324667
325440
  init_src();
324668
325441
  init_index_cache();
@@ -324670,8 +325443,10 @@ var init_blocks_wrappers = __esm(() => {
324670
325443
  init_errors3();
324671
325444
  init_mutation_helpers();
324672
325445
  init_plan_wrappers();
324673
- SUPPORTED_NODE_TYPES2 = new Set(DELETABLE_BLOCK_NODE_TYPES);
324674
- REJECTED_NODE_TYPES2 = new Set(["tableRow", "tableCell"]);
325446
+ init_revision_tracker();
325447
+ SUPPORTED_DELETE_NODE_TYPES4 = new Set(DELETABLE_BLOCK_NODE_TYPES);
325448
+ REJECTED_DELETE_NODE_TYPES4 = new Set(["tableRow", "tableCell"]);
325449
+ RANGE_DELETE_SAFE_NODE_TYPES2 = new Set(["passthroughBlock", "passthroughInline"]);
324675
325450
  });
324676
325451
 
324677
325452
  // ../../packages/super-editor/src/document-api-adapters/helpers/list-sequence-helpers.ts
@@ -332608,10 +333383,15 @@ function createHistoryAdapter2(editor) {
332608
333383
  });
332609
333384
  }
332610
333385
  const revBefore = getRevision2(editor);
333386
+ const depth = getUndoDepth2(editor);
333387
+ if (depth === 0) {
333388
+ return { noop: true, reason: "EMPTY_UNDO_STACK", revision: { before: revBefore, after: revBefore } };
333389
+ }
332611
333390
  const success = Boolean(editor.commands.undo());
332612
333391
  const revAfter = getRevision2(editor);
332613
333392
  return {
332614
333393
  noop: !success,
333394
+ reason: success ? undefined : "NO_EFFECT",
332615
333395
  revision: { before: revBefore, after: revAfter }
332616
333396
  };
332617
333397
  },
@@ -332622,10 +333402,15 @@ function createHistoryAdapter2(editor) {
332622
333402
  });
332623
333403
  }
332624
333404
  const revBefore = getRevision2(editor);
333405
+ const depth = getRedoDepth2(editor);
333406
+ if (depth === 0) {
333407
+ return { noop: true, reason: "EMPTY_REDO_STACK", revision: { before: revBefore, after: revBefore } };
333408
+ }
332625
333409
  const success = Boolean(editor.commands.redo());
332626
333410
  const revAfter = getRevision2(editor);
332627
333411
  return {
332628
333412
  noop: !success,
333413
+ reason: success ? undefined : "NO_EFFECT",
332629
333414
  revision: { before: revBefore, after: revAfter }
332630
333415
  };
332631
333416
  }
@@ -333286,7 +334071,7 @@ function createTableOfContentsWrapper2(editor, input2, options) {
333286
334071
  } else if (at.kind === "documentEnd") {
333287
334072
  pos = editor.state.doc.content.size;
333288
334073
  } else {
333289
- pos = resolveBlockInsertionPos2(editor, at.target.nodeId, at.kind);
334074
+ pos = resolveCreateAnchor2(editor, at.target, at.kind).pos;
333290
334075
  }
333291
334076
  const config41 = input2.config ? applyTocPatchTyped2(DEFAULT_TOC_CONFIG2, input2.config) : DEFAULT_TOC_CONFIG2;
333292
334077
  const instruction = serializeTocInstruction2(config41);
@@ -333778,9 +334563,9 @@ function resolveImageInsertPosition2(editor, location3) {
333778
334563
  return editor.state.doc.content.size;
333779
334564
  case "before":
333780
334565
  case "after":
333781
- return resolveBlockInsertionPos2(editor, location3.target.nodeId, location3.kind);
334566
+ return resolveCreateAnchor2(editor, location3.target, location3.kind).pos;
333782
334567
  case "inParagraph": {
333783
- const pos = resolveBlockInsertionPos2(editor, location3.target.nodeId, "before");
334568
+ const { pos } = resolveCreateAnchor2(editor, location3.target, "before");
333784
334569
  return pos + 1 + (location3.offset ?? 0);
333785
334570
  }
333786
334571
  default: {
@@ -340216,7 +341001,9 @@ function assembleDocumentApiAdapters2(editor) {
340216
341001
  rejectAll: (input2, options) => trackChangesRejectAllWrapper2(editor, input2, options)
340217
341002
  },
340218
341003
  blocks: {
340219
- delete: (input2, options) => blocksDeleteWrapper2(editor, input2, options)
341004
+ list: (input2) => blocksListWrapper2(editor, input2),
341005
+ delete: (input2, options) => blocksDeleteWrapper2(editor, input2, options),
341006
+ deleteRange: (input2, options) => blocksDeleteRangeWrapper2(editor, input2, options)
340220
341007
  },
340221
341008
  create: {
340222
341009
  paragraph: (input2, options) => createParagraphWrapper2(editor, input2, options),
@@ -394398,7 +395185,7 @@ function mapListsError(operationId, error2, code10) {
394398
395185
  return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
394399
395186
  }
394400
395187
  if (code10 === "INVALID_TARGET") {
394401
- return new CliError("INVALID_ARGUMENT", message, { operationId, details });
395188
+ return new CliError("INVALID_TARGET", message, { operationId, details });
394402
395189
  }
394403
395190
  if (code10 === "TRACK_CHANGE_COMMAND_UNAVAILABLE" || code10 === "CAPABILITY_UNAVAILABLE") {
394404
395191
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", message, { operationId, details });
@@ -394473,9 +395260,12 @@ function mapCreateError(operationId, error2, code10) {
394473
395260
  if (code10 === "TARGET_NOT_FOUND") {
394474
395261
  return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
394475
395262
  }
394476
- if (code10 === "AMBIGUOUS_TARGET" || code10 === "INVALID_TARGET") {
395263
+ if (code10 === "AMBIGUOUS_TARGET") {
394477
395264
  return new CliError("INVALID_ARGUMENT", message, { operationId, details });
394478
395265
  }
395266
+ if (code10 === "INVALID_TARGET") {
395267
+ return new CliError("INVALID_TARGET", message, { operationId, details });
395268
+ }
394479
395269
  if (code10 === "TRACK_CHANGE_COMMAND_UNAVAILABLE") {
394480
395270
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", message, { operationId, details });
394481
395271
  }
@@ -394609,7 +395399,7 @@ function mapFailedReceipt(operationId, result2) {
394609
395399
  }
394610
395400
  if (family === "lists") {
394611
395401
  if (failureCode === "INVALID_TARGET") {
394612
- return new CliError("INVALID_ARGUMENT", failureMessage, { operationId, failure });
395402
+ return new CliError("INVALID_TARGET", failureMessage, { operationId, failure });
394613
395403
  }
394614
395404
  if (failureCode === "CAPABILITY_UNAVAILABLE") {
394615
395405
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure });
@@ -394636,7 +395426,7 @@ function mapFailedReceipt(operationId, result2) {
394636
395426
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure });
394637
395427
  }
394638
395428
  if (failureCode === "INVALID_TARGET") {
394639
- return new CliError("INVALID_ARGUMENT", failureMessage, { operationId, failure });
395429
+ return new CliError("INVALID_TARGET", failureMessage, { operationId, failure });
394640
395430
  }
394641
395431
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure });
394642
395432
  }
@@ -394873,41 +395663,18 @@ function validateCreateParagraphLocation(value2, path3) {
394873
395663
  return { kind: kind2 };
394874
395664
  }
394875
395665
  if (kind2 === "before" || kind2 === "after") {
394876
- const hasTarget = obj.target != null;
394877
- const hasNodeId = obj.nodeId != null;
394878
- if (hasTarget === hasNodeId) {
394879
- throw new CliError("VALIDATION_ERROR", `${path3} must include exactly one of target or nodeId.`);
395666
+ if (obj.nodeId != null) {
395667
+ throw new CliError("VALIDATION_ERROR", `${path3}: bare "nodeId" shorthand is not supported. Use "target" with an explicit { kind: "block", nodeType, nodeId }.`);
394880
395668
  }
394881
- if (hasTarget) {
394882
- expectOnlyKeys(obj, ["kind", "target"], path3);
394883
- const target3 = validateNodeAddress(obj.target, `${path3}.target`);
394884
- if (target3.kind !== "block") {
394885
- throw new CliError("VALIDATION_ERROR", `${path3}.target.kind must be "block".`);
394886
- }
394887
- if (kind2 === "before") {
394888
- return {
394889
- kind: "before",
394890
- target: target3
394891
- };
394892
- }
394893
- return {
394894
- kind: "after",
394895
- target: target3
394896
- };
395669
+ expectOnlyKeys(obj, ["kind", "target"], path3);
395670
+ if (obj.target == null) {
395671
+ throw new CliError("VALIDATION_ERROR", `${path3} must include a "target" BlockNodeAddress.`);
394897
395672
  }
394898
- expectOnlyKeys(obj, ["kind", "nodeId"], path3);
394899
- const nodeId = expectString(obj.nodeId, `${path3}.nodeId`);
394900
- const target2 = { kind: "block", nodeType: "paragraph", nodeId };
394901
- if (kind2 === "before") {
394902
- return {
394903
- kind: "before",
394904
- target: target2
394905
- };
395673
+ const target2 = validateNodeAddress(obj.target, `${path3}.target`);
395674
+ if (target2.kind !== "block") {
395675
+ throw new CliError("VALIDATION_ERROR", `${path3}.target.kind must be "block".`);
394906
395676
  }
394907
- return {
394908
- kind: "after",
394909
- target: target2
394910
- };
395677
+ return { kind: kind2, target: target2 };
394911
395678
  }
394912
395679
  throw new CliError("VALIDATION_ERROR", `${path3}.kind must be one of: documentStart, documentEnd, before, after.`);
394913
395680
  }
@@ -396219,7 +396986,7 @@ var init_helper_commands = __esm(() => {
396219
396986
  description: "Apply strikethrough formatting to a text range.",
396220
396987
  category: "format",
396221
396988
  mutates: true,
396222
- examples: ["superdoc format strikethrough --blockId p1 --start 0 --end 5"]
396989
+ examples: ["superdoc format strikethrough --block-id p1 --start 0 --end 5"]
396223
396990
  },
396224
396991
  {
396225
396992
  tokens: ["track-changes", "accept"],
@@ -396268,9 +397035,7 @@ var init_helper_commands = __esm(() => {
396268
397035
  description: "Add a new comment thread anchored to a text range.",
396269
397036
  category: "comments",
396270
397037
  mutates: true,
396271
- examples: [
396272
- `superdoc comments add --target '{"kind":"text","blockId":"p1","range":{"start":0,"end":5}}' --text "Review this"`
396273
- ]
397038
+ examples: ['superdoc comments add --block-id p1 --start 0 --end 5 --text "Review this"']
396274
397039
  },
396275
397040
  {
396276
397041
  tokens: ["comments", "reply"],
@@ -396298,7 +397063,7 @@ var init_helper_commands = __esm(() => {
396298
397063
  category: "comments",
396299
397064
  mutates: true,
396300
397065
  examples: [
396301
- `superdoc comments move --id c1 --target '{"kind":"text","blockId":"p2","range":{"start":0,"end":5}}'`
397066
+ `superdoc comments move --id c1 --target-json '{"kind":"text","blockId":"p2","range":{"start":0,"end":5}}'`
396302
397067
  ]
396303
397068
  },
396304
397069
  {
@@ -396331,6 +397096,111 @@ var init_helper_commands = __esm(() => {
396331
397096
  ];
396332
397097
  });
396333
397098
 
397099
+ // src/cli/command-examples.ts
397100
+ var DOC_COMMAND_EXAMPLES;
397101
+ var init_command_examples = __esm(() => {
397102
+ DOC_COMMAND_EXAMPLES = {
397103
+ find: [
397104
+ 'superdoc find --type text --pattern "quarterly revenue" --limit 5',
397105
+ `superdoc find --select-json '{"type":"node","nodeType":"heading"}'`
397106
+ ],
397107
+ "query.match": [
397108
+ `superdoc query match --select-json '{"type":"text","pattern":"Introduction"}' --require exactlyOne`,
397109
+ `superdoc query match --select-json '{"type":"node","nodeType":"paragraph"}' --require any --limit 3`
397110
+ ],
397111
+ getNode: [`superdoc get-node --address-json '{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}'`],
397112
+ getNodeById: ["superdoc get-node-by-id --id abc123"],
397113
+ getText: ["superdoc get-text"],
397114
+ info: ["superdoc info"],
397115
+ insert: [
397116
+ 'superdoc insert --value "Hello, world!"',
397117
+ 'superdoc insert --block-id abc123 --value "Appended text"',
397118
+ 'superdoc insert --type markdown --value "## New Section"'
397119
+ ],
397120
+ replace: [
397121
+ 'superdoc replace --block-id abc123 --start 0 --end 5 --text "Updated"',
397122
+ 'superdoc replace --block-id abc123 --start 0 --end 5 --text "Updated" --dry-run',
397123
+ 'superdoc replace --block-id abc123 --start 0 --end 5 --text "Updated" --expected-revision 3'
397124
+ ],
397125
+ delete: [
397126
+ "superdoc delete --block-id abc123 --start 0 --end 10",
397127
+ "superdoc delete --block-id abc123 --start 0 --end 10 --dry-run"
397128
+ ],
397129
+ "blocks.list": [
397130
+ "superdoc blocks list",
397131
+ "superdoc blocks list --limit 20",
397132
+ "superdoc blocks list --offset 10 --limit 10",
397133
+ `superdoc blocks list --node-types-json '["paragraph","heading"]'`
397134
+ ],
397135
+ "blocks.delete": [
397136
+ "superdoc blocks delete --node-type paragraph --node-id abc123",
397137
+ "superdoc blocks delete --node-type paragraph --node-id abc123 --dry-run"
397138
+ ],
397139
+ "blocks.deleteRange": [
397140
+ `superdoc blocks delete-range --start-json '{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}' --end-json '{"kind":"block","nodeType":"paragraph","nodeId":"def456"}'`,
397141
+ `superdoc blocks delete-range --start-json '{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}' --end-json '{"kind":"block","nodeType":"paragraph","nodeId":"def456"}' --dry-run`
397142
+ ],
397143
+ "create.paragraph": [
397144
+ 'superdoc create paragraph --text "A new paragraph."',
397145
+ 'superdoc create paragraph --at document-end --text "Last paragraph."',
397146
+ `superdoc create paragraph --at-json '{"kind":"after","target":{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}}'`
397147
+ ],
397148
+ "create.heading": [
397149
+ `superdoc create heading --input-json '{"level":2,"text":"Section Title"}'`,
397150
+ `superdoc create heading --input-json '{"level":1,"text":"Document Title","at":{"kind":"documentStart"}}'`
397151
+ ],
397152
+ "create.image": ['superdoc create image --src "https://example.com/photo.png" --alt "Photo caption"'],
397153
+ "lists.list": ["superdoc lists list", "superdoc lists list --kind ordered"],
397154
+ "lists.get": [`superdoc lists get --address-json '{"kind":"block","nodeType":"listItem","nodeId":"li1"}'`],
397155
+ "lists.insert": [
397156
+ 'superdoc lists insert --node-id abc123 --position after --text "New list item"',
397157
+ "superdoc lists insert --node-id abc123 --position before"
397158
+ ],
397159
+ "lists.indent": ["superdoc lists indent --node-id abc123"],
397160
+ "lists.outdent": ["superdoc lists outdent --node-id abc123"],
397161
+ "lists.create": [
397162
+ `superdoc lists create --input-json '{"mode":"empty","at":{"kind":"block","nodeType":"paragraph","nodeId":"abc123"},"kind":"ordered"}'`
397163
+ ],
397164
+ "lists.attach": [
397165
+ `superdoc lists attach --input-json '{"target":{"kind":"block","nodeType":"listItem","nodeId":"abc123"},"direction":"above"}'`
397166
+ ],
397167
+ "lists.detach": ["superdoc lists detach --node-id abc123"],
397168
+ "lists.join": [
397169
+ `superdoc lists join --input-json '{"target":{"kind":"block","nodeType":"listItem","nodeId":"abc123"},"direction":"above"}'`
397170
+ ],
397171
+ "lists.separate": ["superdoc lists separate --node-id abc123"],
397172
+ "lists.setLevel": ["superdoc lists set-level --node-id abc123 --level 2"],
397173
+ "lists.setValue": ["superdoc lists set-value --node-id abc123 --value-json 5"],
397174
+ "lists.convertToText": ["superdoc lists convert-to-text --node-id abc123"],
397175
+ "lists.setType": [
397176
+ `superdoc lists set-type --target-json '{"kind":"block","nodeType":"listItem","nodeId":"abc123"}' --kind bullet`
397177
+ ],
397178
+ "format.apply": [`superdoc format apply --block-id abc123 --start 0 --end 10 --inline-json '{"bold":true}'`],
397179
+ "comments.create": ['superdoc comments create --block-id abc123 --start 0 --end 5 --text "Review this section"'],
397180
+ "comments.list": ["superdoc comments list"],
397181
+ "comments.get": ["superdoc comments get --id comment-123"],
397182
+ "comments.patch": ['superdoc comments patch --id comment-123 --text "Updated wording."'],
397183
+ "comments.delete": ["superdoc comments delete --id comment-123"],
397184
+ "trackChanges.list": ["superdoc track-changes list"],
397185
+ "trackChanges.get": ["superdoc track-changes get --id tc-123"],
397186
+ "trackChanges.decide": [`superdoc track-changes decide --decision accept --target-json '{"id":"tc-123"}'`],
397187
+ "history.get": ["superdoc history get"],
397188
+ "history.undo": ["superdoc history undo"],
397189
+ "history.redo": ["superdoc history redo"],
397190
+ "mutations.apply": [
397191
+ `superdoc mutations apply --atomic true --change-mode direct --steps-json '[{"id":"s1","op":"text.rewrite","where":{"by":"select","select":{"type":"text","pattern":"old"},"require":"first"},"args":{"replacement":{"text":"new"}}}]'`
397192
+ ],
397193
+ "mutations.preview": [
397194
+ `superdoc mutations preview --atomic true --change-mode direct --steps-json '[{"id":"s1","op":"text.rewrite","where":{"by":"select","select":{"type":"text","pattern":"old"},"require":"first"},"args":{"replacement":{"text":"new"}}}]'`
397195
+ ],
397196
+ "create.tableOfContents": [
397197
+ "superdoc create table-of-contents",
397198
+ `superdoc create table-of-contents --at-json '{"kind":"documentStart"}'`
397199
+ ],
397200
+ "capabilities.get": ["superdoc capabilities"]
397201
+ };
397202
+ });
397203
+
396334
397204
  // src/cli/commands.ts
396335
397205
  function buildDocBackedSpec(docApiId, cliOpId) {
396336
397206
  const tokens = cliCommandTokens(cliOpId);
@@ -396346,7 +397216,7 @@ function buildDocBackedSpec(docApiId, cliOpId) {
396346
397216
  requiresDocumentContext: cliRequiresDocumentContext(cliOpId),
396347
397217
  alias: false,
396348
397218
  canonicalKey: key3,
396349
- examples: []
397219
+ examples: DOC_COMMAND_EXAMPLES[docApiId] ?? []
396350
397220
  };
396351
397221
  }
396352
397222
  function buildCliOnlySpec(cliOnlyOp, cliOpId) {
@@ -396382,6 +397252,13 @@ function buildAllSpecs() {
396382
397252
  }
396383
397253
  function buildHelpText() {
396384
397254
  const lines = ["Usage: superdoc <command> [options]", ""];
397255
+ lines.push("Common tasks:");
397256
+ lines.push(" Find mutation target → query match");
397257
+ lines.push(" Insert between list items → lists insert");
397258
+ lines.push(" Create a paragraph → create paragraph");
397259
+ lines.push(" Insert inline text → insert");
397260
+ lines.push(" Batch formatting changes → mutations apply");
397261
+ lines.push("");
396385
397262
  const categories = new Map;
396386
397263
  for (const spec of CLI_COMMAND_SPECS) {
396387
397264
  if (spec.alias)
@@ -396423,6 +397300,7 @@ var init_commands = __esm(() => {
396423
397300
  init_src();
396424
397301
  init_operation_set();
396425
397302
  init_helper_commands();
397303
+ init_command_examples();
396426
397304
  init_operation_set();
396427
397305
  CLI_ONLY_OVERRIDES = {
396428
397306
  open: { mutates: true, examples: ["superdoc open my-doc.docx", "superdoc open my-doc.docx --session my-session"] },
@@ -396716,8 +397594,7 @@ var init_operation_params = __esm(() => {
396716
397594
  name: "dryRun",
396717
397595
  kind: "flag",
396718
397596
  flag: "dry-run",
396719
- type: "boolean",
396720
- agentVisible: false
397597
+ type: "boolean"
396721
397598
  };
396722
397599
  CHANGE_MODE_PARAM = {
396723
397600
  name: "changeMode",
@@ -396730,8 +397607,7 @@ var init_operation_params = __esm(() => {
396730
397607
  name: "expectedRevision",
396731
397608
  kind: "flag",
396732
397609
  flag: "expected-revision",
396733
- type: "number",
396734
- agentVisible: false
397610
+ type: "number"
396735
397611
  };
396736
397612
  USER_NAME_PARAM = {
396737
397613
  name: "userName",
@@ -396745,7 +397621,7 @@ var init_operation_params = __esm(() => {
396745
397621
  flag: "user-email",
396746
397622
  type: "string"
396747
397623
  };
396748
- AGENT_HIDDEN_PARAM_NAMES = new Set(["out", "expectedRevision", "dryRun"]);
397624
+ AGENT_HIDDEN_PARAM_NAMES = new Set(["out"]);
396749
397625
  OPERATION_CONSTRAINTS = {
396750
397626
  "doc.find": {
396751
397627
  requiresOneOf: [["type", "query"]],
@@ -396877,10 +397753,19 @@ var init_operation_params = __esm(() => {
396877
397753
  { name: "input", kind: "jsonFlag", flag: "input-json", type: "json" },
396878
397754
  ...LIST_TARGET_FLAT_PARAMS
396879
397755
  ],
397756
+ "doc.blocks.list": [
397757
+ { name: "offset", kind: "flag", flag: "offset", type: "number" },
397758
+ { name: "limit", kind: "flag", flag: "limit", type: "number" },
397759
+ { name: "nodeTypes", kind: "jsonFlag", flag: "node-types-json", type: "json" }
397760
+ ],
396880
397761
  "doc.blocks.delete": [
396881
397762
  { name: "nodeType", kind: "flag", flag: "node-type", type: "string" },
396882
397763
  { name: "nodeId", kind: "flag", flag: "node-id", type: "string" }
396883
397764
  ],
397765
+ "doc.blocks.deleteRange": [
397766
+ { name: "start", kind: "jsonFlag", flag: "start-json", type: "json" },
397767
+ { name: "end", kind: "jsonFlag", flag: "end-json", type: "json" }
397768
+ ],
396884
397769
  "doc.create.paragraph": [{ name: "input", kind: "jsonFlag", flag: "input-json", type: "json" }],
396885
397770
  "doc.create.heading": [{ name: "input", kind: "jsonFlag", flag: "input-json", type: "json" }]
396886
397771
  };
@@ -397396,6 +398281,7 @@ var init_introspection_dispatch = __esm(() => {
397396
398281
  document: {
397397
398282
  path: metadata.sourcePath,
397398
398283
  source: metadata.source,
398284
+ sourceByteLength: metadata.sourceSnapshot?.size ?? null,
397399
398285
  byteLength: byteLength3,
397400
398286
  revision: metadata.revision
397401
398287
  },
@@ -397410,6 +398296,9 @@ var init_introspection_dispatch = __esm(() => {
397410
398296
  `Context: ${metadata.contextId}`,
397411
398297
  `Default: ${activeSessionId ?? "<none>"}`,
397412
398298
  `Document: ${metadata.sourcePath ?? "<stdin>"}`,
398299
+ `Source: ${metadata.source}`,
398300
+ metadata.sourceSnapshot ? `Source size: ${metadata.sourceSnapshot.size} bytes` : undefined,
398301
+ `Working size: ${byteLength3} bytes`,
397413
398302
  `Session Type: ${metadata.sessionType}`,
397414
398303
  metadata.collaboration ? `Collab Doc ID: ${metadata.collaboration.documentId}` : undefined,
397415
398304
  `Revision: ${metadata.revision}`,
@@ -397475,13 +398364,19 @@ function ensureBlockTarget(value2, path3) {
397475
398364
  async function buildFlatInput(parsed, commandName) {
397476
398365
  const text9 = getStringOption(parsed, "text");
397477
398366
  const at = parseAtFlag(getStringOption(parsed, "at"), commandName);
398367
+ const atJson = await resolveJsonInput(parsed, "at");
397478
398368
  const beforePayload = await resolveJsonInput(parsed, "before-address");
397479
398369
  const afterPayload = await resolveJsonInput(parsed, "after-address");
397480
- if (beforePayload != null && afterPayload != null) {
397481
- throw new CliError("INVALID_ARGUMENT", `${commandName}: use only one of --before-address-json or --after-address-json.`);
398370
+ const locationForms = [at, atJson, beforePayload, afterPayload].filter((v) => v != null);
398371
+ if (locationForms.length > 1) {
398372
+ throw new CliError("INVALID_ARGUMENT", `${commandName}: use only one of --at, --at-json, --before-address-json, or --after-address-json.`);
397482
398373
  }
397483
- if (at && (beforePayload != null || afterPayload != null)) {
397484
- throw new CliError("INVALID_ARGUMENT", `${commandName}: --at cannot be combined with --before-address-json/--after-address-json.`);
398374
+ if (atJson != null) {
398375
+ const validated = validateCreateParagraphInput({ at: atJson, text: text9 }, "input");
398376
+ if (!validated.at) {
398377
+ throw new CliError("VALIDATION_ERROR", `${commandName}: --at-json produced an empty location. Provide a valid location object.`);
398378
+ }
398379
+ return validated;
397485
398380
  }
397486
398381
  if (beforePayload != null) {
397487
398382
  return {
@@ -397509,7 +398404,7 @@ async function buildFlatInput(parsed, commandName) {
397509
398404
  async function resolveCreateParagraphInput(parsed, commandName) {
397510
398405
  const inputJson = await resolveJsonInput(parsed, "input");
397511
398406
  const inputProvided = inputJson !== undefined;
397512
- const hasFlatFlags = getStringOption(parsed, "text") != null || getStringOption(parsed, "at") != null || getStringOption(parsed, "before-address-json") != null || getStringOption(parsed, "before-address-file") != null || getStringOption(parsed, "after-address-json") != null || getStringOption(parsed, "after-address-file") != null;
398407
+ const hasFlatFlags = getStringOption(parsed, "text") != null || getStringOption(parsed, "at") != null || getStringOption(parsed, "at-json") != null || getStringOption(parsed, "at-file") != null || getStringOption(parsed, "before-address-json") != null || getStringOption(parsed, "before-address-file") != null || getStringOption(parsed, "after-address-json") != null || getStringOption(parsed, "after-address-file") != null;
397513
398408
  if (inputProvided && hasFlatFlags) {
397514
398409
  throw new CliError("INVALID_ARGUMENT", `${commandName}: --input-json/--input-file cannot be combined with flat create flags.`);
397515
398410
  }
@@ -398066,6 +398961,8 @@ async function parseWrapperOperationInput(operationId, tokens, commandName, opti
398066
398961
  { name: "input-file", type: "string" },
398067
398962
  { name: "text", type: "string" },
398068
398963
  { name: "at", type: "string" },
398964
+ { name: "at-json", type: "string" },
398965
+ { name: "at-file", type: "string" },
398069
398966
  { name: "before-address-json", type: "string" },
398070
398967
  { name: "before-address-file", type: "string" },
398071
398968
  { name: "after-address-json", type: "string" },
@@ -398321,7 +399218,7 @@ async function runOpen(tokens, context) {
398321
399218
  document: {
398322
399219
  path: metadata.sourcePath,
398323
399220
  source: metadata.source,
398324
- byteLength: output.byteLength,
399221
+ byteLength: opened.meta.byteLength,
398325
399222
  revision: metadata.revision
398326
399223
  },
398327
399224
  dirty: metadata.dirty,