superdoc 2.29.0-next.9 → 2.30.0-next.13

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 (177) hide show
  1. package/README.md +127 -25
  2. package/dist/chunks/{FindReplaceSurface-BKVHzhQ4.es.js → FindReplaceSurface-BEnRLpD9.es.js} +1 -1
  3. package/dist/chunks/{FindReplaceSurface-BNDrJ6VS.cjs → FindReplaceSurface-DWXgWgg7.cjs} +1 -1
  4. package/dist/chunks/{PasswordPromptSurface-6mF6Azda.es.js → PasswordPromptSurface-DjV1JgjD.es.js} +1 -1
  5. package/dist/chunks/{PasswordPromptSurface-BNkaztaP.cjs → PasswordPromptSurface-VFPnQOML.cjs} +1 -1
  6. package/dist/chunks/{PdfViewer-aOWhUVI7.es.js → PdfViewer-C2r-K8zC.es.js} +4 -10
  7. package/dist/chunks/{PdfViewer-DmSkZehl.cjs → PdfViewer-DYTbPVUr.cjs} +4 -10
  8. package/dist/chunks/{_plugin-vue_export-helper-6MBoygIY.cjs → _plugin-vue_export-helper-BzM2_tVU.cjs} +40 -7
  9. package/dist/chunks/{_plugin-vue_export-helper-CsJQtMvr.es.js → _plugin-vue_export-helper-CmkaJDnr.es.js} +23 -8
  10. package/dist/chunks/{create-super-doc-ui-Bm5kmx0W.es.js → create-super-doc-ui--o8TcYYv.es.js} +3322 -2729
  11. package/dist/chunks/{create-super-doc-ui-DN70aatf.cjs → create-super-doc-ui-CvK1JdZv.cjs} +3447 -2854
  12. package/dist/collaboration-upgrade-engine.cjs +1 -1
  13. package/dist/collaboration-upgrade-engine.es.js +1 -1
  14. package/dist/document-api/src/changes/changes.d.ts +26 -0
  15. package/dist/document-api/src/changes/changes.types.d.ts +156 -0
  16. package/dist/document-api/src/comments/comment-create-attribution.d.ts +4 -0
  17. package/dist/document-api/src/comments/comments.types.d.ts +4 -0
  18. package/dist/document-api/src/contract/command-catalog.d.ts +1 -1
  19. package/dist/document-api/src/contract/operation-definitions.d.ts +76 -8
  20. package/dist/document-api/src/contract/operation-registry.d.ts +2 -2
  21. package/dist/document-api/src/contract/schemas.d.ts +7 -1
  22. package/dist/document-api/src/create/create.d.ts +0 -4
  23. package/dist/document-api/src/diff/diff.types.d.ts +6 -6
  24. package/dist/document-api/src/header-footers/header-footers.d.ts +1 -3
  25. package/dist/document-api/src/index.d.ts +13 -1
  26. package/dist/document-api/src/inline-semantics/token-sets.d.ts +0 -2
  27. package/dist/document-api/src/insert/insert.d.ts +0 -1
  28. package/dist/document-api/src/paragraphs/paragraphs.d.ts +8 -3
  29. package/dist/document-api/src/paragraphs/paragraphs.types.d.ts +49 -5
  30. package/dist/document-api/src/tables/data/table-preset-appearance.generated.d.ts +2 -0
  31. package/dist/document-api/src/tables/table-style-presets.d.ts +73 -0
  32. package/dist/document-api/src/tables/tables.d.ts +4 -1
  33. package/dist/document-api/src/types/sd-props.d.ts +7 -0
  34. package/dist/document-api/src/types/table-operations.types.d.ts +12 -15
  35. package/dist/layout-engine/contracts/src/index.d.ts +4 -1
  36. package/dist/layout-engine/contracts/src/table-cell-vector-overlay.d.ts +2 -0
  37. package/dist/layout-engine/dom-contract/src/data-attrs.d.ts +4 -0
  38. package/dist/layout-engine/layout-bridge/src/coupled-footnote-pagination.d.ts +1 -0
  39. package/dist/layout-engine/layout-bridge/src/footnote-page-certificate.d.ts +1 -0
  40. package/dist/layout-engine/layout-bridge/src/footnote-page-planner.d.ts +5 -0
  41. package/dist/layout-engine/layout-bridge/src/incrementalLayout.d.ts +1 -0
  42. package/dist/layout-engine/layout-engine/src/footnote-page-flow.d.ts +3 -0
  43. package/dist/layout-engine/layout-engine/src/index.d.ts +7 -0
  44. package/dist/layout-engine/layout-engine/src/layout-paragraph.d.ts +5 -0
  45. package/dist/layout-engine/layout-engine/src/layout-table.d.ts +3 -1
  46. package/dist/layout-engine/layout-engine/src/layout-utils.d.ts +0 -4
  47. package/dist/layout-engine/layout-engine/src/paginator.d.ts +4 -0
  48. package/dist/layout-engine/painters/dom/src/index.d.ts +2 -0
  49. package/dist/layout-engine/painters/dom/src/paragraph/list-marker.d.ts +1 -1
  50. package/dist/layout-engine/painters/dom/src/paragraph/renderParagraphContent.d.ts +1 -1
  51. package/dist/layout-engine/painters/dom/src/styles.d.ts +0 -10
  52. package/dist/layout-engine/painters/dom/src/svg-utils.d.ts +1 -13
  53. package/dist/public/ui-react.cjs +1 -1
  54. package/dist/public/ui-react.es.js +1 -1
  55. package/dist/public/ui-vue.cjs +1 -1
  56. package/dist/public/ui-vue.es.js +1 -1
  57. package/dist/public/ui.cjs +1 -1
  58. package/dist/public/ui.es.js +1 -1
  59. package/dist/shared/common/Telemetry.d.ts +50 -0
  60. package/dist/shared/common/event-types.d.ts +13 -0
  61. package/dist/shared/font-system/src/bundled-face-names.d.ts +1 -0
  62. package/dist/shared/font-system/src/resolver.d.ts +1 -0
  63. package/dist/style.css +1 -1
  64. package/dist/style.layered.css +1 -1
  65. package/dist/superdoc/src/components/CommentsLayer/CommentDialog.vue.d.ts +17 -33
  66. package/dist/superdoc/src/components/CommentsLayer/collect-removed-comment-ids.d.ts +11 -1
  67. package/dist/superdoc/src/components/CommentsLayer/collect-tracked-change-thread.d.ts +25 -6
  68. package/dist/superdoc/src/components/CommentsLayer/comment-params.d.ts +84 -0
  69. package/dist/superdoc/src/components/CommentsLayer/comment-urls.d.ts +1 -1
  70. package/dist/superdoc/src/components/CommentsLayer/commentsList/super-comments-list.d.ts +23 -20
  71. package/dist/superdoc/src/components/CommentsLayer/helpers.d.ts +1 -4
  72. package/dist/superdoc/src/components/CommentsLayer/tracked-change-threading.d.ts +16 -1
  73. package/dist/superdoc/src/components/CommentsLayer/use-comment.d.ts +15 -95
  74. package/dist/superdoc/src/components/Whiteboard/WhiteboardLayer.vue.d.ts +4 -5
  75. package/dist/superdoc/src/components/Whiteboard/WhiteboardPage.vue.d.ts +3 -4
  76. package/dist/superdoc/src/components/Whiteboard/use-whiteboard.d.ts +30 -9
  77. package/dist/superdoc/src/components/Whiteboard/whiteboard-types.d.ts +2 -0
  78. package/dist/superdoc/src/components/surfaces/watermark-surface-runtime.d.ts +7 -7
  79. package/dist/superdoc/src/composables/use-comment-sidebar.d.ts +6 -0
  80. package/dist/superdoc/src/composables/use-comment-small-screen.d.ts +11 -7
  81. package/dist/superdoc/src/composables/use-compact-comment-popover.d.ts +44 -18
  82. package/dist/superdoc/src/composables/use-document.d.ts +51 -99
  83. package/dist/superdoc/src/composables/use-find-replace.d.ts +13 -3
  84. package/dist/superdoc/src/composables/use-password-prompt.d.ts +1 -1
  85. package/dist/superdoc/src/composables/use-viewport-fit.d.ts +62 -26
  86. package/dist/superdoc/src/core/SuperDoc.d.ts +15 -6
  87. package/dist/superdoc/src/core/collaboration/cdn-collaboration-comment-map.d.ts +1 -0
  88. package/dist/superdoc/src/core/collaboration/collaboration-comment-map.d.ts +2 -0
  89. package/dist/superdoc/src/core/collaboration/helpers.d.ts +1 -1
  90. package/dist/superdoc/src/core/config/normalize-interaction-config.d.ts +10 -1
  91. package/dist/superdoc/src/core/document-open-telemetry.d.ts +1 -1
  92. package/dist/superdoc/src/core/editor-runtime/types.d.ts +4 -0
  93. package/dist/superdoc/src/core/editor-runtime/v2/v2-editor-runtime-adapter.d.ts +1 -0
  94. package/dist/superdoc/src/core/pdf/pdf-adapter.d.ts +6 -2
  95. package/dist/superdoc/src/core/types/index.d.ts +147 -43
  96. package/dist/superdoc/src/core/v2-integration/browser-peer-runtime.d.ts +5 -3
  97. package/dist/superdoc/src/core/v2-integration/cdn-engine-loader.d.ts +3 -13
  98. package/dist/superdoc/src/core/v2-integration/internal-vue-runtime.d.ts +64 -59
  99. package/dist/superdoc/src/helpers/deprecation.d.ts +12 -3
  100. package/dist/superdoc/src/helpers/object-guards.d.ts +2 -0
  101. package/dist/superdoc/src/helpers/v2-author-required-rejection.d.ts +8 -11
  102. package/dist/superdoc/src/helpers/v2-bulk-decision-event.d.ts +9 -7
  103. package/dist/superdoc/src/helpers/v2-keyboard-edit-rejection.d.ts +8 -7
  104. package/dist/superdoc/src/helpers/v2-mutation-exception.d.ts +12 -8
  105. package/dist/superdoc/src/helpers/v2-review-geometry-delivery.d.ts +22 -0
  106. package/dist/superdoc/src/helpers/v2-review-target.d.ts +11 -1
  107. package/dist/superdoc/src/helpers/v2-selection-sync.d.ts +40 -14
  108. package/dist/superdoc/src/helpers/v2-typing-mutation-event.d.ts +14 -5
  109. package/dist/superdoc/src/icons.d.ts +11 -19
  110. package/dist/superdoc/src/internal/diagnostics/translate-diagnostic.d.ts +6 -4
  111. package/dist/superdoc/src/internal/toolbar/built-in/PageNumberMenu.vue.d.ts +25 -15
  112. package/dist/superdoc/src/internal/toolbar/built-in/ToolbarButton.vue.d.ts +1 -0
  113. package/dist/superdoc/src/internal/toolbar/built-in/constants.d.ts +3 -1
  114. package/dist/superdoc/src/internal/toolbar/built-in/font-options.d.ts +15 -1
  115. package/dist/superdoc/src/internal/toolbar/built-in/font-typeahead.d.ts +37 -7
  116. package/dist/superdoc/src/internal/toolbar/built-in/general.d.ts +12 -1
  117. package/dist/superdoc/src/internal/toolbar/built-in/helpers.d.ts +9 -4
  118. package/dist/superdoc/src/internal/toolbar/built-in/list-style-buttons.d.ts +2 -2
  119. package/dist/superdoc/src/internal/toolbar/built-in/page-number-feedback.d.ts +4 -5
  120. package/dist/superdoc/src/internal/toolbar/built-in/scroll-helpers.d.ts +3 -4
  121. package/dist/superdoc/src/internal/toolbar/built-in/toolbarIcons.d.ts +78 -145
  122. package/dist/superdoc/src/internal/toolbar/built-in/url-safety.d.ts +11 -3
  123. package/dist/superdoc/src/internal/toolbar/built-in-toolbar.d.ts +4 -3
  124. package/dist/superdoc/src/internal/toolbar/image-upload.d.ts +29 -39
  125. package/dist/superdoc/src/public/content-control-ref.d.ts +12 -0
  126. package/dist/superdoc/src/public/index.d.cts +20 -0
  127. package/dist/superdoc/src/public/index.d.ts +4 -1
  128. package/dist/superdoc/src/public/ui/async-read-cache.d.ts +32 -0
  129. package/dist/superdoc/src/public/ui/block-commands.d.ts +39 -0
  130. package/dist/superdoc/src/public/ui/command-results.d.ts +39 -0
  131. package/dist/superdoc/src/public/ui/commands.d.ts +5 -1
  132. package/dist/superdoc/src/public/ui/create-super-doc-ui.d.ts +1 -17
  133. package/dist/superdoc/src/public/ui/document-change-records.d.ts +7 -0
  134. package/dist/superdoc/src/public/ui/entity-rows.d.ts +14 -0
  135. package/dist/superdoc/src/public/ui/font-options.d.ts +7 -0
  136. package/dist/superdoc/src/public/ui/format-painter-helpers.d.ts +2 -8
  137. package/dist/superdoc/src/public/ui/format-painter-paragraph.d.ts +7 -0
  138. package/dist/superdoc/src/public/ui/format-painter-state.d.ts +29 -0
  139. package/dist/superdoc/src/public/ui/heavy-read-policy.d.ts +11 -0
  140. package/dist/superdoc/src/public/ui/host-events.d.ts +3 -0
  141. package/dist/superdoc/src/public/ui/inline-values.d.ts +80 -0
  142. package/dist/superdoc/src/public/ui/loose-record.d.ts +4 -0
  143. package/dist/superdoc/src/public/ui/reasons.d.ts +1 -0
  144. package/dist/superdoc/src/public/ui/selection-targets.d.ts +53 -0
  145. package/dist/superdoc/src/public/ui/shared-tracked-changes-catalog.d.ts +16 -0
  146. package/dist/superdoc/src/public/ui/tracked-change-ids.d.ts +51 -0
  147. package/dist/superdoc/src/public/ui/types.d.ts +25 -2
  148. package/dist/superdoc/src/public/ui/ui-bench-timing.d.ts +9 -0
  149. package/dist/superdoc/src/public/ui.d.cts +18 -0
  150. package/dist/superdoc/src/public/ui.d.ts +1 -1
  151. package/dist/superdoc/src/stores/comments-store.d.ts +23028 -552
  152. package/dist/superdoc/src/stores/helpers/comment-document-scope.d.ts +22 -0
  153. package/dist/superdoc/src/stores/helpers/comment-grouping.d.ts +1 -1
  154. package/dist/superdoc/src/stores/helpers/comment-identity.d.ts +10 -10
  155. package/dist/superdoc/src/stores/helpers/pending-selection-snapshot.d.ts +17 -0
  156. package/dist/superdoc/src/stores/helpers/review-presentation.d.ts +91 -0
  157. package/dist/superdoc/src/stores/helpers/tracked-change-compaction.d.ts +16 -0
  158. package/dist/superdoc/src/stores/helpers/tracked-change-decision.d.ts +45 -0
  159. package/dist/superdoc/src/stores/helpers/tracked-change-identity.d.ts +4 -2
  160. package/dist/superdoc/src/stores/helpers/tracked-change-row-values.d.ts +1 -8
  161. package/dist/superdoc/src/stores/helpers/tracked-change-thread-index.d.ts +1 -1
  162. package/dist/superdoc/src/stores/helpers/v2-review-adapters.d.ts +147 -0
  163. package/dist/superdoc/src/stores/superdoc-store.d.ts +12 -2895
  164. package/dist/superdoc.cjs +1330 -972
  165. package/dist/superdoc.es.js +1242 -884
  166. package/dist/word-layout/src/marker-utils.d.ts +0 -5
  167. package/dist/word-layout/src/unit-conversions.d.ts +0 -1
  168. package/dist-cdn/style.layered.css +1 -1
  169. package/dist-cdn/superdoc.min.css +1 -1
  170. package/dist-cdn/superdoc.min.js +38 -42
  171. package/package.json +13 -3
  172. package/dist/document-api/src/diff/index.d.ts +0 -3
  173. package/dist/document-api/src/write/locator.d.ts +0 -24
  174. package/dist/layout-engine/painters/dom/src/features/feature-registry.d.ts +0 -41
  175. package/dist/superdoc/src/internal/toolbar/built-in/format-negation.d.ts +0 -5
  176. package/dist/superdoc/src/main.d.ts +0 -1
  177. package/dist/word-layout/src/tab-layout.d.ts +0 -193
