@rowsncolumns/spreadsheet 10.6.4 → 10.7.0

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 (308) hide show
  1. package/dist/cjs/api/autocomplete.d.ts +42 -0
  2. package/dist/cjs/api/autocomplete.d.ts.map +1 -0
  3. package/dist/cjs/api/autocomplete.js +114 -0
  4. package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
  5. package/dist/cjs/api/banded-ranges.js +51 -1
  6. package/dist/cjs/api/error-checking.d.ts +82 -0
  7. package/dist/cjs/api/error-checking.d.ts.map +1 -0
  8. package/dist/cjs/api/error-checking.js +207 -0
  9. package/dist/cjs/api/move-overwrite.d.ts +8 -2
  10. package/dist/cjs/api/move-overwrite.d.ts.map +1 -1
  11. package/dist/cjs/api/move-overwrite.js +19 -3
  12. package/dist/cjs/api/selections.d.ts +2 -2
  13. package/dist/cjs/api/validation.d.ts +39 -1
  14. package/dist/cjs/api/validation.d.ts.map +1 -1
  15. package/dist/cjs/api/validation.js +87 -1
  16. package/dist/cjs/atoms/cell-input-context.atom.d.ts +4 -1
  17. package/dist/cjs/atoms/cell-input-context.atom.d.ts.map +1 -1
  18. package/dist/cjs/atoms/enter-key-direction.atom.d.ts +11 -0
  19. package/dist/cjs/atoms/enter-key-direction.atom.d.ts.map +1 -0
  20. package/dist/cjs/atoms/enter-key-direction.atom.js +13 -0
  21. package/dist/cjs/atoms/index.d.ts +1 -0
  22. package/dist/cjs/atoms/index.d.ts.map +1 -1
  23. package/dist/cjs/atoms/index.js +1 -0
  24. package/dist/cjs/atoms/paste-menu.atom.d.ts +22 -0
  25. package/dist/cjs/atoms/paste-menu.atom.d.ts.map +1 -1
  26. package/dist/cjs/atoms/paste-menu.atom.js +13 -1
  27. package/dist/cjs/atoms/pick-list.atom.d.ts +15 -0
  28. package/dist/cjs/atoms/pick-list.atom.d.ts.map +1 -0
  29. package/dist/cjs/atoms/pick-list.atom.js +7 -0
  30. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  31. package/dist/cjs/components/canvas-grid/index.js +305 -70
  32. package/dist/cjs/components/canvas-grid/typings.d.ts +96 -11
  33. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  34. package/dist/cjs/components/cell/alignment.d.ts +25 -0
  35. package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
  36. package/dist/cjs/components/cell/alignment.js +39 -1
  37. package/dist/cjs/components/cell/cell-background.d.ts +16 -0
  38. package/dist/cjs/components/cell/cell-background.d.ts.map +1 -1
  39. package/dist/cjs/components/cell/cell-background.js +141 -54
  40. package/dist/cjs/components/cell/cell-text-runs.d.ts +12 -5
  41. package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
  42. package/dist/cjs/components/cell/cell-text-runs.js +18 -20
  43. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  44. package/dist/cjs/components/cell/index.js +26 -21
  45. package/dist/cjs/components/cell/typings.d.ts +9 -0
  46. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  47. package/dist/cjs/components/cell-editor/helpers.d.ts +22 -2
  48. package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
  49. package/dist/cjs/components/cell-editor/helpers.js +32 -8
  50. package/dist/cjs/components/cell-editor/index.d.ts +7 -1
  51. package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
  52. package/dist/cjs/components/cell-editor/index.js +85 -13
  53. package/dist/cjs/components/cell-indicator/index.d.ts +41 -0
  54. package/dist/cjs/components/cell-indicator/index.d.ts.map +1 -0
  55. package/dist/cjs/components/cell-indicator/index.js +90 -0
  56. package/dist/cjs/components/cell-input/cell-input.d.ts +10 -2
  57. package/dist/cjs/components/cell-input/cell-input.d.ts.map +1 -1
  58. package/dist/cjs/components/cell-input/cell-input.js +5 -3
  59. package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  60. package/dist/cjs/components/cell-input/formula-bar-cell-input.js +9 -2
  61. package/dist/cjs/components/cell-structured/sparkline-math.d.ts +27 -1
  62. package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
  63. package/dist/cjs/components/cell-structured/sparkline-math.js +48 -1
  64. package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
  65. package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
  66. package/dist/cjs/components/cell-structured/sparkline.js +36 -92
  67. package/dist/cjs/components/cell-structured/types.d.ts +6 -0
  68. package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
  69. package/dist/cjs/components/data-table-dialog/index.d.ts +22 -0
  70. package/dist/cjs/components/data-table-dialog/index.d.ts.map +1 -0
  71. package/dist/cjs/components/data-table-dialog/index.js +93 -0
  72. package/dist/cjs/components/error-check-smart-tag/index.d.ts +27 -0
  73. package/dist/cjs/components/error-check-smart-tag/index.d.ts.map +1 -0
  74. package/dist/cjs/components/error-check-smart-tag/index.js +39 -0
  75. package/dist/cjs/components/forecast-sheet-dialog/index.d.ts +26 -0
  76. package/dist/cjs/components/forecast-sheet-dialog/index.d.ts.map +1 -0
  77. package/dist/cjs/components/forecast-sheet-dialog/index.js +92 -0
  78. package/dist/cjs/components/paste-special-dialog/index.d.ts +3 -3
  79. package/dist/cjs/components/paste-special-dialog/index.d.ts.map +1 -1
  80. package/dist/cjs/components/paste-special-dialog/index.js +61 -23
  81. package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
  82. package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
  83. package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +196 -0
  84. package/dist/cjs/components/protect-sheet-dialog/constants.d.ts +3 -0
  85. package/dist/cjs/components/protect-sheet-dialog/constants.d.ts.map +1 -0
  86. package/dist/cjs/components/protect-sheet-dialog/constants.js +5 -0
  87. package/dist/cjs/components/protect-sheet-dialog/index.d.ts +2 -2
  88. package/dist/cjs/components/protect-sheet-dialog/index.d.ts.map +1 -1
  89. package/dist/cjs/components/protect-sheet-dialog/index.js +5 -3
  90. package/dist/cjs/components/scenario-manager-dialog/index.d.ts +51 -0
  91. package/dist/cjs/components/scenario-manager-dialog/index.d.ts.map +1 -0
  92. package/dist/cjs/components/scenario-manager-dialog/index.js +257 -0
  93. package/dist/cjs/components/selection/index.d.ts +1 -1
  94. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  95. package/dist/cjs/components/selection/index.js +9 -4
  96. package/dist/cjs/components/selection/paste-menu.d.ts +14 -1
  97. package/dist/cjs/components/selection/paste-menu.d.ts.map +1 -1
  98. package/dist/cjs/components/selection/paste-menu.js +78 -6
  99. package/dist/cjs/components/selection/paste-options.d.ts +28 -0
  100. package/dist/cjs/components/selection/paste-options.d.ts.map +1 -0
  101. package/dist/cjs/components/selection/paste-options.js +70 -0
  102. package/dist/cjs/components/selection/types.d.ts +12 -1
  103. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  104. package/dist/cjs/components/selection-drop-menu/index.d.ts +18 -0
  105. package/dist/cjs/components/selection-drop-menu/index.d.ts.map +1 -0
  106. package/dist/cjs/components/selection-drop-menu/index.js +62 -0
  107. package/dist/cjs/components/solver-dialog/index.d.ts +57 -0
  108. package/dist/cjs/components/solver-dialog/index.d.ts.map +1 -0
  109. package/dist/cjs/components/solver-dialog/index.js +204 -0
  110. package/dist/cjs/components/toolbar/sparkline-actions.d.ts +3 -2
  111. package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -1
  112. package/dist/cjs/components/toolbar/sparkline-actions.js +6 -2
  113. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  114. package/dist/cjs/components/toolbar/table-style-selector.js +33 -2
  115. package/dist/cjs/config.d.ts +5 -4
  116. package/dist/cjs/config.d.ts.map +1 -1
  117. package/dist/cjs/config.js +13 -9
  118. package/dist/cjs/helpers.d.ts +5 -0
  119. package/dist/cjs/helpers.d.ts.map +1 -1
  120. package/dist/cjs/helpers.js +8 -4
  121. package/dist/cjs/hooks/use-cell-renderer.d.ts +12 -1
  122. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  123. package/dist/cjs/hooks/use-cell-renderer.js +6 -3
  124. package/dist/cjs/hooks/use-copy-paste-cut.d.ts +36 -2
  125. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  126. package/dist/cjs/hooks/use-copy-paste-cut.js +131 -5
  127. package/dist/cjs/hooks/use-editable.d.ts +6 -0
  128. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  129. package/dist/cjs/hooks/use-editor-submit.d.ts +45 -3
  130. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  131. package/dist/cjs/hooks/use-editor-submit.js +91 -7
  132. package/dist/cjs/hooks/use-keyboard-handler.d.ts +5 -1
  133. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  134. package/dist/cjs/hooks/use-keyboard-handler.js +10 -1
  135. package/dist/cjs/hooks/use-selection-drag-copy.d.ts +55 -0
  136. package/dist/cjs/hooks/use-selection-drag-copy.d.ts.map +1 -0
  137. package/dist/cjs/hooks/use-selection-drag-copy.js +274 -0
  138. package/dist/cjs/hooks/use-selection-renderer.d.ts +8 -1
  139. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  140. package/dist/cjs/hooks/use-selection-renderer.js +7 -2
  141. package/dist/cjs/hooks/use-selection.d.ts +59 -1
  142. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  143. package/dist/cjs/hooks/use-selection.js +270 -61
  144. package/dist/cjs/index.d.ts +6 -1
  145. package/dist/cjs/index.d.ts.map +1 -1
  146. package/dist/cjs/index.js +5 -0
  147. package/dist/cjs/release-date.js +1 -1
  148. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  149. package/dist/cjs/types.d.ts +50 -1
  150. package/dist/cjs/types.d.ts.map +1 -1
  151. package/dist/esm/api/autocomplete.d.ts +42 -0
  152. package/dist/esm/api/autocomplete.d.ts.map +1 -0
  153. package/dist/esm/api/autocomplete.js +91 -0
  154. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  155. package/dist/esm/api/banded-ranges.js +52 -2
  156. package/dist/esm/api/error-checking.d.ts +82 -0
  157. package/dist/esm/api/error-checking.d.ts.map +1 -0
  158. package/dist/esm/api/error-checking.js +156 -0
  159. package/dist/esm/api/move-overwrite.d.ts +8 -2
  160. package/dist/esm/api/move-overwrite.d.ts.map +1 -1
  161. package/dist/esm/api/move-overwrite.js +17 -2
  162. package/dist/esm/api/selections.d.ts +2 -2
  163. package/dist/esm/api/validation.d.ts +39 -1
  164. package/dist/esm/api/validation.d.ts.map +1 -1
  165. package/dist/esm/api/validation.js +70 -0
  166. package/dist/esm/atoms/cell-input-context.atom.d.ts +4 -1
  167. package/dist/esm/atoms/cell-input-context.atom.d.ts.map +1 -1
  168. package/dist/esm/atoms/enter-key-direction.atom.d.ts +11 -0
  169. package/dist/esm/atoms/enter-key-direction.atom.d.ts.map +1 -0
  170. package/dist/esm/atoms/enter-key-direction.atom.js +8 -0
  171. package/dist/esm/atoms/index.d.ts +1 -0
  172. package/dist/esm/atoms/index.d.ts.map +1 -1
  173. package/dist/esm/atoms/index.js +1 -0
  174. package/dist/esm/atoms/paste-menu.atom.d.ts +22 -0
  175. package/dist/esm/atoms/paste-menu.atom.d.ts.map +1 -1
  176. package/dist/esm/atoms/paste-menu.atom.js +10 -1
  177. package/dist/esm/atoms/pick-list.atom.d.ts +15 -0
  178. package/dist/esm/atoms/pick-list.atom.d.ts.map +1 -0
  179. package/dist/esm/atoms/pick-list.atom.js +3 -0
  180. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  181. package/dist/esm/components/canvas-grid/index.js +239 -13
  182. package/dist/esm/components/canvas-grid/typings.d.ts +96 -11
  183. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  184. package/dist/esm/components/cell/alignment.d.ts +25 -0
  185. package/dist/esm/components/cell/alignment.d.ts.map +1 -1
  186. package/dist/esm/components/cell/alignment.js +33 -0
  187. package/dist/esm/components/cell/cell-background.d.ts +16 -0
  188. package/dist/esm/components/cell/cell-background.d.ts.map +1 -1
  189. package/dist/esm/components/cell/cell-background.js +106 -36
  190. package/dist/esm/components/cell/cell-text-runs.d.ts +12 -5
  191. package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
  192. package/dist/esm/components/cell/cell-text-runs.js +17 -22
  193. package/dist/esm/components/cell/index.d.ts.map +1 -1
  194. package/dist/esm/components/cell/index.js +25 -20
  195. package/dist/esm/components/cell/typings.d.ts +9 -0
  196. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  197. package/dist/esm/components/cell-editor/helpers.d.ts +22 -2
  198. package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
  199. package/dist/esm/components/cell-editor/helpers.js +25 -7
  200. package/dist/esm/components/cell-editor/index.d.ts +7 -1
  201. package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
  202. package/dist/esm/components/cell-editor/index.js +80 -9
  203. package/dist/esm/components/cell-indicator/index.d.ts +41 -0
  204. package/dist/esm/components/cell-indicator/index.d.ts.map +1 -0
  205. package/dist/esm/components/cell-indicator/index.js +76 -0
  206. package/dist/esm/components/cell-input/cell-input.d.ts +10 -2
  207. package/dist/esm/components/cell-input/cell-input.d.ts.map +1 -1
  208. package/dist/esm/components/cell-input/cell-input.js +5 -3
  209. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  210. package/dist/esm/components/cell-input/formula-bar-cell-input.js +9 -2
  211. package/dist/esm/components/cell-structured/sparkline-math.d.ts +27 -1
  212. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  213. package/dist/esm/components/cell-structured/sparkline-math.js +35 -0
  214. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  215. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  216. package/dist/esm/components/cell-structured/sparkline.js +34 -88
  217. package/dist/esm/components/cell-structured/types.d.ts +6 -0
  218. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  219. package/dist/esm/components/data-table-dialog/index.d.ts +22 -0
  220. package/dist/esm/components/data-table-dialog/index.d.ts.map +1 -0
  221. package/dist/esm/components/data-table-dialog/index.js +75 -0
  222. package/dist/esm/components/error-check-smart-tag/index.d.ts +27 -0
  223. package/dist/esm/components/error-check-smart-tag/index.d.ts.map +1 -0
  224. package/dist/esm/components/error-check-smart-tag/index.js +33 -0
  225. package/dist/esm/components/forecast-sheet-dialog/index.d.ts +26 -0
  226. package/dist/esm/components/forecast-sheet-dialog/index.d.ts.map +1 -0
  227. package/dist/esm/components/forecast-sheet-dialog/index.js +83 -0
  228. package/dist/esm/components/paste-special-dialog/index.d.ts +3 -3
  229. package/dist/esm/components/paste-special-dialog/index.d.ts.map +1 -1
  230. package/dist/esm/components/paste-special-dialog/index.js +58 -23
  231. package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
  232. package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
  233. package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +177 -0
  234. package/dist/esm/components/protect-sheet-dialog/constants.d.ts +3 -0
  235. package/dist/esm/components/protect-sheet-dialog/constants.d.ts.map +1 -0
  236. package/dist/esm/components/protect-sheet-dialog/constants.js +2 -0
  237. package/dist/esm/components/protect-sheet-dialog/index.d.ts +2 -2
  238. package/dist/esm/components/protect-sheet-dialog/index.d.ts.map +1 -1
  239. package/dist/esm/components/protect-sheet-dialog/index.js +3 -2
  240. package/dist/esm/components/scenario-manager-dialog/index.d.ts +51 -0
  241. package/dist/esm/components/scenario-manager-dialog/index.d.ts.map +1 -0
  242. package/dist/esm/components/scenario-manager-dialog/index.js +213 -0
  243. package/dist/esm/components/selection/index.d.ts +1 -1
  244. package/dist/esm/components/selection/index.d.ts.map +1 -1
  245. package/dist/esm/components/selection/index.js +9 -4
  246. package/dist/esm/components/selection/paste-menu.d.ts +14 -1
  247. package/dist/esm/components/selection/paste-menu.d.ts.map +1 -1
  248. package/dist/esm/components/selection/paste-menu.js +76 -8
  249. package/dist/esm/components/selection/paste-options.d.ts +28 -0
  250. package/dist/esm/components/selection/paste-options.d.ts.map +1 -0
  251. package/dist/esm/components/selection/paste-options.js +62 -0
  252. package/dist/esm/components/selection/types.d.ts +12 -1
  253. package/dist/esm/components/selection/types.d.ts.map +1 -1
  254. package/dist/esm/components/selection-drop-menu/index.d.ts +18 -0
  255. package/dist/esm/components/selection-drop-menu/index.d.ts.map +1 -0
  256. package/dist/esm/components/selection-drop-menu/index.js +56 -0
  257. package/dist/esm/components/solver-dialog/index.d.ts +57 -0
  258. package/dist/esm/components/solver-dialog/index.d.ts.map +1 -0
  259. package/dist/esm/components/solver-dialog/index.js +176 -0
  260. package/dist/esm/components/toolbar/sparkline-actions.d.ts +3 -2
  261. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -1
  262. package/dist/esm/components/toolbar/sparkline-actions.js +6 -2
  263. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  264. package/dist/esm/components/toolbar/table-style-selector.js +29 -3
  265. package/dist/esm/config.d.ts +5 -4
  266. package/dist/esm/config.d.ts.map +1 -1
  267. package/dist/esm/config.js +12 -8
  268. package/dist/esm/helpers.d.ts +5 -0
  269. package/dist/esm/helpers.d.ts.map +1 -1
  270. package/dist/esm/helpers.js +8 -4
  271. package/dist/esm/hooks/use-cell-renderer.d.ts +12 -1
  272. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  273. package/dist/esm/hooks/use-cell-renderer.js +5 -2
  274. package/dist/esm/hooks/use-copy-paste-cut.d.ts +36 -2
  275. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  276. package/dist/esm/hooks/use-copy-paste-cut.js +117 -6
  277. package/dist/esm/hooks/use-editable.d.ts +6 -0
  278. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  279. package/dist/esm/hooks/use-editor-submit.d.ts +45 -3
  280. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  281. package/dist/esm/hooks/use-editor-submit.js +81 -6
  282. package/dist/esm/hooks/use-keyboard-handler.d.ts +5 -1
  283. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  284. package/dist/esm/hooks/use-keyboard-handler.js +10 -1
  285. package/dist/esm/hooks/use-selection-drag-copy.d.ts +55 -0
  286. package/dist/esm/hooks/use-selection-drag-copy.d.ts.map +1 -0
  287. package/dist/esm/hooks/use-selection-drag-copy.js +245 -0
  288. package/dist/esm/hooks/use-selection-renderer.d.ts +8 -1
  289. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  290. package/dist/esm/hooks/use-selection-renderer.js +7 -2
  291. package/dist/esm/hooks/use-selection.d.ts +59 -1
  292. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  293. package/dist/esm/hooks/use-selection.js +245 -52
  294. package/dist/esm/index.d.ts +6 -1
  295. package/dist/esm/index.d.ts.map +1 -1
  296. package/dist/esm/index.js +5 -0
  297. package/dist/esm/release-date.js +1 -1
  298. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  299. package/dist/esm/types.d.ts +50 -1
  300. package/dist/esm/types.d.ts.map +1 -1
  301. package/dist/spreadsheet.min.css +1 -1
  302. package/package.json +6 -5
  303. package/dist/cjs/components/cell-error/index.d.ts +0 -14
  304. package/dist/cjs/components/cell-error/index.d.ts.map +0 -1
  305. package/dist/cjs/components/cell-error/index.js +0 -24
  306. package/dist/esm/components/cell-error/index.d.ts +0 -14
  307. package/dist/esm/components/cell-error/index.d.ts.map +0 -1
  308. package/dist/esm/components/cell-error/index.js +0 -18
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useEditorSubmit = exports.planEntryFill = exports.entryValueForCell = void 0;
3
+ exports.useEditorSubmit = exports.entryTurnsOnWrap = exports.planArrayFormulaRange = exports.planEntryFill = exports.entryValueForCell = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var utils_1 = require("@rowsncolumns/utils");
6
6
  var react_1 = require("react");
