@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,709 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { ChevronLeftIcon, ChevronRightIcon } from "../../icons/index.js";
4
+ import { addDays, addMonths, clampDate, datePart, formatDate, formatDateLong, monthGrid, pad, startOfMonth, toRange, toUtcDate, todayIso, weekday } from "./date-utils.js";
5
+ import { c } from "react/compiler-runtime";
6
+ import * as React from "react";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/components/calendar/Calendar.tsx
9
+ var defaultLabels = {
10
+ previousMonth: "Previous month",
11
+ nextMonth: "Next month",
12
+ previousYear: "Previous year",
13
+ nextYear: "Next year",
14
+ previousYears: "Previous years",
15
+ nextYears: "Next years",
16
+ chooseMonth: "Choose month",
17
+ chooseYear: "Choose year"
18
+ };
19
+ /** Years listed per page, in rows of three like the months. */
20
+ var YEARS = 12;
21
+ var yearOf = (date) => Number(date.slice(0, 4));
22
+ var monthNumber = (date) => yearOf(date) * 12 + Number(date.slice(5, 7));
23
+ /** The first visible month after moving `view` just enough to show `date`. */
24
+ function reveal(view, date, count) {
25
+ const month = startOfMonth(date);
26
+ if (month < view) return month;
27
+ return month > addMonths(view, count - 1) ? addMonths(month, 1 - count) : view;
28
+ }
29
+ /** The months of the cursor's year, or the page of years around it. */
30
+ function chooserItems({ mode, cursor }) {
31
+ const year = yearOf(cursor);
32
+ if (mode === "months") return Array.from({ length: 12 }, (_, month) => `${cursor.slice(0, 5)}${pad(month + 1)}-01`);
33
+ const start = Math.floor((year - 1) / YEARS) * YEARS + 1;
34
+ return Array.from({ length: YEARS }, (_, offset) => start + offset).filter((item) => item <= 9999).map((item) => `${pad(item, 4)}${cursor.slice(4, 8)}01`);
35
+ }
36
+ /** Month grids, navigation and keyboard handling shared by Calendar and RangeCalendar. */
37
+ function CalendarView(t0) {
38
+ const $ = c(76);
39
+ let autoFocus;
40
+ let className;
41
+ let dayState;
42
+ let defaultMonth;
43
+ let isDateDisabled;
44
+ let labels;
45
+ let locale;
46
+ let max;
47
+ let min;
48
+ let multiselectable;
49
+ let onPick;
50
+ let onPreview;
51
+ let props;
52
+ let ref;
53
+ let t1;
54
+ let t2;
55
+ let target;
56
+ if ($[0] !== t0) {
57
+ ({target, dayState, onPick, onPreview, multiselectable, min, max, isDateDisabled, defaultMonth, locale, weekStartsOn: t1, numberOfMonths: t2, autoFocus, labels, className, ref, ...props} = t0);
58
+ $[0] = t0;
59
+ $[1] = autoFocus;
60
+ $[2] = className;
61
+ $[3] = dayState;
62
+ $[4] = defaultMonth;
63
+ $[5] = isDateDisabled;
64
+ $[6] = labels;
65
+ $[7] = locale;
66
+ $[8] = max;
67
+ $[9] = min;
68
+ $[10] = multiselectable;
69
+ $[11] = onPick;
70
+ $[12] = onPreview;
71
+ $[13] = props;
72
+ $[14] = ref;
73
+ $[15] = t1;
74
+ $[16] = t2;
75
+ $[17] = target;
76
+ } else {
77
+ autoFocus = $[1];
78
+ className = $[2];
79
+ dayState = $[3];
80
+ defaultMonth = $[4];
81
+ isDateDisabled = $[5];
82
+ labels = $[6];
83
+ locale = $[7];
84
+ max = $[8];
85
+ min = $[9];
86
+ multiselectable = $[10];
87
+ onPick = $[11];
88
+ onPreview = $[12];
89
+ props = $[13];
90
+ ref = $[14];
91
+ t1 = $[15];
92
+ t2 = $[16];
93
+ target = $[17];
94
+ }
95
+ const weekStartsOn = t1 === void 0 ? 1 : t1;
96
+ const numberOfMonths = t2 === void 0 ? 1 : t2;
97
+ let t3;
98
+ if ($[18] !== labels) {
99
+ t3 = {
100
+ ...defaultLabels,
101
+ ...labels
102
+ };
103
+ $[18] = labels;
104
+ $[19] = t3;
105
+ } else t3 = $[19];
106
+ const text = t3;
107
+ const count = Math.max(1, Math.floor(numberOfMonths));
108
+ const [today] = React.useState(todayIso);
109
+ let t4;
110
+ if ($[20] !== defaultMonth || $[21] !== max || $[22] !== min || $[23] !== target || $[24] !== today) {
111
+ t4 = () => clampDate(target ?? datePart(defaultMonth) ?? today, min, max);
112
+ $[20] = defaultMonth;
113
+ $[21] = max;
114
+ $[22] = min;
115
+ $[23] = target;
116
+ $[24] = today;
117
+ $[25] = t4;
118
+ } else t4 = $[25];
119
+ const [focused, setFocused] = React.useState(t4);
120
+ let t5;
121
+ if ($[26] !== focused) {
122
+ t5 = () => startOfMonth(focused);
123
+ $[26] = focused;
124
+ $[27] = t5;
125
+ } else t5 = $[27];
126
+ const [view, setView] = React.useState(t5);
127
+ const monthsRef = React.useRef(null);
128
+ const moveFocus = React.useRef(Boolean(autoFocus));
129
+ const titleId = React.useId();
130
+ const [chooser, setChooser] = React.useState(null);
131
+ const [seen, setSeen] = React.useState(target);
132
+ if (target !== seen) {
133
+ setSeen(target);
134
+ if (target) {
135
+ setFocused(target);
136
+ setView(reveal(view, target, count));
137
+ }
138
+ }
139
+ let t6;
140
+ if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
141
+ t6 = () => {
142
+ if (!moveFocus.current) return;
143
+ moveFocus.current = false;
144
+ const months = monthsRef.current;
145
+ (months?.querySelector(".oui-calendar__choice[tabindex=\"0\"]") ?? months?.querySelector("[tabindex=\"0\"]"))?.focus();
146
+ };
147
+ $[28] = t6;
148
+ } else t6 = $[28];
149
+ let t7;
150
+ if ($[29] !== chooser || $[30] !== focused) {
151
+ t7 = [focused, chooser];
152
+ $[29] = chooser;
153
+ $[30] = focused;
154
+ $[31] = t7;
155
+ } else t7 = $[31];
156
+ React.useEffect(t6, t7);
157
+ let t8;
158
+ if ($[32] !== isDateDisabled || $[33] !== max || $[34] !== min) {
159
+ t8 = (date) => Boolean(min && date < min || max && date > max || isDateDisabled?.(date));
160
+ $[32] = isDateDisabled;
161
+ $[33] = max;
162
+ $[34] = min;
163
+ $[35] = t8;
164
+ } else t8 = $[35];
165
+ const disabled = t8;
166
+ let t10;
167
+ let t11;
168
+ let t12;
169
+ let t13;
170
+ let t14;
171
+ let t15;
172
+ let t9;
173
+ if ($[36] !== chooser || $[37] !== className || $[38] !== count || $[39] !== dayState || $[40] !== disabled || $[41] !== focused || $[42] !== locale || $[43] !== max || $[44] !== min || $[45] !== multiselectable || $[46] !== onPick || $[47] !== onPreview || $[48] !== props || $[49] !== ref || $[50] !== text || $[51] !== titleId || $[52] !== today || $[53] !== view || $[54] !== weekStartsOn) {
174
+ const formats = {
175
+ monthLong: new Intl.DateTimeFormat(locale, {
176
+ month: "long",
177
+ timeZone: "UTC"
178
+ }),
179
+ month: new Intl.DateTimeFormat(locale, {
180
+ month: "short",
181
+ timeZone: "UTC"
182
+ }),
183
+ weekdayShort: new Intl.DateTimeFormat(locale, {
184
+ weekday: "short",
185
+ timeZone: "UTC"
186
+ }),
187
+ weekdayLong: new Intl.DateTimeFormat(locale, {
188
+ weekday: "long",
189
+ timeZone: "UTC"
190
+ })
191
+ };
192
+ const yearText = _temp;
193
+ const go = (date_1) => {
194
+ const next = clampDate(date_1, min, max);
195
+ moveFocus.current = true;
196
+ setFocused(next);
197
+ setView(reveal(view, next, count));
198
+ return next;
199
+ };
200
+ const page = (amount) => {
201
+ const next_0 = clampDate(addMonths(focused, amount), min, max);
202
+ setFocused(next_0);
203
+ setView(reveal(addMonths(view, amount), next_0, count));
204
+ };
205
+ const select = (date_2) => {
206
+ if (disabled(date_2)) return;
207
+ go(date_2);
208
+ onPick(date_2);
209
+ };
210
+ const onKeyDown = (event) => {
211
+ const offset = (weekday(focused) - weekStartsOn + 7) % 7;
212
+ const move = {
213
+ ArrowLeft: () => addDays(focused, -1),
214
+ ArrowRight: () => addDays(focused, 1),
215
+ ArrowUp: () => addDays(focused, -7),
216
+ ArrowDown: () => addDays(focused, 7),
217
+ Home: () => addDays(focused, -offset),
218
+ End: () => addDays(focused, 6 - offset),
219
+ PageUp: () => addMonths(focused, event.shiftKey ? -12 : -1),
220
+ PageDown: () => addMonths(focused, event.shiftKey ? 12 : 1)
221
+ }[event.key];
222
+ if (!move) return;
223
+ event.preventDefault();
224
+ const day = go(move());
225
+ onPreview?.(day);
226
+ };
227
+ const earliest = startOfMonth(min ?? "0001-01-01");
228
+ const latest = startOfMonth(max ?? "9999-12-01");
229
+ const openChooser = (index, mode, cursor) => {
230
+ moveFocus.current = true;
231
+ setChooser({
232
+ index,
233
+ mode,
234
+ cursor: clampDate(cursor, earliest, latest)
235
+ });
236
+ };
237
+ const closeChooser = () => {
238
+ moveFocus.current = true;
239
+ setChooser(null);
240
+ };
241
+ const moveChooser = (current, amount_0, focus) => {
242
+ const step = current.mode === "months" ? amount_0 : amount_0 * 12;
243
+ if (monthNumber(current.cursor) + step < 13 || monthNumber(current.cursor) + step > 12e4) return;
244
+ moveFocus.current = focus;
245
+ setChooser({
246
+ ...current,
247
+ cursor: clampDate(addMonths(current.cursor, step), earliest, latest)
248
+ });
249
+ };
250
+ const choose = (current_0, date_3) => {
251
+ if (current_0.mode === "years") {
252
+ openChooser(current_0.index, "months", date_3);
253
+ return;
254
+ }
255
+ const next_2 = clampDate(addMonths(focused, monthNumber(date_3) - monthNumber(focused)), min, max);
256
+ moveFocus.current = true;
257
+ setFocused(next_2);
258
+ setView(reveal(addMonths(date_3, -current_0.index), next_2, count));
259
+ setChooser(null);
260
+ };
261
+ const onChooserKeyDown = (current_1) => (event_0) => {
262
+ if (event_0.key === "Escape") {
263
+ event_0.preventDefault();
264
+ event_0.stopPropagation();
265
+ closeChooser();
266
+ return;
267
+ }
268
+ const amount_1 = {
269
+ ArrowLeft: -1,
270
+ ArrowRight: 1,
271
+ ArrowUp: -3,
272
+ ArrowDown: 3,
273
+ PageUp: -12,
274
+ PageDown: YEARS
275
+ }[event_0.key];
276
+ if (!amount_1) return;
277
+ event_0.preventDefault();
278
+ moveChooser(current_1, amount_1, true);
279
+ };
280
+ const months_0 = Array.from({ length: count }, (_, index_0) => addMonths(view, index_0));
281
+ const previous = addDays(view, -1);
282
+ const following = addMonths(view, count);
283
+ t13 = ref;
284
+ if ($[62] !== className) {
285
+ t14 = cx("oui-calendar", className);
286
+ $[62] = className;
287
+ $[63] = t14;
288
+ } else t14 = $[63];
289
+ t15 = props;
290
+ t9 = monthsRef;
291
+ t10 = "oui-calendar__months";
292
+ if ($[64] !== onPreview) {
293
+ t11 = onPreview ? () => onPreview(null) : void 0;
294
+ $[64] = onPreview;
295
+ $[65] = t11;
296
+ } else t11 = $[65];
297
+ t12 = months_0.map((first, index_1) => {
298
+ const days = monthGrid(first, weekStartsOn);
299
+ const month = first.slice(0, 7);
300
+ const weeks = Array.from({ length: 6 }, (__0, week) => days.slice(week * 7, week * 7 + 7));
301
+ const choosing = chooser?.index === index_1 ? chooser : null;
302
+ const choices = choosing ? chooserItems(choosing) : [];
303
+ return /* @__PURE__ */ jsxs("div", {
304
+ className: "oui-calendar__month",
305
+ children: [/* @__PURE__ */ jsxs("div", {
306
+ className: "oui-calendar__header",
307
+ children: [
308
+ choosing ? /* @__PURE__ */ jsx("button", {
309
+ type: "button",
310
+ className: "oui-calendar__nav",
311
+ "aria-label": choosing.mode === "months" ? text.previousYear : text.previousYears,
312
+ disabled: choices[0].slice(0, 4) <= earliest.slice(0, 4),
313
+ onClick: () => moveChooser(choosing, -12, false),
314
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, {})
315
+ }) : index_1 === 0 ? /* @__PURE__ */ jsx("button", {
316
+ type: "button",
317
+ className: "oui-calendar__nav",
318
+ "aria-label": text.previousMonth,
319
+ disabled: Boolean(min && previous < min),
320
+ onClick: () => page(-1),
321
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, {})
322
+ }) : /* @__PURE__ */ jsx("span", { className: "oui-calendar__nav-spacer" }),
323
+ /* @__PURE__ */ jsx("div", {
324
+ id: `${titleId}-${index_1}`,
325
+ className: "oui-calendar__title",
326
+ "aria-live": "polite",
327
+ children: !choosing ? /* @__PURE__ */ jsxs(Fragment, { children: [
328
+ /* @__PURE__ */ jsx("button", {
329
+ type: "button",
330
+ className: "oui-calendar__title-button",
331
+ title: text.chooseYear,
332
+ onClick: () => openChooser(index_1, "years", first),
333
+ children: yearText(first)
334
+ }),
335
+ ". ",
336
+ /* @__PURE__ */ jsx("button", {
337
+ type: "button",
338
+ className: "oui-calendar__title-button",
339
+ title: text.chooseMonth,
340
+ onClick: () => openChooser(index_1, "months", first),
341
+ children: formats.monthLong.format(toUtcDate(first))
342
+ })
343
+ ] }) : choosing.mode === "months" ? /* @__PURE__ */ jsx("button", {
344
+ type: "button",
345
+ className: "oui-calendar__title-button",
346
+ title: text.chooseYear,
347
+ onClick: () => openChooser(index_1, "years", choosing.cursor),
348
+ children: yearText(choosing.cursor)
349
+ }) : `${yearText(choices[0])} – ${yearText(choices[choices.length - 1])}`
350
+ }),
351
+ choosing ? /* @__PURE__ */ jsx("button", {
352
+ type: "button",
353
+ className: "oui-calendar__nav",
354
+ "aria-label": choosing.mode === "months" ? text.nextYear : text.nextYears,
355
+ disabled: choices[choices.length - 1].slice(0, 4) >= latest.slice(0, 4),
356
+ onClick: () => moveChooser(choosing, YEARS, false),
357
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
358
+ }) : index_1 === count - 1 ? /* @__PURE__ */ jsx("button", {
359
+ type: "button",
360
+ className: "oui-calendar__nav",
361
+ "aria-label": text.nextMonth,
362
+ disabled: Boolean(max && following > max),
363
+ onClick: () => page(1),
364
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
365
+ }) : /* @__PURE__ */ jsx("span", { className: "oui-calendar__nav-spacer" })
366
+ ]
367
+ }), choosing ? /* @__PURE__ */ jsx("div", {
368
+ role: "group",
369
+ "aria-labelledby": `${titleId}-${index_1}`,
370
+ className: "oui-calendar__choices",
371
+ onKeyDown: onChooserKeyDown(choosing),
372
+ children: choices.map((date_4) => {
373
+ const unit = choosing.mode === "months" ? 7 : 4;
374
+ const key = date_4.slice(0, unit);
375
+ const unavailable = key < earliest.slice(0, unit) || key > latest.slice(0, unit);
376
+ const shown = key === first.slice(0, unit);
377
+ return /* @__PURE__ */ jsx("button", {
378
+ type: "button",
379
+ className: "oui-calendar__choice",
380
+ tabIndex: key === choosing.cursor.slice(0, unit) ? 0 : -1,
381
+ "aria-pressed": shown,
382
+ "aria-disabled": unavailable || void 0,
383
+ "data-selected": shown ? "" : void 0,
384
+ "data-today": key === today.slice(0, unit) ? "" : void 0,
385
+ "data-disabled": unavailable ? "" : void 0,
386
+ onClick: unavailable ? void 0 : () => choose(choosing, date_4),
387
+ children: choosing.mode === "months" ? formats.month.format(toUtcDate(date_4)) : yearText(date_4)
388
+ }, date_4);
389
+ })
390
+ }) : /* @__PURE__ */ jsxs("div", {
391
+ role: "grid",
392
+ "aria-labelledby": `${titleId}-${index_1}`,
393
+ "aria-multiselectable": multiselectable || void 0,
394
+ className: "oui-calendar__grid",
395
+ onKeyDown,
396
+ children: [/* @__PURE__ */ jsx("div", {
397
+ role: "row",
398
+ className: "oui-calendar__row",
399
+ children: days.slice(0, 7).map((date_5) => /* @__PURE__ */ jsx("span", {
400
+ role: "columnheader",
401
+ className: "oui-calendar__weekday",
402
+ "aria-label": formats.weekdayLong.format(toUtcDate(date_5)),
403
+ children: formats.weekdayShort.format(toUtcDate(date_5))
404
+ }, date_5))
405
+ }), weeks.map((week_0) => /* @__PURE__ */ jsx("div", {
406
+ role: "row",
407
+ className: "oui-calendar__row",
408
+ children: week_0.map((date_6) => {
409
+ const outside = date_6.slice(0, 7) !== month;
410
+ if (outside && count > 1) return /* @__PURE__ */ jsx("span", {
411
+ role: "gridcell",
412
+ className: "oui-calendar__blank"
413
+ }, date_6);
414
+ const state = dayState(date_6);
415
+ return /* @__PURE__ */ jsx("button", {
416
+ type: "button",
417
+ role: "gridcell",
418
+ className: "oui-calendar__day",
419
+ tabIndex: date_6 === focused ? 0 : -1,
420
+ "aria-label": `${formatDateLong(date_6, locale)}, ${formats.weekdayLong.format(toUtcDate(date_6))}`,
421
+ "aria-selected": Boolean(state.selected || state.inRange),
422
+ "aria-current": date_6 === today ? "date" : void 0,
423
+ "aria-disabled": disabled(date_6) || void 0,
424
+ "data-selected": state.selected ? "" : void 0,
425
+ "data-in-range": state.inRange ? "" : void 0,
426
+ "data-range-start": state.rangeStart ? "" : void 0,
427
+ "data-range-end": state.rangeEnd ? "" : void 0,
428
+ "data-today": date_6 === today ? "" : void 0,
429
+ "data-outside": outside ? "" : void 0,
430
+ "data-disabled": disabled(date_6) ? "" : void 0,
431
+ onClick: () => select(date_6),
432
+ onPointerEnter: onPreview ? () => onPreview(date_6) : void 0,
433
+ children: Number(date_6.slice(8))
434
+ }, date_6);
435
+ })
436
+ }, week_0[0]))]
437
+ })]
438
+ }, month);
439
+ });
440
+ $[36] = chooser;
441
+ $[37] = className;
442
+ $[38] = count;
443
+ $[39] = dayState;
444
+ $[40] = disabled;
445
+ $[41] = focused;
446
+ $[42] = locale;
447
+ $[43] = max;
448
+ $[44] = min;
449
+ $[45] = multiselectable;
450
+ $[46] = onPick;
451
+ $[47] = onPreview;
452
+ $[48] = props;
453
+ $[49] = ref;
454
+ $[50] = text;
455
+ $[51] = titleId;
456
+ $[52] = today;
457
+ $[53] = view;
458
+ $[54] = weekStartsOn;
459
+ $[55] = t10;
460
+ $[56] = t11;
461
+ $[57] = t12;
462
+ $[58] = t13;
463
+ $[59] = t14;
464
+ $[60] = t15;
465
+ $[61] = t9;
466
+ } else {
467
+ t10 = $[55];
468
+ t11 = $[56];
469
+ t12 = $[57];
470
+ t13 = $[58];
471
+ t14 = $[59];
472
+ t15 = $[60];
473
+ t9 = $[61];
474
+ }
475
+ let t16;
476
+ if ($[66] !== t10 || $[67] !== t11 || $[68] !== t12 || $[69] !== t9) {
477
+ t16 = /* @__PURE__ */ jsx("div", {
478
+ ref: t9,
479
+ className: t10,
480
+ onPointerLeave: t11,
481
+ children: t12
482
+ });
483
+ $[66] = t10;
484
+ $[67] = t11;
485
+ $[68] = t12;
486
+ $[69] = t9;
487
+ $[70] = t16;
488
+ } else t16 = $[70];
489
+ let t17;
490
+ if ($[71] !== t13 || $[72] !== t14 || $[73] !== t15 || $[74] !== t16) {
491
+ t17 = /* @__PURE__ */ jsx("div", {
492
+ ref: t13,
493
+ className: t14,
494
+ ...t15,
495
+ children: t16
496
+ });
497
+ $[71] = t13;
498
+ $[72] = t14;
499
+ $[73] = t15;
500
+ $[74] = t16;
501
+ $[75] = t17;
502
+ } else t17 = $[75];
503
+ return t17;
504
+ }
505
+ function _temp(date_0) {
506
+ return String(yearOf(date_0));
507
+ }
508
+ /**
509
+ * Month grid for picking one day. Keyboard: arrows move by day / week,
510
+ * Home / End jump within the week, PageUp / PageDown change month (with Shift: year).
511
+ * The month and year in the title open a list to jump straight to another one.
512
+ */
513
+ function Calendar(t0) {
514
+ const $ = c(19);
515
+ let onValueChange;
516
+ let props;
517
+ let t1;
518
+ let value;
519
+ if ($[0] !== t0) {
520
+ ({value, defaultValue: t1, onValueChange, ...props} = t0);
521
+ $[0] = t0;
522
+ $[1] = onValueChange;
523
+ $[2] = props;
524
+ $[3] = t1;
525
+ $[4] = value;
526
+ } else {
527
+ onValueChange = $[1];
528
+ props = $[2];
529
+ t1 = $[3];
530
+ value = $[4];
531
+ }
532
+ const defaultValue = t1 === void 0 ? null : t1;
533
+ let t2;
534
+ if ($[5] !== defaultValue) {
535
+ t2 = () => datePart(defaultValue);
536
+ $[5] = defaultValue;
537
+ $[6] = t2;
538
+ } else t2 = $[6];
539
+ const [inner, setInner] = React.useState(t2);
540
+ let t3;
541
+ if ($[7] !== inner || $[8] !== value) {
542
+ t3 = value === void 0 ? inner : datePart(value);
543
+ $[7] = inner;
544
+ $[8] = value;
545
+ $[9] = t3;
546
+ } else t3 = $[9];
547
+ const selected = t3;
548
+ let t4;
549
+ if ($[10] !== selected) {
550
+ t4 = (date) => ({ selected: date === selected });
551
+ $[10] = selected;
552
+ $[11] = t4;
553
+ } else t4 = $[11];
554
+ let t5;
555
+ if ($[12] !== onValueChange) {
556
+ t5 = (date_0) => {
557
+ setInner(date_0);
558
+ onValueChange?.(date_0);
559
+ };
560
+ $[12] = onValueChange;
561
+ $[13] = t5;
562
+ } else t5 = $[13];
563
+ let t6;
564
+ if ($[14] !== props || $[15] !== selected || $[16] !== t4 || $[17] !== t5) {
565
+ t6 = /* @__PURE__ */ jsx(CalendarView, {
566
+ target: selected,
567
+ dayState: t4,
568
+ ...props,
569
+ onPick: t5
570
+ });
571
+ $[14] = props;
572
+ $[15] = selected;
573
+ $[16] = t4;
574
+ $[17] = t5;
575
+ $[18] = t6;
576
+ } else t6 = $[18];
577
+ return t6;
578
+ }
579
+ var rangeKey = (range) => range ? `${range.start}/${range.end}` : "";
580
+ /**
581
+ * Month grid for picking a range of days: the first pick sets one end, the
582
+ * second completes the range (in either order). Same keyboard as Calendar.
583
+ * Disabled days cannot be picked as an end but may fall inside a range.
584
+ */
585
+ function RangeCalendar(t0) {
586
+ const $ = c(31);
587
+ let onValueChange;
588
+ let props;
589
+ let t1;
590
+ let value;
591
+ if ($[0] !== t0) {
592
+ ({value, defaultValue: t1, onValueChange, ...props} = t0);
593
+ $[0] = t0;
594
+ $[1] = onValueChange;
595
+ $[2] = props;
596
+ $[3] = t1;
597
+ $[4] = value;
598
+ } else {
599
+ onValueChange = $[1];
600
+ props = $[2];
601
+ t1 = $[3];
602
+ value = $[4];
603
+ }
604
+ const defaultValue = t1 === void 0 ? null : t1;
605
+ let t2;
606
+ if ($[5] !== defaultValue?.end || $[6] !== defaultValue?.start) {
607
+ t2 = () => toRange(defaultValue?.start, defaultValue?.end);
608
+ $[5] = defaultValue?.end;
609
+ $[6] = defaultValue?.start;
610
+ $[7] = t2;
611
+ } else t2 = $[7];
612
+ const [inner, setInner] = React.useState(t2);
613
+ let t3;
614
+ if ($[8] !== inner || $[9] !== value) {
615
+ t3 = value === void 0 ? inner : toRange(value?.start, value?.end);
616
+ $[8] = inner;
617
+ $[9] = value;
618
+ $[10] = t3;
619
+ } else t3 = $[10];
620
+ const range = t3;
621
+ const [anchor, setAnchor] = React.useState(null);
622
+ const [preview, setPreview] = React.useState(null);
623
+ let t4;
624
+ if ($[11] !== anchor || $[12] !== preview || $[13] !== range) {
625
+ t4 = anchor ? toRange(anchor, preview ?? anchor) : range;
626
+ $[11] = anchor;
627
+ $[12] = preview;
628
+ $[13] = range;
629
+ $[14] = t4;
630
+ } else t4 = $[14];
631
+ const shown = t4;
632
+ let t5;
633
+ if ($[15] !== range) {
634
+ t5 = () => rangeKey(range);
635
+ $[15] = range;
636
+ $[16] = t5;
637
+ } else t5 = $[16];
638
+ const [seen, setSeen] = React.useState(t5);
639
+ const [target, setTarget] = React.useState(range?.start ?? null);
640
+ if (rangeKey(range) !== seen) {
641
+ setSeen(rangeKey(range));
642
+ setTarget(range?.start ?? null);
643
+ }
644
+ let t6;
645
+ if ($[17] !== anchor || $[18] !== onValueChange) {
646
+ t6 = (date) => {
647
+ if (!anchor) {
648
+ setAnchor(date);
649
+ setPreview(date);
650
+ return;
651
+ }
652
+ const next = toRange(anchor, date);
653
+ setAnchor(null);
654
+ setPreview(null);
655
+ if (!next) return;
656
+ setInner(next);
657
+ setSeen(rangeKey(next));
658
+ onValueChange?.(next);
659
+ };
660
+ $[17] = anchor;
661
+ $[18] = onValueChange;
662
+ $[19] = t6;
663
+ } else t6 = $[19];
664
+ const select = t6;
665
+ const t7 = anchor ? "" : void 0;
666
+ let t8;
667
+ if ($[20] !== shown) {
668
+ t8 = (date_0) => shown ? {
669
+ selected: date_0 === shown.start || date_0 === shown.end,
670
+ inRange: date_0 >= shown.start && date_0 <= shown.end,
671
+ rangeStart: date_0 === shown.start,
672
+ rangeEnd: date_0 === shown.end
673
+ } : {};
674
+ $[20] = shown;
675
+ $[21] = t8;
676
+ } else t8 = $[21];
677
+ let t9;
678
+ if ($[22] !== anchor) {
679
+ t9 = (date_1) => {
680
+ if (anchor) setPreview(date_1);
681
+ };
682
+ $[22] = anchor;
683
+ $[23] = t9;
684
+ } else t9 = $[23];
685
+ let t10;
686
+ if ($[24] !== props || $[25] !== select || $[26] !== t7 || $[27] !== t8 || $[28] !== t9 || $[29] !== target) {
687
+ t10 = /* @__PURE__ */ jsx(CalendarView, {
688
+ multiselectable: true,
689
+ "data-selecting": t7,
690
+ target,
691
+ dayState: t8,
692
+ ...props,
693
+ onPick: select,
694
+ onPreview: t9
695
+ });
696
+ $[24] = props;
697
+ $[25] = select;
698
+ $[26] = t7;
699
+ $[27] = t8;
700
+ $[28] = t9;
701
+ $[29] = target;
702
+ $[30] = t10;
703
+ } else t10 = $[30];
704
+ return t10;
705
+ }
706
+ //#endregion
707
+ export { Calendar, RangeCalendar, formatDate, formatDateLong };
708
+
709
+ //# sourceMappingURL=Calendar.js.map