@@ -0,0 +1,32 @@
1
+ export type AsyncReadEntry = {
2
+ token: string | null;
3
+ value: unknown;
4
+ hasSettled: boolean;
5
+ inflightToken: string | null;
6
+ failedToken?: string | null;
7
+ failureCount?: number;
8
+ retryAtMs?: number;
9
+ settled?: Promise<void>;
10
+ };
11
+ export type AsyncReadSettlement = {
12
+ key: string;
13
+ settledAtMs: number;
14
+ commandId: string | null;
15
+ commandKind: string | null;
16
+ };
17
+ export interface AsyncReadCacheOptions {
18
+ isDisposed: () => boolean;
19
+ recomputeAfterSettle: () => void;
20
+ recomputeWhenRetryDue: () => void;
21
+ }
22
+ export declare function failureRetryDelayMs(failureCount: number): number;
23
+ export declare function createAsyncReadCache(options: AsyncReadCacheOptions): {
24
+ entries: Map<string, AsyncReadEntry>;
25
+ issue: (key: string, token: string, run: () => unknown, normalize: (raw: unknown) => unknown) => AsyncReadEntry | null;
26
+ seed: (key: string, token: string | null, value: unknown, inflightToken?: string | null) => void;
27
+ clearKeys: (predicate: (key: string) => boolean) => void;
28
+ scheduleRefresh: () => void;
29
+ scheduleFailureRetry: (retryAtMs: number) => void;
30
+ cancelFailureRetry: () => void;
31
+ drainSettlements: () => AsyncReadSettlement[];
32
+ };
@@ -0,0 +1,39 @@
1
+ import { LooseRecord } from './loose-record.js';
2
+ import { TableCommandSpec } from './commands.js';
3
+ export declare const PARAGRAPH_INDENT_STEP_TWIPS = 720;
4
+ export type ParagraphIndentationTwips = {
5
+ left?: number;
6
+ right?: number;
7
+ firstLine?: number;
8
+ hanging?: number;
9
+ };
10
+ export declare function pointsToTwips(value: number): number;
11
+ export declare function readParagraphIndentationFromResult(result: unknown): ParagraphIndentationTwips | null;
12
+ export interface ResolvedTableContext {
13
+ canMerge: boolean;
14
+ tableNodeId: string;
15
+ rowIndex: number;
16
+ columnIndex: number;
17
+ cellNodeId: string | null;
18
+ mergeRange: {
19
+ start: {
20
+ rowIndex: number;
21
+ columnIndex: number;
22
+ };
23
+ end: {
24
+ rowIndex: number;
25
+ columnIndex: number;
26
+ };
27
+ } | null;
28
+ }
29
+ export declare function readMergeRange(range: LooseRecord | undefined): {
30
+ start: {
31
+ rowIndex: number;
32
+ columnIndex: number;
33
+ };
34
+ end: {
35
+ rowIndex: number;
36
+ columnIndex: number;
37
+ };
38
+ } | null;
39
+ export declare function buildTableCommandInput(action: TableCommandSpec['action'], context: ResolvedTableContext): LooseRecord | null;
@@ -0,0 +1,39 @@
1
+ import { SuperDocUIReason } from './reasons.js';
2
+ import { CommandExecutionResult, CommandState, ListPresetId, PartialLinkEditReceipt, Receipt, SelectionSlice, SuperDocUIFailureReceipt, SuperDocUIReceiptFailureCode, ViewportRect, ViewportRectResult, WorkflowActionResult } from './types.js';
3
+ import { AnyFn, LooseRecord } from './loose-record.js';
4
+ import { CommandDescriptor, TrackDecisionSpec, UiDocRoute } from './commands.js';
5
+ export declare const SUPERDOC_UI_REASON_VALUES: Set<string>;
6
+ export declare function coerceSuperDocUIReason(reason: unknown, fallback: SuperDocUIReason): SuperDocUIReason;
7
+ export declare function normalizeHostSelectionApplyResult(result: unknown): WorkflowActionResult;
8
+ export declare const LIST_TOGGLE_KINDS: Record<string, 'bullet' | 'ordered'>;
9
+ export declare function listToggleKind(id: string): 'bullet' | 'ordered' | null;
10
+ export declare const TOOLBAR_LIST_STYLE_PRESETS: Record<string, ListPresetId>;
11
+ export declare function presetFromToolbarStyleKey(styleKey: string): {
12
+ preset?: ListPresetId;
13
+ behavior?: 'toggleStyle';
14
+ };
15
+ export declare function safeCall<T>(fn: (() => T) | undefined, fallback: T): T;
16
+ export declare function hostMethod(target: unknown, name: string): ((...args: unknown[]) => unknown) | null;
17
+ export declare function hasAbortedFlag(value: unknown): value is {
18
+ readonly aborted: boolean;
19
+ };
20
+ export declare function isPromiseLike(value: unknown): value is PromiseLike<unknown>;
21
+ export declare function resolveDocOperation(doc: LooseRecord | null, path: UiDocRoute): AnyFn | null;
22
+ export declare function failedReceipt(message: string, code?: Exclude<SuperDocUIReceiptFailureCode, 'PARTIAL_LINK_EDIT'>): SuperDocUIFailureReceipt;
23
+ export declare function partialLinkEditFailure(hyperlinkResult: CommandExecutionResult, textResult: CommandExecutionResult): PartialLinkEditReceipt;
24
+ export declare const MIRRORED_EDIT_COMMAND_IDS: {
25
+ readonly undo: "history.undo";
26
+ readonly redo: "history.redo";
27
+ };
28
+ export declare function normalizeCommandState(state: Partial<CommandState>, source: CommandState['source']): CommandState;
29
+ export declare function commandResultFromOperationResult(result: unknown): CommandExecutionResult;
30
+ export declare function isSuccessfulReceipt(result: CommandExecutionResult): result is Extract<Receipt, {
31
+ success: true;
32
+ }>;
33
+ export declare function commandResultSucceeded(result: CommandExecutionResult): boolean;
34
+ export declare function combineCommandResults(results: readonly CommandExecutionResult[]): CommandExecutionResult;
35
+ export declare function trackDecisionCommand(id: string): TrackDecisionSpec | null;
36
+ export declare function rectResult(rects: readonly ViewportRect[]): ViewportRectResult;
37
+ export declare function rectFailure(reason: string): ViewportRectResult;
38
+ export declare function relativizeRects(result: ViewportRectResult, relativeTo?: HTMLElement): ViewportRectResult;
39
+ export declare function commandIsActive(descriptor: CommandDescriptor, selection: SelectionSlice): boolean;
@@ -1,4 +1,8 @@
1
+ import { OperationId } from '../../../../document-api/src/index.js';
1
2
  import { SuperDocUIReason } from './reasons.js';
