@beyondwork/docx-react-component 1.0.29 → 1.0.31

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 (383) 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/responsive-chrome.ts +46 -0
  180. package/src/ui-tailwind/chrome/review-queue-bar.tsx +97 -0
  181. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +64 -0
  182. package/src/ui-tailwind/chrome/tw-context-analytics-summary.tsx +122 -0
  183. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +121 -0
  184. package/src/ui-tailwind/chrome/tw-layout-panel.tsx +114 -0
  185. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +30 -0
  186. package/src/ui-tailwind/chrome/tw-page-ruler.tsx +365 -0
  187. package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +23 -0
  188. package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +35 -0
  189. package/src/ui-tailwind/chrome/tw-selection-tool-formatting.tsx +37 -0
  190. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +303 -0
  191. package/src/ui-tailwind/chrome/tw-selection-tool-structure.tsx +116 -0
  192. package/src/ui-tailwind/chrome/tw-selection-tool-suggestion.tsx +29 -0
  193. package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +27 -0
  194. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +186 -0
  195. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +139 -0
  196. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +250 -0
  197. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +58 -0
  198. package/src/ui-tailwind/chrome/use-before-unload.ts +20 -0
  199. package/src/ui-tailwind/editor-surface/perf-probe.ts +179 -0
  200. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +189 -0
  201. package/src/ui-tailwind/editor-surface/pm-contextual-ui.ts +31 -0
  202. package/src/ui-tailwind/editor-surface/pm-decorations.ts +411 -0
  203. package/src/ui-tailwind/editor-surface/pm-position-map.ts +123 -0
  204. package/src/ui-tailwind/editor-surface/pm-schema.ts +927 -0
  205. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +567 -0
  206. package/src/ui-tailwind/editor-surface/search-plugin.ts +168 -0
  207. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +63 -0
  208. package/src/ui-tailwind/editor-surface/tw-caret.tsx +12 -0
  209. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +150 -0
  210. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +129 -0
  211. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +58 -0
  212. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +151 -0
  213. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +1047 -0
  214. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +111 -0
  215. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +503 -0
  216. package/src/ui-tailwind/index.ts +62 -0
  217. package/src/ui-tailwind/page-chrome-model.ts +27 -0
  218. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +406 -0
  219. package/src/ui-tailwind/review/tw-health-panel.tsx +149 -0
  220. package/src/ui-tailwind/review/tw-review-rail.tsx +130 -0
  221. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +164 -0
  222. package/src/ui-tailwind/status/tw-status-bar.tsx +65 -0
  223. package/{dist → src}/ui-tailwind/theme/editor-theme.css +58 -40
  224. package/src/ui-tailwind/toolbar/toolbar-layout.ts +47 -0
  225. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +52 -0
  226. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +1478 -0
  227. package/src/ui-tailwind/tw-review-workspace.tsx +1587 -0
  228. package/src/validation/README.md +3 -0
  229. package/src/validation/compatibility-engine.ts +878 -0
  230. package/src/validation/compatibility-report.ts +161 -0
  231. package/src/validation/diagnostics.ts +204 -0
  232. package/src/validation/docx-comment-proof.ts +720 -0
  233. package/src/validation/import-diagnostics.ts +128 -0
  234. package/src/validation/low-priority-word-surfaces.ts +373 -0
  235. package/dist/canonical-document-BLEbzL2J.d.cts +0 -844
  236. package/dist/canonical-document-BLEbzL2J.d.ts +0 -844
  237. package/dist/chunk-2FJS5GZM.js +0 -763
  238. package/dist/chunk-2FJS5GZM.js.map +0 -1
  239. package/dist/chunk-2OQBZS3F.js +0 -446
  240. package/dist/chunk-2OQBZS3F.js.map +0 -1
  241. package/dist/chunk-2S7W4KFO.js +0 -127
  242. package/dist/chunk-2S7W4KFO.js.map +0 -1
  243. package/dist/chunk-2TG72QSW.js +0 -3874
  244. package/dist/chunk-2TG72QSW.js.map +0 -1
  245. package/dist/chunk-36QNIZBO.js +0 -532
  246. package/dist/chunk-36QNIZBO.js.map +0 -1
  247. package/dist/chunk-4AQOYAW4.js +0 -3069
  248. package/dist/chunk-4AQOYAW4.js.map +0 -1
  249. package/dist/chunk-4D5EWJ3P.js +0 -77
  250. package/dist/chunk-4D5EWJ3P.js.map +0 -1
  251. package/dist/chunk-5FN54NDH.js +0 -2257
  252. package/dist/chunk-5FN54NDH.js.map +0 -1
  253. package/dist/chunk-BOYGQYRQ.js +0 -7306
  254. package/dist/chunk-BOYGQYRQ.js.map +0 -1
  255. package/dist/chunk-CN3XMECL.js +0 -212
  256. package/dist/chunk-CN3XMECL.js.map +0 -1
  257. package/dist/chunk-EBI3BX6U.js +0 -164
  258. package/dist/chunk-EBI3BX6U.js.map +0 -1
  259. package/dist/chunk-EILUG3VB.js +0 -1275
  260. package/dist/chunk-EILUG3VB.js.map +0 -1
  261. package/dist/chunk-FUDY333O.js +0 -70
  262. package/dist/chunk-FUDY333O.js.map +0 -1
  263. package/dist/chunk-GBVOWFIK.js +0 -1237
  264. package/dist/chunk-GBVOWFIK.js.map +0 -1
  265. package/dist/chunk-H4TQ3H3Y.js +0 -262
  266. package/dist/chunk-H4TQ3H3Y.js.map +0 -1
  267. package/dist/chunk-JGB3IXZO.js +0 -189
  268. package/dist/chunk-JGB3IXZO.js.map +0 -1
  269. package/dist/chunk-KD2QRQPY.js +0 -4342
  270. package/dist/chunk-KD2QRQPY.js.map +0 -1
  271. package/dist/chunk-KLMXQVYK.js +0 -369
  272. package/dist/chunk-KLMXQVYK.js.map +0 -1
  273. package/dist/chunk-KZUG5KFQ.js +0 -214
  274. package/dist/chunk-KZUG5KFQ.js.map +0 -1
  275. package/dist/chunk-QDAQ4CJU.js +0 -345
  276. package/dist/chunk-QDAQ4CJU.js.map +0 -1
  277. package/dist/chunk-RMH72RZI.js.map +0 -1
  278. package/dist/chunk-SWKWQZXM.js +0 -117
  279. package/dist/chunk-SWKWQZXM.js.map +0 -1
  280. package/dist/chunk-TJBP2K4T.js.map +0 -1
  281. package/dist/chunk-TLCEAQDQ.js +0 -542
  282. package/dist/chunk-TLCEAQDQ.js.map +0 -1
  283. package/dist/chunk-UZXBISGO.js.map +0 -1
  284. package/dist/chunk-WGBAKP3Q.js +0 -3220
  285. package/dist/chunk-WGBAKP3Q.js.map +0 -1
  286. package/dist/compare/index.cjs +0 -5475
  287. package/dist/compare/index.cjs.map +0 -1
  288. package/dist/compare/index.d.cts +0 -114
  289. package/dist/compare/index.d.ts +0 -114
  290. package/dist/compare/index.js +0 -731
  291. package/dist/compare/index.js.map +0 -1
  292. package/dist/core/commands/formatting-commands.cjs +0 -828
  293. package/dist/core/commands/formatting-commands.cjs.map +0 -1
  294. package/dist/core/commands/formatting-commands.d.cts +0 -63
  295. package/dist/core/commands/formatting-commands.d.ts +0 -63
  296. package/dist/core/commands/formatting-commands.js +0 -37
  297. package/dist/core/commands/formatting-commands.js.map +0 -1
  298. package/dist/core/commands/image-commands.cjs +0 -2023
  299. package/dist/core/commands/image-commands.cjs.map +0 -1
  300. package/dist/core/commands/image-commands.d.cts +0 -58
  301. package/dist/core/commands/image-commands.d.ts +0 -58
  302. package/dist/core/commands/image-commands.js +0 -18
  303. package/dist/core/commands/image-commands.js.map +0 -1
  304. package/dist/core/commands/section-layout-commands.cjs.map +0 -1
  305. package/dist/core/commands/section-layout-commands.d.cts +0 -62
  306. package/dist/core/commands/section-layout-commands.d.ts +0 -62
  307. package/dist/core/commands/section-layout-commands.js +0 -21
  308. package/dist/core/commands/section-layout-commands.js.map +0 -1
  309. package/dist/core/commands/style-commands.cjs.map +0 -1
  310. package/dist/core/commands/style-commands.d.cts +0 -13
  311. package/dist/core/commands/style-commands.d.ts +0 -13
  312. package/dist/core/commands/style-commands.js +0 -9
  313. package/dist/core/commands/style-commands.js.map +0 -1
  314. package/dist/core/commands/table-structure-commands.cjs +0 -1883
  315. package/dist/core/commands/table-structure-commands.cjs.map +0 -1
  316. package/dist/core/commands/table-structure-commands.d.cts +0 -59
  317. package/dist/core/commands/table-structure-commands.d.ts +0 -59
  318. package/dist/core/commands/table-structure-commands.js +0 -12
  319. package/dist/core/commands/table-structure-commands.js.map +0 -1
  320. package/dist/core/commands/text-commands.cjs +0 -2391
  321. package/dist/core/commands/text-commands.cjs.map +0 -1
  322. package/dist/core/commands/text-commands.d.cts +0 -24
  323. package/dist/core/commands/text-commands.d.ts +0 -24
  324. package/dist/core/commands/text-commands.js +0 -28
  325. package/dist/core/commands/text-commands.js.map +0 -1
  326. package/dist/core/selection/mapping.cjs +0 -200
  327. package/dist/core/selection/mapping.cjs.map +0 -1
  328. package/dist/core/selection/mapping.d.cts +0 -2
  329. package/dist/core/selection/mapping.d.ts +0 -2
  330. package/dist/core/selection/mapping.js +0 -31
  331. package/dist/core/selection/mapping.js.map +0 -1
  332. package/dist/core/state/editor-state.cjs +0 -2278
  333. package/dist/core/state/editor-state.cjs.map +0 -1
  334. package/dist/core/state/editor-state.d.cts +0 -2
  335. package/dist/core/state/editor-state.d.ts +0 -2
  336. package/dist/core/state/editor-state.js +0 -26
  337. package/dist/core/state/editor-state.js.map +0 -1
  338. package/dist/index.cjs +0 -38553
  339. package/dist/index.cjs.map +0 -1
  340. package/dist/index.d.cts +0 -15
  341. package/dist/index.d.ts +0 -15
  342. package/dist/index.js +0 -7856
  343. package/dist/index.js.map +0 -1
  344. package/dist/io/docx-session.cjs +0 -16236
  345. package/dist/io/docx-session.cjs.map +0 -1
  346. package/dist/io/docx-session.d.cts +0 -21
  347. package/dist/io/docx-session.d.ts +0 -21
  348. package/dist/io/docx-session.js +0 -18
  349. package/dist/io/docx-session.js.map +0 -1
  350. package/dist/legal/index.cjs +0 -3900
  351. package/dist/legal/index.cjs.map +0 -1
  352. package/dist/legal/index.d.cts +0 -86
  353. package/dist/legal/index.d.ts +0 -86
  354. package/dist/legal/index.js +0 -616
  355. package/dist/legal/index.js.map +0 -1
  356. package/dist/public-types-7ZL_94cz.d.ts +0 -1573
  357. package/dist/public-types-CeMaDueh.d.cts +0 -1573
  358. package/dist/public-types.cjs +0 -19
  359. package/dist/public-types.cjs.map +0 -1
  360. package/dist/public-types.d.cts +0 -2
  361. package/dist/public-types.d.ts +0 -2
  362. package/dist/public-types.js +0 -1
  363. package/dist/public-types.js.map +0 -1
  364. package/dist/runtime/document-runtime.cjs +0 -11140
  365. package/dist/runtime/document-runtime.cjs.map +0 -1
  366. package/dist/runtime/document-runtime.d.cts +0 -231
  367. package/dist/runtime/document-runtime.d.ts +0 -231
  368. package/dist/runtime/document-runtime.js +0 -21
  369. package/dist/runtime/document-runtime.js.map +0 -1
  370. package/dist/structural-helpers-CilgOVhh.d.cts +0 -10
  371. package/dist/structural-helpers-q0Gd-eBN.d.ts +0 -10
  372. package/dist/ui-tailwind/editor-surface/search-plugin.cjs +0 -313
  373. package/dist/ui-tailwind/editor-surface/search-plugin.cjs.map +0 -1
  374. package/dist/ui-tailwind/editor-surface/search-plugin.d.cts +0 -67
  375. package/dist/ui-tailwind/editor-surface/search-plugin.d.ts +0 -67
  376. package/dist/ui-tailwind/editor-surface/search-plugin.js +0 -23
  377. package/dist/ui-tailwind/editor-surface/search-plugin.js.map +0 -1
  378. package/dist/ui-tailwind/index.cjs +0 -4833
  379. package/dist/ui-tailwind/index.cjs.map +0 -1
  380. package/dist/ui-tailwind/index.d.cts +0 -617
  381. package/dist/ui-tailwind/index.d.ts +0 -617
  382. package/dist/ui-tailwind/index.js +0 -575
  383. 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
+ }