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

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 +1081 -147
  3. package/package.json +6 -6
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-BV6PERs7.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,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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_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);
@@ -217138,9 +217758,9 @@ var Node$13 = class Node$14 {
217138
217758
  return false;
217139
217759
  return Boolean(checker(attrs));
217140
217760
  }, SuperToolbar, ICONS, TEXTS, tableActionsOptions;
217141
- var init_src_BnjrN0Yi_es = __esm(() => {
217761
+ var init_src_BV6PERs7_es = __esm(() => {
217142
217762
  init_rolldown_runtime_B2q5OVn9_es();
217143
- init_SuperConverter_BeR1rqZz_es();
217763
+ init_SuperConverter_Cw5CEerM_es();
217144
217764
  init_jszip_ChlR43oI_es();
217145
217765
  init_uuid_qzgm05fK_es();
217146
217766
  init_constants_CMPtQbp7_es();
@@ -225692,8 +226312,9 @@ function print() { __p += __j.call(arguments, '') }
225692
226312
  justify: "both"
225693
226313
  };
225694
226314
  groupedCache = /* @__PURE__ */ new WeakMap;
225695
- SUPPORTED_NODE_TYPES = new Set(DELETABLE_BLOCK_NODE_TYPES2);
225696
- REJECTED_NODE_TYPES = new Set(["tableRow", "tableCell"]);
226315
+ SUPPORTED_DELETE_NODE_TYPES3 = new Set(DELETABLE_BLOCK_NODE_TYPES2);
226316
+ REJECTED_DELETE_NODE_TYPES3 = new Set(["tableRow", "tableCell"]);
226317
+ RANGE_DELETE_SAFE_NODE_TYPES = new Set(["passthroughBlock", "passthroughInline"]);
225697
226318
  ORDERED_PRESET_CONFIG = {
225698
226319
  decimal: {
225699
226320
  numFmt: "decimal",
@@ -250808,8 +251429,8 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
250808
251429
 
250809
251430
  // ../../packages/superdoc/dist/super-editor.es.js
250810
251431
  var init_super_editor_es = __esm(() => {
250811
- init_src_BnjrN0Yi_es();
250812
- init_SuperConverter_BeR1rqZz_es();
251432
+ init_src_BV6PERs7_es();
251433
+ init_SuperConverter_Cw5CEerM_es();
250813
251434
  init_jszip_ChlR43oI_es();
250814
251435
  init_xml_js_DLE8mr0n_es();
250815
251436
  init_constants_CMPtQbp7_es();
@@ -252258,7 +252879,18 @@ var OBJECT_REPLACEMENT_CHAR2 = "";
252258
252879
 
252259
252880
  // ../../packages/super-editor/src/document-api-adapters/helpers/adapter-utils.ts
252260
252881
  function findTextBlockCandidates2(index2, blockId) {
252261
- return index2.candidates.filter((candidate) => candidate.nodeId === blockId && isTextBlockCandidate2(candidate));
252882
+ const primary = index2.candidates.filter((c) => c.nodeId === blockId && isTextBlockCandidate2(c));
252883
+ if (primary.length > 0)
252884
+ return primary;
252885
+ try {
252886
+ const resolved = findBlockByNodeIdOnly2(index2, blockId);
252887
+ if (isTextBlockCandidate2(resolved))
252888
+ return [resolved];
252889
+ } catch (e) {
252890
+ if (e instanceof DocumentApiAdapterError3 && e.code === "AMBIGUOUS_TARGET")
252891
+ throw e;
252892
+ }
252893
+ return [];
252262
252894
  }
252263
252895
  function assertUnambiguous2(matches2, blockId) {
252264
252896
  if (matches2.length > 1) {
@@ -319805,8 +320437,32 @@ function resolveBlockInsertionPos2(editor, anchorBlockId, position5, stepId) {
319805
320437
  }
319806
320438
  return position5 === "before" ? candidate.pos : candidate.end;
319807
320439
  }
320440
+ function resolveCreateAnchor2(editor, target, position5, stepId) {
320441
+ const index3 = getBlockIndex2(editor);
320442
+ let candidate;
320443
+ try {
320444
+ candidate = findBlockByNodeIdOnly2(index3, target.nodeId);
320445
+ } catch (e) {
320446
+ if (e instanceof Error && "code" in e) {
320447
+ throw planError2(e.code, e.message, stepId, e.details);
320448
+ }
320449
+ throw e;
320450
+ }
320451
+ if (target.nodeType && candidate.nodeType !== target.nodeType) {
320452
+ 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}.`;
320453
+ throw planError2("INVALID_TARGET", `Expected ${target.nodeType}:${target.nodeId} but found ${candidate.nodeType}:${candidate.nodeId}.`, stepId, {
320454
+ requestedNodeType: target.nodeType,
320455
+ actualNodeType: candidate.nodeType,
320456
+ nodeId: target.nodeId,
320457
+ remediation
320458
+ });
320459
+ }
320460
+ const pos = position5 === "before" ? candidate.pos : candidate.end;
320461
+ return { pos, anchor: candidate };
320462
+ }
319808
320463
  var init_create_insertion = __esm(() => {
319809
320464
  init_index_cache();
320465
+ init_node_address_resolver();
319810
320466
  init_errors4();
319811
320467
  });
319812
320468
 
@@ -324397,13 +325053,14 @@ var init_tracked_change_refs = __esm(() => {
324397
325053
  });
324398
325054
 
324399
325055
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/create-wrappers.ts
324400
- function resolveCreateInsertPosition2(editor, at, operationLabel) {
325056
+ function resolveCreateInsertPosition2(editor, at) {
324401
325057
  const location3 = at ?? { kind: "documentEnd" };
324402
325058
  if (location3.kind === "documentStart")
324403
325059
  return 0;
324404
325060
  if (location3.kind === "documentEnd")
324405
325061
  return editor.state.doc.content.size;
324406
- return resolveBlockInsertionPos2(editor, location3.target.nodeId, location3.kind);
325062
+ const { pos } = resolveCreateAnchor2(editor, location3.target, location3.kind);
325063
+ return pos;
324407
325064
  }
324408
325065
  function resolveCreatedBlock2(editor, nodeType, blockId) {
324409
325066
  const index3 = getBlockIndex2(editor);
@@ -324463,7 +325120,7 @@ function createParagraphWrapper2(editor, input2, options) {
324463
325120
  if (mode === "tracked") {
324464
325121
  ensureTrackedCapability2(editor, { operation: "create.paragraph" });
324465
325122
  }
324466
- const insertAt = resolveCreateInsertPosition2(editor, input2.at, "paragraph");
325123
+ const insertAt = resolveCreateInsertPosition2(editor, input2.at);
324467
325124
  if (options?.dryRun) {
324468
325125
  const canInsert = editor.can().insertParagraphAt?.({
324469
325126
  pos: insertAt,
@@ -324494,6 +325151,7 @@ function createParagraphWrapper2(editor, input2, options) {
324494
325151
  };
324495
325152
  }
324496
325153
  const paragraphId = v42();
325154
+ let canonicalId = paragraphId;
324497
325155
  let trackedChangeRefs;
324498
325156
  const receipt2 = executeDomainCommand2(editor, () => {
324499
325157
  const didApply = insertParagraphAt2({
@@ -324506,6 +325164,7 @@ function createParagraphWrapper2(editor, input2, options) {
324506
325164
  clearIndexCache2(editor);
324507
325165
  try {
324508
325166
  const paragraph3 = resolveCreatedBlock2(editor, "paragraph", paragraphId);
325167
+ canonicalId = paragraph3.nodeId;
324509
325168
  if (mode === "tracked") {
324510
325169
  trackedChangeRefs = collectTrackInsertRefsInRange2(editor, paragraph3.pos, paragraph3.end);
324511
325170
  }
@@ -324525,7 +325184,7 @@ function createParagraphWrapper2(editor, input2, options) {
324525
325184
  }
324526
325185
  };
324527
325186
  }
324528
- return buildParagraphCreateSuccess2(paragraphId, trackedChangeRefs);
325187
+ return buildParagraphCreateSuccess2(canonicalId, trackedChangeRefs);
324529
325188
  }
324530
325189
  function createHeadingWrapper2(editor, input2, options) {
324531
325190
  const insertHeadingAt2 = requireEditorCommand2(editor.commands?.insertHeadingAt, "create.heading");
@@ -324533,7 +325192,7 @@ function createHeadingWrapper2(editor, input2, options) {
324533
325192
  if (mode === "tracked") {
324534
325193
  ensureTrackedCapability2(editor, { operation: "create.heading" });
324535
325194
  }
324536
- const insertAt = resolveCreateInsertPosition2(editor, input2.at, "heading");
325195
+ const insertAt = resolveCreateInsertPosition2(editor, input2.at);
324537
325196
  if (options?.dryRun) {
324538
325197
  const canInsert = editor.can().insertHeadingAt?.({
324539
325198
  pos: insertAt,
@@ -324565,6 +325224,7 @@ function createHeadingWrapper2(editor, input2, options) {
324565
325224
  };
324566
325225
  }
324567
325226
  const headingId = v42();
325227
+ let canonicalId = headingId;
324568
325228
  let trackedChangeRefs;
324569
325229
  const receipt2 = executeDomainCommand2(editor, () => {
324570
325230
  const didApply = insertHeadingAt2({
@@ -324578,6 +325238,7 @@ function createHeadingWrapper2(editor, input2, options) {
324578
325238
  clearIndexCache2(editor);
324579
325239
  try {
324580
325240
  const heading4 = resolveCreatedBlock2(editor, "heading", headingId);
325241
+ canonicalId = heading4.nodeId;
324581
325242
  if (mode === "tracked") {
324582
325243
  trackedChangeRefs = collectTrackInsertRefsInRange2(editor, heading4.pos, heading4.end);
324583
325244
  }
@@ -324597,7 +325258,7 @@ function createHeadingWrapper2(editor, input2, options) {
324597
325258
  }
324598
325259
  };
324599
325260
  }
324600
- return buildHeadingCreateSuccess2(headingId, trackedChangeRefs);
325261
+ return buildHeadingCreateSuccess2(canonicalId, trackedChangeRefs);
324601
325262
  }
324602
325263
  var init_create_wrappers = __esm(() => {
324603
325264
  init_wrapper();
@@ -324610,15 +325271,21 @@ var init_create_wrappers = __esm(() => {
324610
325271
  });
324611
325272
 
324612
325273
  // ../../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
- }
325274
+ function extractTextPreview2(node4) {
325275
+ if (!node4.isTextblock)
325276
+ return null;
325277
+ const text9 = node4.textContent;
325278
+ if (text9.length <= TEXT_PREVIEW_MAX_LENGTH2)
325279
+ return text9;
325280
+ return text9.slice(0, TEXT_PREVIEW_MAX_LENGTH2);
325281
+ }
325282
+ function toBlockSummary2(candidate, ordinal) {
325283
+ return {
325284
+ ordinal,
325285
+ nodeId: candidate.nodeId,
325286
+ nodeType: candidate.nodeType,
325287
+ textPreview: extractTextPreview2(candidate.node)
325288
+ };
324622
325289
  }
324623
325290
  function resolveSdBlockId2(candidate) {
324624
325291
  const sdBlockId = candidate.node.attrs?.sdBlockId;
@@ -324626,6 +325293,16 @@ function resolveSdBlockId2(candidate) {
324626
325293
  return sdBlockId;
324627
325294
  throw new DocumentApiAdapterError3("INTERNAL_ERROR", "Resolved block candidate is missing sdBlockId attribute. This indicates a schema/extension invariant violation.", { attrs: candidate.node.attrs });
324628
325295
  }
325296
+ function validateDeleteTargetNodeType2(nodeType) {
325297
+ if (REJECTED_DELETE_NODE_TYPES4.has(nodeType)) {
325298
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets. Table row/column operations are out of scope.`, { nodeType });
325299
+ }
325300
+ if (!SUPPORTED_DELETE_NODE_TYPES4.has(nodeType)) {
325301
+ throw new DocumentApiAdapterError3("INVALID_TARGET", `blocks.delete does not support "${nodeType}" targets.`, {
325302
+ nodeType
325303
+ });
325304
+ }
325305
+ }
324629
325306
  function validateCommandLayerUniqueness2(editor, sdBlockId) {
324630
325307
  const getBlockNodeById = editor.helpers?.blockNode?.getBlockNodeById;
324631
325308
  if (typeof getBlockNodeById !== "function") {
@@ -324639,30 +325316,163 @@ function validateCommandLayerUniqueness2(editor, sdBlockId) {
324639
325316
  throw new DocumentApiAdapterError3("AMBIGUOUS_TARGET", `Multiple blocks share sdBlockId "${sdBlockId}" at the command layer.`, { sdBlockId, count: matches3.length });
324640
325317
  }
324641
325318
  }
325319
+ function collectTopLevelBlocks2(editor) {
325320
+ const doc4 = editor.state.doc;
325321
+ const results = [];
325322
+ let offset2 = 0;
325323
+ for (let i4 = 0;i4 < doc4.childCount; i4++) {
325324
+ const child = doc4.child(i4);
325325
+ const nodeType = mapBlockNodeType2(child);
325326
+ const pos = offset2;
325327
+ if (nodeType) {
325328
+ const nodeId = resolveBlockNodeId2(child, pos, nodeType);
325329
+ if (nodeId) {
325330
+ results.push({ node: child, pos, end: pos + child.nodeSize, nodeType, nodeId });
325331
+ }
325332
+ }
325333
+ offset2 += child.nodeSize;
325334
+ }
325335
+ return results;
325336
+ }
325337
+ function blocksListWrapper2(editor, input2) {
325338
+ const topLevel = collectTopLevelBlocks2(editor);
325339
+ const filtered = input2?.nodeTypes ? topLevel.filter((b2) => input2.nodeTypes.includes(b2.nodeType)) : topLevel;
325340
+ const total = filtered.length;
325341
+ const offset2 = input2?.offset ?? 0;
325342
+ const limit = input2?.limit ?? total;
325343
+ const paged = filtered.slice(offset2, offset2 + limit);
325344
+ const blocks2 = paged.map((candidate, i4) => ({
325345
+ ordinal: offset2 + i4,
325346
+ nodeId: candidate.nodeId,
325347
+ nodeType: candidate.nodeType,
325348
+ textPreview: extractTextPreview2(candidate.node),
325349
+ isEmpty: candidate.node.textContent.length === 0
325350
+ }));
325351
+ return { total, blocks: blocks2, revision: getRevision2(editor) };
325352
+ }
324642
325353
  function blocksDeleteWrapper2(editor, input2, options) {
324643
325354
  rejectTrackedMode2("blocks.delete", options);
324644
325355
  const index3 = getBlockIndex2(editor);
324645
325356
  const candidate = findBlockByIdStrict2(index3, input2.target);
324646
- validateTargetNodeType2(candidate.nodeType);
325357
+ validateDeleteTargetNodeType2(candidate.nodeType);
325358
+ const topLevel = collectTopLevelBlocks2(editor);
325359
+ const candidateOrdinal = topLevel.findIndex((b2) => b2.nodeId === candidate.nodeId && b2.nodeType === candidate.nodeType);
325360
+ const deletedBlock = toBlockSummary2(candidate, candidateOrdinal);
324647
325361
  const sdBlockId = resolveSdBlockId2(candidate);
324648
325362
  const deleteBlockNodeById = requireEditorCommand2(editor.commands?.deleteBlockNodeById, "blocks.delete");
324649
325363
  validateCommandLayerUniqueness2(editor, sdBlockId);
324650
325364
  if (options?.dryRun) {
324651
- return { success: true, deleted: input2.target };
325365
+ return { success: true, deleted: input2.target, deletedBlock };
324652
325366
  }
324653
325367
  const receipt2 = executeDomainCommand2(editor, () => {
324654
325368
  const didApply = deleteBlockNodeById(sdBlockId);
324655
- if (didApply) {
325369
+ if (didApply)
324656
325370
  clearIndexCache2(editor);
324657
- }
324658
325371
  return didApply;
324659
325372
  }, { expectedRevision: options?.expectedRevision });
324660
325373
  if (receipt2.steps[0]?.effect !== "changed") {
324661
325374
  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
325375
  }
324663
- return { success: true, deleted: input2.target };
325376
+ return { success: true, deleted: input2.target, deletedBlock };
325377
+ }
325378
+ function hasSectionBreak2(candidate) {
325379
+ const attrs = candidate.node.attrs;
325380
+ const pPr = attrs?.paragraphProperties;
325381
+ return pPr?.sectPr != null && typeof pPr.sectPr === "object";
325382
+ }
325383
+ function resolveTopLevelOrdinal2(topLevel, candidate, label) {
325384
+ const idx = topLevel.findIndex((b2) => b2.nodeId === candidate.nodeId && b2.nodeType === candidate.nodeType);
325385
+ if (idx !== -1)
325386
+ return idx;
325387
+ 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 });
325388
+ }
325389
+ function resolveRangeEndpoint2(index3, address2, label) {
325390
+ const key2 = `${address2.nodeType}:${address2.nodeId}`;
325391
+ if (index3.ambiguous.has(key2)) {
325392
+ throw new DocumentApiAdapterError3("AMBIGUOUS_TARGET", `Multiple blocks share key "${key2}".`, {
325393
+ target: address2
325394
+ });
325395
+ }
325396
+ const candidate = index3.byId.get(key2);
325397
+ if (candidate)
325398
+ return candidate;
325399
+ const mismatch = index3.candidates.find((c) => c.nodeId === address2.nodeId);
325400
+ if (mismatch) {
325401
+ 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 });
325402
+ }
325403
+ throw new DocumentApiAdapterError3("TARGET_NOT_FOUND", `Block "${key2}" was not found.`, {
325404
+ target: address2
325405
+ });
325406
+ }
325407
+ function rejectUnmappedNodesInRange2(doc4, rangeBlocks) {
325408
+ if (rangeBlocks.length === 0)
325409
+ return;
325410
+ const rangeFrom = rangeBlocks[0].pos;
325411
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
325412
+ const recognizedPositions = new Set(rangeBlocks.map((b2) => b2.pos));
325413
+ let offset2 = 0;
325414
+ for (let i4 = 0;i4 < doc4.childCount; i4++) {
325415
+ const child = doc4.child(i4);
325416
+ const childEnd = offset2 + child.nodeSize;
325417
+ if (childEnd > rangeFrom && offset2 < rangeTo && !recognizedPositions.has(offset2)) {
325418
+ if (!RANGE_DELETE_SAFE_NODE_TYPES2.has(child.type.name)) {
325419
+ 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 });
325420
+ }
325421
+ }
325422
+ offset2 = childEnd;
325423
+ }
325424
+ }
325425
+ function blocksDeleteRangeWrapper2(editor, input2, options) {
325426
+ rejectTrackedMode2("blocks.deleteRange", options);
325427
+ const topLevel = collectTopLevelBlocks2(editor);
325428
+ const index3 = getBlockIndex2(editor);
325429
+ const startCandidate = resolveRangeEndpoint2(index3, input2.start, "start");
325430
+ const endCandidate = resolveRangeEndpoint2(index3, input2.end, "end");
325431
+ const startOrdinal = resolveTopLevelOrdinal2(topLevel, startCandidate, "start");
325432
+ const endOrdinal = resolveTopLevelOrdinal2(topLevel, endCandidate, "end");
325433
+ if (startOrdinal > endOrdinal) {
325434
+ 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 });
325435
+ }
325436
+ const rangeBlocks = topLevel.slice(startOrdinal, endOrdinal + 1);
325437
+ rejectUnmappedNodesInRange2(editor.state.doc, rangeBlocks);
325438
+ for (const block of rangeBlocks) {
325439
+ if (hasSectionBreak2(block)) {
325440
+ 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 });
325441
+ }
325442
+ }
325443
+ const deletedBlocks = rangeBlocks.map((c, i4) => toBlockSummary2(c, startOrdinal + i4));
325444
+ const revisionBefore = getRevision2(editor);
325445
+ if (options?.dryRun) {
325446
+ return {
325447
+ success: true,
325448
+ deletedCount: rangeBlocks.length,
325449
+ deletedBlocks,
325450
+ revision: { before: revisionBefore, after: revisionBefore },
325451
+ dryRun: true
325452
+ };
325453
+ }
325454
+ const rangeFrom = rangeBlocks[0].pos;
325455
+ const rangeTo = rangeBlocks[rangeBlocks.length - 1].end;
325456
+ const receipt2 = executeDomainCommand2(editor, () => {
325457
+ const tr = editor.state.tr;
325458
+ tr.delete(rangeFrom, rangeTo);
325459
+ editor.dispatch(tr);
325460
+ clearIndexCache2(editor);
325461
+ return true;
325462
+ }, { expectedRevision: options?.expectedRevision });
325463
+ if (receipt2.steps[0]?.effect !== "changed") {
325464
+ throw new DocumentApiAdapterError3("INTERNAL_ERROR", "blocks.deleteRange command returned false despite passing all pre-apply checks.", { start: input2.start, end: input2.end });
325465
+ }
325466
+ const revisionAfter = getRevision2(editor);
325467
+ return {
325468
+ success: true,
325469
+ deletedCount: rangeBlocks.length,
325470
+ deletedBlocks,
325471
+ revision: { before: revisionBefore, after: revisionAfter },
325472
+ dryRun: false
325473
+ };
324664
325474
  }
