@svgrid/grid 2.6.15 → 2.6.17

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 (449) hide show
  1. package/CHANGELOG.md +346 -346
  2. package/README.md +199 -199
  3. package/dist/DockNodeView.svelte.d.ts +1 -1
  4. package/dist/DockPopoutHost.svelte.d.ts +1 -1
  5. package/dist/FlexRender.svelte +96 -96
  6. package/dist/FlexRender.svelte.d.ts +1 -1
  7. package/dist/GridFooter.svelte +181 -178
  8. package/dist/GridFooter.svelte.d.ts +3 -3
  9. package/dist/GridMenus.svelte +705 -705
  10. package/dist/GridMenus.svelte.d.ts +3 -3
  11. package/dist/SvAccordion.svelte.d.ts +3 -3
  12. package/dist/SvAutoComplete.svelte +165 -165
  13. package/dist/SvAutoComplete.svelte.d.ts +2 -2
  14. package/dist/SvAvatar.svelte +75 -75
  15. package/dist/SvBreadcrumb.svelte.d.ts +2 -2
  16. package/dist/SvButtonGroup.svelte.d.ts +3 -3
  17. package/dist/SvCalendar.svelte +503 -503
  18. package/dist/SvCalendar.svelte.d.ts +7 -7
  19. package/dist/SvCarousel.svelte +141 -141
  20. package/dist/SvCarousel.svelte.d.ts +1 -1
  21. package/dist/SvCheckBox.svelte +102 -102
  22. package/dist/SvCheckBox.svelte.d.ts +1 -1
  23. package/dist/SvCircularProgress.svelte +109 -109
  24. package/dist/SvColorInput.svelte +181 -181
  25. package/dist/SvColorInput.svelte.d.ts +1 -1
  26. package/dist/SvComboBox.svelte +275 -275
  27. package/dist/SvComboBox.svelte.d.ts +2 -2
  28. package/dist/SvCommand.svelte.d.ts +2 -2
  29. package/dist/SvContextMenu.svelte +116 -116
  30. package/dist/SvCountryInput.svelte +163 -163
  31. package/dist/SvCountryInput.svelte.d.ts +1 -1
  32. package/dist/SvDateRangeInput.svelte.d.ts +3 -3
  33. package/dist/SvDateTimePicker.svelte.d.ts +4 -4
  34. package/dist/SvDockLayout.svelte.d.ts +2 -2
  35. package/dist/SvDockManager.svelte.d.ts +2 -2
  36. package/dist/SvDrawer.svelte +254 -254
  37. package/dist/SvDropDownList.svelte +374 -374
  38. package/dist/SvDropDownList.svelte.d.ts +2 -2
  39. package/dist/SvDurationInput.svelte +126 -126
  40. package/dist/SvDurationInput.svelte.d.ts +1 -1
  41. package/dist/SvField.svelte +293 -293
  42. package/dist/SvField.svelte.d.ts +1 -1
  43. package/dist/SvFileUpload.svelte.d.ts +3 -3
  44. package/dist/SvForm.svelte +437 -437
  45. package/dist/SvForm.svelte.d.ts +4 -4
  46. package/dist/SvGauge.svelte.d.ts +1 -1
  47. package/dist/SvGrid.controller.svelte.d.ts +28 -28
  48. package/dist/SvGrid.controller.svelte.js +117 -45
  49. package/dist/SvGrid.css +2896 -2856
  50. package/dist/SvGrid.helpers.d.ts +2 -2
  51. package/dist/SvGrid.svelte +2956 -2956
  52. package/dist/SvGrid.svelte.d.ts +3 -3
  53. package/dist/SvGrid.types.d.ts +28 -7
  54. package/dist/SvGridCellEditor.svelte +662 -662
  55. package/dist/SvGridCellEditor.svelte.d.ts +2 -2
  56. package/dist/SvGridChart.svelte +1716 -1716
  57. package/dist/SvGridChart.svelte.d.ts +1 -1
  58. package/dist/SvGridChartPanel.svelte +485 -485
  59. package/dist/SvGridChartPanel.svelte.d.ts +2 -2
  60. package/dist/SvGridChartView.svelte +70 -70
  61. package/dist/SvGridChartView.svelte.d.ts +1 -1
  62. package/dist/SvGridDropdown.svelte +728 -728
  63. package/dist/SvGridDropdown.svelte.d.ts +1 -1
  64. package/dist/SvGridSelect.svelte +266 -266
  65. package/dist/SvGridSelect.svelte.d.ts +4 -4
  66. package/dist/SvGroupCell.svelte +116 -116
  67. package/dist/SvGroupCell.svelte.d.ts +1 -1
  68. package/dist/SvHoverCard.svelte.d.ts +1 -1
  69. package/dist/SvListBox.svelte +326 -326
  70. package/dist/SvListBox.svelte.d.ts +2 -2
  71. package/dist/SvMaskedInput.svelte +122 -122
  72. package/dist/SvMaskedInput.svelte.d.ts +1 -1
  73. package/dist/SvMenu.svelte +124 -124
  74. package/dist/SvMenu.svelte.d.ts +1 -1
  75. package/dist/SvMenuList.svelte +146 -146
  76. package/dist/SvMenuList.svelte.d.ts +3 -3
  77. package/dist/SvMenubar.svelte.d.ts +3 -3
  78. package/dist/SvMultiSelect.svelte +289 -289
  79. package/dist/SvMultiSelect.svelte.d.ts +3 -3
  80. package/dist/SvNavPane.svelte.d.ts +1 -1
  81. package/dist/SvNumberInput.svelte +168 -168
  82. package/dist/SvNumberInput.svelte.d.ts +1 -1
  83. package/dist/SvOtpInput.svelte +158 -158
  84. package/dist/SvOtpInput.svelte.d.ts +1 -1
  85. package/dist/SvPasswordInput.svelte +151 -151
  86. package/dist/SvPasswordInput.svelte.d.ts +1 -1
  87. package/dist/SvPhoneInput.svelte +133 -133
  88. package/dist/SvPhoneInput.svelte.d.ts +2 -2
  89. package/dist/SvPopconfirm.svelte.d.ts +1 -1
  90. package/dist/SvPopover.svelte +197 -197
  91. package/dist/SvPopover.svelte.d.ts +1 -1
  92. package/dist/SvProgress.svelte +116 -116
  93. package/dist/SvRadioGroup.svelte +107 -107
  94. package/dist/SvRadioGroup.svelte.d.ts +3 -3
  95. package/dist/SvRating.svelte +112 -112
  96. package/dist/SvRating.svelte.d.ts +1 -1
  97. package/dist/SvResult.svelte +73 -73
  98. package/dist/SvRichText.svelte +211 -211
  99. package/dist/SvRowGroupPanel.svelte +170 -170
  100. package/dist/SvScrollArea.svelte +61 -61
  101. package/dist/SvSegmented.svelte.d.ts +3 -3
  102. package/dist/SvSlider.svelte +203 -203
  103. package/dist/SvSlider.svelte.d.ts +1 -1
  104. package/dist/SvSparkline.svelte.d.ts +1 -1
  105. package/dist/SvSplitter.svelte.d.ts +3 -3
  106. package/dist/SvStepper.svelte.d.ts +2 -2
  107. package/dist/SvSwitchButton.svelte +108 -108
  108. package/dist/SvSwitchButton.svelte.d.ts +1 -1
  109. package/dist/SvTabs.svelte.d.ts +3 -3
  110. package/dist/SvTagsInput.svelte +115 -115
  111. package/dist/SvTagsInput.svelte.d.ts +1 -1
  112. package/dist/SvTextArea.svelte.d.ts +1 -1
  113. package/dist/SvTextInput.svelte +147 -147
  114. package/dist/SvTextInput.svelte.d.ts +1 -1
  115. package/dist/SvTimePicker.svelte +245 -245
  116. package/dist/SvTimePicker.svelte.d.ts +3 -3
  117. package/dist/SvTimeline.svelte.d.ts +2 -2
  118. package/dist/SvToaster.svelte +159 -159
  119. package/dist/SvToggleButton.svelte +85 -85
  120. package/dist/SvToggleButton.svelte.d.ts +1 -1
  121. package/dist/SvTooltip.svelte +161 -161
  122. package/dist/SvTooltip.svelte.d.ts +1 -1
  123. package/dist/SvTour.svelte +208 -208
  124. package/dist/SvTour.svelte.d.ts +3 -3
  125. package/dist/SvTree.svelte +444 -444
  126. package/dist/SvTree.svelte.d.ts +3 -3
  127. package/dist/SvTreeSelect.svelte +235 -235
  128. package/dist/SvTreeSelect.svelte.d.ts +3 -3
  129. package/dist/advanced-filter.svelte.d.ts +1 -1
  130. package/dist/ai.d.ts +1 -1
  131. package/dist/ai.js +1 -1
  132. package/dist/build-api.d.ts +2 -2
  133. package/dist/build-api.js +8 -8
  134. package/dist/builtin-editors.js +1 -1
  135. package/dist/cdn/{GridMenus-CPdy5dxw.js → GridMenus-3kKYmYOE.js} +2 -2
  136. package/dist/cdn/{GridMenus-BLajq_RP.js → GridMenus-BcDiwQ9U.js} +2 -2
  137. package/dist/cdn/{SvDateTimePicker-CHnUkWcH.js → SvDateTimePicker-DSUhIta8.js} +2 -2
  138. package/dist/cdn/{SvDateTimePicker-CRQH_U7E.js → SvDateTimePicker-h9kPyszT.js} +2 -2
  139. package/dist/cdn/{SvGridCellEditor-BGUCzuPB.js → SvGridCellEditor-DkyQO6FV.js} +1 -1
  140. package/dist/cdn/{SvGridCellEditor-G8IMWIws.js → SvGridCellEditor-JpJSRhDx.js} +1 -1
  141. package/dist/cdn/{SvGridChart-BwVos976.js → SvGridChart-Bs2GIR2Q.js} +1 -1
  142. package/dist/cdn/{SvGridChart-BEJmNNx9.js → SvGridChart-CwhFz7GV.js} +1 -1
  143. package/dist/cdn/{SvGridChartPanel-BOknOkrP.js → SvGridChartPanel-1WXuStzM.js} +1 -1
  144. package/dist/cdn/{SvGridChartPanel-D2PjII4O.js → SvGridChartPanel-e5_nqNP9.js} +1 -1
  145. package/dist/cdn/{SvGridChartView-00LPUHL1.js → SvGridChartView-SmPW10dI.js} +1 -1
  146. package/dist/cdn/{SvGridChartView-BhUEJ5ki.js → SvGridChartView-eSPuJE6g.js} +1 -1
  147. package/dist/cdn/{SvGridDropdown-D0VdjeR8.js → SvGridDropdown-B1ZcLpgs.js} +1 -1
  148. package/dist/cdn/{SvGridDropdown-D13MtJ2j.js → SvGridDropdown-CtdbHcIS.js} +1 -1
  149. package/dist/cdn/{src-ogpR-lHu.js → src-D79V6bCA.js} +298 -296
  150. package/dist/cdn/{src-CKpl94Cx.js → src-DMZZVVFd.js} +297 -295
  151. package/dist/cdn/svgrid.js +6 -6
  152. package/dist/cdn/svgrid.svelte-external.js +6 -6
  153. package/dist/cell-render.d.ts +3 -3
  154. package/dist/cell-render.js +6 -6
  155. package/dist/cell-values.d.ts +1 -1
  156. package/dist/cell-values.js +1 -1
  157. package/dist/chart-export.d.ts +1 -1
  158. package/dist/chart-export.js +8 -8
  159. package/dist/clipboard.d.ts +2 -2
  160. package/dist/clipboard.js +5 -5
  161. package/dist/column-groups.js +1 -1
  162. package/dist/columns.d.ts +2 -2
  163. package/dist/columns.js +1 -1
  164. package/dist/core.d.ts +1 -1
  165. package/dist/core.js +1 -1
  166. package/dist/createAutocomplete.svelte.d.ts +1 -1
  167. package/dist/createAutocomplete.svelte.js +2 -2
  168. package/dist/createButtonGroup.svelte.js +1 -1
  169. package/dist/createCalendar.svelte.d.ts +4 -4
  170. package/dist/createCalendar.svelte.js +4 -4
  171. package/dist/createCarousel.svelte.d.ts +1 -1
  172. package/dist/createCheckbox.svelte.js +1 -1
  173. package/dist/createColorInput.svelte.js +1 -1
  174. package/dist/createCombobox.svelte.d.ts +1 -1
  175. package/dist/createCombobox.svelte.js +2 -2
  176. package/dist/createCommand.svelte.d.ts +1 -1
  177. package/dist/createCommand.svelte.js +2 -2
  178. package/dist/createCountryInput.svelte.d.ts +1 -1
  179. package/dist/createCountryInput.svelte.js +2 -2
  180. package/dist/createDateTimePicker.svelte.d.ts +1 -1
  181. package/dist/createDateTimePicker.svelte.js +3 -3
  182. package/dist/createDropdownList.svelte.d.ts +1 -1
  183. package/dist/createDropdownList.svelte.js +2 -2
  184. package/dist/createFileUpload.svelte.js +1 -1
  185. package/dist/createForm.svelte.d.ts +1 -1
  186. package/dist/createForm.svelte.js +2 -2
  187. package/dist/createGrid.svelte.d.ts +1 -1
  188. package/dist/createGrid.svelte.js +1 -1
  189. package/dist/createGridState.svelte.d.ts +1 -1
  190. package/dist/createListbox.svelte.d.ts +1 -1
  191. package/dist/createListbox.svelte.js +2 -2
  192. package/dist/createMaskedInput.svelte.js +2 -2
  193. package/dist/createMenu.svelte.d.ts +2 -2
  194. package/dist/createMenu.svelte.js +2 -2
  195. package/dist/createNumberInput.svelte.js +1 -1
  196. package/dist/createOverlay.svelte.js +3 -3
  197. package/dist/createPagination.d.ts +1 -1
  198. package/dist/createPagination.js +1 -1
  199. package/dist/createPasswordInput.svelte.js +1 -1
  200. package/dist/createPhoneInput.svelte.js +3 -3
  201. package/dist/createPopoverSelect.svelte.d.ts +1 -1
  202. package/dist/createPopoverSelect.svelte.js +3 -3
  203. package/dist/createRadioGroup.svelte.js +1 -1
  204. package/dist/createRating.svelte.js +1 -1
  205. package/dist/createSlider.svelte.js +1 -1
  206. package/dist/createSwitch.svelte.js +1 -1
  207. package/dist/createTabs.svelte.d.ts +1 -1
  208. package/dist/createTagsInput.svelte.js +1 -1
  209. package/dist/createToggle.svelte.js +1 -1
  210. package/dist/createTooltip.svelte.js +1 -1
  211. package/dist/createTree.svelte.d.ts +1 -1
  212. package/dist/datetime/date-restrict.d.ts +1 -1
  213. package/dist/datetime/date-restrict.js +1 -1
  214. package/dist/datetime/date-selection.js +1 -1
  215. package/dist/dock-context.d.ts +1 -1
  216. package/dist/dock-manager-model.d.ts +1 -1
  217. package/dist/dock-manager-model.js +1 -1
  218. package/dist/dock-popout.d.ts +1 -1
  219. package/dist/dock-popout.js +1 -1
  220. package/dist/editing.d.ts +2 -2
  221. package/dist/editing.js +5 -5
  222. package/dist/editor-registry.d.ts +1 -1
  223. package/dist/editors/cell-editors.js +1 -1
  224. package/dist/export-format.d.ts +2 -2
  225. package/dist/export-format.js +2 -2
  226. package/dist/export-provider.d.ts +1 -1
  227. package/dist/facet-buckets.d.ts +1 -1
  228. package/dist/facet-buckets.js +1 -1
  229. package/dist/features.d.ts +2 -2
  230. package/dist/features.js +2 -2
  231. package/dist/filter-operators.d.ts +2 -2
  232. package/dist/filter-operators.js +1 -1
  233. package/dist/form-field.d.ts +1 -1
  234. package/dist/grid-messages.js +1 -1
  235. package/dist/headless.d.ts +11 -4
  236. package/dist/headless.js +11 -4
  237. package/dist/index.d.ts +120 -120
  238. package/dist/index.js +111 -111
  239. package/dist/keyboard-handlers.d.ts +2 -2
  240. package/dist/keyboard-handlers.js +2 -2
  241. package/dist/keyboard.d.ts +1 -1
  242. package/dist/menus.d.ts +3 -3
  243. package/dist/menus.js +3 -3
  244. package/dist/named-views.d.ts +1 -1
  245. package/dist/pivot-view.svelte.d.ts +1 -1
  246. package/dist/recurrence.d.ts +1 -1
  247. package/dist/recurrence.js +1 -1
  248. package/dist/row-drag.js +1 -1
  249. package/dist/scheduler-ical.d.ts +1 -1
  250. package/dist/scheduler-model.d.ts +3 -3
  251. package/dist/scheduler-model.js +2 -2
  252. package/dist/scroll-sync.d.ts +2 -2
  253. package/dist/scroll-sync.js +1 -1
  254. package/dist/selection.d.ts +2 -2
  255. package/dist/selection.js +3 -3
  256. package/dist/server-data-source.d.ts +1 -1
  257. package/dist/server-group-model.d.ts +1 -1
  258. package/dist/static-functions.d.ts +1 -1
  259. package/dist/static-functions.js +1 -1
  260. package/dist/subscribe.d.ts +1 -1
  261. package/dist/summaries.d.ts +2 -2
  262. package/dist/summaries.js +3 -3
  263. package/dist/svgrid-wrapper.types.d.ts +5 -5
  264. package/dist/themes/index.d.ts +3 -1
  265. package/dist/themes/index.js +4 -2
  266. package/dist/toast-store.svelte.js +1 -1
  267. package/dist/tree-select.d.ts +1 -1
  268. package/dist/virtualization/column-virtualizer.d.ts +3 -3
  269. package/dist/virtualization/column-virtualizer.js +1 -1
  270. package/dist/virtualization/svelte-virtualizer.svelte.d.ts +3 -3
  271. package/dist/virtualization/svelte-virtualizer.svelte.js +1 -1
  272. package/dist/virtualization/virtualizer.d.ts +1 -1
  273. package/package.json +23 -11
  274. package/src/FlexRender.svelte +96 -96
  275. package/src/GridFooter.svelte +181 -178
  276. package/src/GridMenus.svelte +705 -705
  277. package/src/SvAutoComplete.svelte +165 -165
  278. package/src/SvAvatar.svelte +75 -75
  279. package/src/SvCalendar.svelte +503 -503
  280. package/src/SvCalendar.test.ts +226 -226
  281. package/src/SvCarousel.svelte +141 -141
  282. package/src/SvCheckBox.svelte +102 -102
  283. package/src/SvCircularProgress.svelte +109 -109
  284. package/src/SvColorInput.svelte +181 -181
  285. package/src/SvComboBox.svelte +275 -275
  286. package/src/SvContextMenu.svelte +116 -116
  287. package/src/SvCountryInput.svelte +163 -163
  288. package/src/SvDrawer.svelte +254 -254
  289. package/src/SvDropDownList.svelte +374 -374
  290. package/src/SvDurationInput.svelte +126 -126
  291. package/src/SvField.svelte +293 -293
  292. package/src/SvForm.svelte +437 -437
  293. package/src/SvForm.test.ts +411 -411
  294. package/src/SvGrid.controller.svelte.ts +3974 -3898
  295. package/src/SvGrid.css +2896 -2856
  296. package/src/SvGrid.svelte +2956 -2956
  297. package/src/SvGrid.types.ts +1790 -1769
  298. package/src/SvGridCellEditor.svelte +662 -662
  299. package/src/SvGridChart.svelte +1716 -1716
  300. package/src/SvGridChartPanel.svelte +485 -485
  301. package/src/SvGridChartView.svelte +70 -70
  302. package/src/SvGridDropdown.svelte +728 -728
  303. package/src/SvGridSelect.svelte +266 -266
  304. package/src/SvGroupCell.svelte +116 -116
  305. package/src/SvListBox.svelte +326 -326
  306. package/src/SvMaskedInput.svelte +122 -122
  307. package/src/SvMenu.svelte +124 -124
  308. package/src/SvMenu.test.ts +97 -97
  309. package/src/SvMenuList.svelte +146 -146
  310. package/src/SvMultiSelect.svelte +289 -289
  311. package/src/SvNumberInput.svelte +168 -168
  312. package/src/SvOtpInput.svelte +158 -158
  313. package/src/SvPasswordInput.svelte +151 -151
  314. package/src/SvPhoneInput.svelte +133 -133
  315. package/src/SvPopover.svelte +197 -197
  316. package/src/SvProgress.svelte +116 -116
  317. package/src/SvRadioGroup.svelte +107 -107
  318. package/src/SvRating.svelte +112 -112
  319. package/src/SvResult.svelte +73 -73
  320. package/src/SvRichText.svelte +211 -211
  321. package/src/SvRowGroupPanel.svelte +170 -170
  322. package/src/SvScrollArea.svelte +61 -61
  323. package/src/SvSlider.svelte +203 -203
  324. package/src/SvSwitchButton.svelte +108 -108
  325. package/src/SvTagsInput.svelte +115 -115
  326. package/src/SvTextInput.svelte +147 -147
  327. package/src/SvTimePicker.svelte +245 -245
  328. package/src/SvToaster.svelte +159 -159
  329. package/src/SvToaster.test.ts +95 -95
  330. package/src/SvToggleButton.svelte +85 -85
  331. package/src/SvTooltip.svelte +161 -161
  332. package/src/SvTour.svelte +208 -208
  333. package/src/SvTree.svelte +444 -444
  334. package/src/SvTreeSelect.svelte +235 -235
  335. package/src/a11y/dismissable.test.ts +119 -119
  336. package/src/a11y/dismissable.ts +114 -114
  337. package/src/a11y.contract.test.ts +49 -49
  338. package/src/a11y.test.ts +59 -59
  339. package/src/a11y.ts +61 -61
  340. package/src/ai.test.ts +502 -502
  341. package/src/ai.ts +1391 -1391
  342. package/src/build-api.coverage.test.ts +633 -633
  343. package/src/build-api.ts +846 -846
  344. package/src/builtin-editors.grid.test.ts +83 -83
  345. package/src/cell-formatting.ts +169 -169
  346. package/src/cell-render.test.ts +513 -513
  347. package/src/cell-render.ts +496 -496
  348. package/src/cell-values.ts +118 -118
  349. package/src/chart-export.ts +201 -201
  350. package/src/chart-view.svelte.ts +36 -36
  351. package/src/chart.ts +2295 -2295
  352. package/src/collaboration.test.ts +104 -104
  353. package/src/collaboration.ts +167 -167
  354. package/src/core.performance.test.ts +30 -30
  355. package/src/core.ts +1261 -1261
  356. package/src/createAutocomplete.svelte.ts +132 -132
  357. package/src/createCombobox.svelte.ts +191 -191
  358. package/src/createCountryInput.svelte.ts +157 -157
  359. package/src/createDropdownList.svelte.ts +168 -168
  360. package/src/createForm.svelte.ts +386 -386
  361. package/src/createGrid.svelte.ts +42 -42
  362. package/src/createGrid.test.ts +10 -10
  363. package/src/createGridState.svelte.ts +17 -17
  364. package/src/createListbox.svelte.ts +250 -250
  365. package/src/createMenu.svelte.ts +224 -224
  366. package/src/createPopoverSelect.svelte.ts +213 -213
  367. package/src/createSlider.svelte.ts +191 -191
  368. package/src/createTooltip.svelte.ts +144 -144
  369. package/src/createTree.svelte.ts +319 -319
  370. package/src/editing.test.ts +949 -949
  371. package/src/editing.ts +606 -606
  372. package/src/editor-contract.ts +170 -170
  373. package/src/editor-registry.grid.test.ts +144 -144
  374. package/src/editor-registry.ts +122 -122
  375. package/src/export-data-api.test.ts +126 -126
  376. package/src/export-format.test.ts +107 -107
  377. package/src/export-format.ts +601 -601
  378. package/src/filter-operators.ts +160 -160
  379. package/src/flex-render.ts +3 -3
  380. package/src/form-field.ts +127 -127
  381. package/src/group-display.test.ts +167 -167
  382. package/src/group-display.ts +200 -200
  383. package/src/headless.ts +87 -80
  384. package/src/index.ts +754 -754
  385. package/src/js-scroller.svelte.ts +173 -173
  386. package/src/keyboard-handlers.ts +270 -270
  387. package/src/keyboard.test.ts +59 -59
  388. package/src/keyboard.ts +97 -97
  389. package/src/list-nav.test.ts +49 -49
  390. package/src/list-nav.ts +29 -29
  391. package/src/list-option.test.ts +56 -56
  392. package/src/list-option.ts +172 -172
  393. package/src/menus.ts +567 -567
  394. package/src/merge-objects.ts +48 -48
  395. package/src/overlays.test.ts +90 -90
  396. package/src/render-component.ts +28 -28
  397. package/src/row-drag-touch.ts +211 -211
  398. package/src/row-drag.test.ts +353 -353
  399. package/src/row-drag.ts +415 -415
  400. package/src/row-resize.ts +210 -210
  401. package/src/scheduler-model.test.ts +562 -562
  402. package/src/scheduler-model.ts +872 -872
  403. package/src/selection.test.ts +754 -754
  404. package/src/selection.ts +491 -491
  405. package/src/server-data-source.test.ts +383 -383
  406. package/src/server-data-source.ts +469 -469
  407. package/src/sparkline.test.ts +68 -68
  408. package/src/sparkline.ts +169 -169
  409. package/src/spreadsheet.test.ts +488 -488
  410. package/src/spreadsheet.ts +312 -312
  411. package/src/static-functions.ts +11 -11
  412. package/src/subscribe.ts +38 -38
  413. package/src/svgrid-wrapper.types.ts +558 -558
  414. package/src/svgrid.async-editor-options.test.ts +273 -273
  415. package/src/svgrid.auto-row-height.test.ts +204 -204
  416. package/src/svgrid.behavior.test.ts +912 -704
  417. package/src/svgrid.charting.test.ts +534 -534
  418. package/src/svgrid.comments-autocomplete.test.ts +127 -127
  419. package/src/svgrid.context-menu.test.ts +147 -147
  420. package/src/svgrid.features.test.ts +157 -157
  421. package/src/svgrid.filter-depth.test.ts +163 -163
  422. package/src/svgrid.filter-menu-listbox.svelte.test.ts +331 -331
  423. package/src/svgrid.filter-menu-scroll.test.ts +112 -112
  424. package/src/svgrid.grand-total.test.ts +188 -188
  425. package/src/svgrid.group-display-mode.test.ts +171 -171
  426. package/src/svgrid.group-footers.test.ts +121 -121
  427. package/src/svgrid.group-pagination.test.ts +153 -153
  428. package/src/svgrid.new-features.wrapper.test.ts +251 -251
  429. package/src/svgrid.tree-data.test.ts +186 -186
  430. package/src/svgrid.wrapper.test.ts +63 -63
  431. package/src/svgriddropdown.async-panel.svelte.test.ts +195 -195
  432. package/src/test-setup.ts +62 -62
  433. package/src/themes/index.ts +288 -286
  434. package/src/toast-store.svelte.ts +246 -246
  435. package/src/toast-store.test.ts +147 -147
  436. package/src/tree-row-model.test.ts +168 -168
  437. package/src/ui-buttons.test.ts +144 -144
  438. package/src/ui-inputs.test.ts +118 -118
  439. package/src/ui-localization.test.ts +113 -113
  440. package/src/ui-range.test.ts +70 -70
  441. package/src/ui-selection.test.ts +155 -155
  442. package/src/ui-tier1.test.ts +142 -142
  443. package/src/virtual.test.ts +88 -88
  444. package/src/virtualization/column-virtualizer.test.ts +27 -27
  445. package/src/virtualization/column-virtualizer.ts +30 -30
  446. package/src/virtualization/svelte-virtualizer.svelte.ts +26 -26
  447. package/src/virtualization/types.ts +30 -30
  448. package/src/virtualization/virtualizer.test.ts +47 -47
  449. package/src/virtualization/virtualizer.ts +322 -322
