@beyondwork/docx-react-component 1.0.66 → 1.0.69
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.
- package/README.md +75 -931
- package/package.json +26 -27
- package/src/api/anchor-conversion.ts +43 -0
- package/src/api/editor-state-types.ts +2 -1
- package/src/api/public-types.ts +504 -101
- package/src/api/session-state.ts +4 -0
- package/src/api/v3/README.md +91 -0
- package/src/api/v3/_create.ts +146 -0
- package/src/api/v3/_layer-metadata.ts +362 -0
- package/src/api/v3/_mocks.ts +84 -0
- package/src/api/v3/_runtime-handle.ts +162 -0
- package/src/api/v3/_ux-response.ts +73 -0
- package/src/api/v3/ai/_metadata-audit.ts +225 -0
- package/src/api/v3/ai/attach.ts +235 -0
- package/src/api/v3/ai/bundle.ts +132 -0
- package/src/api/v3/ai/explain.ts +144 -0
- package/src/api/v3/ai/export.ts +54 -0
- package/src/api/v3/ai/inspect.ts +118 -0
- package/src/api/v3/ai/policy.ts +77 -0
- package/src/api/v3/ai/replacement.ts +341 -0
- package/src/api/v3/ai/resolve.ts +133 -0
- package/src/api/v3/index.ts +79 -0
- package/src/api/v3/runtime/chart.ts +310 -0
- package/src/api/v3/runtime/clipboard.ts +81 -0
- package/src/api/v3/runtime/collab.ts +331 -0
- package/src/api/v3/runtime/content.ts +236 -0
- package/src/api/v3/runtime/document.ts +282 -0
- package/src/api/v3/runtime/formatting.ts +186 -0
- package/src/api/v3/runtime/geometry.ts +349 -0
- package/src/api/v3/runtime/layout.ts +108 -0
- package/src/api/v3/runtime/review.ts +129 -0
- package/src/api/v3/runtime/search.ts +74 -0
- package/src/api/v3/runtime/table.ts +63 -0
- package/src/api/v3/runtime/workflow.ts +434 -0
- package/src/api/v3/ui/_context.ts +86 -0
- package/src/api/v3/ui/_create.ts +65 -0
- package/src/api/v3/ui/_types.ts +520 -0
- package/src/api/v3/ui/chrome-composition.ts +342 -0
- package/src/{ui-tailwind/chrome → api/v3/ui}/chrome-preset-model.ts +11 -1
- package/src/api/v3/ui/chrome.ts +476 -0
- package/src/api/v3/ui/debug.ts +124 -0
- package/src/api/v3/ui/index.ts +64 -0
- package/src/api/v3/ui/overlays-visibility.ts +170 -0
- package/src/api/v3/ui/overlays.ts +427 -0
- package/src/api/v3/ui/scope.ts +71 -0
- package/src/api/v3/ui/session.ts +100 -0
- package/src/api/v3/ui/surface.ts +170 -0
- package/src/api/v3/ui/viewport.ts +303 -0
- package/src/core/commands/index.ts +28 -6
- package/src/core/commands/list-commands.ts +3 -2
- package/src/core/commands/section-layout-commands.ts +9 -8
- package/src/core/schema/text-schema.ts +16 -0
- package/src/core/selection/mapping.ts +33 -72
- package/src/core/state/editor-state.ts +96 -189
- package/src/index.ts +23 -4
- package/src/io/chart-preview-resolver.ts +1 -1
- package/src/io/docx-session.ts +36 -4795
- package/src/io/export/build-app-properties-xml.ts +1 -1
- package/src/io/export/serialize-comments.ts +1 -1
- package/src/io/export/serialize-headers-footers.ts +6 -1
- package/src/io/export/serialize-main-document.ts +45 -0
- package/src/io/export/serialize-run-formatting.ts +17 -2
- package/src/io/export/twip.ts +1 -1
- package/src/io/normalize/normalize-text.ts +27 -20
- package/src/io/ooxml/chart/parse-series.ts +1 -1
- package/src/io/ooxml/chart/resolve-color.ts +2 -2
- package/src/io/ooxml/chart/types.ts +1 -1
- package/src/io/ooxml/classify-embedding.ts +83 -33
- package/src/io/ooxml/parse-fill.ts +1 -1
- package/src/io/ooxml/parse-main-document.ts +71 -1
- package/src/io/ooxml/parse-object.ts +14 -10
- package/src/io/ooxml/parse-run-formatting.ts +47 -1
- package/src/io/ooxml/property-grab-bag.ts +2 -2
- package/src/io/ooxml/units.ts +11 -0
- package/src/io/ooxml/workflow-payload.ts +282 -7
- package/src/model/anchor.ts +85 -0
- package/src/model/canonical-document.ts +351 -15
- package/src/model/chart-types.ts +1 -1
- package/src/model/layout/index.ts +83 -0
- package/src/model/layout/page-graph-types.ts +181 -0
- package/src/model/layout/page-layout-snapshot.ts +105 -0
- package/src/model/layout/resolved-layout-types.ts +47 -0
- package/src/model/layout/runtime-page-graph-types.ts +102 -0
- package/src/model/paragraph-scope-ids.ts +72 -0
- package/src/model/review/comment-types.ts +112 -0
- package/src/model/review/index.ts +2 -0
- package/src/model/review/revision-types.ts +215 -0
- package/src/model/snapshot.ts +32 -0
- package/src/review/store/comment-store.ts +21 -47
- package/src/review/store/revision-types.ts +40 -198
- package/src/runtime/collab/base-doc-fingerprint.ts +6 -1
- package/src/runtime/collab/runtime-collab-sync.ts +13 -3
- package/src/runtime/collab-session.ts +1 -1
- package/src/runtime/debug/build-debug-inspector-snapshot.ts +686 -0
- package/src/runtime/debug/event-ring-buffer.ts +64 -0
- package/src/runtime/debug/probability-sampler.ts +18 -0
- package/src/runtime/debug/runtime-debug-facet.ts +67 -0
- package/src/runtime/debug/stage-tokens.ts +31 -0
- package/src/runtime/debug/telemetry-bus.ts +271 -0
- package/src/runtime/debug/types.ts +275 -0
- package/src/runtime/debug/wrap-ref-for-telemetry.ts +118 -0
- package/src/runtime/document-layout.ts +8 -6
- package/src/runtime/document-runtime.ts +843 -1141
- package/src/runtime/document-search.ts +1 -1
- package/src/runtime/edit-ops/index.ts +1 -1
- package/src/runtime/external-send-runtime.ts +1 -1
- package/src/runtime/formatting/document-lookup.ts +235 -0
- package/src/runtime/formatting/field/registry.ts +41 -0
- package/src/runtime/{field-resolver.ts → formatting/field/resolver.ts} +27 -2
- package/src/runtime/formatting/font-resolution.ts +83 -0
- package/src/runtime/formatting/formatting-context.ts +903 -0
- package/src/runtime/formatting/formatting-types.ts +157 -0
- package/src/runtime/{hyperlink-color-resolver.ts → formatting/hyperlink-color.ts} +2 -2
- package/src/runtime/formatting/index.ts +125 -0
- package/src/runtime/{resolved-numbering-geometry.ts → formatting/numbering/geometry.ts} +1 -1
- package/src/runtime/{numbering-prefix.ts → formatting/numbering/prefix.ts} +170 -3
- package/src/runtime/formatting/paragraph-style-resolver.ts +92 -0
- package/src/runtime/formatting/projector.ts +75 -0
- package/src/runtime/formatting/resolve-effective.ts +407 -0
- package/src/runtime/formatting/revision-display.ts +105 -0
- package/src/runtime/{paragraph-style-resolver.ts → formatting/style-cascade.ts} +84 -141
- package/src/runtime/{table-style-resolver.ts → formatting/table-style-resolver.ts} +1 -1
- package/src/runtime/formatting/telemetry-bridge.ts +106 -0
- package/src/runtime/{theme-color-resolver.ts → formatting/theme-color.ts} +2 -30
- package/src/runtime/geometry/caret-geometry.ts +164 -0
- package/src/runtime/geometry/geometry-facet.ts +364 -0
- package/src/runtime/geometry/geometry-types.ts +256 -0
- package/src/runtime/geometry/hit-test.ts +125 -0
- package/src/runtime/geometry/index.ts +71 -0
- package/src/runtime/geometry/inert-geometry-facet.ts +43 -0
- package/src/runtime/geometry/invalidation.ts +35 -0
- package/src/runtime/geometry/object-handles.ts +77 -0
- package/src/runtime/geometry/overlay-rects.ts +85 -0
- package/src/runtime/geometry/project-anchors.ts +100 -0
- package/src/runtime/geometry/project-fragments.ts +216 -0
- package/src/runtime/geometry/projector.ts +129 -0
- package/src/runtime/geometry/replacement-envelope.ts +130 -0
- package/src/runtime/geometry/viewport.ts +218 -0
- package/src/runtime/layout/compat-input-ledger.ts +211 -0
- package/src/runtime/layout/index.ts +6 -1
- package/src/runtime/layout/inert-layout-facet.ts +12 -7
- package/src/runtime/layout/layout-engine-instance.ts +189 -11
- package/src/runtime/layout/layout-engine-version.ts +450 -1
- package/src/runtime/layout/layout-facet-types.ts +60 -0
- package/src/runtime/layout/layout-measurement-provider.ts +13 -0
- package/src/runtime/layout/measurement-backend-canvas.ts +14 -2
- package/src/runtime/layout/measurement-backend-empirical.ts +23 -4
- package/src/runtime/layout/page-graph.ts +62 -209
- package/src/runtime/layout/page-story-resolver.ts +7 -12
- package/src/runtime/layout/paginated-layout-engine.ts +186 -11
- package/src/runtime/layout/project-block-fragments.ts +11 -0
- package/src/runtime/layout/projector.ts +90 -0
- package/src/runtime/layout/public-facet.ts +187 -442
- package/src/runtime/layout/resolved-formatting-state.ts +158 -26
- package/src/runtime/layout/table-render-plan.ts +1 -1
- package/src/runtime/prerender/cache-envelope.ts +6 -1
- package/src/runtime/prerender/prerender-document.ts +18 -23
- package/src/runtime/render/decoration-resolver.ts +1 -1
- package/src/runtime/render/render-frame-types.ts +20 -0
- package/src/runtime/render/render-kernel.ts +94 -25
- package/src/runtime/scopes/_formatting-seam.ts +262 -0
- package/src/runtime/scopes/_scope-dependencies.ts +49 -0
- package/src/runtime/scopes/action-validation.ts +356 -0
- package/src/runtime/scopes/attach-explanation.ts +102 -0
- package/src/runtime/scopes/audit-bundle.ts +71 -0
- package/src/runtime/scopes/compile-scope-bundle.ts +163 -0
- package/src/runtime/scopes/compile-scope.ts +262 -0
- package/src/runtime/scopes/compiler-service.ts +431 -0
- package/src/runtime/scopes/create-issue.ts +107 -0
- package/src/runtime/scopes/enumerate-scopes.ts +543 -0
- package/src/runtime/scopes/evidence.ts +233 -0
- package/src/runtime/scopes/index.ts +150 -0
- package/src/runtime/scopes/position-map.ts +214 -0
- package/src/runtime/scopes/preservation-boundary.ts +91 -0
- package/src/runtime/scopes/projector.ts +49 -0
- package/src/runtime/scopes/replaceability.ts +87 -0
- package/src/runtime/scopes/replacement/apply.ts +228 -0
- package/src/runtime/scopes/replacement/compile.ts +59 -0
- package/src/runtime/scopes/replacement/propose.ts +42 -0
- package/src/runtime/scopes/resolve-reference.ts +347 -0
- package/src/runtime/scopes/review-bundle.ts +141 -0
- package/src/runtime/scopes/scope-kinds/_paragraph-text.ts +57 -0
- package/src/runtime/scopes/scope-kinds/_table-text.ts +42 -0
- package/src/runtime/scopes/scope-kinds/comment-thread.ts +59 -0
- package/src/runtime/scopes/scope-kinds/field.ts +65 -0
- package/src/runtime/scopes/scope-kinds/heading.ts +84 -0
- package/src/runtime/scopes/scope-kinds/list-item.ts +77 -0
- package/src/runtime/scopes/scope-kinds/paragraph.ts +182 -0
- package/src/runtime/scopes/scope-kinds/revision.ts +62 -0
- package/src/runtime/scopes/scope-kinds/table-cell.ts +57 -0
- package/src/runtime/scopes/scope-kinds/table-row.ts +61 -0
- package/src/runtime/scopes/scope-kinds/table.ts +55 -0
- package/src/runtime/scopes/scope-range.ts +208 -0
- package/src/runtime/scopes/semantic-scope-types.ts +454 -0
- package/src/runtime/scopes/workflow-overlap.ts +92 -0
- package/src/runtime/selection/index.ts +1 -1
- package/src/runtime/structure-ops/fragment-insert.ts +1 -1
- package/src/runtime/structure-ops/index.ts +1 -1
- package/src/runtime/surface-projection.ts +232 -262
- package/src/runtime/units.ts +4 -2
- package/src/runtime/workflow/coordinator.ts +1348 -0
- package/src/runtime/workflow/derived-scope-resolver.ts +125 -0
- package/src/runtime/workflow/index.ts +25 -0
- package/src/runtime/workflow/markup-mode-policy.ts +98 -0
- package/src/runtime/{workflow-markup.ts → workflow/markup.ts} +6 -6
- package/src/runtime/workflow/metadata-persistence.ts +306 -0
- package/src/runtime/workflow/metadata-writer.ts +123 -0
- package/src/runtime/workflow/overlay-store.ts +690 -0
- package/src/runtime/workflow/projector.ts +127 -0
- package/src/runtime/{query-scopes.ts → workflow/query-scopes.ts} +3 -3
- package/src/runtime/{workflow-rail-segments.ts → workflow/rail/compose.ts} +60 -165
- package/src/runtime/workflow/rail/types.ts +198 -0
- package/src/runtime/workflow/scope-rail-composer.ts +39 -0
- package/src/runtime/{scope-resolver.ts → workflow/scope-resolver.ts} +3 -3
- package/src/runtime/workflow/scope-writer.ts +188 -0
- package/src/runtime/{tamper-gate.ts → workflow/tamper-gate.ts} +1 -1
- package/src/runtime/workflow/visibility-policy.ts +129 -0
- package/src/session/_sync-legacy.ts +66 -0
- package/src/session/export/embedded-reconstitute.ts +104 -0
- package/src/session/export/export-diagnostics.ts +85 -0
- package/src/session/export/export-validation.ts +110 -0
- package/src/session/export/index.ts +34 -0
- package/src/session/export/preservation-reattach.ts +30 -0
- package/src/session/export/serialize-dispatch.ts +165 -0
- package/src/session/export/stateful-export-pipeline.ts +432 -0
- package/src/session/export/stateful-export.ts +684 -0
- package/src/session/import/canonical-assembly.ts +227 -0
- package/src/session/import/diagnostics-session.ts +54 -0
- package/src/session/import/embedded-discovery.ts +225 -0
- package/src/session/import/embedded-offload.ts +337 -0
- package/src/session/import/import-diagnostics.ts +69 -0
- package/src/session/import/loader-types.ts +313 -0
- package/src/session/import/loader.ts +1834 -0
- package/src/session/import/normalize.ts +195 -0
- package/src/session/import/package-parts.ts +217 -0
- package/src/session/import/package-read.ts +195 -0
- package/src/session/import/parse-orchestration.ts +105 -0
- package/src/session/import/part-constants.ts +70 -0
- package/src/session/import/part-discovery.ts +94 -0
- package/src/session/import/preservation-index.ts +46 -0
- package/src/{runtime/read-only-diagnostics-runtime.ts → session/import/read-only-diagnostics.ts} +24 -3
- package/src/session/import/review-import.ts +508 -0
- package/src/session/import/styles-consolidation.ts +281 -0
- package/src/session/import/workflow-scope-import.ts +256 -0
- package/src/session/index.ts +37 -0
- package/src/session/session-state.ts +69 -0
- package/src/session/session.ts +532 -0
- package/src/session/shared/protection.ts +228 -0
- package/src/session/shared/session-utils.ts +82 -0
- package/src/session/types.ts +499 -0
- package/src/shell/chart-snapshots.ts +96 -0
- package/src/shell/media-previews.ts +85 -0
- package/src/shell/overlay-anchor-bridge.ts +53 -0
- package/src/shell/paste-adapter.ts +23 -0
- package/src/shell/ref-commands.ts +1697 -0
- package/src/shell/ref-utilities.ts +48 -0
- package/src/shell/search.ts +51 -0
- package/src/{ui/editor-runtime-boundary.ts → shell/session-bootstrap.ts} +243 -67
- package/src/shell/ui-subscriber-channels.ts +81 -0
- package/src/shell/use-collab-sync.ts +116 -0
- package/src/ui/WordReviewEditor.tsx +496 -2051
- package/src/ui/editor-shell-view.tsx +30 -1
- package/src/ui/editor-surface-controller.tsx +49 -1
- package/src/ui/headless/revision-decoration-model.ts +83 -0
- package/src/{ui-tailwind/chrome → ui/headless}/role-action-sets.ts +1 -1
- package/src/ui/headless/scoped-chrome-policy.ts +2 -2
- package/src/ui/headless/selection-tool-context.ts +1 -1
- package/src/ui/headless/selection-tool-resolver.ts +1 -1
- package/src/ui/runtime-shortcut-dispatch.ts +46 -1
- package/src/ui/ui-controller-factory.ts +221 -0
- package/src/ui-tailwind/chart/ChartSurface.tsx +2 -2
- package/src/ui-tailwind/chart/layout/legend-layout.ts +1 -1
- package/src/ui-tailwind/chart/layout/plot-area.ts +2 -2
- package/src/ui-tailwind/chart/layout/title-layout.ts +1 -1
- package/src/ui-tailwind/chart/render/area.tsx +3 -3
- package/src/ui-tailwind/chart/render/bar-column.tsx +3 -3
- package/src/ui-tailwind/chart/render/bubble.tsx +3 -3
- package/src/ui-tailwind/chart/render/combo.tsx +2 -2
- package/src/ui-tailwind/chart/render/data-labels.tsx +2 -2
- package/src/ui-tailwind/chart/render/font-metrics.ts +2 -2
- package/src/ui-tailwind/chart/render/line.tsx +3 -3
- package/src/ui-tailwind/chart/render/pie.tsx +6 -6
- package/src/ui-tailwind/chart/render/scatter.tsx +3 -3
- package/src/ui-tailwind/chart/render/svg-primitives.ts +3 -3
- package/src/ui-tailwind/chart/render/unsupported.tsx +2 -2
- package/src/ui-tailwind/chrome/build-context-menu-entries.ts +88 -0
- package/src/ui-tailwind/chrome/chrome-preset-toolbar.tsx +1 -1
- package/src/ui-tailwind/chrome/collab-send-to-supplier-button.tsx +1 -1
- package/src/ui-tailwind/chrome/collab-tamper-banner.tsx +1 -1
- package/src/ui-tailwind/chrome/collab-top-nav-container.tsx +1 -1
- package/src/ui-tailwind/chrome/editor-action-registry.ts +553 -0
- package/src/ui-tailwind/chrome/editor-actions-to-palette.ts +182 -0
- package/src/ui-tailwind/chrome/local-surface-arbiter.ts +534 -0
- package/src/ui-tailwind/chrome/resolve-target-kind.ts +226 -0
- package/src/ui-tailwind/chrome/tw-alert-banner.tsx +38 -4
- package/src/ui-tailwind/chrome/tw-context-band.tsx +125 -0
- package/src/ui-tailwind/chrome/tw-context-menu-portal.tsx +248 -0
- package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +42 -1
- package/src/ui-tailwind/chrome/tw-selection-anchor-resolver.ts +8 -7
- package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +38 -4
- package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +104 -6
- package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +66 -7
- package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +54 -8
- package/src/ui-tailwind/chrome/tw-shortcut-hint.tsx +7 -1
- package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +33 -0
- package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +78 -1
- package/src/ui-tailwind/chrome/tw-table-grip-layer.tsx +16 -8
- package/src/ui-tailwind/chrome/tw-workspace-chrome-host.tsx +276 -0
- package/src/ui-tailwind/chrome/use-context-menu-controller.ts +201 -0
- package/src/ui-tailwind/chrome-overlay/chrome-overlay-projector.ts +1 -1
- package/src/ui-tailwind/chrome-overlay/tw-chrome-overlay.tsx +22 -4
- package/src/ui-tailwind/chrome-overlay/tw-comment-balloon-layer.tsx +1 -1
- package/src/ui-tailwind/chrome-overlay/tw-locked-block-layer.tsx +1 -1
- package/src/ui-tailwind/chrome-overlay/tw-object-selection-overlay.tsx +11 -5
- package/src/ui-tailwind/chrome-overlay/tw-page-stack-overlay-layer.tsx +197 -3
- package/src/ui-tailwind/chrome-overlay/tw-revision-margin-bar-layer.tsx +1 -1
- package/src/ui-tailwind/chrome-overlay/tw-scope-card-layer.tsx +35 -6
- package/src/ui-tailwind/chrome-overlay/tw-scope-rail-layer.tsx +24 -16
- package/src/ui-tailwind/chrome-overlay/tw-table-continuation-header.tsx +1 -1
- package/src/ui-tailwind/debug/README.md +57 -0
- package/src/ui-tailwind/debug/index.ts +3 -0
- package/src/ui-tailwind/debug/tw-debug-overlay.tsx +186 -0
- package/src/ui-tailwind/debug/tw-debug-presentation.tsx +80 -0
- package/src/ui-tailwind/debug/tw-debug-top-bar.tsx +83 -0
- package/src/ui-tailwind/editor-surface/chart-node-view.tsx +2 -2
- package/src/ui-tailwind/editor-surface/float-wrap-resolver.ts +1 -1
- package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +135 -10
- package/src/ui-tailwind/editor-surface/pm-decorations.ts +40 -13
- package/src/ui-tailwind/editor-surface/pm-page-break-decorations.ts +1 -1
- package/src/ui-tailwind/editor-surface/pm-schema.ts +1 -1
- package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +3 -3
- package/src/ui-tailwind/editor-surface/predicted-tag-preflight.ts +1 -1
- package/src/ui-tailwind/editor-surface/remote-cursor-plugin.ts +2 -2
- package/src/ui-tailwind/editor-surface/scroll-anchor.ts +91 -9
- package/src/ui-tailwind/editor-surface/shape-renderer.ts +1 -1
- package/src/ui-tailwind/editor-surface/surface-layer.ts +1 -1
- package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +1 -1
- package/src/ui-tailwind/editor-surface/tw-page-block-view.helpers.ts +23 -6
- package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +132 -22
- package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +1 -1
- package/src/ui-tailwind/index.ts +0 -5
- package/src/ui-tailwind/overlay-anchor-bridge-context.tsx +33 -0
- package/src/ui-tailwind/page-stack/floating-image-overlay-model.ts +66 -29
- package/src/ui-tailwind/page-stack/tw-floating-image-layer.tsx +25 -2
- package/src/ui-tailwind/review/comment-markdown-renderer.tsx +15 -0
- package/src/ui-tailwind/review/tw-review-rail.tsx +92 -4
- package/src/ui-tailwind/review/tw-workflow-tab.tsx +1 -1
- package/src/ui-tailwind/review-workspace/page-chrome.ts +210 -0
- package/src/ui-tailwind/review-workspace/page-shell-metrics.ts +101 -0
- package/src/ui-tailwind/review-workspace/paragraph-layout.ts +115 -0
- package/src/ui-tailwind/review-workspace/selection-toolbar-placement.ts +97 -0
- package/src/ui-tailwind/review-workspace/tw-review-workspace-navigator.tsx +130 -0
- package/src/ui-tailwind/review-workspace/tw-review-workspace-page-toolbar.tsx +240 -0
- package/src/ui-tailwind/review-workspace/tw-review-workspace-rail.tsx +59 -0
- package/src/ui-tailwind/review-workspace/types.ts +408 -0
- package/src/ui-tailwind/review-workspace/use-chrome-policy.ts +104 -0
- package/src/ui-tailwind/review-workspace/use-derived-view-state.ts +151 -0
- package/src/ui-tailwind/review-workspace/use-diagnostics-signal.ts +70 -0
- package/src/ui-tailwind/review-workspace/use-grabbed-segment-offsets.ts +40 -0
- package/src/ui-tailwind/review-workspace/use-layout-facet-render-signal.ts +55 -0
- package/src/ui-tailwind/review-workspace/use-page-markers.ts +130 -0
- package/src/ui-tailwind/review-workspace/use-pm-surface-capture.ts +60 -0
- package/src/ui-tailwind/review-workspace/use-review-rail-state.ts +63 -0
- package/src/ui-tailwind/review-workspace/use-scope-card-state.ts +170 -0
- package/src/ui-tailwind/review-workspace/use-scroll-root-capture.ts +28 -0
- package/src/ui-tailwind/review-workspace/use-selection-toolbar-placement.ts +113 -0
- package/src/ui-tailwind/review-workspace/use-shell-selection-anchor-bridge.ts +120 -0
- package/src/ui-tailwind/review-workspace/use-status-bar-page-facts.ts +55 -0
- package/src/ui-tailwind/review-workspace/use-viewport-dimensions.ts +43 -0
- package/src/ui-tailwind/review-workspace/use-workspace-arbiter.ts +25 -0
- package/src/ui-tailwind/review-workspace/use-workspace-composition.ts +86 -0
- package/src/ui-tailwind/review-workspace/use-workspace-side-effects.ts +150 -0
- package/src/ui-tailwind/theme/editor-theme.css +25 -0
- package/src/ui-tailwind/toolbar/tw-role-action-region.tsx +2 -2
- package/src/ui-tailwind/toolbar/tw-toolbar.tsx +61 -98
- package/src/ui-tailwind/tw-review-workspace.tsx +521 -1802
- package/src/ui-tailwind/ui-api-context.tsx +43 -0
- package/src/ui-tailwind/ui-shell-channels-context.tsx +49 -0
- package/src/validation/compatibility-engine.ts +6 -6
- package/src/runtime/styles-cascade.ts +0 -33
- package/src/ui-tailwind/chrome/tw-mode-dock.tsx +0 -85
- /package/src/runtime/{page-number-format.ts → formatting/field/page-number-format.ts} +0 -0
- /package/src/runtime/{ai-action-policy.ts → workflow/ai-action-policy.ts} +0 -0
- /package/src/runtime/{scope-tag-registry.ts → workflow/scope-tag-registry.ts} +0 -0
package/src/api/public-types.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ApiV3 } from "./v3/_create.ts";
|
|
3
|
+
import type {
|
|
4
|
+
DocumentPageSnapshot,
|
|
5
|
+
EditorStoryTarget,
|
|
6
|
+
PageLayoutSnapshot,
|
|
7
|
+
} from "../model/layout/page-layout-snapshot.ts";
|
|
8
|
+
import type {
|
|
9
|
+
CanonicalDocumentEnvelope,
|
|
10
|
+
PersistedEditorSnapshot as RuntimePersistedEditorSnapshot,
|
|
11
|
+
} from "../core/state/editor-state.ts";
|
|
3
12
|
import type { HarnessDebugPorts } from "../internal/harness-debug-ports.ts";
|
|
4
13
|
import type { BlockNode, CanonicalParagraphFormatting, CanonicalRunFormatting, TextMark } from "../model/canonical-document.ts";
|
|
5
14
|
import type { WordReviewEditorLayoutFacet } from "../runtime/layout/public-facet.ts";
|
|
6
15
|
import type { RenderFrameRect } from "../runtime/render/index.ts";
|
|
7
|
-
import type { ScopeRailPosture } from "../runtime/workflow
|
|
16
|
+
import type { ScopeRailPosture } from "../runtime/workflow/rail/compose.ts";
|
|
8
17
|
import type { SharedWorkflowState } from "../runtime/collab/workflow-shared.ts";
|
|
9
18
|
import type {
|
|
10
19
|
MetadataPersistenceMode,
|
|
@@ -50,6 +59,66 @@ export type {
|
|
|
50
59
|
|
|
51
60
|
export type { CanonicalParagraphFormatting, CanonicalRunFormatting };
|
|
52
61
|
export type { SharedWorkflowState };
|
|
62
|
+
/**
|
|
63
|
+
* Re-exported for Layer-11 presentation surfaces (refactor/11 Slice 5
|
|
64
|
+
* retirement) so the PM mount + surrounding surfaces consume the
|
|
65
|
+
* canonical-envelope type through the public API seam instead of
|
|
66
|
+
* reaching into `src/core/state/editor-state.ts`.
|
|
67
|
+
*/
|
|
68
|
+
export type { CanonicalDocumentEnvelope };
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Chart types re-exported for Layer-11 chart renderers (refactor/11
|
|
72
|
+
* Slice 6 retirement). The chart-family presentation (area / bar /
|
|
73
|
+
* bubble / line / pie / scatter / combo / unsupported / svg-primitives)
|
|
74
|
+
* consumes the shape definitions through the public API seam instead
|
|
75
|
+
* of reaching into `src/model/chart-types.ts` or
|
|
76
|
+
* `src/io/ooxml/chart/types.ts`. Value imports (color resolution,
|
|
77
|
+
* palette, style-table builders) are out of scope — those remain under
|
|
78
|
+
* `src/io/ooxml/chart/**` and their Layer-11 usages stay in the
|
|
79
|
+
* exception register until a dedicated chart API is introduced.
|
|
80
|
+
*/
|
|
81
|
+
export type * from "../model/chart-types.ts";
|
|
82
|
+
export type { ResolvedTheme } from "../model/canonical-document.ts";
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Workflow-rail types re-exported for the Layer-11 scope-rail + scope-
|
|
86
|
+
* card overlays (refactor/11 Slice 6 retirement). `WorkflowFacet` +
|
|
87
|
+
* `ScopeRailSegment` are the canonical types the overlays consume;
|
|
88
|
+
* `ScopeRailPosture` is already re-exported above.
|
|
89
|
+
*/
|
|
90
|
+
export type {
|
|
91
|
+
WorkflowFacet,
|
|
92
|
+
ScopeRailSegment,
|
|
93
|
+
} from "../runtime/workflow/rail/types.ts";
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Substrate-type re-exports consumed by Layer-11 overlay + chrome
|
|
97
|
+
* surfaces (refactor/11 type-only retirement sweep). Every entry below
|
|
98
|
+
* exists because a presentation file previously imported it directly
|
|
99
|
+
* from `src/runtime/**` or `src/model/**`; routing through the public-
|
|
100
|
+
* types choke point (per the L08 adversarial-close pattern) preserves
|
|
101
|
+
* the type seam without the boundary-guard reach-through.
|
|
102
|
+
*/
|
|
103
|
+
export type { CollabSession } from "../runtime/collab-session.ts";
|
|
104
|
+
export type { MetadataIntegrity } from "../runtime/workflow/tamper-gate.ts";
|
|
105
|
+
export type { ScopeTagRegistry } from "../runtime/workflow/scope-tag-registry.ts";
|
|
106
|
+
// Semantic-scope shapes — re-exported so L10 (ui.scope.*) + L09
|
|
107
|
+
// (ai.getScopeBundle) + L11 (scope-card consumers) can import the
|
|
108
|
+
// canonical types from the public-types choke point instead of
|
|
109
|
+
// reaching into `src/runtime/scopes/**` (blocked by L10's layer-purity
|
|
110
|
+
// CI guard). Authoritative definitions live at
|
|
111
|
+
// `src/runtime/scopes/semantic-scope-types.ts`.
|
|
112
|
+
export type {
|
|
113
|
+
ScopeBundle,
|
|
114
|
+
ScopeBundleEvidence,
|
|
115
|
+
ScopeBundleNeighborhood,
|
|
116
|
+
ScopeHandle,
|
|
117
|
+
SemanticScope,
|
|
118
|
+
SemanticScopeKind,
|
|
119
|
+
} from "../runtime/scopes/semantic-scope-types.ts";
|
|
120
|
+
export type { GeometryFacet } from "../runtime/geometry/index.ts";
|
|
121
|
+
export type { RuntimePageGraph } from "../runtime/layout/page-graph.ts";
|
|
53
122
|
|
|
54
123
|
export type {
|
|
55
124
|
WordReviewEditorLayoutFacet,
|
|
@@ -106,7 +175,12 @@ export type {
|
|
|
106
175
|
|
|
107
176
|
// R0: scope-rail posture vocabulary and chrome pin state — exposed so
|
|
108
177
|
// host apps can drive the editor role and render custom posture menus.
|
|
109
|
-
export type { ScopeRailPosture } from "../runtime/workflow
|
|
178
|
+
export type { ScopeRailPosture } from "../runtime/workflow/rail/compose.ts";
|
|
179
|
+
|
|
180
|
+
// refactor/11 Track G — re-export SessionCapabilities so presentation
|
|
181
|
+
// code can consume the runtime-derived capability shape without
|
|
182
|
+
// reaching into `src/runtime/**` directly (P3).
|
|
183
|
+
export type { SessionCapabilities } from "../runtime/session-capabilities.ts";
|
|
110
184
|
|
|
111
185
|
export type FieldFamily = import("../model/canonical-document.ts").FieldFamily;
|
|
112
186
|
export type FieldRefreshStatus = import("../model/canonical-document.ts").FieldRefreshStatus;
|
|
@@ -168,22 +242,43 @@ export type EditorAnchorProjection =
|
|
|
168
242
|
reason: "deleted" | "invalidatedByStructureChange" | "importAmbiguity";
|
|
169
243
|
};
|
|
170
244
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
245
|
+
/**
|
|
246
|
+
* Re-exported from `src/model/layout/page-layout-snapshot.ts`. The
|
|
247
|
+
* canonical declaration moved there in refactor/04 cross-layer-coord
|
|
248
|
+
* §1.12 Pass 2 so `RuntimePageGraph` can live in a layer reachable from
|
|
249
|
+
* session / stateless services without transiting `src/runtime/**`.
|
|
250
|
+
*/
|
|
251
|
+
export type { EditorStoryTarget } from "../model/layout/page-layout-snapshot.ts";
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Story-target equality helper — re-exported at the public-types boundary
|
|
255
|
+
* so Layer-11 presentation consumers (e.g. `remote-cursor-plugin.ts`) can
|
|
256
|
+
* compare `EditorStoryTarget` values without reaching into
|
|
257
|
+
* `src/core/selection/mapping.ts` directly. Pure function over public
|
|
258
|
+
* types; canonical implementation lives on the core selection module.
|
|
259
|
+
* Shipped 2026-04-23 via coord-07 §2.1 collab-expansion remainder.
|
|
260
|
+
*/
|
|
261
|
+
export { storyTargetsEqual, MAIN_STORY_TARGET } from "../core/selection/mapping.ts";
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* OOXML unit-conversion constants shared with presentation-layer
|
|
265
|
+
* renderers. EMU (English Metric Units) is the OOXML measurement
|
|
266
|
+
* unit; `EMU_PER_PX` converts to CSS pixels at 96 dpi;
|
|
267
|
+
* `ROTATION_UNITS_PER_DEGREE` is the c:rot scaling factor;
|
|
268
|
+
* `PERCENTAGE_PARTS` is the OOXML st:ST_Percentage base (1 / 100000).
|
|
269
|
+
* Pure constant re-exports of the canonical values on
|
|
270
|
+
* `src/runtime/units.ts` so shape renderers + PM schema can convert
|
|
271
|
+
* document-space units without reaching into `src/runtime/**`.
|
|
272
|
+
* Re-exported 2026-04-23 per coord-11 §4 register cleanup.
|
|
273
|
+
*/
|
|
274
|
+
export {
|
|
275
|
+
EMU_PER_PX,
|
|
276
|
+
EMU_PER_INCH,
|
|
277
|
+
TWIPS_PER_PX,
|
|
278
|
+
ROTATION_UNITS_PER_DEGREE,
|
|
279
|
+
PERCENTAGE_PARTS,
|
|
280
|
+
SRCRECT_UNITS_PER_PERCENT,
|
|
281
|
+
} from "../runtime/units.ts";
|
|
187
282
|
|
|
188
283
|
export interface SelectionSnapshot {
|
|
189
284
|
anchor: number;
|
|
@@ -193,54 +288,11 @@ export interface SelectionSnapshot {
|
|
|
193
288
|
storyTarget?: EditorStoryTarget;
|
|
194
289
|
}
|
|
195
290
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
marginTop: number;
|
|
202
|
-
marginBottom: number;
|
|
203
|
-
marginLeft: number;
|
|
204
|
-
marginRight: number;
|
|
205
|
-
headerMargin: number;
|
|
206
|
-
footerMargin: number;
|
|
207
|
-
gutter: number;
|
|
208
|
-
orientation: "portrait" | "landscape";
|
|
209
|
-
columns: number;
|
|
210
|
-
differentFirstPage: boolean;
|
|
211
|
-
differentOddEvenPages: boolean;
|
|
212
|
-
pageNumbering?: {
|
|
213
|
-
format?: string;
|
|
214
|
-
start?: number;
|
|
215
|
-
chapterStyle?: string;
|
|
216
|
-
chapterSeparator?: string;
|
|
217
|
-
};
|
|
218
|
-
lineNumbering?: {
|
|
219
|
-
countBy?: number;
|
|
220
|
-
start?: number;
|
|
221
|
-
distance?: number;
|
|
222
|
-
restart?: "newPage" | "newSection" | "continuous";
|
|
223
|
-
};
|
|
224
|
-
pageBorders?: {
|
|
225
|
-
top?: { value?: string; size?: number; space?: number; color?: string };
|
|
226
|
-
left?: { value?: string; size?: number; space?: number; color?: string };
|
|
227
|
-
bottom?: { value?: string; size?: number; space?: number; color?: string };
|
|
228
|
-
right?: { value?: string; size?: number; space?: number; color?: string };
|
|
229
|
-
offsetFrom?: "page" | "text";
|
|
230
|
-
display?: "allPages" | "firstPage" | "notFirstPage";
|
|
231
|
-
zOrder?: "front" | "back";
|
|
232
|
-
};
|
|
233
|
-
documentGrid?: {
|
|
234
|
-
type?: "default" | "lines" | "linesAndChars" | "snapToChars";
|
|
235
|
-
linePitch?: number;
|
|
236
|
-
charSpace?: number;
|
|
237
|
-
};
|
|
238
|
-
columnDefinitions: Array<{ width: number; space?: number }>;
|
|
239
|
-
equalWidthColumns: boolean;
|
|
240
|
-
columnSeparator: boolean;
|
|
241
|
-
headerVariants: Array<{ variant: "default" | "first" | "even"; relationshipId: string }>;
|
|
242
|
-
footerVariants: Array<{ variant: "default" | "first" | "even"; relationshipId: string }>;
|
|
243
|
-
}
|
|
291
|
+
/**
|
|
292
|
+
* Re-exported from `src/model/layout/page-layout-snapshot.ts`. See the
|
|
293
|
+
* `EditorStoryTarget` re-export above for the relocation rationale.
|
|
294
|
+
*/
|
|
295
|
+
export type { PageLayoutSnapshot } from "../model/layout/page-layout-snapshot.ts";
|
|
244
296
|
|
|
245
297
|
export type WorkspaceMode = "canvas" | "page";
|
|
246
298
|
|
|
@@ -576,21 +628,11 @@ export interface DocumentNavigationSnapshot {
|
|
|
576
628
|
activeSectionIndex: number;
|
|
577
629
|
}
|
|
578
630
|
|
|
579
|
-
/**
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
sectionIndex: number;
|
|
585
|
-
/** Zero-based page index within its owning section. */
|
|
586
|
-
pageInSection: number;
|
|
587
|
-
/** Estimated character offset where the page begins in the main story. */
|
|
588
|
-
startOffset: number;
|
|
589
|
-
/** Estimated character offset where the page ends in the main story. */
|
|
590
|
-
endOffset: number;
|
|
591
|
-
/** Page layout properties inherited from the section. */
|
|
592
|
-
layout: PageLayoutSnapshot;
|
|
593
|
-
}
|
|
631
|
+
/**
|
|
632
|
+
* Re-exported from `src/model/layout/page-layout-snapshot.ts`. See the
|
|
633
|
+
* `EditorStoryTarget` re-export above for the relocation rationale.
|
|
634
|
+
*/
|
|
635
|
+
export type { DocumentPageSnapshot } from "../model/layout/page-layout-snapshot.ts";
|
|
594
636
|
|
|
595
637
|
/** A heading entry in the document outline. */
|
|
596
638
|
export interface DocumentHeadingSnapshot {
|
|
@@ -931,6 +973,29 @@ export type SurfaceInlineSegment =
|
|
|
931
973
|
hyperlinkHref?: string;
|
|
932
974
|
/** Cascaded run formatting for this text segment (docDefaults → paragraph style chain → character style → direct). Populated in `src/runtime/surface-projection.ts` via `resolveEffectiveRunFormatting`. Present only when the resolved cascade has at least one field. */
|
|
933
975
|
resolvedRunFormatting?: CanonicalRunFormatting;
|
|
976
|
+
/**
|
|
977
|
+
* Layer-03 F6 revision-display posture flags. Populated when
|
|
978
|
+
* `createEditorSurfaceSnapshot` is called with
|
|
979
|
+
* `{ revisionMarkupMode }` and the segment's offset falls inside
|
|
980
|
+
* an attached `RevisionRecord.anchor` range in
|
|
981
|
+
* `document.review.revisions`. Consumers (pm-state-from-snapshot,
|
|
982
|
+
* render decorations) read these flags as the authoritative
|
|
983
|
+
* revision-display source of truth — no consumer should compute
|
|
984
|
+
* its own tracked-change posture from raw revisions.
|
|
985
|
+
*
|
|
986
|
+
* Shape mirrors `src/runtime/formatting/formatting-types.ts ::
|
|
987
|
+
* RevisionDisplayFlags`. Shape is duplicated here (not imported)
|
|
988
|
+
* because this is the public-types surface; the structural identity
|
|
989
|
+
* is enforced by `test/runtime/formatting/production-boundary.test.ts`.
|
|
990
|
+
*/
|
|
991
|
+
revisionDisplay?: {
|
|
992
|
+
markupMode: "clean" | "simple" | "all";
|
|
993
|
+
hidden?: boolean;
|
|
994
|
+
strikethrough?: boolean;
|
|
995
|
+
insertionUnderline?: boolean;
|
|
996
|
+
deemphasize?: boolean;
|
|
997
|
+
authorColor?: string;
|
|
998
|
+
};
|
|
934
999
|
}
|
|
935
1000
|
| {
|
|
936
1001
|
segmentId: string;
|
|
@@ -1248,7 +1313,7 @@ export type SurfaceBlockSnapshot =
|
|
|
1248
1313
|
* this to claim the original block's position span without rendering
|
|
1249
1314
|
* content.
|
|
1250
1315
|
*
|
|
1251
|
-
* See
|
|
1316
|
+
* See CLAUDE.md (lane status table)
|
|
1252
1317
|
*/
|
|
1253
1318
|
placeholderSize?: number;
|
|
1254
1319
|
state: "locked-preserve-only" | "placeholder-culled";
|
|
@@ -1273,7 +1338,7 @@ export interface EditorSurfaceSnapshot {
|
|
|
1273
1338
|
* original position range but no content. `null` (default) = all blocks
|
|
1274
1339
|
* are real (legacy behavior).
|
|
1275
1340
|
*
|
|
1276
|
-
* See
|
|
1341
|
+
* See CLAUDE.md (lane status table)
|
|
1277
1342
|
*/
|
|
1278
1343
|
viewportBlockRange: { start: number; end: number } | null;
|
|
1279
1344
|
}
|
|
@@ -2062,22 +2127,15 @@ export interface RuntimeRenderSnapshot {
|
|
|
2062
2127
|
grabbedObjectId?: string | null;
|
|
2063
2128
|
}
|
|
2064
2129
|
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
compatibility: CompatibilityReport;
|
|
2075
|
-
warningLog: EditorWarning[];
|
|
2076
|
-
protectionSnapshot?: ProtectionSnapshot;
|
|
2077
|
-
sourcePackage?: RuntimePersistedEditorSnapshot["sourcePackage"];
|
|
2078
|
-
workflowOverlay?: WorkflowOverlay;
|
|
2079
|
-
workflowMetadata?: WorkflowMetadataSnapshot;
|
|
2080
|
-
}
|
|
2130
|
+
/**
|
|
2131
|
+
* Back-compat re-export. The canonical definition lives in
|
|
2132
|
+
* `src/session/session-state.ts` (Layer 01 owns the session-state
|
|
2133
|
+
* contract per docs/architecture/01-package-session.md). Kept here so
|
|
2134
|
+
* existing consumers that import `EditorSessionState` from the public
|
|
2135
|
+
* types barrel continue to compile.
|
|
2136
|
+
*/
|
|
2137
|
+
import type { EditorSessionState } from "../session/session-state.ts";
|
|
2138
|
+
export type { EditorSessionState };
|
|
2081
2139
|
|
|
2082
2140
|
export interface PersistedEditorSnapshot {
|
|
2083
2141
|
snapshotVersion: RuntimePersistedEditorSnapshot["snapshotVersion"];
|
|
@@ -2095,6 +2153,10 @@ export interface PersistedEditorSnapshot {
|
|
|
2095
2153
|
sourcePackage?: RuntimePersistedEditorSnapshot["sourcePackage"];
|
|
2096
2154
|
workflowOverlay?: WorkflowOverlay;
|
|
2097
2155
|
workflowMetadata?: WorkflowMetadataSnapshot;
|
|
2156
|
+
/** W10 — class-A overlay-visibility policies (see `OverlayVisibilityPolicy`). */
|
|
2157
|
+
visibilityPolicies?: readonly OverlayVisibilityPolicy[];
|
|
2158
|
+
/** X5 — class-A markup-mode policy (see `WorkflowMarkupModePolicy`). */
|
|
2159
|
+
markupModePolicy?: WorkflowMarkupModePolicy;
|
|
2098
2160
|
}
|
|
2099
2161
|
|
|
2100
2162
|
export interface AddCommentParams {
|
|
@@ -2299,6 +2361,85 @@ export interface WorkflowOverlay {
|
|
|
2299
2361
|
metadataPersistence?: MetadataPersistenceMode;
|
|
2300
2362
|
}
|
|
2301
2363
|
|
|
2364
|
+
// ---------------------------------------------------------------------------
|
|
2365
|
+
// W10 · Overlay-visibility policy (class-A canonical state)
|
|
2366
|
+
//
|
|
2367
|
+
// Spec: `docs/architecture/06-workflow-review.md` §W10 +
|
|
2368
|
+
// `docs/plans/refactor/state-classes-cross-cutting.md` §X1. Layer 06 owns
|
|
2369
|
+
// the storage + serialization; Layer 10 composes with the class-C local
|
|
2370
|
+
// preference in a single composition site (`ui.overlays.getVisibility`).
|
|
2371
|
+
// Consumers should read through `handle.workflow.getVisibilityPolicy(kind)`
|
|
2372
|
+
// rather than the overlay store directly.
|
|
2373
|
+
// ---------------------------------------------------------------------------
|
|
2374
|
+
|
|
2375
|
+
/** Closed union of overlay kinds whose visibility is policy-gated. */
|
|
2376
|
+
export type OverlayKind =
|
|
2377
|
+
| "scope-rail"
|
|
2378
|
+
| "comments"
|
|
2379
|
+
| "tracked-changes"
|
|
2380
|
+
| "suggestions"
|
|
2381
|
+
| "debug-panel"
|
|
2382
|
+
| "presence";
|
|
2383
|
+
|
|
2384
|
+
/**
|
|
2385
|
+
* Enforcement mode. `"authored-default"` defers to the user's local
|
|
2386
|
+
* preference (class C); `"always"` / `"never"` are hard overrides.
|
|
2387
|
+
*/
|
|
2388
|
+
export type OverlayVisibilityEnforcement =
|
|
2389
|
+
| "authored-default"
|
|
2390
|
+
| "always"
|
|
2391
|
+
| "never";
|
|
2392
|
+
|
|
2393
|
+
/** Audit stamp for a policy change. */
|
|
2394
|
+
export interface OverlayVisibilityAuthorship {
|
|
2395
|
+
readonly actorId: string;
|
|
2396
|
+
readonly at: string;
|
|
2397
|
+
}
|
|
2398
|
+
|
|
2399
|
+
/** Class-A visibility policy for a single overlay kind. */
|
|
2400
|
+
export interface OverlayVisibilityPolicy {
|
|
2401
|
+
readonly kind: OverlayKind;
|
|
2402
|
+
readonly enforcement: OverlayVisibilityEnforcement;
|
|
2403
|
+
/** Only consulted when `enforcement === "authored-default"`. */
|
|
2404
|
+
readonly defaultOn: boolean;
|
|
2405
|
+
readonly authoredBy?: OverlayVisibilityAuthorship;
|
|
2406
|
+
}
|
|
2407
|
+
|
|
2408
|
+
// ---------------------------------------------------------------------------
|
|
2409
|
+
// X5 · Workflow markup-mode policy (class-A canonical state)
|
|
2410
|
+
//
|
|
2411
|
+
// Spec: `docs/plans/refactor/state-classes-cross-cutting.md` §"Slice X5 ·
|
|
2412
|
+
// markup-mode retrofit". Parallels the OverlayVisibilityPolicy shape but
|
|
2413
|
+
// is single-value (not per-kind) since there is exactly one active markup
|
|
2414
|
+
// mode at a time. Composed with the class-C local preference in L10
|
|
2415
|
+
// (`ui.viewport.getEffectiveMarkupMode`).
|
|
2416
|
+
//
|
|
2417
|
+
// Values mirror the existing `revisionMarkupMode` in
|
|
2418
|
+
// `src/runtime/formatting/formatting-context.ts` — `"clean" | "simple" |
|
|
2419
|
+
// "all"` — so the composed value flows straight into
|
|
2420
|
+
// `applyRevisionDisplay(run, revision, markupMode)` without conversion.
|
|
2421
|
+
// ---------------------------------------------------------------------------
|
|
2422
|
+
|
|
2423
|
+
export type WorkflowMarkupMode = "clean" | "simple" | "all";
|
|
2424
|
+
|
|
2425
|
+
/**
|
|
2426
|
+
* Policy enforcement. `"authored-default"` defers to the user's local
|
|
2427
|
+
* preference (class C); `"always"` hard-locks to the authored mode.
|
|
2428
|
+
*
|
|
2429
|
+
* Note: unlike `OverlayVisibilityEnforcement` there is no `"never"`
|
|
2430
|
+
* variant — a markup mode is always one of the three values; "never"
|
|
2431
|
+
* would be non-sensical ("never be in any markup mode" — no value to
|
|
2432
|
+
* pick). The two-value enforcement is sufficient.
|
|
2433
|
+
*/
|
|
2434
|
+
export type WorkflowMarkupModeEnforcement = "authored-default" | "always";
|
|
2435
|
+
|
|
2436
|
+
/** Class-A markup-mode policy. Single record per document. */
|
|
2437
|
+
export interface WorkflowMarkupModePolicy {
|
|
2438
|
+
readonly mode: WorkflowMarkupMode;
|
|
2439
|
+
readonly enforcement: WorkflowMarkupModeEnforcement;
|
|
2440
|
+
readonly authoredBy?: OverlayVisibilityAuthorship;
|
|
2441
|
+
}
|
|
2442
|
+
|
|
2302
2443
|
export type WorkflowMetadataPersistence =
|
|
2303
2444
|
| "runtime-only"
|
|
2304
2445
|
| "session"
|
|
@@ -3452,6 +3593,86 @@ export interface ChartPreviewResolveParams {
|
|
|
3452
3593
|
heightEmu: number;
|
|
3453
3594
|
}
|
|
3454
3595
|
|
|
3596
|
+
/**
|
|
3597
|
+
* P8 Step 7 — opaque reference the host returns after storing an
|
|
3598
|
+
* embedded-document payload to its own storage. Persisted inside
|
|
3599
|
+
* `customXml/item1.xml` under the `bw:embeddings` namespace so the
|
|
3600
|
+
* session can hand it back to `loadEmbeddedDocument` at export time.
|
|
3601
|
+
*
|
|
3602
|
+
* Field stability: additive only; no field is renamed or removed
|
|
3603
|
+
* across minor versions. Hosts should use structural narrowing to
|
|
3604
|
+
* ignore unknown fields.
|
|
3605
|
+
*/
|
|
3606
|
+
export interface StorageReference {
|
|
3607
|
+
/**
|
|
3608
|
+
* Host-defined identifier for the storage provider (e.g. `"s3"`,
|
|
3609
|
+
* `"railway-blob"`). Opaque to the editor; the session just
|
|
3610
|
+
* round-trips it.
|
|
3611
|
+
*/
|
|
3612
|
+
providerId: string;
|
|
3613
|
+
/**
|
|
3614
|
+
* Opaque handle used by the host to look up the payload. The
|
|
3615
|
+
* session never parses this — it reads, stores, and hands it back
|
|
3616
|
+
* unchanged.
|
|
3617
|
+
*/
|
|
3618
|
+
handle: string;
|
|
3619
|
+
/**
|
|
3620
|
+
* SHA-256 hex digest of the original embedded-document bytes.
|
|
3621
|
+
* Computed by the session before calling `storeEmbeddedDocument`
|
|
3622
|
+
* so hosts can detect tampering when rehydrating via
|
|
3623
|
+
* `loadEmbeddedDocument`.
|
|
3624
|
+
*/
|
|
3625
|
+
sha256: string;
|
|
3626
|
+
}
|
|
3627
|
+
|
|
3628
|
+
/**
|
|
3629
|
+
* P8 Step 7 — parameters passed to `EditorHostAdapter.storeEmbeddedDocument`
|
|
3630
|
+
* for every `offloadable` embedding the session encounters at load
|
|
3631
|
+
* time. The host extracts the payload to its storage and returns a
|
|
3632
|
+
* `StorageReference` the session persists into the `bw:embeddings`
|
|
3633
|
+
* customXml namespace.
|
|
3634
|
+
*
|
|
3635
|
+
* Field stability: additive only (same rules as
|
|
3636
|
+
* `ChartPreviewResolveParams`).
|
|
3637
|
+
*/
|
|
3638
|
+
export interface StoreEmbeddedDocParams {
|
|
3639
|
+
/** Stable identifier of the parent document (the one being opened). */
|
|
3640
|
+
parentDocumentId: string;
|
|
3641
|
+
/**
|
|
3642
|
+
* Manifest entry describing the embedded object. Metadata-only —
|
|
3643
|
+
* the bytes ship separately via the `bytes` field so implementations
|
|
3644
|
+
* can stream them without re-reading through the manifest's lazy
|
|
3645
|
+
* `bytes()` accessor.
|
|
3646
|
+
*/
|
|
3647
|
+
embedded: EmbeddedDocumentManifestLike;
|
|
3648
|
+
/**
|
|
3649
|
+
* Materialised bytes of the embedded document. Already extracted
|
|
3650
|
+
* from the OPC package; hosts do not need to call `embedded.bytes()`.
|
|
3651
|
+
*/
|
|
3652
|
+
bytes: Uint8Array;
|
|
3653
|
+
}
|
|
3654
|
+
|
|
3655
|
+
/**
|
|
3656
|
+
* P8 Step 7 — structural subset of `EmbeddedDocumentManifest` (from
|
|
3657
|
+
* `src/session/types.ts`) exposed through the public host-adapter
|
|
3658
|
+
* surface. Avoids forcing the session-layer `EmbeddedDocumentManifest`
|
|
3659
|
+
* symbol to be re-exported from `public-types.ts` while still giving
|
|
3660
|
+
* hosts the metadata fields they need to drive the offload path.
|
|
3661
|
+
*
|
|
3662
|
+
* Field stability: additive only.
|
|
3663
|
+
*/
|
|
3664
|
+
export interface EmbeddedDocumentManifestLike {
|
|
3665
|
+
/** Stable id across open/export (content-fingerprint derived). */
|
|
3666
|
+
readonly id: string;
|
|
3667
|
+
/** Three-way classification from `classifyEmbedding`. */
|
|
3668
|
+
readonly kind: "digestible" | "offloadable" | "store-only";
|
|
3669
|
+
readonly progId?: string;
|
|
3670
|
+
readonly mimeType?: string;
|
|
3671
|
+
readonly filename?: string;
|
|
3672
|
+
readonly size: number;
|
|
3673
|
+
readonly relationshipId: string;
|
|
3674
|
+
}
|
|
3675
|
+
|
|
3455
3676
|
export interface EditorHostAdapter {
|
|
3456
3677
|
/**
|
|
3457
3678
|
* Called once at load time to retrieve a previously-saved session
|
|
@@ -3492,6 +3713,42 @@ export interface EditorHostAdapter {
|
|
|
3492
3713
|
* activates and the error is logged non-fatally.
|
|
3493
3714
|
*/
|
|
3494
3715
|
renderChartPreview?(params: ChartPreviewResolveParams): Promise<Uint8Array | null>;
|
|
3716
|
+
/**
|
|
3717
|
+
* P8 Step 7 — store an `offloadable` embedded document out of the
|
|
3718
|
+
* parent OPC package and return a `StorageReference` the session
|
|
3719
|
+
* persists into `customXml/item1.xml` under the `bw:embeddings`
|
|
3720
|
+
* namespace. Called exactly once per `offloadable` manifest entry
|
|
3721
|
+
* at load time, AND only when this method is implemented.
|
|
3722
|
+
*
|
|
3723
|
+
* When this method is absent (or when it throws / rejects), the
|
|
3724
|
+
* session falls back to `store-only` semantics for the entry —
|
|
3725
|
+
* bytes stay on the parent package through the opaque-preservation
|
|
3726
|
+
* path, same as today. Round-trip is byte-identical either way.
|
|
3727
|
+
*
|
|
3728
|
+
* `loadEmbeddedDocument` must round-trip any `StorageReference`
|
|
3729
|
+
* this method returns: calling `loadEmbeddedDocument(ref)` must
|
|
3730
|
+
* yield the same bytes (matching `ref.sha256`) the host received
|
|
3731
|
+
* in `params.bytes`.
|
|
3732
|
+
*/
|
|
3733
|
+
storeEmbeddedDocument?(params: StoreEmbeddedDocParams): Promise<StorageReference>;
|
|
3734
|
+
/**
|
|
3735
|
+
* P8 Step 7 — rehydrate an `offloadable` embedded document by its
|
|
3736
|
+
* `StorageReference`. Called at export time for every entry the
|
|
3737
|
+
* session previously persisted into the `bw:embeddings` customXml
|
|
3738
|
+
* namespace via `storeEmbeddedDocument`.
|
|
3739
|
+
*
|
|
3740
|
+
* Return `Uint8Array` — the bytes are written back into the OPC
|
|
3741
|
+
* package at the original relationship target.
|
|
3742
|
+
* Return `null` — the session uses the `inlineBytes` fallback it
|
|
3743
|
+
* persisted alongside the reference at offload time. Round-trip
|
|
3744
|
+
* is preserved; the host-storage layer is effectively bypassed
|
|
3745
|
+
* for this specific entry.
|
|
3746
|
+
*
|
|
3747
|
+
* Rejections and thrown exceptions are caught and treated
|
|
3748
|
+
* identically to a `null` return. Export never fails on storage
|
|
3749
|
+
* unavailability (P3 guarantee).
|
|
3750
|
+
*/
|
|
3751
|
+
loadEmbeddedDocument?(ref: StorageReference): Promise<Uint8Array | null>;
|
|
3495
3752
|
}
|
|
3496
3753
|
|
|
3497
3754
|
export interface EditorDatastoreAdapter {
|
|
@@ -3508,7 +3765,7 @@ export interface EditorDatastoreAdapter {
|
|
|
3508
3765
|
// `snapshot_to_projection`, back-to-front anchor-sorted field fill,
|
|
3509
3766
|
// `change_id → range` walking, and read-merge-write workflow-overlay
|
|
3510
3767
|
// annotation. See `docs/wiki/agent-helpers.md` for the narrative and
|
|
3511
|
-
// `
|
|
3768
|
+
// `CLAUDE.md (lane status table)` § Track H for the phased plan.
|
|
3512
3769
|
//
|
|
3513
3770
|
// Phase 1 ships type declarations and optional method signatures on
|
|
3514
3771
|
// `WordReviewEditorRef`; runtime wiring lands in Phase 2, Python parity
|
|
@@ -3900,6 +4157,23 @@ export interface WordReviewEditorDiagnosticsFacet {
|
|
|
3900
4157
|
}
|
|
3901
4158
|
|
|
3902
4159
|
export interface WordReviewEditorRef {
|
|
4160
|
+
/**
|
|
4161
|
+
* L07 closure pass — opt into the V3 public API from a consumer holding
|
|
4162
|
+
* this ref. Returns the frozen `ApiV3` surface (`{ runtime, ai }`) bound
|
|
4163
|
+
* to the same `DocumentRuntime` this ref proxies. The result is cached
|
|
4164
|
+
* per-ref, so repeated calls return the same object reference.
|
|
4165
|
+
*
|
|
4166
|
+
* V3 is strictly additive — all existing V1/V2 ref methods remain. This
|
|
4167
|
+
* method exists so the mounted editor's own host code (and Storybook
|
|
4168
|
+
* consumers, and the probe script) can route through V3 without
|
|
4169
|
+
* standing up a second runtime. Before this method shipped, the only
|
|
4170
|
+
* production `createApiV3()` consumer was `services/debug/` plus test
|
|
4171
|
+
* scripts; this lands V3 as a real production-consumable seam at the
|
|
4172
|
+
* ref boundary.
|
|
4173
|
+
*
|
|
4174
|
+
* See `docs/architecture/07-runtime-api.md` §Seam-reality disclosure.
|
|
4175
|
+
*/
|
|
4176
|
+
getApiV3(): ApiV3;
|
|
3903
4177
|
focus(): void;
|
|
3904
4178
|
blur(): void;
|
|
3905
4179
|
undo(): void;
|
|
@@ -4006,6 +4280,34 @@ export interface WordReviewEditorRef {
|
|
|
4006
4280
|
isDirty(): boolean;
|
|
4007
4281
|
getFormattingState(): FormattingStateSnapshot;
|
|
4008
4282
|
getStyleCatalog(): StyleCatalogSnapshot;
|
|
4283
|
+
/**
|
|
4284
|
+
* Replace text at an anchor (or the current selection when omitted).
|
|
4285
|
+
*
|
|
4286
|
+
* **Deprecated for agent / API consumers (refactor/08 Slice-7 plan
|
|
4287
|
+
* §"Retire legacy paths"):** this raw-anchor shape bypasses the
|
|
4288
|
+
* Layer-08 scope compiler's replacement lifecycle (validate →
|
|
4289
|
+
* compile → apply → audit). Agents + platform workblocks must use
|
|
4290
|
+
* the scope-scoped path:
|
|
4291
|
+
*
|
|
4292
|
+
* - `api.ai.applyReplacementScope({targetScopeId, proposedText})`
|
|
4293
|
+
* — AI-action-policy + telemetry-audit-backed path.
|
|
4294
|
+
* - `api.runtime.content.replaceText({scopeId, replacement})` —
|
|
4295
|
+
* host/UI path without the AI-action-policy composer.
|
|
4296
|
+
*
|
|
4297
|
+
* This ref method stays for UI consumers that dispatch replacements
|
|
4298
|
+
* by live selection position (not by scope id). It emits no
|
|
4299
|
+
* `ScopeActionAudit`; agent paths that call it silently bypass the
|
|
4300
|
+
* audit invariant (S5).
|
|
4301
|
+
*
|
|
4302
|
+
* CI guard: `scripts/ci-check-no-raw-offset-replacetext-on-v3.mjs`
|
|
4303
|
+
* rejects any raw-anchor `replaceText(text, anchor)` shape from the
|
|
4304
|
+
* `src/api/v3/**` surface.
|
|
4305
|
+
*
|
|
4306
|
+
* @deprecated for agent/API callers — use {@link api.ai.applyReplacementScope}
|
|
4307
|
+
* or {@link api.runtime.content.replaceText} (scope-scoped shapes). Ref
|
|
4308
|
+
* retained for live-selection UI drivers only.
|
|
4309
|
+
* @see api.ai.applyReplacementScope
|
|
4310
|
+
*/
|
|
4009
4311
|
replaceText(
|
|
4010
4312
|
text: string,
|
|
4011
4313
|
target?: EditorAnchorProjection,
|
|
@@ -4196,6 +4498,56 @@ export interface WordReviewEditorRef {
|
|
|
4196
4498
|
setWorkflowMetadataEntries(entries: WorkflowMetadataEntry[]): void;
|
|
4197
4499
|
clearWorkflowMetadataEntries(): void;
|
|
4198
4500
|
getWorkflowMetadataSnapshot(): WorkflowMetadataSnapshot;
|
|
4501
|
+
/**
|
|
4502
|
+
* W10 — read the class-A overlay-visibility policy for a single
|
|
4503
|
+
* overlay kind. Returns `null` when the document has not authored a
|
|
4504
|
+
* policy for that kind (consumers fall back to class-C defaults).
|
|
4505
|
+
* Composition with the class-C local preference lives in Layer 10
|
|
4506
|
+
* (`ui.overlays.getVisibility`); this method is the class-A read only.
|
|
4507
|
+
*/
|
|
4508
|
+
getVisibilityPolicy(kind: OverlayKind): OverlayVisibilityPolicy | null;
|
|
4509
|
+
/**
|
|
4510
|
+
* W10 — read the full class-A policy set. Returns an empty array for
|
|
4511
|
+
* documents that predate the schema.
|
|
4512
|
+
*/
|
|
4513
|
+
getVisibilityPolicies(): readonly OverlayVisibilityPolicy[];
|
|
4514
|
+
/**
|
|
4515
|
+
* W10 — author a class-A policy. Persists via `customXml/item1.xml`
|
|
4516
|
+
* on next export + broadcasts via CRDT. Returns `true` when the call
|
|
4517
|
+
* actually changed state; callers can use the boolean to dedupe
|
|
4518
|
+
* subscriber wakeups.
|
|
4519
|
+
*/
|
|
4520
|
+
setVisibilityPolicy(policy: OverlayVisibilityPolicy): boolean;
|
|
4521
|
+
/**
|
|
4522
|
+
* W10 — clear a class-A policy (document-predating-schema state).
|
|
4523
|
+
* Returns `true` on actual delete, `false` when no policy was set.
|
|
4524
|
+
*/
|
|
4525
|
+
clearVisibilityPolicy(kind: OverlayKind): boolean;
|
|
4526
|
+
/**
|
|
4527
|
+
* W10 — subscribe to class-A policy-set changes (any kind). Fires
|
|
4528
|
+
* after a successful `setVisibilityPolicy` / `clearVisibilityPolicy`
|
|
4529
|
+
* call. Returns an unsubscribe function. Consumed by L10 X3's
|
|
4530
|
+
* `ui.overlays.subscribeVisibility` composition so UI subscribers
|
|
4531
|
+
* re-fire when an authoring tool mutates policy mid-session.
|
|
4532
|
+
*/
|
|
4533
|
+
subscribeVisibilityPolicy(listener: () => void): () => void;
|
|
4534
|
+
/**
|
|
4535
|
+
* X5 — read the class-A markup-mode policy (single record). Returns
|
|
4536
|
+
* `null` when the document predates the schema. Composition with the
|
|
4537
|
+
* class-C local preference lives in L10 (`ui.viewport.getEffectiveMarkupMode`).
|
|
4538
|
+
*/
|
|
4539
|
+
getMarkupModePolicy(): WorkflowMarkupModePolicy | null;
|
|
4540
|
+
/**
|
|
4541
|
+
* X5 — author the class-A markup-mode policy, or clear with `null`.
|
|
4542
|
+
* Persists via `customXml/item1.xml` on next export + broadcasts via
|
|
4543
|
+
* CRDT when collab is attached. Returns `true` when state changed.
|
|
4544
|
+
*/
|
|
4545
|
+
setMarkupModePolicy(policy: WorkflowMarkupModePolicy | null): boolean;
|
|
4546
|
+
/**
|
|
4547
|
+
* X5 — subscribe to markup-mode policy changes. Returns unsubscribe.
|
|
4548
|
+
* Consumed by L10's X5 composition site.
|
|
4549
|
+
*/
|
|
4550
|
+
subscribeMarkupModePolicy(listener: () => void): () => void;
|
|
4199
4551
|
/**
|
|
4200
4552
|
* Phase C §C1 — filter + project the current workflow overlay into a
|
|
4201
4553
|
* scope-joined view. Reads a snapshot of the current overlay + metadata
|
|
@@ -4902,8 +5254,59 @@ export interface WordReviewEditorProps {
|
|
|
4902
5254
|
customSelectionTools?: ReadonlyArray<
|
|
4903
5255
|
import("../ui/headless/chrome-registry").SelectionToolRegistryEntry
|
|
4904
5256
|
>;
|
|
5257
|
+
/**
|
|
5258
|
+
* Phase C.γ host-callback bag. When supplied, the workspace mounts
|
|
5259
|
+
* `TwWorkspaceChromeHost` which in turn mounts the right-click
|
|
5260
|
+
* context menu (`TwContextMenuPortal`) and the Ctrl/Cmd+K command
|
|
5261
|
+
* palette (`TwCommandPaletteMount`), dispatching through the shared
|
|
5262
|
+
* `editorActionRegistry`. Actions without a wired callback are
|
|
5263
|
+
* hidden from every surface — progressive disclosure per
|
|
5264
|
+
* `designsystem.md §2.1 principle 4`.
|
|
5265
|
+
*
|
|
5266
|
+
* Omit to preserve pre-Phase-C behavior (no right-click menu, no
|
|
5267
|
+
* palette). Required for the default editor to expose the
|
|
5268
|
+
* Phase C.γ surfaces shipped in `5fce913a`.
|
|
5269
|
+
*/
|
|
5270
|
+
editorActionHost?: import("../ui-tailwind/chrome/editor-action-registry").EditorActionHostCallbacks;
|
|
5271
|
+
/**
|
|
5272
|
+
* Forward ref for the workspace's chrome controller. Wires the
|
|
5273
|
+
* `pm-command-bridge` `onContextMenuRequested` callback so a native
|
|
5274
|
+
* `contextmenu` event opens the menu at the click coordinates. Also
|
|
5275
|
+
* consumed by Phase D's inline "More…" buttons on demoted floating
|
|
5276
|
+
* toolbars.
|
|
5277
|
+
*/
|
|
5278
|
+
chromeControllerRef?: import("react").Ref<
|
|
5279
|
+
import("../ui-tailwind/chrome/tw-workspace-chrome-host").TwWorkspaceChromeHostController
|
|
5280
|
+
>;
|
|
5281
|
+
/**
|
|
5282
|
+
* Suppress the global Ctrl/Cmd+K palette listener — e.g. when a
|
|
5283
|
+
* higher-priority modal captures keyboard focus. Defaults to
|
|
5284
|
+
* `false` (palette listener is active when `editorActionHost` is
|
|
5285
|
+
* supplied).
|
|
5286
|
+
*/
|
|
5287
|
+
commandPaletteDisabled?: boolean;
|
|
5288
|
+
/**
|
|
5289
|
+
* Phase Q runtime-embedded debug UX (refactor/11 Slice 7 + refactor/10
|
|
5290
|
+
* Slice 5). Default is `"off"` — the editor mounts no debug chrome
|
|
5291
|
+
* and silently ignores the `ui.debug.attach()` hook. Flip to
|
|
5292
|
+
* `"top-bar"` to mount a slim status bar showing the active session
|
|
5293
|
+
* + scope telemetry, or to `"full"` to mount the tabbed overlay with
|
|
5294
|
+
* inspector / events / REPL panes.
|
|
5295
|
+
*
|
|
5296
|
+
* **CLAUDE.md Protected Invariant** — the default MUST be `"off"`.
|
|
5297
|
+
* Predecessor debug-preview props (`showUnsupportedObjectPreviews`,
|
|
5298
|
+
* `unsupportedPreviewsPolicy`) have regressed their safe defaults
|
|
5299
|
+
* multiple times; keep this one strict.
|
|
5300
|
+
*/
|
|
5301
|
+
debugMode?: DebugMode;
|
|
4905
5302
|
}
|
|
4906
5303
|
|
|
5304
|
+
/**
|
|
5305
|
+
* Phase Q debug-UX visibility mode. Consumed by
|
|
5306
|
+
* `WordReviewEditorProps.debugMode` + `src/ui-tailwind/debug/**`.
|
|
5307
|
+
*/
|
|
5308
|
+
export type DebugMode = "off" | "top-bar" | "full";
|
|
5309
|
+
|
|
4907
5310
|
/**
|
|
4908
5311
|
* Selection context handed to host-delegated shortcut callbacks
|
|
4909
5312
|
* (`onFindRequested`, `onReplaceRequested`, `onGoToRequested`,
|