3
+ export type InternalUiDocRoute = 'format.readEffectiveInlineUniformity' | 'lists.indentRange' | 'lists.outdentRange' | 'lists.outdentInStory' | 'lists.removeInStory';
4
+ export type DocumentApiAliasRoute = 'format.strikethrough';
5
+ export type UiDocRoute = OperationId | DocumentApiAliasRoute | InternalUiDocRoute;
2
6
  /**
3
7
  * The original v2-native command ids. These are the historically stable
4
8
  * `superdoc/ui` built-ins; the broader catalog below adds v1 headless-toolbar
@@ -192,7 +196,7 @@ export interface CommandDescriptor {
192
196
  /** Other ids that alias this command (documentation). */
193
197
  aliases?: readonly string[];
194
198
  /** Dotted path on the public Document API facade (`activeEditor.doc`). */
195
- docRoute?: string;
199
+ docRoute?: UiDocRoute;
196
200
  /** Public SuperDoc-instance method this command calls. */
197
201
  instanceRoute?: string;
198
202
  /** Fixed argument passed to `instanceRoute` instead of the payload. */
@@ -8,7 +8,7 @@ type FirstPartyCommandMutation = {
8
8
  };
9
9
  supports: (memberPath: string) => boolean;
10
10
  run: (memberPath: string, args: readonly unknown[]) => unknown;