324665
- var SUPPORTED_NODE_TYPES2, REJECTED_NODE_TYPES2;
325475
+ var SUPPORTED_DELETE_NODE_TYPES4, REJECTED_DELETE_NODE_TYPES4, TEXT_PREVIEW_MAX_LENGTH2 = 80, RANGE_DELETE_SAFE_NODE_TYPES2;
324666
325476
  var init_blocks_wrappers = __esm(() => {
324667
325477
  init_src();
324668
325478
  init_index_cache();
@@ -324670,8 +325480,10 @@ var init_blocks_wrappers = __esm(() => {
324670
325480
  init_errors3();
324671
325481
  init_mutation_helpers();
324672
325482
  init_plan_wrappers();
324673
- SUPPORTED_NODE_TYPES2 = new Set(DELETABLE_BLOCK_NODE_TYPES);
324674
- REJECTED_NODE_TYPES2 = new Set(["tableRow", "tableCell"]);
325483
+ init_revision_tracker();
325484
+ SUPPORTED_DELETE_NODE_TYPES4 = new Set(DELETABLE_BLOCK_NODE_TYPES);
325485
+ REJECTED_DELETE_NODE_TYPES4 = new Set(["tableRow", "tableCell"]);
325486
+ RANGE_DELETE_SAFE_NODE_TYPES2 = new Set(["passthroughBlock", "passthroughInline"]);
324675
325487
  });
324676
325488
 
324677
325489
  // ../../packages/super-editor/src/document-api-adapters/helpers/list-sequence-helpers.ts
@@ -332608,10 +333420,15 @@ function createHistoryAdapter2(editor) {
332608
333420
  });
332609
333421
  }
