@bigbinary/neeto-atoms 1.0.145 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DatePicker-DznpJnhm.js → DatePicker-BC9AOZJ2.js} +696 -131
- package/dist/DatePicker-BC9AOZJ2.js.map +1 -0
- package/dist/{TimePicker-BA7JhrYd.js → TimePicker-CJ8K2zea.js} +192 -17
- package/dist/TimePicker-CJ8K2zea.js.map +1 -0
- package/dist/{TranslationProvider-Dd0ITHC0.js → TranslationProvider-BJjfFEgX.js} +12 -1
- package/dist/{TranslationProvider-Dd0ITHC0.js.map → TranslationProvider-BJjfFEgX.js.map} +1 -1
- package/dist/cjs/{DatePicker-CMcp7TGb.js → DatePicker-aGLz-3Bz.js} +707 -141
- package/dist/cjs/DatePicker-aGLz-3Bz.js.map +1 -0
- package/dist/cjs/{TimePicker-CVGXEgk5.js → TimePicker-BhOW7vbV.js} +217 -41
- package/dist/cjs/TimePicker-BhOW7vbV.js.map +1 -0
- package/dist/cjs/{TranslationProvider-DOeyGtbV.js → TranslationProvider-C1JDwKEN.js} +12 -1
- package/dist/cjs/{TranslationProvider-DOeyGtbV.js.map → TranslationProvider-C1JDwKEN.js.map} +1 -1
- package/dist/cjs/components/DatePicker.js +7 -6
- package/dist/cjs/components/DatePicker.js.map +1 -1
- package/dist/cjs/components/TimePicker.js +7 -7
- package/dist/cjs/components/TranslationProvider.js +1 -1
- package/dist/cjs/components/index.js +7 -7
- package/dist/cjs/index.js +8 -8
- package/dist/cjs/{TimePickerPanel-DvVRLqeM.js → utils-S4yTubWZ.js} +25 -197
- package/dist/cjs/utils-S4yTubWZ.js.map +1 -0
- package/dist/components/DatePicker/DatePickerFooter.d.ts +1 -0
- package/dist/components/DatePicker/RangeCalendar.d.ts +2 -1
- package/dist/components/DatePicker/SegmentedTimeInput.d.ts +17 -0
- package/dist/components/DatePicker/TimeSection.d.ts +22 -0
- package/dist/components/DatePicker/constants.d.ts +1 -1
- package/dist/components/DatePicker/segmentedTime.d.ts +58 -0
- package/dist/components/DatePicker/types.d.ts +33 -4
- package/dist/components/DatePicker/utils.d.ts +3 -0
- package/dist/components/DatePicker.js +7 -6
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/TimePicker.js +6 -6
- package/dist/components/TranslationProvider.js +1 -1
- package/dist/components/index.js +6 -6
- package/dist/index.js +8 -8
- package/dist/translations/index.d.ts +11 -0
- package/dist/utils/inputMask.d.ts +2 -1
- package/dist/{TimePickerPanel-n-Dz1p5N.js → utils-Ca3DmOrC.js} +22 -197
- package/dist/utils-Ca3DmOrC.js.map +1 -0
- package/package.json +1 -1
- package/dist/DatePicker-DznpJnhm.js.map +0 -1
- package/dist/TimePicker-BA7JhrYd.js.map +0 -1
- package/dist/TimePickerPanel-n-Dz1p5N.js.map +0 -1
- package/dist/cjs/DatePicker-CMcp7TGb.js.map +0 -1
- package/dist/cjs/TimePicker-CVGXEgk5.js.map +0 -1
- package/dist/cjs/TimePickerPanel-DvVRLqeM.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker-BC9AOZJ2.js","sources":["../node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/lucide-react/dist/esm/icons/globe.js","../src/components/DatePicker/constants.ts","../src/components/DatePicker/utils.ts","../src/components/DatePicker/TimezoneSelect.tsx","../src/components/DatePicker/DatePickerFooter.tsx","../src/components/DatePicker/DatePickerField.tsx","../src/components/DatePicker/DatePickerTrigger.tsx","../src/components/DatePicker/segmentedTime.ts","../src/components/DatePicker/SegmentedTimeInput.tsx","../src/components/DatePicker/TimeSection.tsx","../src/components/DatePicker/MonthPicker.tsx","../src/components/DatePicker/RangeCalendar.tsx","../src/components/DatePicker/useRangePicker.ts","../src/components/DatePicker/YearPicker.tsx","../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","import type { TimeValue } from \"../TimePicker/types\";\n\nexport const DEFAULT_DATE_FORMAT = \"dd/MM/yyyy\";\nexport const DEFAULT_TIME_FORMAT = \"hh:mm A\";\n\n// Years navigable before/after today in the calendar dropdown when no min/max date is set.\nexport const CALENDAR_NAVIGATION_YEAR_RANGE = 100;\n\nexport const INITIAL_TIME_VALUE: TimeValue = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n};\n\nexport const SIZE_CONFIG = {\n small: {\n trigger: \"h-8 md:h-7\",\n input: \"text-base md:text-xs\",\n icon: \"size-3.5\",\n },\n medium: {\n trigger: \"h-8\",\n input: \"text-base md:text-sm\",\n icon: \"size-4\",\n },\n large: {\n trigger: \"h-10\",\n input: \"text-base md:text-sm\",\n icon: \"size-5\",\n },\n} as const;\n","import pureDayjs from \"dayjs\";\nimport type { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport { dayjs } from \"@bigbinary/neeto-commons-frontend/utils\";\n\nimport type { TimeValue } from \"../TimePicker/types\";\n\npureDayjs.extend(customParseFormat);\n\n// `new Date(\"YYYY-MM-DD\")` is UTC midnight, which lands on the previous day west of UTC.\nconst DATE_ONLY_FORMAT = \"YYYY-MM-DD\";\n\nconst parseDateOnly = (value: string): Date | null => {\n const parsed = pureDayjs(value, DATE_ONLY_FORMAT, true);\n\n return parsed.isValid() ? parsed.toDate() : null;\n};\n\n/**\n * Reverse timezone conversion: extract date/time values from a timezone-aware\n * dayjs and create a browser-local Date. This undoes applyTimezone so that\n * Calendar and input display the correct date after a controlled round-trip.\n */\nexport const toBrowserLocalDate = (date: Date): Date => {\n const d = dayjs(date);\n\n return new Date(\n d.year(),\n d.month(),\n d.date(),\n d.hour(),\n d.minute(),\n d.second()\n );\n};\n\nexport const toNativeDate = (value: unknown): Date | null => {\n if (value == null) return null;\n if (value instanceof Date) return value;\n\n if (typeof (value as { toDate?: () => Date }).toDate === \"function\") {\n return toBrowserLocalDate((value as { toDate: () => Date }).toDate());\n }\n\n if (typeof value === \"string\") {\n const dateOnly = parseDateOnly(value);\n if (dateOnly) return dateOnly;\n\n const parsed = new Date(value);\n if (!isNaN(parsed.getTime())) return toBrowserLocalDate(parsed);\n }\n\n return null;\n};\n\nexport const coerceDateValue = (\n value: unknown,\n type: \"date\" | \"range\"\n): Date | [Date | null, Date | null] | null => {\n if (value == null) return null;\n if (type === \"range\" && Array.isArray(value)) {\n return [toNativeDate(value[0]), toNativeDate(value[1])];\n }\n\n return toNativeDate(value);\n};\n\nexport const getInitialCalendarMonth = (\n value: unknown,\n defaultValue: unknown,\n type: \"date\" | \"range\"\n): Date => {\n const initial = coerceDateValue(value ?? defaultValue, type);\n if (initial instanceof Date) return initial;\n if (Array.isArray(initial) && initial[0] instanceof Date) return initial[0];\n\n return new Date();\n};\n\nconst normalizeToDayjsFormat = (fmt: string): string =>\n fmt\n .replace(/\\byyyy\\b/g, \"YYYY\")\n .replace(/\\byy\\b/g, \"YY\")\n .replace(/\\bdd\\b/g, \"DD\")\n .replace(/\\bd\\b/g, \"D\");\n\nconst normalizeToDateFnsFormat = (fmt: string): string =>\n fmt\n .replace(/YYYY/g, \"yyyy\")\n .replace(/YY/g, \"yy\")\n .replace(/DD/g, \"dd\")\n .replace(/\\bD\\b/g, \"d\");\n\n// Rounds to the nearest minute step, staying within the hour as the time\n// field does. With step 5: 9:27 → 9:25, 9:28 → 9:30, 9:58 → 9:55.\nexport const roundToMinuteStep = (date: Date, step: number): Date => {\n const rounded = new Date(date);\n const minutes = Math.min(\n 60 - step,\n Math.round(date.getMinutes() / step) * step\n );\n rounded.setMinutes(minutes, 0, 0);\n\n return rounded;\n};\n\n// e.g. \"India Standard Time (UTC+5:30)\", for the time zone the picker works in.\nexport const getTimezoneLabel = (timezone?: string): string => {\n const zone =\n timezone === \"utc\"\n ? \"UTC\"\n : ((dayjs() as unknown as { $x?: { $timezone?: string } }).$x\n ?.$timezone ?? Intl.DateTimeFormat().resolvedOptions().timeZone);\n\n try {\n const zoneName = (timeZoneName: \"long\" | \"longOffset\") =>\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone, timeZoneName })\n .formatToParts(new Date())\n .find(part => part.type === \"timeZoneName\")?.value;\n\n const name = zoneName(\"long\") ?? zone;\n const offset = (zoneName(\"longOffset\") ?? \"GMT\")\n .replace(\"GMT\", \"UTC\")\n .replace(/([+-])0?(\\d+):00$/, \"$1$2\")\n .replace(/([+-])0(\\d)/, \"$1$2\");\n\n return `${name} (${offset === \"UTC\" ? \"UTC+0\" : offset})`;\n } catch {\n return zone;\n }\n};\n\n// Rounds up to the next minute step in local time, e.g. with step 5:\n// 9:02 → 9:05, 9:58 → 10:00. setMinutes carries past the hour.\nexport const roundUpToMinuteStep = (date: Date, step: number): Date => {\n const rounded = new Date(date);\n const hasSeconds = date.getSeconds() > 0 || date.getMilliseconds() > 0;\n const minutes = date.getMinutes() + (hasSeconds ? 1 : 0);\n rounded.setMinutes(Math.ceil(minutes / step) * step, 0, 0);\n\n return rounded;\n};\n\n/**\n * Format a date for display using browser-local time.\n * Calendar and input always show browser-local dates.\n */\nexport const formatDate = (date: Date | null, formatStr: string): string => {\n if (!date) return \"\";\n\n try {\n return pureDayjs(date).format(normalizeToDayjsFormat(formatStr));\n } catch {\n return \"\";\n }\n};\n\n/**\n * Parse a date string using browser-local pureDayjs (not timezone-aware).\n * The user types in browser-local time; timezone conversion happens\n * later in commitValue via applyTimezone.\n */\nexport const parseDate = (str: string, formatStr: string): Date | null => {\n if (!str) return null;\n\n const dayjsFmt = normalizeToDayjsFormat(formatStr);\n const parsed = pureDayjs(str, dayjsFmt);\n if (parsed.isValid()) return parsed.toDate();\n\n const fallbackFormats = [\n \"DD/MM/YYYY\",\n \"MM/DD/YYYY\",\n DATE_ONLY_FORMAT,\n \"DD-MM-YYYY\",\n \"DD/MM/YYYY HH:mm:ss\",\n \"DD/MM/YYYY HH:mm\",\n ];\n\n for (const fmt of fallbackFormats) {\n if (fmt === dayjsFmt) continue;\n\n const attempt = pureDayjs(str, fmt);\n if (attempt.isValid()) return attempt.toDate();\n }\n\n return null;\n};\n\nexport const applyTimeToDate = (date: Date, time: TimeValue): Date => {\n const result = new Date(date);\n result.setHours(time.hours, time.minutes, time.seconds ?? 0, 0);\n\n return result;\n};\n\n/**\n * Reinterpret a native Date's browser-local time values in the user's configured timezone.\n * Formats in browser-local time (pureDayjs), then reparses through timezone-aware dayjs.\n * Matches neetoUI's getTimezoneAppliedDateTime behavior.\n */\nexport const applyTimezone = (date: Date): Date => {\n const dateStr = pureDayjs(date).format(\"YYYY-MM-DD HH:mm:ss\");\n\n return dayjs(dateStr).toDate();\n};\n\nexport const toUserTzDayjs = (date: Date): Dayjs =>\n dayjs(pureDayjs(date).format(\"YYYY-MM-DD HH:mm:ss\"));\n\nexport const toDayjs = (date: Date): Dayjs => dayjs(date);\n\nexport const getDisplayFormat = (\n dateFormat: string,\n timeFormat: string,\n showTime: boolean\n): string => {\n const fmt = showTime ? `${dateFormat} ${timeFormat}` : dateFormat;\n\n return normalizeToDateFnsFormat(fmt);\n};\n\nexport const getDatePlaceholder = (\n dateFormat: string,\n timeFormat: string,\n showTime: boolean,\n type: \"date\" | \"range\"\n): string => {\n const single = showTime\n ? `${dateFormat.toUpperCase()} ${timeFormat}`\n : dateFormat.toUpperCase();\n\n return type === \"range\" ? `${single} - ${single}` : single;\n};\n\nexport const isDatePartComplete = (\n part: string,\n maskEnabled: boolean,\n singleDateLen: number\n): boolean => (maskEnabled ? part.length >= singleDateLen : part.length > 0);\n\nexport const parseRangeText = (\n text: string,\n displayFormat: string,\n maskEnabled: boolean,\n singleDateLen: number\n): [Date, Date] | null => {\n const parts = text.split(\" - \");\n if (parts.length !== 2) return null;\n\n if (\n !isDatePartComplete(parts[0], maskEnabled, singleDateLen) ||\n !isDatePartComplete(parts[1], maskEnabled, singleDateLen)\n )\n return null;\n\n const from = parseDate(parts[0], displayFormat);\n const to = parseDate(parts[1], displayFormat);\n\n return from && to ? [from, to] : null;\n};\n\nexport const startOfWeek = (date: Date, weekStartsOn = 0): Date => {\n const d = new Date(date);\n const diff = (d.getDay() - weekStartsOn + 7) % 7;\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n\n return d;\n};\n\nexport const weekDaysFrom = (start: Date): Date[] =>\n Array.from({ length: 7 }, (_, i) => {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n\n return d;\n });\n\nexport const isMonthDisabled = (\n monthDate: Date,\n minDate?: Date,\n maxDate?: Date\n): boolean => {\n const monthStart = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1);\n const monthEnd = new Date(\n monthDate.getFullYear(),\n monthDate.getMonth() + 1,\n 0,\n 23,\n 59,\n 59,\n 999\n );\n if (maxDate && monthStart > maxDate) return true;\n if (minDate && monthEnd < minDate) return true;\n\n return false;\n};\n\nexport const isYearDisabled = (\n yearDate: Date,\n minDate?: Date,\n maxDate?: Date\n): boolean => {\n const yearStart = new Date(yearDate.getFullYear(), 0, 1);\n const yearEnd = new Date(yearDate.getFullYear(), 11, 31, 23, 59, 59, 999);\n if (maxDate && yearStart > maxDate) return true;\n if (minDate && yearEnd < minDate) return true;\n\n return false;\n};\n\nexport const buildMonth = (year: number, month: number): Date =>\n new Date(year, month, 1);\n\nexport const isSameMonth = (a: Date | null, b: Date): boolean =>\n !!a && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n\nexport const isSameDay = (a: Date | null, b: Date | null): boolean =>\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nexport const orderRange = (\n from: Date | null,\n to: Date | null\n): [Date | null, Date | null] => {\n if (from && to && from.getTime() > to.getTime()) return [to, from];\n\n return [from, to];\n};\n\nexport const parseGridcellDay = (target: EventTarget | null): Date | null => {\n const el = target as HTMLElement | null;\n const cell = el?.closest('[role=\"gridcell\"][data-day]');\n const dayAttr = cell?.getAttribute(\"data-day\");\n if (!dayAttr) return null;\n\n const dateOnly = parseDateOnly(dayAttr);\n if (dateOnly) return dateOnly;\n\n const parsed = new Date(dayAttr);\n\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n};\n\nexport const computeRangePreview = ({\n pendingRange,\n committed,\n hoveredDate,\n rangeStep,\n}: {\n pendingRange: [Date | null, Date | null] | null;\n committed: [Date | null, Date | null] | null;\n hoveredDate: Date | null;\n rangeStep: \"from\" | \"to\";\n}): { from: Date | null; to: Date | null } => {\n let from = pendingRange ? pendingRange[0] : (committed?.[0] ?? null);\n let to = pendingRange ? pendingRange[1] : (committed?.[1] ?? null);\n\n if (hoveredDate) {\n if (rangeStep === \"from\" && !pendingRange?.[0]) {\n from = hoveredDate;\n if (to && hoveredDate.getTime() > to.getTime()) to = null;\n } else if (\n rangeStep === \"to\" &&\n !pendingRange?.[1] &&\n !isSameDay(from, hoveredDate)\n ) {\n to = hoveredDate;\n if (from && hoveredDate.getTime() < from.getTime()) from = null;\n }\n }\n\n [from, to] = orderRange(from, to);\n\n return { from, to };\n};\n\nexport const decadeStartFor = (year: number): number =>\n Math.floor(year / 10) * 10;\n","import React from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\ninterface TimezoneSelectProps {\n value?: string;\n onChange: (tz: string | undefined) => void;\n className?: string;\n}\n\nconst TIMEZONE_OPTIONS = [\n { label: \"Local\", value: \"\" },\n { label: \"UTC\", value: \"utc\" },\n] as const;\n\nconst TimezoneSelect: React.FC<TimezoneSelectProps> = ({\n value,\n onChange,\n className,\n}) => (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", className)}>\n <span className=\"text-muted-foreground text-xs\">Timezone</span>\n <select\n data-testid=\"timezone-select\"\n value={value ?? \"\"}\n onChange={e => onChange(e.target.value || undefined)}\n className={cn(\n \"rounded-md border border-input bg-background px-2 py-0.5 text-xs\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\"\n )}\n aria-label=\"Select timezone\"\n >\n {TIMEZONE_OPTIONS.map(opt => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n);\n\nTimezoneSelect.displayName = \"TimezoneSelect\";\n\nexport { TimezoneSelect };\n","import React from \"react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { TimezoneSelect } from \"./TimezoneSelect\";\n\ninterface DatePickerFooterProps {\n showTime?: boolean;\n needConfirm?: boolean;\n timezone?: string;\n onTimezoneChange?: (tz: string | undefined) => void;\n nowDisabled?: boolean;\n showNow?: boolean;\n onNow: () => void;\n onOk: () => void;\n okLabel?: string;\n className?: string;\n}\n\nconst DatePickerFooter: React.FC<DatePickerFooterProps> = ({\n showTime,\n needConfirm,\n timezone,\n onTimezoneChange,\n nowDisabled,\n showNow = true,\n onNow,\n onOk,\n okLabel = \"OK\",\n className,\n}) => {\n const showOkButton = showTime || needConfirm;\n\n return (\n <div\n className={cn(\n \"flex items-center border-t border-border px-3 py-2\",\n className\n )}\n >\n {showNow && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={nowDisabled}\n onClick={onNow}\n className=\"text-xs\"\n >\n Now\n </Button>\n )}\n <div className=\"flex-1\" />\n {onTimezoneChange && (\n <TimezoneSelect\n value={timezone}\n onChange={onTimezoneChange}\n className=\"me-2\"\n />\n )}\n {showOkButton && (\n <Button size=\"sm\" onClick={onOk} className=\"text-xs\">\n {okLabel}\n </Button>\n )}\n </div>\n );\n};\n\nDatePickerFooter.displayName = \"DatePickerFooter\";\n\nexport { DatePickerFooter };\n","import React, { forwardRef } from \"react\";\n\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\ninterface DatePickerFieldProps {\n disabled: boolean;\n error: React.ReactNode | undefined;\n className?: string;\n label?: React.ReactNode;\n required?: boolean;\n helpText?: React.ReactNode;\n labelProps?: Record<string, unknown>;\n errorId: string;\n helpTextId: string;\n errorTestId?: string;\n children: React.ReactNode;\n}\n\nexport const DatePickerField = forwardRef<HTMLDivElement, DatePickerFieldProps>(\n (\n {\n disabled,\n error,\n className,\n label,\n required,\n helpText,\n labelProps,\n errorId,\n helpTextId,\n errorTestId,\n children,\n },\n ref\n ) => (\n <Field\n ref={ref}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {label && (\n <FieldLabel\n {...(labelProps as React.ComponentProps<typeof FieldLabel>)}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n <FieldContent>\n {children}\n {!!error && (\n <FieldError id={errorId} data-testid={errorTestId}>\n {error}\n </FieldError>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n )\n);\n\nDatePickerField.displayName = \"DatePickerField\";\n","import React, { forwardRef } from \"react\";\n\nimport { CalendarIcon, X } from \"lucide-react\";\n\nimport { PopoverAnchor } from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\ninterface DatePickerTriggerProps {\n containerRef: React.RefObject<HTMLDivElement | null>;\n inputRef: React.RefObject<HTMLInputElement | null>;\n disabled: boolean;\n error: React.ReactNode | undefined;\n hasField: boolean;\n className?: string;\n triggerSizeClass: string;\n inputSizeClass: string;\n iconSizeClass: string;\n label?: React.ReactNode;\n ariaDescribedBy?: string;\n inputTestId?: string;\n placeholder: string;\n inputText: string;\n allowClear: boolean;\n timezone?: string;\n onInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onInputKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onInputFocus: () => void;\n onInputBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n onClear: (e: React.MouseEvent) => void;\n}\n\nexport const DatePickerTrigger = forwardRef<\n HTMLDivElement,\n DatePickerTriggerProps\n>(\n (\n {\n containerRef,\n inputRef,\n disabled,\n error,\n hasField,\n className,\n triggerSizeClass,\n inputSizeClass,\n iconSizeClass,\n label,\n ariaDescribedBy,\n inputTestId,\n placeholder,\n inputText,\n allowClear,\n timezone,\n onInputChange,\n onInputKeyDown,\n onInputFocus,\n onInputBlur,\n onClear,\n },\n _ref\n ) => (\n <PopoverAnchor asChild>\n <div\n ref={containerRef}\n className={cn(\n \"relative flex w-full cursor-text items-center gap-2 rounded-md border border-input bg-transparent pe-8 ps-3\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n triggerSizeClass,\n !hasField && className\n )}\n onClick={() => {\n if (disabled) return;\n\n inputRef.current?.focus();\n }}\n >\n <CalendarIcon\n className={cn(\"shrink-0 text-muted-foreground\", iconSizeClass)}\n />\n <input\n ref={inputRef}\n type=\"text\"\n disabled={disabled}\n aria-label={(label as string) || \"Pick a date\"}\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n data-testid={inputTestId}\n placeholder={placeholder}\n value={inputText}\n onChange={onInputChange}\n onKeyDown={onInputKeyDown}\n onFocus={onInputFocus}\n onBlur={onInputBlur}\n className={cn(\n \"min-w-0 flex-1 bg-transparent outline-none placeholder:text-placeholder\",\n \"disabled:cursor-not-allowed\",\n inputSizeClass\n )}\n />\n {timezone && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {timezone.toUpperCase()}\n </span>\n )}\n {allowClear && (\n <button\n type=\"button\"\n onPointerDown={e => e.preventDefault()}\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 end-2 flex items-center text-muted-foreground hover:text-foreground focus:outline-none\",\n !(inputText && !disabled) && \"invisible\"\n )}\n aria-label=\"Clear date\"\n tabIndex={-1}\n >\n <X className={iconSizeClass} data-testid=\"date-time-clear-icon\" />\n </button>\n )}\n </div>\n </PopoverAnchor>\n )\n);\n\nDatePickerTrigger.displayName = \"DatePickerTrigger\";\n","import type { TimeValue } from \"../TimePicker/types\";\nimport { padNumber, to12Hour, to24Hour } from \"../TimePicker/utils\";\n/**\n * State for the segmented time field: one input that reads \"1:35 PM\" but is\n * typed in three parts. Every function here is pure and returns a new state.\n *\n * `step` is the minute increment (e.g. 5): typed and loaded minutes snap to\n * it, and the arrow keys move by it. 1, the default, leaves minutes as typed.\n *\n * - `text`: what has been typed into the part so far.\n * - `done`: the part is complete; typing into it again starts it over.\n * - `auto`: the field filled the value in itself (e.g. \"6\" → \"05\"), so one\n * Backspace removes it whole.\n */\nexport interface TimeSegment {\n text: string;\n done: boolean;\n auto: boolean;\n}\n\nexport type SegmentKey = \"hour\" | \"minute\" | \"period\";\n\nexport type SegmentIndex = 0 | 1 | 2;\n\nexport interface SegmentedTime {\n hour: TimeSegment;\n minute: TimeSegment;\n period: TimeSegment;\n active: SegmentIndex;\n}\n\nexport type SegmentedTimeError =\n | \"timeRequired\"\n | \"hourRequired\"\n | \"minuteRequired\"\n | \"periodRequired\";\n\nexport const SEGMENT_KEYS: SegmentKey[] = [\"hour\", \"minute\", \"period\"];\n\nconst EMPTY_SEGMENT: TimeSegment = { text: \"\", done: false, auto: false };\n\nconst segment = (text: string, done: boolean, auto = false): TimeSegment => ({\n text,\n done,\n auto,\n});\n\nconst clampIndex = (index: number): SegmentIndex =>\n Math.max(0, Math.min(2, index)) as SegmentIndex;\n\nconst withSegment = (\n state: SegmentedTime,\n key: SegmentKey,\n value: TimeSegment\n): SegmentedTime => ({ ...state, [key]: value });\n\n/**\n * Rounds minutes to the nearest step, staying within the hour. With step 5:\n * 27 → \"25\", 28 → \"30\", 58 → \"55\". With step 1 they are only padded.\n */\nexport const snapMinute = (minutes: number | string, step = 1): string =>\n padNumber(Math.min(60 - step, Math.round(Number(minutes) / step) * step));\n\nexport const emptySegmentedTime = (): SegmentedTime => ({\n hour: EMPTY_SEGMENT,\n minute: EMPTY_SEGMENT,\n period: EMPTY_SEGMENT,\n active: 0,\n});\n\nexport const segmentedTimeFromValue = (\n value: TimeValue,\n step = 1\n): SegmentedTime => {\n const { hour12, period } = to12Hour(value.hours);\n\n return {\n hour: segment(String(hour12), true),\n minute: segment(snapMinute(value.minutes, step), true),\n period: segment(period, true),\n active: 0,\n };\n};\n\nexport const isSegmentedTimeEmpty = (state: SegmentedTime): boolean =>\n SEGMENT_KEYS.every(key => state[key].text === \"\");\n\nexport const getSegmentedTimeError = (\n state: SegmentedTime\n): SegmentedTimeError | null => {\n if (isSegmentedTimeEmpty(state)) return \"timeRequired\";\n\n if (!state.hour.text) return \"hourRequired\";\n\n if (!state.minute.text) return \"minuteRequired\";\n\n if (!state.period.text) return \"periodRequired\";\n\n return null;\n};\n\n/** The time as a value, or null while the field is incomplete. */\nexport const segmentedTimeToValue = (\n state: SegmentedTime\n): TimeValue | null => {\n if (getSegmentedTimeError(state)) return null;\n\n return {\n hours: to24Hour(Number(state.hour.text), state.period.text as \"AM\" | \"PM\"),\n minutes: Number(state.minute.text),\n seconds: 0,\n };\n};\n\n/** Leaving a half-typed part keeps it: hour \"1\" stays 1, minute \"3\" becomes \"03\" (or \"05\" with step 5). */\nconst finishSegment = (\n state: SegmentedTime,\n key: SegmentKey,\n step: number\n): SegmentedTime => {\n const { text } = state[key];\n if (!text) return state;\n\n if (key === \"hour\" && text === \"0\") {\n return withSegment(state, \"hour\", EMPTY_SEGMENT);\n }\n\n if (key === \"minute\" && text.length === 1) {\n return withSegment(\n state,\n \"minute\",\n segment(snapMinute(text, step), true, true)\n );\n }\n\n return withSegment(state, key, { ...state[key], done: true });\n};\n\nexport const finishActiveSegment = (\n state: SegmentedTime,\n step = 1\n): SegmentedTime => finishSegment(state, SEGMENT_KEYS[state.active], step);\n\nexport const focusSegment = (\n state: SegmentedTime,\n index: number,\n step = 1\n): SegmentedTime => {\n const next = clampIndex(index);\n const finished =\n next > state.active ? finishActiveSegment(state, step) : state;\n\n return { ...finished, active: next };\n};\n\n/** Clicking empty space in the field lands on the first empty part. */\nexport const focusFirstEmptySegment = (state: SegmentedTime): SegmentedTime => {\n const index = SEGMENT_KEYS.findIndex(key => !state[key].text);\n\n return { ...state, active: index === -1 ? 2 : (index as SegmentIndex) };\n};\n\nexport const nextSegment = (state: SegmentedTime, step = 1): SegmentedTime =>\n state[SEGMENT_KEYS[state.active]].text\n ? focusSegment(state, state.active + 1, step)\n : state;\n\nexport const previousSegment = (state: SegmentedTime): SegmentedTime =>\n focusSegment(state, state.active - 1);\n\n/**\n * Auto-advance rule: move on as soon as the next key could not extend the\n * current part. \"1\" waits because 10–12 are still possible; \"3\" does not.\n */\nexport const typeDigit = (\n state: SegmentedTime,\n digit: string,\n step = 1\n): SegmentedTime => {\n const advance = (next: SegmentedTime, index: number) =>\n focusSegment(next, index, step);\n const key = SEGMENT_KEYS[state.active];\n if (key === \"period\") return state;\n\n const current = state[key];\n const text = current.done ? \"\" : current.text;\n\n if (key === \"hour\") {\n if (text === \"\") {\n if (digit === \"0\" || digit === \"1\") {\n return withSegment(state, \"hour\", segment(digit, false));\n }\n\n return advance(withSegment(state, \"hour\", segment(digit, true)), 1);\n }\n\n if (text === \"1\") {\n if (\"012\".includes(digit)) {\n return advance(\n withSegment(state, \"hour\", segment(`1${digit}`, true)),\n 1\n );\n }\n\n // \"13\" is not an hour: the 1 stands and this digit starts the minutes.\n const moved = advance(withSegment(state, \"hour\", segment(\"1\", true)), 1);\n\n return typeDigit(moved, digit, step);\n }\n\n // text === \"0\"\n if (digit === \"0\") return state;\n\n return advance(withSegment(state, \"hour\", segment(digit, true)), 1);\n }\n\n if (text === \"\") {\n if (digit >= \"6\") {\n return advance(\n withSegment(\n state,\n \"minute\",\n segment(snapMinute(digit, step), true, true)\n ),\n 2\n );\n }\n\n return withSegment(state, \"minute\", segment(digit, false));\n }\n\n return advance(\n withSegment(state, \"minute\", segment(snapMinute(text + digit, step), true)),\n 2\n );\n};\n\nexport const typePeriod = (\n state: SegmentedTime,\n letter: \"a\" | \"p\",\n step = 1\n): SegmentedTime =>\n withSegment(\n focusSegment(state, 2, step),\n \"period\",\n segment(letter === \"a\" ? \"AM\" : \"PM\", true)\n );\n\nexport const togglePeriod = (state: SegmentedTime): SegmentedTime =>\n withSegment(\n state,\n \"period\",\n segment(state.period.text === \"AM\" ? \"PM\" : \"AM\", true)\n );\n\n/** Hour ±1 (wrapping 12 → 1), minutes ± one step on its grid, AM/PM flips. */\nexport const stepSegment = (\n state: SegmentedTime,\n direction: 1 | -1,\n step = 1\n): SegmentedTime => {\n const key = SEGMENT_KEYS[state.active];\n\n if (key === \"hour\") {\n const hour = Number(state.hour.text) || (direction > 0 ? 0 : 1);\n const next = ((hour - 1 + direction + 12) % 12) + 1;\n\n return withSegment(state, \"hour\", segment(String(next), true));\n }\n\n if (key === \"minute\") {\n const minute =\n state.minute.text === \"\"\n ? direction > 0\n ? -step\n : 0\n : Number(state.minute.text);\n const stepped =\n direction > 0\n ? Math.floor(minute / step) * step + step\n : Math.ceil(minute / step) * step - step;\n\n return withSegment(\n state,\n \"minute\",\n segment(padNumber((stepped + 60) % 60), true)\n );\n }\n\n return togglePeriod(state);\n};\n\n/** Deletes right to left across parts, like Backspace in one text input. */\nexport const backspace = (state: SegmentedTime): SegmentedTime => {\n const moveBack =\n state[SEGMENT_KEYS[state.active]].text === \"\" && state.active > 0;\n const active = moveBack ? clampIndex(state.active - 1) : state.active;\n const key = SEGMENT_KEYS[active];\n const current = state[key];\n\n const text =\n key === \"period\" || current.auto ? \"\" : current.text.slice(0, -1);\n\n return { ...withSegment(state, key, segment(text, false)), active };\n};\n\n/** Accepts \"1:35 pm\", \"1:35PM\", \"13:35\" and \"1335\"; null when it doesn't parse. */\nexport const parsePastedTime = (text: string, step = 1): TimeValue | null => {\n const match = text\n .trim()\n .toLowerCase()\n .match(/^(\\d{1,2}):?(\\d{2})?\\s*([ap])?\\.?m?\\.?$/);\n if (!match) return null;\n\n let hours = Number(match[1]);\n const minutes = Number(match[2] ?? 0);\n const period = match[3];\n if (minutes > 59) return null;\n\n if (period) {\n if (hours < 1 || hours > 12) return null;\n\n hours = (hours % 12) + (period === \"p\" ? 12 : 0);\n } else if (hours > 23) {\n return null;\n }\n\n return { hours, minutes: Number(snapMinute(minutes, step)), seconds: 0 };\n};\n","import React, { useEffect, useRef, useState } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport type { TimeValue } from \"../TimePicker/types\";\nimport { timeValueEquals } from \"../TimePicker/utils\";\nimport {\n SEGMENT_KEYS,\n backspace,\n emptySegmentedTime,\n finishActiveSegment,\n focusFirstEmptySegment,\n focusSegment,\n getSegmentedTimeError,\n nextSegment,\n parsePastedTime,\n previousSegment,\n segmentedTimeFromValue,\n segmentedTimeToValue,\n stepSegment,\n togglePeriod,\n typeDigit,\n typePeriod,\n type SegmentedTime,\n type SegmentedTimeError,\n} from \"./segmentedTime\";\n\ninterface SegmentedTimeInputProps {\n value: TimeValue;\n /** Minute increment; minutes snap to it. Omit to take minutes as typed. */\n minuteStep?: number;\n onChange: (value: TimeValue) => void;\n /** Reports why the field can't produce a time yet, or null once it can. */\n onErrorChange: (error: SegmentedTimeError | null) => void;\n invalid?: boolean;\n disabled?: boolean;\n autoFocus?: boolean;\n \"aria-describedby\"?: string;\n}\n\nconst PLACEHOLDERS = [\"hh\", \"mm\", \"--\"];\n\nconst SegmentedTimeInput: React.FC<SegmentedTimeInputProps> = ({\n value,\n minuteStep,\n onChange,\n onErrorChange,\n invalid = false,\n disabled = false,\n autoFocus = false,\n \"aria-describedby\": ariaDescribedBy,\n}) => {\n const { t } = useTranslation();\n const fieldRef = useRef<HTMLDivElement>(null);\n const step = minuteStep ?? 1;\n const [time, setTime] = useState<SegmentedTime>(() =>\n segmentedTimeFromValue(value, step)\n );\n const lastEmittedRef = useRef<TimeValue>(value);\n\n // Reload only when the value changes from outside (\"Now\", reopening the\n // picker), not when it echoes back what the user typed.\n useEffect(() => {\n if (timeValueEquals(value, lastEmittedRef.current)) return;\n\n lastEmittedRef.current = value;\n setTime(segmentedTimeFromValue(value, step));\n }, [value]);\n\n const error = getSegmentedTimeError(time);\n\n useEffect(() => {\n onErrorChange(error);\n }, [error, onErrorChange]);\n\n // With a minute step, minutes snap on load: a saved 10:27 is reported back\n // as 10:25 when the step is 5.\n useEffect(() => {\n const snapped = segmentedTimeToValue(time);\n if (snapped && !timeValueEquals(snapped, value)) {\n lastEmittedRef.current = snapped;\n onChange(snapped);\n }\n // Runs once on mount; later changes go through `update`.\n }, []);\n\n useEffect(() => {\n if (autoFocus) fieldRef.current?.focus();\n }, [autoFocus]);\n\n const update = (next: SegmentedTime) => {\n setTime(next);\n const nextValue = segmentedTimeToValue(next);\n if (!nextValue || timeValueEquals(nextValue, lastEmittedRef.current)) {\n return;\n }\n\n lastEmittedRef.current = nextValue;\n onChange(nextValue);\n };\n\n // The field is a focusable div, not an input, so keyboard-shortcut handlers\n // (Storybook's \"1\"/\"2\", app hotkeys) would otherwise react to its keys.\n // Every key it handles stops here.\n const consume = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n\n if (key === \"Tab\") {\n // On AM/PM, Shift+Tab flips the period. Tab, and Shift+Tab elsewhere,\n // leave the field as usual: it is a single tab stop.\n if (!event.shiftKey || time.active !== 2) return;\n\n consume(event);\n update(togglePeriod(time));\n\n return;\n }\n\n if ((event.metaKey || event.ctrlKey) && key === \"Backspace\") {\n consume(event);\n update(emptySegmentedTime());\n\n return;\n }\n\n if (event.metaKey || event.ctrlKey || event.altKey) return;\n\n let next: SegmentedTime | null = null;\n if (/^[0-9]$/.test(key)) next = typeDigit(time, key, step);\n else if (/^[ap]$/i.test(key)) {\n next = typePeriod(time, key.toLowerCase() as \"a\" | \"p\", step);\n } else if (/^m$/i.test(key))\n next = time; // Ignored, so \"pm\" works.\n else if (key === \":\" || key === \" \" || key === \"ArrowRight\") {\n next = nextSegment(time, step);\n } else if (key === \"ArrowLeft\") next = previousSegment(time);\n else if (key === \"ArrowUp\") next = stepSegment(time, 1, step);\n else if (key === \"ArrowDown\") next = stepSegment(time, -1, step);\n else if (key === \"Backspace\" || key === \"Delete\") next = backspace(time);\n\n if (!next) return;\n\n consume(event);\n update(next);\n };\n\n const handlePaste = (event: React.ClipboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n const pasted = parsePastedTime(event.clipboardData.getData(\"text\"), step);\n if (pasted) update({ ...segmentedTimeFromValue(pasted, step), active: 2 });\n };\n\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n const segmentEl = (event.target as HTMLElement).closest<HTMLElement>(\n \"[data-segment]\"\n );\n if (segmentEl) {\n event.preventDefault();\n fieldRef.current?.focus();\n update(focusSegment(time, Number(segmentEl.dataset.segment), step));\n\n return;\n }\n\n update(focusFirstEmptySegment(time));\n };\n\n const segmentText = (index: number) => {\n const { text, done } = time[SEGMENT_KEYS[index]];\n if (!text) return PLACEHOLDERS[index];\n\n // A part still waiting for its second digit shows a trailing \"_\".\n return index < 2 && !done ? `${text}_` : text;\n };\n\n return (\n <div\n ref={fieldRef}\n role=\"group\"\n tabIndex={disabled ? -1 : 0}\n aria-label={t(\"neetoatoms.datePicker.timeField\", \"Time\")}\n aria-describedby={ariaDescribedBy}\n aria-invalid={invalid || undefined}\n aria-disabled={disabled || undefined}\n data-testid=\"datepicker-time-input\"\n className={cn(\n \"group/time flex h-9 w-full cursor-text items-center rounded-md border border-input bg-transparent px-3 text-sm tabular-nums outline-none select-none\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n invalid && \"border-destructive\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\"\n )}\n onBlur={() => update(finishActiveSegment(time, step))}\n onKeyDown={handleKeyDown}\n onMouseDown={handleMouseDown}\n onPaste={handlePaste}\n >\n {SEGMENT_KEYS.map((key, index) => (\n <React.Fragment key={key}>\n {index === 1 && (\n <span aria-hidden className=\"px-0.5 text-muted-foreground\">\n :\n </span>\n )}\n {index === 2 && <span aria-hidden className=\"w-1\" />}\n <span\n data-segment={index}\n data-testid={`datepicker-time-${key}`}\n className={cn(\n \"min-w-[2ch] px-0.5 text-center whitespace-pre\",\n !time[key].text && \"text-muted-foreground\",\n index === time.active &&\n \"group-focus/time:shadow-[inset_0_-1.5px_0_var(--color-muted-foreground)]\"\n )}\n >\n {segmentText(index)}\n </span>\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nSegmentedTimeInput.displayName = \"SegmentedTimeInput\";\n\nexport { SegmentedTimeInput };\n","import React, { useCallback, useId, useState } from \"react\";\n\nimport { Clock, Globe } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Label } from \"src/primitives/Label\";\nimport { Switch } from \"src/primitives/Switch\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport type { TimeValue } from \"../TimePicker/types\";\nimport { SegmentedTimeInput } from \"./SegmentedTimeInput\";\nimport type { SegmentedTimeError } from \"./segmentedTime\";\n\ninterface TimeSectionProps {\n value: TimeValue;\n /** Minute increment; also shows the hint naming it. Omit for any minute. */\n minuteStep?: number;\n onChange: (value: TimeValue) => void;\n /** Reports whether the typed time is incomplete, so OK can refuse it. */\n onErrorChange: (hasError: boolean) => void;\n /** Show the error even before OK is retried, e.g. right after OK. */\n showError: boolean;\n /** Shows the \"Add time\" switch; without it the time is always on. */\n optional: boolean;\n hasTime: boolean;\n onHasTimeChange: (hasTime: boolean) => void;\n /** e.g. \"India Standard Time (UTC+5:30)\"; hidden when null. */\n timezoneLabel: string | null;\n disabled?: boolean;\n className?: string;\n}\n\nconst ERROR_DEFAULTS: Record<SegmentedTimeError, string> = {\n timeRequired: \"Enter a time, or turn off Add time.\",\n hourRequired: \"Enter an hour.\",\n minuteRequired: \"Enter minutes.\",\n periodRequired: \"Type a or p for AM or PM.\",\n};\n\n// Two example times on the step's grid for the hint: 1:05 and 1:30 for 5,\n// 1:20 and 1:40 for 20, 1:00 and 1:30 for 30.\nconst stepExamples = (step: number): [string, string] => {\n const pad = (minutes: number) => `1:${String(minutes).padStart(2, \"0\")}`;\n if (step * 2 >= 60) return [pad(0), pad(step)];\n\n return [pad(step), pad(30 % step === 0 && step < 30 ? 30 : step * 2)];\n};\n\nconst TimeSection: React.FC<TimeSectionProps> = ({\n value,\n minuteStep,\n onChange,\n onErrorChange,\n showError,\n optional,\n hasTime,\n onHasTimeChange,\n timezoneLabel,\n disabled = false,\n className,\n}) => {\n const { t } = useTranslation();\n const id = useId();\n const switchId = `datepicker-add-time-${id}`;\n const hintId = `datepicker-time-hint-${id}`;\n const errorId = `datepicker-time-error-${id}`;\n const [error, setError] = useState<SegmentedTimeError | null>(null);\n // Focus the field when the user turns the switch on, not when it opens on.\n const [focusOnMount, setFocusOnMount] = useState(false);\n\n const handleErrorChange = useCallback(\n (nextError: SegmentedTimeError | null) => {\n setError(nextError);\n onErrorChange(!!nextError);\n },\n [onErrorChange]\n );\n\n const handleHasTimeChange = (checked: boolean) => {\n setFocusOnMount(checked);\n if (!checked) {\n setError(null);\n onErrorChange(false);\n }\n onHasTimeChange(checked);\n };\n\n const isTimeOn = !optional || hasTime;\n const showHint = (minuteStep ?? 1) > 1;\n const errorMessage =\n isTimeOn && showError && error\n ? t(`neetoatoms.datePicker.errors.${error}`, ERROR_DEFAULTS[error])\n : null;\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {optional && (\n <div className=\"flex items-center justify-between gap-3\">\n <Label\n htmlFor={switchId}\n className=\"flex items-center gap-2 font-medium\"\n >\n <Clock aria-hidden className=\"size-4 text-muted-foreground\" />\n {t(\"neetoatoms.datePicker.addTime\", \"Add time\")}\n </Label>\n <Switch\n id={switchId}\n checked={hasTime}\n data-testid=\"datepicker-add-time-switch\"\n disabled={disabled}\n onCheckedChange={handleHasTimeChange}\n />\n </div>\n )}\n {isTimeOn && (\n <div className=\"flex flex-col gap-1.5\">\n <SegmentedTimeInput\n aria-describedby={\n [showHint ? hintId : null, errorMessage ? errorId : null]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n autoFocus={focusOnMount}\n disabled={disabled}\n invalid={!!errorMessage}\n minuteStep={minuteStep}\n value={value}\n onChange={onChange}\n onErrorChange={handleErrorChange}\n />\n {showHint && (\n <p\n id={hintId}\n className=\"text-xs text-muted-foreground\"\n data-testid=\"datepicker-time-hint\"\n >\n {t(\"neetoatoms.datePicker.timeHint\", {\n step: minuteStep,\n first: stepExamples(minuteStep as number)[0],\n second: stepExamples(minuteStep as number)[1],\n defaultValue:\n \"Only {{step}}-minute steps are allowed, like {{first}} or {{second}}.\",\n })}\n </p>\n )}\n {errorMessage && (\n <p\n id={errorId}\n className=\"text-xs text-destructive\"\n data-testid=\"datepicker-time-error\"\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n {timezoneLabel && (\n <p\n className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\"\n data-testid=\"datepicker-timezone\"\n >\n <Globe aria-hidden className=\"size-3.5 shrink-0\" />\n {timezoneLabel}\n </p>\n )}\n </div>\n )}\n </div>\n );\n};\n\nTimeSection.displayName = \"TimeSection\";\n\nexport { TimeSection };\n","import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { buildMonth, isSameMonth } from \"./utils\";\n\ninterface MonthPickerProps {\n /** Currently selected date (used to highlight the active month). */\n value: Date | null;\n /** Year currently shown in the grid. */\n displayedYear: number;\n /** Callback when the user navigates to a different year. */\n onYearChange: (year: number) => void;\n /** Callback when a month is picked. */\n onSelect: (date: Date) => void;\n /** Predicate to disable an entire month (any day in it returning true disables the month). */\n isDisabled?: (date: Date) => boolean;\n /** Locale code for month-name formatting. */\n locale?: string;\n}\n\nconst MonthPicker = ({\n value,\n displayedYear,\n onYearChange,\n onSelect,\n isDisabled,\n locale,\n}: MonthPickerProps) => {\n const months = Array.from({ length: 12 }, (_, m) =>\n buildMonth(displayedYear, m)\n );\n const monthName = (date: Date) =>\n date.toLocaleString(locale, { month: \"short\" });\n\n return (\n <div className=\"bg-background flex w-[16rem] flex-col gap-3 p-2\">\n <div className=\"flex items-center justify-between\">\n <Button\n aria-label=\"Previous year\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(displayedYear - 1)}\n >\n <ChevronLeftIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n <span className=\"text-sm font-medium\">{displayedYear}</span>\n <Button\n aria-label=\"Next year\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(displayedYear + 1)}\n >\n <ChevronRightIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n </div>\n <div className=\"grid grid-cols-3 gap-2\">\n {months.map(monthDate => {\n const disabled = isDisabled?.(monthDate) ?? false;\n const selected = isSameMonth(value, monthDate);\n\n return (\n <button\n aria-pressed={selected}\n className={cn(\n \"rounded-md py-2 text-sm transition-colors\",\n \"hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50\",\n selected &&\n \"bg-primary text-primary-foreground hover:bg-primary\"\n )}\n disabled={disabled}\n key={monthDate.getMonth()}\n type=\"button\"\n onClick={() => onSelect(monthDate)}\n >\n {monthName(monthDate)}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport { MonthPicker };\n","import type React from \"react\";\nimport type { DateRange } from \"react-day-picker\";\n\nimport { Calendar } from \"src/primitives/Calendar\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\ninterface RangeCalendarProps {\n todayDate: Date;\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n month: Date;\n onMonthChange: (date: Date) => void;\n selected: DateRange | undefined;\n onSelect: (range: DateRange | undefined, triggerDate: Date) => void;\n disabled: (date: Date) => boolean;\n startMonth: Date;\n endMonth: Date;\n onHoverIn: (e: React.MouseEvent<HTMLElement>) => void;\n onHoverOut: () => void;\n numberOfMonths?: number;\n className?: string;\n}\n\nexport const RangeCalendar = ({\n todayDate,\n weekStartsOn,\n month,\n onMonthChange,\n selected,\n onSelect,\n disabled,\n startMonth,\n endMonth,\n onHoverIn,\n onHoverOut,\n numberOfMonths = 2,\n className,\n}: RangeCalendarProps) => (\n <div onMouseOver={onHoverIn} onMouseLeave={onHoverOut}>\n <Calendar\n mode=\"range\"\n numberOfMonths={numberOfMonths}\n captionLayout=\"dropdown\"\n today={todayDate}\n weekStartsOn={weekStartsOn}\n className={cn(\n \"[&_[data-outside][data-selected=true]]:!bg-transparent [&_[data-outside][data-selected=true]]:after:!bg-transparent [&_[data-outside]_button]:!bg-transparent [&_[data-outside]_button]:!text-muted-foreground\",\n className\n )}\n month={month}\n onMonthChange={onMonthChange}\n selected={selected}\n onSelect={onSelect}\n disabled={disabled}\n startMonth={startMonth}\n endMonth={endMonth}\n />\n </div>\n);\n","import { useCallback, useMemo, useState } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\n\nimport { computeRangePreview, orderRange, parseGridcellDay } from \"./utils\";\n\ntype RangeTuple = [Date | null, Date | null];\n\ninterface UseRangePickerOptions {\n currentValue: unknown;\n showTime: boolean;\n needConfirm: boolean;\n commitValue: (value: Date | [Date, Date] | null) => void;\n setOpen: (open: boolean) => void;\n}\n\nexport const useRangePicker = ({\n currentValue,\n showTime,\n needConfirm,\n commitValue,\n setOpen,\n}: UseRangePickerOptions) => {\n const [pendingRange, setPendingRange] = useState<RangeTuple | null>(null);\n const [rangeSelectionStep, setRangeSelectionStep] = useState<\"from\" | \"to\">(\n \"from\"\n );\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null);\n\n const committed = (currentValue as RangeTuple | null) ?? null;\n\n const resetTransientState = useCallback(() => {\n setPendingRange(null);\n setRangeSelectionStep(\"from\");\n setHoveredDate(null);\n }, []);\n\n const handleRangeSelect = useCallback(\n (_range: { from?: Date; to?: Date } | undefined, triggerDate: Date) => {\n if (!triggerDate) return;\n\n if (showTime || needConfirm) {\n if (rangeSelectionStep === \"from\") {\n const existingTo = pendingRange?.[1] ?? committed?.[1] ?? null;\n const nextTo =\n existingTo && triggerDate <= existingTo ? existingTo : null;\n setPendingRange([triggerDate, nextTo]);\n } else {\n const existingFrom = pendingRange?.[0] ?? committed?.[0] ?? null;\n const nextFrom =\n existingFrom && triggerDate >= existingFrom ? existingFrom : null;\n setPendingRange([nextFrom, triggerDate]);\n }\n\n return;\n }\n\n if (rangeSelectionStep === \"from\" || !pendingRange?.[0]) {\n const existingTo = pendingRange?.[1] ?? committed?.[1] ?? null;\n const nextTo =\n existingTo && triggerDate <= existingTo ? existingTo : null;\n setPendingRange([triggerDate, nextTo]);\n setRangeSelectionStep(\"to\");\n\n return;\n }\n\n const [from, to] = orderRange(pendingRange[0], triggerDate) as [\n Date,\n Date,\n ];\n\n setRangeSelectionStep(\"from\");\n setPendingRange(null);\n\n commitValue([from, to]);\n setOpen(false);\n },\n [\n rangeSelectionStep,\n pendingRange,\n committed,\n showTime,\n needConfirm,\n commitValue,\n setOpen,\n ]\n );\n\n const handleHoverIn = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const parsed = parseGridcellDay(e.target);\n if (!parsed) return;\n\n if (hoveredDate && hoveredDate.getTime() === parsed.getTime()) return;\n\n setHoveredDate(parsed);\n },\n [hoveredDate]\n );\n\n const handleHoverOut = useCallback(() => setHoveredDate(null), []);\n\n const memoizedRangeSelected = useMemo<DateRange | undefined>(() => {\n const { from, to } = computeRangePreview({\n pendingRange,\n committed,\n hoveredDate,\n rangeStep: rangeSelectionStep,\n });\n\n if (!from && !to) return undefined;\n\n return { from: from ?? undefined, to: to ?? undefined };\n }, [pendingRange, committed, hoveredDate, rangeSelectionStep]);\n\n const getPreviewParts = useCallback(\n () =>\n computeRangePreview({\n pendingRange,\n committed,\n hoveredDate,\n rangeStep: rangeSelectionStep,\n }),\n [pendingRange, committed, hoveredDate, rangeSelectionStep]\n );\n\n return {\n pendingRange,\n rangeSelectionStep,\n setRangeSelectionStep,\n hoveredDate,\n handleRangeSelect,\n handleHoverIn,\n handleHoverOut,\n memoizedRangeSelected,\n getPreviewParts,\n resetTransientState,\n };\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { decadeStartFor } from \"./utils\";\n\ninterface YearPickerProps {\n /** Currently selected date (used to highlight the active year). */\n value: Date | null;\n /** A year inside the decade currently shown in the grid. */\n displayedYear: number;\n /** Callback when the user navigates to a different decade (receives any year inside it). */\n onYearChange: (year: number) => void;\n /** Callback when a year is picked. */\n onSelect: (date: Date) => void;\n /** Predicate to disable an entire year (e.g. when out of min/max range). */\n isDisabled?: (date: Date) => boolean;\n}\n\nconst YearPicker = ({\n value,\n displayedYear,\n onYearChange,\n onSelect,\n isDisabled,\n}: YearPickerProps) => {\n const decadeStart = decadeStartFor(displayedYear);\n const years = Array.from({ length: 12 }, (_, i) => decadeStart - 1 + i);\n const selectedYear = value?.getFullYear();\n\n return (\n <div className=\"bg-background flex w-[16rem] flex-col gap-3 p-2\">\n <div className=\"flex items-center justify-between\">\n <Button\n aria-label=\"Previous decade\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(decadeStart - 10)}\n >\n <ChevronLeftIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n <span className=\"text-sm font-medium\">\n {decadeStart}-{decadeStart + 9}\n </span>\n <Button\n aria-label=\"Next decade\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(decadeStart + 10)}\n >\n <ChevronRightIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n </div>\n <div className=\"grid grid-cols-3 gap-2\">\n {years.map(year => {\n const yearDate = new Date(year, 0, 1);\n const disabled = isDisabled?.(yearDate) ?? false;\n const selected = selectedYear === year;\n const outsideDecade = year < decadeStart || year > decadeStart + 9;\n\n return (\n <button\n aria-pressed={selected}\n className={cn(\n \"rounded-md py-2 text-sm transition-colors\",\n \"hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50\",\n outsideDecade && \"text-muted-foreground\",\n selected &&\n \"bg-primary text-primary-foreground hover:bg-primary\"\n )}\n disabled={disabled}\n key={year}\n type=\"button\"\n onClick={() => onSelect(yearDate)}\n >\n {year}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport { YearPicker };\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Calendar } from \"src/primitives/Calendar\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { useControlledOpen } from \"src/hooks/useControlledOpen\";\nimport { useCursorRestore } from \"src/hooks/useCursorRestore\";\nimport { useOutsideClickClose } from \"src/hooks/useOutsideClickClose\";\n\nimport type { DatePickerProps } from \"./types\";\nimport {\n CALENDAR_NAVIGATION_YEAR_RANGE,\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT,\n INITIAL_TIME_VALUE,\n SIZE_CONFIG,\n} from \"./constants\";\nimport {\n applyTimeToDate,\n toBrowserLocalDate,\n coerceDateValue,\n formatDate,\n getDatePlaceholder,\n getDisplayFormat,\n getInitialCalendarMonth,\n isDatePartComplete,\n isMonthDisabled,\n isYearDisabled,\n orderRange,\n parseDate,\n parseRangeText,\n getTimezoneLabel,\n roundToMinuteStep,\n roundUpToMinuteStep,\n startOfWeek,\n toNativeDate,\n toUserTzDayjs,\n weekDaysFrom,\n} from \"./utils\";\nimport {\n applyMask,\n buildMaskTemplate,\n buildRangeMaskTemplate,\n isFixedWidthFormat,\n} from \"src/utils/inputMask\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { DatePickerFooter } from \"./DatePickerFooter\";\nimport { DatePickerField } from \"./DatePickerField\";\nimport { DatePickerTrigger } from \"./DatePickerTrigger\";\nimport { TimeSection } from \"./TimeSection\";\nimport { MonthPicker } from \"./MonthPicker\";\nimport { RangeCalendar } from \"./RangeCalendar\";\nimport { useRangePicker } from \"./useRangePicker\";\nimport { YearPicker } from \"./YearPicker\";\nimport { dateToTimeValue } from \"../TimePicker/utils\";\n\n// w-0 + min-w-full sizes the time section to the calendar above it instead of\n// letting it widen the popover.\nconst TIME_SECTION_CLASS_NAME =\n \"w-0 min-w-full border-t border-border px-3 py-3\";\n\n// With showTime, day cells grow from 28px to 32.5px, making the calendar (and\n// the popover) 15% wider: 7 × 32.5 + 16 = 243.5px instead of 212px.\nconst SHOW_TIME_CALENDAR_CLASS_NAME = \"[--cell-size:--spacing(8.125)]\";\n\n// Where the time starts when \"Add time\" is switched on with no saved time.\nconst DEFAULT_ADDED_TIME = { hours: 12, minutes: 0, seconds: 0 };\n\nconst noop = () => {};\n\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onBlur,\n type = \"date\",\n dateFormat = DEFAULT_DATE_FORMAT,\n timeFormat = DEFAULT_TIME_FORMAT,\n showTime = false,\n showNow = true,\n minuteStep,\n timeOptional = true,\n hasTime: hasTimeProp,\n minDate,\n maxDate,\n disabledDate,\n placeholder,\n label,\n error,\n helpText,\n size = \"medium\",\n disabled = false,\n allowClear = true,\n required = false,\n timezone,\n timezoneLabel: timezoneLabelProp,\n onTimezoneChange,\n onOk,\n needConfirm = false,\n open: openProp,\n onOpenChange,\n className,\n labelProps,\n picker = \"date\",\n side = \"bottom\",\n align = \"start\",\n trigger,\n weekStartsOn = 0,\n dataTestId,\n \"data-testid\": inputDataTestId,\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const cursorPosRef = useRef<number | null>(null);\n\n const popoverContentId = useRef(\n `datepicker-popover-${generatedId}`\n ).current;\n\n const { open, setOpen } = useControlledOpen(openProp, onOpenChange);\n\n const [internalValue, setInternalValue] = useState(\n coerceDateValue(defaultValue, type) ?? null\n );\n\n const [calendarMonth, setCalendarMonth] = useState(() =>\n getInitialCalendarMonth(value, defaultValue, type)\n );\n\n const [pendingDate, setPendingDate] = useState<Date | null>(null);\n const [pendingTime, setPendingTime] = useState(INITIAL_TIME_VALUE);\n const [pendingTimeTo, setPendingTimeTo] = useState(INITIAL_TIME_VALUE);\n const [hasTimeError, setHasTimeError] = useState(false);\n // Set when the user tries to confirm an invalid time, so the row shows the\n // error even if no input was blurred yet.\n const [isTimeErrorRequested, setIsTimeErrorRequested] = useState(false);\n\n // Whether the committed value carries a time. Only a `timeOptional`\n // single-date picker can hold a date without one.\n const isTimeOptional = showTime && timeOptional && type === \"date\";\n const [internalHasTime, setInternalHasTime] = useState(\n () => hasTimeProp ?? (value ?? defaultValue) != null\n );\n const committedHasTime =\n showTime && (!isTimeOptional || (hasTimeProp ?? internalHasTime));\n const [pendingHasTime, setPendingHasTime] = useState(committedHasTime);\n const isPendingTimeOn = showTime && (!isTimeOptional || pendingHasTime);\n\n const currentValue = useMemo(\n () =>\n value !== undefined ? coerceDateValue(value, type) : internalValue,\n [value, type, internalValue]\n );\n\n const normalizedMinDate = useMemo(\n () => toNativeDate(minDate) ?? undefined,\n [minDate]\n );\n const normalizedMaxDate = useMemo(\n () => toNativeDate(maxDate) ?? undefined,\n [maxDate]\n );\n\n const displayFormat = getDisplayFormat(\n dateFormat,\n timeFormat,\n committedHasTime\n );\n const sizeConfig = SIZE_CONFIG[size];\n const maskEnabled = isFixedWidthFormat(displayFormat);\n\n const defaultPlaceholder = getDatePlaceholder(\n dateFormat,\n timeFormat,\n showTime,\n type\n );\n\n const maskTemplate = useMemo(\n () =>\n maskEnabled\n ? type === \"range\"\n ? buildRangeMaskTemplate(displayFormat)\n : buildMaskTemplate(displayFormat)\n : null,\n [displayFormat, type, maskEnabled]\n );\n\n const singleDateLen = useMemo(\n () => buildMaskTemplate(displayFormat).pattern.length,\n [displayFormat]\n );\n\n const calendarDisabled = useCallback(\n (date: Date) => {\n if (disabledDate?.(date)) return true;\n if (\n normalizedMinDate &&\n date < new Date(new Date(normalizedMinDate).setHours(0, 0, 0, 0))\n )\n return true;\n if (\n normalizedMaxDate &&\n date > new Date(new Date(normalizedMaxDate).setHours(23, 59, 59, 999))\n )\n return true;\n\n return false;\n },\n [normalizedMinDate, normalizedMaxDate, disabledDate]\n );\n\n const getDisplayText = useCallback(() => {\n if (type !== \"range\") {\n return formatDate(currentValue as Date | null, displayFormat);\n }\n\n const rangeValue = currentValue as [Date | null, Date | null] | null;\n if (!rangeValue || (!rangeValue[0] && !rangeValue[1])) return \"\";\n\n const from = rangeValue[0]\n ? formatDate(rangeValue[0], displayFormat)\n : \"\";\n const to = rangeValue[1] ? formatDate(rangeValue[1], displayFormat) : \"\";\n\n return `${from} - ${to}`;\n }, [currentValue, displayFormat, type]);\n\n const [inputText, setInputText] = useState(() => getDisplayText());\n\n // `meta.hasTime` is only sent by `timeOptional` pickers, so other callers\n // keep receiving exactly two arguments.\n const emitChange = (\n changed: Parameters<NonNullable<typeof onChange>>[0],\n formatted: string | [string, string],\n withTime: boolean\n ) => {\n if (isTimeOptional) onChange?.(changed, formatted, { hasTime: withTime });\n else onChange?.(changed, formatted);\n };\n\n const commitValue = (\n date: Date | [Date, Date] | null,\n withTime: boolean = committedHasTime\n ) => {\n if (date === null) {\n setInternalValue(null);\n setInternalHasTime(false);\n if (type === \"range\") {\n emitChange([null, null], [\"\", \"\"], false);\n } else {\n emitChange(null, \"\", false);\n }\n setInputText(\"\");\n\n return;\n }\n\n const commitFormat = getDisplayFormat(dateFormat, timeFormat, withTime);\n\n const toSerializableDayjs = (d: Date) => {\n const userTzDayjs = toUserTzDayjs(d);\n if (withTime) return userTzDayjs;\n\n return userTzDayjs.hour(12).minute(0).second(0).millisecond(0);\n };\n\n if (Array.isArray(date)) {\n setInternalValue(date);\n const formatted: [string, string] = [\n formatDate(date[0], commitFormat),\n formatDate(date[1], commitFormat),\n ];\n emitChange(\n [toSerializableDayjs(date[0]), toSerializableDayjs(date[1])],\n formatted,\n withTime\n );\n setInputText(`${formatted[0]} - ${formatted[1]}`);\n\n return;\n }\n\n setInternalValue(date);\n setInternalHasTime(withTime);\n const formatted = formatDate(date, commitFormat);\n emitChange(toSerializableDayjs(date), formatted, withTime);\n setInputText(formatted);\n };\n\n const {\n pendingRange,\n rangeSelectionStep,\n setRangeSelectionStep,\n handleRangeSelect,\n handleHoverIn,\n handleHoverOut,\n memoizedRangeSelected,\n getPreviewParts,\n resetTransientState,\n } = useRangePicker({\n currentValue,\n showTime,\n needConfirm,\n commitValue,\n setOpen,\n });\n\n useEffect(() => {\n if (type !== \"range\" || !open) return;\n\n const { from, to } = getPreviewParts();\n const fromWithTime =\n from && showTime ? applyTimeToDate(from, pendingTime) : from;\n const toWithTime =\n to && showTime ? applyTimeToDate(to, pendingTimeTo) : to;\n const fromText = fromWithTime\n ? formatDate(fromWithTime, displayFormat)\n : \"\";\n const toText = toWithTime ? formatDate(toWithTime, displayFormat) : \"\";\n\n setInputText(fromText || toText ? `${fromText} - ${toText}` : \"\");\n }, [\n type,\n open,\n getPreviewParts,\n displayFormat,\n showTime,\n pendingTime,\n pendingTimeTo,\n ]);\n\n const parseAndApplyRange = (text: string, cursorPos: number | null) => {\n const parts = text.split(\" - \");\n const separatorIdx = text.indexOf(\" - \");\n const editingTo =\n separatorIdx >= 0 && cursorPos !== null && cursorPos > separatorIdx + 2;\n\n if (editingTo) {\n const to = parseDate(parts[1] ?? \"\", displayFormat);\n if (to) setCalendarMonth(to);\n } else {\n if (!isDatePartComplete(parts[0] ?? \"\", maskEnabled, singleDateLen))\n return;\n\n const from = parseDate(parts[0] ?? \"\", displayFormat);\n if (from) setCalendarMonth(from);\n }\n\n const range = parseRangeText(\n text,\n displayFormat,\n maskEnabled,\n singleDateLen\n );\n\n if (range) commitValue(range);\n };\n\n const commitPendingOnClose = useCallback(() => {\n const hasOkButton = showTime || needConfirm;\n if (!hasOkButton || !pendingDate || (isPendingTimeOn && hasTimeError)) {\n setInputText(getDisplayText());\n\n return;\n }\n\n const finalDate = isPendingTimeOn\n ? applyTimeToDate(pendingDate, pendingTime)\n : pendingDate;\n\n const currentSingle =\n type === \"date\" ? (currentValue as Date | null) : null;\n\n const isSame =\n currentSingle &&\n isPendingTimeOn === committedHasTime &&\n finalDate.getTime() === currentSingle.getTime();\n\n if (isSame) {\n setInputText(getDisplayText());\n\n return;\n }\n\n commitValue(finalDate, isPendingTimeOn);\n }, [\n showTime,\n needConfirm,\n pendingDate,\n pendingTime,\n isPendingTimeOn,\n committedHasTime,\n type,\n currentValue,\n getDisplayText,\n onChange,\n hasTimeError,\n ]);\n\n const closePopover = useCallback(() => {\n if (\n type === \"range\" &&\n pendingRange?.[0] &&\n pendingRange?.[1] &&\n !(showTime && hasTimeError)\n ) {\n const [fromBase, toBase] = orderRange(\n pendingRange[0],\n pendingRange[1]\n ) as [Date, Date];\n const fromFinal = showTime\n ? applyTimeToDate(fromBase, pendingTime)\n : fromBase;\n const toFinal = showTime\n ? applyTimeToDate(toBase, pendingTimeTo)\n : toBase;\n commitValue([fromFinal, toFinal]);\n } else {\n commitPendingOnClose();\n }\n resetTransientState();\n setOpen(false);\n }, [\n commitPendingOnClose,\n setOpen,\n type,\n pendingRange,\n pendingTime,\n pendingTimeTo,\n showTime,\n resetTransientState,\n hasTimeError,\n ]);\n\n useOutsideClickClose({\n enabled: open,\n containerRef,\n popoverElementId: popoverContentId,\n onClose: closePopover,\n });\n\n const openPopover = () => {\n setOpen(true);\n resetTransientState();\n setIsTimeErrorRequested(false);\n\n if (type === \"range\") {\n const rangeVal = currentValue as [Date | null, Date | null] | null;\n const fromDate = rangeVal?.[0] ?? null;\n const toDate = rangeVal?.[1] ?? null;\n setPendingDate(null);\n setPendingTime(\n fromDate ? dateToTimeValue(fromDate) : INITIAL_TIME_VALUE\n );\n setPendingTimeTo(toDate ? dateToTimeValue(toDate) : INITIAL_TIME_VALUE);\n\n return;\n }\n\n const dateVal = currentValue as Date | null;\n setPendingHasTime(committedHasTime);\n if (!dateVal) {\n setPendingDate(null);\n setPendingTime(\n isTimeOptional ? DEFAULT_ADDED_TIME : INITIAL_TIME_VALUE\n );\n\n return;\n }\n\n setCalendarMonth(dateVal);\n setPendingDate(dateVal);\n setPendingTime(\n committedHasTime || !isTimeOptional\n ? dateToTimeValue(dateVal)\n : DEFAULT_ADDED_TIME\n );\n };\n\n const handleDateSelect = (selected: Date | undefined) => {\n if (!selected) return;\n\n setCalendarMonth(selected);\n\n if (showTime || needConfirm) {\n setPendingDate(selected);\n\n return;\n }\n\n commitValue(selected);\n setOpen(false);\n };\n\n const handleNow = () => {\n const now = toBrowserLocalDate(\n showTime && minuteStep\n ? roundUpToMinuteStep(new Date(), minuteStep)\n : new Date()\n );\n\n if (calendarDisabled(now)) return;\n\n setCalendarMonth(now);\n\n if (type === \"range\") {\n handleRangeSelect(undefined, now);\n if (showTime) {\n const nowTime = dateToTimeValue(now);\n if (rangeSelectionStep === \"from\") setPendingTime(nowTime);\n else setPendingTimeTo(nowTime);\n }\n\n return;\n }\n\n if (showTime || needConfirm) {\n setPendingDate(now);\n setPendingTime(dateToTimeValue(now));\n if (isTimeOptional) setPendingHasTime(true);\n\n return;\n }\n\n commitValue(now);\n setOpen(false);\n };\n\n const handleOk = () => {\n if (isPendingTimeOn && hasTimeError) {\n setIsTimeErrorRequested(true);\n\n return;\n }\n\n if (type === \"range\" && (showTime || needConfirm)) {\n const committedRange = currentValue as\n | [Date | null, Date | null]\n | null;\n const fromValue = pendingRange?.[0] ?? committedRange?.[0] ?? null;\n const toValue = pendingRange?.[1] ?? committedRange?.[1] ?? null;\n\n if (rangeSelectionStep === \"from\" && fromValue) {\n setRangeSelectionStep(\"to\");\n setCalendarMonth(\n new Date(fromValue.getFullYear(), fromValue.getMonth(), 1)\n );\n if (showTime && pendingRange?.[0]) {\n setPendingTimeTo(INITIAL_TIME_VALUE);\n }\n\n return;\n }\n\n if (rangeSelectionStep === \"to\" && fromValue && toValue) {\n const [fromBase, toBase] = orderRange(fromValue, toValue) as [\n Date,\n Date,\n ];\n const fromFinal = showTime\n ? applyTimeToDate(fromBase, pendingTime)\n : fromBase;\n const toFinal = showTime\n ? applyTimeToDate(toBase, pendingTimeTo)\n : toBase;\n commitValue([fromFinal, toFinal], showTime);\n onOk?.([fromFinal, toFinal]);\n resetTransientState();\n setOpen(false);\n\n return;\n }\n\n return;\n }\n\n if (pendingDate) {\n const finalDate = isPendingTimeOn\n ? applyTimeToDate(pendingDate, pendingTime)\n : pendingDate;\n\n commitValue(finalDate, isPendingTimeOn);\n onOk?.(finalDate);\n }\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n commitValue(null);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let text = e.target.value;\n\n if (maskTemplate) {\n const masked = applyMask(\n text,\n maskTemplate,\n inputText,\n e.target.selectionStart\n );\n\n text = masked.text;\n cursorPosRef.current = masked.cursorPosition;\n }\n\n setInputText(text);\n\n if (type === \"range\") {\n parseAndApplyRange(text, e.target.selectionStart);\n\n return;\n }\n\n const isComplete = maskTemplate\n ? text.length >= maskTemplate.pattern.length\n : true;\n\n if (!isComplete) return;\n\n const parsed = parseDate(text, displayFormat);\n if (!parsed) return;\n\n setCalendarMonth(parsed);\n\n if (showTime || needConfirm) {\n setPendingDate(parsed);\n setPendingTime(dateToTimeValue(parsed));\n\n return;\n }\n\n commitValue(parsed);\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setPendingDate(null);\n setPendingTime(INITIAL_TIME_VALUE);\n setInputText(getDisplayText());\n setOpen(false);\n\n return;\n }\n\n if (e.key !== \"Enter\") return;\n\n if (type === \"range\") {\n const range = parseRangeText(\n inputText,\n displayFormat,\n maskEnabled,\n singleDateLen\n );\n // With a minute step, typed times snap to it, as in the time field.\n if (range) {\n commitValue(\n showTime && minuteStep\n ? [\n roundToMinuteStep(range[0], minuteStep),\n roundToMinuteStep(range[1], minuteStep),\n ]\n : range\n );\n }\n } else {\n const parsed = parseDate(inputText, displayFormat);\n if (parsed) {\n commitValue(\n committedHasTime && minuteStep\n ? roundToMinuteStep(parsed, minuteStep)\n : parsed\n );\n }\n }\n\n setOpen(false);\n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const next = e.relatedTarget as HTMLElement | null;\n if (next && containerRef.current?.contains(next)) return;\n\n const popoverEl = document.getElementById(popoverContentId);\n if (next && popoverEl?.contains(next)) return;\n\n onBlur?.(e);\n };\n\n useEffect(() => {\n if (!open) setInputText(getDisplayText());\n }, [getDisplayText, open]);\n\n useCursorRestore([{ inputRef, cursorRef: cursorPosRef }]);\n\n useEffect(() => {\n if (!open || type !== \"date\") return;\n\n const dateVal = currentValue as Date | null;\n if (dateVal instanceof Date) setCalendarMonth(dateVal);\n }, [open]);\n\n // The footer's timezone select already names the zone when it is shown.\n const timezoneLabel =\n showTime && !onTimezoneChange\n ? (timezoneLabelProp ?? getTimezoneLabel(timezone)) || null\n : null;\n\n const hasField = !!(label || error || helpText);\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const showFooter = showTime || needConfirm || !!onTimezoneChange;\n const todayDate = toBrowserLocalDate(new Date());\n\n const handleHasTimeChange = (checked: boolean) => {\n setPendingHasTime(checked);\n setIsTimeErrorRequested(false);\n if (!checked) setHasTimeError(false);\n\n // A time needs a day: fall back to today so OK has something to save.\n if (checked && !pendingDate && !calendarDisabled(todayDate)) {\n setPendingDate(todayDate);\n setCalendarMonth(todayDate);\n }\n };\n\n const defaultStartMonth = new Date(\n todayDate.getFullYear() - CALENDAR_NAVIGATION_YEAR_RANGE,\n 0,\n 1\n );\n const defaultEndMonth = new Date(\n todayDate.getFullYear() + CALENDAR_NAVIGATION_YEAR_RANGE,\n 11,\n 1\n );\n // Keep the displayed month (e.g. a far-off value) navigable when no bounds are set.\n const calendarStartMonth =\n normalizedMinDate ??\n (calendarMonth < defaultStartMonth ? calendarMonth : defaultStartMonth);\n const calendarEndMonth =\n normalizedMaxDate ??\n (calendarMonth > defaultEndMonth ? calendarMonth : defaultEndMonth);\n\n const handleGridPickerSelect = (date: Date) => {\n commitValue(date);\n setOpen(false);\n };\n\n const handleSingleDateSelectWithPicker = (selected: Date | undefined) => {\n if (!selected) return handleDateSelect(undefined);\n\n handleDateSelect(\n picker === \"week\" ? startOfWeek(selected, weekStartsOn) : selected\n );\n };\n\n const weekHighlightProps = (() => {\n if (picker !== \"week\" || type !== \"date\" || !currentValue) return {};\n\n const weekStart = startOfWeek(currentValue as Date, weekStartsOn);\n const weekDays = weekDaysFrom(weekStart);\n\n return {\n modifiers: {\n weekStart: [weekDays[0]],\n weekMiddle: weekDays.slice(1, 6),\n weekEnd: [weekDays[6]],\n },\n modifiersClassNames: {\n weekStart:\n \"!bg-primary !text-primary-foreground !rounded-e-none hover:!bg-primary\",\n weekMiddle:\n \"!bg-primary !text-primary-foreground !rounded-none hover:!bg-primary\",\n weekEnd:\n \"!bg-primary !text-primary-foreground !rounded-s-none hover:!bg-primary\",\n },\n };\n })();\n\n const weekRowHoverClassName =\n picker === \"week\"\n ? \"[&_button]:!transition-none [&:hover_button]:!bg-primary [&:hover_button]:!text-primary-foreground [&:hover_button]:!rounded-none [&:hover_button]:cursor-pointer\"\n : undefined;\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const calendarSelected = () => {\n if (showTime || needConfirm) {\n return pendingDate ?? (currentValue as Date | undefined) ?? undefined;\n }\n\n return (currentValue as Date | undefined) ?? undefined;\n };\n\n const handleTriggerOpenChange = (nextOpen: boolean) => {\n if (nextOpen === open) return;\n\n if (nextOpen) openPopover();\n else closePopover();\n };\n\n const triggerContent = (\n <Popover\n open={open}\n onOpenChange={trigger ? handleTriggerOpenChange : undefined}\n >\n {trigger ? (\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n ) : (\n <DatePickerTrigger\n containerRef={containerRef}\n inputRef={inputRef}\n disabled={disabled}\n error={error}\n hasField={hasField}\n className={className}\n triggerSizeClass={sizeConfig.trigger}\n inputSizeClass={sizeConfig.input}\n iconSizeClass={sizeConfig.icon}\n label={label}\n ariaDescribedBy={ariaDescribedBy}\n inputTestId={\n inputDataTestId ??\n (dataTestId || label ? `${testIdPrefix}-input` : \"picker-input\")\n }\n placeholder={placeholder ?? defaultPlaceholder}\n inputText={inputText}\n allowClear={allowClear}\n timezone={timezone}\n onInputChange={handleInputChange}\n onInputKeyDown={handleInputKeyDown}\n onInputFocus={() => {\n if (!open) openPopover();\n }}\n onInputBlur={handleInputBlur}\n onClear={handleClear}\n />\n )}\n {open && (\n <PopoverContent\n id={popoverContentId}\n className=\"w-auto p-0\"\n align={align}\n side={side}\n onOpenAutoFocus={e => e.preventDefault()}\n onCloseAutoFocus={e => e.preventDefault()}\n onPointerDownOutside={e => e.preventDefault()}\n onInteractOutside={e => e.preventDefault()}\n >\n <div className=\"flex\">\n {type === \"date\" && picker === \"month\" ? (\n <MonthPicker\n value={(currentValue as Date | null) ?? null}\n displayedYear={calendarMonth.getFullYear()}\n onYearChange={year =>\n setCalendarMonth(\n new Date(year, calendarMonth.getMonth(), 1)\n )\n }\n onSelect={handleGridPickerSelect}\n isDisabled={date =>\n isMonthDisabled(date, normalizedMinDate, normalizedMaxDate)\n }\n />\n ) : type === \"date\" && picker === \"year\" ? (\n <YearPicker\n value={(currentValue as Date | null) ?? null}\n displayedYear={calendarMonth.getFullYear()}\n onYearChange={year => setCalendarMonth(new Date(year, 0, 1))}\n onSelect={handleGridPickerSelect}\n isDisabled={date =>\n isYearDisabled(date, normalizedMinDate, normalizedMaxDate)\n }\n />\n ) : type === \"date\" ? (\n <Calendar\n className={cn(showTime && SHOW_TIME_CALENDAR_CLASS_NAME)}\n mode=\"single\"\n captionLayout=\"dropdown\"\n today={todayDate}\n month={calendarMonth}\n onMonthChange={setCalendarMonth}\n selected={calendarSelected()}\n onSelect={handleSingleDateSelectWithPicker}\n disabled={calendarDisabled}\n weekStartsOn={weekStartsOn}\n classNames={\n weekRowHoverClassName\n ? { week: cn(\"mt-2 flex w-full\", weekRowHoverClassName) }\n : undefined\n }\n {...weekHighlightProps}\n startMonth={calendarStartMonth}\n endMonth={calendarEndMonth}\n />\n ) : showTime ? (\n <RangeCalendar\n className={SHOW_TIME_CALENDAR_CLASS_NAME}\n todayDate={todayDate}\n weekStartsOn={weekStartsOn}\n month={calendarMonth}\n onMonthChange={setCalendarMonth}\n selected={memoizedRangeSelected}\n onSelect={handleRangeSelect}\n disabled={calendarDisabled}\n startMonth={calendarStartMonth}\n endMonth={calendarEndMonth}\n onHoverIn={handleHoverIn}\n onHoverOut={handleHoverOut}\n numberOfMonths={1}\n />\n ) : (\n <RangeCalendar\n todayDate={todayDate}\n weekStartsOn={weekStartsOn}\n month={calendarMonth}\n onMonthChange={setCalendarMonth}\n selected={memoizedRangeSelected}\n onSelect={handleRangeSelect}\n disabled={calendarDisabled}\n startMonth={calendarStartMonth}\n endMonth={calendarEndMonth}\n onHoverIn={handleHoverIn}\n onHoverOut={handleHoverOut}\n />\n )}\n </div>\n {/* Outside the calendar's flex row, so the calendar keeps its own\n width and the time section only fills it. */}\n {showTime && type === \"range\" && (\n <TimeSection\n className={TIME_SECTION_CLASS_NAME}\n disabled={disabled}\n hasTime\n key={rangeSelectionStep}\n optional={false}\n showError={isTimeErrorRequested}\n timezoneLabel={timezoneLabel}\n value={\n rangeSelectionStep === \"from\" ? pendingTime : pendingTimeTo\n }\n onChange={\n rangeSelectionStep === \"from\"\n ? setPendingTime\n : setPendingTimeTo\n }\n minuteStep={minuteStep}\n onErrorChange={setHasTimeError}\n onHasTimeChange={noop}\n />\n )}\n {showTime && type !== \"range\" && (\n <TimeSection\n className={TIME_SECTION_CLASS_NAME}\n disabled={disabled}\n hasTime={pendingHasTime}\n optional={isTimeOptional}\n showError={isTimeErrorRequested}\n timezoneLabel={timezoneLabel}\n value={pendingTime}\n onChange={setPendingTime}\n minuteStep={minuteStep}\n onErrorChange={setHasTimeError}\n onHasTimeChange={handleHasTimeChange}\n />\n )}\n {showFooter && (\n <DatePickerFooter\n showTime={showTime}\n needConfirm={needConfirm}\n timezone={timezone}\n onTimezoneChange={onTimezoneChange}\n nowDisabled={calendarDisabled(todayDate)}\n showNow={showNow}\n onNow={handleNow}\n onOk={handleOk}\n okLabel={\n type === \"range\" &&\n (showTime || needConfirm) &&\n rangeSelectionStep === \"from\"\n ? \"Next\"\n : \"OK\"\n }\n />\n )}\n </PopoverContent>\n )}\n </Popover>\n );\n\n if (!hasField) {\n return (\n <div ref={ref} className={className}>\n {triggerContent}\n </div>\n );\n }\n\n return (\n <DatePickerField\n ref={ref}\n disabled={disabled}\n error={error}\n className={className}\n label={label}\n required={required}\n helpText={helpText}\n labelProps={labelProps}\n errorId={errorId}\n helpTextId={helpTextId}\n errorTestId={`${testIdPrefix}-input-error`}\n >\n {triggerContent}\n </DatePickerField>\n );\n }\n);\n\nDatePicker.displayName = \"DatePicker\";\n\nexport { DatePicker };\n"],"names":["__iconNode","CalendarIcon","React","ChevronLeftIcon","ChevronRightIcon","Calendar","formatted"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,26 +1,201 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useEffect, forwardRef, useCallback, useState, useId, useMemo } from 'react';
|
|
3
3
|
import { Popover, PopoverAnchor, PopoverContent } from './primitives/Popover.js';
|
|
4
4
|
import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from './primitives/Field.js';
|
|
5
5
|
import { c as cn } from './utils-BJnb9o5c.js';
|
|
6
6
|
import { b as buildTestIdPrefix } from './fieldIds-VpluAAMl.js';
|
|
7
|
-
import { u as useControlledOpen, c as coerceToTimeValue, f as formatTimeWithPattern,
|
|
8
|
-
import {
|
|
7
|
+
import { p as padNumber, t as to12Hour, g as generateRange, a as to24Hour, u as useControlledOpen, c as coerceToTimeValue, f as formatTimeWithPattern, b as formatTimeDisplay, d as timeValueEquals, e as useOutsideClickClose, h as buildMaskTemplate, i as getDefaultTimeMaskFormat, j as useCursorRestore, C as Clock, k as timeValueToDayjs, l as getTimePlaceholder, m as applyMask, n as parseTimeWithPattern, o as parseTimeString } from './utils-Ca3DmOrC.js';
|
|
8
|
+
import { Button } from './primitives/Button.js';
|
|
9
|
+
import { ScrollArea } from './primitives/ScrollArea.js';
|
|
9
10
|
import { X } from './x-_o2T3n6D.js';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
const COLUMN_HEIGHT = 224;
|
|
13
|
+
const ITEM_HEIGHT = 32;
|
|
14
|
+
const PERIODS = ["AM", "PM"];
|
|
15
|
+
const SIZE_CONFIG = {
|
|
16
|
+
small: {
|
|
17
|
+
trigger: "h-8 md:h-7",
|
|
18
|
+
input: "text-base md:text-xs",
|
|
19
|
+
icon: "size-3.5"
|
|
20
|
+
},
|
|
21
|
+
medium: {
|
|
22
|
+
trigger: "h-8",
|
|
23
|
+
input: "text-base md:text-sm",
|
|
24
|
+
icon: "size-4"
|
|
25
|
+
},
|
|
26
|
+
large: {
|
|
27
|
+
trigger: "h-10",
|
|
28
|
+
input: "text-base md:text-sm",
|
|
29
|
+
icon: "size-5"
|
|
30
|
+
}
|
|
31
|
+
};
|
|
17
32
|
|
|
33
|
+
const TimeColumn = ({
|
|
34
|
+
items,
|
|
35
|
+
selected,
|
|
36
|
+
onSelect,
|
|
37
|
+
disabled = false,
|
|
38
|
+
className,
|
|
39
|
+
padStart = 2
|
|
40
|
+
}) => {
|
|
41
|
+
const selectedRef = useRef(null);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (selectedRef.current) {
|
|
44
|
+
selectedRef.current.scrollIntoView({
|
|
45
|
+
block: "center",
|
|
46
|
+
behavior: "smooth"
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}, [selected]);
|
|
50
|
+
return /* @__PURE__ */ jsx(
|
|
51
|
+
ScrollArea,
|
|
52
|
+
{
|
|
53
|
+
className: cn("w-16", className),
|
|
54
|
+
style: { height: COLUMN_HEIGHT },
|
|
55
|
+
children: /* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
className: "flex flex-col items-center py-2",
|
|
59
|
+
role: "listbox",
|
|
60
|
+
"aria-label": "Time selection",
|
|
61
|
+
children: items.map((item) => {
|
|
62
|
+
const isSelected = item === selected;
|
|
63
|
+
const displayValue = typeof item === "number" ? padNumber(item, padStart) : item;
|
|
64
|
+
return /* @__PURE__ */ jsx(
|
|
65
|
+
Button,
|
|
66
|
+
{
|
|
67
|
+
ref: isSelected ? selectedRef : void 0,
|
|
68
|
+
variant: isSelected ? "default" : "ghost",
|
|
69
|
+
size: "sm",
|
|
70
|
+
role: "option",
|
|
71
|
+
"aria-selected": isSelected,
|
|
72
|
+
disabled,
|
|
73
|
+
className: cn(
|
|
74
|
+
"w-12 justify-center font-mono text-sm",
|
|
75
|
+
!isSelected && "text-muted-foreground"
|
|
76
|
+
),
|
|
77
|
+
style: { height: ITEM_HEIGHT },
|
|
78
|
+
onClick: () => onSelect(item),
|
|
79
|
+
children: displayValue
|
|
80
|
+
},
|
|
81
|
+
item
|
|
82
|
+
);
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
TimeColumn.displayName = "TimeColumn";
|
|
18
90
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
91
|
+
const TimePickerPanel = forwardRef(
|
|
92
|
+
({
|
|
93
|
+
value,
|
|
94
|
+
onChange,
|
|
95
|
+
format = "24",
|
|
96
|
+
showSeconds = false,
|
|
97
|
+
minuteStep = 1,
|
|
98
|
+
secondStep = 1,
|
|
99
|
+
disabled = false,
|
|
100
|
+
className
|
|
101
|
+
}, ref) => {
|
|
102
|
+
const getInitialTime = useCallback(
|
|
103
|
+
() => ({
|
|
104
|
+
hours: value?.hours ?? 0,
|
|
105
|
+
minutes: value?.minutes ?? 0,
|
|
106
|
+
seconds: value?.seconds ?? 0
|
|
107
|
+
}),
|
|
108
|
+
[value]
|
|
109
|
+
);
|
|
110
|
+
const [internalTime, setInternalTime] = useState(getInitialTime);
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
setInternalTime(getInitialTime());
|
|
113
|
+
}, [getInitialTime]);
|
|
114
|
+
const hours = format === "12" ? generateRange(1, 12) : generateRange(0, 23);
|
|
115
|
+
const minutes = generateRange(0, 59, minuteStep);
|
|
116
|
+
const seconds = generateRange(0, 59, secondStep);
|
|
117
|
+
const { hour12, period } = format === "12" ? to12Hour(internalTime.hours) : { hour12: internalTime.hours, period: "AM" };
|
|
118
|
+
const handleHourSelect = (hourValue) => {
|
|
119
|
+
const hour = Number(hourValue);
|
|
120
|
+
const newHours = format === "12" ? to24Hour(hour, period) : hour;
|
|
121
|
+
const newTime = { ...internalTime, hours: newHours };
|
|
122
|
+
setInternalTime(newTime);
|
|
123
|
+
onChange?.(newTime);
|
|
124
|
+
};
|
|
125
|
+
const handleMinuteSelect = (minuteValue) => {
|
|
126
|
+
const newTime = { ...internalTime, minutes: Number(minuteValue) };
|
|
127
|
+
setInternalTime(newTime);
|
|
128
|
+
onChange?.(newTime);
|
|
129
|
+
};
|
|
130
|
+
const handleSecondSelect = (secondValue) => {
|
|
131
|
+
const newTime = { ...internalTime, seconds: Number(secondValue) };
|
|
132
|
+
setInternalTime(newTime);
|
|
133
|
+
onChange?.(newTime);
|
|
134
|
+
};
|
|
135
|
+
const handlePeriodSelect = (newPeriod) => {
|
|
136
|
+
const newHours = to24Hour(hour12, newPeriod);
|
|
137
|
+
const newTime = { ...internalTime, hours: newHours };
|
|
138
|
+
setInternalTime(newTime);
|
|
139
|
+
onChange?.(newTime);
|
|
140
|
+
};
|
|
141
|
+
return /* @__PURE__ */ jsxs(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
ref,
|
|
145
|
+
className: cn("flex", className),
|
|
146
|
+
role: "group",
|
|
147
|
+
"aria-label": "Time picker",
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ jsx(
|
|
150
|
+
TimeColumn,
|
|
151
|
+
{
|
|
152
|
+
items: hours,
|
|
153
|
+
selected: format === "12" ? hour12 : internalTime.hours,
|
|
154
|
+
onSelect: handleHourSelect,
|
|
155
|
+
disabled
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
/* @__PURE__ */ jsx("div", { className: "border-inline-end border-border" }),
|
|
159
|
+
/* @__PURE__ */ jsx(
|
|
160
|
+
TimeColumn,
|
|
161
|
+
{
|
|
162
|
+
items: minutes,
|
|
163
|
+
selected: internalTime.minutes,
|
|
164
|
+
onSelect: handleMinuteSelect,
|
|
165
|
+
disabled
|
|
166
|
+
}
|
|
167
|
+
),
|
|
168
|
+
showSeconds && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
169
|
+
/* @__PURE__ */ jsx("div", { className: "border-inline-end border-border" }),
|
|
170
|
+
/* @__PURE__ */ jsx(
|
|
171
|
+
TimeColumn,
|
|
172
|
+
{
|
|
173
|
+
items: seconds,
|
|
174
|
+
selected: internalTime.seconds ?? 0,
|
|
175
|
+
onSelect: handleSecondSelect,
|
|
176
|
+
disabled
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
] }),
|
|
180
|
+
format === "12" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
181
|
+
/* @__PURE__ */ jsx("div", { className: "border-inline-end border-border" }),
|
|
182
|
+
/* @__PURE__ */ jsx(
|
|
183
|
+
TimeColumn,
|
|
184
|
+
{
|
|
185
|
+
items: [...PERIODS],
|
|
186
|
+
selected: period,
|
|
187
|
+
onSelect: handlePeriodSelect,
|
|
188
|
+
disabled,
|
|
189
|
+
padStart: 0
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] })
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
);
|
|
198
|
+
TimePickerPanel.displayName = "TimePickerPanel";
|
|
24
199
|
|
|
25
200
|
const TimePicker = forwardRef(
|
|
26
201
|
({
|
|
@@ -459,5 +634,5 @@ const TimePicker = forwardRef(
|
|
|
459
634
|
);
|
|
460
635
|
TimePicker.displayName = "TimePicker";
|
|
461
636
|
|
|
462
|
-
export { TimePicker as T };
|
|
463
|
-
//# sourceMappingURL=TimePicker-
|
|
637
|
+
export { TimePicker as T, TimePickerPanel as a };
|
|
638
|
+
//# sourceMappingURL=TimePicker-CJ8K2zea.js.map
|