jaci-ui 0.2.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 (172) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +95 -0
  3. package/dist/components/button-group/button-group.cjs +22 -0
  4. package/dist/components/button-group/button-group.cjs.map +1 -0
  5. package/dist/components/button-group/button-group.d.cts +12 -0
  6. package/dist/components/button-group/button-group.d.ts +12 -0
  7. package/dist/components/button-group/button-group.js +21 -0
  8. package/dist/components/button-group/button-group.js.map +1 -0
  9. package/dist/components/button-group/index.d.cts +2 -0
  10. package/dist/components/button-group/index.d.ts +2 -0
  11. package/dist/components/calendar/calendar.cjs +377 -0
  12. package/dist/components/calendar/calendar.cjs.map +1 -0
  13. package/dist/components/calendar/calendar.d.cts +56 -0
  14. package/dist/components/calendar/calendar.d.ts +56 -0
  15. package/dist/components/calendar/calendar.js +368 -0
  16. package/dist/components/calendar/calendar.js.map +1 -0
  17. package/dist/components/calendar/index.d.cts +2 -0
  18. package/dist/components/calendar/index.d.ts +2 -0
  19. package/dist/components/combobox/combobox.cjs +13 -1
  20. package/dist/components/combobox/combobox.cjs.map +1 -1
  21. package/dist/components/combobox/combobox.d.cts +7 -2
  22. package/dist/components/combobox/combobox.d.ts +7 -2
  23. package/dist/components/combobox/combobox.js +13 -2
  24. package/dist/components/combobox/combobox.js.map +1 -1
  25. package/dist/components/combobox/index.d.cts +2 -2
  26. package/dist/components/combobox/index.d.ts +2 -2
  27. package/dist/components/controls/input.cjs +26 -5
  28. package/dist/components/controls/input.cjs.map +1 -1
  29. package/dist/components/controls/input.d.cts +5 -2
  30. package/dist/components/controls/input.d.ts +5 -2
  31. package/dist/components/controls/input.js +28 -7
  32. package/dist/components/controls/input.js.map +1 -1
  33. package/dist/components/controls/textarea.cjs +26 -5
  34. package/dist/components/controls/textarea.cjs.map +1 -1
  35. package/dist/components/controls/textarea.d.cts +5 -2
  36. package/dist/components/controls/textarea.d.ts +5 -2
  37. package/dist/components/controls/textarea.js +28 -7
  38. package/dist/components/controls/textarea.js.map +1 -1
  39. package/dist/components/date-picker/date-picker.cjs +9 -9
  40. package/dist/components/date-picker/date-picker.cjs.map +1 -1
  41. package/dist/components/date-picker/date-picker.d.cts +3 -1
  42. package/dist/components/date-picker/date-picker.d.ts +3 -1
  43. package/dist/components/date-picker/date-picker.js +9 -9
  44. package/dist/components/date-picker/date-picker.js.map +1 -1
  45. package/dist/components/date-range-picker/date-range-picker.cjs +589 -0
  46. package/dist/components/date-range-picker/date-range-picker.cjs.map +1 -0
  47. package/dist/components/date-range-picker/date-range-picker.d.cts +134 -0
  48. package/dist/components/date-range-picker/date-range-picker.d.ts +134 -0
  49. package/dist/components/date-range-picker/date-range-picker.js +568 -0
  50. package/dist/components/date-range-picker/date-range-picker.js.map +1 -0
  51. package/dist/components/date-range-picker/index.d.cts +2 -0
  52. package/dist/components/date-range-picker/index.d.ts +2 -0
  53. package/dist/components/empty-state/empty-state.cjs +62 -0
  54. package/dist/components/empty-state/empty-state.cjs.map +1 -0
  55. package/dist/components/empty-state/empty-state.d.cts +18 -0
  56. package/dist/components/empty-state/empty-state.d.ts +18 -0
  57. package/dist/components/empty-state/empty-state.js +57 -0
  58. package/dist/components/empty-state/empty-state.js.map +1 -0
  59. package/dist/components/empty-state/index.d.cts +2 -0
  60. package/dist/components/empty-state/index.d.ts +2 -0
  61. package/dist/components/field/field.cjs +106 -11
  62. package/dist/components/field/field.cjs.map +1 -1
  63. package/dist/components/field/field.d.cts +22 -4
  64. package/dist/components/field/field.d.ts +22 -4
  65. package/dist/components/field/field.js +107 -13
  66. package/dist/components/field/field.js.map +1 -1
  67. package/dist/components/field/index.d.cts +2 -2
  68. package/dist/components/field/index.d.ts +2 -2
  69. package/dist/components/icon-button/icon-button.cjs +40 -0
  70. package/dist/components/icon-button/icon-button.cjs.map +1 -0
  71. package/dist/components/icon-button/icon-button.d.cts +12 -0
  72. package/dist/components/icon-button/icon-button.d.ts +12 -0
  73. package/dist/components/icon-button/icon-button.js +40 -0
  74. package/dist/components/icon-button/icon-button.js.map +1 -0
  75. package/dist/components/icon-button/index.d.cts +2 -0
  76. package/dist/components/icon-button/index.d.ts +2 -0
  77. package/dist/components/input-group/index.d.cts +2 -0
  78. package/dist/components/input-group/index.d.ts +2 -0
  79. package/dist/components/input-group/input-group.cjs +32 -0
  80. package/dist/components/input-group/input-group.cjs.map +1 -0
  81. package/dist/components/input-group/input-group.d.cts +15 -0
  82. package/dist/components/input-group/input-group.d.ts +15 -0
  83. package/dist/components/input-group/input-group.js +30 -0
  84. package/dist/components/input-group/input-group.js.map +1 -0
  85. package/dist/components/pin-input/index.d.cts +2 -0
  86. package/dist/components/pin-input/index.d.ts +2 -0
  87. package/dist/components/pin-input/pin-input.cjs +266 -0
  88. package/dist/components/pin-input/pin-input.cjs.map +1 -0
  89. package/dist/components/pin-input/pin-input.d.cts +46 -0
  90. package/dist/components/pin-input/pin-input.d.ts +46 -0
  91. package/dist/components/pin-input/pin-input.js +258 -0
  92. package/dist/components/pin-input/pin-input.js.map +1 -0
  93. package/dist/components/select/index.d.cts +2 -2
  94. package/dist/components/select/index.d.ts +2 -2
  95. package/dist/components/select/select.cjs +80 -3
  96. package/dist/components/select/select.cjs.map +1 -1
  97. package/dist/components/select/select.d.cts +18 -3
  98. package/dist/components/select/select.d.ts +18 -3
  99. package/dist/components/select/select.js +78 -5
  100. package/dist/components/select/select.js.map +1 -1
  101. package/dist/components/tags-input/tags-input.cjs +83 -5
  102. package/dist/components/tags-input/tags-input.cjs.map +1 -1
  103. package/dist/components/tags-input/tags-input.d.cts +3 -0
  104. package/dist/components/tags-input/tags-input.d.ts +3 -0
  105. package/dist/components/tags-input/tags-input.js +83 -5
  106. package/dist/components/tags-input/tags-input.js.map +1 -1
  107. package/dist/components/upload/index.d.cts +2 -2
  108. package/dist/components/upload/index.d.ts +2 -2
  109. package/dist/components/upload/upload.cjs +90 -10
  110. package/dist/components/upload/upload.cjs.map +1 -1
  111. package/dist/components/upload/upload.d.cts +25 -2
  112. package/dist/components/upload/upload.d.ts +25 -2
  113. package/dist/components/upload/upload.js +89 -11
  114. package/dist/components/upload/upload.js.map +1 -1
  115. package/dist/index.cjs +70 -0
  116. package/dist/index.d.cts +21 -5
  117. package/dist/index.d.ts +21 -5
  118. package/dist/index.js +13 -5
  119. package/dist/styled-system/recipes/button-group.cjs +30 -0
  120. package/dist/styled-system/recipes/button-group.cjs.map +1 -0
  121. package/dist/styled-system/recipes/button-group.js +30 -0
  122. package/dist/styled-system/recipes/button-group.js.map +1 -0
  123. package/dist/styled-system/recipes/calendar.cjs +43 -0
  124. package/dist/styled-system/recipes/calendar.cjs.map +1 -0
  125. package/dist/styled-system/recipes/calendar.js +43 -0
  126. package/dist/styled-system/recipes/calendar.js.map +1 -0
  127. package/dist/styled-system/recipes/combobox.cjs +1 -0
  128. package/dist/styled-system/recipes/combobox.cjs.map +1 -1
  129. package/dist/styled-system/recipes/combobox.js +1 -0
  130. package/dist/styled-system/recipes/combobox.js.map +1 -1
  131. package/dist/styled-system/recipes/date-range-picker.cjs +52 -0
  132. package/dist/styled-system/recipes/date-range-picker.cjs.map +1 -0
  133. package/dist/styled-system/recipes/date-range-picker.js +52 -0
  134. package/dist/styled-system/recipes/date-range-picker.js.map +1 -0
  135. package/dist/styled-system/recipes/empty-state.cjs +36 -0
  136. package/dist/styled-system/recipes/empty-state.cjs.map +1 -0
  137. package/dist/styled-system/recipes/empty-state.js +36 -0
  138. package/dist/styled-system/recipes/empty-state.js.map +1 -0
  139. package/dist/styled-system/recipes/icon-button.cjs +40 -0
  140. package/dist/styled-system/recipes/icon-button.cjs.map +1 -0
  141. package/dist/styled-system/recipes/icon-button.js +40 -0
  142. package/dist/styled-system/recipes/icon-button.js.map +1 -0
  143. package/dist/styled-system/recipes/input-group.cjs +30 -0
  144. package/dist/styled-system/recipes/input-group.cjs.map +1 -0
  145. package/dist/styled-system/recipes/input-group.js +30 -0
  146. package/dist/styled-system/recipes/input-group.js.map +1 -0
  147. package/dist/styled-system/recipes/pin-input.cjs +39 -0
  148. package/dist/styled-system/recipes/pin-input.cjs.map +1 -0
  149. package/dist/styled-system/recipes/pin-input.js +39 -0
  150. package/dist/styled-system/recipes/pin-input.js.map +1 -0
  151. package/dist/styled-system/recipes/select.cjs +5 -1
  152. package/dist/styled-system/recipes/select.cjs.map +1 -1
  153. package/dist/styled-system/recipes/select.js +5 -1
  154. package/dist/styled-system/recipes/select.js.map +1 -1
  155. package/dist/styled-system/recipes/upload.cjs +2 -0
  156. package/dist/styled-system/recipes/upload.cjs.map +1 -1
  157. package/dist/styled-system/recipes/upload.js +2 -0
  158. package/dist/styled-system/recipes/upload.js.map +1 -1
  159. package/dist/styles/theme.cjs +15 -0
  160. package/dist/styles/theme.cjs.map +1 -1
  161. package/dist/styles/theme.js +15 -0
  162. package/dist/styles/theme.js.map +1 -1
  163. package/dist/styles.css +901 -46
  164. package/dist/theme/index.d.cts +2 -0
  165. package/dist/theme/index.d.ts +2 -0
  166. package/dist/theme/theme-provider.cjs +86 -0
  167. package/dist/theme/theme-provider.cjs.map +1 -0
  168. package/dist/theme/theme-provider.d.cts +66 -0
  169. package/dist/theme/theme-provider.d.ts +66 -0
  170. package/dist/theme/theme-provider.js +85 -0
  171. package/dist/theme/theme-provider.js.map +1 -0
  172. 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