@optimum-intelligence/opti-ui 0.3.0 → 0.5.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 (131) hide show
  1. package/README.md +28 -7
  2. package/dist/components/accordion/Accordion.d.ts +12 -0
  3. package/dist/components/accordion/Accordion.js +12 -0
  4. package/dist/components/accordion/Accordion.js.map +1 -1
  5. package/dist/components/alert/Alert.d.ts +4 -0
  6. package/dist/components/alert/Alert.js.map +1 -1
  7. package/dist/components/app-shell/AppShell.d.ts +96 -5
  8. package/dist/components/app-shell/AppShell.js +676 -185
  9. package/dist/components/app-shell/AppShell.js.map +1 -1
  10. package/dist/components/avatar/Avatar.d.ts +8 -0
  11. package/dist/components/avatar/Avatar.js +2 -0
  12. package/dist/components/avatar/Avatar.js.map +1 -1
  13. package/dist/components/badge/Badge.d.ts +10 -3
  14. package/dist/components/badge/Badge.js +17 -28
  15. package/dist/components/badge/Badge.js.map +1 -1
  16. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +1 -0
  17. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  18. package/dist/components/button/Button.d.ts +8 -0
  19. package/dist/components/button/Button.js +6 -0
  20. package/dist/components/button/Button.js.map +1 -1
  21. package/dist/components/calendar/Calendar.d.ts +21 -7
  22. package/dist/components/calendar/Calendar.js +285 -212
  23. package/dist/components/calendar/Calendar.js.map +1 -1
  24. package/dist/components/calendar/DateConfig.d.ts +37 -0
  25. package/dist/components/calendar/DateConfig.js +75 -0
  26. package/dist/components/calendar/DateConfig.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +41 -6
  28. package/dist/components/calendar/date-utils.js +119 -20
  29. package/dist/components/calendar/date-utils.js.map +1 -1
  30. package/dist/components/card/Card.d.ts +13 -0
  31. package/dist/components/card/Card.js +13 -0
  32. package/dist/components/card/Card.js.map +1 -1
  33. package/dist/components/choice/Choice.d.ts +13 -0
  34. package/dist/components/choice/Choice.js +10 -0
  35. package/dist/components/choice/Choice.js.map +1 -1
  36. package/dist/components/combobox/Combobox.d.ts +12 -0
  37. package/dist/components/combobox/Combobox.js.map +1 -1
  38. package/dist/components/command-palette/CommandPalette.d.ts +10 -0
  39. package/dist/components/command-palette/CommandPalette.js.map +1 -1
  40. package/dist/components/data-table/DataTable.d.ts +4 -0
  41. package/dist/components/data-table/DataTable.js.map +1 -1
  42. package/dist/components/data-table/DataTableContent.d.ts +1 -0
  43. package/dist/components/data-table/DataTableContent.js +3 -3
  44. package/dist/components/data-table/DataTableContent.js.map +1 -1
  45. package/dist/components/data-table/DataTableFilters.d.ts +3 -0
  46. package/dist/components/data-table/DataTableFilters.js.map +1 -1
  47. package/dist/components/data-table/types.d.ts +16 -0
  48. package/dist/components/date-picker/DatePicker.d.ts +33 -10
  49. package/dist/components/date-picker/DatePicker.js +315 -279
  50. package/dist/components/date-picker/DatePicker.js.map +1 -1
  51. package/dist/components/date-picker/DateRangePicker.d.ts +12 -4
  52. package/dist/components/date-picker/DateRangePicker.js +240 -206
  53. package/dist/components/date-picker/DateRangePicker.js.map +1 -1
  54. package/dist/components/date-picker/PickerField.d.ts +13 -0
  55. package/dist/components/date-picker/PickerField.js +1 -1
  56. package/dist/components/date-picker/PickerField.js.map +1 -1
  57. package/dist/components/dialog/Dialog.d.ts +5 -0
  58. package/dist/components/dialog/Dialog.js.map +1 -1
  59. package/dist/components/drawer/Drawer.d.ts +10 -0
  60. package/dist/components/drawer/Drawer.js.map +1 -1
  61. package/dist/components/empty-state/EmptyState.d.ts +5 -0
  62. package/dist/components/empty-state/EmptyState.js.map +1 -1
  63. package/dist/components/file-upload/FileUpload.d.ts +21 -0
  64. package/dist/components/file-upload/FileUpload.js.map +1 -1
  65. package/dist/components/input/Input.d.ts +7 -0
  66. package/dist/components/input/Input.js +3 -0
  67. package/dist/components/input/Input.js.map +1 -1
  68. package/dist/components/link/Link.d.ts +1 -0
  69. package/dist/components/link/Link.js.map +1 -1
  70. package/dist/components/menu/Menu.d.ts +6 -0
  71. package/dist/components/menu/Menu.js.map +1 -1
  72. package/dist/components/number-field/NumberField.d.ts +7 -0
  73. package/dist/components/number-field/NumberField.js.map +1 -1
  74. package/dist/components/pagination/Pagination.d.ts +4 -0
  75. package/dist/components/pagination/Pagination.js.map +1 -1
  76. package/dist/components/popover/Popover.d.ts +4 -0
  77. package/dist/components/popover/Popover.js.map +1 -1
  78. package/dist/components/preview-card/PreviewCard.d.ts +4 -0
  79. package/dist/components/preview-card/PreviewCard.js.map +1 -1
  80. package/dist/components/progress/Progress.d.ts +8 -0
  81. package/dist/components/progress/Progress.js.map +1 -1
  82. package/dist/components/scroll-area/ScrollArea.d.ts +1 -0
  83. package/dist/components/scroll-area/ScrollArea.js.map +1 -1
  84. package/dist/components/search-input/SearchInput.d.ts +2 -0
  85. package/dist/components/search-input/SearchInput.js.map +1 -1
  86. package/dist/components/select/Select.d.ts +11 -0
  87. package/dist/components/select/Select.js.map +1 -1
  88. package/dist/components/separator/Separator.d.ts +1 -0
  89. package/dist/components/separator/Separator.js +1 -0
  90. package/dist/components/separator/Separator.js.map +1 -1
  91. package/dist/components/skeleton/Skeleton.d.ts +7 -0
  92. package/dist/components/skeleton/Skeleton.js +1 -0
  93. package/dist/components/skeleton/Skeleton.js.map +1 -1
  94. package/dist/components/slider/Slider.d.ts +1 -0
  95. package/dist/components/slider/Slider.js.map +1 -1
  96. package/dist/components/spinner/Spinner.d.ts +2 -0
  97. package/dist/components/spinner/Spinner.js +1 -0
  98. package/dist/components/spinner/Spinner.js.map +1 -1
  99. package/dist/components/stat-card/StatCard.d.ts +4 -0
  100. package/dist/components/stat-card/StatCard.js.map +1 -1
  101. package/dist/components/stepper/Stepper.d.ts +4 -0
  102. package/dist/components/stepper/Stepper.js.map +1 -1
  103. package/dist/components/table/Table.d.ts +24 -1
  104. package/dist/components/table/Table.js +19 -2
  105. package/dist/components/table/Table.js.map +1 -1
  106. package/dist/components/tabs/Tabs.d.ts +1 -0
  107. package/dist/components/tabs/Tabs.js.map +1 -1
  108. package/dist/components/tag/Tag.d.ts +3 -0
  109. package/dist/components/tag/Tag.js.map +1 -1
  110. package/dist/components/toast/Toast.d.ts +2 -0
  111. package/dist/components/toast/Toast.js.map +1 -1
  112. package/dist/components/toggle/Toggle.d.ts +7 -0
  113. package/dist/components/toggle/Toggle.js +1 -0
  114. package/dist/components/toggle/Toggle.js.map +1 -1
  115. package/dist/components/tooltip/Tooltip.d.ts +8 -0
  116. package/dist/components/tooltip/Tooltip.js.map +1 -1
  117. package/dist/components/typography/Typography.d.ts +5 -0
  118. package/dist/components/typography/Typography.js +2 -0
  119. package/dist/components/typography/Typography.js.map +1 -1
  120. package/dist/components.json +5534 -0
  121. package/dist/index.d.ts +1 -0
  122. package/dist/index.js +4 -3
  123. package/dist/llms-full.txt +2707 -0
  124. package/dist/llms.txt +177 -0
  125. package/dist/opti-ui.css +171 -81
  126. package/dist/theme/ThemeProvider.d.ts +1 -0
  127. package/dist/theme/ThemeProvider.js.map +1 -1
  128. package/dist/utils/portal.d.ts +4 -0
  129. package/dist/utils/portal.js +4 -0
  130. package/dist/utils/portal.js.map +1 -1
  131. package/package.json +7 -3
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { cx } from "../../utils/cx.js";
3
+ import { useDateConfig } from "../calendar/DateConfig.js";
3
4
  import { Button } from "../button/Button.js";
