@optimum-intelligence/opti-ui 0.0.0-stage → 0.3.0

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 (193) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +244 -2
  3. package/dist/components/accordion/Accordion.d.ts +17 -0
  4. package/dist/components/accordion/Accordion.js +204 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/alert/Alert.d.ts +18 -0
  7. package/dist/components/alert/Alert.js +164 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/app-shell/AppShell.d.ts +97 -0
  10. package/dist/components/app-shell/AppShell.js +689 -0
  11. package/dist/components/app-shell/AppShell.js.map +1 -0
  12. package/dist/components/avatar/Avatar.d.ts +21 -0
  13. package/dist/components/avatar/Avatar.js +190 -0
  14. package/dist/components/avatar/Avatar.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +16 -0
  16. package/dist/components/badge/Badge.js +94 -0
  17. package/dist/components/badge/Badge.js.map +1 -0
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  21. package/dist/components/button/Button.d.ts +23 -0
  22. package/dist/components/button/Button.js +159 -0
  23. package/dist/components/button/Button.js.map +1 -0
  24. package/dist/components/calendar/Calendar.d.ts +59 -0
  25. package/dist/components/calendar/Calendar.js +709 -0
  26. package/dist/components/calendar/Calendar.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +32 -0
  28. package/dist/components/calendar/date-utils.js +112 -0
  29. package/dist/components/calendar/date-utils.js.map +1 -0
  30. package/dist/components/card/Card.d.ts +42 -0
  31. package/dist/components/card/Card.js +82 -0
  32. package/dist/components/card/Card.js.map +1 -0
  33. package/dist/components/choice/Choice.d.ts +32 -0
  34. package/dist/components/choice/Choice.js +371 -0
  35. package/dist/components/choice/Choice.js.map +1 -0
  36. package/dist/components/collapsible/Collapsible.d.ts +15 -0
  37. package/dist/components/collapsible/Collapsible.js +155 -0
  38. package/dist/components/collapsible/Collapsible.js.map +1 -0
  39. package/dist/components/combobox/Combobox.d.ts +68 -0
  40. package/dist/components/combobox/Combobox.js +752 -0
  41. package/dist/components/combobox/Combobox.js.map +1 -0
  42. package/dist/components/command-palette/CommandPalette.d.ts +52 -0
  43. package/dist/components/command-palette/CommandPalette.js +328 -0
  44. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  45. package/dist/components/data-table/DataTable.d.ts +73 -0
  46. package/dist/components/data-table/DataTable.js +478 -0
  47. package/dist/components/data-table/DataTable.js.map +1 -0
  48. package/dist/components/data-table/DataTableContent.d.ts +35 -0
  49. package/dist/components/data-table/DataTableContent.js +550 -0
  50. package/dist/components/data-table/DataTableContent.js.map +1 -0
  51. package/dist/components/data-table/DataTableFilters.d.ts +15 -0
  52. package/dist/components/data-table/DataTableFilters.js +284 -0
  53. package/dist/components/data-table/DataTableFilters.js.map +1 -0
  54. package/dist/components/data-table/DataTableRow.d.ts +33 -0
  55. package/dist/components/data-table/DataTableRow.js +552 -0
  56. package/dist/components/data-table/DataTableRow.js.map +1 -0
  57. package/dist/components/data-table/context.d.ts +5 -0
  58. package/dist/components/data-table/context.js +14 -0
  59. package/dist/components/data-table/context.js.map +1 -0
  60. package/dist/components/data-table/layout.d.ts +60 -0
  61. package/dist/components/data-table/layout.js +272 -0
  62. package/dist/components/data-table/layout.js.map +1 -0
  63. package/dist/components/data-table/types.d.ts +319 -0
  64. package/dist/components/data-table/useDataTable.d.ts +9 -0
  65. package/dist/components/data-table/useDataTable.js +666 -0
  66. package/dist/components/data-table/useDataTable.js.map +1 -0
  67. package/dist/components/date-picker/DatePicker.d.ts +50 -0
  68. package/dist/components/date-picker/DatePicker.js +485 -0
  69. package/dist/components/date-picker/DatePicker.js.map +1 -0
  70. package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
  71. package/dist/components/date-picker/DateRangePicker.js +339 -0
  72. package/dist/components/date-picker/DateRangePicker.js.map +1 -0
  73. package/dist/components/date-picker/PickerField.d.ts +38 -0
  74. package/dist/components/date-picker/PickerField.js +238 -0
  75. package/dist/components/date-picker/PickerField.js.map +1 -0
  76. package/dist/components/dialog/Dialog.d.ts +70 -0
  77. package/dist/components/dialog/Dialog.js +354 -0
  78. package/dist/components/dialog/Dialog.js.map +1 -0
  79. package/dist/components/drawer/Drawer.d.ts +39 -0
  80. package/dist/components/drawer/Drawer.js +225 -0
  81. package/dist/components/drawer/Drawer.js.map +1 -0
  82. package/dist/components/empty-state/EmptyState.d.ts +12 -0
  83. package/dist/components/empty-state/EmptyState.js +116 -0
  84. package/dist/components/empty-state/EmptyState.js.map +1 -0
  85. package/dist/components/field/Field.d.ts +36 -0
  86. package/dist/components/field/Field.js +337 -0
  87. package/dist/components/field/Field.js.map +1 -0
  88. package/dist/components/file-upload/FileUpload.d.ts +91 -0
  89. package/dist/components/file-upload/FileUpload.js +714 -0
  90. package/dist/components/file-upload/FileUpload.js.map +1 -0
  91. package/dist/components/input/Input.d.ts +49 -0
  92. package/dist/components/input/Input.js +538 -0
  93. package/dist/components/input/Input.js.map +1 -0
  94. package/dist/components/link/Link.d.ts +17 -0
  95. package/dist/components/link/Link.js +91 -0
  96. package/dist/components/link/Link.js.map +1 -0
  97. package/dist/components/menu/Menu.d.ts +79 -0
  98. package/dist/components/menu/Menu.js +615 -0
  99. package/dist/components/menu/Menu.js.map +1 -0
  100. package/dist/components/number-field/NumberField.d.ts +16 -0
  101. package/dist/components/number-field/NumberField.js +188 -0
  102. package/dist/components/number-field/NumberField.js.map +1 -0
  103. package/dist/components/pagination/Pagination.d.ts +34 -0
  104. package/dist/components/pagination/Pagination.js +244 -0
  105. package/dist/components/pagination/Pagination.js.map +1 -0
  106. package/dist/components/popover/Popover.d.ts +22 -0
  107. package/dist/components/popover/Popover.js +186 -0
  108. package/dist/components/popover/Popover.js.map +1 -0
  109. package/dist/components/preview-card/PreviewCard.d.ts +20 -0
  110. package/dist/components/preview-card/PreviewCard.js +114 -0
  111. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  112. package/dist/components/progress/Progress.d.ts +20 -0
  113. package/dist/components/progress/Progress.js +169 -0
  114. package/dist/components/progress/Progress.js.map +1 -0
  115. package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
  116. package/dist/components/scroll-area/ScrollArea.js +112 -0
  117. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  118. package/dist/components/search-input/SearchInput.d.ts +14 -0
  119. package/dist/components/search-input/SearchInput.js +114 -0
  120. package/dist/components/search-input/SearchInput.js.map +1 -0
  121. package/dist/components/select/Select.d.ts +66 -0
  122. package/dist/components/select/Select.js +601 -0
  123. package/dist/components/select/Select.js.map +1 -0
  124. package/dist/components/separator/Separator.d.ts +4 -0
  125. package/dist/components/separator/Separator.js +46 -0
  126. package/dist/components/separator/Separator.js.map +1 -0
  127. package/dist/components/skeleton/Skeleton.d.ts +16 -0
  128. package/dist/components/skeleton/Skeleton.js +135 -0
  129. package/dist/components/skeleton/Skeleton.js.map +1 -0
  130. package/dist/components/slider/Slider.d.ts +11 -0
  131. package/dist/components/slider/Slider.js +107 -0
  132. package/dist/components/slider/Slider.js.map +1 -0
  133. package/dist/components/spinner/Spinner.d.ts +9 -0
  134. package/dist/components/spinner/Spinner.js +78 -0
  135. package/dist/components/spinner/Spinner.js.map +1 -0
  136. package/dist/components/stack/Stack.d.ts +23 -0
  137. package/dist/components/stack/Stack.js +79 -0
  138. package/dist/components/stack/Stack.js.map +1 -0
  139. package/dist/components/stat-card/StatCard.d.ts +22 -0
  140. package/dist/components/stat-card/StatCard.js +153 -0
  141. package/dist/components/stat-card/StatCard.js.map +1 -0
  142. package/dist/components/stepper/Stepper.d.ts +30 -0
  143. package/dist/components/stepper/Stepper.js +131 -0
  144. package/dist/components/stepper/Stepper.js.map +1 -0
  145. package/dist/components/table/Table.d.ts +53 -0
  146. package/dist/components/table/Table.js +221 -0
  147. package/dist/components/table/Table.js.map +1 -0
  148. package/dist/components/tabs/Tabs.d.ts +19 -0
  149. package/dist/components/tabs/Tabs.js +183 -0
  150. package/dist/components/tabs/Tabs.js.map +1 -0
  151. package/dist/components/tag/Tag.d.ts +22 -0
  152. package/dist/components/tag/Tag.js +121 -0
  153. package/dist/components/tag/Tag.js.map +1 -0
  154. package/dist/components/toast/Toast.d.ts +34 -0
  155. package/dist/components/toast/Toast.js +187 -0
  156. package/dist/components/toast/Toast.js.map +1 -0
  157. package/dist/components/toggle/Toggle.d.ts +31 -0
  158. package/dist/components/toggle/Toggle.js +197 -0
  159. package/dist/components/toggle/Toggle.js.map +1 -0
  160. package/dist/components/toolbar/Toolbar.d.ts +21 -0
  161. package/dist/components/toolbar/Toolbar.js +239 -0
  162. package/dist/components/toolbar/Toolbar.js.map +1 -0
  163. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  164. package/dist/components/tooltip/Tooltip.js +182 -0
  165. package/dist/components/tooltip/Tooltip.js.map +1 -0
  166. package/dist/components/typography/Typography.d.ts +32 -0
  167. package/dist/components/typography/Typography.js +183 -0
  168. package/dist/components/typography/Typography.js.map +1 -0
  169. package/dist/fonts.css +3 -0
  170. package/dist/icons/index.d.ts +133 -0
  171. package/dist/icons/index.js +182 -0
  172. package/dist/icons/index.js.map +1 -0
  173. package/dist/index.d.ts +55 -0
  174. package/dist/index.js +58 -0
  175. package/dist/opti-ui.css +5692 -0
  176. package/dist/theme/ThemeProvider.d.ts +22 -0
  177. package/dist/theme/ThemeProvider.js +115 -0
  178. package/dist/theme/ThemeProvider.js.map +1 -0
  179. package/dist/theme/index.d.ts +2 -0
  180. package/dist/utils/cx.d.ts +10 -0
  181. package/dist/utils/cx.js +18 -0
  182. package/dist/utils/cx.js.map +1 -0
  183. package/dist/utils/index.d.ts +2 -0
  184. package/dist/utils/portal.d.ts +8 -0
  185. package/dist/utils/portal.js +16 -0
  186. package/dist/utils/portal.js.map +1 -0
  187. package/dist/utils/primitive.d.ts +13 -0
  188. package/dist/utils/primitive.js +61 -0
  189. package/dist/utils/primitive.js.map +1 -0
  190. package/dist/utils/search.d.ts +4 -0
  191. package/dist/utils/search.js +15 -0
  192. package/dist/utils/search.js.map +1 -0
  193. package/package.json +71 -4
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ import { type CalendarLabels, type DateRange, type RangeCalendarProps } from '../calendar/Calendar';
3
+ import { type PickerFieldProps } from './PickerField';
4
+ export interface DateRangePickerLabels extends CalendarLabels {
5
+ clear: string;
6
+ presets: string;
7
+ }
8
+ export interface DateRangePreset {
9
+ label: React.ReactNode;
10
+ value: DateRange;
11
+ }
12
+ export interface DateRangePickerProps extends PickerFieldProps, Pick<RangeCalendarProps, 'isDateDisabled' | 'defaultMonth' | 'locale' | 'weekStartsOn' | 'numberOfMonths'> {
13
+ /** Selected days as ISO dates; both ends are inclusive. */
14
+ value?: DateRange | null;
15
+ defaultValue?: DateRange | null;
16
+ /** Called with the new range, or `null` when cleared. */
17
+ onValueChange?: (value: DateRange | null) => void;
18
+ /** Earliest allowed day. */
19
+ min?: string;
20
+ /** Latest allowed day. */
21
+ max?: string;
22
+ /** Shortcuts listed beside the calendar ("Last 7 days", "This month"…). */
23
+ presets?: DateRangePreset[];
24
+ /** Submits the first day with a form under this name. */
25
+ startName?: string;
26
+ /** Submits the last day with a form under this name. */
27
+ endName?: string;
28
+ /** Show the Clear action. Defaults to `true` unless `required`. */
29
+ clearable?: boolean;
30
+ /** Custom display text for the selected range. */
31
+ formatValue?: (value: DateRange) => React.ReactNode;
32
+ /** Override texts for localisation. */
33
+ labels?: Partial<DateRangePickerLabels>;
34
+ }
35
+ /**
36
+ * Date range field with a calendar popover and optional presets. Values are
37
+ * `{ start, end }` ISO dates (`"2026-03-09"`), both inclusive.
38
+ */
39
+ export declare function DateRangePicker({ value, defaultValue, onValueChange, min, max, isDateDisabled, defaultMonth, locale, weekStartsOn, numberOfMonths, presets, startName, endName, placeholder, clearable, formatValue, labels, contentProps, ...field }: DateRangePickerProps): React.JSX.Element;
@@ -0,0 +1,339 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { Button } from "../button/Button.js";
4
+ import { clampDate, datePart, formatDate, toRange } from "../calendar/date-utils.js";
5
+ import { RangeCalendar } from "../calendar/Calendar.js";
6
+ import { PickerField, useOpenState } from "./PickerField.js";
7
+ import { c } from "react/compiler-runtime";
8
+ import * as React from "react";
9
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/components/date-picker/DateRangePicker.tsx
11
+ var defaultLabels = {
12
+ clear: "Clear",
13
+ presets: "Presets"
14
+ };
15
+ function formatDisplay(range) {
16
+ return `${formatDate(range.start)} – ${formatDate(range.end)}`;
17
+ }
18
+ /**
19
+ * Date range field with a calendar popover and optional presets. Values are
20
+ * `{ start, end }` ISO dates (`"2026-03-09"`), both inclusive.
21
+ */
22
+ function DateRangePicker(t0) {
23
+ const $ = c(104);
24
+ let clearable;
25
+ let contentProps;
26
+ let defaultMonth;
27
+ let endName;
28
+ let field;
29
+ let formatValue;
30
+ let isDateDisabled;
31
+ let labels;
32
+ let locale;
33
+ let max;
34
+ let min;
35
+ let onValueChange;
36
+ let presets;
37
+ let startName;
38
+ let t1;
39
+ let t2;
40
+ let t3;
41
+ let value;
42
+ let weekStartsOn;
43
+ if ($[0] !== t0) {
44
+ ({value, defaultValue: t1, onValueChange, min, max, isDateDisabled, defaultMonth, locale, weekStartsOn, numberOfMonths: t2, presets, startName, endName, placeholder: t3, clearable, formatValue, labels, contentProps, ...field} = t0);
45
+ $[0] = t0;
46
+ $[1] = clearable;
47
+ $[2] = contentProps;
48
+ $[3] = defaultMonth;
49
+ $[4] = endName;
50
+ $[5] = field;
51
+ $[6] = formatValue;
52
+ $[7] = isDateDisabled;
53
+ $[8] = labels;
54
+ $[9] = locale;
55
+ $[10] = max;
56
+ $[11] = min;
57
+ $[12] = onValueChange;
58
+ $[13] = presets;
59
+ $[14] = startName;
60
+ $[15] = t1;
61
+ $[16] = t2;
62
+ $[17] = t3;
63
+ $[18] = value;
64
+ $[19] = weekStartsOn;
65
+ } else {
66
+ clearable = $[1];
67
+ contentProps = $[2];
68
+ defaultMonth = $[3];
69
+ endName = $[4];
70
+ field = $[5];
71
+ formatValue = $[6];
72
+ isDateDisabled = $[7];
73
+ labels = $[8];
74
+ locale = $[9];
75
+ max = $[10];
76
+ min = $[11];
77
+ onValueChange = $[12];
78
+ presets = $[13];
79
+ startName = $[14];
80
+ t1 = $[15];
81
+ t2 = $[16];
82
+ t3 = $[17];
83
+ value = $[18];
84
+ weekStartsOn = $[19];
85
+ }
86
+ const defaultValue = t1 === void 0 ? null : t1;
87
+ const numberOfMonths = t2 === void 0 ? 2 : t2;
88
+ const placeholder = t3 === void 0 ? "Select dates" : t3;
89
+ let t4;
90
+ if ($[20] !== labels) {
91
+ t4 = {
92
+ ...defaultLabels,
93
+ ...labels
94
+ };
95
+ $[20] = labels;
96
+ $[21] = t4;
97
+ } else t4 = $[21];
98
+ const text = t4;
99
+ let t5;
100
+ if ($[22] !== defaultValue?.end || $[23] !== defaultValue?.start) {
101
+ t5 = () => toRange(defaultValue?.start, defaultValue?.end);
102
+ $[22] = defaultValue?.end;
103
+ $[23] = defaultValue?.start;
104
+ $[24] = t5;
105
+ } else t5 = $[24];
106
+ const [inner, setInner] = React.useState(t5);
107
+ let t6;
108
+ if ($[25] !== inner || $[26] !== value) {
109
+ t6 = value === void 0 ? inner : toRange(value?.start, value?.end);
110
+ $[25] = inner;
111
+ $[26] = value;
112
+ $[27] = t6;
113
+ } else t6 = $[27];
114
+ const current = t6;
115
+ const [open, setOpen] = useOpenState(field);
116
+ let T0;
117
+ let commit;
118
+ let lower;
119
+ let t10;
120
+ let t11;
121
+ let t12;
122
+ let t13;
123
+ let t14;
124
+ let t15;
125
+ let t7;
126
+ let t8;
127
+ let t9;
128
+ let upper;
129
+ if ($[28] !== contentProps || $[29] !== current || $[30] !== endName || $[31] !== field || $[32] !== formatValue || $[33] !== max || $[34] !== min || $[35] !== onValueChange || $[36] !== open || $[37] !== placeholder || $[38] !== presets || $[39] !== setOpen || $[40] !== startName || $[41] !== text) {
130
+ [lower, upper] = [datePart(min) ?? void 0, datePart(max) ?? void 0];
131
+ commit = (next) => {
132
+ const bounded = next && toRange(clampDate(next.start, lower, upper), clampDate(next.end, lower, upper));
133
+ setInner(bounded);
134
+ onValueChange?.(bounded);
135
+ setOpen(false);
136
+ };
137
+ T0 = PickerField;
138
+ t9 = field;
139
+ t10 = open;
140
+ t11 = setOpen;
141
+ t12 = placeholder;
142
+ if ($[55] !== current || $[56] !== formatValue) {
143
+ t13 = current ? formatValue?.(current) ?? formatDisplay(current) : null;
144
+ $[55] = current;
145
+ $[56] = formatValue;
146
+ $[57] = t13;
147
+ } else t13 = $[57];
148
+ const t16 = typeof contentProps?.className === "string" && contentProps.className;
149
+ let t17;
150
+ if ($[58] !== t16) {
151
+ t17 = cx("oui-date-range-picker__popup", t16);
152
+ $[58] = t16;
153
+ $[59] = t17;
154
+ } else t17 = $[59];
155
+ if ($[60] !== contentProps || $[61] !== t17) {
156
+ t14 = {
157
+ ...contentProps,
158
+ className: t17
159
+ };
160
+ $[60] = contentProps;
161
+ $[61] = t17;
162
+ $[62] = t14;
163
+ } else t14 = $[62];
164
+ let t18;
165
+ if ($[63] !== current?.start || $[64] !== startName) {
166
+ t18 = startName && /* @__PURE__ */ jsx("input", {
167
+ type: "hidden",
168
+ name: startName,
169
+ value: current?.start ?? ""
170
+ });
171
+ $[63] = current?.start;
172
+ $[64] = startName;
173
+ $[65] = t18;
174
+ } else t18 = $[65];
175
+ let t19;
176
+ if ($[66] !== current?.end || $[67] !== endName) {
177
+ t19 = endName && /* @__PURE__ */ jsx("input", {
178
+ type: "hidden",
179
+ name: endName,
180
+ value: current?.end ?? ""
181
+ });
182
+ $[66] = current?.end;
183
+ $[67] = endName;
184
+ $[68] = t19;
185
+ } else t19 = $[68];
186
+ if ($[69] !== t18 || $[70] !== t19) {
187
+ t15 = /* @__PURE__ */ jsxs(Fragment, { children: [t18, t19] });
188
+ $[69] = t18;
189
+ $[70] = t19;
190
+ $[71] = t15;
191
+ } else t15 = $[71];
192
+ t7 = "oui-date-range-picker__body";
193
+ t8 = presets && presets.length > 0 && /* @__PURE__ */ jsx("div", {
194
+ role: "group",
195
+ "aria-label": text.presets,
196
+ className: "oui-date-range-picker__presets",
197
+ children: presets.map((preset, index) => {
198
+ const range = toRange(preset.value.start, preset.value.end);
199
+ const active = Boolean(range && current && range.start === current.start && range.end === current.end);
200
+ return /* @__PURE__ */ jsx("button", {
201
+ type: "button",
202
+ className: "oui-date-range-picker__preset",
203
+ "aria-pressed": active,
204
+ "data-active": active ? "" : void 0,
205
+ disabled: !range,
206
+ onClick: () => commit(range),
207
+ children: preset.label
208
+ }, index);
209
+ })
210
+ });
211
+ $[28] = contentProps;
212
+ $[29] = current;
213
+ $[30] = endName;
214
+ $[31] = field;
215
+ $[32] = formatValue;
216
+ $[33] = max;
217
+ $[34] = min;
218
+ $[35] = onValueChange;
219
+ $[36] = open;
220
+ $[37] = placeholder;
221
+ $[38] = presets;
222
+ $[39] = setOpen;
223
+ $[40] = startName;
224
+ $[41] = text;
225
+ $[42] = T0;
226
+ $[43] = commit;
227
+ $[44] = lower;
228
+ $[45] = t10;
229
+ $[46] = t11;
230
+ $[47] = t12;
231
+ $[48] = t13;
232
+ $[49] = t14;
233
+ $[50] = t15;
234
+ $[51] = t7;
235
+ $[52] = t8;
236
+ $[53] = t9;
237
+ $[54] = upper;
238
+ } else {
239
+ T0 = $[42];
240
+ commit = $[43];
241
+ lower = $[44];
242
+ t10 = $[45];
243
+ t11 = $[46];
244
+ t12 = $[47];
245
+ t13 = $[48];
246
+ t14 = $[49];
247
+ t15 = $[50];
248
+ t7 = $[51];
249
+ t8 = $[52];
250
+ t9 = $[53];
251
+ upper = $[54];
252
+ }
253
+ let t16;
254
+ if ($[72] !== commit || $[73] !== current || $[74] !== defaultMonth || $[75] !== isDateDisabled || $[76] !== labels || $[77] !== locale || $[78] !== lower || $[79] !== numberOfMonths || $[80] !== upper || $[81] !== weekStartsOn) {
255
+ t16 = /* @__PURE__ */ jsx(RangeCalendar, {
256
+ value: current,
257
+ onValueChange: commit,
258
+ min: lower,
259
+ max: upper,
260
+ isDateDisabled,
261
+ defaultMonth,
262
+ locale,
263
+ weekStartsOn,
264
+ numberOfMonths,
265
+ labels
266
+ });
267
+ $[72] = commit;
268
+ $[73] = current;
269
+ $[74] = defaultMonth;
270
+ $[75] = isDateDisabled;
271
+ $[76] = labels;
272
+ $[77] = locale;
273
+ $[78] = lower;
274
+ $[79] = numberOfMonths;
275
+ $[80] = upper;
276
+ $[81] = weekStartsOn;
277
+ $[82] = t16;
278
+ } else t16 = $[82];
279
+ let t17;
280
+ if ($[83] !== t16 || $[84] !== t7 || $[85] !== t8) {
281
+ t17 = /* @__PURE__ */ jsxs("div", {
282
+ className: t7,
283
+ children: [t8, t16]
284
+ });
285
+ $[83] = t16;
286
+ $[84] = t7;
287
+ $[85] = t8;
288
+ $[86] = t17;
289
+ } else t17 = $[86];
290
+ let t18;
291
+ if ($[87] !== clearable || $[88] !== commit || $[89] !== current || $[90] !== field || $[91] !== text) {
292
+ t18 = (clearable ?? !field.required) && /* @__PURE__ */ jsx("div", {
293
+ className: "oui-date-picker__footer",
294
+ children: /* @__PURE__ */ jsx(Button, {
295
+ size: "sm",
296
+ variant: "ghost",
297
+ shape: "rounded",
298
+ disabled: !current,
299
+ onClick: () => commit(null),
300
+ children: text.clear
301
+ })
302
+ });
303
+ $[87] = clearable;
304
+ $[88] = commit;
305
+ $[89] = current;
306
+ $[90] = field;
307
+ $[91] = text;
308
+ $[92] = t18;
309
+ } else t18 = $[92];
310
+ let t19;
311
+ if ($[93] !== T0 || $[94] !== t10 || $[95] !== t11 || $[96] !== t12 || $[97] !== t13 || $[98] !== t14 || $[99] !== t15 || $[100] !== t17 || $[101] !== t18 || $[102] !== t9) {
312
+ t19 = /* @__PURE__ */ jsxs(T0, {
313
+ ...t9,
314
+ open: t10,
315
+ onOpenChange: t11,
316
+ placeholder: t12,
317
+ display: t13,
318
+ contentProps: t14,
319
+ inputs: t15,
320
+ children: [t17, t18]
321
+ });
322
+ $[93] = T0;
323
+ $[94] = t10;
324
+ $[95] = t11;
325
+ $[96] = t12;
326
+ $[97] = t13;
327
+ $[98] = t14;
328
+ $[99] = t15;
329
+ $[100] = t17;
330
+ $[101] = t18;
331
+ $[102] = t9;
332
+ $[103] = t19;
333
+ } else t19 = $[103];
334
+ return t19;
335
+ }
336
+ //#endregion
337
+ export { DateRangePicker };
338
+
339
+ //# sourceMappingURL=DateRangePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangePicker.js","names":["React","cx","Button","RangeCalendar","CalendarLabels","DateRange","RangeCalendarProps","clampDate","datePart","formatDate","toRange","PickerField","useOpenState","PickerFieldProps","DateRangePickerLabels","clear","presets","defaultLabels","Omit","DateRangePreset","label","ReactNode","value","DateRangePickerProps","Pick","defaultValue","onValueChange","min","max","startName","endName","clearable","formatValue","labels","Partial","formatDisplay","range","start","end","DateRangePicker","t0","$","_c","contentProps","defaultMonth","field","isDateDisabled","locale","t1","t2","t3","weekStartsOn","numberOfMonths","placeholder","undefined","t4","text","t5","inner","setInner","useState","t6","current","open","setOpen","T0","commit","lower","t10","t11","t12","t13","t14","t15","t7","t8","t9","upper","next","bounded","t16","className","t17","t18","t19","length","map","preset","index","active","Boolean","required","_c","_Fragment"],"sources":["../../../src/components/date-picker/DateRangePicker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { Button } from '../button/Button';\nimport { RangeCalendar, type CalendarLabels, type DateRange, type RangeCalendarProps } from '../calendar/Calendar';\nimport { clampDate, datePart, formatDate, toRange } from '../calendar/date-utils';\nimport { PickerField, useOpenState, type PickerFieldProps } from './PickerField';\n\nexport interface DateRangePickerLabels extends CalendarLabels {\n clear: string;\n presets: string;\n}\n\nconst defaultLabels: Omit<DateRangePickerLabels, keyof CalendarLabels> = {\n clear: 'Clear',\n presets: 'Presets',\n};\n\nexport interface DateRangePreset {\n label: React.ReactNode;\n value: DateRange;\n}\n\nexport interface DateRangePickerProps\n extends PickerFieldProps,\n Pick<RangeCalendarProps, 'isDateDisabled' | 'defaultMonth' | 'locale' | 'weekStartsOn' | 'numberOfMonths'> {\n /** Selected days as ISO dates; both ends are inclusive. */\n value?: DateRange | null;\n defaultValue?: DateRange | null;\n /** Called with the new range, or `null` when cleared. */\n onValueChange?: (value: DateRange | null) => void;\n /** Earliest allowed day. */\n min?: string;\n /** Latest allowed day. */\n max?: string;\n /** Shortcuts listed beside the calendar (\"Last 7 days\", \"This month\"…). */\n presets?: DateRangePreset[];\n /** Submits the first day with a form under this name. */\n startName?: string;\n /** Submits the last day with a form under this name. */\n endName?: string;\n /** Show the Clear action. Defaults to `true` unless `required`. */\n clearable?: boolean;\n /** Custom display text for the selected range. */\n formatValue?: (value: DateRange) => React.ReactNode;\n /** Override texts for localisation. */\n labels?: Partial<DateRangePickerLabels>;\n}\n\nfunction formatDisplay(range: DateRange): string {\n return `${formatDate(range.start)} – ${formatDate(range.end)}`;\n}\n\n/**\n * Date range field with a calendar popover and optional presets. Values are\n * `{ start, end }` ISO dates (`\"2026-03-09\"`), both inclusive.\n */\nexport function DateRangePicker({\n value,\n defaultValue = null,\n onValueChange,\n min,\n max,\n isDateDisabled,\n defaultMonth,\n locale,\n weekStartsOn,\n numberOfMonths = 2,\n presets,\n startName,\n endName,\n placeholder = 'Select dates',\n clearable,\n formatValue,\n labels,\n contentProps,\n ...field\n}: DateRangePickerProps) {\n const text = { ...defaultLabels, ...labels };\n const [inner, setInner] = React.useState(() => toRange(defaultValue?.start, defaultValue?.end));\n const current = value === undefined ? inner : toRange(value?.start, value?.end);\n const [open, setOpen] = useOpenState(field);\n const [lower, upper] = [datePart(min) ?? undefined, datePart(max) ?? undefined];\n\n const commit = (next: DateRange | null) => {\n const bounded = next && toRange(clampDate(next.start, lower, upper), clampDate(next.end, lower, upper));\n setInner(bounded);\n onValueChange?.(bounded);\n setOpen(false);\n };\n\n return (\n <PickerField\n {...field}\n open={open}\n onOpenChange={setOpen}\n placeholder={placeholder}\n display={current ? (formatValue?.(current) ?? formatDisplay(current)) : null}\n contentProps={{\n ...contentProps,\n className: cx('oui-date-range-picker__popup', typeof contentProps?.className === 'string' && contentProps.className),\n }}\n inputs={\n <>\n {startName && <input type=\"hidden\" name={startName} value={current?.start ?? ''} />}\n {endName && <input type=\"hidden\" name={endName} value={current?.end ?? ''} />}\n </>\n }\n >\n <div className=\"oui-date-range-picker__body\">\n {presets && presets.length > 0 && (\n <div role=\"group\" aria-label={text.presets} className=\"oui-date-range-picker__presets\">\n {presets.map((preset, index) => {\n const range = toRange(preset.value.start, preset.value.end);\n const active = Boolean(range && current && range.start === current.start && range.end === current.end);\n return (\n <button\n key={index}\n type=\"button\"\n className=\"oui-date-range-picker__preset\"\n aria-pressed={active}\n data-active={active ? '' : undefined}\n disabled={!range}\n onClick={() => commit(range)}\n >\n {preset.label}\n </button>\n );\n })}\n </div>\n )}\n <RangeCalendar\n value={current}\n onValueChange={commit}\n min={lower}\n max={upper}\n isDateDisabled={isDateDisabled}\n defaultMonth={defaultMonth}\n locale={locale}\n weekStartsOn={weekStartsOn}\n numberOfMonths={numberOfMonths}\n labels={labels}\n />\n </div>\n {(clearable ?? !field.required) && (\n <div className=\"oui-date-picker__footer\">\n <Button size=\"sm\" variant=\"ghost\" shape=\"rounded\" disabled={!current} onClick={() => commit(null)}>\n {text.clear}\n </Button>\n </div>\n )}\n </PickerField>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ import { Popover as BasePopover } from '@base-ui/react/popover';
3
+ import { type PopoverContentProps } from '../popover/Popover';
4
+ import type { ControlSize } from '../input/Input';
5
+ /** Field props shared by the date pickers. */
6
+ export interface PickerFieldProps {
7
+ ref?: React.Ref<HTMLButtonElement>;
8
+ label?: React.ReactNode;
9
+ description?: React.ReactNode;
10
+ /** Error message. When set, the field is marked invalid. */
11
+ error?: React.ReactNode;
12
+ required?: boolean;
13
+ disabled?: boolean;
14
+ placeholder?: React.ReactNode;
15
+ size?: ControlSize;
16
+ open?: boolean;
17
+ defaultOpen?: boolean;
18
+ onOpenChange?: (open: boolean) => void;
19
+ id?: string;
20
+ className?: string;
21
+ /** Props for the trigger button (aria-*, data-*, onBlur…). */
22
+ triggerProps?: Omit<React.ComponentProps<typeof BasePopover.Trigger>, 'children' | 'disabled' | 'id'>;
23
+ contentProps?: Omit<PopoverContentProps, 'children'>;
24
+ }
25
+ export declare function useOpenState({ open, defaultOpen, onOpenChange }: PickerFieldProps): readonly [boolean, (next: boolean) => void];
26
+ interface PickerFieldShellProps extends Omit<PickerFieldProps, 'open' | 'defaultOpen' | 'onOpenChange'> {
27
+ open: boolean;
28
+ onOpenChange: (open: boolean) => void;
29
+ /** Text for the current value; `null` shows the placeholder. */
30
+ display: React.ReactNode | null;
31
+ /** Popover content. */
32
+ children: React.ReactNode;
33
+ /** Hidden inputs that submit the value with a form. */
34
+ inputs?: React.ReactNode;
35
+ }
36
+ /** Label, trigger button, calendar popover, description and error of a date picker. */
37
+ export declare function PickerField({ label, description, error, required, disabled, placeholder, size, open, onOpenChange, id: idProp, className, triggerProps, contentProps, display, children, inputs, ref, }: PickerFieldShellProps): React.JSX.Element;
38
+ export {};
@@ -0,0 +1,238 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { CalendarIcon } from "../../icons/index.js";
4
+ import { Popover as Popover$1 } from "../popover/Popover.js";
5
+ import { c } from "react/compiler-runtime";
6
+ import * as React from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Popover } from "@base-ui/react/popover";
9
+ //#region src/components/date-picker/PickerField.tsx
10
+ function useOpenState(t0) {
11
+ const $ = c(5);
12
+ const { open, defaultOpen: t1, onOpenChange } = t0;
13
+ const defaultOpen = t1 === void 0 ? false : t1;
14
+ const [inner, setInner] = React.useState(defaultOpen);
15
+ let t2;
16
+ if ($[0] !== onOpenChange) {
17
+ t2 = (next) => {
18
+ setInner(next);
19
+ onOpenChange?.(next);
20
+ };
21
+ $[0] = onOpenChange;
22
+ $[1] = t2;
23
+ } else t2 = $[1];
24
+ const setOpen = t2;
25
+ const t3 = open ?? inner;
26
+ let t4;
27
+ if ($[2] !== setOpen || $[3] !== t3) {
28
+ t4 = [t3, setOpen];
29
+ $[2] = setOpen;
30
+ $[3] = t3;
31
+ $[4] = t4;
32
+ } else t4 = $[4];
33
+ return t4;
34
+ }
35
+ /** Label, trigger button, calendar popover, description and error of a date picker. */
36
+ function PickerField(t0) {
37
+ const $ = c(59);
38
+ const { label, description, error, required, disabled, placeholder, size: t1, open, onOpenChange, id: idProp, className, triggerProps, contentProps, display, children, inputs, ref } = t0;
39
+ const size = t1 === void 0 ? "md" : t1;
40
+ const generatedId = React.useId();
41
+ const id = idProp ?? generatedId;
42
+ const popupRef = React.useRef(null);
43
+ const errorId = error ? `${id}-error` : void 0;
44
+ let t2;
45
+ if ($[0] !== description || $[1] !== errorId || $[2] !== id) {
46
+ t2 = cx(description != null && `${id}-description`, errorId) || void 0;
47
+ $[0] = description;
48
+ $[1] = errorId;
49
+ $[2] = id;
50
+ $[3] = t2;
51
+ } else t2 = $[3];
52
+ const describedBy = t2;
53
+ let t3;
54
+ if ($[4] !== className) {
55
+ t3 = cx("oui-field", "oui-date-picker", className);
56
+ $[4] = className;
57
+ $[5] = t3;
58
+ } else t3 = $[5];
59
+ const t4 = disabled || void 0;
60
+ const t5 = error ? "" : void 0;
61
+ let t6;
62
+ if ($[6] !== id || $[7] !== label || $[8] !== required) {
63
+ t6 = label != null && /* @__PURE__ */ jsxs("label", {
64
+ id: `${id}-label`,
65
+ htmlFor: id,
66
+ className: "oui-field__label",
67
+ children: [label, required && /* @__PURE__ */ jsx("span", {
68
+ className: "oui-field__required",
69
+ "aria-hidden": true,
70
+ children: "*"
71
+ })]
72
+ });
73
+ $[6] = id;
74
+ $[7] = label;
75
+ $[8] = required;
76
+ $[9] = t6;
77
+ } else t6 = $[9];
78
+ let t7;
79
+ if ($[10] !== onOpenChange) {
80
+ t7 = (next) => onOpenChange(next);
81
+ $[10] = onOpenChange;
82
+ $[11] = t7;
83
+ } else t7 = $[11];
84
+ const t8 = label != null ? `${id}-label ${id}-value` : void 0;
85
+ const t9 = required || void 0;
86
+ const t10 = error ? true : void 0;
87
+ const t11 = typeof triggerProps?.className === "string" && triggerProps.className;
88
+ let t12;
89
+ if ($[12] !== t11) {
90
+ t12 = cx("oui-date-picker__trigger", t11);
91
+ $[12] = t11;
92
+ $[13] = t12;
93
+ } else t12 = $[13];
94
+ const t13 = error ? "" : void 0;
95
+ const t14 = display == null ? "" : void 0;
96
+ const t15 = `${id}-value`;
97
+ const t16 = display ?? placeholder;
98
+ let t17;
99
+ if ($[14] !== t15 || $[15] !== t16) {
100
+ t17 = /* @__PURE__ */ jsx("span", {
101
+ id: t15,
102
+ className: "oui-date-picker__value",
103
+ children: t16
104
+ });
105
+ $[14] = t15;
106
+ $[15] = t16;
107
+ $[16] = t17;
108
+ } else t17 = $[16];
109
+ let t18;
110
+ if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
111
+ t18 = /* @__PURE__ */ jsx(CalendarIcon, {});
112
+ $[17] = t18;
113
+ } else t18 = $[17];
114
+ let t19;
115
+ if ($[18] !== describedBy || $[19] !== disabled || $[20] !== id || $[21] !== ref || $[22] !== size || $[23] !== t10 || $[24] !== t12 || $[25] !== t13 || $[26] !== t14 || $[27] !== t17 || $[28] !== t8 || $[29] !== t9 || $[30] !== triggerProps) {
116
+ t19 = /* @__PURE__ */ jsxs(Popover.Trigger, {
117
+ ref,
118
+ id,
119
+ disabled,
120
+ "aria-labelledby": t8,
121
+ "aria-describedby": describedBy,
122
+ "aria-required": t9,
123
+ "aria-invalid": t10,
124
+ ...triggerProps,
125
+ className: t12,
126
+ "data-size": size,
127
+ "data-invalid": t13,
128
+ "data-placeholder": t14,
129
+ children: [t17, t18]
130
+ });
131
+ $[18] = describedBy;
132
+ $[19] = disabled;
133
+ $[20] = id;
134
+ $[21] = ref;
135
+ $[22] = size;
136
+ $[23] = t10;
137
+ $[24] = t12;
138
+ $[25] = t13;
139
+ $[26] = t14;
140
+ $[27] = t17;
141
+ $[28] = t8;
142
+ $[29] = t9;
143
+ $[30] = triggerProps;
144
+ $[31] = t19;
145
+ } else t19 = $[31];
146
+ let t20;
147
+ if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
148
+ t20 = () => popupRef.current?.querySelector(".oui-calendar__day[tabindex=\"0\"]") ?? true;
149
+ $[32] = t20;
150
+ } else t20 = $[32];
151
+ const t21 = typeof contentProps?.className === "string" && contentProps.className;
152
+ let t22;
153
+ if ($[33] !== t21) {
154
+ t22 = cx("oui-date-picker__popup", t21);
155
+ $[33] = t21;
156
+ $[34] = t22;
157
+ } else t22 = $[34];
158
+ let t23;
159
+ if ($[35] !== children || $[36] !== contentProps || $[37] !== t22) {
160
+ t23 = /* @__PURE__ */ jsx(Popover$1.Content, {
161
+ ref: popupRef,
162
+ align: "start",
163
+ sideOffset: 6,
164
+ initialFocus: t20,
165
+ ...contentProps,
166
+ className: t22,
167
+ children
168
+ });
169
+ $[35] = children;
170
+ $[36] = contentProps;
171
+ $[37] = t22;
172
+ $[38] = t23;
173
+ } else t23 = $[38];
174
+ let t24;
175
+ if ($[39] !== open || $[40] !== t19 || $[41] !== t23 || $[42] !== t7) {
176
+ t24 = /* @__PURE__ */ jsxs(Popover$1.Root, {
177
+ open,
178
+ onOpenChange: t7,
179
+ children: [t19, t23]
180
+ });
181
+ $[39] = open;
182
+ $[40] = t19;
183
+ $[41] = t23;
184
+ $[42] = t7;
185
+ $[43] = t24;
186
+ } else t24 = $[43];
187
+ let t25;
188
+ if ($[44] !== description || $[45] !== id) {
189
+ t25 = description != null && /* @__PURE__ */ jsx("p", {
190
+ id: `${id}-description`,
191
+ className: "oui-field__description",
192
+ children: description
193
+ });
194
+ $[44] = description;
195
+ $[45] = id;
196
+ $[46] = t25;
197
+ } else t25 = $[46];
198
+ let t26;
199
+ if ($[47] !== error || $[48] !== id) {
200
+ t26 = error && /* @__PURE__ */ jsx("div", {
201
+ id: `${id}-error`,
202
+ className: "oui-field__error",
203
+ children: error
204
+ });
205
+ $[47] = error;
206
+ $[48] = id;
207
+ $[49] = t26;
208
+ } else t26 = $[49];
209
+ let t27;
210
+ if ($[50] !== inputs || $[51] !== t24 || $[52] !== t25 || $[53] !== t26 || $[54] !== t3 || $[55] !== t4 || $[56] !== t5 || $[57] !== t6) {
211
+ t27 = /* @__PURE__ */ jsxs("div", {
212
+ className: t3,
213
+ "data-disabled": t4,
214
+ "data-invalid": t5,
215
+ children: [
216
+ t6,
217
+ t24,
218
+ inputs,
219
+ t25,
220
+ t26
221
+ ]
222
+ });
223
+ $[50] = inputs;
224
+ $[51] = t24;
225
+ $[52] = t25;
226
+ $[53] = t26;
227
+ $[54] = t3;
228
+ $[55] = t4;
229
+ $[56] = t5;
230
+ $[57] = t6;
231
+ $[58] = t27;
232
+ } else t27 = $[58];
233
+ return t27;
234
+ }
235
+ //#endregion
236
+ export { PickerField, useOpenState };
237
+
238
+ //# sourceMappingURL=PickerField.js.map