@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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AAsDA,OAAO,KASN,MAAM,OAAO,CAAC;AAgOf,OAAO,KAAK,EAGV,QAAQ,EAWT,MAAM,aAAa,CAAC;AAoBrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AA6sMnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AAwDA,OAAO,KASN,MAAM,OAAO,CAAC;AA4Of,OAAO,KAAK,EAGV,QAAQ,EAWT,MAAM,aAAa,CAAC;AAyBrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AAqgNnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
@@ -5,12 +5,14 @@ import { getBoundedCells, MouseButtonCodes } from "@rowsncolumns/grid";
5
5
  import { isCellWithinBounds } from "@rowsncolumns/grid";
6
6
  import { cellIdentifier, Grid as BaseGrid, isEqualCells, } from "@rowsncolumns/grid";
7
7
  import { cn, DropdownMenuContent, DropdownMenuPortal, Skeleton, tryParseRichText, } from "@rowsncolumns/ui";
8
- import { cellToAddress, getCellEffectiveFormat, getContrastColor, getFormulaLocale, getEffectiveDataValidationConditionType, isConditionalFormatFormulaRule, isDataValidationFormulaRule, isNil, isNilOrBlank, iterateCellsInRange, localizeCellInput, localizeFormula, localizeFunctionDescriptions, log, resolveDefaultHorizontalAlignment, ssfFormat, ssfFormatColor, uuid, } from "@rowsncolumns/utils";
9
- import { useStore } from "jotai";
8
+ import { cellToAddress, DEFAULT_AUTOCORRECT_OPTIONS, getCellEffectiveFormat, getContrastColor, getFormulaLocale, getEffectiveDataValidationConditionType, isConditionalFormatFormulaRule, isDataValidationFormulaRule, isNil, isNilOrBlank, iterateCellsInRange, localizeCellInput, localizeFormula, localizeFunctionDescriptions, log, resolveDefaultHorizontalAlignment, ssfFormat, ssfFormatColor, uuid, } from "@rowsncolumns/utils";
9
+ import { useAtomValue, useStore } from "jotai";
10
10
  import merge from "lodash/merge";
11
11
  import throttle from "lodash/throttle";
12
12
  import React, { forwardRef, memo, startTransition, useCallback, useEffect, useMemo, useRef, useState, } from "react";
13
13
  import { getBandedCells } from "../../api/banded-ranges";
14
+ import { getErrorCheckKind, isErrorIgnored, runErrorCheckOption, } from "../../api/error-checking";
15
+ import { formulaBarEditorInstanceAtom } from "../../atoms/formula-bar-editor-value.atom";
14
16
  import { clearRangeForInsertedBand, formatsForInsertOption, insertedBandHasValues, } from "../../api/insert-options";
15
17
  import { keepsCalculatedColumnTag, } from "../../api/calculated-column-fill";
16
18
  import { keepsTableAutoExpansionTag, } from "../../api/table-auto-expansion";
@@ -22,11 +24,12 @@ import { findActiveTableWithinCell } from "../../api/table";
22
24
  import { getDataValidationTooltipContent } from "../../api/validation-tooltip";
23
25
  import { resolveGoToSpecial } from "../../api/go-to-special";
24
26
  import { checkExcelValidationValue, isFormulaEntry, } from "../../api/excel-validation-kinds";
25
- import { checkBooleanRule, decideValidationCommit, isCellFormulaHiddenUnderProtection, isCellLockedUnderProtection, isProtectedCell, isProtectedSheet, } from "../../api/validation";
26
- import { useFormulaModeValue, useIsEvaluateFormulaDialogMounted, useIsGoToDialogMounted, useIsMoveOverwriteConfirmMounted, useIsPasteSpecialDialogMounted, useOpenEvaluateFormulaDialog, useOpenGoToDialog, useOpenMoveOverwriteConfirm, useOpenPasteSpecialDialog, useSetNoteEditorCell, useSetPinnedTooltip, useFillOptionsState, useInsertOptionsState, useTableAutoExpansionState, useCalculatedColumnFillState, useOpenFillSeriesDialog, useShowPasteMenu, useShowValidationAlert, } from "../../atoms";
27
+ import { checkBooleanRule, decideValidationCommit, isCellFormulaHiddenUnderProtection, isProtectedCell, isProtectedSheet, isRangeSelectableUnderProtection, resolveProtectedCellEdit, } from "../../api/validation";
28
+ import { useFormulaModeValue, useIsEvaluateFormulaDialogMounted, useIsGoToDialogMounted, useIsMoveOverwriteConfirmMounted, useIsPasteSpecialDialogMounted, useOpenEvaluateFormulaDialog, useOpenGoToDialog, useOpenMoveOverwriteConfirm, useOpenPasteSpecialDialog, useSetNoteEditorCell, useSetPinnedTooltip, useFillOptionsState, useInsertOptionsState, useTableAutoExpansionState, useCalculatedColumnFillState, useOpenFillSeriesDialog, usePickList, useShowPasteMenu, useShowValidationAlert, } from "../../atoms";
27
29
  import { useActiveEditor } from "../../atoms/active-editor.atom";
