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

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 +1163 -397
  2. package/package.json +8 -8
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;
@@ -662,6 +652,62 @@ var init_operation_definitions = __esm(() => {
662
652
  referenceDocPath: "format/apply.mdx",
663
653
  referenceGroup: "format"
664
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
+ },
665
711
  "create.paragraph": {
666
712
  memberPath: "create.paragraph",
667
713
  description: "Create a new paragraph at the target position.",
@@ -973,6 +1019,228 @@ var init_command_catalog = __esm(() => {
973
1019
  OPERATION_REQUIRES_DOCUMENT_CONTEXT_MAP = projectFromDefinitions((_id, entry) => entry.requiresDocumentContext);
974
1020
  });
975
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
+
976
1244
  // ../../packages/document-api/src/contract/schemas.ts
977
1245
  function objectSchema(properties, required = []) {
978
1246
  const schema = {
@@ -1138,6 +1406,7 @@ var init_schemas = __esm(() => {
1138
1406
  init_types2();
1139
1407
  init_base();
1140
1408
  init_style_policy_types();
1409
+ init_format();
1141
1410
  nodeTypeValues = NODE_TYPES;
1142
1411
  blockNodeTypeValues = BLOCK_NODE_TYPES;
1143
1412
  inlineNodeTypeValues = INLINE_NODE_TYPES;
@@ -1601,6 +1870,42 @@ var init_schemas = __esm(() => {
1601
1870
  success: textMutationSuccessSchema,
1602
1871
  failure: textMutationFailureSchemaFor("format.apply")
1603
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
+ },
1604
1909
  "create.paragraph": {
1605
1910
  input: objectSchema({
1606
1911
  at: {
@@ -1948,54 +2253,6 @@ var init_capabilities = __esm(() => {
1948
2253
  ];
1949
2254
  });
1950
2255
 
1951
- // ../../packages/document-api/src/errors.ts
1952
- var DocumentApiValidationError;
1953
- var init_errors2 = __esm(() => {
1954
- DocumentApiValidationError = class DocumentApiValidationError extends Error {
1955
- code;
1956
- details;
1957
- constructor(code, message, details) {
1958
- super(message);
1959
- this.name = "DocumentApiValidationError";
1960
- this.code = code;
1961
- this.details = details;
1962
- Object.setPrototypeOf(this, DocumentApiValidationError.prototype);
1963
- }
1964
- };
1965
- });
1966
-
1967
- // ../../packages/document-api/src/validation-primitives.ts
1968
- function isRecord(value) {
1969
- return typeof value === "object" && value != null && !Array.isArray(value);
1970
- }
1971
- function isInteger(value) {
1972
- return typeof value === "number" && Number.isInteger(value);
1973
- }
1974
- function isTextAddress(value) {
1975
- if (!isRecord(value))
1976
- return false;
1977
- if (value.kind !== "text")
1978
- return false;
1979
- if (typeof value.blockId !== "string")
1980
- return false;
1981
- const range = value.range;
1982
- if (!isRecord(range))
1983
- return false;
1984
- if (!isInteger(range.start) || !isInteger(range.end))
1985
- return false;
1986
- return range.start <= range.end;
1987
- }
1988
- function assertNoUnknownFields(input, allowlist, operationName) {
1989
- for (const key of Object.keys(input)) {
1990
- if (!allowlist.has(key)) {
1991
- throw new DocumentApiValidationError("INVALID_TARGET", `Unknown field "${key}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key });
1992
- }
1993
- }
1994
- }
1995
- var init_validation_primitives = __esm(() => {
1996
- init_errors2();
1997
- });
1998
-
1999
2256
  // ../../packages/document-api/src/comments/comments.ts
2000
2257
  function validateCreateCommentInput(input) {
2001
2258
  if (!isRecord(input)) {
@@ -2153,76 +2410,6 @@ function executeFind(adapter, selectorOrQuery, options) {
2153
2410
  return adapter.find(query2);
2154
2411
  }
2155
2412
 
2156
- // ../../packages/document-api/src/write/write.ts
2157
- function normalizeMutationOptions(options) {
2158
- return {
2159
- expectedRevision: options?.expectedRevision,
2160
- changeMode: options?.changeMode ?? "direct",
2161
- dryRun: options?.dryRun ?? false
2162
- };
2163
- }
2164
- function executeWrite(adapter, request, options) {
2165
- return adapter.write(request, normalizeMutationOptions(options));
2166
- }
2167
-
2168
- // ../../packages/document-api/src/format/format.ts
2169
- function validateStyleApplyInput(input) {
2170
- if (!isRecord(input)) {
2171
- throw new DocumentApiValidationError("INVALID_INPUT", "format.apply input must be a non-null object.");
2172
- }
2173
- assertNoUnknownFields(input, STYLE_APPLY_INPUT_ALLOWED_KEYS, "format.apply");
2174
- const { target, inline } = input;
2175
- if (target === undefined) {
2176
- throw new DocumentApiValidationError("INVALID_TARGET", "format.apply requires a target.");
2177
- }
2178
- if (!isTextAddress(target)) {
2179
- throw new DocumentApiValidationError("INVALID_TARGET", "target must be a text address object.", {
2180
- field: "target",
2181
- value: target
2182
- });
2183
- }
2184
- if (inline === undefined || inline === null) {
2185
- throw new DocumentApiValidationError("INVALID_INPUT", "format.apply requires an inline object.");
2186
- }
2187
- if (!isRecord(inline)) {
2188
- throw new DocumentApiValidationError("INVALID_INPUT", "inline must be a non-null object.", {
2189
- field: "inline",
2190
- value: inline
2191
- });
2192
- }
2193
- const inlineKeys = Object.keys(inline);
2194
- if (inlineKeys.length === 0) {
2195
- throw new DocumentApiValidationError("INVALID_INPUT", "inline must include at least one known key.");
2196
- }
2197
- for (const key of inlineKeys) {
2198
- if (!MARK_KEY_SET.has(key)) {
2199
- throw new DocumentApiValidationError("INVALID_INPUT", `Unknown inline style key "${key}". Known keys: bold, italic, underline, strike.`, {
2200
- field: "inline",
2201
- key
2202
- });
2203
- }
2204
- const value = inline[key];
2205
- if (typeof value !== "boolean") {
2206
- throw new DocumentApiValidationError("INVALID_INPUT", `Inline style "${key}" must be a boolean, got ${typeof value}.`, {
2207
- field: "inline",
2208
- key,
2209
- value
2210
- });
2211
- }
2212
- }
2213
- }
2214
- function executeStyleApply(adapter, input, options) {
2215
- validateStyleApplyInput(input);
2216
- return adapter.apply(input, normalizeMutationOptions(options));
2217
- }
2218
- var STYLE_APPLY_INPUT_ALLOWED_KEYS;
2219
- var init_format = __esm(() => {
2220
- init_style_policy_types();
2221
- init_errors2();
2222
- init_validation_primitives();
2223
- STYLE_APPLY_INPUT_ALLOWED_KEYS = new Set(["target", "inline"]);
2224
- });
2225
-
2226
2413
  // ../../packages/document-api/src/get-node/get-node.ts
2227
2414
  function executeGetNode(adapter, address2) {
2228
2415
  return adapter.getNode(address2);
@@ -2471,6 +2658,10 @@ function buildDispatchTable(api) {
2471
2658
  replace: (input, options) => api.replace(input, options),
2472
2659
  delete: (input, options) => api.delete(input, options),
2473
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),
2474
2665
  "create.paragraph": (input, options) => api.create.paragraph(input, options),
2475
2666
  "create.heading": (input, options) => api.create.heading(input, options),
2476
2667
  "lists.list": (input) => api.lists.list(input),
@@ -2564,6 +2755,18 @@ function createDocumentApi(adapters) {
2564
2755
  },
2565
2756
  apply(input, options) {
2566
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);
2567
2770
  }
2568
2771
  },
2569
2772
  trackChanges: {
@@ -2646,6 +2849,7 @@ var init_src = __esm(() => {
2646
2849
  init_create();
2647
2850
  init_track_changes();
2648
2851
  init_capabilities();
2852
+ init_format();
2649
2853
  init_lists_types();
2650
2854
  init_errors2();
2651
2855
  init_types();
@@ -3278,6 +3482,10 @@ var init_operation_hints = __esm(() => {
3278
3482
  replace: "replaced text",
3279
3483
  delete: "deleted text",
3280
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",
3281
3489
  "create.paragraph": "created paragraph",
3282
3490
  "create.heading": "created heading",
3283
3491
  "lists.list": "listed items",
@@ -3311,6 +3519,10 @@ var init_operation_hints = __esm(() => {
3311
3519
  replace: "mutationReceipt",
3312
3520
  delete: "mutationReceipt",
3313
3521
  "format.apply": "mutationReceipt",
3522
+ "format.fontSize": "mutationReceipt",
3523
+ "format.fontFamily": "mutationReceipt",
3524
+ "format.color": "mutationReceipt",
3525
+ "format.align": "mutationReceipt",
3314
3526
  "create.paragraph": "createResult",
3315
3527
  "create.heading": "createResult",
3316
3528
  "lists.list": "listResult",
@@ -3344,6 +3556,10 @@ var init_operation_hints = __esm(() => {
3344
3556
  replace: null,
3345
3557
  delete: null,
3346
3558
  "format.apply": null,
3559
+ "format.fontSize": null,
3560
+ "format.fontFamily": null,
3561
+ "format.color": null,
3562
+ "format.align": null,
3347
3563
  "create.paragraph": "result",
3348
3564
  "create.heading": "result",
3349
3565
  "lists.list": "result",
@@ -3371,7 +3587,11 @@ var init_operation_hints = __esm(() => {
3371
3587
  insert: "receipt",
3372
3588
  replace: "receipt",
3373
3589
  delete: "receipt",
3374
- "format.apply": "receipt"
3590
+ "format.apply": "receipt",
3591
+ "format.fontSize": "receipt",
3592
+ "format.fontFamily": "receipt",
3593
+ "format.color": "receipt",
3594
+ "format.align": "receipt"
3375
3595
  };
3376
3596
  OPERATION_FAMILY = {
3377
3597
  find: "query",
@@ -3383,6 +3603,10 @@ var init_operation_hints = __esm(() => {
3383
3603
  replace: "textMutation",
3384
3604
  delete: "textMutation",
3385
3605
  "format.apply": "textMutation",
3606
+ "format.fontSize": "textMutation",
3607
+ "format.fontFamily": "textMutation",
3608
+ "format.color": "textMutation",
3609
+ "format.align": "textMutation",
3386
3610
  "create.paragraph": "create",
3387
3611
  "create.heading": "create",
3388
3612
  "lists.list": "lists",
@@ -18030,7 +18254,7 @@ var init_constants_DBKi0Amm_es = __esm(() => {
18030
18254
  ]);
18031
18255
  });
18032
18256
 
18033
- // ../../packages/superdoc/dist/chunks/SuperConverter-Cf1y7bFA.es.js
18257
+ // ../../packages/superdoc/dist/chunks/SuperConverter-BxBclpFg.es.js
18034
18258
  function getExtensionConfigField(extension, field, context = { name: "" }) {
18035
18259
  const fieldValue = extension.config[field];
18036
18260
  if (typeof fieldValue === "function")
@@ -41781,7 +42005,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
41781
42005
  state.kern = kernNode.attributes["w:val"];
41782
42006
  }
41783
42007
  }, SuperConverter;
41784
- var init_SuperConverter_Cf1y7bFA_es = __esm(() => {
42008
+ var init_SuperConverter_BxBclpFg_es = __esm(() => {
41785
42009
  init_rolldown_runtime_B2q5OVn9_es();
41786
42010
  init_jszip_ChlR43oI_es();
41787
42011
  init_xml_js_DLE8mr0n_es();
@@ -44574,7 +44798,7 @@ var init_SuperConverter_Cf1y7bFA_es = __esm(() => {
44574
44798
  return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : undefined;
44575
44799
  }
44576
44800
  });
44577
- 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));
44578
44802
  translator$77 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:keepLines"));
44579
44803
  translator$78 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:keepNext"));
44580
44804
  translator$80 = NodeTranslator.from(createSingleBooleanPropertyHandler("w:kinsoku"));
@@ -87169,9 +87393,9 @@ var init_remark_gfm_RDxetNVS_es = __esm(() => {
87169
87393
  emptyOptions4 = {};
87170
87394
  });
87171
87395
 
87172
- // ../../packages/superdoc/dist/chunks/src-DsAtPNrg.es.js
87173
- var exports_src_DsAtPNrg_es = {};
87174
- __export(exports_src_DsAtPNrg_es, {
87396
+ // ../../packages/superdoc/dist/chunks/src-DVVC7vA7.es.js
87397
+ var exports_src_DVVC7vA7_es = {};
87398
+ __export(exports_src_DVVC7vA7_es, {
87175
87399
  zt: () => defineMark,
87176
87400
  z: () => cM,
87177
87401
  yt: () => removeAwarenessStates,
@@ -93763,142 +93987,15 @@ function mutationOperation2(options) {
93763
93987
  function projectFromDefinitions2(fn) {
93764
93988
  return Object.fromEntries(OPERATION_IDS2.map((id2) => [id2, fn(id2, OPERATION_DEFINITIONS2[id2])]));
93765
93989
  }
93766
- function objectSchema2(properties, required = []) {
93767
- const schema = {
93768
- type: "object",
93769
- properties,
93770
- additionalProperties: false
93771
- };
93772
- if (required.length > 0)
93773
- schema.required = [...required];
93774
- return schema;
93775
- }
93776
- function arraySchema2(items) {
93990
+ function normalizeMutationOptions2(options) {
93777
93991
  return {
93778
- type: "array",
93779
- items
93992
+ expectedRevision: options?.expectedRevision,
93993
+ changeMode: options?.changeMode ?? "direct",
93994
+ dryRun: options?.dryRun ?? false
93780
93995
  };
93781
93996
  }
93782
- function ref$1(name) {
93783
- return { $ref: `#/$defs/${name}` };
93784
- }
93785
- function discoveryResultSchema2(itemSchema) {
93786
- return objectSchema2({
93787
- evaluatedRevision: { type: "string" },
93788
- total: {
93789
- type: "integer",
93790
- minimum: 0
93791
- },
93792
- items: arraySchema2(itemSchema),
93793
- page: pageInfoSchema2
93794
- }, [
93795
- "evaluatedRevision",
93796
- "total",
93797
- "items",
93798
- "page"
93799
- ]);
93800
- }
93801
- function discoveryItemSchema2(domainProperties, domainRequired = []) {
93802
- return objectSchema2({
93803
- id: { type: "string" },
93804
- handle: resolvedHandleSchema2,
93805
- ...domainProperties
93806
- }, [
93807
- "id",
93808
- "handle",
93809
- ...domainRequired
93810
- ]);
93811
- }
93812
- function possibleFailureCodes2(operationId) {
93813
- return [...COMMAND_CATALOG2[operationId].possibleFailureCodes];
93814
- }
93815
- function preApplyThrowCodes2(operationId) {
93816
- return [...COMMAND_CATALOG2[operationId].throws.preApply];
93817
- }
93818
- function receiptFailureSchemaFor2(operationId) {
93819
- const codes = possibleFailureCodes2(operationId);
93820
- if (codes.length === 0)
93821
- throw new Error(`Operation "${operationId}" does not declare non-applied failure codes.`);
93822
- return objectSchema2({
93823
- code: { enum: codes },
93824
- message: { type: "string" },
93825
- details: {}
93826
- }, ["code", "message"]);
93827
- }
93828
- function preApplyFailureSchemaFor2(operationId) {
93829
- const codes = preApplyThrowCodes2(operationId);
93830
- if (codes.length === 0)
93831
- throw new Error(`Operation "${operationId}" does not declare pre-apply throw codes.`);
93832
- return objectSchema2({
93833
- code: { enum: codes },
93834
- message: { type: "string" },
93835
- details: {}
93836
- }, ["code", "message"]);
93837
- }
93838
- function receiptFailureResultSchemaFor2(operationId) {
93839
- return objectSchema2({
93840
- success: { const: false },
93841
- failure: receiptFailureSchemaFor2(operationId)
93842
- }, ["success", "failure"]);
93843
- }
93844
- function preApplyFailureResultSchemaFor2(operationId) {
93845
- return objectSchema2({
93846
- success: { const: false },
93847
- failure: preApplyFailureSchemaFor2(operationId)
93848
- }, ["success", "failure"]);
93849
- }
93850
- function receiptResultSchemaFor2(operationId) {
93851
- return { oneOf: [receiptSuccessSchema2, receiptFailureResultSchemaFor2(operationId)] };
93852
- }
93853
- function textMutationFailureSchemaFor2(operationId) {
93854
- return objectSchema2({
93855
- success: { const: false },
93856
- failure: receiptFailureSchemaFor2(operationId),
93857
- resolution: textMutationResolutionSchema2
93858
- }, [
93859
- "success",
93860
- "failure",
93861
- "resolution"
93862
- ]);
93863
- }
93864
- function textMutationResultSchemaFor2(operationId) {
93865
- return { oneOf: [textMutationSuccessSchema2, textMutationFailureSchemaFor2(operationId)] };
93866
- }
93867
- function createParagraphFailureSchemaFor2(operationId) {
93868
- return objectSchema2({
93869
- success: { const: false },
93870
- failure: receiptFailureSchemaFor2(operationId)
93871
- }, ["success", "failure"]);
93872
- }
93873
- function createParagraphResultSchemaFor2(operationId) {
93874
- return { oneOf: [createParagraphSuccessSchema2, createParagraphFailureSchemaFor2(operationId)] };
93875
- }
93876
- function createHeadingFailureSchemaFor2(operationId) {
93877
- return objectSchema2({
93878
- success: { const: false },
93879
- failure: receiptFailureSchemaFor2(operationId)
93880
- }, ["success", "failure"]);
93881
- }
93882
- function createHeadingResultSchemaFor2(operationId) {
93883
- return { oneOf: [createHeadingSuccessSchema2, createHeadingFailureSchemaFor2(operationId)] };
93884
- }
93885
- function listsFailureSchemaFor2(operationId) {
93886
- return objectSchema2({
93887
- success: { const: false },
93888
- failure: receiptFailureSchemaFor2(operationId)
93889
- }, ["success", "failure"]);
93890
- }
93891
- function listsInsertResultSchemaFor2(operationId) {
93892
- return { oneOf: [listsInsertSuccessSchema2, listsFailureSchemaFor2(operationId)] };
93893
- }
93894
- function listsMutateItemResultSchemaFor2(operationId) {
93895
- return { oneOf: [listsMutateItemSuccessSchema2, listsFailureSchemaFor2(operationId)] };
93896
- }
93897
- function listsExitResultSchemaFor2(operationId) {
93898
- return { oneOf: [listsExitSuccessSchema2, listsFailureSchemaFor2(operationId)] };
93899
- }
93900
- function executeCapabilities2(adapter) {
93901
- return adapter.get();
93997
+ function executeWrite2(adapter, request, options) {
93998
+ return adapter.write(request, normalizeMutationOptions2(options));
93902
93999
  }
93903
94000
  function isRecord3(value) {
93904
94001
  return typeof value === "object" && value != null && !Array.isArray(value);
@@ -93925,6 +94022,265 @@ function assertNoUnknownFields2(input2, allowlist, operationName) {
93925
94022
  if (!allowlist.has(key$1))
93926
94023
  throw new DocumentApiValidationError2("INVALID_TARGET", `Unknown field "${key$1}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key$1 });
93927
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
+ }
94147
+ function objectSchema2(properties, required = []) {
94148
+ const schema = {
94149
+ type: "object",
94150
+ properties,
94151
+ additionalProperties: false
94152
+ };
94153
+ if (required.length > 0)
94154
+ schema.required = [...required];
94155
+ return schema;
94156
+ }
94157
+ function arraySchema2(items) {
94158
+ return {
94159
+ type: "array",
94160
+ items
94161
+ };
94162
+ }
94163
+ function ref$1(name) {
94164
+ return { $ref: `#/$defs/${name}` };
94165
+ }
94166
+ function discoveryResultSchema2(itemSchema) {
94167
+ return objectSchema2({
94168
+ evaluatedRevision: { type: "string" },
94169
+ total: {
94170
+ type: "integer",
94171
+ minimum: 0
94172
+ },
94173
+ items: arraySchema2(itemSchema),
94174
+ page: pageInfoSchema2
94175
+ }, [
94176
+ "evaluatedRevision",
94177
+ "total",
94178
+ "items",
94179
+ "page"
94180
+ ]);
94181
+ }
94182
+ function discoveryItemSchema2(domainProperties, domainRequired = []) {
94183
+ return objectSchema2({
94184
+ id: { type: "string" },
94185
+ handle: resolvedHandleSchema2,
94186
+ ...domainProperties
94187
+ }, [
94188
+ "id",
94189
+ "handle",
94190
+ ...domainRequired
94191
+ ]);
94192
+ }
94193
+ function possibleFailureCodes2(operationId) {
94194
+ return [...COMMAND_CATALOG2[operationId].possibleFailureCodes];
94195
+ }
94196
+ function preApplyThrowCodes2(operationId) {
94197
+ return [...COMMAND_CATALOG2[operationId].throws.preApply];
94198
+ }
94199
+ function receiptFailureSchemaFor2(operationId) {
94200
+ const codes = possibleFailureCodes2(operationId);
94201
+ if (codes.length === 0)
94202
+ throw new Error(`Operation "${operationId}" does not declare non-applied failure codes.`);
94203
+ return objectSchema2({
94204
+ code: { enum: codes },
94205
+ message: { type: "string" },
94206
+ details: {}
94207
+ }, ["code", "message"]);
94208
+ }
94209
+ function preApplyFailureSchemaFor2(operationId) {
94210
+ const codes = preApplyThrowCodes2(operationId);
94211
+ if (codes.length === 0)
94212
+ throw new Error(`Operation "${operationId}" does not declare pre-apply throw codes.`);
94213
+ return objectSchema2({
94214
+ code: { enum: codes },
94215
+ message: { type: "string" },
94216
+ details: {}
94217
+ }, ["code", "message"]);
94218
+ }
94219
+ function receiptFailureResultSchemaFor2(operationId) {
94220
+ return objectSchema2({
94221
+ success: { const: false },
94222
+ failure: receiptFailureSchemaFor2(operationId)
94223
+ }, ["success", "failure"]);
94224
+ }
94225
+ function preApplyFailureResultSchemaFor2(operationId) {
94226
+ return objectSchema2({
94227
+ success: { const: false },
94228
+ failure: preApplyFailureSchemaFor2(operationId)
94229
+ }, ["success", "failure"]);
94230
+ }
94231
+ function receiptResultSchemaFor2(operationId) {
94232
+ return { oneOf: [receiptSuccessSchema2, receiptFailureResultSchemaFor2(operationId)] };
94233
+ }
94234
+ function textMutationFailureSchemaFor2(operationId) {
94235
+ return objectSchema2({
94236
+ success: { const: false },
94237
+ failure: receiptFailureSchemaFor2(operationId),
94238
+ resolution: textMutationResolutionSchema2
94239
+ }, [
94240
+ "success",
94241
+ "failure",
94242
+ "resolution"
94243
+ ]);
94244
+ }
94245
+ function textMutationResultSchemaFor2(operationId) {
94246
+ return { oneOf: [textMutationSuccessSchema2, textMutationFailureSchemaFor2(operationId)] };
94247
+ }
94248
+ function createParagraphFailureSchemaFor2(operationId) {
94249
+ return objectSchema2({
94250
+ success: { const: false },
94251
+ failure: receiptFailureSchemaFor2(operationId)
94252
+ }, ["success", "failure"]);
94253
+ }
94254
+ function createParagraphResultSchemaFor2(operationId) {
94255
+ return { oneOf: [createParagraphSuccessSchema2, createParagraphFailureSchemaFor2(operationId)] };
94256
+ }
94257
+ function createHeadingFailureSchemaFor2(operationId) {
94258
+ return objectSchema2({
94259
+ success: { const: false },
94260
+ failure: receiptFailureSchemaFor2(operationId)
94261
+ }, ["success", "failure"]);
94262
+ }
94263
+ function createHeadingResultSchemaFor2(operationId) {
94264
+ return { oneOf: [createHeadingSuccessSchema2, createHeadingFailureSchemaFor2(operationId)] };
94265
+ }
94266
+ function listsFailureSchemaFor2(operationId) {
94267
+ return objectSchema2({
94268
+ success: { const: false },
94269
+ failure: receiptFailureSchemaFor2(operationId)
94270
+ }, ["success", "failure"]);
94271
+ }
94272
+ function listsInsertResultSchemaFor2(operationId) {
94273
+ return { oneOf: [listsInsertSuccessSchema2, listsFailureSchemaFor2(operationId)] };
94274
+ }
94275
+ function listsMutateItemResultSchemaFor2(operationId) {
94276
+ return { oneOf: [listsMutateItemSuccessSchema2, listsFailureSchemaFor2(operationId)] };
94277
+ }
94278
+ function listsExitResultSchemaFor2(operationId) {
94279
+ return { oneOf: [listsExitSuccessSchema2, listsFailureSchemaFor2(operationId)] };
94280
+ }
94281
+ function executeCapabilities2(adapter) {
94282
+ return adapter.get();
94283
+ }
93928
94284
  function validateCreateCommentInput2(input2) {
93929
94285
  if (!isRecord3(input2))
93930
94286
  throw new DocumentApiValidationError2("INVALID_TARGET", "comments.create input must be a non-null object.");
@@ -94074,57 +94430,6 @@ function executeFind2(adapter, selectorOrQuery, options) {
94074
94430
  const query2 = normalizeFindQuery2(selectorOrQuery, options);
94075
94431
  return adapter.find(query2);
94076
94432
  }
94077
- function normalizeMutationOptions2(options) {
94078
- return {
94079
- expectedRevision: options?.expectedRevision,
94080
- changeMode: options?.changeMode ?? "direct",
94081
- dryRun: options?.dryRun ?? false
94082
- };
94083
- }
94084
- function executeWrite2(adapter, request, options) {
94085
- return adapter.write(request, normalizeMutationOptions2(options));
94086
- }
94087
- function validateStyleApplyInput2(input2) {
94088
- if (!isRecord3(input2))
94089
- throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply input must be a non-null object.");
94090
- assertNoUnknownFields2(input2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, "format.apply");
94091
- const { target, inline } = input2;
94092
- if (target === undefined)
94093
- throw new DocumentApiValidationError2("INVALID_TARGET", "format.apply requires a target.");
94094
- if (!isTextAddress2(target))
94095
- throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a text address object.", {
94096
- field: "target",
94097
- value: target
94098
- });
94099
- if (inline === undefined || inline === null)
94100
- throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply requires an inline object.");
94101
- if (!isRecord3(inline))
94102
- throw new DocumentApiValidationError2("INVALID_INPUT", "inline must be a non-null object.", {
94103
- field: "inline",
94104
- value: inline
94105
- });
94106
- const inlineKeys = Object.keys(inline);
94107
- if (inlineKeys.length === 0)
94108
- throw new DocumentApiValidationError2("INVALID_INPUT", "inline must include at least one known key.");
94109
- for (const key$1 of inlineKeys) {
94110
- if (!MARK_KEY_SET2.has(key$1))
94111
- throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown inline style key "${key$1}". Known keys: bold, italic, underline, strike.`, {
94112
- field: "inline",
94113
- key: key$1
94114
- });
94115
- const value = inline[key$1];
94116
- if (typeof value !== "boolean")
94117
- throw new DocumentApiValidationError2("INVALID_INPUT", `Inline style "${key$1}" must be a boolean, got ${typeof value}.`, {
94118
- field: "inline",
94119
- key: key$1,
94120
- value
94121
- });
94122
- }
94123
- }
94124
- function executeStyleApply$1(adapter, input2, options) {
94125
- validateStyleApplyInput2(input2);
94126
- return adapter.apply(input2, normalizeMutationOptions2(options));
94127
- }
94128
94433
  function executeGetNode2(adapter, address2) {
94129
94434
  return adapter.getNode(address2);
94130
94435
  }
@@ -94331,6 +94636,10 @@ function buildDispatchTable2(api) {
94331
94636
  replace: (input2, options) => api.replace(input2, options),
94332
94637
  delete: (input2, options) => api.delete(input2, options),
94333
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),
94334
94643
  "create.paragraph": (input2, options) => api.create.paragraph(input2, options),
94335
94644
  "create.heading": (input2, options) => api.create.heading(input2, options),
94336
94645
  "lists.list": (input2) => api.lists.list(input2),
@@ -94426,6 +94735,18 @@ function createDocumentApi2(adapters) {
94426
94735
  },
94427
94736
  apply(input2, options) {
94428
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);
94429
94750
  }
94430
94751
  },
94431
94752
  trackChanges: {
@@ -94543,10 +94864,12 @@ function pushReason(reasons, reason) {
94543
94864
  function isOperationAvailable(editor, operationId) {
94544
94865
  if (operationId === "format.apply")
94545
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");
94546
94869
  return hasAllCommands(editor, operationId);
94547
94870
  }
94548
94871
  function isCommandBackedAvailability(operationId) {
94549
- return !isMarkBackedOperation(operationId);
94872
+ return !isMarkBackedOperation(operationId) && !INLINE_FORMAT_OPERATIONS.has(operationId);
94550
94873
  }
94551
94874
  function buildOperationCapabilities(editor) {
94552
94875
  const operations = {};
@@ -95382,29 +95705,51 @@ function hasStepExecutor(op) {
95382
95705
  return getStepExecutor(op) !== undefined;
95383
95706
  }
95384
95707
  function captureRunsInRange(editor, blockPos, from$12, to) {
95385
- const doc$2 = editor.state.doc;
95386
- const contentStart = blockPos + 1;
95387
- const absFrom = contentStart + from$12;
95388
- 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
+ };
95389
95714
  const runs2 = [];
95390
- doc$2.nodesBetween(absFrom, absTo, (node3, pos) => {
95391
- if (!node3.isText)
95392
- return true;
95393
- const nodeStart = Math.max(pos, absFrom);
95394
- const nodeEnd = Math.min(pos + node3.nodeSize, absTo);
95395
- if (nodeStart >= nodeEnd)
95396
- return true;
95397
- const relFrom = nodeStart - contentStart;
95398
- const relTo = nodeEnd - contentStart;
95399
- 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;
95400
95721
  runs2.push({
95401
- from: relFrom,
95402
- to: relTo,
95403
- charCount: relTo - relFrom,
95404
- 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))
95405
95726
  });
95406
- return true;
95407
- });
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);
95408
95753
  return {
95409
95754
  runs: runs2,
95410
95755
  isUniform: checkUniformity(runs2)
@@ -98872,6 +99217,121 @@ function findAdapter(editor, query2) {
98872
99217
  diagnostics: uniqueDiagnostics.length ? uniqueDiagnostics : undefined
98873
99218
  };
98874
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
+ }
98875
99335
  function findBlocksByTypeAndId(blockIndex, nodeType, nodeId) {
98876
99336
  const byIdMatch = blockIndex.byId.get(`${nodeType}:${nodeId}`);
98877
99337
  if (byIdMatch)
@@ -100206,7 +100666,13 @@ function getDocumentApiAdapters(editor) {
100206
100666
  capabilities: { get: () => getDocumentApiCapabilities(editor) },
100207
100667
  comments: createCommentsWrapper(editor),
100208
100668
  write: { write: (request, options) => writeWrapper(editor, request, options) },
100209
- 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
+ },
100210
100676
  trackChanges: {
100211
100677
  list: (query2) => trackChangesListWrapper(editor, query2),
100212
100678
  get: (input2) => trackChangesGetWrapper(editor, input2),
@@ -134270,7 +134736,7 @@ var Node$13 = class Node$14 {
134270
134736
  console.warn("Failed to initialize developer tools:", error);
134271
134737
  }
134272
134738
  }
134273
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, nodeTypeValues2, blockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, DocumentApiValidationError2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, STYLE_MARK_SCHEMA_NAMES, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, REF_HANDLERS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
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 {
134274
134740
  constructor(config2) {
134275
134741
  this.search = config2.search;
134276
134742
  this.caseSensitive = !!config2.caseSensitive;
@@ -152341,9 +152807,9 @@ var Node$13 = class Node$14 {
152341
152807
  trackedChanges: context.trackedChanges ?? []
152342
152808
  });
152343
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;
152344
- var init_src_DsAtPNrg_es = __esm(() => {
152810
+ var init_src_DVVC7vA7_es = __esm(() => {
152345
152811
  init_rolldown_runtime_B2q5OVn9_es();
152346
- init_SuperConverter_Cf1y7bFA_es();
152812
+ init_SuperConverter_BxBclpFg_es();
152347
152813
  init_jszip_ChlR43oI_es();
152348
152814
  init_uuid_2IzDu5nl_es();
152349
152815
  init_constants_DBKi0Amm_es();
@@ -160573,6 +161039,78 @@ function print() { __p += __j.call(arguments, '') }
160573
161039
  referenceDocPath: "format/apply.mdx",
160574
161040
  referenceGroup: "format"
160575
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
+ },
160576
161114
  "create.paragraph": {
160577
161115
  memberPath: "create.paragraph",
160578
161116
  description: "Create a new paragraph at the target position.",
@@ -160885,6 +161423,27 @@ function print() { __p += __j.call(arguments, '') }
160885
161423
  OPERATION_IDS2.filter((operationId) => COMMAND_CATALOG2[operationId].mutates);
160886
161424
  projectFromDefinitions2((_id, entry) => entry.description);
160887
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"]);
160888
161447
  nodeTypeValues2 = NODE_TYPES2;
160889
161448
  blockNodeTypeValues2 = BLOCK_NODE_TYPES2;
160890
161449
  inlineNodeTypeValues2 = INLINE_NODE_TYPES2;
@@ -161396,6 +161955,31 @@ function print() { __p += __j.call(arguments, '') }
161396
161955
  };
161397
161956
  })()
161398
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({
161399
161983
  at: { oneOf: [
161400
161984
  objectSchema2({ kind: { const: "documentStart" } }, ["kind"]),
161401
161985
  objectSchema2({ kind: { const: "documentEnd" } }, ["kind"]),
@@ -161626,15 +162210,6 @@ function print() { __p += __j.call(arguments, '') }
161626
162210
  "DRY_RUN_UNAVAILABLE",
161627
162211
  "NAMESPACE_UNAVAILABLE"
161628
162212
  ];
161629
- DocumentApiValidationError2 = class DocumentApiValidationError3 extends Error {
161630
- constructor(code$1, message, details) {
161631
- super(message);
161632
- this.name = "DocumentApiValidationError";
161633
- this.code = code$1;
161634
- this.details = details;
161635
- Object.setPrototypeOf(this, DocumentApiValidationError3.prototype);
161636
- }
161637
- };
161638
162213
  CREATE_COMMENT_ALLOWED_KEYS2 = new Set([
161639
162214
  "target",
161640
162215
  "text",
@@ -161647,11 +162222,30 @@ function print() { __p += __j.call(arguments, '') }
161647
162222
  "status",
161648
162223
  "isInternal"
161649
162224
  ]);
161650
- STYLE_APPLY_INPUT_ALLOWED_KEYS2 = new Set(["target", "inline"]);
161651
162225
  DELETE_INPUT_ALLOWED_KEYS2 = new Set(["target"]);
161652
162226
  INSERT_INPUT_ALLOWED_KEYS2 = new Set(["text", "target"]);
161653
162227
  REPLACE_INPUT_ALLOWED_KEYS2 = new Set(["text", "target"]);
161654
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
+ ],
161655
162249
  "create.paragraph": ["insertParagraphAt"],
161656
162250
  "create.heading": ["insertHeadingAt"],
161657
162251
  "lists.insert": ["insertListItemAt"],
@@ -161686,6 +162280,11 @@ function print() { __p += __j.call(arguments, '') }
161686
162280
  underline: "underline",
161687
162281
  strike: "strike"
161688
162282
  };
162283
+ INLINE_FORMAT_OPERATIONS = new Set([
162284
+ "format.fontSize",
162285
+ "format.fontFamily",
162286
+ "format.color"
162287
+ ]);
161689
162288
  SUPPORTED_STEP_OPS = [
161690
162289
  "text.rewrite",
161691
162290
  "text.insert",
@@ -183822,8 +184421,8 @@ function print() { __p += __j.call(arguments, '') }
183822
184421
  return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
183823
184422
  };
183824
184423
  stubFalse_default = stubFalse;
183825
- freeExports$2 = typeof exports_src_DsAtPNrg_es == "object" && exports_src_DsAtPNrg_es && !exports_src_DsAtPNrg_es.nodeType && exports_src_DsAtPNrg_es;
183826
- freeModule$2 = freeExports$2 && typeof module_src_DsAtPNrg_es == "object" && module_src_DsAtPNrg_es && !module_src_DsAtPNrg_es.nodeType && module_src_DsAtPNrg_es;
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;
183827
184426
  Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
183828
184427
  isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
183829
184428
  typedArrayTags = {};
@@ -183831,8 +184430,8 @@ function print() { __p += __j.call(arguments, '') }
183831
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;
183832
184431
  _baseIsTypedArray_default = baseIsTypedArray;
183833
184432
  _baseUnary_default = baseUnary;
183834
- freeExports$1 = typeof exports_src_DsAtPNrg_es == "object" && exports_src_DsAtPNrg_es && !exports_src_DsAtPNrg_es.nodeType && exports_src_DsAtPNrg_es;
183835
- freeModule$1 = freeExports$1 && typeof module_src_DsAtPNrg_es == "object" && module_src_DsAtPNrg_es && !module_src_DsAtPNrg_es.nodeType && module_src_DsAtPNrg_es;
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;
183836
184435
  freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
183837
184436
  _nodeUtil_default = function() {
183838
184437
  try {
@@ -183937,8 +184536,8 @@ function print() { __p += __j.call(arguments, '') }
183937
184536
  Stack.prototype.has = _stackHas_default;
183938
184537
  Stack.prototype.set = _stackSet_default;
183939
184538
  _Stack_default = Stack;
183940
- freeExports = typeof exports_src_DsAtPNrg_es == "object" && exports_src_DsAtPNrg_es && !exports_src_DsAtPNrg_es.nodeType && exports_src_DsAtPNrg_es;
183941
- freeModule = freeExports && typeof module_src_DsAtPNrg_es == "object" && module_src_DsAtPNrg_es && !module_src_DsAtPNrg_es.nodeType && module_src_DsAtPNrg_es;
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;
183942
184541
  Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
183943
184542
  allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
183944
184543
  _cloneBuffer_default = cloneBuffer;
@@ -191557,8 +192156,8 @@ var init_zipper_BJHqrQMq_es = __esm(() => {
191557
192156
 
191558
192157
  // ../../packages/superdoc/dist/super-editor.es.js
191559
192158
  var init_super_editor_es = __esm(() => {
191560
- init_src_DsAtPNrg_es();
191561
- init_SuperConverter_Cf1y7bFA_es();
192159
+ init_src_DVVC7vA7_es();
192160
+ init_SuperConverter_BxBclpFg_es();
191562
192161
  init_jszip_ChlR43oI_es();
191563
192162
  init_xml_js_DLE8mr0n_es();
191564
192163
  init_constants_DBKi0Amm_es();
@@ -191568,6 +192167,12 @@ var init_super_editor_es = __esm(() => {
191568
192167
  init_zipper_BJHqrQMq_es();
191569
192168
  });
191570
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
+
191571
192176
  // ../../packages/super-editor/src/extensions/track-changes/constants.js
191572
192177
  var TrackInsertMarkName2 = "trackInsert", TrackDeleteMarkName2 = "trackDelete", TrackFormatMarkName2 = "trackFormat";
191573
192178
 
@@ -191622,10 +192227,13 @@ function isOperationAvailable2(editor, operationId) {
191622
192227
  if (operationId === "format.apply") {
191623
192228
  return MARK_KEYS.some((key2) => hasMarkCapability2(editor, STYLE_MARK_SCHEMA_NAMES2[key2] ?? key2));
191624
192229
  }
192230
+ if (INLINE_FORMAT_OPERATIONS2.has(operationId)) {
192231
+ return hasAllCommands2(editor, operationId) && hasMarkCapability2(editor, "textStyle");
192232
+ }
191625
192233
  return hasAllCommands2(editor, operationId);
191626
192234
  }
191627
192235
  function isCommandBackedAvailability2(operationId) {
191628
- return !isMarkBackedOperation2(operationId);
192236
+ return !isMarkBackedOperation2(operationId) && !INLINE_FORMAT_OPERATIONS2.has(operationId);
191629
192237
  }
191630
192238
  function buildOperationCapabilities2(editor) {
191631
192239
  const operations = {};
@@ -191700,10 +192308,14 @@ function getDocumentApiCapabilities2(editor) {
191700
192308
  planEngine: buildPlanEngineCapabilities2()
191701
192309
  };
191702
192310
  }
191703
- 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;
191704
192312
  var init_capabilities_adapter = __esm(() => {
191705
192313
  init_src();
191706
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"],
191707
192319
  "create.paragraph": ["insertParagraphAt"],
191708
192320
  "create.heading": ["insertHeadingAt"],
191709
192321
  "lists.insert": ["insertListItemAt"],
@@ -191729,6 +192341,7 @@ var init_capabilities_adapter = __esm(() => {
191729
192341
  underline: "underline",
191730
192342
  strike: "strike"
191731
192343
  };
192344
+ INLINE_FORMAT_OPERATIONS2 = new Set(["format.fontSize", "format.fontFamily", "format.color"]);
191732
192345
  SUPPORTED_STEP_OPS2 = [
191733
192346
  "text.rewrite",
191734
192347
  "text.insert",
@@ -197146,28 +197759,51 @@ var init_executor_registry = __esm(() => {
197146
197759
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/style-resolver.ts
197147
197760
  function captureRunsInRange2(editor, blockPos, from3, to) {
197148
197761
  const doc4 = editor.state.doc;
197149
- const contentStart = blockPos + 1;
197150
- const absFrom = contentStart + from3;
197151
- 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
+ }
197152
197766
  const runs2 = [];
197153
- doc4.nodesBetween(absFrom, absTo, (node3, pos) => {
197154
- if (!node3.isText)
197155
- return true;
197156
- const nodeStart = Math.max(pos, absFrom);
197157
- const nodeEnd = Math.min(pos + node3.nodeSize, absTo);
197158
- if (nodeStart >= nodeEnd)
197159
- return true;
197160
- const relFrom = nodeStart - contentStart;
197161
- const relTo = nodeEnd - contentStart;
197162
- 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;
197163
197773
  runs2.push({
197164
- from: relFrom,
197165
- to: relTo,
197166
- charCount: relTo - relFrom,
197167
- marks: formattingMarks
197774
+ from: overlapStart,
197775
+ to: overlapEnd,
197776
+ charCount: overlapEnd - overlapStart,
197777
+ marks: marks.filter((m3) => !METADATA_MARK_NAMES2.has(m3.type.name))
197168
197778
  });
197169
- return true;
197170
- });
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);
197171
197807
  const isUniform = checkUniformity2(runs2);
197172
197808
  return { runs: runs2, isUniform };
197173
197809
  }
@@ -200849,6 +201485,106 @@ var init_find_adapter = __esm(() => {
200849
201485
  init_revision_tracker();
200850
201486
  });
200851
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
+
200852
201588
  // ../../packages/super-editor/src/document-api-adapters/get-node-adapter.ts
200853
201589
  function findBlocksByTypeAndId2(blockIndex, nodeType, nodeId) {
200854
201590
  const byIdMatch = blockIndex.byId.get(`${nodeType}:${nodeId}`);
@@ -209713,7 +210449,7 @@ var translator54;
209713
210449
  var init_jc_translator = __esm(() => {
209714
210450
  init_utils();
209715
210451
  init_node_translator2();
209716
- 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));
209717
210453
  });
209718
210454
 
209719
210455
  // ../../packages/super-editor/src/core/super-converter/v3/handlers/w/jc/index.js
@@ -235401,7 +236137,11 @@ function getDocumentApiAdapters2(editor) {
235401
236137
  write: (request, options) => writeWrapper2(editor, request, options)
235402
236138
  },
235403
236139
  format: {
235404
- 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)
235405
236145
  },
235406
236146
  trackChanges: {
235407
236147
  list: (query2) => trackChangesListWrapper2(editor, query2),
@@ -235440,6 +236180,7 @@ var init_document_api_adapters = __esm(() => {
235440
236180
  init_create_wrappers();
235441
236181
  init_find_adapter();
235442
236182
  init_plan_wrappers();
236183
+ init_format_value_wrappers();
235443
236184
  init_get_node_adapter();
235444
236185
  init_info_adapter();
235445
236186
  init_lists_wrappers();
@@ -238177,12 +238918,21 @@ async function readDocumentSource(doc4, io) {
238177
238918
  };
238178
238919
  }
238179
238920
  async function openDocument(doc4, io, options = {}) {
238180
- 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
+ }
238181
238931
  let editor;
238182
238932
  try {
238183
238933
  const isTest = false;
238184
- editor = await Editor.open(Buffer.from(bytes), {
238185
- documentId: options.documentId ?? meta2.path ?? "stdin.docx",
238934
+ editor = await Editor.open(Buffer.from(source), {
238935
+ documentId: options.documentId ?? meta2.path ?? "blank.docx",
238186
238936
  user: { id: "cli", name: "CLI" },
238187
238937
  ...isTest ? { telemetry: { enabled: false } } : {},
238188
238938
  ydoc: options.ydoc,
@@ -238301,6 +239051,7 @@ async function exportToPath(editor, outputPath, force = false) {
238301
239051
  }
238302
239052
  var init_document = __esm(() => {
238303
239053
  init_super_editor_es();
239054
+ init_blank_docx();
238304
239055
  init_document_api_adapters();
238305
239056
  init_src();
238306
239057
  init_collaboration();
@@ -239338,6 +240089,10 @@ var init_special_handlers = __esm(() => {
239338
240089
  replace: flattenTextMutationReceipt,
239339
240090
  delete: flattenTextMutationReceipt,
239340
240091
  "format.apply": flattenTextMutationReceipt,
240092
+ "format.fontSize": flattenTextMutationReceipt,
240093
+ "format.fontFamily": flattenTextMutationReceipt,
240094
+ "format.color": flattenTextMutationReceipt,
240095
+ "format.align": flattenTextMutationReceipt,
239341
240096
  getNodeById: (result, context) => {
239342
240097
  const record = asRecord4(result);
239343
240098
  const inputRecord = asRecord4(context.apiInput);
@@ -239442,6 +240197,10 @@ var init_invoke_input = __esm(() => {
239442
240197
  "replace",
239443
240198
  "delete",
239444
240199
  "format.apply",
240200
+ "format.fontSize",
240201
+ "format.fontFamily",
240202
+ "format.color",
240203
+ "format.align",
239445
240204
  "comments.create",
239446
240205
  "comments.patch"
239447
240206
  ]);
@@ -240582,6 +241341,10 @@ var init_operation_params = __esm(() => {
240582
241341
  "doc.replace": [...TEXT_TARGET_FLAT_PARAMS],
240583
241342
  "doc.delete": [...TEXT_TARGET_FLAT_PARAMS],
240584
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],
240585
241348
  "doc.comments.create": [...TEXT_TARGET_FLAT_PARAMS],
240586
241349
  "doc.comments.patch": [...TEXT_TARGET_FLAT_PARAMS],
240587
241350
  "doc.lists.insert": [
@@ -240612,9 +241375,9 @@ var init_operation_params = __esm(() => {
240612
241375
  "doc.open": {
240613
241376
  command: "open",
240614
241377
  positionalParams: ["doc"],
240615
- docRequirement: "required",
241378
+ docRequirement: "none",
240616
241379
  params: [
240617
- { name: "doc", kind: "doc", type: "string", required: true },
241380
+ { name: "doc", kind: "doc", type: "string" },
240618
241381
  SESSION_PARAM,
240619
241382
  { name: "collaboration", kind: "jsonFlag", flag: "collaboration-json", type: "json" },
240620
241383
  { name: "collabDocumentId", kind: "flag", flag: "collab-document-id", type: "string" },
@@ -241896,20 +242659,20 @@ async function runOpen(tokens, context) {
241896
242659
  command: "open",
241897
242660
  data: {
241898
242661
  usage: [
241899
- "superdoc open <doc> [--session <id>]",
241900
- 'superdoc open <doc> --collaboration-json "{...}" [--session <id>]'
242662
+ "superdoc open [doc] [--session <id>]",
242663
+ 'superdoc open [doc] --collaboration-json "{...}" [--session <id>]'
241901
242664
  ]
241902
242665
  },
241903
242666
  pretty: [
241904
242667
  "Usage:",
241905
- " superdoc open <doc> [--session <id>]",
241906
- ' superdoc open <doc> --collaboration-json "{...}" [--session <id>]'
242668
+ " superdoc open [doc] [--session <id>]",
242669
+ ' superdoc open [doc] --collaboration-json "{...}" [--session <id>]'
241907
242670
  ].join(`
241908
242671
  `)
241909
242672
  };
241910
242673
  }
241911
- const { doc: doc4 } = requireDocArg(parsed, "open");
241912
- const sessionId = context.sessionId ?? generateSessionId(doc4);
242674
+ const { doc: doc4 } = resolveDocArg(parsed, "open");
242675
+ const sessionId = context.sessionId ?? generateSessionId(doc4 ?? "blank");
241913
242676
  const collaborationPayload = await resolveJsonInput(parsed, "collaboration");
241914
242677
  const collabUrl = getStringOption(parsed, "collab-url");
241915
242678
  const collabDocumentId = getStringOption(parsed, "collab-document-id");
@@ -241945,6 +242708,9 @@ async function runOpen(tokens, context) {
241945
242708
  revision: existing.revision
241946
242709
  });
241947
242710
  }
242711
+ if (collaboration && doc4 == null) {
242712
+ throw new CliError("MISSING_REQUIRED", "open: a document path is required when using collaboration.");
242713
+ }
241948
242714
  const opened = collaboration ? await openCollaborativeDocument(doc4, context.io, collaboration) : await openDocument(doc4, context.io);
241949
242715
  let adoptedToHostPool = false;
241950
242716
  try {
@@ -241981,7 +242747,7 @@ async function runOpen(tokens, context) {
241981
242747
  openedAt: metadata.openedAt,
241982
242748
  updatedAt: metadata.updatedAt
241983
242749
  },
241984
- 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})`
241985
242751
  };
241986
242752
  } finally {
241987
242753
  if (!adoptedToHostPool) {