11
- runListApply: (input: unknown) => Promise<boolean>;
11
+ runListApply: (input: unknown) => Promise<unknown>;
12
12
  };
13
13
  export declare function registerFirstPartyCommandMutation(superdoc: object, host: object, mutation: FirstPartyCommandMutation): void;
14
14
  /**
@@ -18,21 +18,5 @@ export declare function registerFirstPartyCommandMutation(superdoc: object, host
18
18
  export declare function readFirstPartyPageNumbers(ui: object): Promise<unknown>;
19
19
  export declare function executeFirstPartyCommandAsync(ui: Pick<SuperDocUI, 'commands'>, id: string, payload?: unknown): Promise<CommandExecutionResult>;
20
20
  export declare function executeFirstPartyShortcutAsync(ui: object, id: string, payload?: unknown): Promise<CommandExecutionResult>;
21
- /**
22
- * Heavy-read policy for the async read coordinator (source-loading deferral).
23
- * One shared table: the coordinator's gate and the table-driven policy tests
24
- * both consume THIS list, so the deferred set cannot silently drift from the
25
- * tested set. Keys are coordinator cache keys (exact) or key families
26
- * (prefix). See the gate in `readAsync` for the runtime semantics.
27
- */
28
- interface HeavyDocReadPolicyEntry {
29
- key: string;
30
- match: 'exact' | 'prefix';
31
- /** Audit rationale — why this key is catalog-scale (or reserved). */
32
- note: string;
33
- }
34
- export declare const HEAVY_DOC_READ_POLICY: readonly HeavyDocReadPolicyEntry[];
35
- /** Whether a coordinator cache key falls under the heavy-read policy. */
36
- export declare function isHeavyDocReadKey(key: string): boolean;
37
21
  export declare function createSuperDocUI(options: SuperDocUIOptions): SuperDocUI;
38
22
  export {};
@@ -0,0 +1,7 @@
1
+ import { ChangeRecord, StoryLocator } from '../../../../document-api/src/index.js';
2
+ import { SuperDocDocumentChange } from './types.js';
3
+ type RemoteDocumentChangeFacts = Omit<SuperDocDocumentChange, 'documentEpoch' | 'seq'>;
4
+ export declare function remoteChangeRecordsOf(event: Record<string, unknown>): ChangeRecord[];
5
+ export declare function storiesOfChangeRecords(records: readonly ChangeRecord[]): StoryLocator[];
6
+ export declare function remoteDocumentChange(records: readonly ChangeRecord[]): RemoteDocumentChangeFacts;
7
+ export {};
@@ -0,0 +1,14 @@
1
+ export declare function readEntityTarget(row: unknown): unknown | null;
2
+ export declare function isHostGeometryTarget(target: unknown): boolean;
3
+ export declare function readTrackedChangeNavigationTarget(row: unknown, options?: {
4
+ preferStableBlock?: boolean;
5
+ }): unknown | null;
6
+ export declare function storyLocatorSignature(story: unknown): string;
7
+ export declare function readEntityStory(row: unknown): unknown | null;
8
+ export declare function entityRowMatchesRequest(row: unknown, id: string, story?: unknown): boolean;
9
+ export declare function readEntityRequestStory(row: unknown): unknown | undefined;
10
+ export declare function layoutStoryDatasetToStoryLocator(raw: unknown): unknown;
11
+ export declare function storyKeyToStoryLocator(raw: unknown): unknown;
12
+ export declare function readSelectionTarget(row: unknown): unknown | null;
13
+ export declare function readContentControlRequestId(input: unknown): string | null;
14
+ export declare function readEntityId(row: unknown): string | null;
@@ -0,0 +1,7 @@
1
+ import { FontFamilyOption, FontSizeOption } from './types.js';
2
+ export declare const DEFAULT_FONT_FAMILY_OPTIONS: readonly FontFamilyOption[];
3
+ export declare function canonicalFontFamilyName(family: string): string;
4
+ export declare function normalizeDocumentFontOptions(raw: unknown): FontFamilyOption[];
5
+ export declare function normalizePickerFontOptions(raw: unknown): FontFamilyOption[];
6
+ export declare function composeFontFamilyOptions(documentOptions: readonly FontFamilyOption[], pickerOptions?: readonly FontFamilyOption[]): FontFamilyOption[];
7
+ export declare const DEFAULT_FONT_SIZE_OPTIONS: readonly FontSizeOption[];
@@ -2,22 +2,16 @@
2
2
  * Maps SDRunProps field names to InlineRunPatch field names.
