@rowsncolumns/spreadsheet 10.6.5 → 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 (284) 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/index.d.ts.map +1 -1
  35. package/dist/cjs/components/cell/index.js +7 -8
  36. package/dist/cjs/components/cell/typings.d.ts +9 -0
  37. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  38. package/dist/cjs/components/cell-editor/helpers.d.ts +22 -2
  39. package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
  40. package/dist/cjs/components/cell-editor/helpers.js +32 -8
  41. package/dist/cjs/components/cell-editor/index.d.ts +7 -1
  42. package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
  43. package/dist/cjs/components/cell-editor/index.js +85 -13
  44. package/dist/cjs/components/cell-indicator/index.d.ts +41 -0
  45. package/dist/cjs/components/cell-indicator/index.d.ts.map +1 -0
  46. package/dist/cjs/components/cell-indicator/index.js +90 -0
  47. package/dist/cjs/components/cell-input/cell-input.d.ts +10 -2
  48. package/dist/cjs/components/cell-input/cell-input.d.ts.map +1 -1
  49. package/dist/cjs/components/cell-input/cell-input.js +5 -3
  50. package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  51. package/dist/cjs/components/cell-input/formula-bar-cell-input.js +9 -2
  52. package/dist/cjs/components/cell-structured/sparkline-math.d.ts +27 -1
  53. package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
  54. package/dist/cjs/components/cell-structured/sparkline-math.js +48 -1
  55. package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
  56. package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
  57. package/dist/cjs/components/cell-structured/sparkline.js +36 -92
  58. package/dist/cjs/components/cell-structured/types.d.ts +6 -0
  59. package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
  60. package/dist/cjs/components/data-table-dialog/index.d.ts +22 -0
  61. package/dist/cjs/components/data-table-dialog/index.d.ts.map +1 -0
  62. package/dist/cjs/components/data-table-dialog/index.js +93 -0
  63. package/dist/cjs/components/error-check-smart-tag/index.d.ts +27 -0
  64. package/dist/cjs/components/error-check-smart-tag/index.d.ts.map +1 -0
  65. package/dist/cjs/components/error-check-smart-tag/index.js +39 -0
  66. package/dist/cjs/components/forecast-sheet-dialog/index.d.ts +26 -0
  67. package/dist/cjs/components/forecast-sheet-dialog/index.d.ts.map +1 -0
  68. package/dist/cjs/components/forecast-sheet-dialog/index.js +92 -0
  69. package/dist/cjs/components/paste-special-dialog/index.d.ts +3 -3
  70. package/dist/cjs/components/paste-special-dialog/index.d.ts.map +1 -1
  71. package/dist/cjs/components/paste-special-dialog/index.js +61 -23
  72. package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
  73. package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
  74. package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +196 -0
  75. package/dist/cjs/components/protect-sheet-dialog/constants.d.ts +3 -0
  76. package/dist/cjs/components/protect-sheet-dialog/constants.d.ts.map +1 -0
  77. package/dist/cjs/components/protect-sheet-dialog/constants.js +5 -0
  78. package/dist/cjs/components/protect-sheet-dialog/index.d.ts +2 -2
  79. package/dist/cjs/components/protect-sheet-dialog/index.d.ts.map +1 -1
  80. package/dist/cjs/components/protect-sheet-dialog/index.js +5 -3
  81. package/dist/cjs/components/scenario-manager-dialog/index.d.ts +51 -0
  82. package/dist/cjs/components/scenario-manager-dialog/index.d.ts.map +1 -0
  83. package/dist/cjs/components/scenario-manager-dialog/index.js +257 -0
  84. package/dist/cjs/components/selection/index.d.ts +1 -1
  85. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  86. package/dist/cjs/components/selection/index.js +9 -4
  87. package/dist/cjs/components/selection/paste-menu.d.ts +14 -1
  88. package/dist/cjs/components/selection/paste-menu.d.ts.map +1 -1
  89. package/dist/cjs/components/selection/paste-menu.js +78 -6
  90. package/dist/cjs/components/selection/paste-options.d.ts +28 -0
  91. package/dist/cjs/components/selection/paste-options.d.ts.map +1 -0
  92. package/dist/cjs/components/selection/paste-options.js +70 -0
  93. package/dist/cjs/components/selection/types.d.ts +12 -1
  94. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  95. package/dist/cjs/components/selection-drop-menu/index.d.ts +18 -0
  96. package/dist/cjs/components/selection-drop-menu/index.d.ts.map +1 -0
  97. package/dist/cjs/components/selection-drop-menu/index.js +62 -0
  98. package/dist/cjs/components/solver-dialog/index.d.ts +57 -0
  99. package/dist/cjs/components/solver-dialog/index.d.ts.map +1 -0
  100. package/dist/cjs/components/solver-dialog/index.js +204 -0
  101. package/dist/cjs/components/toolbar/sparkline-actions.d.ts +3 -2
  102. package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -1
  103. package/dist/cjs/components/toolbar/sparkline-actions.js +6 -2
  104. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  105. package/dist/cjs/components/toolbar/table-style-selector.js +33 -2
  106. package/dist/cjs/config.d.ts +5 -4
  107. package/dist/cjs/config.d.ts.map +1 -1
  108. package/dist/cjs/config.js +13 -9
  109. package/dist/cjs/hooks/use-cell-renderer.d.ts +12 -1
  110. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  111. package/dist/cjs/hooks/use-cell-renderer.js +6 -3
  112. package/dist/cjs/hooks/use-copy-paste-cut.d.ts +36 -2
  113. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  114. package/dist/cjs/hooks/use-copy-paste-cut.js +131 -5
  115. package/dist/cjs/hooks/use-editable.d.ts +6 -0
  116. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  117. package/dist/cjs/hooks/use-editor-submit.d.ts +45 -3
  118. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  119. package/dist/cjs/hooks/use-editor-submit.js +91 -7
  120. package/dist/cjs/hooks/use-keyboard-handler.d.ts +5 -1
  121. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  122. package/dist/cjs/hooks/use-keyboard-handler.js +10 -1
  123. package/dist/cjs/hooks/use-selection-drag-copy.d.ts +55 -0
  124. package/dist/cjs/hooks/use-selection-drag-copy.d.ts.map +1 -0
  125. package/dist/cjs/hooks/use-selection-drag-copy.js +274 -0
  126. package/dist/cjs/hooks/use-selection-renderer.d.ts +8 -1
  127. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  128. package/dist/cjs/hooks/use-selection-renderer.js +7 -2
  129. package/dist/cjs/hooks/use-selection.d.ts +59 -1
  130. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  131. package/dist/cjs/hooks/use-selection.js +270 -61
  132. package/dist/cjs/index.d.ts +6 -1
  133. package/dist/cjs/index.d.ts.map +1 -1
  134. package/dist/cjs/index.js +5 -0
  135. package/dist/cjs/release-date.js +1 -1
  136. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  137. package/dist/cjs/types.d.ts +50 -1
  138. package/dist/cjs/types.d.ts.map +1 -1
  139. package/dist/esm/api/autocomplete.d.ts +42 -0
  140. package/dist/esm/api/autocomplete.d.ts.map +1 -0
  141. package/dist/esm/api/autocomplete.js +91 -0
  142. package/dist/esm/api/banded-ranges.d.ts.map +1 -1
  143. package/dist/esm/api/banded-ranges.js +52 -2
  144. package/dist/esm/api/error-checking.d.ts +82 -0
  145. package/dist/esm/api/error-checking.d.ts.map +1 -0
  146. package/dist/esm/api/error-checking.js +156 -0
  147. package/dist/esm/api/move-overwrite.d.ts +8 -2
  148. package/dist/esm/api/move-overwrite.d.ts.map +1 -1
  149. package/dist/esm/api/move-overwrite.js +17 -2
  150. package/dist/esm/api/selections.d.ts +2 -2
  151. package/dist/esm/api/validation.d.ts +39 -1
  152. package/dist/esm/api/validation.d.ts.map +1 -1
  153. package/dist/esm/api/validation.js +70 -0
  154. package/dist/esm/atoms/cell-input-context.atom.d.ts +4 -1
  155. package/dist/esm/atoms/cell-input-context.atom.d.ts.map +1 -1
  156. package/dist/esm/atoms/enter-key-direction.atom.d.ts +11 -0
  157. package/dist/esm/atoms/enter-key-direction.atom.d.ts.map +1 -0
  158. package/dist/esm/atoms/enter-key-direction.atom.js +8 -0
  159. package/dist/esm/atoms/index.d.ts +1 -0
  160. package/dist/esm/atoms/index.d.ts.map +1 -1
  161. package/dist/esm/atoms/index.js +1 -0
  162. package/dist/esm/atoms/paste-menu.atom.d.ts +22 -0
  163. package/dist/esm/atoms/paste-menu.atom.d.ts.map +1 -1
  164. package/dist/esm/atoms/paste-menu.atom.js +10 -1
  165. package/dist/esm/atoms/pick-list.atom.d.ts +15 -0
  166. package/dist/esm/atoms/pick-list.atom.d.ts.map +1 -0
  167. package/dist/esm/atoms/pick-list.atom.js +3 -0
  168. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  169. package/dist/esm/components/canvas-grid/index.js +239 -13
  170. package/dist/esm/components/canvas-grid/typings.d.ts +96 -11
  171. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  172. package/dist/esm/components/cell/index.d.ts.map +1 -1
  173. package/dist/esm/components/cell/index.js +8 -9
  174. package/dist/esm/components/cell/typings.d.ts +9 -0
  175. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  176. package/dist/esm/components/cell-editor/helpers.d.ts +22 -2
  177. package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
  178. package/dist/esm/components/cell-editor/helpers.js +25 -7
  179. package/dist/esm/components/cell-editor/index.d.ts +7 -1
  180. package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
  181. package/dist/esm/components/cell-editor/index.js +80 -9
  182. package/dist/esm/components/cell-indicator/index.d.ts +41 -0
  183. package/dist/esm/components/cell-indicator/index.d.ts.map +1 -0
  184. package/dist/esm/components/cell-indicator/index.js +76 -0
  185. package/dist/esm/components/cell-input/cell-input.d.ts +10 -2
  186. package/dist/esm/components/cell-input/cell-input.d.ts.map +1 -1
  187. package/dist/esm/components/cell-input/cell-input.js +5 -3
  188. package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
  189. package/dist/esm/components/cell-input/formula-bar-cell-input.js +9 -2
  190. package/dist/esm/components/cell-structured/sparkline-math.d.ts +27 -1
  191. package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
  192. package/dist/esm/components/cell-structured/sparkline-math.js +35 -0
  193. package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
  194. package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
  195. package/dist/esm/components/cell-structured/sparkline.js +34 -88
  196. package/dist/esm/components/cell-structured/types.d.ts +6 -0
  197. package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
  198. package/dist/esm/components/data-table-dialog/index.d.ts +22 -0
  199. package/dist/esm/components/data-table-dialog/index.d.ts.map +1 -0
  200. package/dist/esm/components/data-table-dialog/index.js +75 -0
  201. package/dist/esm/components/error-check-smart-tag/index.d.ts +27 -0
  202. package/dist/esm/components/error-check-smart-tag/index.d.ts.map +1 -0
  203. package/dist/esm/components/error-check-smart-tag/index.js +33 -0
  204. package/dist/esm/components/forecast-sheet-dialog/index.d.ts +26 -0
  205. package/dist/esm/components/forecast-sheet-dialog/index.d.ts.map +1 -0
  206. package/dist/esm/components/forecast-sheet-dialog/index.js +83 -0
  207. package/dist/esm/components/paste-special-dialog/index.d.ts +3 -3
  208. package/dist/esm/components/paste-special-dialog/index.d.ts.map +1 -1
  209. package/dist/esm/components/paste-special-dialog/index.js +58 -23
  210. package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
  211. package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
  212. package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +177 -0
  213. package/dist/esm/components/protect-sheet-dialog/constants.d.ts +3 -0
  214. package/dist/esm/components/protect-sheet-dialog/constants.d.ts.map +1 -0
  215. package/dist/esm/components/protect-sheet-dialog/constants.js +2 -0
  216. package/dist/esm/components/protect-sheet-dialog/index.d.ts +2 -2
  217. package/dist/esm/components/protect-sheet-dialog/index.d.ts.map +1 -1
  218. package/dist/esm/components/protect-sheet-dialog/index.js +3 -2
  219. package/dist/esm/components/scenario-manager-dialog/index.d.ts +51 -0
  220. package/dist/esm/components/scenario-manager-dialog/index.d.ts.map +1 -0
  221. package/dist/esm/components/scenario-manager-dialog/index.js +213 -0
  222. package/dist/esm/components/selection/index.d.ts +1 -1
  223. package/dist/esm/components/selection/index.d.ts.map +1 -1
  224. package/dist/esm/components/selection/index.js +9 -4
  225. package/dist/esm/components/selection/paste-menu.d.ts +14 -1
  226. package/dist/esm/components/selection/paste-menu.d.ts.map +1 -1
  227. package/dist/esm/components/selection/paste-menu.js +76 -8
  228. package/dist/esm/components/selection/paste-options.d.ts +28 -0
  229. package/dist/esm/components/selection/paste-options.d.ts.map +1 -0
  230. package/dist/esm/components/selection/paste-options.js +62 -0
  231. package/dist/esm/components/selection/types.d.ts +12 -1
  232. package/dist/esm/components/selection/types.d.ts.map +1 -1
  233. package/dist/esm/components/selection-drop-menu/index.d.ts +18 -0
  234. package/dist/esm/components/selection-drop-menu/index.d.ts.map +1 -0
  235. package/dist/esm/components/selection-drop-menu/index.js +56 -0
  236. package/dist/esm/components/solver-dialog/index.d.ts +57 -0
  237. package/dist/esm/components/solver-dialog/index.d.ts.map +1 -0
  238. package/dist/esm/components/solver-dialog/index.js +176 -0
  239. package/dist/esm/components/toolbar/sparkline-actions.d.ts +3 -2
  240. package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -1
  241. package/dist/esm/components/toolbar/sparkline-actions.js +6 -2
  242. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  243. package/dist/esm/components/toolbar/table-style-selector.js +29 -3
  244. package/dist/esm/config.d.ts +5 -4
  245. package/dist/esm/config.d.ts.map +1 -1
  246. package/dist/esm/config.js +12 -8
  247. package/dist/esm/hooks/use-cell-renderer.d.ts +12 -1
  248. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  249. package/dist/esm/hooks/use-cell-renderer.js +5 -2
  250. package/dist/esm/hooks/use-copy-paste-cut.d.ts +36 -2
  251. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  252. package/dist/esm/hooks/use-copy-paste-cut.js +117 -6
  253. package/dist/esm/hooks/use-editable.d.ts +6 -0
  254. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  255. package/dist/esm/hooks/use-editor-submit.d.ts +45 -3
  256. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  257. package/dist/esm/hooks/use-editor-submit.js +81 -6
  258. package/dist/esm/hooks/use-keyboard-handler.d.ts +5 -1
  259. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  260. package/dist/esm/hooks/use-keyboard-handler.js +10 -1
  261. package/dist/esm/hooks/use-selection-drag-copy.d.ts +55 -0
  262. package/dist/esm/hooks/use-selection-drag-copy.d.ts.map +1 -0
  263. package/dist/esm/hooks/use-selection-drag-copy.js +245 -0
  264. package/dist/esm/hooks/use-selection-renderer.d.ts +8 -1
  265. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  266. package/dist/esm/hooks/use-selection-renderer.js +7 -2
  267. package/dist/esm/hooks/use-selection.d.ts +59 -1
  268. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  269. package/dist/esm/hooks/use-selection.js +245 -52
  270. package/dist/esm/index.d.ts +6 -1
  271. package/dist/esm/index.d.ts.map +1 -1
  272. package/dist/esm/index.js +5 -0
  273. package/dist/esm/release-date.js +1 -1
  274. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  275. package/dist/esm/types.d.ts +50 -1
  276. package/dist/esm/types.d.ts.map +1 -1
  277. package/dist/spreadsheet.min.css +1 -1
  278. package/package.json +6 -5
  279. package/dist/cjs/components/cell-error/index.d.ts +0 -14
  280. package/dist/cjs/components/cell-error/index.d.ts.map +0 -1
  281. package/dist/cjs/components/cell-error/index.js +0 -24
  282. package/dist/esm/components/cell-error/index.d.ts +0 -14
  283. package/dist/esm/components/cell-error/index.d.ts.map +0 -1
  284. 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.useSelection = void 0;