4
- import { clampDate, datePart, formatDate, toRange } from "../calendar/date-utils.js";
5
+ import { clampDate, datePart, formatDate, toRange, truncate } from "../calendar/date-utils.js";
5
6
  import { RangeCalendar } from "../calendar/Calendar.js";
6
7
  import { PickerField, useOpenState } from "./PickerField.js";
7
8
  import { c } from "react/compiler-runtime";
@@ -12,20 +13,23 @@ var defaultLabels = {
12
13
  clear: "Clear",
13
14
  presets: "Presets"
14
15
  };
15
- function formatDisplay(range) {
16
- return `${formatDate(range.start)} – ${formatDate(range.end)}`;
17
- }
18
16
  /**
19
17
  * Date range field with a calendar popover and optional presets. Values are
20
- * `{ start, end }` ISO dates (`"2026-03-09"`), both inclusive.
18
+ * `{ start, end }` ISO dates (`"2026-03-09"`), both inclusive. With
19
+ * `granularity="month"` or `"year"` it picks whole months or years, and each end
20
+ * is the first day of its period.
21
+ *
22
+ * @example
23
+ * <DateRangePicker label="Period" value={period} onValueChange={setPeriod} presets={presets} />
21
24
  */
22
25
  function DateRangePicker(t0) {
23
- const $ = c(104);
26
+ const $ = c(117);
24
27
  let clearable;
25
28
  let contentProps;
26
29
  let defaultMonth;
27
30
  let endName;
28
31
  let field;
32
+ let format;
29
33
  let formatValue;
30
34
  let isDateDisabled;
31
35
  let labels;
@@ -38,80 +42,87 @@ function DateRangePicker(t0) {
38
42
  let t1;
39
43
  let t2;
40
44
  let t3;
45
+ let t4;
41
46
  let value;
42
47
  let weekStartsOn;
43
48
  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);
49
+ ({value, defaultValue: t1, onValueChange, min, max, isDateDisabled, defaultMonth, locale, weekStartsOn, numberOfMonths: t2, granularity: t3, presets, startName, endName, placeholder: t4, clearable, format, formatValue, labels, contentProps, ...field} = t0);
45
50
  $[0] = t0;
46
51
  $[1] = clearable;
47
52
  $[2] = contentProps;
48
53
  $[3] = defaultMonth;
49
54
  $[4] = endName;
50
55
  $[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;
56
+ $[6] = format;
57
+ $[7] = formatValue;
58
+ $[8] = isDateDisabled;
59
+ $[9] = labels;
60
+ $[10] = locale;
61
+ $[11] = max;
62
+ $[12] = min;
63
+ $[13] = onValueChange;
64
+ $[14] = presets;
65
+ $[15] = startName;
66
+ $[16] = t1;
67
+ $[17] = t2;
68
+ $[18] = t3;
69
+ $[19] = t4;
70
+ $[20] = value;
71
+ $[21] = weekStartsOn;
65
72
  } else {
66
73
  clearable = $[1];
67
74
  contentProps = $[2];
68
75
  defaultMonth = $[3];
69
76
  endName = $[4];
70
77
  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];
78
+ format = $[6];
79
+ formatValue = $[7];
80
+ isDateDisabled = $[8];
81
+ labels = $[9];
82
+ locale = $[10];
83
+ max = $[11];
84
+ min = $[12];
85
+ onValueChange = $[13];
86
+ presets = $[14];
87
+ startName = $[15];
88
+ t1 = $[16];
89
+ t2 = $[17];
90
+ t3 = $[18];
91
+ t4 = $[19];
92
+ value = $[20];
93
+ weekStartsOn = $[21];
85
94
  }
