@superdoc-dev/cli 0.5.0-next.14 → 0.5.0-next.15

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 +1481 -212
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -1211,7 +1211,7 @@ function formatInlineAliasExpectedResult(key) {
1211
1211
  function projectFromDefinitions(fn) {
1212
1212
  return Object.fromEntries(OPERATION_IDS.map((id) => [id, fn(id, OPERATION_DEFINITIONS[id])]));
1213
1213
  }
1214
- var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_CAPABLE, T_PLAN_ENGINE, T_NOT_FOUND_COMMAND, T_IMAGE_COMMAND, T_CC_READ, T_CC_MUTATION, T_CC_TYPED, T_CC_TYPED_READ, T_CC_RAW, T_QUERY_MATCH, T_SECTION_CREATE, T_SECTION_READ, T_PARAGRAPH_MUTATION, T_SECTION_MUTATION, T_SECTION_SETTINGS_MUTATION, T_HEADER_FOOTER_MUTATION, T_STORY, T_REF_READ_LIST, T_REF_MUTATION, T_REF_MUTATION_REMOVE, T_REF_INSERT, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
1214
+ var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_CAPABLE, T_PLAN_ENGINE, T_NOT_FOUND_COMMAND, T_IMAGE_COMMAND, T_CC_READ, T_CC_MUTATION, T_CC_TYPED, T_CC_TYPED_READ, T_CC_RAW, T_QUERY_MATCH, T_SECTION_CREATE, T_SECTION_READ, T_PARAGRAPH_MUTATION, T_SECTION_MUTATION, T_SECTION_SETTINGS_MUTATION, T_HEADER_FOOTER_MUTATION, T_STORY, T_REF_READ_LIST, T_REF_MUTATION, T_REF_MUTATION_REMOVE, T_REF_INSERT, T_PROTECTION_READ, T_PROTECTION_MUTATION, T_PERM_RANGE_READ, T_PERM_RANGE_MUTATION, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
1215
1215
  var init_operation_definitions = __esm(() => {
1216
1216
  init_inline_run_patch();
1217
1217
  NONE_FAILURES = [];
@@ -1287,6 +1287,15 @@ var init_operation_definitions = __esm(() => {
1287
1287
  T_REF_MUTATION = ["TARGET_NOT_FOUND", "INVALID_TARGET", "INVALID_INPUT", "CAPABILITY_UNAVAILABLE"];
1288
1288
  T_REF_MUTATION_REMOVE = ["TARGET_NOT_FOUND", "INVALID_TARGET", "CAPABILITY_UNAVAILABLE"];
1289
1289
  T_REF_INSERT = ["TARGET_NOT_FOUND", "INVALID_TARGET", "INVALID_INPUT", "CAPABILITY_UNAVAILABLE"];
1290
+ T_PROTECTION_READ = ["CAPABILITY_UNAVAILABLE"];
1291
+ T_PROTECTION_MUTATION = ["INVALID_INPUT", "CAPABILITY_UNAVAILABLE"];
1292
+ T_PERM_RANGE_READ = ["TARGET_NOT_FOUND", "CAPABILITY_UNAVAILABLE"];
1293
+ T_PERM_RANGE_MUTATION = [
1294
+ "TARGET_NOT_FOUND",
1295
+ "INVALID_TARGET",
1296
+ "INVALID_INPUT",
1297
+ "CAPABILITY_UNAVAILABLE"
1298
+ ];
1290
1299
  FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS = Object.fromEntries(INLINE_PROPERTY_REGISTRY.map((entry) => {
1291
1300
  const operationId = `format.${entry.key}`;
1292
1301
  const definition = {
@@ -6184,6 +6193,116 @@ var init_operation_definitions = __esm(() => {
6184
6193
  referenceDocPath: "diff/apply.mdx",
6185
6194
  referenceGroup: "diff",
6186
6195
  skipAsATool: true
6196
+ },
6197
+ "protection.get": {
6198
+ memberPath: "protection.get",
6199
+ description: "Read the current document protection state including editing restrictions, write protection, and read-only recommendation.",
6200
+ expectedResult: "Returns a DocumentProtectionState with editingRestriction, writeProtection, and readOnlyRecommended fields.",
6201
+ requiresDocumentContext: true,
6202
+ metadata: readOperation({ throws: T_PROTECTION_READ }),
6203
+ referenceDocPath: "protection/get.mdx",
6204
+ referenceGroup: "protection",
6205
+ skipAsATool: true
6206
+ },
6207
+ "protection.setEditingRestriction": {
6208
+ memberPath: "protection.setEditingRestriction",
6209
+ description: "Enable Word-style editing restriction on the document. Only readOnly mode is supported in v1.",
6210
+ expectedResult: "Returns a ProtectionMutationResult with the updated protection state on success.",
6211
+ requiresDocumentContext: true,
6212
+ metadata: mutationOperation({
6213
+ idempotency: "idempotent",
6214
+ supportsDryRun: true,
6215
+ supportsTrackedMode: false,
6216
+ possibleFailureCodes: ["NO_OP"],
6217
+ throws: T_PROTECTION_MUTATION
6218
+ }),
6219
+ referenceDocPath: "protection/set-editing-restriction.mdx",
6220
+ referenceGroup: "protection",
6221
+ skipAsATool: true
6222
+ },
6223
+ "protection.clearEditingRestriction": {
6224
+ memberPath: "protection.clearEditingRestriction",
6225
+ description: "Disable document-level editing restriction by setting enforcement to off. Preserves the protection element and its metadata for round-trip fidelity.",
6226
+ expectedResult: "Returns a ProtectionMutationResult with the updated protection state on success.",
6227
+ requiresDocumentContext: true,
6228
+ metadata: mutationOperation({
6229
+ idempotency: "idempotent",
6230
+ supportsDryRun: true,
6231
+ supportsTrackedMode: false,
6232
+ possibleFailureCodes: ["NO_OP"],
6233
+ throws: T_PROTECTION_MUTATION
6234
+ }),
6235
+ referenceDocPath: "protection/clear-editing-restriction.mdx",
6236
+ referenceGroup: "protection",
6237
+ skipAsATool: true
6238
+ },
6239
+ "permissionRanges.list": {
6240
+ memberPath: "permissionRanges.list",
6241
+ description: "List all permission ranges in the document. Returns only complete paired ranges (both start and end markers present).",
6242
+ expectedResult: "Returns a PermissionRangesListResult containing discovered permission ranges with principal and position data.",
6243
+ requiresDocumentContext: true,
6244
+ metadata: readOperation({ throws: T_PERM_RANGE_READ }),
6245
+ referenceDocPath: "permission-ranges/list.mdx",
6246
+ referenceGroup: "permissionRanges",
6247
+ skipAsATool: true
6248
+ },
6249
+ "permissionRanges.get": {
6250
+ memberPath: "permissionRanges.get",
6251
+ description: "Get detailed information about a specific permission range by ID.",
6252
+ expectedResult: "Returns a PermissionRangeInfo object with the range principal, kind, and positions.",
6253
+ requiresDocumentContext: true,
6254
+ metadata: readOperation({ throws: T_PERM_RANGE_READ }),
6255
+ referenceDocPath: "permission-ranges/get.mdx",
6256
+ referenceGroup: "permissionRanges",
6257
+ skipAsATool: true
6258
+ },
6259
+ "permissionRanges.create": {
6260
+ memberPath: "permissionRanges.create",
6261
+ description: "Create a permission range exception region in the document. Inserts matched permStart/permEnd markers at the target.",
6262
+ expectedResult: "Returns a PermissionRangeMutationResult with the created range info on success.",
6263
+ requiresDocumentContext: true,
6264
+ metadata: mutationOperation({
6265
+ idempotency: "non-idempotent",
6266
+ supportsDryRun: true,
6267
+ supportsTrackedMode: false,
6268
+ possibleFailureCodes: NONE_FAILURES,
6269
+ throws: T_PERM_RANGE_MUTATION
6270
+ }),
6271
+ referenceDocPath: "permission-ranges/create.mdx",
6272
+ referenceGroup: "permissionRanges",
6273
+ skipAsATool: true
6274
+ },
6275
+ "permissionRanges.remove": {
6276
+ memberPath: "permissionRanges.remove",
6277
+ description: "Remove a permission range by ID. Removes whichever markers exist for the given ID (start, end, or both).",
6278
+ expectedResult: "Returns a PermissionRangeRemoveResult indicating success or a failure.",
6279
+ requiresDocumentContext: true,
6280
+ metadata: mutationOperation({
6281
+ idempotency: "idempotent",
6282
+ supportsDryRun: true,
6283
+ supportsTrackedMode: false,
6284
+ possibleFailureCodes: NONE_FAILURES,
6285
+ throws: T_PERM_RANGE_MUTATION
6286
+ }),
6287
+ referenceDocPath: "permission-ranges/remove.mdx",
6288
+ referenceGroup: "permissionRanges",
6289
+ skipAsATool: true
6290
+ },
6291
+ "permissionRanges.updatePrincipal": {
6292
+ memberPath: "permissionRanges.updatePrincipal",
6293
+ description: "Change which principal is allowed to edit a permission range. Updates the principal fields on the start marker.",
6294
+ expectedResult: "Returns a PermissionRangeMutationResult with the updated range info on success.",
6295
+ requiresDocumentContext: true,
6296
+ metadata: mutationOperation({
6297
+ idempotency: "idempotent",
6298
+ supportsDryRun: true,
6299
+ supportsTrackedMode: false,
6300
+ possibleFailureCodes: NONE_FAILURES,
6301
+ throws: T_PERM_RANGE_MUTATION
6302
+ }),
6303
+ referenceDocPath: "permission-ranges/update-principal.mdx",
6304
+ referenceGroup: "permissionRanges",
6305
+ skipAsATool: true
6187
6306
  }
6188
6307
  };
6189
6308
  OPERATION_IDS = Object.freeze(Object.keys(OPERATION_DEFINITIONS));
@@ -12489,6 +12608,77 @@ var init_schemas = __esm(() => {
12489
12608
  output: diffApplyResultSchema,
12490
12609
  success: diffApplyResultSchema,
12491
12610
  failure: { type: "object" }
12611
+ },
12612
+ "protection.get": {
12613
+ input: objectSchema({}),
12614
+ output: objectSchema({
12615
+ editingRestriction: objectSchema({
12616
+ mode: { type: "string", enum: ["none", "readOnly", "comments", "trackedChanges", "forms"] },
12617
+ enforced: { type: "boolean" },
12618
+ runtimeEnforced: { type: "boolean" },
12619
+ passwordProtected: { type: "boolean" },
12620
+ formattingRestricted: { type: "boolean" }
12621
+ }, ["mode", "enforced", "runtimeEnforced", "passwordProtected", "formattingRestricted"]),
12622
+ writeProtection: objectSchema({
12623
+ enabled: { type: "boolean" },
12624
+ passwordProtected: { type: "boolean" }
12625
+ }, ["enabled", "passwordProtected"]),
12626
+ readOnlyRecommended: { type: "boolean" }
12627
+ }, ["editingRestriction", "writeProtection", "readOnlyRecommended"])
12628
+ },
12629
+ "protection.setEditingRestriction": {
12630
+ input: objectSchema({
12631
+ mode: { type: "string", enum: ["readOnly"] },
12632
+ formattingRestricted: { type: "boolean" }
12633
+ }, ["mode"]),
12634
+ output: { type: "object" },
12635
+ success: { type: "object" },
12636
+ failure: { type: "object" }
12637
+ },
12638
+ "protection.clearEditingRestriction": {
12639
+ input: objectSchema({}),
12640
+ output: { type: "object" },
12641
+ success: { type: "object" },
12642
+ failure: { type: "object" }
12643
+ },
12644
+ "permissionRanges.list": {
12645
+ input: refListQuerySchema,
12646
+ output: discoveryOutputSchema
12647
+ },
12648
+ "permissionRanges.get": {
12649
+ input: objectSchema({ id: { type: "string" } }, ["id"]),
12650
+ output: { type: "object" }
12651
+ },
12652
+ "permissionRanges.create": {
12653
+ input: objectSchema({
12654
+ target: selectionTargetSchema,
12655
+ principal: objectSchema({
12656
+ kind: { type: "string", enum: ["everyone", "editor"] },
12657
+ id: { type: "string" }
12658
+ }, ["kind"]),
12659
+ id: { type: "string" }
12660
+ }, ["target", "principal"]),
12661
+ output: { type: "object" },
12662
+ success: { type: "object" },
12663
+ failure: { type: "object" }
12664
+ },
12665
+ "permissionRanges.remove": {
12666
+ input: objectSchema({ id: { type: "string" } }, ["id"]),
12667
+ output: { type: "object" },
12668
+ success: { type: "object" },
12669
+ failure: { type: "object" }
12670
+ },
12671
+ "permissionRanges.updatePrincipal": {
12672
+ input: objectSchema({
12673
+ id: { type: "string" },
12674
+ principal: objectSchema({
12675
+ kind: { type: "string", enum: ["everyone", "editor"] },
12676
+ id: { type: "string" }
12677
+ }, ["kind"])
12678
+ }, ["id", "principal"]),
12679
+ output: { type: "object" },
12680
+ success: { type: "object" },
12681
+ failure: { type: "object" }
12492
12682
  }
12493
12683
  };
12494
12684
  });
@@ -12663,6 +12853,16 @@ var init_reference_doc_map = __esm(() => {
12663
12853
  title: "Diff",
12664
12854
  description: "Snapshot-based document comparison and replay.",
12665
12855
  pagePath: "diff/index.mdx"
12856
+ },
12857
+ protection: {
12858
+ title: "Protection",
12859
+ description: "Document-level protection state and editing restriction operations.",
12860
+ pagePath: "protection/index.mdx"
12861
+ },
12862
+ permissionRanges: {
12863
+ title: "Permission Ranges",
12864
+ description: "Permission range exception operations for protected documents.",
12865
+ pagePath: "permission-ranges/index.mdx"
12666
12866
  }
12667
12867
  };
12668
12868
  REFERENCE_OPERATION_GROUPS = Object.keys(GROUP_METADATA).map((key) => ({
@@ -15335,7 +15535,15 @@ function buildDispatchTable(api) {
15335
15535
  "authorities.entries.remove": (input, options) => api.authorities.entries.remove(input, options),
15336
15536
  "diff.capture": () => api.diff.capture(),
15337
15537
  "diff.compare": (input) => api.diff.compare(input),
15338
- "diff.apply": (input, options) => api.diff.apply(input, options)
15538
+ "diff.apply": (input, options) => api.diff.apply(input, options),
15539
+ "protection.get": (input) => api.protection.get(input),
15540
+ "protection.setEditingRestriction": (input, options) => api.protection.setEditingRestriction(input, options),
15541
+ "protection.clearEditingRestriction": (input, options) => api.protection.clearEditingRestriction(input, options),
15542
+ "permissionRanges.list": (input) => api.permissionRanges.list(input),
15543
+ "permissionRanges.get": (input) => api.permissionRanges.get(input),
15544
+ "permissionRanges.create": (input, options) => api.permissionRanges.create(input, options),
15545
+ "permissionRanges.remove": (input, options) => api.permissionRanges.remove(input, options),
15546
+ "permissionRanges.updatePrincipal": (input, options) => api.permissionRanges.updatePrincipal(input, options)
15339
15547
  };
15340
15548
  }
15341
15549
  var init_invoke = __esm(() => {
@@ -17123,6 +17331,90 @@ var init_bookmarks = __esm(() => {
17123
17331
  init_validation_primitives();
17124
17332
  });
17125
17333
 
17334
+ // ../../packages/document-api/src/protection/protection.ts
17335
+ function validateSetEditingRestrictionInput(input) {
17336
+ if (!input || typeof input !== "object") {
17337
+ throw new DocumentApiValidationError("INVALID_INPUT", "protection.setEditingRestriction requires an object with a mode property.");
17338
+ }
17339
+ const { mode } = input;
17340
+ if (!VALID_SET_MODES.has(mode)) {
17341
+ throw new DocumentApiValidationError("INVALID_INPUT", `protection.setEditingRestriction mode must be 'readOnly'. Received: '${String(mode)}'.`);
17342
+ }
17343
+ }
17344
+ function executeProtectionGet(adapter, _input) {
17345
+ return adapter.get();
17346
+ }
17347
+ function executeSetEditingRestriction(adapter, input, options) {
17348
+ validateSetEditingRestrictionInput(input);
17349
+ return adapter.setEditingRestriction(input, normalizeMutationOptions(options));
17350
+ }
17351
+ function executeClearEditingRestriction(adapter, _input, options) {
17352
+ return adapter.clearEditingRestriction(undefined, normalizeMutationOptions(options));
17353
+ }
17354
+ var VALID_SET_MODES;
17355
+ var init_protection = __esm(() => {
17356
+ init_errors2();
17357
+ VALID_SET_MODES = new Set(["readOnly"]);
17358
+ });
17359
+
17360
+ // ../../packages/document-api/src/permission-ranges/permission-ranges.ts
17361
+ function validatePrincipal(principal, operationName) {
17362
+ if (!principal || typeof principal !== "object") {
17363
+ throw new DocumentApiValidationError("INVALID_INPUT", `${operationName} requires a principal object with a 'kind' property.`);
17364
+ }
17365
+ const p = principal;
17366
+ if (p.kind === "everyone")
17367
+ return;
17368
+ if (p.kind === "editor") {
17369
+ if (typeof p.id !== "string" || p.id.length === 0) {
17370
+ throw new DocumentApiValidationError("INVALID_INPUT", `${operationName} editor principal requires a non-empty id string.`);
17371
+ }
17372
+ return;
17373
+ }
17374
+ throw new DocumentApiValidationError("INVALID_INPUT", `${operationName} principal kind must be 'everyone' or 'editor'. Received: '${String(p.kind)}'.`);
17375
+ }
17376
+ function requireNonEmptyId(id, operationName) {
17377
+ if (typeof id !== "string" || id.length === 0) {
17378
+ throw new DocumentApiValidationError("INVALID_INPUT", `${operationName} requires a non-empty id string.`);
17379
+ }
17380
+ }
17381
+ function executePermissionRangesList(adapter, input) {
17382
+ return adapter.list(input);
17383
+ }
17384
+ function executePermissionRangesGet(adapter, input) {
17385
+ requireNonEmptyId(input?.id, "permissionRanges.get");
17386
+ return adapter.get(input);
17387
+ }
17388
+ function executePermissionRangesCreate(adapter, input, options) {
17389
+ if (!input || typeof input !== "object") {
17390
+ throw new DocumentApiValidationError("INVALID_INPUT", "permissionRanges.create requires an input object.");
17391
+ }
17392
+ const { target, principal } = input;
17393
+ if (!target || typeof target !== "object") {
17394
+ throw new DocumentApiValidationError("INVALID_INPUT", "permissionRanges.create target must be a SelectionTarget object.");
17395
+ }
17396
+ if (target.kind !== "selection" || !target.start || !target.end) {
17397
+ throw new DocumentApiValidationError("INVALID_INPUT", "permissionRanges.create target must have kind 'selection' with start and end points.");
17398
+ }
17399
+ validatePrincipal(principal, "permissionRanges.create");
17400
+ if (input.id !== undefined) {
17401
+ requireNonEmptyId(input.id, "permissionRanges.create");
17402
+ }
17403
+ return adapter.create(input, normalizeMutationOptions(options));
17404
+ }
17405
+ function executePermissionRangesRemove(adapter, input, options) {
17406
+ requireNonEmptyId(input?.id, "permissionRanges.remove");
17407
+ return adapter.remove(input, normalizeMutationOptions(options));
17408
+ }
17409
+ function executePermissionRangesUpdatePrincipal(adapter, input, options) {
17410
+ requireNonEmptyId(input?.id, "permissionRanges.updatePrincipal");
17411
+ validatePrincipal(input?.principal, "permissionRanges.updatePrincipal");
17412
+ return adapter.updatePrincipal(input, normalizeMutationOptions(options));
17413
+ }
17414
+ var init_permission_ranges = __esm(() => {
17415
+ init_errors2();
17416
+ });
17417
+
17126
17418
  // ../../packages/document-api/src/footnotes/footnotes.ts
17127
17419
  function validateFootnoteTarget(target, operationName) {
17128
17420
  assertTargetPresent(target, operationName);
@@ -17538,6 +17830,9 @@ var init_authorities = __esm(() => {
17538
17830
  init_create_location_validator();
17539
17831
  });
17540
17832
 
17833
+ // ../../packages/document-api/src/protection/protection.types.ts
17834
+ var init_protection_types = () => {};
17835
+
17541
17836
  // ../../packages/document-api/src/index.ts
17542
17837
  function executeQueryMatch(adapter, input) {
17543
17838
  if (!input || typeof input !== "object") {
@@ -18696,6 +18991,34 @@ function createDocumentApi(adapters) {
18696
18991
  return executeHistoryRedo(adapters.history);
18697
18992
  }
18698
18993
  },
18994
+ protection: {
18995
+ get(input) {
18996
+ return executeProtectionGet(adapters.protection, input);
18997
+ },
18998
+ setEditingRestriction(input, options) {
18999
+ return executeSetEditingRestriction(adapters.protection, input, options);
19000
+ },
19001
+ clearEditingRestriction(input, options) {
19002
+ return executeClearEditingRestriction(adapters.protection, input, options);
19003
+ }
19004
+ },
19005
+ permissionRanges: {
19006
+ list(input) {
19007
+ return executePermissionRangesList(adapters.permissionRanges, input);
19008
+ },
19009
+ get(input) {
19010
+ return executePermissionRangesGet(adapters.permissionRanges, input);
19011
+ },
19012
+ create(input, options) {
19013
+ return executePermissionRangesCreate(adapters.permissionRanges, input, options);
19014
+ },
19015
+ remove(input, options) {
19016
+ return executePermissionRangesRemove(adapters.permissionRanges, input, options);
19017
+ },
19018
+ updatePrincipal(input, options) {
19019
+ return executePermissionRangesUpdatePrincipal(adapters.permissionRanges, input, options);
19020
+ }
19021
+ },
18699
19022
  invoke(request) {
18700
19023
  if (!Object.prototype.hasOwnProperty.call(dispatch, request.operationId)) {
18701
19024
  throw new Error(`Unknown operationId: "${request.operationId}"`);
@@ -18740,6 +19063,8 @@ var init_src = __esm(() => {
18740
19063
  init_hyperlinks();
18741
19064
  init_content_controls();
18742
19065
  init_bookmarks();
19066
+ init_protection();
19067
+ init_permission_ranges();
18743
19068
  init_footnotes();
18744
19069
  init_cross_refs();
18745
19070
  init_index();
@@ -18761,6 +19086,7 @@ var init_src = __esm(() => {
18761
19086
  init_contract();
18762
19087
  init_capabilities();
18763
19088
  init_inline_semantics();
19089
+ init_protection_types();
18764
19090
  ADAPTER_GATED_PREFIXES = [
18765
19091
  "bookmarks",
18766
19092
  "footnotes",
@@ -62964,7 +63290,7 @@ var init_remark_gfm_z_sDF4ss_es = __esm(() => {
62964
63290
  emptyOptions2 = {};
62965
63291
  });
62966
63292
 
62967
- // ../../packages/superdoc/dist/chunks/SuperConverter-OPfy6vj2.es.js
63293
+ // ../../packages/superdoc/dist/chunks/SuperConverter-CMIR0kxi.es.js
62968
63294
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
62969
63295
  const fieldValue = extension$1.config[field];
62970
63296
  if (typeof fieldValue === "function")
@@ -67660,7 +67986,15 @@ function buildDispatchTable2(api) {
67660
67986
  "authorities.entries.remove": (input, options) => api.authorities.entries.remove(input, options),
67661
67987
  "diff.capture": () => api.diff.capture(),
67662
67988
  "diff.compare": (input) => api.diff.compare(input),
67663
- "diff.apply": (input, options) => api.diff.apply(input, options)
67989
+ "diff.apply": (input, options) => api.diff.apply(input, options),
67990
+ "protection.get": (input) => api.protection.get(input),
67991
+ "protection.setEditingRestriction": (input, options) => api.protection.setEditingRestriction(input, options),
67992
+ "protection.clearEditingRestriction": (input, options) => api.protection.clearEditingRestriction(input, options),
67993
+ "permissionRanges.list": (input) => api.permissionRanges.list(input),
67994
+ "permissionRanges.get": (input) => api.permissionRanges.get(input),
67995
+ "permissionRanges.create": (input, options) => api.permissionRanges.create(input, options),
67996
+ "permissionRanges.remove": (input, options) => api.permissionRanges.remove(input, options),
67997
+ "permissionRanges.updatePrincipal": (input, options) => api.permissionRanges.updatePrincipal(input, options)
67664
67998
  };
67665
67999
  }
67666
68000
  function executeHistoryGet2(adapter) {
@@ -69199,6 +69533,69 @@ function executeBookmarksRemove2(adapter, input, options) {
69199
69533
  validateBookmarkTarget2(input.target, "bookmarks.remove");
69200
69534
  return adapter.remove(input, normalizeMutationOptions2(options));
69201
69535
  }
69536
+ function validateSetEditingRestrictionInput2(input) {
69537
+ if (!input || typeof input !== "object")
69538
+ throw new DocumentApiValidationError2("INVALID_INPUT", "protection.setEditingRestriction requires an object with a mode property.");
69539
+ const { mode } = input;
69540
+ if (!VALID_SET_MODES2.has(mode))
69541
+ throw new DocumentApiValidationError2("INVALID_INPUT", `protection.setEditingRestriction mode must be 'readOnly'. Received: '${String(mode)}'.`);
69542
+ }
69543
+ function executeProtectionGet2(adapter, _input) {
69544
+ return adapter.get();
69545
+ }
69546
+ function executeSetEditingRestriction2(adapter, input, options) {
69547
+ validateSetEditingRestrictionInput2(input);
69548
+ return adapter.setEditingRestriction(input, normalizeMutationOptions2(options));
69549
+ }
69550
+ function executeClearEditingRestriction2(adapter, _input, options) {
69551
+ return adapter.clearEditingRestriction(undefined, normalizeMutationOptions2(options));
69552
+ }
69553
+ function validatePrincipal2(principal, operationName) {
69554
+ if (!principal || typeof principal !== "object")
69555
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${operationName} requires a principal object with a 'kind' property.`);
69556
+ const p = principal;
69557
+ if (p.kind === "everyone")
69558
+ return;
69559
+ if (p.kind === "editor") {
69560
+ if (typeof p.id !== "string" || p.id.length === 0)
69561
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${operationName} editor principal requires a non-empty id string.`);
69562
+ return;
69563
+ }
69564
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${operationName} principal kind must be 'everyone' or 'editor'. Received: '${String(p.kind)}'.`);
69565
+ }
69566
+ function requireNonEmptyId2(id2, operationName) {
69567
+ if (typeof id2 !== "string" || id2.length === 0)
69568
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${operationName} requires a non-empty id string.`);
69569
+ }
69570
+ function executePermissionRangesList2(adapter, input) {
69571
+ return adapter.list(input);
69572
+ }
69573
+ function executePermissionRangesGet2(adapter, input) {
69574
+ requireNonEmptyId2(input?.id, "permissionRanges.get");
69575
+ return adapter.get(input);
69576
+ }
69577
+ function executePermissionRangesCreate2(adapter, input, options) {
69578
+ if (!input || typeof input !== "object")
69579
+ throw new DocumentApiValidationError2("INVALID_INPUT", "permissionRanges.create requires an input object.");
69580
+ const { target, principal } = input;
69581
+ if (!target || typeof target !== "object")
69582
+ throw new DocumentApiValidationError2("INVALID_INPUT", "permissionRanges.create target must be a SelectionTarget object.");
69583
+ if (target.kind !== "selection" || !target.start || !target.end)
69584
+ throw new DocumentApiValidationError2("INVALID_INPUT", "permissionRanges.create target must have kind 'selection' with start and end points.");
69585
+ validatePrincipal2(principal, "permissionRanges.create");
69586
+ if (input.id !== undefined)
69587
+ requireNonEmptyId2(input.id, "permissionRanges.create");
69588
+ return adapter.create(input, normalizeMutationOptions2(options));
69589
+ }
69590
+ function executePermissionRangesRemove2(adapter, input, options) {
69591
+ requireNonEmptyId2(input?.id, "permissionRanges.remove");
69592
+ return adapter.remove(input, normalizeMutationOptions2(options));
69593
+ }
69594
+ function executePermissionRangesUpdatePrincipal2(adapter, input, options) {
69595
+ requireNonEmptyId2(input?.id, "permissionRanges.updatePrincipal");
69596
+ validatePrincipal2(input?.principal, "permissionRanges.updatePrincipal");
69597
+ return adapter.updatePrincipal(input, normalizeMutationOptions2(options));
69598
+ }
69202
69599
  function validateFootnoteTarget2(target, operationName) {
69203
69600
  assertTargetPresent2(target, operationName);
69204
69601
  const t = target;
@@ -70692,6 +71089,34 @@ function createDocumentApi2(adapters) {
70692
71089
  return executeHistoryRedo2(adapters.history);
70693
71090
  }
70694
71091
  },
71092
+ protection: {
71093
+ get(input) {
71094
+ return executeProtectionGet2(adapters.protection, input);
71095
+ },
71096
+ setEditingRestriction(input, options) {
71097
+ return executeSetEditingRestriction2(adapters.protection, input, options);
71098
+ },
71099
+ clearEditingRestriction(input, options) {
71100
+ return executeClearEditingRestriction2(adapters.protection, input, options);
71101
+ }
71102
+ },
71103
+ permissionRanges: {
71104
+ list(input) {
71105
+ return executePermissionRangesList2(adapters.permissionRanges, input);
71106
+ },
71107
+ get(input) {
71108
+ return executePermissionRangesGet2(adapters.permissionRanges, input);
71109
+ },
71110
+ create(input, options) {
71111
+ return executePermissionRangesCreate2(adapters.permissionRanges, input, options);
71112
+ },
71113
+ remove(input, options) {
71114
+ return executePermissionRangesRemove2(adapters.permissionRanges, input, options);
71115
+ },
71116
+ updatePrincipal(input, options) {
71117
+ return executePermissionRangesUpdatePrincipal2(adapters.permissionRanges, input, options);
71118
+ }
71119
+ },
70695
71120
  invoke(request) {
70696
71121
  if (!Object.prototype.hasOwnProperty.call(dispatch, request.operationId))
70697
71122
  throw new Error(`Unknown operationId: "${request.operationId}"`);
@@ -94135,6 +94560,253 @@ function compoundMutation(request) {
94135
94560
  state._partPublisher?.flush();
94136
94561
  return { success };
94137
94562
  }
94563
+ function findSettingsRoot(part) {
94564
+ if (part.name === "w:settings")
94565
+ return part;
94566
+ if (!Array.isArray(part.elements))
94567
+ return null;
94568
+ return part.elements.find((entry) => entry.name === "w:settings") ?? null;
94569
+ }
94570
+ function ensureSettingsRootElements(settingsRoot) {
94571
+ if (!Array.isArray(settingsRoot.elements))
94572
+ settingsRoot.elements = [];
94573
+ return settingsRoot.elements;
94574
+ }
94575
+ function readSettingsRoot(converter) {
94576
+ const part = converter.convertedXml?.[SETTINGS_PART_PATH];
94577
+ if (!part)
94578
+ return null;
94579
+ return findSettingsRoot(part);
94580
+ }
94581
+ function ensureSettingsRoot(part) {
94582
+ const settingsRoot = findSettingsRoot(part);
94583
+ if (settingsRoot)
94584
+ return settingsRoot;
94585
+ const fallbackRoot = {
94586
+ type: "element",
94587
+ name: "w:settings",
94588
+ elements: []
94589
+ };
94590
+ if (!Array.isArray(part.elements))
94591
+ part.elements = [];
94592
+ part.elements.push(fallbackRoot);
94593
+ return fallbackRoot;
94594
+ }
94595
+ function readDefaultTableStyle(settingsRoot) {
94596
+ const el = settingsRoot.elements?.find((entry) => entry.name === "w:defaultTableStyle");
94597
+ if (!el)
94598
+ return null;
94599
+ const val = el.attributes?.["w:val"];
94600
+ return typeof val === "string" && val.length > 0 ? val : null;
94601
+ }
94602
+ function setDefaultTableStyle(settingsRoot, styleId) {
94603
+ const elements = ensureSettingsRootElements(settingsRoot);
94604
+ const idx = elements.findIndex((entry) => entry.name === "w:defaultTableStyle");
94605
+ const newEl = {
94606
+ type: "element",
94607
+ name: "w:defaultTableStyle",
94608
+ attributes: { "w:val": styleId },
94609
+ elements: []
94610
+ };
94611
+ if (idx !== -1)
94612
+ elements[idx] = newEl;
94613
+ else
94614
+ elements.push(newEl);
94615
+ }
94616
+ function removeDefaultTableStyle(settingsRoot) {
94617
+ settingsRoot.elements = ensureSettingsRootElements(settingsRoot).filter((entry) => entry.name !== "w:defaultTableStyle");
94618
+ }
94619
+ function hasOddEvenHeadersFooters(settingsRoot) {
94620
+ return settingsRoot.elements?.some((entry) => entry.name === "w:evenAndOddHeaders") === true;
94621
+ }
94622
+ function setOddEvenHeadersFooters(settingsRoot, enabled) {
94623
+ const elements = ensureSettingsRootElements(settingsRoot);
94624
+ const hadFlag = hasOddEvenHeadersFooters(settingsRoot);
94625
+ if (enabled) {
94626
+ if (!hadFlag)
94627
+ elements.push({
94628
+ type: "element",
94629
+ name: "w:evenAndOddHeaders",
94630
+ elements: []
94631
+ });
94632
+ } else
94633
+ settingsRoot.elements = elements.filter((entry) => entry.name !== "w:evenAndOddHeaders");
94634
+ return hadFlag !== hasOddEvenHeadersFooters(settingsRoot);
94635
+ }
94636
+ function hasUpdateFields(settingsRoot) {
94637
+ const el = settingsRoot.elements?.find((entry) => entry.name === "w:updateFields");
94638
+ if (!el)
94639
+ return false;
94640
+ const val = el.attributes?.["w:val"];
94641
+ return val === "true" || val === "1" || val === true;
94642
+ }
94643
+ function setUpdateFields(settingsRoot, enabled) {
94644
+ const elements = ensureSettingsRootElements(settingsRoot);
94645
+ const idx = elements.findIndex((entry) => entry.name === "w:updateFields");
94646
+ if (enabled) {
94647
+ const newEl = {
94648
+ type: "element",
94649
+ name: "w:updateFields",
94650
+ attributes: { "w:val": "true" },
94651
+ elements: []
94652
+ };
94653
+ if (idx !== -1)
94654
+ elements[idx] = newEl;
94655
+ else
94656
+ elements.push(newEl);
94657
+ } else if (idx !== -1)
94658
+ elements.splice(idx, 1);
94659
+ }
94660
+ function isXmlTrue(value) {
94661
+ return value === "1" || value === 1 || value === "true" || value === "on" || value === true;
94662
+ }
94663
+ function hasVerifierFields(attrs) {
94664
+ return !!(attrs["w:cryptAlgorithmSid"] || attrs["w:hash"] || attrs["w:salt"] || attrs["w:cryptProviderType"] || attrs["w:cryptAlgorithmType"] || attrs["w:cryptAlgorithmClass"] || attrs["w:cryptSpinCount"]);
94665
+ }
94666
+ function parseProtectionState(settingsRoot) {
94667
+ if (!settingsRoot)
94668
+ return { ...DEFAULT_PROTECTION_STATE };
94669
+ const elements = settingsRoot.elements ?? [];
94670
+ const docProtEl = elements.find((el) => el.name === "w:documentProtection");
94671
+ const dpAttrs = docProtEl?.attributes ?? {};
94672
+ const rawMode = dpAttrs["w:edit"];
94673
+ const mode = rawMode && VALID_EDIT_MODES.has(rawMode) ? rawMode : "none";
94674
+ const enforced = isXmlTrue(dpAttrs["w:enforcement"]);
94675
+ const formattingRestricted = isXmlTrue(dpAttrs["w:formatting"]);
94676
+ const passwordProtected = docProtEl ? hasVerifierFields(dpAttrs) : false;
94677
+ const runtimeEnforced = mode === "readOnly" && enforced;
94678
+ const writeProt = elements.find((el) => el.name === "w:writeProtection");
94679
+ const wpAttrs = writeProt?.attributes ?? {};
94680
+ const writeEnabled = !!writeProt;
94681
+ const writePasswordProtected = writeProt ? hasVerifierFields(wpAttrs) : false;
94682
+ const readOnlyRecommended = isXmlTrue(wpAttrs["w:recommended"]);
94683
+ return {
94684
+ editingRestriction: {
94685
+ mode,
94686
+ enforced,
94687
+ runtimeEnforced,
94688
+ passwordProtected,
94689
+ formattingRestricted
94690
+ },
94691
+ writeProtection: {
94692
+ enabled: writeEnabled,
94693
+ passwordProtected: writePasswordProtected
94694
+ },
94695
+ readOnlyRecommended
94696
+ };
94697
+ }
94698
+ function setDocumentProtection(settingsRoot, opts) {
94699
+ const elements = ensureSettingsRootElements(settingsRoot);
94700
+ const idx = elements.findIndex((el) => el.name === "w:documentProtection");
94701
+ const attrs = {
94702
+ ...idx !== -1 ? { ...elements[idx].attributes ?? {} } : {},
94703
+ "w:edit": opts.mode,
94704
+ "w:enforcement": opts.enforced ? "1" : "0"
94705
+ };
94706
+ if (opts.formattingRestricted !== undefined)
94707
+ attrs["w:formatting"] = opts.formattingRestricted ? "1" : "0";
94708
+ const newEl = {
94709
+ type: "element",
94710
+ name: "w:documentProtection",
94711
+ attributes: attrs,
94712
+ elements: []
94713
+ };
94714
+ if (idx !== -1)
94715
+ elements[idx] = newEl;
94716
+ else
94717
+ elements.push(newEl);
94718
+ }
94719
+ function clearDocumentProtectionEnforcement(settingsRoot) {
94720
+ const el = (settingsRoot.elements ?? []).find((e) => e.name === "w:documentProtection");
94721
+ if (!el)
94722
+ return;
94723
+ if (!el.attributes)
94724
+ el.attributes = {};
94725
+ el.attributes["w:enforcement"] = "0";
94726
+ }
94727
+ function getProtectionStorage(editor) {
94728
+ return editor?.storage?.protection;
94729
+ }
94730
+ function isReadOnlyProtectionRuntimeEnforced(editor) {
94731
+ const storage = getProtectionStorage(editor);
94732
+ if (!storage?.initialized)
94733
+ return false;
94734
+ return storage.state?.editingRestriction?.runtimeEnforced === true;
94735
+ }
94736
+ function applyEffectiveEditability(editor, opts = {}) {
94737
+ if (!editor || editor.isDestroyed)
94738
+ return;
94739
+ if (opts.refilterRanges !== false)
94740
+ refilterAllowedRanges(editor);
94741
+ const protectionEnforced = isReadOnlyProtectionRuntimeEnforced(editor);
94742
+ const hasAllowedRanges = editor.storage?.permissionRanges?.hasAllowedRanges === true;
94743
+ const documentMode = editor.options?.documentMode;
94744
+ const storage = getProtectionStorage(editor);
94745
+ if (protectionEnforced) {
94746
+ if (storage && storage.editableBaseline === null)
94747
+ storage.editableBaseline = editor.isEditable;
94748
+ const shouldBeEditable = hasAllowedRanges;
94749
+ if (editor.isEditable !== shouldBeEditable)
94750
+ editor.setEditable(shouldBeEditable, false);
94751
+ } else {
94752
+ const baseline = storage?.editableBaseline ?? null;
94753
+ if (storage)
94754
+ storage.editableBaseline = null;
94755
+ if (documentMode === "viewing") {
94756
+ if (editor.isEditable !== false)
94757
+ editor.setEditable(false, false);
94758
+ } else if (baseline !== null && editor.isEditable !== baseline)
94759
+ editor.setEditable(baseline, false);
94760
+ }
94761
+ }
94762
+ function refilterAllowedRanges(editor) {
94763
+ const storage = editor?.storage?.permissionRanges;
94764
+ if (!storage)
94765
+ return;
94766
+ const allRanges = storage.allRanges;
94767
+ if (!Array.isArray(allRanges))
94768
+ return;
94769
+ if (!isReadOnlyProtectionRuntimeEnforced(editor)) {
94770
+ storage.allowedRanges = [];
94771
+ storage.hasAllowedRanges = false;
94772
+ storage.ranges = [];
94773
+ return;
94774
+ }
94775
+ const allowedIdentifiers = buildAllowedIdentifierSetFromEditor(editor);
94776
+ const filtered = allRanges.filter((entry) => isRangeAllowedForPrincipal(entry, allowedIdentifiers));
94777
+ storage.allowedRanges = filtered;
94778
+ storage.hasAllowedRanges = filtered.length > 0;
94779
+ storage.ranges = filtered;
94780
+ }
94781
+ function buildAllowedIdentifierSetFromEditor(editor) {
94782
+ const user = editor?.options?.user;
94783
+ if (!user)
94784
+ return /* @__PURE__ */ new Set;
94785
+ const principals = user.permissionPrincipals;
94786
+ if (Array.isArray(principals))
94787
+ return new Set(principals.map((p) => typeof p === "string" ? p.trim().toLowerCase() : "").filter(Boolean));
94788
+ const email = typeof user.email === "string" ? user.email.trim().toLowerCase() : "";
94789
+ if (!email)
94790
+ return /* @__PURE__ */ new Set;
94791
+ const [localPart, domain2] = email.split("@");
94792
+ if (!localPart || !domain2)
94793
+ return /* @__PURE__ */ new Set;
94794
+ return new Set([`${domain2}\\${localPart}`]);
94795
+ }
94796
+ function isRangeAllowedForPrincipal(entry, allowedIdentifiers) {
94797
+ if (entry.principal) {
94798
+ if (entry.principal.kind === "everyone")
94799
+ return true;
94800
+ if (entry.principal.kind === "editor") {
94801
+ const id2 = typeof entry.principal.id === "string" ? entry.principal.id.trim().toLowerCase() : "";
94802
+ return id2 ? allowedIdentifiers.has(id2) : false;
94803
+ }
94804
+ }
94805
+ if ((typeof entry.edGrp === "string" ? entry.edGrp.trim().toLowerCase() : "") === "everyone")
94806
+ return true;
94807
+ const ed = typeof entry.ed === "string" ? entry.ed.trim().toLowerCase() : "";
94808
+ return ed ? allowedIdentifiers.has(ed) : false;
94809
+ }
94138
94810
  function handleNumberingInvalidation(editor, _event) {
94139
94811
  try {
94140
94812
  editor.view?.dispatch?.(editor.state.tr);
@@ -94155,11 +94827,29 @@ function handleNotesInvalidation(editor, _event) {
94155
94827
  editor.view?.dispatch?.(tr);
94156
94828
  } catch {}
94157
94829
  }
94830
+ function handleSettingsInvalidation(editor, event) {
94831
+ if (event.source.startsWith("protection."))
94832
+ return;
94833
+ const converter = editor.converter;
94834
+ if (!converter)
94835
+ return;
94836
+ const newState = parseProtectionState(readSettingsRoot(converter));
94837
+ const protStorage = getProtectionStorage(editor);
94838
+ if (protStorage)
94839
+ protStorage.state = newState;
94840
+ applyEffectiveEditability(editor);
94841
+ editor.emit("protectionChanged", {
94842
+ editor,
94843
+ state: newState,
94844
+ source: "remote-part-sync"
94845
+ });
94846
+ }
94158
94847
  function registerStaticInvalidationHandlers() {
94159
94848
  registerInvalidationHandler("word/numbering.xml", handleNumberingInvalidation);
94160
94849
  registerInvalidationHandler("word/_rels/document.xml.rels", handleRelationshipsInvalidation);
94161
94850
  registerInvalidationHandler("word/footnotes.xml", handleNotesInvalidation);
94162
94851
  registerInvalidationHandler("word/endnotes.xml", handleNotesInvalidation);
94852
+ registerInvalidationHandler("word/settings.xml", handleSettingsInvalidation);
94163
94853
  }
94164
94854
  function registerHeaderFooterInvalidation(partId) {
94165
94855
  registerInvalidationHandler(partId, handleHeaderFooterInvalidation);
@@ -96612,103 +97302,6 @@ function refreshAllStatFields(editor) {
96612
97302
  }
96613
97303
  return cacheMap;
96614
97304
  }
96615
- function findSettingsRoot(part) {
96616
- if (part.name === "w:settings")
96617
- return part;
96618
- if (!Array.isArray(part.elements))
96619
- return null;
96620
- return part.elements.find((entry) => entry.name === "w:settings") ?? null;
96621
- }
96622
- function ensureSettingsRootElements(settingsRoot) {
96623
- if (!Array.isArray(settingsRoot.elements))
96624
- settingsRoot.elements = [];
96625
- return settingsRoot.elements;
96626
- }
96627
- function readSettingsRoot(converter) {
96628
- const part = converter.convertedXml?.[SETTINGS_PART_PATH];
96629
- if (!part)
96630
- return null;
96631
- return findSettingsRoot(part);
96632
- }
96633
- function ensureSettingsRoot(part) {
96634
- const settingsRoot = findSettingsRoot(part);
96635
- if (settingsRoot)
96636
- return settingsRoot;
96637
- const fallbackRoot = {
96638
- type: "element",
96639
- name: "w:settings",
96640
- elements: []
96641
- };
96642
- if (!Array.isArray(part.elements))
96643
- part.elements = [];
96644
- part.elements.push(fallbackRoot);
96645
- return fallbackRoot;
96646
- }
96647
- function readDefaultTableStyle(settingsRoot) {
96648
- const el = settingsRoot.elements?.find((entry) => entry.name === "w:defaultTableStyle");
96649
- if (!el)
96650
- return null;
96651
- const val = el.attributes?.["w:val"];
96652
- return typeof val === "string" && val.length > 0 ? val : null;
96653
- }
96654
- function setDefaultTableStyle(settingsRoot, styleId) {
96655
- const elements = ensureSettingsRootElements(settingsRoot);
96656
- const idx = elements.findIndex((entry) => entry.name === "w:defaultTableStyle");
96657
- const newEl = {
96658
- type: "element",
96659
- name: "w:defaultTableStyle",
96660
- attributes: { "w:val": styleId },
96661
- elements: []
96662
- };
96663
- if (idx !== -1)
96664
- elements[idx] = newEl;
96665
- else
96666
- elements.push(newEl);
96667
- }
96668
- function removeDefaultTableStyle(settingsRoot) {
96669
- settingsRoot.elements = ensureSettingsRootElements(settingsRoot).filter((entry) => entry.name !== "w:defaultTableStyle");
96670
- }
96671
- function hasOddEvenHeadersFooters(settingsRoot) {
96672
- return settingsRoot.elements?.some((entry) => entry.name === "w:evenAndOddHeaders") === true;
96673
- }
96674
- function setOddEvenHeadersFooters(settingsRoot, enabled) {
96675
- const elements = ensureSettingsRootElements(settingsRoot);
96676
- const hadFlag = hasOddEvenHeadersFooters(settingsRoot);
96677
- if (enabled) {
96678
- if (!hadFlag)
96679
- elements.push({
96680
- type: "element",
96681
- name: "w:evenAndOddHeaders",
96682
- elements: []
96683
- });
96684
- } else
96685
- settingsRoot.elements = elements.filter((entry) => entry.name !== "w:evenAndOddHeaders");
96686
- return hadFlag !== hasOddEvenHeadersFooters(settingsRoot);
96687
- }
96688
- function hasUpdateFields(settingsRoot) {
96689
- const el = settingsRoot.elements?.find((entry) => entry.name === "w:updateFields");
96690
- if (!el)
96691
- return false;
96692
- const val = el.attributes?.["w:val"];
96693
- return val === "true" || val === "1" || val === true;
96694
- }
96695
- function setUpdateFields(settingsRoot, enabled) {
96696
- const elements = ensureSettingsRootElements(settingsRoot);
96697
- const idx = elements.findIndex((entry) => entry.name === "w:updateFields");
96698
- if (enabled) {
96699
- const newEl = {
96700
- type: "element",
96701
- name: "w:updateFields",
96702
- attributes: { "w:val": "true" },
96703
- elements: []
96704
- };
96705
- if (idx !== -1)
96706
- elements[idx] = newEl;
96707
- else
96708
- elements.push(newEl);
96709
- } else if (idx !== -1)
96710
- elements.splice(idx, 1);
96711
- }
96712
97305
  function getLocalName(name) {
96713
97306
  if (!name || typeof name !== "string")
96714
97307
  return "";
@@ -99070,7 +99663,7 @@ var isRegExp = (value) => {
99070
99663
  tracked: false,
99071
99664
  carrier: runAttributeCarrier2(runPropertyKey ?? key),
99072
99665
  schema
99073
- }), INLINE_PROPERTY_REGISTRY2, INLINE_PROPERTY_KEY_SET2, INLINE_PROPERTY_BY_KEY2, UNDERLINE_OBJECT_ALLOWED_KEYS2, SHADING_ALLOWED_KEYS2, BORDER_ALLOWED_KEYS2, FIT_TEXT_ALLOWED_KEYS2, LANG_ALLOWED_KEYS2, RFONTS_ALLOWED_KEYS2, EAST_ASIAN_LAYOUT_ALLOWED_KEYS2, STYLISTIC_SET_ALLOWED_KEYS2, VERT_ALIGN_VALUES2, PROPERTY_VALIDATOR_MAP2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_NOT_FOUND_COMMAND2, T_IMAGE_COMMAND2, T_CC_READ2, T_CC_MUTATION2, T_CC_TYPED2, T_CC_TYPED_READ2, T_CC_RAW2, T_QUERY_MATCH2, T_SECTION_CREATE2, T_SECTION_READ2, T_PARAGRAPH_MUTATION2, T_SECTION_MUTATION2, T_SECTION_SETTINGS_MUTATION2, T_HEADER_FOOTER_MUTATION2, T_STORY2, T_REF_READ_LIST2, T_REF_MUTATION2, T_REF_MUTATION_REMOVE2, T_REF_INSERT2, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG3, PARAGRAPH_ALIGNMENTS2, TAB_STOP_ALIGNMENTS2, TAB_STOP_LEADERS2, BORDER_SIDES2, CLEAR_BORDER_SIDES2, LINE_RULES2, PARAGRAPH_DIRECTIONS2, ALIGNMENT_POLICIES2, PARAGRAPH_BLOCK_TYPES2, SET_STYLE_KEYS2, CLEAR_STYLE_KEYS2, RESET_DIRECT_FORMATTING_KEYS2, SET_ALIGNMENT_KEYS2, CLEAR_ALIGNMENT_KEYS2, SET_INDENTATION_KEYS2, CLEAR_INDENTATION_KEYS2, SET_SPACING_KEYS2, CLEAR_SPACING_KEYS2, SET_KEEP_OPTIONS_KEYS2, SET_OUTLINE_LEVEL_KEYS2, SET_FLOW_OPTIONS_KEYS2, SET_TAB_STOP_KEYS2, CLEAR_TAB_STOP_KEYS2, CLEAR_ALL_TAB_STOPS_KEYS2, SET_BORDER_KEYS2, CLEAR_BORDER_KEYS2, SET_SHADING_KEYS2, CLEAR_SHADING_KEYS2, SET_DIRECTION_KEYS2, CLEAR_DIRECTION_KEYS2, ST_ON_OFF_ON_VALUES2, ST_ON_OFF_OFF_VALUES2, ST_UNDERLINE_VALUES2, ST_UNDERLINE_VALUE_SET2, ST_VERTICAL_ALIGN_RUN2, ST_EM2, ST_TEXT_ALIGNMENT2, ST_TEXT_DIRECTION2, ST_TEXTBOX_TIGHT_WRAP2, ST_TEXT_TRANSFORM2, ST_JUSTIFICATION2, FONT_FAMILY_SCHEMA2, COLOR_SCHEMA2, SPACING_SCHEMA2, INDENT_SCHEMA2, UNDERLINE_SCHEMA2, BORDER_PROPERTIES_SCHEMA2, SHADING_SCHEMA2, LANG_SCHEMA2, EAST_ASIAN_LAYOUT_SCHEMA2, FIT_TEXT_SCHEMA2, NUMBERING_PROPERTIES_SCHEMA2, FRAME_PR_SCHEMA2, PARAGRAPH_BORDERS_SCHEMA2, TAB_STOP_SCHEMA2, PROPERTY_REGISTRY2, ALLOWED_KEYS_BY_CHANNEL2, PROPERTY_INDEX2, EXCLUDED_KEYS2, INPUT_ALLOWED_KEYS2, TARGET_ALLOWED_KEYS2, OPTIONS_ALLOWED_KEYS2, VALID_CHANNELS2, Z_ORDER_RELATIVE_HEIGHT_MAX2 = 4294967295, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, tableAddressSchema2, tableRowAddressSchema2, tableCellAddressSchema2, tableOrCellAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, paragraphTargetSchema2, sectionAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, entityAddressSchema2, selectionTargetSchema2, deleteBehaviorSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationRangeSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, storyLocatorSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, textSelectorSchema2, nodeSelectorSchema2, sdMutationResolutionSchema2, sdMutationSuccessSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, documentStylesSchema2, documentDefaultsSchema2, listKindSchema2, listInsertPositionSchema2, sectionBreakTypeSchema2, sectionOrientationSchema2, sectionVerticalAlignSchema2, sectionDirectionSchema2, sectionHeaderFooterKindSchema2, sectionHeaderFooterVariantSchema2, sectionLineNumberRestartSchema2, sectionPageNumberFormatSchema2, sectionRangeDomainSchema2, sectionPageMarginsSchema2, sectionHeaderFooterMarginsSchema2, sectionPageSetupSchema2, sectionColumnsSchema2, sectionLineNumberingSchema2, sectionPageNumberingSchema2, sectionHeaderFooterRefsSchema2, sectionBorderSpecSchema2, sectionPageBordersSchema2, sectionMutationSuccessSchema2, documentMutationSuccessSchema2, paragraphMutationTargetSchema2, paragraphMutationSuccessSchema2, createSectionBreakSuccessSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, inlinePropertyCapabilitySchema2, formatCapabilitiesSchema2, planEngineCapabilitiesSchema2, nullableTableBorderSpecSchema2, sdFragmentSchema2, placementSchema2, nestingPolicySchema2, tableCreateLocationSchema2, formatInlineAliasOperationSchemas2, tocMutationFailureSchema2, tocMutationSuccessSchema2, tocEntryMutationFailureSchema2, tocEntryMutationSuccessSchema2, hyperlinkTargetSchema2, hyperlinkReadPropertiesSchema2, hyperlinkSpecSchema2, hyperlinkPatchSchema2, hyperlinkDomainSchema2, hyperlinkMutationSuccessSchema2, hyperlinkMutationFailureSchema2, contentControlTargetSchema2, contentControlMutationSuccessSchema2, contentControlMutationFailureSchema2, ccListResultSchema2, ccInfoSchema2, refFailureSchema2, bookmarkAddressSchema2, bookmarkMutation2, footnoteAddressSchema2, footnoteConfigScopeSchema2, footnoteNumberingSchema2, footnoteMutation2, footnoteConfig2, crossRefAddressSchema2, crossRefTargetSchema2, crossRefDisplaySchema2, crossRefMutation2, indexAddressSchema2, indexEntryAddressSchema2, indexConfigSchema2, indexEntryDataSchema2, indexEntryPatchSchema2, indexMutation2, indexEntryMutation2, captionAddressSchema2, captionMutation2, captionConfig2, fieldAddressSchema2, fieldMutation2, citationAddressSchema2, citationSourceAddressSchema2, bibliographyAddressSchema2, citationMutation2, citationSourceMutation2, bibliographyMutation2, citationPersonSchema2, citationSourceFieldsSchema2, tocCreateLocationSchema2, authoritiesAddressSchema2, authorityEntryAddressSchema2, authoritiesConfigSchema2, authorityEntryDataSchema2, authorityEntryPatchSchema2, authoritiesMutation2, authorityEntryMutation2, diffCoverageSchema2, diffSummarySchema2, diffSnapshotSchema2, diffPayloadSchema2, GROUP_METADATA2, STEP_OP_CATALOG_UNFROZEN2, PUBLIC_STEP_OP_CATALOG_UNFROZEN2, PUBLIC_MUTATION_STEP_OP_IDS2, PUBLIC_MUTATION_STEP_OP_SET2, CAPABILITY_REASON_CODES, VALID_EDGE_VALUES2, VALID_EDGE_NODE_TYPES2, VALID_DOCUMENT_EDGES2, VALID_REF_BOUNDARIES2, VALID_ANCHOR_KINDS2, RESOLVE_RANGE_ALLOWED_KEYS2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, VALID_BEHAVIORS2, CONTENT_KIND_SET2, INLINE_KIND_SET2, LEGACY_TOP_LEVEL_TYPES2, TEXT_INSERT_ALLOWED_KEYS2, STRUCTURAL_INSERT_ALLOWED_KEYS2, VALID_INSERT_TYPES2, LIST_KINDS2, LIST_INSERT_POSITIONS2, JOIN_DIRECTIONS2, MUTATION_SCOPES2, LEVEL_ALIGNMENTS2, TRAILING_CHARACTERS2, LIST_PRESET_IDS2, VALID_BLOCK_NODE_TYPES$1, VALID_LIST_KINDS2, VALID_INSERT_POSITIONS2, VALID_JOIN_DIRECTIONS2, VALID_MUTATION_SCOPES2, VALID_LEVEL_ALIGNMENTS2, VALID_TRAILING_CHARACTERS2, VALID_LIST_PRESETS2, VALID_CONTINUITY_VALUES2, VALID_SEQUENCE_MODES2, VALID_LIST_CREATE_MODES2, TEXT_REPLACE_ALLOWED_KEYS2, STRUCTURAL_REPLACE_ALLOWED_KEYS2, VALID_HEADING_LEVELS2, SECTION_BREAK_TYPES$1, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, VALID_BLOCK_NODE_TYPES3, SNAPSHOT_VERSION2 = "sd-diff-snapshot/v1", PAYLOAD_VERSION2 = "sd-diff-payload/v1", VALID_STYLE_OPTION_FLAGS2, TABLE_BORDER_COLOR_PATTERN2, VALID_APPLY_TO_VALUES2, VALID_BORDER_EDGE_KEYS2, HEADER_FOOTER_KINDS$1, HEADER_FOOTER_VARIANTS$1, DEFAULT_SECTIONS_LIST_LIMIT2 = 250, SECTION_BREAK_TYPES3, SECTION_ORIENTATIONS2, SECTION_VERTICAL_ALIGNS2, SECTION_DIRECTIONS2, HEADER_FOOTER_KINDS3, HEADER_FOOTER_VARIANTS3, LINE_NUMBER_RESTARTS2, PAGE_NUMBER_FORMATS2, PAGE_BORDER_DISPLAYS2, PAGE_BORDER_OFFSET_FROM_VALUES2, PAGE_BORDER_Z_ORDER_VALUES2, VALID_WRAP_TYPES2, VALID_WRAP_SIDES2, VALID_IMAGE_SIZE_UNITS2, VALID_TOC_UPDATE_MODES2, EDIT_ENTRY_PATCH_ALLOWED_KEYS2, PATCH_FIELDS2, CONTENT_CONTROL_TYPES2, LOCK_MODES2, CONTENT_CONTROL_APPEARANCES2, VALID_NODE_KINDS2, VALID_LOCK_MODES$1, VALID_CC_TYPES2, VALID_CC_APPEARANCES2, VALID_CONTENT_FORMATS2, VALID_RAW_PATCH_OPS2, VALID_CREATE_LOCATION_KINDS2, ADAPTER_GATED_PREFIXES2, _buffers, _defaultCollectionId = null, _nextCollectionId = 1, generateV2HandlerEntity = (handlerName, translator$216) => ({
99666
+ }), INLINE_PROPERTY_REGISTRY2, INLINE_PROPERTY_KEY_SET2, INLINE_PROPERTY_BY_KEY2, UNDERLINE_OBJECT_ALLOWED_KEYS2, SHADING_ALLOWED_KEYS2, BORDER_ALLOWED_KEYS2, FIT_TEXT_ALLOWED_KEYS2, LANG_ALLOWED_KEYS2, RFONTS_ALLOWED_KEYS2, EAST_ASIAN_LAYOUT_ALLOWED_KEYS2, STYLISTIC_SET_ALLOWED_KEYS2, VERT_ALIGN_VALUES2, PROPERTY_VALIDATOR_MAP2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_NOT_FOUND_COMMAND2, T_IMAGE_COMMAND2, T_CC_READ2, T_CC_MUTATION2, T_CC_TYPED2, T_CC_TYPED_READ2, T_CC_RAW2, T_QUERY_MATCH2, T_SECTION_CREATE2, T_SECTION_READ2, T_PARAGRAPH_MUTATION2, T_SECTION_MUTATION2, T_SECTION_SETTINGS_MUTATION2, T_HEADER_FOOTER_MUTATION2, T_STORY2, T_REF_READ_LIST2, T_REF_MUTATION2, T_REF_MUTATION_REMOVE2, T_REF_INSERT2, T_PROTECTION_READ2, T_PROTECTION_MUTATION2, T_PERM_RANGE_READ2, T_PERM_RANGE_MUTATION2, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG3, PARAGRAPH_ALIGNMENTS2, TAB_STOP_ALIGNMENTS2, TAB_STOP_LEADERS2, BORDER_SIDES2, CLEAR_BORDER_SIDES2, LINE_RULES2, PARAGRAPH_DIRECTIONS2, ALIGNMENT_POLICIES2, PARAGRAPH_BLOCK_TYPES2, SET_STYLE_KEYS2, CLEAR_STYLE_KEYS2, RESET_DIRECT_FORMATTING_KEYS2, SET_ALIGNMENT_KEYS2, CLEAR_ALIGNMENT_KEYS2, SET_INDENTATION_KEYS2, CLEAR_INDENTATION_KEYS2, SET_SPACING_KEYS2, CLEAR_SPACING_KEYS2, SET_KEEP_OPTIONS_KEYS2, SET_OUTLINE_LEVEL_KEYS2, SET_FLOW_OPTIONS_KEYS2, SET_TAB_STOP_KEYS2, CLEAR_TAB_STOP_KEYS2, CLEAR_ALL_TAB_STOPS_KEYS2, SET_BORDER_KEYS2, CLEAR_BORDER_KEYS2, SET_SHADING_KEYS2, CLEAR_SHADING_KEYS2, SET_DIRECTION_KEYS2, CLEAR_DIRECTION_KEYS2, ST_ON_OFF_ON_VALUES2, ST_ON_OFF_OFF_VALUES2, ST_UNDERLINE_VALUES2, ST_UNDERLINE_VALUE_SET2, ST_VERTICAL_ALIGN_RUN2, ST_EM2, ST_TEXT_ALIGNMENT2, ST_TEXT_DIRECTION2, ST_TEXTBOX_TIGHT_WRAP2, ST_TEXT_TRANSFORM2, ST_JUSTIFICATION2, FONT_FAMILY_SCHEMA2, COLOR_SCHEMA2, SPACING_SCHEMA2, INDENT_SCHEMA2, UNDERLINE_SCHEMA2, BORDER_PROPERTIES_SCHEMA2, SHADING_SCHEMA2, LANG_SCHEMA2, EAST_ASIAN_LAYOUT_SCHEMA2, FIT_TEXT_SCHEMA2, NUMBERING_PROPERTIES_SCHEMA2, FRAME_PR_SCHEMA2, PARAGRAPH_BORDERS_SCHEMA2, TAB_STOP_SCHEMA2, PROPERTY_REGISTRY2, ALLOWED_KEYS_BY_CHANNEL2, PROPERTY_INDEX2, EXCLUDED_KEYS2, INPUT_ALLOWED_KEYS2, TARGET_ALLOWED_KEYS2, OPTIONS_ALLOWED_KEYS2, VALID_CHANNELS2, Z_ORDER_RELATIVE_HEIGHT_MAX2 = 4294967295, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, tableAddressSchema2, tableRowAddressSchema2, tableCellAddressSchema2, tableOrCellAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, paragraphTargetSchema2, sectionAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, entityAddressSchema2, selectionTargetSchema2, deleteBehaviorSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationRangeSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, storyLocatorSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, textSelectorSchema2, nodeSelectorSchema2, sdMutationResolutionSchema2, sdMutationSuccessSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, documentStylesSchema2, documentDefaultsSchema2, listKindSchema2, listInsertPositionSchema2, sectionBreakTypeSchema2, sectionOrientationSchema2, sectionVerticalAlignSchema2, sectionDirectionSchema2, sectionHeaderFooterKindSchema2, sectionHeaderFooterVariantSchema2, sectionLineNumberRestartSchema2, sectionPageNumberFormatSchema2, sectionRangeDomainSchema2, sectionPageMarginsSchema2, sectionHeaderFooterMarginsSchema2, sectionPageSetupSchema2, sectionColumnsSchema2, sectionLineNumberingSchema2, sectionPageNumberingSchema2, sectionHeaderFooterRefsSchema2, sectionBorderSpecSchema2, sectionPageBordersSchema2, sectionMutationSuccessSchema2, documentMutationSuccessSchema2, paragraphMutationTargetSchema2, paragraphMutationSuccessSchema2, createSectionBreakSuccessSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, inlinePropertyCapabilitySchema2, formatCapabilitiesSchema2, planEngineCapabilitiesSchema2, nullableTableBorderSpecSchema2, sdFragmentSchema2, placementSchema2, nestingPolicySchema2, tableCreateLocationSchema2, formatInlineAliasOperationSchemas2, tocMutationFailureSchema2, tocMutationSuccessSchema2, tocEntryMutationFailureSchema2, tocEntryMutationSuccessSchema2, hyperlinkTargetSchema2, hyperlinkReadPropertiesSchema2, hyperlinkSpecSchema2, hyperlinkPatchSchema2, hyperlinkDomainSchema2, hyperlinkMutationSuccessSchema2, hyperlinkMutationFailureSchema2, contentControlTargetSchema2, contentControlMutationSuccessSchema2, contentControlMutationFailureSchema2, ccListResultSchema2, ccInfoSchema2, refFailureSchema2, bookmarkAddressSchema2, bookmarkMutation2, footnoteAddressSchema2, footnoteConfigScopeSchema2, footnoteNumberingSchema2, footnoteMutation2, footnoteConfig2, crossRefAddressSchema2, crossRefTargetSchema2, crossRefDisplaySchema2, crossRefMutation2, indexAddressSchema2, indexEntryAddressSchema2, indexConfigSchema2, indexEntryDataSchema2, indexEntryPatchSchema2, indexMutation2, indexEntryMutation2, captionAddressSchema2, captionMutation2, captionConfig2, fieldAddressSchema2, fieldMutation2, citationAddressSchema2, citationSourceAddressSchema2, bibliographyAddressSchema2, citationMutation2, citationSourceMutation2, bibliographyMutation2, citationPersonSchema2, citationSourceFieldsSchema2, tocCreateLocationSchema2, authoritiesAddressSchema2, authorityEntryAddressSchema2, authoritiesConfigSchema2, authorityEntryDataSchema2, authorityEntryPatchSchema2, authoritiesMutation2, authorityEntryMutation2, diffCoverageSchema2, diffSummarySchema2, diffSnapshotSchema2, diffPayloadSchema2, GROUP_METADATA2, STEP_OP_CATALOG_UNFROZEN2, PUBLIC_STEP_OP_CATALOG_UNFROZEN2, PUBLIC_MUTATION_STEP_OP_IDS2, PUBLIC_MUTATION_STEP_OP_SET2, CAPABILITY_REASON_CODES, VALID_EDGE_VALUES2, VALID_EDGE_NODE_TYPES2, VALID_DOCUMENT_EDGES2, VALID_REF_BOUNDARIES2, VALID_ANCHOR_KINDS2, RESOLVE_RANGE_ALLOWED_KEYS2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, VALID_BEHAVIORS2, CONTENT_KIND_SET2, INLINE_KIND_SET2, LEGACY_TOP_LEVEL_TYPES2, TEXT_INSERT_ALLOWED_KEYS2, STRUCTURAL_INSERT_ALLOWED_KEYS2, VALID_INSERT_TYPES2, LIST_KINDS2, LIST_INSERT_POSITIONS2, JOIN_DIRECTIONS2, MUTATION_SCOPES2, LEVEL_ALIGNMENTS2, TRAILING_CHARACTERS2, LIST_PRESET_IDS2, VALID_BLOCK_NODE_TYPES$1, VALID_LIST_KINDS2, VALID_INSERT_POSITIONS2, VALID_JOIN_DIRECTIONS2, VALID_MUTATION_SCOPES2, VALID_LEVEL_ALIGNMENTS2, VALID_TRAILING_CHARACTERS2, VALID_LIST_PRESETS2, VALID_CONTINUITY_VALUES2, VALID_SEQUENCE_MODES2, VALID_LIST_CREATE_MODES2, TEXT_REPLACE_ALLOWED_KEYS2, STRUCTURAL_REPLACE_ALLOWED_KEYS2, VALID_HEADING_LEVELS2, SECTION_BREAK_TYPES$1, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, VALID_BLOCK_NODE_TYPES3, SNAPSHOT_VERSION2 = "sd-diff-snapshot/v1", PAYLOAD_VERSION2 = "sd-diff-payload/v1", VALID_STYLE_OPTION_FLAGS2, TABLE_BORDER_COLOR_PATTERN2, VALID_APPLY_TO_VALUES2, VALID_BORDER_EDGE_KEYS2, HEADER_FOOTER_KINDS$1, HEADER_FOOTER_VARIANTS$1, DEFAULT_SECTIONS_LIST_LIMIT2 = 250, SECTION_BREAK_TYPES3, SECTION_ORIENTATIONS2, SECTION_VERTICAL_ALIGNS2, SECTION_DIRECTIONS2, HEADER_FOOTER_KINDS3, HEADER_FOOTER_VARIANTS3, LINE_NUMBER_RESTARTS2, PAGE_NUMBER_FORMATS2, PAGE_BORDER_DISPLAYS2, PAGE_BORDER_OFFSET_FROM_VALUES2, PAGE_BORDER_Z_ORDER_VALUES2, VALID_WRAP_TYPES2, VALID_WRAP_SIDES2, VALID_IMAGE_SIZE_UNITS2, VALID_TOC_UPDATE_MODES2, EDIT_ENTRY_PATCH_ALLOWED_KEYS2, PATCH_FIELDS2, CONTENT_CONTROL_TYPES2, LOCK_MODES2, CONTENT_CONTROL_APPEARANCES2, VALID_NODE_KINDS2, VALID_LOCK_MODES$1, VALID_CC_TYPES2, VALID_CC_APPEARANCES2, VALID_CONTENT_FORMATS2, VALID_RAW_PATCH_OPS2, VALID_SET_MODES2, VALID_CREATE_LOCATION_KINDS2, DEFAULT_PROTECTION_STATE, ADAPTER_GATED_PREFIXES2, _buffers, _defaultCollectionId = null, _nextCollectionId = 1, generateV2HandlerEntity = (handlerName, translator$216) => ({
99074
99667
  handlerName,
99075
99668
  handler: (params3) => {
99076
99669
  const { nodes } = params3;
@@ -113245,7 +113838,7 @@ var isRegExp = (value) => {
113245
113838
  candidate = candidate.prev;
113246
113839
  }
113247
113840
  }
113248
- }, DocumentApiAdapterError, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH = 1440, PX_PER_INCH = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, CommentMarkName = "commentMark", LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, FALLBACK_PREFIX, UUID_LIKE_PATTERN, ALIAS_ELIGIBLE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH = 96, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN, FOOTER_FILE_PATTERN, SOURCE_HEADER_FOOTER_LOCAL = "header-footer-sync:local", HEADER_PATTERN, FOOTER_PATTERN, DEFAULT_HDR_FTR_ATTRS, HEADER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", VALID_VARIANTS, FOOTNOTES_PART_ID = "word/footnotes.xml", ENDNOTES_PART_ID = "word/endnotes.xml", FOOTNOTES_CONFIG, ENDNOTES_CONFIG, NOTES_XMLNS, footnotesPartDescriptor, endnotesPartDescriptor, storeByEditor, cacheByHost, hostStoreSyncedKeys, BODY_LOCATOR, findMarkPosition = (doc$2, pos, markName) => {
113841
+ }, DocumentApiAdapterError, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH = 1440, PX_PER_INCH = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, CommentMarkName = "commentMark", LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, FALLBACK_PREFIX, UUID_LIKE_PATTERN, ALIAS_ELIGIBLE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH = 96, SETTINGS_PART_PATH = "word/settings.xml", VALID_EDIT_MODES, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN, FOOTER_FILE_PATTERN, SOURCE_HEADER_FOOTER_LOCAL = "header-footer-sync:local", HEADER_PATTERN, FOOTER_PATTERN, DEFAULT_HDR_FTR_ATTRS, HEADER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", VALID_VARIANTS, FOOTNOTES_PART_ID = "word/footnotes.xml", ENDNOTES_PART_ID = "word/endnotes.xml", FOOTNOTES_CONFIG, ENDNOTES_CONFIG, NOTES_XMLNS, footnotesPartDescriptor, endnotesPartDescriptor, storeByEditor, cacheByHost, hostStoreSyncedKeys, BODY_LOCATOR, findMarkPosition = (doc$2, pos, markName) => {
113249
113842
  const $pos = doc$2.resolve(pos);
113250
113843
  const parent = $pos.parent;
113251
113844
  const start = parent.childAfter($pos.parentOffset);
@@ -113313,7 +113906,7 @@ var isRegExp = (value) => {
113313
113906
  if (id2)
113314
113907
  return trackedChanges.filter(({ mark }) => mark.attrs.id === id2);
113315
113908
  return trackedChanges;
113316
- }, DERIVED_ID_LENGTH = 24, groupedCache, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES2, VALID_APPEARANCES, FIELD_LIKE_SDT_TYPES, liveDocumentCountsCache, SETTINGS_PART_PATH = "word/settings.xml", BIBLIOGRAPHY_NAMESPACE_URI = "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", CUSTOM_XML_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", CUSTOM_XML_PROPS_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", DEFAULT_SELECTED_STYLE = "/APA.XSL", DEFAULT_STYLE_NAME = "APA", DEFAULT_VERSION = "6", DEFAULT_XML_DECLARATION, API_TO_OOXML_SOURCE_TYPE, OOXML_TO_API_SOURCE_TYPE, SIMPLE_FIELD_TO_XML_TAG, XML_TAG_TO_SIMPLE_FIELD, import_lib2, FONT_FAMILY_FALLBACKS, DEFAULT_GENERIC_FALLBACK = "sans-serif", DEFAULT_FONT_SIZE_PT = 10, CURRENT_APP_VERSION = "1.23.0", collectRunDefaultProperties = (runProps, { allowOverrideTypeface = true, allowOverrideSize = true, themeResolver, state }) => {
113909
+ }, DERIVED_ID_LENGTH = 24, groupedCache, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES2, VALID_APPEARANCES, FIELD_LIKE_SDT_TYPES, liveDocumentCountsCache, BIBLIOGRAPHY_NAMESPACE_URI = "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", CUSTOM_XML_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", CUSTOM_XML_PROPS_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", DEFAULT_SELECTED_STYLE = "/APA.XSL", DEFAULT_STYLE_NAME = "APA", DEFAULT_VERSION = "6", DEFAULT_XML_DECLARATION, API_TO_OOXML_SOURCE_TYPE, OOXML_TO_API_SOURCE_TYPE, SIMPLE_FIELD_TO_XML_TAG, XML_TAG_TO_SIMPLE_FIELD, import_lib2, FONT_FAMILY_FALLBACKS, DEFAULT_GENERIC_FALLBACK = "sans-serif", DEFAULT_FONT_SIZE_PT = 10, CURRENT_APP_VERSION = "1.23.0", collectRunDefaultProperties = (runProps, { allowOverrideTypeface = true, allowOverrideSize = true, themeResolver, state }) => {
113317
113910
  if (!runProps?.elements?.length || !state)
113318
113911
  return;
113319
113912
  const fontsNode = runProps.elements.find((el) => el.name === "w:rFonts");
@@ -113347,7 +113940,7 @@ var isRegExp = (value) => {
113347
113940
  state.kern = kernNode.attributes["w:val"];
113348
113941
  }
113349
113942
  }, SuperConverter;
113350
- var init_SuperConverter_OPfy6vj2_es = __esm(() => {
113943
+ var init_SuperConverter_CMIR0kxi_es = __esm(() => {
113351
113944
  init_rolldown_runtime_B2q5OVn9_es();
113352
113945
  init_jszip_ChlR43oI_es();
113353
113946
  init_xml_js_40FWvL78_es();
@@ -116349,6 +116942,15 @@ var init_SuperConverter_OPfy6vj2_es = __esm(() => {
116349
116942
  "INVALID_INPUT",
116350
116943
  "CAPABILITY_UNAVAILABLE"
116351
116944
  ];
116945
+ T_PROTECTION_READ2 = ["CAPABILITY_UNAVAILABLE"];
116946
+ T_PROTECTION_MUTATION2 = ["INVALID_INPUT", "CAPABILITY_UNAVAILABLE"];
116947
+ T_PERM_RANGE_READ2 = ["TARGET_NOT_FOUND", "CAPABILITY_UNAVAILABLE"];
116948
+ T_PERM_RANGE_MUTATION2 = [
116949
+ "TARGET_NOT_FOUND",
116950
+ "INVALID_TARGET",
116951
+ "INVALID_INPUT",
116952
+ "CAPABILITY_UNAVAILABLE"
116953
+ ];
116352
116954
  FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2 = Object.fromEntries(INLINE_PROPERTY_REGISTRY2.map((entry) => {
116353
116955
  const operationId = `format.${entry.key}`;
116354
116956
  return [operationId, {
@@ -121580,6 +122182,116 @@ var init_SuperConverter_OPfy6vj2_es = __esm(() => {
121580
122182
  referenceDocPath: "diff/apply.mdx",
121581
122183
  referenceGroup: "diff",
121582
122184
  skipAsATool: true
122185
+ },
122186
+ "protection.get": {
122187
+ memberPath: "protection.get",
122188
+ description: "Read the current document protection state including editing restrictions, write protection, and read-only recommendation.",
122189
+ expectedResult: "Returns a DocumentProtectionState with editingRestriction, writeProtection, and readOnlyRecommended fields.",
122190
+ requiresDocumentContext: true,
122191
+ metadata: readOperation2({ throws: T_PROTECTION_READ2 }),
122192
+ referenceDocPath: "protection/get.mdx",
122193
+ referenceGroup: "protection",
122194
+ skipAsATool: true
122195
+ },
122196
+ "protection.setEditingRestriction": {
122197
+ memberPath: "protection.setEditingRestriction",
122198
+ description: "Enable Word-style editing restriction on the document. Only readOnly mode is supported in v1.",
122199
+ expectedResult: "Returns a ProtectionMutationResult with the updated protection state on success.",
122200
+ requiresDocumentContext: true,
122201
+ metadata: mutationOperation2({
122202
+ idempotency: "idempotent",
122203
+ supportsDryRun: true,
122204
+ supportsTrackedMode: false,
122205
+ possibleFailureCodes: ["NO_OP"],
122206
+ throws: T_PROTECTION_MUTATION2
122207
+ }),
122208
+ referenceDocPath: "protection/set-editing-restriction.mdx",
122209
+ referenceGroup: "protection",
122210
+ skipAsATool: true
122211
+ },
122212
+ "protection.clearEditingRestriction": {
122213
+ memberPath: "protection.clearEditingRestriction",
122214
+ description: "Disable document-level editing restriction by setting enforcement to off. Preserves the protection element and its metadata for round-trip fidelity.",
122215
+ expectedResult: "Returns a ProtectionMutationResult with the updated protection state on success.",
122216
+ requiresDocumentContext: true,
122217
+ metadata: mutationOperation2({
122218
+ idempotency: "idempotent",
122219
+ supportsDryRun: true,
122220
+ supportsTrackedMode: false,
122221
+ possibleFailureCodes: ["NO_OP"],
122222
+ throws: T_PROTECTION_MUTATION2
122223
+ }),
122224
+ referenceDocPath: "protection/clear-editing-restriction.mdx",
122225
+ referenceGroup: "protection",
122226
+ skipAsATool: true
122227
+ },
122228
+ "permissionRanges.list": {
122229
+ memberPath: "permissionRanges.list",
122230
+ description: "List all permission ranges in the document. Returns only complete paired ranges (both start and end markers present).",
122231
+ expectedResult: "Returns a PermissionRangesListResult containing discovered permission ranges with principal and position data.",
122232
+ requiresDocumentContext: true,
122233
+ metadata: readOperation2({ throws: T_PERM_RANGE_READ2 }),
122234
+ referenceDocPath: "permission-ranges/list.mdx",
122235
+ referenceGroup: "permissionRanges",
122236
+ skipAsATool: true
122237
+ },
122238
+ "permissionRanges.get": {
122239
+ memberPath: "permissionRanges.get",
122240
+ description: "Get detailed information about a specific permission range by ID.",
122241
+ expectedResult: "Returns a PermissionRangeInfo object with the range principal, kind, and positions.",
122242
+ requiresDocumentContext: true,
122243
+ metadata: readOperation2({ throws: T_PERM_RANGE_READ2 }),
122244
+ referenceDocPath: "permission-ranges/get.mdx",
122245
+ referenceGroup: "permissionRanges",
122246
+ skipAsATool: true
122247
+ },
122248
+ "permissionRanges.create": {
122249
+ memberPath: "permissionRanges.create",
122250
+ description: "Create a permission range exception region in the document. Inserts matched permStart/permEnd markers at the target.",
122251
+ expectedResult: "Returns a PermissionRangeMutationResult with the created range info on success.",
122252
+ requiresDocumentContext: true,
122253
+ metadata: mutationOperation2({
122254
+ idempotency: "non-idempotent",
122255
+ supportsDryRun: true,
122256
+ supportsTrackedMode: false,
122257
+ possibleFailureCodes: NONE_FAILURES2,
122258
+ throws: T_PERM_RANGE_MUTATION2
122259
+ }),
122260
+ referenceDocPath: "permission-ranges/create.mdx",
122261
+ referenceGroup: "permissionRanges",
122262
+ skipAsATool: true
122263
+ },
122264
+ "permissionRanges.remove": {
122265
+ memberPath: "permissionRanges.remove",
122266
+ description: "Remove a permission range by ID. Removes whichever markers exist for the given ID (start, end, or both).",
122267
+ expectedResult: "Returns a PermissionRangeRemoveResult indicating success or a failure.",
122268
+ requiresDocumentContext: true,
122269
+ metadata: mutationOperation2({
122270
+ idempotency: "idempotent",
122271
+ supportsDryRun: true,
122272
+ supportsTrackedMode: false,
122273
+ possibleFailureCodes: NONE_FAILURES2,
122274
+ throws: T_PERM_RANGE_MUTATION2
122275
+ }),
122276
+ referenceDocPath: "permission-ranges/remove.mdx",
122277
+ referenceGroup: "permissionRanges",
122278
+ skipAsATool: true
122279
+ },
122280
+ "permissionRanges.updatePrincipal": {
122281
+ memberPath: "permissionRanges.updatePrincipal",
122282
+ description: "Change which principal is allowed to edit a permission range. Updates the principal fields on the start marker.",
122283
+ expectedResult: "Returns a PermissionRangeMutationResult with the updated range info on success.",
122284
+ requiresDocumentContext: true,
122285
+ metadata: mutationOperation2({
122286
+ idempotency: "idempotent",
122287
+ supportsDryRun: true,
122288
+ supportsTrackedMode: false,
122289
+ possibleFailureCodes: NONE_FAILURES2,
122290
+ throws: T_PERM_RANGE_MUTATION2
122291
+ }),
122292
+ referenceDocPath: "permission-ranges/update-principal.mdx",
122293
+ referenceGroup: "permissionRanges",
122294
+ skipAsATool: true
121583
122295
  }
121584
122296
  };
121585
122297
  OPERATION_IDS2 = Object.freeze(Object.keys(OPERATION_DEFINITIONS2));
@@ -127226,7 +127938,64 @@ var init_SuperConverter_OPfy6vj2_es = __esm(() => {
127226
127938
  }, ["at", "entry"]), { ...authorityEntryMutation2 }, objectSchema2({
127227
127939
  target: authorityEntryAddressSchema2,
127228
127940
  patch: authorityEntryPatchSchema2
127229
- }, ["target", "patch"]), { ...authorityEntryMutation2 }, objectSchema2({ target: authorityEntryAddressSchema2 }, ["target"]), { ...authorityEntryMutation2 }, objectSchema2({}), objectSchema2({ targetSnapshot: diffSnapshotSchema2 }, ["targetSnapshot"]), objectSchema2({ diff: diffPayloadSchema2 }, ["diff"]);
127941
+ }, ["target", "patch"]), { ...authorityEntryMutation2 }, objectSchema2({ target: authorityEntryAddressSchema2 }, ["target"]), { ...authorityEntryMutation2 }, objectSchema2({}), objectSchema2({ targetSnapshot: diffSnapshotSchema2 }, ["targetSnapshot"]), objectSchema2({ diff: diffPayloadSchema2 }, ["diff"]), objectSchema2({}), objectSchema2({
127942
+ editingRestriction: objectSchema2({
127943
+ mode: {
127944
+ type: "string",
127945
+ enum: [
127946
+ "none",
127947
+ "readOnly",
127948
+ "comments",
127949
+ "trackedChanges",
127950
+ "forms"
127951
+ ]
127952
+ },
127953
+ enforced: { type: "boolean" },
127954
+ runtimeEnforced: { type: "boolean" },
127955
+ passwordProtected: { type: "boolean" },
127956
+ formattingRestricted: { type: "boolean" }
127957
+ }, [
127958
+ "mode",
127959
+ "enforced",
127960
+ "runtimeEnforced",
127961
+ "passwordProtected",
127962
+ "formattingRestricted"
127963
+ ]),
127964
+ writeProtection: objectSchema2({
127965
+ enabled: { type: "boolean" },
127966
+ passwordProtected: { type: "boolean" }
127967
+ }, ["enabled", "passwordProtected"]),
127968
+ readOnlyRecommended: { type: "boolean" }
127969
+ }, [
127970
+ "editingRestriction",
127971
+ "writeProtection",
127972
+ "readOnlyRecommended"
127973
+ ]), objectSchema2({
127974
+ mode: {
127975
+ type: "string",
127976
+ enum: ["readOnly"]
127977
+ },
127978
+ formattingRestricted: { type: "boolean" }
127979
+ }, ["mode"]), objectSchema2({}), objectSchema2({ id: { type: "string" } }, ["id"]), objectSchema2({
127980
+ target: selectionTargetSchema2,
127981
+ principal: objectSchema2({
127982
+ kind: {
127983
+ type: "string",
127984
+ enum: ["everyone", "editor"]
127985
+ },
127986
+ id: { type: "string" }
127987
+ }, ["kind"]),
127988
+ id: { type: "string" }
127989
+ }, ["target", "principal"]), objectSchema2({ id: { type: "string" } }, ["id"]), objectSchema2({
127990
+ id: { type: "string" },
127991
+ principal: objectSchema2({
127992
+ kind: {
127993
+ type: "string",
127994
+ enum: ["everyone", "editor"]
127995
+ },
127996
+ id: { type: "string" }
127997
+ }, ["kind"])
127998
+ }, ["id", "principal"]);
127230
127999
  projectFromDefinitions2((_id, entry) => entry.memberPath);
127231
128000
  [...new Set(OPERATION_IDS2.map((id2) => OPERATION_DEFINITIONS2[id2].memberPath))];
127232
128001
  projectFromDefinitions2((_id, entry) => entry.referenceDocPath);
@@ -127385,6 +128154,16 @@ var init_SuperConverter_OPfy6vj2_es = __esm(() => {
127385
128154
  title: "Diff",
127386
128155
  description: "Snapshot-based document comparison and replay.",
127387
128156
  pagePath: "diff/index.mdx"
128157
+ },
128158
+ protection: {
128159
+ title: "Protection",
128160
+ description: "Document-level protection state and editing restriction operations.",
128161
+ pagePath: "protection/index.mdx"
128162
+ },
128163
+ permissionRanges: {
128164
+ title: "Permission Ranges",
128165
+ description: "Permission range exception operations for protected documents.",
128166
+ pagePath: "permission-ranges/index.mdx"
127388
128167
  }
127389
128168
  };
127390
128169
  Object.keys(GROUP_METADATA2).map((key) => ({
@@ -127743,12 +128522,27 @@ var init_SuperConverter_OPfy6vj2_es = __esm(() => {
127743
128522
  "setAttr",
127744
128523
  "removeAttr"
127745
128524
  ]);
128525
+ VALID_SET_MODES2 = new Set(["readOnly"]);
127746
128526
  VALID_CREATE_LOCATION_KINDS2 = new Set([
127747
128527
  "documentStart",
127748
128528
  "documentEnd",
127749
128529
  "before",
127750
128530
  "after"
127751
128531
  ]);
128532
+ DEFAULT_PROTECTION_STATE = {
128533
+ editingRestriction: {
128534
+ mode: "none",
128535
+ enforced: false,
128536
+ runtimeEnforced: false,
128537
+ passwordProtected: false,
128538
+ formattingRestricted: false
128539
+ },
128540
+ writeProtection: {
128541
+ enabled: false,
128542
+ passwordProtected: false
128543
+ },
128544
+ readOnlyRecommended: false
128545
+ };
127752
128546
  ADAPTER_GATED_PREFIXES2 = [
127753
128547
  "bookmarks",
127754
128548
  "footnotes",
@@ -148926,6 +149720,12 @@ var init_SuperConverter_OPfy6vj2_es = __esm(() => {
148926
149720
  "both"
148927
149721
  ];
148928
149722
  readSectPrHeaderFooterRefs = readSectPrRefsByKind;
149723
+ VALID_EDIT_MODES = new Set([
149724
+ "readOnly",
149725
+ "comments",
149726
+ "trackedChanges",
149727
+ "forms"
149728
+ ]);
148929
149729
  RELATIONSHIP_ID_PATTERN = /^rId(\d+)$/;
148930
149730
  HEADER_FILE_PATTERN = /^word\/header(\d+)\.xml$/;
148931
149731
  FOOTER_FILE_PATTERN = /^word\/footer(\d+)\.xml$/;
@@ -171649,7 +172449,7 @@ var init_remark_gfm_CjV8kaUy_es = __esm(() => {
171649
172449
  init_remark_gfm_z_sDF4ss_es();
171650
172450
  });
171651
172451
 
171652
- // ../../packages/superdoc/dist/chunks/src-Lvsnnb5c.es.js
172452
+ // ../../packages/superdoc/dist/chunks/src-sOP3agXO.es.js
171653
172453
  function deleteProps(obj, propOrProps) {
171654
172454
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
171655
172455
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -173676,11 +174476,11 @@ function syncSplitParagraphRunProperties(attrs, runProperties) {
173676
174476
  paragraphProperties: nextParagraphProperties
173677
174477
  };
173678
174478
  }
173679
- function getConverter$52(editor) {
174479
+ function getConverter$62(editor) {
173680
174480
  return editor.converter;
173681
174481
  }
173682
174482
  function readTranslatedLinkedStyles(editor) {
173683
- return getConverter$52(editor)?.translatedLinkedStyles ?? null;
174483
+ return getConverter$62(editor)?.translatedLinkedStyles ?? null;
173684
174484
  }
173685
174485
  function isHeadingStyleId$1(styleId) {
173686
174486
  return typeof styleId === "string" && /^heading\s*[1-6]$/i.test(styleId.trim());
@@ -207526,7 +208326,7 @@ function tablesSetDefaultStyleAdapter(editor, input2, options) {
207526
208326
  throw new DocumentApiAdapterError("INVALID_INPUT", `tables.setDefaultStyle: "${input2.styleId}" is not a known table style.`);
207527
208327
  return mutatePart({
207528
208328
  editor,
207529
- partId: SETTINGS_PART,
208329
+ partId: SETTINGS_PART$1,
207530
208330
  operation: "mutate",
207531
208331
  source: "tables.setDefaultStyle",
207532
208332
  dryRun: options?.dryRun === true,
@@ -207548,7 +208348,7 @@ function tablesClearDefaultStyleAdapter(editor, _input, options) {
207548
208348
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "tables.clearDefaultStyle requires an active document converter.");
207549
208349
  return mutatePart({
207550
208350
  editor,
207551
- partId: SETTINGS_PART,
208351
+ partId: SETTINGS_PART$1,
207552
208352
  operation: "mutate",
207553
208353
  source: "tables.clearDefaultStyle",
207554
208354
  dryRun: options?.dryRun === true,
@@ -207968,10 +208768,10 @@ function registerBuiltInExecutors() {
207968
208768
  };
207969
208769
  } });
207970
208770
  }
207971
- function getConverter$42(editor) {
208771
+ function getConverter$52(editor) {
207972
208772
  return editor.converter;
207973
208773
  }
207974
- function getConverter$32(editor) {
208774
+ function getConverter$42(editor) {
207975
208775
  return editor.converter;
207976
208776
  }
207977
208777
  function createEmptyHeaderFooterJson() {
@@ -207984,7 +208784,7 @@ function createEmptyHeaderFooterJson() {
207984
208784
  };
207985
208785
  }
207986
208786
  function syncHeaderFooterCaches(editor, part) {
207987
- const converter = getConverter$32(editor);
208787
+ const converter = getConverter$42(editor);
207988
208788
  if (!converter)
207989
208789
  return;
207990
208790
  const relsRoot = part?.elements?.find((el) => el.name === "Relationships");
@@ -208046,7 +208846,7 @@ function createTableWrapper(editor, input2, options) {
208046
208846
  });
208047
208847
  return adapterResult;
208048
208848
  }
208049
- function getConverter$22(editor) {
208849
+ function getConverter$32(editor) {
208050
208850
  return editor.converter;
208051
208851
  }
208052
208852
  function toSectionFailure2(code7, message) {
@@ -208114,7 +208914,7 @@ function buildSectionMarginsForAttrs2(sectPr) {
208114
208914
  };
208115
208915
  }
208116
208916
  function syncConverterBodySection2(editor, sectPr) {
208117
- const converter = getConverter$22(editor);
208917
+ const converter = getConverter$32(editor);
208118
208918
  if (!converter)
208119
208919
  return;
208120
208920
  converter.bodySectPr = cloneXmlElement(sectPr);
@@ -208234,7 +209034,7 @@ function createSectionBreakNode(editor, breakParagraphId, input2) {
208234
209034
  return paragraphNode;
208235
209035
  }
208236
209036
  function updateGlobalTitlePageFlag(editor) {
208237
- const converter = getConverter$22(editor);
209037
+ const converter = getConverter$32(editor);
208238
209038
  if (!converter)
208239
209039
  return;
208240
209040
  const anyTitlePage = resolveSectionProjections(editor).some((entry) => entry.domain.titlePage === true);
@@ -208318,7 +209118,7 @@ function sectionsSetTitlePageAdapter(editor, input2, options) {
208318
209118
  }
208319
209119
  function sectionsSetOddEvenHeadersFootersAdapter(editor, input2, options) {
208320
209120
  rejectTrackedMode("sections.setOddEvenHeadersFooters", options);
208321
- const converter = getConverter$22(editor);
209121
+ const converter = getConverter$32(editor);
208322
209122
  if (!converter)
208323
209123
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "sections.setOddEvenHeadersFooters requires an active document converter.");
208324
209124
  return mutatePart({
@@ -208354,13 +209154,13 @@ function sectionsSetSectionDirectionAdapter(editor, input2, options) {
208354
209154
  }
208355
209155
  function sectionsSetHeaderFooterRefAdapter(editor, input2, options) {
208356
209156
  return sectionMutationBySectPr$1(editor, input2, options, "sections.setHeaderFooterRef", (sectPr, _projection, _sections, dryRun) => {
208357
- const converter = getConverter$22(editor) ?? null;
209157
+ const converter = getConverter$32(editor) ?? null;
208358
209158
  return setHeaderFooterRefMutation(sectPr, input2.kind, input2.variant, input2.refId, converter, "sections.setHeaderFooterRef", dryRun);
208359
209159
  });
208360
209160
  }
208361
209161
  function sectionsClearHeaderFooterRefAdapter(editor, input2, options) {
208362
209162
  return sectionMutationBySectPr$1(editor, input2, options, "sections.clearHeaderFooterRef", (sectPr, _projection, _sections, dryRun) => {
208363
- const converter = getConverter$22(editor) ?? null;
209163
+ const converter = getConverter$32(editor) ?? null;
208364
209164
  clearHeaderFooterRefMutation(sectPr, input2.kind, input2.variant, converter, dryRun);
208365
209165
  });
208366
209166
  }
@@ -212798,11 +213598,11 @@ function createContentControlsAdapter(editor) {
212798
213598
  create: (input2, options) => createWrapper(editor, input2, options)
212799
213599
  };
212800
213600
  }
212801
- function getConverter$12(editor) {
213601
+ function getConverter$22(editor) {
212802
213602
  return editor.converter;
212803
213603
  }
212804
- function requireConverter(editor, operationName) {
212805
- const converter = getConverter$12(editor);
213604
+ function requireConverter$1(editor, operationName) {
213605
+ const converter = getConverter$22(editor);
212806
213606
  if (!converter)
212807
213607
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", `${operationName} requires an active document converter.`);
212808
213608
  return converter;
@@ -212908,7 +213708,7 @@ function headerFootersResolveAdapter(editor, input2) {
212908
213708
  function headerFootersRefsSetAdapter(editor, input2, options) {
212909
213709
  const { section, headerFooterKind, variant } = input2.target;
212910
213710
  const result = sectionMutationBySectPr(editor, { target: section }, options, "headerFooters.refs.set", (sectPr, _projection, _sections, dryRun) => {
212911
- const converter = getConverter$12(editor) ?? null;
213711
+ const converter = getConverter$22(editor) ?? null;
212912
213712
  return setHeaderFooterRefMutation(sectPr, headerFooterKind, variant, input2.refId, converter, "headerFooters.refs.set", dryRun);
212913
213713
  });
212914
213714
  invalidateSlotRuntimesAfterRefChange(editor, result, options);
@@ -212917,7 +213717,7 @@ function headerFootersRefsSetAdapter(editor, input2, options) {
212917
213717
  function headerFootersRefsClearAdapter(editor, input2, options) {
212918
213718
  const { section, headerFooterKind, variant } = input2.target;
212919
213719
  const result = sectionMutationBySectPr(editor, { target: section }, options, "headerFooters.refs.clear", (sectPr, _projection, _sections, dryRun) => {
212920
- clearHeaderFooterRefMutation(sectPr, headerFooterKind, variant, getConverter$12(editor) ?? null, dryRun);
213720
+ clearHeaderFooterRefMutation(sectPr, headerFooterKind, variant, getConverter$22(editor) ?? null, dryRun);
212921
213721
  });
212922
213722
  invalidateSlotRuntimesAfterRefChange(editor, result, options);
212923
213723
  return result;
@@ -212965,7 +213765,7 @@ function extractPartIndex(kind, partPath) {
212965
213765
  return Number.isFinite(num) ? num : null;
212966
213766
  }
212967
213767
  function headerFootersPartsListAdapter(editor, query2) {
212968
- const converter = requireConverter(editor, "headerFooters.parts.list");
213768
+ const converter = requireConverter$1(editor, "headerFooters.parts.list");
212969
213769
  validatePaginationInput(query2?.offset, query2?.limit);
212970
213770
  const relationships = readRelationshipElements(converter);
212971
213771
  const sections = resolveSectionProjections(editor);
@@ -213053,7 +213853,7 @@ function toPartsMutationFailure(code7, message) {
213053
213853
  function headerFootersPartsCreateAdapter(editor, input2, options) {
213054
213854
  rejectTrackedMode("headerFooters.parts.create", options);
213055
213855
  checkRevision(editor, options?.expectedRevision);
213056
- const converter = requireConverter(editor, "headerFooters.parts.create");
213856
+ const converter = requireConverter$1(editor, "headerFooters.parts.create");
213057
213857
  if (input2.sourceRefId) {
213058
213858
  const sourceRel = readRelationshipElements(converter).find((rel) => String(rel.attributes?.Id ?? "") === input2.sourceRefId);
213059
213859
  if (!sourceRel)
@@ -213086,7 +213886,7 @@ function headerFootersPartsCreateAdapter(editor, input2, options) {
213086
213886
  function headerFootersPartsDeleteAdapter(editor, input2, options) {
213087
213887
  rejectTrackedMode("headerFooters.parts.delete", options);
213088
213888
  checkRevision(editor, options?.expectedRevision);
213089
- const converter = requireConverter(editor, "headerFooters.parts.delete");
213889
+ const converter = requireConverter$1(editor, "headerFooters.parts.delete");
213090
213890
  const refId = input2.target.refId;
213091
213891
  const targetRel = readRelationshipElements(converter).find((rel) => String(rel.attributes?.Id ?? "") === refId);
213092
213892
  if (!targetRel)
@@ -213411,6 +214211,402 @@ function bookmarksRemoveWrapper(editor, input2, options) {
213411
214211
  return bookmarkFailure("NO_OP", "Remove operation produced no change.");
213412
214212
  return bookmarkSuccess(address2);
213413
214213
  }
214214
+ function getConverter$12(editor) {
214215
+ return editor.converter ?? undefined;
214216
+ }
214217
+ function requireConverter(editor, operationName) {
214218
+ const converter = getConverter$12(editor);
214219
+ if (!converter)
214220
+ throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", `${operationName} requires an active document converter.`);
214221
+ return converter;
214222
+ }
214223
+ function buildPreviewState(current, editingRestriction) {
214224
+ const { mode, enforced } = editingRestriction;
214225
+ return {
214226
+ editingRestriction: {
214227
+ mode,
214228
+ enforced,
214229
+ runtimeEnforced: mode === "readOnly" && enforced,
214230
+ passwordProtected: current.editingRestriction.passwordProtected,
214231
+ formattingRestricted: editingRestriction.formattingRestricted
214232
+ },
214233
+ writeProtection: current.writeProtection,
214234
+ readOnlyRecommended: current.readOnlyRecommended
214235
+ };
214236
+ }
214237
+ function protectionGetAdapter(editor) {
214238
+ const stored = getProtectionStorage(editor);
214239
+ if (stored?.initialized)
214240
+ return stored.state;
214241
+ const converter = getConverter$12(editor);
214242
+ return parseProtectionState(converter ? readSettingsRoot(converter) : null);
214243
+ }
214244
+ function protectionSetEditingRestrictionAdapter(editor, input2, options) {
214245
+ rejectTrackedMode("protection.setEditingRestriction", options);
214246
+ const converter = requireConverter(editor, "protection.setEditingRestriction");
214247
+ const result = mutatePart({
214248
+ editor,
214249
+ partId: SETTINGS_PART,
214250
+ operation: "mutate",
214251
+ source: "protection.setEditingRestriction",
214252
+ dryRun: options?.dryRun === true,
214253
+ expectedRevision: options?.expectedRevision,
214254
+ mutate({ part, dryRun: isDryRun }) {
214255
+ const currentState = parseProtectionState(readSettingsRoot(converter));
214256
+ const { editingRestriction } = currentState;
214257
+ if (editingRestriction.mode === input2.mode && editingRestriction.enforced === true && (input2.formattingRestricted === undefined || editingRestriction.formattingRestricted === input2.formattingRestricted))
214258
+ return {
214259
+ success: false,
214260
+ failure: {
214261
+ code: "NO_OP",
214262
+ message: "Editing restriction already matches the requested state."
214263
+ }
214264
+ };
214265
+ if (isDryRun)
214266
+ return {
214267
+ success: true,
214268
+ state: buildPreviewState(currentState, {
214269
+ mode: input2.mode,
214270
+ enforced: true,
214271
+ formattingRestricted: input2.formattingRestricted ?? currentState.editingRestriction.formattingRestricted
214272
+ })
214273
+ };
214274
+ const settingsRoot = ensureSettingsRoot(part);
214275
+ setDocumentProtection(settingsRoot, {
214276
+ mode: input2.mode,
214277
+ enforced: true,
214278
+ formattingRestricted: input2.formattingRestricted
214279
+ });
214280
+ const newState = parseProtectionState(settingsRoot);
214281
+ const protStorage = getProtectionStorage(editor);
214282
+ if (protStorage)
214283
+ protStorage.state = newState;
214284
+ editor.emit("protectionChanged", {
214285
+ editor,
214286
+ state: newState,
214287
+ source: "local-mutation"
214288
+ });
214289
+ return {
214290
+ success: true,
214291
+ state: newState
214292
+ };
214293
+ }
214294
+ });
214295
+ if (options?.dryRun !== true)
214296
+ applyEffectiveEditability(editor);
214297
+ return result.result;
214298
+ }
214299
+ function protectionClearEditingRestrictionAdapter(editor, _input, options) {
214300
+ rejectTrackedMode("protection.clearEditingRestriction", options);
214301
+ const converter = requireConverter(editor, "protection.clearEditingRestriction");
214302
+ const result = mutatePart({
214303
+ editor,
214304
+ partId: SETTINGS_PART,
214305
+ operation: "mutate",
214306
+ source: "protection.clearEditingRestriction",
214307
+ dryRun: options?.dryRun === true,
214308
+ expectedRevision: options?.expectedRevision,
214309
+ mutate({ part, dryRun: isDryRun }) {
214310
+ const currentState = parseProtectionState(readSettingsRoot(converter));
214311
+ if (!currentState.editingRestriction.enforced)
214312
+ return {
214313
+ success: false,
214314
+ failure: {
214315
+ code: "NO_OP",
214316
+ message: "Editing restriction is already not enforced."
214317
+ }
214318
+ };
214319
+ if (isDryRun)
214320
+ return {
214321
+ success: true,
214322
+ state: buildPreviewState(currentState, {
214323
+ mode: currentState.editingRestriction.mode,
214324
+ enforced: false,
214325
+ formattingRestricted: currentState.editingRestriction.formattingRestricted
214326
+ })
214327
+ };
214328
+ const settingsRoot = ensureSettingsRoot(part);
214329
+ clearDocumentProtectionEnforcement(settingsRoot);
214330
+ const newState = parseProtectionState(settingsRoot);
214331
+ const protStorage = getProtectionStorage(editor);
214332
+ if (protStorage)
214333
+ protStorage.state = newState;
214334
+ editor.emit("protectionChanged", {
214335
+ editor,
214336
+ state: newState,
214337
+ source: "local-mutation"
214338
+ });
214339
+ return {
214340
+ success: true,
214341
+ state: newState
214342
+ };
214343
+ }
214344
+ });
214345
+ if (options?.dryRun !== true)
214346
+ applyEffectiveEditability(editor);
214347
+ return result.result;
214348
+ }
214349
+ function pmPosToPosition(doc$12, pos) {
214350
+ const resolved = doc$12.resolve(pos);
214351
+ for (let depth = resolved.depth;depth >= 0; depth--) {
214352
+ const blockId = resolved.node(depth).attrs?.sdBlockId;
214353
+ if (blockId)
214354
+ return {
214355
+ blockId,
214356
+ offset: pos - resolved.start(depth)
214357
+ };
214358
+ }
214359
+ return {
214360
+ blockId: "",
214361
+ offset: pos
214362
+ };
214363
+ }
214364
+ function getPermRangesStorage(editor) {
214365
+ return editor.storage.permissionRanges;
214366
+ }
214367
+ function getAllRanges(editor) {
214368
+ return getPermRangesStorage(editor)?.allRanges ?? [];
214369
+ }
214370
+ function toRangeInfo(entry, doc$12) {
214371
+ return {
214372
+ id: entry.id,
214373
+ principal: entry.principal,
214374
+ kind: entry.kind,
214375
+ start: pmPosToPosition(doc$12, entry.from),
214376
+ end: pmPosToPosition(doc$12, entry.to)
214377
+ };
214378
+ }
214379
+ function principalToAttrs(principal) {
214380
+ if (principal.kind === "everyone")
214381
+ return { edGrp: "everyone" };
214382
+ return { ed: principal.id };
214383
+ }
214384
+ function generatePermissionId() {
214385
+ return String(Math.floor(Math.random() * 2000000000));
214386
+ }
214387
+ function permissionRangesListAdapter(editor, input2) {
214388
+ const revision = getRevision(editor);
214389
+ const doc$12 = editor.state.doc;
214390
+ const { total, items: paged } = paginate(getAllRanges(editor).map((entry) => buildDiscoveryItem(entry.id, buildResolvedHandle(`perm:${entry.id}`, "ephemeral", "ext:permissionRange"), toRangeInfo(entry, doc$12))), input2?.offset, input2?.limit);
214391
+ return buildDiscoveryResult({
214392
+ evaluatedRevision: revision,
214393
+ total,
214394
+ items: paged,
214395
+ page: {
214396
+ limit: input2?.limit ?? total,
214397
+ offset: input2?.offset ?? 0,
214398
+ returned: paged.length
214399
+ }
214400
+ });
214401
+ }
214402
+ function permissionRangesGetAdapter(editor, input2) {
214403
+ const entry = getAllRanges(editor).find((r$1) => r$1.id === input2.id);
214404
+ if (!entry)
214405
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Permission range '${input2.id}' not found.`);
214406
+ return toRangeInfo(entry, editor.state.doc);
214407
+ }
214408
+ function permissionRangesCreateAdapter(editor, input2, options) {
214409
+ rejectTrackedMode("permissionRanges.create", options);
214410
+ const { target, principal, id: callerSuppliedId } = input2;
214411
+ const id2 = callerSuppliedId ?? generatePermissionId();
214412
+ if (getAllRanges(editor).some((r$1) => r$1.id === id2))
214413
+ throw new DocumentApiAdapterError("INVALID_INPUT", `Permission range ID '${id2}' already exists.`);
214414
+ const resolved = resolveSelectionTarget(editor, target);
214415
+ const from$1 = resolved.absFrom;
214416
+ const to = resolved.absTo;
214417
+ const doc$12 = editor.state.doc;
214418
+ if (from$1 >= to || from$1 < 0 || to > doc$12.content.size)
214419
+ throw new DocumentApiAdapterError("INVALID_TARGET", "Target range is invalid or empty.");
214420
+ const attrs = {
214421
+ id: id2,
214422
+ ...principalToAttrs(principal)
214423
+ };
214424
+ const $from = doc$12.resolve(from$1);
214425
+ const $to = doc$12.resolve(to);
214426
+ const spansMultipleBlocks = $from.parent !== $to.parent || $from.depth === 0;
214427
+ if (options?.dryRun)
214428
+ return {
214429
+ success: true,
214430
+ range: toRangeInfo({
214431
+ id: id2,
214432
+ principal,
214433
+ kind: spansMultipleBlocks ? "block" : "inline",
214434
+ from: from$1,
214435
+ to,
214436
+ startPos: from$1,
214437
+ endPos: to
214438
+ }, doc$12)
214439
+ };
214440
+ const { tr } = editor.state;
214441
+ tr.setMeta(PERMISSION_MUTATION_META, true);
214442
+ tr.setMeta("addToHistory", false);
214443
+ setTrackChangesSkip(editor, tr);
214444
+ const schema = editor.state.schema;
214445
+ if (spansMultipleBlocks) {
214446
+ const startNode = schema.nodes.permStartBlock?.create(attrs);
214447
+ const endNode = schema.nodes.permEndBlock?.create({ id: id2 });
214448
+ if (!startNode || !endNode)
214449
+ throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "Block-level permission range nodes are not available in the schema.");
214450
+ tr.insert(to, endNode);
214451
+ tr.insert(from$1, startNode);
214452
+ } else {
214453
+ const startNode = schema.nodes.permStart?.create(attrs);
214454
+ const endNode = schema.nodes.permEnd?.create({ id: id2 });
214455
+ if (!startNode || !endNode)
214456
+ throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", "Inline permission range nodes are not available in the schema.");
214457
+ tr.insert(to, endNode);
214458
+ tr.insert(from$1, startNode);
214459
+ }
214460
+ if (editor.view)
214461
+ editor.view.dispatch(tr);
214462
+ else
214463
+ editor.dispatch(tr);
214464
+ const created = getAllRanges(editor).find((r$1) => r$1.id === id2);
214465
+ if (created)
214466
+ return {
214467
+ success: true,
214468
+ range: toRangeInfo(created, editor.state.doc)
214469
+ };
214470
+ return {
214471
+ success: true,
214472
+ range: {
214473
+ id: id2,
214474
+ principal,
214475
+ kind: spansMultipleBlocks ? "block" : "inline",
214476
+ start: pmPosToPosition(editor.state.doc, from$1),
214477
+ end: pmPosToPosition(editor.state.doc, to)
214478
+ }
214479
+ };
214480
+ }
214481
+ function permissionRangesRemoveAdapter(editor, input2, options) {
214482
+ rejectTrackedMode("permissionRanges.remove", options);
214483
+ const { id: id2 } = input2;
214484
+ if (options?.dryRun) {
214485
+ if (!getAllRanges(editor).some((r$1) => r$1.id === id2)) {
214486
+ const hasMarker = findMarkerPositions(editor, id2);
214487
+ if (!hasMarker.start && !hasMarker.end)
214488
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Permission range '${id2}' not found.`);
214489
+ }
214490
+ return {
214491
+ success: true,
214492
+ id: id2
214493
+ };
214494
+ }
214495
+ const positions = findMarkerPositions(editor, id2);
214496
+ if (!positions.start && !positions.end)
214497
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Permission range '${id2}' not found.`);
214498
+ const { tr } = editor.state;
214499
+ tr.setMeta(PERMISSION_MUTATION_META, true);
214500
+ tr.setMeta("addToHistory", false);
214501
+ setTrackChangesSkip(editor, tr);
214502
+ const toDelete = [...positions.end ? [positions.end] : [], ...positions.start ? [positions.start] : []].sort((a2, b$1) => b$1.pos - a2.pos);
214503
+ for (const marker of toDelete)
214504
+ tr.delete(marker.pos, marker.pos + marker.nodeSize);
214505
+ if (editor.view)
214506
+ editor.view.dispatch(tr);
214507
+ else
214508
+ editor.dispatch(tr);
214509
+ return {
214510
+ success: true,
214511
+ id: id2
214512
+ };
214513
+ }
214514
+ function permissionRangesUpdatePrincipalAdapter(editor, input2, options) {
214515
+ rejectTrackedMode("permissionRanges.updatePrincipal", options);
214516
+ const { id: id2, principal } = input2;
214517
+ const positions = findMarkerPositions(editor, id2);
214518
+ if (!positions.start)
214519
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Permission range start marker '${id2}' not found.`);
214520
+ if (options?.dryRun) {
214521
+ const existing = getAllRanges(editor).find((r$1) => r$1.id === id2);
214522
+ if (existing)
214523
+ return {
214524
+ success: true,
214525
+ range: toRangeInfo({
214526
+ ...existing,
214527
+ principal
214528
+ }, editor.state.doc)
214529
+ };
214530
+ return {
214531
+ success: true,
214532
+ range: {
214533
+ id: id2,
214534
+ principal,
214535
+ kind: "inline",
214536
+ start: pmPosToPosition(editor.state.doc, positions.start.pos),
214537
+ end: pmPosToPosition(editor.state.doc, positions.start.pos)
214538
+ }
214539
+ };
214540
+ }
214541
+ const { tr } = editor.state;
214542
+ tr.setMeta(PERMISSION_MUTATION_META, true);
214543
+ tr.setMeta("addToHistory", false);
214544
+ setTrackChangesSkip(editor, tr);
214545
+ const { pos, node: node3 } = positions.start;
214546
+ const newAttrs = {
214547
+ ...node3.attrs,
214548
+ ...principalToAttrs(principal),
214549
+ ...principal.kind === "everyone" ? { ed: undefined } : { edGrp: undefined }
214550
+ };
214551
+ tr.setNodeMarkup(pos, undefined, newAttrs);
214552
+ if (editor.view)
214553
+ editor.view.dispatch(tr);
214554
+ else
214555
+ editor.dispatch(tr);
214556
+ const updated = getAllRanges(editor).find((r$1) => r$1.id === id2);
214557
+ if (updated)
214558
+ return {
214559
+ success: true,
214560
+ range: toRangeInfo(updated, editor.state.doc)
214561
+ };
214562
+ return {
214563
+ success: true,
214564
+ range: {
214565
+ id: id2,
214566
+ principal,
214567
+ kind: "inline",
214568
+ start: pmPosToPosition(editor.state.doc, pos),
214569
+ end: pmPosToPosition(editor.state.doc, pos)
214570
+ }
214571
+ };
214572
+ }
214573
+ function setTrackChangesSkip(editor, tr) {
214574
+ try {
214575
+ const trackPlugin = editor.state.plugins.find((p$12) => p$12.key?.includes("trackChangesBase$"));
214576
+ if (trackPlugin)
214577
+ tr.setMeta(trackPlugin, { skip: true });
214578
+ } catch {}
214579
+ }
214580
+ function findMarkerPositions(editor, id2) {
214581
+ let start$1 = null;
214582
+ let end$1 = null;
214583
+ const permStartTypes = new Set(["permStart", "permStartBlock"]);
214584
+ const permEndTypes = new Set(["permEnd", "permEndBlock"]);
214585
+ editor.state.doc.descendants((node3, pos) => {
214586
+ if (start$1 && end$1)
214587
+ return false;
214588
+ const typeName = node3.type.name;
214589
+ if (node3.attrs?.id === id2) {
214590
+ if (permStartTypes.has(typeName))
214591
+ start$1 = {
214592
+ pos,
214593
+ nodeSize: node3.nodeSize,
214594
+ node: { attrs: { ...node3.attrs } }
214595
+ };
214596
+ else if (permEndTypes.has(typeName))
214597
+ end$1 = {
214598
+ pos,
214599
+ nodeSize: node3.nodeSize,
214600
+ node: { attrs: { ...node3.attrs } }
214601
+ };
214602
+ }
214603
+ return true;
214604
+ });
214605
+ return {
214606
+ start: start$1,
214607
+ end: end$1
214608
+ };
214609
+ }
213414
214610
  function isSpecialEntry(entry) {
213415
214611
  return SPECIAL_NOTE_TYPES.has(entry.type ?? "");
213416
214612
  }
@@ -216743,7 +217939,19 @@ function assembleDocumentApiAdapters(editor) {
216743
217939
  apply: (input2) => executePlan(editor, input2)
216744
217940
  },
216745
217941
  diff: createDiffAdapter(editor),
216746
- history: createHistoryAdapter(editor)
217942
+ history: createHistoryAdapter(editor),
217943
+ protection: {
217944
+ get: () => protectionGetAdapter(editor),
217945
+ setEditingRestriction: (input2, options) => protectionSetEditingRestrictionAdapter(editor, input2, options),
217946
+ clearEditingRestriction: (_input, options) => protectionClearEditingRestrictionAdapter(editor, undefined, options)
217947
+ },
217948
+ permissionRanges: {
217949
+ list: (input2) => permissionRangesListAdapter(editor, input2),
217950
+ get: (input2) => permissionRangesGetAdapter(editor, input2),
217951
+ create: (input2, options) => permissionRangesCreateAdapter(editor, input2, options),
217952
+ remove: (input2, options) => permissionRangesRemoveAdapter(editor, input2, options),
217953
+ updatePrincipal: (input2, options) => permissionRangesUpdatePrincipalAdapter(editor, input2, options)
217954
+ }
216747
217955
  };
216748
217956
  }
216749
217957
  function getDocumentApiAdapters(editor) {
@@ -236897,16 +238105,7 @@ var Node$13 = class Node$14 {
236897
238105
  return "default";
236898
238106
  }
236899
238107
  }
236900
- }, NodeResizer, PERMISSION_PLUGIN_KEY, EVERYONE_GROUP = "everyone", EMPTY_IDENTIFIER_SET, normalizeIdentifier2 = (value) => typeof value === "string" ? value.trim().toLowerCase() : "", buildAllowedIdentifierSet = (editor) => {
236901
- const email = normalizeIdentifier2(editor?.options?.user?.email);
236902
- if (!email)
236903
- return EMPTY_IDENTIFIER_SET;
236904
- const [localPart, domain2] = email.split("@");
236905
- if (!localPart || !domain2)
236906
- return EMPTY_IDENTIFIER_SET;
236907
- const formatted = `${domain2}\\${localPart}`;
236908
- return formatted ? new Set([formatted]) : EMPTY_IDENTIFIER_SET;
236909
- }, isEveryoneGroup = (value) => normalizeIdentifier2(value) === EVERYONE_GROUP, isRangeAllowedForUser = (attrs, allowedIdentifiers) => {
238108
+ }, NodeResizer, PERMISSION_MUTATION_META = "permissionRangeMutation", PERMISSION_PLUGIN_KEY, EVERYONE_GROUP = "everyone", EMPTY_IDENTIFIER_SET, normalizeIdentifier2 = (value) => typeof value === "string" ? value.trim().toLowerCase() : "", isEveryoneGroup = (value) => normalizeIdentifier2(value) === EVERYONE_GROUP, isRangeAllowedForUser = (attrs, allowedIdentifiers) => {
236910
238109
  if (!attrs)
236911
238110
  return false;
236912
238111
  if (isEveryoneGroup(attrs.edGrp))
@@ -236937,40 +238136,66 @@ var Node$13 = class Node$14 {
236937
238136
  endTypeSet: new Set(endTypes),
236938
238137
  allTypeSet: new Set([...startTypes, ...endTypes])
236939
238138
  };
236940
- }, getPermissionNodeId = (node3, pos, fallbackPrefix) => String(node3.attrs?.id ?? `${fallbackPrefix}-${pos}`), buildPermissionState = (doc$12, allowedIdentifiers = EMPTY_IDENTIFIER_SET, permTypes) => {
236941
- const ranges = [];
238139
+ }, getPermissionNodeId = (node3, pos, fallbackPrefix) => String(node3.attrs?.id ?? `${fallbackPrefix}-${pos}`), derivePrincipal = (attrs) => {
238140
+ if (isEveryoneGroup(attrs?.edGrp))
238141
+ return { kind: "everyone" };
238142
+ if (attrs?.ed)
238143
+ return {
238144
+ kind: "editor",
238145
+ id: String(attrs.ed)
238146
+ };
238147
+ return { kind: "everyone" };
238148
+ }, buildPermissionState = (doc$12, allowedIdentifiers = EMPTY_IDENTIFIER_SET, permTypes, protectionEnforced = false) => {
238149
+ const allRanges = [];
238150
+ const allowedRanges = [];
236942
238151
  const openRanges = /* @__PURE__ */ new Map;
236943
238152
  const startTypeSet = permTypes?.startTypeSet ?? /* @__PURE__ */ new Set;
236944
238153
  const endTypeSet = permTypes?.endTypeSet ?? /* @__PURE__ */ new Set;
238154
+ const blockStartType = doc$12.type.schema?.nodes?.["permStartBlock"];
238155
+ const blockEndType = doc$12.type.schema?.nodes?.["permEndBlock"];
236945
238156
  doc$12.descendants((node3, pos) => {
236946
238157
  if (startTypeSet.has(node3.type)) {
236947
238158
  const id2 = getPermissionNodeId(node3, pos, "permStart");
236948
238159
  openRanges.set(id2, {
236949
238160
  from: pos + node3.nodeSize,
236950
- attrs: node3.attrs ?? {}
238161
+ startPos: pos,
238162
+ attrs: node3.attrs ?? {},
238163
+ isBlock: node3.type === blockStartType
236951
238164
  });
236952
238165
  return false;
236953
238166
  }
236954
238167
  if (endTypeSet.has(node3.type)) {
236955
238168
  const id2 = getPermissionNodeId(node3, pos, "permEnd");
236956
238169
  const start$1 = openRanges.get(id2);
236957
- if (start$1 && isRangeAllowedForUser(start$1.attrs, allowedIdentifiers)) {
238170
+ if (start$1) {
236958
238171
  const to = Math.max(pos, start$1.from);
236959
- if (to > start$1.from)
236960
- ranges.push({
238172
+ if (to > start$1.from) {
238173
+ const isBlock = start$1.isBlock || node3.type === blockEndType;
238174
+ const entry = {
236961
238175
  id: id2,
236962
238176
  from: start$1.from,
236963
- to
236964
- });
236965
- }
236966
- if (start$1)
238177
+ to,
238178
+ startPos: start$1.startPos,
238179
+ endPos: pos,
238180
+ principal: derivePrincipal(start$1.attrs),
238181
+ kind: isBlock ? "block" : "inline",
238182
+ edGrp: start$1.attrs.edGrp,
238183
+ ed: start$1.attrs.ed
238184
+ };
238185
+ allRanges.push(entry);
238186
+ if (protectionEnforced && isRangeAllowedForUser(start$1.attrs, allowedIdentifiers))
238187
+ allowedRanges.push(entry);
238188
+ }
236967
238189
  openRanges.delete(id2);
238190
+ }
236968
238191
  return false;
236969
238192
  }
236970
238193
  });
236971
238194
  return {
236972
- ranges,
236973
- hasAllowedRanges: ranges.length > 0
238195
+ allRanges,
238196
+ allowedRanges,
238197
+ hasAllowedRanges: allowedRanges.length > 0,
238198
+ ranges: allowedRanges
236974
238199
  };
236975
238200
  }, collectPermissionTags = (doc$12, permStartTypes, permEndTypes) => {
236976
238201
  const tags = /* @__PURE__ */ new Map;
@@ -237038,7 +238263,7 @@ var Node$13 = class Node$14 {
237038
238263
  if (!allowedRanges?.length)
237039
238264
  return false;
237040
238265
  return allowedRanges.some((allowed) => range.from >= allowed.from && range.to <= allowed.to);
237041
- }, PermissionRanges, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
238266
+ }, PermissionRanges, Protection, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
237042
238267
  if (!str.includes('"') && !str.includes("'"))
237043
238268
  return str.split(delimiter).map((p$12) => p$12.trim()).filter(Boolean);
237044
238269
  const parts = [];
@@ -240765,6 +241990,7 @@ var Node$13 = class Node$14 {
240765
241990
  PermStartBlock,
240766
241991
  PermEndBlock,
240767
241992
  PermissionRanges,
241993
+ Protection,
240768
241994
  VerticalNavigation,
240769
241995
  PassthroughInline,
240770
241996
  PassthroughBlock,
@@ -243080,7 +244306,7 @@ var Node$13 = class Node$14 {
243080
244306
  console.warn("Failed to initialize developer tools:", error3);
243081
244307
  }
243082
244308
  }
243083
- }, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, PRESET_KIND_MAP, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, _setValueDelegate, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES$1, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART = "word/settings.xml", WORD_DEFAULT_TBL_LOOK, FLAG_TO_OOXML_KEY, INVERTED_FLAGS, XML_KEY_TO_STYLE_OPTION, CLEARED_BORDER_OOXML, TABLE_MARGIN_KEY_GROUPS, TABLE_ADAPTER_DISPATCH, ROW_TARGETED_TABLE_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, SNAPSHOT_VERSION3 = "sd-diff-snapshot/v1", PAYLOAD_VERSION3 = "sd-diff-payload/v1", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SPECIAL_NOTE_TYPES, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.23.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, EXCLUDED_PLUGIN_KEY_REF_LIST, EXCLUDED_PLUGIN_KEY_REFS, EXCLUDED_PLUGIN_KEY_PREFIXES, TEXT_RANGE_BLOCK_SEP = `
244309
+ }, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, PRESET_KIND_MAP, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, _setValueDelegate, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES$1, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART$1 = "word/settings.xml", WORD_DEFAULT_TBL_LOOK, FLAG_TO_OOXML_KEY, INVERTED_FLAGS, XML_KEY_TO_STYLE_OPTION, CLEARED_BORDER_OOXML, TABLE_MARGIN_KEY_GROUPS, TABLE_ADAPTER_DISPATCH, ROW_TARGETED_TABLE_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, SNAPSHOT_VERSION3 = "sd-diff-snapshot/v1", PAYLOAD_VERSION3 = "sd-diff-payload/v1", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SETTINGS_PART, SPECIAL_NOTE_TYPES, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.23.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, EXCLUDED_PLUGIN_KEY_REF_LIST, EXCLUDED_PLUGIN_KEY_REFS, EXCLUDED_PLUGIN_KEY_PREFIXES, TEXT_RANGE_BLOCK_SEP = `
243084
244310
  `, TEXT_RANGE_LEAF_SEP = `
243085
244311
  `, DecorationBridge = class DecorationBridge2 {
243086
244312
  #applied = /* @__PURE__ */ new WeakMap;
@@ -252627,9 +253853,9 @@ var Node$13 = class Node$14 {
252627
253853
  return;
252628
253854
  console.log(...args$1);
252629
253855
  }, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions;
252630
- var init_src_Lvsnnb5c_es = __esm(() => {
253856
+ var init_src_sOP3agXO_es = __esm(() => {
252631
253857
  init_rolldown_runtime_B2q5OVn9_es();
252632
- init_SuperConverter_OPfy6vj2_es();
253858
+ init_SuperConverter_CMIR0kxi_es();
252633
253859
  init_jszip_ChlR43oI_es();
252634
253860
  init_uuid_qzgm05fK_es();
252635
253861
  init_constants_Qqwopz80_es();
@@ -270507,75 +271733,49 @@ function print() { __p += __j.call(arguments, '') }
270507
271733
  name: "permissionRanges",
270508
271734
  addStorage() {
270509
271735
  return {
270510
- ranges: [],
270511
- hasAllowedRanges: false
271736
+ allRanges: [],
271737
+ allowedRanges: [],
271738
+ hasAllowedRanges: false,
271739
+ ranges: []
270512
271740
  };
270513
271741
  },
270514
271742
  addPmPlugins() {
270515
271743
  const editor = this.editor;
270516
271744
  const storage = this.storage;
270517
- let originalSetDocumentMode = null;
270518
- const getAllowedIdentifiers = () => buildAllowedIdentifierSet(editor);
270519
- const toggleEditableIfAllowed = (hasAllowedRanges) => {
270520
- if (!editor || editor.isDestroyed)
270521
- return;
270522
- if (editor.options.documentMode !== "viewing")
270523
- return;
270524
- if (hasAllowedRanges && !editor.isEditable)
270525
- editor.setEditable(true, false);
270526
- else if (!hasAllowedRanges && editor.isEditable)
270527
- editor.setEditable(false, false);
270528
- };
270529
- const updateEditableState = (hasAllowedRanges) => {
270530
- const nextValue = Boolean(hasAllowedRanges);
270531
- const previousValue = storage.hasAllowedRanges;
270532
- storage.hasAllowedRanges = nextValue;
270533
- if (previousValue === nextValue)
270534
- return;
270535
- toggleEditableIfAllowed(nextValue);
270536
- };
270537
- if (editor && typeof editor.setDocumentMode === "function") {
270538
- originalSetDocumentMode = editor.setDocumentMode.bind(editor);
270539
- editor.setDocumentMode = (mode, caller) => {
270540
- originalSetDocumentMode(mode, caller);
270541
- const state = editor.state;
270542
- if (!state)
270543
- return;
270544
- const pluginState = PERMISSION_PLUGIN_KEY.getState(state);
270545
- if (pluginState)
270546
- toggleEditableIfAllowed(pluginState.hasAllowedRanges);
270547
- };
270548
- }
271745
+ const getAllowedIdentifiers = () => buildAllowedIdentifierSetFromEditor(editor);
270549
271746
  return [new Plugin({
270550
271747
  key: PERMISSION_PLUGIN_KEY,
270551
271748
  state: {
270552
271749
  init(_$1, state) {
270553
271750
  const permissionTypeInfo = getPermissionTypeInfo(state.schema);
270554
- const permissionState = buildPermissionState(state.doc, getAllowedIdentifiers(), permissionTypeInfo);
271751
+ const protectionEnforced = isReadOnlyProtectionRuntimeEnforced(editor);
271752
+ const permissionState = buildPermissionState(state.doc, getAllowedIdentifiers(), permissionTypeInfo, protectionEnforced);
271753
+ storage.allRanges = permissionState.allRanges;
271754
+ storage.allowedRanges = permissionState.allowedRanges;
271755
+ storage.hasAllowedRanges = permissionState.hasAllowedRanges;
270555
271756
  storage.ranges = permissionState.ranges;
270556
- updateEditableState(permissionState.hasAllowedRanges);
271757
+ applyEffectiveEditability(editor, { refilterRanges: false });
270557
271758
  return permissionState;
270558
271759
  },
270559
271760
  apply(tr, value, _oldState, newState) {
270560
- let permissionState = value;
270561
- if (tr.docChanged) {
270562
- const permissionTypeInfo = getPermissionTypeInfo(newState.schema);
270563
- permissionState = buildPermissionState(newState.doc, getAllowedIdentifiers(), permissionTypeInfo);
270564
- storage.ranges = permissionState.ranges;
270565
- updateEditableState(permissionState.hasAllowedRanges);
270566
- }
271761
+ if (!tr.docChanged)
271762
+ return value;
271763
+ const permissionTypeInfo = getPermissionTypeInfo(newState.schema);
271764
+ const protectionEnforced = isReadOnlyProtectionRuntimeEnforced(editor);
271765
+ const permissionState = buildPermissionState(newState.doc, getAllowedIdentifiers(), permissionTypeInfo, protectionEnforced);
271766
+ storage.allRanges = permissionState.allRanges;
271767
+ storage.allowedRanges = permissionState.allowedRanges;
271768
+ storage.hasAllowedRanges = permissionState.hasAllowedRanges;
271769
+ storage.ranges = permissionState.ranges;
271770
+ applyEffectiveEditability(editor, { refilterRanges: false });
270567
271771
  return permissionState;
270568
271772
  }
270569
271773
  },
270570
- view() {
270571
- return { destroy() {
270572
- if (editor && originalSetDocumentMode)
270573
- editor.setDocumentMode = originalSetDocumentMode;
270574
- } };
270575
- },
270576
271774
  appendTransaction(transactions, oldState, newState) {
270577
271775
  if (!transactions.some((tr$1) => tr$1.docChanged))
270578
271776
  return null;
271777
+ if (transactions.some((tr$1) => tr$1.getMeta?.("permissionRangeMutation")))
271778
+ return null;
270579
271779
  if (transactions.some((tr$1) => tr$1.getMeta?.(ySyncPluginKey)))
270580
271780
  return null;
270581
271781
  const permTypes = getPermissionTypeInfo(newState.schema);
@@ -270635,11 +271835,15 @@ function print() { __p += __j.call(arguments, '') }
270635
271835
  return true;
270636
271836
  if (tr.getMeta?.(ySyncPluginKey))
270637
271837
  return true;
270638
- if (!editor || editor.options.documentMode !== "viewing")
271838
+ if (tr.getMeta?.("permissionRangeMutation"))
271839
+ return true;
271840
+ if (!editor)
270639
271841
  return true;
270640
- const pluginState = PERMISSION_PLUGIN_KEY.getState(state);
270641
- if (!pluginState?.hasAllowedRanges)
271842
+ if (!isReadOnlyProtectionRuntimeEnforced(editor))
270642
271843
  return true;
271844
+ const activeRanges = storage.allowedRanges ?? storage.ranges;
271845
+ if (!activeRanges?.length)
271846
+ return false;
270643
271847
  const changedRanges = collectChangedRanges(tr);
270644
271848
  if (!changedRanges.length)
270645
271849
  return true;
@@ -270647,12 +271851,35 @@ function print() { __p += __j.call(arguments, '') }
270647
271851
  if (!permTypes.startTypes.length || !permTypes.endTypes.length)
270648
271852
  return true;
270649
271853
  return changedRanges.every((range) => {
270650
- return isRangeAllowed(trimPermissionTagsFromRange(state.doc, range, permTypes.allTypeSet), pluginState.ranges);
271854
+ return isRangeAllowed(trimPermissionTagsFromRange(state.doc, range, permTypes.allTypeSet), activeRanges);
270651
271855
  });
270652
271856
  }
270653
271857
  })];
270654
271858
  }
270655
271859
  });
271860
+ Protection = Extension.create({
271861
+ name: "protection",
271862
+ addStorage() {
271863
+ return {
271864
+ state: {
271865
+ editingRestriction: {
271866
+ mode: "none",
271867
+ enforced: false,
271868
+ runtimeEnforced: false,
271869
+ passwordProtected: false,
271870
+ formattingRestricted: false
271871
+ },
271872
+ writeProtection: {
271873
+ enabled: false,
271874
+ passwordProtected: false
271875
+ },
271876
+ readOnlyRecommended: false
271877
+ },
271878
+ initialized: false,
271879
+ editableBaseline: null
271880
+ };
271881
+ }
271882
+ });
270656
271883
  FONT_FAMILY_FALLBACKS2 = Object.freeze({
270657
271884
  swiss: "Arial, sans-serif",
270658
271885
  roman: "Times New Roman, serif",
@@ -279444,7 +280671,7 @@ function print() { __p += __j.call(arguments, '') }
279444
280671
  stylesPartDescriptor = {
279445
280672
  id: STYLES_PART_ID,
279446
280673
  ensurePart(editor) {
279447
- const converter = getConverter$42(editor);
280674
+ const converter = getConverter$52(editor);
279448
280675
  if (converter?.convertedXml[STYLES_PART_ID])
279449
280676
  return converter.convertedXml[STYLES_PART_ID];
279450
280677
  return {
@@ -279459,7 +280686,7 @@ function print() { __p += __j.call(arguments, '') }
279459
280686
  },
279460
280687
  afterCommit(ctx$1) {
279461
280688
  if (ctx$1.source.startsWith("collab:remote:")) {
279462
- const converter = getConverter$42(ctx$1.editor);
280689
+ const converter = getConverter$52(ctx$1.editor);
279463
280690
  if (converter)
279464
280691
  try {
279465
280692
  converter.translatedLinkedStyles = translateStyleDefinitions(converter.convertedXml);
@@ -279679,6 +280906,7 @@ function print() { __p += __j.call(arguments, '') }
279679
280906
  KIND_ORDER = ["header", "footer"];
279680
280907
  HEADER_FILE_PATTERN2 = /header(\d+)\.xml$/;
279681
280908
  FOOTER_FILE_PATTERN2 = /footer(\d+)\.xml$/;
280909
+ SETTINGS_PART = SETTINGS_PART_PATH;
279682
280910
  SPECIAL_NOTE_TYPES = new Set(["separator", "continuationSeparator"]);
279683
280911
  RESTART_POLICY_TO_OOXML = {
279684
280912
  continuous: "continuous",
@@ -280051,6 +281279,7 @@ function print() { __p += __j.call(arguments, '') }
280051
281279
  this.setOptions(resolvedOptions);
280052
281280
  this.#createConverter();
280053
281281
  initPartsRuntime(this);
281282
+ this.#initProtectionState();
280054
281283
  this.#initMedia();
280055
281284
  const shouldMountRenderer = this.#shouldMountRenderer();
280056
281285
  if (shouldMountRenderer) {
@@ -280075,6 +281304,7 @@ function print() { __p += __j.call(arguments, '') }
280075
281304
  if (Boolean(this.options.markdown || this.options.html || this.options.loadFromSchema || this.options.jsonOverride || this.options.mode === "html" || this.options.mode === "text"))
280076
281305
  this.migrateListsToV2();
280077
281306
  this.setDocumentMode(this.options.documentMode, "init");
281307
+ this.#emitProtectionInit();
280078
281308
  this.initializeCollaborationData();
280079
281309
  if (!this.options.ydoc && !this.options.isChildEditor)
280080
281310
  this.#initComments();
@@ -280098,18 +281328,42 @@ function print() { __p += __j.call(arguments, '') }
280098
281328
  this.converter = undefined;
280099
281329
  if (this.storage.image)
280100
281330
  this.storage.image.media = {};
281331
+ const protStorageToReset = getProtectionStorage(this);
281332
+ if (protStorageToReset) {
281333
+ protStorageToReset.state = { ...DEFAULT_PROTECTION_STATE };
281334
+ protStorageToReset.initialized = false;
281335
+ protStorageToReset.editableBaseline = null;
281336
+ }
280101
281337
  this.#sourcePath = null;
280102
281338
  this.options.initialState = null;
280103
281339
  this.options.content = "";
280104
281340
  this.options.fileSource = null;
280105
281341
  this._state = undefined;
280106
281342
  }
281343
+ #initProtectionState() {
281344
+ const protStorage = getProtectionStorage(this);
281345
+ if (!protStorage)
281346
+ return;
281347
+ protStorage.state = parseProtectionState(this.converter ? readSettingsRoot(this.converter) : null);
281348
+ protStorage.initialized = true;
281349
+ }
281350
+ #emitProtectionInit() {
281351
+ const protStorage = getProtectionStorage(this);
281352
+ if (!protStorage?.initialized)
281353
+ return;
281354
+ this.emit("protectionChanged", {
281355
+ editor: this,
281356
+ state: protStorage.state,
281357
+ source: "init"
281358
+ });
281359
+ }
280107
281360
  #init() {
280108
281361
  this.#createExtensionService();
280109
281362
  this.#createCommandService();
280110
281363
  this.#createSchema();
280111
281364
  this.#createConverter();
280112
281365
  initPartsRuntime(this);
281366
+ this.#initProtectionState();
280113
281367
  this.#initMedia();
280114
281368
  this.on("beforeCreate", this.options.onBeforeCreate);
280115
281369
  this.emit("beforeCreate", { editor: this });
@@ -280153,6 +281407,7 @@ function print() { __p += __j.call(arguments, '') }
280153
281407
  if (Boolean(this.options.markdown || this.options.html || this.options.loadFromSchema || this.options.jsonOverride || this.options.mode === "html" || this.options.mode === "text"))
280154
281408
  this.migrateListsToV2();
280155
281409
  this.setDocumentMode(this.options.documentMode, "init");
281410
+ this.#emitProtectionInit();
280156
281411
  if (!this.options.ydoc && !this.options.isChildEditor)
280157
281412
  this.#initComments();
280158
281413
  if (shouldMountRenderer) {
@@ -280351,6 +281606,7 @@ function print() { __p += __j.call(arguments, '') }
280351
281606
  if (pm)
280352
281607
  pm.classList.remove("view-mode");
280353
281608
  }
281609
+ applyEffectiveEditability(this);
280354
281610
  }
280355
281611
  blur() {
280356
281612
  this.view?.dom?.blur();
@@ -284338,6 +285594,16 @@ function print() { __p += __j.call(arguments, '') }
284338
285594
  event: "commentsUpdate",
284339
285595
  handler: handleCommentsUpdate
284340
285596
  });
285597
+ const handleProtectionChanged = () => {
285598
+ this.#updatePermissionOverlay();
285599
+ this.#pendingDocChange = true;
285600
+ this.#scheduleRerender();
285601
+ };
285602
+ this.#editor.on("protectionChanged", handleProtectionChanged);
285603
+ this.#editorListeners.push({
285604
+ event: "protectionChanged",
285605
+ handler: handleProtectionChanged
285606
+ });
284341
285607
  }
284342
285608
  #setupCollaborationCursors() {
284343
285609
  this.#remoteCursorManager?.setup();
@@ -286364,6 +287630,9 @@ function print() { __p += __j.call(arguments, '') }
286364
287630
  this.#errorBannerMessage = null;
286365
287631
  }
286366
287632
  #isViewLocked() {
287633
+ const protectionStorage = this.#editor?.storage?.protection;
287634
+ if (protectionStorage?.initialized === true && protectionStorage?.state?.editingRestriction?.runtimeEnforced === true)
287635
+ return !!!this.#editor?.storage?.permissionRanges?.hasAllowedRanges;
286367
287636
  if (this.#documentMode !== "viewing")
286368
287637
  return false;
286369
287638
  if (!!this.#editor?.storage?.permissionRanges?.hasAllowedRanges)
@@ -286536,8 +287805,8 @@ var init_zipper_YmNpPIyc_es = __esm(() => {
286536
287805
 
286537
287806
  // ../../packages/superdoc/dist/super-editor.es.js
286538
287807
  var init_super_editor_es = __esm(() => {
286539
- init_src_Lvsnnb5c_es();
286540
- init_SuperConverter_OPfy6vj2_es();
287808
+ init_src_sOP3agXO_es();
287809
+ init_SuperConverter_CMIR0kxi_es();
286541
287810
  init_jszip_ChlR43oI_es();
286542
287811
  init_xml_js_40FWvL78_es();
286543
287812
  init_constants_Qqwopz80_es();