impact-nova 2.2.2 → 2.2.4

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 (58) hide show
  1. package/dist/components/data/ag-grid-react/headers/custom-header.js +133 -110
  2. package/dist/components/data/ag-grid-react/headers/header-search-input.js +23 -23
  3. package/dist/components/data/ag-grid-react/index.js +202 -206
  4. package/dist/components/data/data-table/build-column-tree-from-grid.js +65 -67
  5. package/dist/components/data/data-table/data-table-column-list-sync.js +5 -10
  6. package/dist/components/data/data-table/data-table-column-list.js +64 -61
  7. package/dist/components/data/data-table/data-table-column-tree-cache.d.ts +29 -0
  8. package/dist/components/data/data-table/data-table-column-tree-cache.js +117 -0
  9. package/dist/components/data/data-table/data-table-constants.d.ts +2 -0
  10. package/dist/components/data/data-table/data-table-constants.js +3 -2
  11. package/dist/components/data/data-table/data-table-sheet.js +46 -49
  12. package/dist/components/data/data-table/data-table.js +137 -119
  13. package/dist/components/data/data-table/index.js +24 -23
  14. package/dist/components/data/data-table/patch-column-tree-indicators-from-grid.d.ts +3 -0
  15. package/dist/components/data/data-table/patch-column-tree-indicators-from-grid.js +24 -0
  16. package/dist/components/data/data-table/use-data-table-column-list-sync.d.ts +2 -1
  17. package/dist/components/data/data-table/use-data-table-column-list-sync.js +249 -150
  18. package/dist/components/data/expandable-list-item/expandable-list-item-attributes.js +6 -7
  19. package/dist/components/data/nested-list/components/NestedListContent.js +158 -96
  20. package/dist/components/data/nested-list/nested-list-constants.d.ts +4 -0
  21. package/dist/components/data/nested-list/nested-list-constants.js +6 -0
  22. package/dist/components/data/nested-list/nested-list-tree-utils.d.ts +3 -0
  23. package/dist/components/data/nested-list/nested-list-tree-utils.js +24 -0
  24. package/dist/components/data/nested-list/nested-list.js +214 -215
  25. package/dist/components/data-display/calendar/calendar-day-picker-view.d.ts +3 -2
  26. package/dist/components/data-display/calendar/calendar-day-picker-view.js +70 -68
  27. package/dist/components/data-display/calendar/calendar-week-number-cell.js +29 -29
  28. package/dist/components/data-display/calendar/calendar.js +96 -94
  29. package/dist/components/data-display/calendar/calendar.types.d.ts +2 -0
  30. package/dist/components/data-display/card/card.js +6 -5
  31. package/dist/components/feedback/dialog/dialog.js +7 -5
  32. package/dist/components/feedback/sheet/sheet.js +28 -27
  33. package/dist/components/feedback/tooltip/tab-tooltip-render.js +2 -3
  34. package/dist/components/flows/filter-panel/filter-panel.js +61 -57
  35. package/dist/components/flows/filter-strip/filter-tag-list.js +33 -33
  36. package/dist/components/forms/combobox/combobox.js +110 -100
  37. package/dist/components/forms/date-picker/date-input-behavior.d.ts +9 -0
  38. package/dist/components/forms/date-picker/date-input-behavior.js +32 -19
  39. package/dist/components/forms/date-picker/date-picker.js +96 -90
  40. package/dist/components/forms/date-picker/date-range-picker.js +160 -152
  41. package/dist/components/forms/date-picker/month-picker.js +71 -65
  42. package/dist/components/forms/date-picker/month-range-picker.js +153 -145
  43. package/dist/components/forms/date-picker/multi-date-picker.js +127 -99
  44. package/dist/components/forms/date-picker/multi-month-picker.js +109 -97
  45. package/dist/components/forms/date-picker/multi-week-picker.js +98 -86
  46. package/dist/components/forms/date-picker/week-picker.js +82 -76
  47. package/dist/components/forms/date-picker/week-range-picker.js +127 -119
  48. package/dist/impact-nova-base.scss +10 -5
  49. package/dist/impact-nova-components.css +9 -5
  50. package/dist/impact-nova.css +1 -1
  51. package/dist/index.js +189 -188
  52. package/dist/lib/overlay/overlay-portal-context.d.ts +11 -2
  53. package/dist/lib/overlay/overlay-portal-context.js +39 -28
  54. package/dist/lib/primitives/create-compound.d.ts +5 -0
  55. package/dist/lib/primitives/create-compound.js +17 -16
  56. package/dist/llms/rules/installation.js +1 -1
  57. package/dist/llms/rules/requirements.js +1 -1
  58. package/package.json +2 -1
