impact-nova 2.1.0-alpha.4 → 2.1.0-alpha.6

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 (153) hide show
  1. package/dist/components/data/ag-grid-react/ag-grid-tooltip-overflow.d.ts +3 -0
  2. package/dist/components/data/ag-grid-react/ag-grid-tooltip-overflow.js +6 -0
  3. package/dist/components/data/ag-grid-react/ag-grid.types.d.ts +15 -21
  4. package/dist/components/data/ag-grid-react/cell-renderers/date-display-renderer.js +1 -1
  5. package/dist/components/data/ag-grid-react/cell-renderers/default-text-cell-renderer.d.ts +1 -2
  6. package/dist/components/data/ag-grid-react/cell-renderers/default-text-cell-renderer.js +12 -6
  7. package/dist/components/data/ag-grid-react/cell-renderers/editors/textarea-cell-editor.js +19 -19
  8. package/dist/components/data/ag-grid-react/cell-renderers/select-display-renderer.js +1 -1
  9. package/dist/components/data/ag-grid-react/cell-renderers/switch-display-renderer.js +15 -15
  10. package/dist/components/data/ag-grid-react/headers/advanced-filter/advanced-filter-dialog.js +1 -1
  11. package/dist/components/data/ag-grid-react/headers/advanced-filter/column-filter-section.js +33 -33
  12. package/dist/components/data/ag-grid-react/headers/components/header-info.js +66 -62
  13. package/dist/components/data/ag-grid-react/headers/components/info-modal.js +6 -6
  14. package/dist/components/data/ag-grid-react/headers/components/section-renderers.js +18 -18
  15. package/dist/components/data/ag-grid-react/headers/custom-header-group.js +40 -29
  16. package/dist/components/data/ag-grid-react/headers/custom-header.js +102 -98
  17. package/dist/components/data/ag-grid-react/index.d.ts +1 -1
  18. package/dist/components/data/ag-grid-react/index.js +136 -127
  19. package/dist/components/data/ag-grid-react/notify-column-indicator-sync.d.ts +7 -0
  20. package/dist/components/data/ag-grid-react/notify-column-indicator-sync.js +6 -0
  21. package/dist/components/data/ag-grid-react/theme.js +8 -4
  22. package/dist/components/data/ag-grid-react/use-ag-grid-truncation-tooltip.d.ts +5 -0
  23. package/dist/components/data/ag-grid-react/use-ag-grid-truncation-tooltip.js +13 -0
  24. package/dist/components/data/ag-grid-react/useGridAutoSizeStrategyOnResize.js +8 -5
  25. package/dist/components/data/data-table/build-column-tree-from-grid.d.ts +14 -0
  26. package/dist/components/data/data-table/build-column-tree-from-grid.js +95 -0
  27. package/dist/components/data/data-table/data-table-column-apply.d.ts +29 -0
  28. package/dist/components/data/data-table/data-table-column-apply.js +102 -0
  29. package/dist/components/data/data-table/data-table-column-def-pin.d.ts +25 -0
  30. package/dist/components/data/data-table/data-table-column-def-pin.js +66 -0
  31. package/dist/components/data/data-table/data-table-column-list-sync.d.ts +8 -0
  32. package/dist/components/data/data-table/data-table-column-list-sync.js +15 -0
  33. package/dist/components/data/data-table/data-table-column-list.d.ts +14 -4
  34. package/dist/components/data/data-table/data-table-column-list.js +74 -277
  35. package/dist/components/data/data-table/data-table-constants.d.ts +3 -4
  36. package/dist/components/data/data-table/data-table-context.d.ts +3 -6
  37. package/dist/components/data/data-table/data-table-context.js +21 -10
  38. package/dist/components/data/data-table/data-table-saved-views.js +26 -26
  39. package/dist/components/data/data-table/data-table-sheet-portal-store.d.ts +13 -0
  40. package/dist/components/data/data-table/data-table-sheet-portal-store.js +36 -0
  41. package/dist/components/data/data-table/data-table-sheet.d.ts +3 -6
  42. package/dist/components/data/data-table/data-table-sheet.js +4 -2
  43. package/dist/components/data/data-table/data-table-view-menu.js +40 -40
  44. package/dist/components/data/data-table/data-table.d.ts +8 -10
  45. package/dist/components/data/data-table/data-table.js +138 -111
  46. package/dist/components/data/data-table/data-table.types.d.ts +35 -0
  47. package/dist/components/data/data-table/index.js +28 -27
  48. package/dist/components/data/data-table/indicator-legend.js +6 -6
  49. package/dist/components/data/data-table/use-data-table-column-list-sync.d.ts +16 -0
  50. package/dist/components/data/data-table/use-data-table-column-list-sync.js +222 -0
  51. package/dist/components/data/expandable-list-item/expandable-list-item-attributes.d.ts +8 -0
  52. package/dist/components/data/expandable-list-item/expandable-list-item-attributes.js +72 -0
  53. package/dist/components/data/expandable-list-item/expandable-list-item-context.d.ts +13 -0
  54. package/dist/components/data/expandable-list-item/expandable-list-item-context.js +25 -0
  55. package/dist/components/data/expandable-list-item/expandable-list-item-metrics.d.ts +6 -0
  56. package/dist/components/data/expandable-list-item/expandable-list-item-metrics.js +41 -0
  57. package/dist/components/data/expandable-list-item/expandable-list-item-parts.d.ts +31 -0
  58. package/dist/components/data/expandable-list-item/expandable-list-item-parts.js +233 -0
  59. package/dist/components/data/expandable-list-item/expandable-list-item-preset.d.ts +18 -0
  60. package/dist/components/data/expandable-list-item/expandable-list-item-preset.js +133 -0
  61. package/dist/components/data/expandable-list-item/expandable-list-item.d.ts +5 -0
  62. package/dist/components/data/{expandable-sku/expandable-sku.types.d.ts → expandable-list-item/expandable-list-item.types.d.ts} +7 -7
  63. package/dist/components/data/expandable-list-item/index.d.ts +5 -0
  64. package/dist/components/data/expandable-list-item/index.js +19 -0
  65. package/dist/components/data/nested-list/components/NestedListHeader.js +11 -11
  66. package/dist/components/data/nested-list/components/SortableItem.js +2 -2
  67. package/dist/components/data-display/avatar/avatar.types.d.ts +2 -0
  68. package/dist/components/data-display/badge/badge.types.d.ts +2 -0
  69. package/dist/components/data-display/calendar/calendar-day-picker-classnames.js +11 -11
  70. package/dist/components/data-display/calendar/calendar-month-picker-panel.js +7 -7
  71. package/dist/components/data-display/calendar/calendar-week-number-cell.js +31 -31
  72. package/dist/components/data-display/card/card.js +8 -8
  73. package/dist/components/data-display/chart/chart.types.d.ts +9 -0
  74. package/dist/components/data-display/skeleton/skeleton.js +6 -6
  75. package/dist/components/data-display/statistics-card/statistics-card.js +14 -14
  76. package/dist/components/feedback/alert-dialog/alert-dialog.js +19 -19
  77. package/dist/components/feedback/dialog/dialog.js +1 -1
  78. package/dist/components/feedback/drawer/drawer.js +18 -18
  79. package/dist/components/feedback/dropdown-menu/dropdown-menu.js +70 -57
  80. package/dist/components/feedback/popover/popover.js +1 -1
  81. package/dist/components/feedback/sheet/sheet.js +1 -1
  82. package/dist/components/feedback/tooltip/tooltip.js +22 -22
  83. package/dist/components/feedback/tooltip/tooltip.variants.js +1 -1
  84. package/dist/components/flows/command-palette/command-palette.js +104 -104
  85. package/dist/components/flows/command-palette/shortcut-settings.js +34 -34
  86. package/dist/components/flows/filter-strip/filter-tag-list.js +4 -4
  87. package/dist/components/flows/notification-panel/notification-list.js +17 -17
  88. package/dist/components/flows/notification-panel/notification-panel.js +4 -4
  89. package/dist/components/flows/notification-panel/notification-panel.types.d.ts +3 -0
  90. package/dist/components/flows/wizard/wizard.js +8 -8
  91. package/dist/components/forms/combobox/combobox.js +20 -20
  92. package/dist/components/forms/date-picker/date-picker.js +17 -17
  93. package/dist/components/forms/date-picker/date-range-picker.js +3 -3
  94. package/dist/components/forms/date-picker/month-picker.js +1 -1
  95. package/dist/components/forms/date-picker/month-range-picker.js +42 -42
  96. package/dist/components/forms/date-picker/week-picker.js +15 -15
  97. package/dist/components/forms/date-picker/week-range-picker.js +3 -3
  98. package/dist/components/forms/file-upload/file-upload.js +33 -33
  99. package/dist/components/forms/input/input.js +8 -8
  100. package/dist/components/forms/input/input.variants.js +3 -3
  101. package/dist/components/forms/select/components/SelectMenuPanel.d.ts +1 -2
  102. package/dist/components/forms/select/components/SelectMenuPanel.js +18 -20
  103. package/dist/components/forms/select/components/SelectTrigger.d.ts +9 -6
  104. package/dist/components/forms/select/components/SelectTrigger.js +120 -122
  105. package/dist/components/forms/select/components/Submenu.js +8 -8
  106. package/dist/components/forms/select/hooks/useSelectKeyboardHandlers.d.ts +1 -1
  107. package/dist/components/forms/select/hooks/useSelectValueState.d.ts +19 -0
  108. package/dist/components/forms/select/hooks/useSelectValueState.js +41 -0
  109. package/dist/components/forms/select/index.js +4 -3
  110. package/dist/components/forms/select/select.js +180 -175
  111. package/dist/components/forms/select/select.types.d.ts +3 -2
  112. package/dist/components/forms/select/select.variants.js +4 -4
  113. package/dist/components/forms/select/utils/select.d.ts +2 -1
  114. package/dist/components/forms/select/utils/select.js +47 -37
  115. package/dist/components/layout/sidebar/sidebar.d.ts +7 -50
  116. package/dist/components/layout/sidebar/sidebar.js +12 -11
  117. package/dist/components/layout/sidebar/sidebar.types.d.ts +35 -1
  118. package/dist/components/primitives/button-group/button-group.js +32 -32
  119. package/dist/components/primitives/chips/chips.variants.js +5 -5
  120. package/dist/components/primitives/empty-container/empty-container.types.d.ts +3 -0
  121. package/dist/components/primitives/kbd/kbd.variants.js +3 -3
  122. package/dist/components/primitives/stepper/stepper.js +6 -6
  123. package/dist/impact-nova-components.css +113 -7
  124. package/dist/impact-nova-tokens.scss +2 -4
  125. package/dist/impact-nova.css +1 -1
  126. package/dist/index.d.ts +1 -1
  127. package/dist/index.js +467 -433
  128. package/dist/lib/compose-refs.d.ts +8 -0
  129. package/dist/lib/compose-refs.js +14 -0
  130. package/dist/lib/primitives/field.types.d.ts +8 -2
  131. package/dist/lib/virtualized/index.d.ts +3 -0
  132. package/dist/lib/virtualized/index.js +33 -16
  133. package/dist/lib/virtualized/useVirtualizedList.d.ts +2 -0
  134. package/dist/lib/virtualized/useVirtualizedList.js +115 -109
  135. package/dist/lib/virtualized/virtualized-list-context.d.ts +12 -0
  136. package/dist/lib/virtualized/virtualized-list-context.js +21 -0
  137. package/dist/lib/virtualized/virtualized-list-parts.d.ts +51 -0
  138. package/dist/lib/virtualized/virtualized-list-parts.js +175 -0
  139. package/dist/lib/virtualized/virtualized-list-utils.d.ts +5 -0
  140. package/dist/lib/virtualized/virtualized-list-utils.js +6 -0
  141. package/dist/llms/rules/ag-grid.js +1 -1
  142. package/dist/llms/rules/installation.js +1 -1
  143. package/dist/llms/rules/migration.js +1 -1
  144. package/dist/llms/rules/real-world-patterns.js +1 -1
  145. package/dist/llms/rules/requirements.js +1 -1
  146. package/package.json +24 -15
  147. package/tailwind.config.js +1 -0
  148. package/dist/components/data/ag-grid-react/headers/components/truncated-text.d.ts +0 -15
  149. package/dist/components/data/ag-grid-react/headers/components/truncated-text.js +0 -27
  150. package/dist/components/data/expandable-sku/expandable-sku.d.ts +0 -38
  151. package/dist/components/data/expandable-sku/expandable-sku.js +0 -245
  152. package/dist/components/data/expandable-sku/index.d.ts +0 -2
  153. package/dist/components/data/expandable-sku/index.js +0 -4
