@beyondwork/docx-react-component 1.0.29 → 1.0.30

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 (381) hide show
  1. package/package.json +65 -96
  2. package/src/README.md +85 -0
  3. package/src/api/README.md +26 -0
  4. package/src/api/public-types.ts +1952 -0
  5. package/src/api/session-state.ts +62 -0
  6. package/src/compare/diff-engine.ts +623 -0
  7. package/src/compare/export-redlines.ts +280 -0
  8. package/src/compare/index.ts +25 -0
  9. package/src/compare/snapshot.ts +97 -0
  10. package/src/component-inventory.md +99 -0
  11. package/src/core/README.md +10 -0
  12. package/src/core/commands/README.md +3 -0
  13. package/{dist/chunk-TJBP2K4T.js → src/core/commands/formatting-commands.ts} +536 -196
  14. package/src/core/commands/image-commands.ts +373 -0
  15. package/src/core/commands/index.ts +1879 -0
  16. package/src/core/commands/list-commands.ts +565 -0
  17. package/src/core/commands/paragraph-layout-commands.ts +339 -0
  18. package/src/core/commands/review-commands.ts +108 -0
  19. package/{dist/core/commands/section-layout-commands.cjs → src/core/commands/section-layout-commands.ts} +340 -137
  20. package/src/core/commands/structural-helpers.ts +309 -0
  21. package/{dist/core/commands/style-commands.cjs → src/core/commands/style-commands.ts} +113 -65
  22. package/src/core/commands/table-structure-commands.ts +854 -0
  23. package/{dist/chunk-UZXBISGO.js → src/core/commands/text-commands.ts} +142 -86
  24. package/src/core/schema/README.md +3 -0
  25. package/src/core/schema/text-schema.ts +516 -0
  26. package/src/core/search/search-text.ts +357 -0
  27. package/src/core/selection/README.md +3 -0
  28. package/src/core/selection/mapping.ts +289 -0
  29. package/src/core/selection/review-anchors.ts +183 -0
  30. package/src/core/state/README.md +3 -0
  31. package/src/core/state/editor-state.ts +892 -0
  32. package/src/core/state/text-transaction.ts +869 -0
  33. package/src/formats/xlsx/io/parse-shared-strings.ts +41 -0
  34. package/src/formats/xlsx/io/parse-sheet.ts +459 -0
  35. package/src/formats/xlsx/io/parse-styles.ts +59 -0
  36. package/src/formats/xlsx/io/parse-workbook.ts +75 -0
  37. package/src/formats/xlsx/io/serialize-shared-strings.ts +72 -0
  38. package/src/formats/xlsx/io/serialize-sheet.ts +333 -0
  39. package/src/formats/xlsx/io/serialize-styles.ts +98 -0
  40. package/src/formats/xlsx/io/serialize-workbook.ts +429 -0
  41. package/src/formats/xlsx/io/xlsx-session.ts +314 -0
  42. package/src/formats/xlsx/model/cell.ts +189 -0
  43. package/src/formats/xlsx/model/sheet.ts +326 -0
  44. package/src/formats/xlsx/model/styles.ts +118 -0
  45. package/src/formats/xlsx/model/workbook.ts +453 -0
  46. package/src/formats/xlsx/runtime/cell-commands.ts +567 -0
  47. package/src/formats/xlsx/runtime/sheet-commands.ts +206 -0
  48. package/src/formats/xlsx/runtime/workbook-runtime.ts +177 -0
  49. package/src/formats/xlsx/runtime/workbook-transaction.ts +822 -0
  50. package/src/index.ts +142 -0
  51. package/src/io/README.md +10 -0
  52. package/src/io/docx-session.ts +3175 -0
  53. package/src/io/export/README.md +3 -0
  54. package/src/io/export/export-session.ts +220 -0
  55. package/src/io/export/minimal-docx.ts +115 -0
  56. package/src/io/export/reattach-preserved-parts.ts +54 -0
  57. package/src/io/export/serialize-comments.ts +947 -0
  58. package/src/io/export/serialize-footnotes.ts +394 -0
  59. package/src/io/export/serialize-headers-footers.ts +368 -0
  60. package/src/io/export/serialize-main-document.ts +1342 -0
  61. package/src/io/export/serialize-numbering.ts +218 -0
  62. package/src/io/export/serialize-revisions.ts +389 -0
  63. package/src/io/export/serialize-runtime-revisions.ts +463 -0
  64. package/src/io/export/serialize-tables.ts +174 -0
  65. package/src/io/export/split-review-boundaries.ts +356 -0
  66. package/src/io/export/split-story-blocks-for-runtime-revisions.ts +252 -0
  67. package/src/io/export/table-properties-xml.ts +318 -0
  68. package/src/io/normalize/README.md +3 -0
  69. package/src/io/normalize/normalize-text.ts +670 -0
  70. package/src/io/ooxml/README.md +3 -0
  71. package/src/io/ooxml/highlight-colors.ts +39 -0
  72. package/src/io/ooxml/numbering-sentinels.ts +44 -0
  73. package/src/io/ooxml/parse-comments.ts +852 -0
  74. package/src/io/ooxml/parse-complex-content.ts +287 -0
  75. package/src/io/ooxml/parse-fields.ts +834 -0
  76. package/src/io/ooxml/parse-footnotes.ts +952 -0
  77. package/src/io/ooxml/parse-headers-footers.ts +1212 -0
  78. package/src/io/ooxml/parse-inline-media.ts +461 -0
  79. package/src/io/ooxml/parse-main-document.ts +2947 -0
  80. package/src/io/ooxml/parse-numbering.ts +747 -0
  81. package/src/io/ooxml/parse-revisions.ts +1045 -0
  82. package/src/io/ooxml/parse-settings.ts +184 -0
  83. package/src/io/ooxml/parse-shapes.ts +296 -0
  84. package/src/io/ooxml/parse-styles.ts +639 -0
  85. package/src/io/ooxml/parse-tables.ts +627 -0
  86. package/src/io/ooxml/parse-theme.ts +346 -0
  87. package/src/io/ooxml/part-manifest.ts +136 -0
  88. package/src/io/ooxml/revision-boundaries.ts +475 -0
  89. package/src/io/ooxml/workflow-payload.ts +544 -0
  90. package/src/io/opc/README.md +3 -0
  91. package/src/io/opc/corrupt-package.ts +166 -0
  92. package/src/io/opc/docx-package.ts +74 -0
  93. package/src/io/opc/package-reader.ts +325 -0
  94. package/src/io/opc/package-writer.ts +273 -0
  95. package/src/io/source-package-provenance.ts +241 -0
  96. package/{dist/chunk-RMH72RZI.js → src/legal/bookmarks.ts} +130 -44
  97. package/src/legal/cross-references.ts +414 -0
  98. package/src/legal/defined-terms.ts +203 -0
  99. package/src/legal/index.ts +32 -0
  100. package/src/legal/signature-blocks.ts +259 -0
  101. package/src/model/README.md +3 -0
  102. package/src/model/canonical-document.ts +2722 -0
  103. package/src/model/cds-1.0.0.ts +212 -0
  104. package/src/model/snapshot.ts +760 -0
  105. package/src/preservation/README.md +3 -0
  106. package/src/preservation/markup-compatibility.ts +48 -0
  107. package/src/preservation/opaque-fragment-store.ts +89 -0
  108. package/src/preservation/opaque-region.ts +233 -0
  109. package/src/preservation/package-preservation.ts +113 -0
  110. package/src/preservation/preserved-part-manifest.ts +56 -0
  111. package/src/preservation/relationship-retention.ts +57 -0
  112. package/src/preservation/store.ts +255 -0
  113. package/src/review/README.md +16 -0
  114. package/src/review/store/README.md +3 -0
  115. package/src/review/store/comment-anchors.ts +70 -0
  116. package/src/review/store/comment-remapping.ts +154 -0
  117. package/src/review/store/comment-store.ts +349 -0
  118. package/src/review/store/comment-thread.ts +109 -0
  119. package/src/review/store/revision-actions.ts +423 -0
  120. package/src/review/store/revision-store.ts +323 -0
  121. package/src/review/store/revision-types.ts +182 -0
  122. package/src/review/store/runtime-comment-store.ts +43 -0
  123. package/src/runtime/README.md +3 -0
  124. package/src/runtime/ai-action-policy.ts +764 -0
  125. package/src/runtime/context-analytics.ts +824 -0
  126. package/src/runtime/document-layout.ts +332 -0
  127. package/src/runtime/document-locations.ts +521 -0
  128. package/src/runtime/document-navigation.ts +616 -0
  129. package/src/runtime/document-outline.ts +440 -0
  130. package/src/runtime/document-runtime.ts +4055 -0
  131. package/src/runtime/document-search.ts +145 -0
  132. package/src/runtime/event-refresh-hints.ts +137 -0
  133. package/src/runtime/numbering-prefix.ts +244 -0
  134. package/src/runtime/page-layout-estimation.ts +305 -0
  135. package/src/runtime/read-only-diagnostics-runtime.ts +241 -0
  136. package/src/runtime/resolved-numbering-geometry.ts +293 -0
  137. package/src/runtime/review-runtime.ts +44 -0
  138. package/src/runtime/revision-runtime.ts +107 -0
  139. package/src/runtime/session-capabilities.ts +192 -0
  140. package/src/runtime/story-context.ts +164 -0
  141. package/src/runtime/story-targeting.ts +162 -0
  142. package/src/runtime/suggestions-snapshot.ts +137 -0
  143. package/src/runtime/surface-projection.ts +1553 -0
  144. package/src/runtime/table-commands.ts +173 -0
  145. package/src/runtime/table-schema.ts +309 -0
  146. package/src/runtime/table-style-resolver.ts +409 -0
  147. package/src/runtime/view-state.ts +493 -0
  148. package/src/runtime/virtualized-rendering.ts +258 -0
  149. package/src/runtime/workflow-markup.ts +393 -0
  150. package/src/ui/README.md +30 -0
  151. package/src/ui/WordReviewEditor.tsx +5268 -0
  152. package/src/ui/browser-export.ts +52 -0
  153. package/src/ui/comments/README.md +3 -0
  154. package/src/ui/compatibility/README.md +3 -0
  155. package/src/ui/editor-command-bag.ts +127 -0
  156. package/src/ui/editor-runtime-boundary.ts +1558 -0
  157. package/src/ui/editor-shell-view.tsx +144 -0
  158. package/src/ui/editor-surface/README.md +3 -0
  159. package/src/ui/editor-surface-controller.tsx +66 -0
  160. package/src/ui/headless/comment-decoration-model.ts +124 -0
  161. package/src/ui/headless/preserve-editor-selection.ts +5 -0
  162. package/src/ui/headless/revision-decoration-model.ts +128 -0
  163. package/src/ui/headless/selection-helpers.ts +54 -0
  164. package/src/ui/headless/selection-tool-context.ts +19 -0
  165. package/src/ui/headless/selection-tool-resolver.ts +752 -0
  166. package/src/ui/headless/selection-tool-types.ts +129 -0
  167. package/src/ui/headless/selection-toolbar-model.ts +11 -0
  168. package/src/ui/headless/use-editor-keyboard.ts +103 -0
  169. package/src/ui/review/README.md +3 -0
  170. package/src/ui/runtime-shortcut-dispatch.ts +365 -0
  171. package/src/ui/runtime-snapshot-selectors.ts +197 -0
  172. package/src/ui/shared/revision-filters.ts +31 -0
  173. package/src/ui/status/README.md +3 -0
  174. package/src/ui/theme/README.md +3 -0
  175. package/src/ui/toolbar/README.md +3 -0
  176. package/src/ui/workflow-surface-blocked-rails.ts +94 -0
  177. package/src/ui-tailwind/chrome/chrome-preset-model.ts +107 -0
  178. package/src/ui-tailwind/chrome/chrome-preset-toolbar.tsx +15 -0
  179. package/src/ui-tailwind/chrome/review-queue-bar.tsx +97 -0
  180. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +64 -0
  181. package/src/ui-tailwind/chrome/tw-context-analytics-summary.tsx +122 -0
  182. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +121 -0
  183. package/src/ui-tailwind/chrome/tw-layout-panel.tsx +114 -0
  184. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +30 -0
  185. package/src/ui-tailwind/chrome/tw-page-ruler.tsx +365 -0
  186. package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +23 -0
  187. package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +35 -0
  188. package/src/ui-tailwind/chrome/tw-selection-tool-formatting.tsx +37 -0
  189. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +298 -0
  190. package/src/ui-tailwind/chrome/tw-selection-tool-structure.tsx +116 -0
  191. package/src/ui-tailwind/chrome/tw-selection-tool-suggestion.tsx +29 -0
  192. package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +27 -0
  193. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +186 -0
  194. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +139 -0
  195. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +200 -0
  196. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +58 -0
  197. package/src/ui-tailwind/chrome/use-before-unload.ts +20 -0
  198. package/src/ui-tailwind/editor-surface/perf-probe.ts +179 -0
  199. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +189 -0
  200. package/src/ui-tailwind/editor-surface/pm-contextual-ui.ts +31 -0
  201. package/src/ui-tailwind/editor-surface/pm-decorations.ts +411 -0
  202. package/src/ui-tailwind/editor-surface/pm-position-map.ts +123 -0
  203. package/src/ui-tailwind/editor-surface/pm-schema.ts +927 -0
  204. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +567 -0
  205. package/src/ui-tailwind/editor-surface/search-plugin.ts +168 -0
  206. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +65 -0
  207. package/src/ui-tailwind/editor-surface/tw-caret.tsx +12 -0
  208. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +150 -0
  209. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +129 -0
  210. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +58 -0
  211. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +151 -0
  212. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +1047 -0
  213. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +111 -0
  214. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +503 -0
  215. package/src/ui-tailwind/index.ts +62 -0
  216. package/src/ui-tailwind/page-chrome-model.ts +27 -0
  217. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +406 -0
  218. package/src/ui-tailwind/review/tw-health-panel.tsx +149 -0
  219. package/src/ui-tailwind/review/tw-review-rail.tsx +122 -0
  220. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +164 -0
  221. package/src/ui-tailwind/status/tw-status-bar.tsx +65 -0
  222. package/{dist → src}/ui-tailwind/theme/editor-theme.css +58 -40
  223. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +52 -0
  224. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +1133 -0
  225. package/src/ui-tailwind/tw-review-workspace.tsx +1460 -0
  226. package/src/validation/README.md +3 -0
  227. package/src/validation/compatibility-engine.ts +878 -0
  228. package/src/validation/compatibility-report.ts +161 -0
  229. package/src/validation/diagnostics.ts +204 -0
  230. package/src/validation/docx-comment-proof.ts +720 -0
  231. package/src/validation/import-diagnostics.ts +128 -0
  232. package/src/validation/low-priority-word-surfaces.ts +373 -0
  233. package/dist/canonical-document-BLEbzL2J.d.cts +0 -844
  234. package/dist/canonical-document-BLEbzL2J.d.ts +0 -844
  235. package/dist/chunk-2FJS5GZM.js +0 -763
  236. package/dist/chunk-2FJS5GZM.js.map +0 -1
  237. package/dist/chunk-2OQBZS3F.js +0 -446
  238. package/dist/chunk-2OQBZS3F.js.map +0 -1
  239. package/dist/chunk-2S7W4KFO.js +0 -127
  240. package/dist/chunk-2S7W4KFO.js.map +0 -1
  241. package/dist/chunk-2TG72QSW.js +0 -3874
  242. package/dist/chunk-2TG72QSW.js.map +0 -1
  243. package/dist/chunk-36QNIZBO.js +0 -532
  244. package/dist/chunk-36QNIZBO.js.map +0 -1
  245. package/dist/chunk-4AQOYAW4.js +0 -3069
  246. package/dist/chunk-4AQOYAW4.js.map +0 -1
  247. package/dist/chunk-4D5EWJ3P.js +0 -77
  248. package/dist/chunk-4D5EWJ3P.js.map +0 -1
  249. package/dist/chunk-5FN54NDH.js +0 -2257
  250. package/dist/chunk-5FN54NDH.js.map +0 -1
  251. package/dist/chunk-BOYGQYRQ.js +0 -7306
  252. package/dist/chunk-BOYGQYRQ.js.map +0 -1
  253. package/dist/chunk-CN3XMECL.js +0 -212
  254. package/dist/chunk-CN3XMECL.js.map +0 -1
  255. package/dist/chunk-EBI3BX6U.js +0 -164
  256. package/dist/chunk-EBI3BX6U.js.map +0 -1
  257. package/dist/chunk-EILUG3VB.js +0 -1275
  258. package/dist/chunk-EILUG3VB.js.map +0 -1
  259. package/dist/chunk-FUDY333O.js +0 -70
  260. package/dist/chunk-FUDY333O.js.map +0 -1
  261. package/dist/chunk-GBVOWFIK.js +0 -1237
  262. package/dist/chunk-GBVOWFIK.js.map +0 -1
  263. package/dist/chunk-H4TQ3H3Y.js +0 -262
  264. package/dist/chunk-H4TQ3H3Y.js.map +0 -1
  265. package/dist/chunk-JGB3IXZO.js +0 -189
  266. package/dist/chunk-JGB3IXZO.js.map +0 -1
  267. package/dist/chunk-KD2QRQPY.js +0 -4342
  268. package/dist/chunk-KD2QRQPY.js.map +0 -1
  269. package/dist/chunk-KLMXQVYK.js +0 -369
  270. package/dist/chunk-KLMXQVYK.js.map +0 -1
  271. package/dist/chunk-KZUG5KFQ.js +0 -214
  272. package/dist/chunk-KZUG5KFQ.js.map +0 -1
  273. package/dist/chunk-QDAQ4CJU.js +0 -345
  274. package/dist/chunk-QDAQ4CJU.js.map +0 -1
  275. package/dist/chunk-RMH72RZI.js.map +0 -1
  276. package/dist/chunk-SWKWQZXM.js +0 -117
  277. package/dist/chunk-SWKWQZXM.js.map +0 -1
  278. package/dist/chunk-TJBP2K4T.js.map +0 -1
  279. package/dist/chunk-TLCEAQDQ.js +0 -542
  280. package/dist/chunk-TLCEAQDQ.js.map +0 -1
  281. package/dist/chunk-UZXBISGO.js.map +0 -1
  282. package/dist/chunk-WGBAKP3Q.js +0 -3220
  283. package/dist/chunk-WGBAKP3Q.js.map +0 -1
  284. package/dist/compare/index.cjs +0 -5475
  285. package/dist/compare/index.cjs.map +0 -1
  286. package/dist/compare/index.d.cts +0 -114
  287. package/dist/compare/index.d.ts +0 -114
  288. package/dist/compare/index.js +0 -731
  289. package/dist/compare/index.js.map +0 -1
  290. package/dist/core/commands/formatting-commands.cjs +0 -828
  291. package/dist/core/commands/formatting-commands.cjs.map +0 -1
  292. package/dist/core/commands/formatting-commands.d.cts +0 -63
  293. package/dist/core/commands/formatting-commands.d.ts +0 -63
  294. package/dist/core/commands/formatting-commands.js +0 -37
  295. package/dist/core/commands/formatting-commands.js.map +0 -1
  296. package/dist/core/commands/image-commands.cjs +0 -2023
  297. package/dist/core/commands/image-commands.cjs.map +0 -1
  298. package/dist/core/commands/image-commands.d.cts +0 -58
  299. package/dist/core/commands/image-commands.d.ts +0 -58
  300. package/dist/core/commands/image-commands.js +0 -18
  301. package/dist/core/commands/image-commands.js.map +0 -1
  302. package/dist/core/commands/section-layout-commands.cjs.map +0 -1
  303. package/dist/core/commands/section-layout-commands.d.cts +0 -62
  304. package/dist/core/commands/section-layout-commands.d.ts +0 -62
  305. package/dist/core/commands/section-layout-commands.js +0 -21
  306. package/dist/core/commands/section-layout-commands.js.map +0 -1
  307. package/dist/core/commands/style-commands.cjs.map +0 -1
  308. package/dist/core/commands/style-commands.d.cts +0 -13
  309. package/dist/core/commands/style-commands.d.ts +0 -13
  310. package/dist/core/commands/style-commands.js +0 -9
  311. package/dist/core/commands/style-commands.js.map +0 -1
  312. package/dist/core/commands/table-structure-commands.cjs +0 -1883
  313. package/dist/core/commands/table-structure-commands.cjs.map +0 -1
  314. package/dist/core/commands/table-structure-commands.d.cts +0 -59
  315. package/dist/core/commands/table-structure-commands.d.ts +0 -59
  316. package/dist/core/commands/table-structure-commands.js +0 -12
  317. package/dist/core/commands/table-structure-commands.js.map +0 -1
  318. package/dist/core/commands/text-commands.cjs +0 -2391
  319. package/dist/core/commands/text-commands.cjs.map +0 -1
  320. package/dist/core/commands/text-commands.d.cts +0 -24
  321. package/dist/core/commands/text-commands.d.ts +0 -24
  322. package/dist/core/commands/text-commands.js +0 -28
  323. package/dist/core/commands/text-commands.js.map +0 -1
  324. package/dist/core/selection/mapping.cjs +0 -200
  325. package/dist/core/selection/mapping.cjs.map +0 -1
  326. package/dist/core/selection/mapping.d.cts +0 -2
  327. package/dist/core/selection/mapping.d.ts +0 -2
  328. package/dist/core/selection/mapping.js +0 -31
  329. package/dist/core/selection/mapping.js.map +0 -1
  330. package/dist/core/state/editor-state.cjs +0 -2278
  331. package/dist/core/state/editor-state.cjs.map +0 -1
  332. package/dist/core/state/editor-state.d.cts +0 -2
  333. package/dist/core/state/editor-state.d.ts +0 -2
  334. package/dist/core/state/editor-state.js +0 -26
  335. package/dist/core/state/editor-state.js.map +0 -1
  336. package/dist/index.cjs +0 -38553
  337. package/dist/index.cjs.map +0 -1
  338. package/dist/index.d.cts +0 -15
  339. package/dist/index.d.ts +0 -15
  340. package/dist/index.js +0 -7856
  341. package/dist/index.js.map +0 -1
  342. package/dist/io/docx-session.cjs +0 -16236
  343. package/dist/io/docx-session.cjs.map +0 -1
  344. package/dist/io/docx-session.d.cts +0 -21
  345. package/dist/io/docx-session.d.ts +0 -21
  346. package/dist/io/docx-session.js +0 -18
  347. package/dist/io/docx-session.js.map +0 -1
  348. package/dist/legal/index.cjs +0 -3900
  349. package/dist/legal/index.cjs.map +0 -1
  350. package/dist/legal/index.d.cts +0 -86
  351. package/dist/legal/index.d.ts +0 -86
  352. package/dist/legal/index.js +0 -616
  353. package/dist/legal/index.js.map +0 -1
  354. package/dist/public-types-7ZL_94cz.d.ts +0 -1573
  355. package/dist/public-types-CeMaDueh.d.cts +0 -1573
  356. package/dist/public-types.cjs +0 -19
  357. package/dist/public-types.cjs.map +0 -1
  358. package/dist/public-types.d.cts +0 -2
  359. package/dist/public-types.d.ts +0 -2
  360. package/dist/public-types.js +0 -1
  361. package/dist/public-types.js.map +0 -1
  362. package/dist/runtime/document-runtime.cjs +0 -11140
  363. package/dist/runtime/document-runtime.cjs.map +0 -1
  364. package/dist/runtime/document-runtime.d.cts +0 -231
  365. package/dist/runtime/document-runtime.d.ts +0 -231
  366. package/dist/runtime/document-runtime.js +0 -21
  367. package/dist/runtime/document-runtime.js.map +0 -1
  368. package/dist/structural-helpers-CilgOVhh.d.cts +0 -10
  369. package/dist/structural-helpers-q0Gd-eBN.d.ts +0 -10
  370. package/dist/ui-tailwind/editor-surface/search-plugin.cjs +0 -313
  371. package/dist/ui-tailwind/editor-surface/search-plugin.cjs.map +0 -1
  372. package/dist/ui-tailwind/editor-surface/search-plugin.d.cts +0 -67
  373. package/dist/ui-tailwind/editor-surface/search-plugin.d.ts +0 -67
  374. package/dist/ui-tailwind/editor-surface/search-plugin.js +0 -23
  375. package/dist/ui-tailwind/editor-surface/search-plugin.js.map +0 -1
  376. package/dist/ui-tailwind/index.cjs +0 -4833
  377. package/dist/ui-tailwind/index.cjs.map +0 -1
  378. package/dist/ui-tailwind/index.d.cts +0 -617
  379. package/dist/ui-tailwind/index.d.ts +0 -617
  380. package/dist/ui-tailwind/index.js +0 -575
  381. package/dist/ui-tailwind/index.js.map +0 -1
