@svgrid/grid 2.6.6 → 2.6.8
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.
- package/CHANGELOG.md +346 -0
- package/README.md +199 -199
- package/dist/FlexRender.svelte +96 -96
- package/dist/GridFooter.svelte +178 -178
- package/dist/GridMenus.svelte +705 -705
- package/dist/SvAutoComplete.svelte +165 -165
- package/dist/SvAvatar.svelte +75 -75
- package/dist/SvCalendar.svelte +503 -503
- package/dist/SvCarousel.svelte +141 -141
- package/dist/SvCheckBox.svelte +102 -102
- package/dist/SvCircularProgress.svelte +109 -109
- package/dist/SvColorInput.svelte +181 -181
- package/dist/SvComboBox.svelte +275 -275
- package/dist/SvContextMenu.svelte +116 -116
- package/dist/SvCountryInput.svelte +163 -163
- package/dist/SvDrawer.svelte +254 -254
- package/dist/SvDropDownList.svelte +374 -374
- package/dist/SvDurationInput.svelte +126 -126
- package/dist/SvField.svelte +293 -293
- package/dist/SvForm.svelte +437 -437
- package/dist/SvGrid.controller.svelte.d.ts +1 -0
- package/dist/SvGrid.controller.svelte.js +44 -12
- package/dist/SvGrid.css +2856 -2846
- package/dist/SvGrid.svelte +2956 -3548
- package/dist/SvGridCellEditor.svelte +662 -0
- package/dist/SvGridCellEditor.svelte.d.ts +46 -0
- package/dist/SvGridChart.svelte +1716 -1716
- package/dist/SvGridChartPanel.svelte +485 -485
- package/dist/SvGridChartView.svelte +70 -70
- package/dist/SvGridDropdown.svelte +728 -728
- package/dist/SvGridSelect.svelte +266 -266
- package/dist/SvGroupCell.svelte +116 -116
- package/dist/SvListBox.svelte +326 -326
- package/dist/SvMaskedInput.svelte +122 -122
- package/dist/SvMenu.svelte +124 -124
- package/dist/SvMenuList.svelte +146 -146
- package/dist/SvMultiSelect.svelte +289 -289
- package/dist/SvNumberInput.svelte +168 -168
- package/dist/SvOtpInput.svelte +158 -158
- package/dist/SvPasswordInput.svelte +151 -151
- package/dist/SvPhoneInput.svelte +133 -133
- package/dist/SvPopover.svelte +197 -197
- package/dist/SvProgress.svelte +116 -116
- package/dist/SvRadioGroup.svelte +107 -107
- package/dist/SvRating.svelte +112 -112
- package/dist/SvResult.svelte +73 -73
- package/dist/SvRichText.svelte +211 -211
- package/dist/SvRowGroupPanel.svelte +170 -170
- package/dist/SvScrollArea.svelte +61 -61
- package/dist/SvSlider.svelte +203 -203
- package/dist/SvSwitchButton.svelte +108 -108
- package/dist/SvTagsInput.svelte +115 -115
- package/dist/SvTextInput.svelte +147 -147
- package/dist/SvTimePicker.svelte +245 -245
- package/dist/SvToaster.svelte +159 -159
- package/dist/SvToggleButton.svelte +85 -85
- package/dist/SvTooltip.svelte +161 -161
- package/dist/SvTour.svelte +208 -208
- package/dist/SvTree.svelte +444 -444
- package/dist/SvTreeSelect.svelte +235 -235
- package/dist/cdn/{GridMenus-CBvjL5u4.js → GridMenus-D3JbtKWp.js} +29 -28
- package/dist/cdn/GridMenus-g9aHrUhs.js +488 -0
- package/dist/cdn/{SvDateTimePicker-CHnUkWcH.js → SvDateTimePicker-DSUhIta8.js} +2 -2
- package/dist/cdn/{SvDateTimePicker-CRQH_U7E.js → SvDateTimePicker-h9kPyszT.js} +2 -2
- package/dist/cdn/SvGridCellEditor-DkyQO6FV.js +523 -0
- package/dist/cdn/SvGridCellEditor-JpJSRhDx.js +522 -0
- package/dist/cdn/{SvGridChart-BwVos976.js → SvGridChart-Bs2GIR2Q.js} +1 -1
- package/dist/cdn/{SvGridChart-BEJmNNx9.js → SvGridChart-CwhFz7GV.js} +1 -1
- package/dist/cdn/{SvGridChartPanel-BOknOkrP.js → SvGridChartPanel-1WXuStzM.js} +1 -1
- package/dist/cdn/{SvGridChartPanel-D2PjII4O.js → SvGridChartPanel-e5_nqNP9.js} +1 -1
- package/dist/cdn/{SvGridChartView-00LPUHL1.js → SvGridChartView-SmPW10dI.js} +1 -1
- package/dist/cdn/{SvGridChartView-BhUEJ5ki.js → SvGridChartView-eSPuJE6g.js} +1 -1
- package/dist/cdn/{SvGridDropdown-D0VdjeR8.js → SvGridDropdown-B1ZcLpgs.js} +1 -1
- package/dist/cdn/{SvGridDropdown-D13MtJ2j.js → SvGridDropdown-CtdbHcIS.js} +1 -1
- package/dist/cdn/editor-registry-CiI0xlKg.js +141 -0
- package/dist/cdn/row-drag-touch-Ddaa-QeB.js +91 -0
- package/dist/cdn/{src-3WKN7L4G.js → src-B76QPix7.js} +3877 -4387
- package/dist/cdn/{src-Cl7h5-Ux.js → src-cKs_0jXV.js} +9648 -10158
- package/dist/cdn/svgrid.js +8 -7
- package/dist/cdn/svgrid.svelte-external.js +8 -7
- package/dist/chart-export.js +8 -8
- package/dist/headless.d.ts +22 -0
- package/dist/headless.js +22 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/_svelte_metadata.json +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/_metadata.json +178 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js +3843 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js +23 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js +1925 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js +206 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js +20 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js +264 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js +698 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/package.json +3 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js +135 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js +57 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_attachments.js +2 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js +46691 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js +239 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_events.js +2 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js +6 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_client.js +7 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js +6 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js +7 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js +7 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js +7 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_server.js +6 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js +85 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js +561 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js +26 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js +124 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_server.js +2 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js +91 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js +242 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js +497 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js +4929 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js +192 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js +10 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js.map +1 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js +140 -0
- package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js.map +1 -0
- package/dist/row-drag-touch.d.ts +18 -0
- package/dist/row-drag-touch.js +185 -0
- package/dist/row-drag.d.ts +2 -0
- package/dist/row-drag.js +156 -5
- package/dist/virtualization/virtualizer.d.ts +14 -0
- package/dist/virtualization/virtualizer.js +21 -0
- package/package.json +18 -12
- package/src/FlexRender.svelte +96 -96
- package/src/GridFooter.svelte +178 -178
- package/src/GridMenus.svelte +705 -705
- package/src/SvAutoComplete.svelte +165 -165
- package/src/SvAvatar.svelte +75 -75
- package/src/SvCalendar.svelte +503 -503
- package/src/SvCalendar.test.ts +226 -226
- package/src/SvCarousel.svelte +141 -141
- package/src/SvCheckBox.svelte +102 -102
- package/src/SvCircularProgress.svelte +109 -109
- package/src/SvColorInput.svelte +181 -181
- package/src/SvComboBox.svelte +275 -275
- package/src/SvContextMenu.svelte +116 -116
- package/src/SvCountryInput.svelte +163 -163
- package/src/SvDrawer.svelte +254 -254
- package/src/SvDropDownList.svelte +374 -374
- package/src/SvDurationInput.svelte +126 -126
- package/src/SvField.svelte +293 -293
- package/src/SvForm.svelte +437 -437
- package/src/SvForm.test.ts +411 -411
- package/src/SvGrid.controller.svelte.ts +3898 -3858
- package/src/SvGrid.css +2856 -2846
- package/src/SvGrid.svelte +2956 -3548
- package/src/SvGrid.types.ts +1769 -1769
- package/src/SvGridCellEditor.svelte +662 -0
- package/src/SvGridChart.svelte +1716 -1716
- package/src/SvGridChartPanel.svelte +485 -485
- package/src/SvGridChartView.svelte +70 -70
- package/src/SvGridDropdown.svelte +728 -728
- package/src/SvGridSelect.svelte +266 -266
- package/src/SvGroupCell.svelte +116 -116
- package/src/SvListBox.svelte +326 -326
- package/src/SvMaskedInput.svelte +122 -122
- package/src/SvMenu.svelte +124 -124
- package/src/SvMenu.test.ts +97 -97
- package/src/SvMenuList.svelte +146 -146
- package/src/SvMultiSelect.svelte +289 -289
- package/src/SvNumberInput.svelte +168 -168
- package/src/SvOtpInput.svelte +158 -158
- package/src/SvPasswordInput.svelte +151 -151
- package/src/SvPhoneInput.svelte +133 -133
- package/src/SvPopover.svelte +197 -197
- package/src/SvProgress.svelte +116 -116
- package/src/SvRadioGroup.svelte +107 -107
- package/src/SvRating.svelte +112 -112
- package/src/SvResult.svelte +73 -73
- package/src/SvRichText.svelte +211 -211
- package/src/SvRowGroupPanel.svelte +170 -170
- package/src/SvScrollArea.svelte +61 -61
- package/src/SvSlider.svelte +203 -203
- package/src/SvSwitchButton.svelte +108 -108
- package/src/SvTagsInput.svelte +115 -115
- package/src/SvTextInput.svelte +147 -147
- package/src/SvTimePicker.svelte +245 -245
- package/src/SvToaster.svelte +159 -159
- package/src/SvToaster.test.ts +95 -95
- package/src/SvToggleButton.svelte +85 -85
- package/src/SvTooltip.svelte +161 -161
- package/src/SvTour.svelte +208 -208
- package/src/SvTree.svelte +444 -444
- package/src/SvTreeSelect.svelte +235 -235
- package/src/a11y/dismissable.test.ts +119 -119
- package/src/a11y/dismissable.ts +114 -114
- package/src/a11y.contract.test.ts +49 -49
- package/src/a11y.test.ts +59 -59
- package/src/a11y.ts +61 -61
- package/src/ai.test.ts +502 -502
- package/src/ai.ts +1391 -1391
- package/src/build-api.coverage.test.ts +633 -633
- package/src/build-api.ts +846 -846
- package/src/builtin-editors.grid.test.ts +83 -85
- package/src/cell-formatting.ts +169 -169
- package/src/cell-render.test.ts +513 -513
- package/src/cell-render.ts +496 -496
- package/src/cell-values.ts +118 -118
- package/src/chart-export.ts +201 -201
- package/src/chart-view.svelte.ts +36 -36
- package/src/chart.ts +2295 -2295
- package/src/collaboration.test.ts +104 -104
- package/src/collaboration.ts +167 -167
- package/src/core.performance.test.ts +30 -30
- package/src/core.ts +1261 -1261
- package/src/createAutocomplete.svelte.ts +132 -132
- package/src/createCombobox.svelte.ts +191 -191
- package/src/createCountryInput.svelte.ts +157 -157
- package/src/createDropdownList.svelte.ts +168 -168
- package/src/createForm.svelte.ts +386 -386
- package/src/createGrid.svelte.ts +42 -42
- package/src/createGrid.test.ts +10 -10
- package/src/createGridState.svelte.ts +17 -17
- package/src/createListbox.svelte.ts +250 -250
- package/src/createMenu.svelte.ts +224 -224
- package/src/createPopoverSelect.svelte.ts +213 -213
- package/src/createSlider.svelte.ts +191 -191
- package/src/createTooltip.svelte.ts +144 -144
- package/src/createTree.svelte.ts +319 -319
- package/src/editing.test.ts +949 -949
- package/src/editing.ts +606 -606
- package/src/editor-contract.ts +170 -170
- package/src/editor-registry.grid.test.ts +144 -144
- package/src/editor-registry.ts +122 -122
- package/src/export-data-api.test.ts +126 -126
- package/src/export-format.test.ts +107 -107
- package/src/export-format.ts +601 -601
- package/src/filter-operators.ts +160 -160
- package/src/flex-render.ts +3 -3
- package/src/form-field.ts +127 -127
- package/src/group-display.test.ts +167 -167
- package/src/group-display.ts +200 -200
- package/src/headless.ts +80 -0
- package/src/index.ts +754 -754
- package/src/js-scroller.svelte.ts +173 -173
- package/src/keyboard-handlers.ts +270 -270
- package/src/keyboard.test.ts +59 -59
- package/src/keyboard.ts +97 -97
- package/src/list-nav.test.ts +49 -49
- package/src/list-nav.ts +29 -29
- package/src/list-option.test.ts +56 -56
- package/src/list-option.ts +172 -172
- package/src/menus.ts +567 -567
- package/src/merge-objects.ts +48 -48
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/_svelte_metadata.json +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/_metadata.json +178 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js +3843 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js +23 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js +1925 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js +206 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js +20 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js +264 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js +698 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/package.json +3 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js +135 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js +57 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_attachments.js +2 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js +46691 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js +239 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_events.js +2 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js +6 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_client.js +7 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js +6 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js +7 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js +7 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js +7 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_server.js +6 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js +85 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js +561 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js +26 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js +124 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_server.js +2 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js +91 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js +242 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js +497 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js +4929 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js +192 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js +10 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js.map +1 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js +140 -0
- package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js.map +1 -0
- package/src/overlays.test.ts +90 -90
- package/src/render-component.ts +28 -28
- package/src/row-drag-touch.ts +211 -0
- package/src/row-drag.test.ts +353 -168
- package/src/row-drag.ts +415 -265
- package/src/row-resize.ts +210 -210
- package/src/scheduler-model.test.ts +562 -562
- package/src/scheduler-model.ts +872 -872
- package/src/selection.test.ts +754 -754
- package/src/selection.ts +491 -491
- package/src/server-data-source.test.ts +383 -383
- package/src/server-data-source.ts +469 -469
- package/src/sparkline.test.ts +68 -68
- package/src/sparkline.ts +169 -169
- package/src/spreadsheet.test.ts +488 -488
- package/src/spreadsheet.ts +312 -312
- package/src/static-functions.ts +11 -11
- package/src/subscribe.ts +38 -38
- package/src/svgrid-wrapper.types.ts +558 -558
- package/src/svgrid.async-editor-options.test.ts +273 -271
- package/src/svgrid.auto-row-height.test.ts +204 -204
- package/src/svgrid.behavior.test.ts +705 -705
- package/src/svgrid.charting.test.ts +534 -534
- package/src/svgrid.comments-autocomplete.test.ts +127 -123
- package/src/svgrid.context-menu.test.ts +147 -147
- package/src/svgrid.features.test.ts +157 -157
- package/src/svgrid.filter-depth.test.ts +163 -163
- package/src/svgrid.filter-menu-listbox.svelte.test.ts +331 -331
- package/src/svgrid.filter-menu-scroll.test.ts +112 -112
- package/src/svgrid.grand-total.test.ts +188 -188
- package/src/svgrid.group-display-mode.test.ts +171 -171
- package/src/svgrid.group-footers.test.ts +121 -121
- package/src/svgrid.group-pagination.test.ts +153 -153
- package/src/svgrid.new-features.wrapper.test.ts +251 -251
- package/src/svgrid.tree-data.test.ts +186 -186
- package/src/svgrid.wrapper.test.ts +63 -63
- package/src/svgriddropdown.async-panel.svelte.test.ts +195 -195
- package/src/test-setup.ts +62 -62
- package/src/themes/index.ts +286 -286
- package/src/toast-store.svelte.ts +246 -246
- package/src/toast-store.test.ts +147 -147
- package/src/tree-row-model.test.ts +168 -168
- package/src/ui-buttons.test.ts +144 -144
- package/src/ui-inputs.test.ts +118 -118
- package/src/ui-localization.test.ts +113 -113
- package/src/ui-range.test.ts +70 -70
- package/src/ui-selection.test.ts +155 -155
- package/src/ui-tier1.test.ts +142 -142
- package/src/virtual.test.ts +88 -88
- package/src/virtualization/column-virtualizer.test.ts +27 -27
- package/src/virtualization/column-virtualizer.ts +30 -30
- package/src/virtualization/pre-measure.test.ts +65 -0
- package/src/virtualization/svelte-virtualizer.svelte.ts +26 -26
- package/src/virtualization/types.ts +30 -30
- package/src/virtualization/virtualizer.test.ts +47 -47
- package/src/virtualization/virtualizer.ts +322 -296
- package/dist/cdn/GridMenus-DAzp6YXc.js +0 -487
package/dist/row-drag.js
CHANGED
|
@@ -31,7 +31,24 @@ export function createRowDrag(ctx) {
|
|
|
31
31
|
return true;
|
|
32
32
|
return bus.group != null && bus.group === group();
|
|
33
33
|
}
|
|
34
|
+
// A `dragleave` is not proof the pointer left the drop area. With row
|
|
35
|
+
// virtualization, scrolling to the viewport edge UNMOUNTS the row under the
|
|
36
|
+
// pointer, which fires its `dragleave`; the replacement row does not fire
|
|
37
|
+
// `dragover` until the next frame. Clearing synchronously made the drop
|
|
38
|
+
// indicator flicker off and the target go missing mid-drag (#69).
|
|
39
|
+
//
|
|
40
|
+
// So a leave only schedules the clear, and any `dragover` on a real row
|
|
41
|
+
// cancels it. If the pointer genuinely left, no dragover arrives and the
|
|
42
|
+
// clear lands a frame later - invisible to the user.
|
|
43
|
+
let leaveFrame = null;
|
|
44
|
+
function cancelPendingLeave() {
|
|
45
|
+
if (leaveFrame === null)
|
|
46
|
+
return;
|
|
47
|
+
cancelAnimationFrame(leaveFrame);
|
|
48
|
+
leaveFrame = null;
|
|
49
|
+
}
|
|
34
50
|
function clearIndicators() {
|
|
51
|
+
cancelPendingLeave();
|
|
35
52
|
ctx.rowDragActive = false;
|
|
36
53
|
ctx.rowDropIndex = null;
|
|
37
54
|
ctx.rowDropSide = null;
|
|
@@ -74,6 +91,9 @@ export function createRowDrag(ctx) {
|
|
|
74
91
|
if (!canAccept())
|
|
75
92
|
return;
|
|
76
93
|
e.preventDefault();
|
|
94
|
+
// We are demonstrably still over a row, so a leave queued by a row that
|
|
95
|
+
// just unmounted underneath us must not fire.
|
|
96
|
+
cancelPendingLeave();
|
|
77
97
|
if (e.dataTransfer)
|
|
78
98
|
e.dataTransfer.dropEffect = "move";
|
|
79
99
|
const rect = e.currentTarget.getBoundingClientRect();
|
|
@@ -81,17 +101,37 @@ export function createRowDrag(ctx) {
|
|
|
81
101
|
ctx.rowDropSide = e.clientY < rect.top + rect.height / 2 ? "before" : "after";
|
|
82
102
|
}
|
|
83
103
|
function onRowDragLeave(rowIndex) {
|
|
84
|
-
|
|
104
|
+
// A leave from a row that is not the current target is already stale.
|
|
105
|
+
if (ctx.rowDropIndex !== rowIndex)
|
|
106
|
+
return;
|
|
107
|
+
cancelPendingLeave();
|
|
108
|
+
// No rAF (SSR, or a jsdom without one): fall back to the old synchronous
|
|
109
|
+
// clear rather than leaving a stale indicator forever.
|
|
110
|
+
if (typeof requestAnimationFrame !== "function") {
|
|
85
111
|
ctx.rowDropIndex = null;
|
|
86
112
|
ctx.rowDropSide = null;
|
|
113
|
+
return;
|
|
87
114
|
}
|
|
115
|
+
leaveFrame = requestAnimationFrame(() => {
|
|
116
|
+
leaveFrame = null;
|
|
117
|
+
// Re-check: an intervening dragover may have moved the target to another
|
|
118
|
+
// row, in which case this leave is stale and must not clear it.
|
|
119
|
+
if (ctx.rowDropIndex !== rowIndex)
|
|
120
|
+
return;
|
|
121
|
+
ctx.rowDropIndex = null;
|
|
122
|
+
ctx.rowDropSide = null;
|
|
123
|
+
});
|
|
88
124
|
}
|
|
89
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Splice the dragged row into position, for a drop on `rowIndex`.
|
|
127
|
+
*
|
|
128
|
+
* Input-agnostic on purpose: HTML5 `drop` and the pointer/touch path (#66)
|
|
129
|
+
* both land here, so the reorder, the cross-grid hand-off and the
|
|
130
|
+
* `onRowDragEnd` payload have exactly one implementation.
|
|
131
|
+
*/
|
|
132
|
+
function commitDropOnRow(rowIndex, side) {
|
|
90
133
|
if (!canAccept() || !bus)
|
|
91
134
|
return;
|
|
92
|
-
e.preventDefault();
|
|
93
|
-
e.stopPropagation(); // don't let the tbody handler also fire (end-append)
|
|
94
|
-
const side = ctx.rowDropSide ?? "before";
|
|
95
135
|
const dragged = bus.row;
|
|
96
136
|
const target = originalAt(rowIndex);
|
|
97
137
|
const sourceGridId = bus.gridId;
|
|
@@ -118,6 +158,13 @@ export function createRowDrag(ctx) {
|
|
|
118
158
|
emitEnd(dragged, to, sameGrid, sourceGridId);
|
|
119
159
|
bus = null;
|
|
120
160
|
}
|
|
161
|
+
function onRowDrop(e, rowIndex) {
|
|
162
|
+
if (!canAccept() || !bus)
|
|
163
|
+
return;
|
|
164
|
+
e.preventDefault();
|
|
165
|
+
e.stopPropagation(); // don't let the tbody handler also fire (end-append)
|
|
166
|
+
commitDropOnRow(rowIndex, ctx.rowDropSide ?? "before");
|
|
167
|
+
}
|
|
121
168
|
// Dropping in the empty area below the last row, or into an empty target
|
|
122
169
|
// grid, appends. Row-level drops call stopPropagation so this only fires for
|
|
123
170
|
// genuine empty-space drops.
|
|
@@ -153,6 +200,101 @@ export function createRowDrag(ctx) {
|
|
|
153
200
|
clearIndicators();
|
|
154
201
|
bus = null;
|
|
155
202
|
}
|
|
203
|
+
// Touch drag (#66) lives in its own module and is fetched on the first touch
|
|
204
|
+
// that lands on a draggable row, so desktop never downloads it. The 350 ms
|
|
205
|
+
// long press inside it more than covers the fetch - the drag cannot start
|
|
206
|
+
// before that elapses anyway.
|
|
207
|
+
let touchDrag = null;
|
|
208
|
+
let touchLoading = false;
|
|
209
|
+
function touchDeps() {
|
|
210
|
+
return {
|
|
211
|
+
ctx,
|
|
212
|
+
managed,
|
|
213
|
+
originalAt,
|
|
214
|
+
commitDropOnRow,
|
|
215
|
+
clearIndicators,
|
|
216
|
+
cancelPendingLeave,
|
|
217
|
+
openBus: (row) => {
|
|
218
|
+
bus = {
|
|
219
|
+
group: group(),
|
|
220
|
+
gridId,
|
|
221
|
+
row,
|
|
222
|
+
sourceProps: ctx.props,
|
|
223
|
+
removeFromSource: () => {
|
|
224
|
+
ctx.internalData = ctx.internalData.filter((r) => r !== row);
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
},
|
|
228
|
+
closeBus: () => {
|
|
229
|
+
bus = null;
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Start of a possible touch drag. Ignores mouse and pen so the HTML5 drag
|
|
235
|
+
* handlers above keep owning those inputs.
|
|
236
|
+
*/
|
|
237
|
+
function onRowPointerDown(e, rowIndex) {
|
|
238
|
+
if (!managed() || e.pointerType !== "touch")
|
|
239
|
+
return;
|
|
240
|
+
if (touchDrag) {
|
|
241
|
+
touchDrag.start(e, rowIndex);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (touchLoading)
|
|
245
|
+
return;
|
|
246
|
+
touchLoading = true;
|
|
247
|
+
// The touch module is not here yet, so nothing is listening. Watch the
|
|
248
|
+
// gesture ourselves for the length of the fetch: if the finger moves (a
|
|
249
|
+
// scroll) or lifts (a tap) before the module lands, the drag must not start
|
|
250
|
+
// when it does - otherwise the fetch window silently swallows the user's
|
|
251
|
+
// scroll and we hijack it.
|
|
252
|
+
const pid = e.pointerId;
|
|
253
|
+
const startX = e.clientX;
|
|
254
|
+
const startY = e.clientY;
|
|
255
|
+
let aborted = false;
|
|
256
|
+
function stopWatching() {
|
|
257
|
+
window.removeEventListener("pointermove", onEarlyMove);
|
|
258
|
+
window.removeEventListener("pointerup", onEarlyEnd);
|
|
259
|
+
window.removeEventListener("pointercancel", onEarlyEnd);
|
|
260
|
+
}
|
|
261
|
+
function onEarlyMove(ev) {
|
|
262
|
+
if (ev.pointerId !== pid)
|
|
263
|
+
return;
|
|
264
|
+
// Same slop the touch module uses once it owns the gesture.
|
|
265
|
+
if (Math.abs(ev.clientY - startY) + Math.abs(ev.clientX - startX) > 10) {
|
|
266
|
+
aborted = true;
|
|
267
|
+
stopWatching();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function onEarlyEnd(ev) {
|
|
271
|
+
if (ev.pointerId !== pid)
|
|
272
|
+
return;
|
|
273
|
+
aborted = true;
|
|
274
|
+
stopWatching();
|
|
275
|
+
}
|
|
276
|
+
window.addEventListener("pointermove", onEarlyMove, { passive: true });
|
|
277
|
+
window.addEventListener("pointerup", onEarlyEnd);
|
|
278
|
+
window.addEventListener("pointercancel", onEarlyEnd);
|
|
279
|
+
// The event object is pooled in some engines, so capture what start() needs
|
|
280
|
+
// before yielding to the import.
|
|
281
|
+
const snapshot = {
|
|
282
|
+
pointerId: e.pointerId,
|
|
283
|
+
pointerType: e.pointerType,
|
|
284
|
+
clientX: e.clientX,
|
|
285
|
+
clientY: e.clientY,
|
|
286
|
+
currentTarget: e.currentTarget,
|
|
287
|
+
preventDefault: () => { },
|
|
288
|
+
};
|
|
289
|
+
void import("./row-drag-touch").then((m) => {
|
|
290
|
+
touchLoading = false;
|
|
291
|
+
stopWatching();
|
|
292
|
+
if (aborted || !managed())
|
|
293
|
+
return;
|
|
294
|
+
touchDrag = m.createTouchDrag(touchDeps());
|
|
295
|
+
touchDrag.start(snapshot, rowIndex);
|
|
296
|
+
});
|
|
297
|
+
}
|
|
156
298
|
return {
|
|
157
299
|
onRowDragStart,
|
|
158
300
|
onRowDragOver,
|
|
@@ -161,6 +303,8 @@ export function createRowDrag(ctx) {
|
|
|
161
303
|
onRowsContainerDragOver,
|
|
162
304
|
onRowsContainerDrop,
|
|
163
305
|
onRowDragEnd,
|
|
306
|
+
/** Touch entry point (#66) - see the pointer-drag block above. */
|
|
307
|
+
onRowPointerDown,
|
|
164
308
|
rowDragGridId: gridId,
|
|
165
309
|
/**
|
|
166
310
|
* Clear any managed drag this grid currently owns. Call on unmount so an
|
|
@@ -170,6 +314,13 @@ export function createRowDrag(ctx) {
|
|
|
170
314
|
* never disturbs a concurrent drag owned by another grid.
|
|
171
315
|
*/
|
|
172
316
|
destroyRowDrag() {
|
|
317
|
+
// Also drop any deferred leave: it would otherwise fire a frame later and
|
|
318
|
+
// write indicator state into a controller whose grid is gone.
|
|
319
|
+
cancelPendingLeave();
|
|
320
|
+
// ...and tear down an in-flight touch drag, which owns window listeners,
|
|
321
|
+
// a long-press timer and an autoscroll frame.
|
|
322
|
+
touchDrag?.destroy();
|
|
323
|
+
touchDrag = null;
|
|
173
324
|
if (bus?.gridId === gridId)
|
|
174
325
|
bus = null;
|
|
175
326
|
},
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import type { VirtualItem, VirtualizerOptions, VirtualizerState } from './types';
|
|
2
2
|
type VirtualizerListener = () => void;
|
|
3
|
+
/**
|
|
4
|
+
* The window to render when no DOM measurement exists yet.
|
|
5
|
+
*
|
|
6
|
+
* The virtualizer learns its real `count` from an effect, and effects do not
|
|
7
|
+
* run during SSR - so on a server it still thinks `count` is 0 and returns an
|
|
8
|
+
* empty window. That is why `<SvGrid>` used to emit an empty `<tbody>`: the
|
|
9
|
+
* rows were in the row model, but nothing asked for them. Crawlers and no-JS
|
|
10
|
+
* clients saw an empty shell.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately deterministic - anchored at index 0 with no scroll offset - so
|
|
13
|
+
* the server and the first client render produce identical markup and
|
|
14
|
+
* hydration does not mismatch. The measuring effect replaces it a tick later.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildPreMeasureItems(count: number, estimateSize: number, viewportHeight: number, overscan: number): Array<VirtualItem>;
|
|
3
17
|
export declare function createVirtualizer(initial: VirtualizerOptions): {
|
|
4
18
|
setOptions(next: Partial<VirtualizerOptions>): void;
|
|
5
19
|
setScrollOffset(scrollOffset: number): void;
|
|
@@ -54,6 +54,27 @@ function buildUniformItems(startIndex, endIndex, estimateSize) {
|
|
|
54
54
|
}
|
|
55
55
|
return items;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The window to render when no DOM measurement exists yet.
|
|
59
|
+
*
|
|
60
|
+
* The virtualizer learns its real `count` from an effect, and effects do not
|
|
61
|
+
* run during SSR - so on a server it still thinks `count` is 0 and returns an
|
|
62
|
+
* empty window. That is why `<SvGrid>` used to emit an empty `<tbody>`: the
|
|
63
|
+
* rows were in the row model, but nothing asked for them. Crawlers and no-JS
|
|
64
|
+
* clients saw an empty shell.
|
|
65
|
+
*
|
|
66
|
+
* Deliberately deterministic - anchored at index 0 with no scroll offset - so
|
|
67
|
+
* the server and the first client render produce identical markup and
|
|
68
|
+
* hydration does not mismatch. The measuring effect replaces it a tick later.
|
|
69
|
+
*/
|
|
70
|
+
export function buildPreMeasureItems(count, estimateSize, viewportHeight, overscan) {
|
|
71
|
+
if (count <= 0)
|
|
72
|
+
return [];
|
|
73
|
+
const size = Math.max(estimateSize, 1);
|
|
74
|
+
const visible = Math.ceil(Math.max(viewportHeight, 0) / size);
|
|
75
|
+
const endIndex = Math.min(visible + Math.max(overscan, 0), count - 1);
|
|
76
|
+
return buildUniformItems(0, Math.max(endIndex, 0), size);
|
|
77
|
+
}
|
|
57
78
|
function buildVariableItems(startIndex, endIndex, offsets) {
|
|
58
79
|
const items = [];
|
|
59
80
|
for (let index = startIndex; index <= endIndex; index += 1) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svgrid/grid",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.8",
|
|
4
4
|
"description": "Svelte 5-native data grid and data table. Headless-first engine with virtual scrolling for 100k+ rows, Excel-style filtering, inline editing, grouping, tree data, pivot, and server-side data. Drop-in <SvGrid> component. TypeScript, SSR-ready.",
|
|
5
5
|
"author": "jQWidgets <boikom@jqwidgets.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -62,6 +62,11 @@
|
|
|
62
62
|
"import": "./dist/cdn/svgrid.svelte-external.js",
|
|
63
63
|
"default": "./dist/cdn/svgrid.svelte-external.js"
|
|
64
64
|
},
|
|
65
|
+
"./core": {
|
|
66
|
+
"types": "./dist/headless.d.ts",
|
|
67
|
+
"svelte": "./dist/headless.js",
|
|
68
|
+
"import": "./dist/headless.js"
|
|
69
|
+
},
|
|
65
70
|
"./static-functions": {
|
|
66
71
|
"types": "./dist/static-functions.d.ts",
|
|
67
72
|
"svelte": "./dist/static-functions.js",
|
|
@@ -96,17 +101,9 @@
|
|
|
96
101
|
"files": [
|
|
97
102
|
"dist",
|
|
98
103
|
"src",
|
|
99
|
-
"themes"
|
|
104
|
+
"themes",
|
|
105
|
+
"CHANGELOG.md"
|
|
100
106
|
],
|
|
101
|
-
"scripts": {
|
|
102
|
-
"clean": "rimraf ./build && rimraf ./dist",
|
|
103
|
-
"test:eslint": "eslint ./src",
|
|
104
|
-
"test:types": "svelte-check --tsconfig ./tsconfig.json",
|
|
105
|
-
"test:lib": "vitest run --coverage",
|
|
106
|
-
"test:build": "publint --strict",
|
|
107
|
-
"build": "svelte-package --input ./src --output ./dist && node ../../tools/strip-dist-tests.mjs ./dist && node ./scripts/build-cdn.mjs && node ./scripts/build-themes.mjs",
|
|
108
|
-
"lint": "eslint ./src"
|
|
109
|
-
},
|
|
110
107
|
"devDependencies": {
|
|
111
108
|
"@sveltejs/package": "^2.5.7",
|
|
112
109
|
"@sveltejs/vite-plugin-svelte": "^7.0.0",
|
|
@@ -120,5 +117,14 @@
|
|
|
120
117
|
},
|
|
121
118
|
"peerDependencies": {
|
|
122
119
|
"svelte": "^5.0.0"
|
|
120
|
+
},
|
|
121
|
+
"scripts": {
|
|
122
|
+
"clean": "rimraf ./build && rimraf ./dist",
|
|
123
|
+
"test:eslint": "eslint ./src",
|
|
124
|
+
"test:types": "svelte-check --tsconfig ./tsconfig.json",
|
|
125
|
+
"test:lib": "vitest run --coverage",
|
|
126
|
+
"test:build": "publint --strict",
|
|
127
|
+
"build": "svelte-package --input ./src --output ./dist && node ../../tools/strip-dist-tests.mjs ./dist && node ./scripts/build-cdn.mjs && node ./scripts/build-themes.mjs",
|
|
128
|
+
"lint": "eslint ./src"
|
|
123
129
|
}
|
|
124
|
-
}
|
|
130
|
+
}
|
package/src/FlexRender.svelte
CHANGED
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
<script
|
|
2
|
-
lang="ts"
|
|
3
|
-
generics="TData extends RowData"
|
|
4
|
-
>
|
|
5
|
-
import { isFunction } from './core'
|
|
6
|
-
import {
|
|
7
|
-
RenderComponentConfig,
|
|
8
|
-
RenderSnippetConfig,
|
|
9
|
-
} from './render-component'
|
|
10
|
-
import type {
|
|
11
|
-
Cell,
|
|
12
|
-
CellContext,
|
|
13
|
-
ColumnDefTemplate,
|
|
14
|
-
Header,
|
|
15
|
-
HeaderContext,
|
|
16
|
-
RowData,
|
|
17
|
-
} from './core'
|
|
18
|
-
|
|
19
|
-
type Props =
|
|
20
|
-
| {
|
|
21
|
-
content?: ColumnDefTemplate<
|
|
22
|
-
| HeaderContext<TData>
|
|
23
|
-
| CellContext<TData>
|
|
24
|
-
>
|
|
25
|
-
context:
|
|
26
|
-
| HeaderContext<TData>
|
|
27
|
-
| CellContext<TData>
|
|
28
|
-
cell?: never
|
|
29
|
-
header?: never
|
|
30
|
-
footer?: never
|
|
31
|
-
}
|
|
32
|
-
| {
|
|
33
|
-
cell: Cell<TData>
|
|
34
|
-
content?: never
|
|
35
|
-
context?: never
|
|
36
|
-
header?: never
|
|
37
|
-
footer?: never
|
|
38
|
-
}
|
|
39
|
-
| {
|
|
40
|
-
header: Header<TData>
|
|
41
|
-
content?: never
|
|
42
|
-
context?: never
|
|
43
|
-
cell?: never
|
|
44
|
-
footer?: never
|
|
45
|
-
}
|
|
46
|
-
| {
|
|
47
|
-
footer: Header<TData>
|
|
48
|
-
content?: never
|
|
49
|
-
context?: never
|
|
50
|
-
cell?: never
|
|
51
|
-
header?: never
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let props: Props = $props()
|
|
55
|
-
|
|
56
|
-
const resolved = $derived.by(() => {
|
|
57
|
-
if ('cell' in props && props.cell) {
|
|
58
|
-
return {
|
|
59
|
-
content: props.cell.column.columnDef.cell,
|
|
60
|
-
context: props.cell.getContext(),
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if ('header' in props && props.header) {
|
|
64
|
-
return {
|
|
65
|
-
content: props.header.column.columnDef.header,
|
|
66
|
-
context: props.header.getContext(),
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if ('footer' in props && props.footer) {
|
|
70
|
-
return {
|
|
71
|
-
content: props.footer.column.columnDef.footer,
|
|
72
|
-
context: props.footer.getContext(),
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
content: props.content,
|
|
77
|
-
context: props.context,
|
|
78
|
-
}
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
const result = $derived(
|
|
82
|
-
isFunction(resolved.content)
|
|
83
|
-
? resolved.content(resolved.context as any)
|
|
84
|
-
: undefined,
|
|
85
|
-
)
|
|
86
|
-
</script>
|
|
87
|
-
|
|
88
|
-
{#if typeof resolved.content === 'string'}
|
|
89
|
-
{resolved.content}
|
|
90
|
-
{:else if result instanceof RenderComponentConfig}
|
|
91
|
-
<result.component {...result.props} />
|
|
92
|
-
{:else if result instanceof RenderSnippetConfig}
|
|
93
|
-
{@render result.snippet(result.params)}
|
|
94
|
-
{:else if result !== undefined}
|
|
95
|
-
{result}
|
|
96
|
-
{/if}
|
|
1
|
+
<script
|
|
2
|
+
lang="ts"
|
|
3
|
+
generics="TData extends RowData"
|
|
4
|
+
>
|
|
5
|
+
import { isFunction } from './core'
|
|
6
|
+
import {
|
|
7
|
+
RenderComponentConfig,
|
|
8
|
+
RenderSnippetConfig,
|
|
9
|
+
} from './render-component'
|
|
10
|
+
import type {
|
|
11
|
+
Cell,
|
|
12
|
+
CellContext,
|
|
13
|
+
ColumnDefTemplate,
|
|
14
|
+
Header,
|
|
15
|
+
HeaderContext,
|
|
16
|
+
RowData,
|
|
17
|
+
} from './core'
|
|
18
|
+
|
|
19
|
+
type Props =
|
|
20
|
+
| {
|
|
21
|
+
content?: ColumnDefTemplate<
|
|
22
|
+
| HeaderContext<TData>
|
|
23
|
+
| CellContext<TData>
|
|
24
|
+
>
|
|
25
|
+
context:
|
|
26
|
+
| HeaderContext<TData>
|
|
27
|
+
| CellContext<TData>
|
|
28
|
+
cell?: never
|
|
29
|
+
header?: never
|
|
30
|
+
footer?: never
|
|
31
|
+
}
|
|
32
|
+
| {
|
|
33
|
+
cell: Cell<TData>
|
|
34
|
+
content?: never
|
|
35
|
+
context?: never
|
|
36
|
+
header?: never
|
|
37
|
+
footer?: never
|
|
38
|
+
}
|
|
39
|
+
| {
|
|
40
|
+
header: Header<TData>
|
|
41
|
+
content?: never
|
|
42
|
+
context?: never
|
|
43
|
+
cell?: never
|
|
44
|
+
footer?: never
|
|
45
|
+
}
|
|
46
|
+
| {
|
|
47
|
+
footer: Header<TData>
|
|
48
|
+
content?: never
|
|
49
|
+
context?: never
|
|
50
|
+
cell?: never
|
|
51
|
+
header?: never
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
let props: Props = $props()
|
|
55
|
+
|
|
56
|
+
const resolved = $derived.by(() => {
|
|
57
|
+
if ('cell' in props && props.cell) {
|
|
58
|
+
return {
|
|
59
|
+
content: props.cell.column.columnDef.cell,
|
|
60
|
+
context: props.cell.getContext(),
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if ('header' in props && props.header) {
|
|
64
|
+
return {
|
|
65
|
+
content: props.header.column.columnDef.header,
|
|
66
|
+
context: props.header.getContext(),
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if ('footer' in props && props.footer) {
|
|
70
|
+
return {
|
|
71
|
+
content: props.footer.column.columnDef.footer,
|
|
72
|
+
context: props.footer.getContext(),
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
content: props.content,
|
|
77
|
+
context: props.context,
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const result = $derived(
|
|
82
|
+
isFunction(resolved.content)
|
|
83
|
+
? resolved.content(resolved.context as any)
|
|
84
|
+
: undefined,
|
|
85
|
+
)
|
|
86
|
+
</script>
|
|
87
|
+
|
|
88
|
+
{#if typeof resolved.content === 'string'}
|
|
89
|
+
{resolved.content}
|
|
90
|
+
{:else if result instanceof RenderComponentConfig}
|
|
91
|
+
<result.component {...result.props} />
|
|
92
|
+
{:else if result instanceof RenderSnippetConfig}
|
|
93
|
+
{@render result.snippet(result.params)}
|
|
94
|
+
{:else if result !== undefined}
|
|
95
|
+
{result}
|
|
96
|
+
{/if}
|