jaci-ui 0.3.0 → 0.4.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 (112) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +48 -0
  3. package/dist/components/calendar/calendar.cjs +377 -0
  4. package/dist/components/calendar/calendar.cjs.map +1 -0
  5. package/dist/components/calendar/calendar.d.cts +56 -0
  6. package/dist/components/calendar/calendar.d.ts +56 -0
  7. package/dist/components/calendar/calendar.js +368 -0
  8. package/dist/components/calendar/calendar.js.map +1 -0
  9. package/dist/components/calendar/index.d.cts +2 -0
  10. package/dist/components/calendar/index.d.ts +2 -0
  11. package/dist/components/combobox/combobox.cjs +13 -1
  12. package/dist/components/combobox/combobox.cjs.map +1 -1
  13. package/dist/components/combobox/combobox.d.cts +7 -2
  14. package/dist/components/combobox/combobox.d.ts +7 -2
  15. package/dist/components/combobox/combobox.js +13 -2
  16. package/dist/components/combobox/combobox.js.map +1 -1
  17. package/dist/components/combobox/index.d.cts +2 -2
  18. package/dist/components/combobox/index.d.ts +2 -2
  19. package/dist/components/controls/input.cjs +26 -5
  20. package/dist/components/controls/input.cjs.map +1 -1
  21. package/dist/components/controls/input.d.cts +5 -2
  22. package/dist/components/controls/input.d.ts +5 -2
  23. package/dist/components/controls/input.js +28 -7
  24. package/dist/components/controls/input.js.map +1 -1
  25. package/dist/components/controls/textarea.cjs +26 -5
  26. package/dist/components/controls/textarea.cjs.map +1 -1
  27. package/dist/components/controls/textarea.d.cts +5 -2
  28. package/dist/components/controls/textarea.d.ts +5 -2
  29. package/dist/components/controls/textarea.js +28 -7
  30. package/dist/components/controls/textarea.js.map +1 -1
  31. package/dist/components/date-picker/date-picker.cjs +9 -9
  32. package/dist/components/date-picker/date-picker.cjs.map +1 -1
  33. package/dist/components/date-picker/date-picker.d.cts +3 -1
  34. package/dist/components/date-picker/date-picker.d.ts +3 -1
  35. package/dist/components/date-picker/date-picker.js +9 -9
  36. package/dist/components/date-picker/date-picker.js.map +1 -1
  37. package/dist/components/date-range-picker/date-range-picker.cjs +589 -0
  38. package/dist/components/date-range-picker/date-range-picker.cjs.map +1 -0
  39. package/dist/components/date-range-picker/date-range-picker.d.cts +134 -0
  40. package/dist/components/date-range-picker/date-range-picker.d.ts +134 -0
  41. package/dist/components/date-range-picker/date-range-picker.js +568 -0
  42. package/dist/components/date-range-picker/date-range-picker.js.map +1 -0
  43. package/dist/components/date-range-picker/index.d.cts +2 -0
  44. package/dist/components/date-range-picker/index.d.ts +2 -0
  45. package/dist/components/field/field.cjs +106 -11
  46. package/dist/components/field/field.cjs.map +1 -1
  47. package/dist/components/field/field.d.cts +22 -4
  48. package/dist/components/field/field.d.ts +22 -4
  49. package/dist/components/field/field.js +107 -13
  50. package/dist/components/field/field.js.map +1 -1
  51. package/dist/components/field/index.d.cts +2 -2
  52. package/dist/components/field/index.d.ts +2 -2
  53. package/dist/components/pin-input/index.d.cts +2 -0
  54. package/dist/components/pin-input/index.d.ts +2 -0
  55. package/dist/components/pin-input/pin-input.cjs +266 -0
  56. package/dist/components/pin-input/pin-input.cjs.map +1 -0
  57. package/dist/components/pin-input/pin-input.d.cts +46 -0
  58. package/dist/components/pin-input/pin-input.d.ts +46 -0
  59. package/dist/components/pin-input/pin-input.js +258 -0
  60. package/dist/components/pin-input/pin-input.js.map +1 -0
  61. package/dist/components/select/index.d.cts +2 -2
  62. package/dist/components/select/index.d.ts +2 -2
  63. package/dist/components/select/select.cjs +80 -3
  64. package/dist/components/select/select.cjs.map +1 -1
  65. package/dist/components/select/select.d.cts +18 -3
  66. package/dist/components/select/select.d.ts +18 -3
  67. package/dist/components/select/select.js +78 -5
  68. package/dist/components/select/select.js.map +1 -1
  69. package/dist/components/tags-input/tags-input.cjs +83 -5
  70. package/dist/components/tags-input/tags-input.cjs.map +1 -1
  71. package/dist/components/tags-input/tags-input.d.cts +3 -0
  72. package/dist/components/tags-input/tags-input.d.ts +3 -0
  73. package/dist/components/tags-input/tags-input.js +83 -5
  74. package/dist/components/tags-input/tags-input.js.map +1 -1
  75. package/dist/components/upload/index.d.cts +2 -2
  76. package/dist/components/upload/index.d.ts +2 -2
  77. package/dist/components/upload/upload.cjs +90 -10
  78. package/dist/components/upload/upload.cjs.map +1 -1
  79. package/dist/components/upload/upload.d.cts +25 -2
  80. package/dist/components/upload/upload.d.ts +25 -2
  81. package/dist/components/upload/upload.js +89 -11
  82. package/dist/components/upload/upload.js.map +1 -1
  83. package/dist/index.cjs +52 -1
  84. package/dist/index.d.cts +11 -5
  85. package/dist/index.d.ts +11 -5
  86. package/dist/index.js +9 -6
  87. package/dist/styled-system/recipes/calendar.cjs +43 -0
  88. package/dist/styled-system/recipes/calendar.cjs.map +1 -0
  89. package/dist/styled-system/recipes/calendar.js +43 -0
  90. package/dist/styled-system/recipes/calendar.js.map +1 -0
  91. package/dist/styled-system/recipes/combobox.cjs +1 -0
  92. package/dist/styled-system/recipes/combobox.cjs.map +1 -1
  93. package/dist/styled-system/recipes/combobox.js +1 -0
  94. package/dist/styled-system/recipes/combobox.js.map +1 -1
  95. package/dist/styled-system/recipes/date-range-picker.cjs +52 -0
  96. package/dist/styled-system/recipes/date-range-picker.cjs.map +1 -0
  97. package/dist/styled-system/recipes/date-range-picker.js +52 -0
  98. package/dist/styled-system/recipes/date-range-picker.js.map +1 -0
  99. package/dist/styled-system/recipes/pin-input.cjs +39 -0
  100. package/dist/styled-system/recipes/pin-input.cjs.map +1 -0
  101. package/dist/styled-system/recipes/pin-input.js +39 -0
  102. package/dist/styled-system/recipes/pin-input.js.map +1 -0
  103. package/dist/styled-system/recipes/select.cjs +5 -1
  104. package/dist/styled-system/recipes/select.cjs.map +1 -1
  105. package/dist/styled-system/recipes/select.js +5 -1
  106. package/dist/styled-system/recipes/select.js.map +1 -1
  107. package/dist/styled-system/recipes/upload.cjs +2 -0
  108. package/dist/styled-system/recipes/upload.cjs.map +1 -1
  109. package/dist/styled-system/recipes/upload.js +2 -0
  110. package/dist/styled-system/recipes/upload.js.map +1 -1
  111. package/dist/styles.css +745 -81
  112. package/package.json +3 -2