@@ -2,34 +2,34 @@ import { jsx as u, jsxs as T } from "react/jsx-runtime";
2
2
  import * as l from "react";
3
3
  import { Cross as Me, CalendarMonth as Ge } from "impact-nova-icons";
4
4
  import { format as g } from "date-fns";
5
- import { cn as G } from "../../../lib/utils.js";
6
- import { usePickerDismissActionsRef as Je, usePickerFooterDismissNudge as Qe, createRangePickerOpenChangeHandler as Ue, parseDateInput as J, normalizeOrderedRange as Xe, compareDates as Ze, flashRangeReorder as _e, isDateInputInvalid as oe, resolveRangeFieldBlur as V, resolveRangePickerDismissFlash as $e, deferRangeInputBlur as Ye, maskDateInput as se, resolveDateInputOnBlur as O } from "./date-input-behavior.js";
7
- import { useFieldChrome as Fe } from "../../../lib/primitives/use-field-chrome.js";
8
- import { Popover as et, PopoverAnchor as tt, PopoverContent as rt } from "../../feedback/popover/popover.js";
9
- import { Calendar as nt } from "../../data-display/calendar/calendar.js";
10
- import { buildDateBoundsMatcher as ot } from "../../../lib/date-bounds-matcher.js";
11
- import { Tooltip as ie, TooltipTrigger as le, TooltipContent as ae } from "../../feedback/tooltip/tooltip.js";
12
- import { resolveWeekSelection as st } from "../../../lib/fiscal-calendar.js";
13
- import { useImpactNovaI18n as it } from "../../../i18n/use-impact-nova-i18n.js";
14
- import { getDateFnsLocale as lt } from "../../../i18n/getDateFnsLocale.js";
15
- import { coerceWeekRangeApply as at, isWeekRangeSelection as ct } from "./calendar-selection-adapters.js";
5
+ import { cn as J } from "../../../lib/utils.js";
6
+ import { usePickerDismissActionsRef as Je, usePickerFooterDismissNudge as Qe, createRangePickerOpenChangeHandler as Ue, parseDateInput as Q, normalizeOrderedRange as Xe, compareDates as Ze, flashRangeReorder as _e, isDateInputInvalid as se, resolveRangeFieldBlur as V, resolveRangePickerDismissFlash as $e, handlePickerSurfacePointerDown as Ye, deferRangeInputBlur as Fe, maskDateInput as ie, resolveDateInputOnBlur as O } from "./date-input-behavior.js";
7
+ import { useFieldChrome as et } from "../../../lib/primitives/use-field-chrome.js";
8
+ import { Popover as tt, PopoverAnchor as rt, PopoverContent as nt } from "../../feedback/popover/popover.js";
9
+ import { Calendar as ot } from "../../data-display/calendar/calendar.js";
10
+ import { buildDateBoundsMatcher as st } from "../../../lib/date-bounds-matcher.js";
11
+ import { Tooltip as le, TooltipTrigger as ae, TooltipContent as ce } from "../../feedback/tooltip/tooltip.js";
12
+ import { resolveWeekSelection as it } from "../../../lib/fiscal-calendar.js";
13
+ import { useImpactNovaI18n as lt } from "../../../i18n/use-impact-nova-i18n.js";
14
+ import { getDateFnsLocale as at } from "../../../i18n/getDateFnsLocale.js";
15
+ import { coerceWeekRangeApply as ct, isWeekRangeSelection as ft } from "./calendar-selection-adapters.js";
16
16
  const x = (t) => t?.from ? t.to ? t.to.endDate : t.from.endDate : void 0, S = (t) => t?.from ? { from: t.from, to: t.to } : void 0;