@@ -93,8 +93,54 @@ var planEntryFill = function (value, activeCell, selections) {
93
93
  return writes;
94
94
  };
95
95
  exports.planEntryFill = planEntryFill;
96
+ var rangeContains = function (range, cell) {
97
+ return cell.rowIndex >= range.startRowIndex &&
98
+ cell.rowIndex <= range.endRowIndex &&
99
+ cell.columnIndex >= range.startColumnIndex &&
100
+ cell.columnIndex <= range.endColumnIndex;
101
+ };
102
+ /**
103
+ * The range a Ctrl+Shift+Enter commit at `activeCell` enters its array over (Excel): the selection
104
+ * holding the active cell; with nothing but the active cell selected, the CSE array it already
105
+ * belongs to (`existing` — editing any cell of an array and pressing Ctrl+Shift+Enter re-enters
106
+ * the whole array), else the active cell alone.
107
+ */
108
+ var planArrayFormulaRange = function (activeCell, selections, existing) {
109
+ var _a;
110
+ var selected = (_a = selections.find(function (s) { return rangeContains(s.range, activeCell); })) === null || _a === void 0 ? void 0 : _a.range;
111
+ if (selected &&
112
+ (selected.startRowIndex !== selected.endRowIndex ||
113
+ selected.startColumnIndex !== selected.endColumnIndex)) {
114
+ return selected;
115
+ }
116
+ if (existing && rangeContains(existing, activeCell)) {
117
+ return existing;
118
+ }
119
+ return {
120
+ startRowIndex: activeCell.rowIndex,
121
+ endRowIndex: activeCell.rowIndex,
122
+ startColumnIndex: activeCell.columnIndex,
123
+ endColumnIndex: activeCell.columnIndex,
124
+ };
125
+ };
126
+ exports.planArrayFormulaRange = planArrayFormulaRange;
127
+ /**
128
+ * Whether committing `value` turns Wrap Text on (Excel: an entry typed with a line break, Alt+Enter /
129
+ * ⌥Return, shows every line — "Start a new line of text inside a cell", support.microsoft.com). A
130
+ * formula's text breaks are its own, an unchanged entry is not a new one, and a cell that wraps
131
+ * already keeps its format.
132
+ */
133
+ var entryTurnsOnWrap = function (_a) {
134
+ var value = _a.value, previousValue = _a.previousValue, format = _a.format;
135
+ return typeof value === "string" &&
136
+ !value.startsWith("=") &&
137
+ value.includes("\n") &&
138
+ value !== previousValue &&
139
+ (format === null || format === void 0 ? void 0 : format.wrapStrategy) !== "wrap";
140
+ };
141
+ exports.entryTurnsOnWrap = entryTurnsOnWrap;
96
142
  var useEditorSubmit = function (_a) {
97
- var sheetId = _a.sheetId, onChangeActiveSheet = _a.onChangeActiveSheet, setActiveCell = _a.setActiveCell, onChange = _a.onChange, onComplete = _a.onComplete, getCommitValidation = _a.getCommitValidation, showValidationAlert = _a.showValidationAlert, selections = _a.selections, onChangeBatch = _a.onChangeBatch, batchHistory = _a.batchHistory, formulaLocale = _a.formulaLocale;
143
+ var sheetId = _a.sheetId, onChangeActiveSheet = _a.onChangeActiveSheet, setActiveCell = _a.setActiveCell, onChange = _a.onChange, onComplete = _a.onComplete, getCommitValidation = _a.getCommitValidation, showValidationAlert = _a.showValidationAlert, selections = _a.selections, onChangeBatch = _a.onChangeBatch, batchHistory = _a.batchHistory, formulaLocale = _a.formulaLocale, onChangeArrayFormula = _a.onChangeArrayFormula, getArrayFormula = _a.getArrayFormula, getEffectiveFormat = _a.getEffectiveFormat, onChangeFormatting = _a.onChangeFormatting, autoCorrect = _a.autoCorrect;
98
144
  var _b = tslib_1.__read((0, formula_mode_atom_1.useFormulaMode)(), 2), formulaMode = _b[0], setFormulaMode = _b[1];
99
145
  var _c = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), _ = _c[0], setEditingCellCoordinate = _c[1];
