superdoc 2.28.0-next.15 → 2.28.0-next.17

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 (28) hide show
  1. package/dist/chunks/{create-super-doc-ui-BRahDsch.es.js → create-super-doc-ui-CAfcpwSS.es.js} +45 -29
  2. package/dist/chunks/{create-super-doc-ui-CFlvn2wr.cjs → create-super-doc-ui-CXdsObDZ.cjs} +50 -28
  3. package/dist/collaboration-upgrade-engine.cjs +1 -1
  4. package/dist/collaboration-upgrade-engine.es.js +1 -1
  5. package/dist/document-api/src/contract/operation-definitions.d.ts +1 -1
  6. package/dist/document-api/src/types/receipt.d.ts +1 -1
  7. package/dist/layout-engine/contracts/src/index.d.ts +1 -0
  8. package/dist/public/ui-react.cjs +1 -1
  9. package/dist/public/ui-react.es.js +1 -1
  10. package/dist/public/ui-vue.cjs +1 -1
  11. package/dist/public/ui-vue.es.js +1 -1
  12. package/dist/public/ui.cjs +3 -2
  13. package/dist/public/ui.es.js +3 -2
  14. package/dist/shared/font-system/src/resolver.d.ts +3 -3
  15. package/dist/style.css +1 -1
  16. package/dist/style.layered.css +1 -1
  17. package/dist/superdoc/src/core/collaboration/helpers.d.ts +0 -5
  18. package/dist/superdoc/src/core/editor-runtime/types.d.ts +2 -0
  19. package/dist/superdoc/src/core/editor-runtime/v2/v2-editor-runtime-adapter.d.ts +2 -0
  20. package/dist/superdoc/src/helpers/v2-review-mutation-impact.d.ts +2 -0
  21. package/dist/superdoc.cjs +60 -20
  22. package/dist/superdoc.es.js +60 -20
  23. package/dist-cdn/style.layered.css +1 -1
  24. package/dist-cdn/superdoc.min.css +1 -1
  25. package/dist-cdn/superdoc.min.js +42 -42
  26. package/package.json +2 -2
  27. package/dist/layout-engine/layout-bridge/src/marker-run-key.d.ts +0 -2
  28. package/dist/superdoc/src/core/collaboration/collaboration.d.ts +0 -18
@@ -2650,6 +2650,16 @@ function isPlainObject(value) {
2650
2650
  }
2651
2651
  //#endregion
2652
2652
  //#region src/helpers/v2-review-mutation-impact.ts
2653
+ function mutationCommittedEventChangedVisibleContent(event) {
2654
+ if (event.dryRun === true) return false;
2655
+ if (isPlainObject(event.result) && event.result.noop === true) return false;
2656
+ const receipt = isPlainObject(event.receipt) ? event.receipt : null;
2657
+ if (receipt?.changed === false || receipt?.noop === true || receipt?.status === "NO_OP") return false;
2658
+ return true;
2659
+ }
2660
+ function mutationCommittedEventChangedDocument(event) {
2661
+ return event.cause !== "preview" && mutationCommittedEventChangedVisibleContent(event);
2662
+ }
2653
2663
  /**
2654
2664
  * Classify the tracked-change identities carried by a v2 mutation event.
2655
2665
  *
@@ -5762,18 +5772,6 @@ function commandResultFromOperationResult(result) {
5762
5772
  function isSuccessfulReceipt(result) {
5763
5773
  return Boolean(result) && typeof result === "object" && result.success === true;
5764
5774
  }
5765
- /**
5766
- * The host also emits `mutation:committed` for previews and no-op receipts;
5767
- * those events must not mark the document as having unsaved edits.
5768
- */
5769
- function mutationCommittedEventChangedDocument(event) {
5770
- if (event.dryRun === true) return false;
5771
- const receipt = event.receipt;
5772
- if (receipt && typeof receipt === "object" && receipt.changed === false) return false;
5773
- if (receipt && typeof receipt === "object" && receipt.noop === true) return false;
5774
- if (receipt && typeof receipt === "object" && receipt.status === "NO_OP") return false;
5775
- return true;
5776
- }
5777
5775
  function readTxId(value) {
5778
5776
  return typeof value === "string" && value.length > 0 ? value : null;
5779
5777
  }