@@ -0,0 +1,255 @@
1
+ import type {
2
+ BlockNode,
3
+ DocRange,
4
+ OpaqueFragmentRecord,
5
+ PreservationStore,
6
+ PreservedPackagePart,
7
+ } from "../model/canonical-document.ts";
8
+
9
+ export interface OpaqueFragmentDescriptor {
10
+ featureKey:
11
+ | "sections"
12
+ | "tables"
13
+ | "headers-footers"
14
+ | "fields"
15
+ | "content-controls"
16
+ | "custom-xml"
17
+ | "alt-chunk"
18
+ | "embedded-objects"
19
+ | "alternate-content"
20
+ | "unknown-ooxml";
21
+ label: string;
22
+ detail: string;
23
+ }
24
+
25
+ const BLOCKED_IMPORT_FEATURE_KEYS = new Set<OpaqueFragmentDescriptor["featureKey"]>([
26
+ "alt-chunk",
27
+ "custom-xml",
28
+ ]);
29
+
30
+ export function createPreservationStore(
31
+ seed?: Partial<PreservationStore>,
32
+ ): PreservationStore {
33
+ return {
34
+ opaqueFragments: { ...(seed?.opaqueFragments ?? {}) },
35
+ packageParts: { ...(seed?.packageParts ?? {}) },
36
+ };
37
+ }
38
+
39
+ export function getOpaqueFragment(
40
+ store: PreservationStore,
41
+ fragmentId: string,
42
+ ): OpaqueFragmentRecord | undefined {
43
+ return normalizeOpaqueFragmentMap(store)[fragmentId];
44
+ }
45
+
46
+ export function listOpaqueFragments(
47
+ store: PreservationStore,
48
+ ): OpaqueFragmentRecord[] {
49
+ return Object.values(normalizeOpaqueFragmentMap(store)).sort((left, right) => {
50
+ return (
51
+ left.lastKnownRange.from - right.lastKnownRange.from ||
52
+ left.fragmentId.localeCompare(right.fragmentId)
53
+ );
54
+ });
55
+ }
56
+
57
+ export function listPreservedPackageParts(
58
+ store: PreservationStore,
59
+ ): PreservedPackagePart[] {
60
+ return Object.values(normalizePackagePartMap(store)).sort((left, right) =>
61
+ left.packagePartName.localeCompare(right.packagePartName),
62
+ );
63
+ }
64
+
65
+ export function findOpaqueFragmentsIntersectingRange(
66
+ store: PreservationStore,
67
+ range: DocRange,
68
+ ): OpaqueFragmentRecord[] {
69
+ return listOpaqueFragments(store).filter((fragment) =>
70
+ rangesIntersect(fragment.lastKnownRange, range),
71
+ );
72
+ }
73
+
74
+ export function describeOpaqueFragment(
75
+ fragment: OpaqueFragmentRecord,
76
+ ): OpaqueFragmentDescriptor {
77
+ const xml = fragment.payloadReference;
78
+ const detail = createDetail(fragment);
79
+
80
+ if (/\b(?:w:)?sectPr\b/u.test(xml)) {
81
+ return {
82
+ featureKey: "sections",
83
+ label: "Section properties",
84
+ detail,
85
+ };
86
+ }
87
+
88
+ if (/\b(?:w:)?tbl\b/u.test(xml)) {
89
+ return {
90
+ featureKey: "tables",
91
+ label: "Preserved table structure",
92
+ detail,
93
+ };
94
+ }
95
+
96
+ if (/\b(?:w:)?hdr\b|\b(?:w:)?ftr\b/u.test(xml)) {
97
+ return {
98
+ featureKey: "headers-footers",
99
+ label: "Header or footer content",
100
+ detail,
101
+ };
102
+ }
103
+
104
+ if (/\b(?:w:)?fldSimple\b|\b(?:w:)?fldChar\b|\b(?:w:)?instrText\b/u.test(xml)) {
105
+ return {
106
+ featureKey: "fields",
107
+ label: "Word field content",
108
+ detail,
109
+ };
110
+ }
111
+
112
+ if (/\b(?:w:)?sdt\b/u.test(xml)) {
113
+ return {
114
+ featureKey: "content-controls",
115
+ label: "Content control",
116
+ detail,
117
+ };
118
+ }
119
+
120
+ if (/\b(?:w:)?customXml\b/u.test(xml)) {
121
+ return {
122
+ featureKey: "custom-xml",
123
+ label: "Custom XML wrapper",
124
+ detail,
125
+ };
126
+ }
127
+
128
+ if (/\b(?:w:)?altChunk\b/u.test(xml)) {
129
+ return {
130
+ featureKey: "alt-chunk",
131
+ label: "AltChunk import",
132
+ detail,
133
+ };
134
+ }
135
+
136
+ if (/\b(?:w:)?object\b|\b(?:o:)?OLEObject\b/u.test(xml)) {
137
+ const isOleObject = /\b(?:o:)?OLEObject\b/u.test(xml);
138
+ const label = isOleObject ? "OLE embedded object" : "Embedded object";
139
+ return {
140
+ featureKey: "embedded-objects",
141
+ label,
142
+ detail: `${detail} Preserve-only embedded object retained for export and Word reopen.`,
143
+ };
144
+ }
145
+
146
+ if (/\b(?:mc:)?AlternateContent\b/u.test(xml)) {
147
+ return {
148
+ featureKey: "alternate-content",
149
+ label: "Markup compatibility block",
150
+ detail,
151
+ };
152
+ }
153
+
154
+ return {
155
+ featureKey: "unknown-ooxml",
156
+ label: "Unsupported OOXML fragment",
157
+ detail,
158
+ };
159
+ }
160
+
161
+ export function describeStructuredWrapperBlock(
162
+ block: BlockNode,
163
+ ): OpaqueFragmentDescriptor | null {
164
+ if (block.type === "sdt") {
165
+ if (isTocContentControl(block)) {
166
+ return {
167
+ featureKey: "content-controls",
168
+ label: "TOC content control",
169
+ detail: "TOC content control remains a wrapper-heavy template structure and read-only.",
170
+ };
171
+ }
172
+ if (block.properties.sdtType === "docPartObj") {
173
+ return {
174
+ featureKey: "content-controls",
175
+ label: "Template content control",
176
+ detail: "Template content control remains a wrapper-heavy document part and read-only.",
177
+ };
178
+ }
179
+ }
180
+
181
+ if (block.type === "custom_xml") {
182
+ const descriptor = [block.element, block.uri].filter(Boolean).join(" ");
183
+ return {
184
+ featureKey: "custom-xml",
185
+ label: "Custom XML wrapper",
186
+ detail: descriptor.length > 0
187
+ ? `Custom XML wrapper ${descriptor} remains package-backed and read-only.`
188
+ : "Custom XML wrapper remains package-backed and read-only.",
189
+ };
190
+ }
191
+
192
+ if (block.type === "alt_chunk") {
193
+ return {
194
+ featureKey: "alt-chunk",
195
+ label: "AltChunk import",
196
+ detail: `AltChunk import remains package-backed and blocked through relationship ${block.relationshipId}.`,
197
+ };
198
+ }
199
+
200
+ return null;
201
+ }
202
+
203
+ export function isBlockedImportFeatureKey(
204
+ featureKey: OpaqueFragmentDescriptor["featureKey"],
205
+ ): boolean {
206
+ return BLOCKED_IMPORT_FEATURE_KEYS.has(featureKey);
207
+ }
208
+
209
+ function createDetail(fragment: OpaqueFragmentRecord): string {
210
+ const detail = [
211
+ `Preserved whole-unit from ${fragment.lastKnownRange.from}-${fragment.lastKnownRange.to}.`,
212
+ fragment.packagePartName ? `Part ${fragment.packagePartName}.` : null,
213
+ fragment.relationshipId ? `Relationship ${fragment.relationshipId}.` : null,
214
+ ]
215
+ .filter(Boolean)
216
+ .join(" ");
217
+
218
+ return detail.length > 0
219
+ ? detail
220
+ : "Preserved whole-unit to keep unsupported OOXML intact.";
221
+ }
222
+
223
+ function isTocContentControl(block: Extract<BlockNode, { type: "sdt" }>): boolean {
224
+ const searchText = [
225
+ block.properties.alias,
226
+ block.properties.tag,
227
+ block.properties.sdtType,
228
+ block.properties.propertiesXml,
229
+ ]
230
+ .filter(Boolean)
231
+ .join(" ")
232
+ .toLowerCase();
233
+
234
+ return searchText.includes("table of contents") || /\btoc\b/u.test(searchText);
235
+ }
236
+
237
+ function rangesIntersect(left: DocRange, right: DocRange): boolean {
238
+ return left.from < right.to && right.from < left.to;
239
+ }
240
+
241
+ function normalizeOpaqueFragmentMap(
242
+ store: PreservationStore,
243
+ ): Record<string, OpaqueFragmentRecord> {
244
+ return store && typeof store === "object" && store.opaqueFragments && typeof store.opaqueFragments === "object"
245
+ ? (store.opaqueFragments as Record<string, OpaqueFragmentRecord>)
246
+ : {};
247
+ }
248
+
249
+ function normalizePackagePartMap(
250
+ store: PreservationStore,
251
+ ): Record<string, PreservedPackagePart> {
252
+ return store && typeof store === "object" && store.packageParts && typeof store.packageParts === "object"
253
+ ? (store.packageParts as Record<string, PreservedPackagePart>)
254
+ : {};
255
+ }
@@ -0,0 +1,16 @@
1
+ # Review
2
+
3
+ Comments, anchors, revisions, remap helpers, and accept/reject behavior belong here.
4
+
5
+ Frozen Wave 1 contract:
6
+
7
+ - comments and revisions live in the canonical `review` store, not in the content tree
8
+ - review anchors use canonical position ranges or detached-anchor payloads, never DOM paths
9
+ - all review mutations flow through runtime commands and transactions
10
+ - detached comments or revisions remain addressable with reason metadata; they are not silently dropped
11
+ - v1 authoring is limited to single-paragraph comments, thread replies, tracked insertions, tracked deletions, and accept/reject flows
12
+ - preserve-only review structures such as multi-paragraph editable comment ranges, tracked moves, and structural list/table revisions stay locked and warning-backed
13
+
14
+ Key subdirectories:
15
+
16
+ - `store/`
@@ -0,0 +1,3 @@
1
+ # Review Store
2
+
3
+ Comment threads, revision records, review selectors, and accept/reject state belong here.
@@ -0,0 +1,70 @@
1
+ import {
2
+ createNodeAnchor,
3
+ createRangeAnchor,
4
+ mapAnchor,
5
+ normalizeRange,
6
+ type Assoc,
7
+ type BoundaryAssoc,
8
+ type DocRange,
9
+ type EditorAnchorProjection,
10
+ type TransactionMapping,
11
+ } from "../../core/selection/mapping.ts";
12
+
13
+ export type CommentAnchor = EditorAnchorProjection;
14
+ export type CommentAnchorState = "active" | "detached";
15
+
16
+ export interface CommentAnchorSummary {
17
+ anchor: CommentAnchor;
18
+ state: CommentAnchorState;
19
+ range: DocRange;
20
+ }
21
+
22
+ export function createCommentRangeAnchor(
23
+ from: number,
24
+ to = from,
25
+ assoc?: BoundaryAssoc,
26
+ ): CommentAnchor {
27
+ return createRangeAnchor(from, to, assoc);
28
+ }
29
+
30
+ export function createCommentNodeAnchor(at: number, assoc?: Assoc): CommentAnchor {
31
+ return createNodeAnchor(at, assoc);
32
+ }
33
+
34
+ export function remapCommentAnchor(
35
+ anchor: CommentAnchor,
36
+ mapping: TransactionMapping,
37
+ ): CommentAnchor {
38
+ return mapAnchor(anchor, mapping);
39
+ }
40
+
41
+ export function isDetachedCommentAnchor(anchor: CommentAnchor): boolean {
42
+ return anchor.kind === "detached";
43
+ }
44
+
45
+ export function summarizeCommentAnchor(anchor: CommentAnchor): CommentAnchorSummary {
46
+ if (anchor.kind === "range") {
47
+ return {
48
+ anchor,
49
+ state: "active",
50
+ range: normalizeRange(anchor.range),
51
+ };
52
+ }
53
+
54
+ if (anchor.kind === "node") {
55
+ return {
56
+ anchor,
57
+ state: "active",
58
+ range: {
59
+ from: anchor.at,
60
+ to: anchor.at,
61
+ },
62
+ };
63
+ }
64
+
65
+ return {
66
+ anchor,
67
+ state: "detached",
68
+ range: normalizeRange(anchor.lastKnownRange),
69
+ };
70
+ }
@@ -0,0 +1,154 @@
1
+ import type { CommentThreadRecord, EditorWarning } from "../../core/state/editor-state.ts";
2
+ import {
3
+ detachReviewAnchor,
4
+ getAnchorRange,
5
+ mapReviewAnchor,
6
+ mappingTouchesAnchorContent,
7
+ rangeStaysWithinSingleParagraph,
8
+ type ReviewAnchor,
9
+ } from "../../core/selection/review-anchors.ts";
10
+ import type { TransactionMapping } from "../../core/selection/mapping.ts";
11
+
12
+ export interface RemapCommentThreadsOptions {
13
+ comments: Record<string, CommentThreadRecord>;
14
+ mapping: TransactionMapping;
15
+ nextContent: unknown;
16
+ existingWarnings?: EditorWarning[];
17
+ }
18
+
19
+ export interface RemapCommentThreadsResult {
20
+ comments: Record<string, CommentThreadRecord>;
21
+ warnings: EditorWarning[];
22
+ detachedCommentIds: string[];
23
+ }
24
+
25
+ export function remapCommentThreads(
26
+ options: RemapCommentThreadsOptions,
27
+ ): RemapCommentThreadsResult {
28
+ const comments = Object.fromEntries(
29
+ Object.entries(options.comments).map(([commentId, comment]) => [
30
+ commentId,
31
+ remapCommentThread(comment, options.mapping, options.nextContent),
32
+ ]),
33
+ );
34
+ const detachedCommentIds = Object.values(comments)
35
+ .filter((comment) => comment.anchor.kind === "detached")
36
+ .map((comment) => comment.commentId);
37
+
38
+ return {
39
+ comments,
40
+ warnings: mergeDetachedAnchorWarnings(comments, options.existingWarnings ?? []),
41
+ detachedCommentIds,
42
+ };
43
+ }
44
+
45
+ export function remapCommentThread(
46
+ comment: CommentThreadRecord,
47
+ mapping: TransactionMapping,
48
+ nextContent: unknown,
49
+ ): CommentThreadRecord {
50
+ if (comment.anchor.kind === "detached") {
51
+ return comment;
52
+ }
53
+
54
+ const mappedAnchor = mapReviewAnchor(comment.anchor, mapping);
55
+ const anchor = normalizeCommentAnchor(comment.anchor, mappedAnchor, mapping, nextContent);
56
+
57
+ return {
58
+ ...comment,
59
+ anchor,
60
+ };
61
+ }
62
+
63
+ function normalizeCommentAnchor(
64
+ previousAnchor: ReviewAnchor,
65
+ mappedAnchor: ReviewAnchor,
66
+ mapping: TransactionMapping,
67
+ nextContent: unknown,
68
+ ): ReviewAnchor {
69
+ if (mappedAnchor.kind === "detached") {
70
+ return mappedAnchor;
71
+ }
72
+
73
+ const previousRange = getAnchorRange(previousAnchor);
74
+ const mappedRange = getAnchorRange(mappedAnchor);
75
+
76
+ if (
77
+ previousAnchor.kind === "range" &&
78
+ previousRange.from < previousRange.to &&
79
+ mappedAnchor.kind === "range" &&
80
+ mappedRange.from === mappedRange.to &&
81
+ mappingTouchesAnchorContent(previousAnchor, mapping)
82
+ ) {
83
+ return detachReviewAnchor(previousRange, detachReason(mapping));
84
+ }
85
+
86
+ if (
87
+ mappedAnchor.kind === "range" &&
88
+ !rangeStaysWithinSingleParagraph(nextContent, mappedAnchor.range)
89
+ ) {
90
+ return detachReviewAnchor(previousRange, "invalidatedByStructureChange");
91
+ }
92
+
93
+ return mappedAnchor;
94
+ }
95
+
96
+ function detachReason(
97
+ mapping: TransactionMapping,
98
+ ): "deleted" | "invalidatedByStructureChange" {
99
+ return mapping.metadata?.invalidatesStructures
100
+ ? "invalidatedByStructureChange"
101
+ : "deleted";
102
+ }
103
+
104
+ function mergeDetachedAnchorWarnings(
105
+ comments: Record<string, CommentThreadRecord>,
106
+ existingWarnings: EditorWarning[],
107
+ ): EditorWarning[] {
108
+ const retainedWarnings = existingWarnings.filter(
109
+ (warning) =>
110
+ warning.code !== "comment_anchor_detached" ||
111
+ !warning.details ||
112
+ typeof warning.details.commentId !== "string" ||
113
+ comments[warning.details.commentId]?.anchor.kind === "detached",
114
+ );
115
+
116
+ const knownDetachedIds = new Set(
117
+ retainedWarnings
118
+ .filter((warning) => warning.code === "comment_anchor_detached")
119
+ .map((warning) =>
120
+ typeof warning.details?.commentId === "string"
121
+ ? warning.details.commentId
122
+ : undefined,
123
+ )
124
+ .filter((value): value is string => Boolean(value)),
125
+ );
126
+
127
+ const detachedWarnings = Object.values(comments)
128
+ .filter(
129
+ (comment) =>
130
+ comment.anchor.kind === "detached" && !knownDetachedIds.has(comment.commentId),
131
+ )
132
+ .map((comment) => createDetachedCommentWarning(comment));
133
+
134
+ return [...retainedWarnings, ...detachedWarnings];
135
+ }
136
+
137
+ function createDetachedCommentWarning(
138
+ comment: CommentThreadRecord,
139
+ ): EditorWarning {
140
+ const anchor = comment.anchor.kind === "detached" ? comment.anchor : undefined;
141
+
142
+ return {
143
+ warningId: `warning:comment-anchor-detached:${comment.commentId}`,
144
+ code: "comment_anchor_detached",
145
+ severity: "warning",
146
+ message: `Comment ${comment.commentId} detached after edit remapping.`,
147
+ source: "review",
148
+ affectedAnchor: anchor,
149
+ details: {
150
+ commentId: comment.commentId,
151
+ reason: anchor?.reason,
152
+ },
153
+ };
154
+ }