100
146
  var setActiveEditor = (0, atoms_1.useSetActiveEditor)();
@@ -117,6 +163,17 @@ var useEditorSubmit = function (_a) {
117
163
  if (typeof previousValue === "string") {
118
164
  previousValue = (0, utils_1.canonicalizeCellInput)(previousValue, formulaLocale);
119
165
  }
166
+ /* AutoCorrect a new text entry; an entry whose runs index into it keeps its length */
167
+ if (autoCorrect &&
168
+ !formulaMode &&
169
+ typeof value === "string" &&
170
+ value !== previousValue) {
171
+ value = (0, utils_1.applyAutoCorrect)({
172
+ text: value,
173
+ options: autoCorrect,
174
+ lengthPreserving: Boolean(textFormatRuns === null || textFormatRuns === void 0 ? void 0 : textFormatRuns.length),
175
+ });
176
+ }
120
177
  resetEditorState = function () {
121
178
  setEditingCellCoordinate(undefined);
122
179
  setActiveEditor(undefined);
@@ -124,24 +181,41 @@ var useEditorSubmit = function (_a) {
124
181
  onComplete === null || onComplete === void 0 ? void 0 : onComplete();
125
182
  };
126
183
  commit = function () {
127
- var _a;
184
+ var _a, _b, _c;
128
185
  var writeActiveCell = function () {
129
186
  return onChange === null || onChange === void 0 ? void 0 : onChange(editingSheetId, activeCell, value, textFormatRuns, previousValue, isDirty);
130
187
  };
188
+ // Ctrl+Shift+Enter on a formula: ONE legacy array over the selection (or the array being
189
+ // re-entered) — the engine writes and fits every cell of it, so nothing else is written.
190
+ var arrayFormula = (options === null || options === void 0 ? void 0 : options.arrayFormula) && onChangeArrayFormula && isFormulaEntry(value);
131
191
  // Ctrl+Enter: the same entry into every other selected cell (formulas shift per cell).
132
192
  // Explicit per-cell values — never a read-back of the cell just written — so the spread
133
193
  // is correct even when the engine applies `onChange` asynchronously (legacy setState),
134
- // and so the writes can share one history batch (the rnc batcher defers them all).
135
- var fillWrites = (options === null || options === void 0 ? void 0 : options.fillSelection) && onChangeBatch
194
+ // and so the writes can share one history batch (the rnc batcher defers them all). A
195
+ // Ctrl+Shift+Enter the host cannot enter as an array (a constant, or no array support)
196
+ // commits the same way.
197
+ var fillWrites = !arrayFormula &&
198
+ ((options === null || options === void 0 ? void 0 : options.fillSelection) || (options === null || options === void 0 ? void 0 : options.arrayFormula)) &&
199
+ onChangeBatch
136
200
  ? (0, exports.planEntryFill)(value, activeCell, (_a = selectionsRef.current) !== null && _a !== void 0 ? _a : [])
137
201
  : [];
138
- if (fillWrites.length === 0) {
202
+ var wrapLineBreak = onChangeFormatting &&
203
+ (0, exports.entryTurnsOnWrap)({
204
+ value: value,
205
+ previousValue: previousValue,
206
+ format: getEffectiveFormat === null || getEffectiveFormat === void 0 ? void 0 : getEffectiveFormat(editingSheetId, activeCell.rowIndex, activeCell.columnIndex),
207
+ });
208
+ if (arrayFormula) {
209
+ onChangeArrayFormula === null || onChangeArrayFormula === void 0 ? void 0 : onChangeArrayFormula(editingSheetId, (0, exports.planArrayFormulaRange)(activeCell, (_b = selectionsRef.current) !== null && _b !== void 0 ? _b : [], (_c = getArrayFormula === null || getArrayFormula === void 0 ? void 0 : getArrayFormula(editingSheetId, activeCell.rowIndex, activeCell.columnIndex)) === null || _c === void 0 ? void 0 : _c.range), value);
210
+ }
211
+ else if (fillWrites.length === 0 && !wrapLineBreak) {
139
212
  writeActiveCell();
140
213
  }
141
214
  else {
142
- // One gesture, one undo entry: the active cell and every rectangle together.
215
+ // One gesture, one undo entry: the active cell, every rectangle and the wrap together.
143
216
  var writeAll = function () {
144
217
  var e_3, _a;
218
+ var _b;
145
219
  writeActiveCell();
146
220
  try {
147
221
  for (var fillWrites_1 = tslib_1.__values(fillWrites), fillWrites_1_1 = fillWrites_1.next(); !fillWrites_1_1.done; fillWrites_1_1 = fillWrites_1.next()) {
@@ -156,6 +230,11 @@ var useEditorSubmit = function (_a) {
156
230
  }
157
231
  finally { if (e_3) throw e_3.error; }
158
232
  }
233
+ if (wrapLineBreak) {
234
+ // Excel turns Wrap Text on for an entry with a line break, so every line shows and
235
+ // an auto-height row grows to them (the engines refit it on the format change).
236
+ onChangeFormatting === null || onChangeFormatting === void 0 ? void 0 : onChangeFormatting(editingSheetId, activeCell, fillWrites.length ? (_b = selectionsRef.current) !== null && _b !== void 0 ? _b : [] : [], "wrapStrategy", "wrap");
237
+ }
159
238
  };
160
239
  if (batchHistory) {
161
240
  batchHistory(writeAll);
@@ -239,6 +318,11 @@ var useEditorSubmit = function (_a) {
239
318
  onChangeBatch,
240
319
  batchHistory,
241
320
  formulaLocale,
321
+ onChangeArrayFormula,
322
+ getArrayFormula,
323
+ getEffectiveFormat,
324
+ onChangeFormatting,
325
+ autoCorrect,
242
326
  ]);
243
327
  };
244
328
  exports.useEditorSubmit = useEditorSubmit;
@@ -71,11 +71,15 @@ type FormattingKeyboardProps = {
71
71
  * opened; the key is left alone otherwise.
72
72
  */
73
73
  onShowCellList?(sheetId: number, cell: CellInterface): boolean;
74
+ /**
75
+ * Alt+Shift+F10: open the active cell's error-checking menu (Excel). Returns whether one opened.
76
+ */
77
+ onShowErrorCheckMenu?(sheetId: number, cell: CellInterface): boolean;
74
78
  /** Ctrl+' / Ctrl+Shift+" write the cell above into the active cell */
75
79
  onChangeBatch?: CanvasGridProps["onChangeBatch"];
76
80
  getUserEnteredValue?(sheetId: number, rowIndex: number, columnIndex: number): string | undefined | null;
77
81
  getEffectiveValue?(sheetId: number, rowIndex: number, columnIndex: number): Maybe<ExtendedValue>;
78
82
  };
79
- export declare const useKeyboardHandler: ({ sheetId, locale, selectedRows, selectedColumns, selectedRowHeadersIds, selectedColumnHeadersIds, showFormulas, keymap, defaultFontSizePoint, onShowFormulas, onChangeFormatting, onRepeatFormatting, onClearFormatting, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onFillRange, disableFillRightShortcut, onInsertTime, onInsertDate, onInsertDateTime, onInsertNote, onInsertAutoSum, onRedo, onUndo, onRequestSearch, onRequestReplace, onRequestFormatCells, onRequestInsertComment, onRequestInsertLink, onCreateTable, onRequestCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onShowColumn, onGroupColumns, onUngroupColumns, onHideRow, onShowRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onRequestEditCell, onShowCellList, onChangeBatch, getUserEnteredValue, getEffectiveValue, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
83
+ export declare const useKeyboardHandler: ({ sheetId, locale, selectedRows, selectedColumns, selectedRowHeadersIds, selectedColumnHeadersIds, showFormulas, keymap, defaultFontSizePoint, onShowFormulas, onChangeFormatting, onRepeatFormatting, onClearFormatting, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onFillRange, disableFillRightShortcut, onInsertTime, onInsertDate, onInsertDateTime, onInsertNote, onInsertAutoSum, onRedo, onUndo, onRequestSearch, onRequestReplace, onRequestFormatCells, onRequestInsertComment, onRequestInsertLink, onCreateTable, onRequestCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onShowColumn, onGroupColumns, onUngroupColumns, onHideRow, onShowRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onRequestEditCell, onShowCellList, onShowErrorCheckMenu, onChangeBatch, getUserEnteredValue, getEffectiveValue, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
80
84
  export {};
81
85
  //# sourceMappingURL=use-keyboard-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ var useKeyboardHandler = function (_a) {
61
61
  // Quick edit
62
62
  onAddQuickEdit = _a.onAddQuickEdit,
63
63
  // Excel keymap
64
- onCalculateNow = _a.onCalculateNow, onRequestGoTo = _a.onRequestGoTo, onRequestPasteSpecial = _a.onRequestPasteSpecial, onRequestEditCell = _a.onRequestEditCell, onShowCellList = _a.onShowCellList, onChangeBatch = _a.onChangeBatch, getUserEnteredValue = _a.getUserEnteredValue, getEffectiveValue = _a.getEffectiveValue, canEditCell = _a.canEditCell, isSheetFocused = _a.isSheetFocused, activeCell = _a.activeCell, selections = _a.selections;
64
+ onCalculateNow = _a.onCalculateNow, onRequestGoTo = _a.onRequestGoTo, onRequestPasteSpecial = _a.onRequestPasteSpecial, onRequestEditCell = _a.onRequestEditCell, onShowCellList = _a.onShowCellList, onShowErrorCheckMenu = _a.onShowErrorCheckMenu, onChangeBatch = _a.onChangeBatch, getUserEnteredValue = _a.getUserEnteredValue, getEffectiveValue = _a.getEffectiveValue, canEditCell = _a.canEditCell, isSheetFocused = _a.isSheetFocused, activeCell = _a.activeCell, selections = _a.selections;
65
65
  return (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (e) {
66
66
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
67
67
  var isCtrl = e.ctrlKey; // Ctrl
@@ -234,6 +234,14 @@ var useKeyboardHandler = function (_a) {
234
234
  }
235
235
  if (isAlt) {
236
236
  switch (key) {
237
+ // Alt+Shift+F10 — "displays the menu or message for an Error Checking button" (Excel).
238
+ case "F10":
239
+ if (!isShift || isMeta || isCtrl)
240
+ break;
241
+ if (onShowErrorCheckMenu === null || onShowErrorCheckMenu === void 0 ? void 0 : onShowErrorCheckMenu(sheetId, activeCell)) {
242
+ e.preventDefault();
243
+ }
244
+ return;
237
245
  // Option/Alt + ArrowUp — previous sheet (Sheets). Nothing in
238
246
  // Excel, so the Excel keymap leaves the key alone.
239
247
  case "ArrowUp":
@@ -686,6 +694,7 @@ var useKeyboardHandler = function (_a) {
686
694
  onRequestPasteSpecial,
687
695
  onRequestEditCell,
688
696
  onShowCellList,
697
+ onShowErrorCheckMenu,
689
698
  onChangeBatch,
690
699
  getUserEnteredValue,
691
700
  getEffectiveValue,
@@ -0,0 +1,55 @@
1
+ import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/grid";
2
+ import type { CanvasGridProps, SelectionAttributes } from "../components/canvas-grid/typings";
3
+ import type { SelectionDragMenuRequest } from "./use-selection";
4
+ type Selection = SelectionArea<SelectionAttributes>;
5
+ /** What a selection-border copy writes (Excel's right-drag Copy Here entries). */
6
+ export type SelectionCopyKind = "all" | "values" | "formats";
7
+ /**
8
+ * Excel's right-drag drop menu entries (support.microsoft.com "Move or copy cells and cell
9
+ * contents"). "Create Hyperlink Here" is not offered: the grid has no hyperlink write it can
10
+ * issue for a range (`onRequestInsertLink` only opens the link dialog for the active cell).
11
+ */
12
+ export type SelectionDropAction = "move" | "copy" | "copy-values" | "copy-formats" | "link" | "shift-down-copy" | "shift-right-copy" | "shift-down-move" | "shift-right-move";
13
+ export type SelectionDropMenuState = SelectionDragMenuRequest<SelectionAttributes>;
14
+ /** Shift direction of an Insert Cut Cells move (`planInsertCutCells`' rule): right only when the drop stays on the source's rows. */
15
+ export declare const insertShiftForDrop: (from: GridRange, to: GridRange) => "down" | "right";
16
+ /**
17
+ * Excel "Link Here": each destination cell reads its source cell. A single cell links
18
+ * absolutely (`=$A$1`), a range relatively (`=A1`), as Paste Link writes them.
19
+ */
20
+ export declare const linkFormulasFor: (from: GridRange) => string[][];
21
+ export type UseSelectionDragCopyProps = {
22
+ sheetId: number;
23
+ readonly?: boolean;
24
+ onCopy: CanvasGridProps["onCopy"];
25
+ onPaste: CanvasGridProps["onPaste"];
26
+ onChangeBatch: CanvasGridProps["onChangeBatch"];
27
+ onMoveSelection: CanvasGridProps["onMoveSelection"];
28
+ onInsertCutCells: CanvasGridProps["onInsertCutCells"];
29
+ onInsertCopiedCells: CanvasGridProps["onInsertCopiedCells"];
30
+ /** Excel's "There's already data here" prompt; resolves `false` to cancel. */
31
+ confirmOverwrite?: (message: string) => boolean | Promise<boolean>;
32
+ getValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined | null;
33
+ /** Publish the grid selection (the destination after a drop-menu action). */
34
+ onChangeSelections?: (selections: Selection[]) => void;
35
+ onChangeActiveCell?: (sheetId: number, cell: CellInterface) => void;
36
+ focusSheet?: () => void;
37
+ };
38
+ /**
39
+ * Copy gestures of the selection border (Excel): Ctrl/⌥+drag copies, Ctrl+Shift/⌥⇧+drag
40
+ * inserts a copy, and a right-button drag opens the drop menu. A copy runs through the
41
+ * host's own `onCopy` → `onPaste` into a private clipboard — the system clipboard and the
42
+ * copied-range marquee are untouched — so the host's paste gates (protection, locked
43
+ * ranges, readonly) refuse a drop exactly as they refuse a paste.
44
+ */
45
+ export declare const useSelectionDragCopy: ({ sheetId, readonly, onCopy, onPaste, onChangeBatch, onMoveSelection, onInsertCutCells, onInsertCopiedCells, confirmOverwrite, getValue, onChangeSelections, onChangeActiveCell, focusSheet, }: UseSelectionDragCopyProps) => {
46
+ copySelection: (from: Selection, to: Selection, kind?: SelectionCopyKind) => boolean;
47
+ insertCopiedCells: (from: Selection, to: Selection, shift?: "down" | "right") => boolean;
48
+ dropMenu: SelectionDropMenuState | null;
49
+ dropActions: SelectionDropAction[];
50
+ openDropMenu: (request: SelectionDropMenuState) => void;
51
+ closeDropMenu: () => void;
52
+ runDropAction: (action: SelectionDropAction) => Promise<void>;
53
+ };
54
+ export {};
55
+ //# sourceMappingURL=use-selection-drag-copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-selection-drag-copy.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-drag-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAEpD,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,MAAM,GACN,aAAa,GACb,cAAc,GACd,MAAM,GACN,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;AAEnF,qIAAqI;AACrI,eAAO,MAAM,kBAAkB,GAC7B,MAAM,SAAS,EACf,IAAI,SAAS,KACZ,MAAM,GAAG,OACgD,CAAC;AAwD7D;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,KAAG,MAAM,EAAE,EAazD,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACpD,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACtD,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,QAAQ,EAAE,CACR,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IACvD,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAOF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,gMAclC,yBAAyB;0BAoBjB,SAAS,MAAM,SAAS,SAAQ,iBAAiB;8BAsBjD,SAAS,MAAM,SAAS,UAAU,MAAM,GAAG,OAAO;;;4BAkD/C,sBAAsB;;4BAcjB,mBAAmB;CAmFrC,CAAC"}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSelectionDragCopy = exports.linkFormulasFor = exports.insertShiftForDrop = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var grid_1 = require("@rowsncolumns/grid");
6
+ var utils_1 = require("@rowsncolumns/utils");
7
+ var react_1 = require("react");
8
+ var move_overwrite_1 = require("../api/move-overwrite");
9
+ /** Shift direction of an Insert Cut Cells move (`planInsertCutCells`' rule): right only when the drop stays on the source's rows. */
10
+ var insertShiftForDrop = function (from, to) {
11
+ return to.startRowIndex === from.startRowIndex ? "right" : "down";
12
+ };
13
+ exports.insertShiftForDrop = insertShiftForDrop;
14
+ /** A key/value clipboard for a synthetic copy: a real `DataTransfer` where the DOM has one. */
15
+ var createClipboardData = function () {
16
+ if (typeof DataTransfer === "function") {
17
+ try {
18
+ return new DataTransfer();
19
+ }
20
+ catch (_a) {
21
+ /* fall through */
22
+ }
23
+ }
24
+ var store = new Map();
25
+ return {
26
+ setData: function (type, value) { return void store.set(type, String(value)); },
27
+ getData: function (type) { var _a; return (_a = store.get(type)) !== null && _a !== void 0 ? _a : ""; },
28
+ clearData: function () { return store.clear(); },
29
+ get types() {
30
+ return tslib_1.__spreadArray([], tslib_1.__read(store.keys()), false);
31
+ },
32
+ get items() {
33
+ return tslib_1.__spreadArray([], tslib_1.__read(store.keys()), false).map(function (type) { return ({ kind: "string", type: type }); });
34
+ },
35
+ files: [],
36
+ };
37
+ };
38
+ var createClipboardEvent = function (type, clipboardData) {
39
+ if (typeof ClipboardEvent === "function") {
40
+ try {
41
+ var event_1 = new ClipboardEvent(type, {
42
+ clipboardData: clipboardData,
43
+ bubbles: false,
44
+ cancelable: true,
45
+ });
46
+ if (event_1.clipboardData === clipboardData)
47
+ return event_1;
48
+ }
49
+ catch (_a) {
50
+ /* fall through */
51
+ }
52
+ }
53
+ var defaultPrevented = false;
54
+ return {
55
+ type: type,
56
+ clipboardData: clipboardData,
57
+ preventDefault: function () {
58
+ defaultPrevented = true;
59
+ },
60
+ get defaultPrevented() {
61
+ return defaultPrevented;
62
+ },
63
+ stopPropagation: function () { },
64
+ };
65
+ };
66
+ /**
67
+ * Excel "Link Here": each destination cell reads its source cell. A single cell links
68
+ * absolutely (`=$A$1`), a range relatively (`=A1`), as Paste Link writes them.
69
+ */
70
+ var linkFormulasFor = function (from) {
71
+ var single = from.startRowIndex === from.endRowIndex &&
72
+ from.startColumnIndex === from.endColumnIndex;
73
+ var rows = [];
74
+ for (var r = from.startRowIndex; r <= from.endRowIndex; r++) {
75
+ var row = [];
76
+ for (var c = from.startColumnIndex; c <= from.endColumnIndex; c++) {
77
+ row.push("=".concat((0, utils_1.cellToAddress)({ rowIndex: r, columnIndex: c }, single, single)));
78
+ }
79
+ rows.push(row);
80
+ }
81
+ return rows;
82
+ };
83
+ exports.linkFormulasFor = linkFormulasFor;
84
+ var defaultConfirm = function (message) {
85
+ return typeof window === "undefined" || typeof window.confirm !== "function"
86
+ ? true
87
+ : window.confirm(message);
88
+ };
89
+ /**
90
+ * Copy gestures of the selection border (Excel): Ctrl/⌥+drag copies, Ctrl+Shift/⌥⇧+drag
91
+ * inserts a copy, and a right-button drag opens the drop menu. A copy runs through the
92
+ * host's own `onCopy` → `onPaste` into a private clipboard — the system clipboard and the
93
+ * copied-range marquee are untouched — so the host's paste gates (protection, locked
94
+ * ranges, readonly) refuse a drop exactly as they refuse a paste.
95
+ */
96
+ var useSelectionDragCopy = function (_a) {
97
+ var sheetId = _a.sheetId, _b = _a.readonly, readonly = _b === void 0 ? false : _b, onCopy = _a.onCopy, onPaste = _a.onPaste, onChangeBatch = _a.onChangeBatch, onMoveSelection = _a.onMoveSelection, onInsertCutCells = _a.onInsertCutCells, onInsertCopiedCells = _a.onInsertCopiedCells, _c = _a.confirmOverwrite, confirmOverwrite = _c === void 0 ? defaultConfirm : _c, getValue = _a.getValue, onChangeSelections = _a.onChangeSelections, onChangeActiveCell = _a.onChangeActiveCell, focusSheet = _a.focusSheet;
98
+ var _d = tslib_1.__read((0, react_1.useState)(null), 2), dropMenu = _d[0], setDropMenu = _d[1];
99
+ /** Serialize `from` through the host's copy; `null` when the host refused or wrote nothing. */
100
+ var copyToPrivateClipboard = (0, react_1.useCallback)(function (from) {
101
+ if (!onCopy)
102
+ return null;
103
+ var clipboardData = createClipboardData();
104
+ var copyEvent = createClipboardEvent("copy", clipboardData);
105
+ if (onCopy(copyEvent, sheetId, [from], false) === false)
106
+ return null;
107
+ // A host that defers its copy (e.g. to load cells first) leaves the clipboard empty —
108
+ // write nothing rather than an empty block.
109
+ return clipboardData.types.length ? clipboardData : null;
110
+ }, [onCopy, sheetId]);
111
+ var copySelection = (0, react_1.useCallback)(function (from, to, kind) {
112
+ if (kind === void 0) { kind = "all"; }
113
+ if (readonly || !onPaste)
114
+ return false;
115
+ var clipboardData = copyToPrivateClipboard(from);
116
+ if (!clipboardData)
117
+ return false;
118
+ if (kind !== "all") {
119
+ var options = {
120
+ paste: kind === "values" ? "values" : "formats",
121
+ };
122
+ clipboardData.setData("pasteSpecialOptions", JSON.stringify(options));
123
+ }
124
+ var pasteEvent = createClipboardEvent("paste", clipboardData);
125
+ var target = {
126
+ rowIndex: to.range.startRowIndex,
127
+ columnIndex: to.range.startColumnIndex,
128
+ };
129
+ void onPaste(pasteEvent, sheetId, sheetId, [from], target, [to], [to], false);
130
+ return true;
131
+ }, [readonly, onPaste, copyToPrivateClipboard, sheetId]);
132
+ var insertCopiedCells = (0, react_1.useCallback)(function (from, to, shift) {
133
+ if (readonly || !onInsertCopiedCells)
134
+ return false;
135
+ var clipboardData = copyToPrivateClipboard(from);
136
+ if (!clipboardData)
137
+ return false;
138
+ void onInsertCopiedCells(createClipboardEvent("paste", clipboardData), sheetId, from, to, shift !== null && shift !== void 0 ? shift : (0, exports.insertShiftForDrop)(from.range, to.range));
139
+ return true;
140
+ }, [readonly, onInsertCopiedCells, copyToPrivateClipboard, sheetId]);
141
+ var linkSelection = (0, react_1.useCallback)(function (from, to) {
142
+ if (readonly || !onChangeBatch)
143
+ return false;
144
+ onChangeBatch(sheetId, to.range, (0, exports.linkFormulasFor)(from.range));
145
+ return true;
146
+ }, [readonly, onChangeBatch, sheetId]);
147
+ /** Drop-menu entries the host can run for this drop (Excel lists them in this order). */
148
+ var getDropActions = (0, react_1.useCallback)(function (menu) {
149
+ var actions = [];
150
+ if (onMoveSelection)
151
+ actions.push("move");
152
+ if (onPaste && onCopy)
153
+ actions.push("copy", "copy-values", "copy-formats");
154
+ if (onChangeBatch)
155
+ actions.push("link");
156
+ if (onInsertCopiedCells && onCopy) {
157
+ actions.push("shift-down-copy", "shift-right-copy");
158
+ }
159
+ if (onInsertCutCells) {
160
+ // The engine's insert-move opens the band along the drop's own axis, so only the
161
+ // entry matching it can run.
162
+ actions.push((0, exports.insertShiftForDrop)(menu.from.range, menu.to.range) === "down"
163
+ ? "shift-down-move"
164
+ : "shift-right-move");
165
+ }
166
+ return actions;
167
+ }, [onMoveSelection, onPaste, onCopy, onChangeBatch, onInsertCopiedCells, onInsertCutCells]);
168
+ var openDropMenu = (0, react_1.useCallback)(function (request) {
169
+ if (readonly)
170
+ return;
171
+ setDropMenu(request);
172
+ }, [readonly]);
173
+ /** Cancel / Esc / click-away: nothing changes, the selection stays on the source. */
174
+ var closeDropMenu = (0, react_1.useCallback)(function () {
175
+ setDropMenu(null);
176
+ focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
177
+ }, [focusSheet]);
178
+ var runDropAction = (0, react_1.useCallback)(function (action) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
179
+ var menu, from, to, hasValue, replaces, _a, done;
180
+ return tslib_1.__generator(this, function (_b) {
181
+ switch (_b.label) {
182
+ case 0:
183
+ menu = dropMenu;
184
+ setDropMenu(null);
185
+ if (!menu || readonly)
186
+ return [2 /*return*/];
187
+ from = menu.from, to = menu.to;
188
+ hasValue = function (rowIndex, columnIndex) {
189
+ return !(0, grid_1.isNull)(getValue(sheetId, rowIndex, columnIndex));
190
+ };
191
+ replaces = action === "move"
192
+ ? (0, move_overwrite_1.needsOverwritePrompt)(from.range, to.range, hasValue)
193
+ : action === "copy" || action === "copy-values" || action === "link"
194
+ ? (0, move_overwrite_1.needsCopyOverwritePrompt)(to.range, hasValue)
195
+ : false;
196
+ _a = replaces;
197
+ if (!_a) return [3 /*break*/, 2];
198
+ return [4 /*yield*/, confirmOverwrite(move_overwrite_1.MOVE_OVERWRITE_PROMPT)];
199
+ case 1:
200
+ _a = !(_b.sent());
201
+ _b.label = 2;
202
+ case 2:
203
+ if (_a) {
204
+ focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
205
+ return [2 /*return*/];
206
+ }
207
+ done = false;
208
+ switch (action) {
209
+ case "move":
210
+ onMoveSelection === null || onMoveSelection === void 0 ? void 0 : onMoveSelection(sheetId, from, to);
211
+ done = !!onMoveSelection;
212
+ break;
213
+ case "copy":
214
+ done = copySelection(from, to, "all");
215
+ break;
216
+ case "copy-values":
217
+ done = copySelection(from, to, "values");
218
+ break;
219
+ case "copy-formats":
220
+ done = copySelection(from, to, "formats");
221
+ break;
222
+ case "link":
223
+ done = linkSelection(from, to);
224
+ break;
225
+ case "shift-down-copy":
226
+ done = insertCopiedCells(from, to, "down");
227
+ break;
228
+ case "shift-right-copy":
229
+ done = insertCopiedCells(from, to, "right");
230
+ break;
231
+ case "shift-down-move":
232
+ case "shift-right-move":
233
+ onInsertCutCells === null || onInsertCutCells === void 0 ? void 0 : onInsertCutCells(sheetId, from, to);
234
+ done = !!onInsertCutCells;
235
+ break;
236
+ }
237
+ if (done) {
238
+ // Excel selects the destination block after the drop.
239
+ onChangeActiveCell === null || onChangeActiveCell === void 0 ? void 0 : onChangeActiveCell(sheetId, {
240
+ rowIndex: to.range.startRowIndex,
241
+ columnIndex: to.range.startColumnIndex,
242
+ });
243
+ onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections([to]);
244
+ }
245
+ focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
246
+ return [2 /*return*/];
247
+ }
248
+ });
249
+ }); }, [
250
+ dropMenu,
251
+ readonly,
252
+ getValue,
253
+ sheetId,
254
+ confirmOverwrite,
255
+ onMoveSelection,
256
+ copySelection,
257
+ linkSelection,
258
+ insertCopiedCells,
259
+ onInsertCutCells,
260
+ onChangeActiveCell,
261
+ onChangeSelections,
262
+ focusSheet,
263
+ ]);
264
+ return {
265
+ copySelection: copySelection,
266
+ insertCopiedCells: insertCopiedCells,
267
+ dropMenu: dropMenu,
268
+ dropActions: dropMenu ? getDropActions(dropMenu) : [],
269
+ openDropMenu: openDropMenu,
270
+ closeDropMenu: closeDropMenu,
271
+ runDropAction: runDropAction,
272
+ };
273
+ };
274
+ exports.useSelectionDragCopy = useSelectionDragCopy;
@@ -66,7 +66,14 @@ export type UseSelectionRendererProps = {
66
66
  calculatedColumnFill?: CalculatedColumnFill | null;
67
67
  canStopAutoCalculatedColumns?: boolean;
68
68
  onChooseCalculatedColumnOption?(option: CalculatedColumnOption): void;
69
+ /** The active cell's error-checking flag, when it carries the green ◤ (smart tag beside it). */
70
+ errorCheck?: SelectionNewProps["errorCheck"];
71
+ errorCheckMenuOpen?: boolean;
72
+ onErrorCheckMenuOpenChange?: SelectionNewProps["onErrorCheckMenuOpenChange"];
73
+ onChooseErrorCheckOption?: SelectionNewProps["onChooseErrorCheckOption"];
69
74
  onSplitTextToColumns: CanvasGridProps["onSplitTextToColumns"];
75
+ /** Paste Options gallery choice (re-applies the last paste). */
76
+ onChoosePasteOption?: SelectionNewProps["onChoosePasteOption"];
70
77
  hoveredCell?: CellInterface | null;
71
78
  onRemoveQuickEdit(range: SheetRange): void;
72
79
  onAddQuickEdit(range: SheetRange): void;
@@ -77,5 +84,5 @@ export type UseSelectionRendererProps = {
77
84
  */
78
85
  isFillShrink?: boolean;
79
86
  };
80
- export declare const useSelectionRenderer: ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink, }: UseSelectionRendererProps) => (props: SelectionProps<SelectionAttributes>) => React.JSX.Element | null;
87
+ export declare const useSelectionRenderer: ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns, onChooseCalculatedColumnOption, errorCheck, errorCheckMenuOpen, onErrorCheckMenuOpenChange, onChooseErrorCheckOption, hoveredCell, onSplitTextToColumns, onChoosePasteOption, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink, }: UseSelectionRendererProps) => (props: SelectionProps<SelectionAttributes>) => React.JSX.Element | null;
81
88
  //# sourceMappingURL=use-selection-renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-selection-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-renderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-selection-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-renderer.tsx"],"names":[],"mappings":"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"}