28
30
  import { useAddWatch, useIsWatchWindowMounted, useSetWatchWindowContext, } from "../../atoms/watch-window.atom";
29
31
  import { useEditingCell } from "../../atoms/editing-cell.atom";
32
+ import { useSetEnterKeyDirection } from "../../atoms/enter-key-direction.atom";
30
33
  import { useCellEditorInstance, useSetFormulabarEditorValue, useSetFormulaBarTextFormatRuns, } from "../../atoms/formula-bar-editor-value.atom";
31
34
  import { useFormulaCanSelectCells, useFormulaSelectionMode, useSetFormulaSelectionState, } from "../../atoms/formula-selection-state.atom";
32
35
  import { useFormulaSelections } from "../../atoms/formula-selections.atom";
@@ -80,6 +83,8 @@ import { useScaleListener } from "../../hooks/use-scale-listener";
80
83
  import { useSelectedRowsColumns } from "../../hooks/use-selected-rows-columns";
81
84
  import { useSelection, } from "../../hooks/use-selection";
82
85
  import { useSelectionChange } from "../../hooks/use-selection-change";
86
+ import { useSelectionDragCopy } from "../../hooks/use-selection-drag-copy";
87
+ import { SelectionDropMenu } from "../selection-drop-menu";
83
88
  import { useSelectionInterceptors } from "../../hooks/use-selection-interceptors";
84
89
  import { useSelectionMove } from "../../hooks/use-selection-move";
85
90
  import { useSelectionRenderer } from "../../hooks/use-selection-renderer";
@@ -98,6 +103,7 @@ import { scrollSubscriber } from "../../signals/scroll-subscriber";
98
103
  import { getStringifiedColor } from "../../themes";
99
104
  import { fillRangeForSeriesSpec, seedRangeForSeriesSpec, } from "../../api/fill-series";
100
105
  import { Cell as DefaultCell } from "../cell";
106
+ import { getColumnAutoCompleteEntries, getPickListEntries, toAutoCompleteCell, } from "../../api/autocomplete";
101
107
  import { CellEditor as DefaultCellEditor } from "../cell-editor";
102
108
  import { ContextMenu as DefaultContextMenu } from "../context-menu";
103
109
  import { ContextMenuDropdown } from "../context-menu/menu";
@@ -130,7 +136,7 @@ function isDetachedEditor(editor) {
130
136
  return element != null && !element.isConnected;
131
137
  }