86
95
  const defaultValue = t1 === void 0 ? null : t1;
87
96
  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 = {
97
+ const granularity = t3 === void 0 ? "day" : t3;
98
+ const placeholder = t4 === void 0 ? "Select dates" : t4;
99
+ let t5;
100
+ if ($[22] !== labels) {
101
+ t5 = {
92
102
  ...defaultLabels,
93
103
  ...labels
94
104
  };
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);
105
+ $[22] = labels;
106
+ $[23] = t5;
107
+ } else t5 = $[23];
108
+ const text = t5;
109
+ const config = useDateConfig();
107
110
  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;
111
+ if ($[24] !== defaultValue?.end || $[25] !== defaultValue?.start) {
112
+ t6 = () => toRange(defaultValue?.start, defaultValue?.end);
113
+ $[24] = defaultValue?.end;
114
+ $[25] = defaultValue?.start;
115
+ $[26] = t6;
116
+ } else t6 = $[26];
117
+ const [inner, setInner] = React.useState(t6);
118
+ let t7;
119
+ if ($[27] !== inner || $[28] !== value) {
120
+ t7 = value === void 0 ? inner : toRange(value?.start, value?.end);
121
+ $[27] = inner;
122
+ $[28] = value;
123
+ $[29] = t7;
124
+ } else t7 = $[29];
125
+ const current = t7;
115
126
  const [open, setOpen] = useOpenState(field);
