@vritti/quantum-ui 0.3.18 → 0.3.19
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/DatePicker.js
CHANGED
|
@@ -199,7 +199,7 @@ const DatePicker = forwardRef((rawProps, ref) => {
|
|
|
199
199
|
if (!parsedDate || !isWithinDayBounds(parsedDate, minDay, maxDay)) return;
|
|
200
200
|
commit(parsedDate);
|
|
201
201
|
};
|
|
202
|
-
return /* @__PURE__ */ jsxs(Field, { "data-disabled": disabled, children: [
|
|
202
|
+
return /* @__PURE__ */ jsxs(Field, { "data-disabled": disabled, className, children: [
|
|
203
203
|
label && /* @__PURE__ */ jsx(FieldLabel, { htmlFor: inputId, children: label }),
|
|
204
204
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
205
205
|
/* @__PURE__ */ jsx(
|
|
@@ -212,7 +212,7 @@ const DatePicker = forwardRef((rawProps, ref) => {
|
|
|
212
212
|
readOnly: true,
|
|
213
213
|
"aria-invalid": !!error,
|
|
214
214
|
placeholder,
|
|
215
|
-
className:
|
|
215
|
+
className: "w-full pr-10",
|
|
216
216
|
onClick: () => !disabled && setOpen(true),
|
|
217
217
|
onBlur: () => onBlur?.(),
|
|
218
218
|
onKeyDown: (e) => {
|
package/dist/DatePicker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sources":["../lib/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import {\n min as earliestDate,\n format,\n getDaysInMonth,\n isAfter,\n isBefore,\n isValid,\n max as latestDate,\n parse,\n startOfDay,\n startOfMonth,\n} from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { useLocale } from '../../hooks/useLocale';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../Field';\n\ntype DatePickerValue = string | undefined;\ntype DateParts = { day: string; month: string; year: string };\n\nconst ISO = 'yyyy-MM-dd';\nconst MANUAL = 'dd/MM/yyyy';\nconst DEFAULT_DISPLAY = 'P';\nconst objectWithHasOwn = Object as ObjectConstructor & { hasOwn(target: object, key: PropertyKey): boolean };\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\nconst hasValueProp = (props: object, key: string) => objectWithHasOwn.hasOwn(props, key);\nconst parseIso = (value?: string) => {\n if (!value || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return undefined;\n const next = parse(value, ISO, new Date());\n return isValid(next) && format(next, ISO) === value ? next : undefined;\n};\nconst toParts = (date?: Date): DateParts =>\n date\n ? {\n day: format(date, 'dd'),\n month: format(date, 'MM'),\n year: format(date, 'yyyy'),\n }\n : emptyParts();\nconst toIso = (date?: Date) => (date ? format(date, ISO) : undefined);\n\nconst parseManualDate = ({ day, month, year }: DateParts) => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, MANUAL, new Date());\n return isValid(next) && format(next, MANUAL) === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst previewManualDate = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n const day = parts.day ? Number(parts.day) : Number.NaN;\n\n if (!Number.isInteger(year) || year < 1 || !Number.isInteger(month) || month < 1 || month > 12) return undefined;\n if (!Number.isInteger(day) || day < 1) return undefined;\n\n const maxDay = getDaysInMonth(new Date(year, month - 1, 1));\n if (day > maxDay) return undefined;\n\n const next = new Date(year, month - 1, day);\n return isValid(next) ? next : undefined;\n};\n\nconst latest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? latestDate(values) : undefined;\n};\n\nconst earliest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? earliestDate(values) : undefined;\n};\n\nconst isWithinDayBounds = (date: Date, minDay?: Date, maxDay?: Date) =>\n (!minDay || !isBefore(startOfDay(date), minDay)) && (!maxDay || !isAfter(startOfDay(date), maxDay));\n\nconst coerceWithinDayBounds = (date: Date | undefined, minDay?: Date, maxDay?: Date) =>\n date && isWithinDayBounds(date, minDay, maxDay) ? date : undefined;\n\nconst visibleMonthFromParts = (parts: DateParts, fallbackMonth: Date) => {\n const hasYear = parts.year.length === 4;\n const hasMonth = parts.month.length > 0;\n\n if (!hasYear && !hasMonth) return fallbackMonth;\n\n const year = hasYear ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = hasMonth ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n\n if (!Number.isInteger(year) || year < 1 || year > 9999) return fallbackMonth;\n if (!Number.isInteger(month) || month < 1 || month > 12) return new Date(year, fallbackMonth.getMonth(), 1);\n\n return new Date(year, month - 1, 1);\n};\n\nconst clampMonth = (month: Date, minDay?: Date, maxDay?: Date) => {\n const monthStart = startOfMonth(month);\n const minMonth = minDay ? startOfMonth(minDay) : undefined;\n const maxMonth = maxDay ? startOfMonth(maxDay) : undefined;\n\n if (minMonth && minDay && isBefore(monthStart, minMonth)) return minDay;\n if (maxMonth && maxDay && isAfter(monthStart, maxMonth)) return maxDay;\n return month;\n};\n\nconst maxDayForParts = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallbackMonth.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallbackMonth.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nconst mergeDisabledMatchers = (\n disabled: CalendarProps['disabled'],\n minDay?: Date,\n maxDay?: Date,\n): CalendarProps['disabled'] => {\n const matchers = disabled ? (Array.isArray(disabled) ? [...disabled] : [disabled]) : [];\n if (minDay) matchers.push({ before: minDay });\n if (maxDay) matchers.push({ after: maxDay });\n return matchers.length > 0 ? matchers : undefined;\n};\n\nexport interface DatePickerProps {\n name?: string;\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DatePickerValue;\n onValueChange?: (value: string | null) => void;\n onChange?: (value: string | null) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n onBlur?: () => void;\n disabled?: boolean;\n disableInput?: boolean;\n displayFormat?: string;\n minDate?: Date;\n maxDate?: Date;\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>((rawProps, ref) => {\n const controlled = hasValueProp(rawProps, 'value');\n const openControlled = hasValueProp(rawProps, 'open');\n const {\n label,\n description,\n error,\n placeholder = 'Select date',\n value,\n onValueChange,\n onChange,\n open: openProp,\n onOpenChange,\n calendarProps,\n className,\n id,\n onBlur,\n disabled,\n disableInput = true,\n displayFormat = DEFAULT_DISPLAY,\n minDate,\n maxDate,\n ...props\n } = rawProps;\n\n const locale = useLocale();\n const formatOptions = locale ? { locale } : undefined;\n\n const parsedValue = parseIso(value);\n const minDay = minDate ? startOfDay(minDate) : undefined;\n const maxDay = maxDate ? startOfDay(maxDate) : undefined;\n const {\n mode: _calendarMode,\n month: _calendarMonth,\n onMonthChange: calendarOnMonthChange,\n startMonth: calendarStartMonth,\n endMonth: calendarEndMonth,\n disabled: calendarDisabledProp,\n captionLayout: _calendarCaptionLayout,\n ...calendarRestProps\n } = calendarProps ?? {};\n\n const [localValue, setLocalValue] = useState<Date | undefined>(() =>\n coerceWithinDayBounds(parsedValue, minDay, maxDay),\n );\n const [openState, setOpenState] = useState(false);\n const [month, setMonth] = useState<Date>(() =>\n clampMonth(parsedValue ?? minDay ?? maxDay ?? new Date(), minDay, maxDay),\n );\n const [draftParts, setDraftParts] = useState<DateParts>(() => toParts(parsedValue));\n const lastInvalidTimeRef = useRef<number | null>(null);\n\n const rawSelected = controlled ? parsedValue : localValue;\n const selected = coerceWithinDayBounds(rawSelected, minDay, maxDay);\n const rawSelectedTime = rawSelected?.getTime() ?? null;\n const minDayTime = minDay?.getTime() ?? null;\n const maxDayTime = maxDay?.getTime() ?? null;\n const selectedTime = selected?.getTime() ?? null;\n const selectedPreview = previewManualDate(draftParts, month);\n const calendarSelected =\n selectedPreview && isWithinDayBounds(selectedPreview, minDay, maxDay) ? selectedPreview : selected;\n const inputId = id ?? props.name ?? 'date';\n const startMonth = latest([minDay, calendarStartMonth]);\n const endMonth = earliest([maxDay, calendarEndMonth]);\n const calendarDisabled = mergeDisabledMatchers(calendarDisabledProp, minDay, maxDay);\n const isOpen = openControlled ? openProp : openState;\n const setOpen = openControlled ? (onOpenChange ?? (() => {})) : setOpenState;\n\n useEffect(() => {\n if (!controlled) return;\n const next = selectedTime === null ? undefined : new Date(selectedTime);\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setDraftParts(toParts(next));\n setMonth((currentMonth) => (next ? next : clampMonth(currentMonth, nextMinDay, nextMaxDay)));\n }, [controlled, selectedTime, minDayTime, maxDayTime]);\n\n useEffect(() => {\n if (rawSelectedTime === null || selectedTime !== null) {\n lastInvalidTimeRef.current = null;\n return;\n }\n if (lastInvalidTimeRef.current === rawSelectedTime) return;\n\n lastInvalidTimeRef.current = rawSelectedTime;\n\n if (!controlled) setLocalValue(undefined);\n setDraftParts(emptyParts());\n\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setMonth((currentMonth) => clampMonth(currentMonth, nextMinDay, nextMaxDay));\n\n onValueChange?.(null);\n onChange?.(null);\n }, [controlled, rawSelectedTime, selectedTime, minDayTime, maxDayTime, onValueChange, onChange]);\n\n useEffect(() => {\n if (selectedTime !== null) return;\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setMonth((currentMonth) => clampMonth(currentMonth, nextMinDay, nextMaxDay));\n }, [selectedTime, minDayTime, maxDayTime]);\n\n const emit = (next?: Date) => {\n const iso = toIso(next) ?? null;\n onValueChange?.(iso);\n onChange?.(iso);\n };\n\n const commit = (next?: Date) => {\n if (!controlled) setLocalValue(next);\n setDraftParts(toParts(next));\n setMonth((currentMonth) => (next ? next : clampMonth(currentMonth, minDay, maxDay)));\n emit(next);\n };\n\n const updateDraftDate = (nextParts: DateParts) => {\n setDraftParts(nextParts);\n\n const nextMonth = clampMonth(visibleMonthFromParts(nextParts, month), minDay, maxDay);\n if (nextMonth.getTime() !== month.getTime()) setMonth(nextMonth);\n\n if (!nextParts.day && !nextParts.month && !nextParts.year) {\n commit(undefined);\n return;\n }\n\n const parsedDate = parseManualDate(nextParts);\n if (!parsedDate || !isWithinDayBounds(parsedDate, minDay, maxDay)) return;\n\n commit(parsedDate);\n };\n\n return (\n <Field data-disabled={disabled}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className=\"relative\">\n <Input\n ref={ref}\n id={inputId}\n value={selected ? format(selected, displayFormat, formatOptions) : ''}\n disabled={disabled}\n readOnly\n aria-invalid={!!error}\n placeholder={placeholder}\n className={`pr-10 ${className ?? ''}`.trim()}\n onClick={() => !disabled && setOpen(true)}\n onBlur={() => onBlur?.()}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowDown') return;\n e.preventDefault();\n setOpen(true);\n }}\n {...props}\n />\n <div className=\"absolute inset-y-0 right-1 flex items-center\">\n <Popover open={isOpen} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Select date\"\n disabled={disabled}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <CalendarIcon />\n <span className=\"sr-only\">Select date</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n {!disableInput && (\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center\">\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={draftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2) {\n const nextDay = Number(day);\n if (nextDay < 1 || nextDay > maxDayForParts(draftParts, month)) return;\n }\n updateDraftDate({ ...draftParts, day });\n }}\n />\n <Input\n value={draftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const monthValue = digits(e.target.value, 2);\n if (monthValue === '00') return;\n if (monthValue.length === 2) {\n const nextMonth = Number(monthValue);\n if (nextMonth < 1 || nextMonth > 12) return;\n }\n\n let day = draftParts.day;\n if (day.length === 2) {\n const cappedDay = Math.min(\n Number(day),\n maxDayForParts({ ...draftParts, month: monthValue }, month),\n );\n day = String(cappedDay).padStart(2, '0');\n }\n\n updateDraftDate({ ...draftParts, day, month: monthValue });\n }}\n />\n <Input\n value={draftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => updateDraftDate({ ...draftParts, year: digits(e.target.value, 4) })}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n e.preventDefault();\n updateDraftDate(draftParts);\n setOpen(false);\n }}\n />\n </div>\n </div>\n </div>\n )}\n <Calendar\n {...calendarRestProps}\n locale={calendarRestProps.locale ?? locale}\n mode=\"single\"\n captionLayout=\"label\"\n startMonth={startMonth}\n endMonth={endMonth}\n disabled={calendarDisabled}\n month={month}\n onMonthChange={(nextMonth) => {\n const safeMonth = clampMonth(nextMonth, minDay, maxDay);\n setMonth(safeMonth);\n setDraftParts((current) => ({\n ...current,\n month: format(safeMonth, 'MM', formatOptions),\n year: format(safeMonth, 'yyyy', formatOptions),\n }));\n calendarOnMonthChange?.(safeMonth);\n }}\n selected={calendarSelected}\n onSelect={(next) => {\n // Ignore react-day-picker's toggle-to-undefined when clicking the already-selected date (accidental clear); use manual input to clear\n if (!next) return;\n if (!isWithinDayBounds(next, minDay, maxDay)) return;\n commit(next);\n onBlur?.();\n setOpen(false);\n }}\n />\n </PopoverContent>\n </Popover>\n </div>\n </div>\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n"],"names":["latestDate","earliestDate","CalendarIcon","Calendar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sources":["../lib/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import {\n min as earliestDate,\n format,\n getDaysInMonth,\n isAfter,\n isBefore,\n isValid,\n max as latestDate,\n parse,\n startOfDay,\n startOfMonth,\n} from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { useLocale } from '../../hooks/useLocale';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../Field';\n\ntype DatePickerValue = string | undefined;\ntype DateParts = { day: string; month: string; year: string };\n\nconst ISO = 'yyyy-MM-dd';\nconst MANUAL = 'dd/MM/yyyy';\nconst DEFAULT_DISPLAY = 'P';\nconst objectWithHasOwn = Object as ObjectConstructor & { hasOwn(target: object, key: PropertyKey): boolean };\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\nconst hasValueProp = (props: object, key: string) => objectWithHasOwn.hasOwn(props, key);\nconst parseIso = (value?: string) => {\n if (!value || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return undefined;\n const next = parse(value, ISO, new Date());\n return isValid(next) && format(next, ISO) === value ? next : undefined;\n};\nconst toParts = (date?: Date): DateParts =>\n date\n ? {\n day: format(date, 'dd'),\n month: format(date, 'MM'),\n year: format(date, 'yyyy'),\n }\n : emptyParts();\nconst toIso = (date?: Date) => (date ? format(date, ISO) : undefined);\n\nconst parseManualDate = ({ day, month, year }: DateParts) => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, MANUAL, new Date());\n return isValid(next) && format(next, MANUAL) === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst previewManualDate = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n const day = parts.day ? Number(parts.day) : Number.NaN;\n\n if (!Number.isInteger(year) || year < 1 || !Number.isInteger(month) || month < 1 || month > 12) return undefined;\n if (!Number.isInteger(day) || day < 1) return undefined;\n\n const maxDay = getDaysInMonth(new Date(year, month - 1, 1));\n if (day > maxDay) return undefined;\n\n const next = new Date(year, month - 1, day);\n return isValid(next) ? next : undefined;\n};\n\nconst latest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? latestDate(values) : undefined;\n};\n\nconst earliest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? earliestDate(values) : undefined;\n};\n\nconst isWithinDayBounds = (date: Date, minDay?: Date, maxDay?: Date) =>\n (!minDay || !isBefore(startOfDay(date), minDay)) && (!maxDay || !isAfter(startOfDay(date), maxDay));\n\nconst coerceWithinDayBounds = (date: Date | undefined, minDay?: Date, maxDay?: Date) =>\n date && isWithinDayBounds(date, minDay, maxDay) ? date : undefined;\n\nconst visibleMonthFromParts = (parts: DateParts, fallbackMonth: Date) => {\n const hasYear = parts.year.length === 4;\n const hasMonth = parts.month.length > 0;\n\n if (!hasYear && !hasMonth) return fallbackMonth;\n\n const year = hasYear ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = hasMonth ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n\n if (!Number.isInteger(year) || year < 1 || year > 9999) return fallbackMonth;\n if (!Number.isInteger(month) || month < 1 || month > 12) return new Date(year, fallbackMonth.getMonth(), 1);\n\n return new Date(year, month - 1, 1);\n};\n\nconst clampMonth = (month: Date, minDay?: Date, maxDay?: Date) => {\n const monthStart = startOfMonth(month);\n const minMonth = minDay ? startOfMonth(minDay) : undefined;\n const maxMonth = maxDay ? startOfMonth(maxDay) : undefined;\n\n if (minMonth && minDay && isBefore(monthStart, minMonth)) return minDay;\n if (maxMonth && maxDay && isAfter(monthStart, maxMonth)) return maxDay;\n return month;\n};\n\nconst maxDayForParts = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallbackMonth.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallbackMonth.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nconst mergeDisabledMatchers = (\n disabled: CalendarProps['disabled'],\n minDay?: Date,\n maxDay?: Date,\n): CalendarProps['disabled'] => {\n const matchers = disabled ? (Array.isArray(disabled) ? [...disabled] : [disabled]) : [];\n if (minDay) matchers.push({ before: minDay });\n if (maxDay) matchers.push({ after: maxDay });\n return matchers.length > 0 ? matchers : undefined;\n};\n\nexport interface DatePickerProps {\n name?: string;\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DatePickerValue;\n onValueChange?: (value: string | null) => void;\n onChange?: (value: string | null) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n onBlur?: () => void;\n disabled?: boolean;\n disableInput?: boolean;\n displayFormat?: string;\n minDate?: Date;\n maxDate?: Date;\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>((rawProps, ref) => {\n const controlled = hasValueProp(rawProps, 'value');\n const openControlled = hasValueProp(rawProps, 'open');\n const {\n label,\n description,\n error,\n placeholder = 'Select date',\n value,\n onValueChange,\n onChange,\n open: openProp,\n onOpenChange,\n calendarProps,\n className,\n id,\n onBlur,\n disabled,\n disableInput = true,\n displayFormat = DEFAULT_DISPLAY,\n minDate,\n maxDate,\n ...props\n } = rawProps;\n\n const locale = useLocale();\n const formatOptions = locale ? { locale } : undefined;\n\n const parsedValue = parseIso(value);\n const minDay = minDate ? startOfDay(minDate) : undefined;\n const maxDay = maxDate ? startOfDay(maxDate) : undefined;\n const {\n mode: _calendarMode,\n month: _calendarMonth,\n onMonthChange: calendarOnMonthChange,\n startMonth: calendarStartMonth,\n endMonth: calendarEndMonth,\n disabled: calendarDisabledProp,\n captionLayout: _calendarCaptionLayout,\n ...calendarRestProps\n } = calendarProps ?? {};\n\n const [localValue, setLocalValue] = useState<Date | undefined>(() =>\n coerceWithinDayBounds(parsedValue, minDay, maxDay),\n );\n const [openState, setOpenState] = useState(false);\n const [month, setMonth] = useState<Date>(() =>\n clampMonth(parsedValue ?? minDay ?? maxDay ?? new Date(), minDay, maxDay),\n );\n const [draftParts, setDraftParts] = useState<DateParts>(() => toParts(parsedValue));\n const lastInvalidTimeRef = useRef<number | null>(null);\n\n const rawSelected = controlled ? parsedValue : localValue;\n const selected = coerceWithinDayBounds(rawSelected, minDay, maxDay);\n const rawSelectedTime = rawSelected?.getTime() ?? null;\n const minDayTime = minDay?.getTime() ?? null;\n const maxDayTime = maxDay?.getTime() ?? null;\n const selectedTime = selected?.getTime() ?? null;\n const selectedPreview = previewManualDate(draftParts, month);\n const calendarSelected =\n selectedPreview && isWithinDayBounds(selectedPreview, minDay, maxDay) ? selectedPreview : selected;\n const inputId = id ?? props.name ?? 'date';\n const startMonth = latest([minDay, calendarStartMonth]);\n const endMonth = earliest([maxDay, calendarEndMonth]);\n const calendarDisabled = mergeDisabledMatchers(calendarDisabledProp, minDay, maxDay);\n const isOpen = openControlled ? openProp : openState;\n const setOpen = openControlled ? (onOpenChange ?? (() => {})) : setOpenState;\n\n useEffect(() => {\n if (!controlled) return;\n const next = selectedTime === null ? undefined : new Date(selectedTime);\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setDraftParts(toParts(next));\n setMonth((currentMonth) => (next ? next : clampMonth(currentMonth, nextMinDay, nextMaxDay)));\n }, [controlled, selectedTime, minDayTime, maxDayTime]);\n\n useEffect(() => {\n if (rawSelectedTime === null || selectedTime !== null) {\n lastInvalidTimeRef.current = null;\n return;\n }\n if (lastInvalidTimeRef.current === rawSelectedTime) return;\n\n lastInvalidTimeRef.current = rawSelectedTime;\n\n if (!controlled) setLocalValue(undefined);\n setDraftParts(emptyParts());\n\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setMonth((currentMonth) => clampMonth(currentMonth, nextMinDay, nextMaxDay));\n\n onValueChange?.(null);\n onChange?.(null);\n }, [controlled, rawSelectedTime, selectedTime, minDayTime, maxDayTime, onValueChange, onChange]);\n\n useEffect(() => {\n if (selectedTime !== null) return;\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setMonth((currentMonth) => clampMonth(currentMonth, nextMinDay, nextMaxDay));\n }, [selectedTime, minDayTime, maxDayTime]);\n\n const emit = (next?: Date) => {\n const iso = toIso(next) ?? null;\n onValueChange?.(iso);\n onChange?.(iso);\n };\n\n const commit = (next?: Date) => {\n if (!controlled) setLocalValue(next);\n setDraftParts(toParts(next));\n setMonth((currentMonth) => (next ? next : clampMonth(currentMonth, minDay, maxDay)));\n emit(next);\n };\n\n const updateDraftDate = (nextParts: DateParts) => {\n setDraftParts(nextParts);\n\n const nextMonth = clampMonth(visibleMonthFromParts(nextParts, month), minDay, maxDay);\n if (nextMonth.getTime() !== month.getTime()) setMonth(nextMonth);\n\n if (!nextParts.day && !nextParts.month && !nextParts.year) {\n commit(undefined);\n return;\n }\n\n const parsedDate = parseManualDate(nextParts);\n if (!parsedDate || !isWithinDayBounds(parsedDate, minDay, maxDay)) return;\n\n commit(parsedDate);\n };\n\n return (\n <Field data-disabled={disabled} className={className}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className=\"relative\">\n <Input\n ref={ref}\n id={inputId}\n value={selected ? format(selected, displayFormat, formatOptions) : ''}\n disabled={disabled}\n readOnly\n aria-invalid={!!error}\n placeholder={placeholder}\n className=\"w-full pr-10\"\n onClick={() => !disabled && setOpen(true)}\n onBlur={() => onBlur?.()}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowDown') return;\n e.preventDefault();\n setOpen(true);\n }}\n {...props}\n />\n <div className=\"absolute inset-y-0 right-1 flex items-center\">\n <Popover open={isOpen} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Select date\"\n disabled={disabled}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <CalendarIcon />\n <span className=\"sr-only\">Select date</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n {!disableInput && (\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center\">\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={draftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2) {\n const nextDay = Number(day);\n if (nextDay < 1 || nextDay > maxDayForParts(draftParts, month)) return;\n }\n updateDraftDate({ ...draftParts, day });\n }}\n />\n <Input\n value={draftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const monthValue = digits(e.target.value, 2);\n if (monthValue === '00') return;\n if (monthValue.length === 2) {\n const nextMonth = Number(monthValue);\n if (nextMonth < 1 || nextMonth > 12) return;\n }\n\n let day = draftParts.day;\n if (day.length === 2) {\n const cappedDay = Math.min(\n Number(day),\n maxDayForParts({ ...draftParts, month: monthValue }, month),\n );\n day = String(cappedDay).padStart(2, '0');\n }\n\n updateDraftDate({ ...draftParts, day, month: monthValue });\n }}\n />\n <Input\n value={draftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => updateDraftDate({ ...draftParts, year: digits(e.target.value, 4) })}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n e.preventDefault();\n updateDraftDate(draftParts);\n setOpen(false);\n }}\n />\n </div>\n </div>\n </div>\n )}\n <Calendar\n {...calendarRestProps}\n locale={calendarRestProps.locale ?? locale}\n mode=\"single\"\n captionLayout=\"label\"\n startMonth={startMonth}\n endMonth={endMonth}\n disabled={calendarDisabled}\n month={month}\n onMonthChange={(nextMonth) => {\n const safeMonth = clampMonth(nextMonth, minDay, maxDay);\n setMonth(safeMonth);\n setDraftParts((current) => ({\n ...current,\n month: format(safeMonth, 'MM', formatOptions),\n year: format(safeMonth, 'yyyy', formatOptions),\n }));\n calendarOnMonthChange?.(safeMonth);\n }}\n selected={calendarSelected}\n onSelect={(next) => {\n // Ignore react-day-picker's toggle-to-undefined when clicking the already-selected date (accidental clear); use manual input to clear\n if (!next) return;\n if (!isWithinDayBounds(next, minDay, maxDay)) return;\n commit(next);\n onBlur?.();\n setOpen(false);\n }}\n />\n </PopoverContent>\n </Popover>\n </div>\n </div>\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n"],"names":["latestDate","earliestDate","CalendarIcon","Calendar"],"mappings":"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"}
|
package/dist/DateTimePicker.js
CHANGED
|
@@ -239,7 +239,7 @@ const DateTimePicker = forwardRef((rawProps, ref) => {
|
|
|
239
239
|
if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;
|
|
240
240
|
commit(nextDateTime);
|
|
241
241
|
};
|
|
242
|
-
return /* @__PURE__ */ jsxs(Field, { "data-disabled": disabled, children: [
|
|
242
|
+
return /* @__PURE__ */ jsxs(Field, { "data-disabled": disabled, className, children: [
|
|
243
243
|
label && /* @__PURE__ */ jsx(FieldLabel, { htmlFor: inputId, children: label }),
|
|
244
244
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
245
245
|
/* @__PURE__ */ jsx(
|
|
@@ -252,7 +252,7 @@ const DateTimePicker = forwardRef((rawProps, ref) => {
|
|
|
252
252
|
readOnly: true,
|
|
253
253
|
"aria-invalid": !!error,
|
|
254
254
|
placeholder,
|
|
255
|
-
className:
|
|
255
|
+
className: "w-full pr-10",
|
|
256
256
|
onClick: () => !disabled && setOpen(true),
|
|
257
257
|
onBlur: () => onBlur?.(),
|
|
258
258
|
onKeyDown: (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimePicker.js","sources":["../lib/components/DateTimePicker/DateTimePicker.tsx"],"sourcesContent":["import { TZDate, tz } from '@date-fns/tz';\nimport {\n min as earliestDate,\n format,\n getDaysInMonth,\n isAfter,\n isBefore,\n isValid,\n type Locale,\n max as latestDate,\n parse,\n parseISO,\n startOfDay,\n startOfMonth,\n} from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { useBUTimezone } from '../../hooks/useBUTimezone';\nimport { useLocale } from '../../hooks/useLocale';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../Field';\n\ntype DateTimePickerValue = string | undefined;\ntype DateParts = { day: string; month: string; year: string };\n\nconst MANUAL_DATE = 'dd/MM/yyyy';\nconst DEFAULT_DISPLAY = 'P p';\nconst DEFAULT_TIME = '00:00';\nconst TIME_PATTERN = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\nconst objectWithHasOwn = Object as ObjectConstructor & { hasOwn(target: object, key: PropertyKey): boolean };\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\nconst hasValueProp = (props: object, key: string) => objectWithHasOwn.hasOwn(props, key);\nconst formatInTimeZone = (date: Date, pattern: string, timeZone: string, locale?: Locale) =>\n format(date, pattern, locale ? { in: tz(timeZone), locale } : { in: tz(timeZone) });\nconst parseDateTime = (value?: string) => {\n if (!value) return undefined;\n const next = parseISO(value);\n return isValid(next) ? next : undefined;\n};\nconst toParts = (date?: Date): DateParts =>\n date\n ? {\n day: format(date, 'dd'),\n month: format(date, 'MM'),\n year: format(date, 'yyyy'),\n }\n : emptyParts();\nconst toCalendarDate = (date: Date | undefined, timeZone: string): Date | undefined => {\n if (!date) return undefined;\n\n const year = Number(formatInTimeZone(date, 'yyyy', timeZone));\n const month = Number(formatInTimeZone(date, 'MM', timeZone));\n const day = Number(formatInTimeZone(date, 'dd', timeZone));\n\n return new Date(year, month - 1, day);\n};\nconst toDraftParts = (date: Date | undefined, timeZone: string) => toParts(toCalendarDate(date, timeZone));\nconst toTime = (date: Date | undefined, timeZone: string) => (date ? formatInTimeZone(date, 'HH:mm', timeZone) : '');\nconst toIso = (date?: Date) => (date ? date.toISOString() : undefined);\n\nconst parseManualDate = ({ day, month, year }: DateParts) => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, MANUAL_DATE, new Date());\n return isValid(next) && format(next, MANUAL_DATE) === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst previewManualDate = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n const day = parts.day ? Number(parts.day) : Number.NaN;\n\n if (!Number.isInteger(year) || year < 1 || !Number.isInteger(month) || month < 1 || month > 12) return undefined;\n if (!Number.isInteger(day) || day < 1) return undefined;\n\n const maxDay = getDaysInMonth(new Date(year, month - 1, 1));\n if (day > maxDay) return undefined;\n\n const next = new Date(year, month - 1, day);\n return isValid(next) ? next : undefined;\n};\n\nconst withTime = (date: Date, time: string, timeZone: string) => {\n const [hours, minutes] = TIME_PATTERN.test(time) ? time.split(':').map(Number) : [0, 0];\n const zonedDateTime = TZDate.tz(timeZone, date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, 0, 0);\n return new Date(zonedDateTime.getTime());\n};\n\nconst latest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? latestDate(values) : undefined;\n};\n\nconst earliest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? earliestDate(values) : undefined;\n};\n\nconst isWithinDayBounds = (date: Date, minDay?: Date, maxDay?: Date) =>\n (!minDay || !isBefore(startOfDay(date), minDay)) && (!maxDay || !isAfter(startOfDay(date), maxDay));\n\nconst isWithinDateTimeBounds = (date: Date, minDateTime?: Date, maxDateTime?: Date) =>\n (!minDateTime || !isBefore(date, minDateTime)) && (!maxDateTime || !isAfter(date, maxDateTime));\n\nconst coerceWithinDateTimeBounds = (\n date: Date | undefined,\n minDay: Date | undefined,\n maxDay: Date | undefined,\n minDateTime: Date | undefined,\n maxDateTime: Date | undefined,\n timeZone: string,\n) =>\n date &&\n isWithinDayBounds(toCalendarDate(date, timeZone) ?? date, minDay, maxDay) &&\n isWithinDateTimeBounds(date, minDateTime, maxDateTime)\n ? date\n : undefined;\n\nconst visibleMonthFromParts = (parts: DateParts, fallbackMonth: Date) => {\n const hasYear = parts.year.length === 4;\n const hasMonth = parts.month.length > 0;\n\n if (!hasYear && !hasMonth) return fallbackMonth;\n\n const year = hasYear ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = hasMonth ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n\n if (!Number.isInteger(year) || year < 1 || year > 9999) return fallbackMonth;\n if (!Number.isInteger(month) || month < 1 || month > 12) return new Date(year, fallbackMonth.getMonth(), 1);\n\n return new Date(year, month - 1, 1);\n};\n\nconst clampMonth = (month: Date, minDay?: Date, maxDay?: Date) => {\n const monthStart = startOfMonth(month);\n const minMonth = minDay ? startOfMonth(minDay) : undefined;\n const maxMonth = maxDay ? startOfMonth(maxDay) : undefined;\n\n if (minMonth && minDay && isBefore(monthStart, minMonth)) return minDay;\n if (maxMonth && maxDay && isAfter(monthStart, maxMonth)) return maxDay;\n return month;\n};\n\nconst maxDayForParts = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallbackMonth.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallbackMonth.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nconst mergeDisabledMatchers = (\n disabled: CalendarProps['disabled'],\n minDay?: Date,\n maxDay?: Date,\n): CalendarProps['disabled'] => {\n const matchers = disabled ? (Array.isArray(disabled) ? [...disabled] : [disabled]) : [];\n if (minDay) matchers.push({ before: minDay });\n if (maxDay) matchers.push({ after: maxDay });\n return matchers.length > 0 ? matchers : undefined;\n};\n\nexport interface DateTimePickerProps {\n name?: string;\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DateTimePickerValue;\n onValueChange?: (value: string | undefined) => void;\n onChange?: (value: string | undefined) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n onBlur?: () => void;\n disabled?: boolean;\n displayFormat?: string;\n minDate?: Date;\n maxDate?: Date;\n minDateTime?: string;\n maxDateTime?: string;\n}\n\nexport const DateTimePicker = forwardRef<HTMLInputElement, DateTimePickerProps>((rawProps, ref) => {\n const controlled = hasValueProp(rawProps, 'value');\n const openControlled = hasValueProp(rawProps, 'open');\n const {\n label,\n description,\n error,\n placeholder = 'Select date and time',\n value,\n onValueChange,\n onChange,\n open: openProp,\n onOpenChange,\n calendarProps,\n className,\n id,\n onBlur,\n disabled,\n displayFormat = DEFAULT_DISPLAY,\n minDate,\n maxDate,\n minDateTime,\n maxDateTime,\n ...props\n } = rawProps;\n\n const locale = useLocale();\n const timeZone = useBUTimezone() ?? 'UTC';\n const parsedValue = parseDateTime(value);\n const minDateTimeValue = parseDateTime(minDateTime);\n const maxDateTimeValue = parseDateTime(maxDateTime);\n const minDay = latest([minDate ? startOfDay(minDate) : undefined, toCalendarDate(minDateTimeValue, timeZone)]);\n const maxDay = earliest([maxDate ? startOfDay(maxDate) : undefined, toCalendarDate(maxDateTimeValue, timeZone)]);\n const {\n mode: _calendarMode,\n month: _calendarMonth,\n onMonthChange: calendarOnMonthChange,\n startMonth: calendarStartMonth,\n endMonth: calendarEndMonth,\n disabled: calendarDisabledProp,\n captionLayout: _calendarCaptionLayout,\n ...calendarRestProps\n } = calendarProps ?? {};\n\n const [localValue, setLocalValue] = useState<Date | undefined>(() =>\n coerceWithinDateTimeBounds(parsedValue, minDay, maxDay, minDateTimeValue, maxDateTimeValue, timeZone),\n );\n const [openState, setOpenState] = useState(false);\n const [month, setMonth] = useState<Date>(() =>\n clampMonth(toCalendarDate(parsedValue, timeZone) ?? minDay ?? maxDay ?? new Date(), minDay, maxDay),\n );\n const [draftParts, setDraftParts] = useState<DateParts>(() => toDraftParts(parsedValue, timeZone));\n const [draftTime, setDraftTime] = useState(() => toTime(parsedValue, timeZone));\n const lastInvalidTimeRef = useRef<number | null>(null);\n\n const rawSelected = controlled ? parsedValue : localValue;\n const selected = coerceWithinDateTimeBounds(\n rawSelected,\n minDay,\n maxDay,\n minDateTimeValue,\n maxDateTimeValue,\n timeZone,\n );\n const selectedCalendarDate = toCalendarDate(selected, timeZone);\n const rawSelectedTime = rawSelected?.getTime() ?? null;\n const minDayTime = minDay?.getTime() ?? null;\n const maxDayTime = maxDay?.getTime() ?? null;\n const selectedTime = selected?.getTime() ?? null;\n const selectedPreview = previewManualDate(draftParts, month);\n const calendarSelected =\n selectedPreview && isWithinDayBounds(selectedPreview, minDay, maxDay) ? selectedPreview : selectedCalendarDate;\n const activeDate = calendarSelected;\n const inputId = id ?? props.name ?? 'date-time';\n const startMonth = latest([minDay, calendarStartMonth]);\n const endMonth = earliest([maxDay, calendarEndMonth]);\n const calendarDisabled = mergeDisabledMatchers(calendarDisabledProp, minDay, maxDay);\n const isOpen = openControlled ? openProp : openState;\n const setOpen = openControlled ? (onOpenChange ?? (() => {})) : setOpenState;\n\n const syncDraftFromDate = (next?: Date) => {\n const nextCalendarDate = toCalendarDate(next, timeZone);\n setDraftParts(toDraftParts(next, timeZone));\n setDraftTime(toTime(next, timeZone));\n setMonth((currentMonth) => (nextCalendarDate ? nextCalendarDate : clampMonth(currentMonth, minDay, maxDay)));\n };\n\n useEffect(() => {\n if (!controlled && selectedTime === null) return;\n\n const next = selectedTime === null ? undefined : new Date(selectedTime);\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n const nextCalendarDate = toCalendarDate(next, timeZone);\n\n setDraftParts(toDraftParts(next, timeZone));\n setDraftTime(toTime(next, timeZone));\n setMonth((currentMonth) =>\n nextCalendarDate ? nextCalendarDate : clampMonth(currentMonth, nextMinDay, nextMaxDay),\n );\n }, [controlled, selectedTime, minDayTime, maxDayTime, timeZone]);\n\n useEffect(() => {\n if (rawSelectedTime === null || selectedTime !== null) {\n lastInvalidTimeRef.current = null;\n return;\n }\n if (lastInvalidTimeRef.current === rawSelectedTime) return;\n\n lastInvalidTimeRef.current = rawSelectedTime;\n\n if (!controlled) setLocalValue(undefined);\n setDraftParts(emptyParts());\n setDraftTime('');\n\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setMonth((currentMonth) => clampMonth(currentMonth, nextMinDay, nextMaxDay));\n\n onValueChange?.(undefined);\n onChange?.(undefined);\n }, [controlled, rawSelectedTime, selectedTime, minDayTime, maxDayTime, onValueChange, onChange]);\n\n const emit = (next?: Date) => {\n const iso = toIso(next);\n onValueChange?.(iso);\n onChange?.(iso);\n };\n\n const commit = (next?: Date) => {\n if (!controlled) setLocalValue(next);\n syncDraftFromDate(next);\n emit(next);\n };\n\n const updateDraftDate = (nextParts: DateParts) => {\n setDraftParts(nextParts);\n\n const nextMonth = clampMonth(visibleMonthFromParts(nextParts, month), minDay, maxDay);\n if (nextMonth.getTime() !== month.getTime()) setMonth(nextMonth);\n\n if (!nextParts.day && !nextParts.month && !nextParts.year) {\n commit(undefined);\n return;\n }\n\n const parsedDate = parseManualDate(nextParts);\n if (!parsedDate || !isWithinDayBounds(parsedDate, minDay, maxDay)) return;\n\n const nextDateTime = withTime(parsedDate, draftTime || DEFAULT_TIME, timeZone);\n if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;\n\n commit(nextDateTime);\n };\n\n return (\n <Field data-disabled={disabled}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className=\"relative\">\n <Input\n ref={ref}\n id={inputId}\n value={selected ? formatInTimeZone(selected, displayFormat, timeZone, locale) : ''}\n disabled={disabled}\n readOnly\n aria-invalid={!!error}\n placeholder={placeholder}\n className={`pr-10 ${className ?? ''}`.trim()}\n onClick={() => !disabled && setOpen(true)}\n onBlur={() => onBlur?.()}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowDown') return;\n e.preventDefault();\n setOpen(true);\n }}\n {...props}\n />\n <div className=\"absolute inset-y-0 right-1 flex items-center\">\n <Popover open={isOpen} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Select date and time\"\n disabled={disabled}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <CalendarIcon />\n <span className=\"sr-only\">Select date and time</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center\">\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={draftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2) {\n const nextDay = Number(day);\n if (nextDay < 1 || nextDay > maxDayForParts(draftParts, month)) return;\n }\n updateDraftDate({ ...draftParts, day });\n }}\n />\n <Input\n value={draftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const monthValue = digits(e.target.value, 2);\n if (monthValue === '00') return;\n if (monthValue.length === 2) {\n const nextMonth = Number(monthValue);\n if (nextMonth < 1 || nextMonth > 12) return;\n }\n\n let day = draftParts.day;\n if (day.length === 2) {\n const cappedDay = Math.min(\n Number(day),\n maxDayForParts({ ...draftParts, month: monthValue }, month),\n );\n day = String(cappedDay).padStart(2, '0');\n }\n\n updateDraftDate({ ...draftParts, day, month: monthValue });\n }}\n />\n <Input\n value={draftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => updateDraftDate({ ...draftParts, year: digits(e.target.value, 4) })}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n e.preventDefault();\n updateDraftDate(draftParts);\n }}\n />\n </div>\n </div>\n </div>\n <Calendar\n {...calendarRestProps}\n locale={locale}\n mode=\"single\"\n captionLayout=\"label\"\n startMonth={startMonth}\n endMonth={endMonth}\n disabled={calendarDisabled}\n month={month}\n onMonthChange={(nextMonth) => {\n const safeMonth = clampMonth(nextMonth, minDay, maxDay);\n setMonth(safeMonth);\n setDraftParts((current) => ({\n ...current,\n month: format(safeMonth, 'MM'),\n year: format(safeMonth, 'yyyy'),\n }));\n calendarOnMonthChange?.(safeMonth);\n }}\n selected={calendarSelected}\n onSelect={(next) => {\n if (!next) {\n commit(undefined);\n return;\n }\n if (!isWithinDayBounds(next, minDay, maxDay)) return;\n\n setMonth(next);\n setDraftParts(toParts(next));\n\n const nextDateTime = withTime(next, draftTime || DEFAULT_TIME, timeZone);\n if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;\n\n commit(nextDateTime);\n onBlur?.();\n }}\n />\n <div className=\"border-t p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Time</span>\n <Input\n type=\"time\"\n step={60}\n value={draftTime}\n disabled={disabled || !activeDate}\n className=\"h-7 w-[112px] appearance-none pr-2 [color-scheme:light] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-clear-button]:hidden [&::-webkit-inner-spin-button]:hidden\"\n onChange={(e) => {\n const nextTime = e.target.value;\n setDraftTime(nextTime);\n\n if (!activeDate || !TIME_PATTERN.test(nextTime)) return;\n\n const nextDateTime = withTime(activeDate, nextTime, timeZone);\n if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;\n\n commit(nextDateTime);\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n e.preventDefault();\n\n if (activeDate && TIME_PATTERN.test(draftTime)) {\n const nextDateTime = withTime(activeDate, draftTime, timeZone);\n if (isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) {\n commit(nextDateTime);\n }\n }\n\n onBlur?.();\n setOpen(false);\n }}\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n});\n\nDateTimePicker.displayName = 'DateTimePicker';\n"],"names":["latestDate","earliestDate","CalendarIcon","Calendar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateTimePicker.js","sources":["../lib/components/DateTimePicker/DateTimePicker.tsx"],"sourcesContent":["import { TZDate, tz } from '@date-fns/tz';\nimport {\n min as earliestDate,\n format,\n getDaysInMonth,\n isAfter,\n isBefore,\n isValid,\n type Locale,\n max as latestDate,\n parse,\n parseISO,\n startOfDay,\n startOfMonth,\n} from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { useBUTimezone } from '../../hooks/useBUTimezone';\nimport { useLocale } from '../../hooks/useLocale';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../Field';\n\ntype DateTimePickerValue = string | undefined;\ntype DateParts = { day: string; month: string; year: string };\n\nconst MANUAL_DATE = 'dd/MM/yyyy';\nconst DEFAULT_DISPLAY = 'P p';\nconst DEFAULT_TIME = '00:00';\nconst TIME_PATTERN = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\nconst objectWithHasOwn = Object as ObjectConstructor & { hasOwn(target: object, key: PropertyKey): boolean };\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\nconst hasValueProp = (props: object, key: string) => objectWithHasOwn.hasOwn(props, key);\nconst formatInTimeZone = (date: Date, pattern: string, timeZone: string, locale?: Locale) =>\n format(date, pattern, locale ? { in: tz(timeZone), locale } : { in: tz(timeZone) });\nconst parseDateTime = (value?: string) => {\n if (!value) return undefined;\n const next = parseISO(value);\n return isValid(next) ? next : undefined;\n};\nconst toParts = (date?: Date): DateParts =>\n date\n ? {\n day: format(date, 'dd'),\n month: format(date, 'MM'),\n year: format(date, 'yyyy'),\n }\n : emptyParts();\nconst toCalendarDate = (date: Date | undefined, timeZone: string): Date | undefined => {\n if (!date) return undefined;\n\n const year = Number(formatInTimeZone(date, 'yyyy', timeZone));\n const month = Number(formatInTimeZone(date, 'MM', timeZone));\n const day = Number(formatInTimeZone(date, 'dd', timeZone));\n\n return new Date(year, month - 1, day);\n};\nconst toDraftParts = (date: Date | undefined, timeZone: string) => toParts(toCalendarDate(date, timeZone));\nconst toTime = (date: Date | undefined, timeZone: string) => (date ? formatInTimeZone(date, 'HH:mm', timeZone) : '');\nconst toIso = (date?: Date) => (date ? date.toISOString() : undefined);\n\nconst parseManualDate = ({ day, month, year }: DateParts) => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, MANUAL_DATE, new Date());\n return isValid(next) && format(next, MANUAL_DATE) === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst previewManualDate = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n const day = parts.day ? Number(parts.day) : Number.NaN;\n\n if (!Number.isInteger(year) || year < 1 || !Number.isInteger(month) || month < 1 || month > 12) return undefined;\n if (!Number.isInteger(day) || day < 1) return undefined;\n\n const maxDay = getDaysInMonth(new Date(year, month - 1, 1));\n if (day > maxDay) return undefined;\n\n const next = new Date(year, month - 1, day);\n return isValid(next) ? next : undefined;\n};\n\nconst withTime = (date: Date, time: string, timeZone: string) => {\n const [hours, minutes] = TIME_PATTERN.test(time) ? time.split(':').map(Number) : [0, 0];\n const zonedDateTime = TZDate.tz(timeZone, date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, 0, 0);\n return new Date(zonedDateTime.getTime());\n};\n\nconst latest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? latestDate(values) : undefined;\n};\n\nconst earliest = (dates: Array<Date | undefined>) => {\n const values = dates.filter((value): value is Date => !!value);\n return values.length > 0 ? earliestDate(values) : undefined;\n};\n\nconst isWithinDayBounds = (date: Date, minDay?: Date, maxDay?: Date) =>\n (!minDay || !isBefore(startOfDay(date), minDay)) && (!maxDay || !isAfter(startOfDay(date), maxDay));\n\nconst isWithinDateTimeBounds = (date: Date, minDateTime?: Date, maxDateTime?: Date) =>\n (!minDateTime || !isBefore(date, minDateTime)) && (!maxDateTime || !isAfter(date, maxDateTime));\n\nconst coerceWithinDateTimeBounds = (\n date: Date | undefined,\n minDay: Date | undefined,\n maxDay: Date | undefined,\n minDateTime: Date | undefined,\n maxDateTime: Date | undefined,\n timeZone: string,\n) =>\n date &&\n isWithinDayBounds(toCalendarDate(date, timeZone) ?? date, minDay, maxDay) &&\n isWithinDateTimeBounds(date, minDateTime, maxDateTime)\n ? date\n : undefined;\n\nconst visibleMonthFromParts = (parts: DateParts, fallbackMonth: Date) => {\n const hasYear = parts.year.length === 4;\n const hasMonth = parts.month.length > 0;\n\n if (!hasYear && !hasMonth) return fallbackMonth;\n\n const year = hasYear ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = hasMonth ? Number(parts.month) : fallbackMonth.getMonth() + 1;\n\n if (!Number.isInteger(year) || year < 1 || year > 9999) return fallbackMonth;\n if (!Number.isInteger(month) || month < 1 || month > 12) return new Date(year, fallbackMonth.getMonth(), 1);\n\n return new Date(year, month - 1, 1);\n};\n\nconst clampMonth = (month: Date, minDay?: Date, maxDay?: Date) => {\n const monthStart = startOfMonth(month);\n const minMonth = minDay ? startOfMonth(minDay) : undefined;\n const maxMonth = maxDay ? startOfMonth(maxDay) : undefined;\n\n if (minMonth && minDay && isBefore(monthStart, minMonth)) return minDay;\n if (maxMonth && maxDay && isAfter(monthStart, maxMonth)) return maxDay;\n return month;\n};\n\nconst maxDayForParts = (parts: DateParts, fallbackMonth: Date) => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallbackMonth.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallbackMonth.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallbackMonth.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nconst mergeDisabledMatchers = (\n disabled: CalendarProps['disabled'],\n minDay?: Date,\n maxDay?: Date,\n): CalendarProps['disabled'] => {\n const matchers = disabled ? (Array.isArray(disabled) ? [...disabled] : [disabled]) : [];\n if (minDay) matchers.push({ before: minDay });\n if (maxDay) matchers.push({ after: maxDay });\n return matchers.length > 0 ? matchers : undefined;\n};\n\nexport interface DateTimePickerProps {\n name?: string;\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DateTimePickerValue;\n onValueChange?: (value: string | undefined) => void;\n onChange?: (value: string | undefined) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n onBlur?: () => void;\n disabled?: boolean;\n displayFormat?: string;\n minDate?: Date;\n maxDate?: Date;\n minDateTime?: string;\n maxDateTime?: string;\n}\n\nexport const DateTimePicker = forwardRef<HTMLInputElement, DateTimePickerProps>((rawProps, ref) => {\n const controlled = hasValueProp(rawProps, 'value');\n const openControlled = hasValueProp(rawProps, 'open');\n const {\n label,\n description,\n error,\n placeholder = 'Select date and time',\n value,\n onValueChange,\n onChange,\n open: openProp,\n onOpenChange,\n calendarProps,\n className,\n id,\n onBlur,\n disabled,\n displayFormat = DEFAULT_DISPLAY,\n minDate,\n maxDate,\n minDateTime,\n maxDateTime,\n ...props\n } = rawProps;\n\n const locale = useLocale();\n const timeZone = useBUTimezone() ?? 'UTC';\n const parsedValue = parseDateTime(value);\n const minDateTimeValue = parseDateTime(minDateTime);\n const maxDateTimeValue = parseDateTime(maxDateTime);\n const minDay = latest([minDate ? startOfDay(minDate) : undefined, toCalendarDate(minDateTimeValue, timeZone)]);\n const maxDay = earliest([maxDate ? startOfDay(maxDate) : undefined, toCalendarDate(maxDateTimeValue, timeZone)]);\n const {\n mode: _calendarMode,\n month: _calendarMonth,\n onMonthChange: calendarOnMonthChange,\n startMonth: calendarStartMonth,\n endMonth: calendarEndMonth,\n disabled: calendarDisabledProp,\n captionLayout: _calendarCaptionLayout,\n ...calendarRestProps\n } = calendarProps ?? {};\n\n const [localValue, setLocalValue] = useState<Date | undefined>(() =>\n coerceWithinDateTimeBounds(parsedValue, minDay, maxDay, minDateTimeValue, maxDateTimeValue, timeZone),\n );\n const [openState, setOpenState] = useState(false);\n const [month, setMonth] = useState<Date>(() =>\n clampMonth(toCalendarDate(parsedValue, timeZone) ?? minDay ?? maxDay ?? new Date(), minDay, maxDay),\n );\n const [draftParts, setDraftParts] = useState<DateParts>(() => toDraftParts(parsedValue, timeZone));\n const [draftTime, setDraftTime] = useState(() => toTime(parsedValue, timeZone));\n const lastInvalidTimeRef = useRef<number | null>(null);\n\n const rawSelected = controlled ? parsedValue : localValue;\n const selected = coerceWithinDateTimeBounds(\n rawSelected,\n minDay,\n maxDay,\n minDateTimeValue,\n maxDateTimeValue,\n timeZone,\n );\n const selectedCalendarDate = toCalendarDate(selected, timeZone);\n const rawSelectedTime = rawSelected?.getTime() ?? null;\n const minDayTime = minDay?.getTime() ?? null;\n const maxDayTime = maxDay?.getTime() ?? null;\n const selectedTime = selected?.getTime() ?? null;\n const selectedPreview = previewManualDate(draftParts, month);\n const calendarSelected =\n selectedPreview && isWithinDayBounds(selectedPreview, minDay, maxDay) ? selectedPreview : selectedCalendarDate;\n const activeDate = calendarSelected;\n const inputId = id ?? props.name ?? 'date-time';\n const startMonth = latest([minDay, calendarStartMonth]);\n const endMonth = earliest([maxDay, calendarEndMonth]);\n const calendarDisabled = mergeDisabledMatchers(calendarDisabledProp, minDay, maxDay);\n const isOpen = openControlled ? openProp : openState;\n const setOpen = openControlled ? (onOpenChange ?? (() => {})) : setOpenState;\n\n const syncDraftFromDate = (next?: Date) => {\n const nextCalendarDate = toCalendarDate(next, timeZone);\n setDraftParts(toDraftParts(next, timeZone));\n setDraftTime(toTime(next, timeZone));\n setMonth((currentMonth) => (nextCalendarDate ? nextCalendarDate : clampMonth(currentMonth, minDay, maxDay)));\n };\n\n useEffect(() => {\n if (!controlled && selectedTime === null) return;\n\n const next = selectedTime === null ? undefined : new Date(selectedTime);\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n const nextCalendarDate = toCalendarDate(next, timeZone);\n\n setDraftParts(toDraftParts(next, timeZone));\n setDraftTime(toTime(next, timeZone));\n setMonth((currentMonth) =>\n nextCalendarDate ? nextCalendarDate : clampMonth(currentMonth, nextMinDay, nextMaxDay),\n );\n }, [controlled, selectedTime, minDayTime, maxDayTime, timeZone]);\n\n useEffect(() => {\n if (rawSelectedTime === null || selectedTime !== null) {\n lastInvalidTimeRef.current = null;\n return;\n }\n if (lastInvalidTimeRef.current === rawSelectedTime) return;\n\n lastInvalidTimeRef.current = rawSelectedTime;\n\n if (!controlled) setLocalValue(undefined);\n setDraftParts(emptyParts());\n setDraftTime('');\n\n const nextMinDay = minDayTime === null ? undefined : new Date(minDayTime);\n const nextMaxDay = maxDayTime === null ? undefined : new Date(maxDayTime);\n setMonth((currentMonth) => clampMonth(currentMonth, nextMinDay, nextMaxDay));\n\n onValueChange?.(undefined);\n onChange?.(undefined);\n }, [controlled, rawSelectedTime, selectedTime, minDayTime, maxDayTime, onValueChange, onChange]);\n\n const emit = (next?: Date) => {\n const iso = toIso(next);\n onValueChange?.(iso);\n onChange?.(iso);\n };\n\n const commit = (next?: Date) => {\n if (!controlled) setLocalValue(next);\n syncDraftFromDate(next);\n emit(next);\n };\n\n const updateDraftDate = (nextParts: DateParts) => {\n setDraftParts(nextParts);\n\n const nextMonth = clampMonth(visibleMonthFromParts(nextParts, month), minDay, maxDay);\n if (nextMonth.getTime() !== month.getTime()) setMonth(nextMonth);\n\n if (!nextParts.day && !nextParts.month && !nextParts.year) {\n commit(undefined);\n return;\n }\n\n const parsedDate = parseManualDate(nextParts);\n if (!parsedDate || !isWithinDayBounds(parsedDate, minDay, maxDay)) return;\n\n const nextDateTime = withTime(parsedDate, draftTime || DEFAULT_TIME, timeZone);\n if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;\n\n commit(nextDateTime);\n };\n\n return (\n <Field data-disabled={disabled} className={className}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className=\"relative\">\n <Input\n ref={ref}\n id={inputId}\n value={selected ? formatInTimeZone(selected, displayFormat, timeZone, locale) : ''}\n disabled={disabled}\n readOnly\n aria-invalid={!!error}\n placeholder={placeholder}\n className=\"w-full pr-10\"\n onClick={() => !disabled && setOpen(true)}\n onBlur={() => onBlur?.()}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowDown') return;\n e.preventDefault();\n setOpen(true);\n }}\n {...props}\n />\n <div className=\"absolute inset-y-0 right-1 flex items-center\">\n <Popover open={isOpen} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Select date and time\"\n disabled={disabled}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <CalendarIcon />\n <span className=\"sr-only\">Select date and time</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center\">\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={draftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2) {\n const nextDay = Number(day);\n if (nextDay < 1 || nextDay > maxDayForParts(draftParts, month)) return;\n }\n updateDraftDate({ ...draftParts, day });\n }}\n />\n <Input\n value={draftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const monthValue = digits(e.target.value, 2);\n if (monthValue === '00') return;\n if (monthValue.length === 2) {\n const nextMonth = Number(monthValue);\n if (nextMonth < 1 || nextMonth > 12) return;\n }\n\n let day = draftParts.day;\n if (day.length === 2) {\n const cappedDay = Math.min(\n Number(day),\n maxDayForParts({ ...draftParts, month: monthValue }, month),\n );\n day = String(cappedDay).padStart(2, '0');\n }\n\n updateDraftDate({ ...draftParts, day, month: monthValue });\n }}\n />\n <Input\n value={draftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => updateDraftDate({ ...draftParts, year: digits(e.target.value, 4) })}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n e.preventDefault();\n updateDraftDate(draftParts);\n }}\n />\n </div>\n </div>\n </div>\n <Calendar\n {...calendarRestProps}\n locale={locale}\n mode=\"single\"\n captionLayout=\"label\"\n startMonth={startMonth}\n endMonth={endMonth}\n disabled={calendarDisabled}\n month={month}\n onMonthChange={(nextMonth) => {\n const safeMonth = clampMonth(nextMonth, minDay, maxDay);\n setMonth(safeMonth);\n setDraftParts((current) => ({\n ...current,\n month: format(safeMonth, 'MM'),\n year: format(safeMonth, 'yyyy'),\n }));\n calendarOnMonthChange?.(safeMonth);\n }}\n selected={calendarSelected}\n onSelect={(next) => {\n if (!next) {\n commit(undefined);\n return;\n }\n if (!isWithinDayBounds(next, minDay, maxDay)) return;\n\n setMonth(next);\n setDraftParts(toParts(next));\n\n const nextDateTime = withTime(next, draftTime || DEFAULT_TIME, timeZone);\n if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;\n\n commit(nextDateTime);\n onBlur?.();\n }}\n />\n <div className=\"border-t p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Time</span>\n <Input\n type=\"time\"\n step={60}\n value={draftTime}\n disabled={disabled || !activeDate}\n className=\"h-7 w-[112px] appearance-none pr-2 [color-scheme:light] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-clear-button]:hidden [&::-webkit-inner-spin-button]:hidden\"\n onChange={(e) => {\n const nextTime = e.target.value;\n setDraftTime(nextTime);\n\n if (!activeDate || !TIME_PATTERN.test(nextTime)) return;\n\n const nextDateTime = withTime(activeDate, nextTime, timeZone);\n if (!isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) return;\n\n commit(nextDateTime);\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n e.preventDefault();\n\n if (activeDate && TIME_PATTERN.test(draftTime)) {\n const nextDateTime = withTime(activeDate, draftTime, timeZone);\n if (isWithinDateTimeBounds(nextDateTime, minDateTimeValue, maxDateTimeValue)) {\n commit(nextDateTime);\n }\n }\n\n onBlur?.();\n setOpen(false);\n }}\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n});\n\nDateTimePicker.displayName = 'DateTimePicker';\n"],"names":["latestDate","earliestDate","CalendarIcon","Calendar"],"mappings":"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"}
|