332610
333422
  const revBefore = getRevision2(editor);
333423
+ const depth = getUndoDepth2(editor);
333424
+ if (depth === 0) {
333425
+ return { noop: true, reason: "EMPTY_UNDO_STACK", revision: { before: revBefore, after: revBefore } };
333426
+ }
332611
333427
  const success = Boolean(editor.commands.undo());
332612
333428
  const revAfter = getRevision2(editor);
332613
333429
  return {
332614
333430
  noop: !success,
333431
+ reason: success ? undefined : "NO_EFFECT",
332615
333432
  revision: { before: revBefore, after: revAfter }
332616
333433
  };
332617
333434
  },
@@ -332622,10 +333439,15 @@ function createHistoryAdapter2(editor) {
332622
333439
  });
332623
333440
  }
332624
333441
  const revBefore = getRevision2(editor);
333442
+ const depth = getRedoDepth2(editor);
333443
+ if (depth === 0) {
333444
+ return { noop: true, reason: "EMPTY_REDO_STACK", revision: { before: revBefore, after: revBefore } };
333445
+ }
332625
333446
  const success = Boolean(editor.commands.redo());
332626
333447
  const revAfter = getRevision2(editor);
332627
333448
  return {
332628
333449
  noop: !success,
333450
+ reason: success ? undefined : "NO_EFFECT",
332629
333451
  revision: { before: revBefore, after: revAfter }
332630
333452
  };