3
3
  * SDRunProps (read-side) and InlineRunPatch (write-side) use different keys
4
4
  * for the same properties; direct assignment between them is forbidden.
5
- *
6
- * @param {Record<string, unknown>} props - SDRunProps object from doc.getNodeById
7
- * @returns {Record<string, unknown>} InlineRunPatch ready for doc.format.apply
8
5
  */
9
- export function sdRunPropsToInlineRunPatch(props: Record<string, unknown>): Record<string, unknown>;
6
+ export declare function sdRunPropsToInlineRunPatch(props: Record<string, unknown>): Record<string, unknown>;
10
7
  /**
11
8
  * Serializes a selection to a stable string key used to detect whether
12
9
  * the target selection is the same as the source (skip apply in that case).
13
10
  *
14
11
  * Falls back to the plain text target when the host has not populated an
15
12
  * explicit `selectionTarget` yet.
16
- *
17
- * @param {{ selectionTarget?: unknown; target?: unknown } | null | undefined} selection
18
- * @returns {string}
19
13
  */
20
- export function selectionKey(selection: {
14
+ export declare function selectionKey(selection: {
21
15
  selectionTarget?: unknown;
22
16
  target?: unknown;
23
17
  } | null | undefined): string;
@@ -0,0 +1,7 @@
1
+ import { ParagraphBatchOperation, SDParagraphProps, SDTabStop } from '../../../../document-api/src/index.js';
2
+ export type ParagraphPaintOperation = ParagraphBatchOperation;
3
+ type ParagraphPaintProperties = Omit<SDParagraphProps, 'tabs'> & {
4
+ tabs?: Partial<SDTabStop>[];
5
+ };
6
+ export declare function captureParagraphPaintOperations(props: ParagraphPaintProperties, supports?: (operationId: ParagraphPaintOperation['operationId']) => boolean): ParagraphPaintOperation[];
7
+ export {};
@@ -0,0 +1,29 @@
1
+ import { SDRunProps } from '../../../../document-api/src/index.js';
2
+ import { ParagraphPaintOperation } from './format-painter-paragraph.js';
3
+ export type FormatPainterMode = 'idle' | 'armed' | 'persistent';
4
+ export interface FormatPainterParagraphSnapshot {
5
+ styleId: string | null;
6
+ inheritedFontKeys?: Array<'fontFamily' | 'fontSize'>;
7
+ operations: ParagraphPaintOperation[];
8
+ markRunProps: SDRunProps | null;
9
+ numbering: {
10
+ numId: number;
11
+ level?: number;
12
+ } | null;
13
+ listStyle: unknown | null;
14
+ }
15
+ export interface FormatPainterSnapshot {
16
+ story: unknown | null;
17
+ inline: Record<string, unknown>;
18
+ mixedInlineKeys: string[];
19
+ paragraph: FormatPainterParagraphSnapshot | null;
20
+ }
21
+ export declare const FORMAT_PAINTER_BOOLEAN_KEYS: Set<string>;
22
+ export interface FormatPainterState {
23
+ mode: FormatPainterMode;
24
+ snapshot: FormatPainterSnapshot | null;
25
+ sourceSelectionKey: string | null;
26
+ lastClickAt: number;
27
+ pointerSelecting: boolean;
28
+ keyboardSelecting: boolean;
29
+ }
@@ -0,0 +1,11 @@
1
+ import { SliceStatus } from './types.js';
2
+ export interface HeavyDocReadPolicyEntry {
3
+ key: string;
4
+ match: 'exact' | 'prefix';
5
+ note: string;
6
+ }
7
+ export declare const HEAVY_DOC_READ_POLICY: readonly HeavyDocReadPolicyEntry[];
8
+ export declare const COMMENTS_CATALOG_PART_URIS: ReadonlySet<string>;
9
+ export declare function isHeavyDocReadKey(key: string): boolean;
10
+ export declare const STATUS_RANK: Record<SliceStatus, number>;
11
+ export declare function combineStatus(...statuses: readonly SliceStatus[]): SliceStatus;
@@ -0,0 +1,3 @@
1
+ import { ContentControlClickPayload } from './types.js';
2
+ export declare const HOST_EVENTS: readonly ["document-replaced", "editorCreate", "active-editor-change", "document-mode-change", "formatting-marks-change", "zoomChange", "measurement-unit-change", "viewport-change", "fonts-changed"];
3
+ export declare function isContentControlClickPayload(value: unknown): value is ContentControlClickPayload;
@@ -0,0 +1,80 @@
1
+ import { SelectionSlice, SelectionTarget, SuperDocUIState } from './types.js';
2
+ import { LooseRecord } from './loose-record.js';
3
+ import { CommandDescriptor } from './commands.js';
4
+ import { selectionStoryLocator } from './selection-targets.js';
5
+ export { selectionStoryLocator };
6
+ export type EffectiveInlineUniformityState = {
7
+ state: 'uniform';
8
+ value: string;
9
+ } | {
10
+ state: 'mixed' | 'unresolvable' | 'absent';
11
+ };
12
+ export declare function readEffectiveInlineUniformityStates(raw: unknown): Record<string, EffectiveInlineUniformityState> | null;
13
+ export type SelectionTextSegment = {
14
+ blockId: string;
15
+ start: number;
16
+ end: number;
17
+ };
18
+ export declare const PROJECTED_INLINE_SELECTION_VALUE_KEYS: readonly ["fontFamily", "fontSize", "color", "highlight"];
19
+ export type ProjectedInlineSelectionValueKey = (typeof PROJECTED_INLINE_SELECTION_VALUE_KEYS)[number];
20
+ export type ProjectedInlineSelectionValues = Partial<Record<ProjectedInlineSelectionValueKey, string>>;
21
+ export declare const EFFECTIVE_MARK_KEYS: readonly ["bold", "italic", "underline", "strikethrough"];
22
+ export type EffectiveMarkKey = (typeof EFFECTIVE_MARK_KEYS)[number];
23
+ export type EffectiveMarkValues = Partial<Record<EffectiveMarkKey, boolean>>;
24
+ export type OptimisticInlineSelectionValue = {
25
+ selectionSignature: string;
26
+ value: string;
27
+ };
28
+ export type OptimisticInlineToggle = {
29
+ selectionSignature: string;
30
+ active: boolean;
31
+ generation: number;
32
+ settled: boolean;
33
+ editorSource: unknown;
34
+ documentSource: unknown;
35
+ documentMode: SuperDocUIState['documentMode'];
36
+ };
37
+ export type OptimisticParagraphAlignment = {
38
+ selectionSignature: string;
39
+ value: 'left' | 'center' | 'right' | 'justify';
40
+ generation: number;
41
+ settled: boolean;
42
+ canReconcile: boolean;
43
+ };
44
+ export type PendingInlineToggleMutation = {
45
+ key: string;
46
+ mutate: () => unknown;
47
+ result: Promise<unknown>;
48
+ resolve: (value: unknown | PromiseLike<unknown>) => void;
49
+ };
50
+ export declare function isProjectedInlineSelectionValueKey(value: string): value is ProjectedInlineSelectionValueKey;
51
+ export declare function selectionTextSegments(selection: SelectionSlice): SelectionTextSegment[];
52
+ export declare function selectionInlineValueStorySignature(selection: SelectionSlice): string;
53
+ export declare function selectionInlineValueSignature(selection: SelectionSlice): string | null;
54
+ export declare function selectionEffectiveUniformitySignature(selection: SelectionSlice): string | null;
55
+ export declare function normalizeOptimisticInlineSelectionValue(key: ProjectedInlineSelectionValueKey, value: unknown): string | null;
56
+ export declare function rangesOverlap(left: {
57
+ start: number;
58
+ end: number;
59
+ }, right: {
60
+ start: number;
61
+ end: number;
62
+ }): boolean;
63
+ export declare function queryMatchItemSegments(item: LooseRecord | null | undefined): SelectionTextSegment[];
64
+ export declare function sameSelectionTextSegments(left: readonly SelectionTextSegment[], right: readonly SelectionTextSegment[]): boolean;
65
+ export declare function pickSelectionTextQueryItem(result: LooseRecord | null, selection: SelectionSlice): LooseRecord | null;
66
+ export declare function readProjectedInlineStyleValue(styles: LooseRecord | null | undefined, key: ProjectedInlineSelectionValueKey): string | undefined;
67
+ export declare function normalizeLayoutFontFamily(value: unknown): string | undefined;
68
+ export declare function normalizeLayoutFontSizePt(value: unknown): string | undefined;
69
+ export declare function normalizeProjectedInlineStyleValueKey(key: ProjectedInlineSelectionValueKey, value: string): string;
70
+ export declare function projectInlineValuesFromQueryItem(item: LooseRecord | null, selection: SelectionSlice): ProjectedInlineSelectionValues;
71
+ export declare function collectProjectionTextBlocks(blocks: unknown): LooseRecord[];
72
+ export declare function projectionBlockMatchesId(block: LooseRecord, id: string): boolean;
73
+ export declare function projectionRunSelectionLength(run: LooseRecord): number;
74
+ export declare function inlineFormatMethod(descriptor: CommandDescriptor): string | null;
75
+ export declare const CLEAR_INLINE_PATCH: Readonly<Record<string, null>>;
76
+ export declare const TRACKED_CLEAR_INLINE_PATCH: Readonly<Record<string, null>>;
77
+ export declare function buildInlineFormatInput(spec: {
78
+ key: string;
79
+ kind: 'toggle' | 'value-string' | 'value-number' | 'clear';
80
+ }, target: SelectionTarget, payload: unknown, active: boolean): LooseRecord | null;
@@ -0,0 +1,4 @@
1
+ export type AnyFn = (...args: unknown[]) => unknown;
2
+ export type LooseRecord = Record<string, unknown>;
3
+ export declare function readRecord(value: unknown): LooseRecord | undefined;
4
+ export declare function readRecordList(value: unknown): Array<LooseRecord | undefined>;
@@ -94,6 +94,7 @@ export declare const SUPERDOC_UI_REASONS: {
94
94
  * are never gated by this reason.
95
95
  */
96
96
  readonly contentControlLocked: "content-control-locked";
97
+ readonly deletedTextFormattingUnsupported: "deleted-text-formatting-unsupported";
97
98
  /**
98
99
  * The current user is not allowed to run this command under the product
99
100
  * permissionResolver / role matrix (SD-3845). Distinct from document
@@ -0,0 +1,53 @@
1
+ import { SelectionCapture, SelectionPoint, SelectionSlice, SelectionTarget, TextTarget } from './types.js';
2
+ import { LooseRecord } from './loose-record.js';
3
+ import { TextAddress, TextSegment } from '../../../../document-api/src/index.js';
4
+ export declare const EMPTY_SELECTION: SelectionSlice;
5
+ export declare function textTargetSegments(target: TextTarget | null | undefined): readonly TextSegment[];
6
+ export declare function selectionPointWithBlockId(point: SelectionPoint | null | undefined): Extract<SelectionPoint, {
7
+ kind: 'text';
8
+ }> | undefined;
9
+ export declare function selectionBlockRange(selection: SelectionSlice): {
10
+ startBlockId: string;
11
+ endBlockId: string;
12
+ } | null;
13
+ export declare function selectionBlockIds(selection: SelectionSlice): string[];
14
+ export declare const MAX_REACTIVE_SELECTION_BLOCK_READS = 64;
15
+ export declare function canProbeEverySelectedBlock(blockIds: readonly string[]): boolean;
16
+ export declare function selectionStoryLocator(selection: SelectionSlice): unknown | undefined;
17
+ export declare function selectionStory(selection: SelectionSlice): LooseRecord;
18
+ export declare function paragraphTarget(blockId: string, story?: unknown): LooseRecord;
19
+ export declare function listsBlockTarget(blockId: string): LooseRecord;
20
+ export declare function listItemTarget(blockId: string, story?: unknown): LooseRecord;
21
+ export declare function selectionTextAddresses(selection: SelectionSlice): TextAddress[];
22
+ export declare function textAddressesFromTarget(target: unknown): LooseRecord[];
23
+ export declare function collapsedTextAddressFromTarget(target: unknown): LooseRecord | null;
24
+ export declare function collapsedTextAddressFromSelection(selection: SelectionSlice): LooseRecord | null;
25
+ export declare function isHeaderFooterCaret(selection: SelectionSlice): boolean;
26
+ export declare function createLocationAt(selection: SelectionSlice, mode: 'nodeId' | 'target'): LooseRecord;
27
+ export declare function hyperlinkAddressToSelectionTarget(address: LooseRecord | null | undefined): LooseRecord | null;
28
+ export declare function hyperlinkTargetFromHref(href: string): LooseRecord;
29
+ export declare function isAddressableSegment(segment: unknown): segment is {
30
+ blockId: string;
31
+ range: {
32
+ start: number;
33
+ end: number;
34
+ };
35
+ };
36
+ export declare function selectionTargetFromTextTarget(target: SelectionSlice['target'] | SelectionCapture['target'] | null): SelectionTarget | null;
37
+ export type CellSelectionCapture = SelectionCapture & {
38
+ _tableCellSelectionTarget?: unknown;
39
+ _paintedSelectionTarget?: unknown;
40
+ };
41
+ export type TextSelectionTarget = SelectionTarget & {
42
+ start: Extract<SelectionTarget['start'], {
43
+ kind: 'text';
44
+ }>;
45
+ end: Extract<SelectionTarget['end'], {
46
+ kind: 'text';
47
+ }>;
48
+ };
49
+ export declare function capturedTableCellTarget(value: unknown): TextSelectionTarget | null;
50
+ export declare function selectionTargetForRestore(capture: SelectionCapture): SelectionTarget | null;
51
+ export declare function resolveInlineSelectionTarget(selection: SelectionSlice): SelectionTarget | null;
52
+ export declare function selectionHasOnlyDeletedText(selection: SelectionSlice): boolean;
53
+ export declare function selectionTouchesDeletedText(selection: SelectionSlice): boolean;
@@ -0,0 +1,16 @@
1
+ export type SharedUiTrackedChangesCatalogState = {
2
+ refCount: number;
3
+ generation: number;
4
+ abortController: AbortController;
5
+ inFlight: {
6
+ generation: number;
7
+ commitSeq: number;
8
+ promise: Promise<unknown>;
9
+ } | null;
10
+ activeMutationTokens: Set<string>;
11
+ commitSeq: number;
12
+ countedCommitEvents: WeakSet<object>;
13
+ };
14
+ export declare const sharedUiTrackedChangesCatalogByHost: WeakMap<object, SharedUiTrackedChangesCatalogState>;
15
+ export declare function acquireSharedUiTrackedChangesCatalog(host: object): SharedUiTrackedChangesCatalogState;
16
+ export declare function releaseSharedUiTrackedChangesCatalog(host: object, state: SharedUiTrackedChangesCatalogState): void;
@@ -0,0 +1,51 @@
1
+ import { CommentInfo, SelectionSlice, TrackChangeInfo, TrackChangesItem } from './types.js';
2
+ import { LooseRecord } from './loose-record.js';
3
+ import { SuperDocUIReason } from './reasons.js';
4
+ export declare function identityText(value: unknown): string;
5
+ export type TrackChangeAuthorship = Pick<TrackChangeInfo, 'author' | 'authorEmail'> & {
6
+ authorId?: unknown;
7
+ };
8
+ export declare function trackedChangeOwnedByCurrentUser(change: TrackChangeAuthorship, currentUser: LooseRecord | null): boolean;
9
+ export declare function readCollapsedHostTrackChangeId(snapshot: unknown): string | null;
10
+ export declare function isNonCollapsedHostSelection(snapshot: unknown): boolean;
11
+ export type SelectionTrackDecisionPlan = {
12
+ kind: 'ids';
13
+ ids: readonly string[];
14
+ } | {
15
+ kind: 'id';
16
+ id: string;
17
+ story?: unknown;
18
+ } | {
19
+ kind: 'range';
20
+ target: LooseRecord;
21
+ changeId: string | null;
22
+ story?: unknown;
23
+ permissionIds?: readonly string[];
24
+ } | {
25
+ kind: 'blocked';
26
+ reason: SuperDocUIReason;
27
+ } | {
28
+ kind: 'unavailable';
29
+ };
30
+ export interface TrackedChangeIdContext {
31
+ toPublicId(rawId: string): string | null;
32
+ aliasesFor(publicId: string): readonly string[];
33
+ }
34
+ export declare const trackedChangeIdContextCache: WeakMap<readonly unknown[], TrackedChangeIdContext>;
35
+ export declare function readTrackChangeProvenanceIds(item: unknown): string[];
36
+ export declare function buildTrackedChangeIdContext(items: readonly unknown[]): TrackedChangeIdContext;
37
+ export declare const storyScopedTrackedChangeIdContextCache: WeakMap<readonly unknown[], Map<string, TrackedChangeIdContext>>;
38
+ export declare const declaredBodyItemsCache: WeakMap<readonly unknown[], readonly unknown[]>;
39
+ export declare function buildStoryScopedTrackedChangeIdContext(items: readonly unknown[], story: unknown): TrackedChangeIdContext;
40
+ export declare function isTextboxStory(story: unknown): boolean;
41
+ export declare function resolveStorylessCanonicalTrackedChangeId(items: readonly unknown[], selectionIds: readonly string[]): string | null;
42
+ export declare function declaredBodyItems(items: readonly unknown[]): readonly unknown[];
43
+ export declare function resolveSelectionActiveChangeId(options: {
44
+ selectionIds: readonly string[];
45
+ publicIds?: readonly string[];
46
+ selection: SelectionSlice;
47
+ bodyItems: readonly unknown[];
48
+ allStoryItems: readonly unknown[] | null;
49
+ }): string | null;
50
+ export declare function resolveActiveCommentId(items: readonly CommentInfo[], commentId: string): string | null;
51
+ export declare function trackChangesItemPayload(item: TrackChangesItem): TrackChangeInfo;
@@ -1,5 +1,6 @@
1
- import { CommentsListQuery as DocumentApiCommentsListQuery, CommentsListResult, TrackChangesListResult, EntityAddress, TextAddress, BookmarkAddress, TextTarget, ScrollIntoViewInput, ScrollIntoViewOutput, SelectionInfo, SelectionTarget, Receipt, ReceiptFailureCode, ContentControlInfo, ContentControlTarget, StyleCatalogItem, StyleCatalogDiagnostic, StyleCatalogSourceStatus, StylesGetCatalogInput, StylesGetCatalogResult, StoryLocator as DocumentStoryLocator } from '../../../../document-api/src/index.js';
1
+ import { CommentsListQuery as DocumentApiCommentsListQuery, CommentsListResult, TrackChangesListResult, EntityAddress, TextAddress, BookmarkAddress, TextTarget, ScrollIntoViewInput, ScrollIntoViewOutput, SelectionInfo, SelectionTarget, Receipt, ReceiptFailureCode, ContentControlInfo, ContentControlTarget, StyleCatalogItem, StyleCatalogDiagnostic, StyleCatalogSourceStatus, StylesGetCatalogInput, StylesGetCatalogResult, StoryLocator as DocumentStoryLocator, ChangeRecord } from '../../../../document-api/src/index.js';
2
2
  import { BrowserDocumentApi, PartialBrowserDocumentApi } from '../browser-document-api.js';
3
+ import { ContentControlClickPayload } from '../content-control-ref.js';
3
4
  import { ExportParams } from '../export-types.js';
4
5
  import { SuperDocVisualHandle, SuperDocVisualOptions } from '../../core/extensions/types.js';
5
6
  import { DocumentReplacementResult } from '../document-replacement.js';
@@ -31,10 +32,11 @@ import { BuiltInCommandId } from './commands.js';
31
32
  * (`scripts/ensure-types.cjs` `rewriteDocApiPaths`), so no bare private
32
33
  * specifier leaks into the emitted `.d.ts`.
33
34
  */
34
- export type { Receipt, DocumentApiRejectionReason, DocumentApiRejectionDetails, TextRangeRejectionReason, ContentControlCreationRejectionReason, SelectionInfo, SelectionTarget, SelectionPoint, TextTarget, TextAddress, BookmarkAddress, ScrollIntoViewInput, ScrollIntoViewOutput, DocumentApi, EntityAddress, CommentsListResult, TrackChangesListResult, ContentControlsListResult, ContentControlInfo, ContentControlTarget, RichContentInsertInput, OperationCapabilityResolveResult, SDHtmlMarkdownSupportCheckResult, PictureWatermarkInput, RetainedPictureWatermarkInput, TextWatermark, WatermarkInfo, WatermarkTarget, WatermarksApplyInput, WatermarksApplyResult, WatermarksApplySuccess, WatermarksApplyTarget, TemporaryMutationOperation, TemporaryOperationResultTarget, TemporaryOperationEffects, TemporaryMutationInput, TemporaryMutationReplaceInput, TemporaryMutationHandleInput, TemporaryMutationReceipt, StoryLocator as DocumentStoryLocator, OperationId, OperationCall, OperationInput, OperationOptions, OperationOutput, } from '../../../../document-api/src/index.js';
35
+ export type { Receipt, DocumentApiRejectionReason, DocumentApiRejectionDetails, TextRangeRejectionReason, ContentControlCreationRejectionReason, SelectionInfo, SelectionTarget, SelectionPoint, TextTarget, TextAddress, BookmarkAddress, ScrollIntoViewInput, ScrollIntoViewOutput, DocumentApi, EntityAddress, CommentsListResult, TrackChangesListResult, ContentControlsListResult, ContentControlInfo, ContentControlTarget, RichContentInsertInput, OperationCapabilityResolveResult, SDHtmlMarkdownSupportCheckResult, PictureWatermarkInput, RetainedPictureWatermarkInput, TextWatermark, WatermarkInfo, WatermarkTarget, WatermarksApplyInput, WatermarksApplyResult, WatermarksApplySuccess, WatermarksApplyTarget, TemporaryMutationOperation, TemporaryOperationResultTarget, TemporaryOperationEffects, TemporaryMutationInput, TemporaryMutationReplaceInput, TemporaryMutationHandleInput, TemporaryMutationReceipt, StoryLocator as DocumentStoryLocator, ChangeRecord, ChangeActor, ChangeCause, ChangeProvenance, BlockChange, OperationId, OperationCall, OperationInput, OperationOptions, OperationOutput, } from '../../../../document-api/src/index.js';
35
36
  export type { StyleCatalogView, StyleCatalogItemType, StyleCatalogFilterType, StyleProvenance, StyleCatalogItemVisibility, StyleCatalogItemUsage, StyleCatalogItemPreview, StyleCatalogItem, StyleCatalogDefaults, StyleCatalogDiagnostic, StyleCatalogSourceStatus, StylesGetCatalogInput, StylesGetCatalogResult, } from '../../../../document-api/src/index.js';
36
37
  export type { ListPresetId } from '../../../../document-api/src/index.js';
37
38
  export type { BrowserDocumentApi, PartialBrowserDocumentApi } from '../browser-document-api.js';
39
+ export type { ContentControlClickPayload, ContentControlRef } from '../content-control-ref.js';
38
40
  export type { DocumentReplacementResult } from '../document-replacement.js';
39
41
  export type { SuperDocUIReason } from './reasons.js';
40
42
  export type { BuiltInCommandId } from './commands.js';
@@ -164,6 +166,7 @@ export interface FontSizeOption {
164
166
  }
165
167
  /** Observable enable/active state for a toolbar-style command. */
166
168
  export interface CommandState {
169
+ pending?: boolean;
167
170
  /** Availability for a control in the current selection / mode snapshot. */
168
171
  enabled: boolean;
169
172
  /** Compatibility inverse of `enabled` for demo code that models commands as disabled. */
@@ -689,6 +692,12 @@ export interface SuperDocDocumentChange {
689
692
  } | {
690
693
  kind: 'unknown';
691
694
  };
695
+ /**
696
+ * Attributed change records behind a remote change, oldest first. Present
697
+ * only when the engine recorded the remote transactions; `scope` is then
698
+ * derived from the stories the records touched.
699
+ */
700
+ records?: ChangeRecord[];
692
701
  }
693
702
  /** Document-level state slice. */
694
703
  export interface DocumentSlice {
@@ -824,6 +833,17 @@ export interface ViewportGetRectsResult {
824
833
  /** One result per input. An invalidated batch contains no usable rectangles. */
825
834
  results: readonly ViewportRectResult[];
826
835
  }
836
+ export interface ViewportPositionAtInput {
837
+ x: number;
838
+ y: number;
839
+ signal?: AbortSignal;
840
+ }
841
+ export type ViewportPositionAtResult = {
842
+ status: 'resolved';
843
+ target: SelectionTarget;
844
+ } | {
845
+ status: 'no-target' | 'stale' | 'cancelled' | 'disposed' | 'unavailable';
846
+ };
827
847
  /** Result of `ui.viewport.getRect`. */
828
848
  export interface ViewportRectResult {
829
849
  /** Whether the target resolved to any painted geometry. */
@@ -865,6 +885,7 @@ export interface SelectionHandle extends SnapshotSubscribable<SelectionSlice> {
865
885
  * Fails closed with a stable reason when the host cannot honor the target.
866
886
  */
867
887
  apply(target: SelectionTarget): WorkflowActionResult;
888
+ applyAndWait(target: SelectionTarget): Promise<WorkflowActionResult>;
868
889
  /**
869
890
  * Place the browser caret before or after a live inline content control.
870
891
  * Placement does not edit the document or create an undo entry.
@@ -1132,6 +1153,7 @@ export interface ContentControlsHandle extends SnapshotSubscribable<ContentContr
1132
1153
  * should use {@link observe}.
1133
1154
  */
1134
1155
  observeActivePath(listener: (snapshot: ContentControlsSlice) => void): () => void;
1156
+ onClick(listener: (payload: ContentControlClickPayload) => void): () => void;
1135
1157
  /** Event-shaped alias of {@link observe}. */
1136
1158
  subscribe(listener: (event: {
1137
1159
  snapshot: ContentControlsSlice;
@@ -1284,6 +1306,7 @@ export interface ViewportHandle {
1284
1306
  getRect(input: ViewportGetRectInput): ViewportRectResult;
1285
1307
  /** At most 5000 targets, yielding every 32. Never forces unpainted pages to render. */
1286
1308
  getRects(input: ViewportGetRectsInput): Promise<ViewportGetRectsResult>;
1309
+ positionAt(input: ViewportPositionAtInput): Promise<ViewportPositionAtResult>;
1287
1310
  /**
1288
1311
  * Subscribe to geometry invalidation after selection, zoom, scroll, resize,
1289
1312
  * layout, or repaint changes. The callback is coalesced to one per frame.
@@ -0,0 +1,9 @@
1
+ export declare function uiBenchNowMs(): number;
2
+ export declare function readUiBenchRuntime(): {
3
+ sink: ((event: Record<string, unknown>) => void) | null;
4
+ workerContext: {
5
+ commandId: string | null;
6
+ commandKind: string | null;
7
+ } | null;
8
+ };
9
+ export declare function emitUiBenchTiming(event: Record<string, unknown>): void;