116
127
  let T0;
117
128
  let commit;
@@ -122,75 +133,92 @@ function DateRangePicker(t0) {
122
133
  let t13;
123
134
  let t14;
124
135
  let t15;
125
- let t7;
136
+ let t16;
126
137
  let t8;
127
138
  let t9;
128
139
  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) {
140
+ if ($[30] !== config || $[31] !== contentProps || $[32] !== current || $[33] !== endName || $[34] !== field || $[35] !== format || $[36] !== formatValue || $[37] !== granularity || $[38] !== locale || $[39] !== max || $[40] !== min || $[41] !== onValueChange || $[42] !== open || $[43] !== placeholder || $[44] !== presets || $[45] !== setOpen || $[46] !== startName || $[47] !== text) {
130
141
  [lower, upper] = [datePart(min) ?? void 0, datePart(max) ?? void 0];
142
+ const pattern = format ?? config.formats?.[granularity];
143
+ let t17;
144
+ if ($[61] !== config || $[62] !== granularity || $[63] !== locale || $[64] !== pattern) {
145
+ t17 = (date) => formatDate(date, {
146
+ format: pattern,
147
+ granularity,
148
+ locale: locale ?? config.locale
149
+ });
150
+ $[61] = config;
151
+ $[62] = granularity;
152
+ $[63] = locale;
153
+ $[64] = pattern;
154
+ $[65] = t17;
155
+ } else t17 = $[65];
156
+ const formatEnd = t17;
131
157
  commit = (next) => {
132
- const bounded = next && toRange(clampDate(next.start, lower, upper), clampDate(next.end, lower, upper));
158
+ const cut = (date_0) => truncate(clampDate(date_0, lower, upper), granularity);
159
+ const bounded = next && toRange(cut(next.start), cut(next.end));
133
160
  setInner(bounded);
134
161
  onValueChange?.(bounded);
135
162
  setOpen(false);
136
163
  };
137
164
  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 = {
165
+ t10 = field;
166
+ t11 = open;
167
+ t12 = setOpen;
168
+ t13 = placeholder;
169
+ if ($[66] !== current || $[67] !== formatEnd || $[68] !== formatValue) {
170
+ t14 = current ? formatValue?.(current) ?? `${formatEnd(current.start)} – ${formatEnd(current.end)}` : null;
171
+ $[66] = current;
172
+ $[67] = formatEnd;
173
+ $[68] = formatValue;
174
+ $[69] = t14;
175
+ } else t14 = $[69];
176
+ const t18 = typeof contentProps?.className === "string" && contentProps.className;
177
+ let t19;
178
+ if ($[70] !== t18) {
179
+ t19 = cx("oui-date-range-picker__popup", t18);
180
+ $[70] = t18;
181
+ $[71] = t19;
182
+ } else t19 = $[71];
183
+ if ($[72] !== contentProps || $[73] !== t19) {
184
+ t15 = {
157
185
  ...contentProps,
158
- className: t17
186
+ className: t19
159
187
  };
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", {
188
+ $[72] = contentProps;
189
+ $[73] = t19;
190
+ $[74] = t15;
191
+ } else t15 = $[74];
192
+ let t20;
193
+ if ($[75] !== current?.start || $[76] !== startName) {
194
+ t20 = startName && /* @__PURE__ */ jsx("input", {
167
195
  type: "hidden",
168
196
  name: startName,
169
197
  value: current?.start ?? ""
170
198
  });
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", {
199
+ $[75] = current?.start;
200
+ $[76] = startName;
201
+ $[77] = t20;
202
+ } else t20 = $[77];
203
+ let t21;
204
+ if ($[78] !== current?.end || $[79] !== endName) {
205
+ t21 = endName && /* @__PURE__ */ jsx("input", {
178
206
  type: "hidden",
179
207
  name: endName,
180
208
  value: current?.end ?? ""
181
209
  });
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", {
210
+ $[78] = current?.end;
211
+ $[79] = endName;
212
+ $[80] = t21;
213
+ } else t21 = $[80];
214
+ if ($[81] !== t20 || $[82] !== t21) {
215
+ t16 = /* @__PURE__ */ jsxs(Fragment, { children: [t20, t21] });
216
+ $[81] = t20;
217
+ $[82] = t21;
218
+ $[83] = t16;
219
+ } else t16 = $[83];
220
+ t8 = "oui-date-range-picker__body";
221
+ t9 = presets && presets.length > 0 && /* @__PURE__ */ jsx("div", {
194
222
  role: "group",
195
223
  "aria-label": text.presets,
196
224
  className: "oui-date-range-picker__presets",
@@ -208,51 +236,55 @@ function DateRangePicker(t0) {
208
236
  }, index);
209
237
  })
210
238
  });
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;
239
+ $[30] = config;
240
+ $[31] = contentProps;
241
+ $[32] = current;
242
+ $[33] = endName;
243
+ $[34] = field;
244
+ $[35] = format;
245
+ $[36] = formatValue;
246
+ $[37] = granularity;
247
+ $[38] = locale;
248
+ $[39] = max;
249
+ $[40] = min;
250
+ $[41] = onValueChange;
251
+ $[42] = open;
252
+ $[43] = placeholder;
253
+ $[44] = presets;
254
+ $[45] = setOpen;
255
+ $[46] = startName;
256
+ $[47] = text;
257
+ $[48] = T0;
258
+ $[49] = commit;
259
+ $[50] = lower;
260
+ $[51] = t10;
261
+ $[52] = t11;
262
+ $[53] = t12;
263
+ $[54] = t13;
264
+ $[55] = t14;
265
+ $[56] = t15;
266
+ $[57] = t16;
267
+ $[58] = t8;
268
+ $[59] = t9;
269
+ $[60] = upper;
238
270
  } 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];