@@ -1,288 +1,85 @@
1
- import { jsxs as ce, jsx as S } from "react/jsx-runtime";
2
- import { useState as W, useRef as F, useCallback as m, useEffect as J } from "react";
3
- import { useDataTable as se } from "./data-table-context.js";
4
- import { NestedList as ae } from "../nested-list/nested-list.js";
5
- import { SelectionMode as ue } from "../nested-list/nested-list.types.js";
6
- import { useImpactNovaI18n as de } from "../../../i18n/use-impact-nova-i18n.js";
7
- import { mergePartialOrderedColumnState as fe } from "./data-table-column-state.js";
8
- import { subscribeGridApiEvents as pe, subscribeGridApiEvent as he } from "../ag-grid-react/grid-api-event-subscription.js";
9
- import { PinSwitch as me } from "./pin-switch.js";
10
- import { ColumnIndicator as Q } from "./column-indicator.js";
11
- import { IndicatorLegend as ge } from "./indicator-legend.js";
12
- function Ce(k) {
13
- const P = [];
14
- let g = k.getOriginalParent();
15
- for (; g; ) {
16
- const w = g.getColGroupDef();
17
- w?.headerName && w?.children && P.push(g), g = g.getOriginalParent();
18
- }
19
- return P.reverse(), P;
20
- }
21
- const be = 300, K = 100, xe = ({
22
- enableApplyDiscard: k = !1,
23
- showSearch: P = !0,
24
- showSelectAll: g = !0,
25
- showCollapse: w = !0
1
+ import { jsxs as A, jsx as n } from "react/jsx-runtime";
2
+ import { useRef as T, useState as z, useCallback as o } from "react";
3
+ import { useDataTable as D } from "./data-table-context.js";
4
+ import { NestedList as F } from "../nested-list/nested-list.js";
5
+ import { SelectionMode as P } from "../nested-list/nested-list.types.js";
6
+ import { useImpactNovaI18n as R } from "../../../i18n/use-impact-nova-i18n.js";
7
+ import { PinSwitch as k } from "./pin-switch.js";
8
+ import { ColumnIndicator as c } from "./column-indicator.js";
9
+ import { IndicatorLegend as j } from "./indicator-legend.js";
10
+ import { useDataTableColumnListSync as E } from "./use-data-table-column-list-sync.js";
11
+ const Q = ({
12
+ enableApplyDiscard: a = !1,
13
+ showSearch: u = !0,
14
+ showSelectAll: d = !0,
15
+ showCollapse: m = !0
26
16
  }) => {
27
- const { gridApi: l } = se(), { t: G } = de(), [X, $] = W([]), [Z, ee] = W(!1), N = F(!1), U = F(null), M = F(0), V = F({}), [B, te] = W(!1), x = m(() => {
28
- if (!l || N.current) return;
29
- const n = l.getColumnState(), i = l.getColumns() || [], t = new Map(i.map((r) => [r.getColId(), r])), s = [], c = [], e = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
30
- f.set(s, "f"), f.set(c, "s");
31
- let p = 0;
32
- const T = (r) => {
33
- let o = f.get(r);
34
- return o === void 0 && (o = `n${p++}`, f.set(r, o)), o;
35
- }, h = (r, o) => {
36
- const a = r.getGroupId(), b = T(o), v = `${a}::${b}`, A = e.get(v);
37
- if (A && A.list === o && o[o.length - 1] === A.node)
38
- return A.node;
39
- const _ = y.get(v) || 0;
40
- y.set(v, _ + 1);
41
- const R = r.getColGroupDef(), D = {
42
- id: _ === 0 ? `${a}__${b}` : `${a}__${b}__${_}`,
43
- label: R?.headerName || a,
44
- checked: !0,
45
- children: [],
46
- category: "group"
47
- };
48
- return o.push(D), e.set(v, { list: o, node: D }), D;
49
- };
50
- let L = 0, u = 0, O = 0, C = 0;
51
- n.forEach((r) => {
52
- const o = t.get(r.colId);
53
- if (!o) return;
54
- let a = l.getDisplayNameForColumn(o, "header");
55
- if (a === "") return;
56
- if (a == null) {
57
- const I = o.getColDef();
58
- if (I.headerName === "") return;
59
- a = I.headerName || I.field || r.colId;
60
- }
61
- if (!a || a.trim() === "")
62
- return;
63
- const b = !r.hide, v = !!r.sort, A = o.isFilterActive(), _ = r.pinned === "left" ? "left" : r.pinned === "right" ? "right" : null, R = {
64
- id: r.colId,
65
- label: a,
66
- checked: b,
67
- data: {
68
- hasSortApplied: v,
69
- hasFilterApplied: A,
70
- pinned: _
71
- }
72
- };
73
- r.pinned ? (L++, b && u++) : (O++, b && C++);
74
- const j = r.pinned ? s : c, D = Ce(o);
75
- if (D.length > 0) {
76
- let I = j, q = null;
77
- for (const ie of D)
78
- q = h(ie, I), I = q.children;
79
- q.children.push(R);
80
- } else
81
- j.push(R);
82
- });
83
- const d = (r) => {
84
- let o = r.length > 0;
85
- for (const a of r)
86
- a.children && (a.checked = d(a.children)), a.checked || (o = !1);
87
- return o;
88
- };
89
- d(s), d(c);
90
- const E = [
91
- {
92
- id: "root-frozen",
93
- label: G("dataTable.frozenColumns"),
94
- checked: L > 0 && u === L,
95
- children: s,
96
- category: "structure",
97
- isDragDisabled: !0
98
- },
99
- {
100
- id: "root-scrollable",
101
- label: G("dataTable.scrollableColumns"),
102
- checked: O > 0 && C === O,
103
- children: c,
104
- category: "structure",
105
- isDragDisabled: !0
106
- }
107
- ];
108
- $(E), ee(!0);
109
- }, [l, G]);
110
- J(() => {
111
- if (!l) return;
112
- const n = setTimeout(() => x(), 0), i = [
113
- "columnVisible",
114
- "columnPinned",
115
- "columnMoved",
116
- "newColumnsLoaded",
117
- "gridReady",
118
- "columnGroupOpened",
119
- "columnRowGroupChanged",
120
- "columnPivotModeChanged",
121
- "columnEverythingChanged",
122
- "dragStopped",
123
- "columnValueChanged",
124
- "displayedColumnsChanged",
125
- "sortChanged",
126
- "filterChanged"
127
- ];
128
- let t = null;
129
- const s = () => {
130
- t && clearTimeout(t), t = setTimeout(() => {
131
- if (t = null, N.current) return;
132
- const c = U.current?.querySelector('[data-component="nested-list"] .overflow-y-auto');
133
- c && (M.current = c.scrollTop), x(), te((e) => !e);
134
- }, 150);
135
- };
136
- if (!l.isDestroyed()) {
137
- const c = pe(l, i, s);
138
- return () => {
139
- clearTimeout(n), t && clearTimeout(t), c();
140
- };
141
- }
142
- return () => {
143
- clearTimeout(n), t && clearTimeout(t);
144
- };
145
- }, [l, x]), J(() => {
146
- if (M.current === 0) return;
147
- const n = requestAnimationFrame(() => {
148
- const i = U.current?.querySelector('[data-component="nested-list"] .overflow-y-auto');
149
- i && (i.scrollTop = M.current, M.current = 0);
150
- });
151
- return () => cancelAnimationFrame(n);
152
- }, [B]);
153
- const Y = m((n) => {
154
- const i = [], t = (s, c) => {
155
- s.forEach((e) => {
156
- if (e.id === "root-frozen") {
157
- e.children && t(e.children, "left");
158
- return;
159
- }
160
- if (e.id === "root-scrollable") {
161
- e.children && t(e.children, null);
162
- return;
163
- }
164
- if (e.category === "group" || e.children && e.children.length > 0)
165
- e.children && t(e.children, c);
166
- else if (l?.getColumn(e.id)) {
167
- let p;
168
- if (c === null)
169
- p = null;
170
- else {
171
- const h = e.data?.pinned;
172
- p = h === "left" || h === "right" ? h : c;
173
- }
174
- i.push({
175
- colId: e.id,
176
- pinned: p,
177
- hide: !e.checked
178
- });
179
- }
180
- });
181
- };
182
- return t(n, null), i;
183
- }, [l]), z = m((n) => {
184
- if (!l) return;
185
- N.current = !0;
186
- const i = Y(n);
187
- if (i.length === 0) {
188
- setTimeout(() => {
189
- N.current = !1;
190
- }, K);
191
- return;
192
- }
193
- const t = l.getColumnState(), s = fe(t, i), c = new Set(t.filter((u) => u.pinned).map((u) => u.colId)), e = s.filter((u) => u.pinned && !c.has(u.colId)), y = new Set(e.map((u) => u.colId));
194
- l.applyColumnState({ state: s, applyOrder: !0 });
195
- const f = () => {
196
- N.current = !1, x();
197
- };
198
- if (y.size === 0) {
199
- setTimeout(f, K);
200
- return;
201
- }
202
- let p = !1, T = null, h = null;
203
- h = he(l, "columnPinned", () => {
204
- if (p || l.isDestroyed()) return;
205
- const u = l.getColumnState();
206
- if (e.filter((C) => {
207
- const d = u.find((E) => E.colId === C.colId);
208
- return d && !d.pinned;
209
- }).length > 0) {
210
- p = !0, T && clearTimeout(T), h?.();
211
- const C = s.filter((d) => d.pinned && !y.has(d.colId));
212
- if (C.length > 0) {
213
- const d = C[0], E = s.map(
214
- (r) => r.colId === d.colId ? { ...r, pinned: null } : r
215
- );
216
- l.applyColumnState({ state: E, applyOrder: !0 });
217
- }
218
- setTimeout(f, K);
219
- }
220
- }), T = setTimeout(() => {
221
- h?.(), p || f();
222
- }, be);
223
- }, [l, Y, x]), ne = m((n) => {
224
- z(n);
225
- }, [z]), re = m((n) => {
226
- k || z(n), $(n);
227
- }, [k, z]), H = m((n, i) => {
228
- $((t) => {
229
- const s = (c) => c.map((e) => e.id === n ? {
230
- ...e,
231
- data: {
232
- ...e.data,
233
- pinned: i
17
+ const { gridApi: p } = D(), { t } = R(), f = T({}), [h, C] = z({}), {
18
+ items: b,
19
+ isReady: g,
20
+ externalSyncKey: S,
21
+ listWrapperRef: x,
22
+ handleChange: s,
23
+ handleSubmit: I,
24
+ handlePinChange: i
25
+ } = E({
26
+ gridApi: p,
27
+ frozenColumnsLabel: t("dataTable.frozenColumns"),
28
+ scrollableColumnsLabel: t("dataTable.scrollableColumns")
29
+ }), L = o(
30
+ (e) => {
31
+ s(e, a);
32
+ },
33
+ [a, s]
34
+ ), N = o(
35
+ (e, r) => {
36
+ if (!r.isLeaf) return null;
37
+ const l = e.data;
38
+ return !l?.hasSortApplied && !l?.hasFilterApplied ? null : /* @__PURE__ */ A("span", { className: "inline-flex items-center gap-1 ml-1.5 shrink-0", children: [
39
+ l?.hasSortApplied && /* @__PURE__ */ n(c, { type: "sort" }),
40
+ l?.hasFilterApplied && /* @__PURE__ */ n(c, { type: "filter" })
41
+ ] });
42
+ },
43
+ []
44
+ ), v = o(
45
+ (e, r) => {
46
+ const l = e.data;
47
+ return e.category === "structure" ? e.id !== "root-frozen" ? null : /* @__PURE__ */ n(j, {}) : !r.isLeaf || !(l?.pinned === "left" || l?.pinned === "right") ? null : /* @__PURE__ */ n(
48
+ k,
49
+ {
50
+ value: l?.pinned ?? null,
51
+ onChange: (y) => i(e.id, y),
52
+ className: "shrink-0"
234
53
  }
235
- } : e.children ? {
236
- ...e,
237
- children: s(e.children)
238
- } : e);
239
- return s(t);
240
- }), l && l.applyColumnState({
241
- state: [{ colId: n, pinned: i }]
242
- });
243
- }, [l]), le = m((n, i) => {
244
- if (!i.isLeaf) return null;
245
- const t = n.data;
246
- return !t?.hasSortApplied && !t?.hasFilterApplied ? null : /* @__PURE__ */ ce("span", { className: "inline-flex items-center gap-1 ml-1.5 shrink-0", children: [
247
- t?.hasSortApplied && /* @__PURE__ */ S(Q, { type: "sort" }),
248
- t?.hasFilterApplied && /* @__PURE__ */ S(Q, { type: "filter" })
249
- ] });
250
- }, []), oe = m((n, i) => {
251
- const t = n.data;
252
- return n.category === "structure" ? n.id !== "root-frozen" ? null : /* @__PURE__ */ S(ge, {}) : !i.isLeaf || !(t?.pinned === "left" || t?.pinned === "right") ? null : /* @__PURE__ */ S(
253
- me,
254
- {
255
- value: t?.pinned ?? null,
256
- onChange: (c) => H(n.id, c),
257
- className: "shrink-0"
258
- }
259
- );
260
- }, [H]);
261
- return Z ? /* @__PURE__ */ S("div", { ref: U, className: "flex flex-col h-full bg-canvas-elevated", children: /* @__PURE__ */ S(
262
- ae,
54
+ );
55
+ },
56
+ [i]
57
+ );
58
+ return g ? /* @__PURE__ */ n("div", { ref: x, className: "flex flex-col h-full bg-canvas-elevated", children: /* @__PURE__ */ n(
59
+ F,
263
60
  {
264
- items: X,
265
- onChange: re,
266
- onSubmit: ne,
267
- renderLabelExtras: le,
268
- renderActions: oe,
269
- enableApplyDiscard: k,
270
- enableSearch: P,
271
- enableSelectAll: g,
61
+ items: b,
62
+ onChange: L,
63
+ onSubmit: I,
64
+ renderLabelExtras: N,
65
+ renderActions: v,
66
+ enableApplyDiscard: a,
67
+ enableSearch: u,
68
+ enableSelectAll: d,
272
69
  enableDragDrop: !0,
273
70
  enableCollapse: !0,
274
- enableGlobalCollapse: w,
275
- selectionMode: ue.CASCADE_DOWN,
276
- searchPlaceholder: G("dataTable.searchColumnsPlaceholder"),
71
+ enableGlobalCollapse: m,
72
+ selectionMode: P.CASCADE_DOWN,
73
+ searchPlaceholder: t("dataTable.searchColumnsPlaceholder"),
277
74
  className: "h-full",
278
- initialCollapsedItems: V.current,
279
- onCollapseChange: (n) => {
280
- V.current = n;
75
+ initialCollapsedItems: h,
76
+ onCollapseChange: (e) => {
77
+ f.current = e, C(e);
281
78
  }
282
79
  },
283
- B ? "sync-a" : "sync-b"
284
- ) }) : /* @__PURE__ */ S("div", { className: "p-4 text-[13px] text-content-placeholder", children: G("dataTable.loadingColumns") });
80
+ S ? "sync-a" : "sync-b"
81
+ ) }) : /* @__PURE__ */ n("div", { className: "p-4 text-[13px] text-content-placeholder", children: t("dataTable.loadingColumns") });
285
82
  };
286
83
  export {
287
- xe as DataTableColumnList
84
+ Q as DataTableColumnList
288
85
  };
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Minimum height (px) for the **scoped sheet portal host** (`sheetTarget`), not the grid
3
- * flex child. Applied only while a sheet is open so the overlay can extend to this height
4
- * without resizing the grid’s own layout box (avoids unnecessary layout-driven grid
5
- * refreshes on sheet open/close).
2
+ * Minimum height (px) for the scoped settings sheet host while open.
3
+ * Applied on `DataTableContent`'s layout frame (not the absolute portal layer)
4
+ * so short grids grow enough for a usable column list without re-rendering AG Grid.
6
5
  */
7
6
  export declare const DATA_TABLE_SCOPED_SHEET_HOST_MIN_HEIGHT_PX = 400;
8
7
  /** DOM class toggled imperatively for viewport-fill table shell (styles in `src/index.scss`). */
@@ -1,4 +1,5 @@
1
1
  import { GridApi } from 'ag-grid-community';
2
+ import { DataTableSheetPortalStore } from './data-table-sheet-portal-store';
2
3
  export type DataTableFontSize = "small" | "medium" | "large";
3
4
  export type DataTableNumericFormat = "full" | "k" | "m" | "b" | "full_precision";
4
5
  export type DataTableRowHeight = "default" | "compact" | "comfort";
@@ -15,16 +16,12 @@ export interface DataTableContextValue {
15
16
  setRowHeight: (height: DataTableRowHeight) => void;
16
17
  }
17
18
  export declare const DataTableContext: import('react').Context<DataTableContextValue | null>;
19
+ export declare const DataTableSheetPortalStoreContext: import('react').Context<DataTableSheetPortalStore | null>;
18
20
  export declare const useDataTable: () => DataTableContextValue;
19
- /**
20
- * Separate context for sheet-portal state that changes on every sheet open/close.
21
- * Isolated from `DataTableContext` so that `scopedSheetOpen` toggling does NOT
22
- * force grid consumers (`DataTableContent`, `AgGridWrapper`) to re-render.
23
- */
21
+ export declare const useDataTableSheetPortalStore: () => DataTableSheetPortalStore;
24
22
  export interface DataTableSheetPortalContextValue {
25
23
  sheetTarget: HTMLDivElement | null;
26
24
  setSheetTarget: (node: HTMLDivElement | null) => void;
27
25
  scopedSheetOpen: boolean;
28
26
  }
29
- export declare const DataTableSheetPortalContext: import('react').Context<DataTableSheetPortalContextValue | null>;
30
27
  export declare const useDataTableSheetPortal: () => DataTableSheetPortalContextValue;
@@ -1,20 +1,31 @@
1
1
  import { createContext as e, useContext as a } from "react";
2
- const o = e(
2
+ import { useDataTableSheetPortalSnapshot as s } from "./data-table-sheet-portal-store.js";
3
+ const n = e(
3
4
  null
4
- ), l = () => {
5
- const t = a(o);
5
+ ), l = e(null), b = () => {
6
+ const t = a(n);
6
7
  if (!t)
7
8
  throw new Error("useDataTable must be used within a DataTable");
8
9
  return t;
9
- }, n = e(null), s = () => {
10
- const t = a(n);
10
+ }, u = () => {
11
+ const t = a(l);
11
12
  if (!t)
12
- throw new Error("useDataTableSheetPortal must be used within a DataTable");
13
+ throw new Error(
14
+ "useDataTableSheetPortalStore must be used within a DataTable"
15
+ );
13
16
  return t;
17
+ }, c = () => {
18
+ const t = u(), { sheetTarget: o, scopedSheetOpen: r } = s(t);
19
+ return {
20
+ sheetTarget: o,
21
+ scopedSheetOpen: r,
22
+ setSheetTarget: t.setSheetTarget
23
+ };
14
24
  };
15
25
  export {
16
- o as DataTableContext,
17
- n as DataTableSheetPortalContext,
18
- l as useDataTable,
19
- s as useDataTableSheetPortal
26
+ n as DataTableContext,
27
+ l as DataTableSheetPortalStoreContext,
28
+ b as useDataTable,
29
+ c as useDataTableSheetPortal,
30
+ u as useDataTableSheetPortalStore
20
31
  };
@@ -26,8 +26,8 @@ const Ae = ["default", "active", "system"], Ye = ({
26
26
  isLoadingViews: L = !1,
27
27
  customListContent: _,
28
28
  disableApply: ie = !1,
29
- className: le,
30
- onSaveViewClick: re,
29
+ className: re,
30
+ onSaveViewClick: le,
31
31
  onApply: se,
32
32
  onCancel: oe,
33
33
  onEditView: de,
@@ -55,26 +55,26 @@ const Ae = ["default", "active", "system"], Ye = ({
55
55
  n.useEffect(() => {
56
56
  const e = u && !K.current;
57
57
  if (K.current = u, e) {
58
- const l = o.find((c) => c.isActive);
59
- M(l?.id ?? null), S("All"), z(""), D("");
58
+ const r = o.find((c) => c.isActive);
59
+ M(r?.id ?? null), S("All"), z(""), D("");
60
60
  }
61
61
  }, [u, o]);
62
62
  const g = n.useMemo(() => v === "All" ? o : o.filter((e) => e.viewType === v), [o, v]), f = w.trim().toLowerCase(), T = n.useCallback(
63
- (e, l) => l ? (e.viewName ?? "").trim().toLowerCase().includes(l) : !0,
63
+ (e, r) => r ? (e.viewName ?? "").trim().toLowerCase().includes(r) : !0,
64
64
  []
65
65
  ), A = n.useMemo(() => {
66
66
  let e = g;
67
- return f && (e = e.filter((l) => T(l, f))), e;
67
+ return f && (e = e.filter((r) => T(r, f))), e;
68
68
  }, [g, f, T]), h = n.useMemo(() => {
69
69
  if (g.length === 0) return [];
70
70
  const e = Object.groupBy(g, Me);
71
- return Ae.flatMap((l) => {
72
- const c = e[l]?.[0];
71
+ return Ae.flatMap((r) => {
72
+ const c = e[r]?.[0];
73
73
  return c ? f && !T(c, f) ? [] : [c] : [];
74
74
  });
75
75
  }, [g, f, T]), P = n.useMemo(() => {
76
- const e = new Set(h.map((l) => l.id));
77
- return A.filter((l) => !e.has(l.id));
76
+ const e = new Set(h.map((r) => r.id));
77
+ return A.filter((r) => !e.has(r.id));
78
78
  }, [A, h]), G = N === null ? null : o.find((e) => e.id === N) ?? null, fe = () => {
79
79
  se?.(G, { activeView: d }), p(!1);
80
80
  }, he = () => {
@@ -84,23 +84,23 @@ const Ae = ["default", "active", "system"], Ye = ({
84
84
  };
85
85
  if (!b)
86
86
  return null;
87
- const ve = o.length > 0, H = (e, l, c) => {
88
- const O = N === e.id, s = me === e.id, J = l === "priority" && !!e.isActive, xe = l === "list" && !!e.isActive;
87
+ const ve = o.length > 0, H = (e, r, c) => {
88
+ const O = N === e.id, s = me === e.id, J = r === "priority" && !!e.isActive, xe = r === "list" && !!e.isActive;
89
89
  return /* @__PURE__ */ i(
90
90
  "div",
91
91
  {
92
92
  tabIndex: 0,
93
93
  className: k(
94
94
  "mb-1 flex cursor-pointer items-center justify-between rounded-lg px-3 py-2 text-left text-sm font-medium font-['Manrope'] transition-all duration-300 relative overflow-hidden",
95
- !s && "hover:bg-muted",
95
+ !s && "hover:bg-canvas-muted",
96
96
  !s && J && !O && "bg-primary/10 dark:bg-primary/15",
97
97
  !s && O && "bg-badge-info-muted text-badge-info-foreground",
98
98
  !s && !O && !J && "text-foreground",
99
99
  s && "pointer-events-none"
100
100
  ),
101
101
  onClick: () => !s && M(e.id),
102
- onKeyDown: (r) => {
103
- (r.key === "Enter" || r.key === " ") && (r.preventDefault(), s || M(e.id));
102
+ onKeyDown: (l) => {
103
+ (l.key === "Enter" || l.key === " ") && (l.preventDefault(), s || M(e.id));
104
104
  },
105
105
  children: [
106
106
  s && /* @__PURE__ */ t(
@@ -135,8 +135,8 @@ const Ae = ["default", "active", "system"], Ye = ({
135
135
  size: "iconSm",
136
136
  className: "text-foreground hover:text-content-charcoal",
137
137
  "aria-label": a("dataTable.savedViewsEdit"),
138
- onClick: (r) => {
139
- r.stopPropagation(), r.preventDefault(), p(!1), de?.(e, { activeView: d });
138
+ onClick: (l) => {
139
+ l.stopPropagation(), l.preventDefault(), p(!1), de?.(e, { activeView: d });
140
140
  },
141
141
  children: /* @__PURE__ */ t(Ne, { className: "size-3.5" })
142
142
  }
@@ -149,8 +149,8 @@ const Ae = ["default", "active", "system"], Ye = ({
149
149
  size: "iconSm",
150
150
  className: "text-foreground hover:text-destructive",
151
151
  "aria-label": a("dataTable.savedViewsDelete"),
152
- onClick: (r) => {
153
- r.stopPropagation(), r.preventDefault(), p(!1), $(e);
152
+ onClick: (l) => {
153
+ l.stopPropagation(), l.preventDefault(), p(!1), $(e);
154
154
  },
155
155
  children: /* @__PURE__ */ t(Te, { className: "size-3.5" })
156
156
  }
@@ -164,8 +164,8 @@ const Ae = ["default", "active", "system"], Ye = ({
164
164
  className: "text-yellow-500 hover:text-yellow-600 disabled:opacity-50",
165
165
  "aria-label": a("dataTable.savedViewsDefaultAction"),
166
166
  disabled: s,
167
- onClick: (r) => {
168
- r.stopPropagation(), r.preventDefault(), s || (y(e.id), setTimeout(() => y(null), 1200), U?.(e, { activeView: d }));
167
+ onClick: (l) => {
168
+ l.stopPropagation(), l.preventDefault(), s || (y(e.id), setTimeout(() => y(null), 1200), U?.(e, { activeView: d }));
169
169
  },
170
170
  children: s ? /* @__PURE__ */ t("div", { className: "size-3.5 animate-spin motion-reduce:animate-none rounded-full border-2 border-yellow-500 border-t-transparent" }) : /* @__PURE__ */ t(I, { className: "size-3.5 fill-current text-yellow-500" })
171
171
  }
@@ -178,8 +178,8 @@ const Ae = ["default", "active", "system"], Ye = ({
178
178
  className: "text-yellow-500 hover:text-yellow-600 disabled:opacity-50",
179
179
  "aria-label": a("dataTable.savedViewsSetDefault"),
180
180
  disabled: s,
181
- onClick: (r) => {
182
- r.stopPropagation(), r.preventDefault(), s || (y(e.id), setTimeout(() => y(null), 1200), U?.(e, { activeView: d }));
181
+ onClick: (l) => {
182
+ l.stopPropagation(), l.preventDefault(), s || (y(e.id), setTimeout(() => y(null), 1200), U?.(e, { activeView: d }));
183
183
  },
184
184
  children: s ? /* @__PURE__ */ t("div", { className: "size-3.5 animate-spin motion-reduce:animate-none rounded-full border-2 border-yellow-500 border-t-transparent" }) : /* @__PURE__ */ t(I, { className: "size-3.5 text-yellow-500" })
185
185
  }
@@ -197,7 +197,7 @@ const Ae = ["default", "active", "system"], Ye = ({
197
197
  "data-component": "data-table-saved-views",
198
198
  className: k(
199
199
  "mb-2 mx-4 flex min-w-0 flex-nowrap items-center justify-between gap-2 rounded-lg bg-feedback-success-surface px-2 py-3",
200
- le
200
+ re
201
201
  ),
202
202
  children: [
203
203
  L ? /* @__PURE__ */ i("div", { className: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden", children: [
@@ -302,7 +302,7 @@ const Ae = ["default", "active", "system"], Ye = ({
302
302
  prefix: /* @__PURE__ */ t(
303
303
  ye,
304
304
  {
305
- className: "size-4 shrink-0 text-content-muted",
305
+ className: "size-4 shrink-0 text-secondary-foreground",
306
306
  "aria-hidden": !0
307
307
  }
308
308
  ),
@@ -369,7 +369,7 @@ const Ae = ["default", "active", "system"], Ye = ({
369
369
  size: "sm",
370
370
  className: "shrink-0 font-['Manrope']",
371
371
  onClick: () => {
372
- p(!1), re?.({ activeView: d });
372
+ p(!1), le?.({ activeView: d });
373
373
  },
374
374
  children: a("dataTable.savedViewsSave")
375
375
  }
@@ -0,0 +1,13 @@
1
+ export interface DataTableSheetPortalSnapshot {
2
+ sheetTarget: HTMLDivElement | null;
3
+ scopedSheetOpen: boolean;
4
+ }
5
+ export interface DataTableSheetPortalStore {
6
+ getSnapshot: () => DataTableSheetPortalSnapshot;
7
+ subscribe: (listener: () => void) => () => void;
8
+ setSheetTarget: (sheetTarget: HTMLDivElement | null) => void;
9
+ registerScopedSheetDepth: (delta: 1 | -1) => void;
10
+ reset: () => void;
11
+ }
12
+ export declare function createDataTableSheetPortalStore(): DataTableSheetPortalStore;
13
+ export declare function useDataTableSheetPortalSnapshot(store: DataTableSheetPortalStore): DataTableSheetPortalSnapshot;
@@ -0,0 +1,36 @@
1
+ import { useSyncExternalStore as o } from "react";
2
+ function p() {
3
+ let t = 0, n = {
4
+ sheetTarget: null,
5
+ scopedSheetOpen: !1
6
+ };
7
+ const r = /* @__PURE__ */ new Set(), a = () => {
8
+ r.forEach((e) => e());
9
+ };
10
+ return {
11
+ getSnapshot: () => n,
12
+ subscribe: (e) => (r.add(e), () => r.delete(e)),
13
+ setSheetTarget: (e) => {
14
+ n.sheetTarget !== e && (n = { ...n, sheetTarget: e }, a());
15
+ },
16
+ registerScopedSheetDepth: (e) => {
17
+ t = Math.max(0, t + e);
18
+ const s = t > 0;
19
+ n.scopedSheetOpen !== s && (n = { ...n, scopedSheetOpen: s }, a());
20
+ },
21
+ reset: () => {
22
+ t = 0, n = { sheetTarget: null, scopedSheetOpen: !1 }, a();
23
+ }
24
+ };
25
+ }
26
+ function S(t) {
27
+ return o(
28
+ t.subscribe,
29
+ t.getSnapshot,
30
+ t.getSnapshot
31
+ );
32
+ }
33
+ export {
34
+ p as createDataTableSheetPortalStore,
35
+ S as useDataTableSheetPortalSnapshot
36
+ };
@@ -1,10 +1,7 @@
1
1
  import { default as React } from 'react';
2
- export declare const DataTableSheet: ({ children, defaultOpen, open: controlledOpen, onOpenChange, }: {
3
- children: React.ReactNode;
4
- defaultOpen?: boolean;
5
- open?: boolean;
6
- onOpenChange?: (open: boolean) => void;
7
- }) => import("react/jsx-runtime").JSX.Element;
2
+ import { DataTableSheetProps } from './data-table.types';
3
+ export type { DataTableSheetProps } from './data-table.types';
4
+ export declare const DataTableSheet: ({ children, defaultOpen, open: controlledOpen, onOpenChange, }: DataTableSheetProps) => import("react/jsx-runtime").JSX.Element;
8
5
  export declare const DataTableSheetTrigger: ({ children, asChild, }: {
9
6
  children: React.ReactNode;
10
7
  asChild?: boolean;