332631
333453
  }
@@ -333286,7 +334108,7 @@ function createTableOfContentsWrapper2(editor, input2, options) {
333286
334108
  } else if (at.kind === "documentEnd") {
333287
334109
  pos = editor.state.doc.content.size;
333288
334110
  } else {
333289
- pos = resolveBlockInsertionPos2(editor, at.target.nodeId, at.kind);
334111
+ pos = resolveCreateAnchor2(editor, at.target, at.kind).pos;
333290
334112
  }
333291
334113
  const config41 = input2.config ? applyTocPatchTyped2(DEFAULT_TOC_CONFIG2, input2.config) : DEFAULT_TOC_CONFIG2;
333292
334114
  const instruction = serializeTocInstruction2(config41);
@@ -333778,9 +334600,9 @@ function resolveImageInsertPosition2(editor, location3) {
333778
334600
  return editor.state.doc.content.size;
333779
334601
  case "before":
333780
334602
  case "after":
333781
- return resolveBlockInsertionPos2(editor, location3.target.nodeId, location3.kind);
334603
+ return resolveCreateAnchor2(editor, location3.target, location3.kind).pos;
333782
334604
  case "inParagraph": {
333783
- const pos = resolveBlockInsertionPos2(editor, location3.target.nodeId, "before");
334605
+ const { pos } = resolveCreateAnchor2(editor, location3.target, "before");
333784
334606
  return pos + 1 + (location3.offset ?? 0);
333785
334607
  }
333786
334608
  default: {
@@ -340216,7 +341038,9 @@ function assembleDocumentApiAdapters2(editor) {
340216
341038
  rejectAll: (input2, options) => trackChangesRejectAllWrapper2(editor, input2, options)
340217
341039
  },
340218
341040
  blocks: {
340219
- delete: (input2, options) => blocksDeleteWrapper2(editor, input2, options)
341041
+ list: (input2) => blocksListWrapper2(editor, input2),
341042
+ delete: (input2, options) => blocksDeleteWrapper2(editor, input2, options),
341043
+ deleteRange: (input2, options) => blocksDeleteRangeWrapper2(editor, input2, options)
340220
341044
  },
340221
341045
  create: {
340222
341046
  paragraph: (input2, options) => createParagraphWrapper2(editor, input2, options),
@@ -394398,7 +395222,7 @@ function mapListsError(operationId, error2, code10) {
394398
395222
  return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
394399
395223
  }
394400
395224
  if (code10 === "INVALID_TARGET") {
394401
- return new CliError("INVALID_ARGUMENT", message, { operationId, details });
395225
+ return new CliError("INVALID_TARGET", message, { operationId, details });
394402
395226
  }
394403
395227
  if (code10 === "TRACK_CHANGE_COMMAND_UNAVAILABLE" || code10 === "CAPABILITY_UNAVAILABLE") {
394404
395228
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", message, { operationId, details });
@@ -394473,9 +395297,12 @@ function mapCreateError(operationId, error2, code10) {
394473
395297
  if (code10 === "TARGET_NOT_FOUND") {
394474
395298
  return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
394475
395299
  }
394476
- if (code10 === "AMBIGUOUS_TARGET" || code10 === "INVALID_TARGET") {
395300
+ if (code10 === "AMBIGUOUS_TARGET") {
394477
395301
  return new CliError("INVALID_ARGUMENT", message, { operationId, details });
394478
395302
  }
395303
+ if (code10 === "INVALID_TARGET") {
395304
+ return new CliError("INVALID_TARGET", message, { operationId, details });
395305
+ }
394479
395306
  if (code10 === "TRACK_CHANGE_COMMAND_UNAVAILABLE") {
394480
395307
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", message, { operationId, details });
394481
395308
  }
@@ -394609,7 +395436,7 @@ function mapFailedReceipt(operationId, result2) {
394609
395436
  }
394610
395437
  if (family === "lists") {
394611
395438
  if (failureCode === "INVALID_TARGET") {
394612
- return new CliError("INVALID_ARGUMENT", failureMessage, { operationId, failure });
395439
+ return new CliError("INVALID_TARGET", failureMessage, { operationId, failure });
394613
395440
  }
394614
395441
  if (failureCode === "CAPABILITY_UNAVAILABLE") {
394615
395442
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure });
@@ -394636,7 +395463,7 @@ function mapFailedReceipt(operationId, result2) {
394636
395463
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure });
394637
395464
  }
394638
395465
  if (failureCode === "INVALID_TARGET") {
394639
- return new CliError("INVALID_ARGUMENT", failureMessage, { operationId, failure });
395466
+ return new CliError("INVALID_TARGET", failureMessage, { operationId, failure });
394640
395467
  }
394641
395468
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure });
394642
395469
  }
@@ -394873,41 +395700,18 @@ function validateCreateParagraphLocation(value2, path3) {
394873
395700
  return { kind: kind2 };
394874
395701
  }
394875
395702
  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.`);
395703
+ if (obj.nodeId != null) {
395704
+ throw new CliError("VALIDATION_ERROR", `${path3}: bare "nodeId" shorthand is not supported. Use "target" with an explicit { kind: "block", nodeType, nodeId }.`);
394880
395705
  }
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
- };
395706
+ expectOnlyKeys(obj, ["kind", "target"], path3);
395707
+ if (obj.target == null) {
395708
+ throw new CliError("VALIDATION_ERROR", `${path3} must include a "target" BlockNodeAddress.`);
394897
395709
  }
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
- };
395710
+ const target2 = validateNodeAddress(obj.target, `${path3}.target`);
395711
+ if (target2.kind !== "block") {
395712
+ throw new CliError("VALIDATION_ERROR", `${path3}.target.kind must be "block".`);
394906
395713
  }
394907
- return {
394908
- kind: "after",
394909
- target: target2
394910
- };
395714
+ return { kind: kind2, target: target2 };
394911
395715
  }
394912
395716
  throw new CliError("VALIDATION_ERROR", `${path3}.kind must be one of: documentStart, documentEnd, before, after.`);
394913
395717
  }
@@ -396219,7 +397023,7 @@ var init_helper_commands = __esm(() => {
396219
397023
  description: "Apply strikethrough formatting to a text range.",
396220
397024
  category: "format",
396221
397025
  mutates: true,
396222
- examples: ["superdoc format strikethrough --blockId p1 --start 0 --end 5"]
397026
+ examples: ["superdoc format strikethrough --block-id p1 --start 0 --end 5"]
396223
397027
  },
396224
397028
  {
396225
397029
  tokens: ["track-changes", "accept"],
@@ -396268,9 +397072,7 @@ var init_helper_commands = __esm(() => {
396268
397072
  description: "Add a new comment thread anchored to a text range.",
396269
397073
  category: "comments",
396270
397074
  mutates: true,
396271
- examples: [
396272
- `superdoc comments add --target '{"kind":"text","blockId":"p1","range":{"start":0,"end":5}}' --text "Review this"`
396273
- ]
397075
+ examples: ['superdoc comments add --block-id p1 --start 0 --end 5 --text "Review this"']
396274
397076
  },
396275
397077
  {
396276
397078
  tokens: ["comments", "reply"],
@@ -396298,7 +397100,7 @@ var init_helper_commands = __esm(() => {
396298
397100
  category: "comments",
396299
397101
  mutates: true,
396300
397102
  examples: [
396301
- `superdoc comments move --id c1 --target '{"kind":"text","blockId":"p2","range":{"start":0,"end":5}}'`
397103
+ `superdoc comments move --id c1 --target-json '{"kind":"text","blockId":"p2","range":{"start":0,"end":5}}'`
396302
397104
  ]
396303
397105
  },
396304
397106
  {
@@ -396331,6 +397133,111 @@ var init_helper_commands = __esm(() => {
396331
397133
  ];
396332
397134
  });
396333
397135
 
397136
+ // src/cli/command-examples.ts
397137
+ var DOC_COMMAND_EXAMPLES;
397138
+ var init_command_examples = __esm(() => {
397139
+ DOC_COMMAND_EXAMPLES = {
397140
+ find: [
397141
+ 'superdoc find --type text --pattern "quarterly revenue" --limit 5',
397142
+ `superdoc find --select-json '{"type":"node","nodeType":"heading"}'`
397143
+ ],
397144
+ "query.match": [
397145
+ `superdoc query match --select-json '{"type":"text","pattern":"Introduction"}' --require exactlyOne`,
397146
+ `superdoc query match --select-json '{"type":"node","nodeType":"paragraph"}' --require any --limit 3`
397147
+ ],
397148
+ getNode: [`superdoc get-node --address-json '{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}'`],
397149
+ getNodeById: ["superdoc get-node-by-id --id abc123"],
397150
+ getText: ["superdoc get-text"],
397151
+ info: ["superdoc info"],
397152
+ insert: [
397153
+ 'superdoc insert --value "Hello, world!"',
397154
+ 'superdoc insert --block-id abc123 --value "Appended text"',
397155
+ 'superdoc insert --type markdown --value "## New Section"'
397156
+ ],
397157
+ replace: [
397158
+ 'superdoc replace --block-id abc123 --start 0 --end 5 --text "Updated"',
397159
+ 'superdoc replace --block-id abc123 --start 0 --end 5 --text "Updated" --dry-run',
397160
+ 'superdoc replace --block-id abc123 --start 0 --end 5 --text "Updated" --expected-revision 3'
397161
+ ],
397162
+ delete: [
397163
+ "superdoc delete --block-id abc123 --start 0 --end 10",
397164
+ "superdoc delete --block-id abc123 --start 0 --end 10 --dry-run"
397165
+ ],
397166
+ "blocks.list": [
397167
+ "superdoc blocks list",
397168
+ "superdoc blocks list --limit 20",
397169
+ "superdoc blocks list --offset 10 --limit 10",
397170
+ `superdoc blocks list --node-types-json '["paragraph","heading"]'`
397171
+ ],
397172
+ "blocks.delete": [
397173
+ "superdoc blocks delete --node-type paragraph --node-id abc123",
397174
+ "superdoc blocks delete --node-type paragraph --node-id abc123 --dry-run"
397175
+ ],
397176
+ "blocks.deleteRange": [
397177
+ `superdoc blocks delete-range --start-json '{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}' --end-json '{"kind":"block","nodeType":"paragraph","nodeId":"def456"}'`,
397178
+ `superdoc blocks delete-range --start-json '{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}' --end-json '{"kind":"block","nodeType":"paragraph","nodeId":"def456"}' --dry-run`
397179
+ ],
397180
+ "create.paragraph": [
397181
+ 'superdoc create paragraph --text "A new paragraph."',
397182
+ 'superdoc create paragraph --at document-end --text "Last paragraph."',
397183
+ `superdoc create paragraph --at-json '{"kind":"after","target":{"kind":"block","nodeType":"paragraph","nodeId":"abc123"}}'`
397184
+ ],
397185
+ "create.heading": [
397186
+ `superdoc create heading --input-json '{"level":2,"text":"Section Title"}'`,
397187
+ `superdoc create heading --input-json '{"level":1,"text":"Document Title","at":{"kind":"documentStart"}}'`
397188
+ ],
397189
+ "create.image": ['superdoc create image --src "https://example.com/photo.png" --alt "Photo caption"'],
397190
+ "lists.list": ["superdoc lists list", "superdoc lists list --kind ordered"],
397191
+ "lists.get": [`superdoc lists get --address-json '{"kind":"block","nodeType":"listItem","nodeId":"li1"}'`],
397192
+ "lists.insert": [
397193
+ 'superdoc lists insert --node-id abc123 --position after --text "New list item"',
397194
+ "superdoc lists insert --node-id abc123 --position before"
397195
+ ],
397196
+ "lists.indent": ["superdoc lists indent --node-id abc123"],
397197
+ "lists.outdent": ["superdoc lists outdent --node-id abc123"],
397198
+ "lists.create": [
397199
+ `superdoc lists create --input-json '{"mode":"empty","at":{"kind":"block","nodeType":"paragraph","nodeId":"abc123"},"kind":"ordered"}'`
397200
+ ],
397201
+ "lists.attach": [
397202
+ `superdoc lists attach --input-json '{"target":{"kind":"block","nodeType":"listItem","nodeId":"abc123"},"direction":"above"}'`
397203
+ ],
397204
+ "lists.detach": ["superdoc lists detach --node-id abc123"],
397205
+ "lists.join": [
397206
+ `superdoc lists join --input-json '{"target":{"kind":"block","nodeType":"listItem","nodeId":"abc123"},"direction":"above"}'`
397207
+ ],
397208
+ "lists.separate": ["superdoc lists separate --node-id abc123"],
397209
+ "lists.setLevel": ["superdoc lists set-level --node-id abc123 --level 2"],
397210
+ "lists.setValue": ["superdoc lists set-value --node-id abc123 --value-json 5"],
397211
+ "lists.convertToText": ["superdoc lists convert-to-text --node-id abc123"],
397212
+ "lists.setType": [
397213
+ `superdoc lists set-type --target-json '{"kind":"block","nodeType":"listItem","nodeId":"abc123"}' --kind bullet`
397214
+ ],
397215
+ "format.apply": [`superdoc format apply --block-id abc123 --start 0 --end 10 --inline-json '{"bold":true}'`],
397216
+ "comments.create": ['superdoc comments create --block-id abc123 --start 0 --end 5 --text "Review this section"'],
397217
+ "comments.list": ["superdoc comments list"],
397218
+ "comments.get": ["superdoc comments get --id comment-123"],
397219
+ "comments.patch": ['superdoc comments patch --id comment-123 --text "Updated wording."'],
397220
+ "comments.delete": ["superdoc comments delete --id comment-123"],
397221
+ "trackChanges.list": ["superdoc track-changes list"],
397222
+ "trackChanges.get": ["superdoc track-changes get --id tc-123"],
397223
+ "trackChanges.decide": [`superdoc track-changes decide --decision accept --target-json '{"id":"tc-123"}'`],
397224
+ "history.get": ["superdoc history get"],
397225
+ "history.undo": ["superdoc history undo"],
397226
+ "history.redo": ["superdoc history redo"],
397227
+ "mutations.apply": [
397228
+ `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"}}}]'`
397229
+ ],
397230
+ "mutations.preview": [
397231
+ `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"}}}]'`
397232
+ ],
397233
+ "create.tableOfContents": [
397234
+ "superdoc create table-of-contents",
397235
+ `superdoc create table-of-contents --at-json '{"kind":"documentStart"}'`
397236
+ ],
397237
+ "capabilities.get": ["superdoc capabilities"]
397238
+ };
397239
+ });
397240
+
396334
397241
  // src/cli/commands.ts
