@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
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UiApiContext — React context that exposes a bound `ApiV3Ui` to chrome
|
|
3
|
+
* surfaces during render.
|
|
4
|
+
*
|
|
5
|
+
* The UI API (layer 10) is the architectural seam between runtime truth
|
|
6
|
+
* and chrome presentation (architecture 10 §U5 + designsystem §8.3). This
|
|
7
|
+
* context is how presentation surfaces see the seam at render time.
|
|
8
|
+
*
|
|
9
|
+
* Mounted editor path (refactor/11 Slice 4 target):
|
|
10
|
+
* <UiApiProvider value={api.ui}>
|
|
11
|
+
* <TwReviewWorkspace ... />
|
|
12
|
+
* </UiApiProvider>
|
|
13
|
+
*
|
|
14
|
+
* When the provider is mounted, chrome hooks (e.g. `useWorkspaceComposition`)
|
|
15
|
+
* call through `api.ui.chrome.getComposition(input)` — the UI API owns the
|
|
16
|
+
* composition decision at a single site.
|
|
17
|
+
*
|
|
18
|
+
* Headless / test / pre-mount paths receive `null`; consumer hooks fall
|
|
19
|
+
* back to the pure function (e.g. `resolveChromeComposition(input)`) and
|
|
20
|
+
* produce the same output. Wrapping a mounted provider is a latency-
|
|
21
|
+
* free structural choice, not a behavioral one.
|
|
22
|
+
*
|
|
23
|
+
* U2 (UI API is bound to a controller, not React internals) — this
|
|
24
|
+
* context is a presentation-layer convenience, not part of the UI API
|
|
25
|
+
* surface itself. Non-React consumers (Playwright drivers, the debug
|
|
26
|
+
* service) construct their `ApiV3Ui` independently.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import { createContext, useContext } from "react";
|
|
30
|
+
|
|
31
|
+
import type { ApiV3Ui } from "../api/v3/ui";
|
|
32
|
+
|
|
33
|
+
const UiApiContext = createContext<ApiV3Ui | null>(null);
|
|
34
|
+
|
|
35
|
+
export const UiApiProvider = UiApiContext.Provider;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Read the mounted UI API. Returns `null` when no provider is mounted —
|
|
39
|
+
* consumers fall back to pure functions (e.g. `resolveChromeComposition`).
|
|
40
|
+
*/
|
|
41
|
+
export function useUiApi(): ApiV3Ui | null {
|
|
42
|
+
return useContext(UiApiContext);
|
|
43
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React context exposing the shell-owned UI subscriber channels to
|
|
3
|
+
* deep consumers (primarily `tw-review-workspace.tsx`, which holds the
|
|
4
|
+
* state sources that drive emission — `renderFrameRevision`, scroll,
|
|
5
|
+
* zoom, posture slices).
|
|
6
|
+
*
|
|
7
|
+
* The channels themselves live in `WordReviewEditor.tsx` via stable
|
|
8
|
+
* `useRef` boxes; the factory at `src/ui/ui-controller-factory.ts`
|
|
9
|
+
* closes over them for the subscribe side. This context is the
|
|
10
|
+
* counterpart for the emit side — any deep React consumer can call
|
|
11
|
+
* `useUiShellChannels()?.chrome.emit(posture)` without prop-drilling
|
|
12
|
+
* the emitter identities down the tree.
|
|
13
|
+
*
|
|
14
|
+
* When no provider is mounted (headless tests, non-mounted hosts),
|
|
15
|
+
* `useUiShellChannels()` returns `null` and emission is a no-op.
|
|
16
|
+
*
|
|
17
|
+
* This is strictly a shell-local seam — the UI API layer at
|
|
18
|
+
* `src/api/v3/ui/**` knows nothing about it. Per contract U2 the UI
|
|
19
|
+
* API is bound via a `UiController`; the channel emission path is
|
|
20
|
+
* how the shell feeds events INTO its controller, not a runtime-
|
|
21
|
+
* visible contract.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { createContext, useContext } from "react";
|
|
25
|
+
|
|
26
|
+
import type {
|
|
27
|
+
ChromePosture,
|
|
28
|
+
OverlayAnchorQuery,
|
|
29
|
+
ViewportState,
|
|
30
|
+
} from "../api/v3/ui/_types.ts";
|
|
31
|
+
import type { UiSubscriberChannel } from "../shell/ui-subscriber-channels.ts";
|
|
32
|
+
|
|
33
|
+
export interface UiShellChannels {
|
|
34
|
+
readonly chrome: UiSubscriberChannel<ChromePosture>;
|
|
35
|
+
readonly viewport: UiSubscriberChannel<ViewportState>;
|
|
36
|
+
readonly overlays: UiSubscriberChannel<OverlayAnchorQuery>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const UiShellChannelsContext = createContext<UiShellChannels | null>(null);
|
|
40
|
+
|
|
41
|
+
export const UiShellChannelsProvider = UiShellChannelsContext.Provider;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Read the mounted shell's emitter channels. Returns `null` when no
|
|
45
|
+
* provider is mounted — consumers should treat null as "no-op emit".
|
|
46
|
+
*/
|
|
47
|
+
export function useUiShellChannels(): UiShellChannels | null {
|
|
48
|
+
return useContext(UiShellChannelsContext);
|
|
49
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createPublicRangeAnchor } from "../core/selection/anchor-conversion.ts";
|
|
2
2
|
import type {
|
|
3
3
|
CanonicalDocumentEnvelope,
|
|
4
4
|
CompatibilityFeatureEntry,
|
|
@@ -89,7 +89,7 @@ function collectReviewFeatures(
|
|
|
89
89
|
featureClass: "preserve-only",
|
|
90
90
|
message:
|
|
91
91
|
"Cross-paragraph comment anchors remain visible but detached to preserve package truth and export safety.",
|
|
92
|
-
affectedAnchor:
|
|
92
|
+
affectedAnchor: createPublicRangeAnchor(
|
|
93
93
|
multiParagraphComment.anchor.lastKnownRange.from,
|
|
94
94
|
multiParagraphComment.anchor.lastKnownRange.to,
|
|
95
95
|
),
|
|
@@ -483,7 +483,7 @@ function collectPreservationFeatures(
|
|
|
483
483
|
featureKey: descriptor.featureKey,
|
|
484
484
|
featureClass: "preserve-only",
|
|
485
485
|
message: descriptor.label,
|
|
486
|
-
affectedAnchor:
|
|
486
|
+
affectedAnchor: createPublicRangeAnchor(
|
|
487
487
|
fragment.lastKnownRange.from,
|
|
488
488
|
fragment.lastKnownRange.to,
|
|
489
489
|
),
|
|
@@ -848,11 +848,11 @@ function toRevisionAffectedAnchor(
|
|
|
848
848
|
) {
|
|
849
849
|
switch (revision.anchor.kind) {
|
|
850
850
|
case "range":
|
|
851
|
-
return
|
|
851
|
+
return createPublicRangeAnchor(revision.anchor.range.from, revision.anchor.range.to);
|
|
852
852
|
case "node":
|
|
853
|
-
return
|
|
853
|
+
return createPublicRangeAnchor(revision.anchor.at, revision.anchor.at + 1);
|
|
854
854
|
case "detached":
|
|
855
|
-
return
|
|
855
|
+
return createPublicRangeAnchor(
|
|
856
856
|
revision.anchor.lastKnownRange.from,
|
|
857
857
|
revision.anchor.lastKnownRange.to,
|
|
858
858
|
);
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Central entry point for OOXML style cascade resolution.
|
|
3
|
-
*
|
|
4
|
-
* Re-exports the paragraph, character, run, numbering-marker, and table style
|
|
5
|
-
* resolvers from their individual modules so downstream consumers (Lane 3a
|
|
6
|
-
* measurement, Lane 1 style picker, agent tooling) can import from a single,
|
|
7
|
-
* stable location.
|
|
8
|
-
*
|
|
9
|
-
* Adding a new resolver? Add it to its feature module (paragraph, table, etc.)
|
|
10
|
-
* and re-export from here. Do not define new cascade logic in this file.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
export {
|
|
14
|
-
resolveParagraphStyleChain,
|
|
15
|
-
resolveCharacterStyleChain,
|
|
16
|
-
resolveEffectiveParagraphFormatting,
|
|
17
|
-
resolveEffectiveRunFormatting,
|
|
18
|
-
resolveNumberingMarkerRunFormatting,
|
|
19
|
-
resolveTableCellTextFormatting,
|
|
20
|
-
resolveRunFontFamily,
|
|
21
|
-
getNextStyleId,
|
|
22
|
-
type ParagraphResolveInput,
|
|
23
|
-
type RunResolveInput,
|
|
24
|
-
type MarkerResolveInput,
|
|
25
|
-
} from "./paragraph-style-resolver.ts";
|
|
26
|
-
|
|
27
|
-
export {
|
|
28
|
-
resolveTableStyleResolution,
|
|
29
|
-
type ResolvedTableCellStyle,
|
|
30
|
-
type ResolvedTableRowStyle,
|
|
31
|
-
type ResolvedTableLevelProperties,
|
|
32
|
-
type ResolvedTableStyleResolution,
|
|
33
|
-
} from "./table-style-resolver.ts";
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import React, { type ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
import { FOCUS_RING_CLASSES } from "../theme/tokens";
|
|
4
|
-
|
|
5
|
-
export interface TwModeDockAction {
|
|
6
|
-
id: string;
|
|
7
|
-
label: string;
|
|
8
|
-
icon: ReactNode;
|
|
9
|
-
onClick: () => void;
|
|
10
|
-
isActive?: boolean;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface TwModeDockProps {
|
|
14
|
-
label: string;
|
|
15
|
-
icon?: ReactNode;
|
|
16
|
-
actions?: readonly TwModeDockAction[];
|
|
17
|
-
className?: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// TwModeDock is a deprecated harness-only surface per designsystem §6.26,
|
|
21
|
-
// but its focus ring still participates in the canonical §4.7 contract —
|
|
22
|
-
// import the shared token constant so a future ring update cascades here.
|
|
23
|
-
const focusRingClass = FOCUS_RING_CLASSES;
|
|
24
|
-
|
|
25
|
-
export function TwModeDock(props: TwModeDockProps) {
|
|
26
|
-
const actions = (props.actions ?? []).slice(0, 3);
|
|
27
|
-
|
|
28
|
-
const className = [
|
|
29
|
-
"pointer-events-auto fixed bottom-4 left-1/2 z-40 -translate-x-1/2",
|
|
30
|
-
"flex h-9 items-center gap-2 rounded-[var(--radius-pill)] border border-border bg-canvas px-2 py-1",
|
|
31
|
-
"shadow-[var(--shadow-float)] backdrop-blur-sm",
|
|
32
|
-
"transition-opacity duration-[var(--motion-fast)]",
|
|
33
|
-
props.className,
|
|
34
|
-
]
|
|
35
|
-
.filter(Boolean)
|
|
36
|
-
.join(" ");
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<div
|
|
40
|
-
role="toolbar"
|
|
41
|
-
aria-label="Mode dock"
|
|
42
|
-
className={className}
|
|
43
|
-
data-testid="tw-mode-dock"
|
|
44
|
-
data-chrome-overlay="mode-dock"
|
|
45
|
-
>
|
|
46
|
-
<div className="flex items-center gap-1.5 pl-1 pr-1.5">
|
|
47
|
-
{props.icon ? (
|
|
48
|
-
<span aria-hidden="true" className="flex h-3.5 w-3.5 items-center text-tertiary">
|
|
49
|
-
{props.icon}
|
|
50
|
-
</span>
|
|
51
|
-
) : null}
|
|
52
|
-
<span
|
|
53
|
-
className="text-[10px] font-semibold uppercase tracking-[0.14em] text-secondary"
|
|
54
|
-
data-testid="tw-mode-dock__label"
|
|
55
|
-
>
|
|
56
|
-
{props.label}
|
|
57
|
-
</span>
|
|
58
|
-
</div>
|
|
59
|
-
{actions.length > 0 ? (
|
|
60
|
-
<div className="flex items-center gap-0.5 border-l border-border/70 pl-1.5">
|
|
61
|
-
{actions.map((action) => (
|
|
62
|
-
<button
|
|
63
|
-
key={action.id}
|
|
64
|
-
type="button"
|
|
65
|
-
onClick={action.onClick}
|
|
66
|
-
aria-label={action.label}
|
|
67
|
-
aria-pressed={action.isActive ?? false}
|
|
68
|
-
title={action.label}
|
|
69
|
-
className={[
|
|
70
|
-
"inline-flex h-7 w-7 items-center justify-center rounded-[var(--radius-control)] transition-colors",
|
|
71
|
-
action.isActive
|
|
72
|
-
? "bg-accent-soft text-accent"
|
|
73
|
-
: "text-tertiary hover:bg-surface-hover hover:text-primary",
|
|
74
|
-
focusRingClass,
|
|
75
|
-
].join(" ")}
|
|
76
|
-
data-testid={`tw-mode-dock__action-${action.id}`}
|
|
77
|
-
>
|
|
78
|
-
<span aria-hidden="true">{action.icon}</span>
|
|
79
|
-
</button>
|
|
80
|
-
))}
|
|
81
|
-
</div>
|
|
82
|
-
) : null}
|
|
83
|
-
</div>
|
|
84
|
-
);
|
|
85
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|