132
138
  function CanvasGridComponent(props, forwardedRef) {
133
- const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = FILTER_BUTTON_GLYPH_COLOR, conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, lineHeightMode = "fontMetrics", columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionStrokeWidth, showActiveCellBorderInSelection, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey: enableEditOnEnterKeyProp, shouldHandleKeyDown, enableTextOverflow = true, showGridLines: _showGridLines, showZeros, pageBreaks, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getDataRegion, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, getConditionalFormatRuleStats, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, batchHistory, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, defaultCellFormat, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
139
+ const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = FILTER_BUTTON_GLYPH_COLOR, conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, lineHeightMode = "fontMetrics", columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionStrokeWidth, showActiveCellBorderInSelection, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, allowEditRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey: enableEditOnEnterKeyProp, enterKeyDirection = "down", enableAutoCorrect, shouldHandleKeyDown, enableTextOverflow = true, showGridLines: _showGridLines, showZeros, pageBreaks, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, circleInvalidData = false, getIgnoredErrors, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getDataRegion, getArrayFormula, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onChangeArrayFormula, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, getConditionalFormatRuleStats, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onRequestUnlockAllowEditRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, enableAutoComplete = true, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertCopiedCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, batchHistory, onPaste, onReapplyPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, defaultCellFormat, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
134
140
  // Host-driven filter props. `hostHiddenRowRanges`
135
141
  // supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
136
142
  // column's distinct values. Both let a million-row filter render without scanning
@@ -149,6 +155,15 @@ function CanvasGridComponent(props, forwardedRef) {
149
155
  // Enter on a cell opens the editor in Google Sheets and moves down in
150
156
  // Excel; a host's explicit value wins under either keymap.
151
157
  const enableEditOnEnterKey = enableEditOnEnterKeyProp ?? keymap !== "excel";
158
+ // The editors that commit on Enter outside these props (the host's in-cell editor, the formula
159
+ // bar) read the direction from the provider.
160
+ const setEnterKeyDirection = useSetEnterKeyDirection();
161
+ useIsomorphicLayoutEffect(() => {
162
+ setEnterKeyDirection(enterKeyDirection);
163
+ }, [enterKeyDirection, setEnterKeyDirection]);
164
+ const autoCorrect = useMemo(() => enableAutoCorrect === true
165
+ ? DEFAULT_AUTOCORRECT_OPTIONS
166
+ : enableAutoCorrect || undefined, [enableAutoCorrect]);
152
167
  /**
153
168
  * Fire onBlur only when the cell editor blurs to an element outside the
154
169
  * spreadsheet. Routed through `useEditable` so we hook the always-focused
@@ -224,6 +239,7 @@ function CanvasGridComponent(props, forwardedRef) {
224
239
  const cellEditorInstance = useCellEditorInstance();
225
240
  // Paste menu
226
241
  const [showPasteMenu, setShowPasteMenu] = useShowPasteMenu();
242
+ const [, setPickList] = usePickList();
227
243
  // Auto Fill Options smart tag / right-drag fill menu + Series dialog
228
244
  const [fillOptions, setFillOptions] = useFillOptionsState();
229
245
  const [insertOptions, setInsertOptions] = useInsertOptionsState();
@@ -470,6 +486,11 @@ function CanvasGridComponent(props, forwardedRef) {
470
486
  * context without churning it on re-renders.
471
487
  */
472
488
  const getSheetProtectionStable = useCallbackRef(getSheetProtection);
489
+ /**
490
+ * Excel's "Select locked cells" / "Select unlocked cells" on a protected
491
+ * sheet: the selection hook refuses any range this rejects.
492
+ */
493
+ const isRangeSelectable = useCallbackRef(useCallback((range) => isRangeSelectableUnderProtection(getSheetProtection?.(sheetId), range, (rowIndex, columnIndex) => getCellData?.(sheetId, rowIndex, columnIndex)?.protection), [getSheetProtection, getCellData, sheetId]));
473
494
  /**
474
495
  * Check if the cell can be edited
475
496
  */
@@ -492,7 +513,26 @@ function CanvasGridComponent(props, forwardedRef) {
492
513
  // active, LOCKED cells refuse edits — a cell is locked unless its
493
514
  // `protection.locked` is `false` (Excel's default) — and unlocked
494
515
  // cells stay editable.
495
- const lockedBySheetProtection = isCellLockedUnderProtection(getSheetProtection?.(sheetId), getCellData?.(sheetId, rowIndex, columnIndex)?.protection);
516
+ // An Excel Allow Edit Range opens its locked cells; one behind a
517
+ // password asks for it first (Excel's Unlock Range prompt).
518
+ const protectedEdit = resolveProtectedCellEdit({
519
+ sheetId,
520
+ cell,
521
+ sheetProtection: getSheetProtection?.(sheetId),
522
+ cellProtection: getCellData?.(sheetId, rowIndex, columnIndex)
523
+ ?.protection,
524
+ allowEditRanges,
525
+ });
526
+ if (typeof protectedEdit === "object") {
527
+ if (onRequestUnlockAllowEditRange) {
528
+ onRequestUnlockAllowEditRange(sheetId, protectedEdit.unlock, cell);
529
+ }
530
+ else {
531
+ onRequestEditProtectedRange?.(sheetId, cell);
532
+ }
533
+ return false;
534
+ }
535
+ const lockedBySheetProtection = protectedEdit === "locked";
496
536
  const canEdit = !lockedBySheetProtection &&
497
537
  (protectedRanges
498
538
  ? !isProtectedCell(sheetId, cell, protectedRanges)
@@ -505,11 +545,13 @@ function CanvasGridComponent(props, forwardedRef) {
505
545
  }, [
506
546
  readonly,
507
547
  protectedRanges,
548
+ allowEditRanges,
508
549
  getSheetProtection,
509
550
  getCellData,
510
551
  isRowHeader,
511
552
  isColumnHeader,
512
553
  onRequestEditProtectedRange,
554
+ onRequestUnlockAllowEditRange,
513
555
  getPivotTableAtCell,
514
556
  ]));
515
557
  /**
@@ -921,6 +963,49 @@ function CanvasGridComponent(props, forwardedRef) {
921
963
  const getErrorValue = useCallback((sheetId, rowIndex, columnIndex) => {
922
964
  return getExtendedValueError(getEffectiveValue?.(sheetId, rowIndex, columnIndex));
923
965
  }, [getEffectiveValue]);
966
+ /**
967
+ * Excel's background error checking: the rule (formula error, number stored as text) that puts
968
+ * the green ◤ on a cell.
969
+ */
970
+ // Keyed on the active sheet's list CONTENT: an inline host lookup must not repaint every cell
971
+ // per render, while Ignore Error (a new list) must repaint the flags.
972
+ const getIgnoredErrorsStable = useCallbackRef((targetSheetId) => getIgnoredErrors?.(targetSheetId));
973
+ const activeIgnoredErrors = getIgnoredErrors?.(sheetId);
974
+ const activeIgnoredErrorsKey = JSON.stringify(activeIgnoredErrors ?? null);
975
+ // eslint-disable-next-line react-hooks/exhaustive-deps
976
+ const stableIgnoredErrors = useMemo(() => activeIgnoredErrors, [activeIgnoredErrorsKey]);
977
+ const getErrorCheck = useCallback((targetSheetId, rowIndex, columnIndex) => {
978
+ const kind = getErrorCheckKind({
979
+ userEnteredValue: getUserEnteredValue(targetSheetId, rowIndex, columnIndex),
980
+ errorValue: getErrorValue(targetSheetId, rowIndex, columnIndex),
981
+ });
982
+ if (kind &&
983
+ isErrorIgnored(targetSheetId === sheetId
984
+ ? stableIgnoredErrors
985
+ : getIgnoredErrorsStable(targetSheetId), rowIndex, columnIndex, kind)) {
986
+ return undefined;
987
+ }
988
+ return kind;
989
+ }, [
990
+ getUserEnteredValue,
991
+ getErrorValue,
992
+ getIgnoredErrorsStable,
993
+ stableIgnoredErrors,
994
+ sheetId,
995
+ ]);
996
+ // Excel's error-checking smart tag: open from its button or Alt+Shift+F10, closed when the
997
+ // active cell moves.
998
+ const [errorCheckMenuOpen, setErrorCheckMenuOpen] = useState(false);
999
+ useEffect(() => {
1000
+ setErrorCheckMenuOpen(false);
1001
+ }, [activeCell.rowIndex, activeCell.columnIndex, sheetId]);
1002
+ const showErrorCheckMenu = useCallbackRef((targetSheetId, cell) => {
1003
+ if (readonly || !getErrorCheck(targetSheetId, cell.rowIndex, cell.columnIndex)) {
1004
+ return false;
1005
+ }
1006
+ setErrorCheckMenuOpen(true);
1007
+ return true;
1008
+ });
924
1009
  /**
925
1010
  * Get notes. The host's `getNote` wins when provided — engines that keep
926
1011
  * notes off the cell data (rnc serves notes over their own channel) have
@@ -1032,9 +1117,11 @@ function CanvasGridComponent(props, forwardedRef) {
1032
1117
  * as `#ЗНАЧ!`. `useEditorSubmit` canonicalizes the text again on commit.
1033
1118
  */
1034
1119
  const getEditorDisplayValue = useCallback((sheetId, rowIndex, columnIndex) => {
1035
- const value = getUserEnteredStringValue(sheetId, rowIndex, columnIndex);
1120
+ // Every cell of a CSE array edits as the array's formula (Excel), not only its anchor.
1121
+ const value = getArrayFormula?.(sheetId, rowIndex, columnIndex)?.formula ??
1122
+ getUserEnteredStringValue(sheetId, rowIndex, columnIndex);
1036
1123
  return isNil(value) ? value : localizeCellInput(value, formulaLocale);
1037
- }, [getUserEnteredStringValue, formulaLocale]);
1124
+ }, [getUserEnteredStringValue, getArrayFormula, formulaLocale]);
1038
1125
  /**
1039
1126
  * Get cell value used for validations
1040
1127
  */
