@mieweb/ui 0.6.1-dev.168 → 0.6.1-dev.170
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.
- package/dist/brands/index.cjs +18 -18
- package/dist/brands/index.js +3 -3
- package/dist/chunk-3Q2VWPML.cjs +1802 -0
- package/dist/chunk-3Q2VWPML.cjs.map +1 -0
- package/dist/{chunk-67CEEDAP.cjs → chunk-3YRDZBW6.cjs} +7 -7
- package/dist/{chunk-67CEEDAP.cjs.map → chunk-3YRDZBW6.cjs.map} +1 -1
- package/dist/{chunk-UVQEHZRF.js → chunk-6VGXX6L6.js} +2 -2
- package/dist/{chunk-UVQEHZRF.js.map → chunk-6VGXX6L6.js.map} +1 -1
- package/dist/chunk-CH26CHPH.js +1776 -0
- package/dist/chunk-CH26CHPH.js.map +1 -0
- package/dist/{chunk-TXRQQMG5.js → chunk-CYMZ2QS5.js} +2 -2
- package/dist/{chunk-TXRQQMG5.js.map → chunk-CYMZ2QS5.js.map} +1 -1
- package/dist/chunk-FGP64Z24.js +131 -0
- package/dist/chunk-FGP64Z24.js.map +1 -0
- package/dist/chunk-FIWKHLWY.js +197 -0
- package/dist/chunk-FIWKHLWY.js.map +1 -0
- package/dist/chunk-GLXTVCHN.cjs +4 -0
- package/dist/chunk-GLXTVCHN.cjs.map +1 -0
- package/dist/chunk-J7KWQJOB.js +14 -0
- package/dist/chunk-J7KWQJOB.js.map +1 -0
- package/dist/{chunk-NINI4WVS.cjs → chunk-JC6Y3LGF.cjs} +297 -84
- package/dist/chunk-JC6Y3LGF.cjs.map +1 -0
- package/dist/chunk-JYZW2PZS.cjs +166 -0
- package/dist/chunk-JYZW2PZS.cjs.map +1 -0
- package/dist/chunk-LIH3IZYK.js +689 -0
- package/dist/chunk-LIH3IZYK.js.map +1 -0
- package/dist/{chunk-XVF472GT.js → chunk-NSLR3B7K.js} +2 -2
- package/dist/{chunk-XVF472GT.js.map → chunk-NSLR3B7K.js.map} +1 -1
- package/dist/chunk-NTYGCBCL.js +543 -0
- package/dist/chunk-NTYGCBCL.js.map +1 -0
- package/dist/chunk-RISZWWEQ.js +3 -0
- package/dist/chunk-RISZWWEQ.js.map +1 -0
- package/dist/chunk-S7JQ3FV5.cjs +16 -0
- package/dist/chunk-S7JQ3FV5.cjs.map +1 -0
- package/dist/{chunk-JWTCEWQ4.cjs → chunk-SNEQXSC5.cjs} +2 -2
- package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
- package/dist/chunk-SQHMGT4W.js +164 -0
- package/dist/chunk-SQHMGT4W.js.map +1 -0
- package/dist/chunk-UO3KEUYK.cjs +220 -0
- package/dist/chunk-UO3KEUYK.cjs.map +1 -0
- package/dist/{chunk-HUXOASEB.js → chunk-X763OLF2.js} +4 -4
- package/dist/{chunk-HUXOASEB.js.map → chunk-X763OLF2.js.map} +1 -1
- package/dist/{chunk-DKGUOMBC.cjs → chunk-X7J45FU5.cjs} +2 -2
- package/dist/{chunk-DKGUOMBC.cjs.map → chunk-X7J45FU5.cjs.map} +1 -1
- package/dist/chunk-Y4ESBDQ5.cjs +552 -0
- package/dist/chunk-Y4ESBDQ5.cjs.map +1 -0
- package/dist/{chunk-MJ7YITLN.cjs → chunk-Y65SK5Y2.cjs} +2 -2
- package/dist/{chunk-MJ7YITLN.cjs.map → chunk-Y65SK5Y2.cjs.map} +1 -1
- package/dist/chunk-YD23ZGRU.cjs +155 -0
- package/dist/chunk-YD23ZGRU.cjs.map +1 -0
- package/dist/components/DateInput/index.cjs +2 -2
- package/dist/components/DateInput/index.d.cts +8 -2
- package/dist/components/DateInput/index.d.ts +8 -2
- package/dist/components/DateInput/index.js +1 -1
- package/dist/components/Markdown/index.cjs +10 -10
- package/dist/components/Markdown/index.js +2 -2
- package/dist/components/MediaEditor/index.cjs +42 -0
- package/dist/components/MediaEditor/index.cjs.map +1 -0
- package/dist/components/MediaEditor/index.d.cts +151 -0
- package/dist/components/MediaEditor/index.d.ts +151 -0
- package/dist/components/MediaEditor/index.js +17 -0
- package/dist/components/MediaEditor/index.js.map +1 -0
- package/dist/components/MediaPlayer/index.cjs +24 -0
- package/dist/components/MediaPlayer/index.cjs.map +1 -0
- package/dist/components/MediaPlayer/index.d.cts +71 -0
- package/dist/components/MediaPlayer/index.d.ts +71 -0
- package/dist/components/MediaPlayer/index.js +7 -0
- package/dist/components/MediaPlayer/index.js.map +1 -0
- package/dist/components/TranscriptView/index.cjs +21 -0
- package/dist/components/TranscriptView/index.cjs.map +1 -0
- package/dist/components/TranscriptView/index.d.cts +55 -0
- package/dist/components/TranscriptView/index.d.ts +55 -0
- package/dist/components/TranscriptView/index.js +4 -0
- package/dist/components/TranscriptView/index.js.map +1 -0
- package/dist/esheet.cjs +6 -6
- package/dist/esheet.js +3 -3
- package/dist/hooks/index.cjs +49 -11
- package/dist/hooks/index.d.cts +88 -1
- package/dist/hooks/index.d.ts +88 -1
- package/dist/hooks/index.js +3 -1
- package/dist/index.cjs +380 -253
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +89 -42
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/transcript-oaWqY3yr.d.cts +81 -0
- package/dist/transcript-oaWqY3yr.d.ts +81 -0
- package/dist/useTranscriptEdits-BUylQFg0.d.cts +168 -0
- package/dist/useTranscriptEdits-CWYnjbGP.d.ts +168 -0
- package/package.json +1 -1
- package/dist/chunk-HYEJLKXI.js +0 -476
- package/dist/chunk-HYEJLKXI.js.map +0 -1
- package/dist/chunk-NINI4WVS.cjs.map +0 -1
|
@@ -4,6 +4,7 @@ var chunkMSRU3XBH_cjs = require('./chunk-MSRU3XBH.cjs');
|
|
|
4
4
|
var chunkCW75IKA6_cjs = require('./chunk-CW75IKA6.cjs');
|
|
5
5
|
var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
|
|
6
6
|
var React = require('react');
|
|
7
|
+
var reactDom = require('react-dom');
|
|
7
8
|
var lucideReact = require('lucide-react');
|
|
8
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
10
|
|
|
@@ -38,6 +39,70 @@ var sizeClasses = {
|
|
|
38
39
|
md: "h-10 text-base",
|
|
39
40
|
lg: "h-12 text-lg"
|
|
40
41
|
};
|
|
42
|
+
var MONTH_NAMES = [
|
|
43
|
+
"January",
|
|
44
|
+
"February",
|
|
45
|
+
"March",
|
|
46
|
+
"April",
|
|
47
|
+
"May",
|
|
48
|
+
"June",
|
|
49
|
+
"July",
|
|
50
|
+
"August",
|
|
51
|
+
"September",
|
|
52
|
+
"October",
|
|
53
|
+
"November",
|
|
54
|
+
"December"
|
|
55
|
+
];
|
|
56
|
+
function isValidPickerDate(year, month, day) {
|
|
57
|
+
return Number.isFinite(year) && month >= 1 && month <= 12 && day >= 1 && day <= new Date(year, month, 0).getDate();
|
|
58
|
+
}
|
|
59
|
+
function parsePickerDate(value, inputType) {
|
|
60
|
+
if (inputType === "datetime-local") {
|
|
61
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})T\d{2}:\d{2}$/.exec(value);
|
|
62
|
+
if (!match) return void 0;
|
|
63
|
+
const year2 = Number(match[1]);
|
|
64
|
+
const month2 = Number(match[2]);
|
|
65
|
+
const day2 = Number(match[3]);
|
|
66
|
+
const [hour, minute] = value.slice(-5).split(":").map(Number);
|
|
67
|
+
if (!isValidPickerDate(year2, month2, day2) || hour > 23 || minute > 59) {
|
|
68
|
+
return void 0;
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
year: year2,
|
|
72
|
+
month: month2 - 1,
|
|
73
|
+
day: day2
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (inputType === "month") {
|
|
77
|
+
const match = /^(\d{4})-(\d{2})$/.exec(value);
|
|
78
|
+
if (!match) return void 0;
|
|
79
|
+
const year2 = Number(match[1]);
|
|
80
|
+
const month2 = Number(match[2]);
|
|
81
|
+
if (!Number.isFinite(year2) || month2 < 1 || month2 > 12) return void 0;
|
|
82
|
+
return { year: year2, month: month2 - 1, day: null };
|
|
83
|
+
}
|
|
84
|
+
if (!chunkCW75IKA6_cjs.isValidDate(value)) return void 0;
|
|
85
|
+
const [month, day, year] = value.split("/").map(Number);
|
|
86
|
+
return { month: month - 1, year, day };
|
|
87
|
+
}
|
|
88
|
+
function formatPickerValue(value, inputType, timeFormat) {
|
|
89
|
+
if (inputType === "datetime-local") {
|
|
90
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}:\d{2})$/.exec(value);
|
|
91
|
+
if (!match) return "";
|
|
92
|
+
if (timeFormat === "12-hour") {
|
|
93
|
+
const [hour, minute] = match[4].split(":").map(Number);
|
|
94
|
+
const displayHour = hour % 12 || 12;
|
|
95
|
+
const meridiem = hour >= 12 ? "PM" : "AM";
|
|
96
|
+
return `${match[2]}/${match[3]}/${match[1]} ${displayHour}:${String(minute).padStart(2, "0")} ${meridiem}`;
|
|
97
|
+
}
|
|
98
|
+
return `${match[2]}/${match[3]}/${match[1]} ${match[4]}`;
|
|
99
|
+
}
|
|
100
|
+
if (inputType === "month") {
|
|
101
|
+
const date = parsePickerDate(value, inputType);
|
|
102
|
+
return date ? `${MONTH_NAMES[date.month]} ${date.year}` : "";
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
41
106
|
function getValidationError(value, mode, minAge, maxAge) {
|
|
42
107
|
if (!value || value.replace(/\D/g, "").length === 0) {
|
|
43
108
|
return void 0;
|
|
@@ -83,6 +148,8 @@ var DateInput = React__namespace.forwardRef(
|
|
|
83
148
|
({
|
|
84
149
|
value = "",
|
|
85
150
|
onChange,
|
|
151
|
+
inputType = "date",
|
|
152
|
+
timeFormat = "24-hour",
|
|
86
153
|
mode = "default",
|
|
87
154
|
minAge,
|
|
88
155
|
maxAge,
|
|
@@ -91,17 +158,19 @@ var DateInput = React__namespace.forwardRef(
|
|
|
91
158
|
width = "full",
|
|
92
159
|
className,
|
|
93
160
|
onBlur,
|
|
161
|
+
onClick,
|
|
94
162
|
hasError,
|
|
95
163
|
error,
|
|
96
164
|
...props
|
|
97
165
|
}, ref) => {
|
|
166
|
+
const isFormattedDate = inputType === "date";
|
|
98
167
|
const [displayValue, setDisplayValue] = React__namespace.useState(
|
|
99
|
-
() => chunkCW75IKA6_cjs.formatDateValue(value)
|
|
168
|
+
() => isFormattedDate ? chunkCW75IKA6_cjs.formatDateValue(value) : value
|
|
100
169
|
);
|
|
101
170
|
const [localError, setLocalError] = React__namespace.useState();
|
|
102
171
|
React__namespace.useEffect(() => {
|
|
103
|
-
setDisplayValue(chunkCW75IKA6_cjs.formatDateValue(value));
|
|
104
|
-
}, [value]);
|
|
172
|
+
setDisplayValue(isFormattedDate ? chunkCW75IKA6_cjs.formatDateValue(value) : value);
|
|
173
|
+
}, [isFormattedDate, value]);
|
|
105
174
|
const handleChange = (e) => {
|
|
106
175
|
const formatted = chunkCW75IKA6_cjs.formatDateValue(e.target.value);
|
|
107
176
|
setDisplayValue(formatted);
|
|
@@ -128,26 +197,49 @@ var DateInput = React__namespace.forwardRef(
|
|
|
128
197
|
const [isCalendarOpen, setIsCalendarOpen] = React__namespace.useState(false);
|
|
129
198
|
const calendarRef = React__namespace.useRef(null);
|
|
130
199
|
const buttonRef = React__namespace.useRef(null);
|
|
200
|
+
const [calendarStyle, setCalendarStyle] = React__namespace.useState();
|
|
201
|
+
const updateCalendarPosition = React__namespace.useCallback(() => {
|
|
202
|
+
if (!buttonRef.current) return;
|
|
203
|
+
const rect = buttonRef.current.getBoundingClientRect();
|
|
204
|
+
setCalendarStyle({
|
|
205
|
+
position: "fixed",
|
|
206
|
+
top: rect.bottom + 4,
|
|
207
|
+
left: Math.max(8, rect.right - 288),
|
|
208
|
+
zIndex: 9999
|
|
209
|
+
});
|
|
210
|
+
}, []);
|
|
211
|
+
React__namespace.useEffect(() => {
|
|
212
|
+
if (!isCalendarOpen) return;
|
|
213
|
+
updateCalendarPosition();
|
|
214
|
+
window.addEventListener("scroll", updateCalendarPosition, true);
|
|
215
|
+
window.addEventListener("resize", updateCalendarPosition);
|
|
216
|
+
return () => {
|
|
217
|
+
window.removeEventListener("scroll", updateCalendarPosition, true);
|
|
218
|
+
window.removeEventListener("resize", updateCalendarPosition);
|
|
219
|
+
};
|
|
220
|
+
}, [isCalendarOpen, updateCalendarPosition]);
|
|
131
221
|
const parsedDate = React__namespace.useMemo(() => {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const [month, day, year] = displayValue.split("/").map(Number);
|
|
140
|
-
return { month: month - 1, year, day };
|
|
141
|
-
}, [displayValue]);
|
|
222
|
+
const fallback = /* @__PURE__ */ new Date();
|
|
223
|
+
return parsePickerDate(displayValue, inputType) ?? {
|
|
224
|
+
month: fallback.getMonth(),
|
|
225
|
+
year: fallback.getFullYear(),
|
|
226
|
+
day: null
|
|
227
|
+
};
|
|
228
|
+
}, [displayValue, inputType]);
|
|
142
229
|
const [calendarMonth, setCalendarMonth] = React__namespace.useState(parsedDate.month);
|
|
143
230
|
const [calendarYear, setCalendarYear] = React__namespace.useState(parsedDate.year);
|
|
231
|
+
const [selectedTime, setSelectedTime] = React__namespace.useState(
|
|
232
|
+
() => inputType === "datetime-local" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/.test(value) ? value.slice(-5) : "00:00"
|
|
233
|
+
);
|
|
144
234
|
React__namespace.useEffect(() => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
235
|
+
const date = parsePickerDate(displayValue, inputType);
|
|
236
|
+
if (!date) return;
|
|
237
|
+
setCalendarMonth(date.month);
|
|
238
|
+
setCalendarYear(date.year);
|
|
239
|
+
if (inputType === "datetime-local") {
|
|
240
|
+
setSelectedTime(displayValue.slice(-5));
|
|
149
241
|
}
|
|
150
|
-
}, [displayValue]);
|
|
242
|
+
}, [displayValue, inputType]);
|
|
151
243
|
React__namespace.useEffect(() => {
|
|
152
244
|
const handleClickOutside = (event) => {
|
|
153
245
|
if (calendarRef.current && !calendarRef.current.contains(event.target) && buttonRef.current && !buttonRef.current.contains(event.target)) {
|
|
@@ -175,11 +267,13 @@ var DateInput = React__namespace.forwardRef(
|
|
|
175
267
|
const month = String(calendarMonth + 1).padStart(2, "0");
|
|
176
268
|
const dayStr = String(day).padStart(2, "0");
|
|
177
269
|
const year = String(calendarYear);
|
|
178
|
-
const formatted = `${month}/${dayStr}/${year}`;
|
|
270
|
+
const formatted = inputType === "datetime-local" ? `${year}-${month}-${dayStr}T${selectedTime}` : `${month}/${dayStr}/${year}`;
|
|
179
271
|
setDisplayValue(formatted);
|
|
180
272
|
onChange?.(formatted);
|
|
181
|
-
|
|
182
|
-
|
|
273
|
+
if (inputType === "date") {
|
|
274
|
+
setIsCalendarOpen(false);
|
|
275
|
+
}
|
|
276
|
+
if (inputType === "date" && validateOnBlur) {
|
|
183
277
|
const validationError = getValidationError(
|
|
184
278
|
formatted,
|
|
185
279
|
mode,
|
|
@@ -189,6 +283,28 @@ var DateInput = React__namespace.forwardRef(
|
|
|
189
283
|
setLocalError(validationError);
|
|
190
284
|
}
|
|
191
285
|
};
|
|
286
|
+
const handleMonthSelect = (month) => {
|
|
287
|
+
const formatted = `${calendarYear}-${String(month + 1).padStart(2, "0")}`;
|
|
288
|
+
setDisplayValue(formatted);
|
|
289
|
+
onChange?.(formatted);
|
|
290
|
+
setIsCalendarOpen(false);
|
|
291
|
+
};
|
|
292
|
+
const handleTimeChange = (part, nextValue) => {
|
|
293
|
+
const [hour, minute] = selectedTime.split(":");
|
|
294
|
+
const nextTime = part === "hour" ? `${nextValue}:${minute}` : `${hour}:${nextValue}`;
|
|
295
|
+
setSelectedTime(nextTime);
|
|
296
|
+
if (parsedDate.day === null) return;
|
|
297
|
+
const month = String(parsedDate.month + 1).padStart(2, "0");
|
|
298
|
+
const day = String(parsedDate.day).padStart(2, "0");
|
|
299
|
+
const formatted = `${parsedDate.year}-${month}-${day}T${nextTime}`;
|
|
300
|
+
setDisplayValue(formatted);
|
|
301
|
+
onChange?.(formatted);
|
|
302
|
+
};
|
|
303
|
+
const handleMeridiemChange = (meridiem) => {
|
|
304
|
+
const [hour] = selectedTime.split(":").map(Number);
|
|
305
|
+
const nextHour = hour % 12 + (meridiem === "PM" ? 12 : 0);
|
|
306
|
+
handleTimeChange("hour", String(nextHour).padStart(2, "0"));
|
|
307
|
+
};
|
|
192
308
|
const getDaysInMonth = (month, year) => {
|
|
193
309
|
return new Date(year, month + 1, 0).getDate();
|
|
194
310
|
};
|
|
@@ -205,20 +321,6 @@ var DateInput = React__namespace.forwardRef(
|
|
|
205
321
|
for (let i = 1; i <= daysInMonth; i++) {
|
|
206
322
|
days.push(i);
|
|
207
323
|
}
|
|
208
|
-
const monthNames = [
|
|
209
|
-
"January",
|
|
210
|
-
"February",
|
|
211
|
-
"March",
|
|
212
|
-
"April",
|
|
213
|
-
"May",
|
|
214
|
-
"June",
|
|
215
|
-
"July",
|
|
216
|
-
"August",
|
|
217
|
-
"September",
|
|
218
|
-
"October",
|
|
219
|
-
"November",
|
|
220
|
-
"December"
|
|
221
|
-
];
|
|
222
324
|
const isSelectedDay = (day) => {
|
|
223
325
|
return parsedDate.day === day && parsedDate.month === calendarMonth && parsedDate.year === calendarYear;
|
|
224
326
|
};
|
|
@@ -231,12 +333,12 @@ var DateInput = React__namespace.forwardRef(
|
|
|
231
333
|
{
|
|
232
334
|
ref: calendarRef,
|
|
233
335
|
className: chunkOR5DRJCW_cjs.cn(
|
|
234
|
-
"absolute top-full left-0 z-50 mt-1",
|
|
235
336
|
"bg-background border-border rounded-lg border shadow-lg",
|
|
236
337
|
"w-72 p-3"
|
|
237
338
|
),
|
|
339
|
+
style: calendarStyle,
|
|
238
340
|
role: "dialog",
|
|
239
|
-
"aria-label": "Choose date",
|
|
341
|
+
"aria-label": inputType === "month" ? "Choose month" : inputType === "datetime-local" ? "Choose date and time" : "Choose date",
|
|
240
342
|
children: [
|
|
241
343
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
|
|
242
344
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -244,7 +346,9 @@ var DateInput = React__namespace.forwardRef(
|
|
|
244
346
|
{
|
|
245
347
|
type: "button",
|
|
246
348
|
onClick: () => {
|
|
247
|
-
if (
|
|
349
|
+
if (inputType === "month") {
|
|
350
|
+
setCalendarYear(calendarYear - 1);
|
|
351
|
+
} else if (calendarMonth === 0) {
|
|
248
352
|
setCalendarMonth(11);
|
|
249
353
|
setCalendarYear(calendarYear - 1);
|
|
250
354
|
} else {
|
|
@@ -252,19 +356,19 @@ var DateInput = React__namespace.forwardRef(
|
|
|
252
356
|
}
|
|
253
357
|
},
|
|
254
358
|
className: "hover:bg-muted rounded-md p-1 transition-colors",
|
|
255
|
-
"aria-label": "Previous month",
|
|
359
|
+
"aria-label": inputType === "month" ? "Previous year" : "Previous month",
|
|
256
360
|
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, {})
|
|
257
361
|
}
|
|
258
362
|
),
|
|
259
363
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
260
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
364
|
+
inputType !== "month" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
261
365
|
"select",
|
|
262
366
|
{
|
|
263
367
|
value: calendarMonth,
|
|
264
368
|
onChange: (e) => setCalendarMonth(Number(e.target.value)),
|
|
265
369
|
className: "bg-background border-border rounded border px-2 py-1 text-sm",
|
|
266
370
|
"aria-label": "Select month",
|
|
267
|
-
children:
|
|
371
|
+
children: MONTH_NAMES.map((name, i) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: i, children: name }, name))
|
|
268
372
|
}
|
|
269
373
|
),
|
|
270
374
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -286,7 +390,9 @@ var DateInput = React__namespace.forwardRef(
|
|
|
286
390
|
{
|
|
287
391
|
type: "button",
|
|
288
392
|
onClick: () => {
|
|
289
|
-
if (
|
|
393
|
+
if (inputType === "month") {
|
|
394
|
+
setCalendarYear(calendarYear + 1);
|
|
395
|
+
} else if (calendarMonth === 11) {
|
|
290
396
|
setCalendarMonth(0);
|
|
291
397
|
setCalendarYear(calendarYear + 1);
|
|
292
398
|
} else {
|
|
@@ -294,56 +400,158 @@ var DateInput = React__namespace.forwardRef(
|
|
|
294
400
|
}
|
|
295
401
|
},
|
|
296
402
|
className: "hover:bg-muted rounded-md p-1 transition-colors",
|
|
297
|
-
"aria-label": "Next month",
|
|
403
|
+
"aria-label": inputType === "month" ? "Next year" : "Next month",
|
|
298
404
|
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon, {})
|
|
299
405
|
}
|
|
300
406
|
)
|
|
301
407
|
] }),
|
|
302
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "
|
|
303
|
-
"div",
|
|
304
|
-
{
|
|
305
|
-
className: "text-muted-foreground py-1 text-center text-xs font-medium",
|
|
306
|
-
children: day
|
|
307
|
-
},
|
|
308
|
-
day
|
|
309
|
-
)) }),
|
|
310
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-7 gap-1", children: days.map((day, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
408
|
+
inputType === "month" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1", children: MONTH_NAMES.map((name, month) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
311
409
|
"button",
|
|
312
410
|
{
|
|
313
411
|
type: "button",
|
|
314
|
-
|
|
315
|
-
onClick: () => day && handleDateSelect(day),
|
|
412
|
+
onClick: () => handleMonthSelect(month),
|
|
316
413
|
className: chunkOR5DRJCW_cjs.cn(
|
|
317
|
-
"
|
|
414
|
+
"rounded-md px-2 py-2 text-sm transition-colors",
|
|
318
415
|
"focus:ring-ring focus:ring-2 focus:outline-none",
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
isSelectedDay(day) && "bg-primary-800 hover:bg-primary-900 text-white",
|
|
322
|
-
isToday(day) && !isSelectedDay(day) && "border-primary-800 text-primary-800 border"
|
|
416
|
+
"hover:bg-muted",
|
|
417
|
+
parsedDate.month === month && parsedDate.year === calendarYear && "bg-primary-800 hover:bg-primary-900 text-white"
|
|
323
418
|
),
|
|
324
|
-
children:
|
|
419
|
+
children: name.slice(0, 3)
|
|
325
420
|
},
|
|
326
|
-
|
|
327
|
-
)) }),
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
421
|
+
name
|
|
422
|
+
)) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
423
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 grid grid-cols-7 gap-1", children: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((day) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
424
|
+
"div",
|
|
425
|
+
{
|
|
426
|
+
className: "text-muted-foreground py-1 text-center text-xs font-medium",
|
|
427
|
+
children: day
|
|
428
|
+
},
|
|
429
|
+
day
|
|
430
|
+
)) }),
|
|
431
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-7 gap-1", children: days.map((day, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
432
|
+
"button",
|
|
433
|
+
{
|
|
434
|
+
type: "button",
|
|
435
|
+
disabled: day === null,
|
|
436
|
+
onClick: () => day && handleDateSelect(day),
|
|
437
|
+
className: chunkOR5DRJCW_cjs.cn(
|
|
438
|
+
"h-8 w-8 rounded-md text-sm transition-colors",
|
|
439
|
+
"focus:ring-ring focus:ring-2 focus:outline-none",
|
|
440
|
+
day === null && "invisible",
|
|
441
|
+
day !== null && "hover:bg-muted",
|
|
442
|
+
isSelectedDay(day) && "bg-primary-800 hover:bg-primary-900 text-white",
|
|
443
|
+
isToday(day) && !isSelectedDay(day) && "border-primary-800 text-primary-800 border"
|
|
444
|
+
),
|
|
445
|
+
children: day
|
|
337
446
|
},
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
447
|
+
index
|
|
448
|
+
)) })
|
|
449
|
+
] }),
|
|
450
|
+
inputType === "datetime-local" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border mt-3 flex items-center gap-2 border-t pt-3", children: [
|
|
451
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
452
|
+
"select",
|
|
453
|
+
{
|
|
454
|
+
value: timeFormat === "12-hour" ? String(
|
|
455
|
+
Number(selectedTime.slice(0, 2)) % 12 || 12
|
|
456
|
+
).padStart(2, "0") : selectedTime.slice(0, 2),
|
|
457
|
+
onChange: (event) => {
|
|
458
|
+
const hour = Number(event.target.value);
|
|
459
|
+
const isPm = Number(selectedTime.slice(0, 2)) >= 12;
|
|
460
|
+
handleTimeChange(
|
|
461
|
+
"hour",
|
|
462
|
+
String(
|
|
463
|
+
timeFormat === "12-hour" ? hour % 12 + (isPm ? 12 : 0) : hour
|
|
464
|
+
).padStart(2, "0")
|
|
465
|
+
);
|
|
466
|
+
},
|
|
467
|
+
className: "bg-background border-border rounded border px-2 py-1 text-sm",
|
|
468
|
+
"aria-label": "Select hour",
|
|
469
|
+
children: Array.from(
|
|
470
|
+
{ length: timeFormat === "12-hour" ? 12 : 24 },
|
|
471
|
+
(_, index) => timeFormat === "12-hour" ? index + 1 : index
|
|
472
|
+
).map((hour) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: String(hour).padStart(2, "0"), children: String(hour).padStart(2, "0") }, hour))
|
|
473
|
+
}
|
|
474
|
+
),
|
|
475
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: ":" }),
|
|
476
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
477
|
+
"select",
|
|
478
|
+
{
|
|
479
|
+
value: selectedTime.slice(3),
|
|
480
|
+
onChange: (event) => handleTimeChange("minute", event.target.value),
|
|
481
|
+
className: "bg-background border-border rounded border px-2 py-1 text-sm",
|
|
482
|
+
"aria-label": "Select minute",
|
|
483
|
+
children: Array.from({ length: 60 }, (_, minute) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: String(minute).padStart(2, "0"), children: String(minute).padStart(2, "0") }, minute))
|
|
484
|
+
}
|
|
485
|
+
),
|
|
486
|
+
timeFormat === "12-hour" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
487
|
+
"select",
|
|
488
|
+
{
|
|
489
|
+
value: Number(selectedTime.slice(0, 2)) >= 12 ? "PM" : "AM",
|
|
490
|
+
onChange: (event) => handleMeridiemChange(event.target.value),
|
|
491
|
+
className: "bg-background border-border rounded border px-2 py-1 text-sm",
|
|
492
|
+
"aria-label": "Select AM or PM",
|
|
493
|
+
children: [
|
|
494
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "AM", children: "AM" }),
|
|
495
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "PM", children: "PM" })
|
|
496
|
+
]
|
|
497
|
+
}
|
|
498
|
+
)
|
|
499
|
+
] }),
|
|
500
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border mt-3 flex gap-2 border-t pt-3", children: [
|
|
501
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
502
|
+
"button",
|
|
503
|
+
{
|
|
504
|
+
type: "button",
|
|
505
|
+
onClick: () => {
|
|
506
|
+
const today = /* @__PURE__ */ new Date();
|
|
507
|
+
setCalendarMonth(today.getMonth());
|
|
508
|
+
setCalendarYear(today.getFullYear());
|
|
509
|
+
if (inputType === "month") {
|
|
510
|
+
handleMonthSelect(today.getMonth());
|
|
511
|
+
} else {
|
|
512
|
+
handleDateSelect(today.getDate());
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
className: "text-primary-800 flex-1 text-sm hover:underline",
|
|
516
|
+
children: "Today"
|
|
517
|
+
}
|
|
518
|
+
),
|
|
519
|
+
inputType === "datetime-local" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
520
|
+
"button",
|
|
521
|
+
{
|
|
522
|
+
type: "button",
|
|
523
|
+
onClick: () => setIsCalendarOpen(false),
|
|
524
|
+
className: "text-primary-800 flex-1 text-sm hover:underline",
|
|
525
|
+
children: "Done"
|
|
526
|
+
}
|
|
527
|
+
)
|
|
528
|
+
] })
|
|
342
529
|
]
|
|
343
530
|
}
|
|
344
531
|
);
|
|
345
532
|
};
|
|
346
|
-
if (
|
|
533
|
+
if (inputType === "year") {
|
|
534
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
535
|
+
chunkMSRU3XBH_cjs.Input,
|
|
536
|
+
{
|
|
537
|
+
ref,
|
|
538
|
+
type: inputType === "year" ? "text" : inputType,
|
|
539
|
+
inputMode: inputType === "year" ? "numeric" : void 0,
|
|
540
|
+
pattern: inputType === "year" ? "[0-9]{4}" : void 0,
|
|
541
|
+
maxLength: inputType === "year" ? 4 : void 0,
|
|
542
|
+
placeholder: inputType === "year" ? "YYYY" : void 0,
|
|
543
|
+
value: value.replace(/\D/g, "").slice(0, 4),
|
|
544
|
+
onChange: (event) => onChange?.(event.target.value.replace(/\D/g, "").slice(0, 4)),
|
|
545
|
+
onBlur,
|
|
546
|
+
onClick,
|
|
547
|
+
hasError,
|
|
548
|
+
error,
|
|
549
|
+
className: chunkOR5DRJCW_cjs.cn(widthClasses[width], className),
|
|
550
|
+
...props
|
|
551
|
+
}
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
if (showCalendar || inputType !== "date") {
|
|
347
555
|
const { label, helperText, hideLabel, required, size, ...inputProps } = props;
|
|
348
556
|
const resolvedSize = size ?? "md";
|
|
349
557
|
const inputId = inputProps.id || generatedId;
|
|
@@ -381,12 +589,17 @@ var DateInput = React__namespace.forwardRef(
|
|
|
381
589
|
ref,
|
|
382
590
|
id: inputId,
|
|
383
591
|
type: "text",
|
|
384
|
-
inputMode: "numeric",
|
|
592
|
+
inputMode: inputType === "date" ? "numeric" : void 0,
|
|
385
593
|
autoComplete,
|
|
386
|
-
placeholder,
|
|
387
|
-
value: displayValue,
|
|
594
|
+
placeholder: inputType === "month" ? "Select month" : inputType === "datetime-local" ? "Select date and time" : placeholder,
|
|
595
|
+
value: formatPickerValue(displayValue, inputType, timeFormat),
|
|
388
596
|
onChange: handleChange,
|
|
389
|
-
onBlur: handleBlur,
|
|
597
|
+
onBlur: inputType === "date" ? handleBlur : onBlur,
|
|
598
|
+
onClick: (event) => {
|
|
599
|
+
onClick?.(event);
|
|
600
|
+
setIsCalendarOpen(true);
|
|
601
|
+
},
|
|
602
|
+
readOnly: !isFormattedDate,
|
|
390
603
|
"aria-invalid": showError,
|
|
391
604
|
"aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
|
|
392
605
|
className: chunkOR5DRJCW_cjs.cn(
|
|
@@ -422,9 +635,9 @@ var DateInput = React__namespace.forwardRef(
|
|
|
422
635
|
"aria-haspopup": "dialog",
|
|
423
636
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { size: 18 })
|
|
424
637
|
}
|
|
425
|
-
)
|
|
426
|
-
isCalendarOpen && renderCalendar()
|
|
638
|
+
)
|
|
427
639
|
] }),
|
|
640
|
+
isCalendarOpen && reactDom.createPortal(renderCalendar(), document.body),
|
|
428
641
|
errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
|
|
429
642
|
"p",
|
|
430
643
|
{
|
|
@@ -494,5 +707,5 @@ function ChevronRightIcon() {
|
|
|
494
707
|
}
|
|
495
708
|
|
|
496
709
|
exports.DateInput = DateInput;
|
|
497
|
-
//# sourceMappingURL=chunk-
|
|
498
|
-
//# sourceMappingURL=chunk-
|
|
710
|
+
//# sourceMappingURL=chunk-JC6Y3LGF.cjs.map
|
|
711
|
+
//# sourceMappingURL=chunk-JC6Y3LGF.cjs.map
|