@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,373 @@
1
+ import {
2
+ cloneParagraphProperties,
3
+ cloneStoryUnit,
4
+ parseTextStory,
5
+ serializeTextStory,
6
+ type TextStory,
7
+ } from "../schema/text-schema.ts";
8
+ import { createSelectionSnapshot, type CanonicalDocumentEnvelope, type SelectionSnapshot } from "../state/editor-state.ts";
9
+ import { TextTransactionError } from "../state/text-transaction.ts";
10
+ import type { TransactionMapping } from "../selection/mapping.ts";
11
+ import type { MediaItem, ParagraphNode } from "../../model/canonical-document.ts";
12
+ import {
13
+ replaceParagraphScope,
14
+ resolveParagraphScope,
15
+ } from "./structural-helpers.ts";
16
+
17
+ export interface ImageCommandContext {
18
+ timestamp: string;
19
+ altText?: string;
20
+ display?: "inline" | "floating";
21
+ }
22
+
23
+ export interface InsertImageResult {
24
+ document: CanonicalDocumentEnvelope;
25
+ selection: SelectionSnapshot;
26
+ mapping: TransactionMapping;
27
+ mediaId: string;
28
+ }
29
+
30
+ /**
31
+ * Insert an image into the document at the current selection.
32
+ *
33
+ * Registers a MediaItem in the catalog with the supplied mimeType and
34
+ * optional dimensions, then inserts an image unit into the text story.
35
+ * Binary data is NOT stored in the canonical document — callers are
36
+ * responsible for persisting it to an external media store.
37
+ */
38
+ export function insertImage(
39
+ document: CanonicalDocumentEnvelope,
40
+ selection: SelectionSnapshot,
41
+ _data: Uint8Array | string,
42
+ mimeType: string,
43
+ _width?: number,
44
+ _height?: number,
45
+ context: ImageCommandContext = { timestamp: new Date().toISOString() },
46
+ ): InsertImageResult {
47
+ const scope = resolveParagraphScope(document, selection);
48
+ if (!scope) {
49
+ throw new TextTransactionError(
50
+ "unsupported_content",
51
+ "Image insertion is only supported when the selection stays within one paragraph-backed scope.",
52
+ );
53
+ }
54
+
55
+ const localDocument: CanonicalDocumentEnvelope = {
56
+ ...document,
57
+ content: {
58
+ type: "doc",
59
+ children: [scope.paragraph],
60
+ },
61
+ };
62
+ const localSelection = createSelectionSnapshot(
63
+ selection.anchor - scope.paragraphStart,
64
+ selection.head - scope.paragraphStart,
65
+ );
66
+ const localResult = insertImageIntoParagraph(
67
+ localDocument,
68
+ localSelection,
69
+ _data,
70
+ mimeType,
71
+ _width,
72
+ _height,
73
+ context,
74
+ );
75
+ const nextDocument = replaceParagraphScope(
76
+ {
77
+ ...document,
78
+ media: localResult.document.media,
79
+ },
80
+ scope,
81
+ [
82
+ {
83
+ ...scope.paragraph,
84
+ children:
85
+ localResult.document.content.type === "doc"
86
+ ? (localResult.document.content.children.find(
87
+ (block): block is ParagraphNode => block.type === "paragraph",
88
+ )?.children ?? scope.paragraph.children)
89
+ : scope.paragraph.children,
90
+ },
91
+ ],
92
+ );
93
+
94
+ return {
95
+ ...localResult,
96
+ document: {
97
+ ...nextDocument,
98
+ updatedAt: context.timestamp,
99
+ media: localResult.document.media,
100
+ },
101
+ selection: createSelectionSnapshot(
102
+ localResult.selection.anchor + scope.paragraphStart,
103
+ localResult.selection.head + scope.paragraphStart,
104
+ ),
105
+ mapping: {
106
+ ...localResult.mapping,
107
+ steps: localResult.mapping.steps.map((step) => ({
108
+ ...step,
109
+ from: step.from + scope.paragraphStart,
110
+ to: step.to + scope.paragraphStart,
111
+ })),
112
+ },
113
+ };
114
+ }
115
+
116
+ function insertImageIntoParagraph(
117
+ document: CanonicalDocumentEnvelope,
118
+ selection: SelectionSnapshot,
119
+ _data: Uint8Array | string,
120
+ mimeType: string,
121
+ width?: number,
122
+ height?: number,
123
+ context: ImageCommandContext = { timestamp: new Date().toISOString() },
124
+ ): InsertImageResult {
125
+ const story = parseTextStory(document.content);
126
+ const from = Math.min(selection.anchor, selection.head);
127
+ const to = Math.max(selection.anchor, selection.head);
128
+
129
+ if (from > story.size || to > story.size) {
130
+ throw new TextTransactionError(
131
+ "invalid_selection",
132
+ `Selection ${from}-${to} exceeds story size ${story.size}.`,
133
+ );
134
+ }
135
+
136
+ // Reject insertions whose replacement range crosses protected content.
137
+ const rangeUnits = story.units.slice(from, to);
138
+ const protectedUnit = rangeUnits.find(
139
+ (unit) =>
140
+ unit.kind === "opaque_inline" ||
141
+ unit.kind === "opaque_block" ||
142
+ unit.kind === "image",
143
+ );
144
+ if (protectedUnit) {
145
+ throw new TextTransactionError(
146
+ "unsupported_content",
147
+ `Image insertion range crosses protected ${protectedUnit.kind} content.`,
148
+ );
149
+ }
150
+
151
+ const ext = mimeTypeToExtension(mimeType);
152
+ const timestamp = context.timestamp.replace(/[^0-9]/g, "").slice(0, 14);
153
+ const mediaId = `media:img-${timestamp}`;
154
+ const packagePartName = `/word/media/${mediaId.replace("media:", "")}.${ext}`;
155
+
156
+ const mediaItem: MediaItem = {
157
+ mediaId,
158
+ contentType: mimeType,
159
+ filename: `${mediaId.replace("media:", "")}.${ext}`,
160
+ packagePartName,
161
+ ...(context.altText ? { altText: context.altText } : {}),
162
+ ...(context.display ? { display: context.display } : {}),
163
+ };
164
+
165
+ const existingItems =
166
+ document.media && "items" in document.media
167
+ ? (document.media as { items: Record<string, MediaItem> }).items
168
+ : {};
169
+
170
+ const updatedMedia = {
171
+ items: {
172
+ ...existingItems,
173
+ [mediaId]: mediaItem,
174
+ },
175
+ };
176
+
177
+ const nextUnits = [
178
+ ...story.units.slice(0, from).map(cloneStoryUnit),
179
+ {
180
+ kind: "image" as const,
181
+ mediaId,
182
+ ...(context.altText ? { altText: context.altText } : {}),
183
+ },
184
+ ...story.units.slice(to).map(cloneStoryUnit),
185
+ ];
186
+
187
+ const nextStory: TextStory = {
188
+ firstParagraph: cloneParagraphProperties(story.firstParagraph),
189
+ units: nextUnits,
190
+ size: nextUnits.length,
191
+ };
192
+
193
+ const caret = from + 1;
194
+
195
+ return {
196
+ document: {
197
+ ...document,
198
+ updatedAt: context.timestamp,
199
+ media: updatedMedia,
200
+ content: serializeTextStory(nextStory),
201
+ },
202
+ selection: createSelectionSnapshot(caret, caret),
203
+ mapping: {
204
+ steps: [{ from, to, insertSize: 1 }],
205
+ },
206
+ mediaId,
207
+ };
208
+ }
209
+
210
+ // ---------------------------------------------------------------------------
211
+ // Bounded geometry commands — export-safe, command-backed
212
+ // ---------------------------------------------------------------------------
213
+
214
+ /** EMU-based image dimensions. 1 inch = 914400 EMU. */
215
+ export interface ImageDimensions {
216
+ widthEmu: number;
217
+ heightEmu: number;
218
+ }
219
+
220
+ /** Bounded resize constraints. */
221
+ const MIN_DIMENSION_EMU = 91440; // ~0.1 inch
222
+ const MAX_DIMENSION_EMU = 27432000; // ~30 inches — Word practical max
223
+
224
+ function clampDimension(value: number): number {
225
+ return Math.max(MIN_DIMENSION_EMU, Math.min(MAX_DIMENSION_EMU, Math.round(value)));
226
+ }
227
+
228
+ export interface ResizeImageResult {
229
+ document: CanonicalDocumentEnvelope;
230
+ dimensions: ImageDimensions;
231
+ }
232
+
233
+ /**
234
+ * Resize an image in the media catalog by media ID.
235
+ *
236
+ * Bounded: dimensions are clamped to [0.1in, 30in] and stored on the
237
+ * MediaItem so they survive export round-trip. The ImageNode in the story
238
+ * is not mutated — placement geometry lives on the media item and the
239
+ * preserved `placementXml` is updated if present.
240
+ */
241
+ export function resizeImage(
242
+ document: CanonicalDocumentEnvelope,
243
+ mediaId: string,
244
+ dimensions: ImageDimensions,
245
+ timestamp: string = new Date().toISOString(),
246
+ ): ResizeImageResult {
247
+ const media = document.media as { items: Record<string, MediaItem> } | undefined;
248
+ if (!media?.items[mediaId]) {
249
+ throw new TextTransactionError(
250
+ "invalid_selection",
251
+ `Media item ${mediaId} does not exist in the catalog.`,
252
+ );
253
+ }
254
+
255
+ const clamped: ImageDimensions = {
256
+ widthEmu: clampDimension(dimensions.widthEmu),
257
+ heightEmu: clampDimension(dimensions.heightEmu),
258
+ };
259
+
260
+ const updatedItem: MediaItem = {
261
+ ...media.items[mediaId],
262
+ widthEmu: clamped.widthEmu,
263
+ heightEmu: clamped.heightEmu,
264
+ };
265
+
266
+ return {
267
+ document: {
268
+ ...document,
269
+ updatedAt: timestamp,
270
+ media: {
271
+ items: {
272
+ ...media.items,
273
+ [mediaId]: updatedItem,
274
+ },
275
+ },
276
+ },
277
+ dimensions: clamped,
278
+ };
279
+ }
280
+
281
+ export interface RepositionImageResult {
282
+ document: CanonicalDocumentEnvelope;
283
+ }
284
+
285
+ /**
286
+ * Reposition a floating image by updating its floating axis offsets.
287
+ *
288
+ * Only applies to images with `display: "floating"`. The offset values are
289
+ * EMU-based and stored on the canonical ImageNode's `floating` property so
290
+ * they survive export. Inline images cannot be repositioned — callers must
291
+ * first change the display mode through a separate command.
292
+ */
293
+ export function repositionFloatingImage(
294
+ document: CanonicalDocumentEnvelope,
295
+ mediaId: string,
296
+ offsets: { horizontalOffsetEmu?: number; verticalOffsetEmu?: number },
297
+ timestamp: string = new Date().toISOString(),
298
+ ): RepositionImageResult {
299
+ const blocks = document.content.children;
300
+ let found = false;
301
+ const nextBlocks = blocks.map((block) => {
302
+ if (block.type !== "paragraph") return block;
303
+ const nextChildren = block.children.map((child) => {
304
+ if (child.type !== "image" || child.mediaId !== mediaId) return child;
305
+ if (child.display !== "floating") {
306
+ throw new TextTransactionError(
307
+ "unsupported_content",
308
+ `Image ${mediaId} is not floating — reposition requires display: "floating".`,
309
+ );
310
+ }
311
+ found = true;
312
+ const prevFloating = child.floating ?? {};
313
+ return {
314
+ ...child,
315
+ floating: {
316
+ ...prevFloating,
317
+ ...(offsets.horizontalOffsetEmu !== undefined
318
+ ? {
319
+ horizontalPosition: {
320
+ ...prevFloating.horizontalPosition,
321
+ offset: offsets.horizontalOffsetEmu,
322
+ },
323
+ }
324
+ : {}),
325
+ ...(offsets.verticalOffsetEmu !== undefined
326
+ ? {
327
+ verticalPosition: {
328
+ ...prevFloating.verticalPosition,
329
+ offset: offsets.verticalOffsetEmu,
330
+ },
331
+ }
332
+ : {}),
333
+ },
334
+ };
335
+ });
336
+ return { ...block, children: nextChildren };
337
+ });
338
+
339
+ if (!found) {
340
+ throw new TextTransactionError(
341
+ "invalid_selection",
342
+ `No floating image with mediaId ${mediaId} found in document content.`,
343
+ );
344
+ }
345
+
346
+ return {
347
+ document: {
348
+ ...document,
349
+ updatedAt: timestamp,
350
+ content: { ...document.content, children: nextBlocks },
351
+ },
352
+ };
353
+ }
354
+
355
+ function mimeTypeToExtension(mimeType: string): string {
356
+ switch (mimeType.toLowerCase()) {
357
+ case "image/png":
358
+ return "png";
359
+ case "image/jpeg":
360
+ case "image/jpg":
361
+ return "jpg";
362
+ case "image/gif":
363
+ return "gif";
364
+ case "image/webp":
365
+ return "webp";
366
+ case "image/svg+xml":
367
+ return "svg";
368
+ case "image/bmp":
369
+ return "bmp";
370
+ default:
371
+ return "bin";
372
+ }
373
+ }