3
+ exports.useSelection = exports.isSelectionCopyModifier = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var grid_1 = require("@rowsncolumns/grid");
6
6
  var grid_2 = require("@rowsncolumns/grid");
@@ -10,9 +10,17 @@ var react_1 = require("react");
10
10
  var scheduler_1 = require("../api/scheduler");
11
11
  var move_overwrite_1 = require("../api/move-overwrite");
12
12
  var table_1 = require("../api/table");
13
+ var helpers_1 = require("../components/cell-editor/helpers");
13
14
  var config_1 = require("../config");
14
- var helpers_1 = require("../helpers");
15
+ var helpers_2 = require("../helpers");
16
+ var platform_1 = require("../platform");
15
17
  var use_callback_ref_1 = require("./use-callback-ref");
18
+ /**
19
+ * The copy modifier of a selection-border drag, read at release like Excel: Ctrl on
20
+ * Windows / Linux, Option (⌥) on macOS (Excel for Mac; ⌃-click is the Mac context menu).
21
+ */
22
+ var isSelectionCopyModifier = function (e) { return ((0, platform_1.isMacPlatform)() ? e.altKey : e.ctrlKey); };
23
+ exports.isSelectionCopyModifier = isSelectionCopyModifier;
16
24
  /** Ctrl on every platform; Cmd is accepted as an alias on macOS (Excel for Mac uses Ctrl). */