@@ -1,7 +1,7 @@
1
- export type { FormField, FormFieldType, FormSection, FormEntry } from './form-field';
2
- import { type FormEntry } from './form-field';
3
- import { type FormMessages } from './createForm.svelte';
4
- import type { EditorDir } from './editor-contract';
1
+ export type { FormField, FormFieldType, FormSection, FormEntry } from './form-field.js';
2
+ import { type FormEntry } from './form-field.js';
3
+ import { type FormMessages } from './createForm.svelte.js';
4
+ import type { EditorDir } from './editor-contract.js';
5
5
  type Props = {
6
6
  fields: ReadonlyArray<FormEntry>;
7
7
  initial?: Record<string, any>;
@@ -6,7 +6,7 @@
6
6
  * The arc/needle geometry + `role="meter"` ARIA live in the headless
7
7
  * `createGauge` core; this component is just one styled renderer over it.
8
8
  */
9
- import { type EditorDir } from './editor-contract';
9
+ import { type EditorDir } from './editor-contract.js';
10
10
  type Band = {
11
11
  from: number;
12
12
  to: number;
@@ -1,10 +1,10 @@
1
- import { type GridPredicateExpr, type CellEditorOption, type Column, type ColumnDef, type Row, type RowData, type TableFeatures, type ChartType, type ChartSpec, type ChartValueFormat } from "./index";
2
- import "./sv-grid-scrollbar";
3
- import { type ColumnStat } from "./conditional-formatting";
4
- import type { Props, SelectionRange, CellEditState, FilterOperator, MenuPosition, ContextMenuTarget, ChartingConfig } from "./SvGrid.types";
5
- import { operatorOption, operatorsForColumn, defaultOperatorFor, operatorLabelFor } from "./filter-operators";
6
- import { type FacetBucket, isBucketableColumn, buildBuckets, isInBucket } from "./facet-buckets";
7
- import { getColumnBaseValue, isGroupRow, toolPanelHeaderLabel, formatSummaryNumeric, getColumnAlign, getPinnedCellValue, getColumnAccessorValue, columnDefMatchesId } from "./cell-values";
1
+ import { type GridPredicateExpr, type CellEditorOption, type Column, type ColumnDef, type Row, type RowData, type TableFeatures, type ChartType, type ChartSpec, type ChartValueFormat } from "./index.js";
2
+ import "./sv-grid-scrollbar.js";
3
+ import { type ColumnStat } from "./conditional-formatting.js";
4
+ import type { Props, SelectionRange, CellEditState, FilterOperator, MenuPosition, ContextMenuTarget, ChartingConfig } from "./SvGrid.types.js";
5
+ import { operatorOption, operatorsForColumn, defaultOperatorFor, operatorLabelFor } from "./filter-operators.js";
6
+ import { type FacetBucket, isBucketableColumn, buildBuckets, isInBucket } from "./facet-buckets.js";
7
+ import { getColumnBaseValue, isGroupRow, toolPanelHeaderLabel, formatSummaryNumeric, getColumnAlign, getPinnedCellValue, getColumnAccessorValue, columnDefMatchesId } from "./cell-values.js";
8
8
  /**
9
9
  * SvGrid controller. The component's entire reactive core - every $state,
10
10
  * $derived, $effect and handler - lives here so SvGrid.svelte can stay a thin
@@ -110,7 +110,7 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
110
110
  readonly selectionColumnWidth: number;
111
111
  readonly rowNumberColumnWidth: number;
112
112
  readonly showRowNumbersEffective: boolean;
113
- readonly filterOperatorOptions: import("./SvGrid.types").FilterOption[];
113
+ readonly filterOperatorOptions: import("./SvGrid.types.js").FilterOption[];
114
114
  readonly TEXT_OPERATORS: FilterOperator[];
115
115
  readonly NUMBER_OPERATORS: FilterOperator[];
116
116
  readonly DATE_OPERATORS: FilterOperator[];
@@ -175,11 +175,11 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
175
175
  rows: Array<Row<TData>>;
176
176
  }) => Row<TData>[];
177
177
  readonly resolveEffectiveFeatures: () => TableFeatures;
178
- readonly grid: import("./createGrid.svelte").SvelteGrid<TableFeatures, TData, {}>;
178
+ readonly grid: import("./createGrid.svelte.js").SvelteGrid<TableFeatures, TData, {}>;
179
179
  userColumnOrder: string[];
180
180
  lastSeededOrder: string;
181
181
  readonly allColumns: Column<TData>[];
182
- readonly headerGroups: import("./core").HeaderGroup<TData>[];
182
+ readonly headerGroups: import("./core.js").HeaderGroup<TData>[];
183
183
  readonly groupHeaderRows: {
184
184
  id: string;
185
185
  cells: {
@@ -256,13 +256,13 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
256
256
  readonly getColumnBaseValue: typeof getColumnBaseValue;
257
257
  readonly hasConditionalFormats: boolean;
258
258
  readonly conditionalColumnStats: Map<string, ColumnStat>;
259
- readonly cellConditionalFormat: (row: Row<TData>, column: Column<TData>, value: unknown) => import("./conditional-formatting").ResolvedCellFormat | null;
259
+ readonly cellConditionalFormat: (row: Row<TData>, column: Column<TData>, value: unknown) => import("./conditional-formatting.js").ResolvedCellFormat | null;
260
260
  readonly isGroupRow: typeof isGroupRow;
261
261
  readonly isCellEditable: (column: Column<TData>, row?: Row<TData> | undefined) => boolean;
262
262
  readonly isCellEditableAt: (rowIndex: number, colIndex: number) => boolean;
263
263
  readonly sortDirectionByColumn: Record<string, false | "asc" | "desc">;
264
264
  readonly groupingColumns: any;
265
- readonly groupDisplayMode: import("./group-display").GroupDisplayType;
265
+ readonly groupDisplayMode: import("./group-display.js").GroupDisplayType;
266
266
  readonly groupColumnMode: boolean;
267
267
  readonly autoGroupCell: (row: Row<TData>, columnId: string) => {
268
268
  label: string;
@@ -297,12 +297,12 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
297
297
  readonly toolPanelHeaderLabel: typeof toolPanelHeaderLabel;
298
298
  readonly toggleColumnVisibleInPanel: (columnId: string) => void;
299
299
  readonly moveColumnInPanel: (columnId: string, dir: -1 | 1) => void;
300
- readonly messages: import("./grid-messages").GridMessages;
301
- readonly pivotConfig: import("./pivot-view.svelte").GridPivotConfig<TData> | null;
300
+ readonly messages: import("./grid-messages.js").GridMessages;
301
+ readonly pivotConfig: import("./pivot-view.svelte.js").GridPivotConfig<TData> | null;
302
302
  readonly pivotActive: boolean;
303
303
  readonly pivotResult: {
304
- rows: import("./pivot-view.svelte").GridPivotRow[];
305
- columns: ColumnDef<TableFeatures, import("./pivot-view.svelte").GridPivotRow>[];
304
+ rows: import("./pivot-view.svelte.js").GridPivotRow[];
305
+ columns: ColumnDef<TableFeatures, import("./pivot-view.svelte.js").GridPivotRow>[];
306
306
  } | null;
307
307
  readonly pivotModeOn: boolean;
308
308
  readonly hasPivotEngine: boolean;
@@ -395,33 +395,33 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
395
395
  lastFiltersSerialized: string;
396
396
  readonly virtualizer: {
397
397
  readonly version: number;
398
- setOptions: (next: Partial<import("./index").VirtualizerOptions>) => void;
398
+ setOptions: (next: Partial<import("./index.js").VirtualizerOptions>) => void;
399
399
  setScrollOffset: (scrollOffset: number) => void;
400
400
  setViewportHeight: (viewportHeight: number) => void;
401
401
  scrollToIndex: (index: number) => void;
402
- getVirtualItems: () => import("./index").VirtualItem[];
402
+ getVirtualItems: () => import("./index.js").VirtualItem[];
403
403
  getTotalSize: () => number;
404
404
  getOffsetForIndex: (index: number) => number;
405
405
  getSizeForIndex: (index: number) => number;
406
- getState: () => import("./index").VirtualizerState;
406
+ getState: () => import("./index.js").VirtualizerState;
407
407
  };
408
408
  readonly columnVirtualizer: {
409
409
  setViewportWidth(viewportWidth: number): void;
410
410
  setHorizontalOffset(scrollOffset: number): void;
411
- setOptions(next: Partial<import("./index").VirtualizerOptions>): void;
411
+ setOptions(next: Partial<import("./index.js").VirtualizerOptions>): void;
412
412
  setScrollOffset(scrollOffset: number): void;
413
413
  setViewportHeight(viewportHeight: number): void;
414
414
  scrollToIndex(index: number): void;
415
- getVirtualItems(): import("./index").VirtualItem[];
415
+ getVirtualItems(): import("./index.js").VirtualItem[];
416
416
  getTotalSize(): number;
417
417
  getOffsetForIndex(index: number): number;
418
418
  getSizeForIndex(index: number): number;
419
- getState(): import("./index").VirtualizerState;
419
+ getState(): import("./index.js").VirtualizerState;
420
420
  subscribe(listener: () => void): () => boolean;
421
421
  };
422
422
  readonly rowVirtualizationEnabled: boolean;
423
423
  readonly columnVirtualizationEnabled: boolean;
424
- readonly virtualRows: import("./index").VirtualItem[];
424
+ readonly virtualRows: import("./index.js").VirtualItem[];
425
425
  readonly autoRowHeightOn: boolean;
426
426
  /** Svelte action: measure this row and report its natural height. */
427
427
  readonly measureRowHeight: (node: HTMLElement, index: number) => {
@@ -441,9 +441,9 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
441
441
  readonly rowBottomSpacer: number;
442
442
  readonly domToLogicalRowOffset: (domTop: number) => number;
443
443
  readonly logicalToDomRowOffset: (logical: number) => number;
444
- readonly virtualColumns: import("./index").VirtualItem[];
444
+ readonly virtualColumns: import("./index.js").VirtualItem[];
445
445
  readonly virtualColumnTotalSize: number;
446
- readonly renderedColumnItems: import("./index").VirtualItem[] | {
446
+ readonly renderedColumnItems: import("./index.js").VirtualItem[] | {
447
447
  index: number;
448
448
  key: number;
449
449
  size: any;
@@ -472,7 +472,7 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
472
472
  readonly formatSummaryNumeric: typeof formatSummaryNumeric;
473
473
  readonly computeSummaries: (rows: readonly Row<TData>[], columns: readonly Column<TData>[]) => Record<string, string>;
474
474
  readonly SUMMARY_DEFER_CELL_LIMIT: number;
475
- summaryByColumn: Record<string, string>;
475
+ readonly summaryByColumn: Record<string, string>;
476
476
  hasMeasured: boolean;
477
477
  scrollBottomArmed: boolean;
478
478
  readonly onBodyScroll: (event: Event) => void;
@@ -601,7 +601,7 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
601
601
  readonly updateFilterMenuValueTo: (columnId: string, valueTo: string) => void;
602
602
  readonly toggleCheckboxWithKeyboard: (event: KeyboardEvent, toggle: () => void) => void;
603
603
  readonly getColumnAccessorValue: typeof getColumnAccessorValue;
604
- readonly fallbackOperatorOption: import("./SvGrid.types").FilterOption;
604
+ readonly fallbackOperatorOption: import("./SvGrid.types.js").FilterOption;
605
605
  readonly operatorOption: typeof operatorOption;
606
606
  readonly operatorsForColumn: typeof operatorsForColumn;
607
607
  readonly defaultOperatorFor: typeof defaultOperatorFor;
@@ -647,6 +647,6 @@ export declare function createSvGridController<TFeatures extends TableFeatures =
647
647
  readonly clearColumnFilter: (columnId: string) => void;
648
648
  readonly onWindowKeydown: (event: KeyboardEvent) => void;
649
649
  readonly columnDefMatchesId: typeof columnDefMatchesId;
650
- readonly buildApi: () => import("./svgrid-wrapper.types").SvGridApi<TFeatures, TData>;
650
+ readonly buildApi: () => import("./svgrid-wrapper.types.js").SvGridApi<TFeatures, TData>;
651
651
  apiNotified: boolean;
652
652
  };
@@ -1,33 +1,33 @@
1
- import { applyGroupAggregate, applyRowPredicate, compileExcelFilter, getAdvancedFilterEngine, normalizeForFilter, createColumnVirtualizer, createCoreRowModel, createExpandedRowModel, createFilteredRowModel, createGroupedRowModel, createTreeRowModel, createSvelteVirtualizer, createSortedRowModel, createSvGrid, getGridCellDomId, sortFns, } from "./index";
2
- import { createRowScrollScaling, resolveMaxDomHeight, } from "./virtualization/scroll-scaling";
3
- import { buildPreMeasureItems } from "./virtualization/virtualizer";
4
- import "./sv-grid-scrollbar";
5
- import { computeColumnStat, formatsNeedingStats, formatNeedsStats, } from "./conditional-formatting";
6
- import { rawToNumber, } from "./SvGrid.helpers";
7
- import { createFeatures } from "./features";
8
- import { createScrollSync, } from "./scroll-sync";
9
- import { createKeyboard, } from "./keyboard-handlers";
10
- import { createSummaries, } from "./summaries";
11
- import { createMenus, } from "./menus";
12
- import { createCellRender, } from "./cell-render";
13
- import { createEditing, } from "./editing";
14
- import { createSelection, } from "./selection";
15
- import { createColumns, } from "./columns";
16
- import { createRowDrag, } from "./row-drag";
17
- import { createAlignedGrids, } from "./aligned-grids";
18
- import { resolveColumnTypes, } from "./column-types";
19
- import { computeColumnGroupMeta, hiddenLeavesForCollapse, } from "./column-groups";
20
- import { resolveColumnId } from "./column-id";
21
- import { buildAutoGroupColumns, insertGroupFooters, paginateGroupedRows } from "./group-display";
22
- import { createGridApi, } from "./build-api";
23
- import { createClipboard, } from "./clipboard";
24
- import { resolveGridMessages } from "./grid-messages";
25
- import { announce } from "./a11y/live-region";
26
- import { filterAnnouncement, selectionAnnouncement, } from "./a11y/grid-announcements";
27
- import { getPivotEngine, hasPivotEngine } from "./pivot-view.svelte";
28
- import { filterOperatorOptions, fallbackOperatorOption, TEXT_OPERATORS, NUMBER_OPERATORS, DATE_OPERATORS, CHECKBOX_OPERATORS, operatorOption, operatorsForColumn, defaultOperatorFor, operatorLabelFor, } from "./filter-operators";
29
- import { isBucketableColumn, buildBuckets, isInBucket, } from "./facet-buckets";
30
- import { getColumnBaseValue, isGroupRow, toolPanelHeaderLabel, formatSummaryNumeric, getColumnAlign, getPinnedCellValue, getColumnAccessorValue, columnDefMatchesId, } from "./cell-values";
1
+ import { applyGroupAggregate, applyRowPredicate, compileExcelFilter, getAdvancedFilterEngine, normalizeForFilter, createColumnVirtualizer, createCoreRowModel, createExpandedRowModel, createFilteredRowModel, createGroupedRowModel, createTreeRowModel, createSvelteVirtualizer, createSortedRowModel, createSvGrid, getGridCellDomId, sortFns, } from "./index.js";
2
+ import { createRowScrollScaling, resolveMaxDomHeight, } from "./virtualization/scroll-scaling.js";
3
+ import { buildPreMeasureItems } from "./virtualization/virtualizer.js";
4
+ import "./sv-grid-scrollbar.js";
5
+ import { computeColumnStat, formatsNeedingStats, formatNeedsStats, } from "./conditional-formatting.js";
6
+ import { rawToNumber, } from "./SvGrid.helpers.js";
7
+ import { createFeatures } from "./features.js";
8
+ import { createScrollSync, } from "./scroll-sync.js";
9
+ import { createKeyboard, } from "./keyboard-handlers.js";
10
+ import { createSummaries, } from "./summaries.js";
11
+ import { createMenus, } from "./menus.js";
12
+ import { createCellRender, } from "./cell-render.js";
13
+ import { createEditing, } from "./editing.js";
14
+ import { createSelection, } from "./selection.js";
15
+ import { createColumns, } from "./columns.js";
16
+ import { createRowDrag, } from "./row-drag.js";
17
+ import { createAlignedGrids, } from "./aligned-grids.js";
18
+ import { resolveColumnTypes, } from "./column-types.js";
19
+ import { computeColumnGroupMeta, hiddenLeavesForCollapse, } from "./column-groups.js";
20
+ import { resolveColumnId } from "./column-id.js";
21
+ import { buildAutoGroupColumns, insertGroupFooters, paginateGroupedRows } from "./group-display.js";
22
+ import { createGridApi, } from "./build-api.js";
23
+ import { createClipboard, } from "./clipboard.js";
24
+ import { resolveGridMessages } from "./grid-messages.js";
25
+ import { announce } from "./a11y/live-region.js";
26
+ import { filterAnnouncement, selectionAnnouncement, } from "./a11y/grid-announcements.js";
27
+ import { getPivotEngine, hasPivotEngine } from "./pivot-view.svelte.js";
28
+ import { filterOperatorOptions, fallbackOperatorOption, TEXT_OPERATORS, NUMBER_OPERATORS, DATE_OPERATORS, CHECKBOX_OPERATORS, operatorOption, operatorsForColumn, defaultOperatorFor, operatorLabelFor, } from "./filter-operators.js";
29
+ import { isBucketableColumn, buildBuckets, isInBucket, } from "./facet-buckets.js";
30
+ import { getColumnBaseValue, isGroupRow, toolPanelHeaderLabel, formatSummaryNumeric, getColumnAlign, getPinnedCellValue, getColumnAccessorValue, columnDefMatchesId, } from "./cell-values.js";
31
31
  import { untrack } from "svelte";
32
32
  /**
33
33
  * Conservative fallback for the browser's max element height, used during SSR
@@ -399,7 +399,12 @@ export function createSvGridController(rawProps, domIdBase) {
399
399
  const showRowSelectionEffective = $derived(props.showRowSelection ??
400
400
  ((props.selectionMode ?? "both") === "row" ||
401
401
  (props.selectionMode ?? "both") === "both"));
402
- const enableCellSelectionEffective = $derived(props.enableCellSelection ??
402
+ // `selectable` is the shortcut alias, so it wins over the fine-grained prop,
403
+ // which in turn wins over `selectionMode` - the same precedence the other
404
+ // shortcuts use. Unlike them it starts ON (selectionMode defaults to 'both'),
405
+ // so its real work is `selectable={false}`.
406
+ const enableCellSelectionEffective = $derived(props.selectable ??
407
+ props.enableCellSelection ??
403
408
  ((props.selectionMode ?? "both") === "cell" ||
404
409
  (props.selectionMode ?? "both") === "both"));
405
410
  // Internal source-of-truth for data and column defs. Seeded from props and
@@ -1766,7 +1771,7 @@ export function createSvGridController(rawProps, domIdBase) {
1766
1771
  let chartEngine = $state(null);
1767
1772
  $effect(() => {
1768
1773
  if (chartingEnabled && !chartEngine)
1769
- import("./chart").then((m) => (chartEngine = m.rowsToChartSpec));
1774
+ import("./chart.js").then((m) => (chartEngine = m.rowsToChartSpec));
1770
1775
  });
1771
1776
  const chartSpec = $derived.by(() => {
1772
1777
  if (!chartingEnabled || !chartCfg)
@@ -2180,7 +2185,50 @@ export function createSvGridController(rawProps, domIdBase) {
2180
2185
  // before the grid ever appears. Smaller grids compute inline so the
2181
2186
  // footer is correct on the first frame (no flicker).
2182
2187
  const SUMMARY_DEFER_CELL_LIMIT = 50000;
2183
- let summaryByColumn = $state({});
2188
+ /** Deferred summaries for a grid too big to total inline. A grid under the
2189
+ * cell limit is handled by `eagerSummaries` below - synchronously, so the
2190
+ * totals are in the SERVER-rendered footer too. */
2191
+ let deferredSummaries = $state({});
2192
+ /**
2193
+ * The aggregator, handed over once `createSummaries(ctx)` has run - it needs
2194
+ * `ctx`, which cannot exist this early. Held in `$state` so `eagerSummaries`
2195
+ * recomputes when it lands.
2196
+ *
2197
+ * The whole dance is to keep the declaration ABOVE `ctx`: a `$derived`
2198
+ * referenced before its declaration is mis-compiled (the binding is dropped
2199
+ * and the `ctx` getter comes out with an empty body, so the footer read
2200
+ * `undefined` and threw on the first column id).
2201
+ */
2202
+ let summarize = $state(null);
2203
+ /**
2204
+ * Footer totals for a grid small enough to aggregate inline, derived rather
2205
+ * than assigned from an `$effect`.
2206
+ *
2207
+ * Effects never run during SSR, so when the totals lived only in the effect
2208
+ * the server emitted a summary row of EMPTY cells: the numbers appeared only
2209
+ * after hydration (a visible pop-in), and never at all for a reader with
2210
+ * JavaScript off - while the row still took up space and drew its border.
2211
+ * A `$derived` runs on the server too, so the totals ship with the HTML.
2212
+ *
2213
+ * `null` above the cell limit - that case stays on the rAF-deferred effect,
2214
+ * which keeps a huge grid painting before it totals.
2215
+ */
2216
+ const eagerSummaries = $derived.by(() => {
2217
+ if (!summarize)
2218
+ return null;
2219
+ if (!(props.enableRowSummaries ?? true))
2220
+ return null;
2221
+ const rows = allRows;
2222
+ const columns = allColumns;
2223
+ if (rows.length * columns.length > SUMMARY_DEFER_CELL_LIMIT)
2224
+ return null;
2225
+ // `computeSummaries` reads `editedCellValues` through `ctx`, so an inline
2226
+ // edit re-runs this too.
2227
+ return summarize(rows, columns);
2228
+ });
2229
+ /** What the footer renders: the inline totals when the grid is small enough,
2230
+ * otherwise the rAF-deferred ones. */
2231
+ const summaryByColumn = $derived(eagerSummaries ?? deferredSummaries);
2184
2232
  $effect(() => {
2185
2233
  // Re-aggregate whenever the data / columns / edits change. We depend on
2186
2234
  // `allRows` / `allColumns` / `editedCellValues` DIRECTLY - not the
@@ -2194,19 +2242,20 @@ export function createSvGridController(rawProps, domIdBase) {
2194
2242
  const rows = allRows;
2195
2243
  const columns = allColumns;
2196
2244
  if (!(props.enableRowSummaries ?? true)) {
2197
- summaryByColumn = {};
2245
+ deferredSummaries = {};
2198
2246
  return;
2199
2247
  }
2200
2248
  if (rows.length * columns.length <= SUMMARY_DEFER_CELL_LIMIT ||
2201
2249
  typeof requestAnimationFrame === "undefined") {
2202
- summaryByColumn = computeSummaries(rows, columns);
2250
+ // Small enough to total inline - `eagerSummaries` already did, and it
2251
+ // wins in the getter, so there is nothing to recompute here.
2203
2252
  return;
2204
2253
  }
2205
2254
  // Large grid: paint first, total a frame later.
2206
2255
  let cancelled = false;
2207
2256
  const handle = requestAnimationFrame(() => {
2208
2257
  if (!cancelled)
2209
- summaryByColumn = computeSummaries(rows, columns);
2258
+ deferredSummaries = computeSummaries(rows, columns);
2210
2259
  });
2211
2260
  return () => {
2212
2261
  cancelled = true;
@@ -2409,18 +2458,39 @@ export function createSvGridController(rawProps, domIdBase) {
2409
2458
  // width/height stays in sync. Always attached (window resize / parent
2410
2459
  // layout shift / sidebar collapse can change the size whether the
2411
2460
  // consumer passed a numeric or "100%" containerHeight).
2412
- /** True after the first ResizeObserver tick - i.e. once the grid has
2413
- * measured its real container size and `fitColumns` has had a chance
2414
- * to scale the columns to that width. Used to gate the scrollbar
2415
- * visibility: rendering it before this flips paints a horizontal
2416
- * scrollbar for ONE frame (based on the base column widths summing
2417
- * larger than the viewport), then immediately hides it once fit
2418
- * scaling kicks in - visible as a "flashing horizontal scrollbar"
2419
- * every time a demo first loads. */
2461
+ /** True once the grid has measured its real container size and `fitColumns`
2462
+ * has had a chance to scale the columns to that width. Gates the scrollbar
2463
+ * visibility, the scrollbar gutter on a trailing right-aligned column and
2464
+ * the top pager: rendering those before this flips paints a horizontal
2465
+ * scrollbar for ONE frame (based on the base column widths summing larger
2466
+ * than the viewport), then immediately hides it once fit scaling kicks in -
2467
+ * visible as a "flashing horizontal scrollbar" every time a demo first
2468
+ * loads. */
2420
2469
  let hasMeasured = $state(false);
2421
2470
  $effect(() => {
2422
2471
  if (!scrollContainer)
2423
2472
  return;
2473
+ // Measure SYNCHRONOUSLY here, not just from the observer below. Effects run
2474
+ // after the DOM is in place but before the browser paints, so reading the
2475
+ // container now lets the very first painted frame already carry the
2476
+ // scrollbars, the fit-scaled column widths, the 16px gutter on a trailing
2477
+ // right-aligned column and the top pager (which has a `border-top`).
2478
+ // `observeSizeRaf` has to defer its callback by a frame (or the
2479
+ // ResizeObserver re-notifies within one delivery cycle), so relying on it
2480
+ // alone guarantees one painted frame in the unmeasured state - a visible
2481
+ // flash on EVERY mount, and therefore on every navigation in an app that
2482
+ // recreates the grid (e.g. a `{#key}` around it, or a route that remounts).
2483
+ // `untrack` keeps the writes below from making this effect depend on
2484
+ // `viewportVersion` (it would then re-run and re-attach the observer).
2485
+ untrack(() => {
2486
+ // A zero-height container means the grid is not laid out yet (hidden
2487
+ // ancestor, `display: none`); leave it unmeasured and let the observer
2488
+ // flip it when the box becomes real.
2489
+ if (scrollContainer && scrollContainer.clientHeight > 0) {
2490
+ viewportVersion += 1;
2491
+ hasMeasured = true;
2492
+ }
2493
+ });
2424
2494
  return observeSizeRaf(scrollContainer, () => {
2425
2495
  viewportVersion += 1;
2426
2496
  if (!hasMeasured)
@@ -3225,7 +3295,6 @@ export function createSvGridController(rawProps, domIdBase) {
3225
3295
  get computeSummaries() { return computeSummaries; },
3226
3296
  get SUMMARY_DEFER_CELL_LIMIT() { return SUMMARY_DEFER_CELL_LIMIT; },
3227
3297
  get summaryByColumn() { return summaryByColumn; },
3228
- set summaryByColumn(v) { summaryByColumn = v; },
3229
3298
  get hasMeasured() { return hasMeasured; },
3230
3299
  set hasMeasured(v) { hasMeasured = v; },
3231
3300
  get scrollBottomArmed() { return scrollBottomArmed; },
@@ -3379,6 +3448,9 @@ export function createSvGridController(rawProps, domIdBase) {
3379
3448
  const { showTooltipFor, hideTooltip, flushScheduledScrollSync, scheduleScrollSync, onBodyScroll } = createScrollSync(ctx);
3380
3449
  const { onGridKeyDown, onWindowKeydown, onHeaderSortClick } = createKeyboard(ctx);
3381
3450
  const { computeSummaries, hasRenderedColumn } = createSummaries(ctx);
3451
+ // Hand the aggregator to `eagerSummaries` (declared above `ctx`, which this
3452
+ // needs). Plain assignment during init - no effect, so SSR gets it too.
3453
+ summarize = computeSummaries;
3382
3454
  const { updateFilterRow, updateFilterOperator, updateFilterMenuValue, updateFilterMenuValueTo, addFilterToken, removeFilterToken, toggleFilterToken, toggleCheckboxWithKeyboard, isColumnFiltered, closeMenus, openInSuggest, closeInSuggest, openChooseColumns, openColumnMenu, openFilterMenu, openOperatorMenu, sortColumnFromMenu, clearColumnSort, groupByColumnFromMenu, clearGroupingFromMenu, isFacetChecked, toggleFacetValue, setFacetSelection, setFilterTokens, isAllFacetsChecked, toggleAllFacets, clearColumnFilter, changePage, goToPage, setPageSize, openContextMenu, closeContextMenu, contextMenuItems, saveComment, removeComment, closeCommentEditor } = createMenus(ctx);
3383
3455
  const { cellConditionalFormat, computeRowClass, computeCellClass, computeCellTooltip, computeCellValidity, computeCellNote, getColumnEditorOptions, areEditorOptionsLoading, formatListCellValue, formatCellValue, formatPinnedValue, computePinnedCellClass } = createCellRender(ctx);
3384
3456
  const { isCellEditable, isCellEditableAt, getRowColumnValue, getCellDisplayValue, startEditingWithChar, startEditing, stopEditing, startFullRowEdit, setFullRowDraft, commitFullRowEdit, cancelFullRowEdit, saveEditingCell, applyHistoryStep, updateEditingCellValue, onEditorKeyDown, commitAndMoveByTab, focusOnMount, onCellDoubleClick, pasteFromClipboard, onGridPaste } = createEditing(ctx);