@@ -10233,20 +10231,36 @@ function createSuperDocUI(options) {
10233
10231
  lastOptimisticInlineSelectionSignature = selectionInlineValueSignature(state.selection);
10234
10232
  let scheduleActiveSearchRefresh = () => {};
10235
10233
  const documentChangeListeners = /* @__PURE__ */ new Set();
10236
- let documentChangeEpoch = 0;
10237
- let documentChangeSeq = 0;
10238
- const startDocumentChangeEpoch = () => {
10239
- documentChangeEpoch += 1;
10240
- documentChangeSeq = 0;
10241
- };
10242
- const publishDocumentChange = (event) => {
10234
+ const documentChangeCounters = /* @__PURE__ */ new WeakMap();
10235
+ let documentEpochCount = 0;
10236
+ const readDocumentReplacement = (host) => safeCall(() => hostMethod(host, "getDocumentReplacementVersion")?.(), null);
10237
+ const startDocumentChangeEpoch = (host) => {
10238
+ documentEpochCount += 1;
10239
+ const counter = {
10240
+ epoch: `document-${documentEpochCount}`,
10241
+ seq: 0,
10242
+ replacement: readDocumentReplacement(host)
10243
+ };
10244
+ documentChangeCounters.set(host, counter);
10245
+ return counter;
10246
+ };
10247
+ const currentDocumentChangeCounter = (host) => {
10248
+ const counter = documentChangeCounters.get(host);
10249
+ return counter && counter.replacement === readDocumentReplacement(host) ? counter : startDocumentChangeEpoch(host);
10250
+ };
10251
+ const publishDocumentChange = (host, event) => {
10252
+ if (event.type === "collaboration:document-replaced" || event.documentReplaced === true) {
10253
+ startDocumentChangeEpoch(host);
10254
+ return;
10255
+ }
10243
10256
  if (documentChangeListeners.size === 0) return;
10244
10257
  const facts = documentChangeFromHostEvent(event);
10245
10258
  if (!facts) return;
10246
- documentChangeSeq += 1;
10259
+ const counter = currentDocumentChangeCounter(host);
10260
+ counter.seq += 1;
10247
10261
  const change = {
10248
- documentEpoch: `document-${documentChangeEpoch}`,
10249
- seq: documentChangeSeq,
10262
+ documentEpoch: counter.epoch,
10263
+ seq: counter.seq,
10250
10264
  ...facts
10251
10265
  };
10252
10266
  for (const listener of Array.from(documentChangeListeners)) safeCall(() => listener(change), void 0);
@@ -10269,13 +10283,12 @@ function createSuperDocUI(options) {
10269
10283
  try {
10270
10284
  const off = hostMethod(next, "subscribe")?.((event) => {
10271
10285
  const type = event?.type;
10272
- if (type === "collaboration:document-replaced") startDocumentChangeEpoch();
10273
- publishDocumentChange(event);
10286
+ if (host) publishDocumentChange(host, event);
10274
10287
  const isStandaloneDocumentMutation = type === "document:mutated" && event.hasCommitEvent !== true;
10275
- if (type === "collaboration:document-replaced" || isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedDocument(event) || type === "collaboration:remote-changed") {
10288
+ if (type === "collaboration:document-replaced" || isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedVisibleContent(event) || type === "collaboration:remote-changed") {
10276
10289
  for (const [commandId, optimistic] of optimisticInlineToggles) if (optimistic.settled || type === "collaboration:document-replaced") optimisticInlineToggles.delete(commandId);
10277
10290
  }
10278
- if (isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedDocument(event) || type === "collaboration:remote-changed" && Array.isArray(event.changedStoryIds) && event.changedStoryIds.length > 0) scheduleActiveSearchRefresh();
10291
+ if (isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedVisibleContent(event) || type === "collaboration:remote-changed" && Array.isArray(event.changedStoryIds) && event.changedStoryIds.length > 0) scheduleActiveSearchRefresh();
10279
10292
  if ((type === "document:mutated" || type === "mutation:committed" && mutationCommittedEventChangedDocument(event)) && host && !dirtyHosts.has(host)) {
10280
10293
  dirtyHosts.add(host);
10281
10294
  recompute("document-dirty");
@@ -10311,6 +10324,7 @@ function createSuperDocUI(options) {
10311
10324
  if (impact?.allResolved) {
10312
10325
  replaceTrackedChangeItemsInCache([]);
10313
10326
  publishAllTrackedChangesResolved(event.receipt);
10327
+ if (event.cause === "preview") invalidateDocumentContent();
10314
10328
  return;
10315
10329
  }
10316
10330
  if (impact?.removedIds.size) markPostDecisionTrackChanges(new Set(impact.removedIds), event.receipt);
@@ -10320,7 +10334,10 @@ function createSuperDocUI(options) {
10320
10334
  scheduleTypingDocumentContentInvalidation();
10321
10335
  return;
10322
10336
  }
10323
- if (impact?.removedIds.size && impact.upsertIds.size === 0) return;
10337
+ if (impact?.removedIds.size && impact.upsertIds.size === 0) {
10338
+ if (event.cause === "preview") invalidateDocumentContent();
10339
+ return;
10340
+ }
10324
10341
  if (isStandaloneDocumentMutation || type === "collaboration:remote-changed" || type === "mutation:committed" && !isTypingBurst) schedulePostPaintContentRefresh();
10325
10342
  const remoteCommentsPartChanged = type === "collaboration:remote-changed" && Array.isArray(event.changedPartUris) && event.changedPartUris.some((partUri) => typeof partUri === "string" && COMMENTS_CATALOG_PART_URIS.has(partUri));
10326
10343
  const loadedCommentAnchorsMayHaveChanged = type === "collaboration:remote-changed" && Array.isArray(event.changedStoryIds) && event.changedStoryIds.length > 0 && commentsCatalogMayHaveRows();
@@ -13829,7 +13846,6 @@ function createSuperDocUI(options) {
13829
13846
  return () => documentChangeListeners.delete(listener);
13830
13847
  }
13831
13848
  };
13832
- documentResetHooks.push(startDocumentChangeEpoch);
13833
13849
  const resolveVisibleHost = () => {
13834
13850
  if (typeof HTMLElement === "undefined") return null;
13835
13851
  const mountContainer = (getEditor()?.mount)?.container;
@@ -15640,4 +15656,4 @@ function commandIsActive(descriptor, selection) {
15640
15656
  return descriptor.activeMark ? selection.activeMarks.includes(descriptor.activeMark) : false;
15641
15657
  }
15642
15658
  //#endregion
15643
- export { createInteractionHistory as _, registerFirstPartyCommandMutation as a, recordInteraction as b, applyV2CommentInvalidationFromMutation as c, createImageFilePicker as d, resolveImageSrc as f, closeInteractionHistory as g, DOM_CLASS_NAMES as h, readFirstPartyPageNumbers as i, getV2TrackedChangeMutationImpact as l, isSyntheticTrackedChangeCommentLaneItem as m, executeFirstPartyCommandAsync as n, isRecord as o, shallowEqual as p, executeFirstPartyShortcutAsync as r, BUILT_IN_COMMAND_IDS as s, createSuperDocUI as t, isPlainObject as u, getWorkflowRecording as v, isWorkflowRecordingEnabled as y };
15659
+ export { closeInteractionHistory as _, registerFirstPartyCommandMutation as a, isWorkflowRecordingEnabled as b, applyV2CommentInvalidationFromMutation as c, isPlainObject as d, createImageFilePicker as f, DOM_CLASS_NAMES as g, isSyntheticTrackedChangeCommentLaneItem as h, readFirstPartyPageNumbers as i, getV2TrackedChangeMutationImpact as l, shallowEqual as m, executeFirstPartyCommandAsync as n, isRecord as o, resolveImageSrc as p, executeFirstPartyShortcutAsync as r, BUILT_IN_COMMAND_IDS as s, createSuperDocUI as t, mutationCommittedEventChangedDocument as u, createInteractionHistory as v, recordInteraction as x, getWorkflowRecording as y };
@@ -2651,6 +2651,16 @@ function isPlainObject(value) {
2651
2651
  }
2652
2652
  //#endregion
2653
2653
  //#region src/helpers/v2-review-mutation-impact.ts
2654
+ function mutationCommittedEventChangedVisibleContent(event) {
2655
+ if (event.dryRun === true) return false;
2656
+ if (isPlainObject(event.result) && event.result.noop === true) return false;
2657
+ const receipt = isPlainObject(event.receipt) ? event.receipt : null;
2658
+ if (receipt?.changed === false || receipt?.noop === true || receipt?.status === "NO_OP") return false;
2659
+ return true;
2660
+ }
2661
+ function mutationCommittedEventChangedDocument(event) {
2662
+ return event.cause !== "preview" && mutationCommittedEventChangedVisibleContent(event);
2663
+ }
2654
2664
  /**
2655
2665
  * Classify the tracked-change identities carried by a v2 mutation event.
2656
2666
  *
@@ -5763,18 +5773,6 @@ function commandResultFromOperationResult(result) {
5763
5773
  function isSuccessfulReceipt(result) {
5764
5774
  return Boolean(result) && typeof result === "object" && result.success === true;
5765
5775
  }
5766
- /**
5767
- * The host also emits `mutation:committed` for previews and no-op receipts;
5768
- * those events must not mark the document as having unsaved edits.
5769
- */
5770
- function mutationCommittedEventChangedDocument(event) {
5771
- if (event.dryRun === true) return false;
5772
- const receipt = event.receipt;
5773
- if (receipt && typeof receipt === "object" && receipt.changed === false) return false;
5774
- if (receipt && typeof receipt === "object" && receipt.noop === true) return false;
5775
- if (receipt && typeof receipt === "object" && receipt.status === "NO_OP") return false;
5776
- return true;
5777
- }
5778
5776
  function readTxId(value) {
5779
5777
  return typeof value === "string" && value.length > 0 ? value : null;
5780
5778
  }
@@ -10234,20 +10232,36 @@ function createSuperDocUI(options) {
10234
10232
  lastOptimisticInlineSelectionSignature = selectionInlineValueSignature(state.selection);
10235
10233
  let scheduleActiveSearchRefresh = () => {};
10236
10234
  const documentChangeListeners = /* @__PURE__ */ new Set();
10237
- let documentChangeEpoch = 0;
10238
- let documentChangeSeq = 0;
10239
- const startDocumentChangeEpoch = () => {
10240
- documentChangeEpoch += 1;
10241
- documentChangeSeq = 0;
10242
- };
10243
- const publishDocumentChange = (event) => {
10235
+ const documentChangeCounters = /* @__PURE__ */ new WeakMap();
10236
+ let documentEpochCount = 0;
10237
+ const readDocumentReplacement = (host) => safeCall(() => hostMethod(host, "getDocumentReplacementVersion")?.(), null);
10238
+ const startDocumentChangeEpoch = (host) => {
10239
+ documentEpochCount += 1;
10240
+ const counter = {
10241
+ epoch: `document-${documentEpochCount}`,
10242
+ seq: 0,
10243
+ replacement: readDocumentReplacement(host)
10244
+ };
10245
+ documentChangeCounters.set(host, counter);
10246
+ return counter;
10247
+ };
10248
+ const currentDocumentChangeCounter = (host) => {
10249
+ const counter = documentChangeCounters.get(host);
10250
+ return counter && counter.replacement === readDocumentReplacement(host) ? counter : startDocumentChangeEpoch(host);
10251
+ };
10252
+ const publishDocumentChange = (host, event) => {
10253
+ if (event.type === "collaboration:document-replaced" || event.documentReplaced === true) {
10254
+ startDocumentChangeEpoch(host);
10255
+ return;
10256
+ }
10244
10257
  if (documentChangeListeners.size === 0) return;
10245
10258
  const facts = documentChangeFromHostEvent(event);
10246
10259
  if (!facts) return;
10247
- documentChangeSeq += 1;
10260
+ const counter = currentDocumentChangeCounter(host);
10261
+ counter.seq += 1;
10248
10262
  const change = {
10249
- documentEpoch: `document-${documentChangeEpoch}`,
10250
- seq: documentChangeSeq,
10263
+ documentEpoch: counter.epoch,
10264
+ seq: counter.seq,
10251
10265
  ...facts
10252
10266
  };
10253
10267
  for (const listener of Array.from(documentChangeListeners)) safeCall(() => listener(change), void 0);
@@ -10270,13 +10284,12 @@ function createSuperDocUI(options) {
10270
10284
  try {
10271
10285
  const off = hostMethod(next, "subscribe")?.((event) => {
10272
10286
  const type = event?.type;
10273
- if (type === "collaboration:document-replaced") startDocumentChangeEpoch();
10274
- publishDocumentChange(event);
10287
+ if (host) publishDocumentChange(host, event);
10275
10288
  const isStandaloneDocumentMutation = type === "document:mutated" && event.hasCommitEvent !== true;
10276
- if (type === "collaboration:document-replaced" || isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedDocument(event) || type === "collaboration:remote-changed") {
10289
+ if (type === "collaboration:document-replaced" || isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedVisibleContent(event) || type === "collaboration:remote-changed") {
10277
10290
  for (const [commandId, optimistic] of optimisticInlineToggles) if (optimistic.settled || type === "collaboration:document-replaced") optimisticInlineToggles.delete(commandId);
10278
10291
  }
10279
- if (isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedDocument(event) || type === "collaboration:remote-changed" && Array.isArray(event.changedStoryIds) && event.changedStoryIds.length > 0) scheduleActiveSearchRefresh();
10292
+ if (isStandaloneDocumentMutation || type === "mutation:committed" && mutationCommittedEventChangedVisibleContent(event) || type === "collaboration:remote-changed" && Array.isArray(event.changedStoryIds) && event.changedStoryIds.length > 0) scheduleActiveSearchRefresh();
10280
10293
  if ((type === "document:mutated" || type === "mutation:committed" && mutationCommittedEventChangedDocument(event)) && host && !dirtyHosts.has(host)) {
10281
10294
  dirtyHosts.add(host);
10282
10295
  recompute("document-dirty");
@@ -10312,6 +10325,7 @@ function createSuperDocUI(options) {
10312
10325
  if (impact?.allResolved) {
10313
10326
  replaceTrackedChangeItemsInCache([]);
10314
10327
  publishAllTrackedChangesResolved(event.receipt);
10328
+ if (event.cause === "preview") invalidateDocumentContent();
10315
10329
  return;
10316
10330
  }
10317
10331
  if (impact?.removedIds.size) markPostDecisionTrackChanges(new Set(impact.removedIds), event.receipt);
@@ -10321,7 +10335,10 @@ function createSuperDocUI(options) {
10321
10335
  scheduleTypingDocumentContentInvalidation();
10322
10336
  return;
10323
10337
  }
10324
- if (impact?.removedIds.size && impact.upsertIds.size === 0) return;
10338
+ if (impact?.removedIds.size && impact.upsertIds.size === 0) {
10339
+ if (event.cause === "preview") invalidateDocumentContent();
10340
+ return;
10341
+ }
10325
10342
  if (isStandaloneDocumentMutation || type === "collaboration:remote-changed" || type === "mutation:committed" && !isTypingBurst) schedulePostPaintContentRefresh();
10326
10343
  const remoteCommentsPartChanged = type === "collaboration:remote-changed" && Array.isArray(event.changedPartUris) && event.changedPartUris.some((partUri) => typeof partUri === "string" && COMMENTS_CATALOG_PART_URIS.has(partUri));
10327
10344
  const loadedCommentAnchorsMayHaveChanged = type === "collaboration:remote-changed" && Array.isArray(event.changedStoryIds) && event.changedStoryIds.length > 0 && commentsCatalogMayHaveRows();
@@ -13830,7 +13847,6 @@ function createSuperDocUI(options) {
13830
13847
  return () => documentChangeListeners.delete(listener);
13831
13848
  }
13832
13849
  };
13833
- documentResetHooks.push(startDocumentChangeEpoch);
13834
13850
  const resolveVisibleHost = () => {
13835
13851
  if (typeof HTMLElement === "undefined") return null;
13836
13852
  const mountContainer = (getEditor()?.mount)?.container;
@@ -15731,6 +15747,12 @@ Object.defineProperty(exports, "isWorkflowRecordingEnabled", {
15731
15747
  return isWorkflowRecordingEnabled;
15732
15748
  }
15733
15749
  });
15750
+ Object.defineProperty(exports, "mutationCommittedEventChangedDocument", {
15751
+ enumerable: true,
15752
+ get: function() {
15753
+ return mutationCommittedEventChangedDocument;
15754
+ }
15755
+ });
15734
15756
  Object.defineProperty(exports, "readFirstPartyPageNumbers", {
15735
15757
  enumerable: true,
15736
15758
  get: function() {
@@ -19,7 +19,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
19
19
  var PRIVATE_ENGINE_INFO = (0, _superdoc_docx_engine_collaboration_upgrade_engine.getCollaborationUpgradeEngineInfo)();
20
20
  var ENGINE_INFO = Object.freeze({
21
21
  ...PRIVATE_ENGINE_INFO,
22
- superdocVersion: "2.28.0-next.15",
22
+ superdocVersion: "2.28.0-next.17",
23
23
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
24
24
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
25
25
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -18,7 +18,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
18
18
  var PRIVATE_ENGINE_INFO = getCollaborationUpgradeEngineInfo$1();
19
19
  var ENGINE_INFO = Object.freeze({
20
20
  ...PRIVATE_ENGINE_INFO,
21
- superdocVersion: "2.28.0-next.15",
21
+ superdocVersion: "2.28.0-next.17",
22
22
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
23
23
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
24
24
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -3726,7 +3726,7 @@ export declare const OPERATION_DEFINITIONS: {
3726
3726
  readonly find: {
3727
3727
  readonly memberPath: "find";
3728
3728
  readonly description: "Search the document for text or node matches using SDM/1 selectors. Returns discovery-grade results: for mutation targeting, use query.match instead.";
3729
- readonly expectedResult: "Returns an SDFindResult envelope ({ total, limit, offset, items }). Each item is an SDNodeResult ({ node, address }). Text hits contain only the matched text; use getNode or getNodeById for the full containing node. Node selectors return full node projections.";
3729
+ readonly expectedResult: "Returns an SDFindResult envelope ({ total, limit, offset, items }). Each item is an SDNodeResult ({ node, address }). Text hits contain only the matched text; use getNode or getNodeById for the full containing node. Node selectors return full node projections. Bookmark selectors return the bookmarks of the searched story in document order: each address is an inline bookmark address whose anchor spans the bookmark range, and each node is an ext.bookmark node whose bookmark.address resolves through bookmarks.get.";
3730
3730
  readonly requiresDocumentContext: true;
3731
3731
  readonly metadata: CommandStaticMetadata;
3732
3732
  readonly referenceDocPath: "find.mdx";
@@ -15,7 +15,7 @@ export type ReceiptFailureCode = 'NO_OP' | 'INVALID_TARGET' | 'TARGET_NOT_FOUND'
15
15
  export type TextRangeRejectionReason = 'text-range-in-sdt' | 'text-range-in-field' | 'text-range-in-unsupported-tracked-wrapper';
16
16
  /** Content-control creation keeps its existing top-level failure code. */
17
17
  export type ContentControlCreationRejectionReason = 'content-control-unsupported-inline-structure' | 'content-control-shared-run-boundary';
18
- export type DocumentApiRejectionReason = TextRangeRejectionReason | ContentControlCreationRejectionReason;
18
+ export type DocumentApiRejectionReason = TextRangeRejectionReason | ContentControlCreationRejectionReason | 'paragraph-mark-already-deleted';
19
19
  export interface DocumentApiRejectionDetails extends Record<string, unknown> {
20
20
  reason: DocumentApiRejectionReason;
21
21
  }
@@ -1895,6 +1895,7 @@ export type WordLayoutMarker = {
1895
1895
  */
1896
1896
  trackedChange?: MarkerTrackedChange;
1897
1897
  };
1898
+ export declare const markerRunSignature: (run: WordLayoutMarker["run"] | undefined) => string;
1898
1899
  /**
1899
1900
  * Word layout configuration for list items created via input rules.
1900
1901
  *
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-CFlvn2wr.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-CXdsObDZ.cjs");
3
3
  const require_slice_source = require("../chunks/slice-source-CFaqq0Vo.cjs");
4
4
  let react = require("react");
5
5
  let use_sync_external_store_shim = require("use-sync-external-store/shim");
@@ -1,4 +1,4 @@
1
- import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-BRahDsch.es.js";
1
+ import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-CAfcpwSS.es.js";
2
2
  import { t as toSliceSource } from "../chunks/slice-source-gfOhG2MW.es.js";
3
3
  import { createContext, createElement, useCallback, useContext, useEffect, useRef, useState } from "react";
4
4
  import { useSyncExternalStore } from "use-sync-external-store/shim";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-CFlvn2wr.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-CXdsObDZ.cjs");
3
3
  const require_slice_source = require("../chunks/slice-source-CFaqq0Vo.cjs");
4
4
  let superdoc_entry_vue = require("vue");
5
5
  //#region src/public/ui/vue.ts
@@ -1,4 +1,4 @@
1
- import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-BRahDsch.es.js";
1
+ import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-CAfcpwSS.es.js";
2
2
  import { t as toSliceSource } from "../chunks/slice-source-gfOhG2MW.es.js";
3
3
  import { computed, inject, onScopeDispose, provide, shallowRef, toRaw, toValue, watch } from "vue";
4
4
  //#region src/public/ui/vue.ts
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-CFlvn2wr.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-CXdsObDZ.cjs");
3
3
  //#region ../document-api/src/types/receipt.ts
4
4
  /** Read a known failure.details.reason without assuming every failure has one. */
5
5
  function getDocumentApiRejectionReason(details) {
@@ -9,7 +9,8 @@ function getDocumentApiRejectionReason(details) {
9
9
  case "text-range-in-field":
10
10
  case "text-range-in-unsupported-tracked-wrapper":
11
11
  case "content-control-unsupported-inline-structure":
12
- case "content-control-shared-run-boundary": return details.reason;
12
+ case "content-control-shared-run-boundary":
13
+ case "paragraph-mark-already-deleted": return details.reason;
13
14
  default: return;
14
15
  }
15
16
  }
@@ -1,4 +1,4 @@
1
- import { p as shallowEqual, s as BUILT_IN_COMMAND_IDS, t as createSuperDocUI } from "../chunks/create-super-doc-ui-BRahDsch.es.js";
1
+ import { m as shallowEqual, s as BUILT_IN_COMMAND_IDS, t as createSuperDocUI } from "../chunks/create-super-doc-ui-CAfcpwSS.es.js";
2
2
  //#region ../document-api/src/types/receipt.ts
3
3
  /** Read a known failure.details.reason without assuming every failure has one. */
4
4
  function getDocumentApiRejectionReason(details) {
@@ -8,7 +8,8 @@ function getDocumentApiRejectionReason(details) {
8
8
  case "text-range-in-field":
9
9
  case "text-range-in-unsupported-tracked-wrapper":
10
10
  case "content-control-unsupported-inline-structure":
11
- case "content-control-shared-run-boundary": return details.reason;
11
+ case "content-control-shared-run-boundary":
12
+ case "paragraph-mark-already-deleted": return details.reason;
12
13
  default: return;
13
14
  }
14
15
  }
@@ -146,7 +146,7 @@ export declare class FontResolver {
146
146
  /**
147
147
  * Resolve a CSS font-family value for MEASURE and PAINT: swap the primary family to its
148
148
  * physical substitute and keep the original fallbacks. "Calibri, sans-serif" ->
149
- * "Carlito, sans-serif"; "Calibri" -> "Carlito". An unmapped value is returned unchanged.
149
+ * "Carlito, sans-serif"; "Calibri" -> "Carlito". Quotes primary names when required by CSS syntax.
150
150
  */
151
151
  resolvePhysicalFamily(cssFontFamily: string): string;
152
152
  /**
@@ -160,8 +160,8 @@ export declare class FontResolver {
160
160
  /**
161
161
  * Face-aware CSS-stack variant for MEASURE and PAINT - the face-scoped counterpart of
162
162
  * {@link resolvePhysicalFamily}. Swaps the primary family to its substitute when this exact face is
163
- * real or docfonts authorizes a synthetic source face. Otherwise returns the value unchanged
164
- * (logical family + its fallbacks), so a missing face is never faux-styled by accident. Measure and
163
+ * real or docfonts authorizes a synthetic source face. Otherwise keeps the logical family and its
164
+ * fallbacks, quoting primary names when required by CSS syntax. Measure and
165
165
  * paint MUST call this with the same face key, or text is measured in one face and painted in another.
166
166
  */
167
167
  resolvePhysicalFamilyForFace(cssFontFamily: string, face: FaceKey, hasFace: HasFace): string;