@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,105 @@
1
+ /**
2
+ * Parse-orchestration primitives shared by the sync and async load paths.
3
+ *
4
+ * Slice 5e-6 of refactor/01 package-session. Extracted from
5
+ * `src/io/docx-session.ts` (`createStageEmitter`, `loadStageNow`,
6
+ * `createImportDiagnosticsFromError`, `isPackageImportError`).
7
+ *
8
+ * Contract P6 clean: depends only on `src/io/**` +
9
+ * `src/validation/**` (import-diagnostic producers). No runtime /
10
+ * UI / core / review imports.
11
+ */
12
+
13
+ import type { LoadStage } from "../../api/public-types.ts";
14
+ import { classifyCorruptPackageError } from "../../io/opc/corrupt-package.ts";
15
+ import {
16
+ createPackageImportDiagnostics,
17
+ createValidationImportDiagnostics,
18
+ type ImportDiagnosticsResult,
19
+ } from "../../validation/import-diagnostics.ts";
20
+
21
+ /**
22
+ * Stage-event emitter. When no callback is supplied the emitter is a
23
+ * zero-cost no-op. Shared between the sync and async load orchestrators
24
+ * so both paths emit `load-stage` events at the same four boundaries:
25
+ * `opc` → `body` → `styles-numbering-comments` → `skeleton-ready`.
26
+ */
27
+ export interface StageEmitter {
28
+ emit(stage: LoadStage): void;
29
+ }
30
+
31
+ export type LoadStageCallback = (stage: LoadStage, durationMs: number) => void;
32
+
33
+ export function createStageEmitter(
34
+ onStage: LoadStageCallback | undefined,
35
+ ): StageEmitter {
36
+ if (!onStage) {
37
+ return {
38
+ emit() {
39
+ /* no-op */
40
+ },
41
+ };
42
+ }
43
+ let cursor = loadStageNow();
44
+ return {
45
+ emit(stage) {
46
+ const nextMark = loadStageNow();
47
+ onStage(stage, nextMark - cursor);
48
+ cursor = nextMark;
49
+ },
50
+ };
51
+ }
52
+
53
+ /**
54
+ * Monotonic millisecond clock shared by the stage emitter. Falls back to
55
+ * `Date.now()` in environments without `performance.now()` (older Node,
56
+ * certain SSR runtimes).
57
+ */
58
+ export function loadStageNow(): number {
59
+ return typeof performance !== "undefined" && typeof performance.now === "function"
60
+ ? performance.now()
61
+ : Date.now();
62
+ }
63
+
64
+ /**
65
+ * Classify a thrown error from `readOpcPackage()` / downstream parse into
66
+ * a typed `ImportDiagnosticsResult`. Routes package-shaped errors through
67
+ * `classifyCorruptPackageError`; everything else becomes a generic
68
+ * validation diagnostic.
69
+ */
70
+ export function createImportDiagnosticsFromError(error: unknown): ImportDiagnosticsResult {
71
+ if (isPackageImportError(error)) {
72
+ return createPackageImportDiagnostics({
73
+ issue: classifyCorruptPackageError(error),
74
+ });
75
+ }
76
+
77
+ return createValidationImportDiagnostics({
78
+ message:
79
+ error instanceof Error
80
+ ? error.message
81
+ : "DOCX import failed during validation.",
82
+ });
83
+ }
84
+
85
+ /**
86
+ * Heuristic: does this error look like it originated inside the OPC
87
+ * package reader (zip/relationship/content-types parse failure) as
88
+ * opposed to further downstream validation?
89
+ */
90
+ export function isPackageImportError(error: unknown): boolean {
91
+ if (!(error instanceof Error)) {
92
+ return false;
93
+ }
94
+
95
+ const normalized = error.message.toLowerCase();
96
+ return (
97
+ normalized.includes("zip") ||
98
+ normalized.includes("opc package") ||
99
+ normalized.includes("compression") ||
100
+ normalized.includes("relationship") ||
101
+ normalized.includes("/[content_types].xml") ||
102
+ normalized.includes("/word/document.xml") ||
103
+ normalized.includes("xml")
104
+ );
105
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * OOXML part-path + relationship-type + content-type constants shared
3
+ * by the sync + async load paths + the export pipeline.
4
+ *
5
+ * Slice 5e-7.d.1 — relocated from `src/io/docx-session.ts`. Neutral
6
+ * shared home so both the load-sync / load-async migrations (5e-7.d.2
7
+ * + 5e-7.d.3) and the existing `src/session/export/stateful-export-
8
+ * pipeline.ts` can reach a single source of truth. Historically the
9
+ * 6 core-/app-properties constants were extracted alongside the
10
+ * export helpers in 5e-6f.1; these 27 siblings belong with the
11
+ * load-pipeline group.
12
+ *
13
+ * P6-clean: string literals only, no imports.
14
+ */
15
+
16
+ // -----------------------------------------------------------------------------
17
+ // Part paths
18
+ // -----------------------------------------------------------------------------
19
+
20
+ export const NUMBERING_PART_PATH = "/word/numbering.xml";
21
+ export const COMMENTS_EXTENDED_PART_PATH = "/word/commentsExtended.xml";
22
+ export const COMMENTS_IDS_PART_PATH = "/word/commentsIds.xml";
23
+ export const PEOPLE_PART_PATH = "/word/people.xml";
24
+ export const STYLES_PART_PATH = "/word/styles.xml";
25
+ export const FONT_TABLE_PART_PATH = "/word/fontTable.xml";
26
+ export const FOOTNOTES_PART_PATH = "/word/footnotes.xml";
27
+ export const ENDNOTES_PART_PATH = "/word/endnotes.xml";
28
+ export const SETTINGS_PART_PATH = "/word/settings.xml";
29
+
30
+ // -----------------------------------------------------------------------------
31
+ // Content types
32
+ // -----------------------------------------------------------------------------
33
+
34
+ export const MAIN_DOCUMENT_CONTENT_TYPE =
35
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml";
36
+ export const COMMENTS_CONTENT_TYPE =
37
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml";
38
+ export const COMMENTS_EXTENDED_CONTENT_TYPE =
39
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml";
40
+ export const COMMENTS_IDS_CONTENT_TYPE =
41
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml";
42
+ export const PEOPLE_CONTENT_TYPE =
43
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml";
44
+
45
+ // -----------------------------------------------------------------------------
46
+ // Relationship types
47
+ // -----------------------------------------------------------------------------
48
+
49
+ export const NUMBERING_RELATIONSHIP_TYPE =
50
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering";
51
+ export const COMMENTS_EXTENDED_RELATIONSHIP_TYPE =
52
+ "http://schemas.microsoft.com/office/2011/relationships/commentsExtended";
53
+ export const COMMENTS_IDS_RELATIONSHIP_TYPE =
54
+ "http://schemas.microsoft.com/office/2016/09/relationships/commentsIds";
55
+ export const PEOPLE_RELATIONSHIP_TYPE =
56
+ "http://schemas.microsoft.com/office/2011/relationships/people";
57
+ export const HEADER_RELATIONSHIP_TYPE =
58
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header";
59
+ export const FOOTER_RELATIONSHIP_TYPE =
60
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer";
61
+ export const FOOTNOTES_RELATIONSHIP_TYPE =
62
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes";
63
+ export const ENDNOTES_RELATIONSHIP_TYPE =
64
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes";
65
+ export const SETTINGS_RELATIONSHIP_TYPE =
66
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings";
67
+ export const STYLES_RELATIONSHIP_TYPE =
68
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
69
+ export const FONT_TABLE_RELATIONSHIP_TYPE =
70
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable";
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Part-path discovery against an OPC package.
3
+ *
4
+ * First extraction under Slice 2 of refactor/01 package-session.
5
+ * Pure: takes an `OpcPackage` + optional part-relationship input,
6
+ * returns a part path (or undefined). No runtime / UI / core / review
7
+ * imports — contract P6 clean.
8
+ *
9
+ * Legacy home: `src/io/docx-session.ts` lines 3667–3712 (pre-Slice 2).
10
+ * The legacy file now imports the resolvers from here so the two paths
11
+ * share one implementation while further load-orchestration extraction
12
+ * progresses.
13
+ */
14
+
15
+ import type { OpcPackage } from "../../io/opc/package-reader.ts";
16
+ import {
17
+ resolveRelationshipTarget,
18
+ type OpcRelationship,
19
+ } from "../../io/ooxml/part-manifest.ts";
20
+
21
+ /** Default `/word/document.xml` fallback when the package relationships omit the link. */
22
+ export const MAIN_DOCUMENT_PATH = "/word/document.xml";
23
+
24
+ /** Default `/word/comments.xml` fallback when the main-document relationships omit the link. */
25
+ export const COMMENTS_PART_PATH = "/word/comments.xml";
26
+
27
+ /** `officeDocument` relationship type — identifies the main-document part. */
28
+ export const OFFICE_DOCUMENT_RELATIONSHIP_TYPE =
29
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
30
+
31
+ /** `comments` relationship type — identifies the comments part. */
32
+ export const COMMENTS_RELATIONSHIP_TYPE =
33
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";
34
+
35
+ /**
36
+ * Resolve the main-document part path from package-level relationships.
37
+ * Returns the declared target if the relationship is present and
38
+ * internal; otherwise the default `/word/document.xml` if that part
39
+ * exists in the package; otherwise `undefined` (triggers a fatal
40
+ * diagnostic at the caller).
41
+ */
42
+ export function resolveMainDocumentPartPath(
43
+ sourcePackage: OpcPackage,
44
+ ): string | undefined {
45
+ const relationship = sourcePackage.manifest.packageRelationships.find(
46
+ (candidate) =>
47
+ candidate.type === OFFICE_DOCUMENT_RELATIONSHIP_TYPE &&
48
+ candidate.targetMode === "internal",
49
+ );
50
+ if (relationship) {
51
+ return resolveRelationshipTarget(null, relationship);
52
+ }
53
+ return sourcePackage.parts.has(MAIN_DOCUMENT_PATH) ? MAIN_DOCUMENT_PATH : undefined;
54
+ }
55
+
56
+ /**
57
+ * Resolve an arbitrary document-related part path by relationship type.
58
+ * Used by comment / header / footer / footnote / endnote / theme /
59
+ * numbering lookups. Returns the relationship target when present;
60
+ * otherwise the fallback path when the package has it; otherwise
61
+ * `undefined`.
62
+ */
63
+ export function resolveDocumentRelatedPartPath(
64
+ sourcePackage: OpcPackage,
65
+ sourceDocumentPartPath: string,
66
+ relationships: readonly OpcRelationship[],
67
+ relationshipType: string,
68
+ fallbackPartPath: string,
69
+ ): string | undefined {
70
+ const relationship = relationships.find(
71
+ (candidate) =>
72
+ candidate.type === relationshipType && candidate.targetMode === "internal",
73
+ );
74
+ if (!relationship) {
75
+ return sourcePackage.parts.has(fallbackPartPath) ? fallbackPartPath : undefined;
76
+ }
77
+ const targetPath = resolveRelationshipTarget(sourceDocumentPartPath, relationship);
78
+ return sourcePackage.parts.has(targetPath) ? targetPath : undefined;
79
+ }
80
+
81
+ /** Narrow resolver for the comments part (fallback `/word/comments.xml`). */
82
+ export function resolveCommentsPartPath(
83
+ sourcePackage: OpcPackage,
84
+ sourceDocumentPartPath: string,
85
+ relationships: readonly OpcRelationship[],
86
+ ): string | undefined {
87
+ return resolveDocumentRelatedPartPath(
88
+ sourcePackage,
89
+ sourceDocumentPartPath,
90
+ relationships,
91
+ COMMENTS_RELATIONSHIP_TYPE,
92
+ COMMENTS_PART_PATH,
93
+ );
94
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Preservation-field orchestration for the import load path.
3
+ *
4
+ * Slice 3c of refactor/01 package-session. Extracted from
5
+ * src/io/docx-session.ts (duplication of the preservation-field
6
+ * spread at the createImportedCanonicalDocument call site in both the
7
+ * sync and async load paths).
8
+ *
9
+ * The helper merges the parser-side `PreservationStore` (which already
10
+ * carries `opaqueFragments` accumulated by the normalize pass) with the
11
+ * package-part records gathered from the OPC package, yielding a
12
+ * complete `PreservationStore` ready to pass to
13
+ * `createImportedCanonicalDocument`.
14
+ *
15
+ * Contract P6 clean. Depends on:
16
+ * - src/model/canonical-document.ts (allowed)
17
+ * - src/io/opc/package-reader.ts (allowed)
18
+ * - ./package-parts.ts (peer session module)
19
+ */
20
+
21
+ import type { PreservationStore } from "../../model/canonical-document.ts";
22
+ import type { OpcPackage } from "../../io/opc/package-reader.ts";
23
+ import { collectPreservedPackageParts } from "./package-parts.ts";
24
+
25
+ /**
26
+ * Build the complete `PreservationStore` for a freshly imported document.
27
+ *
28
+ * Merges the opaque fragments already written by the parser/normalize
29
+ * pass (`basePreservation`) with the verbatim-round-trip package parts
30
+ * collected from the OPC package. `ownedPartPaths` lists every part
31
+ * that the runtime will regenerate on export — those must NOT be added
32
+ * to `packageParts` (they won't be byte-stable).
33
+ */
34
+ export function buildImportPreservation(
35
+ basePreservation: PreservationStore,
36
+ sourcePackage: OpcPackage,
37
+ ownedPartPaths: ReadonlyArray<string | undefined>,
38
+ ): PreservationStore {
39
+ return {
40
+ ...basePreservation,
41
+ packageParts: {
42
+ ...basePreservation.packageParts,
43
+ ...collectPreservedPackageParts(sourcePackage, ownedPartPaths),
44
+ },
45
+ };
46
+ }
@@ -1,3 +1,24 @@
1
+ /**
2
+ * Read-only diagnostics snapshot builder.
3
+ *
4
+ * Called from the session load path's error branches
5
+ * (`createDiagnosticsSession` in `src/io/docx-session.ts`) when import
6
+ * has hit a fatal parse / OPC / validation error and can't produce a
7
+ * real editor session. Returns a degenerate `ReadOnlyDiagnosticsRuntime`
8
+ * that exposes the diagnostic payload as an always-read-only editor
9
+ * state — every dispatch / undo / redo / export call throws, while
10
+ * `getPersistedSnapshot()` + `getCompatibilityReport()` return the
11
+ * pre-built snapshot carrying the fatal error + any preceding warnings.
12
+ *
13
+ * Slice 5e-7.c — relocated from `src/runtime/read-only-diagnostics-
14
+ * runtime.ts`. Despite the `Runtime` suffix on the interface name this
15
+ * function does not own runtime state: it builds pure data from an
16
+ * `ImportDiagnosticsResult`. Session layer is the right home — it
17
+ * imports only from `src/model/**`, `src/api/**`, and
18
+ * `src/validation/**`, all P6-allowed. One less forbidden
19
+ * runtime-layer transit for `docx-session.ts` to carry into 5e-9.
20
+ */
21
+
1
22
  import type {
2
23
  CompatibilityReport,
3
24
  EditorWarning,
@@ -5,9 +26,9 @@ import type {
5
26
  ExportResult,
6
27
  PersistedEditorSnapshot,
7
28
  RuntimeRenderSnapshot,
8
- } from "../api/public-types.ts";
9
- import { createCanonicalDocumentId } from "../core/state/editor-state.ts";
10
- import type { ImportDiagnosticsResult } from "../validation/import-diagnostics.ts";
29
+ } from "../../api/public-types.ts";
30
+ import { createCanonicalDocumentId } from "../../model/canonical-document.ts";
31
+ import type { ImportDiagnosticsResult } from "../../validation/import-diagnostics.ts";
11
32
 
12
33
  export interface ReadOnlyDiagnosticsRuntime {
13
34
  getRenderSnapshot(): RuntimeRenderSnapshot;