@beyondwork/docx-react-component 1.0.67 → 1.0.70
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 -932
- 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 -4797
- 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,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types + constants shared by the sync (`loadDocxEditorSession`) and
|
|
3
|
+
* async (`loadDocxEditorSessionAsync`) load paths, plus the downstream
|
|
4
|
+
* export pipeline (`exportDocxEditorSession`).
|
|
5
|
+
*
|
|
6
|
+
* Slice 5e-7.d.0 — relocated from `src/io/docx-session.ts`. The load
|
|
7
|
+
* bodies move to `src/session/import/load-sync.ts` + `load-async.ts`
|
|
8
|
+
* in 5e-7.d.1 + .2; this file reserves their shared type destination
|
|
9
|
+
* first so the body moves only have to deal with behavior, not types.
|
|
10
|
+
*
|
|
11
|
+
* P6 compliance for session-layer purity:
|
|
12
|
+
* - `telemetryBus` typed as `unknown` (matching the public
|
|
13
|
+
* `OpenOptions` pattern in `src/session/types.ts`) so this file
|
|
14
|
+
* does not transit `src/runtime/debug/telemetry-bus.ts`. The load
|
|
15
|
+
* body narrows to the concrete `TelemetryBus` internally.
|
|
16
|
+
* - `laycacheEnvelope` typed as `unknown` for the same reason
|
|
17
|
+
* (the concrete `CacheEnvelope` type lives in
|
|
18
|
+
* `src/runtime/prerender/cache-envelope.ts`, which is the
|
|
19
|
+
* single remaining debt-exception transit inside
|
|
20
|
+
* `src/io/docx-session.ts`). Narrowing happens inside the load
|
|
21
|
+
* body.
|
|
22
|
+
*
|
|
23
|
+
* Re-exported from `src/io/docx-session.ts` for back-compat during
|
|
24
|
+
* the transition; consumers that import from the legacy path continue
|
|
25
|
+
* to work unchanged until 5e-9 retires the file.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import type { EditorSessionState } from "../session-state.ts";
|
|
29
|
+
import type {
|
|
30
|
+
EditorError,
|
|
31
|
+
EditorHostAdapter,
|
|
32
|
+
EditorSurfaceSnapshot,
|
|
33
|
+
ExportDocxOptions,
|
|
34
|
+
ExportResult,
|
|
35
|
+
LoadStage,
|
|
36
|
+
PersistedEditorSnapshot,
|
|
37
|
+
ProtectionSnapshot,
|
|
38
|
+
} from "../../api/public-types.ts";
|
|
39
|
+
import type { LoadScheduler } from "../../io/load-scheduler.ts";
|
|
40
|
+
import type {
|
|
41
|
+
CommentImportDiagnostic,
|
|
42
|
+
ImportedCommentDefinition,
|
|
43
|
+
} from "../../io/ooxml/parse-comments.ts";
|
|
44
|
+
import type { OpcPackage } from "../../io/opc/package-reader.ts";
|
|
45
|
+
import type { OpcRelationship } from "../../io/ooxml/part-manifest.ts";
|
|
46
|
+
import type { EditorStatePayload } from "../../io/ooxml/workflow-payload.ts";
|
|
47
|
+
import type {
|
|
48
|
+
EmbeddedDocumentManifest,
|
|
49
|
+
ProgressiveSurfaceProjector,
|
|
50
|
+
} from "../types.ts";
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Options for `loadDocxEditorSession` (sync). The async variant
|
|
54
|
+
* (`LoadDocxEditorSessionAsyncOptions`) extends this.
|
|
55
|
+
*/
|
|
56
|
+
export interface LoadDocxEditorSessionOptions {
|
|
57
|
+
documentId: string;
|
|
58
|
+
sourceLabel?: string;
|
|
59
|
+
bytes: Uint8Array | ArrayBuffer;
|
|
60
|
+
editorBuild?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Fastload P2: optional instrumentation callback invoked once per
|
|
63
|
+
* completed load stage. Stage ordering: opc → body →
|
|
64
|
+
* styles-numbering-comments → skeleton-ready. `durationMs` is
|
|
65
|
+
* measured against `performance.now()` boundaries inside the loader.
|
|
66
|
+
*
|
|
67
|
+
* Pure instrumentation — has no effect on returned session shape.
|
|
68
|
+
* Safe to leave undefined; existing callers observe no behavior
|
|
69
|
+
* change.
|
|
70
|
+
*/
|
|
71
|
+
onLoadStage?: (stage: LoadStage, durationMs: number) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Stage 0B.1: host-adapter surface. The sync loader accepts the option for
|
|
74
|
+
* API symmetry with {@link LoadDocxEditorSessionAsyncOptions} but does not
|
|
75
|
+
* invoke `renderChartPreview` — chart-preview synthesis is asynchronous, so
|
|
76
|
+
* hosts that want preview bitmaps must call the async path.
|
|
77
|
+
* Other adapter methods (load/saveSession/logEvent) are not consumed by the
|
|
78
|
+
* loader itself and are carried through unchanged.
|
|
79
|
+
*/
|
|
80
|
+
hostAdapter?: EditorHostAdapter;
|
|
81
|
+
/**
|
|
82
|
+
* Optional telemetry bus. When provided, the loader brackets every
|
|
83
|
+
* `parseMainDocumentXml` invocation with
|
|
84
|
+
* `setActiveParseTelemetryBus(bus)` / `setActiveParseTelemetryBus(undefined)`
|
|
85
|
+
* so the parser emits on the `parse` channel.
|
|
86
|
+
*
|
|
87
|
+
* Typed `unknown` at this session-layer boundary (§P6 forbids
|
|
88
|
+
* `src/runtime/**` imports; the concrete `TelemetryBus` type lives
|
|
89
|
+
* at `src/runtime/debug/telemetry-bus.ts`). The load body narrows
|
|
90
|
+
* internally.
|
|
91
|
+
*/
|
|
92
|
+
telemetryBus?: unknown;
|
|
93
|
+
/**
|
|
94
|
+
* P8 Step 7 — explicit opt-in for embedded-document offload. When
|
|
95
|
+
* `true` AND `hostAdapter.storeEmbeddedDocument` is defined, the
|
|
96
|
+
* loader runs the offload pass on every `offloadable` manifest:
|
|
97
|
+
* materialize bytes → compute sha-256 → call `storeEmbeddedDocument`
|
|
98
|
+
* → persist `bw:embeddings` customXml reference + inline-bytes
|
|
99
|
+
* fallback.
|
|
100
|
+
*
|
|
101
|
+
* Default `false` (or omitted): no offload is performed, even when
|
|
102
|
+
* `hostAdapter.storeEmbeddedDocument` is defined. Offloadable
|
|
103
|
+
* manifests fall through to the preservation-store path (identical
|
|
104
|
+
* semantics to store-only — bytes stay on the parent package).
|
|
105
|
+
*
|
|
106
|
+
* Rationale (cross-layer-coord-04 §1.13 + cross-layer-coord-01 §5):
|
|
107
|
+
* sha-256 + base64-encode of a large offloadable embedding on the
|
|
108
|
+
* critical path is ~300 ms per MB. A 2.5 MB offloadable embedding
|
|
109
|
+
* (F52, CCEP EU-Global-IT-Services) would otherwise silently
|
|
110
|
+
* regress cold-open by ~40 % for every host that supplies an
|
|
111
|
+
* adapter for chart-preview / save-session / log-event purposes
|
|
112
|
+
* unrelated to offload. The flag gates the cost behind explicit
|
|
113
|
+
* intent.
|
|
114
|
+
*
|
|
115
|
+
* Re-open path: packages that ALREADY carry `bw:embeddings`
|
|
116
|
+
* customXml entries from a prior offload rehydrate from those
|
|
117
|
+
* entries regardless of this flag — that path is sha/base64-free
|
|
118
|
+
* (the customXml already has the values). The flag only gates
|
|
119
|
+
* FRESH offload on first-open.
|
|
120
|
+
*/
|
|
121
|
+
offloadEmbeddedDocuments?: boolean;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Options for `loadDocxEditorSessionAsync`.
|
|
126
|
+
*/
|
|
127
|
+
export interface LoadDocxEditorSessionAsyncOptions
|
|
128
|
+
extends LoadDocxEditorSessionOptions {
|
|
129
|
+
/**
|
|
130
|
+
* Scheduler that the async loader awaits between parse stages.
|
|
131
|
+
* See `src/io/load-scheduler.ts::createLoadScheduler()`.
|
|
132
|
+
*/
|
|
133
|
+
scheduler: LoadScheduler;
|
|
134
|
+
/**
|
|
135
|
+
* L7 Phase 2.5 Plan B B.6b — optional laycache envelope. When
|
|
136
|
+
* supplied, the async loader short-circuits the five expensive
|
|
137
|
+
* parse stages and uses `envelope.canonicalDocument` directly.
|
|
138
|
+
*
|
|
139
|
+
* Typed `unknown` at this session-layer boundary (§P6 — concrete
|
|
140
|
+
* `CacheEnvelope` lives at `src/runtime/prerender/cache-envelope.ts`).
|
|
141
|
+
* The load body narrows internally.
|
|
142
|
+
*/
|
|
143
|
+
laycacheEnvelope?: unknown;
|
|
144
|
+
/**
|
|
145
|
+
* DI seam for the laycache probe. When set AND no pre-resolved
|
|
146
|
+
* `laycacheEnvelope` is supplied, the session invokes this
|
|
147
|
+
* callback on the source bytes. See
|
|
148
|
+
* `src/session/types.ts::OpenOptions.laycacheProbe` for rationale
|
|
149
|
+
* (retires the last runtime-layer debt exception).
|
|
150
|
+
*/
|
|
151
|
+
laycacheProbe?: (
|
|
152
|
+
bytes: Uint8Array | ArrayBuffer,
|
|
153
|
+
) => Promise<{ envelope: unknown } | null>;
|
|
154
|
+
/**
|
|
155
|
+
* L7 Phase 2 Finale C2 — progressive initial mount callback.
|
|
156
|
+
* See field docs on `src/session/types.ts::OpenOptions`
|
|
157
|
+
* for the full semantics.
|
|
158
|
+
*/
|
|
159
|
+
onProgressiveSnapshot?: (partial: {
|
|
160
|
+
surface?: EditorSurfaceSnapshot;
|
|
161
|
+
phase: "viewport";
|
|
162
|
+
blocksRealized: number;
|
|
163
|
+
blocksTotal: number;
|
|
164
|
+
}) => void;
|
|
165
|
+
/**
|
|
166
|
+
* Runtime-side port for progressive-surface synthesis — see
|
|
167
|
+
* `src/session/types.ts::ProgressiveSurfaceProjector`.
|
|
168
|
+
*/
|
|
169
|
+
surfaceProjector?: ProgressiveSurfaceProjector;
|
|
170
|
+
/**
|
|
171
|
+
* C3b — deferred chart preview resolution.
|
|
172
|
+
*/
|
|
173
|
+
onChartPreviewsReady?: (
|
|
174
|
+
resolvedDoc: import("../../model/canonical-document.ts").CanonicalDocument,
|
|
175
|
+
) => void;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Shape returned by the sync + async loaders. Consumed by
|
|
180
|
+
* `DocxSession.open()` + `createDiagnosticsSession` + legacy callers.
|
|
181
|
+
*/
|
|
182
|
+
export interface LoadedDocxEditorSession {
|
|
183
|
+
initialSessionState: EditorSessionState;
|
|
184
|
+
initialSnapshot: PersistedEditorSnapshot;
|
|
185
|
+
fatalError?: EditorError;
|
|
186
|
+
readOnly: boolean;
|
|
187
|
+
protectionSnapshot: ProtectionSnapshot;
|
|
188
|
+
exportDocx: (
|
|
189
|
+
sessionState: EditorSessionState | PersistedEditorSnapshot,
|
|
190
|
+
options?: ExportDocxOptions,
|
|
191
|
+
) => Promise<ExportResult>;
|
|
192
|
+
/** Schema 1.2 — editorState block parsed from the 1.2 payload, if present. */
|
|
193
|
+
initialEditorStatePayload?: EditorStatePayload;
|
|
194
|
+
/**
|
|
195
|
+
* P8 Step 6 — embedded-document discovery output. Populated by the
|
|
196
|
+
* legacy loader via `collectEmbeddedDocuments(sourcePackage,
|
|
197
|
+
* mainDocumentPath)` immediately after OPC read. Empty on the
|
|
198
|
+
* laycache short-circuit path (the cached envelope does not carry
|
|
199
|
+
* the OPC package in a form the discovery walk can use).
|
|
200
|
+
*
|
|
201
|
+
* Consumed by `DocxSession.open()` to populate
|
|
202
|
+
* `OpenResult.embeddedDocuments`.
|
|
203
|
+
*/
|
|
204
|
+
embeddedDocumentManifests?: readonly EmbeddedDocumentManifest[];
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* State captured at import time that the export pipeline consumes to
|
|
209
|
+
* round-trip the package. Carries source bytes, the OPC package
|
|
210
|
+
* snapshot, per-part relationships, preserved-part manifest, and the
|
|
211
|
+
* initial canonical signature used for fast-path byte reuse.
|
|
212
|
+
*
|
|
213
|
+
* Load path builds this; `exportDocxEditorSession` consumes it via
|
|
214
|
+
* the closure captured at open time.
|
|
215
|
+
*/
|
|
216
|
+
export interface ImportedDocxState {
|
|
217
|
+
sourceBytes: Uint8Array;
|
|
218
|
+
sourcePackage: OpcPackage;
|
|
219
|
+
sourceDocumentXml: string;
|
|
220
|
+
sourceDocumentPartPath: string;
|
|
221
|
+
sourceDocumentRelationships: readonly OpcRelationship[];
|
|
222
|
+
sourceDocumentAttributes: Record<string, string>;
|
|
223
|
+
sourceNumberingPartPath?: string;
|
|
224
|
+
sourceNumberingRelationshipId?: string;
|
|
225
|
+
/**
|
|
226
|
+
* Resolved `/word/settings.xml` part path when the source package
|
|
227
|
+
* carried one. Threaded through to the export path so the settings
|
|
228
|
+
* serializer can call `replaceOwnedPart` with the right relationship
|
|
229
|
+
* target.
|
|
230
|
+
*/
|
|
231
|
+
sourceSettingsPartPath?: string;
|
|
232
|
+
/**
|
|
233
|
+
* Original settings.xml bytes decoded as UTF-8. Passed to
|
|
234
|
+
* `serializeSettingsXml(settings, sourceXml)` as the graft source so
|
|
235
|
+
* unmodelled top-level children (`<w:defaultTabStop>`,
|
|
236
|
+
* `<w:documentProtection>`, mail-merge state, etc.) survive verbatim
|
|
237
|
+
* through round-trip. Undefined when the source package lacked a
|
|
238
|
+
* settings part.
|
|
239
|
+
*/
|
|
240
|
+
sourceSettingsXml?: string;
|
|
241
|
+
sourceCommentsPartPath?: string;
|
|
242
|
+
sourceCommentsRelationshipId?: string;
|
|
243
|
+
sourceCommentsRootTag?: string;
|
|
244
|
+
sourceCommentsExtendedPartPath?: string;
|
|
245
|
+
sourceCommentsExtendedRelationshipId?: string;
|
|
246
|
+
sourceCommentsExtendedRootTag?: string;
|
|
247
|
+
sourceCommentsIdsPartPath?: string;
|
|
248
|
+
sourceCommentsIdsRelationshipId?: string;
|
|
249
|
+
sourceCommentsIdsRootTag?: string;
|
|
250
|
+
sourcePeoplePartPath?: string;
|
|
251
|
+
sourcePeopleRelationshipId?: string;
|
|
252
|
+
sourcePeopleRootTag?: string;
|
|
253
|
+
sourcePeopleAuthors: readonly string[];
|
|
254
|
+
protectionSnapshot: ProtectionSnapshot;
|
|
255
|
+
preservedCommentDefinitions: readonly ImportedCommentDefinition[];
|
|
256
|
+
blockingCommentDiagnostics: readonly CommentImportDiagnostic[];
|
|
257
|
+
initialCanonicalSignature: string;
|
|
258
|
+
sourceSubPartPaths: {
|
|
259
|
+
headers: Array<{ partPath: string; relationshipId: string }>;
|
|
260
|
+
footers: Array<{ partPath: string; relationshipId: string }>;
|
|
261
|
+
footnotesPartPath?: string;
|
|
262
|
+
footnotesRelationshipId?: string;
|
|
263
|
+
endnotesPartPath?: string;
|
|
264
|
+
endnotesRelationshipId?: string;
|
|
265
|
+
themePartPath?: string;
|
|
266
|
+
themeRelationshipId?: string;
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* P8 Step 7 — offload entries captured at open time for every
|
|
270
|
+
* `offloadable` embedded document the host's `storeEmbeddedDocument`
|
|
271
|
+
* adapter accepted. Empty when no adapter is present, when the
|
|
272
|
+
* package contained zero offloadable entries, or when every
|
|
273
|
+
* adapter call failed (each falls back to store-only).
|
|
274
|
+
*
|
|
275
|
+
* Type is kept opaque here (`readonly unknown[]`) so
|
|
276
|
+
* `loader-types.ts` does not transit the embedded-offload module's
|
|
277
|
+
* concrete types — `src/session/export/embedded-reconstitute.ts`
|
|
278
|
+
* narrows at the single export-side consumption site.
|
|
279
|
+
*/
|
|
280
|
+
embeddingOffloadEntries: readonly unknown[];
|
|
281
|
+
/**
|
|
282
|
+
* P8 Step 7 — host adapter captured at open time, threaded through
|
|
283
|
+
* to the export path so `runStatefulExport` can call
|
|
284
|
+
* `loadEmbeddedDocument` for every offloaded entry. Undefined when
|
|
285
|
+
* no adapter was supplied; export falls back to the inline-bytes
|
|
286
|
+
* base64 copy persisted alongside each entry.
|
|
287
|
+
*/
|
|
288
|
+
hostAdapter?: EditorHostAdapter;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Comment-diagnostic codes that block export when present on imported
|
|
293
|
+
* comments. Shared between the load path (diagnostic aggregation) and
|
|
294
|
+
* the export path (assertion).
|
|
295
|
+
*/
|
|
296
|
+
export const BLOCKING_COMMENT_DIAGNOSTIC_CODES = new Set<
|
|
297
|
+
CommentImportDiagnostic["code"]
|
|
298
|
+
>([
|
|
299
|
+
"missing_comment_definition",
|
|
300
|
+
"missing_anchor_reference",
|
|
301
|
+
"multi_paragraph_anchor_preserve_only",
|
|
302
|
+
"opaque_anchor_preserve_only",
|
|
303
|
+
"preserve_only_revision_overlap",
|
|
304
|
+
]);
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* L7 Phase 2 Finale C2 — progressive initial-mount viewport window
|
|
308
|
+
* size. Sized to cover the first page of a typical paginated document
|
|
309
|
+
* (~20 body blocks ≈ 1 page on CCEP-scale templates at default
|
|
310
|
+
* margins). Blocks beyond this window render as `placeholder-culled`
|
|
311
|
+
* entries via Phase 2.9's cullBuild flag.
|
|
312
|
+
*/
|
|
313
|
+
export const PROGRESSIVE_VIEWPORT_BLOCKS = 20;
|