@superdoc-dev/cli 0.2.0-next.3 → 0.2.0-next.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1375 -581
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -360,16 +360,6 @@ function resolveDocArg(parsed, commandName) {
360
360
  }
361
361
  return { doc: undefined, positionals: parsed.positionals };
362
362
  }
363
- function requireDocArg(parsed, commandName) {
364
- const resolved = resolveDocArg(parsed, commandName);
365
- if (resolved.doc) {
366
- return {
367
- doc: resolved.doc,
368
- positionals: resolved.positionals
369
- };
370
- }
371
- throw new CliError("MISSING_REQUIRED", `${commandName}: missing required <doc> argument.`);
372
- }
373
363
  function expectNoPositionals(parsed, positionals, commandName) {
374
364
  if (positionals.length === 0)
375
365
  return;
@@ -534,19 +524,12 @@ function mutationOperation(options) {
534
524
  function projectFromDefinitions(fn) {
535
525
  return Object.fromEntries(OPERATION_IDS.map((id) => [id, fn(id, OPERATION_DEFINITIONS[id])]));
536
526
  }
537
- var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_COMMAND, T_NOT_FOUND_TRACKED, T_NOT_FOUND_COMMAND_TRACKED, T_PLAN_ENGINE, T_QUERY_MATCH, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
527
+ var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_CAPABLE, T_PLAN_ENGINE, T_QUERY_MATCH, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
538
528
  var init_operation_definitions = __esm(() => {
539
529
  NONE_FAILURES = [];
540
530
  NONE_THROWS = [];
541
531
  T_NOT_FOUND = ["TARGET_NOT_FOUND"];
542
- T_NOT_FOUND_COMMAND = ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"];
543
- T_NOT_FOUND_TRACKED = ["TARGET_NOT_FOUND", "TRACK_CHANGE_COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"];
544
- T_NOT_FOUND_COMMAND_TRACKED = [
545
- "TARGET_NOT_FOUND",
546
- "COMMAND_UNAVAILABLE",
547
- "TRACK_CHANGE_COMMAND_UNAVAILABLE",
548
- "CAPABILITY_UNAVAILABLE"
549
- ];
532
+ T_NOT_FOUND_CAPABLE = ["TARGET_NOT_FOUND", "CAPABILITY_UNAVAILABLE"];
550
533
  T_PLAN_ENGINE = [
551
534
  "REVISION_MISMATCH",
552
535
  "MATCH_NOT_FOUND",
@@ -569,6 +552,7 @@ var init_operation_definitions = __esm(() => {
569
552
  requiresDocumentContext: true,
570
553
  metadata: readOperation({
571
554
  idempotency: "idempotent",
555
+ throws: ["CAPABILITY_UNAVAILABLE", "INVALID_INPUT"],
572
556
  deterministicTargetResolution: false
573
557
  }),
574
558
  referenceDocPath: "find.mdx",
@@ -621,7 +605,7 @@ var init_operation_definitions = __esm(() => {
621
605
  supportsDryRun: true,
622
606
  supportsTrackedMode: true,
623
607
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
624
- throws: [...T_NOT_FOUND_TRACKED, "INVALID_TARGET"]
608
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
625
609
  }),
626
610
  referenceDocPath: "insert.mdx",
627
611
  referenceGroup: "core"
@@ -635,7 +619,7 @@ var init_operation_definitions = __esm(() => {
635
619
  supportsDryRun: true,
636
620
  supportsTrackedMode: true,
637
621
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
638
- throws: [...T_NOT_FOUND_TRACKED, "INVALID_TARGET"]
622
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
639
623
  }),
640
624
  referenceDocPath: "replace.mdx",
641
625
  referenceGroup: "core"
@@ -649,7 +633,7 @@ var init_operation_definitions = __esm(() => {
649
633
  supportsDryRun: true,
650
634
  supportsTrackedMode: true,
651
635
  possibleFailureCodes: ["NO_OP"],
652
- throws: [...T_NOT_FOUND_TRACKED, "INVALID_TARGET"]
636
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
653
637
  }),
654
638
  referenceDocPath: "delete.mdx",
655
639
  referenceGroup: "core"
@@ -663,11 +647,67 @@ var init_operation_definitions = __esm(() => {
663
647
  supportsDryRun: true,
664
648
  supportsTrackedMode: true,
665
649
  possibleFailureCodes: ["INVALID_TARGET"],
666
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET", "INVALID_INPUT"]
650
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
667
651
  }),
668
652
  referenceDocPath: "format/apply.mdx",
669
653
  referenceGroup: "format"
670
654
  },
655
+ "format.fontSize": {
656
+ memberPath: "format.fontSize",
657
+ description: "Set or unset the font size on the target text range. Pass null to remove.",
658
+ requiresDocumentContext: true,
659
+ metadata: mutationOperation({
660
+ idempotency: "conditional",
661
+ supportsDryRun: true,
662
+ supportsTrackedMode: false,
663
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
664
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
665
+ }),
666
+ referenceDocPath: "format/font-size.mdx",
667
+ referenceGroup: "format"
668
+ },
669
+ "format.fontFamily": {
670
+ memberPath: "format.fontFamily",
671
+ description: "Set or unset the font family on the target text range. Pass null to remove.",
672
+ requiresDocumentContext: true,
673
+ metadata: mutationOperation({
674
+ idempotency: "conditional",
675
+ supportsDryRun: true,
676
+ supportsTrackedMode: false,
677
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
678
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
679
+ }),
680
+ referenceDocPath: "format/font-family.mdx",
681
+ referenceGroup: "format"
682
+ },
683
+ "format.color": {
684
+ memberPath: "format.color",
685
+ description: "Set or unset the text color on the target text range. Pass null to remove.",
686
+ requiresDocumentContext: true,
687
+ metadata: mutationOperation({
688
+ idempotency: "conditional",
689
+ supportsDryRun: true,
690
+ supportsTrackedMode: false,
691
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
692
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
693
+ }),
694
+ referenceDocPath: "format/color.mdx",
695
+ referenceGroup: "format"
696
+ },
697
+ "format.align": {
698
+ memberPath: "format.align",
699
+ description: "Set or unset paragraph alignment on the block containing the target. Pass null to reset to default.",
700
+ requiresDocumentContext: true,
701
+ metadata: mutationOperation({
702
+ idempotency: "conditional",
703
+ supportsDryRun: true,
704
+ supportsTrackedMode: false,
705
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
706
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
707
+ }),
708
+ referenceDocPath: "format/align.mdx",
709
+ referenceGroup: "format"
710
+ },
671
711
  "create.paragraph": {
672
712
  memberPath: "create.paragraph",
673
713
  description: "Create a new paragraph at the target position.",
@@ -677,7 +717,7 @@ var init_operation_definitions = __esm(() => {
677
717
  supportsDryRun: true,
678
718
  supportsTrackedMode: true,
679
719
  possibleFailureCodes: ["INVALID_TARGET"],
680
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
720
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
681
721
  }),
682
722
  referenceDocPath: "create/paragraph.mdx",
683
723
  referenceGroup: "create"
@@ -691,7 +731,7 @@ var init_operation_definitions = __esm(() => {
691
731
  supportsDryRun: true,
692
732
  supportsTrackedMode: true,
693
733
  possibleFailureCodes: ["INVALID_TARGET"],
694
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
734
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
695
735
  }),
696
736
  referenceDocPath: "create/heading.mdx",
697
737
  referenceGroup: "create"
@@ -702,7 +742,7 @@ var init_operation_definitions = __esm(() => {
702
742
  requiresDocumentContext: true,
703
743
  metadata: readOperation({
704
744
  idempotency: "idempotent",
705
- throws: T_NOT_FOUND
745
+ throws: ["TARGET_NOT_FOUND", "INVALID_TARGET", "INVALID_INPUT"]
706
746
  }),
707
747
  referenceDocPath: "lists/list.mdx",
708
748
  referenceGroup: "lists"
@@ -727,7 +767,7 @@ var init_operation_definitions = __esm(() => {
727
767
  supportsDryRun: true,
728
768
  supportsTrackedMode: true,
729
769
  possibleFailureCodes: ["INVALID_TARGET"],
730
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
770
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
731
771
  }),
732
772
  referenceDocPath: "lists/insert.mdx",
733
773
  referenceGroup: "lists"
@@ -741,7 +781,7 @@ var init_operation_definitions = __esm(() => {
741
781
  supportsDryRun: true,
742
782
  supportsTrackedMode: false,
743
783
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
744
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
784
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
745
785
  }),
746
786
  referenceDocPath: "lists/set-type.mdx",
747
787
  referenceGroup: "lists"
@@ -755,7 +795,7 @@ var init_operation_definitions = __esm(() => {
755
795
  supportsDryRun: true,
756
796
  supportsTrackedMode: false,
757
797
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
758
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
798
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
759
799
  }),
760
800
  referenceDocPath: "lists/indent.mdx",
761
801
  referenceGroup: "lists"
@@ -769,7 +809,7 @@ var init_operation_definitions = __esm(() => {
769
809
  supportsDryRun: true,
770
810
  supportsTrackedMode: false,
771
811
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
772
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
812
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
773
813
  }),
774
814
  referenceDocPath: "lists/outdent.mdx",
775
815
  referenceGroup: "lists"
@@ -783,7 +823,7 @@ var init_operation_definitions = __esm(() => {
783
823
  supportsDryRun: true,
784
824
  supportsTrackedMode: false,
785
825
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
786
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
826
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
787
827
  }),
788
828
  referenceDocPath: "lists/restart.mdx",
789
829
  referenceGroup: "lists"
@@ -797,7 +837,7 @@ var init_operation_definitions = __esm(() => {
797
837
  supportsDryRun: true,
798
838
  supportsTrackedMode: false,
799
839
  possibleFailureCodes: ["INVALID_TARGET"],
800
- throws: [...T_NOT_FOUND_COMMAND_TRACKED, "INVALID_TARGET"]
840
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
801
841
  }),
802
842
  referenceDocPath: "lists/exit.mdx",
803
843
  referenceGroup: "lists"
@@ -811,7 +851,7 @@ var init_operation_definitions = __esm(() => {
811
851
  supportsDryRun: false,
812
852
  supportsTrackedMode: false,
813
853
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
814
- throws: [...T_NOT_FOUND_COMMAND, "INVALID_TARGET"]
854
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET"]
815
855
  }),
816
856
  referenceDocPath: "comments/create.mdx",
817
857
  referenceGroup: "comments"
@@ -825,7 +865,7 @@ var init_operation_definitions = __esm(() => {
825
865
  supportsDryRun: false,
826
866
  supportsTrackedMode: false,
827
867
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
828
- throws: [...T_NOT_FOUND_COMMAND, "INVALID_TARGET", "INVALID_INPUT"]
868
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_TARGET", "INVALID_INPUT"]
829
869
  }),
830
870
  referenceDocPath: "comments/patch.mdx",
831
871
  referenceGroup: "comments"
@@ -839,7 +879,7 @@ var init_operation_definitions = __esm(() => {
839
879
  supportsDryRun: false,
840
880
  supportsTrackedMode: false,
841
881
  possibleFailureCodes: ["NO_OP"],
842
- throws: T_NOT_FOUND_COMMAND
882
+ throws: T_NOT_FOUND_CAPABLE
843
883
  }),
844
884
  referenceDocPath: "comments/delete.mdx",
845
885
  referenceGroup: "comments"
@@ -860,7 +900,8 @@ var init_operation_definitions = __esm(() => {
860
900
  description: "List all comment threads in the document.",
861
901
  requiresDocumentContext: true,
862
902
  metadata: readOperation({
863
- idempotency: "idempotent"
903
+ idempotency: "idempotent",
904
+ throws: ["INVALID_INPUT"]
864
905
  }),
865
906
  referenceDocPath: "comments/list.mdx",
866
907
  referenceGroup: "comments"
@@ -870,7 +911,8 @@ var init_operation_definitions = __esm(() => {
870
911
  description: "List all tracked changes in the document.",
871
912
  requiresDocumentContext: true,
872
913
  metadata: readOperation({
873
- idempotency: "idempotent"
914
+ idempotency: "idempotent",
915
+ throws: ["INVALID_INPUT"]
874
916
  }),
875
917
  referenceDocPath: "track-changes/list.mdx",
876
918
  referenceGroup: "trackChanges"
@@ -895,7 +937,7 @@ var init_operation_definitions = __esm(() => {
895
937
  supportsDryRun: false,
896
938
  supportsTrackedMode: false,
897
939
  possibleFailureCodes: ["NO_OP"],
898
- throws: [...T_NOT_FOUND_COMMAND, "INVALID_INPUT", "INVALID_TARGET"]
940
+ throws: [...T_NOT_FOUND_CAPABLE, "INVALID_INPUT", "INVALID_TARGET"]
899
941
  }),
900
942
  referenceDocPath: "track-changes/decide.mdx",
901
943
  referenceGroup: "trackChanges"
@@ -977,6 +1019,228 @@ var init_command_catalog = __esm(() => {
977
1019
  OPERATION_REQUIRES_DOCUMENT_CONTEXT_MAP = projectFromDefinitions((_id, entry) => entry.requiresDocumentContext);
978
1020
  });
979
1021
 
1022
+ // ../../packages/document-api/src/write/write.ts
1023
+ function normalizeMutationOptions(options) {
1024
+ return {
1025
+ expectedRevision: options?.expectedRevision,
1026
+ changeMode: options?.changeMode ?? "direct",
1027
+ dryRun: options?.dryRun ?? false
1028
+ };
1029
+ }
1030
+ function executeWrite(adapter, request, options) {
1031
+ return adapter.write(request, normalizeMutationOptions(options));
1032
+ }
1033
+
1034
+ // ../../packages/document-api/src/errors.ts
1035
+ var DocumentApiValidationError;
1036
+ var init_errors2 = __esm(() => {
1037
+ DocumentApiValidationError = class DocumentApiValidationError extends Error {
1038
+ code;
1039
+ details;
1040
+ constructor(code, message, details) {
1041
+ super(message);
1042
+ this.name = "DocumentApiValidationError";
1043
+ this.code = code;
1044
+ this.details = details;
1045
+ Object.setPrototypeOf(this, DocumentApiValidationError.prototype);
1046
+ }
1047
+ };
1048
+ });
1049
+
1050
+ // ../../packages/document-api/src/validation-primitives.ts
1051
+ function isRecord(value) {
1052
+ return typeof value === "object" && value != null && !Array.isArray(value);
1053
+ }
1054
+ function isInteger(value) {
1055
+ return typeof value === "number" && Number.isInteger(value);
1056
+ }
1057
+ function isTextAddress(value) {
1058
+ if (!isRecord(value))
1059
+ return false;
1060
+ if (value.kind !== "text")
1061
+ return false;
1062
+ if (typeof value.blockId !== "string")
1063
+ return false;
1064
+ const range = value.range;
1065
+ if (!isRecord(range))
1066
+ return false;
1067
+ if (!isInteger(range.start) || !isInteger(range.end))
1068
+ return false;
1069
+ return range.start <= range.end;
1070
+ }
1071
+ function assertNoUnknownFields(input, allowlist, operationName) {
1072
+ for (const key of Object.keys(input)) {
1073
+ if (!allowlist.has(key)) {
1074
+ throw new DocumentApiValidationError("INVALID_TARGET", `Unknown field "${key}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key });
1075
+ }
1076
+ }
1077
+ }
1078
+ var init_validation_primitives = __esm(() => {
1079
+ init_errors2();
1080
+ });
1081
+
1082
+ // ../../packages/document-api/src/format/format.ts
1083
+ function validateStyleApplyInput(input) {
1084
+ if (!isRecord(input)) {
1085
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.apply input must be a non-null object.");
1086
+ }
1087
+ assertNoUnknownFields(input, STYLE_APPLY_INPUT_ALLOWED_KEYS, "format.apply");
1088
+ const { target, inline } = input;
1089
+ if (target === undefined) {
1090
+ throw new DocumentApiValidationError("INVALID_TARGET", "format.apply requires a target.");
1091
+ }
1092
+ if (!isTextAddress(target)) {
1093
+ throw new DocumentApiValidationError("INVALID_TARGET", "target must be a text address object.", {
1094
+ field: "target",
1095
+ value: target
1096
+ });
1097
+ }
1098
+ if (inline === undefined || inline === null) {
1099
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.apply requires an inline object.");
1100
+ }
1101
+ if (!isRecord(inline)) {
1102
+ throw new DocumentApiValidationError("INVALID_INPUT", "inline must be a non-null object.", {
1103
+ field: "inline",
1104
+ value: inline
1105
+ });
1106
+ }
1107
+ const inlineKeys = Object.keys(inline);
1108
+ if (inlineKeys.length === 0) {
1109
+ throw new DocumentApiValidationError("INVALID_INPUT", "inline must include at least one known key.");
1110
+ }
1111
+ for (const key of inlineKeys) {
1112
+ if (!MARK_KEY_SET.has(key)) {
1113
+ throw new DocumentApiValidationError("INVALID_INPUT", `Unknown inline style key "${key}". Known keys: bold, italic, underline, strike.`, {
1114
+ field: "inline",
1115
+ key
1116
+ });
1117
+ }
1118
+ const value = inline[key];
1119
+ if (typeof value !== "boolean") {
1120
+ throw new DocumentApiValidationError("INVALID_INPUT", `Inline style "${key}" must be a boolean, got ${typeof value}.`, {
1121
+ field: "inline",
1122
+ key,
1123
+ value
1124
+ });
1125
+ }
1126
+ }
1127
+ }
1128
+ function executeStyleApply(adapter, input, options) {
1129
+ validateStyleApplyInput(input);
1130
+ return adapter.apply(input, normalizeMutationOptions(options));
1131
+ }
1132
+ function validateTarget(input, operation) {
1133
+ if (!isRecord(input)) {
1134
+ throw new DocumentApiValidationError("INVALID_INPUT", `${operation} input must be a non-null object.`);
1135
+ }
1136
+ if (input.target === undefined) {
1137
+ throw new DocumentApiValidationError("INVALID_TARGET", `${operation} requires a target.`);
1138
+ }
1139
+ if (!isTextAddress(input.target)) {
1140
+ throw new DocumentApiValidationError("INVALID_TARGET", "target must be a text address object.", {
1141
+ field: "target",
1142
+ value: input.target
1143
+ });
1144
+ }
1145
+ }
1146
+ function validateFontSizeInput(input) {
1147
+ validateTarget(input, "format.fontSize");
1148
+ assertNoUnknownFields(input, FONT_SIZE_ALLOWED_KEYS, "format.fontSize");
1149
+ const { value } = input;
1150
+ if (value === undefined) {
1151
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.fontSize requires a value field.");
1152
+ }
1153
+ if (value !== null && typeof value !== "string" && typeof value !== "number") {
1154
+ throw new DocumentApiValidationError("INVALID_INPUT", `format.fontSize value must be a string, number, or null.`, {
1155
+ field: "value",
1156
+ value
1157
+ });
1158
+ }
1159
+ if (typeof value === "string" && value.length === 0) {
1160
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.fontSize value must not be an empty string.", {
1161
+ field: "value"
1162
+ });
1163
+ }
1164
+ }
1165
+ function executeFontSize(adapter, input, options) {
1166
+ validateFontSizeInput(input);
1167
+ return adapter.fontSize(input, normalizeMutationOptions(options));
1168
+ }
1169
+ function validateFontFamilyInput(input) {
1170
+ validateTarget(input, "format.fontFamily");
1171
+ assertNoUnknownFields(input, FONT_FAMILY_ALLOWED_KEYS, "format.fontFamily");
1172
+ const { value } = input;
1173
+ if (value === undefined) {
1174
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.fontFamily requires a value field.");
1175
+ }
1176
+ if (value !== null && typeof value !== "string") {
1177
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.fontFamily value must be a string or null.", {
1178
+ field: "value",
1179
+ value
1180
+ });
1181
+ }
1182
+ if (typeof value === "string" && value.length === 0) {
1183
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.fontFamily value must not be an empty string.", {
1184
+ field: "value"
1185
+ });
1186
+ }
1187
+ }
1188
+ function executeFontFamily(adapter, input, options) {
1189
+ validateFontFamilyInput(input);
1190
+ return adapter.fontFamily(input, normalizeMutationOptions(options));
1191
+ }
1192
+ function validateColorInput(input) {
1193
+ validateTarget(input, "format.color");
1194
+ assertNoUnknownFields(input, COLOR_ALLOWED_KEYS, "format.color");
1195
+ const { value } = input;
1196
+ if (value === undefined) {
1197
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.color requires a value field.");
1198
+ }
1199
+ if (value !== null && typeof value !== "string") {
1200
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.color value must be a string or null.", {
1201
+ field: "value",
1202
+ value
1203
+ });
1204
+ }
1205
+ if (typeof value === "string" && value.length === 0) {
1206
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.color value must not be an empty string.", {
1207
+ field: "value"
1208
+ });
1209
+ }
1210
+ }
1211
+ function executeColor(adapter, input, options) {
1212
+ validateColorInput(input);
1213
+ return adapter.color(input, normalizeMutationOptions(options));
1214
+ }
1215
+ function validateAlignInput(input) {
1216
+ validateTarget(input, "format.align");
1217
+ assertNoUnknownFields(input, ALIGN_ALLOWED_KEYS, "format.align");
1218
+ const { alignment } = input;
1219
+ if (alignment === undefined) {
1220
+ throw new DocumentApiValidationError("INVALID_INPUT", "format.align requires an alignment field.");
1221
+ }
1222
+ if (alignment !== null && (typeof alignment !== "string" || !ALIGNMENT_SET.has(alignment))) {
1223
+ throw new DocumentApiValidationError("INVALID_INPUT", `format.align alignment must be one of ${ALIGNMENTS.join(", ")}, or null.`, { field: "alignment", value: alignment });
1224
+ }
1225
+ }
1226
+ function executeAlign(adapter, input, options) {
1227
+ validateAlignInput(input);
1228
+ return adapter.align(input, normalizeMutationOptions(options));
1229
+ }
1230
+ var ALIGNMENTS, ALIGNMENT_SET, STYLE_APPLY_INPUT_ALLOWED_KEYS, FONT_SIZE_ALLOWED_KEYS, FONT_FAMILY_ALLOWED_KEYS, COLOR_ALLOWED_KEYS, ALIGN_ALLOWED_KEYS;
1231
+ var init_format = __esm(() => {
1232
+ init_style_policy_types();
1233
+ init_errors2();
1234
+ init_validation_primitives();
1235
+ ALIGNMENTS = ["left", "center", "right", "justify"];
1236
+ ALIGNMENT_SET = new Set(ALIGNMENTS);
1237
+ STYLE_APPLY_INPUT_ALLOWED_KEYS = new Set(["target", "inline"]);
1238
+ FONT_SIZE_ALLOWED_KEYS = new Set(["target", "value"]);
1239
+ FONT_FAMILY_ALLOWED_KEYS = new Set(["target", "value"]);
1240
+ COLOR_ALLOWED_KEYS = new Set(["target", "value"]);
1241
+ ALIGN_ALLOWED_KEYS = new Set(["target", "alignment"]);
1242
+ });
1243
+
980
1244
  // ../../packages/document-api/src/contract/schemas.ts
981
1245
  function objectSchema(properties, required = []) {
982
1246
  const schema = {
@@ -1136,12 +1400,13 @@ function buildInternalContractSchemas() {
1136
1400
  operations
1137
1401
  };
1138
1402
  }
1139
- var nodeTypeValues, blockNodeTypeValues, inlineNodeTypeValues, knownTargetKindValues, SHARED_DEFS, rangeSchema, positionSchema, inlineAnchorSchema, targetKindSchema, textAddressSchema, blockNodeAddressSchema, paragraphAddressSchema, headingAddressSchema, listItemAddressSchema, inlineNodeAddressSchema, nodeAddressSchema, commentAddressSchema, trackedChangeAddressSchema, entityAddressSchema, resolvedHandleSchema, pageInfoSchema, receiptSuccessSchema, textMutationRangeSchema, textMutationResolutionSchema, textMutationSuccessSchema, matchRunSchema, matchBlockSchema, trackChangeRefSchema, createParagraphSuccessSchema, createHeadingSuccessSchema, headingLevelSchema, listsInsertSuccessSchema, listsMutateItemSuccessSchema, listsExitSuccessSchema, nodeSummarySchema, nodeInfoSchema, matchContextSchema, unknownNodeDiagnosticSchema, textSelectorSchema, nodeSelectorSchema, selectorShorthandSchema, selectSchema, findInputSchema, findItemDomainSchema, findOutputSchema, documentInfoCountsSchema, documentInfoOutlineItemSchema, documentInfoCapabilitiesSchema, documentInfoSchema, listKindSchema, listInsertPositionSchema, listItemInfoSchema, listItemDomainItemSchema, listsListResultSchema, commentInfoSchema, commentDomainItemSchema, commentsListResultSchema, trackChangeInfoSchema, trackChangeDomainItemSchema, trackChangesListResultSchema, capabilityReasonCodeSchema, capabilityReasonsSchema, capabilityFlagSchema, operationRuntimeCapabilitySchema, operationCapabilitiesSchema, formatCapabilitiesSchema, capabilitiesOutputSchema, strictEmptyObjectSchema, insertInputSchema, operationSchemas;
1403
+ var nodeTypeValues, blockNodeTypeValues, inlineNodeTypeValues, knownTargetKindValues, SHARED_DEFS, rangeSchema, positionSchema, inlineAnchorSchema, targetKindSchema, textAddressSchema, textTargetSchema, blockNodeAddressSchema, paragraphAddressSchema, headingAddressSchema, listItemAddressSchema, inlineNodeAddressSchema, nodeAddressSchema, commentAddressSchema, trackedChangeAddressSchema, entityAddressSchema, resolvedHandleSchema, pageInfoSchema, receiptSuccessSchema, textMutationRangeSchema, textMutationResolutionSchema, textMutationSuccessSchema, matchRunSchema, matchBlockSchema, trackChangeRefSchema, createParagraphSuccessSchema, createHeadingSuccessSchema, headingLevelSchema, listsInsertSuccessSchema, listsMutateItemSuccessSchema, listsExitSuccessSchema, nodeSummarySchema, nodeInfoSchema, matchContextSchema, unknownNodeDiagnosticSchema, textSelectorSchema, nodeSelectorSchema, selectorShorthandSchema, selectSchema, findInputSchema, findItemDomainSchema, findOutputSchema, documentInfoCountsSchema, documentInfoOutlineItemSchema, documentInfoCapabilitiesSchema, documentInfoSchema, listKindSchema, listInsertPositionSchema, listItemInfoSchema, listItemDomainItemSchema, listsListResultSchema, commentInfoSchema, commentDomainItemSchema, commentsListResultSchema, trackChangeInfoSchema, trackChangeDomainItemSchema, trackChangesListResultSchema, capabilityReasonCodeSchema, capabilityReasonsSchema, capabilityFlagSchema, operationRuntimeCapabilitySchema, operationCapabilitiesSchema, formatCapabilitiesSchema, capabilitiesOutputSchema, strictEmptyObjectSchema, insertInputSchema, operationSchemas;
1140
1404
  var init_schemas = __esm(() => {
1141
1405
  init_command_catalog();
1142
1406
  init_types2();
1143
1407
  init_base();
1144
1408
  init_style_policy_types();
1409
+ init_format();
1145
1410
  nodeTypeValues = NODE_TYPES;
1146
1411
  blockNodeTypeValues = BLOCK_NODE_TYPES;
1147
1412
  inlineNodeTypeValues = INLINE_NODE_TYPES;
@@ -1178,6 +1443,14 @@ var init_schemas = __esm(() => {
1178
1443
  blockId: { type: "string" },
1179
1444
  range: ref("Range")
1180
1445
  }, ["kind", "blockId", "range"]),
1446
+ TextSegment: objectSchema({
1447
+ blockId: { type: "string" },
1448
+ range: ref("Range")
1449
+ }, ["blockId", "range"]),
1450
+ TextTarget: objectSchema({
1451
+ kind: { const: "text" },
1452
+ segments: { type: "array", items: ref("TextSegment"), minItems: 1 }
1453
+ }, ["kind", "segments"]),
1181
1454
  BlockNodeAddress: objectSchema({
1182
1455
  kind: { const: "block" },
1183
1456
  nodeType: { enum: [...blockNodeTypeValues] },
@@ -1287,6 +1560,7 @@ var init_schemas = __esm(() => {
1287
1560
  inlineAnchorSchema = ref("InlineAnchor");
1288
1561
  targetKindSchema = ref("TargetKind");
1289
1562
  textAddressSchema = ref("TextAddress");
1563
+ textTargetSchema = ref("TextTarget");
1290
1564
  blockNodeAddressSchema = ref("BlockNodeAddress");
1291
1565
  paragraphAddressSchema = ref("ParagraphAddress");
1292
1566
  headingAddressSchema = ref("HeadingAddress");
@@ -1453,7 +1727,8 @@ var init_schemas = __esm(() => {
1453
1727
  text: { type: "string" },
1454
1728
  isInternal: { type: "boolean" },
1455
1729
  status: { enum: ["open", "resolved"] },
1456
- target: textAddressSchema,
1730
+ target: textTargetSchema,
1731
+ anchoredText: { type: "string" },
1457
1732
  createdTime: { type: "number" },
1458
1733
  creatorName: { type: "string" },
1459
1734
  creatorEmail: { type: "string" }
@@ -1465,7 +1740,8 @@ var init_schemas = __esm(() => {
1465
1740
  text: { type: "string" },
1466
1741
  isInternal: { type: "boolean" },
1467
1742
  status: { enum: ["open", "resolved"] },
1468
- target: textAddressSchema,
1743
+ target: textTargetSchema,
1744
+ anchoredText: { type: "string" },
1469
1745
  createdTime: { type: "number" },
1470
1746
  creatorName: { type: "string" },
1471
1747
  creatorEmail: { type: "string" }
@@ -1594,6 +1870,42 @@ var init_schemas = __esm(() => {
1594
1870
  success: textMutationSuccessSchema,
1595
1871
  failure: textMutationFailureSchemaFor("format.apply")
1596
1872
  },
1873
+ "format.fontSize": {
1874
+ input: objectSchema({
1875
+ target: textAddressSchema,
1876
+ value: { oneOf: [{ type: "string", minLength: 1 }, { type: "number" }, { type: "null" }] }
1877
+ }, ["target", "value"]),
1878
+ output: textMutationResultSchemaFor("format.fontSize"),
1879
+ success: textMutationSuccessSchema,
1880
+ failure: textMutationFailureSchemaFor("format.fontSize")
1881
+ },
1882
+ "format.fontFamily": {
1883
+ input: objectSchema({
1884
+ target: textAddressSchema,
1885
+ value: { oneOf: [{ type: "string", minLength: 1 }, { type: "null" }] }
1886
+ }, ["target", "value"]),
1887
+ output: textMutationResultSchemaFor("format.fontFamily"),
1888
+ success: textMutationSuccessSchema,
1889
+ failure: textMutationFailureSchemaFor("format.fontFamily")
1890
+ },
1891
+ "format.color": {
1892
+ input: objectSchema({
1893
+ target: textAddressSchema,
1894
+ value: { oneOf: [{ type: "string", minLength: 1 }, { type: "null" }] }
1895
+ }, ["target", "value"]),
1896
+ output: textMutationResultSchemaFor("format.color"),
1897
+ success: textMutationSuccessSchema,
1898
+ failure: textMutationFailureSchemaFor("format.color")
1899
+ },
1900
+ "format.align": {
1901
+ input: objectSchema({
1902
+ target: textAddressSchema,
1903
+ alignment: { oneOf: [{ enum: [...ALIGNMENTS] }, { type: "null" }] }
1904
+ }, ["target", "alignment"]),
1905
+ output: textMutationResultSchemaFor("format.align"),
1906
+ success: textMutationSuccessSchema,
1907
+ failure: textMutationFailureSchemaFor("format.align")
1908
+ },
1597
1909
  "create.paragraph": {
1598
1910
  input: objectSchema({
1599
1911
  at: {
@@ -1941,54 +2253,6 @@ var init_capabilities = __esm(() => {
1941
2253
  ];
1942
2254
  });
1943
2255
 
1944
- // ../../packages/document-api/src/errors.ts
1945
- var DocumentApiValidationError;
1946
- var init_errors2 = __esm(() => {
1947
- DocumentApiValidationError = class DocumentApiValidationError extends Error {
1948
- code;
1949
- details;
1950
- constructor(code, message, details) {
1951
- super(message);
1952
- this.name = "DocumentApiValidationError";
1953
- this.code = code;
1954
- this.details = details;
1955
- Object.setPrototypeOf(this, DocumentApiValidationError.prototype);
1956
- }
1957
- };
1958
- });
1959
-
1960
- // ../../packages/document-api/src/validation-primitives.ts
1961
- function isRecord(value) {
1962
- return typeof value === "object" && value != null && !Array.isArray(value);
1963
- }
1964
- function isInteger(value) {
1965
- return typeof value === "number" && Number.isInteger(value);
1966
- }
1967
- function isTextAddress(value) {
1968
- if (!isRecord(value))
1969
- return false;
1970
- if (value.kind !== "text")
1971
- return false;
1972
- if (typeof value.blockId !== "string")
1973
- return false;
1974
- const range = value.range;
1975
- if (!isRecord(range))
1976
- return false;
1977
- if (!isInteger(range.start) || !isInteger(range.end))
1978
- return false;
1979
- return range.start <= range.end;
1980
- }
1981
- function assertNoUnknownFields(input, allowlist, operationName) {
1982
- for (const key of Object.keys(input)) {
1983
- if (!allowlist.has(key)) {
1984
- throw new DocumentApiValidationError("INVALID_TARGET", `Unknown field "${key}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key });
1985
- }
1986
- }
1987
- }
1988
- var init_validation_primitives = __esm(() => {
1989
- init_errors2();
1990
- });
1991
-
1992
2256
  // ../../packages/document-api/src/comments/comments.ts
1993
2257
  function validateCreateCommentInput(input) {
1994
2258
  if (!isRecord(input)) {
@@ -2146,76 +2410,6 @@ function executeFind(adapter, selectorOrQuery, options) {
2146
2410
  return adapter.find(query2);
2147
2411
  }
2148
2412
 
2149
- // ../../packages/document-api/src/write/write.ts
2150
- function normalizeMutationOptions(options) {
2151
- return {
2152
- expectedRevision: options?.expectedRevision,
2153
- changeMode: options?.changeMode ?? "direct",
2154
- dryRun: options?.dryRun ?? false
2155
- };
2156
- }
2157
- function executeWrite(adapter, request, options) {
2158
- return adapter.write(request, normalizeMutationOptions(options));
2159
- }
2160
-
2161
- // ../../packages/document-api/src/format/format.ts
2162
- function validateStyleApplyInput(input) {
2163
- if (!isRecord(input)) {
2164
- throw new DocumentApiValidationError("INVALID_INPUT", "format.apply input must be a non-null object.");
2165
- }
2166
- assertNoUnknownFields(input, STYLE_APPLY_INPUT_ALLOWED_KEYS, "format.apply");
2167
- const { target, inline } = input;
2168
- if (target === undefined) {
2169
- throw new DocumentApiValidationError("INVALID_TARGET", "format.apply requires a target.");
2170
- }
2171
- if (!isTextAddress(target)) {
2172
- throw new DocumentApiValidationError("INVALID_TARGET", "target must be a text address object.", {
2173
- field: "target",
2174
- value: target
2175
- });
2176
- }
2177
- if (inline === undefined || inline === null) {
2178
- throw new DocumentApiValidationError("INVALID_INPUT", "format.apply requires an inline object.");
2179
- }
2180
- if (!isRecord(inline)) {
2181
- throw new DocumentApiValidationError("INVALID_INPUT", "inline must be a non-null object.", {
2182
- field: "inline",
2183
- value: inline
2184
- });
2185
- }
2186
- const inlineKeys = Object.keys(inline);
2187
- if (inlineKeys.length === 0) {
2188
- throw new DocumentApiValidationError("INVALID_INPUT", "inline must include at least one known key.");
2189
- }
2190
- for (const key of inlineKeys) {
2191
- if (!MARK_KEY_SET.has(key)) {
2192
- throw new DocumentApiValidationError("INVALID_INPUT", `Unknown inline style key "${key}". Known keys: bold, italic, underline, strike.`, {
2193
- field: "inline",
2194
- key
2195
- });
2196
- }
2197
- const value = inline[key];
2198
- if (typeof value !== "boolean") {
2199
- throw new DocumentApiValidationError("INVALID_INPUT", `Inline style "${key}" must be a boolean, got ${typeof value}.`, {
2200
- field: "inline",
2201
- key,
2202
- value
2203
- });
2204
- }
2205
- }
2206
- }
2207
- function executeStyleApply(adapter, input, options) {
2208
- validateStyleApplyInput(input);
2209
- return adapter.apply(input, normalizeMutationOptions(options));
2210
- }
2211
- var STYLE_APPLY_INPUT_ALLOWED_KEYS;
2212
- var init_format = __esm(() => {
2213
- init_style_policy_types();
2214
- init_errors2();
2215
- init_validation_primitives();
2216
- STYLE_APPLY_INPUT_ALLOWED_KEYS = new Set(["target", "inline"]);
2217
- });
2218
-
2219
2413
  // ../../packages/document-api/src/get-node/get-node.ts
2220
2414
  function executeGetNode(adapter, address2) {
2221
2415
  return adapter.getNode(address2);
@@ -2297,19 +2491,8 @@ var init_insert = __esm(() => {
2297
2491
 
2298
2492
  // ../../packages/document-api/src/lists/lists.ts
2299
2493
  function validateListTarget(input, operationName) {
2300
- const hasTarget = input.target !== undefined;
2301
- const hasNodeId = input.nodeId !== undefined;
2302
- if (hasTarget && hasNodeId) {
2303
- throw new DocumentApiValidationError("INVALID_TARGET", `Cannot combine target with nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["target", "nodeId"] });
2304
- }
2305
- if (!hasTarget && !hasNodeId) {
2306
- throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} requires a target. Provide either target or nodeId.`);
2307
- }
2308
- if (hasNodeId && typeof input.nodeId !== "string") {
2309
- throw new DocumentApiValidationError("INVALID_TARGET", `nodeId must be a string, got ${typeof input.nodeId}.`, {
2310
- field: "nodeId",
2311
- value: input.nodeId
2312
- });
2494
+ if (input.target === undefined) {
2495
+ throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} requires a target.`);
2313
2496
  }
2314
2497
  }
2315
2498
  function executeListsList(adapter, query2) {
@@ -2385,19 +2568,8 @@ function validateCreateLocation(at, operationName) {
2385
2568
  if (at.kind !== "before" && at.kind !== "after")
2386
2569
  return;
2387
2570
  const loc = at;
2388
- const hasTarget = loc.target !== undefined;
2389
- const hasNodeId = loc.nodeId !== undefined;
2390
- if (hasTarget && hasNodeId) {
2391
- throw new DocumentApiValidationError("INVALID_TARGET", `Cannot combine at.target with at.nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["at.target", "at.nodeId"] });
2392
- }
2393
- if (!hasTarget && !hasNodeId) {
2394
- throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires either at.target or at.nodeId.`, { fields: ["at.target", "at.nodeId"] });
2395
- }
2396
- if (hasNodeId && typeof loc.nodeId !== "string") {
2397
- throw new DocumentApiValidationError("INVALID_TARGET", `at.nodeId must be a string, got ${typeof loc.nodeId}.`, {
2398
- field: "at.nodeId",
2399
- value: loc.nodeId
2400
- });
2571
+ if (loc.target === undefined) {
2572
+ throw new DocumentApiValidationError("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires at.target.`, { fields: ["at.target"] });
2401
2573
  }
2402
2574
  }
2403
2575
  function normalizeParagraphCreateLocation(location2) {
@@ -2486,6 +2658,10 @@ function buildDispatchTable(api) {
2486
2658
  replace: (input, options) => api.replace(input, options),
2487
2659
  delete: (input, options) => api.delete(input, options),
2488
2660
  "format.apply": (input, options) => api.format.apply(input, options),
2661
+ "format.fontSize": (input, options) => api.format.fontSize(input, options),
2662
+ "format.fontFamily": (input, options) => api.format.fontFamily(input, options),
2663
+ "format.color": (input, options) => api.format.color(input, options),
2664
+ "format.align": (input, options) => api.format.align(input, options),
2489
2665
  "create.paragraph": (input, options) => api.create.paragraph(input, options),
2490
2666
  "create.heading": (input, options) => api.create.heading(input, options),
2491
2667
  "lists.list": (input) => api.lists.list(input),
@@ -2579,6 +2755,18 @@ function createDocumentApi(adapters) {
2579
2755
  },
2580
2756
  apply(input, options) {
2581
2757
  return executeStyleApply(adapters.format, input, options);
2758
+ },
2759
+ fontSize(input, options) {
2760
+ return executeFontSize(adapters.format, input, options);
2761
+ },
2762
+ fontFamily(input, options) {
2763
+ return executeFontFamily(adapters.format, input, options);
2764
+ },
2765
+ color(input, options) {
2766
+ return executeColor(adapters.format, input, options);
2767
+ },
2768
+ align(input, options) {
2769
+ return executeAlign(adapters.format, input, options);
2582
2770
  }
2583
2771
  },
2584
2772
  trackChanges: {
@@ -2661,6 +2849,7 @@ var init_src = __esm(() => {
2661
2849
  init_create();
2662
2850
  init_track_changes();
2663
2851
  init_capabilities();
2852
+ init_format();
2664
2853
  init_lists_types();
2665
2854
  init_errors2();
2666
2855
  init_types();
@@ -3293,6 +3482,10 @@ var init_operation_hints = __esm(() => {
3293
3482
  replace: "replaced text",
3294
3483
  delete: "deleted text",
3295
3484
  "format.apply": "applied style",
3485
+ "format.fontSize": "set font size",
3486
+ "format.fontFamily": "set font family",
3487
+ "format.color": "set text color",
3488
+ "format.align": "set alignment",
3296
3489
  "create.paragraph": "created paragraph",
3297
3490
  "create.heading": "created heading",
3298
3491
  "lists.list": "listed items",
@@ -3326,6 +3519,10 @@ var init_operation_hints = __esm(() => {
3326
3519
  replace: "mutationReceipt",
3327
3520
  delete: "mutationReceipt",
3328
3521
  "format.apply": "mutationReceipt",
3522
+ "format.fontSize": "mutationReceipt",
3523
+ "format.fontFamily": "mutationReceipt",
3524
+ "format.color": "mutationReceipt",
3525
+ "format.align": "mutationReceipt",
3329
3526
  "create.paragraph": "createResult",
3330
3527
  "create.heading": "createResult",
3331
3528
  "lists.list": "listResult",
@@ -3359,6 +3556,10 @@ var init_operation_hints = __esm(() => {
3359
3556
  replace: null,
3360
3557
  delete: null,
3361
3558
  "format.apply": null,
3559
+ "format.fontSize": null,
3560
+ "format.fontFamily": null,
3561
+ "format.color": null,
3562
+ "format.align": null,
3362
3563
  "create.paragraph": "result",
3363
3564
  "create.heading": "result",
3364
3565
  "lists.list": "result",
@@ -3386,7 +3587,11 @@ var init_operation_hints = __esm(() => {
3386
3587
  insert: "receipt",
3387
3588
  replace: "receipt",
3388
3589
  delete: "receipt",
3389
- "format.apply": "receipt"
3590
+ "format.apply": "receipt",
3591
+ "format.fontSize": "receipt",
3592
+ "format.fontFamily": "receipt",
3593
+ "format.color": "receipt",
3594
+ "format.align": "receipt"
3390
3595
  };
3391
3596
  OPERATION_FAMILY = {
3392
3597
  find: "query",
@@ -3398,6 +3603,10 @@ var init_operation_hints = __esm(() => {
3398
3603
  replace: "textMutation",
3399
3604
  delete: "textMutation",
3400
3605
  "format.apply": "textMutation",
3606
+ "format.fontSize": "textMutation",
3607
+ "format.fontFamily": "textMutation",
3608
+ "format.color": "textMutation",
3609
+ "format.align": "textMutation",
3401
3610
  "create.paragraph": "create",
3402
3611
  "create.heading": "create",
3403
3612
  "lists.list": "lists",
@@ -18045,7 +18254,7 @@ var init_constants_DBKi0Amm_es = __esm(() => {
18045
18254
  ]);
18046
18255
  });
18047
18256
 
18048
- // ../../packages/superdoc/dist/chunks/SuperConverter-Cf1y7bFA.es.js
18257
+ // ../../packages/superdoc/dist/chunks/SuperConverter-BxBclpFg.es.js
18049
18258
  function getExtensionConfigField(extension, field, context = { name: "" }) {
18050
18259
  const fieldValue = extension.config[field];
18051
18260
  if (typeof fieldValue === "function")
@@ -41796,7 +42005,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41796
42005
  state.kern = kernNode.attributes["w:val"];
41797
42006
  }
41798
42007
  }, SuperConverter;
41799
- var init_SuperConverter_Cf1y7bFA_es = __esm(() => {
42008
+ var init_SuperConverter_BxBclpFg_es = __esm(() => {
41800
42009
  init_rolldown_runtime_B2q5OVn9_es();
41801
42010
  init_jszip_ChlR43oI_es();
41802
42011
  init_xml_js_DLE8mr0n_es();
@@ -44589,7 +44798,7 @@ var init_SuperConverter_Cf1y7bFA_es = __esm(() => {
44589
44798
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : undefined;
44590
44799
  }
44591
44800
  });
44592
- translator$76 = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc", "justification"));
44801
+ translator$76 = NodeTranslator.from(createSingleAttrPropertyHandler("w:jc", "justification", "w:val", (v$1) => v$1 === "both" ? "justify" : v$1, (v$1) => v$1 === "justify" ? "both" : v$1));
44593
44802
  translator$77 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:keepLines"));
44594
44803
  translator$78 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:keepNext"));
44595
44804
  translator$80 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:kinsoku"));
@@ -87184,9 +87393,9 @@ var init_remark_gfm_RDxetNVS_es = __esm(() => {
87184
87393
  emptyOptions4 = {};
87185
87394
  });
87186
87395
 
87187
- // ../../packages/superdoc/dist/chunks/src-eL3w4G7e.es.js
87188
- var exports_src_eL3w4G7e_es = {};
87189
- __export(exports_src_eL3w4G7e_es, {
87396
+ // ../../packages/superdoc/dist/chunks/src-DVVC7vA7.es.js
87397
+ var exports_src_DVVC7vA7_es = {};
87398
+ __export(exports_src_DVVC7vA7_es, {
87190
87399
  zt: () => defineMark,
87191
87400
  z: () => cM,
87192
87401
  yt: () => removeAwarenessStates,
@@ -93778,6 +93987,163 @@ function mutationOperation2(options) {
93778
93987
  function projectFromDefinitions2(fn) {
93779
93988
  return Object.fromEntries(OPERATION_IDS2.map((id2) => [id2, fn(id2, OPERATION_DEFINITIONS2[id2])]));
93780
93989
  }
93990
+ function normalizeMutationOptions2(options) {
93991
+ return {
93992
+ expectedRevision: options?.expectedRevision,
93993
+ changeMode: options?.changeMode ?? "direct",
93994
+ dryRun: options?.dryRun ?? false
93995
+ };
93996
+ }
93997
+ function executeWrite2(adapter, request, options) {
93998
+ return adapter.write(request, normalizeMutationOptions2(options));
93999
+ }
94000
+ function isRecord3(value) {
94001
+ return typeof value === "object" && value != null && !Array.isArray(value);
94002
+ }
94003
+ function isInteger3(value) {
94004
+ return typeof value === "number" && Number.isInteger(value);
94005
+ }
94006
+ function isTextAddress2(value) {
94007
+ if (!isRecord3(value))
94008
+ return false;
94009
+ if (value.kind !== "text")
94010
+ return false;
94011
+ if (typeof value.blockId !== "string")
94012
+ return false;
94013
+ const range = value.range;
94014
+ if (!isRecord3(range))
94015
+ return false;
94016
+ if (!isInteger3(range.start) || !isInteger3(range.end))
94017
+ return false;
94018
+ return range.start <= range.end;
94019
+ }
94020
+ function assertNoUnknownFields2(input2, allowlist, operationName) {
94021
+ for (const key$1 of Object.keys(input2))
94022
+ if (!allowlist.has(key$1))
94023
+ throw new DocumentApiValidationError2("INVALID_TARGET", `Unknown field "${key$1}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key$1 });
94024
+ }
94025
+ function validateStyleApplyInput2(input2) {
94026
+ if (!isRecord3(input2))
94027
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply input must be a non-null object.");
94028
+ assertNoUnknownFields2(input2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, "format.apply");
94029
+ const { target, inline } = input2;
94030
+ if (target === undefined)
94031
+ throw new DocumentApiValidationError2("INVALID_TARGET", "format.apply requires a target.");
94032
+ if (!isTextAddress2(target))
94033
+ throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a text address object.", {
94034
+ field: "target",
94035
+ value: target
94036
+ });
94037
+ if (inline === undefined || inline === null)
94038
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply requires an inline object.");
94039
+ if (!isRecord3(inline))
94040
+ throw new DocumentApiValidationError2("INVALID_INPUT", "inline must be a non-null object.", {
94041
+ field: "inline",
94042
+ value: inline
94043
+ });
94044
+ const inlineKeys = Object.keys(inline);
94045
+ if (inlineKeys.length === 0)
94046
+ throw new DocumentApiValidationError2("INVALID_INPUT", "inline must include at least one known key.");
94047
+ for (const key$1 of inlineKeys) {
94048
+ if (!MARK_KEY_SET2.has(key$1))
94049
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown inline style key "${key$1}". Known keys: bold, italic, underline, strike.`, {
94050
+ field: "inline",
94051
+ key: key$1
94052
+ });
94053
+ const value = inline[key$1];
94054
+ if (typeof value !== "boolean")
94055
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Inline style "${key$1}" must be a boolean, got ${typeof value}.`, {
94056
+ field: "inline",
94057
+ key: key$1,
94058
+ value
94059
+ });
94060
+ }
94061
+ }
94062
+ function executeStyleApply$1(adapter, input2, options) {
94063
+ validateStyleApplyInput2(input2);
94064
+ return adapter.apply(input2, normalizeMutationOptions2(options));
94065
+ }
94066
+ function validateTarget2(input2, operation) {
94067
+ if (!isRecord3(input2))
94068
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${operation} input must be a non-null object.`);
94069
+ if (input2.target === undefined)
94070
+ throw new DocumentApiValidationError2("INVALID_TARGET", `${operation} requires a target.`);
94071
+ if (!isTextAddress2(input2.target))
94072
+ throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a text address object.", {
94073
+ field: "target",
94074
+ value: input2.target
94075
+ });
94076
+ }
94077
+ function validateFontSizeInput2(input2) {
94078
+ validateTarget2(input2, "format.fontSize");
94079
+ assertNoUnknownFields2(input2, FONT_SIZE_ALLOWED_KEYS2, "format.fontSize");
94080
+ const { value } = input2;
94081
+ if (value === undefined)
94082
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.fontSize requires a value field.");
94083
+ if (value !== null && typeof value !== "string" && typeof value !== "number")
94084
+ throw new DocumentApiValidationError2("INVALID_INPUT", `format.fontSize value must be a string, number, or null.`, {
94085
+ field: "value",
94086
+ value
94087
+ });
94088
+ if (typeof value === "string" && value.length === 0)
94089
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.fontSize value must not be an empty string.", { field: "value" });
94090
+ }
94091
+ function executeFontSize2(adapter, input2, options) {
94092
+ validateFontSizeInput2(input2);
94093
+ return adapter.fontSize(input2, normalizeMutationOptions2(options));
94094
+ }
94095
+ function validateFontFamilyInput2(input2) {
94096
+ validateTarget2(input2, "format.fontFamily");
94097
+ assertNoUnknownFields2(input2, FONT_FAMILY_ALLOWED_KEYS2, "format.fontFamily");
94098
+ const { value } = input2;
94099
+ if (value === undefined)
94100
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.fontFamily requires a value field.");
94101
+ if (value !== null && typeof value !== "string")
94102
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.fontFamily value must be a string or null.", {
94103
+ field: "value",
94104
+ value
94105
+ });
94106
+ if (typeof value === "string" && value.length === 0)
94107
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.fontFamily value must not be an empty string.", { field: "value" });
94108
+ }
94109
+ function executeFontFamily2(adapter, input2, options) {
94110
+ validateFontFamilyInput2(input2);
94111
+ return adapter.fontFamily(input2, normalizeMutationOptions2(options));
94112
+ }
94113
+ function validateColorInput2(input2) {
94114
+ validateTarget2(input2, "format.color");
94115
+ assertNoUnknownFields2(input2, COLOR_ALLOWED_KEYS2, "format.color");
94116
+ const { value } = input2;
94117
+ if (value === undefined)
94118
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.color requires a value field.");
94119
+ if (value !== null && typeof value !== "string")
94120
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.color value must be a string or null.", {
94121
+ field: "value",
94122
+ value
94123
+ });
94124
+ if (typeof value === "string" && value.length === 0)
94125
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.color value must not be an empty string.", { field: "value" });
94126
+ }
94127
+ function executeColor2(adapter, input2, options) {
94128
+ validateColorInput2(input2);
94129
+ return adapter.color(input2, normalizeMutationOptions2(options));
94130
+ }
94131
+ function validateAlignInput2(input2) {
94132
+ validateTarget2(input2, "format.align");
94133
+ assertNoUnknownFields2(input2, ALIGN_ALLOWED_KEYS2, "format.align");
94134
+ const { alignment: alignment$1 } = input2;
94135
+ if (alignment$1 === undefined)
94136
+ throw new DocumentApiValidationError2("INVALID_INPUT", "format.align requires an alignment field.");
94137
+ if (alignment$1 !== null && (typeof alignment$1 !== "string" || !ALIGNMENT_SET2.has(alignment$1)))
94138
+ throw new DocumentApiValidationError2("INVALID_INPUT", `format.align alignment must be one of ${ALIGNMENTS2.join(", ")}, or null.`, {
94139
+ field: "alignment",
94140
+ value: alignment$1
94141
+ });
94142
+ }
94143
+ function executeAlign2(adapter, input2, options) {
94144
+ validateAlignInput2(input2);
94145
+ return adapter.align(input2, normalizeMutationOptions2(options));
94146
+ }
93781
94147
  function objectSchema2(properties, required = []) {
93782
94148
  const schema = {
93783
94149
  type: "object",
@@ -93915,31 +94281,6 @@ function listsExitResultSchemaFor2(operationId) {
93915
94281
  function executeCapabilities2(adapter) {
93916
94282
  return adapter.get();
93917
94283
  }
93918
- function isRecord3(value) {
93919
- return typeof value === "object" && value != null && !Array.isArray(value);
93920
- }
93921
- function isInteger3(value) {
93922
- return typeof value === "number" && Number.isInteger(value);
93923
- }
93924
- function isTextAddress2(value) {
93925
- if (!isRecord3(value))
93926
- return false;
93927
- if (value.kind !== "text")
93928
- return false;
93929
- if (typeof value.blockId !== "string")
93930
- return false;
93931
- const range = value.range;
93932
- if (!isRecord3(range))
93933
- return false;
93934
- if (!isInteger3(range.start) || !isInteger3(range.end))
93935
- return false;
93936
- return range.start <= range.end;
93937
- }
93938
- function assertNoUnknownFields2(input2, allowlist, operationName) {
93939
- for (const key$1 of Object.keys(input2))
93940
- if (!allowlist.has(key$1))
93941
- throw new DocumentApiValidationError2("INVALID_TARGET", `Unknown field "${key$1}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key$1 });
93942
- }
93943
94284
  function validateCreateCommentInput2(input2) {
93944
94285
  if (!isRecord3(input2))
93945
94286
  throw new DocumentApiValidationError2("INVALID_TARGET", "comments.create input must be a non-null object.");
@@ -94089,57 +94430,6 @@ function executeFind2(adapter, selectorOrQuery, options) {
94089
94430
  const query2 = normalizeFindQuery2(selectorOrQuery, options);
94090
94431
  return adapter.find(query2);
94091
94432
  }
94092
- function normalizeMutationOptions2(options) {
94093
- return {
94094
- expectedRevision: options?.expectedRevision,
94095
- changeMode: options?.changeMode ?? "direct",
94096
- dryRun: options?.dryRun ?? false
94097
- };
94098
- }
94099
- function executeWrite2(adapter, request, options) {
94100
- return adapter.write(request, normalizeMutationOptions2(options));
94101
- }
94102
- function validateStyleApplyInput2(input2) {
94103
- if (!isRecord3(input2))
94104
- throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply input must be a non-null object.");
94105
- assertNoUnknownFields2(input2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, "format.apply");
94106
- const { target, inline } = input2;
94107
- if (target === undefined)
94108
- throw new DocumentApiValidationError2("INVALID_TARGET", "format.apply requires a target.");
94109
- if (!isTextAddress2(target))
94110
- throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a text address object.", {
94111
- field: "target",
94112
- value: target
94113
- });
94114
- if (inline === undefined || inline === null)
94115
- throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply requires an inline object.");
94116
- if (!isRecord3(inline))
94117
- throw new DocumentApiValidationError2("INVALID_INPUT", "inline must be a non-null object.", {
94118
- field: "inline",
94119
- value: inline
94120
- });
94121
- const inlineKeys = Object.keys(inline);
94122
- if (inlineKeys.length === 0)
94123
- throw new DocumentApiValidationError2("INVALID_INPUT", "inline must include at least one known key.");
94124
- for (const key$1 of inlineKeys) {
94125
- if (!MARK_KEY_SET2.has(key$1))
94126
- throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown inline style key "${key$1}". Known keys: bold, italic, underline, strike.`, {
94127
- field: "inline",
94128
- key: key$1
94129
- });
94130
- const value = inline[key$1];
94131
- if (typeof value !== "boolean")
94132
- throw new DocumentApiValidationError2("INVALID_INPUT", `Inline style "${key$1}" must be a boolean, got ${typeof value}.`, {
94133
- field: "inline",
94134
- key: key$1,
94135
- value
94136
- });
94137
- }
94138
- }
94139
- function executeStyleApply$1(adapter, input2, options) {
94140
- validateStyleApplyInput2(input2);
94141
- return adapter.apply(input2, normalizeMutationOptions2(options));
94142
- }
94143
94433
  function executeGetNode2(adapter, address2) {
94144
94434
  return adapter.getNode(address2);
94145
94435
  }
@@ -94202,17 +94492,8 @@ function executeInsert2(adapter, input2, options) {
94202
94492
  }, options);
94203
94493
  }
94204
94494
  function validateListTarget2(input2, operationName) {
94205
- const hasTarget = input2.target !== undefined;
94206
- const hasNodeId = input2.nodeId !== undefined;
94207
- if (hasTarget && hasNodeId)
94208
- throw new DocumentApiValidationError2("INVALID_TARGET", `Cannot combine target with nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["target", "nodeId"] });
94209
- if (!hasTarget && !hasNodeId)
94210
- throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} requires a target. Provide either target or nodeId.`);
94211
- if (hasNodeId && typeof input2.nodeId !== "string")
94212
- throw new DocumentApiValidationError2("INVALID_TARGET", `nodeId must be a string, got ${typeof input2.nodeId}.`, {
94213
- field: "nodeId",
94214
- value: input2.nodeId
94215
- });
94495
+ if (input2.target === undefined)
94496
+ throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} requires a target.`);
94216
94497
  }
94217
94498
  function executeListsList2(adapter, query2) {
94218
94499
  return adapter.list(query2);
@@ -94273,18 +94554,8 @@ function executeReplace2(adapter, input2, options) {
94273
94554
  function validateCreateLocation2(at, operationName) {
94274
94555
  if (at.kind !== "before" && at.kind !== "after")
94275
94556
  return;
94276
- const loc = at;
94277
- const hasTarget = loc.target !== undefined;
94278
- const hasNodeId = loc.nodeId !== undefined;
94279
- if (hasTarget && hasNodeId)
94280
- throw new DocumentApiValidationError2("INVALID_TARGET", `Cannot combine at.target with at.nodeId on ${operationName} request. Use exactly one locator mode.`, { fields: ["at.target", "at.nodeId"] });
94281
- if (!hasTarget && !hasNodeId)
94282
- throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires either at.target or at.nodeId.`, { fields: ["at.target", "at.nodeId"] });
94283
- if (hasNodeId && typeof loc.nodeId !== "string")
94284
- throw new DocumentApiValidationError2("INVALID_TARGET", `at.nodeId must be a string, got ${typeof loc.nodeId}.`, {
94285
- field: "at.nodeId",
94286
- value: loc.nodeId
94287
- });
94557
+ if (at.target === undefined)
94558
+ throw new DocumentApiValidationError2("INVALID_TARGET", `${operationName} with at.kind="${at.kind}" requires at.target.`, { fields: ["at.target"] });
94288
94559
  }
94289
94560
  function normalizeParagraphCreateLocation2(location$1) {
94290
94561
  return location$1 ?? { kind: "documentEnd" };
@@ -94365,6 +94636,10 @@ function buildDispatchTable2(api) {
94365
94636
  replace: (input2, options) => api.replace(input2, options),
94366
94637
  delete: (input2, options) => api.delete(input2, options),
94367
94638
  "format.apply": (input2, options) => api.format.apply(input2, options),
94639
+ "format.fontSize": (input2, options) => api.format.fontSize(input2, options),
94640
+ "format.fontFamily": (input2, options) => api.format.fontFamily(input2, options),
94641
+ "format.color": (input2, options) => api.format.color(input2, options),
94642
+ "format.align": (input2, options) => api.format.align(input2, options),
94368
94643
  "create.paragraph": (input2, options) => api.create.paragraph(input2, options),
94369
94644
  "create.heading": (input2, options) => api.create.heading(input2, options),
94370
94645
  "lists.list": (input2) => api.lists.list(input2),
@@ -94460,6 +94735,18 @@ function createDocumentApi2(adapters) {
94460
94735
  },
94461
94736
  apply(input2, options) {
94462
94737
  return executeStyleApply$1(adapters.format, input2, options);
94738
+ },
94739
+ fontSize(input2, options) {
94740
+ return executeFontSize2(adapters.format, input2, options);
94741
+ },
94742
+ fontFamily(input2, options) {
94743
+ return executeFontFamily2(adapters.format, input2, options);
94744
+ },
94745
+ color(input2, options) {
94746
+ return executeColor2(adapters.format, input2, options);
94747
+ },
94748
+ align(input2, options) {
94749
+ return executeAlign2(adapters.format, input2, options);
94463
94750
  }
94464
94751
  },
94465
94752
  trackChanges: {
@@ -94577,10 +94864,12 @@ function pushReason(reasons, reason) {
94577
94864
  function isOperationAvailable(editor, operationId) {
94578
94865
  if (operationId === "format.apply")
94579
94866
  return MARK_KEYS2.some((key$1) => hasMarkCapability(editor, STYLE_MARK_SCHEMA_NAMES[key$1] ?? key$1));
94867
+ if (INLINE_FORMAT_OPERATIONS.has(operationId))
94868
+ return hasAllCommands(editor, operationId) && hasMarkCapability(editor, "textStyle");
94580
94869
  return hasAllCommands(editor, operationId);
94581
94870
  }
94582
94871
  function isCommandBackedAvailability(operationId) {
94583
- return !isMarkBackedOperation(operationId);
94872
+ return !isMarkBackedOperation(operationId) && !INLINE_FORMAT_OPERATIONS.has(operationId);
94584
94873
  }
94585
94874
  function buildOperationCapabilities(editor) {
94586
94875
  const operations = {};
@@ -95416,29 +95705,51 @@ function hasStepExecutor(op) {
95416
95705
  return getStepExecutor(op) !== undefined;
95417
95706
  }
95418
95707
  function captureRunsInRange(editor, blockPos, from$12, to) {
95419
- const doc$2 = editor.state.doc;
95420
- const contentStart = blockPos + 1;
95421
- const absFrom = contentStart + from$12;
95422
- const absTo = contentStart + to;
95708
+ const blockNode = editor.state.doc.nodeAt(blockPos);
95709
+ if (!blockNode || from$12 < 0 || to < from$12 || from$12 === to)
95710
+ return {
95711
+ runs: [],
95712
+ isUniform: true
95713
+ };
95423
95714
  const runs2 = [];
95424
- doc$2.nodesBetween(absFrom, absTo, (node3, pos) => {
95425
- if (!node3.isText)
95426
- return true;
95427
- const nodeStart = Math.max(pos, absFrom);
95428
- const nodeEnd = Math.min(pos + node3.nodeSize, absTo);
95429
- if (nodeStart >= nodeEnd)
95430
- return true;
95431
- const relFrom = nodeStart - contentStart;
95432
- const relTo = nodeEnd - contentStart;
95433
- const formattingMarks = node3.marks.filter((m$1) => !METADATA_MARK_NAMES.has(m$1.type.name));
95715
+ let offset$1 = 0;
95716
+ const maybePushRun = (start$1, end$1, marks) => {
95717
+ const overlapStart = Math.max(start$1, from$12);
95718
+ const overlapEnd = Math.min(end$1, to);
95719
+ if (overlapStart >= overlapEnd)
95720
+ return;
95434
95721
  runs2.push({
95435
- from: relFrom,
95436
- to: relTo,
95437
- charCount: relTo - relFrom,
95438
- marks: formattingMarks
95722
+ from: overlapStart,
95723
+ to: overlapEnd,
95724
+ charCount: overlapEnd - overlapStart,
95725
+ marks: marks.filter((m$1) => !METADATA_MARK_NAMES.has(m$1.type.name))
95439
95726
  });
95440
- return true;
95441
- });
95727
+ };
95728
+ const walkNode$1 = (node3) => {
95729
+ if (node3.isText) {
95730
+ const text4 = node3.text ?? "";
95731
+ if (text4.length > 0) {
95732
+ const start$1 = offset$1;
95733
+ const end$1 = offset$1 + text4.length;
95734
+ maybePushRun(start$1, end$1, Array.isArray(node3.marks) ? node3.marks : []);
95735
+ offset$1 = end$1;
95736
+ }
95737
+ return;
95738
+ }
95739
+ if (node3.isLeaf) {
95740
+ offset$1 += 1;
95741
+ return;
95742
+ }
95743
+ let isFirstChild = true;
95744
+ for (let i$1 = 0;i$1 < node3.childCount; i$1++) {
95745
+ const child = node3.child(i$1);
95746
+ if (child.isBlock && !isFirstChild)
95747
+ offset$1 += 1;
95748
+ walkNode$1(child);
95749
+ isFirstChild = false;
95750
+ }
95751
+ };
95752
+ walkNode$1(blockNode);
95442
95753
  return {
95443
95754
  runs: runs2,
95444
95755
  isUniform: checkUniformity(runs2)
@@ -95871,10 +96182,7 @@ function isRefWhere(where) {
95871
96182
  return where.by === "ref";
95872
96183
  }
95873
96184
  function isV3Ref(payload) {
95874
- return "v" in payload && payload.v === 3;
95875
- }
95876
- function isV2Ref(payload) {
95877
- return "v" in payload && payload.v === 2;
96185
+ return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
95878
96186
  }
95879
96187
  function resolveAbsoluteRange(editor, candidate, from$12, to, stepId) {
95880
96188
  const resolved = resolveTextRangeInBlock(candidate.node, candidate.pos, {
@@ -96104,62 +96412,6 @@ function decodeTextRefPayload(encoded, stepId) {
96104
96412
  throw planError("INVALID_INPUT", "invalid text ref encoding", stepId);
96105
96413
  }
96106
96414
  }
96107
- function resolveV1TextRef(editor, index2, step, refData) {
96108
- const currentRevision = getRevision(editor);
96109
- if (refData.rev !== currentRevision)
96110
- throw planError("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, {
96111
- refRevision: refData.rev,
96112
- currentRevision
96113
- });
96114
- if (!refData.ranges?.length)
96115
- return [];
96116
- const coalesced = normalizeMatchRanges(step.id, refData.ranges);
96117
- const candidate = index2.candidates.find((c$3) => c$3.nodeId === coalesced.blockId);
96118
- if (!candidate)
96119
- return [];
96120
- const matchText = getBlockText(editor, candidate).slice(coalesced.from, coalesced.to);
96121
- return [buildRangeTarget(editor, step, {
96122
- blockId: coalesced.blockId,
96123
- from: coalesced.from,
96124
- to: coalesced.to,
96125
- text: matchText,
96126
- marks: [],
96127
- blockPos: candidate.pos
96128
- }, candidate)];
96129
- }
96130
- function resolveV2TextRef(editor, index2, step, refData) {
96131
- const currentRevision = getRevision(editor);
96132
- if (refData.rev !== currentRevision)
96133
- throw planError("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, {
96134
- refRevision: refData.rev,
96135
- currentRevision
96136
- });
96137
- if (!refData.segments?.length)
96138
- return [];
96139
- const segments = refData.segments.map((s2) => ({
96140
- blockId: s2.blockId,
96141
- from: s2.start,
96142
- to: s2.end
96143
- }));
96144
- if (segments.length === 1) {
96145
- const seg = segments[0];
96146
- const candidate = index2.candidates.find((c$3) => c$3.nodeId === seg.blockId);
96147
- if (!candidate)
96148
- return [];
96149
- const matchText = getBlockText(editor, candidate).slice(seg.from, seg.to);
96150
- const target = buildRangeTarget(editor, step, {
96151
- blockId: seg.blockId,
96152
- from: seg.from,
96153
- to: seg.to,
96154
- text: matchText,
96155
- marks: [],
96156
- blockPos: candidate.pos
96157
- }, candidate);
96158
- target.matchId = refData.matchId;
96159
- return [target];
96160
- }
96161
- return [buildSpanTarget(editor, index2, step, segments, refData.matchId)];
96162
- }
96163
96415
  function resolveV3TextRef(editor, index2, step, refData) {
96164
96416
  const currentRevision = getRevision(editor);
96165
96417
  if (refData.rev !== currentRevision)
@@ -96195,11 +96447,9 @@ function resolveV3TextRef(editor, index2, step, refData) {
96195
96447
  }
96196
96448
  function resolveTextRef(editor, index2, step, ref$2) {
96197
96449
  const payload = decodeTextRefPayload(ref$2.slice(5), step.id);
96198
- if (isV3Ref(payload))
96199
- return resolveV3TextRef(editor, index2, step, payload);
96200
- if (isV2Ref(payload))
96201
- return resolveV2TextRef(editor, index2, step, payload);
96202
- return resolveV1TextRef(editor, index2, step, payload);
96450
+ if (!isV3Ref(payload))
96451
+ throw planError("INVALID_INPUT", "only V3 text refs are supported", step.id);
96452
+ return resolveV3TextRef(editor, index2, step, payload);
96203
96453
  }
96204
96454
  function resolveBlockRef(editor, index2, step, ref$2) {
96205
96455
  const candidate = index2.candidates.find((c$3) => c$3.nodeId === ref$2);
@@ -96222,8 +96472,6 @@ function dispatchRefHandler(editor, index2, step, ref$2) {
96222
96472
  return resolveBlockRef(editor, index2, step, ref$2);
96223
96473
  }
96224
96474
  function resolveRefTargets(editor, index2, step, where) {
96225
- if (where.require !== undefined && where.require !== "exactlyOne")
96226
- throw planError("INVALID_INPUT", `ref-based targeting only accepts require: 'exactlyOne' (received '${where.require}')`, step.id);
96227
96475
  return dispatchRefHandler(editor, index2, step, where.ref);
96228
96476
  }
96229
96477
  function resolveStepTargets(editor, index2, step) {
@@ -97410,6 +97658,7 @@ function toCommentInfo(entry, options = {}) {
97410
97658
  isInternal: typeof entry.isInternal === "boolean" ? entry.isInternal : undefined,
97411
97659
  status,
97412
97660
  target: options.target,
97661
+ anchoredText: options.anchoredText,
97413
97662
  createdTime: typeof entry.createdTime === "number" ? entry.createdTime : undefined,
97414
97663
  creatorName: typeof entry.creatorName === "string" ? entry.creatorName : undefined,
97415
97664
  creatorEmail: typeof entry.creatorEmail === "string" ? entry.creatorEmail : undefined
@@ -97533,7 +97782,74 @@ function resolveCommentIdentity(editor, commentId) {
97533
97782
  anchors
97534
97783
  };
97535
97784
  }
97536
- function mergeAnchorData(infosById, anchors) {
97785
+ function canonicalizeAnchors(sorted) {
97786
+ if (sorted.length === 0)
97787
+ return [];
97788
+ const result = [];
97789
+ let current = {
97790
+ blockId: sorted[0].target.blockId,
97791
+ range: {
97792
+ start: sorted[0].target.range.start,
97793
+ end: sorted[0].target.range.end
97794
+ },
97795
+ pos: sorted[0].pos,
97796
+ end: sorted[0].end
97797
+ };
97798
+ for (let i$1 = 1;i$1 < sorted.length; i$1++) {
97799
+ const anchor = sorted[i$1];
97800
+ const sameBlock = anchor.target.blockId === current.blockId;
97801
+ const overlapsOrAdjacent = anchor.target.range.start <= current.range.end;
97802
+ if (sameBlock && overlapsOrAdjacent) {
97803
+ current.range.end = Math.max(current.range.end, anchor.target.range.end);
97804
+ current.end = Math.max(current.end, anchor.end);
97805
+ } else {
97806
+ result.push(current);
97807
+ current = {
97808
+ blockId: anchor.target.blockId,
97809
+ range: {
97810
+ start: anchor.target.range.start,
97811
+ end: anchor.target.range.end
97812
+ },
97813
+ pos: anchor.pos,
97814
+ end: anchor.end
97815
+ };
97816
+ }
97817
+ }
97818
+ result.push(current);
97819
+ return result;
97820
+ }
97821
+ function extractSegmentText(editor, pos, end$1) {
97822
+ try {
97823
+ const cleaned = editor.state.doc.textBetween(pos, end$1, " ", "").replace(/\ufffc/g, "").trim();
97824
+ return cleaned.length > 0 ? cleaned : undefined;
97825
+ } catch {
97826
+ return;
97827
+ }
97828
+ }
97829
+ function buildAnchoredText(editor, canonical) {
97830
+ const parts = [];
97831
+ for (const anchor of canonical) {
97832
+ const text4 = extractSegmentText(editor, anchor.pos, anchor.end);
97833
+ if (text4)
97834
+ parts.push(text4);
97835
+ }
97836
+ return parts.length > 0 ? normalizeExcerpt(parts.join(" ")) : undefined;
97837
+ }
97838
+ function buildTextTarget(canonical) {
97839
+ if (canonical.length === 0)
97840
+ return;
97841
+ return {
97842
+ kind: "text",
97843
+ segments: canonical.map((a2) => ({
97844
+ blockId: a2.blockId,
97845
+ range: {
97846
+ start: a2.range.start,
97847
+ end: a2.range.end
97848
+ }
97849
+ }))
97850
+ };
97851
+ }
97852
+ function mergeAnchorData(editor, infosById, anchors) {
97537
97853
  const grouped = /* @__PURE__ */ new Map;
97538
97854
  for (const anchor of anchors) {
97539
97855
  const group = grouped.get(anchor.commentId) ?? [];
@@ -97542,28 +97858,34 @@ function mergeAnchorData(infosById, anchors) {
97542
97858
  }
97543
97859
  for (const [commentId, commentAnchors] of grouped.entries()) {
97544
97860
  const sorted = [...commentAnchors].sort((a2, b$1) => a2.pos === b$1.pos ? a2.end - b$1.end : a2.pos - b$1.pos);
97545
- const primary = sorted[0];
97861
+ const firstAnchor = sorted[0];
97546
97862
  const status = sorted.every((anchor) => anchor.status === "resolved") ? "resolved" : "open";
97863
+ const canonical = canonicalizeAnchors(sorted);
97864
+ const target = buildTextTarget(canonical);
97865
+ const anchoredText = buildAnchoredText(editor, canonical);
97547
97866
  const existing = infosById.get(commentId);
97548
97867
  if (existing) {
97549
- if (!existing.target)
97550
- existing.target = primary.target;
97551
- if (!existing.importedId && primary.importedId)
97552
- existing.importedId = primary.importedId;
97553
- if (existing.isInternal == null && primary.isInternal != null)
97554
- existing.isInternal = primary.isInternal;
97868
+ if (!existing.target && target)
97869
+ existing.target = target;
97870
+ if (!existing.importedId && firstAnchor.importedId)
97871
+ existing.importedId = firstAnchor.importedId;
97872
+ if (existing.isInternal == null && firstAnchor.isInternal != null)
97873
+ existing.isInternal = firstAnchor.isInternal;
97555
97874
  if (status === "open")
97556
97875
  existing.status = "open";
97876
+ if (existing.anchoredText == null && anchoredText != null)
97877
+ existing.anchoredText = anchoredText;
97557
97878
  continue;
97558
97879
  }
97559
97880
  infosById.set(commentId, toCommentInfo({
97560
97881
  commentId,
97561
- importedId: primary.importedId,
97562
- isInternal: primary.isInternal,
97882
+ importedId: firstAnchor.importedId,
97883
+ isInternal: firstAnchor.isInternal,
97563
97884
  isDone: status === "resolved"
97564
97885
  }, {
97565
- target: primary.target,
97566
- status
97886
+ target,
97887
+ status,
97888
+ anchoredText
97567
97889
  }));
97568
97890
  }
97569
97891
  }
@@ -97579,15 +97901,33 @@ function buildCommentInfos(editor) {
97579
97901
  commentId
97580
97902
  }));
97581
97903
  }
97582
- mergeAnchorData(infosById, listCommentAnchorsSafe(editor));
97904
+ mergeAnchorData(editor, infosById, listCommentAnchorsSafe(editor));
97905
+ for (const info of infosById.values()) {
97906
+ if (info.target != null && info.anchoredText != null || !info.parentCommentId)
97907
+ continue;
97908
+ const visited = /* @__PURE__ */ new Set;
97909
+ let cursor = info;
97910
+ while (cursor?.parentCommentId && !visited.has(cursor.parentCommentId)) {
97911
+ visited.add(cursor.parentCommentId);
97912
+ const ancestor = infosById.get(cursor.parentCommentId);
97913
+ if (ancestor?.target != null) {
97914
+ if (info.target == null)
97915
+ info.target = ancestor.target;
97916
+ if (info.anchoredText == null && ancestor.anchoredText != null)
97917
+ info.anchoredText = ancestor.anchoredText;
97918
+ break;
97919
+ }
97920
+ cursor = ancestor;
97921
+ }
97922
+ }
97583
97923
  const infos = Array.from(infosById.values());
97584
97924
  infos.sort((left$1, right$1) => {
97585
97925
  const leftCreated = left$1.createdTime ?? 0;
97586
97926
  const rightCreated = right$1.createdTime ?? 0;
97587
97927
  if (leftCreated !== rightCreated)
97588
97928
  return leftCreated - rightCreated;
97589
- const leftStart = left$1.target?.range.start ?? Number.MAX_SAFE_INTEGER;
97590
- const rightStart = right$1.target?.range.start ?? Number.MAX_SAFE_INTEGER;
97929
+ const leftStart = left$1.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
97930
+ const rightStart = right$1.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
97591
97931
  if (leftStart !== rightStart)
97592
97932
  return leftStart - rightStart;
97593
97933
  return left$1.commentId.localeCompare(right$1.commentId);
@@ -97595,7 +97935,7 @@ function buildCommentInfos(editor) {
97595
97935
  return infos;
97596
97936
  }
97597
97937
  function addCommentHandler(editor, input2, options) {
97598
- requireEditorCommand(editor.commands?.addComment, "comments.add (addComment)");
97938
+ requireEditorCommand(editor.commands?.addComment, "comments.create (addComment)");
97599
97939
  if (input2.target.range.start === input2.target.range.end)
97600
97940
  return {
97601
97941
  success: false,
@@ -97626,7 +97966,7 @@ function addCommentHandler(editor, input2, options) {
97626
97966
  };
97627
97967
  const commentId = v4_default();
97628
97968
  if (executeDomainCommand(editor, () => {
97629
- const didInsert = requireEditorCommand(editor.commands?.addComment, "comments.add (addComment)")({
97969
+ const didInsert = requireEditorCommand(editor.commands?.addComment, "comments.create (addComment)")({
97630
97970
  content: input2.text,
97631
97971
  isInternal: false,
97632
97972
  commentId
@@ -97666,7 +98006,7 @@ function addCommentHandler(editor, input2, options) {
97666
98006
  };
97667
98007
  }
97668
98008
  function editCommentHandler(editor, input2, options) {
97669
- const editComment = requireEditorCommand(editor.commands?.editComment, "comments.edit (editComment)");
98009
+ const editComment = requireEditorCommand(editor.commands?.editComment, "comments.patch (editComment)");
97670
98010
  const store = getCommentEntityStore(editor);
97671
98011
  const identity$1 = resolveCommentIdentity(editor, input2.commentId);
97672
98012
  const existing = findCommentEntity(store, identity$1.commentId);
@@ -97705,7 +98045,7 @@ function editCommentHandler(editor, input2, options) {
97705
98045
  };
97706
98046
  }
97707
98047
  function replyToCommentHandler(editor, input2, options) {
97708
- const addCommentReply = requireEditorCommand(editor.commands?.addCommentReply, "comments.reply (addCommentReply)");
98048
+ const addCommentReply = requireEditorCommand(editor.commands?.addCommentReply, "comments.create (addCommentReply)");
97709
98049
  if (!input2.parentCommentId)
97710
98050
  return {
97711
98051
  success: false,
@@ -97755,7 +98095,7 @@ function replyToCommentHandler(editor, input2, options) {
97755
98095
  };
97756
98096
  }
97757
98097
  function moveCommentHandler(editor, input2, options) {
97758
- const moveComment = requireEditorCommand(editor.commands?.moveComment, "comments.move (moveComment)");
98098
+ const moveComment = requireEditorCommand(editor.commands?.moveComment, "comments.patch (moveComment)");
97759
98099
  if (input2.target.range.start === input2.target.range.end)
97760
98100
  return {
97761
98101
  success: false,
@@ -97819,7 +98159,7 @@ function moveCommentHandler(editor, input2, options) {
97819
98159
  };
97820
98160
  }
97821
98161
  function resolveCommentHandler(editor, input2, options) {
97822
- const resolveComment = requireEditorCommand(editor.commands?.resolveComment, "comments.resolve (resolveComment)");
98162
+ const resolveComment = requireEditorCommand(editor.commands?.resolveComment, "comments.patch (resolveComment)");
97823
98163
  const store = getCommentEntityStore(editor);
97824
98164
  const identity$1 = resolveCommentIdentity(editor, input2.commentId);
97825
98165
  const existing = findCommentEntity(store, identity$1.commentId);
@@ -97977,7 +98317,7 @@ function listCommentsHandler(editor, query2) {
97977
98317
  const paged = paginate(filtered, query2?.offset, query2?.limit);
97978
98318
  const items = paged.items.map((comment2) => {
97979
98319
  const handle3 = buildResolvedHandle2(`comment:${comment2.commentId}`, "stable", "comment");
97980
- const { importedId, parentCommentId, text: text4, isInternal, status, target, createdTime, creatorName, creatorEmail, address: address2 } = comment2;
98320
+ const { importedId, parentCommentId, text: text4, isInternal, status, target, anchoredText, createdTime, creatorName, creatorEmail, address: address2 } = comment2;
97981
98321
  return buildDiscoveryItem2(comment2.commentId, handle3, {
97982
98322
  address: address2,
97983
98323
  importedId,
@@ -97986,6 +98326,7 @@ function listCommentsHandler(editor, query2) {
97986
98326
  isInternal,
97987
98327
  status,
97988
98328
  target,
98329
+ anchoredText,
97989
98330
  createdTime,
97990
98331
  creatorName,
97991
98332
  creatorEmail
@@ -98876,6 +99217,121 @@ function findAdapter(editor, query2) {
98876
99217
  diagnostics: uniqueDiagnostics.length ? uniqueDiagnostics : undefined
98877
99218
  };
98878
99219
  }
99220
+ function resolveFormatTarget(editor, target, operation) {
99221
+ const range = resolveTextTarget(editor, target);
99222
+ if (!range)
99223
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `${operation} target could not be resolved.`, { target });
99224
+ const resolution = buildTextMutationResolution({
99225
+ requestedTarget: target,
99226
+ target,
99227
+ range,
99228
+ text: readTextAtResolvedRange(editor, range)
99229
+ });
99230
+ return {
99231
+ target,
99232
+ from: range.from,
99233
+ to: range.to,
99234
+ resolution
99235
+ };
99236
+ }
99237
+ function collapsedTargetFailure(resolution, operation) {
99238
+ return {
99239
+ success: false,
99240
+ resolution,
99241
+ failure: {
99242
+ code: "INVALID_TARGET",
99243
+ message: `${operation} requires a non-collapsed target range.`
99244
+ }
99245
+ };
99246
+ }
99247
+ function noOpFailure(resolution, operation) {
99248
+ return {
99249
+ success: false,
99250
+ resolution,
99251
+ failure: {
99252
+ code: "NO_OP",
99253
+ message: `${operation} produced no change.`
99254
+ }
99255
+ };
99256
+ }
99257
+ function inlineValueFormatWrapper(editor, target, value, options, config2) {
99258
+ rejectTrackedMode(config2.operation, options);
99259
+ const resolved = resolveFormatTarget(editor, target, config2.operation);
99260
+ if (resolved.from === resolved.to)
99261
+ return collapsedTargetFailure(resolved.resolution, config2.operation);
99262
+ requireSchemaMark(editor, "textStyle", config2.operation);
99263
+ const setTextSelection$1 = requireEditorCommand(editor.commands?.setTextSelection, `${config2.operation} (setTextSelection)`);
99264
+ const activeCommand = value !== null ? config2.setCommand : config2.unsetCommand;
99265
+ requireEditorCommand(editor.commands?.[activeCommand], `${config2.operation} (${activeCommand})`);
99266
+ if (options?.dryRun)
99267
+ return {
99268
+ success: true,
99269
+ resolution: resolved.resolution
99270
+ };
99271
+ if (executeDomainCommand(editor, () => {
99272
+ setTextSelection$1({
99273
+ from: resolved.from,
99274
+ to: resolved.to
99275
+ });
99276
+ const cmd = editor.commands[activeCommand];
99277
+ return value !== null ? cmd(value) : cmd();
99278
+ }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
99279
+ return noOpFailure(resolved.resolution, config2.operation);
99280
+ return {
99281
+ success: true,
99282
+ resolution: resolved.resolution
99283
+ };
99284
+ }
99285
+ function formatFontSizeWrapper(editor, input2, options) {
99286
+ return inlineValueFormatWrapper(editor, input2.target, input2.value, options, {
99287
+ operation: "format.fontSize",
99288
+ setCommand: "setFontSize",
99289
+ unsetCommand: "unsetFontSize"
99290
+ });
99291
+ }
99292
+ function formatFontFamilyWrapper(editor, input2, options) {
99293
+ return inlineValueFormatWrapper(editor, input2.target, input2.value, options, {
99294
+ operation: "format.fontFamily",
99295
+ setCommand: "setFontFamily",
99296
+ unsetCommand: "unsetFontFamily"
99297
+ });
99298
+ }
99299
+ function formatColorWrapper(editor, input2, options) {
99300
+ return inlineValueFormatWrapper(editor, input2.target, input2.value, options, {
99301
+ operation: "format.color",
99302
+ setCommand: "setColor",
99303
+ unsetCommand: "unsetColor"
99304
+ });
99305
+ }
99306
+ function formatAlignWrapper(editor, input2, options) {
99307
+ const operation = "format.align";
99308
+ rejectTrackedMode(operation, options);
99309
+ const resolved = resolveFormatTarget(editor, input2.target, operation);
99310
+ const setTextSelection$1 = requireEditorCommand(editor.commands?.setTextSelection, `${operation} (setTextSelection)`);
99311
+ if (input2.alignment !== null)
99312
+ requireEditorCommand(editor.commands?.setTextAlign, `${operation} (setTextAlign)`);
99313
+ else
99314
+ requireEditorCommand(editor.commands?.unsetTextAlign, `${operation} (unsetTextAlign)`);
99315
+ if (options?.dryRun)
99316
+ return {
99317
+ success: true,
99318
+ resolution: resolved.resolution
99319
+ };
99320
+ if (executeDomainCommand(editor, () => {
99321
+ setTextSelection$1({
99322
+ from: resolved.from,
99323
+ to: resolved.to
99324
+ });
99325
+ if (input2.alignment !== null)
99326
+ return editor.commands.setTextAlign(input2.alignment);
99327
+ return editor.commands.unsetTextAlign();
99328
+ }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
99329
+ return noOpFailure(resolved.resolution, operation);
99330
+ return {
99331
+ success: true,
99332
+ resolution: resolved.resolution
99333
+ };
99334
+ }
98879
99335
  function findBlocksByTypeAndId(blockIndex, nodeType, nodeId) {
98880
99336
  const byIdMatch = blockIndex.byId.get(`${nodeType}:${nodeId}`);
98881
99337
  if (byIdMatch)
@@ -100210,7 +100666,13 @@ function getDocumentApiAdapters(editor) {
100210
100666
  capabilities: { get: () => getDocumentApiCapabilities(editor) },
100211
100667
  comments: createCommentsWrapper(editor),
100212
100668
  write: { write: (request, options) => writeWrapper(editor, request, options) },
100213
- format: { apply: (input2, options) => styleApplyWrapper(editor, input2, options) },
100669
+ format: {
100670
+ apply: (input2, options) => styleApplyWrapper(editor, input2, options),
100671
+ fontSize: (input2, options) => formatFontSizeWrapper(editor, input2, options),
100672
+ fontFamily: (input2, options) => formatFontFamilyWrapper(editor, input2, options),
100673
+ color: (input2, options) => formatColorWrapper(editor, input2, options),
100674
+ align: (input2, options) => formatAlignWrapper(editor, input2, options)
100675
+ },
100214
100676
  trackChanges: {
100215
100677
  list: (query2) => trackChangesListWrapper(editor, query2),
100216
100678
  get: (input2) => trackChangesGetWrapper(editor, input2),
@@ -134274,7 +134736,7 @@ var Node$13 = class Node$14 {
134274
134736
  console.warn("Failed to initialize developer tools:", error);
134275
134737
  }
134276
134738
  }
134277
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_COMMAND2, T_NOT_FOUND_TRACKED2, T_NOT_FOUND_COMMAND_TRACKED2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, nodeTypeValues2, blockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, blockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, DocumentApiValidationError2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, STYLE_MARK_SCHEMA_NAMES, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, REF_HANDLERS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
134739
+ }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, DocumentApiValidationError2, ALIGNMENTS2, ALIGNMENT_SET2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, FONT_SIZE_ALLOWED_KEYS2, FONT_FAMILY_ALLOWED_KEYS2, COLOR_ALLOWED_KEYS2, ALIGN_ALLOWED_KEYS2, nodeTypeValues2, blockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, STYLE_MARK_SCHEMA_NAMES, INLINE_FORMAT_OPERATIONS, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, REF_HANDLERS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
134278
134740
  constructor(config2) {
134279
134741
  this.search = config2.search;
134280
134742
  this.caseSensitive = !!config2.caseSensitive;
@@ -152345,9 +152807,9 @@ var Node$13 = class Node$14 {
152345
152807
  trackedChanges: context.trackedChanges ?? []
152346
152808
  });
152347
152809
  }, _hoisted_1$6, _hoisted_2$1, _hoisted_3, _hoisted_4, ContextMenu_default, _hoisted_1$5, BasicUpload_default, _hoisted_1$4, MIN_WIDTH = 200, PPI = 96, alignment = "flex-end", Ruler_default, GenericPopover_default, _hoisted_1$3, RESIZE_HANDLE_WIDTH_PX = 9, RESIZE_HANDLE_OFFSET_PX = 4, DRAG_OVERLAY_EXTENSION_PX = 1000, MIN_DRAG_OVERLAY_WIDTH_PX = 2000, THROTTLE_INTERVAL_MS = 16, MIN_RESIZE_DELTA_PX = 1, TableResizeOverlay_default, _hoisted_1$2, OVERLAY_EXPANSION_PX = 2000, RESIZE_HANDLE_SIZE_PX = 12, MOUSE_MOVE_THROTTLE_MS = 16, DIMENSION_CHANGE_THRESHOLD_PX = 1, Z_INDEX_OVERLAY = 10, Z_INDEX_HANDLE = 15, Z_INDEX_GUIDELINE = 20, ImageResizeOverlay_default, LINK_CLICK_DEBOUNCE_MS = 300, CURSOR_UPDATE_TIMEOUT_MS = 10, LinkClickHandler_default, _hoisted_1$1, _hoisted_2, DOCX2 = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", TABLE_RESIZE_HOVER_THRESHOLD = 8, TABLE_RESIZE_THROTTLE_MS = 16, SuperEditor_default, _hoisted_1, SuperInput_default, SlashMenu, Extensions;
152348
- var init_src_eL3w4G7e_es = __esm(() => {
152810
+ var init_src_DVVC7vA7_es = __esm(() => {
152349
152811
  init_rolldown_runtime_B2q5OVn9_es();
152350
- init_SuperConverter_Cf1y7bFA_es();
152812
+ init_SuperConverter_BxBclpFg_es();
152351
152813
  init_jszip_ChlR43oI_es();
152352
152814
  init_uuid_2IzDu5nl_es();
152353
152815
  init_constants_DBKi0Amm_es();
@@ -160445,22 +160907,7 @@ function print() { __p += __j.call(arguments, '') }
160445
160907
  NONE_FAILURES2 = [];
160446
160908
  NONE_THROWS2 = [];
160447
160909
  T_NOT_FOUND2 = ["TARGET_NOT_FOUND"];
160448
- T_NOT_FOUND_COMMAND2 = [
160449
- "TARGET_NOT_FOUND",
160450
- "COMMAND_UNAVAILABLE",
160451
- "CAPABILITY_UNAVAILABLE"
160452
- ];
160453
- T_NOT_FOUND_TRACKED2 = [
160454
- "TARGET_NOT_FOUND",
160455
- "TRACK_CHANGE_COMMAND_UNAVAILABLE",
160456
- "CAPABILITY_UNAVAILABLE"
160457
- ];
160458
- T_NOT_FOUND_COMMAND_TRACKED2 = [
160459
- "TARGET_NOT_FOUND",
160460
- "COMMAND_UNAVAILABLE",
160461
- "TRACK_CHANGE_COMMAND_UNAVAILABLE",
160462
- "CAPABILITY_UNAVAILABLE"
160463
- ];
160910
+ T_NOT_FOUND_CAPABLE2 = ["TARGET_NOT_FOUND", "CAPABILITY_UNAVAILABLE"];
160464
160911
  T_PLAN_ENGINE2 = [
160465
160912
  "REVISION_MISMATCH",
160466
160913
  "MATCH_NOT_FOUND",
@@ -160488,6 +160935,7 @@ function print() { __p += __j.call(arguments, '') }
160488
160935
  requiresDocumentContext: true,
160489
160936
  metadata: readOperation2({
160490
160937
  idempotency: "idempotent",
160938
+ throws: ["CAPABILITY_UNAVAILABLE", "INVALID_INPUT"],
160491
160939
  deterministicTargetResolution: false
160492
160940
  }),
160493
160941
  referenceDocPath: "find.mdx",
@@ -160540,7 +160988,7 @@ function print() { __p += __j.call(arguments, '') }
160540
160988
  supportsDryRun: true,
160541
160989
  supportsTrackedMode: true,
160542
160990
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160543
- throws: [...T_NOT_FOUND_TRACKED2, "INVALID_TARGET"]
160991
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160544
160992
  }),
160545
160993
  referenceDocPath: "insert.mdx",
160546
160994
  referenceGroup: "core"
@@ -160554,7 +161002,7 @@ function print() { __p += __j.call(arguments, '') }
160554
161002
  supportsDryRun: true,
160555
161003
  supportsTrackedMode: true,
160556
161004
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160557
- throws: [...T_NOT_FOUND_TRACKED2, "INVALID_TARGET"]
161005
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160558
161006
  }),
160559
161007
  referenceDocPath: "replace.mdx",
160560
161008
  referenceGroup: "core"
@@ -160568,7 +161016,7 @@ function print() { __p += __j.call(arguments, '') }
160568
161016
  supportsDryRun: true,
160569
161017
  supportsTrackedMode: true,
160570
161018
  possibleFailureCodes: ["NO_OP"],
160571
- throws: [...T_NOT_FOUND_TRACKED2, "INVALID_TARGET"]
161019
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160572
161020
  }),
160573
161021
  referenceDocPath: "delete.mdx",
160574
161022
  referenceGroup: "core"
@@ -160583,7 +161031,7 @@ function print() { __p += __j.call(arguments, '') }
160583
161031
  supportsTrackedMode: true,
160584
161032
  possibleFailureCodes: ["INVALID_TARGET"],
160585
161033
  throws: [
160586
- ...T_NOT_FOUND_COMMAND_TRACKED2,
161034
+ ...T_NOT_FOUND_CAPABLE2,
160587
161035
  "INVALID_TARGET",
160588
161036
  "INVALID_INPUT"
160589
161037
  ]
@@ -160591,6 +161039,78 @@ function print() { __p += __j.call(arguments, '') }
160591
161039
  referenceDocPath: "format/apply.mdx",
160592
161040
  referenceGroup: "format"
160593
161041
  },
161042
+ "format.fontSize": {
161043
+ memberPath: "format.fontSize",
161044
+ description: "Set or unset the font size on the target text range. Pass null to remove.",
161045
+ requiresDocumentContext: true,
161046
+ metadata: mutationOperation2({
161047
+ idempotency: "conditional",
161048
+ supportsDryRun: true,
161049
+ supportsTrackedMode: false,
161050
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
161051
+ throws: [
161052
+ ...T_NOT_FOUND_CAPABLE2,
161053
+ "INVALID_TARGET",
161054
+ "INVALID_INPUT"
161055
+ ]
161056
+ }),
161057
+ referenceDocPath: "format/font-size.mdx",
161058
+ referenceGroup: "format"
161059
+ },
161060
+ "format.fontFamily": {
161061
+ memberPath: "format.fontFamily",
161062
+ description: "Set or unset the font family on the target text range. Pass null to remove.",
161063
+ requiresDocumentContext: true,
161064
+ metadata: mutationOperation2({
161065
+ idempotency: "conditional",
161066
+ supportsDryRun: true,
161067
+ supportsTrackedMode: false,
161068
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
161069
+ throws: [
161070
+ ...T_NOT_FOUND_CAPABLE2,
161071
+ "INVALID_TARGET",
161072
+ "INVALID_INPUT"
161073
+ ]
161074
+ }),
161075
+ referenceDocPath: "format/font-family.mdx",
161076
+ referenceGroup: "format"
161077
+ },
161078
+ "format.color": {
161079
+ memberPath: "format.color",
161080
+ description: "Set or unset the text color on the target text range. Pass null to remove.",
161081
+ requiresDocumentContext: true,
161082
+ metadata: mutationOperation2({
161083
+ idempotency: "conditional",
161084
+ supportsDryRun: true,
161085
+ supportsTrackedMode: false,
161086
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
161087
+ throws: [
161088
+ ...T_NOT_FOUND_CAPABLE2,
161089
+ "INVALID_TARGET",
161090
+ "INVALID_INPUT"
161091
+ ]
161092
+ }),
161093
+ referenceDocPath: "format/color.mdx",
161094
+ referenceGroup: "format"
161095
+ },
161096
+ "format.align": {
161097
+ memberPath: "format.align",
161098
+ description: "Set or unset paragraph alignment on the block containing the target. Pass null to reset to default.",
161099
+ requiresDocumentContext: true,
161100
+ metadata: mutationOperation2({
161101
+ idempotency: "conditional",
161102
+ supportsDryRun: true,
161103
+ supportsTrackedMode: false,
161104
+ possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
161105
+ throws: [
161106
+ ...T_NOT_FOUND_CAPABLE2,
161107
+ "INVALID_TARGET",
161108
+ "INVALID_INPUT"
161109
+ ]
161110
+ }),
161111
+ referenceDocPath: "format/align.mdx",
161112
+ referenceGroup: "format"
161113
+ },
160594
161114
  "create.paragraph": {
160595
161115
  memberPath: "create.paragraph",
160596
161116
  description: "Create a new paragraph at the target position.",
@@ -160601,7 +161121,7 @@ function print() { __p += __j.call(arguments, '') }
160601
161121
  supportsTrackedMode: true,
160602
161122
  possibleFailureCodes: ["INVALID_TARGET"],
160603
161123
  throws: [
160604
- ...T_NOT_FOUND_COMMAND_TRACKED2,
161124
+ ...T_NOT_FOUND_CAPABLE2,
160605
161125
  "INVALID_TARGET",
160606
161126
  "AMBIGUOUS_TARGET"
160607
161127
  ]
@@ -160619,7 +161139,7 @@ function print() { __p += __j.call(arguments, '') }
160619
161139
  supportsTrackedMode: true,
160620
161140
  possibleFailureCodes: ["INVALID_TARGET"],
160621
161141
  throws: [
160622
- ...T_NOT_FOUND_COMMAND_TRACKED2,
161142
+ ...T_NOT_FOUND_CAPABLE2,
160623
161143
  "INVALID_TARGET",
160624
161144
  "AMBIGUOUS_TARGET"
160625
161145
  ]
@@ -160633,7 +161153,11 @@ function print() { __p += __j.call(arguments, '') }
160633
161153
  requiresDocumentContext: true,
160634
161154
  metadata: readOperation2({
160635
161155
  idempotency: "idempotent",
160636
- throws: T_NOT_FOUND2
161156
+ throws: [
161157
+ "TARGET_NOT_FOUND",
161158
+ "INVALID_TARGET",
161159
+ "INVALID_INPUT"
161160
+ ]
160637
161161
  }),
160638
161162
  referenceDocPath: "lists/list.mdx",
160639
161163
  referenceGroup: "lists"
@@ -160658,7 +161182,7 @@ function print() { __p += __j.call(arguments, '') }
160658
161182
  supportsDryRun: true,
160659
161183
  supportsTrackedMode: true,
160660
161184
  possibleFailureCodes: ["INVALID_TARGET"],
160661
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
161185
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160662
161186
  }),
160663
161187
  referenceDocPath: "lists/insert.mdx",
160664
161188
  referenceGroup: "lists"
@@ -160672,7 +161196,7 @@ function print() { __p += __j.call(arguments, '') }
160672
161196
  supportsDryRun: true,
160673
161197
  supportsTrackedMode: false,
160674
161198
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160675
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
161199
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160676
161200
  }),
160677
161201
  referenceDocPath: "lists/set-type.mdx",
160678
161202
  referenceGroup: "lists"
@@ -160686,7 +161210,7 @@ function print() { __p += __j.call(arguments, '') }
160686
161210
  supportsDryRun: true,
160687
161211
  supportsTrackedMode: false,
160688
161212
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160689
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
161213
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160690
161214
  }),
160691
161215
  referenceDocPath: "lists/indent.mdx",
160692
161216
  referenceGroup: "lists"
@@ -160700,7 +161224,7 @@ function print() { __p += __j.call(arguments, '') }
160700
161224
  supportsDryRun: true,
160701
161225
  supportsTrackedMode: false,
160702
161226
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160703
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
161227
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160704
161228
  }),
160705
161229
  referenceDocPath: "lists/outdent.mdx",
160706
161230
  referenceGroup: "lists"
@@ -160714,7 +161238,7 @@ function print() { __p += __j.call(arguments, '') }
160714
161238
  supportsDryRun: true,
160715
161239
  supportsTrackedMode: false,
160716
161240
  possibleFailureCodes: ["NO_OP", "INVALID_TARGET"],
160717
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
161241
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160718
161242
  }),
160719
161243
  referenceDocPath: "lists/restart.mdx",
160720
161244
  referenceGroup: "lists"
@@ -160728,7 +161252,7 @@ function print() { __p += __j.call(arguments, '') }
160728
161252
  supportsDryRun: true,
160729
161253
  supportsTrackedMode: false,
160730
161254
  possibleFailureCodes: ["INVALID_TARGET"],
160731
- throws: [...T_NOT_FOUND_COMMAND_TRACKED2, "INVALID_TARGET"]
161255
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160732
161256
  }),
160733
161257
  referenceDocPath: "lists/exit.mdx",
160734
161258
  referenceGroup: "lists"
@@ -160742,7 +161266,7 @@ function print() { __p += __j.call(arguments, '') }
160742
161266
  supportsDryRun: false,
160743
161267
  supportsTrackedMode: false,
160744
161268
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160745
- throws: [...T_NOT_FOUND_COMMAND2, "INVALID_TARGET"]
161269
+ throws: [...T_NOT_FOUND_CAPABLE2, "INVALID_TARGET"]
160746
161270
  }),
160747
161271
  referenceDocPath: "comments/create.mdx",
160748
161272
  referenceGroup: "comments"
@@ -160757,7 +161281,7 @@ function print() { __p += __j.call(arguments, '') }
160757
161281
  supportsTrackedMode: false,
160758
161282
  possibleFailureCodes: ["INVALID_TARGET", "NO_OP"],
160759
161283
  throws: [
160760
- ...T_NOT_FOUND_COMMAND2,
161284
+ ...T_NOT_FOUND_CAPABLE2,
160761
161285
  "INVALID_TARGET",
160762
161286
  "INVALID_INPUT"
160763
161287
  ]
@@ -160774,7 +161298,7 @@ function print() { __p += __j.call(arguments, '') }
160774
161298
  supportsDryRun: false,
160775
161299
  supportsTrackedMode: false,
160776
161300
  possibleFailureCodes: ["NO_OP"],
160777
- throws: T_NOT_FOUND_COMMAND2
161301
+ throws: T_NOT_FOUND_CAPABLE2
160778
161302
  }),
160779
161303
  referenceDocPath: "comments/delete.mdx",
160780
161304
  referenceGroup: "comments"
@@ -160794,7 +161318,10 @@ function print() { __p += __j.call(arguments, '') }
160794
161318
  memberPath: "comments.list",
160795
161319
  description: "List all comment threads in the document.",
160796
161320
  requiresDocumentContext: true,
160797
- metadata: readOperation2({ idempotency: "idempotent" }),
161321
+ metadata: readOperation2({
161322
+ idempotency: "idempotent",
161323
+ throws: ["INVALID_INPUT"]
161324
+ }),
160798
161325
  referenceDocPath: "comments/list.mdx",
160799
161326
  referenceGroup: "comments"
160800
161327
  },
@@ -160802,7 +161329,10 @@ function print() { __p += __j.call(arguments, '') }
160802
161329
  memberPath: "trackChanges.list",
160803
161330
  description: "List all tracked changes in the document.",
160804
161331
  requiresDocumentContext: true,
160805
- metadata: readOperation2({ idempotency: "idempotent" }),
161332
+ metadata: readOperation2({
161333
+ idempotency: "idempotent",
161334
+ throws: ["INVALID_INPUT"]
161335
+ }),
160806
161336
  referenceDocPath: "track-changes/list.mdx",
160807
161337
  referenceGroup: "trackChanges"
160808
161338
  },
@@ -160827,7 +161357,7 @@ function print() { __p += __j.call(arguments, '') }
160827
161357
  supportsTrackedMode: false,
160828
161358
  possibleFailureCodes: ["NO_OP"],
160829
161359
  throws: [
160830
- ...T_NOT_FOUND_COMMAND2,
161360
+ ...T_NOT_FOUND_CAPABLE2,
160831
161361
  "INVALID_INPUT",
160832
161362
  "INVALID_TARGET"
160833
161363
  ]
@@ -160893,6 +161423,27 @@ function print() { __p += __j.call(arguments, '') }
160893
161423
  OPERATION_IDS2.filter((operationId) => COMMAND_CATALOG2[operationId].mutates);
160894
161424
  projectFromDefinitions2((_id, entry) => entry.description);
160895
161425
  projectFromDefinitions2((_id, entry) => entry.requiresDocumentContext);
161426
+ DocumentApiValidationError2 = class DocumentApiValidationError3 extends Error {
161427
+ constructor(code$1, message, details) {
161428
+ super(message);
161429
+ this.name = "DocumentApiValidationError";
161430
+ this.code = code$1;
161431
+ this.details = details;
161432
+ Object.setPrototypeOf(this, DocumentApiValidationError3.prototype);
161433
+ }
161434
+ };
161435
+ ALIGNMENTS2 = [
161436
+ "left",
161437
+ "center",
161438
+ "right",
161439
+ "justify"
161440
+ ];
161441
+ ALIGNMENT_SET2 = new Set(ALIGNMENTS2);
161442
+ STYLE_APPLY_INPUT_ALLOWED_KEYS2 = new Set(["target", "inline"]);
161443
+ FONT_SIZE_ALLOWED_KEYS2 = new Set(["target", "value"]);
161444
+ FONT_FAMILY_ALLOWED_KEYS2 = new Set(["target", "value"]);
161445
+ COLOR_ALLOWED_KEYS2 = new Set(["target", "value"]);
161446
+ ALIGN_ALLOWED_KEYS2 = new Set(["target", "alignment"]);
160896
161447
  nodeTypeValues2 = NODE_TYPES2;
160897
161448
  blockNodeTypeValues2 = BLOCK_NODE_TYPES2;
160898
161449
  inlineNodeTypeValues2 = INLINE_NODE_TYPES2;
@@ -160914,6 +161465,16 @@ function print() { __p += __j.call(arguments, '') }
160914
161465
  "blockId",
160915
161466
  "range"
160916
161467
  ]), objectSchema2({
161468
+ blockId: { type: "string" },
161469
+ range: ref$1("Range")
161470
+ }, ["blockId", "range"]), objectSchema2({
161471
+ kind: { const: "text" },
161472
+ segments: {
161473
+ type: "array",
161474
+ items: ref$1("TextSegment"),
161475
+ minItems: 1
161476
+ }
161477
+ }, ["kind", "segments"]), objectSchema2({
160917
161478
  kind: { const: "block" },
160918
161479
  nodeType: { enum: [...blockNodeTypeValues2] },
160919
161480
  nodeId: { type: "string" }
@@ -161070,6 +161631,7 @@ function print() { __p += __j.call(arguments, '') }
161070
161631
  ref$1("InlineAnchor");
161071
161632
  ref$1("TargetKind");
161072
161633
  textAddressSchema2 = ref$1("TextAddress");
161634
+ textTargetSchema2 = ref$1("TextTarget");
161073
161635
  blockNodeAddressSchema2 = ref$1("BlockNodeAddress");
161074
161636
  paragraphAddressSchema2 = ref$1("ParagraphAddress");
161075
161637
  headingAddressSchema2 = ref$1("HeadingAddress");
@@ -161272,7 +161834,8 @@ function print() { __p += __j.call(arguments, '') }
161272
161834
  text: { type: "string" },
161273
161835
  isInternal: { type: "boolean" },
161274
161836
  status: { enum: ["open", "resolved"] },
161275
- target: textAddressSchema2,
161837
+ target: textTargetSchema2,
161838
+ anchoredText: { type: "string" },
161276
161839
  createdTime: { type: "number" },
161277
161840
  creatorName: { type: "string" },
161278
161841
  creatorEmail: { type: "string" }
@@ -161288,7 +161851,8 @@ function print() { __p += __j.call(arguments, '') }
161288
161851
  text: { type: "string" },
161289
161852
  isInternal: { type: "boolean" },
161290
161853
  status: { enum: ["open", "resolved"] },
161291
- target: textAddressSchema2,
161854
+ target: textTargetSchema2,
161855
+ anchoredText: { type: "string" },
161292
161856
  createdTime: { type: "number" },
161293
161857
  creatorName: { type: "string" },
161294
161858
  creatorEmail: { type: "string" }
@@ -161391,6 +161955,31 @@ function print() { __p += __j.call(arguments, '') }
161391
161955
  };
161392
161956
  })()
161393
161957
  }, ["target", "inline"]), textMutationResultSchemaFor2("format.apply"), textMutationFailureSchemaFor2("format.apply"), objectSchema2({
161958
+ target: textAddressSchema2,
161959
+ value: { oneOf: [
161960
+ {
161961
+ type: "string",
161962
+ minLength: 1
161963
+ },
161964
+ { type: "number" },
161965
+ { type: "null" }
161966
+ ] }
161967
+ }, ["target", "value"]), textMutationResultSchemaFor2("format.fontSize"), textMutationFailureSchemaFor2("format.fontSize"), objectSchema2({
161968
+ target: textAddressSchema2,
161969
+ value: { oneOf: [{
161970
+ type: "string",
161971
+ minLength: 1
161972
+ }, { type: "null" }] }
161973
+ }, ["target", "value"]), textMutationResultSchemaFor2("format.fontFamily"), textMutationFailureSchemaFor2("format.fontFamily"), objectSchema2({
161974
+ target: textAddressSchema2,
161975
+ value: { oneOf: [{
161976
+ type: "string",
161977
+ minLength: 1
161978
+ }, { type: "null" }] }
161979
+ }, ["target", "value"]), textMutationResultSchemaFor2("format.color"), textMutationFailureSchemaFor2("format.color"), objectSchema2({
161980
+ target: textAddressSchema2,
161981
+ alignment: { oneOf: [{ enum: [...ALIGNMENTS2] }, { type: "null" }] }
161982
+ }, ["target", "alignment"]), textMutationResultSchemaFor2("format.align"), textMutationFailureSchemaFor2("format.align"), objectSchema2({
161394
161983
  at: { oneOf: [
161395
161984
  objectSchema2({ kind: { const: "documentStart" } }, ["kind"]),
161396
161985
  objectSchema2({ kind: { const: "documentEnd" } }, ["kind"]),
@@ -161621,15 +162210,6 @@ function print() { __p += __j.call(arguments, '') }
161621
162210
  "DRY_RUN_UNAVAILABLE",
161622
162211
  "NAMESPACE_UNAVAILABLE"
161623
162212
  ];
161624
- DocumentApiValidationError2 = class DocumentApiValidationError3 extends Error {
161625
- constructor(code$1, message, details) {
161626
- super(message);
161627
- this.name = "DocumentApiValidationError";
161628
- this.code = code$1;
161629
- this.details = details;
161630
- Object.setPrototypeOf(this, DocumentApiValidationError3.prototype);
161631
- }
161632
- };
161633
162213
  CREATE_COMMENT_ALLOWED_KEYS2 = new Set([
161634
162214
  "target",
161635
162215
  "text",
@@ -161642,11 +162222,30 @@ function print() { __p += __j.call(arguments, '') }
161642
162222
  "status",
161643
162223
  "isInternal"
161644
162224
  ]);
161645
- STYLE_APPLY_INPUT_ALLOWED_KEYS2 = new Set(["target", "inline"]);
161646
162225
  DELETE_INPUT_ALLOWED_KEYS2 = new Set(["target"]);
161647
162226
  INSERT_INPUT_ALLOWED_KEYS2 = new Set(["text", "target"]);
161648
162227
  REPLACE_INPUT_ALLOWED_KEYS2 = new Set(["text", "target"]);
161649
162228
  REQUIRED_COMMANDS = {
162229
+ "format.fontSize": [
162230
+ "setTextSelection",
162231
+ "setFontSize",
162232
+ "unsetFontSize"
162233
+ ],
162234
+ "format.fontFamily": [
162235
+ "setTextSelection",
162236
+ "setFontFamily",
162237
+ "unsetFontFamily"
162238
+ ],
162239
+ "format.color": [
162240
+ "setTextSelection",
162241
+ "setColor",
162242
+ "unsetColor"
162243
+ ],
162244
+ "format.align": [
162245
+ "setTextSelection",
162246
+ "setTextAlign",
162247
+ "unsetTextAlign"
162248
+ ],
161650
162249
  "create.paragraph": ["insertParagraphAt"],
161651
162250
  "create.heading": ["insertHeadingAt"],
161652
162251
  "lists.insert": ["insertListItemAt"],
@@ -161681,6 +162280,11 @@ function print() { __p += __j.call(arguments, '') }
161681
162280
  underline: "underline",
161682
162281
  strike: "strike"
161683
162282
  };
162283
+ INLINE_FORMAT_OPERATIONS = new Set([
162284
+ "format.fontSize",
162285
+ "format.fontFamily",
162286
+ "format.color"
162287
+ ]);
161684
162288
  SUPPORTED_STEP_OPS = [
161685
162289
  "text.rewrite",
161686
162290
  "text.insert",
@@ -183817,8 +184421,8 @@ function print() { __p += __j.call(arguments, '') }
183817
184421
  return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
183818
184422
  };
183819
184423
  stubFalse_default = stubFalse;
183820
- freeExports$2 = typeof exports_src_eL3w4G7e_es == "object" && exports_src_eL3w4G7e_es && !exports_src_eL3w4G7e_es.nodeType && exports_src_eL3w4G7e_es;
183821
- freeModule$2 = freeExports$2 && typeof module_src_eL3w4G7e_es == "object" && module_src_eL3w4G7e_es && !module_src_eL3w4G7e_es.nodeType && module_src_eL3w4G7e_es;
184424
+ freeExports$2 = typeof exports_src_DVVC7vA7_es == "object" && exports_src_DVVC7vA7_es && !exports_src_DVVC7vA7_es.nodeType && exports_src_DVVC7vA7_es;
184425
+ freeModule$2 = freeExports$2 && typeof module_src_DVVC7vA7_es == "object" && module_src_DVVC7vA7_es && !module_src_DVVC7vA7_es.nodeType && module_src_DVVC7vA7_es;
183822
184426
  Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
183823
184427
  isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
183824
184428
  typedArrayTags = {};
@@ -183826,8 +184430,8 @@ function print() { __p += __j.call(arguments, '') }
183826
184430
  typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;
183827
184431
  _baseIsTypedArray_default = baseIsTypedArray;
183828
184432
  _baseUnary_default = baseUnary;
183829
- freeExports$1 = typeof exports_src_eL3w4G7e_es == "object" && exports_src_eL3w4G7e_es && !exports_src_eL3w4G7e_es.nodeType && exports_src_eL3w4G7e_es;
183830
- freeModule$1 = freeExports$1 && typeof module_src_eL3w4G7e_es == "object" && module_src_eL3w4G7e_es && !module_src_eL3w4G7e_es.nodeType && module_src_eL3w4G7e_es;
184433
+ freeExports$1 = typeof exports_src_DVVC7vA7_es == "object" && exports_src_DVVC7vA7_es && !exports_src_DVVC7vA7_es.nodeType && exports_src_DVVC7vA7_es;
184434
+ freeModule$1 = freeExports$1 && typeof module_src_DVVC7vA7_es == "object" && module_src_DVVC7vA7_es && !module_src_DVVC7vA7_es.nodeType && module_src_DVVC7vA7_es;
183831
184435
  freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
183832
184436
  _nodeUtil_default = function() {
183833
184437
  try {
@@ -183932,8 +184536,8 @@ function print() { __p += __j.call(arguments, '') }
183932
184536
  Stack.prototype.has = _stackHas_default;
183933
184537
  Stack.prototype.set = _stackSet_default;
183934
184538
  _Stack_default = Stack;
183935
- freeExports = typeof exports_src_eL3w4G7e_es == "object" && exports_src_eL3w4G7e_es && !exports_src_eL3w4G7e_es.nodeType && exports_src_eL3w4G7e_es;
183936
- freeModule = freeExports && typeof module_src_eL3w4G7e_es == "object" && module_src_eL3w4G7e_es && !module_src_eL3w4G7e_es.nodeType && module_src_eL3w4G7e_es;
184539
+ freeExports = typeof exports_src_DVVC7vA7_es == "object" && exports_src_DVVC7vA7_es && !exports_src_DVVC7vA7_es.nodeType && exports_src_DVVC7vA7_es;
184540
+ freeModule = freeExports && typeof module_src_DVVC7vA7_es == "object" && module_src_DVVC7vA7_es && !module_src_DVVC7vA7_es.nodeType && module_src_DVVC7vA7_es;
183937
184541
  Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
183938
184542
  allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
183939
184543
  _cloneBuffer_default = cloneBuffer;
@@ -191552,8 +192156,8 @@ var init_zipper_BJHqrQMq_es = __esm(() => {
191552
192156
 
191553
192157
  // ../../packages/superdoc/dist/super-editor.es.js
191554
192158
  var init_super_editor_es = __esm(() => {
191555
- init_src_eL3w4G7e_es();
191556
- init_SuperConverter_Cf1y7bFA_es();
192159
+ init_src_DVVC7vA7_es();
192160
+ init_SuperConverter_BxBclpFg_es();
191557
192161
  init_jszip_ChlR43oI_es();
191558
192162
  init_xml_js_DLE8mr0n_es();
191559
192163
  init_constants_DBKi0Amm_es();
@@ -191563,6 +192167,12 @@ var init_super_editor_es = __esm(() => {
191563
192167
  init_zipper_BJHqrQMq_es();
191564
192168
  });
191565
192169
 
192170
+ // ../../packages/super-editor/src/core/blank-docx.ts
192171
+ var BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI2;
192172
+ var init_blank_docx = __esm(() => {
192173
+ BLANK_DOCX_DATA_URI2 = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,${BLANK_DOCX_BASE64}`;
192174
+ });
192175
+
191566
192176
  // ../../packages/super-editor/src/extensions/track-changes/constants.js
191567
192177
  var TrackInsertMarkName2 = "trackInsert", TrackDeleteMarkName2 = "trackDelete", TrackFormatMarkName2 = "trackFormat";
191568
192178
 
@@ -191617,10 +192227,13 @@ function isOperationAvailable2(editor, operationId) {
191617
192227
  if (operationId === "format.apply") {
191618
192228
  return MARK_KEYS.some((key2) => hasMarkCapability2(editor, STYLE_MARK_SCHEMA_NAMES2[key2] ?? key2));
191619
192229
  }
192230
+ if (INLINE_FORMAT_OPERATIONS2.has(operationId)) {
192231
+ return hasAllCommands2(editor, operationId) && hasMarkCapability2(editor, "textStyle");
192232
+ }
191620
192233
  return hasAllCommands2(editor, operationId);
191621
192234
  }
191622
192235
  function isCommandBackedAvailability2(operationId) {
191623
- return !isMarkBackedOperation2(operationId);
192236
+ return !isMarkBackedOperation2(operationId) && !INLINE_FORMAT_OPERATIONS2.has(operationId);
191624
192237
  }
191625
192238
  function buildOperationCapabilities2(editor) {
191626
192239
  const operations = {};
@@ -191695,10 +192308,14 @@ function getDocumentApiCapabilities2(editor) {
191695
192308
  planEngine: buildPlanEngineCapabilities2()
191696
192309
  };
191697
192310
  }
191698
- var REQUIRED_COMMANDS2, VALID_CAPABILITY_REASON_CODES2, STYLE_MARK_SCHEMA_NAMES2, SUPPORTED_STEP_OPS2, SUPPORTED_NON_UNIFORM_STRATEGIES2, SUPPORTED_SET_MARKS2, REGEX_MAX_PATTERN_LENGTH2 = 1024;
192311
+ var REQUIRED_COMMANDS2, VALID_CAPABILITY_REASON_CODES2, STYLE_MARK_SCHEMA_NAMES2, INLINE_FORMAT_OPERATIONS2, SUPPORTED_STEP_OPS2, SUPPORTED_NON_UNIFORM_STRATEGIES2, SUPPORTED_SET_MARKS2, REGEX_MAX_PATTERN_LENGTH2 = 1024;
191699
192312
  var init_capabilities_adapter = __esm(() => {
191700
192313
  init_src();
191701
192314
  REQUIRED_COMMANDS2 = {
192315
+ "format.fontSize": ["setTextSelection", "setFontSize", "unsetFontSize"],
192316
+ "format.fontFamily": ["setTextSelection", "setFontFamily", "unsetFontFamily"],
192317
+ "format.color": ["setTextSelection", "setColor", "unsetColor"],
192318
+ "format.align": ["setTextSelection", "setTextAlign", "unsetTextAlign"],
191702
192319
  "create.paragraph": ["insertParagraphAt"],
191703
192320
  "create.heading": ["insertHeadingAt"],
191704
192321
  "lists.insert": ["insertListItemAt"],
@@ -191724,6 +192341,7 @@ var init_capabilities_adapter = __esm(() => {
191724
192341
  underline: "underline",
191725
192342
  strike: "strike"
191726
192343
  };
192344
+ INLINE_FORMAT_OPERATIONS2 = new Set(["format.fontSize", "format.fontFamily", "format.color"]);
191727
192345
  SUPPORTED_STEP_OPS2 = [
191728
192346
  "text.rewrite",
191729
192347
  "text.insert",
@@ -197141,28 +197759,51 @@ var init_executor_registry = __esm(() => {
197141
197759
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/style-resolver.ts
197142
197760
  function captureRunsInRange2(editor, blockPos, from3, to) {
197143
197761
  const doc4 = editor.state.doc;
197144
- const contentStart = blockPos + 1;
197145
- const absFrom = contentStart + from3;
197146
- const absTo = contentStart + to;
197762
+ const blockNode = doc4.nodeAt(blockPos);
197763
+ if (!blockNode || from3 < 0 || to < from3 || from3 === to) {
197764
+ return { runs: [], isUniform: true };
197765
+ }
197147
197766
  const runs2 = [];
197148
- doc4.nodesBetween(absFrom, absTo, (node3, pos) => {
197149
- if (!node3.isText)
197150
- return true;
197151
- const nodeStart = Math.max(pos, absFrom);
197152
- const nodeEnd = Math.min(pos + node3.nodeSize, absTo);
197153
- if (nodeStart >= nodeEnd)
197154
- return true;
197155
- const relFrom = nodeStart - contentStart;
197156
- const relTo = nodeEnd - contentStart;
197157
- const formattingMarks = node3.marks.filter((m3) => !METADATA_MARK_NAMES2.has(m3.type.name));
197767
+ let offset2 = 0;
197768
+ const maybePushRun = (start2, end, marks) => {
197769
+ const overlapStart = Math.max(start2, from3);
197770
+ const overlapEnd = Math.min(end, to);
197771
+ if (overlapStart >= overlapEnd)
197772
+ return;
197158
197773
  runs2.push({
197159
- from: relFrom,
197160
- to: relTo,
197161
- charCount: relTo - relFrom,
197162
- marks: formattingMarks
197774
+ from: overlapStart,
197775
+ to: overlapEnd,
197776
+ charCount: overlapEnd - overlapStart,
197777
+ marks: marks.filter((m3) => !METADATA_MARK_NAMES2.has(m3.type.name))
197163
197778
  });
197164
- return true;
197165
- });
197779
+ };
197780
+ const walkNode3 = (node3) => {
197781
+ if (node3.isText) {
197782
+ const text4 = node3.text ?? "";
197783
+ if (text4.length > 0) {
197784
+ const start2 = offset2;
197785
+ const end = offset2 + text4.length;
197786
+ const marks = Array.isArray(node3.marks) ? node3.marks : [];
197787
+ maybePushRun(start2, end, marks);
197788
+ offset2 = end;
197789
+ }
197790
+ return;
197791
+ }
197792
+ if (node3.isLeaf) {
197793
+ offset2 += 1;
197794
+ return;
197795
+ }
197796
+ let isFirstChild = true;
197797
+ for (let i4 = 0;i4 < node3.childCount; i4++) {
197798
+ const child = node3.child(i4);
197799
+ if (child.isBlock && !isFirstChild) {
197800
+ offset2 += 1;
197801
+ }
197802
+ walkNode3(child);
197803
+ isFirstChild = false;
197804
+ }
197805
+ };
197806
+ walkNode3(blockNode);
197166
197807
  const isUniform = checkUniformity2(runs2);
197167
197808
  return { runs: runs2, isUniform };
197168
197809
  }
@@ -197669,10 +198310,7 @@ function isRefWhere2(where) {
197669
198310
  return where.by === "ref";
197670
198311
  }
197671
198312
  function isV3Ref2(payload) {
197672
- return "v" in payload && payload.v === 3;
197673
- }
197674
- function isV2Ref2(payload) {
197675
- return "v" in payload && payload.v === 2;
198313
+ return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
197676
198314
  }
197677
198315
  function resolveAbsoluteRange2(editor, candidate, from3, to, stepId) {
197678
198316
  const resolved = resolveTextRangeInBlock2(candidate.node, candidate.pos, { start: from3, end: to });
@@ -197895,58 +198533,6 @@ function decodeTextRefPayload2(encoded, stepId) {
197895
198533
  throw planError2("INVALID_INPUT", "invalid text ref encoding", stepId);
197896
198534
  }
197897
198535
  }
197898
- function resolveV1TextRef2(editor, index2, step, refData) {
197899
- const currentRevision = getRevision2(editor);
197900
- if (refData.rev !== currentRevision) {
197901
- throw planError2("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, { refRevision: refData.rev, currentRevision });
197902
- }
197903
- if (!refData.ranges?.length)
197904
- return [];
197905
- const coalesced = normalizeMatchRanges2(step.id, refData.ranges);
197906
- const candidate = index2.candidates.find((c2) => c2.nodeId === coalesced.blockId);
197907
- if (!candidate)
197908
- return [];
197909
- const blockText = getBlockText2(editor, candidate);
197910
- const matchText = blockText.slice(coalesced.from, coalesced.to);
197911
- const addr = {
197912
- blockId: coalesced.blockId,
197913
- from: coalesced.from,
197914
- to: coalesced.to,
197915
- text: matchText,
197916
- marks: [],
197917
- blockPos: candidate.pos
197918
- };
197919
- return [buildRangeTarget2(editor, step, addr, candidate)];
197920
- }
197921
- function resolveV2TextRef2(editor, index2, step, refData) {
197922
- const currentRevision = getRevision2(editor);
197923
- if (refData.rev !== currentRevision) {
197924
- throw planError2("REVISION_MISMATCH", `text ref was created at revision "${refData.rev}" but document is at "${currentRevision}"`, step.id, { refRevision: refData.rev, currentRevision });
197925
- }
197926
- if (!refData.segments?.length)
197927
- return [];
197928
- const segments = refData.segments.map((s2) => ({ blockId: s2.blockId, from: s2.start, to: s2.end }));
197929
- if (segments.length === 1) {
197930
- const seg = segments[0];
197931
- const candidate = index2.candidates.find((c2) => c2.nodeId === seg.blockId);
197932
- if (!candidate)
197933
- return [];
197934
- const blockText = getBlockText2(editor, candidate);
197935
- const matchText = blockText.slice(seg.from, seg.to);
197936
- const addr = {
197937
- blockId: seg.blockId,
197938
- from: seg.from,
197939
- to: seg.to,
197940
- text: matchText,
197941
- marks: [],
197942
- blockPos: candidate.pos
197943
- };
197944
- const target = buildRangeTarget2(editor, step, addr, candidate);
197945
- target.matchId = refData.matchId;
197946
- return [target];
197947
- }
197948
- return [buildSpanTarget2(editor, index2, step, segments, refData.matchId)];
197949
- }
197950
198536
  function resolveV3TextRef2(editor, index2, step, refData) {
197951
198537
  const currentRevision = getRevision2(editor);
197952
198538
  if (refData.rev !== currentRevision) {
@@ -197979,13 +198565,10 @@ function resolveV3TextRef2(editor, index2, step, refData) {
197979
198565
  function resolveTextRef2(editor, index2, step, ref3) {
197980
198566
  const encoded = ref3.slice(5);
197981
198567
  const payload = decodeTextRefPayload2(encoded, step.id);
197982
- if (isV3Ref2(payload)) {
197983
- return resolveV3TextRef2(editor, index2, step, payload);
198568
+ if (!isV3Ref2(payload)) {
198569
+ throw planError2("INVALID_INPUT", "only V3 text refs are supported", step.id);
197984
198570
  }
197985
- if (isV2Ref2(payload)) {
197986
- return resolveV2TextRef2(editor, index2, step, payload);
197987
- }
197988
- return resolveV1TextRef2(editor, index2, step, payload);
198571
+ return resolveV3TextRef2(editor, index2, step, payload);
197989
198572
  }
197990
198573
  function resolveBlockRef2(editor, index2, step, ref3) {
197991
198574
  const candidate = index2.candidates.find((c2) => c2.nodeId === ref3);
@@ -198011,9 +198594,6 @@ function dispatchRefHandler2(editor, index2, step, ref3) {
198011
198594
  return resolveBlockRef2(editor, index2, step, ref3);
198012
198595
  }
198013
198596
  function resolveRefTargets2(editor, index2, step, where) {
198014
- if (where.require !== undefined && where.require !== "exactlyOne") {
198015
- throw planError2("INVALID_INPUT", `ref-based targeting only accepts require: 'exactlyOne' (received '${where.require}')`, step.id);
198016
- }
198017
198597
  return dispatchRefHandler2(editor, index2, step, where.ref);
198018
198598
  }
198019
198599
  function resolveStepTargets2(editor, index2, step) {
@@ -199223,6 +199803,7 @@ function toCommentInfo2(entry, options = {}) {
199223
199803
  isInternal: typeof entry.isInternal === "boolean" ? entry.isInternal : undefined,
199224
199804
  status,
199225
199805
  target: options.target,
199806
+ anchoredText: options.anchoredText,
199226
199807
  createdTime: typeof entry.createdTime === "number" ? entry.createdTime : undefined,
199227
199808
  creatorName: typeof entry.creatorName === "string" ? entry.creatorName : undefined,
199228
199809
  creatorEmail: typeof entry.creatorEmail === "string" ? entry.creatorEmail : undefined
@@ -199359,7 +199940,64 @@ function resolveCommentIdentity2(editor, commentId) {
199359
199940
  anchors
199360
199941
  };
199361
199942
  }
199362
- function mergeAnchorData2(infosById, anchors) {
199943
+ function canonicalizeAnchors2(sorted) {
199944
+ if (sorted.length === 0)
199945
+ return [];
199946
+ const result = [];
199947
+ let current = {
199948
+ blockId: sorted[0].target.blockId,
199949
+ range: { start: sorted[0].target.range.start, end: sorted[0].target.range.end },
199950
+ pos: sorted[0].pos,
199951
+ end: sorted[0].end
199952
+ };
199953
+ for (let i4 = 1;i4 < sorted.length; i4++) {
199954
+ const anchor = sorted[i4];
199955
+ const sameBlock = anchor.target.blockId === current.blockId;
199956
+ const overlapsOrAdjacent = anchor.target.range.start <= current.range.end;
199957
+ if (sameBlock && overlapsOrAdjacent) {
199958
+ current.range.end = Math.max(current.range.end, anchor.target.range.end);
199959
+ current.end = Math.max(current.end, anchor.end);
199960
+ } else {
199961
+ result.push(current);
199962
+ current = {
199963
+ blockId: anchor.target.blockId,
199964
+ range: { start: anchor.target.range.start, end: anchor.target.range.end },
199965
+ pos: anchor.pos,
199966
+ end: anchor.end
199967
+ };
199968
+ }
199969
+ }
199970
+ result.push(current);
199971
+ return result;
199972
+ }
199973
+ function extractSegmentText2(editor, pos, end) {
199974
+ try {
199975
+ const raw = editor.state.doc.textBetween(pos, end, " ", "");
199976
+ const cleaned = raw.replace(/\ufffc/g, "").trim();
199977
+ return cleaned.length > 0 ? cleaned : undefined;
199978
+ } catch {
199979
+ return;
199980
+ }
199981
+ }
199982
+ function buildAnchoredText2(editor, canonical) {
199983
+ const parts = [];
199984
+ for (const anchor of canonical) {
199985
+ const text4 = extractSegmentText2(editor, anchor.pos, anchor.end);
199986
+ if (text4)
199987
+ parts.push(text4);
199988
+ }
199989
+ return parts.length > 0 ? normalizeExcerpt2(parts.join(" ")) : undefined;
199990
+ }
199991
+ function buildTextTarget2(canonical) {
199992
+ if (canonical.length === 0)
199993
+ return;
199994
+ const segments = canonical.map((a2) => ({
199995
+ blockId: a2.blockId,
199996
+ range: { start: a2.range.start, end: a2.range.end }
199997
+ }));
199998
+ return { kind: "text", segments };
199999
+ }
200000
+ function mergeAnchorData2(editor, infosById, anchors) {
199363
200001
  const grouped = new Map;
199364
200002
  for (const anchor of anchors) {
199365
200003
  const group = grouped.get(anchor.commentId) ?? [];
@@ -199368,28 +200006,34 @@ function mergeAnchorData2(infosById, anchors) {
199368
200006
  }
199369
200007
  for (const [commentId, commentAnchors] of grouped.entries()) {
199370
200008
  const sorted = [...commentAnchors].sort((a2, b3) => a2.pos === b3.pos ? a2.end - b3.end : a2.pos - b3.pos);
199371
- const primary = sorted[0];
200009
+ const firstAnchor = sorted[0];
199372
200010
  const status = sorted.every((anchor) => anchor.status === "resolved") ? "resolved" : "open";
200011
+ const canonical = canonicalizeAnchors2(sorted);
200012
+ const target = buildTextTarget2(canonical);
200013
+ const anchoredText = buildAnchoredText2(editor, canonical);
199373
200014
  const existing = infosById.get(commentId);
199374
200015
  if (existing) {
199375
- if (!existing.target)
199376
- existing.target = primary.target;
199377
- if (!existing.importedId && primary.importedId)
199378
- existing.importedId = primary.importedId;
199379
- if (existing.isInternal == null && primary.isInternal != null)
199380
- existing.isInternal = primary.isInternal;
200016
+ if (!existing.target && target)
200017
+ existing.target = target;
200018
+ if (!existing.importedId && firstAnchor.importedId)
200019
+ existing.importedId = firstAnchor.importedId;
200020
+ if (existing.isInternal == null && firstAnchor.isInternal != null)
200021
+ existing.isInternal = firstAnchor.isInternal;
199381
200022
  if (status === "open")
199382
200023
  existing.status = "open";
200024
+ if (existing.anchoredText == null && anchoredText != null)
200025
+ existing.anchoredText = anchoredText;
199383
200026
  continue;
199384
200027
  }
199385
200028
  infosById.set(commentId, toCommentInfo2({
199386
200029
  commentId,
199387
- importedId: primary.importedId,
199388
- isInternal: primary.isInternal,
200030
+ importedId: firstAnchor.importedId,
200031
+ isInternal: firstAnchor.isInternal,
199389
200032
  isDone: status === "resolved"
199390
200033
  }, {
199391
- target: primary.target,
199392
- status
200034
+ target,
200035
+ status,
200036
+ anchoredText
199393
200037
  }));
199394
200038
  }
199395
200039
  }
@@ -199402,15 +200046,33 @@ function buildCommentInfos2(editor) {
199402
200046
  continue;
199403
200047
  infosById.set(commentId, toCommentInfo2({ ...entry, commentId }));
199404
200048
  }
199405
- mergeAnchorData2(infosById, listCommentAnchorsSafe2(editor));
200049
+ mergeAnchorData2(editor, infosById, listCommentAnchorsSafe2(editor));
200050
+ for (const info of infosById.values()) {
200051
+ if (info.target != null && info.anchoredText != null || !info.parentCommentId)
200052
+ continue;
200053
+ const visited = new Set;
200054
+ let cursor = info;
200055
+ while (cursor?.parentCommentId && !visited.has(cursor.parentCommentId)) {
200056
+ visited.add(cursor.parentCommentId);
200057
+ const ancestor = infosById.get(cursor.parentCommentId);
200058
+ if (ancestor?.target != null) {
200059
+ if (info.target == null)
200060
+ info.target = ancestor.target;
200061
+ if (info.anchoredText == null && ancestor.anchoredText != null)
200062
+ info.anchoredText = ancestor.anchoredText;
200063
+ break;
200064
+ }
200065
+ cursor = ancestor;
200066
+ }
200067
+ }
199406
200068
  const infos = Array.from(infosById.values());
199407
200069
  infos.sort((left2, right2) => {
199408
200070
  const leftCreated = left2.createdTime ?? 0;
199409
200071
  const rightCreated = right2.createdTime ?? 0;
199410
200072
  if (leftCreated !== rightCreated)
199411
200073
  return leftCreated - rightCreated;
199412
- const leftStart = left2.target?.range.start ?? Number.MAX_SAFE_INTEGER;
199413
- const rightStart = right2.target?.range.start ?? Number.MAX_SAFE_INTEGER;
200074
+ const leftStart = left2.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
200075
+ const rightStart = right2.target?.segments[0]?.range.start ?? Number.MAX_SAFE_INTEGER;
199414
200076
  if (leftStart !== rightStart)
199415
200077
  return leftStart - rightStart;
199416
200078
  return left2.commentId.localeCompare(right2.commentId);
@@ -199418,7 +200080,7 @@ function buildCommentInfos2(editor) {
199418
200080
  return infos;
199419
200081
  }
199420
200082
  function addCommentHandler2(editor, input2, options) {
199421
- requireEditorCommand2(editor.commands?.addComment, "comments.add (addComment)");
200083
+ requireEditorCommand2(editor.commands?.addComment, "comments.create (addComment)");
199422
200084
  if (input2.target.range.start === input2.target.range.end) {
199423
200085
  return {
199424
200086
  success: false,
@@ -199455,7 +200117,7 @@ function addCommentHandler2(editor, input2, options) {
199455
200117
  }
199456
200118
  const commentId = v42();
199457
200119
  const receipt2 = executeDomainCommand2(editor, () => {
199458
- const addComment = requireEditorCommand2(editor.commands?.addComment, "comments.add (addComment)");
200120
+ const addComment = requireEditorCommand2(editor.commands?.addComment, "comments.create (addComment)");
199459
200121
  const didInsert = addComment({ content: input2.text, isInternal: false, commentId }) === true;
199460
200122
  if (didInsert) {
199461
200123
  clearIndexCache2(editor);
@@ -199488,7 +200150,7 @@ function addCommentHandler2(editor, input2, options) {
199488
200150
  return { success: true, inserted: [toCommentAddress2(commentId)] };
199489
200151
  }
199490
200152
  function editCommentHandler2(editor, input2, options) {
199491
- const editComment = requireEditorCommand2(editor.commands?.editComment, "comments.edit (editComment)");
200153
+ const editComment = requireEditorCommand2(editor.commands?.editComment, "comments.patch (editComment)");
199492
200154
  const store = getCommentEntityStore2(editor);
199493
200155
  const identity2 = resolveCommentIdentity2(editor, input2.commentId);
199494
200156
  const existing = findCommentEntity2(store, identity2.commentId);
@@ -199523,7 +200185,7 @@ function editCommentHandler2(editor, input2, options) {
199523
200185
  return { success: true, updated: [toCommentAddress2(identity2.commentId)] };
199524
200186
  }
199525
200187
  function replyToCommentHandler2(editor, input2, options) {
199526
- const addCommentReply = requireEditorCommand2(editor.commands?.addCommentReply, "comments.reply (addCommentReply)");
200188
+ const addCommentReply = requireEditorCommand2(editor.commands?.addCommentReply, "comments.create (addCommentReply)");
199527
200189
  if (!input2.parentCommentId) {
199528
200190
  return {
199529
200191
  success: false,
@@ -199571,7 +200233,7 @@ function replyToCommentHandler2(editor, input2, options) {
199571
200233
  return { success: true, inserted: [toCommentAddress2(replyId)] };
199572
200234
  }
199573
200235
  function moveCommentHandler2(editor, input2, options) {
199574
- const moveComment = requireEditorCommand2(editor.commands?.moveComment, "comments.move (moveComment)");
200236
+ const moveComment = requireEditorCommand2(editor.commands?.moveComment, "comments.patch (moveComment)");
199575
200237
  if (input2.target.range.start === input2.target.range.end) {
199576
200238
  return {
199577
200239
  success: false,
@@ -199621,7 +200283,7 @@ function moveCommentHandler2(editor, input2, options) {
199621
200283
  return { success: true, updated: [toCommentAddress2(identity2.commentId)] };
199622
200284
  }
199623
200285
  function resolveCommentHandler2(editor, input2, options) {
199624
- const resolveComment = requireEditorCommand2(editor.commands?.resolveComment, "comments.resolve (resolveComment)");
200286
+ const resolveComment = requireEditorCommand2(editor.commands?.resolveComment, "comments.patch (resolveComment)");
199625
200287
  const store = getCommentEntityStore2(editor);
199626
200288
  const identity2 = resolveCommentIdentity2(editor, input2.commentId);
199627
200289
  const existing = findCommentEntity2(store, identity2.commentId);
@@ -199788,6 +200450,7 @@ function listCommentsHandler2(editor, query2) {
199788
200450
  isInternal,
199789
200451
  status,
199790
200452
  target,
200453
+ anchoredText,
199791
200454
  createdTime,
199792
200455
  creatorName,
199793
200456
  creatorEmail,
@@ -199801,6 +200464,7 @@ function listCommentsHandler2(editor, query2) {
199801
200464
  isInternal,
199802
200465
  status,
199803
200466
  target,
200467
+ anchoredText,
199804
200468
  createdTime,
199805
200469
  creatorName,
199806
200470
  creatorEmail
@@ -200821,6 +201485,106 @@ var init_find_adapter = __esm(() => {
200821
201485
  init_revision_tracker();
200822
201486
  });
200823
201487
 
201488
+ // ../../packages/super-editor/src/document-api-adapters/plan-engine/format-value-wrappers.ts
201489
+ function resolveFormatTarget2(editor, target, operation) {
201490
+ const range = resolveTextTarget2(editor, target);
201491
+ if (!range) {
201492
+ throw new DocumentApiAdapterError3("TARGET_NOT_FOUND", `${operation} target could not be resolved.`, { target });
201493
+ }
201494
+ const text4 = readTextAtResolvedRange2(editor, range);
201495
+ const resolution = buildTextMutationResolution2({ requestedTarget: target, target, range, text: text4 });
201496
+ return { target, from: range.from, to: range.to, resolution };
201497
+ }
201498
+ function collapsedTargetFailure2(resolution, operation) {
201499
+ return {
201500
+ success: false,
201501
+ resolution,
201502
+ failure: { code: "INVALID_TARGET", message: `${operation} requires a non-collapsed target range.` }
201503
+ };
201504
+ }
201505
+ function noOpFailure2(resolution, operation) {
201506
+ return {
201507
+ success: false,
201508
+ resolution,
201509
+ failure: { code: "NO_OP", message: `${operation} produced no change.` }
201510
+ };
201511
+ }
201512
+ function inlineValueFormatWrapper2(editor, target, value, options, config2) {
201513
+ rejectTrackedMode2(config2.operation, options);
201514
+ const resolved = resolveFormatTarget2(editor, target, config2.operation);
201515
+ if (resolved.from === resolved.to) {
201516
+ return collapsedTargetFailure2(resolved.resolution, config2.operation);
201517
+ }
201518
+ requireSchemaMark2(editor, "textStyle", config2.operation);
201519
+ const setTextSelection2 = requireEditorCommand2(editor.commands?.setTextSelection, `${config2.operation} (setTextSelection)`);
201520
+ const activeCommand = value !== null ? config2.setCommand : config2.unsetCommand;
201521
+ requireEditorCommand2(editor.commands?.[activeCommand], `${config2.operation} (${activeCommand})`);
201522
+ if (options?.dryRun) {
201523
+ return { success: true, resolution: resolved.resolution };
201524
+ }
201525
+ const receipt2 = executeDomainCommand2(editor, () => {
201526
+ setTextSelection2({ from: resolved.from, to: resolved.to });
201527
+ const cmd = editor.commands[activeCommand];
201528
+ return value !== null ? cmd(value) : cmd();
201529
+ }, { expectedRevision: options?.expectedRevision });
201530
+ if (receipt2.steps[0]?.effect !== "changed") {
201531
+ return noOpFailure2(resolved.resolution, config2.operation);
201532
+ }
201533
+ return { success: true, resolution: resolved.resolution };
201534
+ }
201535
+ function formatFontSizeWrapper2(editor, input2, options) {
201536
+ return inlineValueFormatWrapper2(editor, input2.target, input2.value, options, {
201537
+ operation: "format.fontSize",
201538
+ setCommand: "setFontSize",
201539
+ unsetCommand: "unsetFontSize"
201540
+ });
201541
+ }
201542
+ function formatFontFamilyWrapper2(editor, input2, options) {
201543
+ return inlineValueFormatWrapper2(editor, input2.target, input2.value, options, {
201544
+ operation: "format.fontFamily",
201545
+ setCommand: "setFontFamily",
201546
+ unsetCommand: "unsetFontFamily"
201547
+ });
201548
+ }
201549
+ function formatColorWrapper2(editor, input2, options) {
201550
+ return inlineValueFormatWrapper2(editor, input2.target, input2.value, options, {
201551
+ operation: "format.color",
201552
+ setCommand: "setColor",
201553
+ unsetCommand: "unsetColor"
201554
+ });
201555
+ }
201556
+ function formatAlignWrapper2(editor, input2, options) {
201557
+ const operation = "format.align";
201558
+ rejectTrackedMode2(operation, options);
201559
+ const resolved = resolveFormatTarget2(editor, input2.target, operation);
201560
+ const setTextSelection2 = requireEditorCommand2(editor.commands?.setTextSelection, `${operation} (setTextSelection)`);
201561
+ if (input2.alignment !== null) {
201562
+ requireEditorCommand2(editor.commands?.setTextAlign, `${operation} (setTextAlign)`);
201563
+ } else {
201564
+ requireEditorCommand2(editor.commands?.unsetTextAlign, `${operation} (unsetTextAlign)`);
201565
+ }
201566
+ if (options?.dryRun) {
201567
+ return { success: true, resolution: resolved.resolution };
201568
+ }
201569
+ const receipt2 = executeDomainCommand2(editor, () => {
201570
+ setTextSelection2({ from: resolved.from, to: resolved.to });
201571
+ if (input2.alignment !== null) {
201572
+ return editor.commands.setTextAlign(input2.alignment);
201573
+ }
201574
+ return editor.commands.unsetTextAlign();
201575
+ }, { expectedRevision: options?.expectedRevision });
201576
+ if (receipt2.steps[0]?.effect !== "changed") {
201577
+ return noOpFailure2(resolved.resolution, operation);
201578
+ }
201579
+ return { success: true, resolution: resolved.resolution };
201580
+ }
201581
+ var init_format_value_wrappers = __esm(() => {
201582
+ init_errors3();
201583
+ init_adapter_utils();
201584
+ init_mutation_helpers();
201585
+ init_plan_wrappers();
201586
+ });
201587
+
200824
201588
  // ../../packages/super-editor/src/document-api-adapters/get-node-adapter.ts
200825
201589
  function findBlocksByTypeAndId2(blockIndex, nodeType, nodeId) {
200826
201590
  const byIdMatch = blockIndex.byId.get(`${nodeType}:${nodeId}`);
@@ -209685,7 +210449,7 @@ var translator54;
209685
210449
  var init_jc_translator = __esm(() => {
209686
210450
  init_utils();
209687
210451
  init_node_translator2();
209688
- translator54 = NodeTranslator3.from(createSingleAttrPropertyHandler2("w:jc", "justification"));
210452
+ translator54 = NodeTranslator3.from(createSingleAttrPropertyHandler2("w:jc", "justification", "w:val", (v2) => v2 === "both" ? "justify" : v2, (v2) => v2 === "justify" ? "both" : v2));
209689
210453
  });
209690
210454
 
209691
210455
  // ../../packages/super-editor/src/core/super-converter/v3/handlers/w/jc/index.js
@@ -235373,7 +236137,11 @@ function getDocumentApiAdapters2(editor) {
235373
236137
  write: (request, options) => writeWrapper2(editor, request, options)
235374
236138
  },
235375
236139
  format: {
235376
- apply: (input2, options) => styleApplyWrapper2(editor, input2, options)
236140
+ apply: (input2, options) => styleApplyWrapper2(editor, input2, options),
236141
+ fontSize: (input2, options) => formatFontSizeWrapper2(editor, input2, options),
236142
+ fontFamily: (input2, options) => formatFontFamilyWrapper2(editor, input2, options),
236143
+ color: (input2, options) => formatColorWrapper2(editor, input2, options),
236144
+ align: (input2, options) => formatAlignWrapper2(editor, input2, options)
235377
236145
  },
235378
236146
  trackChanges: {
235379
236147
  list: (query2) => trackChangesListWrapper2(editor, query2),
@@ -235412,6 +236180,7 @@ var init_document_api_adapters = __esm(() => {
235412
236180
  init_create_wrappers();
235413
236181
  init_find_adapter();
235414
236182
  init_plan_wrappers();
236183
+ init_format_value_wrappers();
235415
236184
  init_get_node_adapter();
235416
236185
  init_info_adapter();
235417
236186
  init_lists_wrappers();
@@ -238149,12 +238918,21 @@ async function readDocumentSource(doc4, io) {
238149
238918
  };
238150
238919
  }
238151
238920
  async function openDocument(doc4, io, options = {}) {
238152
- const { bytes, meta: meta2 } = await readDocumentSource(doc4, io);
238921
+ let source;
238922
+ let meta2;
238923
+ if (doc4 != null) {
238924
+ const result = await readDocumentSource(doc4, io);
238925
+ source = result.bytes;
238926
+ meta2 = result.meta;
238927
+ } else {
238928
+ source = Buffer.from(BLANK_DOCX_BASE64, "base64");
238929
+ meta2 = { source: "blank", byteLength: source.byteLength };
238930
+ }
238153
238931
  let editor;
238154
238932
  try {
238155
238933
  const isTest = false;
238156
- editor = await Editor.open(Buffer.from(bytes), {
238157
- documentId: options.documentId ?? meta2.path ?? "stdin.docx",
238934
+ editor = await Editor.open(Buffer.from(source), {
238935
+ documentId: options.documentId ?? meta2.path ?? "blank.docx",
238158
238936
  user: { id: "cli", name: "CLI" },
238159
238937
  ...isTest ? { telemetry: { enabled: false } } : {},
238160
238938
  ydoc: options.ydoc,
@@ -238273,6 +239051,7 @@ async function exportToPath(editor, outputPath, force = false) {
238273
239051
  }
238274
239052
  var init_document = __esm(() => {
238275
239053
  init_super_editor_es();
239054
+ init_blank_docx();
238276
239055
  init_document_api_adapters();
238277
239056
  init_src();
238278
239057
  init_collaboration();
@@ -239310,6 +240089,10 @@ var init_special_handlers = __esm(() => {
239310
240089
  replace: flattenTextMutationReceipt,
239311
240090
  delete: flattenTextMutationReceipt,
239312
240091
  "format.apply": flattenTextMutationReceipt,
240092
+ "format.fontSize": flattenTextMutationReceipt,
240093
+ "format.fontFamily": flattenTextMutationReceipt,
240094
+ "format.color": flattenTextMutationReceipt,
240095
+ "format.align": flattenTextMutationReceipt,
239313
240096
  getNodeById: (result, context) => {
239314
240097
  const record = asRecord4(result);
239315
240098
  const inputRecord = asRecord4(context.apiInput);
@@ -239414,6 +240197,10 @@ var init_invoke_input = __esm(() => {
239414
240197
  "replace",
239415
240198
  "delete",
239416
240199
  "format.apply",
240200
+ "format.fontSize",
240201
+ "format.fontFamily",
240202
+ "format.color",
240203
+ "format.align",
239417
240204
  "comments.create",
239418
240205
  "comments.patch"
239419
240206
  ]);
@@ -240554,6 +241341,10 @@ var init_operation_params = __esm(() => {
240554
241341
  "doc.replace": [...TEXT_TARGET_FLAT_PARAMS],
240555
241342
  "doc.delete": [...TEXT_TARGET_FLAT_PARAMS],
240556
241343
  "doc.format.apply": [...TEXT_TARGET_FLAT_PARAMS],
241344
+ "doc.format.fontSize": [...TEXT_TARGET_FLAT_PARAMS],
241345
+ "doc.format.fontFamily": [...TEXT_TARGET_FLAT_PARAMS],
241346
+ "doc.format.color": [...TEXT_TARGET_FLAT_PARAMS],
241347
+ "doc.format.align": [...TEXT_TARGET_FLAT_PARAMS],
240557
241348
  "doc.comments.create": [...TEXT_TARGET_FLAT_PARAMS],
240558
241349
  "doc.comments.patch": [...TEXT_TARGET_FLAT_PARAMS],
240559
241350
  "doc.lists.insert": [
@@ -240584,9 +241375,9 @@ var init_operation_params = __esm(() => {
240584
241375
  "doc.open": {
240585
241376
  command: "open",
240586
241377
  positionalParams: ["doc"],
240587
- docRequirement: "required",
241378
+ docRequirement: "none",
240588
241379
  params: [
240589
- { name: "doc", kind: "doc", type: "string", required: true },
241380
+ { name: "doc", kind: "doc", type: "string" },
240590
241381
  SESSION_PARAM,
240591
241382
  { name: "collaboration", kind: "jsonFlag", flag: "collaboration-json", type: "json" },
240592
241383
  { name: "collabDocumentId", kind: "flag", flag: "collab-document-id", type: "string" },
@@ -241868,20 +242659,20 @@ async function runOpen(tokens, context) {
241868
242659
  command: "open",
241869
242660
  data: {
241870
242661
  usage: [
241871
- "superdoc open <doc> [--session <id>]",
241872
- 'superdoc open <doc> --collaboration-json "{...}" [--session <id>]'
242662
+ "superdoc open [doc] [--session <id>]",
242663
+ 'superdoc open [doc] --collaboration-json "{...}" [--session <id>]'
241873
242664
  ]
241874
242665
  },
241875
242666
  pretty: [
241876
242667
  "Usage:",
241877
- " superdoc open <doc> [--session <id>]",
241878
- ' superdoc open <doc> --collaboration-json "{...}" [--session <id>]'
242668
+ " superdoc open [doc] [--session <id>]",
242669
+ ' superdoc open [doc] --collaboration-json "{...}" [--session <id>]'
241879
242670
  ].join(`
241880
242671
  `)
241881
242672
  };
241882
242673
  }
241883
- const { doc: doc4 } = requireDocArg(parsed, "open");
241884
- const sessionId = context.sessionId ?? generateSessionId(doc4);
242674
+ const { doc: doc4 } = resolveDocArg(parsed, "open");
242675
+ const sessionId = context.sessionId ?? generateSessionId(doc4 ?? "blank");
241885
242676
  const collaborationPayload = await resolveJsonInput(parsed, "collaboration");
241886
242677
  const collabUrl = getStringOption(parsed, "collab-url");
241887
242678
  const collabDocumentId = getStringOption(parsed, "collab-document-id");
@@ -241917,6 +242708,9 @@ async function runOpen(tokens, context) {
241917
242708
  revision: existing.revision
241918
242709
  });
241919
242710
  }
242711
+ if (collaboration && doc4 == null) {
242712
+ throw new CliError("MISSING_REQUIRED", "open: a document path is required when using collaboration.");
242713
+ }
241920
242714
  const opened = collaboration ? await openCollaborativeDocument(doc4, context.io, collaboration) : await openDocument(doc4, context.io);
241921
242715
  let adoptedToHostPool = false;
241922
242716
  try {
@@ -241953,7 +242747,7 @@ async function runOpen(tokens, context) {
241953
242747
  openedAt: metadata.openedAt,
241954
242748
  updatedAt: metadata.updatedAt
241955
242749
  },
241956
- pretty: `Opened ${metadata.sourcePath ?? "<stdin>"} in context ${metadata.contextId} (${metadata.sessionType})`
242750
+ pretty: `Opened ${metadata.sourcePath ?? (metadata.source === "blank" ? "<blank>" : "<stdin>")} in context ${metadata.contextId} (${metadata.sessionType})`
241957
242751
  };
241958
242752
  } finally {
241959
242753
  if (!adoptedToHostPool) {