@bigbinary/neeto-atoms 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/{DatePicker-BiUWzq-V.js → DatePicker-CMlA-hNW.js} +475 -272
  2. package/dist/DatePicker-CMlA-hNW.js.map +1 -0
  3. package/dist/{TimePicker-CJ8K2zea.js → TimePicker-DNeKmsBO.js} +5 -1
  4. package/dist/TimePicker-DNeKmsBO.js.map +1 -0
  5. package/dist/{TranslationProvider-BJjfFEgX.js → TranslationProvider-DKdbPweu.js} +9 -2
  6. package/dist/{TranslationProvider-BJjfFEgX.js.map → TranslationProvider-DKdbPweu.js.map} +1 -1
  7. package/dist/cjs/{DatePicker-C_nezxpH.js → DatePicker-CBxWLALJ.js} +474 -271
  8. package/dist/cjs/DatePicker-CBxWLALJ.js.map +1 -0
  9. package/dist/cjs/{TimePicker-BhOW7vbV.js → TimePicker-CDw_m3LR.js} +5 -1
  10. package/dist/cjs/TimePicker-CDw_m3LR.js.map +1 -0
  11. package/dist/cjs/{TranslationProvider-C1JDwKEN.js → TranslationProvider-Cao2ugzJ.js} +9 -2
  12. package/dist/cjs/{TranslationProvider-C1JDwKEN.js.map → TranslationProvider-Cao2ugzJ.js.map} +1 -1
  13. package/dist/cjs/components/DatePicker.js +1 -1
  14. package/dist/cjs/components/TimePicker.js +1 -1
  15. package/dist/cjs/components/TranslationProvider.js +1 -1
  16. package/dist/cjs/components/index.js +3 -3
  17. package/dist/cjs/formik/Form.js +1 -0
  18. package/dist/cjs/formik/Form.js.map +1 -1
  19. package/dist/cjs/index.js +3 -3
  20. package/dist/components/DatePicker/DatePickerFooter.d.ts +1 -1
  21. package/dist/components/DatePicker/RangeCalendar.d.ts +2 -1
  22. package/dist/components/DatePicker/RangeTimeSection.d.ts +37 -0
  23. package/dist/components/DatePicker/SegmentedTimeInput.d.ts +7 -1
  24. package/dist/components/DatePicker/TimeSection.d.ts +3 -0
  25. package/dist/components/DatePicker/types.d.ts +5 -2
  26. package/dist/components/DatePicker/useRangePicker.d.ts +4 -2
  27. package/dist/components/DatePicker/utils.d.ts +1 -0
  28. package/dist/components/DatePicker.js +1 -1
  29. package/dist/components/TimePicker.js +1 -1
  30. package/dist/components/TranslationProvider.js +1 -1
  31. package/dist/components/index.js +3 -3
  32. package/dist/formik/Form.js +1 -0
  33. package/dist/formik/Form.js.map +1 -1
  34. package/dist/index.js +3 -3
  35. package/dist/translations/index.d.ts +7 -0
  36. package/package.json +1 -1
  37. package/dist/DatePicker-BiUWzq-V.js.map +0 -1
  38. package/dist/TimePicker-CJ8K2zea.js.map +0 -1
  39. package/dist/cjs/DatePicker-C_nezxpH.js.map +0 -1
  40. package/dist/cjs/TimePicker-BhOW7vbV.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatePicker-C_nezxpH.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 type: \"date\" | \"range\"\n): string => {\n const single = 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(dateFormat, type);\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","createLucideIcon","pureDayjs","customParseFormat","dayjs","cn","jsx","jsxs","Button","forwardRef","Field","FieldLabel","FieldContent","FieldError","FieldDescription","PopoverAnchor","CalendarIcon","X","padNumber","to12Hour","to24Hour","useTranslation","useRef","useState","useEffect","timeValueEquals","React","useId","useCallback","Label","Clock","Switch","ChevronLeftIcon","ChevronRightIcon","Calendar","useMemo","useControlledOpen","isFixedWidthFormat","buildRangeMaskTemplate","buildMaskTemplate","formatted","useOutsideClickClose","dateToTimeValue","applyMask","useCursorRestore","buildTestIdPrefix","Popover","PopoverTrigger","PopoverContent"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimePicker-BhOW7vbV.js","sources":["../../src/components/TimePicker/constants.ts","../../src/components/TimePicker/TimeColumn.tsx","../../src/components/TimePicker/TimePickerPanel.tsx","../../src/components/TimePicker/TimePicker.tsx"],"sourcesContent":["export const COLUMN_HEIGHT = 224;\nexport const ITEM_HEIGHT = 32;\nexport const PERIODS = [\"AM\", \"PM\"] as const;\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 React, { useEffect, useRef } from \"react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { ScrollArea } from \"src/primitives/ScrollArea\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { COLUMN_HEIGHT, ITEM_HEIGHT } from \"./constants\";\nimport { padNumber } from \"./utils\";\n\ninterface TimeColumnProps {\n items: (number | string)[];\n selected: number | string;\n onSelect: (value: number | string) => void;\n disabled?: boolean;\n className?: string;\n padStart?: number;\n}\n\nconst TimeColumn: React.FC<TimeColumnProps> = ({\n items,\n selected,\n onSelect,\n disabled = false,\n className,\n padStart = 2,\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (selectedRef.current) {\n selectedRef.current.scrollIntoView({\n block: \"center\",\n behavior: \"smooth\",\n });\n }\n }, [selected]);\n\n return (\n <ScrollArea\n className={cn(\"w-16\", className)}\n style={{ height: COLUMN_HEIGHT }}\n >\n <div\n className=\"flex flex-col items-center py-2\"\n role=\"listbox\"\n aria-label=\"Time selection\"\n >\n {items.map(item => {\n const isSelected = item === selected;\n const displayValue =\n typeof item === \"number\" ? padNumber(item, padStart) : item;\n\n return (\n <Button\n key={item}\n ref={isSelected ? selectedRef : undefined}\n variant={isSelected ? \"default\" : \"ghost\"}\n size=\"sm\"\n role=\"option\"\n aria-selected={isSelected}\n disabled={disabled}\n className={cn(\n \"w-12 justify-center font-mono text-sm\",\n !isSelected && \"text-muted-foreground\"\n )}\n style={{ height: ITEM_HEIGHT }}\n onClick={() => onSelect(item)}\n >\n {displayValue}\n </Button>\n );\n })}\n </div>\n </ScrollArea>\n );\n};\n\nTimeColumn.displayName = \"TimeColumn\";\n\nexport { TimeColumn };\n","import { forwardRef, useCallback, useEffect, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { PERIODS } from \"./constants\";\nimport { TimeColumn } from \"./TimeColumn\";\nimport type { TimePickerPanelProps, TimeValue } from \"./types\";\nimport { generateRange, to12Hour, to24Hour } from \"./utils\";\n\nconst TimePickerPanel = forwardRef<HTMLDivElement, TimePickerPanelProps>(\n (\n {\n value,\n onChange,\n format = \"24\",\n showSeconds = false,\n minuteStep = 1,\n secondStep = 1,\n disabled = false,\n className,\n },\n ref\n ) => {\n const getInitialTime = useCallback(\n (): TimeValue => ({\n hours: value?.hours ?? 0,\n minutes: value?.minutes ?? 0,\n seconds: value?.seconds ?? 0,\n }),\n [value]\n );\n\n const [internalTime, setInternalTime] = useState<TimeValue>(getInitialTime);\n\n useEffect(() => {\n setInternalTime(getInitialTime());\n }, [getInitialTime]);\n\n const hours = format === \"12\" ? generateRange(1, 12) : generateRange(0, 23);\n const minutes = generateRange(0, 59, minuteStep);\n const seconds = generateRange(0, 59, secondStep);\n\n const { hour12, period } =\n format === \"12\"\n ? to12Hour(internalTime.hours)\n : { hour12: internalTime.hours, period: \"AM\" as const };\n\n const handleHourSelect = (hourValue: number | string) => {\n const hour = Number(hourValue);\n const newHours = format === \"12\" ? to24Hour(hour, period) : hour;\n const newTime = { ...internalTime, hours: newHours };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n const handleMinuteSelect = (minuteValue: number | string) => {\n const newTime = { ...internalTime, minutes: Number(minuteValue) };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n const handleSecondSelect = (secondValue: number | string) => {\n const newTime = { ...internalTime, seconds: Number(secondValue) };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n const handlePeriodSelect = (newPeriod: number | string) => {\n const newHours = to24Hour(hour12, newPeriod as \"AM\" | \"PM\");\n const newTime = { ...internalTime, hours: newHours };\n setInternalTime(newTime);\n onChange?.(newTime);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"flex\", className)}\n role=\"group\"\n aria-label=\"Time picker\"\n >\n <TimeColumn\n items={hours}\n selected={format === \"12\" ? hour12 : internalTime.hours}\n onSelect={handleHourSelect}\n disabled={disabled}\n />\n <div className=\"border-inline-end border-border\" />\n <TimeColumn\n items={minutes}\n selected={internalTime.minutes}\n onSelect={handleMinuteSelect}\n disabled={disabled}\n />\n {showSeconds && (\n <>\n <div className=\"border-inline-end border-border\" />\n <TimeColumn\n items={seconds}\n selected={internalTime.seconds ?? 0}\n onSelect={handleSecondSelect}\n disabled={disabled}\n />\n </>\n )}\n {format === \"12\" && (\n <>\n <div className=\"border-inline-end border-border\" />\n <TimeColumn\n items={[...PERIODS]}\n selected={period}\n onSelect={handlePeriodSelect}\n disabled={disabled}\n padStart={0}\n />\n </>\n )}\n </div>\n );\n }\n);\n\nTimePickerPanel.displayName = \"TimePickerPanel\";\n\nexport { TimePickerPanel };\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Clock, X } from \"lucide-react\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"src/primitives/Popover\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { useControlledOpen } from \"src/hooks/useControlledOpen\";\nimport { useCursorRestore } from \"src/hooks/useCursorRestore\";\nimport { useOutsideClickClose } from \"src/hooks/useOutsideClickClose\";\n\nimport type { Dayjs } from \"dayjs\";\n\nimport { TimePickerPanel } from \"./TimePickerPanel\";\nimport { SIZE_CONFIG } from \"./constants\";\nimport type { TimePickerProps, TimeValue } from \"./types\";\nimport {\n coerceToTimeValue,\n formatTimeDisplay,\n formatTimeWithPattern,\n getDefaultTimeMaskFormat,\n getTimePlaceholder,\n parseTimeString,\n parseTimeWithPattern,\n timeValueEquals,\n timeValueToDayjs,\n} from \"./utils\";\nimport { applyMask, buildMaskTemplate } from \"src/utils/inputMask\";\n\ntype RangeSide = \"from\" | \"to\";\n\nconst TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n value,\n onChange,\n onBlur,\n type = \"time\",\n format = \"24\",\n displayFormat,\n showSeconds = false,\n minuteStep = 1,\n secondStep = 1,\n disabled = false,\n placeholder,\n label,\n error,\n helpText,\n size = \"medium\",\n required = false,\n timezone,\n open: openProp,\n onOpenChange,\n needConfirm = true,\n onOk,\n labelProps,\n className,\n dataTestId,\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const containerRef = useRef<HTMLDivElement>(null);\n const fromInputRef = useRef<HTMLInputElement>(null);\n const toInputRef = useRef<HTMLInputElement>(null);\n const fromCursorRef = useRef<number | null>(null);\n const toCursorRef = useRef<number | null>(null);\n\n const popoverContentId = useRef(\n `timepicker-popover-${generatedId}`\n ).current;\n\n const committedRef = useRef<{\n from: TimeValue | null;\n to: TimeValue | null;\n }>({ from: null, to: null });\n\n const { open, setOpen } = useControlledOpen(openProp, onOpenChange);\n\n const isRange = type === \"range\";\n\n const getInitialTimes = useCallback(() => {\n if (isRange) {\n if (!value || !Array.isArray(value)) {\n return { from: null, to: null };\n }\n\n return {\n from: coerceToTimeValue(value[0]),\n to: coerceToTimeValue(value[1]),\n };\n }\n\n return {\n from: coerceToTimeValue(\n value as TimeValue | Date | Dayjs | string | null | undefined\n ),\n to: null,\n };\n }, [value, isRange]);\n\n const formatOne = useCallback(\n (time: TimeValue | null) =>\n displayFormat\n ? formatTimeWithPattern(time, displayFormat)\n : formatTimeDisplay(time, format, showSeconds),\n [displayFormat, format, showSeconds]\n );\n\n const [activeSide, setActiveSide] = useState<RangeSide>(\"from\");\n const [fromTime, setFromTime] = useState(() => getInitialTimes().from);\n const [toTime, setToTime] = useState(() => getInitialTimes().to);\n\n const [fromText, setFromText] = useState(() =>\n formatOne(getInitialTimes().from)\n );\n const [toText, setToText] = useState(() => formatOne(getInitialTimes().to));\n\n const parseOne = (text: string): TimeValue | null =>\n displayFormat\n ? parseTimeWithPattern(text, displayFormat)\n : parseTimeString(text, format);\n\n const emitChange = (from: TimeValue | null, to: TimeValue | null) => {\n if (isRange) {\n if (!from || !to) {\n onChange?.(null, [\"\", \"\"]);\n\n return;\n }\n\n onChange?.(\n [timeValueToDayjs(from), timeValueToDayjs(to)],\n [formatOne(from), formatOne(to)]\n );\n\n return;\n }\n\n if (!from) {\n onChange?.(null, \"\");\n\n return;\n }\n\n onChange?.(timeValueToDayjs(from), formatOne(from));\n };\n\n const commitPendingOnClose = useCallback(() => {\n if (!needConfirm) {\n setFromText(formatOne(fromTime));\n setToText(formatOne(toTime));\n\n return;\n }\n\n const { from: committedFrom, to: committedTo } = committedRef.current;\n const unchanged =\n timeValueEquals(fromTime, committedFrom) &&\n timeValueEquals(toTime, committedTo);\n if (unchanged) return;\n\n emitChange(fromTime, toTime);\n committedRef.current = { from: fromTime, to: toTime };\n }, [needConfirm, fromTime, toTime, formatOne, isRange, onChange]);\n\n const closePopover = useCallback(() => {\n commitPendingOnClose();\n setOpen(false);\n }, [commitPendingOnClose, setOpen]);\n\n useOutsideClickClose({\n enabled: open,\n containerRef,\n popoverElementId: popoverContentId,\n onClose: closePopover,\n });\n\n const maskTemplate = useMemo(\n () =>\n displayFormat\n ? null\n : buildMaskTemplate(getDefaultTimeMaskFormat(format, showSeconds)),\n [displayFormat, format, showSeconds]\n );\n\n const handleOk = () => {\n if (isRange && activeSide === \"from\" && fromTime && !toTime) {\n setActiveSide(\"to\");\n toInputRef.current?.focus();\n\n return;\n }\n\n committedRef.current = { from: fromTime, to: toTime };\n emitChange(fromTime, toTime);\n\n if (isRange) {\n if (fromTime && toTime) {\n onOk?.([timeValueToDayjs(fromTime), timeValueToDayjs(toTime)]);\n } else {\n onOk?.(null);\n }\n } else {\n onOk?.(fromTime ? timeValueToDayjs(fromTime) : null);\n }\n\n setOpen(false);\n };\n\n const handlePanelChange = (time: TimeValue) => {\n if (!isRange) {\n setFromTime(time);\n setFromText(formatOne(time));\n if (!needConfirm) emitChange(time, null);\n\n return;\n }\n\n if (activeSide === \"from\") {\n setFromTime(time);\n setFromText(formatOne(time));\n if (!needConfirm) emitChange(time, toTime);\n\n return;\n }\n\n setToTime(time);\n setToText(formatOne(time));\n if (!needConfirm) emitChange(fromTime, time);\n };\n\n const buildInputChangeHandler =\n (side: RangeSide) => (e: React.ChangeEvent<HTMLInputElement>) => {\n let text = e.target.value;\n const previousText = side === \"from\" ? fromText : toText;\n\n if (maskTemplate) {\n const masked = applyMask(\n text,\n maskTemplate,\n previousText,\n e.target.selectionStart\n );\n text = masked.text;\n\n if (side === \"from\") fromCursorRef.current = masked.cursorPosition;\n else toCursorRef.current = masked.cursorPosition;\n }\n\n if (side === \"from\") setFromText(text);\n else setToText(text);\n\n const parsed = parseOne(text);\n if (!parsed) return;\n\n if (side === \"from\") {\n setFromTime(parsed);\n if (!needConfirm) emitChange(parsed, toTime);\n } else {\n setToTime(parsed);\n if (!needConfirm) emitChange(fromTime, parsed);\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n const { from, to } = committedRef.current;\n setFromTime(from);\n setToTime(to);\n setFromText(formatOne(from));\n setToText(formatOne(to));\n setOpen(false);\n\n return;\n }\n\n if (e.key !== \"Enter\") return;\n\n if (needConfirm) {\n handleOk();\n\n return;\n }\n\n setFromText(formatOne(fromTime));\n setToText(formatOne(toTime));\n setOpen(false);\n };\n\n const handleInputFocus = (side: RangeSide) => {\n setActiveSide(side);\n if (!open) setOpen(true);\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 const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n setFromTime(null);\n setToTime(null);\n setFromText(\"\");\n setToText(\"\");\n\n committedRef.current = { from: null, to: null };\n onChange?.(null, isRange ? [\"\", \"\"] : \"\");\n };\n\n useEffect(() => {\n if (value === undefined) return;\n\n const next = getInitialTimes();\n setFromTime(next.from);\n setToTime(next.to);\n if (open) return;\n\n setFromText(formatOne(next.from));\n setToText(formatOne(next.to));\n committedRef.current = { from: next.from, to: next.to };\n }, [value, getInitialTimes, formatOne, open]);\n\n useEffect(() => {\n if (!open) return;\n\n committedRef.current = { from: fromTime, to: toTime };\n }, [open]);\n\n useCursorRestore([\n { inputRef: fromInputRef, cursorRef: fromCursorRef },\n { inputRef: toInputRef, cursorRef: toCursorRef },\n ]);\n\n const singlePlaceholder = getTimePlaceholder(\n format,\n showSeconds,\n displayFormat\n );\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n const hasAnyValue = !!(fromText || toText);\n const activeTime = activeSide === \"from\" ? fromTime : toTime;\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const inputBaseClass = cn(\n \"min-w-0 bg-transparent outline-none placeholder:text-placeholder\",\n \"disabled:cursor-not-allowed\",\n sizeConfig.input\n );\n\n const triggerContent = (\n <Popover open={open}>\n <PopoverAnchor asChild>\n <div\n ref={containerRef}\n className={cn(\n \"relative flex w-full 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 sizeConfig.trigger,\n !hasField && className\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 <Clock\n className={cn(\n \"shrink-0 text-muted-foreground\",\n sizeConfig.icon\n )}\n />\n )}\n {isRange ? (\n <>\n <input\n ref={fromInputRef}\n type=\"text\"\n disabled={disabled}\n aria-label={\n label ? `${label} start time` : \"Pick a start time\"\n }\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n placeholder={placeholder ?? singlePlaceholder}\n value={fromText}\n onChange={buildInputChangeHandler(\"from\")}\n onKeyDown={handleInputKeyDown}\n onFocus={() => handleInputFocus(\"from\")}\n onBlur={handleInputBlur}\n className={cn(inputBaseClass, \"flex-1\")}\n />\n <span\n aria-hidden=\"true\"\n className=\"shrink-0 text-muted-foreground\"\n >\n ~\n </span>\n <input\n ref={toInputRef}\n type=\"text\"\n disabled={disabled}\n aria-label={label ? `${label} end time` : \"Pick an end time\"}\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n placeholder={placeholder ?? singlePlaceholder}\n value={toText}\n onChange={buildInputChangeHandler(\"to\")}\n onKeyDown={handleInputKeyDown}\n onFocus={() => handleInputFocus(\"to\")}\n onBlur={handleInputBlur}\n className={cn(inputBaseClass, \"flex-1\")}\n />\n </>\n ) : (\n <input\n ref={fromInputRef}\n type=\"text\"\n disabled={disabled}\n aria-label={label || \"Pick a time\"}\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n placeholder={placeholder ?? singlePlaceholder}\n value={fromText}\n onChange={buildInputChangeHandler(\"from\")}\n onKeyDown={handleInputKeyDown}\n onFocus={() => handleInputFocus(\"from\")}\n onBlur={handleInputBlur}\n className={cn(inputBaseClass, \"flex-1\")}\n />\n )}\n <button\n type=\"button\"\n onPointerDown={e => e.preventDefault()}\n onClick={handleClear}\n className={cn(\n \"absolute inset-y-0 end-2 flex items-center text-muted-foreground hover:text-foreground focus:outline-none\",\n !(hasAnyValue && !disabled) && \"invisible\"\n )}\n aria-label={isRange ? \"Clear time range\" : \"Clear time\"}\n tabIndex={-1}\n >\n <X className={sizeConfig.icon} />\n </button>\n </div>\n </PopoverAnchor>\n {open && (\n <PopoverContent\n id={popoverContentId}\n className=\"w-auto p-0\"\n align=\"start\"\n onOpenAutoFocus={e => e.preventDefault()}\n onCloseAutoFocus={e => e.preventDefault()}\n onPointerDownOutside={e => e.preventDefault()}\n onInteractOutside={e => e.preventDefault()}\n >\n <TimePickerPanel\n value={activeTime ?? undefined}\n onChange={handlePanelChange}\n format={format}\n showSeconds={showSeconds}\n minuteStep={minuteStep}\n secondStep={secondStep}\n disabled={disabled}\n />\n {needConfirm && (\n <div className=\"flex items-center justify-end border-t border-border px-3 py-2\">\n <button\n type=\"button\"\n onClick={handleOk}\n className=\"rounded bg-primary px-3 py-1 text-sm font-medium text-primary-foreground hover:bg-primary/90 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n OK\n </button>\n </div>\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 <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 {triggerContent}\n {!!error && (\n <FieldError\n id={errorId}\n data-testid={`${testIdPrefix}-input-error`}\n >\n {error}\n </FieldError>\n )}\n {helpText && (\n <FieldDescription\n id={helpTextId}\n data-testid={`${testIdPrefix}-input-help`}\n >\n {helpText}\n </FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTimePicker.displayName = \"TimePicker\";\n\nexport { TimePicker };\n"],"names":["useRef","useEffect","jsx","ScrollArea","cn","padNumber","Button","forwardRef","useCallback","useState","generateRange","to12Hour","to24Hour","jsxs","Fragment","useId","buildTestIdPrefix","useControlledOpen","coerceToTimeValue","formatTimeWithPattern","formatTimeDisplay","parseTimeWithPattern","parseTimeString","timeValueToDayjs","timeValueEquals","useOutsideClickClose","useMemo","buildMaskTemplate","getDefaultTimeMaskFormat","applyMask","useCursorRestore","getTimePlaceholder","Popover","PopoverAnchor","Clock","X","PopoverContent","Field","FieldLabel","FieldContent","FieldError","FieldDescription"],"mappings":"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"}