17
25
  var isFillToggleModifier = function (e) {
18
26
  return e.ctrlKey || e.metaKey;
@@ -20,6 +28,8 @@ var isFillToggleModifier = function (e) {
20
28
  var fillGestureOptions = function (e) {
21
29
  return e.ctrlKey || e.metaKey ? { modifier: "toggle" } : undefined;
22
30
  };
31
+ /** How far an arrow key looks past unselectable cells for the next selectable one. */
32
+ var SELECTABLE_SEARCH_LIMIT = 10000;
23
33
  var defaultIsHidden = function () { return false; };
24
34
  var defaultSelectionSpan = function () { return true; };
25
35
  var getPossibleActiveCellFromSelections = function (selections) {
@@ -99,9 +109,58 @@ var defaultConfirmMoveOverwrite = function (message) {
99
109
  : window.confirm(message);
100
110
  };
101
111
  var useSelection = function (_a) {
102
- var sheetId = _a.sheetId, activeCell = _a.activeCell, onChangeActiveCell = _a.onChangeActiveCell, selections = _a.selections, onChangeSelections = _a.onChangeSelections, _b = _a.columnCount, columnCount = _b === void 0 ? 0 : _b, _c = _a.rowCount, rowCount = _c === void 0 ? 0 : _c, _d = _a.selectionPolicy, selectionPolicy = _d === void 0 ? "multiple" : _d, _e = _a.newSelectionMode, newSelectionMode = _e === void 0 ? "clear" : _e, _f = _a.allowDeselectSelection, allowDeselectSelection = _f === void 0 ? true : _f, onFill = _a.onFill, onFillHandleRelease = _a.onFillHandleRelease, onFillShrink = _a.onFillShrink, onInsertCutCells = _a.onInsertCutCells, _g = _a.confirmMoveOverwrite, confirmMoveOverwrite = _g === void 0 ? defaultConfirmMoveOverwrite : _g, _h = _a.isHiddenRow, isHiddenRow = _h === void 0 ? defaultIsHidden : _h, _j = _a.isHiddenColumn, isHiddenColumn = _j === void 0 ? defaultIsHidden : _j, _k = _a.alwaysScrollToActiveCell, alwaysScrollToActiveCell = _k === void 0 ? true : _k, _l = _a.selectionTopBound, selectionTopBound = _l === void 0 ? 0 : _l, _m = _a.selectionBottomBound, selectionBottomBound = _m === void 0 ? rowCount : _m, _o = _a.selectionLeftBound, selectionLeftBound = _o === void 0 ? 0 : _o, _p = _a.selectionRightBound, selectionRightBound = _p === void 0 ? columnCount : _p, mouseDownInterceptor = _a.mouseDownInterceptor, mouseMoveInterceptor = _a.mouseMoveInterceptor, _q = _a.mergedCells, mergedCells = _q === void 0 ? config_1.DEFAULT_ARRAY : _q, _r = _a.canSelectionSpanMergedCells, canSelectionSpanMergedCells = _r === void 0 ? defaultSelectionSpan : _r, getValue = _a.getValue, onMoveSelection = _a.onMoveSelection, getCellCoordsFromOffset = _a.getCellCoordsFromOffset, getCellBounds = _a.getCellBounds, getViewPort = _a.getViewPort, focus = _a.focus, scrollToCell = _a.scrollToCell, isMergedCell = _a.isMergedCell, enableSelectOnEnterKey = _a.enableSelectOnEnterKey, formulaMode = _a.formulaMode, isTouchDevice = _a.isTouchDevice, getDataRowCount = _a.getDataRowCount, getDataRegion = _a.getDataRegion, isRowHeader = _a.isRowHeader, isColumnHeader = _a.isColumnHeader, _s = _a.enableDataBoundaryNavigation, enableDataBoundaryNavigation = _s === void 0 ? false : _s, tables = _a.tables, onInsertTableRow = _a.onInsertTableRow;
103
- var _t = tslib_1.__read((0, react_1.useState)(), 2), fillSelection = _t[0], setFillSelection = _t[1];
104
- var _u = tslib_1.__read((0, react_1.useState)(), 2), fillShrink = _u[0], setFillShrink = _u[1];
112
+ var sheetId = _a.sheetId, activeCell = _a.activeCell, onChangeActiveCellProp = _a.onChangeActiveCell, selections = _a.selections, onChangeSelectionsProp = _a.onChangeSelections, _b = _a.columnCount, columnCount = _b === void 0 ? 0 : _b, _c = _a.rowCount, rowCount = _c === void 0 ? 0 : _c, _d = _a.selectionPolicy, selectionPolicy = _d === void 0 ? "multiple" : _d, _e = _a.newSelectionMode, newSelectionMode = _e === void 0 ? "clear" : _e, _f = _a.allowDeselectSelection, allowDeselectSelection = _f === void 0 ? true : _f, onFill = _a.onFill, onFillHandleRelease = _a.onFillHandleRelease, onFillShrink = _a.onFillShrink, onInsertCutCells = _a.onInsertCutCells, onCopySelection = _a.onCopySelection, onInsertCopiedCells = _a.onInsertCopiedCells, onSelectionDragMenu = _a.onSelectionDragMenu, _g = _a.confirmMoveOverwrite, confirmMoveOverwrite = _g === void 0 ? defaultConfirmMoveOverwrite : _g, _h = _a.isHiddenRow, isHiddenRow = _h === void 0 ? defaultIsHidden : _h, _j = _a.isHiddenColumn, isHiddenColumn = _j === void 0 ? defaultIsHidden : _j, _k = _a.alwaysScrollToActiveCell, alwaysScrollToActiveCell = _k === void 0 ? true : _k, _l = _a.selectionTopBound, selectionTopBound = _l === void 0 ? 0 : _l, _m = _a.selectionBottomBound, selectionBottomBound = _m === void 0 ? rowCount : _m, _o = _a.selectionLeftBound, selectionLeftBound = _o === void 0 ? 0 : _o, _p = _a.selectionRightBound, selectionRightBound = _p === void 0 ? columnCount : _p, mouseDownInterceptor = _a.mouseDownInterceptor, mouseMoveInterceptor = _a.mouseMoveInterceptor, _q = _a.mergedCells, mergedCells = _q === void 0 ? config_1.DEFAULT_ARRAY : _q, _r = _a.canSelectionSpanMergedCells, canSelectionSpanMergedCells = _r === void 0 ? defaultSelectionSpan : _r, getValue = _a.getValue, onMoveSelection = _a.onMoveSelection, getCellCoordsFromOffset = _a.getCellCoordsFromOffset, getCellBounds = _a.getCellBounds, getViewPort = _a.getViewPort, focus = _a.focus, scrollToCell = _a.scrollToCell, isMergedCell = _a.isMergedCell, enableSelectOnEnterKey = _a.enableSelectOnEnterKey, _s = _a.enterKeyDirection, enterKeyDirection = _s === void 0 ? "down" : _s, formulaMode = _a.formulaMode, isTouchDevice = _a.isTouchDevice, getDataRowCount = _a.getDataRowCount, getDataRegion = _a.getDataRegion, isRowHeader = _a.isRowHeader, isColumnHeader = _a.isColumnHeader, _t = _a.enableDataBoundaryNavigation, enableDataBoundaryNavigation = _t === void 0 ? false : _t, tables = _a.tables, onInsertTableRow = _a.onInsertTableRow, isRangeSelectableProp = _a.isRangeSelectable;
113
+ /**
114
+ * Selectability gate (Excel's Select locked / unlocked cells). Every
115
+ * gesture checks it before it moves anything, and the two emitters below
116
+ * refuse an active cell or a selection that covers an unselectable range —
117
+ * the backstop for row / column / select-all paths that emit directly.
118
+ */
119
+ var isRangeSelectableRef = (0, react_1.useRef)(isRangeSelectableProp);
120
+ isRangeSelectableRef.current = isRangeSelectableProp;
121
+ var isSelectable = (0, react_1.useCallback)(function (range) {
122
+ var predicate = isRangeSelectableRef.current;
123
+ return !predicate || !range || predicate(range);
124
+ }, []);
125
+ var isCellSelectable = (0, react_1.useCallback)(function (cell) {
126
+ return !cell ||
127
+ isSelectable({
128
+ startRowIndex: cell.rowIndex,
129
+ endRowIndex: cell.rowIndex,
130
+ startColumnIndex: cell.columnIndex,
131
+ endColumnIndex: cell.columnIndex,
132
+ });
133
+ }, [isSelectable]);
134
+ var onChangeActiveCell = (0, react_1.useMemo)(function () {
135
+ return onChangeActiveCellProp
136
+ ? function () {
137
+ var args = [];
138
+ for (var _i = 0; _i < arguments.length; _i++) {
139
+ args[_i] = arguments[_i];
140
+ }
141
+ if (!isCellSelectable(args[1]))
142
+ return;
143
+ onChangeActiveCellProp.apply(void 0, tslib_1.__spreadArray([], tslib_1.__read(args), false));
144
+ }
145
+ : undefined;
146
+ }, [onChangeActiveCellProp, isCellSelectable]);
147
+ var onChangeSelections = (0, react_1.useMemo)(function () {
148
+ return onChangeSelectionsProp
149
+ ? function () {
150
+ var _a;
151
+ var args = [];
152
+ for (var _i = 0; _i < arguments.length; _i++) {
153
+ args[_i] = arguments[_i];
154
+ }
155
+ if ((_a = args[0]) === null || _a === void 0 ? void 0 : _a.some(function (selection) { return !isSelectable(selection.range); })) {
156
+ return;
157
+ }
158
+ onChangeSelectionsProp.apply(void 0, tslib_1.__spreadArray([], tslib_1.__read(args), false));
159
+ }
160
+ : undefined;
161
+ }, [onChangeSelectionsProp, isSelectable]);
162
+ var _u = tslib_1.__read((0, react_1.useState)(), 2), fillSelection = _u[0], setFillSelection = _u[1];
163
+ var _v = tslib_1.__read((0, react_1.useState)(), 2), fillShrink = _v[0], setFillShrink = _v[1];
105
164
  var fillShrinkRef = (0, react_1.useRef)(undefined);
106
165
  // Ctrl/Cmd state of the fill-handle drag, sampled on every mousemove (mouseup carries the
107
166
  // modifier too, but a key released mid-drag should still count — Excel reads it at drop time,
@@ -137,11 +196,11 @@ var useSelection = function (_a) {
137
196
  contextMenuSuppressorRef.current = null;
138
197
  suppressor.ownerDocument.removeEventListener("contextmenu", suppressor.handler, true);
139
198
  }, []);
140
- var suppressNextContextMenu = (0, react_1.useCallback)(function () {
199
+ var suppressNextContextMenu = (0, react_1.useCallback)(function (target) {
141
200
  var _a;
142
201
  if (contextMenuSuppressorRef.current)
143
202
  return;
144
- var ownerDocument = (_a = fillDocumentRef.current) !== null && _a !== void 0 ? _a : document;
203
+ var ownerDocument = (_a = target !== null && target !== void 0 ? target : fillDocumentRef.current) !== null && _a !== void 0 ? _a : document;
145
204
  var handler = function (e) {
146
205
  e.preventDefault();
147
206
  e.stopPropagation();
@@ -155,13 +214,19 @@ var useSelection = function (_a) {
155
214
  var onChangeSelectionsRef = (0, use_callback_ref_1.useCallbackRef)(onChangeSelections);
156
215
  /* Drag drop selection */
157
216
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
158
- var _v = tslib_1.__read((0, react_1.useReducer)(function (s) { return s + 1; }, 0), 2), _ = _v[0], forceRender = _v[1];
217
+ var _w = tslib_1.__read((0, react_1.useReducer)(function (s) { return s + 1; }, 0), 2), _ = _w[0], forceRender = _w[1];
159
218
  var isDragging = (0, react_1.useRef)(false);
160
219
  var hasUserMovedSelection = (0, react_1.useRef)(false);
161
220
  var initialDraggedSelection = (0, react_1.useRef)(undefined);
162
221
  var initialDraggedCell = (0, react_1.useRef)(undefined);
163
222
  var draggedSelection = (0, react_1.useRef)(undefined);
164
223
  var draggedSelectionIndex = (0, react_1.useRef)(undefined);
224
+ /** Mouse button that grabbed the selection border (right = Excel's drop menu on release). */
225
+ var dragButtonRef = (0, react_1.useRef)("left");
226
+ /** Border element the gesture started on: a right-click that never moved re-opens the context menu there. */
227
+ var dragTargetRef = (0, react_1.useRef)(null);
228
+ /** Copy modifier held during the drag (Ctrl / ⌥) — drives the copy cursor; the drop re-reads it. */
229
+ var _x = tslib_1.__read((0, react_1.useState)(false), 2), isDragCopy = _x[0], setIsDragCopy = _x[1];
165
230
  /**
166
231
  * Need to store in ref because on mousemove and mouseup event that are
167
232
  * registered in document
@@ -272,6 +337,9 @@ var useSelection = function (_a) {
272
337
  ) {
273
338
  return;
274
339
  }
340
+ if (!isSelectable(selectionFromStartEnd(selectionStart.current, coords))) {
341
+ return;
342
+ }
275
343
  selectionEnd.current = coords;
276
344
  // If user is navigation to the same cell
277
345
  // lets clear all selections
@@ -311,6 +379,7 @@ var useSelection = function (_a) {
311
379
  selectionPolicy,
312
380
  formulaMode,
313
381
  clearSelections,
382
+ isSelectable,
314
383
  ]);
315
384
  /* Adds a new selection, CMD key */
316
385
  var appendSelection = (0, react_1.useCallback)(function (start, end) {
@@ -320,12 +389,12 @@ var useSelection = function (_a) {
320
389
  isCellOutOfBounds(start)) {
321
390
  return;
322
391
  }
323
- selectionStart.current = start;
324
- selectionEnd.current = end;
325
392
  var range = selectionFromStartEnd(start, end);
326
- if (!range) {
393
+ if (!range || !isSelectable(range)) {
327
394
  return;
328
395
  }
396
+ selectionStart.current = start;
397
+ selectionEnd.current = end;
329
398
  emitActiveCell(sheetId, {
330
399
  rowIndex: range.startRowIndex,
331
400
  columnIndex: range.startColumnIndex,
@@ -340,6 +409,7 @@ var useSelection = function (_a) {
340
409
  selectionFromStartEnd,
341
410
  isCellOutOfBounds,
342
411
  selectionPolicy,
412
+ isSelectable,
343
413
  ]);
344
414
  var removeSelectionByIndex = (0, react_1.useCallback)(function (index) {
345
415
  var newSelection = selections.filter(function (_, idx) { return idx !== index; });
@@ -353,11 +423,11 @@ var useSelection = function (_a) {
353
423
  if (isCellOutOfBounds(start)) {
354
424
  return;
355
425
  }
356
- selectionStart.current = start;
357
- selectionEnd.current = end;
358
426
  var bounds = selectionFromStartEnd(start, end);
359
- if (!bounds)
427
+ if (!bounds || !isSelectable(bounds))
360
428
  return;
429
+ selectionStart.current = start;
430
+ selectionEnd.current = end;
361
431
  var coords = {
362
432
  rowIndex: bounds.startRowIndex,
363
433
  columnIndex: bounds.startColumnIndex,
@@ -382,6 +452,7 @@ var useSelection = function (_a) {
382
452
  emitActiveCell,
383
453
  selectionFromStartEnd,
384
454
  isCellOutOfBounds,
455
+ isSelectable,
385
456
  ]);
386
457
  /**
387
458
  * Mousemove handler
@@ -561,6 +632,44 @@ var useSelection = function (_a) {
561
632
  rowIndex: rowIndex,
562
633
  columnIndex: columnIndex,
563
634
  });
635
+ // Protection makes the target unselectable: Shift+Arrow does not extend
636
+ // onto it, and a plain move keeps going the same way until it reaches a
637
+ // selectable cell — or stays put when there is none (Excel).
638
+ if (!isCellSelectable({ rowIndex: rowIndex, columnIndex: columnIndex })) {
639
+ if (modify)
640
+ return;
641
+ var vertical = direction === grid_4.Direction.Up || direction === grid_4.Direction.Down;
642
+ var step = direction === grid_4.Direction.Up || direction === grid_4.Direction.Left ? -1 : 1;
643
+ var lower = vertical ? selectionTopBound : selectionLeftBound;
644
+ var upper = vertical ? selectionBottomBound : selectionRightBound;
645
+ var isHidden = vertical ? isHiddenRow : isHiddenColumn;
646
+ var index = vertical ? rowIndex : columnIndex;
647
+ var found = false;
648
+ for (var tries = 0; tries < SELECTABLE_SEARCH_LIMIT; tries++) {
649
+ var edge = step > 0 ? newBounds.endRowIndex : newBounds.startRowIndex;
650
+ var edgeColumn = step > 0 ? newBounds.endColumnIndex : newBounds.startColumnIndex;
651
+ index = (vertical ? edge : edgeColumn) + step;
652
+ while (index >= lower && index <= upper && isHidden(index)) {
653
+ index += step;
654
+ }
655
+ if (index < lower || index > upper)
656
+ break;
657
+ if (vertical)
658
+ rowIndex = index;
659
+ else
660
+ columnIndex = index;
661
+ newBounds = getCellBounds({ rowIndex: rowIndex, columnIndex: columnIndex });
662
+ if (isCellSelectable({
663
+ rowIndex: newBounds.startRowIndex,
664
+ columnIndex: newBounds.startColumnIndex,
665
+ })) {
666
+ found = true;
667
+ break;
668
+ }
669
+ }
670
+ if (!found)
671
+ return;
672
+ }
564
673
  var coords = {
565
674
  rowIndex: newBounds.startRowIndex,
566
675
  columnIndex: newBounds.startColumnIndex,
@@ -595,6 +704,7 @@ var useSelection = function (_a) {
595
704
  modifySelection,
596
705
  newSelection,
597
706
  selectionBottomBound,
707
+ isCellSelectable,
598
708
  selectionRightBound,
599
709
  isMergedCell,
600
710
  getDataRowCount,
@@ -1010,9 +1120,16 @@ var useSelection = function (_a) {
1010
1120
  var coords = getCellCoordsFromOffset(e.clientX, e.clientY, true);
1011
1121
  if (!coords)
1012
1122
  return;
1123
+ // A press on a cell the protection makes unselectable does nothing, and
1124
+ // starts no drag that could extend the old selection onto it.
1125
+ if (!isCellSelectable(coords) &&
1126
+ !isRowHeader(coords.columnIndex) &&
1127
+ !isColumnHeader(coords.rowIndex)) {
1128
+ return;
1129
+ }
1013
1130
  /* Check if its context menu click */
1014
1131
  var isContextMenuClick = e.button === grid_4.MouseButtonCodes.right ||
1015
- (e.button == grid_4.MouseButtonCodes.left && e.ctrlKey && helpers_1.isMac);
1132
+ (e.button == grid_4.MouseButtonCodes.left && e.ctrlKey && helpers_2.isMac);
1016
1133
  if (isContextMenuClick &&
1017
1134
  !isRowHeader(coords.columnIndex) &&
1018
1135
  !isColumnHeader(coords.rowIndex)) {
@@ -1144,6 +1261,7 @@ var useSelection = function (_a) {
1144
1261
  scrollToCell,
1145
1262
  selectAll,
1146
1263
  formulaMode,
1264
+ isCellSelectable,
1147
1265
  ]);
1148
1266
  // Keydown handler
1149
1267
  var handleKeyDown = (0, react_1.useCallback)(function (e) {
@@ -1215,11 +1333,14 @@ var useSelection = function (_a) {
1215
1333
  }
1216
1334
  break;
1217
1335
  // Add support for cycling multiple selections
1218
- case "Enter":
1336
+ case "Enter": {
1337
+ var direction = (0, helpers_1.getEnterKeyDirection)(isShiftKey, enterKeyDirection);
1338
+ if (!direction) {
1339
+ break;
1340
+ }
1219
1341
  if (selections.length && activeCell) {
1220
1342
  var range = selections[selections.length - 1].range;
1221
1343
  var activeCellBounds = getCellBounds(activeCell);
1222
- var direction = isShiftKey ? grid_4.Direction.Up : grid_4.Direction.Down;
1223
1344
  var nextCell = (0, grid_4.findNextCellWithinBounds)(activeCellBounds, range, direction);
1224
1345
  if (nextCell) {
1225
1346
  emitActiveCell(sheetId, nextCell);
@@ -1227,14 +1348,10 @@ var useSelection = function (_a) {
1227
1348
  }
1228
1349
  }
1229
1350
  else if (enableSelectOnEnterKey) {
1230
- if (isShiftKey) {
1231
- keyNavigate(grid_4.Direction.Up);
1232
- }
1233
- else {
1234
- keyNavigate(grid_4.Direction.Down);
1235
- }
1351
+ keyNavigate(direction);
1236
1352
  }
1237
1353
  break;
1354
+ }
1238
1355
  case "Tab":
1239
1356
  /* Cycle through the selections if selections.length > 0 */
1240
1357
  if (selections.length && activeCell) {
@@ -1310,6 +1427,7 @@ var useSelection = function (_a) {
1310
1427
  selectFirstCellInSheet,
1311
1428
  selectLastCellInSheet,
1312
1429
  enableSelectOnEnterKey,
1430
+ enterKeyDirection,
1313
1431
  newSelection,
1314
1432
  isHiddenRow,
1315
1433
  isHiddenColumn,
@@ -1533,6 +1651,7 @@ var useSelection = function (_a) {
1533
1651
  */
1534
1652
  var handleSelectionMouseMove = (0, react_1.useCallback)(function (e) {
1535
1653
  var _a;
1654
+ setIsDragCopy(dragButtonRef.current === "left" && (0, exports.isSelectionCopyModifier)(e));
1536
1655
  var coords = getCellCoordsFromOffset(e.clientX, e.clientY, false);
1537
1656
  if (!coords) {
1538
1657
  return;
@@ -1576,15 +1695,70 @@ var useSelection = function (_a) {
1576
1695
  var _a;
1577
1696
  var fromSelection = initialDraggedSelection.current;
1578
1697
  var toSelection = draggedSelection.current;
1579
- // Excel reads the modifier at RELEASE: Shift → insert between existing cells (I-beam),
1580
- // no modifier → overwrite (after the data prompt).
1698
+ var button = dragButtonRef.current;
1699
+ var borderTarget = dragTargetRef.current;
1700
+ var moved = !!fromSelection &&
1701
+ !!toSelection &&
1702
+ !(0, grid_4.isAreasEqual)(toSelection.range, fromSelection.range);
1703
+ /* Remove event handlers from the document the gesture started on */
1704
+ var ownerDocument = (_a = dragSelectionDocumentRef.current) !== null && _a !== void 0 ? _a : document;
1705
+ var resetGesture = function () {
1706
+ isDragging.current = false;
1707
+ draggedSelection.current = void 0;
1708
+ draggedSelectionIndex.current = void 0;
1709
+ hasUserMovedSelection.current = false;
1710
+ dragButtonRef.current = "left";
1711
+ dragTargetRef.current = null;
1712
+ setIsDragCopy(false);
1713
+ dragSelectionDocumentRef.current = null;
1714
+ ownerDocument.removeEventListener("mouseup", handleSelectionMouseUp);
1715
+ ownerDocument.removeEventListener("pointerup", handleSelectionMouseUp);
1716
+ ownerDocument.removeEventListener("mousemove", handleSelectionMouseMove);
1717
+ ownerDocument.removeEventListener("pointermove", handleSelectionMouseMove);
1718
+ };
1719
+ if (button === "right") {
1720
+ // Right-button drag (Excel): nothing changes on release — the grid opens the drop
1721
+ // menu and runs the entry the user picks. The right-button `contextmenu` follows this
1722
+ // release on Windows (on macOS it fired at press); keep swallowing it for one tick.
1723
+ // A right-click that never left the source is an ordinary right-click: the context
1724
+ // menu the press swallowed opens at the release point instead.
1725
+ var clientX_1 = e.clientX, clientY_1 = e.clientY;
1726
+ setTimeout(function () {
1727
+ releaseContextMenuSuppressor();
1728
+ if (!moved && borderTarget && "dispatchEvent" in borderTarget) {
1729
+ borderTarget.dispatchEvent(new MouseEvent("contextmenu", {
1730
+ bubbles: true,
1731
+ cancelable: true,
1732
+ clientX: clientX_1,
1733
+ clientY: clientY_1,
1734
+ button: grid_4.MouseButtonCodes.right,
1735
+ }));
1736
+ }
1737
+ }, 0);
1738
+ if (moved && fromSelection && toSelection) {
1739
+ onSelectionDragMenu === null || onSelectionDragMenu === void 0 ? void 0 : onSelectionDragMenu({
1740
+ sheetId: sheetId,
1741
+ from: fromSelection,
1742
+ to: toSelection,
1743
+ clientX: clientX_1,
1744
+ clientY: clientY_1,
1745
+ });
1746
+ }
1747
+ resetGesture();
1748
+ forceRender();
1749
+ return;
1750
+ }
1751
+ // Excel reads the modifiers at RELEASE: Shift → insert between existing cells (I-beam),
1752
+ // Ctrl (⌥ on macOS) → copy instead of move, both → insert a copy; none → move
1753
+ // (overwriting after the data prompt).
1581
1754
  var insertMode = e.shiftKey;
1755
+ var copyMode = (0, exports.isSelectionCopyModifier)(e);
1756
+ // Snapshot before the selection follows the drop, so a refusal / Cancel can restore it.
1757
+ var previousSelections = selectionsRef.current;
1582
1758
  /**
1583
1759
  * If the from and to selection area
1584
1760
  */
1585
- if (toSelection &&
1586
- fromSelection &&
1587
- !(0, grid_4.isAreasEqual)(toSelection.range, fromSelection.range)) {
1761
+ if (moved && toSelection) {
1588
1762
  /* Select the first cell in the selection area */
1589
1763
  var coords = {
1590
1764
  rowIndex: toSelection.range.startRowIndex,
@@ -1610,35 +1784,62 @@ var useSelection = function (_a) {
1610
1784
  };
1611
1785
  }
1612
1786
  }
1787
+ // Put the selection back on the source (Cancel, or a gesture the host can't run).
1788
+ var restoreSource = function (source, dropped) {
1789
+ emitActiveCell(sheetId, {
1790
+ rowIndex: source.range.startRowIndex,
1791
+ columnIndex: source.range.startColumnIndex,
1792
+ });
1793
+ onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections((0, grid_4.selectionSpansCells)(source.range)
1794
+ ? previousSelections.map(function (cur) {
1795
+ return (0, grid_4.isAreasEqual)(cur.range, dropped.range) ? source : cur;
1796
+ })
1797
+ : previousSelections.filter(function (cur) { return !(0, grid_4.isAreasEqual)(cur.range, dropped.range); }));
1798
+ focus();
1799
+ };
1800
+ var hasValue = function (rowIndex, columnIndex) {
1801
+ return !(0, grid_1.isNull)(getValue(sheetId, rowIndex, columnIndex));
1802
+ };
1613
1803
  // Callback
1614
- if (fromSelection &&
1615
- toSelection &&
1616
- !(0, grid_4.isAreasEqual)(fromSelection.range, toSelection.range)) {
1617
- if (insertMode && onInsertCutCells) {
1804
+ if (moved && fromSelection && toSelection) {
1805
+ if (copyMode && insertMode) {
1806
+ // Ctrl+Shift+drag inserts a copy (destination band shifts) — Excel shows no prompt.
1807
+ if (!onInsertCopiedCells ||
1808
+ onInsertCopiedCells(sheetId, fromSelection, toSelection) === false) {
1809
+ restoreSource(fromSelection, toSelection);
1810
+ }
1811
+ }
1812
+ else if (copyMode) {
1813
+ if (!onCopySelection) {
1814
+ restoreSource(fromSelection, toSelection);
1815
+ }
1816
+ else if ((0, move_overwrite_1.needsCopyOverwritePrompt)(toSelection.range, hasValue)) {
1817
+ // The copy would replace data: Excel asks first, Cancel puts the selection back.
1818
+ Promise.resolve(confirmMoveOverwrite(move_overwrite_1.MOVE_OVERWRITE_PROMPT)).then(function (replace) {
1819
+ if (replace &&
1820
+ onCopySelection(sheetId, fromSelection, toSelection) !== false) {
1821
+ return;
1822
+ }
1823
+ restoreSource(fromSelection, toSelection);
1824
+ });
1825
+ }
1826
+ else if (onCopySelection(sheetId, fromSelection, toSelection) === false) {
1827
+ restoreSource(fromSelection, toSelection);
1828
+ }
1829
+ }
1830
+ else if (insertMode && onInsertCutCells) {
1618
1831
  // Shift+drag inserts (displaces the destination band) — Excel shows no prompt.
1619
1832
  onInsertCutCells(sheetId, fromSelection, toSelection);
1620
1833
  }
1621
- else if ((0, move_overwrite_1.needsOverwritePrompt)(fromSelection.range, toSelection.range, function (rowIndex, columnIndex) {
1622
- return !(0, grid_1.isNull)(getValue(sheetId, rowIndex, columnIndex));
1623
- })) {
1834
+ else if ((0, move_overwrite_1.needsOverwritePrompt)(fromSelection.range, toSelection.range, hasValue)) {
1624
1835
  // The destination holds data the block would overwrite: Excel asks first. The
1625
1836
  // selection has already followed the drop; Cancel puts it back on the source.
1626
- var previousSelections_1 = selectionsRef.current;
1627
1837
  Promise.resolve(confirmMoveOverwrite(move_overwrite_1.MOVE_OVERWRITE_PROMPT)).then(function (replace) {
1628
1838
  if (replace) {
1629
1839
  onMoveSelection === null || onMoveSelection === void 0 ? void 0 : onMoveSelection(sheetId, fromSelection, toSelection);
1630
1840
  return;
1631
1841
  }
1632
- emitActiveCell(sheetId, {
1633
- rowIndex: fromSelection.range.startRowIndex,
1634
- columnIndex: fromSelection.range.startColumnIndex,
1635
- });
1636
- onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections((0, grid_4.selectionSpansCells)(fromSelection.range)
1637
- ? previousSelections_1.map(function (cur) {
1638
- return (0, grid_4.isAreasEqual)(cur.range, toSelection.range) ? fromSelection : cur;
1639
- })
1640
- : previousSelections_1.filter(function (cur) { return !(0, grid_4.isAreasEqual)(cur.range, toSelection.range); }));
1641
- focus();
1842
+ restoreSource(fromSelection, toSelection);
1642
1843
  });
1643
1844
  }
1644
1845
  else {
@@ -1648,41 +1849,37 @@ var useSelection = function (_a) {
1648
1849
  /* Focus on the grid */
1649
1850
  focus();
1650
1851
  /* Reset all references */
1651
- isDragging.current = false;
1652
- draggedSelection.current = void 0;
1653
- draggedSelectionIndex.current = void 0;
1654
- hasUserMovedSelection.current = false;
1655
- /* Remove event handlers from the document the gesture started on */
1656
- var ownerDocument = (_a = dragSelectionDocumentRef.current) !== null && _a !== void 0 ? _a : document;
1657
- dragSelectionDocumentRef.current = null;
1658
- ownerDocument.removeEventListener("mouseup", handleSelectionMouseUp);
1659
- ownerDocument.removeEventListener("pointerup", handleSelectionMouseUp);
1660
- ownerDocument.removeEventListener("mousemove", handleSelectionMouseMove);
1661
- ownerDocument.removeEventListener("pointermove", handleSelectionMouseMove);
1852
+ resetGesture();
1662
1853
  /* Force render */
1663
1854
  forceRender();
1664
1855
  }, [
1665
1856
  sheetId,
1666
1857
  onMoveSelection,
1667
1858
  onInsertCutCells,
1859
+ onCopySelection,
1860
+ onInsertCopiedCells,
1861
+ onSelectionDragMenu,
1668
1862
  confirmMoveOverwrite,
1669
1863
  getValue,
1670
1864
  handleSelectionMouseMove,
1671
1865
  focus,
1672
1866
  emitActiveCell,
1673
1867
  onChangeSelections,
1868
+ releaseContextMenuSuppressor,
1674
1869
  ]);
1675
1870
  /**
1676
1871
  * When user mouse downs on selection
1677
1872
  */
1678
1873
  var handleSelectionMouseDown = (0, react_1.useCallback)(function (e, activeCell, selection, index, shouldClamp) {
1679
- var _a;
1874
+ var _a, _b;
1680
1875
  if (shouldClamp === void 0) { shouldClamp = true; }
1681
1876
  if (e.isDefaultPrevented()) {
1682
1877
  return;
1683
1878
  }
1684
- var isContextMenu = e.button === grid_4.MouseButtonCodes.right || e.ctrlKey;
1685
- if (isContextMenu) {
1879
+ // ⌃-click is the macOS context-menu gesture; on Windows Ctrl+drag copies (read at
1880
+ // release). A right-button drag opens Excel's drop menu when the host offers one.
1881
+ var isRightButton = e.button === grid_4.MouseButtonCodes.right;
1882
+ if (isRightButton ? !onSelectionDragMenu : e.ctrlKey && (0, platform_1.isMacPlatform)()) {
1686
1883
  return;
1687
1884
  }
1688
1885
  // Keep keyboard focus in the grid. The selection border is rendered OUTSIDE the tabIndex=0
@@ -1715,6 +1912,9 @@ var useSelection = function (_a) {
1715
1912
  }
1716
1913
  /* Set dragging flag */
1717
1914
  isDragging.current = true;
1915
+ dragButtonRef.current = isRightButton ? "right" : "left";
1916
+ dragTargetRef.current = (_a = e.currentTarget) !== null && _a !== void 0 ? _a : null;
1917
+ setIsDragCopy(!isRightButton && (0, exports.isSelectionCopyModifier)(e));
1718
1918
  /* Listen on the document the gesture started on. The border cover starts
1719
1919
  * the gesture from `pointerdown`, and the preventDefault above cancels it —
1720
1920
  * a browser then withholds the compatibility mouse events (mousemove /
@@ -1722,8 +1922,13 @@ var useSelection = function (_a) {
1722
1922
  * ended: a plain click on the border left the sheet in drag-move mode
1723
1923
  * (#1048). Both pairs are registered; the first end event removes all
1724
1924
  * four, so the release runs once. */
1725
- var ownerDocument = (_a = (0, grid_3.getOwnerDocument)(e.currentTarget)) !== null && _a !== void 0 ? _a : document;
1925
+ var ownerDocument = (_b = (0, grid_3.getOwnerDocument)(e.currentTarget)) !== null && _b !== void 0 ? _b : document;
1726
1926
  dragSelectionDocumentRef.current = ownerDocument;
1927
+ if (isRightButton) {
1928
+ // The right-button `contextmenu` (at press on macOS, at release on Windows) must not
1929
+ // open the cell context menu over the drag; the release decides what opens.
1930
+ suppressNextContextMenu(ownerDocument);
1931
+ }
1727
1932
  ownerDocument.addEventListener("mouseup", handleSelectionMouseUp);
1728
1933
  ownerDocument.addEventListener("pointerup", handleSelectionMouseUp);
1729
1934
  ownerDocument.addEventListener("mousemove", handleSelectionMouseMove);
@@ -1735,6 +1940,8 @@ var useSelection = function (_a) {
1735
1940
  getCellBounds,
1736
1941
  handleSelectionMouseMove,
1737
1942
  handleSelectionMouseUp,
1943
+ onSelectionDragMenu,
1944
+ suppressNextContextMenu,
1738
1945
  ]);
1739
1946
  /**
1740
1947
  * Set selection start and end reference
@@ -1951,6 +2158,8 @@ var useSelection = function (_a) {
1951
2158
  ]);
1952
2159
  return {
1953
2160
  isDragging: isDragging.current,
2161
+ /** True while a selection-border drag would copy on release (Ctrl / ⌥ held). */
2162
+ isDragCopy: isDragCopy,
1954
2163
  draggedSelection: draggedSelection.current,
1955
2164
  initialDraggedSelection: initialDraggedSelection.current,
1956
2165
  isFilling: isFilling.current,
@@ -30,6 +30,10 @@ export * from "./components/remove-duplicates-dialog";
30
30
  export * from "./components/text-to-columns-dialog";
31
31
  export * from "./components/subtotal-dialog";
32
32
  export * from "./components/goal-seek-dialog";
33
+ export * from "./components/data-table-dialog";
34
+ export * from "./components/scenario-manager-dialog";
35
+ export * from "./components/solver-dialog";
36
+ export * from "./components/forecast-sheet-dialog";
33
37
  export * from "./components/advanced-filter-dialog";
34
38
  export * from "./components/validation-alert-dialog";
35
39
  export * from "./components/insert-cells-dialog";
@@ -73,6 +77,7 @@ export * from "./api/cf-overlays";
73
77
  export * from "./api/cf-icons";
74
78
  export * from "./api/cf-engine";
75
79
  export * from "./api/cf-priority";
80
+ export * from "./api/error-checking";
76
81
  export * from "./api/fill-patterns";
77
82
  export type { AvailableIcon } from "./components/filter-box";
78
83
  export * from "./hooks";
@@ -92,7 +97,7 @@ export { type ContextMenuWrapperProps } from "./hooks/use-context-menu";
92
97
  export * from "./api/scheduler";
93
98
  export * from "./themes";
94
99
  export * from "./signals/scroll-subscriber";
95
- export type { PasteSpecialOperation, PasteSpecialOptions, PasteSpecialRequest, PasteSpecialType, } from "./hooks/use-copy-paste-cut";
100
+ export type { PasteSpecialMode, PasteSpecialOperation, PasteSpecialOptions, PasteSpecialRequest, PasteSpecialType, } from "./hooks/use-copy-paste-cut";
96
101
  export { CHART_CLIPBOARD_MIME, CHART_PASTE_OFFSET_PIXELS, type UseChartClipboardProps, useChartClipboard, } from "./hooks/use-chart-clipboard";
97
102
  export * from "./hooks/use-formula-range-helpers";
98
103
  export * from "./utils/z-order";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.tsx"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -34,6 +34,10 @@ tslib_1.__exportStar(require("./components/remove-duplicates-dialog"), exports);
34
34
  tslib_1.__exportStar(require("./components/text-to-columns-dialog"), exports);
35
35
  tslib_1.__exportStar(require("./components/subtotal-dialog"), exports);
36
36
  tslib_1.__exportStar(require("./components/goal-seek-dialog"), exports);
37
+ tslib_1.__exportStar(require("./components/data-table-dialog"), exports);
38
+ tslib_1.__exportStar(require("./components/scenario-manager-dialog"), exports);
39
+ tslib_1.__exportStar(require("./components/solver-dialog"), exports);
40
+ tslib_1.__exportStar(require("./components/forecast-sheet-dialog"), exports);
37
41
  tslib_1.__exportStar(require("./components/advanced-filter-dialog"), exports);
38
42
  tslib_1.__exportStar(require("./components/validation-alert-dialog"), exports);
39
43
  tslib_1.__exportStar(require("./components/insert-cells-dialog"), exports);
@@ -78,6 +82,7 @@ tslib_1.__exportStar(require("./api/cf-overlays"), exports);
78
82
  tslib_1.__exportStar(require("./api/cf-icons"), exports);
79
83
  tslib_1.__exportStar(require("./api/cf-engine"), exports);
80
84
  tslib_1.__exportStar(require("./api/cf-priority"), exports);
85
+ tslib_1.__exportStar(require("./api/error-checking"), exports);
81
86
  tslib_1.__exportStar(require("./api/fill-patterns"), exports);
82
87
  tslib_1.__exportStar(require("./hooks"), exports);
83
88
  tslib_1.__exportStar(require("./components/cell/typings"), exports);
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.releaseDate = void 0;
5
5
  exports.releaseDate =
6
6
  // @ts-ignore
7
- (_a = new Date("2026-11-02")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");
7
+ (_a = new Date("2026-11-03")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");