@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.
Files changed (384) hide show
  1. package/README.md +75 -931
  2. package/package.json +26 -27
  3. package/src/api/anchor-conversion.ts +43 -0
  4. package/src/api/editor-state-types.ts +2 -1
  5. package/src/api/public-types.ts +504 -101
  6. package/src/api/session-state.ts +4 -0
  7. package/src/api/v3/README.md +91 -0
  8. package/src/api/v3/_create.ts +146 -0
  9. package/src/api/v3/_layer-metadata.ts +362 -0
  10. package/src/api/v3/_mocks.ts +84 -0
  11. package/src/api/v3/_runtime-handle.ts +162 -0
  12. package/src/api/v3/_ux-response.ts +73 -0
  13. package/src/api/v3/ai/_metadata-audit.ts +225 -0
  14. package/src/api/v3/ai/attach.ts +235 -0
  15. package/src/api/v3/ai/bundle.ts +132 -0
  16. package/src/api/v3/ai/explain.ts +144 -0
  17. package/src/api/v3/ai/export.ts +54 -0
  18. package/src/api/v3/ai/inspect.ts +118 -0
  19. package/src/api/v3/ai/policy.ts +77 -0
  20. package/src/api/v3/ai/replacement.ts +341 -0
  21. package/src/api/v3/ai/resolve.ts +133 -0
  22. package/src/api/v3/index.ts +79 -0
  23. package/src/api/v3/runtime/chart.ts +310 -0
  24. package/src/api/v3/runtime/clipboard.ts +81 -0
  25. package/src/api/v3/runtime/collab.ts +331 -0
  26. package/src/api/v3/runtime/content.ts +236 -0
  27. package/src/api/v3/runtime/document.ts +282 -0
  28. package/src/api/v3/runtime/formatting.ts +186 -0
  29. package/src/api/v3/runtime/geometry.ts +349 -0
  30. package/src/api/v3/runtime/layout.ts +108 -0
  31. package/src/api/v3/runtime/review.ts +129 -0
  32. package/src/api/v3/runtime/search.ts +74 -0
  33. package/src/api/v3/runtime/table.ts +63 -0
  34. package/src/api/v3/runtime/workflow.ts +434 -0
  35. package/src/api/v3/ui/_context.ts +86 -0
  36. package/src/api/v3/ui/_create.ts +65 -0
  37. package/src/api/v3/ui/_types.ts +520 -0
  38. package/src/api/v3/ui/chrome-composition.ts +342 -0
  39. package/src/{ui-tailwind/chrome → api/v3/ui}/chrome-preset-model.ts +11 -1
  40. package/src/api/v3/ui/chrome.ts +476 -0
  41. package/src/api/v3/ui/debug.ts +124 -0
  42. package/src/api/v3/ui/index.ts +64 -0
  43. package/src/api/v3/ui/overlays-visibility.ts +170 -0
  44. package/src/api/v3/ui/overlays.ts +427 -0
  45. package/src/api/v3/ui/scope.ts +71 -0
  46. package/src/api/v3/ui/session.ts +100 -0
  47. package/src/api/v3/ui/surface.ts +170 -0
  48. package/src/api/v3/ui/viewport.ts +303 -0
  49. package/src/core/commands/index.ts +28 -6
  50. package/src/core/commands/list-commands.ts +3 -2
  51. package/src/core/commands/section-layout-commands.ts +9 -8
  52. package/src/core/schema/text-schema.ts +16 -0
  53. package/src/core/selection/mapping.ts +33 -72
  54. package/src/core/state/editor-state.ts +96 -189
  55. package/src/index.ts +23 -4
  56. package/src/io/chart-preview-resolver.ts +1 -1
  57. package/src/io/docx-session.ts +36 -4795
  58. package/src/io/export/build-app-properties-xml.ts +1 -1
  59. package/src/io/export/serialize-comments.ts +1 -1
  60. package/src/io/export/serialize-headers-footers.ts +6 -1
  61. package/src/io/export/serialize-main-document.ts +45 -0
  62. package/src/io/export/serialize-run-formatting.ts +17 -2
  63. package/src/io/export/twip.ts +1 -1
  64. package/src/io/normalize/normalize-text.ts +27 -20
  65. package/src/io/ooxml/chart/parse-series.ts +1 -1
  66. package/src/io/ooxml/chart/resolve-color.ts +2 -2
  67. package/src/io/ooxml/chart/types.ts +1 -1
  68. package/src/io/ooxml/classify-embedding.ts +83 -33
  69. package/src/io/ooxml/parse-fill.ts +1 -1
  70. package/src/io/ooxml/parse-main-document.ts +71 -1
  71. package/src/io/ooxml/parse-object.ts +14 -10
  72. package/src/io/ooxml/parse-run-formatting.ts +47 -1
  73. package/src/io/ooxml/property-grab-bag.ts +2 -2
  74. package/src/io/ooxml/units.ts +11 -0
  75. package/src/io/ooxml/workflow-payload.ts +282 -7
  76. package/src/model/anchor.ts +85 -0
  77. package/src/model/canonical-document.ts +351 -15
  78. package/src/model/chart-types.ts +1 -1
  79. package/src/model/layout/index.ts +83 -0
  80. package/src/model/layout/page-graph-types.ts +181 -0
  81. package/src/model/layout/page-layout-snapshot.ts +105 -0
  82. package/src/model/layout/resolved-layout-types.ts +47 -0
  83. package/src/model/layout/runtime-page-graph-types.ts +102 -0
  84. package/src/model/paragraph-scope-ids.ts +72 -0
  85. package/src/model/review/comment-types.ts +112 -0
  86. package/src/model/review/index.ts +2 -0
  87. package/src/model/review/revision-types.ts +215 -0
  88. package/src/model/snapshot.ts +32 -0
  89. package/src/review/store/comment-store.ts +21 -47
  90. package/src/review/store/revision-types.ts +40 -198
  91. package/src/runtime/collab/base-doc-fingerprint.ts +6 -1
  92. package/src/runtime/collab/runtime-collab-sync.ts +13 -3
  93. package/src/runtime/collab-session.ts +1 -1
  94. package/src/runtime/debug/build-debug-inspector-snapshot.ts +686 -0
  95. package/src/runtime/debug/event-ring-buffer.ts +64 -0
  96. package/src/runtime/debug/probability-sampler.ts +18 -0
  97. package/src/runtime/debug/runtime-debug-facet.ts +67 -0
  98. package/src/runtime/debug/stage-tokens.ts +31 -0
  99. package/src/runtime/debug/telemetry-bus.ts +271 -0
  100. package/src/runtime/debug/types.ts +275 -0
  101. package/src/runtime/debug/wrap-ref-for-telemetry.ts +118 -0
  102. package/src/runtime/document-layout.ts +8 -6
  103. package/src/runtime/document-runtime.ts +843 -1141
  104. package/src/runtime/document-search.ts +1 -1
  105. package/src/runtime/edit-ops/index.ts +1 -1
  106. package/src/runtime/external-send-runtime.ts +1 -1
  107. package/src/runtime/formatting/document-lookup.ts +235 -0
  108. package/src/runtime/formatting/field/registry.ts +41 -0
  109. package/src/runtime/{field-resolver.ts → formatting/field/resolver.ts} +27 -2
  110. package/src/runtime/formatting/font-resolution.ts +83 -0
  111. package/src/runtime/formatting/formatting-context.ts +903 -0
  112. package/src/runtime/formatting/formatting-types.ts +157 -0
  113. package/src/runtime/{hyperlink-color-resolver.ts → formatting/hyperlink-color.ts} +2 -2
  114. package/src/runtime/formatting/index.ts +125 -0
  115. package/src/runtime/{resolved-numbering-geometry.ts → formatting/numbering/geometry.ts} +1 -1
  116. package/src/runtime/{numbering-prefix.ts → formatting/numbering/prefix.ts} +170 -3
  117. package/src/runtime/formatting/paragraph-style-resolver.ts +92 -0
  118. package/src/runtime/formatting/projector.ts +75 -0
  119. package/src/runtime/formatting/resolve-effective.ts +407 -0
  120. package/src/runtime/formatting/revision-display.ts +105 -0
  121. package/src/runtime/{paragraph-style-resolver.ts → formatting/style-cascade.ts} +84 -141
  122. package/src/runtime/{table-style-resolver.ts → formatting/table-style-resolver.ts} +1 -1
  123. package/src/runtime/formatting/telemetry-bridge.ts +106 -0
  124. package/src/runtime/{theme-color-resolver.ts → formatting/theme-color.ts} +2 -30
  125. package/src/runtime/geometry/caret-geometry.ts +164 -0
  126. package/src/runtime/geometry/geometry-facet.ts +364 -0
  127. package/src/runtime/geometry/geometry-types.ts +256 -0
  128. package/src/runtime/geometry/hit-test.ts +125 -0
  129. package/src/runtime/geometry/index.ts +71 -0
  130. package/src/runtime/geometry/inert-geometry-facet.ts +43 -0
  131. package/src/runtime/geometry/invalidation.ts +35 -0
  132. package/src/runtime/geometry/object-handles.ts +77 -0
  133. package/src/runtime/geometry/overlay-rects.ts +85 -0
  134. package/src/runtime/geometry/project-anchors.ts +100 -0
  135. package/src/runtime/geometry/project-fragments.ts +216 -0
  136. package/src/runtime/geometry/projector.ts +129 -0
  137. package/src/runtime/geometry/replacement-envelope.ts +130 -0
  138. package/src/runtime/geometry/viewport.ts +218 -0
  139. package/src/runtime/layout/compat-input-ledger.ts +211 -0
  140. package/src/runtime/layout/index.ts +6 -1
  141. package/src/runtime/layout/inert-layout-facet.ts +12 -7
  142. package/src/runtime/layout/layout-engine-instance.ts +189 -11
  143. package/src/runtime/layout/layout-engine-version.ts +450 -1
  144. package/src/runtime/layout/layout-facet-types.ts +60 -0
  145. package/src/runtime/layout/layout-measurement-provider.ts +13 -0
  146. package/src/runtime/layout/measurement-backend-canvas.ts +14 -2
  147. package/src/runtime/layout/measurement-backend-empirical.ts +23 -4
  148. package/src/runtime/layout/page-graph.ts +62 -209
  149. package/src/runtime/layout/page-story-resolver.ts +7 -12
  150. package/src/runtime/layout/paginated-layout-engine.ts +186 -11
  151. package/src/runtime/layout/project-block-fragments.ts +11 -0
  152. package/src/runtime/layout/projector.ts +90 -0
  153. package/src/runtime/layout/public-facet.ts +187 -442
  154. package/src/runtime/layout/resolved-formatting-state.ts +158 -26
  155. package/src/runtime/layout/table-render-plan.ts +1 -1
  156. package/src/runtime/prerender/cache-envelope.ts +6 -1
  157. package/src/runtime/prerender/prerender-document.ts +18 -23
  158. package/src/runtime/render/decoration-resolver.ts +1 -1
  159. package/src/runtime/render/render-frame-types.ts +20 -0
  160. package/src/runtime/render/render-kernel.ts +94 -25
  161. package/src/runtime/scopes/_formatting-seam.ts +262 -0
  162. package/src/runtime/scopes/_scope-dependencies.ts +49 -0
  163. package/src/runtime/scopes/action-validation.ts +356 -0
  164. package/src/runtime/scopes/attach-explanation.ts +102 -0
  165. package/src/runtime/scopes/audit-bundle.ts +71 -0
  166. package/src/runtime/scopes/compile-scope-bundle.ts +163 -0
  167. package/src/runtime/scopes/compile-scope.ts +262 -0
  168. package/src/runtime/scopes/compiler-service.ts +431 -0
  169. package/src/runtime/scopes/create-issue.ts +107 -0
  170. package/src/runtime/scopes/enumerate-scopes.ts +543 -0
  171. package/src/runtime/scopes/evidence.ts +233 -0
  172. package/src/runtime/scopes/index.ts +150 -0
  173. package/src/runtime/scopes/position-map.ts +214 -0
  174. package/src/runtime/scopes/preservation-boundary.ts +91 -0
  175. package/src/runtime/scopes/projector.ts +49 -0
  176. package/src/runtime/scopes/replaceability.ts +87 -0
  177. package/src/runtime/scopes/replacement/apply.ts +228 -0
  178. package/src/runtime/scopes/replacement/compile.ts +59 -0
  179. package/src/runtime/scopes/replacement/propose.ts +42 -0
  180. package/src/runtime/scopes/resolve-reference.ts +347 -0
  181. package/src/runtime/scopes/review-bundle.ts +141 -0
  182. package/src/runtime/scopes/scope-kinds/_paragraph-text.ts +57 -0
  183. package/src/runtime/scopes/scope-kinds/_table-text.ts +42 -0
  184. package/src/runtime/scopes/scope-kinds/comment-thread.ts +59 -0
  185. package/src/runtime/scopes/scope-kinds/field.ts +65 -0
  186. package/src/runtime/scopes/scope-kinds/heading.ts +84 -0
  187. package/src/runtime/scopes/scope-kinds/list-item.ts +77 -0
  188. package/src/runtime/scopes/scope-kinds/paragraph.ts +182 -0
  189. package/src/runtime/scopes/scope-kinds/revision.ts +62 -0
  190. package/src/runtime/scopes/scope-kinds/table-cell.ts +57 -0
  191. package/src/runtime/scopes/scope-kinds/table-row.ts +61 -0
  192. package/src/runtime/scopes/scope-kinds/table.ts +55 -0
  193. package/src/runtime/scopes/scope-range.ts +208 -0
  194. package/src/runtime/scopes/semantic-scope-types.ts +454 -0
  195. package/src/runtime/scopes/workflow-overlap.ts +92 -0
  196. package/src/runtime/selection/index.ts +1 -1
  197. package/src/runtime/structure-ops/fragment-insert.ts +1 -1
  198. package/src/runtime/structure-ops/index.ts +1 -1
  199. package/src/runtime/surface-projection.ts +232 -262
  200. package/src/runtime/units.ts +4 -2
  201. package/src/runtime/workflow/coordinator.ts +1348 -0
  202. package/src/runtime/workflow/derived-scope-resolver.ts +125 -0
  203. package/src/runtime/workflow/index.ts +25 -0
  204. package/src/runtime/workflow/markup-mode-policy.ts +98 -0
  205. package/src/runtime/{workflow-markup.ts → workflow/markup.ts} +6 -6
  206. package/src/runtime/workflow/metadata-persistence.ts +306 -0
  207. package/src/runtime/workflow/metadata-writer.ts +123 -0
  208. package/src/runtime/workflow/overlay-store.ts +690 -0
  209. package/src/runtime/workflow/projector.ts +127 -0
  210. package/src/runtime/{query-scopes.ts → workflow/query-scopes.ts} +3 -3
  211. package/src/runtime/{workflow-rail-segments.ts → workflow/rail/compose.ts} +60 -165
  212. package/src/runtime/workflow/rail/types.ts +198 -0
  213. package/src/runtime/workflow/scope-rail-composer.ts +39 -0
  214. package/src/runtime/{scope-resolver.ts → workflow/scope-resolver.ts} +3 -3
  215. package/src/runtime/workflow/scope-writer.ts +188 -0
  216. package/src/runtime/{tamper-gate.ts → workflow/tamper-gate.ts} +1 -1
  217. package/src/runtime/workflow/visibility-policy.ts +129 -0
  218. package/src/session/_sync-legacy.ts +66 -0
  219. package/src/session/export/embedded-reconstitute.ts +104 -0
  220. package/src/session/export/export-diagnostics.ts +85 -0
  221. package/src/session/export/export-validation.ts +110 -0
  222. package/src/session/export/index.ts +34 -0
  223. package/src/session/export/preservation-reattach.ts +30 -0
  224. package/src/session/export/serialize-dispatch.ts +165 -0
  225. package/src/session/export/stateful-export-pipeline.ts +432 -0
  226. package/src/session/export/stateful-export.ts +684 -0
  227. package/src/session/import/canonical-assembly.ts +227 -0
  228. package/src/session/import/diagnostics-session.ts +54 -0
  229. package/src/session/import/embedded-discovery.ts +225 -0
  230. package/src/session/import/embedded-offload.ts +337 -0
  231. package/src/session/import/import-diagnostics.ts +69 -0
  232. package/src/session/import/loader-types.ts +313 -0
  233. package/src/session/import/loader.ts +1834 -0
  234. package/src/session/import/normalize.ts +195 -0
  235. package/src/session/import/package-parts.ts +217 -0
  236. package/src/session/import/package-read.ts +195 -0
  237. package/src/session/import/parse-orchestration.ts +105 -0
  238. package/src/session/import/part-constants.ts +70 -0
  239. package/src/session/import/part-discovery.ts +94 -0
  240. package/src/session/import/preservation-index.ts +46 -0
  241. package/src/{runtime/read-only-diagnostics-runtime.ts → session/import/read-only-diagnostics.ts} +24 -3
  242. package/src/session/import/review-import.ts +508 -0
  243. package/src/session/import/styles-consolidation.ts +281 -0
  244. package/src/session/import/workflow-scope-import.ts +256 -0
  245. package/src/session/index.ts +37 -0
  246. package/src/session/session-state.ts +69 -0
  247. package/src/session/session.ts +532 -0
  248. package/src/session/shared/protection.ts +228 -0
  249. package/src/session/shared/session-utils.ts +82 -0
  250. package/src/session/types.ts +499 -0
  251. package/src/shell/chart-snapshots.ts +96 -0
  252. package/src/shell/media-previews.ts +85 -0
  253. package/src/shell/overlay-anchor-bridge.ts +53 -0
  254. package/src/shell/paste-adapter.ts +23 -0
  255. package/src/shell/ref-commands.ts +1697 -0
  256. package/src/shell/ref-utilities.ts +48 -0
  257. package/src/shell/search.ts +51 -0
  258. package/src/{ui/editor-runtime-boundary.ts → shell/session-bootstrap.ts} +243 -67
  259. package/src/shell/ui-subscriber-channels.ts +81 -0
  260. package/src/shell/use-collab-sync.ts +116 -0
  261. package/src/ui/WordReviewEditor.tsx +496 -2051
  262. package/src/ui/editor-shell-view.tsx +30 -1
  263. package/src/ui/editor-surface-controller.tsx +49 -1
  264. package/src/ui/headless/revision-decoration-model.ts +83 -0
  265. package/src/{ui-tailwind/chrome → ui/headless}/role-action-sets.ts +1 -1
  266. package/src/ui/headless/scoped-chrome-policy.ts +2 -2
  267. package/src/ui/headless/selection-tool-context.ts +1 -1
  268. package/src/ui/headless/selection-tool-resolver.ts +1 -1
  269. package/src/ui/runtime-shortcut-dispatch.ts +46 -1
  270. package/src/ui/ui-controller-factory.ts +221 -0
  271. package/src/ui-tailwind/chart/ChartSurface.tsx +2 -2
  272. package/src/ui-tailwind/chart/layout/legend-layout.ts +1 -1
  273. package/src/ui-tailwind/chart/layout/plot-area.ts +2 -2
  274. package/src/ui-tailwind/chart/layout/title-layout.ts +1 -1
  275. package/src/ui-tailwind/chart/render/area.tsx +3 -3
  276. package/src/ui-tailwind/chart/render/bar-column.tsx +3 -3
  277. package/src/ui-tailwind/chart/render/bubble.tsx +3 -3
  278. package/src/ui-tailwind/chart/render/combo.tsx +2 -2
  279. package/src/ui-tailwind/chart/render/data-labels.tsx +2 -2
  280. package/src/ui-tailwind/chart/render/font-metrics.ts +2 -2
  281. package/src/ui-tailwind/chart/render/line.tsx +3 -3
  282. package/src/ui-tailwind/chart/render/pie.tsx +6 -6
  283. package/src/ui-tailwind/chart/render/scatter.tsx +3 -3
  284. package/src/ui-tailwind/chart/render/svg-primitives.ts +3 -3
  285. package/src/ui-tailwind/chart/render/unsupported.tsx +2 -2
  286. package/src/ui-tailwind/chrome/build-context-menu-entries.ts +88 -0
  287. package/src/ui-tailwind/chrome/chrome-preset-toolbar.tsx +1 -1
  288. package/src/ui-tailwind/chrome/collab-send-to-supplier-button.tsx +1 -1
  289. package/src/ui-tailwind/chrome/collab-tamper-banner.tsx +1 -1
  290. package/src/ui-tailwind/chrome/collab-top-nav-container.tsx +1 -1
  291. package/src/ui-tailwind/chrome/editor-action-registry.ts +553 -0
  292. package/src/ui-tailwind/chrome/editor-actions-to-palette.ts +182 -0
  293. package/src/ui-tailwind/chrome/local-surface-arbiter.ts +534 -0
  294. package/src/ui-tailwind/chrome/resolve-target-kind.ts +226 -0
  295. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +38 -4
  296. package/src/ui-tailwind/chrome/tw-context-band.tsx +125 -0
  297. package/src/ui-tailwind/chrome/tw-context-menu-portal.tsx +248 -0
  298. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +42 -1
  299. package/src/ui-tailwind/chrome/tw-selection-anchor-resolver.ts +8 -7
  300. package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +38 -4
  301. package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +104 -6
  302. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +66 -7
  303. package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +54 -8
  304. package/src/ui-tailwind/chrome/tw-shortcut-hint.tsx +7 -1
  305. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +33 -0
  306. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +78 -1
  307. package/src/ui-tailwind/chrome/tw-table-grip-layer.tsx +16 -8
  308. package/src/ui-tailwind/chrome/tw-workspace-chrome-host.tsx +276 -0
  309. package/src/ui-tailwind/chrome/use-context-menu-controller.ts +201 -0
  310. package/src/ui-tailwind/chrome-overlay/chrome-overlay-projector.ts +1 -1
  311. package/src/ui-tailwind/chrome-overlay/tw-chrome-overlay.tsx +22 -4
  312. package/src/ui-tailwind/chrome-overlay/tw-comment-balloon-layer.tsx +1 -1
  313. package/src/ui-tailwind/chrome-overlay/tw-locked-block-layer.tsx +1 -1
  314. package/src/ui-tailwind/chrome-overlay/tw-object-selection-overlay.tsx +11 -5
  315. package/src/ui-tailwind/chrome-overlay/tw-page-stack-overlay-layer.tsx +197 -3
  316. package/src/ui-tailwind/chrome-overlay/tw-revision-margin-bar-layer.tsx +1 -1
  317. package/src/ui-tailwind/chrome-overlay/tw-scope-card-layer.tsx +35 -6
  318. package/src/ui-tailwind/chrome-overlay/tw-scope-rail-layer.tsx +24 -16
  319. package/src/ui-tailwind/chrome-overlay/tw-table-continuation-header.tsx +1 -1
  320. package/src/ui-tailwind/debug/README.md +57 -0
  321. package/src/ui-tailwind/debug/index.ts +3 -0
  322. package/src/ui-tailwind/debug/tw-debug-overlay.tsx +186 -0
  323. package/src/ui-tailwind/debug/tw-debug-presentation.tsx +80 -0
  324. package/src/ui-tailwind/debug/tw-debug-top-bar.tsx +83 -0
  325. package/src/ui-tailwind/editor-surface/chart-node-view.tsx +2 -2
  326. package/src/ui-tailwind/editor-surface/float-wrap-resolver.ts +1 -1
  327. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +135 -10
  328. package/src/ui-tailwind/editor-surface/pm-decorations.ts +40 -13
  329. package/src/ui-tailwind/editor-surface/pm-page-break-decorations.ts +1 -1
  330. package/src/ui-tailwind/editor-surface/pm-schema.ts +1 -1
  331. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +3 -3
  332. package/src/ui-tailwind/editor-surface/predicted-tag-preflight.ts +1 -1
  333. package/src/ui-tailwind/editor-surface/remote-cursor-plugin.ts +2 -2
  334. package/src/ui-tailwind/editor-surface/scroll-anchor.ts +91 -9
  335. package/src/ui-tailwind/editor-surface/shape-renderer.ts +1 -1
  336. package/src/ui-tailwind/editor-surface/surface-layer.ts +1 -1
  337. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +1 -1
  338. package/src/ui-tailwind/editor-surface/tw-page-block-view.helpers.ts +23 -6
  339. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +132 -22
  340. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +1 -1
  341. package/src/ui-tailwind/index.ts +0 -5
  342. package/src/ui-tailwind/overlay-anchor-bridge-context.tsx +33 -0
  343. package/src/ui-tailwind/page-stack/floating-image-overlay-model.ts +66 -29
  344. package/src/ui-tailwind/page-stack/tw-floating-image-layer.tsx +25 -2
  345. package/src/ui-tailwind/review/comment-markdown-renderer.tsx +15 -0
  346. package/src/ui-tailwind/review/tw-review-rail.tsx +92 -4
  347. package/src/ui-tailwind/review/tw-workflow-tab.tsx +1 -1
  348. package/src/ui-tailwind/review-workspace/page-chrome.ts +210 -0
  349. package/src/ui-tailwind/review-workspace/page-shell-metrics.ts +101 -0
  350. package/src/ui-tailwind/review-workspace/paragraph-layout.ts +115 -0
  351. package/src/ui-tailwind/review-workspace/selection-toolbar-placement.ts +97 -0
  352. package/src/ui-tailwind/review-workspace/tw-review-workspace-navigator.tsx +130 -0
  353. package/src/ui-tailwind/review-workspace/tw-review-workspace-page-toolbar.tsx +240 -0
  354. package/src/ui-tailwind/review-workspace/tw-review-workspace-rail.tsx +59 -0
  355. package/src/ui-tailwind/review-workspace/types.ts +408 -0
  356. package/src/ui-tailwind/review-workspace/use-chrome-policy.ts +104 -0
  357. package/src/ui-tailwind/review-workspace/use-derived-view-state.ts +151 -0
  358. package/src/ui-tailwind/review-workspace/use-diagnostics-signal.ts +70 -0
  359. package/src/ui-tailwind/review-workspace/use-grabbed-segment-offsets.ts +40 -0
  360. package/src/ui-tailwind/review-workspace/use-layout-facet-render-signal.ts +55 -0
  361. package/src/ui-tailwind/review-workspace/use-page-markers.ts +130 -0
  362. package/src/ui-tailwind/review-workspace/use-pm-surface-capture.ts +60 -0
  363. package/src/ui-tailwind/review-workspace/use-review-rail-state.ts +63 -0
  364. package/src/ui-tailwind/review-workspace/use-scope-card-state.ts +170 -0
  365. package/src/ui-tailwind/review-workspace/use-scroll-root-capture.ts +28 -0
  366. package/src/ui-tailwind/review-workspace/use-selection-toolbar-placement.ts +113 -0
  367. package/src/ui-tailwind/review-workspace/use-shell-selection-anchor-bridge.ts +120 -0
  368. package/src/ui-tailwind/review-workspace/use-status-bar-page-facts.ts +55 -0
  369. package/src/ui-tailwind/review-workspace/use-viewport-dimensions.ts +43 -0
  370. package/src/ui-tailwind/review-workspace/use-workspace-arbiter.ts +25 -0
  371. package/src/ui-tailwind/review-workspace/use-workspace-composition.ts +86 -0
  372. package/src/ui-tailwind/review-workspace/use-workspace-side-effects.ts +150 -0
  373. package/src/ui-tailwind/theme/editor-theme.css +25 -0
  374. package/src/ui-tailwind/toolbar/tw-role-action-region.tsx +2 -2
  375. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +61 -98
  376. package/src/ui-tailwind/tw-review-workspace.tsx +521 -1802
  377. package/src/ui-tailwind/ui-api-context.tsx +43 -0
  378. package/src/ui-tailwind/ui-shell-channels-context.tsx +49 -0
  379. package/src/validation/compatibility-engine.ts +6 -6
  380. package/src/runtime/styles-cascade.ts +0 -33
  381. package/src/ui-tailwind/chrome/tw-mode-dock.tsx +0 -85
  382. /package/src/runtime/{page-number-format.ts → formatting/field/page-number-format.ts} +0 -0
  383. /package/src/runtime/{ai-action-policy.ts → workflow/ai-action-policy.ts} +0 -0
  384. /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;