@svgrid/grid 2.2.28 → 2.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/GridMenus.svelte +148 -100
  2. package/dist/SvGrid.controller.svelte.d.ts +14 -1
  3. package/dist/SvGrid.controller.svelte.js +112 -28
  4. package/dist/SvGrid.css +15 -34
  5. package/dist/SvGrid.svelte +49 -21
  6. package/dist/SvGrid.types.d.ts +20 -5
  7. package/dist/SvListBox.svelte +42 -3
  8. package/dist/SvListBox.svelte.d.ts +10 -1
  9. package/dist/cdn/GridMenus-Da_p7SKS.js +486 -0
  10. package/dist/cdn/GridMenus-Ds3OpzZT.js +490 -0
  11. package/dist/cdn/{src-BxNEslEo.js → src-BLJfdyL0.js} +4014 -3869
  12. package/dist/cdn/{src-C4yKQZ5t.js → src-DYDCiC0D.js} +7036 -6891
  13. package/dist/cdn/svgrid.js +8 -8
  14. package/dist/cdn/svgrid.svelte-external.js +8 -8
  15. package/dist/column-groups.js +8 -10
  16. package/dist/column-id.d.ts +9 -0
  17. package/dist/column-id.js +25 -0
  18. package/dist/core.js +2 -1
  19. package/dist/createListbox.svelte.d.ts +15 -2
  20. package/dist/createListbox.svelte.js +27 -6
  21. package/dist/editing.d.ts +1 -0
  22. package/dist/editing.js +45 -10
  23. package/dist/filtering/excel-filters.d.ts +30 -10
  24. package/dist/filtering/excel-filters.js +96 -15
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.js +2 -2
  27. package/dist/menus.d.ts +2 -0
  28. package/dist/menus.js +25 -0
  29. package/dist/row-resize.js +40 -0
  30. package/dist/selection.js +1 -1
  31. package/package.json +1 -1
  32. package/src/GridMenus.svelte +148 -100
  33. package/src/SvGrid.controller.svelte.ts +123 -27
  34. package/src/SvGrid.css +15 -34
  35. package/src/SvGrid.svelte +49 -21
  36. package/src/SvGrid.types.ts +20 -5
  37. package/src/SvListBox.svelte +42 -3
  38. package/src/column-groups.test.ts +48 -0
  39. package/src/column-groups.ts +8 -10
  40. package/src/column-id.ts +30 -0
  41. package/src/core.ts +2 -1
  42. package/src/createListbox.svelte.ts +39 -7
  43. package/src/editing.test.ts +90 -0
  44. package/src/editing.ts +46 -12
  45. package/src/filtering/excel-filters.test.ts +44 -1
  46. package/src/filtering/excel-filters.ts +91 -14
  47. package/src/index.ts +2 -0
  48. package/src/menus.test.ts +40 -4
  49. package/src/menus.ts +27 -0
  50. package/src/row-resize.test.ts +100 -0
  51. package/src/row-resize.ts +36 -0
  52. package/src/selection.ts +1 -1
  53. package/src/svgrid.api-extensions.test.ts +8 -3
  54. package/src/svgrid.cell-dom-ids.test.ts +96 -0
  55. package/src/svgrid.conditional-stat-scope.test.ts +111 -0
  56. package/src/svgrid.filter-menu-listbox.svelte.test.ts +308 -0
  57. package/src/svgrid.filter-menu-scroll.test.ts +3 -1
  58. package/src/svgrid.group-header-ids.test.ts +121 -0
  59. package/dist/cdn/GridMenus-BbzEvTYO.js +0 -421
  60. package/dist/cdn/GridMenus-E220X2kM.js +0 -417
