@svgrid/grid 3.0.0 → 3.0.2
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 +116 -88
- package/README.md +199 -199
- package/dist/FlexRender.svelte +96 -96
- package/dist/GridFooter.svelte +190 -181
- package/dist/GridFooter.svelte.d.ts +8 -0
- package/dist/GridMenus.svelte +18 -10
- package/dist/GridMenus.svelte.d.ts +2 -1
- package/dist/SvAutoComplete.svelte +169 -169
- 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 +279 -279
- package/dist/SvContextMenu.svelte +116 -116
- package/dist/SvCountryInput.svelte +163 -163
- package/dist/SvDrawer.svelte +254 -254
- package/dist/SvDropDownList.svelte +378 -378
- 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 +17 -0
- package/dist/SvGrid.controller.svelte.js +128 -14
- package/dist/SvGrid.css +79 -10
- package/dist/SvGrid.svelte +191 -186
- package/dist/SvGrid.types.d.ts +42 -1
- package/dist/SvGridCellEditor.svelte +748 -744
- package/dist/SvGridChart.svelte +2246 -1716
- package/dist/SvGridChart.svelte.d.ts +63 -1
- package/dist/SvGridChartPanel.svelte +633 -485
- package/dist/SvGridChartView.svelte +79 -70
- package/dist/SvGridChartView.svelte.d.ts +7 -0
- package/dist/SvGridDropdown.svelte +728 -728
- package/dist/SvGridSelect.svelte +270 -270
- package/dist/SvGroupCell.svelte +141 -116
- package/dist/SvGroupCell.svelte.d.ts +8 -0
- package/dist/SvListBox.svelte +334 -334
- package/dist/SvMaskedInput.svelte +122 -122
- package/dist/SvMenu.svelte +124 -124
- package/dist/SvMenuList.svelte +146 -146
- package/dist/SvMultiSelect.svelte +293 -293
- package/dist/SvNumberInput.svelte +172 -172
- 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 +186 -170
- package/dist/SvRowGroupPanel.svelte.d.ts +8 -0
- 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 +239 -239
- package/dist/ai.d.ts +11 -2
- package/dist/ai.js +51 -7
- package/dist/cdn/GridMenus-DyFA-QxA.js +602 -0
- package/dist/cdn/GridMenus-M2XP9t0_.js +603 -0
- package/dist/cdn/{SvDateRangeInput-DflbiP7N.js → SvDateRangeInput-CaOuMs8O.js} +1 -1
- package/dist/cdn/{SvDateRangeInput-Bh0A0JkF.js → SvDateRangeInput-DMLKmGEc.js} +1 -1
- package/dist/cdn/{SvDateTimePicker-Bivn8dAP.js → SvDateTimePicker-CCbDZNZB.js} +1 -1
- package/dist/cdn/{SvDateTimePicker-BWwpfB_o.js → SvDateTimePicker-sonaH0oh.js} +1 -1
- package/dist/cdn/{SvGridCellEditor-Ba7rY3eu.js → SvGridCellEditor-BWnTi2N7.js} +2 -2
- package/dist/cdn/{SvGridCellEditor-AXL8cHGO.js → SvGridCellEditor-CjEJMJKc.js} +2 -2
- package/dist/cdn/SvGridChart-DAb9RbRs.js +1480 -0
- package/dist/cdn/SvGridChart-Yl-IXZFO.js +1481 -0
- package/dist/cdn/SvGridChartPanel-DayQpDsR.js +834 -0
- package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +810 -0
- package/dist/cdn/{SvGridChartView-eSPuJE6g.js → SvGridChartView-CxfakxR0.js} +5 -3
- package/dist/cdn/{SvGridChartView-SmPW10dI.js → SvGridChartView-Dm_YEx9L.js} +5 -3
- package/dist/cdn/{SvGridDropdown-B1ZcLpgs.js → SvGridDropdown-D0VdjeR8.js} +1 -1
- package/dist/cdn/{SvGridDropdown-CtdbHcIS.js → SvGridDropdown-D13MtJ2j.js} +1 -1
- package/dist/cdn/cell-formatting-C2Hf5gqd.js +86 -0
- package/dist/cdn/chart-CKJRCPOk.js +1652 -0
- package/dist/cdn/{date-format-DZT7T1wf.js → date-format-BNii4zeD.js} +2 -2
- package/dist/cdn/{date-format-CcP1tafP.js → date-format-BnnHlqGw.js} +2 -2
- package/dist/cdn/{export-format-Cv1Dll6k.js → export-format-CUDLy2yn.js} +84 -168
- package/dist/cdn/{src-B_YS5AOc.js → src-BJ2opd0j.js} +3642 -3450
- package/dist/cdn/{src-DYXXpuSk.js → src-DNbz94Ct.js} +8649 -8457
- package/dist/cdn/svgrid.js +16 -15
- package/dist/cdn/svgrid.svelte-external.js +16 -15
- package/dist/cell-formatting.d.ts +7 -0
- package/dist/cell-formatting.js +7 -1
- package/dist/chart-export.d.ts +23 -2
- package/dist/chart-export.js +88 -14
- package/dist/chart.d.ts +410 -18
- package/dist/chart.js +824 -24
- package/dist/editing.js +22 -13
- package/dist/grid-icons.d.ts +49 -0
- package/dist/grid-icons.js +86 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/package.json +1 -1
- package/src/FlexRender.svelte +96 -96
- package/src/GridFooter.svelte +190 -181
- package/src/GridMenus.svelte +18 -10
- package/src/SvAutoComplete.svelte +169 -169
- 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 +279 -279
- package/src/SvContextMenu.svelte +116 -116
- package/src/SvCountryInput.svelte +163 -163
- package/src/SvDrawer.svelte +254 -254
- package/src/SvDropDownList.svelte +378 -378
- 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 +146 -13
- package/src/SvGrid.css +79 -10
- package/src/SvGrid.svelte +191 -186
- package/src/SvGrid.types.ts +2133 -2092
- package/src/SvGridCellEditor.svelte +748 -744
- package/src/SvGridChart.svelte +2246 -1716
- package/src/SvGridChart.test.ts +243 -1
- package/src/SvGridChartPanel.svelte +633 -485
- package/src/SvGridChartView.svelte +79 -70
- package/src/SvGridDropdown.svelte +728 -728
- package/src/SvGridSelect.svelte +270 -270
- package/src/SvGroupCell.svelte +141 -116
- package/src/SvListBox.svelte +334 -334
- 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 +293 -293
- package/src/SvNumberInput.svelte +172 -172
- 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 +186 -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 +239 -239
- 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 +561 -502
- package/src/ai.ts +1472 -1419
- package/src/build-api.coverage.test.ts +633 -633
- package/src/build-api.ts +846 -846
- package/src/builtin-editors.grid.test.ts +83 -83
- package/src/cell-formatting.ts +177 -171
- package/src/cell-render.test.ts +513 -513
- package/src/cell-render.ts +496 -496
- package/src/cell-values.ts +148 -148
- package/src/chart-export.test.ts +112 -0
- package/src/chart-export.ts +270 -202
- package/src/chart-view.svelte.ts +36 -36
- package/src/chart.test.ts +830 -1
- package/src/chart.ts +3342 -2321
- package/src/collaboration.test.ts +104 -104
- package/src/collaboration.ts +167 -167
- package/src/column-groups.ts +78 -78
- package/src/core.performance.test.ts +30 -30
- package/src/core.ts +1865 -1865
- 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 +322 -322
- package/src/datetime/date-core.ts +206 -206
- package/src/datetime/date-restrict.ts +61 -61
- package/src/datetime/timezone.ts +135 -135
- package/src/dock-manager-model.ts +596 -596
- package/src/dock-model.ts +374 -374
- package/src/editing.test.ts +974 -974
- package/src/editing.ts +618 -609
- package/src/editor-contract.ts +171 -171
- 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/filtering/excel-filters.ts +325 -325
- package/src/flex-render.ts +3 -3
- package/src/form-field.ts +127 -127
- package/src/grid-icons.test.ts +46 -0
- package/src/grid-icons.ts +184 -0
- package/src/group-display.test.ts +167 -167
- package/src/group-display.ts +200 -200
- package/src/headless.ts +87 -87
- package/src/icon-overrides.grid.test.ts +188 -0
- package/src/icon-seam.test.ts +100 -0
- package/src/index.ts +19 -0
- 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 +179 -179
- package/src/menus.ts +597 -597
- package/src/merge-objects.ts +48 -48
- package/src/overlays.test.ts +90 -90
- package/src/positioning.ts +268 -268
- package/src/render-component.ts +28 -28
- package/src/row-drag.test.ts +401 -401
- package/src/row-drag.ts +419 -419
- package/src/row-resize.test.ts +524 -524
- package/src/row-resize.ts +228 -228
- package/src/scheduler-ical.ts +181 -181
- package/src/scheduler-model.test.ts +562 -562
- package/src/scheduler-model.ts +873 -873
- package/src/selection.test.ts +885 -885
- 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/summaries.ts +113 -113
- package/src/svgrid-wrapper.types.ts +563 -563
- package/src/svgrid.async-editor-options.test.ts +273 -273
- package/src/svgrid.auto-row-height.test.ts +204 -204
- package/src/svgrid.behavior.test.ts +910 -910
- package/src/svgrid.charting.test.ts +654 -534
- package/src/svgrid.comments-autocomplete.test.ts +127 -127
- 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 +382 -377
- 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 +288 -288
- package/src/toast-store.svelte.ts +250 -250
- 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/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 -322
- package/dist/cdn/GridMenus-DMihUtma.js +0 -600
- package/dist/cdn/GridMenus-nmNDj1a3.js +0 -601
- package/dist/cdn/SvGridChart-Bs2GIR2Q.js +0 -1202
- package/dist/cdn/SvGridChart-CwhFz7GV.js +0 -1203
- package/dist/cdn/SvGridChartPanel-1WXuStzM.js +0 -561
- package/dist/cdn/SvGridChartPanel-e5_nqNP9.js +0 -585
- package/dist/cdn/chart-i4XcXyHJ.js +0 -1214
package/src/GridFooter.svelte
CHANGED
|
@@ -1,181 +1,190 @@
|
|
|
1
|
-
<script lang="ts" generics="TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData">
|
|
2
|
-
import {
|
|
3
|
-
type RowData,
|
|
4
|
-
type TableFeatures,
|
|
5
|
-
} from "./index";
|
|
6
|
-
import "./sv-grid-scrollbar";
|
|
7
|
-
import {
|
|
8
|
-
fmtStat,
|
|
9
|
-
} from "./SvGrid.helpers";
|
|
10
|
-
import type {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
{@const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
{
|
|
120
|
-
<!--
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
1
|
+
<script lang="ts" generics="TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData">
|
|
2
|
+
import {
|
|
3
|
+
type RowData,
|
|
4
|
+
type TableFeatures,
|
|
5
|
+
} from "./index";
|
|
6
|
+
import "./sv-grid-scrollbar";
|
|
7
|
+
import {
|
|
8
|
+
fmtStat,
|
|
9
|
+
} from "./SvGrid.helpers";
|
|
10
|
+
import type { Snippet } from "svelte";
|
|
11
|
+
import type { GridIconName } from "./grid-icons";
|
|
12
|
+
import type { SvGridController } from "./SvGrid.controller.svelte";
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
ctrl,
|
|
16
|
+
icon,
|
|
17
|
+
pager = true,
|
|
18
|
+
showStatus = true,
|
|
19
|
+
top = false,
|
|
20
|
+
pageSizeOptions,
|
|
21
|
+
}: {
|
|
22
|
+
ctrl: SvGridController<TFeatures, TData>;
|
|
23
|
+
/**
|
|
24
|
+
* The grid's icon resolver, so the pager arrows honour the `icons` prop.
|
|
25
|
+
* Required rather than optional: SvGrid is the only thing that mounts this
|
|
26
|
+
* component, so a missing icon would be a bug, not a supported call.
|
|
27
|
+
*/
|
|
28
|
+
icon: Snippet<[GridIconName]>;
|
|
29
|
+
/** Render the pagination controls in this instance. */
|
|
30
|
+
pager?: boolean;
|
|
31
|
+
/** Render the status bar in this instance. */
|
|
32
|
+
showStatus?: boolean;
|
|
33
|
+
/** This is a top-positioned footer (styling only). */
|
|
34
|
+
top?: boolean;
|
|
35
|
+
/** Page-size choices for the selector. Defaults to `[10, 25, 50, 100]`. */
|
|
36
|
+
pageSizeOptions?: number[];
|
|
37
|
+
} = $props();
|
|
38
|
+
|
|
39
|
+
// SvGridDropdown is ~22 KB and exists here only to pick one of four numbers.
|
|
40
|
+
// Importing it statically also dragged it into the base bundle and silently
|
|
41
|
+
// defeated the lazy `import()` in SvGrid.svelte, which loads the same
|
|
42
|
+
// component as a cell editor. So the closed trigger below is plain markup
|
|
43
|
+
// reusing the dropdown's own classes (identical appearance), and the real
|
|
44
|
+
// component is fetched on first open. Keep this lazy: a static import here
|
|
45
|
+
// re-breaks the cell-editor split too, not just the footer.
|
|
46
|
+
let PageSizeDropdown = $state<typeof import("./SvGridDropdown.svelte").default | null>(null);
|
|
47
|
+
let loadingPageSize = $state(false);
|
|
48
|
+
|
|
49
|
+
async function openPageSize() {
|
|
50
|
+
if (PageSizeDropdown || loadingPageSize) return;
|
|
51
|
+
loadingPageSize = true;
|
|
52
|
+
try {
|
|
53
|
+
PageSizeDropdown = (await import("./SvGridDropdown.svelte")).default;
|
|
54
|
+
} finally {
|
|
55
|
+
loadingPageSize = false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// View facade: re-bind the controller's reactive members so the markup
|
|
60
|
+
// (moved verbatim from SvGrid.svelte) stays identical.
|
|
61
|
+
const paginationEnabled = $derived(ctrl.paginationEnabled);
|
|
62
|
+
const statusBarEnabled = $derived(ctrl.statusBarEnabled);
|
|
63
|
+
const statusBarAggregates = $derived(ctrl.statusBarAggregates);
|
|
64
|
+
const statusBarStats = $derived(ctrl.statusBarStats);
|
|
65
|
+
const changePage = $derived(ctrl.changePage);
|
|
66
|
+
const goToPage = $derived(ctrl.goToPage);
|
|
67
|
+
const setPageSize = $derived(ctrl.setPageSize);
|
|
68
|
+
const messages = $derived(ctrl.messages);
|
|
69
|
+
</script>
|
|
70
|
+
|
|
71
|
+
{#if showStatus && statusBarEnabled && statusBarStats}
|
|
72
|
+
{@const s = statusBarStats}
|
|
73
|
+
<div class="sv-grid-status-bar" role="status" aria-live="polite">
|
|
74
|
+
{#each statusBarAggregates as agg (agg)}
|
|
75
|
+
{#if agg === "count"}
|
|
76
|
+
<span class="sv-grid-status-item"
|
|
77
|
+
><span class="sv-grid-status-label">{messages.statCount}</span>{fmtStat(s.count)}</span
|
|
78
|
+
>
|
|
79
|
+
{:else if agg === "numericCount"}
|
|
80
|
+
<span class="sv-grid-status-item"
|
|
81
|
+
><span class="sv-grid-status-label">Numeric</span>{fmtStat(s.numericCount)}</span
|
|
82
|
+
>
|
|
83
|
+
{:else if s.numericCount > 0 && agg === "sum"}
|
|
84
|
+
<span class="sv-grid-status-item"
|
|
85
|
+
><span class="sv-grid-status-label">{messages.statSum}</span>{fmtStat(s.sum)}</span
|
|
86
|
+
>
|
|
87
|
+
{:else if s.numericCount > 0 && agg === "avg"}
|
|
88
|
+
<span class="sv-grid-status-item"
|
|
89
|
+
><span class="sv-grid-status-label">{messages.statAvg}</span>{fmtStat(s.avg)}</span
|
|
90
|
+
>
|
|
91
|
+
{:else if s.numericCount > 0 && agg === "min"}
|
|
92
|
+
<span class="sv-grid-status-item"
|
|
93
|
+
><span class="sv-grid-status-label">{messages.statMin}</span>{fmtStat(s.min)}</span
|
|
94
|
+
>
|
|
95
|
+
{:else if s.numericCount > 0 && agg === "max"}
|
|
96
|
+
<span class="sv-grid-status-item"
|
|
97
|
+
><span class="sv-grid-status-label">{messages.statMax}</span>{fmtStat(s.max)}</span
|
|
98
|
+
>
|
|
99
|
+
{/if}
|
|
100
|
+
{/each}
|
|
101
|
+
</div>
|
|
102
|
+
{/if}
|
|
103
|
+
|
|
104
|
+
{#if pager && paginationEnabled}
|
|
105
|
+
{@const totalRows = ctrl.paginationTotalRows}
|
|
106
|
+
{@const pageSize = ctrl.paginationPageSize}
|
|
107
|
+
{@const pageCount = Math.max(1, Math.ceil(totalRows / pageSize))}
|
|
108
|
+
{@const currentPage = Math.min(ctrl.paginationPageIndex + 1, pageCount)}
|
|
109
|
+
{@const rangeStart =
|
|
110
|
+
totalRows === 0 ? 0 : (currentPage - 1) * pageSize + 1}
|
|
111
|
+
{@const rangeEnd = Math.min(totalRows, currentPage * pageSize)}
|
|
112
|
+
{@const onFirst = currentPage <= 1}
|
|
113
|
+
{@const onLast = currentPage >= pageCount}
|
|
114
|
+
{@const sizes = pageSizeOptions && pageSizeOptions.length ? pageSizeOptions : [10, 25, 50, 100]}
|
|
115
|
+
<div class="sv-grid-pagination" class:sv-grid-pagination-top={top} role="navigation" aria-label="Pagination">
|
|
116
|
+
<div class="sv-grid-pagination-pagesize">
|
|
117
|
+
<span>{messages.pageSize}</span>
|
|
118
|
+
<div class="sv-grid-pagination-pagesize-dd">
|
|
119
|
+
{#if PageSizeDropdown}
|
|
120
|
+
<!-- autoOpen so the click that triggered the load also opens the
|
|
121
|
+
panel, rather than making the user click a second time. -->
|
|
122
|
+
<PageSizeDropdown
|
|
123
|
+
options={sizes.map((n) => ({ value: n, label: String(n) }))}
|
|
124
|
+
value={pageSize}
|
|
125
|
+
autoOpen={true}
|
|
126
|
+
onChange={(v) => setPageSize(Number(v))}
|
|
127
|
+
/>
|
|
128
|
+
{:else}
|
|
129
|
+
<!-- Mirrors SvGridDropdown's closed trigger (same classes, same
|
|
130
|
+
ARIA). Its box styling comes from the global
|
|
131
|
+
.sv-grid-pagination-pagesize-dd rules in SvGrid.css, NOT from
|
|
132
|
+
SvGridDropdown's scoped styles (those only exist once the chunk
|
|
133
|
+
loads) - so keep the two in step or the placeholder renders as
|
|
134
|
+
a stock <button> until the first click. -->
|
|
135
|
+
<div class="sv-grid-dropdown">
|
|
136
|
+
<button
|
|
137
|
+
type="button"
|
|
138
|
+
class="sv-grid-dropdown-trigger"
|
|
139
|
+
aria-haspopup="listbox"
|
|
140
|
+
aria-expanded="false"
|
|
141
|
+
onclick={openPageSize}
|
|
142
|
+
>
|
|
143
|
+
<span class="sv-grid-dropdown-label">{pageSize}</span>
|
|
144
|
+
<span class="sv-grid-dropdown-caret" aria-hidden="true">{@render icon("page-size-caret")}</span>
|
|
145
|
+
</button>
|
|
146
|
+
</div>
|
|
147
|
+
{/if}
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
<span class="sv-grid-pagination-range">
|
|
151
|
+
<strong>{rangeStart.toLocaleString()}</strong> to
|
|
152
|
+
<strong>{rangeEnd.toLocaleString()}</strong> of
|
|
153
|
+
<strong>{totalRows.toLocaleString()}</strong>
|
|
154
|
+
</span>
|
|
155
|
+
<div class="sv-grid-pagination-nav">
|
|
156
|
+
<button
|
|
157
|
+
type="button"
|
|
158
|
+
class="sv-grid-pagination-btn"
|
|
159
|
+
disabled={onFirst}
|
|
160
|
+
onclick={() => goToPage(0)}
|
|
161
|
+
aria-label={messages.firstPage}>{@render icon("page-first")}</button
|
|
162
|
+
>
|
|
163
|
+
<button
|
|
164
|
+
type="button"
|
|
165
|
+
class="sv-grid-pagination-btn"
|
|
166
|
+
disabled={onFirst}
|
|
167
|
+
onclick={() => changePage(-1)}
|
|
168
|
+
aria-label={messages.prevPage}>{@render icon("page-prev")}</button
|
|
169
|
+
>
|
|
170
|
+
<span class="sv-grid-pagination-label">
|
|
171
|
+
{messages.page} <strong>{currentPage.toLocaleString()}</strong> {messages.of}
|
|
172
|
+
<strong>{pageCount.toLocaleString()}</strong>
|
|
173
|
+
</span>
|
|
174
|
+
<button
|
|
175
|
+
type="button"
|
|
176
|
+
class="sv-grid-pagination-btn"
|
|
177
|
+
disabled={onLast}
|
|
178
|
+
onclick={() => changePage(1)}
|
|
179
|
+
aria-label={messages.nextPage}>{@render icon("page-next")}</button
|
|
180
|
+
>
|
|
181
|
+
<button
|
|
182
|
+
type="button"
|
|
183
|
+
class="sv-grid-pagination-btn"
|
|
184
|
+
disabled={onLast}
|
|
185
|
+
onclick={() => goToPage(pageCount - 1)}
|
|
186
|
+
aria-label={messages.lastPage}>{@render icon("page-last")}</button
|
|
187
|
+
>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
{/if}
|
package/src/GridMenus.svelte
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import "./sv-grid-scrollbar";
|
|
11
11
|
import { onScrollOutside } from "./a11y/dismissable";
|
|
12
12
|
import type { Snippet } from "svelte";
|
|
13
|
+
import type { GridIconName } from "./grid-icons";
|
|
13
14
|
import SvListBox from "./SvListBox.svelte";
|
|
14
15
|
import type {
|
|
15
16
|
FilterOperator,
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
|
|
24
25
|
import type { SvGridController } from "./SvGrid.controller.svelte";
|
|
25
26
|
|
|
26
|
-
let { ctrl, icon }: { ctrl: SvGridController<TFeatures, TData>; icon: Snippet<[
|
|
27
|
+
let { ctrl, icon }: { ctrl: SvGridController<TFeatures, TData>; icon: Snippet<[GridIconName]> } = $props();
|
|
27
28
|
|
|
28
29
|
// View facade: re-bind the controller's reactive members so the markup
|
|
29
30
|
// (moved verbatim from SvGrid.svelte) stays identical.
|
|
@@ -403,7 +404,7 @@
|
|
|
403
404
|
onclick={() => patchFilter(colId, { join: "OR" })}>OR</button>
|
|
404
405
|
<button type="button" class="sv-grid-menu-join-x" title="Remove second condition"
|
|
405
406
|
aria-label="Remove second condition"
|
|
406
|
-
onclick={() => patchFilter(colId, { operator2: undefined, value2: undefined, valueTo2: undefined, join: undefined })}
|
|
407
|
+
onclick={() => patchFilter(colId, { operator2: undefined, value2: undefined, valueTo2: undefined, join: undefined })}>{@render icon("remove")}</button>
|
|
407
408
|
</div>
|
|
408
409
|
<select
|
|
409
410
|
class="sv-grid-menu-operator-select"
|
|
@@ -452,11 +453,18 @@
|
|
|
452
453
|
<span class="sv-grid-menu-head-note">{pickedCount} of {totalCount}</span>
|
|
453
454
|
{/if}
|
|
454
455
|
</div>
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
456
|
+
<!-- The magnifier used to be a background-image data URI in SvGrid.css
|
|
457
|
+
with a hard-coded stroke colour, so it ignored every theme and could
|
|
458
|
+
not be overridden. It is markup now, and the input keeps its own
|
|
459
|
+
class: focusFilterPanel() and a test both resolve `.sv-grid-menu-search`. -->
|
|
460
|
+
<span class="sv-grid-menu-search-wrap">
|
|
461
|
+
{@render icon("search")}
|
|
462
|
+
<input
|
|
463
|
+
class="sv-grid-menu-search"
|
|
464
|
+
placeholder="Search values..."
|
|
465
|
+
bind:value={ctrl.columnMenuSearch}
|
|
466
|
+
/>
|
|
467
|
+
</span>
|
|
460
468
|
<label class="sv-grid-facet sv-grid-facet-all">
|
|
461
469
|
<input type="checkbox" checked={isAllFacetsChecked(colId)} onchange={() => toggleAllFacets(colId)} />
|
|
462
470
|
<!-- Says what it will actually do: with a query typed it acts on the
|
|
@@ -593,7 +601,7 @@
|
|
|
593
601
|
onclick={() => pinColumnLeft(menuColumnId)}
|
|
594
602
|
>
|
|
595
603
|
<span class="sv-grid-header-icon"
|
|
596
|
-
>{@render icon("
|
|
604
|
+
>{@render icon("pin-left")}</span
|
|
597
605
|
> Pin to left
|
|
598
606
|
</button>
|
|
599
607
|
<button
|
|
@@ -604,7 +612,7 @@
|
|
|
604
612
|
onclick={() => pinColumnRight(menuColumnId)}
|
|
605
613
|
>
|
|
606
614
|
<span class="sv-grid-header-icon"
|
|
607
|
-
>{@render icon("
|
|
615
|
+
>{@render icon("pin-right")}</span
|
|
608
616
|
> Pin to right
|
|
609
617
|
</button>
|
|
610
618
|
<button
|
|
@@ -614,7 +622,7 @@
|
|
|
614
622
|
disabled={!menuPinSide}
|
|
615
623
|
onclick={() => unpinColumn(menuColumnId)}
|
|
616
624
|
>
|
|
617
|
-
<span class="sv-grid-header-icon">{@render icon("
|
|
625
|
+
<span class="sv-grid-header-icon">{@render icon("unpin")}</span> Unpin column
|
|
618
626
|
</button>
|
|
619
627
|
{/if}
|
|
620
628
|
<div class="sv-grid-menu-sep"></div>
|