271
+ T0 = $[48];
272
+ commit = $[49];
273
+ lower = $[50];
274
+ t10 = $[51];
275
+ t11 = $[52];
276
+ t12 = $[53];
277
+ t13 = $[54];
278
+ t14 = $[55];
279
+ t15 = $[56];
280
+ t16 = $[57];
281
+ t8 = $[58];
282
+ t9 = $[59];
283
+ upper = $[60];
252
284
  }
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, {
285
+ let t17;
286
+ if ($[84] !== commit || $[85] !== current || $[86] !== defaultMonth || $[87] !== granularity || $[88] !== isDateDisabled || $[89] !== labels || $[90] !== locale || $[91] !== lower || $[92] !== numberOfMonths || $[93] !== upper || $[94] !== weekStartsOn) {
287
+ t17 = /* @__PURE__ */ jsx(RangeCalendar, {
256
288
  value: current,
257
289
  onValueChange: commit,
258
290
  min: lower,
@@ -262,34 +294,36 @@ function DateRangePicker(t0) {
262
294
  locale,
263
295
  weekStartsOn,
264
296
  numberOfMonths,
297
+ granularity,
265
298
  labels
266
299
  });
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];
300
+ $[84] = commit;
301
+ $[85] = current;
302
+ $[86] = defaultMonth;
303
+ $[87] = granularity;
304
+ $[88] = isDateDisabled;
305
+ $[89] = labels;
306
+ $[90] = locale;
307
+ $[91] = lower;
308
+ $[92] = numberOfMonths;
309
+ $[93] = upper;
310
+ $[94] = weekStartsOn;
311
+ $[95] = t17;
312
+ } else t17 = $[95];
290
313
  let t18;
291
- if ($[87] !== clearable || $[88] !== commit || $[89] !== current || $[90] !== field || $[91] !== text) {
292
- t18 = (clearable ?? !field.required) && /* @__PURE__ */ jsx("div", {
314
+ if ($[96] !== t17 || $[97] !== t8 || $[98] !== t9) {
315
+ t18 = /* @__PURE__ */ jsxs("div", {
316
+ className: t8,
317
+ children: [t9, t17]
318
+ });
319
+ $[96] = t17;
320
+ $[97] = t8;
321
+ $[98] = t9;
322
+ $[99] = t18;
323
+ } else t18 = $[99];
324
+ let t19;
325
+ if ($[100] !== clearable || $[101] !== commit || $[102] !== current || $[103] !== field || $[104] !== text) {
326
+ t19 = (clearable ?? !field.required) && /* @__PURE__ */ jsx("div", {
293
327
  className: "oui-date-picker__footer",
294
328
  children: /* @__PURE__ */ jsx(Button, {
295
329
  size: "sm",
@@ -300,38 +334,38 @@ function DateRangePicker(t0) {
300
334
  children: text.clear
301
335
  })
302
336
  });
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]
337
+ $[100] = clearable;
338
+ $[101] = commit;
339
+ $[102] = current;
340
+ $[103] = field;
341
+ $[104] = text;
342
+ $[105] = t19;
343
+ } else t19 = $[105];
344
+ let t20;
345
+ if ($[106] !== T0 || $[107] !== t10 || $[108] !== t11 || $[109] !== t12 || $[110] !== t13 || $[111] !== t14 || $[112] !== t15 || $[113] !== t16 || $[114] !== t18 || $[115] !== t19) {
346
+ t20 = /* @__PURE__ */ jsxs(T0, {
347
+ ...t10,
348
+ open: t11,
349
+ onOpenChange: t12,
350
+ placeholder: t13,
351
+ display: t14,
352
+ contentProps: t15,
353
+ inputs: t16,
354
+ children: [t18, t19]
321
355
  });
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;
356
+ $[106] = T0;
357
+ $[107] = t10;
358
+ $[108] = t11;
359
+ $[109] = t12;
360
+ $[110] = t13;
361
+ $[111] = t14;
362
+ $[112] = t15;
363
+ $[113] = t16;
364
+ $[114] = t18;
365
+ $[115] = t19;
366
+ $[116] = t20;
367
+ } else t20 = $[116];
368
+ return t20;
335
369
  }
336
370
  //#endregion
337
371
  export { DateRangePicker };
@@ -1 +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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"}
1
+ {"version":3,"file":"DateRangePicker.js","names":["React","cx","Button","RangeCalendar","CalendarLabels","DateRange","RangeCalendarProps","clampDate","datePart","formatDate","toRange","truncate","useDateConfig","PickerField","useOpenState","PickerFieldProps","DateRangePickerLabels","clear","presets","defaultLabels","Omit","DateRangePreset","label","ReactNode","value","DateRangePickerProps","Pick","defaultValue","onValueChange","min","max","startName","endName","clearable","format","formatValue","labels","Partial","DateRangePicker","t0","$","_c","contentProps","defaultMonth","field","isDateDisabled","locale","t1","t2","t3","t4","weekStartsOn","numberOfMonths","granularity","placeholder","undefined","t5","text","config","t6","end","start","inner","setInner","useState","t7","current","open","setOpen","T0","commit","lower","t10","t11","t12","t13","t14","t15","t16","t8","t9","upper","pattern","formats","t17","date","formatEnd","next","cut","date_0","bounded","t18","className","t19","t20","t21","length","map","preset","index","range","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, truncate } from '../calendar/date-utils';\nimport { useDateConfig } from '../calendar/DateConfig';\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' | 'granularity'> {\n /** Selected days as ISO dates; both ends are inclusive. */\n value?: DateRange | null;\n /** Initially selected range when uncontrolled. */\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 /** Display pattern for each end, e.g. `\"DD.MM.YYYY\"` (tokens as in `formatDate`). Defaults to `DateConfigProvider` formats, then an ISO-style pattern for the granularity. */\n format?: string;\n /** Custom display text for the selected range. Wins over `format`. */\n formatValue?: (value: DateRange) => React.ReactNode;\n /** Override texts for localisation. */\n labels?: Partial<DateRangePickerLabels>;\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. With\n * `granularity=\"month\"` or `\"year\"` it picks whole months or years, and each end\n * is the first day of its period.\n *\n * @example\n * <DateRangePicker label=\"Period\" value={period} onValueChange={setPeriod} presets={presets} />\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 granularity = 'day',\n presets,\n startName,\n endName,\n placeholder = 'Select dates',\n clearable,\n format,\n formatValue,\n labels,\n contentProps,\n ...field\n}: DateRangePickerProps) {\n const text = { ...defaultLabels, ...labels };\n const config = useDateConfig();\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 const pattern = format ?? config.formats?.[granularity];\n const formatEnd = (date: string) => formatDate(date, { format: pattern, granularity, locale: locale ?? config.locale });\n\n const commit = (next: DateRange | null) => {\n const cut = (date: string) => truncate(clampDate(date, lower, upper), granularity);\n const bounded = next && toRange(cut(next.start), cut(next.end));\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) ?? `${formatEnd(current.start)} – ${formatEnd(current.end)}`) : 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 granularity={granularity}\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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"}
@@ -4,22 +4,35 @@ import { type PopoverContentProps } from '../popover/Popover';
4
4
  import type { ControlSize } from '../input/Input';
5
5
  /** Field props shared by the date pickers. */
6
6
  export interface PickerFieldProps {
7
+ /** Ref to the trigger button. */
7
8
  ref?: React.Ref<HTMLButtonElement>;
9
+ /** Visible field label. */
8
10
  label?: React.ReactNode;
11
+ /** Help text under the field. */
9
12
  description?: React.ReactNode;
10
13
  /** Error message. When set, the field is marked invalid. */
11
14
  error?: React.ReactNode;
15
+ /** Marks the field required and adds the required indicator to the label. */
12
16
  required?: boolean;
17
+ /** Disables the field. */
13
18
  disabled?: boolean;
19
+ /** Text shown while no date is selected. */
14
20
  placeholder?: React.ReactNode;
21
+ /** Control height. */
15
22
  size?: ControlSize;
23
+ /** Whether the calendar popover is open (controlled). */
16
24
  open?: boolean;
25
+ /** Initial popover state when uncontrolled. */
17
26
  defaultOpen?: boolean;
27
+ /** Called when the popover opens or closes. */
18
28
  onOpenChange?: (open: boolean) => void;
29
+ /** Id of the trigger button. Generated when omitted. */
19
30
  id?: string;
31
+ /** Class name for the trigger button. */
20
32
  className?: string;
21
33
  /** Props for the trigger button (aria-*, data-*, onBlur…). */
22
34
  triggerProps?: Omit<React.ComponentProps<typeof BasePopover.Trigger>, 'children' | 'disabled' | 'id'>;
35
+ /** Props for the popover content. */
23
36
  contentProps?: Omit<PopoverContentProps, 'children'>;
24
37
  }
25
38
  export declare function useOpenState({ open, defaultOpen, onOpenChange }: PickerFieldProps): readonly [boolean, (next: boolean) => void];