impact-nova 2.5.7 → 2.5.9

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 (159) hide show
  1. package/dist/components/data/ag-grid-react/ag-grid.types.d.ts +2 -2
  2. package/dist/components/data/ag-grid-react/headers/components/date-filter-picker.d.ts +4 -2
  3. package/dist/components/data/ag-grid-react/headers/header-search-input.js +65 -65
  4. package/dist/components/data/ag-grid-react/headers/utils/date-utils.js +55 -48
  5. package/dist/components/data-display/calendar/calendar-apply-validation.d.ts +4 -2
  6. package/dist/components/data-display/calendar/calendar-apply-validation.js +80 -61
  7. package/dist/components/data-display/calendar/calendar-config.d.ts +13 -5
  8. package/dist/components/data-display/calendar/calendar-config.js +31 -20
  9. package/dist/components/data-display/calendar/calendar-day-button.js +43 -35
  10. package/dist/components/data-display/calendar/calendar-day-hover.d.ts +8 -0
  11. package/dist/components/data-display/calendar/calendar-day-hover.js +20 -0
  12. package/dist/components/data-display/calendar/calendar-day-picker-classnames.d.ts +8 -1
  13. package/dist/components/data-display/calendar/calendar-day-picker-classnames.js +40 -20
  14. package/dist/components/data-display/calendar/calendar-day-picker-components.d.ts +12 -1
  15. package/dist/components/data-display/calendar/calendar-day-picker-components.js +196 -102
  16. package/dist/components/data-display/calendar/calendar-day-picker-view.d.ts +11 -3
  17. package/dist/components/data-display/calendar/calendar-day-picker-view.js +136 -92
  18. package/dist/components/data-display/calendar/calendar-fiscal-labels.d.ts +38 -0
  19. package/dist/components/data-display/calendar/calendar-fiscal-labels.js +90 -0
  20. package/dist/components/data-display/calendar/calendar-fiscal-period-nav.d.ts +16 -0
  21. package/dist/components/data-display/calendar/calendar-fiscal-period-nav.js +41 -0
  22. package/dist/components/data-display/calendar/calendar-footer-summary.d.ts +13 -4
  23. package/dist/components/data-display/calendar/calendar-footer-summary.js +101 -50
  24. package/dist/components/data-display/calendar/calendar-footer.d.ts +16 -7
  25. package/dist/components/data-display/calendar/calendar-footer.js +88 -66
  26. package/dist/components/data-display/calendar/calendar-gregorian-presets.d.ts +2 -0
  27. package/dist/components/data-display/calendar/calendar-gregorian-presets.js +26 -0
  28. package/dist/components/data-display/calendar/calendar-interval-caption.d.ts +1 -0
  29. package/dist/components/data-display/calendar/calendar-interval-caption.js +10 -0
  30. package/dist/components/data-display/calendar/calendar-interval-utils.d.ts +23 -0
  31. package/dist/components/data-display/calendar/calendar-interval-utils.js +154 -0
  32. package/dist/components/data-display/calendar/calendar-month-panes.d.ts +5 -1
  33. package/dist/components/data-display/calendar/calendar-month-panes.js +9 -7
  34. package/dist/components/data-display/calendar/calendar-month-picker-panel.d.ts +5 -1
  35. package/dist/components/data-display/calendar/calendar-month-picker-panel.js +76 -77
  36. package/dist/components/data-display/calendar/calendar-month-utils.d.ts +2 -0
  37. package/dist/components/data-display/calendar/calendar-month-utils.js +69 -60
  38. package/dist/components/data-display/calendar/calendar-padding-week.utils.d.ts +15 -0
  39. package/dist/components/data-display/calendar/calendar-padding-week.utils.js +22 -3
  40. package/dist/components/data-display/calendar/calendar-panel-context.d.ts +1 -1
  41. package/dist/components/data-display/calendar/calendar-period-cell.d.ts +18 -0
  42. package/dist/components/data-display/calendar/calendar-period-cell.js +89 -0
  43. package/dist/components/data-display/calendar/calendar-period-keyboard.d.ts +2 -0
  44. package/dist/components/data-display/calendar/calendar-period-keyboard.js +18 -0
  45. package/dist/components/data-display/calendar/calendar-preset-strip.d.ts +6 -0
  46. package/dist/components/data-display/calendar/calendar-preset-strip.js +26 -0
  47. package/dist/components/data-display/calendar/calendar-quarter-panes.d.ts +24 -0
  48. package/dist/components/data-display/calendar/calendar-quarter-panes.js +115 -0
  49. package/dist/components/data-display/calendar/calendar-quarter-utils.d.ts +19 -0
  50. package/dist/components/data-display/calendar/calendar-quarter-utils.js +95 -0
  51. package/dist/components/data-display/calendar/calendar-selection-appearance.d.ts +38 -0
  52. package/dist/components/data-display/calendar/calendar-selection-appearance.js +72 -0
  53. package/dist/components/data-display/calendar/calendar-selection.d.ts +20 -0
  54. package/dist/components/data-display/calendar/calendar-selection.js +31 -0
  55. package/dist/components/data-display/calendar/calendar-week-number-cell.d.ts +6 -1
  56. package/dist/components/data-display/calendar/calendar-week-number-cell.js +53 -38
  57. package/dist/components/data-display/calendar/calendar-week-number-header.d.ts +4 -0
  58. package/dist/components/data-display/calendar/calendar-week-number-header.js +15 -0
  59. package/dist/components/data-display/calendar/calendar-week-utils.d.ts +11 -3
  60. package/dist/components/data-display/calendar/calendar-week-utils.js +49 -42
  61. package/dist/components/data-display/calendar/calendar-year-panes.d.ts +18 -0
  62. package/dist/components/data-display/calendar/calendar-year-panes.js +98 -0
  63. package/dist/components/data-display/calendar/calendar-year-utils.d.ts +17 -0
  64. package/dist/components/data-display/calendar/calendar-year-utils.js +75 -0
  65. package/dist/components/data-display/calendar/calendar.d.ts +1 -1
  66. package/dist/components/data-display/calendar/calendar.js +303 -181
  67. package/dist/components/data-display/calendar/calendar.types.d.ts +53 -16
  68. package/dist/components/data-display/calendar/fiscal-period-caption-select.d.ts +7 -0
  69. package/dist/components/data-display/calendar/fiscal-period-caption-select.js +63 -0
  70. package/dist/components/data-display/calendar/index.d.ts +1 -1
  71. package/dist/components/data-display/calendar/use-calendar-day-picker-config.d.ts +12 -2
  72. package/dist/components/data-display/calendar/use-calendar-day-picker-config.js +92 -62
  73. package/dist/components/data-display/calendar/use-calendar-state.d.ts +31 -11
  74. package/dist/components/data-display/calendar/use-calendar-state.js +370 -163
  75. package/dist/components/data-display/calendar/use-fiscal-calendar.d.ts +5 -0
  76. package/dist/components/data-display/calendar/use-fiscal-calendar.js +25 -0
  77. package/dist/components/feedback/tooltip/overflow-tooltip.js +57 -57
  78. package/dist/components/forms/date-picker/date-input-behavior.d.ts +7 -0
  79. package/dist/components/forms/date-picker/date-input-behavior.js +28 -24
  80. package/dist/components/forms/date-picker/date-picker-shell.d.ts +13 -0
  81. package/dist/components/forms/date-picker/date-picker-shell.js +31 -0
  82. package/dist/components/forms/date-picker/date-picker.js +187 -167
  83. package/dist/components/forms/date-picker/date-picker.types.d.ts +90 -43
  84. package/dist/components/forms/date-picker/date-range-picker.js +273 -224
  85. package/dist/components/forms/date-picker/fiscal-pass-through.d.ts +13 -0
  86. package/dist/components/forms/date-picker/fiscal-pass-through.js +17 -0
  87. package/dist/components/forms/date-picker/fiscal-period-format.d.ts +9 -0
  88. package/dist/components/forms/date-picker/fiscal-period-format.js +50 -0
  89. package/dist/components/forms/date-picker/index.d.ts +12 -0
  90. package/dist/components/forms/date-picker/index.js +19 -7
  91. package/dist/components/forms/date-picker/month-picker.js +225 -182
  92. package/dist/components/forms/date-picker/month-range-picker.js +134 -110
  93. package/dist/components/forms/date-picker/multi-date-picker.js +77 -56
  94. package/dist/components/forms/date-picker/multi-month-picker.js +78 -57
  95. package/dist/components/forms/date-picker/multi-quarter-picker.d.ts +3 -0
  96. package/dist/components/forms/date-picker/multi-quarter-picker.js +177 -0
  97. package/dist/components/forms/date-picker/multi-week-picker.js +81 -70
  98. package/dist/components/forms/date-picker/multi-year-picker.d.ts +3 -0
  99. package/dist/components/forms/date-picker/multi-year-picker.js +179 -0
  100. package/dist/components/forms/date-picker/quarter-picker.d.ts +3 -0
  101. package/dist/components/forms/date-picker/quarter-picker.js +176 -0
  102. package/dist/components/forms/date-picker/quarter-range-picker.d.ts +3 -0
  103. package/dist/components/forms/date-picker/quarter-range-picker.js +177 -0
  104. package/dist/components/forms/date-picker/week-picker.js +148 -137
  105. package/dist/components/forms/date-picker/week-range-picker.js +216 -205
  106. package/dist/components/forms/date-picker/year-picker.d.ts +3 -0
  107. package/dist/components/forms/date-picker/year-picker.js +176 -0
  108. package/dist/components/forms/date-picker/year-range-picker.d.ts +3 -0
  109. package/dist/components/forms/date-picker/year-range-picker.js +179 -0
  110. package/dist/components/forms/smart-input/smart-input.js +106 -85
  111. package/dist/components/forms/smart-input/smart-input.types.d.ts +5 -0
  112. package/dist/components/forms/textarea/textarea.js +29 -28
  113. package/dist/components/forms/textarea/textarea.types.d.ts +1 -0
  114. package/dist/form-react/Fields/DateInputField.js +63 -58
  115. package/dist/form-react/Fields/DateRangeField.js +42 -37
  116. package/dist/form-react/Fields/MonthRangeField.js +50 -45
  117. package/dist/form-react/Fields/MultiWeekPickerField.js +7 -7
  118. package/dist/form-react/Fields/TextField.js +25 -24
  119. package/dist/form-react/Fields/WeekRangePicker.js +44 -45
  120. package/dist/form-react/components/FieldRenderer.js +21 -23
  121. package/dist/form-react/registry/defaultFieldRegistrations.d.ts +9 -1
  122. package/dist/form-react/registry/defaultFieldRegistrations.js +27 -36
  123. package/dist/form-react/registry/resolveFieldComponent.d.ts +3 -2
  124. package/dist/form-react/registry/resolveFieldComponent.js +9 -133
  125. package/dist/form-react/types/fields.types.d.ts +25 -4
  126. package/dist/form-react/utils/date.utils.d.ts +1 -1
  127. package/dist/form-react/utils/date.utils.js +38 -38
  128. package/dist/i18n/defaultMessages.d.ts +19 -1
  129. package/dist/i18n/defaultMessages.js +37 -20
  130. package/dist/i18n/locales/de.js +18 -1
  131. package/dist/i18n/locales/es.js +18 -1
  132. package/dist/i18n/locales/hi.js +18 -1
  133. package/dist/i18n/locales/kn.js +18 -1
  134. package/dist/impact-nova-components.css +379 -3
  135. package/dist/impact-nova.css +1 -1
  136. package/dist/index.js +528 -516
  137. package/dist/lib/fiscal-calendar/build-year.d.ts +8 -0
  138. package/dist/lib/fiscal-calendar/build-year.js +173 -0
  139. package/dist/lib/fiscal-calendar/civil-date.d.ts +21 -0
  140. package/dist/lib/fiscal-calendar/civil-date.js +94 -0
  141. package/dist/lib/fiscal-calendar/index.d.ts +10 -0
  142. package/dist/lib/fiscal-calendar/index.js +40 -0
  143. package/dist/lib/fiscal-calendar/lookup.d.ts +4 -0
  144. package/dist/lib/fiscal-calendar/lookup.js +70 -0
  145. package/dist/lib/fiscal-calendar/presets.d.ts +8 -0
  146. package/dist/lib/fiscal-calendar/presets.js +99 -0
  147. package/dist/lib/fiscal-calendar/selection.d.ts +18 -0
  148. package/dist/lib/fiscal-calendar/selection.js +32 -0
  149. package/dist/lib/fiscal-calendar/types.d.ts +145 -0
  150. package/dist/lib/fiscal-calendar/types.js +10 -0
  151. package/dist/lib/fiscal-calendar/week-selection.d.ts +22 -0
  152. package/dist/lib/fiscal-calendar/week-selection.js +107 -0
  153. package/dist/llms/rules/best-practices.js +1 -1
  154. package/dist/llms/rules/installation.js +1 -1
  155. package/dist/llms/rules/real-world-patterns.js +1 -1
  156. package/dist/llms/rules/requirements.js +1 -1
  157. package/package.json +5 -1
  158. package/dist/lib/fiscal-calendar.d.ts +0 -62
  159. package/dist/lib/fiscal-calendar.js +0 -99