@@ -1991,6 +2078,15 @@ function CanvasGridComponent(props, forwardedRef) {
1991
2078
  }
1992
2079
  return getOwnerDocument(editorElement)?.activeElement === editorElement;
1993
2080
  }, [cellEditorInstance]);
2081
+ /**
2082
+ * The text entries of `cell`'s column block, for AutoComplete and Pick From
2083
+ * Drop-down List.
2084
+ */
2085
+ const getColumnEntries = useCallbackRef((targetSheetId, cell) => getColumnAutoCompleteEntries({
2086
+ rowIndex: cell.rowIndex,
2087
+ maxRowIndex: getSheetRowCount?.(targetSheetId) ?? rowCount,
2088
+ getCell: (r) => toAutoCompleteCell(getUserEnteredValue(targetSheetId, r, cell.columnIndex)),
2089
+ }));
1994
2090
  /**
1995
2091
  * Get Cell Editor
1996
2092
  */
@@ -2006,8 +2102,12 @@ function CanvasGridComponent(props, forwardedRef) {
2006
2102
  const editingSheetName = getSheetName?.(editingSheetId);
2007
2103
  const effectiveValue = getEffectiveValue(editingSheetId, rowIndex, columnIndex);
2008
2104
  const horizontalAlignment = getEditorHorizontalAlignment(editingSheetId, rowIndex, columnIndex);
2009
- return (React.createElement(CellEditor, { ...props, locale: locale, effectiveValue: effectiveValue, format: cellFormat, dataValidation: dataValidation, getRangeValues: getFormattedValuesFromAddress, getRangeValuesAsync: getEditorRangeValuesAsync, scale: scale, sheetName: sheetName, editingSheetId: editingSheetId, sheetId: sheetId, editingSheetName: editingSheetName, address: address, theme: theme, tokenizer: localeTokenizer, formulaLocale: formulaLocale, horizontalAlignment: horizontalAlignment, defaultBackgroundColor: cellBackgroundColor, defaultTextColor: getStringifiedColor(cellColor, theme), functionDescriptions: localizedFunctionDescriptions, getNamedRanges: getNamedRanges, getTableNames: getTableNames, getStructuredProperties: getStructuredProperties, getTableColumnNames: getTableColumnNames, showFormulaHelp: showFormulaHelp, onHideFormulaHelp: onHideFormulaHelp, onShowFormulaHelp: onShowFormulaHelp, onRequestCalculate: onRequestCalculate, SuggestionsDropdown: SuggestionsDropdown, stickyEditor: stickyEditor, defaultFontSizePoint: defaultFontSize, getMentions: getMentions, getFunctionParameterSuggestions: getFunctionParameterSuggestions, shouldFetchFunctionParameters: shouldFetchFunctionParameters, MentionTagComponent: MentionTagComponent, MentionDropdownItemComponent: MentionDropdownItemComponent }));
2105
+ return (React.createElement(CellEditor, { ...props, locale: locale, effectiveValue: effectiveValue, format: cellFormat, dataValidation: dataValidation, getRangeValues: getFormattedValuesFromAddress, getRangeValuesAsync: getEditorRangeValuesAsync, scale: scale, sheetName: sheetName, editingSheetId: editingSheetId, sheetId: sheetId, editingSheetName: editingSheetName, address: address, theme: theme, tokenizer: localeTokenizer, formulaLocale: formulaLocale, horizontalAlignment: horizontalAlignment, defaultBackgroundColor: cellBackgroundColor, defaultTextColor: getStringifiedColor(cellColor, theme), functionDescriptions: localizedFunctionDescriptions, getNamedRanges: getNamedRanges, getTableNames: getTableNames, getStructuredProperties: getStructuredProperties, getTableColumnNames: getTableColumnNames, showFormulaHelp: showFormulaHelp, onHideFormulaHelp: onHideFormulaHelp, onShowFormulaHelp: onShowFormulaHelp, onRequestCalculate: onRequestCalculate, SuggestionsDropdown: SuggestionsDropdown, stickyEditor: stickyEditor, defaultFontSizePoint: defaultFontSize, getMentions: getMentions, getFunctionParameterSuggestions: getFunctionParameterSuggestions, shouldFetchFunctionParameters: shouldFetchFunctionParameters, MentionTagComponent: MentionTagComponent, MentionDropdownItemComponent: MentionDropdownItemComponent, getAutoCompleteEntries: enableAutoComplete
2106
+ ? () => getColumnEntries(editingSheetId, cell)
2107
+ : undefined }));
2010
2108
  }, [
2109
+ enableAutoComplete,
2110
+ getColumnEntries,
2011
2111
  scale,
2012
2112
  getEffectiveCellFormat,
2013
2113
  getDataValidationRule,
@@ -2457,10 +2557,32 @@ function CanvasGridComponent(props, forwardedRef) {
2457
2557
  const handleFillShrink = useCallback((sheetId, activeCell, clearRange, options) => {
2458
2558
  onDelete?.(sheetId, activeCell, [{ range: clearRange }], options?.modifier === "toggle" ? "all" : "contents");
2459
2559
  }, [onDelete]);
2560
+ /**
2561
+ * Copy gestures of the selection border (Ctrl/⌥+drag, Ctrl+Shift/⌥⇧+drag, right-drag menu),
2562
+ * through the host's own copy → paste on a private clipboard.
2563
+ */
2564
+ const selectionDragCopy = useSelectionDragCopy({
2565
+ sheetId,
2566
+ readonly,
2567
+ onCopy,
2568
+ onPaste,
2569
+ onChangeBatch,
2570
+ onMoveSelection,
2571
+ onInsertCutCells,
2572
+ onInsertCopiedCells,
2573
+ confirmOverwrite: confirmMoveOverwrite,
2574
+ getValue: getUserEnteredStringValue,
2575
+ onChangeSelections: onSelectionChange,
2576
+ onChangeActiveCell,
2577
+ focusSheet,
2578
+ });
2579
+ const { copySelection: copySelectionDrop, insertCopiedCells: insertCopyDrop } = selectionDragCopy;
2580
+ const handleCopySelectionDrop = useCallback((_sheetId, from, to) => copySelectionDrop(from, to), [copySelectionDrop]);
2581
+ const handleInsertCopyDrop = useCallback((_sheetId, from, to) => insertCopyDrop(from, to), [insertCopyDrop]);
2460
2582
  /**
2461
2583
  * Handle grid selections
2462
2584
  */
2463
- const { onMouseDown: onMouseDownSelection, onPointerDown: onPointerDownSelection, onKeyDown: onKeyDownSelection, fillSelection, fillShrink, onFillHandleMouseDown, onFillHandleDoubleClick, isDragging, isFilling, isSelectionInProgress, draggedSelection, onSelectionMouseDown, setActiveCell, initialDraggedSelection, updateSelectionStartEndReference, selectColumn, getContentfulGridRangeAroundCell, newSelection, modifySelection, clearSelections, } = useSelection({
2585
+ const { onMouseDown: onMouseDownSelection, onPointerDown: onPointerDownSelection, onKeyDown: onKeyDownSelection, fillSelection, fillShrink, onFillHandleMouseDown, onFillHandleDoubleClick, isDragging, isDragCopy, isFilling, isSelectionInProgress, draggedSelection, onSelectionMouseDown, setActiveCell, initialDraggedSelection, updateSelectionStartEndReference, selectColumn, getContentfulGridRangeAroundCell, newSelection, modifySelection, clearSelections, } = useSelection({
2464
2586
  sheetId,
2465
2587
  getDataRowCount,
2466
2588
  getDataRegion,
@@ -2468,6 +2590,7 @@ function CanvasGridComponent(props, forwardedRef) {
2468
2590
  allowDeselectSelection: false,
2469
2591
  formulaMode,
2470
2592
  enableSelectOnEnterKey: !enableEditOnEnterKey,
2593
+ enterKeyDirection,
2471
2594
  newSelectionMode: formulaMode && canSelectCells ? selectionMode : "clear",
2472
2595
  activeCell,
2473
2596
  selections,
@@ -2495,6 +2618,9 @@ function CanvasGridComponent(props, forwardedRef) {
2495
2618
  onFillShrink: readonly ? undefined : handleFillShrink,
2496
2619
  onMoveSelection: readonly ? undefined : onMoveSelection,
2497
2620
  onInsertCutCells,
2621
+ onCopySelection: readonly ? undefined : handleCopySelectionDrop,
2622
+ onInsertCopiedCells: readonly || !onInsertCopiedCells ? undefined : handleInsertCopyDrop,
2623
+ onSelectionDragMenu: readonly ? undefined : selectionDragCopy.openDropMenu,
2498
2624
  confirmMoveOverwrite,
2499
2625
  isHiddenColumn,
2500
2626
  isHiddenRow,
@@ -2504,11 +2630,12 @@ function CanvasGridComponent(props, forwardedRef) {
2504
2630
  dataRegionBoundaries,
2505
2631
  tables,
2506
2632
  onInsertTableRow,
2633
+ isRangeSelectable: getSheetProtection ? isRangeSelectable : undefined,
2507
2634
  });
2508
2635
  /**
2509
2636
  * Copy, Paste and Cut hook
2510
2637
  */
2511
- const { copiedSelections, isCutPending, copiedSheetId, cancelCut, clearCopiedSelections, copy, cut, paste, onInternalCopy, onInternalCut, onInternalPaste, } = useCopyPasteCut({
2638
+ const { copiedSelections, isCutPending, copiedSheetId, cancelCut, clearCopiedSelections, copy, cut, paste, onInternalCopy, onInternalCut, onInternalPaste, choosePasteOption, } = useCopyPasteCut({
2512
2639
  activeCell,
2513
2640
  selections,
2514
2641
  sheetId,
@@ -2517,6 +2644,7 @@ function CanvasGridComponent(props, forwardedRef) {
2517
2644
  onPaste,
2518
2645
  onCopy,
2519
2646
  onCut,
2647
+ onReapplyPaste,
2520
2648
  });
2521
2649
  /**
2522
2650
  * Ctrl+C / Ctrl+X / Ctrl+V / Ctrl+D on a selected chart. The focused chart is
@@ -2755,6 +2883,11 @@ function CanvasGridComponent(props, forwardedRef) {
2755
2883
  onChangeBatch,
2756
2884
  batchHistory,
2757
2885
  formulaLocale,
2886
+ onChangeArrayFormula,
2887
+ getArrayFormula,
2888
+ getEffectiveFormat,
2889
+ onChangeFormatting,
2890
+ autoCorrect,
2758
2891
  });
2759
2892
  /**
2760
2893
  * User cancels editing the cell
@@ -2860,9 +2993,19 @@ function CanvasGridComponent(props, forwardedRef) {
2860
2993
  return true;
2861
2994
  }
2862
2995
  const type = getDataValidationRule(targetSheetId, cell.rowIndex, cell.columnIndex)?.condition?.type;
2863
- if (type !== "ONE_OF_LIST" && type !== "ONE_OF_RANGE") {
2996
+ if (type === "ONE_OF_LIST" || type === "ONE_OF_RANGE") {
2997
+ editCell(targetSheetId, cell);
2998
+ return true;
2999
+ }
3000
+ // Excel's Pick From Drop-down List: the column block's text entries.
3001
+ if (readonly || !canEditCell(targetSheetId, cell)) {
3002
+ return false;
3003
+ }
3004
+ const entries = getPickListEntries(getColumnEntries(targetSheetId, cell));
3005
+ if (!entries.length) {
2864
3006
  return false;
2865
3007
  }
3008
+ setPickList({ sheetId: targetSheetId, cell, entries });
2866
3009
  editCell(targetSheetId, cell);
2867
3010
  return true;
2868
3011
  });
@@ -3030,6 +3173,7 @@ function CanvasGridComponent(props, forwardedRef) {
3030
3173
  onRequestPasteSpecial: requestPasteSpecial,
3031
3174
  onRequestEditCell: requestEditCell,
3032
3175
  onShowCellList: showCellList,
3176
+ onShowErrorCheckMenu: showErrorCheckMenu,
3033
3177
  onChangeBatch,
3034
3178
  getUserEnteredValue: getUserEnteredStringValue,
3035
3179
  getEffectiveValue,
@@ -3137,6 +3281,63 @@ function CanvasGridComponent(props, forwardedRef) {
3137
3281
  tables,
3138
3282
  onInsertTableRow,
3139
3283
  });
3284
+ /**
3285
+ * Excel's error-checking smart tag on the active cell. Convert to Number and Ignore Error act on
3286
+ * every selected cell, as in Excel: Convert to Number rewrites each number stored as text as its
3287
+ * number in ONE undo step; Ignore Error records the selection in the sheet's `ignoredErrors`
3288
+ * (xlsx `<ignoredErrors>`), so the flag stays off after a save and reopen.
3289
+ */
3290
+ const formulaBarEditor = useAtomValue(formulaBarEditorInstanceAtom);
3291
+ const activeErrorCheck = !readonly
3292
+ ? getErrorCheck(sheetId, activeCell.rowIndex, activeCell.columnIndex)
3293
+ : undefined;
3294
+ const activeErrorName = activeErrorCheck === "evalError"
3295
+ ? getErrorValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)
3296
+ ?.name ??
3297
+ getFormattedValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)
3298
+ : undefined;
3299
+ const activeErrorCheckTag = useMemo(() => activeErrorCheck
3300
+ ? { kind: activeErrorCheck, errorName: activeErrorName }
3301
+ : undefined, [activeErrorCheck, activeErrorName]);
3302
+ const handleChooseErrorCheckOption = useCallbackRef((option) => {
3303
+ setErrorCheckMenuOpen(false);
3304
+ const kind = activeErrorCheck;
3305
+ if (!kind)
3306
+ return;
3307
+ const ranges = selections.length
3308
+ ? selections.map((selection) => selection.range)
3309
+ : [
3310
+ {
3311
+ startRowIndex: activeCell.rowIndex,
3312
+ endRowIndex: activeCell.rowIndex,
3313
+ startColumnIndex: activeCell.columnIndex,
3314
+ endColumnIndex: activeCell.columnIndex,
3315
+ },
3316
+ ];
3317
+ runErrorCheckOption(option, {
3318
+ sheetId,
3319
+ kind,
3320
+ errorName: activeErrorName,
3321
+ ranges,
3322
+ getUserEnteredValue: (rowIndex, columnIndex) => getUserEnteredValue(sheetId, rowIndex, columnIndex),
3323
+ maxRow: getDataRowCount?.(sheetId) ?? Number.MAX_SAFE_INTEGER,
3324
+ maxColumn: getDataColumnCount?.(sheetId) ?? Number.MAX_SAFE_INTEGER,
3325
+ getIgnoredErrors,
3326
+ onChangeBatch,
3327
+ batchHistory,
3328
+ onUpdateSheet,
3329
+ editInFormulaBar: () => {
3330
+ if (formulaBarEditor)
3331
+ formulaBarEditor.focus();
3332
+ else
3333
+ makeEditable(sheetId, activeCell);
3334
+ },
3335
+ openUrl: (url) => window.open(url, "_blank", "noopener"),
3336
+ });
3337
+ if (option === "editInFormulaBar")
3338
+ return;
3339
+ focusSheet();
3340
+ });
3140
3341
  /**
3141
3342
  * Move rows and columns
3142
3343
  */
@@ -3833,6 +4034,8 @@ function CanvasGridComponent(props, forwardedRef) {
3833
4034
  gridLineWidth,
3834
4035
  showNotes,
3835
4036
  showComments,
4037
+ getErrorCheck,
4038
+ circleInvalidData,
3836
4039
  StructuredResult,
3837
4040
  readonly,
3838
4041
  onOverflow: handleOverflow,
@@ -3958,6 +4161,7 @@ function CanvasGridComponent(props, forwardedRef) {
3958
4161
  SuggestionAction,
3959
4162
  readonly,
3960
4163
  onSplitTextToColumns,
4164
+ onChoosePasteOption: onReapplyPaste ? choosePasteOption : undefined,
3961
4165
  showPasteMenu,
3962
4166
  fillOptions,
3963
4167
  onChooseFillType: handleChooseFillType,
@@ -3971,6 +4175,10 @@ function CanvasGridComponent(props, forwardedRef) {
3971
4175
  calculatedColumnFill,
3972
4176
  canStopAutoCalculatedColumns: !!onChangeAutoCalculatedColumns,
3973
4177
  onChooseCalculatedColumnOption: handleChooseCalculatedColumnOption,
4178
+ errorCheck: activeErrorCheckTag,
4179
+ errorCheckMenuOpen,
4180
+ onErrorCheckMenuOpenChange: setErrorCheckMenuOpen,
4181
+ onChooseErrorCheckOption: handleChooseErrorCheckOption,
3974
4182
  hoveredCell: delayedHoveredCell,
3975
4183
  onRemoveQuickEdit,
3976
4184
  onAddQuickEdit,
@@ -4331,6 +4539,14 @@ function CanvasGridComponent(props, forwardedRef) {
4331
4539
  setFormulaBarTextFormatRuns(undefined);
4332
4540
  return;
4333
4541
  }
4542
+ // Excel shows a legacy CSE array's formula in braces for every cell of the array
4543
+ // (`{=SUM(A1:A3*B1:B3)}`); the braces leave once the edit starts (`getEditorDisplayValue`).
4544
+ const arrayFormula = getArrayFormula?.(sheetId, rowIndex, columnIndex);
4545
+ if (arrayFormula) {
4546
+ setFormulabarEditorValue(`{${localizeCellInput(arrayFormula.formula, formulaLocale)}}`);
4547
+ setFormulaBarTextFormatRuns(undefined);
4548
+ return;
4549
+ }
4334
4550
  const value = getUserEnteredStringValue(sheetId, rowIndex, columnIndex);
4335
4551
  const textFormatRuns = getTextFormatRuns?.(sheetId, rowIndex, columnIndex);
4336
4552
  // Update formula bar input (in the grid's formula locale, like the cell editor)
@@ -4343,6 +4559,7 @@ function CanvasGridComponent(props, forwardedRef) {
4343
4559
  editingCellCoordinate,
4344
4560
  getSheetProtection,
4345
4561
  getCellData,
4562
+ getArrayFormula,
4346
4563
  getUserEnteredStringValue,
4347
4564
  formulaLocale,
4348
4565
  setFormulabarEditorValue,
@@ -4405,7 +4622,13 @@ function CanvasGridComponent(props, forwardedRef) {
4405
4622
  // Bind to outer container, so it always takes
4406
4623
  // priority over other components
4407
4624
  // generated by hooks
4408
- onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel, ...rest, style: tableHitCursor ? { ...rest.style, cursor: tableHitCursor } : rest.style },
4625
+ onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel, ...rest, style:
4626
+ // Ctrl / ⌥ held over a selection-border drag: Excel's copy (+) pointer.
4627
+ isDragging && isDragCopy
4628
+ ? { ...rest.style, cursor: "copy" }
4629
+ : tableHitCursor
4630
+ ? { ...rest.style, cursor: tableHitCursor }
4631
+ : rest.style },
4409
4632
  width === 0 || height === 0 ? (React.createElement("div", { className: "flex border-solid border-rnc-border border border-t border-b flex-1 justify-center items-center" },
4410
4633
  React.createElement("div", { className: "space-y-2" },
4411
4634
  React.createElement(Skeleton, { className: "h-4 w-[250px]" }),
@@ -4417,6 +4640,9 @@ function CanvasGridComponent(props, forwardedRef) {
4417
4640
  draggableColumns,
4418
4641
  draggableRows,
4419
4642
  contextMenuComponent,
4643
+ selectionDragCopy.dropMenu ? (React.createElement(SelectionDropMenu, { key: `${selectionDragCopy.dropMenu.clientX}:${selectionDragCopy.dropMenu.clientY}`, x: selectionDragCopy.dropMenu.clientX -
4644
+ (gridContainerRef.current?.getBoundingClientRect().left ?? 0), y: selectionDragCopy.dropMenu.clientY -
4645
+ (gridContainerRef.current?.getBoundingClientRect().top ?? 0), actions: selectionDragCopy.dropActions, onSelectAction: selectionDragCopy.runDropAction, onCancel: selectionDragCopy.closeDropMenu })) : null,
4420
4646
  embedContextMenuComponent,
4421
4647
  filterComponent,
4422
4648
  totalsPickerComponent,