@beyondwork/docx-react-component 1.0.27 → 1.0.29

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 (356) hide show
  1. package/dist/canonical-document-BLEbzL2J.d.cts +844 -0
  2. package/dist/canonical-document-BLEbzL2J.d.ts +844 -0
  3. package/dist/chunk-2FJS5GZM.js +763 -0
  4. package/dist/chunk-2FJS5GZM.js.map +1 -0
  5. package/{src/core/commands/section-layout-commands.ts → dist/chunk-2OQBZS3F.js} +106 -340
  6. package/dist/chunk-2OQBZS3F.js.map +1 -0
  7. package/dist/chunk-2S7W4KFO.js +127 -0
  8. package/dist/chunk-2S7W4KFO.js.map +1 -0
  9. package/dist/chunk-2TG72QSW.js +3874 -0
  10. package/dist/chunk-2TG72QSW.js.map +1 -0
  11. package/{src/core/commands/table-structure-commands.ts → dist/chunk-36QNIZBO.js} +126 -315
  12. package/dist/chunk-36QNIZBO.js.map +1 -0
  13. package/dist/chunk-4AQOYAW4.js +3069 -0
  14. package/dist/chunk-4AQOYAW4.js.map +1 -0
  15. package/dist/chunk-4D5EWJ3P.js +77 -0
  16. package/dist/chunk-4D5EWJ3P.js.map +1 -0
  17. package/dist/chunk-5FN54NDH.js +2257 -0
  18. package/dist/chunk-5FN54NDH.js.map +1 -0
  19. package/dist/chunk-BOYGQYRQ.js +7306 -0
  20. package/dist/chunk-BOYGQYRQ.js.map +1 -0
  21. package/dist/chunk-CN3XMECL.js +212 -0
  22. package/dist/chunk-CN3XMECL.js.map +1 -0
  23. package/dist/chunk-EBI3BX6U.js +164 -0
  24. package/dist/chunk-EBI3BX6U.js.map +1 -0
  25. package/dist/chunk-EILUG3VB.js +1275 -0
  26. package/dist/chunk-EILUG3VB.js.map +1 -0
  27. package/dist/chunk-FUDY333O.js +70 -0
  28. package/dist/chunk-FUDY333O.js.map +1 -0
  29. package/dist/chunk-GBVOWFIK.js +1237 -0
  30. package/dist/chunk-GBVOWFIK.js.map +1 -0
  31. package/dist/chunk-H4TQ3H3Y.js +262 -0
  32. package/dist/chunk-H4TQ3H3Y.js.map +1 -0
  33. package/{src/core/commands/style-commands.ts → dist/chunk-JGB3IXZO.js} +40 -113
  34. package/dist/chunk-JGB3IXZO.js.map +1 -0
  35. package/dist/chunk-KD2QRQPY.js +4342 -0
  36. package/dist/chunk-KD2QRQPY.js.map +1 -0
  37. package/dist/chunk-KLMXQVYK.js +369 -0
  38. package/dist/chunk-KLMXQVYK.js.map +1 -0
  39. package/dist/chunk-KZUG5KFQ.js +214 -0
  40. package/dist/chunk-KZUG5KFQ.js.map +1 -0
  41. package/{src/core/state/text-transaction.ts → dist/chunk-QDAQ4CJU.js} +79 -236
  42. package/dist/chunk-QDAQ4CJU.js.map +1 -0
  43. package/{src/legal/bookmarks.ts → dist/chunk-RMH72RZI.js} +44 -130
  44. package/dist/chunk-RMH72RZI.js.map +1 -0
  45. package/dist/chunk-SWKWQZXM.js +117 -0
  46. package/dist/chunk-SWKWQZXM.js.map +1 -0
  47. package/{src/core/commands/formatting-commands.ts → dist/chunk-TJBP2K4T.js} +196 -536
  48. package/dist/chunk-TJBP2K4T.js.map +1 -0
  49. package/dist/chunk-TLCEAQDQ.js +542 -0
  50. package/dist/chunk-TLCEAQDQ.js.map +1 -0
  51. package/{src/core/commands/text-commands.ts → dist/chunk-UZXBISGO.js} +86 -142
  52. package/dist/chunk-UZXBISGO.js.map +1 -0
  53. package/dist/chunk-WGBAKP3Q.js +3220 -0
  54. package/dist/chunk-WGBAKP3Q.js.map +1 -0
  55. package/dist/compare/index.cjs +5475 -0
  56. package/dist/compare/index.cjs.map +1 -0
  57. package/dist/compare/index.d.cts +114 -0
  58. package/dist/compare/index.d.ts +114 -0
  59. package/dist/compare/index.js +731 -0
  60. package/dist/compare/index.js.map +1 -0
  61. package/dist/core/commands/formatting-commands.cjs +828 -0
  62. package/dist/core/commands/formatting-commands.cjs.map +1 -0
  63. package/dist/core/commands/formatting-commands.d.cts +63 -0
  64. package/dist/core/commands/formatting-commands.d.ts +63 -0
  65. package/dist/core/commands/formatting-commands.js +37 -0
  66. package/dist/core/commands/formatting-commands.js.map +1 -0
  67. package/dist/core/commands/image-commands.cjs +2023 -0
  68. package/dist/core/commands/image-commands.cjs.map +1 -0
  69. package/dist/core/commands/image-commands.d.cts +58 -0
  70. package/dist/core/commands/image-commands.d.ts +58 -0
  71. package/dist/core/commands/image-commands.js +18 -0
  72. package/dist/core/commands/image-commands.js.map +1 -0
  73. package/dist/core/commands/section-layout-commands.cjs +477 -0
  74. package/dist/core/commands/section-layout-commands.cjs.map +1 -0
  75. package/dist/core/commands/section-layout-commands.d.cts +62 -0
  76. package/dist/core/commands/section-layout-commands.d.ts +62 -0
  77. package/dist/core/commands/section-layout-commands.js +21 -0
  78. package/dist/core/commands/section-layout-commands.js.map +1 -0
  79. package/dist/core/commands/style-commands.cjs +214 -0
  80. package/dist/core/commands/style-commands.cjs.map +1 -0
  81. package/dist/core/commands/style-commands.d.cts +13 -0
  82. package/dist/core/commands/style-commands.d.ts +13 -0
  83. package/dist/core/commands/style-commands.js +9 -0
  84. package/dist/core/commands/style-commands.js.map +1 -0
  85. package/dist/core/commands/table-structure-commands.cjs +1883 -0
  86. package/dist/core/commands/table-structure-commands.cjs.map +1 -0
  87. package/dist/core/commands/table-structure-commands.d.cts +59 -0
  88. package/dist/core/commands/table-structure-commands.d.ts +59 -0
  89. package/dist/core/commands/table-structure-commands.js +12 -0
  90. package/dist/core/commands/table-structure-commands.js.map +1 -0
  91. package/dist/core/commands/text-commands.cjs +2391 -0
  92. package/dist/core/commands/text-commands.cjs.map +1 -0
  93. package/dist/core/commands/text-commands.d.cts +24 -0
  94. package/dist/core/commands/text-commands.d.ts +24 -0
  95. package/dist/core/commands/text-commands.js +28 -0
  96. package/dist/core/commands/text-commands.js.map +1 -0
  97. package/dist/core/selection/mapping.cjs +200 -0
  98. package/dist/core/selection/mapping.cjs.map +1 -0
  99. package/dist/core/selection/mapping.d.cts +2 -0
  100. package/dist/core/selection/mapping.d.ts +2 -0
  101. package/dist/core/selection/mapping.js +31 -0
  102. package/dist/core/selection/mapping.js.map +1 -0
  103. package/dist/core/state/editor-state.cjs +2278 -0
  104. package/dist/core/state/editor-state.cjs.map +1 -0
  105. package/dist/core/state/editor-state.d.cts +2 -0
  106. package/dist/core/state/editor-state.d.ts +2 -0
  107. package/dist/core/state/editor-state.js +26 -0
  108. package/dist/core/state/editor-state.js.map +1 -0
  109. package/dist/index.cjs +38553 -0
  110. package/dist/index.cjs.map +1 -0
  111. package/dist/index.d.cts +15 -0
  112. package/dist/index.d.ts +15 -0
  113. package/dist/index.js +7856 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/io/docx-session.cjs +16236 -0
  116. package/dist/io/docx-session.cjs.map +1 -0
  117. package/dist/io/docx-session.d.cts +21 -0
  118. package/dist/io/docx-session.d.ts +21 -0
  119. package/dist/io/docx-session.js +18 -0
  120. package/dist/io/docx-session.js.map +1 -0
  121. package/dist/legal/index.cjs +3900 -0
  122. package/dist/legal/index.cjs.map +1 -0
  123. package/dist/legal/index.d.cts +86 -0
  124. package/dist/legal/index.d.ts +86 -0
  125. package/dist/legal/index.js +616 -0
  126. package/dist/legal/index.js.map +1 -0
  127. package/dist/public-types-7ZL_94cz.d.ts +1573 -0
  128. package/dist/public-types-CeMaDueh.d.cts +1573 -0
  129. package/dist/public-types.cjs +19 -0
  130. package/dist/public-types.cjs.map +1 -0
  131. package/dist/public-types.d.cts +2 -0
  132. package/dist/public-types.d.ts +2 -0
  133. package/dist/public-types.js +1 -0
  134. package/dist/public-types.js.map +1 -0
  135. package/dist/runtime/document-runtime.cjs +11140 -0
  136. package/dist/runtime/document-runtime.cjs.map +1 -0
  137. package/dist/runtime/document-runtime.d.cts +231 -0
  138. package/dist/runtime/document-runtime.d.ts +231 -0
  139. package/dist/runtime/document-runtime.js +21 -0
  140. package/dist/runtime/document-runtime.js.map +1 -0
  141. package/dist/structural-helpers-CilgOVhh.d.cts +10 -0
  142. package/dist/structural-helpers-q0Gd-eBN.d.ts +10 -0
  143. package/dist/ui-tailwind/editor-surface/search-plugin.cjs +313 -0
  144. package/dist/ui-tailwind/editor-surface/search-plugin.cjs.map +1 -0
  145. package/dist/ui-tailwind/editor-surface/search-plugin.d.cts +67 -0
  146. package/dist/ui-tailwind/editor-surface/search-plugin.d.ts +67 -0
  147. package/dist/ui-tailwind/editor-surface/search-plugin.js +23 -0
  148. package/dist/ui-tailwind/editor-surface/search-plugin.js.map +1 -0
  149. package/dist/ui-tailwind/index.cjs +4833 -0
  150. package/dist/ui-tailwind/index.cjs.map +1 -0
  151. package/dist/ui-tailwind/index.d.cts +617 -0
  152. package/dist/ui-tailwind/index.d.ts +617 -0
  153. package/dist/ui-tailwind/index.js +575 -0
  154. package/dist/ui-tailwind/index.js.map +1 -0
  155. package/package.json +64 -54
  156. package/src/README.md +0 -85
  157. package/src/api/README.md +0 -26
  158. package/src/api/public-types.ts +0 -1418
  159. package/src/api/session-state.ts +0 -60
  160. package/src/compare/diff-engine.ts +0 -623
  161. package/src/compare/export-redlines.ts +0 -280
  162. package/src/compare/index.ts +0 -25
  163. package/src/compare/snapshot.ts +0 -97
  164. package/src/component-inventory.md +0 -99
  165. package/src/core/README.md +0 -10
  166. package/src/core/commands/README.md +0 -3
  167. package/src/core/commands/image-commands.ts +0 -373
  168. package/src/core/commands/index.ts +0 -1757
  169. package/src/core/commands/list-commands.ts +0 -565
  170. package/src/core/commands/paragraph-layout-commands.ts +0 -339
  171. package/src/core/commands/review-commands.ts +0 -108
  172. package/src/core/commands/structural-helpers.ts +0 -309
  173. package/src/core/schema/README.md +0 -3
  174. package/src/core/schema/text-schema.ts +0 -516
  175. package/src/core/search/search-text.ts +0 -357
  176. package/src/core/selection/README.md +0 -3
  177. package/src/core/selection/mapping.ts +0 -289
  178. package/src/core/selection/review-anchors.ts +0 -183
  179. package/src/core/state/README.md +0 -3
  180. package/src/core/state/editor-state.ts +0 -892
  181. package/src/formats/xlsx/io/parse-shared-strings.ts +0 -41
  182. package/src/formats/xlsx/io/parse-sheet.ts +0 -459
  183. package/src/formats/xlsx/io/parse-styles.ts +0 -59
  184. package/src/formats/xlsx/io/parse-workbook.ts +0 -75
  185. package/src/formats/xlsx/io/serialize-shared-strings.ts +0 -72
  186. package/src/formats/xlsx/io/serialize-sheet.ts +0 -333
  187. package/src/formats/xlsx/io/serialize-styles.ts +0 -98
  188. package/src/formats/xlsx/io/serialize-workbook.ts +0 -429
  189. package/src/formats/xlsx/io/xlsx-session.ts +0 -314
  190. package/src/formats/xlsx/model/cell.ts +0 -189
  191. package/src/formats/xlsx/model/sheet.ts +0 -326
  192. package/src/formats/xlsx/model/styles.ts +0 -118
  193. package/src/formats/xlsx/model/workbook.ts +0 -453
  194. package/src/formats/xlsx/runtime/cell-commands.ts +0 -567
  195. package/src/formats/xlsx/runtime/sheet-commands.ts +0 -206
  196. package/src/formats/xlsx/runtime/workbook-runtime.ts +0 -177
  197. package/src/formats/xlsx/runtime/workbook-transaction.ts +0 -822
  198. package/src/index.ts +0 -101
  199. package/src/io/README.md +0 -10
  200. package/src/io/docx-session.ts +0 -2882
  201. package/src/io/export/README.md +0 -3
  202. package/src/io/export/export-session.ts +0 -220
  203. package/src/io/export/minimal-docx.ts +0 -115
  204. package/src/io/export/reattach-preserved-parts.ts +0 -54
  205. package/src/io/export/serialize-comments.ts +0 -947
  206. package/src/io/export/serialize-footnotes.ts +0 -399
  207. package/src/io/export/serialize-headers-footers.ts +0 -372
  208. package/src/io/export/serialize-main-document.ts +0 -1376
  209. package/src/io/export/serialize-numbering.ts +0 -118
  210. package/src/io/export/serialize-revisions.ts +0 -389
  211. package/src/io/export/serialize-runtime-revisions.ts +0 -269
  212. package/src/io/export/serialize-tables.ts +0 -174
  213. package/src/io/export/split-review-boundaries.ts +0 -356
  214. package/src/io/normalize/README.md +0 -3
  215. package/src/io/normalize/normalize-text.ts +0 -639
  216. package/src/io/ooxml/README.md +0 -3
  217. package/src/io/ooxml/highlight-colors.ts +0 -39
  218. package/src/io/ooxml/numbering-sentinels.ts +0 -44
  219. package/src/io/ooxml/parse-comments.ts +0 -846
  220. package/src/io/ooxml/parse-complex-content.ts +0 -287
  221. package/src/io/ooxml/parse-fields.ts +0 -834
  222. package/src/io/ooxml/parse-footnotes.ts +0 -896
  223. package/src/io/ooxml/parse-headers-footers.ts +0 -1169
  224. package/src/io/ooxml/parse-inline-media.ts +0 -461
  225. package/src/io/ooxml/parse-main-document.ts +0 -2877
  226. package/src/io/ooxml/parse-numbering.ts +0 -432
  227. package/src/io/ooxml/parse-revisions.ts +0 -931
  228. package/src/io/ooxml/parse-settings.ts +0 -184
  229. package/src/io/ooxml/parse-shapes.ts +0 -296
  230. package/src/io/ooxml/parse-styles.ts +0 -463
  231. package/src/io/ooxml/parse-tables.ts +0 -618
  232. package/src/io/ooxml/parse-theme.ts +0 -346
  233. package/src/io/ooxml/part-manifest.ts +0 -136
  234. package/src/io/ooxml/revision-boundaries.ts +0 -351
  235. package/src/io/opc/README.md +0 -3
  236. package/src/io/opc/corrupt-package.ts +0 -166
  237. package/src/io/opc/docx-package.ts +0 -74
  238. package/src/io/opc/package-reader.ts +0 -325
  239. package/src/io/opc/package-writer.ts +0 -273
  240. package/src/io/source-package-provenance.ts +0 -241
  241. package/src/legal/cross-references.ts +0 -414
  242. package/src/legal/defined-terms.ts +0 -203
  243. package/src/legal/index.ts +0 -32
  244. package/src/legal/signature-blocks.ts +0 -259
  245. package/src/model/README.md +0 -3
  246. package/src/model/canonical-document.ts +0 -2632
  247. package/src/model/cds-1.0.0.ts +0 -212
  248. package/src/model/snapshot.ts +0 -649
  249. package/src/preservation/README.md +0 -3
  250. package/src/preservation/markup-compatibility.ts +0 -48
  251. package/src/preservation/opaque-fragment-store.ts +0 -89
  252. package/src/preservation/opaque-region.ts +0 -233
  253. package/src/preservation/package-preservation.ts +0 -113
  254. package/src/preservation/preserved-part-manifest.ts +0 -56
  255. package/src/preservation/relationship-retention.ts +0 -57
  256. package/src/preservation/store.ts +0 -185
  257. package/src/review/README.md +0 -16
  258. package/src/review/store/README.md +0 -3
  259. package/src/review/store/comment-anchors.ts +0 -70
  260. package/src/review/store/comment-remapping.ts +0 -154
  261. package/src/review/store/comment-store.ts +0 -331
  262. package/src/review/store/comment-thread.ts +0 -109
  263. package/src/review/store/revision-actions.ts +0 -394
  264. package/src/review/store/revision-store.ts +0 -312
  265. package/src/review/store/revision-types.ts +0 -171
  266. package/src/review/store/runtime-comment-store.ts +0 -43
  267. package/src/runtime/README.md +0 -3
  268. package/src/runtime/ai-action-policy.ts +0 -764
  269. package/src/runtime/collab-review-sync.ts +0 -254
  270. package/src/runtime/document-layout.ts +0 -332
  271. package/src/runtime/document-navigation.ts +0 -603
  272. package/src/runtime/document-runtime.ts +0 -3159
  273. package/src/runtime/document-search.ts +0 -145
  274. package/src/runtime/numbering-prefix.ts +0 -216
  275. package/src/runtime/page-layout-estimation.ts +0 -212
  276. package/src/runtime/read-only-diagnostics-runtime.ts +0 -241
  277. package/src/runtime/review-runtime.ts +0 -44
  278. package/src/runtime/revision-runtime.ts +0 -107
  279. package/src/runtime/session-capabilities.ts +0 -192
  280. package/src/runtime/story-context.ts +0 -164
  281. package/src/runtime/story-targeting.ts +0 -162
  282. package/src/runtime/surface-projection.ts +0 -1357
  283. package/src/runtime/table-commands.ts +0 -173
  284. package/src/runtime/table-schema.ts +0 -309
  285. package/src/runtime/view-state.ts +0 -477
  286. package/src/runtime/virtualized-rendering.ts +0 -258
  287. package/src/runtime/workflow-markup.ts +0 -353
  288. package/src/ui/README.md +0 -30
  289. package/src/ui/WordReviewEditor.tsx +0 -4097
  290. package/src/ui/browser-export.ts +0 -52
  291. package/src/ui/comments/README.md +0 -3
  292. package/src/ui/compatibility/README.md +0 -3
  293. package/src/ui/editor-command-bag.ts +0 -120
  294. package/src/ui/editor-runtime-boundary.ts +0 -1457
  295. package/src/ui/editor-shell-view.tsx +0 -142
  296. package/src/ui/editor-surface/README.md +0 -3
  297. package/src/ui/editor-surface-controller.tsx +0 -63
  298. package/src/ui/headless/comment-decoration-model.ts +0 -124
  299. package/src/ui/headless/preserve-editor-selection.ts +0 -5
  300. package/src/ui/headless/revision-decoration-model.ts +0 -128
  301. package/src/ui/headless/selection-helpers.ts +0 -54
  302. package/src/ui/headless/selection-toolbar-model.ts +0 -34
  303. package/src/ui/headless/use-editor-keyboard.ts +0 -103
  304. package/src/ui/review/README.md +0 -3
  305. package/src/ui/runtime-snapshot-selectors.ts +0 -197
  306. package/src/ui/shared/revision-filters.ts +0 -31
  307. package/src/ui/status/README.md +0 -3
  308. package/src/ui/theme/README.md +0 -3
  309. package/src/ui/toolbar/README.md +0 -3
  310. package/src/ui/workflow-surface-blocked-rails.ts +0 -94
  311. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +0 -64
  312. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +0 -129
  313. package/src/ui-tailwind/chrome/tw-layout-panel.tsx +0 -114
  314. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +0 -34
  315. package/src/ui-tailwind/chrome/tw-page-ruler.tsx +0 -386
  316. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +0 -186
  317. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +0 -139
  318. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +0 -128
  319. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +0 -58
  320. package/src/ui-tailwind/chrome/use-before-unload.ts +0 -20
  321. package/src/ui-tailwind/editor-surface/perf-probe.ts +0 -179
  322. package/src/ui-tailwind/editor-surface/pm-collab-plugins.ts +0 -40
  323. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +0 -178
  324. package/src/ui-tailwind/editor-surface/pm-contextual-ui.ts +0 -31
  325. package/src/ui-tailwind/editor-surface/pm-decorations.ts +0 -427
  326. package/src/ui-tailwind/editor-surface/pm-position-map.ts +0 -123
  327. package/src/ui-tailwind/editor-surface/pm-schema.ts +0 -876
  328. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +0 -504
  329. package/src/ui-tailwind/editor-surface/search-plugin.ts +0 -168
  330. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +0 -61
  331. package/src/ui-tailwind/editor-surface/tw-caret.tsx +0 -12
  332. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +0 -150
  333. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +0 -129
  334. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +0 -58
  335. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +0 -151
  336. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +0 -973
  337. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +0 -111
  338. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +0 -436
  339. package/src/ui-tailwind/index.ts +0 -62
  340. package/src/ui-tailwind/page-chrome-model.ts +0 -27
  341. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +0 -406
  342. package/src/ui-tailwind/review/tw-health-panel.tsx +0 -149
  343. package/src/ui-tailwind/review/tw-review-rail.tsx +0 -120
  344. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +0 -164
  345. package/src/ui-tailwind/status/tw-status-bar.tsx +0 -61
  346. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +0 -52
  347. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +0 -1064
  348. package/src/ui-tailwind/tw-review-workspace.tsx +0 -1417
  349. package/src/validation/README.md +0 -3
  350. package/src/validation/compatibility-engine.ts +0 -634
  351. package/src/validation/compatibility-report.ts +0 -161
  352. package/src/validation/diagnostics.ts +0 -204
  353. package/src/validation/docx-comment-proof.ts +0 -707
  354. package/src/validation/import-diagnostics.ts +0 -128
  355. package/src/validation/low-priority-word-surfaces.ts +0 -373
  356. /package/{src → dist}/ui-tailwind/theme/editor-theme.css +0 -0