@@ -1,109 +1,108 @@
1
1
  import { jsxs as d, jsx as t } from "react/jsx-runtime";
2
- import { ChevronRight as v } from "impact-nova-icons";
3
- import { cn as x } from "../../../lib/utils.js";
4
- import { Button as m } from "../../primitives/button/button.js";
5
- import { Select as W } from "../../forms/select/select.js";
6
- import { isMonthRangeSelection as q } from "../../forms/date-picker/calendar-selection-adapters.js";
7
- function K({
8
- yearOffset: s = 0,
2
+ import { ChevronRight as g } from "impact-nova-icons";
3
+ import { cn as A } from "../../../lib/utils.js";
4
+ import { Button as f } from "../../primitives/button/button.js";
5
+ import { Select as D } from "../../forms/select/select.js";
6
+ import { isMonthRangeSelection as F } from "../../forms/date-picker/calendar-selection-adapters.js";
7
+ import { CalendarPeriodCell as G } from "./calendar-period-cell.js";
8
+ function Z({
9
+ yearOffset: o = 0,
9
10
  displayYear: e,
10
- monthMode: h,
11
- monthsShort: N,
11
+ monthMode: s,
12
+ monthsShort: u,
12
13
  showFooter: p,
13
- pendingMonthSelection: w,
14
- selectedMonths: C,
15
- resolvedStartYear: S,
16
- resolvedEndYear: j,
17
- yearOptions: k,
18
- previousYearLabel: u,
19
- nextYearLabel: g,
20
- isMonthSelected: z,
21
- getMonthRangeProps: R,
22
- isMonthDisabled: M,
23
- onPreviousYear: P,
24
- onNextYear: T,
25
- onYearSelect: B,
26
- onMonthClick: E
14
+ pendingMonthSelection: v,
15
+ selectedMonths: N,
16
+ resolvedStartYear: x,
17
+ resolvedEndYear: C,
18
+ yearOptions: l,
19
+ previousYearLabel: a,
20
+ nextYearLabel: r,
21
+ isMonthSelected: S,
22
+ getMonthRangeProps: k,
23
+ isMonthDisabled: w,
24
+ onPreviousYear: j,
25
+ onNextYear: z,
26
+ onYearSelect: b,
27
+ onMonthClick: R,
28
+ periodLabels: i
27
29
  }) {
28
30
  return /* @__PURE__ */ d("div", { className: "flex flex-col gap-4 p-3 min-w-[280px]", children: [
29
31
  /* @__PURE__ */ d("div", { className: "flex items-center justify-between", children: [
30
- s === 0 ? /* @__PURE__ */ t(
31
- m,
32
+ o === 0 ? /* @__PURE__ */ t(
33
+ f,
32
34
  {
33
35
  variant: "ghost",
34
36
  size: "icon",
35
37
  className: "h-7 w-7 shrink-0",
36
- "aria-label": u,
37
- title: u,
38
- disabled: e <= S,
39
- onClick: () => P(e),
40
- children: /* @__PURE__ */ t(v, { size: 16, className: "rotate-180" })
38
+ "aria-label": a,
39
+ title: a,
40
+ disabled: e <= x,
41
+ onClick: () => j(e),
42
+ children: /* @__PURE__ */ t(g, { size: 16, className: "rotate-180" })
41
43
  }
42
44
  ) : /* @__PURE__ */ t("span", { className: "size-7 shrink-0", "aria-hidden": !0 }),
43
45
  /* @__PURE__ */ t("div", { className: "flex flex-1 items-center justify-center", children: /* @__PURE__ */ t(
44
- W,
46
+ D,
45
47
  {
46
- value: { label: e.toString(), value: e.toString() },
47
- onChange: (r) => {
48
- r && "value" in r && B(parseInt(r.value), s);
48
+ value: l.find((n) => n.value === e.toString()) ?? {
49
+ label: e.toString(),
50
+ value: e.toString()
51
+ },
52
+ onChange: (n) => {
53
+ n && "value" in n && b(parseInt(n.value), o);
49
54
  },
50
55
  scrollToSelectedOnOpen: !0,
51
- options: k,
56
+ options: l,
52
57
  parentClassName: "flex items-center justify-center",
53
58
  className: "w-[200px]",
54
59
  menuWidth: "140px"
55
60
  }
56
61
  ) }),
57
- (h === "single" || s === 1) && /* @__PURE__ */ t(
58
- m,
62
+ (s === "single" || o === 1) && /* @__PURE__ */ t(
63
+ f,
59
64
  {
60
65
  variant: "ghost",
61
66
  size: "icon",
62
67
  className: "h-7 w-7",
63
- "aria-label": g,
64
- title: g,
65
- disabled: e >= j,
66
- onClick: () => T(e),
67
- children: /* @__PURE__ */ t(v, { className: "h-4 w-4" })
68
+ "aria-label": r,
69
+ title: r,
70
+ disabled: e >= C,
71
+ onClick: () => z(e),
72
+ children: /* @__PURE__ */ t(g, { className: "h-4 w-4" })
68
73
  }
69
74
  )
70
75
  ] }),
71
- /* @__PURE__ */ t("div", { className: "grid grid-cols-4 gap-x-0 gap-y-4", children: N.map((r, o) => {
72
- const f = z(e, o), { isStart: l, isEnd: i, isMiddle: a } = R(e, o), c = h === "range", b = p ? w : C, I = q(b) && !!b.to, n = M(e, o);
73
- return /* @__PURE__ */ d("div", { className: "group relative flex h-10 w-full items-center justify-center", children: [
74
- c && I && (a || l || i) && !n && /* @__PURE__ */ t(
75
- "div",
76
- {
77
- className: x(
78
- "absolute inset-x-0 inset-y-0 bg-accent",
79
- l && "left-1/2 -ml-5 rounded-l-full",
80
- i && "right-1/2 -mr-5 rounded-r-full",
81
- a && "inset-x-0",
82
- l && i && "inset-x-2 rounded-full"
83
- )
84
- }
85
- ),
86
- /* @__PURE__ */ t(
87
- m,
88
- {
89
- variant: "ghost",
90
- onClick: () => E(e, o),
91
- disabled: n,
92
- className: x(
93
- "relative z-10 h-10 w-10 rounded-lg p-0 text-sm font-normal transition-all",
94
- f && !c && !n && "bg-brand text-brand-foreground hover:bg-brand/90 hover:text-brand-foreground",
95
- c && (l || i) && !n && "rounded-lg bg-brand text-brand-foreground hover:bg-brand/90 hover:text-brand-foreground",
96
- !f && !n && "border border-transparent hover:border-brand hover:bg-accent hover:text-accent-foreground",
97
- a && !n && "text-accent-foreground",
98
- n && "cursor-not-allowed text-content-placeholder opacity-50"
99
- ),
100
- children: r
101
- }
102
- )
103
- ] }, r);
104
- }) })
76
+ /* @__PURE__ */ t(
77
+ "div",
78
+ {
79
+ "data-period-grid": "",
80
+ className: A("grid gap-x-0 gap-y-4", i ? "grid-cols-3" : "grid-cols-4"),
81
+ children: (i ?? u.map((n) => ({ label: n }))).map((n, c) => {
82
+ const m = n.label, P = S(e, c), { isStart: E, isEnd: M, isMiddle: T } = k(e, c), B = s === "range", h = p ? v : N, I = F(h) && !!h.to, W = w(e, c), q = "caption" in n && typeof n.caption == "string" ? n.caption : void 0;
83
+ return /* @__PURE__ */ t(
84
+ G,
85
+ {
86
+ selected: P,
87
+ disabled: W,
88
+ isRange: B,
89
+ isStart: E,
90
+ isEnd: M,
91
+ isMiddle: T,
92
+ hasRangeEnd: I,
93
+ size: i ? "period" : "month",
94
+ columns: i ? 3 : 4,
95
+ onClick: () => R(e, c),
96
+ caption: q,
97
+ children: m
98
+ },
99
+ m
100
+ );
101
+ })
102
+ }
103
+ )
105
104
  ] });
106
105
  }
107
106
  export {
108
- K as CalendarMonthPickerPanel
107
+ Z as CalendarMonthPickerPanel
109
108
  };
@@ -8,6 +8,8 @@ export declare function getMonthRangeProps(year: number, month: number, currentS
8
8
  isEnd: boolean;
9
9
  isMiddle: boolean;
10
10
  };
11
+ /** True when the interval lies completely outside `disabled.before` / `disabled.after`. */
12
+ export declare function isDateIntervalDisabled(start: Date, end: Date, disabled?: unknown): boolean;
11
13
  export declare function isMonthDisabled(year: number, monthIndex: number, disabled?: unknown): boolean;
12
14
  export declare function getAvailableYears(startMonth: Date, endMonth: Date): Option[];
13
15
  export declare function getAvailableMonths(year: number, monthsFull: string[], startMonth: Date, endMonth: Date): Option[];
@@ -1,88 +1,97 @@
1
- import { isMonthRangeSelection as m } from "../../forms/date-picker/calendar-selection-adapters.js";
2
- function l(r, o) {
3
- return r.year === o.year && r.month === o.month;
1
+ import { isMonthRangeSelection as d } from "../../forms/date-picker/calendar-selection-adapters.js";
2
+ function l(e, n) {
3
+ return e.fy != null && n.fy != null && e.period != null && n.period != null ? e.fy === n.fy && e.period === n.period : e.year === n.year && e.month === n.month;
4
4
  }
5
- function d(r, o, a) {
6
- if (a === "single") return r;
7
- if (a === "multiple") {
8
- const e = o || [];
9
- return e.some((i) => l(i, r)) ? e.filter((i) => !l(i, r)) : [...e, r];
5
+ function g(e, n, o) {
6
+ if (o === "single") return e;
7
+ if (o === "multiple") {
8
+ const a = n || [];
9
+ return a.some((f) => l(f, e)) ? a.filter((f) => !l(f, e)) : [...a, e];
10
10
  }
11
- const t = o;
12
- if (!t?.from || t.to) return { from: r };
11
+ const t = n;
12
+ if (!t?.from || t.to) return { from: e };
13
13
  const s = new Date(t.from.year, t.from.month, 1);
14
- return new Date(r.year, r.month, 1) < s ? { from: r, to: t.from } : { from: t.from, to: r };
14
+ return new Date(e.year, e.month, 1) < s ? { from: e, to: t.from } : { from: t.from, to: e };
15
15
  }
16
- function D(r, o, a) {
17
- if (!a) return !1;
18
- if (Array.isArray(a))
19
- return a.some((s) => s.year === r && s.month === o);
20
- if (m(a)) {
21
- const s = a, n = s.from, e = s.to;
22
- if (!n && !e) return !1;
23
- const f = new Date(r, o, 1).getTime();
24
- if (!n) return e ? f === new Date(e.year, e.month, 1).getTime() : !1;
25
- const i = new Date(n.year, n.month, 1).getTime();
26
- if (!e) return f === i;
27
- const u = new Date(e.year, e.month, 1).getTime();
28
- return f >= i && f <= u;
16
+ function m(e, n, o) {
17
+ if (!o) return !1;
18
+ if (Array.isArray(o)) {
19
+ const s = { year: e, month: n, fy: e, period: n + 1 };
20
+ return o.some((r) => l(r, s) || r.year === e && r.month === n);
21
+ }
22
+ if (d(o)) {
23
+ const s = o, r = s.from, a = s.to;
24
+ if (!r && !a) return !1;
25
+ const i = new Date(e, n, 1).getTime();
26
+ if (!r) return a ? i === new Date(a.year, a.month, 1).getTime() : !1;
27
+ const f = new Date(r.year, r.month, 1).getTime();
28
+ if (!a) return i === f;
29
+ const u = new Date(a.year, a.month, 1).getTime();
30
+ return i >= f && i <= u;
29
31
  }
30
- const t = a;
31
- return t.year === r && t.month === o;
32
+ const t = o;
33
+ return t.fy != null && t.period != null ? t.fy === e && t.period === n + 1 : t.year === e && t.month === n;
32
34
  }
33
- function c(r, o, a) {
34
- if (!a || !("from" in a))
35
+ function y(e, n, o) {
36
+ if (!o || !("from" in o))
35
37
  return { isStart: !1, isEnd: !1, isMiddle: !1 };
36
- const t = a, s = t.from, n = t.to;
37
- if (!s && !n) return { isStart: !1, isEnd: !1, isMiddle: !1 };
38
- const e = new Date(r, o, 1).getTime();
38
+ const t = o, s = t.from, r = t.to;
39
+ if (!s && !r) return { isStart: !1, isEnd: !1, isMiddle: !1 };
40
+ const a = new Date(e, n, 1).getTime();
39
41
  if (!s)
40
42
  return {
41
43
  isStart: !1,
42
- isEnd: n ? e === new Date(n.year, n.month, 1).getTime() : !1,
44
+ isEnd: r ? a === new Date(r.year, r.month, 1).getTime() : !1,
43
45
  isMiddle: !1
44
46
  };
45
- const f = new Date(s.year, s.month, 1).getTime();
46
- if (!n) return { isStart: e === f, isEnd: !1, isMiddle: !1 };
47
- const i = new Date(n.year, n.month, 1).getTime();
47
+ const i = new Date(s.year, s.month, 1).getTime();
48
+ if (!r) return { isStart: a === i, isEnd: !1, isMiddle: !1 };
49
+ const f = new Date(r.year, r.month, 1).getTime();
48
50
  return {
49
- isStart: e === f,
50
- isEnd: e === i,
51
- isMiddle: e > f && e < i
51
+ isStart: a === i,
52
+ isEnd: a === f,
53
+ isMiddle: a > i && a < f
52
54
  };
53
55
  }
54
- function h(r, o, a) {
55
- const t = a;
56
+ function D(e, n, o) {
57
+ const t = o;
56
58
  if (!t || typeof t != "object" || !("before" in t) && !("after" in t)) return !1;
57
- const s = new Date(r, o, 1, 0, 0, 0, 0), n = new Date(r, o + 1, 0, 23, 59, 59, 999);
58
- if (t.before) {
59
- const e = new Date(t.before);
60
- if (e.setHours(0, 0, 0, 0), n < e) return !0;
59
+ const s = new Date(e);
60
+ s.setHours(0, 0, 0, 0);
61
+ const r = new Date(n);
62
+ if (r.setHours(23, 59, 59, 999), t.before) {
63
+ const a = new Date(t.before);
64
+ if (a.setHours(0, 0, 0, 0), r < a) return !0;
61
65
  }
62
66
  if (t.after) {
63
- const e = new Date(t.after);
64
- if (e.setHours(23, 59, 59, 999), s > e) return !0;
67
+ const a = new Date(t.after);
68
+ if (a.setHours(23, 59, 59, 999), s > a) return !0;
65
69
  }
66
70
  return !1;
67
71
  }
68
- function w(r, o) {
69
- const a = r.getFullYear(), t = o.getFullYear(), s = [];
70
- for (let n = a; n <= t; n++)
71
- s.push({ label: n.toString(), value: n.toString() });
72
+ function w(e, n, o) {
73
+ const t = new Date(e, n, 1, 0, 0, 0, 0), s = new Date(e, n + 1, 0, 23, 59, 59, 999);
74
+ return D(t, s, o);
75
+ }
76
+ function h(e, n) {
77
+ const o = e.getFullYear(), t = n.getFullYear(), s = [];
78
+ for (let r = o; r <= t; r++)
79
+ s.push({ label: r.toString(), value: r.toString() });
72
80
  return s;
73
81
  }
74
- function y(r, o, a, t) {
75
- return o.map((s, n) => ({ label: s, value: n.toString() })).filter((s, n) => {
76
- const e = new Date(r, n, 1);
77
- return !(e < new Date(a.getFullYear(), a.getMonth(), 1) || e > new Date(t.getFullYear(), t.getMonth(), 1));
82
+ function p(e, n, o, t) {
83
+ return n.map((s, r) => ({ label: s, value: r.toString() })).filter((s, r) => {
84
+ const a = new Date(e, r, 1);
85
+ return !(a < new Date(o.getFullYear(), o.getMonth(), 1) || a > new Date(t.getFullYear(), t.getMonth(), 1));
78
86
  });
79
87
  }
80
88
  export {
81
- y as getAvailableMonths,
82
- w as getAvailableYears,
83
- c as getMonthRangeProps,
84
- h as isMonthDisabled,
85
- D as isMonthSelected,
89
+ p as getAvailableMonths,
90
+ h as getAvailableYears,
91
+ y as getMonthRangeProps,
92
+ D as isDateIntervalDisabled,
93
+ w as isMonthDisabled,
94
+ m as isMonthSelected,
86
95
  l as isSameMonth,
87
- d as nextMonthSelection
96
+ g as nextMonthSelection
88
97
  };
@@ -3,3 +3,18 @@ export declare function isCalendarPaddingWeek(week: {
3
3
  outside?: boolean;
4
4
  }>;
5
5
  }): boolean;
6
+ export declare function weekHasInMonthSelection(week: {
7
+ days: Array<{
8
+ date: Date;
9
+ outside?: boolean;
10
+ }>;
11
+ }, isSelected?: (date: Date) => boolean): boolean;
12
+ export declare function weekIntervalContinues(week: {
13
+ days: Array<{
14
+ date: Date;
15
+ outside?: boolean;
16
+ }>;
17
+ }, isSelected?: (date: Date) => boolean): {
18
+ prev: boolean;
19
+ next: boolean;
20
+ };
@@ -1,6 +1,25 @@
1
- function n(e) {
2
- return e.days.length > 0 && e.days.every((d) => d.outside);
1
+ function l(t) {
2
+ return t.days.length > 0 && t.days.every((n) => n.outside);
3
+ }
4
+ function d(t, n) {
5
+ return n ? t.days.some((e) => !e.outside && n(e.date)) : !1;
6
+ }
7
+ function i(t, n) {
8
+ return new Date(t.getFullYear(), t.getMonth(), t.getDate() + n);
9
+ }
10
+ function u(t, n) {
11
+ return t.getFullYear() !== n.getFullYear() || t.getMonth() !== n.getMonth();
12
+ }
13
+ function g(t, n) {
14
+ if (!n) return { prev: !1, next: !1 };
15
+ const e = t.days.filter((f) => !f.outside), o = e[0]?.date, r = e.at(-1)?.date, a = o ? i(o, -1) : void 0, s = r ? i(r, 1) : void 0;
16
+ return {
17
+ prev: !!(a && o && u(a, o) && n(a)),
18
+ next: !!(s && r && u(s, r) && n(s))
19
+ };
3
20
  }
4
21
  export {
5
- n as isCalendarPaddingWeek
22
+ l as isCalendarPaddingWeek,
23
+ d as weekHasInMonthSelection,
24
+ g as weekIntervalContinues
6
25
  };
@@ -1,3 +1,3 @@
1
1
  import * as React from "react";
2
- /** Passes panel index from MonthCaption to dropdown components. */
2
+ /** Passes panel index from Month to caption dropdowns and the week-number header. */
3
3
  export declare const PanelIndexContext: React.Context<number>;
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export type PeriodCellSize = "month" | "period" | "quarter" | "year" | "year-caption";
3
+ export interface CalendarPeriodCellProps {
4
+ selected: boolean;
5
+ disabled?: boolean;
6
+ isRange?: boolean;
7
+ isStart?: boolean;
8
+ isEnd?: boolean;
9
+ isMiddle?: boolean;
10
+ hasRangeEnd?: boolean;
11
+ size: PeriodCellSize;
12
+ onClick: () => void;
13
+ onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
14
+ children: React.ReactNode;
15
+ caption?: string;
16
+ columns?: number;
17
+ }
18
+ export declare function CalendarPeriodCell({ selected, disabled, isRange, isStart, isEnd, isMiddle, hasRangeEnd, size, onClick, onKeyDown, children, caption, columns, }: CalendarPeriodCellProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,89 @@
1
+ import { jsxs as s, jsx as p } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as e } from "../../../lib/utils.js";
4
+ import { Button as N } from "../../primitives/button/button.js";
5
+ import { intervalCaptionClassName as v } from "./calendar-interval-caption.js";
6
+ import { SELECTION_RADIUS_END as g, SELECTION_RADIUS_START as T, SELECTION_RADIUS as I, periodRangeTrackClassName as j, periodTileAppearanceClassName as A } from "./calendar-selection-appearance.js";
7
+ import { periodCellKind as D } from "./calendar-selection.js";
8
+ import { handlePeriodGridKeyDown as S } from "./calendar-period-keyboard.js";
9
+ const _ = {
10
+ month: "h-10 w-10",
11
+ period: "min-h-16 h-auto w-full flex-col items-center justify-center px-1 py-1",
12
+ quarter: "h-16 min-h-16 max-h-16 w-full min-w-0 flex-col items-center justify-center overflow-hidden whitespace-normal p-2 leading-tight",
13
+ year: "h-10 min-h-10 max-h-10 w-full min-w-0 overflow-hidden",
14
+ "year-caption": "h-16 min-h-16 max-h-16 w-full min-w-0 flex-col items-center justify-center gap-0.5 overflow-hidden whitespace-normal p-2 text-xs leading-tight"
15
+ };
16
+ function P({
17
+ selected: u,
18
+ disabled: n = !1,
19
+ isRange: i = !1,
20
+ isStart: t = !1,
21
+ isEnd: r = !1,
22
+ isMiddle: o = !1,
23
+ hasRangeEnd: d = !1,
24
+ size: l,
25
+ onClick: w,
26
+ onKeyDown: x,
27
+ children: y,
28
+ caption: m,
29
+ columns: f
30
+ }) {
31
+ const a = D({ selected: u, isRange: i, isStart: t, isEnd: r, isMiddle: o }), C = i && d && (o || t || r) && !n, c = l === "month";
32
+ return /* @__PURE__ */ s(
33
+ "div",
34
+ {
35
+ className: e(
36
+ "group relative flex w-full items-center justify-center",
37
+ l === "period" || l === "quarter" || l === "year-caption" ? "min-h-16" : "h-10"
38
+ ),
39
+ children: [
40
+ C ? /* @__PURE__ */ p(
41
+ "div",
42
+ {
43
+ className: e(
44
+ "absolute inset-y-0",
45
+ j,
46
+ t && r && e("inset-x-2", I),
47
+ t && !r && e("left-1/2 right-0", c && "-ml-5", T),
48
+ r && !t && e("right-1/2 left-0", c && "-mr-5", g),
49
+ o && "inset-x-0"
50
+ )
51
+ }
52
+ ) : null,
53
+ /* @__PURE__ */ s(
54
+ N,
55
+ {
56
+ variant: "ghost",
57
+ onClick: w,
58
+ onKeyDown: (h) => {
59
+ f && S(h, f), x?.(h);
60
+ },
61
+ disabled: n,
62
+ "data-selection": a,
63
+ "data-period-tile": "",
64
+ className: e(
65
+ A({ kind: a, disabled: n }),
66
+ _[l]
67
+ ),
68
+ children: [
69
+ y,
70
+ m ? /* @__PURE__ */ p(
71
+ "span",
72
+ {
73
+ "data-slot": "interval-caption",
74
+ className: v(
75
+ a === "point" || a === "interval-start" || a === "interval-end"
76
+ ),
77
+ children: m
78
+ }
79
+ ) : null
80
+ ]
81
+ }
82
+ )
83
+ ]
84
+ }
85
+ );
86
+ }
87
+ export {
88
+ P as CalendarPeriodCell
89
+ };
@@ -0,0 +1,2 @@
1
+ import type * as React from "react";
2
+ export declare function handlePeriodGridKeyDown(event: React.KeyboardEvent<HTMLButtonElement>, columns: number): void;
@@ -0,0 +1,18 @@
1
+ function d(r, t, n, i) {
2
+ for (let o = t; i(o); o += n)
3
+ if (!r[o].disabled) return o;
4
+ }
5
+ function y(r, t) {
6
+ if (!["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"].includes(r.key))
7
+ return;
8
+ const n = r.currentTarget.closest("[data-period-grid]");
9
+ if (!n) return;
10
+ const i = Array.from(n.querySelectorAll("button")), o = i.indexOf(r.currentTarget);
11
+ if (o < 0) return;
12
+ const w = (f) => f >= 0 && f < i.length, a = Math.floor(o / t) * t, l = Math.min(i.length - 1, a + t - 1);
13
+ let e;
14
+ r.key === "ArrowRight" && (e = d(i, o + 1, 1, w)), r.key === "ArrowLeft" && (e = d(i, o - 1, -1, w)), r.key === "ArrowDown" && (e = d(i, o + t, t, w)), r.key === "ArrowUp" && (e = d(i, o - t, -t, w)), r.key === "Home" && (e = d(i, a, 1, (f) => f <= l)), r.key === "End" && (e = d(i, l, -1, (f) => f >= a)), e !== void 0 && e !== o && (r.preventDefault(), i[e]?.focus());
15
+ }
16
+ export {
17
+ y as handlePeriodGridKeyDown
18
+ };
@@ -0,0 +1,6 @@
1
+ import { FiscalPreset } from '../../../lib/fiscal-calendar';
2
+ export interface CalendarPresetStripProps {
3
+ presets: FiscalPreset[];
4
+ onPresetSelect: (preset: FiscalPreset) => void;
5
+ }
6
+ export declare function CalendarPresetStrip({ presets, onPresetSelect }: CalendarPresetStripProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,26 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { Button as l } from "../../primitives/button/button.js";
3
+ function o({ presets: e, onPresetSelect: a }) {
4
+ return e.length === 0 ? null : /* @__PURE__ */ t(
5
+ "div",
6
+ {
7
+ "data-slot": "preset-strip",
8
+ className: "flex max-w-[360px] flex-wrap gap-1 border-b border-border px-3 py-2",
9
+ "aria-label": "Presets",
10
+ children: e.map((r) => /* @__PURE__ */ t(
11
+ l,
12
+ {
13
+ type: "button",
14
+ variant: "outline",
15
+ size: "sm",
16
+ onClick: () => a(r),
17
+ children: r.label
18
+ },
19
+ r.id
20
+ ))
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ o as CalendarPresetStrip
26
+ };
@@ -0,0 +1,24 @@
1
+ import { Option } from '../../forms/select';
2
+ import { QuarterRange, QuarterSelection } from './calendar.types';
3
+ export interface CalendarQuarterPanesProps {
4
+ quarterMode: "single" | "multiple" | "range" | "multi-range";
5
+ pickerYear: number;
6
+ showFooter: boolean;
7
+ pendingQuarterSelection?: QuarterSelection | QuarterSelection[] | QuarterRange;
8
+ selectedQuarters?: QuarterSelection | QuarterSelection[] | QuarterRange;
9
+ resolvedStartYear: number;
10
+ resolvedEndYear: number;
11
+ yearOptions: Option[];
12
+ previousYearLabel: string;
13
+ nextYearLabel: string;
14
+ currentMonth: Date;
15
+ quarterLabelsForYear: (year: number) => Array<{
16
+ label: string;
17
+ caption?: string;
18
+ }>;
19
+ isQuarterSelected: (year: number, quarter: 1 | 2 | 3 | 4) => boolean;
20
+ isQuarterDisabled: (year: number, quarter: 1 | 2 | 3 | 4) => boolean;
21
+ onMonthChange: (month: Date) => void;
22
+ onQuarterClick: (year: number, quarter: 1 | 2 | 3 | 4) => void;
23
+ }
24
+ export declare function CalendarQuarterPanes({ quarterMode, pickerYear, showFooter, pendingQuarterSelection, selectedQuarters, resolvedStartYear, resolvedEndYear, yearOptions, previousYearLabel, nextYearLabel, currentMonth, quarterLabelsForYear, isQuarterSelected, isQuarterDisabled, onMonthChange, onQuarterClick, }: CalendarQuarterPanesProps): import("react/jsx-runtime").JSX.Element;