@@ -0,0 +1,589 @@
1
+ "use client";
2
+ const require_cx = require("../../styled-system/css/cx.cjs");
3
+ const require_base_ui = require("../base-ui.cjs");
4
+ const require_date_range_picker = require("../../styled-system/recipes/date-range-picker.cjs");
5
+ const require_date_utils = require("../date-picker/date-utils.cjs");
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ let _base_ui_react_popover = require("@base-ui/react/popover");
9
+ //#region src/components/date-range-picker/date-range-picker.tsx
10
+ const DateRangePickerContext = (0, react.createContext)(null);
11
+ function useDateRangePickerContext() {
12
+ const context = (0, react.useContext)(DateRangePickerContext);
13
+ if (!context) throw new Error("DateRangePicker parts must be rendered inside DateRangePicker.Root.");
14
+ return context;
15
+ }
16
+ function sameMonth(left, right) {
17
+ return left.getFullYear() === right.getFullYear() && left.getMonth() === right.getMonth();
18
+ }
19
+ function dateInRange(date, range, preview) {
20
+ const end = range.end ?? preview;
21
+ return Boolean(range.start && end && !require_date_utils.isBeforeDay(date, range.start) && !require_date_utils.isAfterDay(date, end));
22
+ }
23
+ function DateRangePickerRoot({ children, closeOnSelect = true, defaultValue = {
24
+ start: null,
25
+ end: null
26
+ }, disabled = false, isDateDisabled, locale = "pt-BR", maxDate, minDate, name, onValueChange, referenceDate, value: controlledValue, weekStartsOn = 0, yearRange: configuredYearRange, ...popoverProps }) {
27
+ const [uncontrolledRange, setUncontrolledRange] = (0, react.useState)(defaultValue);
28
+ const range = controlledValue ?? uncontrolledRange;
29
+ const initialDate = range.start ?? referenceDate ?? /* @__PURE__ */ new Date();
30
+ const [month, setMonthState] = (0, react.useState)(() => require_date_utils.startOfMonth(initialDate));
31
+ const [focusedDate, setFocusedDate] = (0, react.useState)(range.start ?? initialDate);
32
+ const [hoveredDate, setHoveredDate] = (0, react.useState)(null);
33
+ const dayRefs = (0, react.useRef)(/* @__PURE__ */ new Map());
34
+ const actionsRef = (0, react.useRef)(null);
35
+ const triggerId = (0, react.useId)();
36
+ const styles = require_date_range_picker.dateRangePicker();
37
+ const today = (0, react.useMemo)(() => referenceDate ?? /* @__PURE__ */ new Date(), [referenceDate]);
38
+ const minMonth = minDate ? require_date_utils.startOfMonth(minDate) : void 0;
39
+ const maxMonth = maxDate ? require_date_utils.startOfMonth(maxDate) : void 0;
40
+ const yearRange = (0, react.useMemo)(() => {
41
+ const start = configuredYearRange?.start ?? today.getFullYear() - 100;
42
+ const end = configuredYearRange?.end ?? today.getFullYear() + 20;
43
+ const years = [
44
+ range.start?.getFullYear(),
45
+ range.end?.getFullYear(),
46
+ minDate?.getFullYear(),
47
+ maxDate?.getFullYear()
48
+ ].filter((year) => year !== void 0);
49
+ return {
50
+ start: Math.min(start, end, ...years),
51
+ end: Math.max(start, end, ...years)
52
+ };
53
+ }, [
54
+ configuredYearRange?.end,
55
+ configuredYearRange?.start,
56
+ maxDate,
57
+ minDate,
58
+ range.end,
59
+ range.start,
60
+ today
61
+ ]);
62
+ const dateDisabled = (0, react.useCallback)((date) => Boolean(minDate && require_date_utils.isBeforeDay(date, minDate) || maxDate && require_date_utils.isAfterDay(date, maxDate) || isDateDisabled?.(date)), [
63
+ isDateDisabled,
64
+ maxDate,
65
+ minDate
66
+ ]);
67
+ const monthDisabled = (0, react.useCallback)((date) => {
68
+ const first = require_date_utils.startOfMonth(date);
69
+ const last = require_date_utils.createCalendarDate(date.getFullYear(), date.getMonth() + 1, 0);
70
+ return Boolean(minDate && require_date_utils.isBeforeDay(last, minDate) || maxDate && require_date_utils.isAfterDay(first, maxDate));
71
+ }, [maxDate, minDate]);
72
+ const clampMonth = (0, react.useCallback)((date) => {
73
+ const normalized = require_date_utils.startOfMonth(date);
74
+ if (minMonth && require_date_utils.isBeforeDay(normalized, minMonth)) return minMonth;
75
+ if (maxMonth && require_date_utils.isAfterDay(normalized, maxMonth)) return maxMonth;
76
+ return normalized;
77
+ }, [maxMonth, minMonth]);
78
+ const setMonth = (0, react.useCallback)((date) => setMonthState(clampMonth(date)), [clampMonth]);
79
+ const canNavigate = (0, react.useCallback)((amount) => {
80
+ const next = require_date_utils.addMonths(month, amount);
81
+ return !(minMonth && require_date_utils.isBeforeDay(next, minMonth)) && !(maxMonth && require_date_utils.isAfterDay(next, maxMonth));
82
+ }, [
83
+ maxMonth,
84
+ minMonth,
85
+ month
86
+ ]);
87
+ const setRange = (0, react.useCallback)((nextRange) => {
88
+ if (controlledValue === void 0) setUncontrolledRange(nextRange);
89
+ onValueChange?.(nextRange);
90
+ }, [controlledValue, onValueChange]);
91
+ const close = (0, react.useCallback)(() => actionsRef.current?.close(), []);
92
+ const onSelect = (0, react.useCallback)((date) => {
93
+ if (disabled || dateDisabled(date)) return;
94
+ const nextDate = require_date_utils.createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());
95
+ let nextRange;
96
+ if (!range.start || range.end) nextRange = {
97
+ start: nextDate,
98
+ end: null
99
+ };
100
+ else if (require_date_utils.isBeforeDay(nextDate, range.start)) nextRange = {
101
+ start: nextDate,
102
+ end: null
103
+ };
104
+ else nextRange = {
105
+ start: range.start,
106
+ end: nextDate
107
+ };
108
+ setRange(nextRange);
109
+ setFocusedDate(nextDate);
110
+ setMonth(nextDate);
111
+ setHoveredDate(null);
112
+ if (nextRange.start && nextRange.end && closeOnSelect) close();
113
+ }, [
114
+ close,
115
+ closeOnSelect,
116
+ dateDisabled,
117
+ disabled,
118
+ range.end,
119
+ range.start,
120
+ setMonth,
121
+ setRange
122
+ ]);
123
+ const focusDate = (0, react.useCallback)((date, direction = 1) => {
124
+ let next = require_date_utils.createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());
125
+ const step = direction < 0 ? -1 : 1;
126
+ let attempts = 0;
127
+ while (dateDisabled(next) && attempts < 366) {
128
+ next = require_date_utils.addDays(next, step);
129
+ attempts += 1;
130
+ }
131
+ setFocusedDate(next);
132
+ setMonth(next);
133
+ const focusTarget = () => dayRefs.current.get(require_date_utils.dateKey(next))?.focus();
134
+ focusTarget();
135
+ queueMicrotask(focusTarget);
136
+ }, [dateDisabled, setMonth]);
137
+ const selectMonth = (0, react.useCallback)((monthIndex) => setMonth(require_date_utils.createCalendarDate(month.getFullYear(), monthIndex, 1)), [month, setMonth]);
138
+ const selectYear = (0, react.useCallback)((year) => setMonth(require_date_utils.createCalendarDate(year, month.getMonth(), 1)), [month, setMonth]);
139
+ const registerDay = (0, react.useCallback)((key, node) => {
140
+ if (node) dayRefs.current.set(key, node);
141
+ else dayRefs.current.delete(key);
142
+ }, []);
143
+ (0, react.useEffect)(() => {
144
+ const selected = range.end ?? range.start;
145
+ if (!selected) return;
146
+ setFocusedDate(selected);
147
+ setMonthState((current) => sameMonth(current, selected) ? current : clampMonth(selected));
148
+ }, [
149
+ clampMonth,
150
+ range.end,
151
+ range.start
152
+ ]);
153
+ const context = {
154
+ canNavigate,
155
+ close,
156
+ dateDisabled,
157
+ disabled,
158
+ focusDate,
159
+ focusedDate,
160
+ hoveredDate,
161
+ locale,
162
+ maxDate,
163
+ minDate,
164
+ month,
165
+ monthDisabled,
166
+ onSelect,
167
+ range,
168
+ registerDay,
169
+ selectMonth,
170
+ selectYear,
171
+ setHoveredDate,
172
+ setMonth,
173
+ setRange,
174
+ styles,
175
+ today,
176
+ triggerId,
177
+ weekStartsOn,
178
+ yearRange
179
+ };
180
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DateRangePickerContext.Provider, {
181
+ value: context,
182
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_popover.Popover.Root, {
183
+ ...popoverProps,
184
+ actionsRef,
185
+ children
186
+ }), name ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
187
+ disabled,
188
+ name: `${name}[start]`,
189
+ type: "hidden",
190
+ value: require_date_utils.toInputDate(range.start)
191
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
192
+ disabled,
193
+ name: `${name}[end]`,
194
+ type: "hidden",
195
+ value: require_date_utils.toInputDate(range.end)
196
+ })] }) : null]
197
+ });
198
+ }
199
+ const DateRangePickerLabel = (0, react.forwardRef)(function DateRangePickerLabel({ className, ...props }, ref) {
200
+ const { styles, triggerId } = useDateRangePickerContext();
201
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
202
+ ...props,
203
+ className: require_cx.cx(styles.label, className),
204
+ "data-slot": "date-range-picker-label",
205
+ htmlFor: props.htmlFor ?? triggerId,
206
+ ref
207
+ });
208
+ });
209
+ const DateRangePickerControl = (0, react.forwardRef)(function DateRangePickerControl({ className, ...props }, ref) {
210
+ const { styles } = useDateRangePickerContext();
211
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
212
+ ...props,
213
+ className: require_cx.cx(styles.control, className),
214
+ "data-slot": "date-range-picker-control",
215
+ ref
216
+ });
217
+ });
218
+ const DateRangePickerTrigger = (0, react.forwardRef)(function DateRangePickerTrigger({ children, className, disabled, id, ...props }, ref) {
219
+ const { disabled: pickerDisabled, styles, triggerId } = useDateRangePickerContext();
220
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_popover.Popover.Trigger, {
221
+ ...props,
222
+ "aria-label": props["aria-label"] ?? "Choose date range",
223
+ className: require_base_ui.withRecipeClassName(styles.trigger, className),
224
+ "data-jaci-component": "date-range-picker",
225
+ "data-slot": "date-range-picker-trigger",
226
+ disabled: disabled ?? pickerDisabled,
227
+ id: id ?? triggerId,
228
+ ref,
229
+ children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DateRangePickerValue, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
230
+ "aria-hidden": "true",
231
+ children: "▾"
232
+ })] })
233
+ });
234
+ });
235
+ const DateRangePickerValue = (0, react.forwardRef)(function DateRangePickerValue({ children, className, placeholder, ...props }, ref) {
236
+ const { locale, range, styles } = useDateRangePickerContext();
237
+ const value = children ?? (range.start && range.end ? `${require_date_utils.formatDateLabel(range.start, locale, "")} – ${require_date_utils.formatDateLabel(range.end, locale, "")}` : range.start ? `${require_date_utils.formatDateLabel(range.start, locale, "")} – …` : placeholder ?? "Select a date range");
238
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
239
+ ...props,
240
+ className: require_cx.cx(styles.value, className),
241
+ "data-placeholder": range.start ? void 0 : "true",
242
+ "data-slot": "date-range-picker-value",
243
+ ref,
244
+ children: value
245
+ });
246
+ });
247
+ const DateRangePickerClear = (0, react.forwardRef)(function DateRangePickerClear({ children = "×", className, disabled, onClick, ...props }, ref) {
248
+ const { disabled: pickerDisabled, range, setRange, styles, close } = useDateRangePickerContext();
249
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
250
+ ...props,
251
+ "aria-label": props["aria-label"] ?? "Clear date range",
252
+ className: require_cx.cx(styles.clear, className),
253
+ "data-slot": "date-range-picker-clear",
254
+ disabled: disabled || pickerDisabled || !range.start && !range.end,
255
+ onClick: (event) => {
256
+ setRange({
257
+ start: null,
258
+ end: null
259
+ });
260
+ close();
261
+ onClick?.(event);
262
+ },
263
+ ref,
264
+ type: "button",
265
+ children
266
+ });
267
+ });
268
+ const DateRangePickerPortal = _base_ui_react_popover.Popover.Portal;
269
+ const DateRangePickerPositioner = (0, react.forwardRef)(function DateRangePickerPositioner({ className, ...props }, ref) {
270
+ const { styles } = useDateRangePickerContext();
271
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_popover.Popover.Positioner, {
272
+ ...props,
273
+ className: require_base_ui.withRecipeClassName(styles.positioner, className),
274
+ "data-slot": "date-range-picker-positioner",
275
+ ref
276
+ });
277
+ });
278
+ const DateRangePickerPopup = (0, react.forwardRef)(function DateRangePickerPopup({ className, ...props }, ref) {
279
+ const { styles } = useDateRangePickerContext();
280
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_popover.Popover.Popup, {
281
+ ...props,
282
+ "aria-label": props["aria-label"] ?? "Calendar",
283
+ className: require_base_ui.withRecipeClassName(styles.popup, className),
284
+ "data-slot": "date-range-picker-popup",
285
+ ref
286
+ });
287
+ });
288
+ const DateRangePickerClose = (0, react.forwardRef)(function DateRangePickerClose({ className, ...props }, ref) {
289
+ const { styles } = useDateRangePickerContext();
290
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_popover.Popover.Close, {
291
+ ...props,
292
+ className: require_base_ui.withRecipeClassName(styles.close, className),
293
+ "data-slot": "date-range-picker-close",
294
+ ref
295
+ });
296
+ });
297
+ const DateRangePickerHeader = (0, react.forwardRef)(function DateRangePickerHeader({ className, ...props }, ref) {
298
+ const { styles } = useDateRangePickerContext();
299
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
300
+ ...props,
301
+ className: require_cx.cx(styles.header, className),
302
+ "data-slot": "date-range-picker-header",
303
+ ref
304
+ });
305
+ });
306
+ const DateRangePickerNavigationButton = (0, react.forwardRef)(function DateRangePickerNavigationButton({ amount = 1, children, className, onClick, ...props }, ref) {
307
+ const { canNavigate, month, setMonth, styles } = useDateRangePickerContext();
308
+ const isDisabled = props.disabled || !canNavigate(amount);
309
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
310
+ ...props,
311
+ "aria-label": props["aria-label"] ?? (amount < 0 ? "Previous month" : "Next month"),
312
+ className: require_cx.cx(styles.navigation, className),
313
+ "data-slot": amount < 0 ? "date-range-picker-previous" : "date-range-picker-next",
314
+ disabled: isDisabled,
315
+ onClick: (event) => {
316
+ if (!isDisabled) setMonth(require_date_utils.addMonths(month, amount));
317
+ onClick?.(event);
318
+ },
319
+ ref,
320
+ type: "button",
321
+ children: children ?? (amount < 0 ? "‹" : "›")
322
+ });
323
+ });
324
+ const DateRangePickerPrevious = (0, react.forwardRef)(function DateRangePickerPrevious(props, ref) {
325
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DateRangePickerNavigationButton, {
326
+ ...props,
327
+ amount: -1,
328
+ ref
329
+ });
330
+ });
331
+ const DateRangePickerNext = (0, react.forwardRef)(function DateRangePickerNext(props, ref) {
332
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DateRangePickerNavigationButton, {
333
+ ...props,
334
+ amount: 1,
335
+ ref
336
+ });
337
+ });
338
+ const DateRangePickerMonthSelect = (0, react.forwardRef)(function DateRangePickerMonthSelect({ className, ...props }, ref) {
339
+ const { locale, month, monthDisabled, selectMonth, styles } = useDateRangePickerContext();
340
+ const labels = require_date_utils.getMonthLabels(locale);
341
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
342
+ ...props,
343
+ "aria-label": props["aria-label"] ?? "Select month",
344
+ className: require_cx.cx(styles.monthSelect, className),
345
+ "data-slot": "date-range-picker-month-select",
346
+ onChange: (event) => selectMonth(Number(event.currentTarget.value)),
347
+ ref,
348
+ value: month.getMonth(),
349
+ children: labels.map((label, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
350
+ disabled: monthDisabled(require_date_utils.createCalendarDate(month.getFullYear(), index, 1)),
351
+ value: index,
352
+ children: label
353
+ }, label))
354
+ });
355
+ });
356
+ const DateRangePickerYearSelect = (0, react.forwardRef)(function DateRangePickerYearSelect({ className, ...props }, ref) {
357
+ const { month, monthDisabled, selectYear, styles, yearRange } = useDateRangePickerContext();
358
+ const years = Array.from({ length: yearRange.end - yearRange.start + 1 }, (_, index) => yearRange.start + index);
359
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
360
+ ...props,
361
+ "aria-label": props["aria-label"] ?? "Select year",
362
+ className: require_cx.cx(styles.yearSelect, className),
363
+ "data-slot": "date-range-picker-year-select",
364
+ onChange: (event) => selectYear(Number(event.currentTarget.value)),
365
+ ref,
366
+ value: month.getFullYear(),
367
+ children: years.map((year) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
368
+ disabled: monthDisabled(require_date_utils.createCalendarDate(year, month.getMonth(), 1)),
369
+ value: year,
370
+ children: year
371
+ }, year))
372
+ });
373
+ });
374
+ const DateRangePickerDay = (0, react.forwardRef)(function DateRangePickerDay({ children, className, date, disabled, onClick, onKeyDown, onMouseEnter, ...props }, ref) {
375
+ const { dateDisabled, disabled: pickerDisabled, focusDate, focusedDate, hoveredDate, locale, month, range, onSelect, registerDay, setHoveredDate, styles, today, weekStartsOn } = useDateRangePickerContext();
376
+ const key = require_date_utils.dateKey(date);
377
+ const isDisabled = Boolean(disabled || pickerDisabled || dateDisabled(date));
378
+ const isStart = Boolean(range.start && require_date_utils.isSameDay(date, range.start));
379
+ const isEnd = Boolean(range.end && require_date_utils.isSameDay(date, range.end));
380
+ const inRange = dateInRange(date, range, hoveredDate);
381
+ const outsideMonth = !sameMonth(date, month);
382
+ const isFocused = require_date_utils.isSameDay(date, focusedDate);
383
+ const isToday = require_date_utils.isSameDay(date, today);
384
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
385
+ ...props,
386
+ "aria-label": props["aria-label"] ?? new Intl.DateTimeFormat(locale, { dateStyle: "full" }).format(date),
387
+ "aria-current": isToday ? "date" : void 0,
388
+ "aria-selected": isStart || isEnd,
389
+ className: require_cx.cx(styles.day, className),
390
+ "data-date": key,
391
+ "data-disabled": isDisabled || void 0,
392
+ "data-in-range": inRange || void 0,
393
+ "data-outside-month": outsideMonth || void 0,
394
+ "data-range-end": isEnd || void 0,
395
+ "data-range-start": isStart || void 0,
396
+ "data-slot": "date-range-picker-day",
397
+ "data-today": isToday || void 0,
398
+ disabled: isDisabled,
399
+ onClick: (event) => {
400
+ onSelect(date);
401
+ onClick?.(event);
402
+ },
403
+ onKeyDown: (event) => {
404
+ if (!event.defaultPrevented) {
405
+ let nextDate;
406
+ switch (event.key) {
407
+ case "ArrowLeft":
408
+ nextDate = require_date_utils.addDays(date, -1);
409
+ break;
410
+ case "ArrowRight":
411
+ nextDate = require_date_utils.addDays(date, 1);
412
+ break;
413
+ case "ArrowUp":
414
+ nextDate = require_date_utils.addDays(date, -7);
415
+ break;
416
+ case "ArrowDown":
417
+ nextDate = require_date_utils.addDays(date, 7);
418
+ break;
419
+ case "Home":
420
+ nextDate = require_date_utils.addDays(date, -((date.getDay() - weekStartsOn + 7) % 7));
421
+ break;
422
+ case "End":
423
+ nextDate = require_date_utils.addDays(date, 6 - (date.getDay() - weekStartsOn + 7) % 7);
424
+ break;
425
+ case "PageUp":
426
+ nextDate = require_date_utils.addMonths(date, event.shiftKey ? -12 : -1);
427
+ break;
428
+ case "PageDown":
429
+ nextDate = require_date_utils.addMonths(date, event.shiftKey ? 12 : 1);
430
+ break;
431
+ case "Enter":
432
+ case " ":
433
+ if (!isDisabled) {
434
+ event.preventDefault();
435
+ onSelect(date);
436
+ }
437
+ break;
438
+ }
439
+ if (nextDate) {
440
+ event.preventDefault();
441
+ focusDate(nextDate, nextDate < date ? -1 : 1);
442
+ }
443
+ }
444
+ onKeyDown?.(event);
445
+ },
446
+ onMouseEnter: (event) => {
447
+ if (!isDisabled) setHoveredDate(date);
448
+ onMouseEnter?.(event);
449
+ },
450
+ ref: (node) => {
451
+ registerDay(key, node);
452
+ if (typeof ref === "function") ref(node);
453
+ else if (ref) ref.current = node;
454
+ },
455
+ role: "gridcell",
456
+ tabIndex: isFocused && !isDisabled ? 0 : -1,
457
+ type: "button",
458
+ children: children ?? date.getDate()
459
+ });
460
+ });
461
+ const DateRangePickerCalendar = (0, react.forwardRef)(function DateRangePickerCalendar({ "aria-label": ariaLabel, className, ...props }, ref) {
462
+ const { locale, month, styles, weekStartsOn } = useDateRangePickerContext();
463
+ const days = (0, react.useMemo)(() => require_date_utils.getCalendarDays(month, weekStartsOn), [month, weekStartsOn]);
464
+ const weekdays = (0, react.useMemo)(() => require_date_utils.getWeekdayLabels(locale, weekStartsOn), [locale, weekStartsOn]);
465
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
466
+ ...props,
467
+ "aria-label": ariaLabel ?? require_date_utils.formatMonthLabel(month, locale),
468
+ className: require_cx.cx(styles.calendar, className),
469
+ "data-slot": "date-range-picker-calendar",
470
+ ref,
471
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
472
+ "aria-hidden": "true",
473
+ className: styles.weekdays,
474
+ "data-slot": "date-range-picker-weekdays",
475
+ children: weekdays.map((weekday) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
476
+ className: styles.weekday,
477
+ "data-slot": "date-range-picker-weekday",
478
+ children: weekday
479
+ }, weekday))
480
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
481
+ "aria-label": require_date_utils.formatMonthLabel(month, locale),
482
+ className: styles.grid,
483
+ "data-slot": "date-range-picker-grid",
484
+ role: "grid",
485
+ children: days.map((date) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DateRangePickerDay, { date }, require_date_utils.dateKey(date)))
486
+ })]
487
+ });
488
+ });
489
+ const DateRangePickerPreview = (0, react.forwardRef)(function DateRangePickerPreview({ children, className, ...props }, ref) {
490
+ const { hoveredDate, locale, range, styles } = useDateRangePickerContext();
491
+ const content = children ?? (range.start ? `${require_date_utils.formatDateLabel(range.start, locale, "")} – ${range.end ? require_date_utils.formatDateLabel(range.end, locale, "") : hoveredDate ? require_date_utils.formatDateLabel(hoveredDate, locale, "") : "…"}` : "Select a start date");
492
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
493
+ ...props,
494
+ "aria-live": "polite",
495
+ className: require_cx.cx(styles.preview, className),
496
+ "data-slot": "date-range-picker-preview",
497
+ ref,
498
+ children: content
499
+ });
500
+ });
501
+ const DateRangePickerInput = (0, react.forwardRef)(function DateRangePickerInput({ className, onBlur, onInput, side, ...props }, ref) {
502
+ const { disabled, range, setRange, styles } = useDateRangePickerContext();
503
+ const value = require_date_utils.toInputDate(side === "start" ? range.start : range.end);
504
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
505
+ ...props,
506
+ "aria-label": props["aria-label"] ?? (side === "start" ? "Start date" : "End date"),
507
+ className: require_cx.cx(styles.input, className),
508
+ "data-slot": `date-range-picker-${side}-input`,
509
+ disabled: disabled || props.disabled,
510
+ onChange: (event) => {
511
+ const [year, month, day] = event.currentTarget.value.split("-").map(Number);
512
+ if (!year || !month || !day) return;
513
+ const date = require_date_utils.createCalendarDate(year, month - 1, day);
514
+ setRange(side === "start" ? {
515
+ start: date,
516
+ end: range.end
517
+ } : {
518
+ start: range.start,
519
+ end: date
520
+ });
521
+ },
522
+ onBlur,
523
+ onInput,
524
+ ref,
525
+ type: "date",
526
+ value
527
+ });
528
+ });
529
+ const DateRangePickerStartInput = (0, react.forwardRef)(function DateRangePickerStartInput(props, ref) {
530
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DateRangePickerInput, {
531
+ ...props,
532
+ ref,
533
+ side: "start"
534
+ });
535
+ });
536
+ const DateRangePickerEndInput = (0, react.forwardRef)(function DateRangePickerEndInput(props, ref) {
537
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DateRangePickerInput, {
538
+ ...props,
539
+ ref,
540
+ side: "end"
541
+ });
542
+ });
543
+ const DateRangePicker = {
544
+ Root: DateRangePickerRoot,
545
+ Label: DateRangePickerLabel,
546
+ Control: DateRangePickerControl,
547
+ Trigger: DateRangePickerTrigger,
548
+ Value: DateRangePickerValue,
549
+ Clear: DateRangePickerClear,
550
+ Portal: DateRangePickerPortal,
551
+ Positioner: DateRangePickerPositioner,
552
+ Popup: DateRangePickerPopup,
553
+ Close: DateRangePickerClose,
554
+ Header: DateRangePickerHeader,
555
+ Previous: DateRangePickerPrevious,
556
+ Next: DateRangePickerNext,
557
+ MonthSelect: DateRangePickerMonthSelect,
558
+ YearSelect: DateRangePickerYearSelect,
559
+ Calendar: DateRangePickerCalendar,
560
+ Day: DateRangePickerDay,
561
+ Preview: DateRangePickerPreview,
562
+ StartInput: DateRangePickerStartInput,
563
+ EndInput: DateRangePickerEndInput
564
+ };
565
+ //#endregion
566
+ exports.DateRangePicker = DateRangePicker;
567
+ exports.DateRangePickerCalendar = DateRangePickerCalendar;
568
+ exports.DateRangePickerClear = DateRangePickerClear;
569
+ exports.DateRangePickerClose = DateRangePickerClose;
570
+ exports.DateRangePickerControl = DateRangePickerControl;
571
+ exports.DateRangePickerDay = DateRangePickerDay;
572
+ exports.DateRangePickerEndInput = DateRangePickerEndInput;
573
+ exports.DateRangePickerHeader = DateRangePickerHeader;
574
+ exports.DateRangePickerInput = DateRangePickerInput;
575
+ exports.DateRangePickerLabel = DateRangePickerLabel;
576
+ exports.DateRangePickerMonthSelect = DateRangePickerMonthSelect;
577
+ exports.DateRangePickerNext = DateRangePickerNext;
578
+ exports.DateRangePickerPopup = DateRangePickerPopup;
579
+ exports.DateRangePickerPortal = DateRangePickerPortal;
580
+ exports.DateRangePickerPositioner = DateRangePickerPositioner;
581
+ exports.DateRangePickerPreview = DateRangePickerPreview;
582
+ exports.DateRangePickerPrevious = DateRangePickerPrevious;
583
+ exports.DateRangePickerRoot = DateRangePickerRoot;
584
+ exports.DateRangePickerStartInput = DateRangePickerStartInput;
585
+ exports.DateRangePickerTrigger = DateRangePickerTrigger;
586
+ exports.DateRangePickerValue = DateRangePickerValue;
587
+ exports.DateRangePickerYearSelect = DateRangePickerYearSelect;
588
+
589
+ //# sourceMappingURL=date-range-picker.cjs.map