17
- function ce(t, a) {
17
+ function fe(t, a) {
18
18
  return !t && !a ? !0 : !t || !a ? !1 : t.startDate.getTime() === a.startDate.getTime();
19
19
  }
20
- function ft(t, a) {
21
- return !t && !a ? !0 : !t || !a ? !1 : ce(t.from, a.from) && ce(t.to, a.to);
20
+ function dt(t, a) {
21
+ return !t && !a ? !0 : !t || !a ? !1 : fe(t.from, a.from) && fe(t.to, a.to);
22
22
  }
23
- const dt = l.forwardRef(
23
+ const pt = l.forwardRef(
24
24
  ({
25
25
  value: t,
26
26
  onChange: a,
27
27
  format: o = "MM/dd/yyyy",
28
- placeholder: fe,
29
- minDate: de,
30
- maxDate: pe,
31
- startMonth: me,
32
- endMonth: ue,
28
+ placeholder: de,
29
+ minDate: pe,
30
+ maxDate: me,
31
+ startMonth: ue,
32
+ endMonth: ge,
33
33
  showFooter: k = !0,
34
34
  calendarType: L = "calendar",
35
35
  fiscalMode: j = "basic",
@@ -38,29 +38,29 @@ const dt = l.forwardRef(
38
38
  fiscalYearStartMonth: z = 1,
39
39
  weekStartsOn: H = 1,
40
40
  disabled: d,
41
- className: ge,
42
- error: ke,
43
- isError: Re,
44
- size: Q,
45
- label: De,
46
- helperText: he,
47
- helperTextPosition: ye = "absolute",
48
- required: ve,
49
- prefix: pt,
50
- prefixClick: mt,
51
- ...xe
52
- }, be) => {
53
- const U = ke ?? Re, Ce = Fe({
54
- label: De,
55
- helperText: he,
56
- helperTextPosition: ye,
57
- error: U,
58
- required: ve,
41
+ className: ke,
42
+ error: Re,
43
+ isError: De,
44
+ size: U,
45
+ label: he,
46
+ helperText: ye,
47
+ helperTextPosition: ve = "absolute",
48
+ required: xe,
49
+ prefix: mt,
50
+ prefixClick: ut,
51
+ ...be
52
+ }, Ce) => {
53
+ const X = Re ?? De, we = et({
54
+ label: he,
55
+ helperText: ye,
56
+ helperTextPosition: ve,
57
+ error: X,
58
+ required: xe,
59
59
  disabled: d ?? void 0,
60
60
  rootClassName: "w-full min-w-[240px]"
61
- }), { locale: X, t: E } = it(), s = l.useMemo(() => lt(X), [X]), Z = fe ?? E("datePicker.selectWeekRange"), _ = l.useRef(null), Ie = l.useRef(null), $ = l.useRef(null), N = l.useRef(null), M = l.useRef(null);
62
- l.useImperativeHandle(be, () => _.current);
63
- const [p, R] = l.useState(!1), Y = Je(), { footerFlashKey: we, footerFlashTarget: Ee, popoverHandlers: We } = Qe(k, p, Y, $), W = l.useRef(!1), [c, D] = l.useState(t), [m, h] = l.useState(t?.from ? g(t.from.startDate, o, { locale: s }) : ""), [y, v] = l.useState(x(t) ? g(x(t), o, { locale: s }) : ""), [Pe, P] = l.useState(t?.from?.startDate || /* @__PURE__ */ new Date());
61
+ }), { locale: Z, t: E } = lt(), s = l.useMemo(() => at(Z), [Z]), _ = de ?? E("datePicker.selectWeekRange"), M = l.useRef(null), $ = l.useRef(null), Y = l.useRef(null), N = l.useRef(null), G = l.useRef(null);
62
+ l.useImperativeHandle(Ce, () => M.current);
63
+ const [p, R] = l.useState(!1), F = Je(), { footerFlashKey: Ie, footerFlashTarget: Ee, popoverHandlers: Pe } = Qe(k, p, F, Y), P = l.useRef(!1), [c, D] = l.useState(t), [m, h] = l.useState(t?.from ? g(t.from.startDate, o, { locale: s }) : ""), [y, v] = l.useState(x(t) ? g(x(t), o, { locale: s }) : ""), [We, W] = l.useState(t?.from?.startDate || /* @__PURE__ */ new Date());
64
64
  l.useEffect(() => {
65
65
  h(t?.from ? g(t.from.startDate, o, { locale: s }) : ""), v(x(t) ? g(x(t), o, { locale: s }) : ""), D(t);
66
66
  }, [t, o, s]);
@@ -69,23 +69,23 @@ const dt = l.forwardRef(
69
69
  disabled: d ?? void 0,
70
70
  showFooter: k,
71
71
  containerRef: N,
72
- popoverContentRef: M,
72
+ popoverContentRef: G,
73
73
  setOpen: R
74
74
  })(e),
75
75
  [d, k]
76
- ), F = l.useRef(!1);
76
+ ), ee = l.useRef(!1);
77
77
  l.useEffect(() => {
78
- if (p && !F.current) {
79
- const e = J(m, o, s);
80
- e.parsed ? P(e.parsed) : c?.from ? P(c.from.startDate) : t?.from && P(t.from.startDate);
78
+ if (p && !ee.current) {
79
+ const e = Q(m, o, s);
80
+ e.parsed ? W(e.parsed) : c?.from ? W(c.from.startDate) : t?.from && W(t.from.startDate);
81
81
  }
82
- F.current = p;
82
+ ee.current = p;
83
83
  }, [p, m, o, s, c?.from, t?.from]);
84
84
  const Se = (e) => {
85
- const r = ct(e) ? e : void 0;
85
+ const r = ft(e) ? e : void 0;
86
86
  D(r), r?.from ? (h(g(r.from.startDate, o, { locale: s })), v(g(x(r), o, { locale: s }))) : (h(""), v("")), !k && r?.from && r?.to && r.from.startDate.getTime() !== r.to.startDate.getTime() && (a?.(r), R(!1));
87
87
  }, b = l.useCallback(
88
- (e) => st(e, {
88
+ (e) => it(e, {
89
89
  calendarType: L,
90
90
  fiscalMode: j,
91
91
  selectionMode: K,
@@ -108,60 +108,60 @@ const dt = l.forwardRef(
108
108
  (i, f) => Ze(i.startDate, f.startDate)
109
109
  );
110
110
  return n.swapped && (n.from && h(g(n.from.startDate, o, { locale: s })), n.to && v(g(x({ from: n.from, to: n.to }), o, { locale: s })), _e(N.current)), { from: n.from, to: n.to };
111
- }, [o, s]), ee = (e) => {
112
- const r = at(e, S(c)), n = B(r?.from, r?.to), i = n.from ? { from: n.from, to: n.to } : void 0;
111
+ }, [o, s]), te = (e) => {
112
+ const r = ct(e, S(c)), n = B(r?.from, r?.to), i = n.from ? { from: n.from, to: n.to } : void 0;
113
113
  D(i), a?.(i), R(!1);
114
114
  }, A = () => {
115
115
  D(t), h(t?.from ? g(t.from.startDate, o, { locale: s }) : ""), v(x(t) ? g(x(t), o, { locale: s }) : ""), R(!1);
116
- }, te = () => {
116
+ }, re = () => {
117
117
  D(void 0), h(""), v(""), a?.(void 0), k || R(!1);
118
118
  }, Be = (e) => {
119
- const r = se(e.target.value, o, m);
119
+ const r = ie(e.target.value, o, m);
120
120
  if (h(r), r === "") {
121
121
  const f = { to: c?.to };
122
122
  D(f), k || a?.(void 0);
123
123
  return;
124
124
  }
125
- const { parsed: n, isValid: i } = J(r, o, s);
125
+ const { parsed: n, isValid: i } = Q(r, o, s);
126
126
  if (i && n) {
127
- const w = { from: b(n), to: c?.to };
128
- D(w), c?.to && v(g(x(w), o, { locale: s })), P(n), k || a?.(S(w));
127
+ const I = { from: b(n), to: c?.to };
128
+ D(I), c?.to && v(g(x(I), o, { locale: s })), W(n), k || a?.(S(I));
129
129
  }
130
130
  }, Ne = (e) => {
131
- const r = se(e.target.value, o, y);
131
+ const r = ie(e.target.value, o, y);
132
132
  if (v(r), r === "") {
133
133
  const f = { from: c?.from };
134
134
  D(f), k || a?.(S(f));
135
135
  return;
136
136
  }
137
- const { parsed: n, isValid: i } = J(r, o, s);
137
+ const { parsed: n, isValid: i } = Q(r, o, s);
138
138
  if (i && n) {
139
- const f = b(n), w = { from: c?.from, to: f };
140
- D(w), c?.from && h(g(c.from.startDate, o, { locale: s })), P(n), k || a?.(S(w));
139
+ const f = b(n), I = { from: c?.from, to: f };
140
+ D(I), c?.from && h(g(c.from.startDate, o, { locale: s })), W(n), k || a?.(S(I));
141
141
  }
142
142
  }, Ae = () => {
143
- const e = O(m, o, C, s), r = O(y, o, I, s);
144
- e.resetToCommitted ? h(C) : e.parsed && h(e.display), r.resetToCommitted ? v(I) : r.parsed && v(r.display);
143
+ const e = O(m, o, C, s), r = O(y, o, w, s);
144
+ e.resetToCommitted ? h(C) : e.parsed && h(e.display), r.resetToCommitted ? v(w) : r.parsed && v(r.display);
145
145
  let n = e.parsed ? b(e.parsed) : c?.from, i = r.parsed ? b(r.parsed) : c?.to;
146
146
  n && i && ({ from: n, to: i } = B(n, i));
147
147
  const f = n ? { from: n, to: i } : void 0;
148
148
  f ? (D(f), a?.(f)) : !m && !y && (D(void 0), a?.(void 0));
149
- }, re = () => {
150
- Ye(
149
+ }, ne = () => {
150
+ Fe(
151
151
  N,
152
- M,
152
+ G,
153
153
  () => {
154
- const e = V(m, o, C, s), r = V(y, o, I, s);
155
- e.resetToCommitted ? h(C) : e.parsed && h(e.display), r.resetToCommitted ? v(I) : r.parsed && v(r.display);
154
+ const e = V(m, o, C, s), r = V(y, o, w, s);
155
+ e.resetToCommitted ? h(C) : e.parsed && h(e.display), r.resetToCommitted ? v(w) : r.parsed && v(r.display);
156
156
  let n = e.parsed ? b(e.parsed) : e.resetToCommitted ? t?.from : c?.from, i = r.parsed ? b(r.parsed) : r.resetToCommitted ? t?.to : c?.to;
157
157
  n && i && ({ from: n, to: i } = B(n, i));
158
158
  const f = n || i ? { from: n, to: i } : void 0;
159
159
  D(f), k || (f ? a?.(f) : !m && !y && a?.(void 0));
160
160
  }
161
161
  );
162
- }, ne = () => {
162
+ }, oe = () => {
163
163
  if (p && k) {
164
- ee();
164
+ te();
165
165
  return;
166
166
  }
167
167
  if (!p) {
@@ -169,12 +169,12 @@ const dt = l.forwardRef(
169
169
  Ae();
170
170
  return;
171
171
  }
172
- const e = O(m, o, C, s), r = O(y, o, I, s);
172
+ const e = O(m, o, C, s), r = O(y, o, w, s);
173
173
  if (e.parsed || r.parsed) return;
174
- W.current = !0, R(!0);
174
+ P.current = !0, R(!0);
175
175
  }
176
- }, C = t?.from ? g(t.from.startDate, o, { locale: s }) : "", I = x(t) ? g(x(t), o, { locale: s }) : "", Ve = C !== m, Oe = I !== y, Le = oe(m, o, s), je = oe(y, o, s), Ke = "Start Date", qe = "End Date", ze = l.useCallback(() => {
177
- const e = V(m, o, C, s), r = V(y, o, I, s);
176
+ }, C = t?.from ? g(t.from.startDate, o, { locale: s }) : "", w = x(t) ? g(x(t), o, { locale: s }) : "", Ve = C !== m, Oe = w !== y, Le = se(m, o, s), je = se(y, o, s), Ke = "Start Date", qe = "End Date", ze = l.useCallback(() => {
177
+ const e = V(m, o, C, s), r = V(y, o, w, s);
178
178
  let n = e.parsed ? b(e.parsed) : e.resetToCommitted ? t?.from : c?.from, i = r.parsed ? b(r.parsed) : r.resetToCommitted ? t?.to : c?.to;
179
179
  n && i && ({ from: n, to: i } = B(n, i));
180
180
  const f = n || i ? { from: n, to: i } : void 0;
@@ -182,17 +182,17 @@ const dt = l.forwardRef(
182
182
  startInput: m,
183
183
  endInput: y,
184
184
  committedStart: C,
185
- committedEnd: I,
185
+ committedEnd: w,
186
186
  committedRange: t,
187
187
  pendingRange: S(c),
188
188
  computeEffectiveRange: () => f,
189
- rangesEqual: (w, He) => ft(w, He)
189
+ rangesEqual: (I, He) => dt(I, He)
190
190
  });
191
191
  }, [
192
192
  m,
193
193
  y,
194
194
  C,
195
- I,
195
+ w,
196
196
  t,
197
197
  c,
198
198
  o,
@@ -201,73 +201,81 @@ const dt = l.forwardRef(
201
201
  b
202
202
  ]);
203
203
  return l.useLayoutEffect(() => {
204
- Y.current = {
204
+ F.current = {
205
205
  onDismiss: A,
206
206
  resolveFlash: ze
207
207
  };
208
208
  }), /* @__PURE__ */ u(
209
209
  "div",
210
210
  {
211
- ref: $,
211
+ ref: Y,
212
212
  "data-component": "week-range-picker",
213
213
  "data-disabled": d || void 0,
214
- children: Ce.wrapControl(
215
- /* @__PURE__ */ T(et, { open: d ? !1 : p, onOpenChange: Te, children: [
216
- /* @__PURE__ */ u(tt, { asChild: !0, children: /* @__PURE__ */ T(
214
+ children: we.wrapControl(
215
+ /* @__PURE__ */ T(tt, { open: d ? !1 : p, onOpenChange: Te, children: [
216
+ /* @__PURE__ */ u(rt, { asChild: !0, children: /* @__PURE__ */ T(
217
217
  "div",
218
218
  {
219
219
  ref: N,
220
220
  "data-state": p ? "open" : "closed",
221
- className: G(
221
+ onPointerDown: (e) => Ye({
222
+ disabled: d,
223
+ event: e,
224
+ onOpen: () => R(!0),
225
+ focusField: (r) => {
226
+ r === "end" ? $.current?.focus() : M.current?.focus();
227
+ }
228
+ }),
229
+ className: J(
222
230
  "flex w-full items-center justify-between gap-2 rounded-md border bg-canvas-elevated px-3 text-sm shadow-sm transition-colors hover:border-brand disabled:cursor-not-allowed disabled:bg-disabled-surface disabled:text-disabled-foreground disabled:border-stroke",
223
- U ? "border-destructive hover:border-destructive" : "border-field",
224
- Q === "sm" ? "h-6" : Q === "md" ? "h-[28px]" : "h-8",
231
+ X ? "border-destructive hover:border-destructive" : "border-field",
232
+ U === "sm" ? "h-6" : U === "md" ? "h-[28px]" : "h-8",
225
233
  d && "pointer-events-none opacity-100 bg-disabled-surface border-stroke text-disabled-foreground hover:border-stroke",
226
234
  "cursor-pointer",
227
- ge
235
+ ke
228
236
  ),
229
237
  children: [
230
238
  /* @__PURE__ */ T("div", { className: "flex items-center gap-4 flex-1 min-w-0", children: [
231
239
  /* @__PURE__ */ u(
232
240
  "input",
233
241
  {
234
- ref: _,
242
+ ref: M,
235
243
  type: "text",
236
244
  value: m,
237
245
  onChange: Be,
238
- onBlur: re,
246
+ onBlur: ne,
239
247
  onClick: () => !d && R(!0),
240
248
  onKeyDown: (e) => {
241
- e.key === "Enter" && !d && (e.preventDefault(), ne()), e.key === "ArrowDown" && !p && !d && (e.preventDefault(), W.current = !0, R(!0)), e.key === "Escape" && p && (e.preventDefault(), A());
249
+ e.key === "Enter" && !d && (e.preventDefault(), oe()), e.key === "ArrowDown" && !p && !d && (e.preventDefault(), P.current = !0, R(!0)), e.key === "Escape" && p && (e.preventDefault(), A());
242
250
  },
243
- placeholder: p ? o : Z,
251
+ placeholder: p ? o : _,
244
252
  disabled: !!d,
245
253
  "aria-label": Ke,
246
254
  "data-field": "start",
247
- className: G(
255
+ className: J(
248
256
  "flex-1 min-w-0 bg-transparent p-0 text-sm font-medium outline-none placeholder:font-medium placeholder:text-content-empty disabled:cursor-not-allowed disabled:opacity-50",
249
257
  Le ? "text-destructive" : Ve ? "text-content-placeholder" : ""
250
258
  ),
251
- ...xe
259
+ ...be
252
260
  }
253
261
  ),
254
262
  /* @__PURE__ */ u(
255
263
  "input",
256
264
  {
257
- ref: Ie,
265
+ ref: $,
258
266
  type: "text",
259
267
  value: y,
260
268
  onChange: Ne,
261
- onBlur: re,
269
+ onBlur: ne,
262
270
  onClick: () => !d && R(!0),
263
271
  onKeyDown: (e) => {
264
- e.key === "Enter" && !d && (e.preventDefault(), ne()), e.key === "ArrowDown" && !p && !d && (e.preventDefault(), W.current = !0, R(!0)), e.key === "Escape" && p && (e.preventDefault(), A());
272
+ e.key === "Enter" && !d && (e.preventDefault(), oe()), e.key === "ArrowDown" && !p && !d && (e.preventDefault(), P.current = !0, R(!0)), e.key === "Escape" && p && (e.preventDefault(), A());
265
273
  },
266
- placeholder: p ? o : Z,
274
+ placeholder: p ? o : _,
267
275
  disabled: !!d,
268
276
  "aria-label": qe,
269
277
  "data-field": "end",
270
- className: G(
278
+ className: J(
271
279
  "flex-1 min-w-0 bg-transparent p-0 text-sm font-medium outline-none placeholder:font-medium placeholder:text-content-empty disabled:cursor-not-allowed disabled:opacity-50",
272
280
  je ? "text-destructive" : Oe ? "text-content-placeholder" : ""
273
281
  )
@@ -275,59 +283,59 @@ const dt = l.forwardRef(
275
283
  )
276
284
  ] }),
277
285
  /* @__PURE__ */ T("div", { className: "flex items-center gap-1 shrink-0", children: [
278
- t?.from && !d && /* @__PURE__ */ T(ie, { children: [
279
- /* @__PURE__ */ u(le, { asChild: !0, children: /* @__PURE__ */ u(
286
+ t?.from && !d && /* @__PURE__ */ T(le, { children: [
287
+ /* @__PURE__ */ u(ae, { asChild: !0, children: /* @__PURE__ */ u(
280
288
  "button",
281
289
  {
282
290
  type: "button",
283
291
  tabIndex: 0,
284
292
  "aria-label": E("calendar.clear"),
285
293
  onClick: (e) => {
286
- e.stopPropagation(), te();
294
+ e.stopPropagation(), re();
287
295
  },
288
296
  className: "inline-flex size-4 items-center justify-center bg-transparent border-none p-0 cursor-pointer",
289
297
  children: /* @__PURE__ */ u(Me, { className: "size-3 hover:text-content text-content-icon" })
290
298
  }
291
299
  ) }),
292
- /* @__PURE__ */ u(ae, { variant: "tertiary", side: "top", children: E("calendar.clear") })
300
+ /* @__PURE__ */ u(ce, { variant: "tertiary", side: "top", children: E("calendar.clear") })
293
301
  ] }),
294
- /* @__PURE__ */ T(ie, { children: [
295
- /* @__PURE__ */ u(le, { asChild: !0, children: /* @__PURE__ */ u("button", { type: "button", tabIndex: 0, "aria-label": E("datePicker.selectWeekRange"), onClick: (e) => {
302
+ /* @__PURE__ */ T(le, { children: [
303
+ /* @__PURE__ */ u(ae, { asChild: !0, children: /* @__PURE__ */ u("button", { type: "button", tabIndex: 0, "aria-label": E("datePicker.selectWeekRange"), onClick: (e) => {
296
304
  e.stopPropagation(), d || R(!p);
297
305
  }, onKeyDown: (e) => {
298
- (e.key === "Enter" || e.key === " ") && (e.preventDefault(), e.stopPropagation(), d || (W.current = !0, R(!p)));
306
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), e.stopPropagation(), d || (P.current = !0, R(!p)));
299
307
  }, className: "inline-flex items-center justify-center bg-transparent border-none p-0 cursor-pointer", children: /* @__PURE__ */ u(Ge, { className: "h-4 w-4 text-secondary-foreground" }) }) }),
300
- /* @__PURE__ */ u(ae, { variant: "tertiary", side: "top", children: E("datePicker.selectWeekRange") })
308
+ /* @__PURE__ */ u(ce, { variant: "tertiary", side: "top", children: E("datePicker.selectWeekRange") })
301
309
  ] })
302
310
  ] })
303
311
  ]
304
312
  }
305
313
  ) }),
306
314
  /* @__PURE__ */ u(
307
- rt,
315
+ nt,
308
316
  {
309
- ref: M,
317
+ ref: G,
310
318
  className: "w-auto p-0",
311
319
  align: "start",
312
320
  "aria-label": E("datePicker.selectWeekRange"),
313
321
  onOpenAutoFocus: (e) => {
314
- W.current || e.preventDefault(), W.current = !1;
322
+ P.current || e.preventDefault(), P.current = !1;
315
323
  },
316
- ...We,
324
+ ...Pe,
317
325
  children: /* @__PURE__ */ u(
318
- nt,
326
+ ot,
319
327
  {
320
328
  pickerType: "week",
321
329
  weekMode: "range",
322
330
  selectedWeeks: S(c),
323
- footerFlashKey: we,
331
+ footerFlashKey: Ie,
324
332
  footerFlashTarget: Ee,
325
333
  onWeekSelect: Se,
326
- month: Pe,
327
- onMonthChange: P,
328
- disabled: ot(de, pe),
329
- startMonth: me,
330
- endMonth: ue,
334
+ month: We,
335
+ onMonthChange: W,
336
+ disabled: st(pe, me),
337
+ startMonth: ue,
338
+ endMonth: ge,
331
339
  showFooter: k,
332
340
  calendarType: L,
333
341
  fiscalMode: j,
@@ -335,9 +343,9 @@ const dt = l.forwardRef(
335
343
  fiscalMonthPattern: q,
336
344
  fiscalYearStartMonth: z,
337
345
  weekStartsOn: H,
338
- onApply: ee,
346
+ onApply: te,
339
347
  onCancel: A,
340
- onClear: te,
348
+ onClear: re,
341
349
  captionLayout: "dropdown"
342
350
  }
343
351
  )
@@ -349,7 +357,7 @@ const dt = l.forwardRef(
349
357
  );
350
358
  }
351
359
  );
352
- dt.displayName = "WeekRangePicker";
360
+ pt.displayName = "WeekRangePicker";
353
361
  export {
354
- dt as WeekRangePicker
362
+ pt as WeekRangePicker
355
363
  };
@@ -190,12 +190,16 @@
190
190
  overflow: visible !important;
191
191
  }
192
192
 
193
- /* Prevent focus ring clipping on containers with overflow hidden */
194
- [data-component="statistics-card"]:has(:focus-visible),
195
- [data-component="card"]:has(:focus-visible) {
193
+ /* Prevent focus ring clipping on KPI cards (no internal scroll surface). */
194
+ [data-component="statistics-card"]:has(:focus-visible) {
196
195
  overflow: visible !important;
197
196
  }
198
197
 
198
+ /* Inset focus ring for card footer actions inside overflow-hidden cards. */
199
+ [data-component="card"] [data-component="card-footer"] button:focus-visible {
200
+ outline-offset: -2px !important;
201
+ }
202
+
199
203
  /* Prevent focus ring clipping on tabs list - use overflow visible only */
200
204
  [data-tabs="list"]:has(:focus-visible) {
201
205
  overflow: visible !important;
@@ -208,11 +212,12 @@
208
212
  }
209
213
 
210
214
  /* Generic rule for containers that might clip focus rings.
211
- Scroll/layout panels are excluded so focus does not break overflow containment. */
215
+ Scroll surfaces and their ancestors are excluded so focus does not break overflow containment. */
212
216
  [data-component]:has(:focus-visible):not(
217
+ [data-scroll-surface],
213
218
  [data-component="filter-panel-body"],
214
219
  [data-component="sheet-content"]
215
- ) {
220
+ ):not(:has([data-scroll-surface])) {
216
221
  overflow: visible !important;
217
222
  }
218
223
 
@@ -158,9 +158,10 @@
158
158
 
159
159
  /* ponytail: Quartz theme sets transition:all on header cells. Column virtualization updates
160
160
  `left` every horizontal-scroll frame — transitioning `all` makes headers lag behind the body.
161
- Preserve AG Grid's column-move / auto-size animations via :not() guards. */
162
- .ag-root-wrapper:not(.ag-column-moving):not(.ag-animate-autosize) .ag-header-cell,
163
- .ag-root-wrapper:not(.ag-column-moving):not(.ag-animate-autosize) .ag-header-group-cell {
161
+ Preserve AG Grid's column-move animations via :not(.ag-column-moving); still kill autosize
162
+ width transitions on headers so min-height sheet open does not fade header labels. */
163
+ .ag-root-wrapper:not(.ag-column-moving) .ag-header-cell,
164
+ .ag-root-wrapper:not(.ag-column-moving) .ag-header-group-cell {
164
165
  transition: none;
165
166
  }
166
167
 
@@ -174,7 +175,8 @@
174
175
  background-color: var(--ag-header-background-color);
175
176
  }
176
177
 
177
- /* Pinned column depth — header: boundary cell. Body: row container (parent overflow:hidden clips cell shadow). */
178
+ /* Pinned column depth — left header: boundary leaf cell. Right header/body: row container
179
+ (AG Grid v36 nests group headers inside .ag-grid-container-wrapper, not as direct children). */
178
180
  .ag-header-cell-last-left-pinned {
179
181
  box-shadow: 1px 0px 12px 0px color-mix(in srgb, var(--color-primary) 12%, transparent);
180
182
  clip-path: inset(0 -12px 0 0);
@@ -187,7 +189,9 @@
187
189
  z-index: 2;
188
190
  }
189
191
 
190
- .ag-header-cell-first-right-pinned {
192
+ .ag-header-cell-first-right-pinned,
193
+ .ag-header-row > .ag-grid-pinned-right-cells .ag-header-group-cell {
194
+ border-left: var(--ag-pinned-column-border);
191
195
  box-shadow: -1px 0px 12px 0px color-mix(in srgb, var(--color-primary) 12%, transparent);
192
196
  clip-path: inset(0 0 0 -12px);
193
197
  z-index: 2;