impact-nova 2.5.9 → 2.5.11

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 (73) hide show
  1. package/dist/components/data/data-table/column-runtime-state-guard.js +42 -42
  2. package/dist/components/data/data-table/data-table-column-tree-cache.d.ts +15 -0
  3. package/dist/components/data/data-table/data-table-column-tree-cache.js +109 -80
  4. package/dist/components/data/data-table/use-data-table-column-list-sync.js +65 -62
  5. package/dist/components/data-display/calendar/calendar-apply-validation.d.ts +2 -0
  6. package/dist/components/data-display/calendar/calendar-apply-validation.js +64 -67
  7. package/dist/components/data-display/calendar/calendar-available-view.d.ts +27 -0
  8. package/dist/components/data-display/calendar/calendar-available-view.js +85 -0
  9. package/dist/components/data-display/calendar/calendar-day-picker-classnames.d.ts +6 -1
  10. package/dist/components/data-display/calendar/calendar-day-picker-classnames.js +31 -23
  11. package/dist/components/data-display/calendar/calendar-day-picker-components.d.ts +5 -2
  12. package/dist/components/data-display/calendar/calendar-day-picker-components.js +210 -167
  13. package/dist/components/data-display/calendar/calendar-day-picker-view.d.ts +3 -2
  14. package/dist/components/data-display/calendar/calendar-day-picker-view.js +126 -124
  15. package/dist/components/data-display/calendar/calendar-fiscal-period-nav.d.ts +6 -0
  16. package/dist/components/data-display/calendar/calendar-fiscal-period-nav.js +34 -18
  17. package/dist/components/data-display/calendar/calendar-month-utils.d.ts +5 -0
  18. package/dist/components/data-display/calendar/calendar-month-utils.js +85 -64
  19. package/dist/components/data-display/calendar/calendar-padding-week.utils.d.ts +5 -1
  20. package/dist/components/data-display/calendar/calendar-padding-week.utils.js +20 -16
  21. package/dist/components/data-display/calendar/calendar-selection-appearance.d.ts +1 -0
  22. package/dist/components/data-display/calendar/calendar-selection-appearance.js +31 -30
  23. package/dist/components/data-display/calendar/calendar-week-number-cell.d.ts +3 -1
  24. package/dist/components/data-display/calendar/calendar-week-number-cell.js +68 -53
  25. package/dist/components/data-display/calendar/calendar-week-utils.d.ts +6 -0
  26. package/dist/components/data-display/calendar/calendar-week-utils.js +51 -47
  27. package/dist/components/data-display/calendar/calendar-year-panes.d.ts +2 -0
  28. package/dist/components/data-display/calendar/calendar-year-panes.js +3 -1
  29. package/dist/components/data-display/calendar/calendar.js +170 -165
  30. package/dist/components/data-display/calendar/calendar.types.d.ts +7 -0
  31. package/dist/components/data-display/calendar/use-calendar-day-picker-config.d.ts +5 -2
  32. package/dist/components/data-display/calendar/use-calendar-day-picker-config.js +86 -76
  33. package/dist/components/data-display/calendar/use-calendar-state.d.ts +3 -1
  34. package/dist/components/data-display/calendar/use-calendar-state.js +403 -325
  35. package/dist/components/feedback/dialog/dialog.js +12 -12
  36. package/dist/components/feedback/sheet/sheet.js +22 -22
  37. package/dist/components/forms/date-picker/calendar-selection-adapters.d.ts +2 -0
  38. package/dist/components/forms/date-picker/calendar-selection-adapters.js +36 -31
  39. package/dist/components/forms/date-picker/date-input-behavior.d.ts +10 -0
  40. package/dist/components/forms/date-picker/date-input-behavior.js +111 -90
  41. package/dist/components/forms/date-picker/date-picker.js +74 -70
  42. package/dist/components/forms/date-picker/date-picker.types.d.ts +7 -0
  43. package/dist/components/forms/date-picker/date-range-picker.js +148 -144
  44. package/dist/components/forms/date-picker/fiscal-pass-through.d.ts +2 -0
  45. package/dist/components/forms/date-picker/fiscal-pass-through.js +4 -2
  46. package/dist/components/forms/date-picker/month-picker.js +84 -80
  47. package/dist/components/forms/date-picker/month-range-picker.js +147 -143
  48. package/dist/components/forms/date-picker/multi-date-picker.js +53 -49
  49. package/dist/components/forms/date-picker/multi-month-picker.js +51 -47
  50. package/dist/components/forms/date-picker/multi-quarter-picker.js +48 -44
  51. package/dist/components/forms/date-picker/multi-week-picker.js +55 -51
  52. package/dist/components/forms/date-picker/multi-year-picker.js +50 -46
  53. package/dist/components/forms/date-picker/picker-story-layout.d.ts +2 -0
  54. package/dist/components/forms/date-picker/quarter-picker.js +48 -44
  55. package/dist/components/forms/date-picker/quarter-range-picker.js +47 -43
  56. package/dist/components/forms/date-picker/week-picker.js +86 -82
  57. package/dist/components/forms/date-picker/week-range-picker.js +171 -164
  58. package/dist/components/forms/date-picker/year-picker.js +49 -45
  59. package/dist/components/forms/date-picker/year-range-picker.js +49 -45
  60. package/dist/components/forms/select/components/SelectMenuPanel.js +3 -2
  61. package/dist/components/forms/select/select.js +1 -0
  62. package/dist/form-react/Fields/DateInputField.js +51 -50
  63. package/dist/form-react/Fields/DateRangeField.js +14 -13
  64. package/dist/form-react/Fields/MonthRangeField.js +29 -28
  65. package/dist/form-react/Fields/MultiMonthPickerField.js +13 -12
  66. package/dist/form-react/Fields/MultiWeekPickerField.js +18 -17
  67. package/dist/form-react/Fields/WeekRangePicker.js +48 -48
  68. package/dist/form-react/types/fields.types.d.ts +14 -0
  69. package/dist/impact-nova.css +1 -1
  70. package/dist/lib/overlay/overlay-portal-context.js +16 -16
  71. package/dist/llms/rules/installation.js +1 -1
  72. package/dist/llms/rules/requirements.js +1 -1
  73. package/package.json +1 -1