@@ -0,0 +1,121 @@
1
+ /**
2
+ * DOM: group header cells stay aligned when a collapsed group hides a leaf
3
+ * that sits next to an UNNAMED leaf (no `id`, no `field`) (#63).
4
+ *
5
+ * The group-header builder walks the column tree twice: once to collect leaf
6
+ * widths and once to index nodes. Both mint a fallback id for unnamed columns.
7
+ * Those two ids have to agree, or the group cell resolves to the wrong leaf and
8
+ * renders with `colSpan: 1` and `widthPx: 0` - a group header sitting over
9
+ * nothing.
10
+ */
11
+ import { afterEach, describe, expect, it } from 'vitest'
12
+ import { mount, unmount } from 'svelte'
13
+ import SvGrid from './SvGrid.svelte'
14
+ import {
15
+ createCoreRowModel,
16
+ createFilteredRowModel,
17
+ createPaginatedRowModel,
18
+ createSortedRowModel,
19
+ sortFns,
20
+ tableFeatures,
21
+ rowSortingFeature,
22
+ } from './index'
23
+
24
+ type Row = { id: number; name: string; jan: number }
25
+ const features = tableFeatures({ rowSortingFeature })
26
+
27
+ // The drift needs three things in one group: a leaf that gets skipped, then
28
+ // TWO unnamed leaves after it. Skipping the first one made the node counter
29
+ // fall behind the array index, so the third leaf inherited the second leaf's
30
+ // auto-id - and with it the second leaf's hidden state.
31
+ //
32
+ // Expanded, "Closed" hides and "Always" must stay: the buggy id reuse marked
33
+ // "Always" hidden too, shrinking the group header to one leaf.
34
+ const columns = [
35
+ { field: 'name', header: 'Name', width: 120 },
36
+ {
37
+ id: 'q1',
38
+ header: 'Q1',
39
+ columns: [
40
+ { field: 'jan', header: 'Jan', width: 90, columnGroupShow: 'open' },
41
+ { header: 'Closed', width: 150, columnGroupShow: 'closed' },
42
+ { header: 'Always', width: 200 },
43
+ ],
44
+ },
45
+ ]
46
+
47
+ const data: Row[] = [{ id: 1, name: 'one', jan: 5 }]
48
+
49
+ const tick = () => new Promise<void>((r) => queueMicrotask(r))
50
+
51
+ function mountGrid() {
52
+ const target = document.createElement('div')
53
+ document.body.appendChild(target)
54
+ const app = mount(SvGrid, {
55
+ target,
56
+ props: {
57
+ data,
58
+ columns,
59
+ features,
60
+ _rowModels: {
61
+ coreRowModel: createCoreRowModel(),
62
+ filteredRowModel: createFilteredRowModel(),
63
+ sortedRowModel: createSortedRowModel(sortFns),
64
+ paginatedRowModel: createPaginatedRowModel(),
65
+ },
66
+ containerHeight: 240,
67
+ virtualization: false,
68
+ } as never,
69
+ })
70
+ return { target, destroy: () => { unmount(app); target.remove() } }
71
+ }
72
+
73
+ let cleanup: (() => void) | null = null
74
+ afterEach(() => { cleanup?.(); cleanup = null })
75
+
76
+ function groupCell(target: HTMLElement): HTMLElement {
77
+ const cells = [...target.querySelectorAll<HTMLElement>('.sv-grid-group-header-cell')]
78
+ const cell = cells.find((c) => c.textContent?.includes('Q1'))
79
+ expect(cell).toBeDefined()
80
+ return cell!
81
+ }
82
+
83
+ describe('group header with unnamed leaves', () => {
84
+ it('covers the closed-mode leaves while collapsed (#63)', async () => {
85
+ const { target, destroy } = mountGrid()
86
+ cleanup = destroy
87
+ await tick()
88
+
89
+ // Collapsed by default (no `openByDefault`): "Jan" hides, "Closed" and
90
+ // "Always" show.
91
+ const cell = groupCell(target)
92
+ expect(cell.getAttribute('colspan')).toBe('2')
93
+ expect(cell.style.width).toBe('350px')
94
+ })
95
+
96
+ it('keeps the untagged leaf when the group is expanded (#63)', async () => {
97
+ const { target, destroy } = mountGrid()
98
+ cleanup = destroy
99
+ await tick()
100
+
101
+ const toggle = target.querySelector<HTMLButtonElement>('.sv-grid-group-toggle')
102
+ expect(toggle).not.toBeNull()
103
+ toggle!.click()
104
+ await tick()
105
+
106
+ // Expanded: "Jan" (90) shows, "Closed" hides, "Always" (200) still shows.
107
+ // Before the fix the third leaf inherited the second leaf's auto-id, was
108
+ // read as hidden, and the group shrank to `colspan="1"` over a header with
109
+ // no cells beneath it.
110
+ const cell = groupCell(target)
111
+ expect(cell.getAttribute('colspan')).toBe('2')
112
+ expect(cell.style.width).toBe('290px')
113
+
114
+ // And the unnamed `columnGroupShow: 'closed'` leaf really is gone from the
115
+ // leaf-header row - its id now matches the one the engine assigned.
116
+ const leafIds = [...target.querySelectorAll('[data-svgrid-header-col]')].map(
117
+ (el) => el.getAttribute('data-svgrid-header-col'),
118
+ )
119
+ expect(leafIds).toEqual(['name', 'jan', 'q1_1_2'])
120
+ })
121
+ })
@@ -1,421 +0,0 @@
1
- import { eo as e, to as t } from "./src-BxNEslEo.js";
2
- import { l as n } from "./SvDateTimePicker-DB0aIEk8.js";
3
- import * as r from "svelte/internal/client";
4
- import "svelte/internal/disclose-version";
5
- //#region src/GridMenus.svelte
6
- var i = r.from_html("<option> </option>"), a = r.from_html("<option></option>"), o = r.from_html("<datalist></datalist>"), s = r.from_html("<input class=\"sv-grid-menu-condition-value\" placeholder=\"To\"/>"), c = r.from_html("<option> </option>"), l = r.from_html("<input class=\"sv-grid-menu-condition-value\" placeholder=\"To\"/>"), u = r.from_html("<input class=\"sv-grid-menu-condition-value\"/> <!>", 1), d = r.from_html("<div class=\"sv-grid-menu-join\" role=\"radiogroup\" aria-label=\"Combine conditions\"><button type=\"button\">AND</button> <button type=\"button\">OR</button> <button type=\"button\" class=\"sv-grid-menu-join-x\" title=\"Remove second condition\" aria-label=\"Remove second condition\">×</button></div> <select class=\"sv-grid-menu-operator-select\" aria-label=\"Second filter condition\"></select> <!>", 1), f = r.from_html("<button type=\"button\" class=\"sv-grid-menu-add-cond\">+ Add condition</button>"), p = r.from_html("<input class=\"sv-grid-menu-condition-value\"/> <!> <!> <!>", 1), m = r.from_html("<label class=\"sv-grid-facet\"><input type=\"checkbox\"/> <span class=\"sv-grid-facet-label\"> </span></label>"), h = r.from_html("<div class=\"sv-grid-facet-empty\">No values</div>"), g = r.from_html("<div class=\"sv-grid-facet-note\"> </div>"), _ = r.from_html("<div class=\"sv-grid-menu-filter\"><div class=\"sv-grid-menu-filter-head\"><span class=\"sv-grid-header-icon\"><!></span> Filter\n condition</div> <select class=\"sv-grid-menu-operator-select\" aria-label=\"Filter condition\"></select> <!> <div class=\"sv-grid-menu-sep\"></div> <div class=\"sv-grid-menu-filter-head\">Values</div> <input class=\"sv-grid-menu-search\" placeholder=\"Search values...\"/> <label class=\"sv-grid-facet sv-grid-facet-all\"><input type=\"checkbox\"/> <span class=\"sv-grid-facet-label\">(Select all)</span></label> <div class=\"sv-grid-facet-list\"></div> <!> <div class=\"sv-grid-menu-actions\"><button type=\"button\" class=\"sv-grid-menu-btn\">Clear filter</button> <button type=\"button\" class=\"sv-grid-menu-btn sv-grid-menu-btn-primary\">Done</button></div></div>"), v = r.from_html("<div role=\"tooltip\"> </div>"), y = r.from_html("<div class=\"sv-grid-menu-backdrop\" role=\"presentation\"></div>"), b = r.from_html("<button type=\"button\" role=\"tab\">Filter</button>"), x = r.from_html("<div class=\"sv-grid-menu-tabs\" role=\"tablist\"><button type=\"button\" role=\"tab\">General</button> <!> <button type=\"button\" role=\"tab\">Columns</button></div>"), S = r.from_html("<label class=\"sv-grid-facet\"><input type=\"checkbox\"/> <span class=\"sv-grid-facet-label\"> </span></label>"), C = r.from_html("<div class=\"sv-grid-menu-filter-head\">Visible columns</div> <div class=\"sv-grid-facet-list\"></div>", 1), w = r.from_html("<button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Sort\n ascending</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Sort\n descending</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Remove sort</button>", 1), T = r.from_html("<div class=\"sv-grid-menu-sep\"></div> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Pin to left</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Pin to right</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Unpin column</button>", 1), E = r.from_html("<div class=\"sv-grid-menu-sep\"></div> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Group\n by this column</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Remove grouping</button>", 1), D = r.from_html("<button type=\"button\" role=\"menuitem\" aria-haspopup=\"menu\"><span class=\"sv-grid-header-icon\"><!></span> Choose columns <span class=\"sv-grid-header-icon sv-grid-menu-item-chevron\"><!></span></button>"), O = r.from_html("<!> <!> <div class=\"sv-grid-menu-sep\"></div> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Autosize\n this column</button> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Autosize\n all columns</button> <!> <div class=\"sv-grid-menu-sep\"></div> <!> <button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"><span class=\"sv-grid-header-icon\"><!></span> Reset columns</button>", 1), ee = r.from_html("<div class=\"sv-grid-menu sv-grid-column-menu\" role=\"menu\"><!> <!></div>"), k = r.from_html("<div class=\"sv-grid-menu sv-grid-filter-menu\" role=\"menu\"><!></div>"), A = r.from_html("<label class=\"sv-grid-facet\"><input type=\"checkbox\"/> <span class=\"sv-grid-facet-label\"> </span></label>"), j = r.from_html("<div class=\"sv-grid-menu sv-grid-choose-columns-menu\" role=\"menu\"><div class=\"sv-grid-menu-filter-head\">Visible columns</div> <div class=\"sv-grid-facet-list\"></div></div>"), M = r.from_html("<button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitemradio\"><span class=\"sv-grid-header-icon\"><!></span> </button>"), N = r.from_html("<div class=\"sv-grid-menu sv-grid-operator-menu\" role=\"menu\"></div>"), te = r.from_html("<button type=\"button\" class=\"sv-grid-menu-item sv-grid-in-suggest-item\" role=\"option\"><span class=\"sv-grid-in-suggest-check\" aria-hidden=\"true\"> </span> <span class=\"sv-grid-in-suggest-label\"> </span></button>"), ne = r.from_html("<div class=\"sv-grid-facet-empty\">No values</div>"), P = r.from_html("<div class=\"sv-grid-menu sv-grid-in-suggest\" role=\"listbox\" aria-multiselectable=\"true\" aria-label=\"Filter values\"></div>"), re = r.from_html("<div class=\"sv-grid-menu-sep\"></div>"), ie = r.from_html("<button type=\"button\" class=\"sv-grid-menu-item\" role=\"menuitem\"> </button>"), ae = r.from_html("<div class=\"sv-grid-menu-backdrop\" role=\"presentation\"></div> <div class=\"sv-grid-menu sv-grid-context-menu\" role=\"menu\"></div>", 1), oe = r.from_html("<div class=\"sv-grid-menu-backdrop\" role=\"presentation\"></div> <div class=\"sv-grid-menu sv-grid-comment-editor\" role=\"dialog\" aria-label=\"Edit comment\"><textarea class=\"sv-grid-comment-textarea\" rows=\"3\" placeholder=\"Add a comment…\"></textarea> <div class=\"sv-grid-comment-actions\"><button type=\"button\" class=\"sv-grid-comment-remove\">Remove</button> <span class=\"sv-grid-comment-spacer\"></span> <button type=\"button\" class=\"sv-grid-comment-cancel\">Cancel</button> <button type=\"button\" class=\"sv-grid-comment-save\">Save</button></div></div>", 1), se = r.from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!>", 1);
7
- function ce(ce, F) {
8
- r.push(F, !0);
9
- let le = (e, n = r.noop) => {
10
- let v = r.derived(() => r.get(q).find((e) => e.id === n())), y = r.derived(() => r.get(Ce)(r.get(v))), b = r.derived(() => r.get(L)[n()]?.operator ?? r.get(J)(r.get(v))), x = r.derived(() => t(r.get(v)?.columnDef.editorType ?? "text"));
11
- var S = _(), C = r.child(S), w = r.child(C), T = r.child(w);
12
- r.snippet(T, () => F.icon, () => "filter"), r.reset(w), r.next(), r.reset(C);
13
- var E = r.sibling(C, 2);
14
- r.each(E, 21, () => r.get(y), (e) => e.value, (e, t) => {
15
- var n = i(), a = r.child(n, !0);
16
- r.reset(n);
17
- var o = {};
18
- r.template_effect((e) => {
19
- r.set_text(a, e), o !== (o = r.get(t).value) && (n.value = (n.__value = r.get(t).value) ?? "");
20
- }, [() => r.get(Y)(r.get(t), r.get(v))]), r.append(e, n);
21
- }), r.reset(E);
22
- var D;
23
- r.init_select(E);
24
- var O = r.sibling(E, 2), ee = (e) => {
25
- let t = r.derived(() => r.get(b) === "in" || r.get(b) === "notIn"), i = r.derived(() => r.get(L)[n()]);
26
- var m = p(), h = r.first_child(m);
27
- r.remove_input_defaults(h);
28
- var g = r.sibling(h, 2), _ = (e) => {
29
- var t = o();
30
- r.each(t, 20, () => r.get(ke)(n()).slice(0, 200), (e) => e, (e, t) => {
31
- var n = a(), i = {};
32
- r.template_effect(() => {
33
- i !== (i = t) && (n.value = (n.__value = t) ?? "");
34
- }), r.append(e, n);
35
- }), r.reset(t), r.template_effect(() => r.set_attribute(t, "id", `sv-in-list-${n()}`)), r.append(e, t);
36
- };
37
- r.if(g, (e) => {
38
- r.get(t) && e(_);
39
- });
40
- var S = r.sibling(g, 2), C = (e) => {
41
- var t = s();
42
- r.remove_input_defaults(t), r.template_effect(() => {
43
- r.set_attribute(t, "type", r.get(x)), r.set_value(t, r.get(L)[n()]?.valueTo ?? "");
44
- }), r.delegated("input", t, (e) => r.get(Se)(n(), e.currentTarget.value)), r.append(e, t);
45
- };
46
- r.if(S, (e) => {
47
- r.get(b) === "between" && e(C);
48
- });
49
- var w = r.sibling(S, 2), T = (e) => {
50
- let t = r.derived(() => r.get(i).operator2 ?? r.get(J)(r.get(v)));
51
- var a = d(), o = r.first_child(a), s = r.child(o);
52
- let f;
53
- var p = r.sibling(s, 2);
54
- let m;
55
- var h = r.sibling(p, 2);
56
- r.reset(o);
57
- var g = r.sibling(o, 2);
58
- r.each(g, 21, () => r.get(y), (e) => e.value, (e, t) => {
59
- var n = c(), i = r.child(n, !0);
60
- r.reset(n);
61
- var a = {};
62
- r.template_effect((e) => {
63
- r.set_text(i, e), a !== (a = r.get(t).value) && (n.value = (n.__value = r.get(t).value) ?? "");
64
- }, [() => r.get(Y)(r.get(t), r.get(v))]), r.append(e, n);
65
- }), r.reset(g);
66
- var _;
67
- r.init_select(g);
68
- var b = r.sibling(g, 2), S = (e) => {
69
- var a = u(), o = r.first_child(a);
70
- r.remove_input_defaults(o);
71
- var s = r.sibling(o, 2), c = (e) => {
72
- var t = l();
73
- r.remove_input_defaults(t), r.template_effect(() => {
74
- r.set_attribute(t, "type", r.get(x)), r.set_value(t, r.get(i).valueTo2 ?? "");
75
- }), r.delegated("input", t, (e) => X(n(), { valueTo2: e.currentTarget.value })), r.append(e, t);
76
- };
77
- r.if(s, (e) => {
78
- r.get(t) === "between" && e(c);
79
- }), r.template_effect(() => {
80
- r.set_attribute(o, "type", r.get(x)), r.set_value(o, r.get(i).value2 ?? ""), r.set_attribute(o, "placeholder", r.get(t) === "between" ? "From" : "Filter value...");
81
- }), r.delegated("input", o, (e) => X(n(), { value2: e.currentTarget.value })), r.append(e, a);
82
- };
83
- r.if(b, (e) => {
84
- r.get(t) !== "isBlank" && e(S);
85
- }), r.template_effect(() => {
86
- f = r.set_class(s, 1, "", null, f, { "is-on": (r.get(i).join ?? "AND") === "AND" }), m = r.set_class(p, 1, "", null, m, { "is-on": r.get(i).join === "OR" }), _ !== (_ = r.get(t)) && (g.value = (g.__value = r.get(t)) ?? "", r.select_option(g, r.get(t)));
87
- }), r.delegated("click", s, () => X(n(), { join: "AND" })), r.delegated("click", p, () => X(n(), { join: "OR" })), r.delegated("click", h, () => X(n(), {
88
- operator2: void 0,
89
- value2: void 0,
90
- valueTo2: void 0,
91
- join: void 0
92
- })), r.delegated("change", g, (e) => X(n(), { operator2: e.currentTarget.value })), r.append(e, a);
93
- }, E = (e) => {
94
- var t = f();
95
- r.delegated("click", t, () => X(n(), {
96
- operator2: r.get(J)(r.get(v)),
97
- value2: "",
98
- join: "AND"
99
- })), r.append(e, t);
100
- };
101
- r.if(w, (e) => {
102
- r.get(i)?.operator2 ? e(T) : e(E, -1);
103
- }), r.template_effect(() => {
104
- r.set_attribute(h, "type", r.get(b) === "regex" ? "text" : r.get(x)), r.set_attribute(h, "list", r.get(t) ? `sv-in-list-${n()}` : void 0), r.set_value(h, r.get(L)[n()]?.value ?? ""), r.set_attribute(h, "placeholder", r.get(b) === "between" ? "From" : r.get(t) ? "value, value..." : r.get(b) === "regex" ? "Pattern..." : "Filter value...");
105
- }), r.delegated("input", h, (e) => r.get(xe)(n(), e.currentTarget.value)), r.append(e, m);
106
- };
107
- r.if(O, (e) => {
108
- r.get(b) !== "isBlank" && r.get(b) !== "isNotBlank" && e(ee);
109
- });
110
- var k = r.sibling(O, 6);
111
- r.remove_input_defaults(k);
112
- var A = r.sibling(k, 2), j = r.child(A);
113
- r.remove_input_defaults(j), r.next(2), r.reset(A);
114
- var M = r.sibling(A, 2);
115
- r.each(M, 20, () => r.get(Q), (e) => e, (e, t) => {
116
- var i = m(), a = r.child(i);
117
- r.remove_input_defaults(a);
118
- var o = r.sibling(a, 2), s = r.child(o, !0);
119
- r.reset(o), r.reset(i), r.template_effect((e) => {
120
- r.set_checked(a, e), r.set_text(s, t === "" ? "(Blanks)" : t);
121
- }, [() => r.get(Be)(n(), t)]), r.delegated("change", a, () => r.get(Ve)(n(), t)), r.append(e, i);
122
- }, (e) => {
123
- var t = h();
124
- r.append(e, t);
125
- }), r.reset(M);
126
- var N = r.sibling(M, 2), te = (e) => {
127
- var t = g(), n = r.child(t);
128
- r.reset(t), r.template_effect(() => r.set_text(n, `Showing ${r.get(Q).length ?? ""} of ${r.get(ze).length ?? ""}`)), r.append(e, t);
129
- };
130
- r.if(N, (e) => {
131
- r.get(ze).length > r.get(Q).length && e(te);
132
- });
133
- var ne = r.sibling(N, 2), P = r.child(ne), re = r.sibling(P, 2);
134
- r.reset(ne), r.reset(S), r.template_effect((e, t) => {
135
- D !== (D = r.get(b)) && (E.value = (E.__value = r.get(b)) ?? "", r.select_option(E, r.get(b))), r.set_checked(j, e), P.disabled = t;
136
- }, [() => r.get(He)(n()), () => !r.get(Ae)(n())]), r.delegated("change", E, (e) => r.get(be)(n(), e.currentTarget.value)), r.bind_value(k, () => I().columnMenuSearch, (e) => I().columnMenuSearch = e), r.delegated("change", j, () => r.get(Ue)(n())), r.delegated("click", P, () => r.get(We)(n())), r.delegated("click", re, function(...e) {
137
- r.get(Z)?.apply(this, e);
138
- }), r.append(e, S);
139
- }, I = r.prop(F, "ctrl", 7), ue = r.derived(() => I().groupingControlsEnabled), L = r.derived(() => I().filterMenuValues), R = r.derived(() => I().tooltip);
140
- r.derived(() => I().showTooltipFor);
141
- let z = r.derived(() => I().columnMenuFor), B = r.derived(() => I().columnMenuPos), V = r.derived(() => I().filterMenuFor), H = r.derived(() => I().filterMenuPos), U = r.derived(() => I().operatorMenuFor), de = r.derived(() => I().operatorMenuPos), W = r.derived(() => I().chooseColumnsPos), G = r.derived(() => I().showColumnFiltersEffective), K = r.derived(() => I().props.columnMenuTabs === !0), fe = r.derived(() => I().grid), q = r.derived(() => I().allColumns), pe = r.derived(() => I().isColumnPinned), me = r.derived(() => I().pinColumnLeft), he = r.derived(() => I().pinColumnRight), ge = r.derived(() => I().unpinColumn), _e = r.derived(() => I().sortDirectionByColumn), ve = r.derived(() => I().groupingColumns), ye = r.derived(() => I().columnVirtualizationEnabled), be = r.derived(() => I().updateFilterOperator), xe = r.derived(() => I().updateFilterMenuValue), Se = r.derived(() => I().updateFilterMenuValueTo), Ce = r.derived(() => I().operatorsForColumn), J = r.derived(() => I().defaultOperatorFor), Y = r.derived(() => I().operatorLabelFor), we = r.derived(() => I().filterRowValues), Te = r.derived(() => I().inSuggestFor), Ee = r.derived(() => I().inSuggestPos), De = r.derived(() => I().inSuggestValues), Oe = r.derived(() => I().toggleFilterToken), ke = r.derived(() => I().facetValuesForColumn);
142
- function X(e, t) {
143
- let n = r.get(q).find((t) => t.id === e), i = I().filterMenuValues[e] ?? {
144
- operator: r.get(J)(n),
145
- value: ""
146
- };
147
- I().filterMenuValues = {
148
- ...I().filterMenuValues,
149
- [e]: {
150
- ...i,
151
- ...t
152
- }
153
- };
154
- }
155
- let Ae = r.derived(() => I().isColumnFiltered), Z = r.derived(() => I().closeMenus);
156
- r.user_effect(() => {
157
- if (!(r.get(z) || r.get(V) || r.get(U) || r.get(W))) return;
158
- let e = () => r.get(Z)(), t = n(() => Array.from(document.querySelectorAll(".sv-grid-menu")), e);
159
- return window.addEventListener("resize", e), () => {
160
- t(), window.removeEventListener("resize", e);
161
- };
162
- });
163
- let je = r.derived(() => I().autosizeColumn), Me = r.derived(() => I().autosizeAllColumns), Ne = r.derived(() => I().resetColumns), Pe = r.derived(() => I().openChooseColumns), Fe = r.derived(() => I().sortColumnFromMenu), Ie = r.derived(() => I().clearColumnSort), Le = r.derived(() => I().groupByColumnFromMenu), Re = r.derived(() => I().clearGroupingFromMenu), ze = r.derived(() => I().columnMenuFacetValues), Q = r.derived(() => I().columnMenuVisibleFacets), Be = r.derived(() => I().isFacetChecked), Ve = r.derived(() => I().toggleFacetValue), He = r.derived(() => I().isAllFacetsChecked), Ue = r.derived(() => I().toggleAllFacets), We = r.derived(() => I().clearColumnFilter), Ge = r.derived(() => I().contextMenuFor), Ke = r.derived(() => I().contextMenuPos), qe = r.derived(() => I().contextMenuItems), $ = r.derived(() => I().closeContextMenu), Je = r.derived(() => I().commentEditFor), Ye = r.derived(() => I().saveComment), Xe = r.derived(() => I().removeComment), Ze = r.derived(() => I().closeCommentEditor);
164
- var Qe = se(), $e = r.first_child(Qe), et = (e) => {
165
- var t = v();
166
- let n;
167
- var i = r.child(t, !0);
168
- r.reset(t), r.template_effect(() => {
169
- n = r.set_class(t, 1, "sv-grid-tooltip", null, n, { "sv-grid-tooltip-above": !r.get(R).below }), r.set_style(t, `left: ${r.get(R).x}px; top: ${r.get(R).y}px; ${r.get(R).below ? "" : "transform: translateY(-100%);"}`), r.set_text(i, r.get(R).text);
170
- }), r.append(e, t);
171
- };
172
- r.if($e, (e) => {
173
- r.get(R) && e(et);
174
- });
175
- var tt = r.sibling($e, 2), nt = (e) => {
176
- var t = y();
177
- r.delegated("click", t, function(...e) {
178
- r.get(Z)?.apply(this, e);
179
- }), r.append(e, t);
180
- };
181
- r.if(tt, (e) => {
182
- (r.get(z) || r.get(V) || r.get(U) || r.get(W)) && e(nt);
183
- });
184
- var rt = r.sibling(tt, 2), it = (e) => {
185
- let t = r.derived(() => r.get(z)), n = r.derived(() => r.get(q).find((e) => e.id === r.get(t))), i = r.derived(() => r.get(n)?.getCanSort?.() ?? !1), a = r.derived(() => r.get(n)?.columnDef.field != null && r.get(n)?.columnDef.filterable !== !1), o = r.derived(() => I().columnMenuTab);
186
- var s = ee(), c = r.child(s), l = (e) => {
187
- var t = x(), n = r.child(t);
188
- let i;
189
- var s = r.sibling(n, 2), c = (e) => {
190
- var t = b();
191
- let n;
192
- r.template_effect(() => {
193
- n = r.set_class(t, 1, "sv-grid-menu-tab", null, n, { "is-active": r.get(o) === "filter" }), r.set_attribute(t, "aria-selected", r.get(o) === "filter");
194
- }), r.delegated("click", t, () => I().columnMenuTab = "filter"), r.append(e, t);
195
- };
196
- r.if(s, (e) => {
197
- r.get(a) && r.get(G) && e(c);
198
- });
199
- var l = r.sibling(s, 2);
200
- let u;
201
- r.reset(t), r.template_effect(() => {
202
- i = r.set_class(n, 1, "sv-grid-menu-tab", null, i, { "is-active": r.get(o) === "general" }), r.set_attribute(n, "aria-selected", r.get(o) === "general"), u = r.set_class(l, 1, "sv-grid-menu-tab", null, u, { "is-active": r.get(o) === "columns" }), r.set_attribute(l, "aria-selected", r.get(o) === "columns");
203
- }), r.delegated("click", n, () => I().columnMenuTab = "general"), r.delegated("click", l, () => I().columnMenuTab = "columns"), r.append(e, t);
204
- };
205
- r.if(c, (e) => {
206
- r.get(K) && e(l);
207
- });
208
- var u = r.sibling(c, 2), d = (e) => {
209
- le(e, () => r.get(t));
210
- }, f = (e) => {
211
- var t = C(), n = r.sibling(r.first_child(t), 2);
212
- r.each(n, 21, () => r.get(fe).getAllColumns(), (e) => e.id, (e, t) => {
213
- var n = S(), i = r.child(n);
214
- r.remove_input_defaults(i);
215
- var a = r.sibling(i, 2), o = r.child(a, !0);
216
- r.reset(a), r.reset(n), r.template_effect(() => {
217
- r.set_checked(i, !I().hiddenColumns[r.get(t).id]), r.set_text(o, typeof r.get(t).columnDef.header == "string" ? r.get(t).columnDef.header : r.get(t).id);
218
- }), r.delegated("change", i, (e) => {
219
- if (e.currentTarget.checked) {
220
- let e = { ...I().hiddenColumns };
221
- delete e[r.get(t).id], I().hiddenColumns = e;
222
- } else I().hiddenColumns = {
223
- ...I().hiddenColumns,
224
- [r.get(t).id]: !0
225
- };
226
- }), r.append(e, n);
227
- }), r.reset(n), r.append(e, t);
228
- }, p = (e) => {
229
- var n = O(), a = r.first_child(n), o = (e) => {
230
- var n = w(), i = r.first_child(n), a = r.child(i), o = r.child(a);
231
- r.snippet(o, () => F.icon, () => "sort-asc"), r.reset(a), r.next(), r.reset(i);
232
- var s = r.sibling(i, 2), c = r.child(s), l = r.child(c);
233
- r.snippet(l, () => F.icon, () => "sort-desc"), r.reset(c), r.next(), r.reset(s);
234
- var u = r.sibling(s, 2), d = r.child(u), f = r.child(d);
235
- r.snippet(f, () => F.icon, () => "x"), r.reset(d), r.next(), r.reset(u), r.template_effect(() => u.disabled = !r.get(_e)[r.get(t)]), r.delegated("click", i, () => r.get(Fe)(r.get(t), !1)), r.delegated("click", s, () => r.get(Fe)(r.get(t), !0)), r.delegated("click", u, () => r.get(Ie)(r.get(t))), r.append(e, n);
236
- };
237
- r.if(a, (e) => {
238
- r.get(i) && e(o);
239
- });
240
- var s = r.sibling(a, 2), c = (e) => {
241
- let n = r.derived(() => r.get(pe)(r.get(t)));
242
- var i = T(), a = r.sibling(r.first_child(i), 2), o = r.child(a), s = r.child(o);
243
- r.snippet(s, () => F.icon, () => "op-startsWith"), r.reset(o), r.next(), r.reset(a);
244
- var c = r.sibling(a, 2), l = r.child(c), u = r.child(l);
245
- r.snippet(u, () => F.icon, () => "op-greaterThan"), r.reset(l), r.next(), r.reset(c);
246
- var d = r.sibling(c, 2), f = r.child(d), p = r.child(f);
247
- r.snippet(p, () => F.icon, () => "x"), r.reset(f), r.next(), r.reset(d), r.template_effect(() => {
248
- a.disabled = r.get(n) === "left", c.disabled = r.get(n) === "right", d.disabled = !r.get(n);
249
- }), r.delegated("click", a, () => r.get(me)(r.get(t))), r.delegated("click", c, () => r.get(he)(r.get(t))), r.delegated("click", d, () => r.get(ge)(r.get(t))), r.append(e, i);
250
- };
251
- r.if(s, (e) => {
252
- r.get(ye) || e(c);
253
- });
254
- var l = r.sibling(s, 4), u = r.child(l), d = r.child(u);
255
- r.snippet(d, () => F.icon, () => "autosize"), r.reset(u), r.next(), r.reset(l);
256
- var f = r.sibling(l, 2), p = r.child(f), m = r.child(p);
257
- r.snippet(m, () => F.icon, () => "autosize"), r.reset(p), r.next(), r.reset(f);
258
- var h = r.sibling(f, 2), g = (e) => {
259
- var n = E(), i = r.sibling(r.first_child(n), 2), a = r.child(i), o = r.child(a);
260
- r.snippet(o, () => F.icon, () => "group"), r.reset(a), r.next(), r.reset(i);
261
- var s = r.sibling(i, 2), c = r.child(s), l = r.child(c);
262
- r.snippet(l, () => F.icon, () => "x"), r.reset(c), r.next(), r.reset(s), r.template_effect((e, t) => {
263
- i.disabled = e, s.disabled = t;
264
- }, [() => r.get(ve).includes(r.get(t)), () => !r.get(ve).includes(r.get(t))]), r.delegated("click", i, () => r.get(Le)(r.get(t))), r.delegated("click", s, () => r.get(Re)(r.get(t))), r.append(e, n);
265
- };
266
- r.if(h, (e) => {
267
- r.get(ue) && e(g);
268
- });
269
- var _ = r.sibling(h, 4), v = (e) => {
270
- var t = D();
271
- let n;
272
- var i = r.child(t), a = r.child(i);
273
- r.snippet(a, () => F.icon, () => "columns"), r.reset(i);
274
- var o = r.sibling(i, 2), s = r.child(o);
275
- r.snippet(s, () => F.icon, () => "chevron-down"), r.reset(o), r.reset(t), r.template_effect(() => {
276
- n = r.set_class(t, 1, "sv-grid-menu-item", null, n, { "is-open": r.get(W) !== null }), r.set_attribute(t, "aria-expanded", r.get(W) !== null);
277
- }), r.delegated("click", t, (e) => r.get(Pe)(e)), r.append(e, t);
278
- };
279
- r.if(_, (e) => {
280
- r.get(K) || e(v);
281
- });
282
- var y = r.sibling(_, 2), b = r.child(y), x = r.child(b);
283
- r.snippet(x, () => F.icon, () => "reset"), r.reset(b), r.next(), r.reset(y), r.delegated("click", l, () => {
284
- r.get(je)(r.get(t)), r.get(Z)();
285
- }), r.delegated("click", f, () => {
286
- r.get(Me)(), r.get(Z)();
287
- }), r.delegated("click", y, () => {
288
- r.get(Ne)(), r.get(Z)();
289
- }), r.append(e, n);
290
- };
291
- r.if(u, (e) => {
292
- r.get(K) && r.get(o) === "filter" && r.get(a) && r.get(G) ? e(d) : r.get(K) && r.get(o) === "columns" ? e(f, 1) : e(p, -1);
293
- }), r.reset(s), r.template_effect(() => r.set_style(s, `left: ${r.get(B).x}px; top: ${r.get(B).y}px; max-height: calc(100vh - ${r.get(B).y}px - 12px);`)), r.append(e, s);
294
- };
295
- r.if(rt, (e) => {
296
- r.get(z) && e(it);
297
- });
298
- var at = r.sibling(rt, 2), ot = (e) => {
299
- var t = k();
300
- le(r.child(t), () => r.get(V)), r.reset(t), r.template_effect(() => r.set_style(t, `left: ${r.get(H).x}px; top: ${r.get(H).y}px; max-height: calc(100vh - ${r.get(H).y}px - 12px);`)), r.append(e, t);
301
- };
302
- r.if(at, (e) => {
303
- r.get(V) && r.get(G) && e(ot);
304
- });
305
- var st = r.sibling(at, 2), ct = (e) => {
306
- let t = r.derived(() => r.get(fe).getAllColumns());
307
- var n = j(), i = r.sibling(r.child(n), 2);
308
- r.each(i, 21, () => r.get(t), (e) => e.id, (e, t) => {
309
- var n = A(), i = r.child(n);
310
- r.remove_input_defaults(i);
311
- var a = r.sibling(i, 2), o = r.child(a, !0);
312
- r.reset(a), r.reset(n), r.template_effect(() => {
313
- r.set_checked(i, !I().hiddenColumns[r.get(t).id]), r.set_text(o, typeof r.get(t).columnDef.header == "string" ? r.get(t).columnDef.header : r.get(t).id);
314
- }), r.delegated("change", i, (e) => {
315
- if (e.currentTarget.checked) {
316
- let e = { ...I().hiddenColumns };
317
- delete e[r.get(t).id], I().hiddenColumns = e;
318
- } else I().hiddenColumns = {
319
- ...I().hiddenColumns,
320
- [r.get(t).id]: !0
321
- };
322
- }), r.append(e, n);
323
- }), r.reset(i), r.reset(n), r.template_effect(() => r.set_style(n, `left: ${r.get(W).x}px; top: ${r.get(W).y}px;`)), r.append(e, n);
324
- };
325
- r.if(st, (e) => {
326
- r.get(W) && e(ct);
327
- });
328
- var lt = r.sibling(st, 2), ut = (e) => {
329
- let t = r.derived(() => r.get(U)), n = r.derived(() => r.get(q).find((e) => e.id === r.get(t))), i = r.derived(() => r.get(Ce)(r.get(n))), a = r.derived(() => r.get(L)[r.get(t)]?.operator ?? r.get(J)(r.get(n)));
330
- var o = N();
331
- r.each(o, 21, () => r.get(i), (e) => e.value, (e, i) => {
332
- var o = M(), s = r.child(o), c = r.child(s);
333
- r.snippet(c, () => F.icon, () => r.get(i).iconName), r.reset(s);
334
- var l = r.sibling(s);
335
- r.reset(o), r.template_effect((e) => {
336
- r.set_attribute(o, "aria-checked", r.get(a) === r.get(i).value), r.set_text(l, ` ${e ?? ""}`);
337
- }, [() => r.get(Y)(r.get(i), r.get(n))]), r.delegated("click", o, () => {
338
- r.get(be)(r.get(t), r.get(i).value), r.get(Z)();
339
- }), r.append(e, o);
340
- }), r.reset(o), r.template_effect(() => r.set_style(o, `left: ${r.get(de).x}px; top: ${r.get(de).y}px;`)), r.append(e, o);
341
- };
342
- r.if(lt, (e) => {
343
- r.get(U) && e(ut);
344
- });
345
- var dt = r.sibling(lt, 2), ft = (t) => {
346
- let n = r.derived(() => r.get(Te)), i = r.derived(() => new Set(e(r.get(we)[r.get(n)] ?? "")));
347
- var a = P();
348
- r.each(a, 20, () => r.get(De), (e) => e, (e, t) => {
349
- let a = r.derived(() => r.get(i).has(t));
350
- var o = te(), s = r.child(o), c = r.child(s, !0);
351
- r.reset(s);
352
- var l = r.sibling(s, 2), u = r.child(l, !0);
353
- r.reset(l), r.reset(o), r.template_effect(() => {
354
- r.set_attribute(o, "aria-selected", r.get(a)), r.set_text(c, r.get(a) ? "✓" : ""), r.set_text(u, t === "" ? "(Blanks)" : t);
355
- }), r.delegated("mousedown", o, (e) => {
356
- e.preventDefault(), r.get(Oe)(r.get(n), t);
357
- }), r.append(e, o);
358
- }, (e) => {
359
- var t = ne();
360
- r.append(e, t);
361
- }), r.reset(a), r.template_effect(() => r.set_style(a, `left: ${r.get(Ee).x}px; top: ${r.get(Ee).y}px;`)), r.append(t, a);
362
- };
363
- r.if(dt, (e) => {
364
- r.get(Te) && e(ft);
365
- });
366
- var pt = r.sibling(dt, 2), mt = (e) => {
367
- var t = ae(), n = r.first_child(t), i = r.sibling(n, 2);
368
- r.each(i, 21, () => r.get(qe)(), (e) => e.key, (e, t) => {
369
- var n = r.comment(), i = r.first_child(n), a = (e) => {
370
- var t = re();
371
- r.append(e, t);
372
- }, o = (e) => {
373
- var n = ie(), i = r.child(n, !0);
374
- r.reset(n), r.template_effect(() => {
375
- n.disabled = r.get(t).disabled, r.set_text(i, r.get(t).label);
376
- }), r.delegated("click", n, () => {
377
- r.get(t).run?.(), r.get($)();
378
- }), r.append(e, n);
379
- };
380
- r.if(i, (e) => {
381
- r.get(t).separator ? e(a) : e(o, -1);
382
- }), r.append(e, n);
383
- }), r.reset(i), r.template_effect(() => r.set_style(i, `left: ${r.get(Ke).x}px; top: ${r.get(Ke).y}px;`)), r.delegated("contextmenu", n, (e) => {
384
- e.preventDefault(), r.get($)();
385
- }), r.delegated("click", n, function(...e) {
386
- r.get($)?.apply(this, e);
387
- }), r.append(e, t);
388
- };
389
- r.if(pt, (e) => {
390
- r.get(Ge) && e(mt);
391
- });
392
- var ht = r.sibling(pt, 2), gt = (e) => {
393
- var t = oe(), n = r.first_child(t), i = r.sibling(n, 2), a = r.child(i);
394
- r.remove_textarea_child(a), r.autofocus(a, !0);
395
- var o = r.sibling(a, 2), s = r.child(o), c = r.sibling(s, 4), l = r.sibling(c, 2);
396
- r.reset(o), r.reset(i), r.template_effect(() => r.set_style(i, `left: ${r.get(Je).x}px; top: ${r.get(Je).y}px;`)), r.delegated("click", n, function(...e) {
397
- r.get(Ze)?.apply(this, e);
398
- }), r.delegated("keydown", a, (e) => {
399
- e.stopPropagation(), e.key === "Escape" && (e.preventDefault(), r.get(Ze)()), e.key === "Enter" && (e.ctrlKey || e.metaKey) && (e.preventDefault(), r.get(Ye)());
400
- }), r.bind_value(a, () => I().commentDraft, (e) => I().commentDraft = e), r.delegated("click", s, function(...e) {
401
- r.get(Xe)?.apply(this, e);
402
- }), r.delegated("click", c, function(...e) {
403
- r.get(Ze)?.apply(this, e);
404
- }), r.delegated("click", l, function(...e) {
405
- r.get(Ye)?.apply(this, e);
406
- }), r.append(e, t);
407
- };
408
- r.if(ht, (e) => {
409
- r.get(Je) && e(gt);
410
- }), r.append(ce, Qe), r.pop();
411
- }
412
- r.delegate([
413
- "change",
414
- "input",
415
- "click",
416
- "mousedown",
417
- "contextmenu",
418
- "keydown"
419
- ]);
420
- //#endregion
421
- export { ce as default };