396335
397242
  function buildDocBackedSpec(docApiId, cliOpId) {
396336
397243
  const tokens = cliCommandTokens(cliOpId);
@@ -396346,7 +397253,7 @@ function buildDocBackedSpec(docApiId, cliOpId) {
396346
397253
  requiresDocumentContext: cliRequiresDocumentContext(cliOpId),
396347
397254
  alias: false,
396348
397255
  canonicalKey: key3,
396349
- examples: []
397256
+ examples: DOC_COMMAND_EXAMPLES[docApiId] ?? []
396350
397257
  };
396351
397258
  }
396352
397259
  function buildCliOnlySpec(cliOnlyOp, cliOpId) {
@@ -396382,6 +397289,13 @@ function buildAllSpecs() {
396382
397289
  }
396383
397290
  function buildHelpText() {
396384
397291
  const lines = ["Usage: superdoc <command> [options]", ""];
397292
+ lines.push("Common tasks:");
397293
+ lines.push(" Find mutation target → query match");
397294
+ lines.push(" Insert between list items → lists insert");
397295
+ lines.push(" Create a paragraph → create paragraph");
397296
+ lines.push(" Insert inline text → insert");
397297
+ lines.push(" Batch formatting changes → mutations apply");
397298
+ lines.push("");
396385
397299
  const categories = new Map;
396386
397300
  for (const spec of CLI_COMMAND_SPECS) {
396387
397301
  if (spec.alias)
@@ -396423,6 +397337,7 @@ var init_commands = __esm(() => {
396423
397337
  init_src();
396424
397338
  init_operation_set();
396425
397339
  init_helper_commands();
397340
+ init_command_examples();
396426
397341
  init_operation_set();
396427
397342
  CLI_ONLY_OVERRIDES = {
396428
397343
  open: { mutates: true, examples: ["superdoc open my-doc.docx", "superdoc open my-doc.docx --session my-session"] },
@@ -396716,8 +397631,7 @@ var init_operation_params = __esm(() => {
396716
397631
  name: "dryRun",
396717
397632
  kind: "flag",
396718
397633
  flag: "dry-run",
396719
- type: "boolean",
396720
- agentVisible: false
397634
+ type: "boolean"
396721
397635
  };
396722
397636
  CHANGE_MODE_PARAM = {
396723
397637
  name: "changeMode",
@@ -396730,8 +397644,7 @@ var init_operation_params = __esm(() => {
396730
397644
  name: "expectedRevision",
396731
397645
  kind: "flag",
396732
397646
  flag: "expected-revision",
396733
- type: "number",
396734
- agentVisible: false
397647
+ type: "number"
396735
397648
  };
396736
397649
  USER_NAME_PARAM = {
396737
397650
  name: "userName",
@@ -396745,7 +397658,7 @@ var init_operation_params = __esm(() => {
396745
397658
  flag: "user-email",
396746
397659
  type: "string"
396747
397660
  };
396748
- AGENT_HIDDEN_PARAM_NAMES = new Set(["out", "expectedRevision", "dryRun"]);
397661
+ AGENT_HIDDEN_PARAM_NAMES = new Set(["out"]);
396749
397662
  OPERATION_CONSTRAINTS = {
396750
397663
  "doc.find": {
396751
397664
  requiresOneOf: [["type", "query"]],
@@ -396877,10 +397790,19 @@ var init_operation_params = __esm(() => {
396877
397790
  { name: "input", kind: "jsonFlag", flag: "input-json", type: "json" },
396878
397791
  ...LIST_TARGET_FLAT_PARAMS
396879
397792
  ],
397793
+ "doc.blocks.list": [
397794
+ { name: "offset", kind: "flag", flag: "offset", type: "number" },
397795
+ { name: "limit", kind: "flag", flag: "limit", type: "number" },
397796
+ { name: "nodeTypes", kind: "jsonFlag", flag: "node-types-json", type: "json" }
397797
+ ],
396880
397798
  "doc.blocks.delete": [
396881
397799
  { name: "nodeType", kind: "flag", flag: "node-type", type: "string" },
396882
397800
  { name: "nodeId", kind: "flag", flag: "node-id", type: "string" }
396883
397801
  ],
397802
+ "doc.blocks.deleteRange": [
397803
+ { name: "start", kind: "jsonFlag", flag: "start-json", type: "json" },
397804
+ { name: "end", kind: "jsonFlag", flag: "end-json", type: "json" }
397805
+ ],
396884
397806
  "doc.create.paragraph": [{ name: "input", kind: "jsonFlag", flag: "input-json", type: "json" }],
396885
397807
  "doc.create.heading": [{ name: "input", kind: "jsonFlag", flag: "input-json", type: "json" }]
396886
397808
  };
@@ -397396,6 +398318,7 @@ var init_introspection_dispatch = __esm(() => {
397396
398318
  document: {
397397
398319
  path: metadata.sourcePath,
397398
398320
  source: metadata.source,
398321
+ sourceByteLength: metadata.sourceSnapshot?.size ?? null,
397399
398322
  byteLength: byteLength3,
397400
398323
  revision: metadata.revision
397401
398324
  },
@@ -397410,6 +398333,9 @@ var init_introspection_dispatch = __esm(() => {
397410
398333
  `Context: ${metadata.contextId}`,
397411
398334
  `Default: ${activeSessionId ?? "<none>"}`,
397412
398335
  `Document: ${metadata.sourcePath ?? "<stdin>"}`,
398336
+ `Source: ${metadata.source}`,
398337
+ metadata.sourceSnapshot ? `Source size: ${metadata.sourceSnapshot.size} bytes` : undefined,
398338
+ `Working size: ${byteLength3} bytes`,
397413
398339
  `Session Type: ${metadata.sessionType}`,
397414
398340
  metadata.collaboration ? `Collab Doc ID: ${metadata.collaboration.documentId}` : undefined,
397415
398341
  `Revision: ${metadata.revision}`,
@@ -397475,13 +398401,19 @@ function ensureBlockTarget(value2, path3) {
397475
398401
  async function buildFlatInput(parsed, commandName) {
397476
398402
  const text9 = getStringOption(parsed, "text");
397477
398403
  const at = parseAtFlag(getStringOption(parsed, "at"), commandName);
398404
+ const atJson = await resolveJsonInput(parsed, "at");
397478
398405
  const beforePayload = await resolveJsonInput(parsed, "before-address");
397479
398406
  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.`);
398407
+ const locationForms = [at, atJson, beforePayload, afterPayload].filter((v) => v != null);
398408
+ if (locationForms.length > 1) {
398409
+ throw new CliError("INVALID_ARGUMENT", `${commandName}: use only one of --at, --at-json, --before-address-json, or --after-address-json.`);
397482
398410
  }
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.`);
398411
+ if (atJson != null) {
398412
+ const validated = validateCreateParagraphInput({ at: atJson, text: text9 }, "input");
398413
+ if (!validated.at) {
398414
+ throw new CliError("VALIDATION_ERROR", `${commandName}: --at-json produced an empty location. Provide a valid location object.`);
398415
+ }
398416
+ return validated;
397485
398417
  }
397486
398418
  if (beforePayload != null) {
397487
398419
  return {
@@ -397509,7 +398441,7 @@ async function buildFlatInput(parsed, commandName) {
397509
398441
  async function resolveCreateParagraphInput(parsed, commandName) {
397510
398442
  const inputJson = await resolveJsonInput(parsed, "input");
397511
398443
  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;
398444
+ 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
398445
  if (inputProvided && hasFlatFlags) {
397514
398446
  throw new CliError("INVALID_ARGUMENT", `${commandName}: --input-json/--input-file cannot be combined with flat create flags.`);
397515
398447
  }
@@ -398066,6 +398998,8 @@ async function parseWrapperOperationInput(operationId, tokens, commandName, opti
398066
398998
  { name: "input-file", type: "string" },
398067
398999
  { name: "text", type: "string" },
398068
399000
  { name: "at", type: "string" },
399001
+ { name: "at-json", type: "string" },
399002
+ { name: "at-file", type: "string" },
398069
399003
  { name: "before-address-json", type: "string" },
398070
399004
  { name: "before-address-file", type: "string" },
398071
399005
  { name: "after-address-json", type: "string" },
@@ -398321,7 +399255,7 @@ async function runOpen(tokens, context) {
398321
399255
  document: {
398322
399256
  path: metadata.sourcePath,
398323
399257
  source: metadata.source,
398324
- byteLength: output.byteLength,
399258
+ byteLength: opened.meta.byteLength,
398325
399259
  revision: metadata.revision
398326
399260
  },
398327
399261
  dirty: metadata.dirty,