@mieweb/ui 0.7.3-dev.12 → 0.7.3-dev.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3X4GPM35.js → chunk-33TQ25IK.js} +7 -7
- package/dist/{chunk-3X4GPM35.js.map → chunk-33TQ25IK.js.map} +1 -1
- package/dist/{chunk-WWIBIUWT.cjs → chunk-35HHCXWC.cjs} +36 -36
- package/dist/{chunk-WWIBIUWT.cjs.map → chunk-35HHCXWC.cjs.map} +1 -1
- package/dist/{chunk-FXTNCCD2.js → chunk-3IMM2PM4.js} +20 -4
- package/dist/chunk-3IMM2PM4.js.map +1 -0
- package/dist/{chunk-VAKZEVDE.cjs → chunk-56QJHQ5C.cjs} +79 -41
- package/dist/chunk-56QJHQ5C.cjs.map +1 -0
- package/dist/{chunk-DMIQS5KK.js → chunk-753Z3NXL.js} +3 -3
- package/dist/{chunk-DMIQS5KK.js.map → chunk-753Z3NXL.js.map} +1 -1
- package/dist/{chunk-SMGNJGFT.cjs → chunk-7AECNMYV.cjs} +5 -5
- package/dist/{chunk-SMGNJGFT.cjs.map → chunk-7AECNMYV.cjs.map} +1 -1
- package/dist/{chunk-UGJFT2QF.js → chunk-A5YOIJKL.js} +5 -5
- package/dist/{chunk-UGJFT2QF.js.map → chunk-A5YOIJKL.js.map} +1 -1
- package/dist/{chunk-N7JVAXHD.cjs → chunk-BOW7ZGI2.cjs} +4 -4
- package/dist/{chunk-N7JVAXHD.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
- package/dist/{chunk-NHR33YWI.cjs → chunk-BSDBI6H7.cjs} +17 -6
- package/dist/chunk-BSDBI6H7.cjs.map +1 -0
- package/dist/{chunk-CLT4ASY7.js → chunk-EPSB4WTL.js} +3 -3
- package/dist/{chunk-CLT4ASY7.js.map → chunk-EPSB4WTL.js.map} +1 -1
- package/dist/{chunk-G6GJXVQC.cjs → chunk-G7EQ3JPX.cjs} +5 -5
- package/dist/{chunk-G6GJXVQC.cjs.map → chunk-G7EQ3JPX.cjs.map} +1 -1
- package/dist/{chunk-PCWIN32O.cjs → chunk-GQVL2JKQ.cjs} +4 -4
- package/dist/{chunk-PCWIN32O.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
- package/dist/{chunk-6H7NO5XX.js → chunk-GXODR6V4.js} +3 -3
- package/dist/{chunk-6H7NO5XX.js.map → chunk-GXODR6V4.js.map} +1 -1
- package/dist/{chunk-GP5CRU2I.js → chunk-H3YO5GBM.js} +17 -6
- package/dist/chunk-H3YO5GBM.js.map +1 -0
- package/dist/{chunk-UZJDXFQE.cjs → chunk-HUDYTCTT.cjs} +4 -4
- package/dist/{chunk-UZJDXFQE.cjs.map → chunk-HUDYTCTT.cjs.map} +1 -1
- package/dist/{chunk-UHVNVZ7L.js → chunk-IILJGFI5.js} +5 -4
- package/dist/chunk-IILJGFI5.js.map +1 -0
- package/dist/{chunk-LFSP53TY.cjs → chunk-KVE7PQ5P.cjs} +7 -7
- package/dist/{chunk-LFSP53TY.cjs.map → chunk-KVE7PQ5P.cjs.map} +1 -1
- package/dist/{chunk-DIL553SJ.cjs → chunk-LQHI44OZ.cjs} +13 -13
- package/dist/{chunk-DIL553SJ.cjs.map → chunk-LQHI44OZ.cjs.map} +1 -1
- package/dist/{chunk-GV3DE6KR.js → chunk-LZU7YBXG.js} +3 -3
- package/dist/{chunk-GV3DE6KR.js.map → chunk-LZU7YBXG.js.map} +1 -1
- package/dist/{chunk-ICMR3TYV.js → chunk-QHTDWIED.js} +3 -3
- package/dist/{chunk-ICMR3TYV.js.map → chunk-QHTDWIED.js.map} +1 -1
- package/dist/{chunk-3KY5W3ZN.cjs → chunk-U5TTXN45.cjs} +9 -8
- package/dist/chunk-U5TTXN45.cjs.map +1 -0
- package/dist/{chunk-U35KWHXP.js → chunk-XBKOZRDO.js} +79 -41
- package/dist/chunk-XBKOZRDO.js.map +1 -0
- package/dist/{chunk-F7CQ5RO7.cjs → chunk-Z5S5JEJD.cjs} +20 -3
- package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
- package/dist/{chunk-WUPT5SUN.js → chunk-ZIE52CWX.js} +3 -3
- package/dist/{chunk-WUPT5SUN.js.map → chunk-ZIE52CWX.js.map} +1 -1
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/Autocomplete/index.cjs +3 -3
- package/dist/components/Autocomplete/index.js +2 -2
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Card/index.d.cts +1 -1
- package/dist/components/Card/index.d.ts +1 -1
- package/dist/components/Checkbox/index.cjs +5 -5
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/DateInput/index.cjs +3 -3
- package/dist/components/DateInput/index.d.cts +1 -0
- package/dist/components/DateInput/index.d.ts +1 -0
- package/dist/components/DateInput/index.js +2 -2
- package/dist/components/Dropdown/index.cjs +8 -8
- package/dist/components/Dropdown/index.js +2 -2
- package/dist/components/Input/index.cjs +10 -6
- package/dist/components/Input/index.d.cts +13 -1
- package/dist/components/Input/index.d.ts +13 -1
- package/dist/components/Input/index.js +1 -1
- package/dist/components/MediaEditor/index.cjs +9 -9
- package/dist/components/MediaEditor/index.js +4 -4
- package/dist/components/PhoneInput/index.cjs +4 -4
- package/dist/components/PhoneInput/index.js +2 -2
- package/dist/components/Progress/index.d.cts +1 -1
- package/dist/components/Progress/index.d.ts +1 -1
- package/dist/components/Radio/index.cjs +5 -5
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/RichTextEditor/index.cjs +6 -6
- package/dist/components/RichTextEditor/index.js +3 -3
- package/dist/components/Select/index.cjs +5 -3
- package/dist/components/Select/index.d.cts +47 -9
- package/dist/components/Select/index.d.ts +47 -9
- package/dist/components/Select/index.js +3 -1
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/Spinner/index.d.cts +1 -1
- package/dist/components/Spinner/index.d.ts +1 -1
- package/dist/components/SuperChat/index.cjs +6 -6
- package/dist/components/SuperChat/index.js +2 -2
- package/dist/components/Text/index.d.cts +1 -1
- package/dist/components/Text/index.d.ts +1 -1
- package/dist/components/Textarea/index.cjs +5 -3
- package/dist/components/Textarea/index.d.cts +8 -0
- package/dist/components/Textarea/index.d.ts +8 -0
- package/dist/components/Textarea/index.js +3 -1
- package/dist/esheet.cjs +9 -9
- package/dist/esheet.js +6 -6
- package/dist/index.cjs +295 -291
- package/dist/index.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +20 -20
- package/package.json +1 -1
- package/dist/chunk-3KY5W3ZN.cjs.map +0 -1
- package/dist/chunk-F7CQ5RO7.cjs.map +0 -1
- package/dist/chunk-FXTNCCD2.js.map +0 -1
- package/dist/chunk-GP5CRU2I.js.map +0 -1
- package/dist/chunk-NHR33YWI.cjs.map +0 -1
- package/dist/chunk-U35KWHXP.js.map +0 -1
- package/dist/chunk-UHVNVZ7L.js.map +0 -1
- package/dist/chunk-VAKZEVDE.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/DateInput/DateInput.tsx"],"names":["year","month","day","isValidDate","parseDateValue","formatDateValue","isDateInPast","calculateAge","isDateInFuture","React","useAnchoredPosition","jsxs","cn","jsx","Fragment","Input","RequiredMark","inputVariants","floatingLabelVariants","Clock","Calendar","createPortal"],"mappings":"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","file":"chunk-U5TTXN45.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport {\n formatDateValue,\n isValidDate,\n parseDateValue,\n isDateInPast,\n isDateInFuture,\n calculateAge,\n} from '../../utils/date';\nimport {\n Input,\n RequiredMark,\n inputVariants,\n floatingLabelVariants,\n type InputProps,\n} from '../Input';\nimport { Calendar, Clock } from 'lucide-react';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\nexport type DateInputMode =\n | 'default'\n | 'dob'\n | 'expiration'\n | 'past'\n | 'future';\n\nexport type DateInputType =\n | 'date'\n | 'datetime-local'\n | 'time'\n | 'month'\n | 'year';\n\nexport type DateInputWidth = 'full' | 'fit' | 'fixed';\n\nexport type DateInputTimeFormat = '12-hour' | '24-hour';\n\nconst widthClasses: Record<DateInputWidth, string> = {\n full: 'w-full',\n fit: 'w-fit',\n fixed: 'w-44', // ~176px - enough for MM/DD/YYYY + calendar icon\n};\n\nconst MONTH_NAMES = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\ninterface PickerDate {\n month: number;\n year: number;\n day: number | null;\n}\n\nfunction isValidPickerDate(year: number, month: number, day: number): boolean {\n return (\n Number.isFinite(year) &&\n month >= 1 &&\n month <= 12 &&\n day >= 1 &&\n day <= new Date(year, month, 0).getDate()\n );\n}\n\nfunction parsePickerDate(\n value: string,\n inputType: DateInputType\n): PickerDate | undefined {\n if (inputType === 'datetime-local') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})T\\d{2}:\\d{2}$/.exec(value);\n if (!match) return undefined;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const [hour, minute] = value.slice(-5).split(':').map(Number);\n if (!isValidPickerDate(year, month, day) || hour > 23 || minute > 59) {\n return undefined;\n }\n return {\n year,\n month: month - 1,\n day,\n };\n }\n\n if (inputType === 'month') {\n const match = /^(\\d{4})-(\\d{2})$/.exec(value);\n if (!match) return undefined;\n const year = Number(match[1]);\n const month = Number(match[2]);\n if (!Number.isFinite(year) || month < 1 || month > 12) return undefined;\n return { year, month: month - 1, day: null };\n }\n\n if (!isValidDate(value)) return undefined;\n const [month, day, year] = value.split('/').map(Number);\n return { month: month - 1, year, day };\n}\n\nfunction formatTimeDisplay(\n time: string,\n timeFormat: DateInputTimeFormat\n): string {\n const [hour, minute] = time.split(':').map(Number);\n if (timeFormat === '12-hour') {\n const displayHour = hour % 12 || 12;\n const meridiem = hour >= 12 ? 'PM' : 'AM';\n return `${displayHour}:${String(minute).padStart(2, '0')} ${meridiem}`;\n }\n return time;\n}\n\nfunction formatPickerValue(\n value: string,\n inputType: DateInputType,\n timeFormat: DateInputTimeFormat\n): string {\n if (inputType === 'datetime-local') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}:\\d{2})$/.exec(value);\n if (!match) return '';\n return `${match[2]}/${match[3]}/${match[1]} ${formatTimeDisplay(match[4], timeFormat)}`;\n }\n\n if (inputType === 'time') {\n return /^\\d{2}:\\d{2}$/.test(value)\n ? formatTimeDisplay(value, timeFormat)\n : '';\n }\n\n if (inputType === 'month') {\n const date = parsePickerDate(value, inputType);\n return date ? `${MONTH_NAMES[date.month]} ${date.year}` : '';\n }\n\n return value;\n}\n\nexport interface DateInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The value for the selected input type. Dates use MM/DD/YYYY format. */\n value?: string;\n /** Callback fired when the value changes */\n onChange?: (value: string) => void;\n /** Date value format and picker control. */\n inputType?: DateInputType;\n /** Minute increment for the time picker (e.g. 15 shows :00, :15, :30, :45). */\n minuteStep?: number;\n /** Time picker display format for datetime values. */\n timeFormat?: DateInputTimeFormat;\n /** Validation mode for the date input */\n mode?: DateInputMode;\n /** Minimum age for DOB validation (default: 0) */\n minAge?: number;\n /** Maximum age for DOB validation */\n maxAge?: number;\n /** Earliest allowed date in MM/DD/YYYY format. */\n minDate?: string;\n /** Latest allowed date in MM/DD/YYYY format. */\n maxDate?: string;\n /** Whether to validate on blur */\n validateOnBlur?: boolean;\n /** Whether to show a calendar picker button */\n showCalendar?: boolean;\n /** Width behavior of the input */\n width?: DateInputWidth;\n}\n\nfunction getValidationError(\n value: string,\n mode: DateInputMode,\n minAge?: number,\n maxAge?: number,\n minDate?: string,\n maxDate?: string\n): string | undefined {\n if (!value || value.replace(/\\D/g, '').length === 0) {\n return undefined;\n }\n\n if (!isValidDate(value)) {\n return 'Please enter a valid date (MM/DD/YYYY)';\n }\n\n const selectedDate = parseDateValue(value);\n const minimumDate = minDate ? parseDateValue(minDate) : null;\n const maximumDate = maxDate ? parseDateValue(maxDate) : null;\n const minimumDateLabel = minDate ? formatDateValue(minDate) : '';\n const maximumDateLabel = maxDate ? formatDateValue(maxDate) : '';\n\n if (selectedDate && minimumDate && selectedDate < minimumDate) {\n return `Date must be on or after ${minimumDateLabel}`;\n }\n\n if (selectedDate && maximumDate && selectedDate > maximumDate) {\n return `Date must be on or before ${maximumDateLabel}`;\n }\n\n switch (mode) {\n case 'dob': {\n if (!isDateInPast(value)) {\n return 'Date of birth must be in the past';\n }\n const age = calculateAge(value);\n if (age !== null) {\n if (minAge !== undefined && age < minAge) {\n return `Must be at least ${minAge} years old`;\n }\n if (maxAge !== undefined && age > maxAge) {\n return `Must be no more than ${maxAge} years old`;\n }\n }\n break;\n }\n case 'expiration':\n if (!isDateInFuture(value)) {\n return 'Expiration date must be in the future';\n }\n break;\n case 'past':\n if (!isDateInPast(value)) {\n return 'Date must be in the past';\n }\n break;\n case 'future':\n if (!isDateInFuture(value)) {\n return 'Date must be in the future';\n }\n break;\n }\n\n return undefined;\n}\n\n/**\n * A date input that automatically formats to MM/DD/YYYY with validation modes.\n *\n * @example\n * ```tsx\n * // Date of birth with age validation\n * <DateInput\n * label=\"Date of Birth\"\n * mode=\"dob\"\n * minAge={18}\n * validateOnBlur\n * />\n *\n * // With calendar picker\n * <DateInput\n * label=\"Select Date\"\n * showCalendar\n * />\n *\n * // Expiration date\n * <DateInput\n * label=\"License Expiration\"\n * mode=\"expiration\"\n * validateOnBlur\n * />\n * ```\n */\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value = '',\n onChange,\n inputType = 'date',\n minuteStep = 1,\n timeFormat = '24-hour',\n mode = 'default',\n minAge,\n maxAge,\n minDate,\n maxDate,\n validateOnBlur,\n showCalendar = false,\n width = 'full',\n className,\n onBlur,\n onClick,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const isFormattedDate = inputType === 'date';\n const [displayValue, setDisplayValue] = React.useState(() =>\n isFormattedDate ? formatDateValue(value) : value\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(isFormattedDate ? formatDateValue(value) : value);\n }, [isFormattedDate, value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatDateValue(e.target.value);\n setDisplayValue(formatted);\n onChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const validationError = getValidationError(\n displayValue,\n mode,\n minAge,\n maxAge,\n minDate,\n maxDate\n );\n setLocalError(validationError);\n }\n };\n\n const placeholder = mode === 'expiration' ? 'MM/DD/YYYY' : 'MM/DD/YYYY';\n const autoComplete =\n mode === 'dob' ? 'bday' : mode === 'expiration' ? 'cc-exp' : undefined;\n\n // Generate stable ID for accessibility\n const generatedId = React.useId();\n\n // Calendar picker state\n const [isCalendarOpen, setIsCalendarOpen] = React.useState(false);\n\n // Portal + fixed positioning so the calendar escapes overflow-hidden\n // ancestors, flips vertically, and clamps to the viewport.\n const {\n anchorRef: buttonRef,\n floatingRef: calendarRef,\n style: calendarStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isCalendarOpen,\n placement: 'bottom-end',\n });\n\n // Parse current value into date parts for calendar\n const parsedDate = React.useMemo(() => {\n const fallback = new Date();\n return (\n parsePickerDate(displayValue, inputType) ?? {\n month: fallback.getMonth(),\n year: fallback.getFullYear(),\n day: null,\n }\n );\n }, [displayValue, inputType]);\n\n const [calendarMonth, setCalendarMonth] = React.useState(parsedDate.month);\n const [calendarYear, setCalendarYear] = React.useState(parsedDate.year);\n const [selectedTime, setSelectedTime] = React.useState(() => {\n if (inputType === 'time' && /^\\d{2}:\\d{2}$/.test(value)) {\n return value;\n }\n return inputType === 'datetime-local' &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/.test(value)\n ? value.slice(-5)\n : '00:00';\n });\n\n // Minute choices honor minuteStep; an off-step current value is kept\n // selectable so it still displays correctly.\n const minuteOptions = React.useMemo(() => {\n const step = Math.min(Math.max(Math.floor(minuteStep), 1), 60);\n const minutes = Array.from(\n { length: Math.ceil(60 / step) },\n (_, index) => index * step\n );\n const currentMinute = Number(selectedTime.slice(3));\n if (!minutes.includes(currentMinute)) {\n minutes.push(currentMinute);\n minutes.sort((a, b) => a - b);\n }\n return minutes.map((minute) => String(minute).padStart(2, '0'));\n }, [minuteStep, selectedTime]);\n const minimumDate = React.useMemo(\n () => (minDate ? parseDateValue(minDate) : null),\n [minDate]\n );\n const maximumDate = React.useMemo(\n () => (maxDate ? parseDateValue(maxDate) : null),\n [maxDate]\n );\n\n const isDateInRange = React.useCallback(\n (date: Date) => {\n const candidate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n return (\n (!minimumDate || candidate >= minimumDate) &&\n (!maximumDate || candidate <= maximumDate)\n );\n },\n [maximumDate, minimumDate]\n );\n\n const isCalendarDateInRange = React.useCallback(\n (day: number) => {\n return isDateInRange(new Date(calendarYear, calendarMonth, day));\n },\n [calendarMonth, calendarYear, isDateInRange]\n );\n\n const isCalendarMonthInRange = React.useCallback(\n (month: number, year: number) => {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n return (\n (!minimumDate || lastDay >= minimumDate) &&\n (!maximumDate || firstDay <= maximumDate)\n );\n },\n [maximumDate, minimumDate]\n );\n\n const firstCalendarYear = minimumDate\n ? minimumDate.getFullYear()\n : new Date().getFullYear() - 100;\n const lastCalendarYear = maximumDate\n ? maximumDate.getFullYear()\n : new Date().getFullYear() + 49;\n const calendarYears = Array.from(\n { length: Math.max(0, lastCalendarYear - firstCalendarYear + 1) },\n (_, index) => firstCalendarYear + index\n );\n const previousCalendarMonth = calendarMonth === 0 ? 11 : calendarMonth - 1;\n const previousCalendarYear =\n calendarMonth === 0 ? calendarYear - 1 : calendarYear;\n const nextCalendarMonth = calendarMonth === 11 ? 0 : calendarMonth + 1;\n const nextCalendarYear =\n calendarMonth === 11 ? calendarYear + 1 : calendarYear;\n const canGoToPreviousCalendar =\n inputType === 'month'\n ? !minimumDate || calendarYear > minimumDate.getFullYear()\n : isCalendarMonthInRange(previousCalendarMonth, previousCalendarYear);\n const canGoToNextCalendar =\n inputType === 'month'\n ? !maximumDate || calendarYear < maximumDate.getFullYear()\n : isCalendarMonthInRange(nextCalendarMonth, nextCalendarYear);\n\n // Update calendar view when value changes\n React.useEffect(() => {\n if (inputType === 'time') {\n if (/^\\d{2}:\\d{2}$/.test(displayValue)) {\n setSelectedTime(displayValue);\n }\n return;\n }\n const date = parsePickerDate(displayValue, inputType);\n if (!date) return;\n setCalendarMonth(date.month);\n setCalendarYear(date.year);\n if (inputType === 'datetime-local') {\n setSelectedTime(displayValue.slice(-5));\n }\n }, [displayValue, inputType]);\n\n React.useEffect(() => {\n if (isCalendarMonthInRange(calendarMonth, calendarYear)) return;\n\n const closestAllowedDate = minimumDate ?? maximumDate;\n if (!closestAllowedDate) return;\n\n setCalendarMonth(closestAllowedDate.getMonth());\n setCalendarYear(closestAllowedDate.getFullYear());\n }, [\n calendarMonth,\n calendarYear,\n isCalendarMonthInRange,\n maximumDate,\n minimumDate,\n ]);\n\n // Close calendar on click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n calendarRef.current &&\n !calendarRef.current.contains(event.target as HTMLElement) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as HTMLElement)\n ) {\n setIsCalendarOpen(false);\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isCalendarOpen, buttonRef, calendarRef]);\n\n // Close on Escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsCalendarOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isCalendarOpen, buttonRef]);\n\n const handleDateSelect = (day: number) => {\n if (!isCalendarDateInRange(day)) return;\n\n const month = String(calendarMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const year = String(calendarYear);\n const formatted =\n inputType === 'datetime-local'\n ? `${year}-${month}-${dayStr}T${selectedTime}`\n : `${month}/${dayStr}/${year}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n if (inputType === 'date') {\n setIsCalendarOpen(false);\n }\n\n // Validate if needed\n if (inputType === 'date' && validateOnBlur) {\n const validationError = getValidationError(\n formatted,\n mode,\n minAge,\n maxAge,\n minDate,\n maxDate\n );\n setLocalError(validationError);\n }\n };\n\n const handleMonthSelect = (month: number) => {\n if (!isCalendarMonthInRange(month, calendarYear)) return;\n\n const formatted = `${calendarYear}-${String(month + 1).padStart(2, '0')}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n setIsCalendarOpen(false);\n };\n\n const handleCalendarYearChange = (year: number) => {\n setCalendarYear(year);\n if (isCalendarMonthInRange(calendarMonth, year)) return;\n\n const firstAvailableMonth = MONTH_NAMES.findIndex((_, month) =>\n isCalendarMonthInRange(month, year)\n );\n if (firstAvailableMonth !== -1) {\n setCalendarMonth(firstAvailableMonth);\n }\n };\n\n const handleTimeChange = (part: 'hour' | 'minute', nextValue: string) => {\n const [hour, minute] = selectedTime.split(':');\n const nextTime =\n part === 'hour' ? `${nextValue}:${minute}` : `${hour}:${nextValue}`;\n setSelectedTime(nextTime);\n\n if (inputType === 'time') {\n setDisplayValue(nextTime);\n onChange?.(nextTime);\n return;\n }\n\n if (parsedDate.day === null) return;\n const month = String(parsedDate.month + 1).padStart(2, '0');\n const day = String(parsedDate.day).padStart(2, '0');\n const formatted = `${parsedDate.year}-${month}-${day}T${nextTime}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n };\n\n const handleMeridiemChange = (meridiem: 'AM' | 'PM') => {\n const [hour] = selectedTime.split(':').map(Number);\n const nextHour = (hour % 12) + (meridiem === 'PM' ? 12 : 0);\n handleTimeChange('hour', String(nextHour).padStart(2, '0'));\n };\n\n const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (month: number, year: number) => {\n return new Date(year, month, 1).getDay();\n };\n\n const renderCalendar = () => {\n const daysInMonth = getDaysInMonth(calendarMonth, calendarYear);\n const firstDay = getFirstDayOfMonth(calendarMonth, calendarYear);\n const days: (number | null)[] = [];\n\n // Add empty cells for days before the first day of the month\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n\n // Add the days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(i);\n }\n\n const isSelectedDay = (day: number) => {\n return (\n parsedDate.day === day &&\n parsedDate.month === calendarMonth &&\n parsedDate.year === calendarYear\n );\n };\n\n const isToday = (day: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n calendarMonth === today.getMonth() &&\n calendarYear === today.getFullYear()\n );\n };\n\n return (\n <div\n ref={calendarRef}\n className={cn(\n 'bg-background border-border rounded-lg border shadow-lg',\n 'overflow-auto p-3',\n inputType === 'time' ? 'w-fit' : 'w-72'\n )}\n style={calendarStyle}\n role=\"dialog\"\n aria-label={\n inputType === 'month'\n ? 'Choose month'\n : inputType === 'time'\n ? 'Choose time'\n : inputType === 'datetime-local'\n ? 'Choose date and time'\n : 'Choose date'\n }\n >\n {/* Header with month/year navigation */}\n {inputType !== 'time' && (\n <div className=\"mb-3 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => {\n if (inputType === 'month') {\n setCalendarYear(calendarYear - 1);\n } else if (calendarMonth === 0) {\n setCalendarMonth(11);\n setCalendarYear(calendarYear - 1);\n } else {\n setCalendarMonth(calendarMonth - 1);\n }\n }}\n disabled={!canGoToPreviousCalendar}\n className=\"enabled:hover:bg-muted rounded-md p-1 transition-colors disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label={\n inputType === 'month' ? 'Previous year' : 'Previous month'\n }\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"flex items-center gap-2\">\n {inputType !== 'month' && (\n <select\n value={calendarMonth}\n onChange={(e) => setCalendarMonth(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select month\"\n >\n {MONTH_NAMES.map((name, month) =>\n isCalendarMonthInRange(month, calendarYear) ? (\n <option key={name} value={month}>\n {name}\n </option>\n ) : null\n )}\n </select>\n )}\n <select\n value={calendarYear}\n onChange={(e) =>\n handleCalendarYearChange(Number(e.target.value))\n }\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select year\"\n >\n {calendarYears.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (inputType === 'month') {\n setCalendarYear(calendarYear + 1);\n } else if (calendarMonth === 11) {\n setCalendarMonth(0);\n setCalendarYear(calendarYear + 1);\n } else {\n setCalendarMonth(calendarMonth + 1);\n }\n }}\n disabled={!canGoToNextCalendar}\n className=\"hover:bg-muted rounded-md p-1 transition-colors disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label={inputType === 'month' ? 'Next year' : 'Next month'}\n >\n <ChevronRightIcon />\n </button>\n </div>\n )}\n\n {inputType === 'time' ? null : inputType === 'month' ? (\n <div className=\"grid grid-cols-3 gap-1\">\n {MONTH_NAMES.map((name, month) => (\n <button\n key={name}\n type=\"button\"\n onClick={() => handleMonthSelect(month)}\n className={cn(\n 'rounded-md px-2 py-2 text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n 'hover:bg-muted',\n parsedDate.month === month &&\n parsedDate.year === calendarYear &&\n 'bg-primary-800 hover:bg-primary-900 text-white'\n )}\n >\n {name.slice(0, 3)}\n </button>\n ))}\n </div>\n ) : (\n <>\n <div className=\"mb-1 grid grid-cols-7 gap-1\">\n {['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map((day) => (\n <div\n key={day}\n className=\"text-muted-foreground py-1 text-center text-xs font-medium\"\n >\n {day}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={day === null || !isCalendarDateInRange(day)}\n onClick={() => day && handleDateSelect(day)}\n className={cn(\n 'h-8 w-8 rounded-md text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n day === null && 'invisible',\n day !== null && 'hover:bg-muted',\n day !== null &&\n !isCalendarDateInRange(day) &&\n 'cursor-not-allowed opacity-50',\n isSelectedDay(day!) &&\n 'bg-primary-800 hover:bg-primary-900 text-white',\n isToday(day!) &&\n !isSelectedDay(day!) &&\n 'border-primary-800 text-primary-800 border'\n )}\n >\n {day}\n </button>\n ))}\n </div>\n </>\n )}\n\n {(inputType === 'datetime-local' || inputType === 'time') && (\n <div\n className={cn(\n 'flex items-center gap-2',\n inputType === 'datetime-local' &&\n 'border-border mt-3 border-t pt-3'\n )}\n >\n <select\n value={\n timeFormat === '12-hour'\n ? String(\n Number(selectedTime.slice(0, 2)) % 12 || 12\n ).padStart(2, '0')\n : selectedTime.slice(0, 2)\n }\n onChange={(event) => {\n const hour = Number(event.target.value);\n const isPm = Number(selectedTime.slice(0, 2)) >= 12;\n handleTimeChange(\n 'hour',\n String(\n timeFormat === '12-hour'\n ? (hour % 12) + (isPm ? 12 : 0)\n : hour\n ).padStart(2, '0')\n );\n }}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select hour\"\n >\n {Array.from(\n { length: timeFormat === '12-hour' ? 12 : 24 },\n (_, index) => (timeFormat === '12-hour' ? index + 1 : index)\n ).map((hour) => (\n <option key={hour} value={String(hour).padStart(2, '0')}>\n {String(hour).padStart(2, '0')}\n </option>\n ))}\n </select>\n <span aria-hidden=\"true\">:</span>\n <select\n value={selectedTime.slice(3)}\n onChange={(event) =>\n handleTimeChange('minute', event.target.value)\n }\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select minute\"\n >\n {minuteOptions.map((minute) => (\n <option key={minute} value={minute}>\n {minute}\n </option>\n ))}\n </select>\n {timeFormat === '12-hour' && (\n <select\n value={Number(selectedTime.slice(0, 2)) >= 12 ? 'PM' : 'AM'}\n onChange={(event) =>\n handleMeridiemChange(event.target.value as 'AM' | 'PM')\n }\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select AM or PM\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n )}\n </div>\n )}\n\n <div className=\"border-border mt-3 flex gap-2 border-t pt-3\">\n {inputType !== 'time' && (\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date();\n setCalendarMonth(today.getMonth());\n setCalendarYear(today.getFullYear());\n if (inputType === 'month') {\n handleMonthSelect(today.getMonth());\n } else {\n handleDateSelect(today.getDate());\n }\n }}\n disabled={\n inputType === 'month'\n ? !isCalendarMonthInRange(\n new Date().getMonth(),\n new Date().getFullYear()\n )\n : !isDateInRange(new Date())\n }\n className=\"text-primary-800 flex-1 text-sm hover:underline disabled:cursor-not-allowed disabled:opacity-50\"\n >\n Today\n </button>\n )}\n {(inputType === 'datetime-local' || inputType === 'time') && (\n <button\n type=\"button\"\n onClick={() => setIsCalendarOpen(false)}\n className=\"text-primary-800 flex-1 text-sm hover:underline\"\n >\n Done\n </button>\n )}\n </div>\n </div>\n );\n };\n\n if (inputType === 'year') {\n return (\n <Input\n ref={ref}\n type={inputType === 'year' ? 'text' : inputType}\n inputMode={inputType === 'year' ? 'numeric' : undefined}\n pattern={inputType === 'year' ? '[0-9]{4}' : undefined}\n maxLength={inputType === 'year' ? 4 : undefined}\n placeholder={inputType === 'year' ? 'YYYY' : undefined}\n value={value.replace(/\\D/g, '').slice(0, 4)}\n onChange={(event) =>\n onChange?.(event.target.value.replace(/\\D/g, '').slice(0, 4))\n }\n onBlur={onBlur}\n onClick={onClick}\n hasError={hasError}\n error={error}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n\n if (showCalendar || inputType !== 'date') {\n // Extract label/error/helper and component-specific props to handle positioning correctly\n // Filter out Input component props that aren't valid HTML input attributes\n const {\n label,\n labelVariant,\n helperText,\n hideLabel,\n required,\n requiredVariant,\n size,\n placeholder: placeholderProp,\n ...inputProps\n } = props;\n // Ensure size has a valid value (fallback to 'md' if null/undefined)\n const resolvedSize = size ?? 'md';\n const inputId = inputProps.id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n const showError = hasError || !!localError;\n const errorMessage = error || localError;\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n\n const requiredMark = required && (\n <RequiredMark variant={requiredVariant} />\n );\n\n return (\n <div\n data-slot=\"input-wrapper\"\n className={cn('flex flex-col gap-1.5', widthClasses[width])}\n >\n {label && !isFloating && (\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n <div className=\"relative\">\n <input\n data-slot=\"input\"\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode={inputType === 'date' ? 'numeric' : undefined}\n autoComplete={autoComplete}\n placeholder={\n isFloating\n ? ' '\n : (placeholderProp ??\n (inputType === 'month'\n ? 'Select month'\n : inputType === 'time'\n ? 'Select time'\n : inputType === 'datetime-local'\n ? 'Select date and time'\n : placeholder))\n }\n value={formatPickerValue(displayValue, inputType, timeFormat)}\n onChange={handleChange}\n onBlur={inputType === 'date' ? handleBlur : onBlur}\n onClick={(event) => {\n onClick?.(event);\n setIsCalendarOpen(true);\n }}\n readOnly={!isFormattedDate}\n required={required}\n aria-invalid={showError}\n aria-describedby={\n [errorMessage ? errorId : null, helperText ? helperId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n className={cn(\n inputVariants({\n size: resolvedSize,\n hasError: showError,\n labelVariant: isFloating ? 'floating' : 'stacked',\n }),\n 'pr-10',\n className\n )}\n {...inputProps}\n />\n {isFloating && (\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={floatingLabelVariants({\n size: resolvedSize,\n hasError: showError,\n })}\n >\n {label}\n {requiredMark}\n </label>\n )}\n <button\n data-slot=\"date-input-trigger\"\n ref={buttonRef}\n type=\"button\"\n onClick={() => setIsCalendarOpen(!isCalendarOpen)}\n className={cn(\n 'absolute top-1/2 right-3 -translate-y-1/2',\n 'text-muted-foreground hover:text-foreground',\n 'focus:text-foreground focus:outline-none',\n 'transition-colors'\n )}\n aria-label={\n inputType === 'time' ? 'Open time picker' : 'Open calendar'\n }\n aria-expanded={isCalendarOpen}\n aria-haspopup=\"dialog\"\n >\n {inputType === 'time' ? (\n <Clock size={18} />\n ) : (\n <Calendar size={18} />\n )}\n </button>\n </div>\n {isCalendarOpen && createPortal(renderCalendar(), document.body)}\n {errorMessage && (\n <p\n id={errorId}\n data-slot=\"input-error\"\n className=\"text-sm\"\n style={{ color: '#ef4444' }}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n {helperText && !errorMessage && (\n <p\n id={helperId}\n data-slot=\"input-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\n// Simple icon components\nfunction ChevronLeftIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport { DateInput };\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RequiredMark } from './chunk-3IMM2PM4.js';
|
|
1
2
|
import { useEscapeKey } from './chunk-T4ME7QCT.js';
|
|
2
3
|
import { useClickOutside } from './chunk-62ZOA6PX.js';
|
|
3
4
|
import { useAnchoredPosition } from './chunk-BOOJDRJO.js';
|
|
@@ -91,30 +92,32 @@ var floatingValuePadding = {
|
|
|
91
92
|
md: "pt-5 pb-1.5",
|
|
92
93
|
lg: "pt-6 pb-2"
|
|
93
94
|
};
|
|
94
|
-
function Select({
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
95
|
+
function Select(props) {
|
|
96
|
+
const {
|
|
97
|
+
options,
|
|
98
|
+
placeholder = "Select an option",
|
|
99
|
+
disabled = false,
|
|
100
|
+
label,
|
|
101
|
+
hideLabel = false,
|
|
102
|
+
labelVariant = "stacked",
|
|
103
|
+
error,
|
|
104
|
+
helperText,
|
|
105
|
+
required = false,
|
|
106
|
+
requiredVariant,
|
|
107
|
+
size,
|
|
108
|
+
hasError,
|
|
109
|
+
"aria-label": ariaLabel,
|
|
110
|
+
searchable = false,
|
|
111
|
+
searchPlaceholder = "Search...",
|
|
112
|
+
noResultsText = "No results found",
|
|
113
|
+
className,
|
|
114
|
+
id
|
|
115
|
+
} = props;
|
|
116
|
+
const multiple = props.multiple === true;
|
|
117
|
+
const onValueChange = props.onValueChange;
|
|
115
118
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
116
|
-
const [
|
|
117
|
-
|
|
119
|
+
const [uncontrolledValues, setUncontrolledValues] = React.useState(
|
|
120
|
+
() => toValueArray(props.defaultValue)
|
|
118
121
|
);
|
|
119
122
|
const [searchQuery, setSearchQuery] = React.useState("");
|
|
120
123
|
const [highlightedIndex, setHighlightedIndex] = React.useState(-1);
|
|
@@ -132,8 +135,13 @@ function Select({
|
|
|
132
135
|
const listboxId = `${selectId}-listbox`;
|
|
133
136
|
const errorId = `${selectId}-error`;
|
|
134
137
|
const helperId = `${selectId}-helper`;
|
|
135
|
-
const isControlled =
|
|
136
|
-
const
|
|
138
|
+
const isControlled = props.value !== void 0;
|
|
139
|
+
const controlledValue = props.value;
|
|
140
|
+
const controlledValues = React.useMemo(
|
|
141
|
+
() => toValueArray(controlledValue),
|
|
142
|
+
[controlledValue]
|
|
143
|
+
);
|
|
144
|
+
const selectedValues = isControlled ? controlledValues : uncontrolledValues;
|
|
137
145
|
const flatOptions = React.useMemo(() => {
|
|
138
146
|
const result = [];
|
|
139
147
|
for (const item of options) {
|
|
@@ -176,7 +184,9 @@ function Select({
|
|
|
176
184
|
}
|
|
177
185
|
return result;
|
|
178
186
|
}, [filteredOptions]);
|
|
179
|
-
const
|
|
187
|
+
const selectedOptions = selectedValues.map((v) => flatOptions.find((opt) => opt.value === v)).filter((opt) => opt !== void 0);
|
|
188
|
+
const hasSelection = selectedOptions.length > 0;
|
|
189
|
+
const displayLabel = selectedOptions.map((opt) => opt.label).join(", ");
|
|
180
190
|
const outsideRefs = React.useMemo(() => [containerRef, dropdownRef], []);
|
|
181
191
|
useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);
|
|
182
192
|
useEscapeKey(() => {
|
|
@@ -195,16 +205,29 @@ function Select({
|
|
|
195
205
|
maxHeight: 300
|
|
196
206
|
});
|
|
197
207
|
const handleValueChange = React.useCallback(
|
|
198
|
-
(
|
|
208
|
+
(optionValue) => {
|
|
209
|
+
if (multiple) {
|
|
210
|
+
const next = selectedValues.includes(optionValue) ? selectedValues.filter((v) => v !== optionValue) : [...selectedValues, optionValue];
|
|
211
|
+
if (!isControlled) {
|
|
212
|
+
setUncontrolledValues(next);
|
|
213
|
+
}
|
|
214
|
+
onValueChange?.(next);
|
|
215
|
+
if (searchable) {
|
|
216
|
+
searchInputRef.current?.focus();
|
|
217
|
+
} else {
|
|
218
|
+
triggerRef.current?.focus();
|
|
219
|
+
}
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
199
222
|
if (!isControlled) {
|
|
200
|
-
|
|
223
|
+
setUncontrolledValues([optionValue]);
|
|
201
224
|
}
|
|
202
|
-
onValueChange?.(
|
|
225
|
+
onValueChange?.(optionValue);
|
|
203
226
|
setIsOpen(false);
|
|
204
227
|
setSearchQuery("");
|
|
205
228
|
triggerRef.current?.focus();
|
|
206
229
|
},
|
|
207
|
-
[isControlled, onValueChange]
|
|
230
|
+
[isControlled, multiple, onValueChange, searchable, selectedValues]
|
|
208
231
|
);
|
|
209
232
|
const handleKeyDown = React.useCallback(
|
|
210
233
|
(e) => {
|
|
@@ -326,15 +349,16 @@ function Select({
|
|
|
326
349
|
helperText && !error ? helperId : null
|
|
327
350
|
].filter(Boolean).join(" ");
|
|
328
351
|
const isFloating = labelVariant === "floating" && !!label && !hideLabel;
|
|
329
|
-
const isFloated = isOpen ||
|
|
352
|
+
const isFloated = isOpen || hasSelection;
|
|
330
353
|
const resolvedSize = size ?? "md";
|
|
354
|
+
const requiredMark = required && /* @__PURE__ */ jsx(RequiredMark, { variant: requiredVariant });
|
|
331
355
|
return /* @__PURE__ */ jsxs(
|
|
332
356
|
"div",
|
|
333
357
|
{
|
|
334
358
|
"data-slot": "select-wrapper",
|
|
335
359
|
className: cn("flex flex-col gap-1.5", className),
|
|
336
360
|
children: [
|
|
337
|
-
label && !isFloating && /* @__PURE__ */
|
|
361
|
+
label && !isFloating && /* @__PURE__ */ jsxs(
|
|
338
362
|
"label",
|
|
339
363
|
{
|
|
340
364
|
"data-slot": "select-label",
|
|
@@ -343,7 +367,10 @@ function Select({
|
|
|
343
367
|
"text-foreground text-sm font-medium",
|
|
344
368
|
hideLabel && "sr-only"
|
|
345
369
|
),
|
|
346
|
-
children:
|
|
370
|
+
children: [
|
|
371
|
+
label,
|
|
372
|
+
requiredMark
|
|
373
|
+
]
|
|
347
374
|
}
|
|
348
375
|
),
|
|
349
376
|
/* @__PURE__ */ jsxs("div", { ref: containerRef, className: "relative", children: [
|
|
@@ -362,6 +389,7 @@ function Select({
|
|
|
362
389
|
"aria-expanded": isOpen,
|
|
363
390
|
"aria-controls": isOpen ? listboxId : void 0,
|
|
364
391
|
"aria-invalid": hasError || !!error,
|
|
392
|
+
"aria-required": required || void 0,
|
|
365
393
|
"aria-label": !label ? ariaLabel : void 0,
|
|
366
394
|
"aria-describedby": describedByIds || void 0,
|
|
367
395
|
disabled,
|
|
@@ -380,10 +408,10 @@ function Select({
|
|
|
380
408
|
{
|
|
381
409
|
className: cn(
|
|
382
410
|
"truncate",
|
|
383
|
-
!
|
|
411
|
+
!hasSelection && "text-muted-foreground",
|
|
384
412
|
isFloating && floatingValuePadding[resolvedSize]
|
|
385
413
|
),
|
|
386
|
-
children: isFloating ?
|
|
414
|
+
children: isFloating ? hasSelection ? displayLabel : "\xA0" : hasSelection ? displayLabel : placeholder
|
|
387
415
|
}
|
|
388
416
|
),
|
|
389
417
|
/* @__PURE__ */ jsx(
|
|
@@ -398,7 +426,7 @@ function Select({
|
|
|
398
426
|
]
|
|
399
427
|
}
|
|
400
428
|
),
|
|
401
|
-
isFloating && /* @__PURE__ */
|
|
429
|
+
isFloating && /* @__PURE__ */ jsxs(
|
|
402
430
|
"label",
|
|
403
431
|
{
|
|
404
432
|
"data-slot": "select-label",
|
|
@@ -408,7 +436,10 @@ function Select({
|
|
|
408
436
|
floated: isFloated,
|
|
409
437
|
hasError: hasError || !!error
|
|
410
438
|
}),
|
|
411
|
-
children:
|
|
439
|
+
children: [
|
|
440
|
+
label,
|
|
441
|
+
requiredMark
|
|
442
|
+
]
|
|
412
443
|
}
|
|
413
444
|
),
|
|
414
445
|
isOpen && createPortal(
|
|
@@ -458,6 +489,7 @@ function Select({
|
|
|
458
489
|
id: listboxId,
|
|
459
490
|
role: "listbox",
|
|
460
491
|
"aria-label": label || "Options",
|
|
492
|
+
"aria-multiselectable": multiple || void 0,
|
|
461
493
|
"data-slot": "select-listbox",
|
|
462
494
|
className: "flex-1 overflow-auto p-1",
|
|
463
495
|
children: filteredFlatOptions.length === 0 ? /* @__PURE__ */ jsx("li", { className: "text-muted-foreground px-3 py-2 text-center text-sm", children: noResultsText }) : filteredOptions.map((item) => {
|
|
@@ -475,7 +507,9 @@ function Select({
|
|
|
475
507
|
SelectOptionItem,
|
|
476
508
|
{
|
|
477
509
|
option,
|
|
478
|
-
isSelected:
|
|
510
|
+
isSelected: selectedValues.includes(
|
|
511
|
+
option.value
|
|
512
|
+
),
|
|
479
513
|
isHighlighted: filteredFlatOptions[highlightedIndex]?.value === option.value,
|
|
480
514
|
onSelect: () => handleValueChange(option.value),
|
|
481
515
|
onMouseEnter: () => {
|
|
@@ -493,7 +527,7 @@ function Select({
|
|
|
493
527
|
SelectOptionItem,
|
|
494
528
|
{
|
|
495
529
|
option: item,
|
|
496
|
-
isSelected: item.value
|
|
530
|
+
isSelected: selectedValues.includes(item.value),
|
|
497
531
|
isHighlighted: filteredFlatOptions[highlightedIndex]?.value === item.value,
|
|
498
532
|
onSelect: () => handleValueChange(item.value),
|
|
499
533
|
onMouseEnter: () => {
|
|
@@ -538,6 +572,10 @@ function Select({
|
|
|
538
572
|
);
|
|
539
573
|
}
|
|
540
574
|
Select.displayName = "Select";
|
|
575
|
+
function toValueArray(value) {
|
|
576
|
+
if (value === void 0 || value === "") return [];
|
|
577
|
+
return Array.isArray(value) ? value : [value];
|
|
578
|
+
}
|
|
541
579
|
function SelectOptionItem({
|
|
542
580
|
option,
|
|
543
581
|
isSelected,
|
|
@@ -620,5 +658,5 @@ function CheckIcon({ className }) {
|
|
|
620
658
|
}
|
|
621
659
|
|
|
622
660
|
export { Select, selectTriggerVariants };
|
|
623
|
-
//# sourceMappingURL=chunk-
|
|
624
|
-
//# sourceMappingURL=chunk-
|
|
661
|
+
//# sourceMappingURL=chunk-XBKOZRDO.js.map
|
|
662
|
+
//# sourceMappingURL=chunk-XBKOZRDO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":[],"mappings":";;;;;;;;;;AAmCA,IAAM,qBAAA,GAAwB,GAAA;AAAA,EAC5B;AAAA,IACE,gDAAA;AAAA,IACA,gCAAA;AAAA,IACA,+BAAA;AAAA,IACA,gCAAA;AAAA,IACA,0EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,2CAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,OAAA,EAAS,EAAA;AAAA,QACT,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,WAAW,MAAA,EAAO;AAAA,MAC1D,EAAE,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,WAAW,MAAA,EAAO;AAAA,MAC1D,EAAE,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,WAAW,MAAA;AAAO,KAC5D;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,YAAA,EAAc;AAAA;AAChB;AAEJ;AAEA,IAAM,qBAAA,GAAwB,GAAA;AAAA,EAC5B;AAAA,IACE,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI;AAAA,UACF;AAAA,SACF;AAAA,QACA,EAAA,EAAI,CAAC,8DAA8D,CAAA;AAAA,QACnE,EAAA,EAAI,CAAC,gEAAgE;AAAA,OACvE;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,EAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,kBAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,WAAW,SAAA,EAAU;AAAA,MACnD,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,WAAW,WAAA,EAAY;AAAA,MACrD,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,WAAW,SAAA,EAAU;AAAA,MACnD;AAAA,QACE,IAAA,EAAM,IAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW;AAAA,OACb;AAAA,MACA,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAW,6BAAA,EAA8B;AAAA,MACtE,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAW,+BAAA;AAAgC,KAC1E;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS,KAAA;AAAA,MACT,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAEA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AA4GA,SAAS,OAAO,KAAA,EAAoB;AAClC,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,WAAA,GAAc,kBAAA;AAAA,IACd,QAAA,GAAW,KAAA;AAAA,IACX,KAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,YAAA,GAAe,SAAA;AAAA,IACf,KAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,eAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA,EAAc,SAAA;AAAA,IACd,UAAA,GAAa,KAAA;AAAA,IACb,iBAAA,GAAoB,WAAA;AAAA,IACpB,aAAA,GAAgB,kBAAA;AAAA,IAChB,SAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,KAAa,IAAA;AAIpC,EAAA,MAAM,gBAAgB,KAAA,CAAM,aAAA;AAG5B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACxD,MAAM,YAAA,CAAa,KAAA,CAAM,YAAY;AAAA,GACvC;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAU,eAAS,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAU,eAAS,EAAE,CAAA;AAEjE,EAAA,MAAM,YAAA,GAAqB,aAAuB,IAAI,CAAA;AACtD,EAAA,MAAM,UAAA,GAAmB,aAA0B,IAAI,CAAA;AACvD,EAAA,MAAM,cAAA,GAAuB,aAAyB,IAAI,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAgB,aAAyB,IAAI,CAAA;AACnD,EAAA,MAAM,WAAA,GAAoB,aAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,eAAqB,KAAA,CAAA,MAAA,CAAgD;AAAA,IACzE,KAAA,EAAO,EAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,cAAoB,KAAA,CAAA,KAAA,EAAM;AAChC,EAAA,MAAM,WAAW,EAAA,IAAM,WAAA;AACvB,EAAA,MAAM,SAAA,GAAY,GAAG,QAAQ,CAAA,QAAA,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,GAAG,QAAQ,CAAA,MAAA,CAAA;AAC3B,EAAA,MAAM,QAAA,GAAW,GAAG,QAAQ,CAAA,OAAA,CAAA;AAE5B,EAAA,MAAM,YAAA,GAAe,MAAM,KAAA,KAAU,MAAA;AACrC,EAAA,MAAM,kBAAkB,KAAA,CAAM,KAAA;AAI9B,EAAA,MAAM,gBAAA,GAAyB,KAAA,CAAA,OAAA;AAAA,IAC7B,MAAM,aAAa,eAAe,CAAA;AAAA,IAClC,CAAC,eAAe;AAAA,GAClB;AACA,EAAA,MAAM,cAAA,GAAiB,eAAe,gBAAA,GAAmB,kBAAA;AAGzD,EAAA,MAAM,WAAA,GAAoB,cAAQ,MAAM;AACtC,IAAA,MAAM,SAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAA,CAAK,OAAO,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MAClB;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAGZ,EAAA,MAAM,eAAA,GAAwB,cAAQ,MAAM;AAC1C,IAAA,IAAI,CAAC,aAAa,OAAO,OAAA;AAEzB,IAAA,MAAM,KAAA,GAAQ,YAAY,WAAA,EAAY;AACtC,IAAA,MAAM,SAAyC,EAAC;AAEhD,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,MAAM,oBAAA,GAAuB,KAAK,OAAA,CAAQ,MAAA;AAAA,UAAO,CAAC,GAAA,KAChD,GAAA,CAAI,MAAM,WAAA,EAAY,CAAE,SAAS,KAAK;AAAA,SACxC;AACA,QAAA,IAAI,oBAAA,CAAqB,SAAS,CAAA,EAAG;AACnC,UAAA,MAAA,CAAO,KAAK,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,sBAAsB,CAAA;AAAA,QACxD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,KAAK,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG;AAC5C,UAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,WAAW,CAAC,CAAA;AAGzB,EAAA,MAAM,mBAAA,GAA4B,cAAQ,MAAM;AAC9C,IAAA,MAAM,SAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAClC,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAW,CAAC,IAAA,CAAK,QAAA,EAAU;AACzB,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MAClB;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAGpB,EAAA,MAAM,kBAAkB,cAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,KAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU,CAAC,CAAC,CAAA,CACrD,OAAO,CAAC,GAAA,KAA6B,QAAQ,MAAS,CAAA;AACzD,EAAA,MAAM,YAAA,GAAe,gBAAgB,MAAA,GAAS,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,gBAAgB,GAAA,CAAI,CAAC,QAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAGtE,EAAA,MAAM,WAAA,GAAoB,cAAQ,MAAM,CAAC,cAAc,WAAW,CAAA,EAAG,EAAE,CAAA;AACvE,EAAA,eAAA,CAAgB,WAAA,EAAa,MAAM,SAAA,CAAU,KAAK,GAAG,MAAM,CAAA;AAE3D,EAAA,YAAA,CAAa,MAAM;AACjB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,IAC5B;AAAA,EACF,GAAG,MAAM,CAAA;AAGT,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,mBAAA,CAAuD;AAAA,IACzD,IAAA,EAAM,MAAA;AAAA,IACN,UAAA,EAAY,IAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACZ,CAAA;AAID,EAAA,MAAM,iBAAA,GAA0B,KAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,WAAA,KAAwB;AACvB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAA,GAAO,cAAA,CAAe,QAAA,CAAS,WAAW,IAC5C,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,WAAW,CAAA,GAC9C,CAAC,GAAG,gBAAgB,WAAW,CAAA;AACnC,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,QAC5B;AACA,QAAA,aAAA,GAAgB,IAAI,CAAA;AAIpB,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,cAAA,CAAe,SAAS,KAAA,EAAM;AAAA,QAChC,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,QAC5B;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,qBAAA,CAAsB,CAAC,WAAW,CAAC,CAAA;AAAA,MACrC;AACA,MAAA,aAAA,GAAgB,WAAW,CAAA;AAC3B,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,QAAA,EAAU,aAAA,EAAe,YAAY,cAAc;AAAA,GACpE;AAGA,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,CAAA,KAA2B;AAK1B,MAAA,IACE,CAAC,UAAA,IACD,CAAA,CAAE,GAAA,CAAI,MAAA,KAAW,KACjB,CAAA,CAAE,GAAA,KAAQ,GAAA,IACV,CAAC,EAAE,OAAA,IACH,CAAC,EAAE,OAAA,IACH,CAAC,EAAE,MAAA,EACH;AACA,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IAAI,CAAC,MAAA,EAAQ,SAAA,CAAU,IAAI,CAAA;AAE3B,QAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,OAAA,CAAQ,KAAA,KAAU,EAAA;AACvD,QAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,KAAA,KAAU,IAAA,EAAM;AACvC,UAAA,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAAA,QAChD;AACA,QAAA,MAAM,SAAS,YAAA,CAAa,OAAA,CAAQ,KAAA,GAAQ,CAAA,CAAE,KAAK,WAAA,EAAY;AAC/D,QAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,KAAA;AAC7B,QAAA,YAAA,CAAa,OAAA,CAAQ,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,MAAM;AACnD,UAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,EAAA;AAC7B,UAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,IAAA;AAAA,QAC/B,GAAG,GAAG,CAAA;AAEN,QAAA,MAAM,MAAM,mBAAA,CAAoB,MAAA;AAChC,QAAA,IAAI,MAAM,CAAA,EAAG;AACX,UAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,KAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAC/D,UAAA,MAAM,MAAA,GAAS,WAAA,GAAc,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA;AACxC,UAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KACf,GAAA,CAAI,MAAM,WAAA,EAAY,CAAE,WAAW,MAAM,CAAA;AAK3C,UAAA,MAAM,cAAA,GAAiB,CAAC,eAAA,IAAmB,CAAC,WAAA;AAC5C,UAAA,MAAM,OAAO,cAAA,GACT,IAAA,CAAK,IAAI,gBAAA,EAAkB,CAAC,IAC5B,gBAAA,GAAmB,CAAA;AAEvB,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,YAAA,MAAM,GAAA,GAAA,CAAO,OAAO,CAAA,IAAK,GAAA;AACzB,YAAA,IAAI,OAAA,CAAQ,mBAAA,CAAoB,GAAG,CAAC,CAAA,EAAG;AACrC,cAAA,mBAAA,CAAoB,GAAG,CAAA;AACvB,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAIA,MAAA,IAAI,EAAE,GAAA,KAAQ,GAAA,IAAO,CAAA,CAAE,MAAA,KAAW,eAAe,OAAA,EAAS;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,SAAA,CAAU,IAAI,CAAA;AAAA,UAChB,CAAA,MAAO;AACL,YAAA,mBAAA;AAAA,cAAoB,CAAC,IAAA,KACnB,IAAA,GAAO,oBAAoB,MAAA,GAAS,CAAA,GAAI,OAAO,CAAA,GAAI;AAAA,aACrD;AAAA,UACF;AACA,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,SAAA,CAAU,IAAI,CAAA;AAAA,UAChB,CAAA,MAAO;AACL,YAAA,mBAAA;AAAA,cAAoB,CAAC,IAAA,KACnB,IAAA,GAAO,IAAI,IAAA,GAAO,CAAA,GAAI,oBAAoB,MAAA,GAAS;AAAA,aACrD;AAAA,UACF;AACA,UAAA;AAAA,QACF,KAAK,OAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,MAAA,IAAU,oBAAoB,CAAA,EAAG;AACnC,YAAA,iBAAA,CAAkB,mBAAA,CAAoB,gBAAgB,CAAA,CAAE,KAAK,CAAA;AAAA,UAC/D,CAAA,MAAA,IAAW,CAAC,MAAA,EAAQ;AAClB,YAAA,SAAA,CAAU,IAAI,CAAA;AAAA,UAChB;AACA,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,mBAAA,CAAoB,CAAC,CAAA;AACrB,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,mBAAA,CAAoB,mBAAA,CAAoB,SAAS,CAAC,CAAA;AAClD,UAAA;AAAA;AACJ,IACF,CAAA;AAAA,IACA;AAAA,MACE,MAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,MAAA,IAAU,UAAA,IAAc,cAAA,CAAe,OAAA,EAAS;AAClD,MAAA,cAAA,CAAe,QAAQ,KAAA,EAAM;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAGvB,EAAM,gBAAU,MAAM;AACpB,IAAA,mBAAA,CAAoB,mBAAA,CAAoB,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA;AAAA,EAC7D,CAAA,EAAG,CAAC,WAAA,EAAa,mBAAA,CAAoB,MAAM,CAAC,CAAA;AAO5C,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,IAAU,gBAAA,GAAmB,CAAA,EAAG;AACrC,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,MAAM,EAAA,GAAK,IAAA,EAAM,aAAA,CAA2B,2BAA2B,CAAA;AACvE,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,EAAA,EAAI;AAClB,IAAA,MAAM,QAAA,GAAW,KAAK,qBAAA,EAAsB;AAC5C,IAAA,MAAM,MAAA,GAAS,GAAG,qBAAA,EAAsB;AACxC,IAAA,IAAI,MAAA,CAAO,GAAA,GAAM,QAAA,CAAS,GAAA,EAAK;AAC7B,MAAA,IAAA,CAAK,SAAA,IAAa,QAAA,CAAS,GAAA,GAAM,MAAA,CAAO,GAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ;AAC1C,MAAA,IAAA,CAAK,SAAA,IAAa,MAAA,CAAO,MAAA,GAAS,QAAA,CAAS,MAAA;AAAA,IAC7C;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,MAAM,CAAC,CAAA;AAK7B,EAAA,MAAM,cAAA,GAAuB,kBAAY,MAAM;AAC7C,IAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,KAAA,KAAU,IAAA,EAAM;AACvC,MAAA,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAC9C,MAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,IAAA;AAAA,IAC/B;AACA,IAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,EAAA;AAAA,EAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,QAAQ,cAAA,EAAe;AAAA,EAC9B,CAAA,EAAG,CAAC,MAAA,EAAQ,cAAc,CAAC,CAAA;AAE3B,EAAM,KAAA,CAAA,SAAA,CAAU,MAAM,cAAA,EAAgB,CAAC,cAAc,CAAC,CAAA;AAGtD,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,QAAQ,OAAA,GAAU,IAAA;AAAA,IAClB,UAAA,IAAc,CAAC,KAAA,GAAQ,QAAA,GAAW;AAAA,GACpC,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,MAAM,aAAa,YAAA,KAAiB,UAAA,IAAc,CAAC,CAAC,SAAS,CAAC,SAAA;AAC9D,EAAA,MAAM,YAAY,MAAA,IAAU,YAAA;AAC5B,EAAA,MAAM,eAAe,IAAA,IAAQ,IAAA;AAE7B,EAAA,MAAM,YAAA,GAAe,QAAA,oBAAY,GAAA,CAAC,YAAA,EAAA,EAAa,SAAS,eAAA,EAAiB,CAAA;AAEzE,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAE/C,QAAA,EAAA;AAAA,QAAA,KAAA,IAAS,CAAC,UAAA,oBACT,IAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YACV,OAAA,EAAS,QAAA;AAAA,YACT,SAAA,EAAW,EAAA;AAAA,cACT,qCAAA;AAAA,cACA,SAAA,IAAa;AAAA,aACf;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA;AAAA;AAAA;AAAA,SACH;AAAA,wBAGF,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,WAAU,UAAA,EAEhC,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,gBAAA;AAAA,cACV,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,gBAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,gBAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,cACtB,CAAA;AAAA,cACA,EAAA,EAAI,QAAA;AAAA,cACJ,IAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAK,UAAA;AAAA,cACL,eAAA,EAAc,SAAA;AAAA,cACd,eAAA,EAAe,MAAA;AAAA,cAGf,eAAA,EAAe,SAAS,SAAA,GAAY,MAAA;AAAA,cACpC,cAAA,EAAc,QAAA,IAAY,CAAC,CAAC,KAAA;AAAA,cAC5B,iBAAe,QAAA,IAAY,MAAA;AAAA,cAC3B,YAAA,EAAY,CAAC,KAAA,GAAQ,SAAA,GAAY,MAAA;AAAA,cACjC,oBAAkB,cAAA,IAAkB,MAAA;AAAA,cACpC,QAAA;AAAA,cACA,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,cAChC,SAAA,EAAW,aAAA;AAAA,cACX,SAAA,EAAW,EAAA;AAAA,gBACT,qBAAA,CAAsB;AAAA,kBACpB,IAAA;AAAA,kBACA,QAAA,EAAU,QAAA,IAAY,CAAC,CAAC,KAAA;AAAA,kBACxB,YAAA,EAAc,aAAa,UAAA,GAAa;AAAA,iBACzC;AAAA,eACH;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,UAAA;AAAA,sBACA,CAAC,YAAA,IAAgB,uBAAA;AAAA,sBACjB,UAAA,IAAc,qBAAqB,YAAY;AAAA,qBACjD;AAAA,oBAEC,QAAA,EAAA,UAAA,GACG,YAAA,GACE,YAAA,GACA,MAAA,GACF,eACE,YAAA,GACA;AAAA;AAAA,iBACR;AAAA,gCACA,GAAA;AAAA,kBAAC,eAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,6DAAA;AAAA,sBACA,MAAA,IAAU;AAAA;AACZ;AAAA;AACF;AAAA;AAAA,WACF;AAAA,UAGC,UAAA,oBACC,IAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,cAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACT,WAAW,qBAAA,CAAsB;AAAA,gBAC/B,IAAA,EAAM,YAAA;AAAA,gBACN,OAAA,EAAS,SAAA;AAAA,gBACT,QAAA,EAAU,QAAA,IAAY,CAAC,CAAC;AAAA,eACzB,CAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gBAAA,KAAA;AAAA,gBACA;AAAA;AAAA;AAAA,WACH;AAAA,UAID,MAAA,IACC,YAAA;AAAA,4BACE,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAU,iBAAA;AAAA,gBACV,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,kBAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,kBAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,gBACxB,CAAA;AAAA,gBACA,KAAA,EAAO,aAAA;AAAA,gBACP,SAAA,EAAW,EAAA;AAAA,kBACT,mDAAA;AAAA,kBACA,+BAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAGC,QAAA,EAAA;AAAA,kBAAA,UAAA,oBACC,GAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,WAAA,EAAU,eAAA;AAAA,sBACV,SAAA,EAAU,4BAAA;AAAA,sBAEV,QAAA,kBAAA,GAAA;AAAA,wBAAC,OAAA;AAAA,wBAAA;AAAA,0BACC,GAAA,EAAK,cAAA;AAAA,0BACL,IAAA,EAAK,MAAA;AAAA,0BACL,KAAA,EAAO,WAAA;AAAA,0BACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,0BAC9C,SAAA,EAAW,aAAA;AAAA,0BACX,WAAA,EAAa,iBAAA;AAAA,0BACb,SAAA,EAAW,EAAA;AAAA,4BACT,uEAAA;AAAA,4BACA,mCAAA;AAAA,4BACA;AAAA,2BACF;AAAA,0BACA,YAAA,EAAW;AAAA;AAAA;AACb;AAAA,mBACF;AAAA,kCAIF,GAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBACC,GAAA,EAAK,OAAA;AAAA,sBACL,EAAA,EAAI,SAAA;AAAA,sBACJ,IAAA,EAAK,SAAA;AAAA,sBACL,cAAY,KAAA,IAAS,SAAA;AAAA,sBACrB,wBAAsB,QAAA,IAAY,MAAA;AAAA,sBAClC,WAAA,EAAU,gBAAA;AAAA,sBACV,SAAA,EAAU,0BAAA;AAAA,sBAET,QAAA,EAAA,mBAAA,CAAoB,MAAA,KAAW,CAAA,mBAC9B,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qDAAA,EACX,QAAA,EAAA,aAAA,EACH,CAAA,GAEA,eAAA,CAAgB,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,wBAAA,IAAI,aAAa,IAAA,EAAM;AAErB,0BAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAA+B,IAAA,EAAK,cAAA,EACnC,QAAA,EAAA;AAAA,4CAAA,GAAA;AAAA,8BAAC,KAAA;AAAA,8BAAA;AAAA,gCACC,WAAA,EAAU,oBAAA;AAAA,gCACV,SAAA,EAAU,kFAAA;AAAA,gCAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,6BACR;AAAA,4CACA,GAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAY,IAAA,CAAK,KAAA,EAC/B,QAAA,EAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACjB,GAAA;AAAA,8BAAC,gBAAA;AAAA,8BAAA;AAAA,gCAEC,MAAA;AAAA,gCACA,YAAY,cAAA,CAAe,QAAA;AAAA,kCACzB,MAAA,CAAO;AAAA,iCACT;AAAA,gCACA,aAAA,EACE,mBAAA,CAAoB,gBAAgB,CAAA,EAChC,UAAU,MAAA,CAAO,KAAA;AAAA,gCAEvB,QAAA,EAAU,MAAM,iBAAA,CAAkB,MAAA,CAAO,KAAK,CAAA;AAAA,gCAC9C,cAAc,MAAM;AAClB,kCAAA,MAAM,MAAM,mBAAA,CAAoB,SAAA;AAAA,oCAC9B,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO;AAAA,mCAC5B;AACA,kCAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,gCACzB;AAAA,+BAAA;AAAA,8BAfK,MAAA,CAAO;AAAA,6BAiBf,CAAA,EACH;AAAA,2BAAA,EAAA,EA5BO,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CA6B5B,CAAA;AAAA,wBAEJ;AAGA,wBAAA,uBACE,GAAA;AAAA,0BAAC,gBAAA;AAAA,0BAAA;AAAA,4BAEC,MAAA,EAAQ,IAAA;AAAA,4BACR,UAAA,EAAY,cAAA,CAAe,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,4BAC9C,aAAA,EACE,mBAAA,CAAoB,gBAAgB,CAAA,EAAG,UACvC,IAAA,CAAK,KAAA;AAAA,4BAEP,QAAA,EAAU,MAAM,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA;AAAA,4BAC5C,cAAc,MAAM;AAClB,8BAAA,MAAM,MAAM,mBAAA,CAAoB,SAAA;AAAA,gCAC9B,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,IAAA,CAAK;AAAA,+BAC1B;AACA,8BAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,4BACzB;AAAA,2BAAA;AAAA,0BAbK,IAAA,CAAK;AAAA,yBAcZ;AAAA,sBAEJ,CAAC;AAAA;AAAA;AAEL;AAAA;AAAA,aACF;AAAA,YACA,QAAA,CAAS;AAAA;AACX,SAAA,EACJ,CAAA;AAAA,QAGC,KAAA,oBACC,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,WAAA,EAAU,cAAA;AAAA,YACV,SAAA,EAAU,wDAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YAEJ,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAID,UAAA,IAAc,CAAC,KAAA,oBACd,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,QAAA;AAAA,YACJ,WAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAU,+BAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AAGrB,SAAS,aAAa,KAAA,EAAgD;AACpE,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,SAAW,EAAC;AACjD,EAAA,OAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAC9C;AAcA,SAAS,gBAAA,CAAiB;AAAA,EACxB,MAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,UAAA;AAAA,MACf,iBAAe,MAAA,CAAO,QAAA;AAAA,MACtB,kBAAA,EAAkB,aAAA;AAAA,MAClB,iBAAe,MAAA,CAAO,QAAA;AAAA,MACtB,QAAA,EAAU,gBAAgB,CAAA,GAAI,EAAA;AAAA,MAC9B,OAAA,EAAS,MAAA,CAAO,QAAA,GAAW,MAAA,GAAY,QAAA;AAAA,MACvC,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,MAAA,CAAO,QAAA,GAAW,MAAA,GAAY,YAAA;AAAA,MAC5C,SAAA,EAAW,EAAA;AAAA,QACT,qEAAA;AAAA,QACA,gCAAA;AAAA,QACA,aAAA,IAAiB,UAAA;AAAA,QACjB,UAAA,IACE,0EAAA;AAAA,QACF,OAAO,QAAA,IAAY;AAAA,OACrB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,QAC/C,UAAA,oBACC,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,mCAAA,EAAoC;AAAA;AAAA;AAAA,GAE7D;AAEJ;AAMA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAU,EAA2B;AAC9D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe;AAAA;AAAA,GACzB;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAU,EAA2B;AACxD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA,GAC5B;AAEJ","file":"chunk-XBKOZRDO.js","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { RequiredMark, type RequiredMarkVariant } from '../Input';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer',\n },\n },\n compoundVariants: [\n { labelVariant: 'floating', size: 'sm', className: 'h-11' },\n { labelVariant: 'floating', size: 'md', className: 'h-14' },\n { labelVariant: 'floating', size: 'lg', className: 'h-16' },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n labelVariant: 'stacked',\n },\n }\n);\n\nconst floatingLabelVariants = cva(\n [\n 'absolute start-3 pointer-events-none select-none',\n 'transition-all duration-200 ease-out',\n ],\n {\n variants: {\n size: {\n sm: [\n 'peer-focus:top-0.5 peer-focus:translate-y-0 peer-focus:text-[0.65rem]',\n ],\n md: ['peer-focus:top-1 peer-focus:translate-y-0 peer-focus:text-xs'],\n lg: ['peer-focus:top-1.5 peer-focus:translate-y-0 peer-focus:text-sm'],\n },\n floated: {\n true: '',\n false: 'top-1/2 -translate-y-1/2',\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n compoundVariants: [\n { size: 'sm', floated: false, className: 'text-sm' },\n { size: 'md', floated: false, className: 'text-base' },\n { size: 'lg', floated: false, className: 'text-lg' },\n {\n size: 'sm',\n floated: true,\n className: 'top-0.5 translate-y-0 text-[0.65rem]',\n },\n { size: 'md', floated: true, className: 'top-1 translate-y-0 text-xs' },\n { size: 'lg', floated: true, className: 'top-1.5 translate-y-0 text-sm' },\n ],\n defaultVariants: {\n size: 'md',\n floated: false,\n hasError: false,\n },\n }\n);\n\nconst floatingValuePadding = {\n sm: 'pt-4 pb-1',\n md: 'pt-5 pb-1.5',\n lg: 'pt-6 pb-2',\n} as const;\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\n/**\n * Props shared by both single- and multiple-selection modes. Exported so\n * wrapper components can extend the common shape (`SelectProps` itself is a\n * discriminated union, which interfaces cannot extend).\n */\nexport interface SelectBaseProps extends Omit<\n VariantProps<typeof selectTriggerVariants>,\n 'labelVariant'\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /**\n * Visual style of the label.\n * - `stacked` (default): label sits above the trigger.\n * - `floating`: label rests inside the trigger like a placeholder and\n * floats up (staying inside the trigger) when open or a value is\n * selected. The `placeholder` prop is ignored in this mode.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Whether a selection is required (shows an asterisk next to the label) */\n required?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Accessible label for the trigger (used when no `label` prop is provided) */\n 'aria-label'?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\nexport interface SelectSingleProps extends SelectBaseProps {\n /** Single-selection mode (default). */\n multiple?: false;\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n}\n\nexport interface SelectMultipleProps extends SelectBaseProps {\n /** Multiple-selection mode: selecting an option toggles it and keeps the dropdown open. */\n multiple: true;\n /** Controlled values */\n value?: string[];\n /** Default values (uncontrolled) */\n defaultValue?: string[];\n /** Callback when values change */\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SelectSingleProps | SelectMultipleProps;\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n *\n * // Multiple selection — value/onValueChange use string[]\n * <Select\n * multiple\n * label=\"Symptoms\"\n * options={options}\n * onValueChange={(values) => console.log(values)}\n * />\n * ```\n */\nfunction Select(props: SelectProps) {\n const {\n options,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n labelVariant = 'stacked',\n error,\n helperText,\n required = false,\n requiredVariant,\n size,\n hasError,\n 'aria-label': ariaLabel,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n } = props;\n const multiple = props.multiple === true;\n // The discriminated union types onValueChange as either a string or string[]\n // callback; widen it once here so handlers can use it without referencing\n // the whole `props` object. Runtime calls stay consistent with `multiple`.\n const onValueChange = props.onValueChange as\n | ((value: string | string[]) => void)\n | undefined;\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValues, setUncontrolledValues] = React.useState<string[]>(\n () => toValueArray(props.defaultValue)\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const typeaheadRef = React.useRef<{ query: string; timer: number | null }>({\n query: '',\n timer: null,\n });\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = props.value !== undefined;\n const controlledValue = props.value;\n // Memoize the controlled normalization: toValueArray allocates a fresh\n // array when value is a string, which would otherwise churn callback\n // identities (handleValueChange depends on selectedValues) every render.\n const controlledValues = React.useMemo(\n () => toValueArray(controlledValue),\n [controlledValue]\n );\n const selectedValues = isControlled ? controlledValues : uncontrolledValues;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected options (in selection order)\n const selectedOptions = selectedValues\n .map((v) => flatOptions.find((opt) => opt.value === v))\n .filter((opt): opt is SelectOption => opt !== undefined);\n const hasSelection = selectedOptions.length > 0;\n const displayLabel = selectedOptions.map((opt) => opt.label).join(', ');\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n const outsideRefs = React.useMemo(() => [containerRef, dropdownRef], []);\n useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const {\n anchorRef,\n floatingRef,\n style: dropdownStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isOpen,\n matchWidth: true,\n maxHeight: 300,\n });\n\n // Handle option selection: single mode replaces and closes; multiple mode\n // toggles the option and keeps the dropdown open.\n const handleValueChange = React.useCallback(\n (optionValue: string) => {\n if (multiple) {\n const next = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : [...selectedValues, optionValue];\n if (!isControlled) {\n setUncontrolledValues(next);\n }\n onValueChange?.(next);\n // The dropdown stays open; a mouse click focuses the option <li>,\n // which only handles Enter/Space. Restore focus so arrow-key\n // navigation and typeahead keep working.\n if (searchable) {\n searchInputRef.current?.focus();\n } else {\n triggerRef.current?.focus();\n }\n return;\n }\n if (!isControlled) {\n setUncontrolledValues([optionValue]);\n }\n onValueChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, multiple, onValueChange, searchable, selectedValues]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Typeahead (native-select style): when not using the dedicated search\n // input, typing printable characters jumps to the first option whose\n // label starts with the typed string. Repeating the same key cycles\n // through matches. The buffer clears after a short pause.\n if (\n !searchable &&\n e.key.length === 1 &&\n e.key !== ' ' &&\n !e.metaKey &&\n !e.ctrlKey &&\n !e.altKey\n ) {\n e.preventDefault();\n if (!isOpen) setIsOpen(true);\n\n const hadPendingQuery = typeaheadRef.current.query !== '';\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n }\n const query = (typeaheadRef.current.query + e.key).toLowerCase();\n typeaheadRef.current.query = query;\n typeaheadRef.current.timer = window.setTimeout(() => {\n typeaheadRef.current.query = '';\n typeaheadRef.current.timer = null;\n }, 600);\n\n const len = filteredFlatOptions.length;\n if (len > 0) {\n const allSameChar = query.split('').every((c) => c === query[0]);\n const needle = allSameChar ? query[0] : query;\n const matches = (opt: SelectOption) =>\n opt.label.toLowerCase().startsWith(needle);\n\n // A fresh keystroke (or refining a multi-char query) searches from\n // the current option inclusive so typing \"car\" stays on \"Cardiology\";\n // repeating the same key cycles to the next match.\n const startInclusive = !hadPendingQuery || !allSameChar;\n const base = startInclusive\n ? Math.max(highlightedIndex, 0)\n : highlightedIndex + 1;\n\n for (let i = 0; i < len; i++) {\n const idx = (base + i) % len;\n if (matches(filteredFlatOptions[idx])) {\n setHighlightedIndex(idx);\n break;\n }\n }\n }\n return;\n }\n\n // Let Space type normally in the search input (e.g. \"new york\")\n // instead of being captured by the open/select handler below.\n if (e.key === ' ' && e.target === searchInputRef.current) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [\n isOpen,\n highlightedIndex,\n filteredFlatOptions,\n handleValueChange,\n searchable,\n ]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Keep the highlighted option visible within the listbox during keyboard\n // navigation. We adjust only the list's own scrollTop instead of calling the\n // native scrollIntoView: the dropdown is portaled to <body> with\n // position: fixed, and scrollIntoView would also scroll ancestor/window,\n // yanking the whole page.\n React.useEffect(() => {\n if (!isOpen || highlightedIndex < 0) return;\n const list = listRef.current;\n const el = list?.querySelector<HTMLElement>('[data-highlighted=\"true\"]');\n if (!list || !el) return;\n const listRect = list.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n if (elRect.top < listRect.top) {\n list.scrollTop -= listRect.top - elRect.top;\n } else if (elRect.bottom > listRect.bottom) {\n list.scrollTop += elRect.bottom - listRect.bottom;\n }\n }, [highlightedIndex, isOpen]);\n\n // Reset the typeahead buffer whenever the dropdown closes (Escape, click\n // outside, selection) so a stale query doesn't carry over on a quick reopen,\n // and clear any pending timer on unmount.\n const resetTypeahead = React.useCallback(() => {\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.query = '';\n }, []);\n\n React.useEffect(() => {\n if (!isOpen) resetTypeahead();\n }, [isOpen, resetTypeahead]);\n\n React.useEffect(() => resetTypeahead, [resetTypeahead]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n const isFloated = isOpen || hasSelection;\n const resolvedSize = size ?? 'md';\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && !isFloating && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={(node) => {\n triggerRef.current = node;\n anchorRef.current = node;\n }}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n // Only reference the listbox while it exists in the DOM (it is\n // portaled and unmounted when closed) so the ID is always valid.\n aria-controls={isOpen ? listboxId : undefined}\n aria-invalid={hasError || !!error}\n aria-required={required || undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({\n size,\n hasError: hasError || !!error,\n labelVariant: isFloating ? 'floating' : 'stacked',\n })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !hasSelection && 'text-muted-foreground',\n isFloating && floatingValuePadding[resolvedSize]\n )}\n >\n {isFloating\n ? hasSelection\n ? displayLabel\n : '\\u00A0'\n : hasSelection\n ? displayLabel\n : placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Floating label (rendered after the trigger so `peer-focus` applies) */}\n {isFloating && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={floatingLabelVariants({\n size: resolvedSize,\n floated: isFloated,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={(node) => {\n dropdownRef.current = node;\n floatingRef.current = node;\n }}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'flex flex-col overflow-hidden',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n aria-multiselectable={multiple || undefined}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={selectedValues.includes(\n option.value\n )}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={selectedValues.includes(item.value)}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n/** Normalize a single/multiple value prop into an array of selected values. */\nfunction toValueArray(value: string | string[] | undefined): string[] {\n if (value === undefined || value === '') return [];\n return Array.isArray(value) ? value : [value];\n}\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|
|
@@ -145,6 +145,21 @@ var floatingLabelVariants = classVarianceAuthority.cva(
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
);
|
|
148
|
+
function RequiredMark({
|
|
149
|
+
variant = "default"
|
|
150
|
+
}) {
|
|
151
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
152
|
+
"span",
|
|
153
|
+
{
|
|
154
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
155
|
+
"ms-1",
|
|
156
|
+
variant === "warning" ? "text-warning" : "text-destructive"
|
|
157
|
+
),
|
|
158
|
+
"aria-hidden": "true",
|
|
159
|
+
children: "*"
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}
|
|
148
163
|
var Input = React__namespace.forwardRef(
|
|
149
164
|
({
|
|
150
165
|
className,
|
|
@@ -156,6 +171,7 @@ var Input = React__namespace.forwardRef(
|
|
|
156
171
|
labelVariant = "stacked",
|
|
157
172
|
hideLabel,
|
|
158
173
|
required,
|
|
174
|
+
requiredVariant,
|
|
159
175
|
disabled,
|
|
160
176
|
id,
|
|
161
177
|
placeholder,
|
|
@@ -172,7 +188,7 @@ var Input = React__namespace.forwardRef(
|
|
|
172
188
|
ariaDescribedBy
|
|
173
189
|
].filter(Boolean).join(" ");
|
|
174
190
|
const isFloating = labelVariant === "floating" && !!label && !hideLabel;
|
|
175
|
-
const requiredMark = required && /* @__PURE__ */ jsxRuntime.jsx(
|
|
191
|
+
const requiredMark = required && /* @__PURE__ */ jsxRuntime.jsx(RequiredMark, { variant: requiredVariant });
|
|
176
192
|
const inputElement = /* @__PURE__ */ jsxRuntime.jsx(
|
|
177
193
|
"input",
|
|
178
194
|
{
|
|
@@ -261,9 +277,10 @@ var Input = React__namespace.forwardRef(
|
|
|
261
277
|
Input.displayName = "Input";
|
|
262
278
|
|
|
263
279
|
exports.Input = Input;
|
|
280
|
+
exports.RequiredMark = RequiredMark;
|
|
264
281
|
exports.floatingGroupLabelVariants = floatingGroupLabelVariants;
|
|
265
282
|
exports.floatingGroupVariants = floatingGroupVariants;
|
|
266
283
|
exports.floatingLabelVariants = floatingLabelVariants;
|
|
267
284
|
exports.inputVariants = inputVariants;
|
|
268
|
-
//# sourceMappingURL=chunk-
|
|
269
|
-
//# sourceMappingURL=chunk-
|
|
285
|
+
//# sourceMappingURL=chunk-Z5S5JEJD.cjs.map
|
|
286
|
+
//# sourceMappingURL=chunk-Z5S5JEJD.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Input/Input.tsx"],"names":["cva","jsx","cn","React","jsxs"],"mappings":"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","file":"chunk-Z5S5JEJD.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst inputVariants = cva(\n [\n 'w-full px-3 py-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 text-sm',\n md: 'h-10 text-base',\n lg: 'h-12 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer placeholder:text-transparent',\n },\n },\n compoundVariants: [\n // Floating labels need extra height and asymmetric padding so both\n // the floated label and the entered text fit inside the field.\n { labelVariant: 'floating', size: 'sm', className: 'h-11 pt-4 pb-1' },\n { labelVariant: 'floating', size: 'md', className: 'h-14 pt-5 pb-1.5' },\n { labelVariant: 'floating', size: 'lg', className: 'h-16 pt-6 pb-2' },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n labelVariant: 'stacked',\n },\n }\n);\n\n// Bordered field box for group controls (RadioGroup / CheckboxGroup) rendered\n// with labelVariant=\"floating\". Mirrors the floating input's box metrics so\n// mixed forms stay vertically aligned.\nconst floatingGroupVariants = cva(\n ['relative rounded-lg border border-input bg-background px-3'],\n {\n variants: {\n size: {\n sm: 'min-h-11 pt-4 pb-1',\n md: 'min-h-14 pt-5 pb-1.5',\n lg: 'min-h-16 pt-6 pb-2',\n },\n hasError: {\n true: 'border-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// Group label fixed in the floated position (groups have no empty state to\n// float from, so the label never animates). Metrics match the floated state\n// of floatingLabelVariants.\nconst floatingGroupLabelVariants = cva(\n ['absolute start-3 pointer-events-none select-none'],\n {\n variants: {\n size: {\n sm: 'top-0.5 text-[0.65rem]',\n md: 'top-1 text-xs',\n lg: 'top-1.5 text-sm',\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\nconst floatingLabelVariants = cva(\n [\n 'absolute start-3 pointer-events-none select-none',\n 'transition-all duration-200 ease-out',\n // Rest state: vertically centered, placeholder-sized (input is empty and unfocused).\n 'top-1/2 -translate-y-1/2',\n // Floated state: focused, has a value, or was autofilled → shrink and move to the top,\n // staying inside the field.\n 'peer-focus:translate-y-0 peer-[:not(:placeholder-shown)]:translate-y-0 peer-autofill:translate-y-0',\n ],\n {\n variants: {\n size: {\n sm: [\n 'text-sm',\n 'peer-focus:top-0.5 peer-[:not(:placeholder-shown)]:top-0.5 peer-autofill:top-0.5',\n 'peer-focus:text-[0.65rem] peer-[:not(:placeholder-shown)]:text-[0.65rem] peer-autofill:text-[0.65rem]',\n ],\n md: [\n 'text-base',\n 'peer-focus:top-1 peer-[:not(:placeholder-shown)]:top-1 peer-autofill:top-1',\n 'peer-focus:text-xs peer-[:not(:placeholder-shown)]:text-xs peer-autofill:text-xs',\n ],\n lg: [\n 'text-lg',\n 'peer-focus:top-1.5 peer-[:not(:placeholder-shown)]:top-1.5 peer-autofill:top-1.5',\n 'peer-focus:text-sm peer-[:not(:placeholder-shown)]:text-sm peer-autofill:text-sm',\n ],\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\nexport interface InputProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n Omit<VariantProps<typeof inputVariants>, 'labelVariant'> {\n /** Error message to display below the input */\n error?: string;\n /** Helper text to display below the input */\n helperText?: string;\n /** Label for the input */\n label?: string;\n /**\n * How the label is rendered.\n * - `stacked` (default): label above the input.\n * - `floating`: label rests inside the input like a placeholder and floats\n * to the top of the field (staying inside it) when focused or filled.\n * Ignores `placeholder`; when `hideLabel` is set, falls back to a\n * visually-hidden stacked label.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Whether the label should be visually hidden (still accessible) */\n hideLabel?: boolean;\n /** Whether the input is required */\n required?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n}\n\ntype RequiredMarkVariant = 'default' | 'warning';\n\n/** Asterisk rendered next to a label when the field is required. */\nfunction RequiredMark({\n variant = 'default',\n}: {\n variant?: RequiredMarkVariant;\n}) {\n return (\n <span\n className={cn(\n 'ms-1',\n variant === 'warning' ? 'text-warning' : 'text-destructive'\n )}\n aria-hidden=\"true\"\n >\n *\n </span>\n );\n}\n\n/**\n * A styled input component with support for labels, errors, and helper text.\n *\n * @example\n * ```tsx\n * <Input label=\"Email\" type=\"email\" placeholder=\"you@example.com\" />\n * <Input label=\"Password\" type=\"password\" error=\"Password is required\" hasError />\n * <Input label=\"Account number\" labelVariant=\"floating\" />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n size,\n hasError,\n error,\n helperText,\n label,\n labelVariant = 'stacked',\n hideLabel,\n required,\n requiredVariant,\n disabled,\n id,\n placeholder,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ariaDescribedBy,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n const inputElement = (\n <input\n data-slot=\"input\"\n id={inputId}\n ref={ref}\n className={cn(\n inputVariants({\n size,\n hasError: hasError || !!error,\n labelVariant: isFloating ? 'floating' : 'stacked',\n }),\n className\n )}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n required={required}\n disabled={disabled}\n // A single-space placeholder keeps :placeholder-shown reliable so the\n // label can float via CSS alone; a user placeholder would clash with\n // the resting label.\n placeholder={isFloating ? ' ' : placeholder}\n {...props}\n />\n );\n\n return (\n <div\n data-slot=\"input-wrapper\"\n className={cn('flex flex-col gap-1.5', disabled && 'opacity-50')}\n >\n {label && !isFloating && (\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n {isFloating ? (\n <div className=\"relative\">\n {inputElement}\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={floatingLabelVariants({\n size,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n </div>\n ) : (\n inputElement\n )}\n {error && (\n <p\n id={errorId}\n data-slot=\"input-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"input-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport {\n Input,\n RequiredMark,\n inputVariants,\n floatingLabelVariants,\n floatingGroupVariants,\n floatingGroupLabelVariants,\n};\nexport type { RequiredMarkVariant };\n"]}
|