@@ -1,22 +1,22 @@
1
1
  import { jsxs as u, jsx as r } from "react/jsx-runtime";
2
2
  import * as n from "react";
3
- import { Cross as te, CalendarMonth as re } from "impact-nova-icons";
3
+ import { Cross as ne, CalendarMonth as oe } from "impact-nova-icons";
4
4
  import { format as b } from "date-fns";
5
- import { cn as ne } from "../../../lib/utils.js";
6
- import { Input as oe } from "../input/input.js";
7
- import { Popover as se, PopoverAnchor as ae, PopoverContent as ie } from "../../feedback/popover/popover.js";
8
- import { Calendar as ce } from "../../data-display/calendar/calendar.js";
5
+ import { cn as se } from "../../../lib/utils.js";
6
+ import { Input as ae } from "../input/input.js";
7
+ import { Popover as ie, PopoverAnchor as ce, PopoverContent as le } from "../../feedback/popover/popover.js";
8
+ import { Calendar as pe } from "../../data-display/calendar/calendar.js";
9
9
  import { Tooltip as x, TooltipTrigger as A, TooltipContent as M } from "../../feedback/tooltip/tooltip.js";
10
- import { useImpactNovaI18n as le } from "../../../i18n/use-impact-nova-i18n.js";
11
- import { getDateFnsLocale as pe } from "../../../i18n/getDateFnsLocale.js";
12
- import { coerceWeekArrayApply as de, coerceWeekArray as fe } from "./calendar-selection-adapters.js";
13
- import { usePickerDismissActionsRef as me, usePickerFooterDismissNudge as ue, handlePickerSurfacePointerDown as he } from "./date-input-behavior.js";
14
- import { buildDateBoundsMatcher as ye } from "../../../lib/date-bounds-matcher.js";
15
- import { fiscalCalendarPassThrough as ke } from "./fiscal-pass-through.js";
16
- const ge = (t, a = "MM/dd/yyyy", i) => {
10
+ import { useImpactNovaI18n as de } from "../../../i18n/use-impact-nova-i18n.js";
11
+ import { getDateFnsLocale as fe } from "../../../i18n/getDateFnsLocale.js";
12
+ import { coerceWeekArrayApply as me, coerceWeekArray as ue } from "./calendar-selection-adapters.js";
13
+ import { usePickerDismissActionsRef as he, usePickerFooterDismissNudge as ye, handlePickerSurfacePointerDown as ke } from "./date-input-behavior.js";
14
+ import { buildDateBoundsMatcher as ge } from "../../../lib/date-bounds-matcher.js";
15
+ import { fiscalCalendarPassThrough as Pe } from "./fiscal-pass-through.js";
16
+ const Ce = (t, a = "MM/dd/yyyy", i) => {
17
17
  const h = b(t.startDate, a, i ? { locale: i } : {}), y = b(t.endDate, a, i ? { locale: i } : {});
18
18
  return `${h} - ${y}`;
19
- }, Pe = n.forwardRef(
19
+ }, De = n.forwardRef(
20
20
  ({
21
21
  value: t,
22
22
  onChange: a,
@@ -35,62 +35,64 @@ const ge = (t, a = "MM/dd/yyyy", i) => {
35
35
  fiscalConfig: O,
36
36
  weekStartsOn: j = 1,
37
37
  showPresets: F,
38
- comparison: E,
39
- onComparisonChange: K,
38
+ showPeriodBoundaries: E,
39
+ autoNavigateToAvailable: K,
40
+ comparison: $,
41
+ onComparisonChange: z,
40
42
  disabled: o,
41
- className: $,
42
- ...z
43
- }, V) => {
44
- const { locale: P, t: c } = le(), q = n.useMemo(() => pe(P), [P]), B = h ?? c("datePicker.selectWeeks"), [l, s] = n.useState(!1), k = n.useRef(!1), g = n.useRef(null), C = me(), { footerFlashKey: H, footerFlashTarget: G, popoverHandlers: J } = ue(d, l, C, g), [f, m] = n.useState(t);
43
+ className: V,
44
+ ...q
45
+ }, B) => {
46
+ const { locale: P, t: c } = de(), H = n.useMemo(() => fe(P), [P]), G = h ?? c("datePicker.selectWeeks"), [l, s] = n.useState(!1), k = n.useRef(!1), g = n.useRef(null), C = he(), { footerFlashKey: J, footerFlashTarget: Q, popoverHandlers: U } = ye(d, l, C, g), [f, m] = n.useState(t);
45
47
  n.useEffect(() => {
46
48
  m(t);
47
49
  }, [l, t]);
48
- const Q = (e) => {
49
- const p = fe(e);
50
+ const X = (e) => {
51
+ const p = ue(e);
50
52
  m(p), d || a?.(p);
51
- }, U = (e) => {
52
- const p = de(e, f);
53
+ }, Y = (e) => {
54
+ const p = me(e, f);
53
55
  a?.(p), s(!1);
54
56
  }, D = () => {
55
57
  m(t), s(!1);
56
58
  }, W = () => {
57
59
  m(void 0), a?.(void 0), d || s(!1);
58
- }, X = t && t.length > 0 ? t.length === 1 ? ge(t[0], i, q) : `${t.length} weeks selected` : "", Y = (e) => {
60
+ }, Z = t && t.length > 0 ? t.length === 1 ? Ce(t[0], i, H) : `${t.length} weeks selected` : "", _ = (e) => {
59
61
  o || !e && d || s(e);
60
- }, Z = n.useCallback(() => {
62
+ }, ee = n.useCallback(() => {
61
63
  const e = f?.length ?? 0, p = t?.length ?? 0;
62
64
  return e === p && (f ?? []).every(
63
- (_, ee) => _.startDate.getTime() === t?.[ee]?.startDate.getTime()
65
+ (te, re) => te.startDate.getTime() === t?.[re]?.startDate.getTime()
64
66
  ) ? "dismiss" : e > 0 ? "apply" : "cancel";
65
67
  }, [f, t]);
66
68
  return n.useLayoutEffect(() => {
67
69
  C.current = {
68
70
  onDismiss: D,
69
- resolveFlash: Z
71
+ resolveFlash: ee
70
72
  };
71
- }), /* @__PURE__ */ u(se, { open: o ? !1 : l, onOpenChange: Y, children: [
72
- /* @__PURE__ */ r(ae, { asChild: !0, children: /* @__PURE__ */ r(
73
+ }), /* @__PURE__ */ u(ie, { open: o ? !1 : l, onOpenChange: _, children: [
74
+ /* @__PURE__ */ r(ce, { asChild: !0, children: /* @__PURE__ */ r(
73
75
  "div",
74
76
  {
75
77
  ref: g,
76
- onPointerDown: (e) => he({
78
+ onPointerDown: (e) => ke({
77
79
  disabled: o,
78
80
  event: e,
79
81
  onOpen: () => s(!0),
80
82
  focusField: () => g.current?.querySelector("input")?.focus()
81
83
  }),
82
84
  children: /* @__PURE__ */ r(
83
- oe,
85
+ ae,
84
86
  {
85
- ref: V,
86
- value: X,
87
- placeholder: B,
87
+ ref: B,
88
+ value: Z,
89
+ placeholder: G,
88
90
  readOnly: !0,
89
91
  disabled: o,
90
92
  onClick: () => {
91
93
  !o && !l && s(!0);
92
94
  },
93
- className: ne("cursor-pointer", $),
95
+ className: se("cursor-pointer", V),
94
96
  suffix: /* @__PURE__ */ u("div", { className: "flex items-center gap-1", children: [
95
97
  t && t.length > 0 && !o && /* @__PURE__ */ u(x, { children: [
96
98
  /* @__PURE__ */ r(A, { asChild: !0, children: /* @__PURE__ */ r(
@@ -103,7 +105,7 @@ const ge = (t, a = "MM/dd/yyyy", i) => {
103
105
  e.stopPropagation(), W();
104
106
  },
105
107
  className: "inline-flex size-4 items-center justify-center bg-transparent border-none p-0 cursor-pointer",
106
- children: /* @__PURE__ */ r(te, { className: "size-3 hover:text-content" })
108
+ children: /* @__PURE__ */ r(ne, { className: "size-3 hover:text-content" })
107
109
  }
108
110
  ) }),
109
111
  /* @__PURE__ */ r(M, { variant: "tertiary", side: "top", children: c("calendar.clear") })
@@ -123,19 +125,19 @@ const ge = (t, a = "MM/dd/yyyy", i) => {
123
125
  (e.key === "Enter" || e.key === " ") && (e.preventDefault(), e.stopPropagation(), o || (k.current = !0, s(!l)));
124
126
  },
125
127
  className: "inline-flex items-center justify-center bg-transparent border-none p-0 cursor-pointer",
126
- children: /* @__PURE__ */ r(re, { className: "h-4 w-4 text-secondary-foreground" })
128
+ children: /* @__PURE__ */ r(oe, { className: "h-4 w-4 text-secondary-foreground" })
127
129
  }
128
130
  ) }),
129
131
  /* @__PURE__ */ r(M, { variant: "tertiary", side: "top", children: c("datePicker.selectWeeks") })
130
132
  ] })
131
133
  ] }),
132
- ...z
134
+ ...q
133
135
  }
134
136
  )
135
137
  }
136
138
  ) }),
137
139
  /* @__PURE__ */ r(
138
- ie,
140
+ le,
139
141
  {
140
142
  className: "w-auto p-0",
141
143
  align: "start",
@@ -143,21 +145,21 @@ const ge = (t, a = "MM/dd/yyyy", i) => {
143
145
  onOpenAutoFocus: (e) => {
144
146
  k.current || e.preventDefault(), k.current = !1;
145
147
  },
146
- ...J,
148
+ ...U,
147
149
  children: /* @__PURE__ */ r(
148
- ce,
150
+ pe,
149
151
  {
150
152
  pickerType: "week",
151
153
  weekMode: "multiple",
152
154
  selectedWeeks: f,
153
- footerFlashKey: H,
154
- footerFlashTarget: G,
155
- onWeekSelect: Q,
156
- disabled: ye(y, N),
155
+ footerFlashKey: J,
156
+ footerFlashTarget: Q,
157
+ onWeekSelect: X,
158
+ disabled: ge(y, N),
157
159
  startMonth: T,
158
160
  endMonth: R,
159
161
  showFooter: d,
160
- ...ke({
162
+ ...Pe({
161
163
  calendarKind: S,
162
164
  fiscalMode: v,
163
165
  granularity: w,
@@ -166,10 +168,12 @@ const ge = (t, a = "MM/dd/yyyy", i) => {
166
168
  fiscalConfig: O,
167
169
  weekStartsOn: j,
168
170
  showPresets: F,
169
- comparison: E,
170
- onComparisonChange: K
171
+ showPeriodBoundaries: E,
172
+ autoNavigateToAvailable: K,
173
+ comparison: $,
174
+ onComparisonChange: z
171
175
  }),
172
- onApply: U,
176
+ onApply: Y,
173
177
  onCancel: D,
174
178
  onClear: W,
175
179
  captionLayout: "dropdown"
@@ -180,7 +184,7 @@ const ge = (t, a = "MM/dd/yyyy", i) => {
180
184
  ] });
181
185
  }
182
186
  );
183
- Pe.displayName = "MultiWeekPicker";
187
+ De.displayName = "MultiWeekPicker";
184
188
  export {
185
- Pe as MultiWeekPicker
189
+ De as MultiWeekPicker
186
190
  };
@@ -1,18 +1,18 @@
1
1
  import { jsx as r, jsxs as y } from "react/jsx-runtime";
2
2
  import * as n from "react";
3
- import { Cross as Z, CalendarMonth as _ } from "impact-nova-icons";
4
- import { cn as $ } from "../../../lib/utils.js";
5
- import { Input as ee } from "../input/input.js";
6
- import { Calendar as te } from "../../data-display/calendar/calendar.js";
3
+ import { Cross as $, CalendarMonth as ee } from "impact-nova-icons";
4
+ import { cn as te } from "../../../lib/utils.js";
5
+ import { Input as re } from "../input/input.js";
6
+ import { Calendar as ne } from "../../data-display/calendar/calendar.js";
7
7
  import { Tooltip as M, TooltipTrigger as x, TooltipContent as R } from "../../feedback/tooltip/tooltip.js";
8
- import { useImpactNovaI18n as re } from "../../../i18n/use-impact-nova-i18n.js";
9
- import { buildDateBoundsMatcher as ne } from "../../../lib/date-bounds-matcher.js";
10
- import { fiscalCalendarPassThrough as oe } from "./fiscal-pass-through.js";
11
- import { DatePickerShell as ae } from "./date-picker-shell.js";
12
- import { usePickerDismissActionsRef as ie, usePickerFooterDismissNudge as se, handleReadonlyPickerKeyDown as ce, handlePickerSurfacePointerDown as le } from "./date-input-behavior.js";
13
- import { formatYearInput as pe } from "../../data-display/calendar/calendar-fiscal-labels.js";
14
- import { viewMonthFromYear as fe } from "../../data-display/calendar/calendar-year-utils.js";
15
- const de = n.forwardRef(
8
+ import { useImpactNovaI18n as oe } from "../../../i18n/use-impact-nova-i18n.js";
9
+ import { buildDateBoundsMatcher as ae } from "../../../lib/date-bounds-matcher.js";
10
+ import { fiscalCalendarPassThrough as ie } from "./fiscal-pass-through.js";
11
+ import { DatePickerShell as se } from "./date-picker-shell.js";
12
+ import { usePickerDismissActionsRef as ce, usePickerFooterDismissNudge as le, handleReadonlyPickerKeyDown as pe, handlePickerSurfacePointerDown as fe } from "./date-input-behavior.js";
13
+ import { formatYearInput as de } from "../../data-display/calendar/calendar-fiscal-labels.js";
14
+ import { viewMonthFromYear as ue } from "../../data-display/calendar/calendar-year-utils.js";
15
+ const me = n.forwardRef(
16
16
  ({
17
17
  value: t,
18
18
  onChange: f,
@@ -31,27 +31,31 @@ const de = n.forwardRef(
31
31
  fiscalYearStartMonth: K,
32
32
  fiscalConfig: g,
33
33
  showPresets: j,
34
- showIntervalCaption: F = !1,
35
- ...L
36
- }, z) => {
37
- const { t: a } = re(), E = D ?? a("datePicker.selectMultipleYears"), H = g?.fyLabel ?? "fy-long", d = n.useRef(null), k = n.useRef(null);
38
- n.useImperativeHandle(z, () => d.current);
39
- const [i, s] = n.useState(!1), u = n.useRef(!1), P = ie(), { footerFlashKey: V, footerFlashTarget: B, popoverHandlers: q } = se(c, i, P, k), [C, l] = n.useState(t), [G, J] = n.useState(fe(t?.[0]));
34
+ showPeriodBoundaries: F,
35
+ autoNavigateToAvailable: L,
36
+ showIntervalCaption: z = !1,
37
+ ...E
38
+ }, H) => {
39
+ const { t: a } = oe(), V = D ?? a("datePicker.selectMultipleYears"), B = g?.fyLabel ?? "fy-long", d = n.useRef(null), k = n.useRef(null);
40
+ n.useImperativeHandle(H, () => d.current);
41
+ const [i, s] = n.useState(!1), u = n.useRef(!1), P = ce(), { footerFlashKey: q, footerFlashTarget: G, popoverHandlers: J } = le(c, i, P, k), [C, l] = n.useState(t), [Q, U] = n.useState(ue(t?.[0]));
40
42
  n.useEffect(() => {
41
43
  i || l(t);
42
44
  }, [i, t]);
43
- const m = n.useCallback(() => s(!1), []), Q = oe({
45
+ const m = n.useCallback(() => s(!1), []), W = ie({
44
46
  calendarKind: O,
45
47
  fiscalMode: T,
46
48
  granularity: w,
47
49
  fiscalMonthPattern: v,
48
50
  fiscalYearStartMonth: K,
49
51
  fiscalConfig: g,
50
- showPresets: j
51
- }), U = (e) => {
52
+ showPresets: j,
53
+ showPeriodBoundaries: F,
54
+ autoNavigateToAvailable: L
55
+ }), X = (e) => {
52
56
  const p = Array.isArray(e) && e.length > 0 ? e : void 0;
53
57
  l(p), c || f?.(p);
54
- }, W = () => {
58
+ }, Z = () => {
55
59
  f?.(C), m();
56
60
  }, h = () => {
57
61
  l(t), m();
@@ -61,9 +65,9 @@ const de = n.forwardRef(
61
65
  n.useLayoutEffect(() => {
62
66
  P.current = { onDismiss: h, resolveFlash: () => "cancel" };
63
67
  });
64
- const X = t && t.length > 0 ? t.length === 1 ? pe(t[0], H) : a("datePicker.yearsSelected", { count: t.length }) : "";
68
+ const _ = t && t.length > 0 ? t.length === 1 ? de(t[0], B) : a("datePicker.yearsSelected", { count: t.length }) : "";
65
69
  return /* @__PURE__ */ r(
66
- ae,
70
+ se,
67
71
  {
68
72
  open: i,
69
73
  disabled: o,
@@ -74,26 +78,26 @@ const de = n.forwardRef(
74
78
  onOpenAutoFocus: (e) => {
75
79
  u.current || e.preventDefault(), u.current = !1;
76
80
  },
77
- popoverHandlers: q,
81
+ popoverHandlers: J,
78
82
  trigger: /* @__PURE__ */ r(
79
83
  "div",
80
84
  {
81
85
  ref: k,
82
86
  "data-component": "multi-year-picker",
83
87
  "data-state": i ? "open" : "closed",
84
- onPointerDown: (e) => le({
88
+ onPointerDown: (e) => fe({
85
89
  disabled: o,
86
90
  event: e,
87
91
  onOpen: () => s(!0),
88
92
  focusField: () => d.current?.focus()
89
93
  }),
90
94
  children: /* @__PURE__ */ r(
91
- ee,
95
+ re,
92
96
  {
93
97
  ref: d,
94
- value: X,
98
+ value: _,
95
99
  readOnly: !0,
96
- onKeyDown: (e) => ce(e, {
100
+ onKeyDown: (e) => pe(e, {
97
101
  disabled: o,
98
102
  open: i,
99
103
  onOpen: () => s(!0),
@@ -103,10 +107,10 @@ const de = n.forwardRef(
103
107
  }
104
108
  }),
105
109
  onClick: () => !o && s(!0),
106
- placeholder: E,
110
+ placeholder: V,
107
111
  disabled: o,
108
112
  "data-form-control": "input",
109
- className: $("cursor-pointer", I),
113
+ className: te("cursor-pointer", I),
110
114
  suffix: /* @__PURE__ */ y("div", { className: "flex items-center gap-1", children: [
111
115
  t && t.length > 0 && !o ? /* @__PURE__ */ y(M, { children: [
112
116
  /* @__PURE__ */ r(x, { asChild: !0, children: /* @__PURE__ */ r(
@@ -119,7 +123,7 @@ const de = n.forwardRef(
119
123
  e.stopPropagation(), b();
120
124
  },
121
125
  className: "inline-flex size-4 items-center justify-center border-none bg-transparent p-0",
122
- children: /* @__PURE__ */ r(Z, { className: "size-3 hover:text-content" })
126
+ children: /* @__PURE__ */ r($, { className: "size-3 hover:text-content" })
123
127
  }
124
128
  ) }),
125
129
  /* @__PURE__ */ r(R, { variant: "tertiary", side: "top", children: a("calendar.clear") })
@@ -136,44 +140,44 @@ const de = n.forwardRef(
136
140
  e.stopPropagation(), o || s((p) => !p);
137
141
  },
138
142
  className: "inline-flex items-center justify-center border-none bg-transparent p-0",
139
- children: /* @__PURE__ */ r(_, { className: "h-4 w-4 text-secondary-foreground" })
143
+ children: /* @__PURE__ */ r(ee, { className: "h-4 w-4 text-secondary-foreground" })
140
144
  }
141
145
  ) }),
142
146
  /* @__PURE__ */ r(R, { variant: "tertiary", side: "top", children: a("datePicker.selectMultipleYears") })
143
147
  ] })
144
148
  ] }),
145
- ...L
149
+ ...E
146
150
  }
147
151
  )
148
152
  }
149
153
  ),
150
154
  children: /* @__PURE__ */ r(
151
- te,
155
+ ne,
152
156
  {
153
157
  pickerType: "year",
154
158
  yearMode: "multiple",
155
159
  selectedYear: C,
156
- footerFlashKey: V,
157
- footerFlashTarget: B,
158
- onYearSelect: U,
159
- month: G,
160
- onMonthChange: J,
161
- disabled: ne(Y, N),
160
+ footerFlashKey: q,
161
+ footerFlashTarget: G,
162
+ onYearSelect: X,
163
+ month: Q,
164
+ onMonthChange: U,
165
+ disabled: ae(Y, N),
162
166
  startMonth: S,
163
167
  endMonth: A,
164
168
  showFooter: c,
165
- onApply: W,
169
+ onApply: Z,
166
170
  onCancel: h,
167
171
  onClear: b,
168
- showIntervalCaption: F,
169
- ...Q
172
+ showIntervalCaption: z,
173
+ ...W
170
174
  }
171
175
  )
172
176
  }
173
177
  );
174
178
  }
175
179
  );
176
- de.displayName = "MultiYearPicker";
180
+ me.displayName = "MultiYearPicker";
177
181
  export {
178
- de as MultiYearPicker
182
+ me as MultiYearPicker
179
183
  };
@@ -0,0 +1,2 @@
1
+ import { Decorator } from '@storybook/react-vite';
2
+ export declare const withPickerStoryCanvas: Decorator;
@@ -1,18 +1,18 @@
1
1
  import { jsx as r, jsxs as y } from "react/jsx-runtime";
2
2
  import * as t from "react";
3
- import { Cross as Y, CalendarMonth as Z } from "impact-nova-icons";
4
- import { cn as _ } from "../../../lib/utils.js";
5
- import { Input as $ } from "../input/input.js";
6
- import { Calendar as q } from "../../data-display/calendar/calendar.js";
3
+ import { Cross as _, CalendarMonth as $ } from "impact-nova-icons";
4
+ import { cn as q } from "../../../lib/utils.js";
5
+ import { Input as ee } from "../input/input.js";
6
+ import { Calendar as re } from "../../data-display/calendar/calendar.js";
7
7
  import { Tooltip as x, TooltipTrigger as b, TooltipContent as R } from "../../feedback/tooltip/tooltip.js";
8
- import { useImpactNovaI18n as ee } from "../../../i18n/use-impact-nova-i18n.js";
9
- import { buildDateBoundsMatcher as re } from "../../../lib/date-bounds-matcher.js";
10
- import { fiscalCalendarPassThrough as te } from "./fiscal-pass-through.js";
11
- import { DatePickerShell as ne } from "./date-picker-shell.js";
12
- import { usePickerDismissActionsRef as oe, usePickerFooterDismissNudge as ae, handleReadonlyPickerKeyDown as ie, handlePickerSurfacePointerDown as ce } from "./date-input-behavior.js";
13
- import { formatQuarterInput as se } from "../../data-display/calendar/calendar-fiscal-labels.js";
14
- import { viewMonthFromQuarter as le } from "../../data-display/calendar/calendar-quarter-utils.js";
15
- const pe = t.forwardRef(
8
+ import { useImpactNovaI18n as te } from "../../../i18n/use-impact-nova-i18n.js";
9
+ import { buildDateBoundsMatcher as ne } from "../../../lib/date-bounds-matcher.js";
10
+ import { fiscalCalendarPassThrough as oe } from "./fiscal-pass-through.js";
11
+ import { DatePickerShell as ae } from "./date-picker-shell.js";
12
+ import { usePickerDismissActionsRef as ie, usePickerFooterDismissNudge as ce, handleReadonlyPickerKeyDown as se, handlePickerSurfacePointerDown as le } from "./date-input-behavior.js";
13
+ import { formatQuarterInput as pe } from "../../data-display/calendar/calendar-fiscal-labels.js";
14
+ import { viewMonthFromQuarter as fe } from "../../data-display/calendar/calendar-quarter-utils.js";
15
+ const ue = t.forwardRef(
16
16
  ({
17
17
  value: n,
18
18
  onChange: u,
@@ -31,26 +31,30 @@ const pe = t.forwardRef(
31
31
  fiscalYearStartMonth: M,
32
32
  fiscalConfig: K,
33
33
  showPresets: j,
34
- ...F
35
- }, z) => {
36
- const { t: a } = ee(), E = D ?? a("datePicker.selectQuarter"), d = t.useRef(null), k = t.useRef(null);
37
- t.useImperativeHandle(z, () => d.current);
38
- const [i, c] = t.useState(!1), P = oe(), { footerFlashKey: H, footerFlashTarget: L, popoverHandlers: V } = ae(s, i, P, k), m = t.useRef(!1), [g, l] = t.useState(n), [B, G] = t.useState(le(n));
34
+ showPeriodBoundaries: F,
35
+ autoNavigateToAvailable: z,
36
+ ...E
37
+ }, H) => {
38
+ const { t: a } = te(), L = D ?? a("datePicker.selectQuarter"), d = t.useRef(null), k = t.useRef(null);
39
+ t.useImperativeHandle(H, () => d.current);
40
+ const [i, c] = t.useState(!1), P = ie(), { footerFlashKey: V, footerFlashTarget: B, popoverHandlers: G } = ce(s, i, P, k), m = t.useRef(!1), [g, l] = t.useState(n), [J, U] = t.useState(fe(n));
39
41
  t.useEffect(() => {
40
42
  i || l(n);
41
43
  }, [i, n]);
42
- const p = t.useCallback(() => c(!1), []), J = te({
44
+ const p = t.useCallback(() => c(!1), []), W = oe({
43
45
  calendarKind: I,
44
46
  fiscalMode: O,
45
47
  granularity: T,
46
48
  fiscalMonthPattern: w,
47
49
  fiscalYearStartMonth: M,
48
50
  fiscalConfig: K,
49
- showPresets: j
50
- }), U = (e) => {
51
+ showPresets: j,
52
+ showPeriodBoundaries: F,
53
+ autoNavigateToAvailable: z
54
+ }), X = (e) => {
51
55
  const f = e && !Array.isArray(e) && !("from" in e) && !("to" in e) ? e : void 0;
52
56
  l(f), s || (u?.(f), p());
53
- }, W = () => {
57
+ }, Y = () => {
54
58
  u?.(g), p();
55
59
  }, h = () => {
56
60
  l(n), p();
@@ -60,9 +64,9 @@ const pe = t.forwardRef(
60
64
  t.useLayoutEffect(() => {
61
65
  P.current = { onDismiss: h, resolveFlash: () => "cancel" };
62
66
  });
63
- const X = n ? se(n) : "";
67
+ const Z = n ? pe(n) : "";
64
68
  return /* @__PURE__ */ r(
65
- ne,
69
+ ae,
66
70
  {
67
71
  open: i,
68
72
  disabled: o,
@@ -73,26 +77,26 @@ const pe = t.forwardRef(
73
77
  onOpenAutoFocus: (e) => {
74
78
  m.current || e.preventDefault(), m.current = !1;
75
79
  },
76
- popoverHandlers: V,
80
+ popoverHandlers: G,
77
81
  trigger: /* @__PURE__ */ r(
78
82
  "div",
79
83
  {
80
84
  ref: k,
81
85
  "data-component": "quarter-picker",
82
86
  "data-state": i ? "open" : "closed",
83
- onPointerDown: (e) => ce({
87
+ onPointerDown: (e) => le({
84
88
  disabled: o,
85
89
  event: e,
86
90
  onOpen: () => c(!0),
87
91
  focusField: () => d.current?.focus()
88
92
  }),
89
93
  children: /* @__PURE__ */ r(
90
- $,
94
+ ee,
91
95
  {
92
96
  ref: d,
93
- value: X,
97
+ value: Z,
94
98
  readOnly: !0,
95
- onKeyDown: (e) => ie(e, {
99
+ onKeyDown: (e) => se(e, {
96
100
  disabled: o,
97
101
  open: i,
98
102
  onOpen: () => c(!0),
@@ -102,10 +106,10 @@ const pe = t.forwardRef(
102
106
  }
103
107
  }),
104
108
  onClick: () => !o && c(!0),
105
- placeholder: E,
109
+ placeholder: L,
106
110
  disabled: o,
107
111
  "data-form-control": "input",
108
- className: _("cursor-pointer", A),
112
+ className: q("cursor-pointer", A),
109
113
  suffix: /* @__PURE__ */ y("div", { className: "flex items-center gap-1", children: [
110
114
  n && !o ? /* @__PURE__ */ y(x, { children: [
111
115
  /* @__PURE__ */ r(b, { asChild: !0, children: /* @__PURE__ */ r(
@@ -118,7 +122,7 @@ const pe = t.forwardRef(
118
122
  e.stopPropagation(), C();
119
123
  },
120
124
  className: "inline-flex size-4 items-center justify-center border-none bg-transparent p-0",
121
- children: /* @__PURE__ */ r(Y, { className: "size-3 hover:text-content" })
125
+ children: /* @__PURE__ */ r(_, { className: "size-3 hover:text-content" })
122
126
  }
123
127
  ) }),
124
128
  /* @__PURE__ */ r(R, { variant: "tertiary", side: "top", children: a("calendar.clear") })
@@ -135,42 +139,42 @@ const pe = t.forwardRef(
135
139
  e.stopPropagation(), o || c((f) => !f);
136
140
  },
137
141
  className: "inline-flex items-center justify-center border-none bg-transparent p-0",
138
- children: /* @__PURE__ */ r(Z, { className: "h-4 w-4 text-secondary-foreground" })
142
+ children: /* @__PURE__ */ r($, { className: "h-4 w-4 text-secondary-foreground" })
139
143
  }
140
144
  ) }),
141
145
  /* @__PURE__ */ r(R, { variant: "tertiary", side: "top", children: a("datePicker.selectQuarter") })
142
146
  ] })
143
147
  ] }),
144
- ...F
148
+ ...E
145
149
  }
146
150
  )
147
151
  }
148
152
  ),
149
153
  children: /* @__PURE__ */ r(
150
- q,
154
+ re,
151
155
  {
152
156
  pickerType: "quarter",
153
157
  selectedQuarters: g,
154
- footerFlashKey: H,
155
- footerFlashTarget: L,
156
- onQuarterSelect: U,
157
- month: B,
158
- onMonthChange: G,
159
- disabled: re(Q, v),
158
+ footerFlashKey: V,
159
+ footerFlashTarget: B,
160
+ onQuarterSelect: X,
161
+ month: J,
162
+ onMonthChange: U,
163
+ disabled: ne(Q, v),
160
164
  startMonth: N,
161
165
  endMonth: S,
162
166
  showFooter: s,
163
- onApply: W,
167
+ onApply: Y,
164
168
  onCancel: h,
165
169
  onClear: C,
166
- ...J
170
+ ...W
167
171
  }
168
172
  )
169
173
  }
170
174
  );
171
175
  }
172
176
  );
173
- pe.displayName = "QuarterPicker";
177
+ ue.displayName = "QuarterPicker";
174
178
  export {
175
- pe as QuarterPicker
179
+ ue as QuarterPicker
176
180
  };