@@ -1,567 +0,0 @@
1
- import {
2
- cellKey,
3
- makeFormulaCell,
4
- parseCellKey,
5
- type CachedFormulaValue,
6
- type CellValue,
7
- type StyleRef,
8
- } from "../model/cell.ts";
9
- import { setCell } from "../model/sheet.ts";
10
- import type { CanonicalSheet, ColProperties, MergeRange, RowProperties } from "../model/sheet.ts";
11
- import type { CanonicalWorkbook } from "../model/workbook.ts";
12
- import {
13
- cloneWorkbook,
14
- createEmptyWorkbookMapping,
15
- createWorkbookSelection,
16
- createWorkbookTransaction,
17
- extractFormulaReferenceTokens,
18
- getRequiredSheet,
19
- mapSelectionThroughMapping,
20
- mergeRangeToWorkbookRange,
21
- normalizeRange,
22
- normalizeWorkbookSelection,
23
- rangesIntersect,
24
- remapFormulasForMutation,
25
- type WorkbookRange,
26
- type WorkbookSelection,
27
- type WorkbookTransaction,
28
- } from "./workbook-transaction.ts";
29
-
30
- export type WorkbookCellCommand =
31
- | {
32
- type: "cell.set-value";
33
- sheetId: string;
34
- row: number;
35
- col: number;
36
- value: CellValue;
37
- }
38
- | {
39
- type: "cell.clear";
40
- sheetId: string;
41
- row: number;
42
- col: number;
43
- }
44
- | {
45
- type: "cell.set-formula";
46
- sheetId: string;
47
- row: number;
48
- col: number;
49
- formula: string;
50
- referenceTokens?: string[];
51
- cachedValue?: CachedFormulaValue;
52
- styleRef?: StyleRef;
53
- }
54
- | {
55
- type: "row.insert";
56
- sheetId: string;
57
- row: number;
58
- count?: number;
59
- }
60
- | {
61
- type: "row.delete";
62
- sheetId: string;
63
- row: number;
64
- count?: number;
65
- }
66
- | {
67
- type: "column.insert";
68
- sheetId: string;
69
- col: number;
70
- count?: number;
71
- }
72
- | {
73
- type: "column.delete";
74
- sheetId: string;
75
- col: number;
76
- count?: number;
77
- }
78
- | {
79
- type: "cells.merge";
80
- sheetId: string;
81
- range: WorkbookRange;
82
- }
83
- | {
84
- type: "cells.unmerge";
85
- sheetId: string;
86
- range: WorkbookRange;
87
- };
88
-
89
- export function applyCellCommand(
90
- workbook: CanonicalWorkbook,
91
- selection: WorkbookSelection,
92
- command: WorkbookCellCommand,
93
- ): WorkbookTransaction {
94
- const nextWorkbook = cloneWorkbook(workbook);
95
- const mapping = createEmptyWorkbookMapping();
96
-
97
- switch (command.type) {
98
- case "cell.set-value": {
99
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
100
- setCell(sheet, command.row, command.col, command.value);
101
- mapping.operations.push({
102
- type: "cell-set",
103
- sheetId: command.sheetId,
104
- row: command.row,
105
- col: command.col,
106
- });
107
- return createWorkbookTransaction(
108
- nextWorkbook,
109
- normalizeWorkbookSelection(
110
- nextWorkbook,
111
- createWorkbookSelection(command.sheetId, command.row, command.col),
112
- ),
113
- mapping,
114
- "cell.set-value",
115
- );
116
- }
117
- case "cell.clear": {
118
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
119
- setCell(sheet, command.row, command.col, undefined);
120
- mapping.operations.push({
121
- type: "cell-set",
122
- sheetId: command.sheetId,
123
- row: command.row,
124
- col: command.col,
125
- });
126
- return createWorkbookTransaction(
127
- nextWorkbook,
128
- normalizeWorkbookSelection(
129
- nextWorkbook,
130
- createWorkbookSelection(command.sheetId, command.row, command.col),
131
- ),
132
- mapping,
133
- "cell.clear",
134
- );
135
- }
136
- case "cell.set-formula": {
137
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
138
- const referenceTokens = command.referenceTokens ?? extractFormulaReferenceTokens(command.formula);
139
- setCell(
140
- sheet,
141
- command.row,
142
- command.col,
143
- makeFormulaCell(command.formula, command.cachedValue, command.styleRef, referenceTokens),
144
- );
145
- mapping.operations.push({
146
- type: "cell-set",
147
- sheetId: command.sheetId,
148
- row: command.row,
149
- col: command.col,
150
- });
151
- return createWorkbookTransaction(
152
- nextWorkbook,
153
- normalizeWorkbookSelection(
154
- nextWorkbook,
155
- createWorkbookSelection(command.sheetId, command.row, command.col),
156
- ),
157
- mapping,
158
- "cell.set-formula",
159
- );
160
- }
161
- case "row.insert": {
162
- const count = normalizeCount(command.count);
163
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
164
- shiftRows(sheet, command.row, count, "insert");
165
- mapping.operations.push({
166
- type: "row-insert",
167
- sheetId: command.sheetId,
168
- index: command.row,
169
- count,
170
- });
171
- remapFormulasForMutation(
172
- nextWorkbook,
173
- command.sheetId,
174
- { axis: "row", kind: "insert", index: command.row, count },
175
- mapping,
176
- );
177
- return createWorkbookTransaction(
178
- nextWorkbook,
179
- normalizeWorkbookSelection(
180
- nextWorkbook,
181
- mapSelectionThroughMapping(selection, mapping),
182
- ),
183
- mapping,
184
- "row.insert",
185
- );
186
- }
187
- case "row.delete": {
188
- const count = normalizeCount(command.count);
189
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
190
- shiftRows(sheet, command.row, count, "delete");
191
- mapping.operations.push({
192
- type: "row-delete",
193
- sheetId: command.sheetId,
194
- index: command.row,
195
- count,
196
- });
197
- remapFormulasForMutation(
198
- nextWorkbook,
199
- command.sheetId,
200
- { axis: "row", kind: "delete", index: command.row, count },
201
- mapping,
202
- );
203
- return createWorkbookTransaction(
204
- nextWorkbook,
205
- normalizeWorkbookSelection(
206
- nextWorkbook,
207
- mapSelectionThroughMapping(selection, mapping),
208
- ),
209
- mapping,
210
- "row.delete",
211
- );
212
- }
213
- case "column.insert": {
214
- const count = normalizeCount(command.count);
215
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
216
- shiftColumns(sheet, command.col, count, "insert");
217
- mapping.operations.push({
218
- type: "column-insert",
219
- sheetId: command.sheetId,
220
- index: command.col,
221
- count,
222
- });
223
- remapFormulasForMutation(
224
- nextWorkbook,
225
- command.sheetId,
226
- { axis: "col", kind: "insert", index: command.col, count },
227
- mapping,
228
- );
229
- return createWorkbookTransaction(
230
- nextWorkbook,
231
- normalizeWorkbookSelection(
232
- nextWorkbook,
233
- mapSelectionThroughMapping(selection, mapping),
234
- ),
235
- mapping,
236
- "column.insert",
237
- );
238
- }
239
- case "column.delete": {
240
- const count = normalizeCount(command.count);
241
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
242
- shiftColumns(sheet, command.col, count, "delete");
243
- mapping.operations.push({
244
- type: "column-delete",
245
- sheetId: command.sheetId,
246
- index: command.col,
247
- count,
248
- });
249
- remapFormulasForMutation(
250
- nextWorkbook,
251
- command.sheetId,
252
- { axis: "col", kind: "delete", index: command.col, count },
253
- mapping,
254
- );
255
- return createWorkbookTransaction(
256
- nextWorkbook,
257
- normalizeWorkbookSelection(
258
- nextWorkbook,
259
- mapSelectionThroughMapping(selection, mapping),
260
- ),
261
- mapping,
262
- "column.delete",
263
- );
264
- }
265
- case "cells.merge": {
266
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
267
- const range = normalizeRange(command.range);
268
- assertNonIntersectingMerge(sheet, range);
269
- clearMergedInteriorCells(sheet, range);
270
- sheet.merges = [
271
- ...sheet.merges,
272
- {
273
- startRow: range.startRow,
274
- startCol: range.startCol,
275
- endRow: range.endRow,
276
- endCol: range.endCol,
277
- },
278
- ];
279
- mapping.operations.push({
280
- type: "merge-add",
281
- sheetId: command.sheetId,
282
- range,
283
- });
284
- return createWorkbookTransaction(
285
- nextWorkbook,
286
- normalizeWorkbookSelection(nextWorkbook, {
287
- mode: "cell",
288
- sheetId: command.sheetId,
289
- activeCell: { row: range.startRow, col: range.startCol },
290
- range,
291
- }),
292
- mapping,
293
- "cells.merge",
294
- );
295
- }
296
- case "cells.unmerge": {
297
- const sheet = getRequiredSheet(nextWorkbook, command.sheetId);
298
- const range = normalizeRange(command.range);
299
- const removed = sheet.merges.filter((merge) => rangesIntersect(range, mergeRangeToWorkbookRange(merge)));
300
- sheet.merges = sheet.merges.filter((merge) => !rangesIntersect(range, mergeRangeToWorkbookRange(merge)));
301
- for (const merge of removed) {
302
- mapping.operations.push({
303
- type: "merge-remove",
304
- sheetId: command.sheetId,
305
- range: mergeRangeToWorkbookRange(merge),
306
- });
307
- }
308
- return createWorkbookTransaction(
309
- nextWorkbook,
310
- normalizeWorkbookSelection(nextWorkbook, {
311
- mode: "cell",
312
- sheetId: command.sheetId,
313
- activeCell: { row: range.startRow, col: range.startCol },
314
- range,
315
- }),
316
- mapping,
317
- "cells.unmerge",
318
- );
319
- }
320
- }
321
- }
322
-
323
- function normalizeCount(value: number | undefined): number {
324
- const next = Math.floor(value ?? 1);
325
- return Number.isFinite(next) && next > 0 ? next : 1;
326
- }
327
-
328
- function shiftRows(
329
- sheet: CanonicalSheet,
330
- row: number,
331
- count: number,
332
- mode: "insert" | "delete",
333
- ): void {
334
- const nextCells = new Map<string, CellValue>();
335
- for (const [key, value] of sheet.cells) {
336
- const address = parseCellKey(key);
337
- const nextRow = mode === "insert"
338
- ? remapInsertedIndex(address.row, row, count)
339
- : remapDeletedIndex(address.row, row, count);
340
- if (nextRow === null) {
341
- continue;
342
- }
343
- nextCells.set(cellKey(nextRow, address.col), value);
344
- }
345
- sheet.cells = nextCells;
346
-
347
- const nextRowProps = new Map<number, RowProperties>();
348
- for (const [rowIndex, props] of sheet.rowProps) {
349
- const nextRow = mode === "insert"
350
- ? remapInsertedIndex(rowIndex, row, count)
351
- : remapDeletedIndex(rowIndex, row, count);
352
- if (nextRow === null) {
353
- continue;
354
- }
355
- nextRowProps.set(nextRow, {
356
- ...props,
357
- rowIndex: nextRow,
358
- });
359
- }
360
- sheet.rowProps = nextRowProps;
361
- sheet.merges = sheet.merges
362
- .map((merge) => remapMergeRows(merge, row, count, mode))
363
- .filter((merge): merge is MergeRange => merge !== null);
364
-
365
- if (sheet.paneState && row <= sheet.paneState.frozenRows) {
366
- sheet.paneState = {
367
- ...sheet.paneState,
368
- frozenRows: mode === "insert"
369
- ? sheet.paneState.frozenRows + count
370
- : Math.max(0, sheet.paneState.frozenRows - countWithin(sheet.paneState.frozenRows, row, count)),
371
- };
372
- }
373
- }
374
-
375
- function shiftColumns(
376
- sheet: CanonicalSheet,
377
- col: number,
378
- count: number,
379
- mode: "insert" | "delete",
380
- ): void {
381
- const nextCells = new Map<string, CellValue>();
382
- for (const [key, value] of sheet.cells) {
383
- const address = parseCellKey(key);
384
- const nextCol = mode === "insert"
385
- ? remapInsertedIndex(address.col, col, count)
386
- : remapDeletedIndex(address.col, col, count);
387
- if (nextCol === null) {
388
- continue;
389
- }
390
- nextCells.set(cellKey(address.row, nextCol), value);
391
- }
392
- sheet.cells = nextCells;
393
-
394
- const nextColProps = new Map<number, ColProperties>();
395
- for (const [colIndex, props] of sheet.colProps) {
396
- const nextCol = mode === "insert"
397
- ? remapInsertedIndex(colIndex, col, count)
398
- : remapDeletedIndex(colIndex, col, count);
399
- if (nextCol === null) {
400
- continue;
401
- }
402
- nextColProps.set(nextCol, {
403
- ...props,
404
- colIndex: nextCol,
405
- });
406
- }
407
- sheet.colProps = nextColProps;
408
- sheet.merges = sheet.merges
409
- .map((merge) => remapMergeColumns(merge, col, count, mode))
410
- .filter((merge): merge is MergeRange => merge !== null);
411
-
412
- if (sheet.paneState && col <= sheet.paneState.frozenCols) {
413
- sheet.paneState = {
414
- ...sheet.paneState,
415
- frozenCols: mode === "insert"
416
- ? sheet.paneState.frozenCols + count
417
- : Math.max(0, sheet.paneState.frozenCols - countWithin(sheet.paneState.frozenCols, col, count)),
418
- };
419
- }
420
- }
421
-
422
- function remapInsertedIndex(value: number, index: number, count: number): number {
423
- return value >= index ? value + count : value;
424
- }
425
-
426
- function remapDeletedIndex(value: number, index: number, count: number): number | null {
427
- const deleteEnd = index + count - 1;
428
- if (value < index) {
429
- return value;
430
- }
431
- if (value <= deleteEnd) {
432
- return null;
433
- }
434
- return value - count;
435
- }
436
-
437
- function remapMergeRows(
438
- merge: MergeRange,
439
- row: number,
440
- count: number,
441
- mode: "insert" | "delete",
442
- ): MergeRange | null {
443
- if (mode === "insert") {
444
- if (row <= merge.startRow) {
445
- return {
446
- ...merge,
447
- startRow: merge.startRow + count,
448
- endRow: merge.endRow + count,
449
- };
450
- }
451
- if (row <= merge.endRow) {
452
- return {
453
- ...merge,
454
- endRow: merge.endRow + count,
455
- };
456
- }
457
- return merge;
458
- }
459
-
460
- const rowInterval = remapDeletedInterval(merge.startRow, merge.endRow, row, count);
461
- if (!rowInterval) {
462
- return null;
463
- }
464
- return {
465
- ...merge,
466
- startRow: rowInterval.start,
467
- endRow: rowInterval.end,
468
- };
469
- }
470
-
471
- function remapMergeColumns(
472
- merge: MergeRange,
473
- col: number,
474
- count: number,
475
- mode: "insert" | "delete",
476
- ): MergeRange | null {
477
- if (mode === "insert") {
478
- if (col <= merge.startCol) {
479
- return {
480
- ...merge,
481
- startCol: merge.startCol + count,
482
- endCol: merge.endCol + count,
483
- };
484
- }
485
- if (col <= merge.endCol) {
486
- return {
487
- ...merge,
488
- endCol: merge.endCol + count,
489
- };
490
- }
491
- return merge;
492
- }
493
-
494
- const colInterval = remapDeletedInterval(merge.startCol, merge.endCol, col, count);
495
- if (!colInterval) {
496
- return null;
497
- }
498
- return {
499
- ...merge,
500
- startCol: colInterval.start,
501
- endCol: colInterval.end,
502
- };
503
- }
504
-
505
- function remapDeletedInterval(
506
- start: number,
507
- end: number,
508
- index: number,
509
- count: number,
510
- ): { start: number; end: number } | null {
511
- const deleteEnd = index + count - 1;
512
- const overlapStart = Math.max(start, index);
513
- const overlapEnd = Math.min(end, deleteEnd);
514
- if (overlapStart <= overlapEnd && overlapEnd - overlapStart + 1 >= end - start + 1) {
515
- return null;
516
- }
517
-
518
- let nextStart = start;
519
- let nextEnd = end;
520
- if (start >= index && start <= deleteEnd) {
521
- nextStart = index;
522
- } else if (start > deleteEnd) {
523
- nextStart = start - count;
524
- }
525
-
526
- if (end >= index && end <= deleteEnd) {
527
- nextEnd = index - 1;
528
- } else if (end > deleteEnd) {
529
- nextEnd = end - count;
530
- }
531
-
532
- if (nextEnd < nextStart) {
533
- nextEnd = nextStart;
534
- }
535
-
536
- return { start: nextStart, end: nextEnd };
537
- }
538
-
539
- function countWithin(value: number, index: number, count: number): number {
540
- const deleteEnd = index + count - 1;
541
- if (value < index) {
542
- return 0;
543
- }
544
- if (value <= deleteEnd) {
545
- return value - index + 1;
546
- }
547
- return count;
548
- }
549
-
550
- function assertNonIntersectingMerge(sheet: CanonicalSheet, range: WorkbookRange): void {
551
- for (const merge of sheet.merges) {
552
- if (rangesIntersect(range, mergeRangeToWorkbookRange(merge))) {
553
- throw new Error("Cannot create an overlapping merge range.");
554
- }
555
- }
556
- }
557
-
558
- function clearMergedInteriorCells(sheet: CanonicalSheet, range: WorkbookRange): void {
559
- for (let row = range.startRow; row <= range.endRow; row += 1) {
560
- for (let col = range.startCol; col <= range.endCol; col += 1) {
561
- if (row === range.startRow && col === range.startCol) {
562
- continue;
563
- }
564
- setCell(sheet, row, col, undefined);
565
- }
566
- }
567
- }