@svgrid/grid 2.1.21 → 2.1.23
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/README.md +9 -2
- package/dist/DockNodeView.svelte +306 -0
- package/dist/DockNodeView.svelte.d.ts +7 -0
- package/dist/DockPopoutHost.svelte +17 -0
- package/dist/DockPopoutHost.svelte.d.ts +14 -0
- package/dist/GridMenus.svelte +83 -3
- package/dist/SvAutoComplete.svelte +5 -3
- package/dist/SvCarousel.svelte +20 -42
- package/dist/SvColorInput.svelte +4 -3
- package/dist/SvColorInput.svelte.d.ts +1 -1
- package/dist/SvComboBox.svelte +7 -3
- package/dist/SvCommand.svelte +28 -85
- package/dist/SvCountryInput.svelte +1 -1
- package/dist/SvDateRangeInput.svelte +1 -1
- package/dist/SvDateTimePicker.svelte +9 -3
- package/dist/SvDateTimePicker.svelte.d.ts +3 -0
- package/dist/SvDockLayout.svelte +244 -0
- package/dist/SvDockLayout.svelte.d.ts +77 -0
- package/dist/SvDockManager.svelte +922 -0
- package/dist/SvDockManager.svelte.d.ts +106 -0
- package/dist/SvDrawer.svelte +69 -47
- package/dist/SvDrawer.svelte.d.ts +4 -0
- package/dist/SvDropDownList.svelte +85 -13
- package/dist/SvDropDownList.svelte.d.ts +3 -0
- package/dist/SvField.svelte +21 -4
- package/dist/SvField.svelte.d.ts +1 -0
- package/dist/SvForm.svelte +201 -91
- package/dist/SvForm.svelte.d.ts +15 -22
- package/dist/SvGrid.controller.svelte.d.ts +32 -1
- package/dist/SvGrid.controller.svelte.js +156 -27
- package/dist/SvGrid.css +193 -5
- package/dist/SvGrid.svelte +357 -12
- package/dist/SvGrid.types.d.ts +452 -1
- package/dist/SvGridDropdown.svelte +8 -1
- package/dist/SvGridSelect.svelte +1 -0
- package/dist/SvListBox.svelte +36 -14
- package/dist/SvMaskedInput.svelte +4 -3
- package/dist/SvMaskedInput.svelte.d.ts +1 -1
- package/dist/SvMenu.svelte +1 -1
- package/dist/SvMenuList.svelte +23 -71
- package/dist/SvMenuList.svelte.d.ts +2 -13
- package/dist/SvModal.svelte +12 -29
- package/dist/SvMultiSelect.svelte +1 -0
- package/dist/SvNumberInput.svelte +4 -3
- package/dist/SvNumberInput.svelte.d.ts +1 -1
- package/dist/SvPagination.svelte +18 -18
- package/dist/SvPasswordInput.svelte +3 -2
- package/dist/SvPasswordInput.svelte.d.ts +1 -1
- package/dist/SvPhoneInput.svelte +3 -2
- package/dist/SvPhoneInput.svelte.d.ts +1 -1
- package/dist/SvPopover.svelte +1 -1
- package/dist/SvStepper.svelte +6 -9
- package/dist/SvTagsInput.svelte +3 -2
- package/dist/SvTagsInput.svelte.d.ts +1 -1
- package/dist/SvTooltip.svelte +12 -23
- package/dist/SvTour.svelte +32 -4
- package/dist/SvTreeSelect.svelte +1 -0
- package/dist/build-api.js +76 -54
- package/dist/cdn/svgrid.js +10907 -6444
- package/dist/cdn/svgrid.svelte-external.js +9622 -5475
- package/dist/columns.js +6 -0
- package/dist/conditional-formatting.d.ts +67 -3
- package/dist/conditional-formatting.js +124 -17
- package/dist/createCarousel.svelte.d.ts +72 -0
- package/dist/createCarousel.svelte.js +80 -0
- package/dist/createCommand.svelte.d.ts +62 -0
- package/dist/createCommand.svelte.js +109 -0
- package/dist/createForm.svelte.d.ts +62 -0
- package/dist/createForm.svelte.js +374 -0
- package/dist/createMenu.svelte.d.ts +88 -0
- package/dist/createMenu.svelte.js +153 -0
- package/dist/createOverlay.svelte.d.ts +38 -0
- package/dist/createOverlay.svelte.js +68 -0
- package/dist/createPagination.d.ts +74 -0
- package/dist/createPagination.js +71 -0
- package/dist/createPopoverSelect.svelte.js +6 -12
- package/dist/createStepper.d.ts +44 -0
- package/dist/createStepper.js +26 -0
- package/dist/createTooltip.svelte.d.ts +32 -0
- package/dist/createTooltip.svelte.js +61 -0
- package/dist/datetime/timezone.d.ts +36 -0
- package/dist/datetime/timezone.js +110 -0
- package/dist/dock-context.d.ts +52 -0
- package/dist/dock-context.js +1 -0
- package/dist/dock-manager-model.d.ts +136 -0
- package/dist/dock-manager-model.js +514 -0
- package/dist/dock-model.d.ts +105 -0
- package/dist/dock-model.js +288 -0
- package/dist/dock-popout.d.ts +30 -0
- package/dist/dock-popout.js +81 -0
- package/dist/editor-contract.d.ts +2 -0
- package/dist/filter-operators.d.ts +6 -0
- package/dist/filter-operators.js +35 -2
- package/dist/filtering/excel-filters.d.ts +18 -1
- package/dist/filtering/excel-filters.js +56 -0
- package/dist/form-field.d.ts +73 -0
- package/dist/form-field.js +15 -0
- package/dist/index.d.ts +25 -5
- package/dist/index.js +40 -4
- package/dist/list-nav.d.ts +18 -0
- package/dist/list-nav.js +30 -0
- package/dist/list-option.d.ts +2 -0
- package/dist/menu-item.d.ts +20 -0
- package/dist/menu-item.js +1 -0
- package/dist/menus.d.ts +5 -0
- package/dist/menus.js +68 -16
- package/dist/panel-resize.d.ts +25 -0
- package/dist/panel-resize.js +40 -0
- package/dist/popover.d.ts +29 -3
- package/dist/popover.js +22 -6
- package/dist/recurrence.d.ts +33 -7
- package/dist/recurrence.js +151 -13
- package/dist/row-drag.d.ts +8 -0
- package/dist/row-drag.js +11 -0
- package/dist/scheduler-ical.d.ts +30 -0
- package/dist/scheduler-ical.js +180 -0
- package/dist/scheduler-model.d.ts +269 -0
- package/dist/scheduler-model.js +602 -0
- package/dist/scheduler-view.svelte.d.ts +22 -0
- package/dist/scheduler-view.svelte.js +13 -0
- package/dist/spreadsheet.js +20 -12
- package/dist/ui-app.types.d.ts +3 -0
- package/package.json +5 -1
- package/src/DockNodeView.svelte +306 -0
- package/src/DockPopoutHost.svelte +17 -0
- package/src/GridMenus.svelte +83 -3
- package/src/SvAutoComplete.svelte +5 -3
- package/src/SvCarousel.svelte +20 -42
- package/src/SvCarousel.test.ts +68 -0
- package/src/SvColorInput.svelte +4 -3
- package/src/SvComboBox.svelte +7 -3
- package/src/SvCommand.svelte +28 -85
- package/src/SvCommand.test.ts +78 -0
- package/src/SvCountryInput.svelte +1 -1
- package/src/SvDateRangeInput.svelte +1 -1
- package/src/SvDateTimePicker.svelte +9 -3
- package/src/SvDockLayout.svelte +244 -0
- package/src/SvDockManager.svelte +922 -0
- package/src/SvDrawer.svelte +69 -47
- package/src/SvDropDownList.svelte +85 -13
- package/src/SvField.svelte +21 -4
- package/src/SvForm.svelte +201 -91
- package/src/SvForm.test.ts +299 -0
- package/src/SvGrid.controller.svelte.ts +152 -28
- package/src/SvGrid.css +193 -5
- package/src/SvGrid.svelte +357 -12
- package/src/SvGrid.types.ts +463 -1
- package/src/SvGridDropdown.svelte +8 -1
- package/src/SvGridSelect.svelte +1 -0
- package/src/SvListBox.svelte +36 -14
- package/src/SvMaskedInput.svelte +4 -3
- package/src/SvMenu.svelte +1 -1
- package/src/SvMenu.test.ts +24 -0
- package/src/SvMenuList.svelte +23 -71
- package/src/SvModal.svelte +12 -29
- package/src/SvModal.test.ts +82 -0
- package/src/SvMultiSelect.svelte +1 -0
- package/src/SvNumberInput.svelte +4 -3
- package/src/SvPagination.svelte +18 -18
- package/src/SvPasswordInput.svelte +3 -2
- package/src/SvPhoneInput.svelte +3 -2
- package/src/SvPopover.svelte +1 -1
- package/src/SvStepper.svelte +6 -9
- package/src/SvTagsInput.svelte +3 -2
- package/src/SvTooltip.svelte +12 -23
- package/src/SvTooltip.test.ts +73 -0
- package/src/SvTour.svelte +32 -4
- package/src/SvTreeSelect.svelte +1 -0
- package/src/build-api.ts +74 -51
- package/src/columns.ts +5 -0
- package/src/conditional-formatting.test.ts +104 -0
- package/src/conditional-formatting.ts +176 -19
- package/src/createCarousel.svelte.ts +104 -0
- package/src/createCommand.svelte.ts +125 -0
- package/src/createForm.svelte.ts +333 -0
- package/src/createMenu.svelte.ts +202 -0
- package/src/createOverlay.svelte.ts +101 -0
- package/src/createPagination.test.ts +65 -0
- package/src/createPagination.ts +84 -0
- package/src/createPopoverSelect.svelte.ts +5 -9
- package/src/createStepper.test.ts +62 -0
- package/src/createStepper.ts +61 -0
- package/src/createTooltip.svelte.ts +86 -0
- package/src/datetime/timezone.test.ts +69 -0
- package/src/datetime/timezone.ts +134 -0
- package/src/dock-context.ts +47 -0
- package/src/dock-manager-model.test.ts +275 -0
- package/src/dock-manager-model.ts +593 -0
- package/src/dock-model.test.ts +163 -0
- package/src/dock-model.ts +368 -0
- package/src/dock-popout.ts +94 -0
- package/src/editor-contract.ts +2 -0
- package/src/filter-operators.test.ts +59 -0
- package/src/filter-operators.ts +35 -2
- package/src/filtering/excel-filters.test.ts +86 -1
- package/src/filtering/excel-filters.ts +65 -0
- package/src/form-field.ts +87 -0
- package/src/index.ts +158 -4
- package/src/list-nav.test.ts +49 -0
- package/src/list-nav.ts +29 -0
- package/src/list-option.ts +2 -0
- package/src/menu-item.ts +21 -0
- package/src/menus.test.ts +48 -0
- package/src/menus.ts +73 -16
- package/src/panel-resize.ts +52 -0
- package/src/popover.bounds.test.ts +93 -0
- package/src/popover.ts +51 -7
- package/src/recurrence.test.ts +88 -1
- package/src/recurrence.ts +166 -15
- package/src/row-drag.ts +10 -0
- package/src/scheduler-ical.test.ts +68 -0
- package/src/scheduler-ical.ts +180 -0
- package/src/scheduler-model.test.ts +546 -0
- package/src/scheduler-model.ts +853 -0
- package/src/scheduler-view.svelte.ts +33 -0
- package/src/spreadsheet.ts +20 -12
- package/src/svgrid.effect-driven-filter.svelte.test.ts +116 -0
- package/src/ui-app.types.ts +3 -0
- package/src/virtual.test.ts +6 -4
package/dist/build-api.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "./sv-grid-scrollbar";
|
|
2
|
+
import { untrack } from "svelte";
|
|
2
3
|
import { projectGridRows, serializeDelimited, serializeJson, serializeMarkdown, downloadTextFile, copyTextToClipboard, } from "./export-format";
|
|
3
4
|
import { isGroupRow, getColumnAlign, columnDefMatchesId, } from "./cell-values";
|
|
4
5
|
export function createGridApi(ctx) {
|
|
@@ -226,65 +227,79 @@ export function createGridApi(ctx) {
|
|
|
226
227
|
ctx.grid.setGrouping([...columnIds]);
|
|
227
228
|
},
|
|
228
229
|
setFilter(columnId, filter) {
|
|
229
|
-
//
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
230
|
+
// `untrack`: these imperative mutators read the same filter state they
|
|
231
|
+
// write (read-modify-write on `filterMenuValues`). When a consumer
|
|
232
|
+
// calls them from inside a reactive `$effect`, that internal read would
|
|
233
|
+
// otherwise be captured as a dependency of the caller's effect, and the
|
|
234
|
+
// write would re-dirty it - an infinite update loop. Untracking the
|
|
235
|
+
// body keeps the API safe to drive from an effect.
|
|
236
|
+
untrack(() => {
|
|
237
|
+
// Honour the column's `filterable` opt-out. Same approach as
|
|
238
|
+
// `setSort` - `getCanFilter()` already combines the feature flag
|
|
239
|
+
// and the per-column field.
|
|
240
|
+
const col = ctx.allColumns.find((c) => c.id === columnId);
|
|
241
|
+
if (col && !col.getCanFilter?.())
|
|
242
|
+
return;
|
|
243
|
+
if (!filter) {
|
|
244
|
+
this.clearFilter(columnId);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
ctx.filterMenuValues = {
|
|
248
|
+
...ctx.filterMenuValues,
|
|
249
|
+
[columnId]: {
|
|
250
|
+
operator: filter.operator,
|
|
251
|
+
value: filter.value ?? "",
|
|
252
|
+
...(filter.operator === "between"
|
|
253
|
+
? { valueTo: filter.valueTo ?? "" }
|
|
254
|
+
: {}),
|
|
255
|
+
// Optional second condition + join (multi-condition filtering).
|
|
256
|
+
...(filter.operator2
|
|
257
|
+
? {
|
|
258
|
+
operator2: filter.operator2,
|
|
259
|
+
value2: filter.value2 ?? "",
|
|
260
|
+
join: filter.join ?? "AND",
|
|
261
|
+
...(filter.operator2 === "between"
|
|
262
|
+
? { valueTo2: filter.valueTo2 ?? "" }
|
|
263
|
+
: {}),
|
|
264
|
+
}
|
|
265
|
+
: {}),
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
});
|
|
260
269
|
},
|
|
261
270
|
setFacetFilter(columnId, values) {
|
|
262
|
-
//
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
271
|
+
// See `setFilter` for why the read-modify-write is untracked.
|
|
272
|
+
untrack(() => {
|
|
273
|
+
// Empty array OR null both mean "clear this column's facet" -
|
|
274
|
+
// mirrors how the column menu treats unchecking the last value.
|
|
275
|
+
if (!values || values.length === 0) {
|
|
276
|
+
if (ctx.valueFilters[columnId]) {
|
|
277
|
+
const next = { ...ctx.valueFilters };
|
|
278
|
+
delete next[columnId];
|
|
279
|
+
ctx.valueFilters = next;
|
|
280
|
+
}
|
|
281
|
+
return;
|
|
269
282
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
};
|
|
283
|
+
ctx.valueFilters = {
|
|
284
|
+
...ctx.valueFilters,
|
|
285
|
+
[columnId]: new Set(values),
|
|
286
|
+
};
|
|
287
|
+
});
|
|
276
288
|
},
|
|
277
289
|
clearFilter(columnId) {
|
|
278
290
|
ctx.clearColumnFilter(columnId);
|
|
279
291
|
},
|
|
280
292
|
clearAllFilters() {
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
ctx.
|
|
293
|
+
// See `setFilter` for why the read-modify-write is untracked.
|
|
294
|
+
untrack(() => {
|
|
295
|
+
// Wipe every filter surface in one go: column-menu, filter-row, set
|
|
296
|
+
// filters, and the global search box.
|
|
297
|
+
ctx.filterMenuValues = {};
|
|
298
|
+
ctx.filterRowValues = {};
|
|
299
|
+
ctx.valueFilters = {};
|
|
300
|
+
if (ctx.globalFilter !== "")
|
|
301
|
+
ctx.globalFilter = "";
|
|
302
|
+
});
|
|
288
303
|
},
|
|
289
304
|
getFilters() {
|
|
290
305
|
// Return a defensive copy so callers can't mutate internal state.
|
|
@@ -627,8 +642,12 @@ export function createGridApi(ctx) {
|
|
|
627
642
|
const sorting = state.sorting.map((s) => ({ id: s.id, desc: s.desc }));
|
|
628
643
|
ctx.grid.store.setState((prev) => ({ ...prev, sorting }));
|
|
629
644
|
}
|
|
630
|
-
if (state.grouping)
|
|
631
|
-
|
|
645
|
+
if (state.grouping) {
|
|
646
|
+
// Drop grouping by columns that no longer exist (#53) - otherwise a
|
|
647
|
+
// saved view collapses every row into a group named 'undefined'.
|
|
648
|
+
const existing = new Set(ctx.grid.getAllColumns().map((c) => c.id));
|
|
649
|
+
ctx.grid.setGrouping(state.grouping.filter((id) => existing.has(id)));
|
|
650
|
+
}
|
|
632
651
|
if (state.pagination) {
|
|
633
652
|
const p = state.pagination;
|
|
634
653
|
ctx.grid.setPagination((prev) => ({ ...prev, ...p }));
|
|
@@ -643,7 +662,10 @@ export function createGridApi(ctx) {
|
|
|
643
662
|
if (state.columnOrder)
|
|
644
663
|
ctx.setColumnOrderInternal(state.columnOrder);
|
|
645
664
|
if (state.hiddenColumns) {
|
|
646
|
-
|
|
665
|
+
// Seed from columns declared `visible: false` so a partial/empty saved
|
|
666
|
+
// state never un-hides an app-declared-hidden column (#54); then layer
|
|
667
|
+
// the saved user-driven hides on top.
|
|
668
|
+
const next = { ...ctx.declaredHiddenColumns };
|
|
647
669
|
for (const id of state.hiddenColumns)
|
|
648
670
|
next[id] = true;
|
|
649
671
|
ctx.hiddenColumns = next;
|