react-ui-suite 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/Alert/Alert.tsx","../components/Badge/Badge.tsx","../components/Button/Button.tsx","../components/Card/Card.tsx","../components/Checkbox/Checkbox.tsx","../components/Combobox/icons.tsx","../utils/ref.ts","../components/ColorPicker/ColorPicker.tsx","../components/Combobox/Combobox.tsx","../components/Dropdown/Dropdown.tsx","../components/Popover/Popover.tsx","../components/Combobox/hooks.ts","../components/Combobox/Listbox.tsx","../components/DatalistInput/DatalistInput.tsx","../components/DatePicker/DatePicker.tsx","../components/Select/Select.tsx","../components/Dialog/Dialog.tsx","../components/Disclosure/Disclosure.tsx","../components/InputField/InputField.tsx","../components/NumberInput/NumberInput.tsx","../components/OutputChip/OutputChip.tsx","../components/ProgressMeter/ProgressMeter.tsx","../components/Radio/Radio.tsx","../components/Slider/Slider.tsx","../components/StackedList/StackedList.tsx","../components/Table/Table.tsx","../components/Textarea/Textarea.tsx","../components/Toggle/Toggle.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"danger\";\r\n\r\nconst variantStyles: Record<AlertVariant, { container: string; accent: string; icon: string }> = {\r\n info: {\r\n container: \"bg-sky-50 text-sky-900 ring-1 ring-sky-100 dark:bg-sky-500/10 dark:text-sky-100\",\r\n accent: \"bg-sky-400\",\r\n icon: \"ℹ️\",\r\n },\r\n success: {\r\n container:\r\n \"bg-emerald-50 text-emerald-900 ring-1 ring-emerald-100 dark:bg-emerald-500/10 dark:text-emerald-100\",\r\n accent: \"bg-emerald-400\",\r\n icon: \"✔️\",\r\n },\r\n warning: {\r\n container:\r\n \"bg-amber-50 text-amber-900 ring-1 ring-amber-100 dark:bg-amber-400/10 dark:text-amber-100\",\r\n accent: \"bg-amber-400\",\r\n icon: \"⚠️\",\r\n },\r\n danger: {\r\n container:\r\n \"bg-rose-50 text-rose-900 ring-1 ring-rose-100 dark:bg-rose-500/10 dark:text-rose-100\",\r\n accent: \"bg-rose-400\",\r\n icon: \"⛔\",\r\n },\r\n};\r\n\r\nexport type AlertProps = React.HTMLAttributes<HTMLDivElement> & {\r\n title: string;\r\n description?: string;\r\n variant?: AlertVariant;\r\n onDismiss?: () => void;\r\n};\r\n\r\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(\r\n { title, description, variant = \"info\", onDismiss, className, ...rest },\r\n ref\r\n) {\r\n const style = variantStyles[variant];\r\n return (\r\n <div\r\n {...rest}\r\n ref={ref}\r\n role=\"alert\"\r\n className={twMerge(\r\n \"relative flex items-start gap-3 rounded-2xl px-4 py-3 text-sm shadow-sm\",\r\n style.container,\r\n className\r\n )}\r\n >\r\n <span className=\"mt-[2px] text-base\" aria-hidden=\"true\">\r\n {style.icon}\r\n </span>\r\n <div className=\"flex-1\">\r\n <p className=\"font-semibold\">{title}</p>\r\n {description ? <p className=\"text-sm/relaxed opacity-90\">{description}</p> : null}\r\n </div>\r\n {onDismiss ? (\r\n <button\r\n type=\"button\"\r\n onClick={onDismiss}\r\n className=\"rounded-full p-1 text-xs font-semibold uppercase tracking-wide text-current/70 hover:text-current focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-transparent\"\r\n aria-label=\"Dismiss alert\"\r\n >\r\n ×\r\n </button>\r\n ) : null}\r\n <span\r\n className={twMerge(\"absolute inset-y-2 left-1 w-1 rounded-full\", style.accent)}\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type BadgeVariant = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\r\n\r\nconst variantClasses: Record<BadgeVariant, string> = {\r\n neutral:\r\n \"bg-slate-100 text-slate-700 ring-1 ring-slate-200 dark:bg-zinc-900/60 dark:text-zinc-100 dark:ring-zinc-700/60\",\r\n info: \"bg-sky-50 text-sky-700 ring-1 ring-sky-200 dark:bg-sky-500/10 dark:text-sky-300\",\r\n success:\r\n \"bg-emerald-50 text-emerald-700 ring-1 ring-emerald-200 dark:bg-emerald-500/10 dark:text-emerald-300\",\r\n warning:\r\n \"bg-amber-50 text-amber-700 ring-1 ring-amber-200 dark:bg-amber-500/10 dark:text-amber-200\",\r\n danger: \"bg-rose-50 text-rose-700 ring-1 ring-rose-200 dark:bg-rose-500/10 dark:text-rose-300\",\r\n};\r\n\r\nexport type BadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\r\n variant?: BadgeVariant;\r\n icon?: React.ReactNode;\r\n};\r\n\r\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\r\n { variant = \"neutral\", icon, className, children, ...rest },\r\n ref\r\n) {\r\n return (\r\n <span\r\n {...rest}\r\n ref={ref}\r\n className={twMerge(\r\n \"inline-flex items-center gap-1 rounded-full px-3 py-1 text-[0.7rem] font-semibold uppercase tracking-wide\",\r\n variantClasses[variant],\r\n className\r\n )}\r\n >\r\n {icon ? <span aria-hidden=\"true\">{icon}</span> : null}\r\n {children}\r\n </span>\r\n );\r\n});\r\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\r\n children: ReactNode; // label or JSX inside the button\r\n};\r\n\r\nexport default function Button({\r\n children,\r\n onClick,\r\n disabled = false,\r\n className = \"\",\r\n type = \"button\",\r\n style,\r\n ...rest\r\n}: ButtonProps) {\r\n const hasCustomBackground = typeof className === \"string\" && /bg-/.test(className);\r\n const hasCustomText = typeof className === \"string\" && /text-/.test(className);\r\n\r\n const backgroundClasses = hasCustomBackground\r\n ? \"\"\r\n : \"bg-white hover:bg-slate-100 dark:bg-zinc-900/70 dark:hover:bg-zinc-800\";\r\n\r\n const textClasses = hasCustomText ? \"\" : \"text-slate-900 dark:text-zinc-100\";\r\n\r\n return (\r\n <button\r\n type={type}\r\n onClick={onClick}\r\n disabled={disabled}\r\n style={style}\r\n {...rest}\r\n className={twMerge(\r\n \"inline-flex items-center justify-center gap-2 rounded-xl border border-slate-300 px-4 py-2 text-sm font-semibold shadow-sm transition\",\r\n backgroundClasses,\r\n textClasses,\r\n \"hover:border-slate-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-500\",\r\n \"disabled:cursor-not-allowed disabled:opacity-60\",\r\n \"dark:border-zinc-700/60 dark:hover:border-zinc-500 dark:shadow-slate-950/20\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type CardProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> & {\r\n eyebrow?: string;\r\n title?: React.ReactNode;\r\n actions?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n muted?: boolean;\r\n};\r\n\r\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\r\n { eyebrow, title, actions, children, footer, muted, className, ...rest },\r\n ref\r\n) {\r\n const hasHeader = eyebrow || actions;\r\n\r\n return (\r\n <div\r\n {...rest}\r\n ref={ref}\r\n className={twMerge(\r\n \"flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-5 shadow-lg shadow-slate-200/40 dark:border-zinc-700/60 dark:bg-zinc-900/70 dark:shadow-none\",\r\n muted && \"bg-slate-50/70 dark:bg-zinc-900/40\",\r\n className\r\n )}\r\n >\r\n {hasHeader && (\r\n <div className=\"flex items-center justify-between gap-4\">\r\n {eyebrow ? (\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-400 dark:text-zinc-400\">\r\n {eyebrow}\r\n </p>\r\n ) : (\r\n <span />\r\n )}\r\n {actions ? (\r\n <div className=\"text-sm text-slate-500 dark:text-zinc-400\">{actions}</div>\r\n ) : null}\r\n </div>\r\n )}\r\n {title ? (\r\n <h3\r\n className={twMerge(\r\n \"text-lg font-semibold text-slate-900 dark:text-zinc-100\",\r\n hasHeader ? \"mt-3\" : \"mt-0\"\r\n )}\r\n >\r\n {title}\r\n </h3>\r\n ) : null}\r\n {children ? (\r\n <div className=\"mt-3 flex-1 text-sm text-slate-600 dark:text-zinc-300\">{children}</div>\r\n ) : null}\r\n {footer ? (\r\n <div className=\"mt-4 border-t border-slate-100 pt-3 text-xs text-slate-500 dark:border-zinc-800 dark:text-zinc-400\">\r\n {footer}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { Check } from \"../Combobox/icons\";\r\nimport { assignRef } from \"../../utils/ref\";\r\n\r\nexport type CheckboxProps = Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n \"type\" | \"onChange\" | \"checked\" | \"defaultChecked\"\r\n> & {\r\n label: string;\r\n description?: string;\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n indeterminate?: boolean;\r\n};\r\n\r\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\r\n {\r\n label,\r\n description,\r\n checked,\r\n defaultChecked = false,\r\n onChange,\r\n disabled,\r\n className,\r\n indeterminate,\r\n id,\r\n ...rest\r\n },\r\n forwardedRef\r\n) {\r\n const internalRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const mergedRef = React.useCallback(\r\n (node: HTMLInputElement | null) => {\r\n internalRef.current = node;\r\n assignRef(forwardedRef, node);\r\n },\r\n [forwardedRef]\r\n );\r\n\r\n const isControlled = typeof checked === \"boolean\";\r\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked);\r\n const resolvedChecked = isControlled ? !!checked : internalChecked;\r\n const generatedId = React.useId();\r\n const checkboxId = id ?? generatedId;\r\n\r\n React.useEffect(() => {\r\n if (internalRef.current) {\r\n internalRef.current.indeterminate = !!indeterminate && !resolvedChecked;\r\n }\r\n }, [indeterminate, resolvedChecked]);\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const next = event.target.checked;\r\n if (!isControlled) {\r\n setInternalChecked(next);\r\n }\r\n onChange?.(next);\r\n };\r\n\r\n return (\r\n <label\r\n htmlFor={checkboxId}\r\n className={twMerge(\r\n \"flex cursor-pointer gap-3 rounded-2xl border border-transparent px-2 py-2 text-left transition hover:bg-slate-50 dark:hover:bg-zinc-900/60\",\r\n \"items-center\",\r\n disabled && \"cursor-not-allowed opacity-60\",\r\n className\r\n )}\r\n >\r\n <span className=\"flex h-6 w-6 items-center justify-center\">\r\n <input\r\n {...rest}\r\n ref={mergedRef}\r\n id={checkboxId}\r\n type=\"checkbox\"\r\n className=\"peer sr-only\"\r\n checked={resolvedChecked}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n />\r\n <span\r\n className={twMerge(\r\n \"grid size-5 place-items-center rounded-lg border border-slate-300 bg-white text-[0.65rem] font-semibold text-slate-600 transition drop-shadow-sm peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-slate-400 dark:border-zinc-600 dark:bg-zinc-950/70 dark:text-zinc-200\",\r\n resolvedChecked &&\r\n \"border-slate-400 bg-slate-100 text-slate-900 shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-zinc-500 dark:bg-zinc-500 dark:text-white\"\r\n )}\r\n aria-hidden=\"true\"\r\n >\r\n {resolvedChecked ? (\r\n <Check className=\"h-3 w-3\" />\r\n ) : indeterminate ? (\r\n <span className=\"h-[2px] w-2 rounded-full bg-current\" />\r\n ) : null}\r\n </span>\r\n </span>\r\n <span className=\"flex flex-1 flex-col\">\r\n <span className=\"text-sm font-semibold text-slate-900 dark:text-zinc-100\">{label}</span>\r\n {description ? (\r\n <span className=\"text-xs text-slate-500 dark:text-zinc-400\">{description}</span>\r\n ) : null}\r\n </span>\r\n </label>\r\n );\r\n});\r\n","import * as React from \"react\";\r\n\r\nexport function ChevronDown(props: React.SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" {...props}>\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.172l3.71-3.94a.75.75 0 1 1 1.08 1.04l-4.24 4.5a.75.75 0 0 1-1.08 0l-4.24-4.5a.75.75 0 0 1 .02-1.06z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Check(props: React.SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" {...props}>\r\n <path d=\"M16.704 5.29a1 1 0 0 1 0 1.415l-7.2 7.2a1 1 0 0 1-1.415 0l-3.2-3.2a1 1 0 1 1 1.414-1.414l2.493 2.493 6.493-6.493a1 1 0 0 1 1.415 0z\" />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Calendar(props: React.SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" aria-hidden=\"true\" {...props}>\r\n <rect x=\"3.5\" y=\"5\" width=\"17\" height=\"15\" rx=\"2\" strokeWidth=\"1.5\" />\r\n <path d=\"M8 4v3M16 4v3\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <path d=\"M3.5 9h17\" strokeWidth=\"1.5\" />\r\n <rect x=\"7.75\" y=\"12.25\" width=\"4.5\" height=\"4.5\" rx=\"1\" strokeWidth=\"1.5\" />\r\n </svg>\r\n );\r\n}\r\n\r\nexport function Clock(props: React.SVGProps<SVGSVGElement>) {\r\n return (\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" aria-hidden=\"true\" {...props}>\r\n <circle cx=\"12\" cy=\"12\" r=\"8.5\" strokeWidth=\"1.5\" />\r\n <path\r\n d=\"M12 7.5v4.25l3 1.75\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n );\r\n}\r\n","import * as React from \"react\";\r\n\r\nexport function assignRef<T>(ref: React.ForwardedRef<T>, value: T | null) {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n } else if (ref) {\r\n (ref as React.MutableRefObject<T | null>).current = value;\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { assignRef } from \"../../utils/ref\";\r\n\r\ntype ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\r\n\r\nexport type ColorPickerProps = Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n \"type\" | \"value\" | \"defaultValue\" | \"onChange\"\r\n> & {\r\n label?: string;\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n swatches?: string[];\r\n};\r\n\r\nconst defaultSwatches = [\"#0ea5e9\", \"#22c55e\", \"#f97316\", \"#f43f5e\", \"#6366f1\", \"#facc15\"];\r\n\r\nconst formatOrder: ColorFormat[] = [\"hex\", \"rgb\", \"hsl\"];\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nfunction normalizeHex(input: string | undefined | null): string | null {\r\n if (!input) return null;\r\n let hex = input.trim().replace(/^#/, \"\");\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split(\"\")\r\n .map((char) => char + char)\r\n .join(\"\");\r\n }\r\n if (!/^[0-9a-fA-F]{6}$/.test(hex)) return null;\r\n return `#${hex.toUpperCase()}`;\r\n}\r\n\r\nfunction hexToRgb(hex: string) {\r\n const normalized = normalizeHex(hex);\r\n if (!normalized) return null;\r\n const value = normalized.replace(\"#\", \"\");\r\n return {\r\n r: parseInt(value.slice(0, 2), 16),\r\n g: parseInt(value.slice(2, 4), 16),\r\n b: parseInt(value.slice(4, 6), 16),\r\n };\r\n}\r\n\r\nfunction rgbToHex(r: number, g: number, b: number) {\r\n const parts = [r, g, b]\r\n .map((component) => clamp(Math.round(component), 0, 255))\r\n .map((component) => component.toString(16).padStart(2, \"0\"));\r\n return `#${parts.join(\"\").toUpperCase()}`;\r\n}\r\n\r\nfunction hexToHsl(hex: string) {\r\n const rgb = hexToRgb(hex);\r\n if (!rgb) return null;\r\n const r = rgb.r / 255;\r\n const g = rgb.g / 255;\r\n const b = rgb.b / 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n let h = 0;\r\n let s = 0;\r\n const l = (max + min) / 2;\r\n\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n}\r\n\r\nfunction hslToHex(h: number, s: number, l: number) {\r\n const hue = ((h % 360) + 360) % 360;\r\n const sat = clamp(s / 100, 0, 1);\r\n const light = clamp(l / 100, 0, 1);\r\n\r\n if (sat === 0) {\r\n const gray = Math.round(light * 255);\r\n return rgbToHex(gray, gray, gray);\r\n }\r\n\r\n const q = light < 0.5 ? light * (1 + sat) : light + sat - light * sat;\r\n const p = 2 * light - q;\r\n\r\n function hueToRgb(t: number) {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n }\r\n\r\n const r = hueToRgb(hue / 360 + 1 / 3);\r\n const g = hueToRgb(hue / 360);\r\n const b = hueToRgb(hue / 360 - 1 / 3);\r\n\r\n return rgbToHex(r * 255, g * 255, b * 255);\r\n}\r\n\r\ntype ChannelValues = string[];\r\n\r\nconst channelLabels: Record<ColorFormat, string[]> = {\r\n hex: [\"HEX\"],\r\n rgb: [\"R\", \"G\", \"B\"],\r\n hsl: [\"H\", \"S\", \"L\"],\r\n};\r\n\r\ntype HsvTuple = { h: number; s: number; v: number };\r\n\r\nfunction hexToHsv(hex: string): HsvTuple | null {\r\n const rgb = hexToRgb(hex);\r\n if (!rgb) return null;\r\n const r = rgb.r / 255;\r\n const g = rgb.g / 255;\r\n const b = rgb.b / 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const delta = max - min;\r\n let h = 0;\r\n\r\n if (delta !== 0) {\r\n if (max === r) {\r\n h = ((g - b) / delta) % 6;\r\n } else if (max === g) {\r\n h = (b - r) / delta + 2;\r\n } else {\r\n h = (r - g) / delta + 4;\r\n }\r\n h *= 60;\r\n if (h < 0) h += 360;\r\n }\r\n\r\n const s = max === 0 ? 0 : delta / max;\r\n const v = max;\r\n\r\n return {\r\n h: Math.round(h),\r\n s: Math.round(s * 100),\r\n v: Math.round(v * 100),\r\n };\r\n}\r\n\r\nfunction hsvToHex(h: number, s: number, v: number) {\r\n const hue = ((h % 360) + 360) % 360;\r\n const sat = clamp(s / 100, 0, 1);\r\n const val = clamp(v / 100, 0, 1);\r\n const c = val * sat;\r\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));\r\n const m = val - c;\r\n\r\n let rPrime = 0;\r\n let gPrime = 0;\r\n let bPrime = 0;\r\n\r\n if (hue < 60) {\r\n rPrime = c;\r\n gPrime = x;\r\n } else if (hue < 120) {\r\n rPrime = x;\r\n gPrime = c;\r\n } else if (hue < 180) {\r\n gPrime = c;\r\n bPrime = x;\r\n } else if (hue < 240) {\r\n gPrime = x;\r\n bPrime = c;\r\n } else if (hue < 300) {\r\n rPrime = x;\r\n bPrime = c;\r\n } else {\r\n rPrime = c;\r\n bPrime = x;\r\n }\r\n\r\n const r = Math.round((rPrime + m) * 255);\r\n const g = Math.round((gPrime + m) * 255);\r\n const b = Math.round((bPrime + m) * 255);\r\n\r\n return rgbToHex(r, g, b);\r\n}\r\n\r\nfunction getChannelValues(hex: string, format: ColorFormat): ChannelValues {\r\n const normalized = normalizeHex(hex) ?? \"#000000\";\r\n switch (format) {\r\n case \"rgb\": {\r\n const rgb = hexToRgb(normalized);\r\n if (!rgb) return [\"0\", \"0\", \"0\"];\r\n return [rgb.r, rgb.g, rgb.b].map((value) => String(value));\r\n }\r\n case \"hsl\": {\r\n const hsl = hexToHsl(normalized);\r\n if (!hsl) return [\"0\", \"0\", \"0\"];\r\n return [hsl.h, hsl.s, hsl.l].map((value) => String(value));\r\n }\r\n default: {\r\n const value = normalized.replace(\"#\", \"\");\r\n return [value.toUpperCase()];\r\n }\r\n }\r\n}\r\n\r\nfunction channelsToHex(values: Readonly<ChannelValues>, format: ColorFormat): string | null {\r\n if (values.some((value) => value.trim() === \"\")) return null;\r\n switch (format) {\r\n case \"hex\": {\r\n const hex = values[0]?.trim().replace(/^#/, \"\") ?? \"\";\r\n if (!/^[0-9a-fA-F]{3}$/.test(hex) && !/^[0-9a-fA-F]{6}$/.test(hex)) return null;\r\n return normalizeHex(`#${hex}`);\r\n }\r\n case \"rgb\": {\r\n const numbers = values.map((value) => Number(value.trim()));\r\n if (numbers.some((num) => Number.isNaN(num))) return null;\r\n return rgbToHex(numbers[0], numbers[1], numbers[2]);\r\n }\r\n case \"hsl\": {\r\n const numbers = values.map((value) => Number(value.trim()));\r\n if (numbers.some((num) => Number.isNaN(num))) return null;\r\n return hslToHex(numbers[0], numbers[1], numbers[2]);\r\n }\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport const ColorPicker = React.forwardRef<HTMLInputElement, ColorPickerProps>(\r\n function ColorPicker(\r\n {\r\n label,\r\n value,\r\n defaultValue = \"#0ea5e9\",\r\n onChange,\r\n swatches = defaultSwatches,\r\n id,\r\n className,\r\n ...rest\r\n },\r\n forwardedRef\r\n ) {\r\n const normalizedDefault = React.useMemo(\r\n () => normalizeHex(defaultValue) ?? \"#0EA5E9\",\r\n [defaultValue]\r\n );\r\n const normalizedSwatches = React.useMemo(\r\n () => swatches.map((color) => normalizeHex(color)).filter(Boolean) as string[],\r\n [swatches]\r\n );\r\n const isControlled = typeof value === \"string\";\r\n const [internalValue, setInternalValue] = React.useState(normalizedDefault);\r\n const [format, setFormat] = React.useState<ColorFormat>(\"hex\");\r\n const resolvedValue = React.useMemo(() => {\r\n if (isControlled) {\r\n return normalizeHex(value) ?? normalizedDefault;\r\n }\r\n return normalizeHex(internalValue) ?? normalizedDefault;\r\n }, [isControlled, value, internalValue, normalizedDefault]);\r\n const [channelValues, setChannelValues] = React.useState<ChannelValues>(() =>\r\n getChannelValues(resolvedValue, format)\r\n );\r\n const [swatchList, setSwatchList] = React.useState<string[]>(normalizedSwatches);\r\n const resolvedHsv = React.useMemo(\r\n () => hexToHsv(resolvedValue) ?? { h: 199, s: 100, v: 100 },\r\n [resolvedValue]\r\n );\r\n const [hue, setHue] = React.useState(resolvedHsv.h);\r\n const [saturation, setSaturation] = React.useState(resolvedHsv.s);\r\n const [valueLevel, setValueLevel] = React.useState(resolvedHsv.v);\r\n\r\n const generatedId = React.useId();\r\n const inputId = id ?? generatedId;\r\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const triggerRef: React.MutableRefObject<HTMLButtonElement | null> = React.useRef(null);\r\n const panelRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const gradientRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const hueRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const gradientDragCleanupRef: React.MutableRefObject<(() => void) | null> = React.useRef(null);\r\n const hueDragCleanupRef: React.MutableRefObject<(() => void) | null> = React.useRef(null);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n const mergedRef = React.useCallback(\r\n (node: HTMLInputElement | null) => {\r\n inputRef.current = node;\r\n assignRef(forwardedRef, node);\r\n },\r\n [forwardedRef]\r\n );\r\n\r\n const shouldLockHue = (s: number, v: number) => s <= 1 || v <= 1;\r\n\r\n React.useEffect(() => {\r\n setHue((prev) => (shouldLockHue(resolvedHsv.s, resolvedHsv.v) ? prev : resolvedHsv.h));\r\n setSaturation(resolvedHsv.s);\r\n setValueLevel(resolvedHsv.v);\r\n }, [resolvedHsv.h, resolvedHsv.s, resolvedHsv.v]);\r\n\r\n React.useEffect(() => {\r\n setSwatchList(normalizedSwatches);\r\n }, [normalizedSwatches]);\r\n\r\n const applyColor = React.useCallback(\r\n (next: string) => {\r\n const normalized = normalizeHex(next);\r\n if (!normalized) return;\r\n if (!isControlled) {\r\n setInternalValue(normalized);\r\n }\r\n onChange?.(normalized);\r\n },\r\n [isControlled, onChange]\r\n );\r\n\r\n const handleSwatchClick = (color: string) => {\r\n const normalized = normalizeHex(color);\r\n if (!normalized) return;\r\n const hsv = hexToHsv(normalized);\r\n if (hsv) {\r\n setHue((prev) => (shouldLockHue(hsv.s, hsv.v) ? prev : hsv.h));\r\n setSaturation(hsv.s);\r\n setValueLevel(hsv.v);\r\n }\r\n applyColor(normalized);\r\n };\r\n\r\n const handleAddSwatch = React.useCallback(() => {\r\n const normalized = normalizeHex(resolvedValue);\r\n if (!normalized) return;\r\n setSwatchList((prev) => {\r\n if (prev.includes(normalized)) return prev;\r\n return [...prev, normalized];\r\n });\r\n }, [resolvedValue]);\r\n\r\n const handleRemoveSwatch = React.useCallback((color: string) => {\r\n setSwatchList((prev) => prev.filter((value) => value.toLowerCase() !== color.toLowerCase()));\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n setChannelValues(getChannelValues(resolvedValue, format));\r\n }, [resolvedValue, format]);\r\n\r\n const handleChannelChange = React.useCallback(\r\n (index: number, nextValue: string) => {\r\n setChannelValues((prev) => {\r\n const updated = [...prev];\r\n if (format === \"hex\") {\r\n updated[index] = nextValue.replace(/[^0-9a-fA-F]/g, \"\").toUpperCase();\r\n } else {\r\n updated[index] = nextValue;\r\n }\r\n const parsed = channelsToHex(updated, format);\r\n if (parsed) {\r\n applyColor(parsed);\r\n }\r\n return updated;\r\n });\r\n },\r\n [applyColor, format]\r\n );\r\n\r\n const resetChannels = React.useCallback(() => {\r\n setChannelValues(getChannelValues(resolvedValue, format));\r\n }, [resolvedValue, format]);\r\n\r\n const closePanel = React.useCallback(() => {\r\n setIsOpen(false);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (!isOpen) return;\r\n const handlePointer = (event: PointerEvent) => {\r\n const target = event.target as Node;\r\n if (panelRef.current?.contains(target) || triggerRef.current?.contains(target)) {\r\n return;\r\n }\r\n closePanel();\r\n };\r\n const handleKeydown = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closePanel();\r\n triggerRef.current?.focus();\r\n }\r\n };\r\n\r\n window.addEventListener(\"pointerdown\", handlePointer);\r\n window.addEventListener(\"keydown\", handleKeydown);\r\n return () => {\r\n window.removeEventListener(\"pointerdown\", handlePointer);\r\n window.removeEventListener(\"keydown\", handleKeydown);\r\n };\r\n }, [closePanel, isOpen]);\r\n\r\n const updateGradientColor = React.useCallback(\r\n (clientX: number, clientY: number) => {\r\n const rect = gradientRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n const xRatio = clamp((clientX - rect.left) / rect.width, 0, 1);\r\n const yRatio = clamp((clientY - rect.top) / rect.height, 0, 1);\r\n const nextS = Math.round(xRatio * 100);\r\n const nextV = Math.round((1 - yRatio) * 100);\r\n setSaturation(nextS);\r\n setValueLevel(nextV);\r\n applyColor(hsvToHex(hue, nextS, nextV));\r\n },\r\n [applyColor, hue]\r\n );\r\n\r\n const handleGradientPointerDown = React.useCallback(\r\n (event: React.PointerEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n gradientDragCleanupRef.current?.();\r\n updateGradientColor(event.clientX, event.clientY);\r\n const handleMove = (moveEvent: PointerEvent) => {\r\n moveEvent.preventDefault();\r\n updateGradientColor(moveEvent.clientX, moveEvent.clientY);\r\n };\r\n const stop = () => {\r\n window.removeEventListener(\"pointermove\", handleMove);\r\n window.removeEventListener(\"pointerup\", stop);\r\n window.removeEventListener(\"pointercancel\", stop);\r\n gradientDragCleanupRef.current = null;\r\n };\r\n window.addEventListener(\"pointermove\", handleMove);\r\n window.addEventListener(\"pointerup\", stop);\r\n window.addEventListener(\"pointercancel\", stop);\r\n gradientDragCleanupRef.current = stop;\r\n },\r\n [updateGradientColor]\r\n );\r\n\r\n const updateHueFromPointer = React.useCallback(\r\n (clientX: number) => {\r\n const rect = hueRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\r\n const nextHue = Math.round(ratio * 360);\r\n setHue(nextHue);\r\n applyColor(hsvToHex(nextHue, saturation, valueLevel));\r\n },\r\n [applyColor, saturation, valueLevel]\r\n );\r\n\r\n const handleHuePointerDown = React.useCallback(\r\n (event: React.PointerEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n hueDragCleanupRef.current?.();\r\n updateHueFromPointer(event.clientX);\r\n const handleMove = (moveEvent: PointerEvent) => {\r\n moveEvent.preventDefault();\r\n updateHueFromPointer(moveEvent.clientX);\r\n };\r\n const stop = () => {\r\n window.removeEventListener(\"pointermove\", handleMove);\r\n window.removeEventListener(\"pointerup\", stop);\r\n window.removeEventListener(\"pointercancel\", stop);\r\n hueDragCleanupRef.current = null;\r\n };\r\n window.addEventListener(\"pointermove\", handleMove);\r\n window.addEventListener(\"pointerup\", stop);\r\n window.addEventListener(\"pointercancel\", stop);\r\n hueDragCleanupRef.current = stop;\r\n },\r\n [updateHueFromPointer]\r\n );\r\n\r\n React.useEffect(() => {\r\n return () => {\r\n gradientDragCleanupRef.current?.();\r\n hueDragCleanupRef.current?.();\r\n };\r\n }, []);\r\n\r\n const activeLabels = channelLabels[format];\r\n\r\n return (\r\n <div className=\"relative inline-flex flex-col items-center gap-2\">\r\n {label ? (\r\n <p className=\"text-[10px] font-semibold uppercase tracking-[0.3em] text-slate-400 dark:text-zinc-500\">\r\n {label}\r\n </p>\r\n ) : null}\r\n <button\r\n type=\"button\"\r\n ref={triggerRef}\r\n onClick={() => setIsOpen((prev) => !prev)}\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={isOpen}\r\n aria-label={label ? `Adjust ${label}` : \"Choose color\"}\r\n className=\"relative inline-flex h-12 w-12 items-center justify-center rounded-full border border-slate-200 bg-white shadow-sm transition hover:shadow-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 dark:border-zinc-700 dark:bg-zinc-900\"\r\n >\r\n <span\r\n className=\"absolute inset-1 rounded-full border border-white/30 shadow-inner dark:border-zinc-900/60\"\r\n style={{ background: resolvedValue }}\r\n aria-hidden=\"true\"\r\n />\r\n <span\r\n className=\"relative text-xl drop-shadow-[0_1px_1px_rgba(15,23,42,0.55)]\"\r\n style={{ transform: \"translateX(0.5px) translateY(-1.5px)\" }}\r\n aria-hidden=\"true\"\r\n >\r\n 🎨\r\n </span>\r\n </button>\r\n {isOpen ? (\r\n <div\r\n ref={panelRef}\r\n role=\"dialog\"\r\n aria-label={label ? `${label} color picker` : \"Color picker dialog\"}\r\n className=\"absolute left-1/2 top-full z-20 mt-3 w-[340px] max-w-[90vw] -translate-x-1/2 rounded-2xl border border-slate-200/80 bg-white/95 p-4 shadow-2xl backdrop-blur-sm dark:border-zinc-700/60 dark:bg-zinc-900/95\"\r\n >\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-3\">\r\n <div\r\n ref={gradientRef}\r\n onPointerDown={handleGradientPointerDown}\r\n className=\"relative h-40 w-full cursor-crosshair overflow-hidden rounded-xl shadow-[inset_0_1px_2px_rgba(15,23,42,.25)] ring-1 ring-black/5 dark:ring-white/10\"\r\n style={{\r\n backgroundColor: `hsl(${hue}, 100%, 50%)`,\r\n backgroundImage:\r\n \"linear-gradient(to top, rgba(0,0,0,1), rgba(0,0,0,0)), linear-gradient(to right, #fff, rgba(255,255,255,0))\",\r\n }}\r\n aria-label=\"Color area\"\r\n >\r\n <span\r\n className=\"pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-[0_1px_2px_rgba(15,23,42,.4)]\"\r\n style={{\r\n left: `${saturation}%`,\r\n top: `${100 - valueLevel}%`,\r\n background: resolvedValue,\r\n }}\r\n />\r\n </div>\r\n <div\r\n ref={hueRef}\r\n onPointerDown={handleHuePointerDown}\r\n className=\"relative h-3 w-full cursor-pointer rounded-full border border-white/40 shadow-inner dark:border-zinc-800/60\"\r\n style={{\r\n background: \"linear-gradient(90deg, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\",\r\n }}\r\n aria-label=\"Hue slider\"\r\n >\r\n <span\r\n className=\"pointer-events-none absolute top-1/2 h-5 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full border border-slate-900/40 bg-white shadow\"\r\n style={{ left: `${(hue / 360) * 100}%` }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"flex flex-wrap items-center gap-2\">\r\n {swatchList.map((color) => (\r\n <div key={color} className=\"relative group\">\r\n <button\r\n type=\"button\"\r\n onClick={() => handleSwatchClick(color)}\r\n className={twMerge(\r\n \"h-7 w-7 rounded-full border border-white/30 transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 dark:border-zinc-900/70\",\r\n color.toLowerCase() === resolvedValue.toLowerCase() &&\r\n \"ring-2 ring-offset-2 ring-slate-500 dark:ring-offset-slate-900\"\r\n )}\r\n style={{ background: color }}\r\n aria-label={`Select ${color}`}\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={() => handleRemoveSwatch(color)}\r\n className=\"absolute -top-1.5 -right-1.5 hidden h-5 w-5 items-center justify-center rounded-full bg-white text-[10px] font-bold text-slate-600 shadow-sm ring-1 ring-slate-200 transition group-hover:flex group-focus-within:flex dark:bg-zinc-900 dark:text-zinc-200 dark:ring-zinc-700\"\r\n aria-label={`Remove ${color} swatch`}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n ))}\r\n <button\r\n type=\"button\"\r\n onClick={handleAddSwatch}\r\n className=\"inline-flex h-7 items-center gap-1 rounded-full border border-dashed border-slate-300 px-3 text-xs font-semibold uppercase tracking-wide text-slate-500 transition hover:border-slate-400 hover:text-slate-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 dark:border-zinc-600 dark:text-zinc-300 dark:hover:border-zinc-500\"\r\n >\r\n + Add swatch\r\n </button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\r\n <p className=\"text-[11px] font-semibold uppercase tracking-[0.2em] text-slate-400 dark:text-zinc-500\">\r\n Channels\r\n </p>\r\n <div className=\"inline-flex overflow-hidden rounded-xl border border-slate-200 bg-white/80 text-[11px] font-semibold uppercase text-slate-500 dark:border-zinc-700 dark:bg-zinc-900/80 dark:text-zinc-300\">\r\n {formatOrder.map((option) => (\r\n <button\r\n key={option}\r\n type=\"button\"\r\n onClick={() => setFormat(option)}\r\n aria-pressed={format === option}\r\n className={twMerge(\r\n \"px-3 py-1.5 transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400/60\",\r\n format === option\r\n ? \"bg-white text-slate-900 shadow-[inset_0_0_0_1px_rgba(15,23,42,0.08)] dark:bg-white/15 dark:text-white\"\r\n : \"text-slate-500 dark:text-zinc-400\"\r\n )}\r\n >\r\n {option.toUpperCase()}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {format === \"hex\" ? (\r\n <label className=\"flex min-w-[180px] flex-1 items-center gap-2 rounded-xl border border-slate-200 bg-white/60 px-3 py-1.5 font-mono text-sm text-slate-900 focus-within:border-slate-400 dark:border-zinc-700 dark:bg-zinc-900/70 dark:text-zinc-100\">\r\n <span className=\"text-base font-semibold text-slate-400 dark:text-zinc-500\">\r\n #\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={channelValues[0] ?? \"\"}\r\n onChange={(event) => handleChannelChange(0, event.target.value)}\r\n onBlur={resetChannels}\r\n inputMode=\"text\"\r\n maxLength={6}\r\n className=\"h-6 min-w-0 flex-1 border-none bg-transparent p-0 text-left text-sm uppercase tracking-[0.2em] text-slate-900 placeholder:text-slate-400 focus:outline-none dark:text-zinc-50\"\r\n />\r\n </label>\r\n ) : (\r\n channelValues.map((value, index) => (\r\n <label\r\n key={activeLabels[index]}\r\n className=\"flex min-w-[90px] flex-1 items-center gap-2 rounded-xl border border-slate-200 bg-white/60 px-3 py-1.5 font-mono text-sm text-slate-900 focus-within:border-slate-400 dark:border-zinc-700 dark:bg-zinc-900/70 dark:text-zinc-100\"\r\n >\r\n <span className=\"text-[11px] font-semibold uppercase tracking-[0.2em] text-slate-400 dark:text-zinc-500\">\r\n {activeLabels[index]}\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(event) => handleChannelChange(index, event.target.value)}\r\n onBlur={resetChannels}\r\n inputMode=\"numeric\"\r\n className=\"h-6 min-w-0 flex-1 border-none bg-transparent p-0 text-right text-sm text-slate-900 placeholder:text-slate-400 focus:outline-none dark:text-zinc-50\"\r\n />\r\n </label>\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n ) : null}\r\n <input\r\n {...rest}\r\n ref={mergedRef}\r\n id={inputId}\r\n type=\"hidden\"\r\n className={className}\r\n value={resolvedValue}\r\n readOnly\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { Dropdown } from \"../Dropdown/Dropdown\";\r\nimport { Popover } from \"../Popover/Popover\";\r\nimport { useControlledState, useOutsideClick } from \"./hooks\";\r\nimport { Listbox } from \"./Listbox\";\r\nimport type { ComboboxOption, ComboboxProps } from \"./types\";\r\nimport { assignRef } from \"../../utils/ref\";\r\n\r\n// Generic-preserving forwardRef wrapper\r\nfunction InnerCombobox<T>(\r\n {\r\n options,\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n placeholder = \"Select.\",\r\n disabled,\r\n className,\r\n listClassName,\r\n inputClassName,\r\n emptyState,\r\n renderOption,\r\n filter,\r\n openOnFocus = true,\r\n ariaLabel,\r\n }: ComboboxProps<T>,\r\n forwardedRef: React.ForwardedRef<HTMLInputElement>\r\n) {\r\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const containerRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const chevronRef: React.MutableRefObject<HTMLButtonElement | null> = React.useRef(null);\r\n const outsideClickRefs = React.useMemo(\r\n () => [containerRef as unknown as React.RefObject<HTMLElement | null>],\r\n [containerRef]\r\n );\r\n const mergedInputRef = (node: HTMLInputElement | null) => {\r\n inputRef.current = node;\r\n assignRef(forwardedRef, node);\r\n };\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const closeOnOutsideClick = React.useCallback(() => setOpen(false), []);\r\n const [query, setQuery] = React.useState(\"\");\r\n const [activeIndex, setActiveIndex] = React.useState<number>(-1);\r\n const suppressNextOpenRef = React.useRef(false);\r\n const suppressToggleRef = React.useRef(false);\r\n const prevOpenRef = React.useRef(open);\r\n\r\n const [selected, setSelected] = useControlledState<ComboboxOption<T> | null>(\r\n valueProp,\r\n defaultValue ?? null\r\n );\r\n const isEffectivelyOpen = open && !suppressNextOpenRef.current;\r\n\r\n // a11y ids\r\n const id = React.useId();\r\n const listboxId = `${id}-listbox`;\r\n\r\n const normalizedFilter = React.useMemo(() => {\r\n if (filter) return filter;\r\n return (opt: ComboboxOption, q: string) =>\r\n opt.label.toLowerCase().includes(q.trim().toLowerCase());\r\n }, [filter]);\r\n\r\n const visibleOptions = React.useMemo(() => {\r\n const base = options ?? [];\r\n return query ? base.filter((o) => normalizedFilter(o, query)) : base;\r\n }, [options, query, normalizedFilter]);\r\n\r\n const selectedOptionIndex = React.useMemo(() => {\r\n if (!selected) return -1;\r\n const indexFromOptions = (options ?? []).findIndex((option) => option.id === selected.id);\r\n if (indexFromOptions !== -1) return indexFromOptions;\r\n return visibleOptions.findIndex((option) => option.id === selected.id);\r\n }, [options, visibleOptions, selected]);\r\n\r\n const firstEnabledOptionIndex = React.useMemo(() => {\r\n if (!options) return -1;\r\n return options.findIndex((option) => !option.disabled);\r\n }, [options]);\r\n\r\n const lastEnabledOptionIndex = React.useMemo(() => {\r\n if (!options) return -1;\r\n for (let i = options.length - 1; i >= 0; i -= 1) {\r\n if (!options[i].disabled) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }, [options]);\r\n\r\n const cycleEnabledOptionIndex = React.useCallback(\r\n (startIndex: number, direction: 1 | -1) => {\r\n if (!options || options.length === 0) return -1;\r\n let next = startIndex;\r\n for (let i = 0; i < options.length; i += 1) {\r\n next = (next + direction + options.length) % options.length;\r\n if (!options[next].disabled) return next;\r\n }\r\n return -1;\r\n },\r\n [options]\r\n );\r\n\r\n const selectedIndex = React.useMemo(() => {\r\n if (!selected) return -1;\r\n return visibleOptions.findIndex((option) => option.id === selected.id);\r\n }, [visibleOptions, selected]);\r\n\r\n const firstEnabledIndex = React.useMemo(() => {\r\n return visibleOptions.findIndex((option) => !option.disabled);\r\n }, [visibleOptions]);\r\n\r\n const lastEnabledIndex = React.useMemo(() => {\r\n for (let i = visibleOptions.length - 1; i >= 0; i -= 1) {\r\n if (!visibleOptions[i].disabled) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }, [visibleOptions]);\r\n\r\n const cycleEnabledIndex = React.useCallback(\r\n (startIndex: number, direction: 1 | -1) => {\r\n if (visibleOptions.length === 0) return -1;\r\n let next = startIndex;\r\n for (let i = 0; i < visibleOptions.length; i += 1) {\r\n next = (next + direction + visibleOptions.length) % visibleOptions.length;\r\n if (!visibleOptions[next].disabled) return next;\r\n }\r\n return -1;\r\n },\r\n [visibleOptions]\r\n );\r\n\r\n // keep activeIndex in range\r\n React.useEffect(() => {\r\n if (visibleOptions.length === 0) {\r\n setActiveIndex(-1);\r\n return;\r\n }\r\n if (activeIndex >= visibleOptions.length) setActiveIndex(visibleOptions.length - 1);\r\n }, [visibleOptions, activeIndex]);\r\n\r\n React.useEffect(() => {\r\n const wasOpen = prevOpenRef.current;\r\n prevOpenRef.current = open;\r\n\r\n if (open && !wasOpen) {\r\n const initialIndex = selectedIndex !== -1 ? selectedIndex : firstEnabledIndex;\r\n setActiveIndex(initialIndex);\r\n }\r\n if (!open && wasOpen) {\r\n setActiveIndex(-1);\r\n }\r\n }, [open, selectedIndex, firstEnabledIndex]);\r\n\r\n React.useLayoutEffect(() => {\r\n // If something tries to reopen immediately after we intentionally cycled while closed, re-close.\r\n if (open && suppressNextOpenRef.current) {\r\n suppressNextOpenRef.current = false;\r\n setOpen(false);\r\n }\r\n }, [open]);\r\n\r\n // Accept HTMLElement | null refs (matches hook signature)\r\n useOutsideClick(outsideClickRefs, closeOnOutsideClick);\r\n\r\n function commitSelection(opt: ComboboxOption<T> | null, opts: { refocus?: boolean } = {}) {\r\n const { refocus = true } = opts;\r\n setSelected(opt);\r\n onChange?.(opt);\r\n if (opt) setQuery(\"\");\r\n setOpen(false);\r\n if (refocus) {\r\n requestAnimationFrame(() => inputRef.current?.focus());\r\n }\r\n }\r\n\r\n function onKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\r\n const isArrowDown = e.key === \"ArrowDown\" || e.code === \"ArrowDown\" || e.key === \"Down\";\r\n const isArrowUp = e.key === \"ArrowUp\" || e.code === \"ArrowUp\" || e.key === \"Up\";\r\n\r\n if (isArrowDown || isArrowUp) {\r\n e.preventDefault();\r\n const direction = isArrowDown ? 1 : -1;\r\n\r\n if (!open) {\r\n suppressNextOpenRef.current = true; // avoid accidental reopen if focus moves\r\n const source = options ?? [];\r\n if (source.length === 0) return;\r\n\r\n if (selectedOptionIndex === -1) {\r\n const fallbackIndex = direction === 1 ? firstEnabledOptionIndex : lastEnabledOptionIndex;\r\n if (fallbackIndex !== -1) {\r\n commitSelection(source[fallbackIndex], { refocus: false });\r\n }\r\n } else {\r\n const nextIndex = cycleEnabledOptionIndex(selectedOptionIndex, direction);\r\n if (nextIndex !== -1 && nextIndex !== selectedOptionIndex) {\r\n commitSelection(source[nextIndex], { refocus: false });\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const baseIndex =\r\n activeIndex === -1 ? (direction === 1 ? firstEnabledIndex : lastEnabledIndex) : activeIndex;\r\n if (baseIndex === -1) return;\r\n\r\n const next = cycleEnabledIndex(baseIndex, direction);\r\n if (next !== -1) {\r\n setActiveIndex(next);\r\n }\r\n return;\r\n }\r\n\r\n if (!open && (e.key === \"Enter\" || e.key === \" \")) {\r\n e.preventDefault();\r\n suppressNextOpenRef.current = false;\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (!open) return;\r\n\r\n switch (e.key) {\r\n case \"Home\": {\r\n if (firstEnabledIndex !== -1) {\r\n e.preventDefault();\r\n setActiveIndex(firstEnabledIndex);\r\n }\r\n break;\r\n }\r\n case \"End\": {\r\n if (lastEnabledIndex !== -1) {\r\n e.preventDefault();\r\n setActiveIndex(lastEnabledIndex);\r\n }\r\n break;\r\n }\r\n case \"Enter\": {\r\n e.preventDefault();\r\n if (activeIndex >= 0 && !visibleOptions[activeIndex].disabled) {\r\n commitSelection(visibleOptions[activeIndex]);\r\n }\r\n break;\r\n }\r\n case \"Escape\": {\r\n e.preventDefault();\r\n setOpen(false);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const selectedLabel = selected?.label ?? \"\";\r\n const selectedId = selected?.id ?? null;\r\n\r\n const highlightBorder = \"border-slate-400 dark:border-slate-500\";\r\n\r\n const listboxHighlight = isEffectivelyOpen ? highlightBorder : \"\";\r\n\r\n function openList() {\r\n if (disabled) return;\r\n suppressNextOpenRef.current = false;\r\n setOpen(true);\r\n setQuery(\"\");\r\n const initialIndex = selectedIndex !== -1 ? selectedIndex : firstEnabledIndex;\r\n setActiveIndex(initialIndex);\r\n requestAnimationFrame(() => inputRef.current?.focus());\r\n }\r\n\r\n return (\r\n <Dropdown\r\n ref={containerRef}\r\n isOpen={isEffectivelyOpen}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n displayValue={selectedLabel}\r\n query={query}\r\n className={className}\r\n inputClassName={inputClassName}\r\n highlightClass={highlightBorder}\r\n ariaControls={listboxId}\r\n ariaActiveDescendant={activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined}\r\n ariaLabel={ariaLabel}\r\n inputRef={mergedInputRef}\r\n chevronRef={chevronRef}\r\n onKeyDownCapture={onKeyDown}\r\n onShellMouseDown={(e) => {\r\n if (disabled) return;\r\n if (chevronRef.current?.contains(e.target as Node)) return;\r\n if (!isEffectivelyOpen) {\r\n e.preventDefault();\r\n openList();\r\n suppressToggleRef.current = true;\r\n }\r\n }}\r\n onInputMouseDown={(e) => {\r\n if (!open && !disabled) {\r\n e.preventDefault();\r\n openList();\r\n }\r\n }}\r\n onInputFocus={() => {\r\n if (suppressNextOpenRef.current) {\r\n suppressNextOpenRef.current = false;\r\n return;\r\n }\r\n if (openOnFocus && !disabled) {\r\n setOpen(true);\r\n setQuery(\"\");\r\n const initialIndex = selectedIndex !== -1 ? selectedIndex : firstEnabledIndex;\r\n setActiveIndex(initialIndex);\r\n }\r\n }}\r\n onInputChange={(e) => {\r\n setQuery(e.target.value);\r\n if (!open) {\r\n suppressNextOpenRef.current = false;\r\n setOpen(true);\r\n }\r\n }}\r\n onChevronClick={() => {\r\n if (disabled) return;\r\n if (suppressToggleRef.current) {\r\n suppressToggleRef.current = false;\r\n setOpen((o) => !o);\r\n return;\r\n }\r\n suppressNextOpenRef.current = false;\r\n setOpen((o) => !o);\r\n }}\r\n >\r\n {isEffectivelyOpen && (\r\n <Popover className={twMerge(listboxHighlight, listClassName)}>\r\n {({ scrollRef }) => (\r\n <Listbox\r\n id={listboxId}\r\n options={visibleOptions}\r\n activeIndex={activeIndex}\r\n selectedId={selectedId}\r\n onHoverIndex={setActiveIndex}\r\n onSelectIndex={(i) => commitSelection(visibleOptions[i])}\r\n listRef={scrollRef}\r\n emptyState={emptyState}\r\n renderOption={renderOption}\r\n />\r\n )}\r\n </Popover>\r\n )}\r\n </Dropdown>\r\n );\r\n}\r\n\r\nexport const Combobox = React.forwardRef(InnerCombobox) as <T>(\r\n props: ComboboxProps<T> & React.RefAttributes<HTMLInputElement>\r\n) => React.ReactElement | null;\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { ChevronDown } from \"../Combobox/icons\";\r\n\r\nexport type DropdownProps = {\r\n isOpen: boolean;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n displayValue: string;\r\n query: string;\r\n className?: string;\r\n inputClassName?: string;\r\n highlightClass?: string;\r\n ariaControls?: string;\r\n ariaActiveDescendant?: string;\r\n ariaLabel?: string;\r\n shellClassName?: string;\r\n leadingContent?: React.ReactNode;\r\n inlineContent?: React.ReactNode;\r\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\r\n inputRef: React.Ref<HTMLInputElement>;\r\n chevronRef?: React.Ref<HTMLButtonElement>;\r\n showChevron?: boolean;\r\n onShellFocusCapture?: (event: React.FocusEvent<HTMLDivElement>) => void;\r\n onShellBlurCapture?: (event: React.FocusEvent<HTMLDivElement>) => void;\r\n onKeyDownCapture?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\r\n onShellMouseDown?: (event: React.MouseEvent<HTMLDivElement>) => void;\r\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n onInputMouseDown?: (event: React.MouseEvent<HTMLInputElement>) => void;\r\n onInputChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n onChevronClick?: () => void;\r\n children?: React.ReactNode;\r\n};\r\n\r\nexport const Dropdown = React.forwardRef<HTMLDivElement, DropdownProps>(\r\n (\r\n {\r\n isOpen,\r\n disabled,\r\n placeholder,\r\n displayValue,\r\n query,\r\n className,\r\n inputClassName,\r\n highlightClass,\r\n ariaControls,\r\n ariaActiveDescendant,\r\n ariaLabel,\r\n shellClassName,\r\n leadingContent,\r\n inlineContent,\r\n inputProps,\r\n inputRef,\r\n chevronRef,\r\n showChevron = true,\r\n onShellFocusCapture,\r\n onShellBlurCapture,\r\n onKeyDownCapture,\r\n onShellMouseDown,\r\n onInputFocus,\r\n onInputMouseDown,\r\n onInputChange,\r\n onChevronClick,\r\n children,\r\n },\r\n ref\r\n ) => {\r\n const focusClasses = !isOpen\r\n ? \"focus-within:border-slate-400 focus-within:shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:focus-within:border-slate-500\"\r\n : \"\";\r\n\r\n const buttonClasses =\r\n \"inline-flex h-9 w-10 items-center justify-center rounded-xl bg-transparent text-sm text-slate-600 transition focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 dark:text-zinc-200\";\r\n const inputClasses = twMerge(\r\n \"w-full bg-transparent text-sm text-slate-900 placeholder:text-slate-400 focus:outline-none dark:text-zinc-100 dark:placeholder:text-zinc-500\",\r\n inputClassName,\r\n inputProps?.className\r\n );\r\n const mergedPlaceholder = placeholder ?? inputProps?.placeholder;\r\n const mergedAriaLabel = ariaLabel ?? inputProps?.[\"aria-label\"];\r\n\r\n return (\r\n <div ref={ref} className={twMerge(\"relative w-full\", className)}>\r\n <div\r\n onKeyDownCapture={onKeyDownCapture}\r\n onMouseDown={onShellMouseDown}\r\n onFocusCapture={onShellFocusCapture}\r\n onBlurCapture={onShellBlurCapture}\r\n className={twMerge(\r\n \"flex h-11 items-center gap-1 rounded-2xl border border-slate-300 bg-white pl-3 pr-1 text-slate-900 shadow-sm transition dark:border-zinc-700/60 dark:bg-zinc-900/70 dark:text-zinc-100\",\r\n focusClasses,\r\n isOpen && twMerge(\"rounded-b-none border-b-0 dark:border-b-0\", highlightClass),\r\n disabled && \"opacity-60\",\r\n shellClassName\r\n )}\r\n >\r\n {leadingContent ? <div className=\"flex items-center\">{leadingContent}</div> : null}\r\n <input\r\n {...inputProps}\r\n ref={inputRef}\r\n role=\"combobox\"\r\n aria-expanded={isOpen}\r\n aria-autocomplete=\"list\"\r\n aria-controls={ariaControls}\r\n aria-activedescendant={ariaActiveDescendant}\r\n aria-label={mergedAriaLabel}\r\n disabled={!!disabled || inputProps?.disabled}\r\n readOnly={!isOpen}\r\n onMouseDown={onInputMouseDown}\r\n value={isOpen ? query : displayValue}\r\n onFocus={onInputFocus}\r\n onChange={onInputChange}\r\n placeholder={mergedPlaceholder}\r\n className={inputClasses}\r\n />\r\n {inlineContent ? <div className=\"flex items-center gap-2\">{inlineContent}</div> : null}\r\n {showChevron ? (\r\n <button\r\n ref={chevronRef}\r\n type=\"button\"\r\n aria-label={isOpen ? \"Close\" : \"Open\"}\r\n onClick={onChevronClick}\r\n className={buttonClasses}\r\n disabled={!!disabled}\r\n >\r\n <ChevronDown\r\n className={twMerge(\"size-4 transition-transform\", isOpen && \"rotate-180\")}\r\n />\r\n </button>\r\n ) : null}\r\n </div>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nDropdown.displayName = \"Dropdown\";\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\ntype ThumbState = {\r\n visible: boolean;\r\n size: number;\r\n offset: number;\r\n};\r\n\r\nconst MIN_THUMB_SIZE = 28;\r\nconst TRACK_PADDING = 6;\r\n\r\nfunction Scrollbar({ scrollRef }: { scrollRef: React.MutableRefObject<HTMLElement | null> }) {\r\n const [{ visible, size, offset }, setThumbState] = React.useState<ThumbState>({\r\n visible: false,\r\n size: MIN_THUMB_SIZE,\r\n offset: 0,\r\n });\r\n const dragState = React.useRef<{\r\n startY: number;\r\n startScrollTop: number;\r\n thumbSize: number;\r\n } | null>(null);\r\n\r\n React.useLayoutEffect(() => {\r\n const target = scrollRef.current;\r\n if (!target) return;\r\n\r\n let raf = 0;\r\n\r\n const update = () => {\r\n const el = scrollRef.current;\r\n if (!el) return;\r\n const { scrollTop, scrollHeight, clientHeight } = el;\r\n const scrollRange = scrollHeight - clientHeight;\r\n const trackHeight = Math.max(0, clientHeight - TRACK_PADDING * 2);\r\n\r\n if (scrollRange <= 0 || trackHeight <= 0) {\r\n setThumbState((prev) => (prev.visible ? { ...prev, visible: false } : prev));\r\n return;\r\n }\r\n\r\n const ratio = clientHeight / scrollHeight;\r\n const thumbSize = Math.max(trackHeight * ratio, MIN_THUMB_SIZE);\r\n const maxOffset = Math.max(0, trackHeight - thumbSize);\r\n const thumbOffset = maxOffset > 0 ? (scrollTop / scrollRange) * maxOffset : 0;\r\n\r\n setThumbState({ visible: true, size: thumbSize, offset: thumbOffset });\r\n };\r\n\r\n const handleScroll = () => {\r\n cancelAnimationFrame(raf);\r\n raf = window.requestAnimationFrame(update);\r\n };\r\n\r\n target.addEventListener(\"scroll\", handleScroll, { passive: true });\r\n update();\r\n\r\n const resizeObserver =\r\n typeof window !== \"undefined\" && \"ResizeObserver\" in window\r\n ? new ResizeObserver(() => update())\r\n : null;\r\n resizeObserver?.observe(target);\r\n\r\n return () => {\r\n target.removeEventListener(\"scroll\", handleScroll);\r\n resizeObserver?.disconnect();\r\n cancelAnimationFrame(raf);\r\n };\r\n }, [scrollRef]);\r\n\r\n React.useEffect(() => {\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const drag = dragState.current;\r\n if (!drag) return;\r\n const el = scrollRef.current;\r\n if (!el) return;\r\n const trackHeight = Math.max(0, el.clientHeight - TRACK_PADDING * 2);\r\n const scrollRange = el.scrollHeight - el.clientHeight;\r\n if (scrollRange <= 0 || trackHeight <= drag.thumbSize) return;\r\n\r\n event.preventDefault();\r\n const delta = event.clientY - drag.startY;\r\n const ratio = scrollRange / (trackHeight - drag.thumbSize);\r\n const nextScroll = drag.startScrollTop + delta * ratio;\r\n el.scrollTop = Math.min(scrollRange, Math.max(0, nextScroll));\r\n };\r\n\r\n const handlePointerUp = () => {\r\n dragState.current = null;\r\n };\r\n\r\n window.addEventListener(\"pointermove\", handlePointerMove);\r\n window.addEventListener(\"pointerup\", handlePointerUp);\r\n\r\n return () => {\r\n window.removeEventListener(\"pointermove\", handlePointerMove);\r\n window.removeEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n }, [scrollRef]);\r\n\r\n if (!visible) return null;\r\n\r\n const handleThumbPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\r\n const el = scrollRef.current;\r\n if (!el) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n dragState.current = {\r\n startY: event.clientY,\r\n startScrollTop: el.scrollTop,\r\n thumbSize: size,\r\n };\r\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\r\n };\r\n\r\n const handleTrackPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\r\n const el = scrollRef.current;\r\n if (!el) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const trackRect = event.currentTarget.getBoundingClientRect();\r\n const clickOffset = event.clientY - trackRect.top - TRACK_PADDING;\r\n const trackLength = trackRect.height - TRACK_PADDING * 2;\r\n const scrollRange = el.scrollHeight - el.clientHeight;\r\n if (scrollRange <= 0 || trackLength <= 0) return;\r\n const effective = Math.max(1, trackLength - size);\r\n const ratio = Math.max(0, Math.min(effective, clickOffset - size / 2)) / effective;\r\n el.scrollTop = ratio * scrollRange;\r\n dragState.current = {\r\n startY: event.clientY,\r\n startScrollTop: el.scrollTop,\r\n thumbSize: size,\r\n };\r\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\r\n };\r\n\r\n return (\r\n <div\r\n aria-hidden=\"true\"\r\n className=\"pointer-events-none absolute inset-y-[6px] right-[2px] flex w-3 justify-center\"\r\n >\r\n <div\r\n className=\"pointer-events-auto relative h-full w-1 rounded-full bg-slate-900/5 shadow-inner dark:bg-white/10\"\r\n onPointerDown={handleTrackPointerDown}\r\n >\r\n <div\r\n className=\"pointer-events-auto absolute left-1/2 w-1.5 -translate-x-1/2 rounded-full bg-slate-400/80 shadow-sm transition-colors dark:bg-zinc-200/70\"\r\n style={{ height: `${size}px`, top: `${offset}px` }}\r\n onPointerDown={handleThumbPointerDown}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport type PopoverProps = {\r\n className?: string;\r\n children: (props: {\r\n scrollRef: React.MutableRefObject<HTMLUListElement | null>;\r\n }) => React.ReactNode;\r\n};\r\n\r\nexport function Popover({ className, children }: PopoverProps) {\r\n const scrollRef: React.MutableRefObject<HTMLUListElement | null> = React.useRef(null);\r\n\r\n return (\r\n <div\r\n className={twMerge(\r\n \"absolute left-0 right-0 top-full z-[999] -mt-px rounded-b-2xl rounded-t-none border border-slate-300 bg-white/95 py-1 shadow-xl shadow-slate-200/60 backdrop-blur dark:border-zinc-600 dark:bg-zinc-900/95 dark:shadow-zinc-900/40\",\r\n className\r\n )}\r\n >\r\n <div className=\"relative\">\r\n {children({ scrollRef })}\r\n <Scrollbar scrollRef={scrollRef} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useCallback, useEffect, useState } from \"react\";\r\nimport type React from \"react\";\r\n\r\nexport function useControlledState<T>(controlled: T | undefined, defaultValue: T | undefined) {\r\n const [internal, setInternal] = useState<T | undefined>(defaultValue);\r\n const isControlled = controlled !== undefined;\r\n const value = isControlled ? controlled : internal;\r\n const setValue = useCallback(\r\n (next: React.SetStateAction<T | undefined>) => {\r\n if (!isControlled) {\r\n setInternal(next);\r\n }\r\n },\r\n [isControlled]\r\n );\r\n\r\n return [value, setValue] as const;\r\n}\r\n\r\n/**\r\n * Click outside any of the provided element refs.\r\n * Accepts HTMLElement | null to avoid generic variance issues with specific element types.\r\n */\r\nexport function useOutsideClick(\r\n refs: Array<React.RefObject<HTMLElement | null>>,\r\n handler: () => void\r\n) {\r\n useEffect(() => {\r\n function onDoc(e: MouseEvent) {\r\n const target = e.target as Node;\r\n const inside = refs.some((r) => r.current && r.current.contains(target));\r\n if (!inside) handler();\r\n }\r\n document.addEventListener(\"mousedown\", onDoc);\r\n return () => document.removeEventListener(\"mousedown\", onDoc);\r\n }, [refs, handler]);\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { Check } from \"./icons\";\r\nimport type { ComboboxOption, ComboboxRenderState } from \"./types\";\r\n\r\nexport type ListboxProps<T> = {\r\n id: string; // listbox id for aria-controls\r\n options: ComboboxOption<T>[]; // visible, filtered options\r\n activeIndex: number; // highlighted index\r\n selectedId?: string | null; // current selection id (if any)\r\n onHoverIndex: (i: number) => void; // set active on hover\r\n onSelectIndex: (i: number) => void; // commit selection on click\r\n listRef: React.RefObject<HTMLUListElement>; // scroll container\r\n emptyState?: React.ReactNode;\r\n renderOption?: (opt: ComboboxOption<T>, state: ComboboxRenderState) => React.ReactNode;\r\n};\r\n\r\nexport function Listbox<T>({\r\n id,\r\n options,\r\n activeIndex,\r\n selectedId,\r\n onHoverIndex,\r\n onSelectIndex,\r\n listRef,\r\n emptyState,\r\n renderOption,\r\n}: ListboxProps<T>) {\r\n // Keep active option scrolled into view\r\n React.useEffect(() => {\r\n if (activeIndex < 0) return;\r\n const el = listRef.current?.querySelector<HTMLElement>(`[data-index=\"${activeIndex}\"]`);\r\n el?.scrollIntoView({ block: \"nearest\" });\r\n }, [activeIndex, listRef]);\r\n\r\n return (\r\n <ul\r\n ref={listRef}\r\n id={id}\r\n role=\"listbox\"\r\n className={twMerge(\"combobox-scrollbar max-h-64 overflow-auto px-1 pr-4\")}\r\n >\r\n {options.length === 0 && (\r\n <li aria-disabled className=\"select-none\">\r\n <div className=\"px-3 py-2 text-sm text-slate-500 dark:text-zinc-500\">\r\n {emptyState ?? \"No results\"}\r\n </div>\r\n </li>\r\n )}\r\n\r\n {options.map((opt, i) => {\r\n const selected = opt.id === selectedId;\r\n const active = i === activeIndex;\r\n const optionState: ComboboxRenderState = { active, selected };\r\n return (\r\n <li\r\n key={opt.id}\r\n id={`${id}-option-${i}`}\r\n role=\"option\"\r\n aria-selected={selected}\r\n aria-disabled={opt.disabled}\r\n data-index={i}\r\n className=\"list-none\"\r\n onMouseEnter={() => !opt.disabled && onHoverIndex(i)}\r\n onMouseDown={(e) => e.preventDefault()} // keep focus on input\r\n onClick={() => !opt.disabled && onSelectIndex(i)}\r\n >\r\n {renderOption ? (\r\n renderOption(opt, optionState)\r\n ) : (\r\n <div\r\n className={twMerge(\r\n \"flex cursor-pointer items-center gap-3 rounded-xl px-3 py-2 text-sm\",\r\n active\r\n ? \"bg-slate-100 text-slate-900 dark:bg-zinc-800/70 dark:text-zinc-100\"\r\n : \"text-slate-700 hover:bg-slate-100 dark:text-zinc-200 dark:hover:bg-zinc-800/70\",\r\n opt.disabled && \"cursor-not-allowed opacity-50\"\r\n )}\r\n >\r\n <span className=\"truncate\">{opt.label}</span>\r\n {selected ? (\r\n <Check className=\"ml-auto h-3 w-3 text-slate-600 dark:text-zinc-300\" />\r\n ) : (\r\n <span className=\"ml-auto inline-flex h-3 w-3\" />\r\n )}\r\n </div>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { useOutsideClick } from \"../Combobox/hooks\";\r\nimport { Dropdown } from \"../Dropdown/Dropdown\";\r\nimport { Popover } from \"../Popover/Popover\";\r\nimport { assignRef } from \"../../utils/ref\";\r\n\r\nexport type DatalistInputProps = React.InputHTMLAttributes<HTMLInputElement> & {\r\n label?: string;\r\n description?: string;\r\n options: string[];\r\n};\r\n\r\nexport const DatalistInput = React.forwardRef<HTMLInputElement, DatalistInputProps>(\r\n function DatalistInput({ label, description, options, className, id, disabled, ...rest }, ref) {\r\n const generatedId = React.useId();\r\n const inputId = id ?? generatedId;\r\n const descriptionId = React.useId();\r\n const dropdownRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const listboxRef: React.MutableRefObject<HTMLUListElement | null> = React.useRef(null);\r\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const mergedRef = React.useCallback(\r\n (node: HTMLInputElement | null) => {\r\n inputRef.current = node;\r\n assignRef(ref, node);\r\n },\r\n [ref]\r\n );\r\n const [query, setQuery] = React.useState(rest.defaultValue?.toString() ?? \"\");\r\n const [open, setOpen] = React.useState(false);\r\n const [activeIndex, setActiveIndex] = React.useState(-1);\r\n const listboxId = `${inputId}-listbox`;\r\n const activeDescendant = activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined;\r\n const controlledValue = rest.value?.toString();\r\n const displayValue = controlledValue ?? query;\r\n\r\n useOutsideClick([dropdownRef], () => setOpen(false));\r\n\r\n const filtered = React.useMemo(() => {\r\n if (!displayValue.trim()) return options;\r\n return options.filter((opt) => opt.toLowerCase().includes(displayValue.toLowerCase()));\r\n }, [options, displayValue]);\r\n\r\n React.useEffect(() => {\r\n if (controlledValue !== undefined) {\r\n setQuery(controlledValue);\r\n }\r\n }, [controlledValue]);\r\n\r\n const emitChange = (val: string) => {\r\n setQuery(val);\r\n rest.onChange?.({\r\n target: { value: val },\r\n } as React.ChangeEvent<HTMLInputElement>);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (!open && (e.key === \"ArrowDown\" || e.key === \"ArrowUp\")) {\r\n setOpen(true);\r\n setActiveIndex(0);\r\n }\r\n if (!open) return;\r\n switch (e.key) {\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n setActiveIndex((prev) => Math.min(filtered.length - 1, prev + 1));\r\n break;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n setActiveIndex((prev) => Math.max(0, prev - 1));\r\n break;\r\n case \"Enter\":\r\n if (activeIndex >= 0 && filtered[activeIndex]) {\r\n emitChange(filtered[activeIndex]);\r\n setOpen(false);\r\n }\r\n break;\r\n case \"Escape\":\r\n setOpen(false);\r\n break;\r\n }\r\n };\r\n\r\n const handleSelect = (val: string) => {\r\n emitChange(val);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n };\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setQuery(e.target.value);\r\n setOpen(true);\r\n setActiveIndex(0);\r\n rest.onChange?.(e);\r\n };\r\n\r\n const setListRef = (\r\n node: HTMLUListElement | null,\r\n scrollRef: React.MutableRefObject<HTMLUListElement | null>\r\n ) => {\r\n scrollRef.current = node;\r\n listboxRef.current = node;\r\n };\r\n\r\n return (\r\n <div className=\"space-y-1.5\">\r\n {label ? (\r\n <label\r\n htmlFor={inputId}\r\n className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-zinc-400\"\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n <Dropdown\r\n ref={dropdownRef}\r\n isOpen={open}\r\n disabled={disabled}\r\n placeholder={rest.placeholder}\r\n displayValue={displayValue}\r\n query={displayValue}\r\n inputRef={mergedRef}\r\n showChevron={false}\r\n inlineContent={\r\n <span className=\"text-[11px] font-semibold uppercase tracking-[0.2em] text-slate-400 dark:text-zinc-500\">\r\n CMD\r\n </span>\r\n }\r\n onKeyDownCapture={handleKeyDown}\r\n onShellMouseDown={() => setOpen(true)}\r\n onInputFocus={() => setOpen(true)}\r\n onInputMouseDown={() => setOpen(true)}\r\n onInputChange={handleInputChange}\r\n ariaControls={listboxId}\r\n ariaActiveDescendant={activeDescendant}\r\n ariaLabel={rest[\"aria-label\"]}\r\n inputClassName={className}\r\n inputProps={{\r\n ...rest,\r\n id: inputId,\r\n \"aria-describedby\": description ? descriptionId : rest[\"aria-describedby\"],\r\n }}\r\n >\r\n {open && filtered.length ? (\r\n <Popover>\r\n {({ scrollRef }) => (\r\n <ul\r\n ref={(node) => setListRef(node, scrollRef)}\r\n id={listboxId}\r\n role=\"listbox\"\r\n className=\"combobox-scrollbar max-h-56 overflow-auto py-1 text-sm text-slate-800 dark:text-zinc-100\"\r\n >\r\n {filtered.map((opt, index) => (\r\n <li\r\n key={opt}\r\n id={`${listboxId}-option-${index}`}\r\n role=\"option\"\r\n aria-selected={index === activeIndex}\r\n >\r\n <button\r\n type=\"button\"\r\n onMouseEnter={() => setActiveIndex(index)}\r\n onClick={() => handleSelect(opt)}\r\n className={twMerge(\r\n \"flex w-full items-center gap-3 px-3 py-2 text-left transition hover:bg-slate-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400/70 dark:hover:bg-zinc-800/60\",\r\n index === activeIndex && \"bg-slate-50 dark:bg-zinc-800/60\"\r\n )}\r\n >\r\n <span className=\"text-[10px] uppercase tracking-[0.2em] text-slate-400 dark:text-zinc-500\">\r\n cmd\r\n </span>\r\n <span className=\"font-semibold\">{opt}</span>\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </Popover>\r\n ) : null}\r\n </Dropdown>\r\n {description ? (\r\n <p id={descriptionId} className=\"text-xs text-slate-500 dark:text-zinc-400\">\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { Dropdown } from \"../Dropdown/Dropdown\";\r\nimport { Popover } from \"../Popover/Popover\";\r\nimport { Calendar, Clock } from \"../Combobox/icons\";\r\nimport { useOutsideClick } from \"../Combobox/hooks\";\r\nimport { Select, type SelectOption } from \"../Select/Select\";\r\nimport Button from \"../Button/Button\";\r\nimport { assignRef } from \"../../utils/ref\";\r\n\r\nexport type DatePickerProps = {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n type?: \"date\" | \"time\";\r\n timeIntervalMinutes?: number; // only used when type === \"time\"\r\n use24HourClock?: boolean; // only used when type === \"time\"\r\n};\r\n\r\ntype ViewMode = \"day\" | \"month\" | \"year\";\r\n\r\nfunction formatLocalDateString(year: number, month: number, day: number) {\r\n const y = String(year).padStart(4, \"0\");\r\n const m = String(month + 1).padStart(2, \"0\");\r\n const d = String(day).padStart(2, \"0\");\r\n return `${y}-${m}-${d}`;\r\n}\r\n\r\nfunction parseLocalDateString(value?: string) {\r\n if (!value) return null;\r\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value.trim());\r\n if (!match) return null;\r\n const [, y, m, d] = match;\r\n const year = Number(y);\r\n const month = Number(m) - 1;\r\n const day = Number(d);\r\n const date = new Date(year, month, day);\r\n if (Number.isNaN(date.getTime())) return null;\r\n return { date, year, month, day };\r\n}\r\n\r\nfunction getMonthDays(year: number, month: number) {\r\n const first = new Date(year, month, 1);\r\n const start = first.getDay();\r\n const days = new Date(year, month + 1, 0).getDate();\r\n const grid: Array<{ day: number | null; date?: string }> = [];\r\n for (let i = 0; i < start; i += 1) grid.push({ day: null });\r\n for (let d = 1; d <= days; d += 1) {\r\n const date = new Date(year, month, d);\r\n grid.push({ day: d, date: date.toISOString().slice(0, 10) });\r\n }\r\n return grid;\r\n}\r\n\r\nexport const DatePicker = React.forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\r\n {\r\n label,\r\n description,\r\n error,\r\n className,\r\n disabled,\r\n value,\r\n defaultValue,\r\n onChange,\r\n type = \"date\",\r\n timeIntervalMinutes = 30,\r\n use24HourClock = true,\r\n },\r\n ref\r\n) {\r\n const isDate = type === \"date\";\r\n const clampInterval = Math.max(1, Math.min(60, Math.floor(timeIntervalMinutes)));\r\n\r\n const normalizeTimeString = (input?: string) => {\r\n if (!input) return null;\r\n const match = /(\\d{1,2}):(\\d{2})/.exec(input);\r\n if (!match) return null;\r\n const h = Math.min(23, Math.max(0, Number(match[1])));\r\n const m = Math.min(59, Math.max(0, Number(match[2])));\r\n return `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\r\n };\r\n\r\n const formatTimeLabel = React.useCallback(\r\n (time: string) => {\r\n if (use24HourClock) return time;\r\n const [hStr, m] = time.split(\":\");\r\n let hNum = Number(hStr);\r\n const suffix = hNum >= 12 ? \"PM\" : \"AM\";\r\n hNum = hNum % 12 || 12;\r\n return `${String(hNum).padStart(2, \"0\")}:${m} ${suffix}`;\r\n },\r\n [use24HourClock]\r\n );\r\n\r\n const initial = (() => {\r\n if (!isDate) {\r\n return (\r\n normalizeTimeString(value) ??\r\n normalizeTimeString(defaultValue) ??\r\n (() => {\r\n const now = new Date();\r\n const minutes = now.getMinutes();\r\n const rounded = Math.round(minutes / clampInterval) * clampInterval;\r\n const h = rounded >= 60 ? now.getHours() + 1 : now.getHours();\r\n const m = rounded % 60;\r\n const safeH = (h + 24) % 24;\r\n return `${String(safeH).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\r\n })()\r\n );\r\n }\r\n const normalized = parseLocalDateString(value ?? defaultValue)?.date;\r\n if (normalized)\r\n return formatLocalDateString(\r\n normalized.getFullYear(),\r\n normalized.getMonth(),\r\n normalized.getDate()\r\n );\r\n const today = new Date();\r\n return formatLocalDateString(today.getFullYear(), today.getMonth(), today.getDate());\r\n })();\r\n const [open, setOpen] = React.useState(false);\r\n const [current, setCurrent] = React.useState(initial);\r\n const [month, setMonth] = React.useState(() => {\r\n const base = parseLocalDateString(initial)?.date ?? new Date();\r\n return { year: base.getFullYear(), month: base.getMonth() };\r\n });\r\n const [viewMode, setViewMode] = React.useState<ViewMode>(\"day\");\r\n const dropdownRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const toggleRef: React.MutableRefObject<HTMLButtonElement | null> = React.useRef(null);\r\n const inputInnerRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const suppressToggleRef = React.useRef(false);\r\n const canvasRef: React.MutableRefObject<HTMLCanvasElement | null> = React.useRef(null);\r\n const [useShortLabel, setUseShortLabel] = React.useState(false);\r\n const id = React.useId();\r\n const popoverId = `${id}-popover`;\r\n\r\n const setInputRef = React.useCallback(\r\n (node: HTMLInputElement | null) => {\r\n inputInnerRef.current = node;\r\n assignRef(ref, node);\r\n },\r\n [ref]\r\n );\r\n\r\n useOutsideClick([dropdownRef as unknown as React.RefObject<HTMLElement | null>], () =>\r\n setOpen(false)\r\n );\r\n\r\n const commit = (next: string) => {\r\n setCurrent(next);\r\n onChange?.(next);\r\n setOpen(false);\r\n setViewMode(\"day\");\r\n };\r\n\r\n const parsedDate = React.useMemo(() => {\r\n const parsed = parseLocalDateString(current);\r\n return parsed?.date ?? null;\r\n }, [current]);\r\n\r\n const longDisplayLabel = React.useMemo(() => {\r\n if (!parsedDate) return current;\r\n return parsedDate.toLocaleDateString(undefined, {\r\n weekday: \"short\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n });\r\n }, [parsedDate, current]);\r\n\r\n const shortDisplayLabel = React.useMemo(() => {\r\n if (!parsedDate) return current;\r\n return parsedDate.toLocaleDateString(undefined, {\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n year: \"2-digit\",\r\n });\r\n }, [parsedDate, current]);\r\n\r\n const displayLabel = useShortLabel ? shortDisplayLabel : longDisplayLabel;\r\n\r\n const timeOptions: SelectOption[] = React.useMemo(() => {\r\n const opts: SelectOption[] = [];\r\n for (let h = 0; h < 24; h += 1) {\r\n for (let m = 0; m < 60; m += clampInterval) {\r\n const hh = String(h).padStart(2, \"0\");\r\n const mm = String(m).padStart(2, \"0\");\r\n const valueStr = `${hh}:${mm}`;\r\n opts.push({ value: valueStr, label: formatTimeLabel(valueStr) });\r\n }\r\n }\r\n return opts;\r\n }, [clampInterval, formatTimeLabel]);\r\n\r\n const highlightBorder =\r\n \"border-slate-400 shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-slate-500\";\r\n\r\n const monthNames = React.useMemo(\r\n () => [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n []\r\n );\r\n\r\n const decadeStart = Math.floor(month.year / 10) * 10;\r\n\r\n const goPrev = () => {\r\n if (viewMode === \"day\") {\r\n setMonth((prev) => ({\r\n year: prev.month === 0 ? prev.year - 1 : prev.year,\r\n month: prev.month === 0 ? 11 : prev.month - 1,\r\n }));\r\n } else if (viewMode === \"month\") {\r\n setMonth((prev) => ({ ...prev, year: prev.year - 1 }));\r\n } else {\r\n setMonth((prev) => ({ ...prev, year: prev.year - 10 }));\r\n }\r\n };\r\n\r\n const goNext = () => {\r\n if (viewMode === \"day\") {\r\n setMonth((prev) => ({\r\n year: prev.month === 11 ? prev.year + 1 : prev.year,\r\n month: prev.month === 11 ? 0 : prev.month + 1,\r\n }));\r\n } else if (viewMode === \"month\") {\r\n setMonth((prev) => ({ ...prev, year: prev.year + 1 }));\r\n } else {\r\n setMonth((prev) => ({ ...prev, year: prev.year + 10 }));\r\n }\r\n };\r\n\r\n const rangeStart = decadeStart - 1;\r\n const rangeEnd = decadeStart + 10;\r\n const headerLabel =\r\n viewMode === \"year\"\r\n ? `${rangeStart} - ${rangeEnd}`\r\n : viewMode === \"month\"\r\n ? `${month.year}`\r\n : new Date(month.year, month.month).toLocaleString(\"default\", {\r\n month: \"long\",\r\n year: \"numeric\",\r\n });\r\n\r\n function openPicker() {\r\n if (disabled) return;\r\n const base = parsedDate ?? new Date();\r\n setMonth({ year: base.getFullYear(), month: base.getMonth() });\r\n setViewMode(\"day\");\r\n setOpen(true);\r\n }\r\n\r\n const evaluateLabelFit = React.useCallback(() => {\r\n if (!parsedDate) {\r\n setUseShortLabel(false);\r\n return;\r\n }\r\n\r\n const inputEl = inputInnerRef.current;\r\n if (!inputEl) return;\r\n\r\n const inputStyles = getComputedStyle(inputEl);\r\n const padding =\r\n parseFloat(inputStyles.paddingLeft || \"0\") + parseFloat(inputStyles.paddingRight || \"0\");\r\n const available = inputEl.clientWidth - padding;\r\n if (available <= 0) return;\r\n\r\n const font =\r\n inputStyles.font ||\r\n `${inputStyles.fontWeight} ${inputStyles.fontSize} ${inputStyles.fontFamily}`;\r\n const canvas = canvasRef.current ?? document.createElement(\"canvas\");\r\n canvasRef.current = canvas;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n ctx.font = font;\r\n\r\n const fullWidth = ctx.measureText(longDisplayLabel).width;\r\n const fitsLong = fullWidth <= available;\r\n setUseShortLabel(!fitsLong);\r\n }, [parsedDate, longDisplayLabel]);\r\n\r\n React.useLayoutEffect(() => {\r\n evaluateLabelFit();\r\n const ro = new ResizeObserver(() => evaluateLabelFit());\r\n if (dropdownRef.current) ro.observe(dropdownRef.current);\r\n return () => ro.disconnect();\r\n }, [evaluateLabelFit]);\r\n\r\n React.useEffect(() => {\r\n const id = requestAnimationFrame(() => evaluateLabelFit());\r\n return () => cancelAnimationFrame(id);\r\n }, [displayLabel, evaluateLabelFit]);\r\n\r\n if (!isDate) {\r\n return (\r\n <Select\r\n label={label}\r\n description={description}\r\n error={error}\r\n options={timeOptions}\r\n value={current}\r\n onChange={(val) => commit(val ?? current)}\r\n placeholder=\"Select time\"\r\n disabled={disabled}\r\n className={className}\r\n leadingContent={\r\n <span className=\"pointer-events-none rounded-xl bg-slate-100 px-2 py-1 shadow-inner dark:bg-zinc-800/70\">\r\n <Clock className=\"h-4 w-4 text-slate-500 dark:text-zinc-300\" />\r\n </span>\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-1.5\">\r\n {label ? (\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-zinc-400\">\r\n {label}\r\n </p>\r\n ) : null}\r\n\r\n <div className=\"relative\">\r\n <Dropdown\r\n ref={dropdownRef}\r\n isOpen={open}\r\n disabled={disabled}\r\n placeholder=\"\"\r\n displayValue={displayLabel}\r\n query={displayLabel}\r\n className=\"w-full\"\r\n inputClassName={twMerge(\"min-w-0 font-semibold\", className)}\r\n shellClassName={twMerge(\r\n error &&\r\n \"border-rose-300 focus-within:border-rose-400 focus-within:shadow-[0_0_0_1px_rgba(248,113,113,0.35)] dark:border-rose-500/60\"\r\n )}\r\n leadingContent={\r\n <span className=\"pointer-events-none rounded-xl bg-slate-100 px-2 py-1 shadow-inner dark:bg-zinc-800/70\">\r\n <Calendar className=\"h-4 w-4 text-slate-500 dark:text-zinc-300\" />\r\n </span>\r\n }\r\n highlightClass={highlightBorder}\r\n ariaControls={popoverId}\r\n ariaLabel={label}\r\n inputRef={setInputRef}\r\n chevronRef={toggleRef}\r\n onKeyDownCapture={() => {}}\r\n onShellMouseDown={(e) => {\r\n if (disabled) return;\r\n if (toggleRef.current?.contains(e.target as Node)) return;\r\n if (!open) {\r\n e.preventDefault();\r\n suppressToggleRef.current = true;\r\n openPicker();\r\n requestAnimationFrame(() => toggleRef.current?.focus());\r\n }\r\n }}\r\n onInputMouseDown={(e) => {\r\n if (!open && !disabled) {\r\n e.preventDefault();\r\n suppressToggleRef.current = true;\r\n openPicker();\r\n requestAnimationFrame(() => toggleRef.current?.focus());\r\n }\r\n }}\r\n onInputFocus={() => {\r\n if (suppressToggleRef.current) {\r\n suppressToggleRef.current = false;\r\n return;\r\n }\r\n openPicker();\r\n }}\r\n onInputChange={() => {\r\n // readonly display; no typing\r\n }}\r\n onChevronClick={() => {\r\n if (disabled) return;\r\n if (suppressToggleRef.current) {\r\n suppressToggleRef.current = false;\r\n setOpen((o) => !o);\r\n return;\r\n }\r\n setOpen((o) => !o);\r\n }}\r\n >\r\n {open && (\r\n <Popover className={twMerge(\"p-3\", highlightBorder)}>\r\n {() => (\r\n <div className=\"space-y-3\" id={popoverId}>\r\n <div className=\"flex items-center justify-between text-sm text-slate-600 dark:text-zinc-300\">\r\n <Button\r\n type=\"button\"\r\n onClick={goPrev}\r\n className=\"h-8 w-8 min-w-0 rounded-xl border border-slate-200 bg-white p-0 text-sm font-semibold text-slate-700 shadow-sm dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\"\r\n >\r\n <span style={{ transform: \"translateY(-1.5px)\" }}>{\"<\"}</span>\r\n </Button>\r\n {viewMode === \"year\" ? (\r\n <span className=\"font-semibold text-slate-900 dark:text-zinc-100\">\r\n {headerLabel}\r\n </span>\r\n ) : (\r\n <button\r\n type=\"button\"\r\n onClick={() => setViewMode((prev) => (prev === \"day\" ? \"month\" : \"year\"))}\r\n className=\"font-semibold text-slate-900 transition hover:underline dark:text-zinc-100\"\r\n >\r\n {headerLabel}\r\n </button>\r\n )}\r\n <Button\r\n type=\"button\"\r\n onClick={goNext}\r\n className=\"h-8 w-8 min-w-0 rounded-xl border border-slate-200 bg-white p-0 text-sm font-semibold text-slate-700 shadow-sm dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\"\r\n >\r\n <span style={{ transform: \"translateY(-1.5px)\" }}>{\">\"}</span>\r\n </Button>\r\n </div>\r\n\r\n {viewMode === \"day\" ? (\r\n <>\r\n <div className=\"grid grid-cols-7 gap-1 text-center text-[11px] uppercase tracking-[0.2em] text-slate-400 dark:text-zinc-500\">\r\n {[\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"].map((d) => (\r\n <span key={d}>{d}</span>\r\n ))}\r\n </div>\r\n <div className=\"grid grid-cols-7 gap-1\">\r\n {getMonthDays(month.year, month.month).map((cell, idx) => {\r\n const isSelected = cell.date === current;\r\n return (\r\n <button\r\n key={`${cell.date ?? \"empty\"}-${idx}`}\r\n type=\"button\"\r\n disabled={!cell.date}\r\n onClick={() => {\r\n if (!cell.date) return;\r\n commit(cell.date);\r\n }}\r\n className={twMerge(\r\n \"h-9 rounded-xl text-sm font-semibold text-slate-700 transition hover:bg-slate-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400/70 dark:text-zinc-200 dark:hover:bg-zinc-800\",\r\n isSelected &&\r\n \"bg-slate-200 text-slate-900 ring-1 ring-slate-400/70 shadow-sm dark:bg-zinc-800 dark:hover:bg-zinc-700/80 dark:text-zinc-100 dark:ring-zinc-500/70\",\r\n !cell.date && \"opacity-30\"\r\n )}\r\n >\r\n {cell.day ?? \"\"}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : viewMode === \"month\" ? (\r\n <div className=\"grid grid-cols-3 gap-2\">\r\n {monthNames.map((name, idx) => {\r\n const isSelected =\r\n parsedDate?.getFullYear() === month.year &&\r\n parsedDate?.getMonth() === idx;\r\n return (\r\n <button\r\n key={name}\r\n type=\"button\"\r\n onClick={() => {\r\n setMonth((prev) => ({ ...prev, month: idx }));\r\n setViewMode(\"day\");\r\n }}\r\n className={twMerge(\r\n \"h-10 rounded-xl border border-slate-200 bg-white text-sm font-semibold text-slate-700 shadow-sm transition hover:-translate-y-[1px] hover:shadow-md dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\",\r\n isSelected &&\r\n \"border-slate-400 bg-slate-100 dark:border-slate-500 dark:bg-zinc-800\"\r\n )}\r\n >\r\n {name}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <div className=\"grid grid-cols-3 gap-2\">\r\n {Array.from({ length: 12 }, (_, i) => rangeStart + i).map((yr) => {\r\n const isSelected = parsedDate?.getFullYear() === yr;\r\n return (\r\n <button\r\n key={yr}\r\n type=\"button\"\r\n onClick={() => {\r\n setMonth((prev) => ({ ...prev, year: yr }));\r\n setViewMode(\"month\");\r\n }}\r\n className={twMerge(\r\n \"h-10 rounded-xl border border-slate-200 bg-white text-sm font-semibold text-slate-700 shadow-sm transition hover:-translate-y-[1px] hover:shadow-md dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\",\r\n isSelected &&\r\n \"border-slate-400 bg-slate-100 dark:border-slate-500 dark:bg-zinc-800\"\r\n )}\r\n >\r\n {yr}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </Popover>\r\n )}\r\n </Dropdown>\r\n </div>\r\n\r\n {description ? (\r\n <p className=\"text-xs text-slate-500 dark:text-zinc-400\">{description}</p>\r\n ) : null}\r\n {error ? (\r\n <p className=\"text-xs font-medium text-rose-500 dark:text-rose-400\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { Dropdown } from \"../Dropdown/Dropdown\";\r\nimport { Popover } from \"../Popover/Popover\";\r\nimport { Check } from \"../Combobox/icons\";\r\nimport { useControlledState, useOutsideClick } from \"../Combobox/hooks\";\r\n\r\nexport type SelectOption = {\r\n label: string;\r\n value: string;\r\n description?: string;\r\n disabled?: boolean;\r\n};\r\n\r\nexport type SelectProps = {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n options: SelectOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string | null) => void;\r\n placeholder?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n leadingContent?: React.ReactNode;\r\n inlineContent?: React.ReactNode;\r\n};\r\n\r\nexport function Select({\r\n label,\r\n description,\r\n error,\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n placeholder = \"Select an option\",\r\n className,\r\n disabled,\r\n leadingContent,\r\n inlineContent,\r\n}: SelectProps) {\r\n const containerRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const chevronRef: React.MutableRefObject<HTMLButtonElement | null> = React.useRef(null);\r\n const popoverListRef: React.MutableRefObject<React.RefObject<HTMLUListElement> | null> =\r\n React.useRef(null);\r\n const suppressToggleRef = React.useRef(false);\r\n const id = React.useId();\r\n const listboxId = `${id}-listbox`;\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [activeIndex, setActiveIndex] = React.useState(-1);\r\n const [selected, setSelected] = useControlledState<string | null>(value, defaultValue ?? null);\r\n\r\n useOutsideClick([containerRef as unknown as React.RefObject<HTMLElement | null>], () =>\r\n setOpen(false)\r\n );\r\n\r\n const selectedOption = options.find((opt) => opt.value === selected) ?? null;\r\n const selectedIndex = React.useMemo(\r\n () => options.findIndex((opt) => opt.value === selected),\r\n [options, selected]\r\n );\r\n const firstEnabled = React.useMemo(() => options.findIndex((o) => !o.disabled), [options]);\r\n const lastEnabled = React.useMemo(() => {\r\n for (let i = options.length - 1; i >= 0; i -= 1) {\r\n if (!options[i].disabled) return i;\r\n }\r\n return -1;\r\n }, [options]);\r\n\r\n const cycleEnabled = React.useCallback(\r\n (start: number, dir: 1 | -1) => {\r\n if (!options.length) return -1;\r\n let next = start;\r\n for (let i = 0; i < options.length; i += 1) {\r\n next = (next + dir + options.length) % options.length;\r\n if (!options[next].disabled) return next;\r\n }\r\n return -1;\r\n },\r\n [options]\r\n );\r\n\r\n const commitSelection = (index: number) => {\r\n const opt = options[index];\r\n if (!opt || opt.disabled) return;\r\n setSelected(opt.value);\r\n onChange?.(opt.value);\r\n setOpen(false);\r\n requestAnimationFrame(() => inputRef.current?.focus());\r\n };\r\n\r\n const openList = () => {\r\n if (disabled) return;\r\n setOpen(true);\r\n setActiveIndex(selectedIndex !== -1 ? selectedIndex : firstEnabled);\r\n requestAnimationFrame(() => inputRef.current?.focus());\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n const isArrowDown = e.key === \"ArrowDown\" || e.code === \"ArrowDown\" || e.key === \"Down\";\r\n const isArrowUp = e.key === \"ArrowUp\" || e.code === \"ArrowUp\" || e.key === \"Up\";\r\n\r\n if (!open && (isArrowDown || isArrowUp)) {\r\n e.preventDefault();\r\n const direction: 1 | -1 = isArrowDown ? 1 : -1;\r\n const source = options;\r\n if (!source.length) return;\r\n const startIndex =\r\n selectedIndex === -1 ? (direction === 1 ? firstEnabled : lastEnabled) : selectedIndex;\r\n const nextIndex = startIndex === -1 ? -1 : cycleEnabled(startIndex, direction);\r\n if (nextIndex !== -1 && nextIndex !== selectedIndex) {\r\n commitSelection(nextIndex);\r\n }\r\n return;\r\n }\r\n\r\n if (!open && (e.key === \"Enter\" || e.key === \" \")) {\r\n e.preventDefault();\r\n openList();\r\n return;\r\n }\r\n\r\n if (!open) return;\r\n switch (e.key) {\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n setActiveIndex((prev) => {\r\n const start = prev === -1 ? firstEnabled : prev;\r\n return cycleEnabled(start, 1);\r\n });\r\n break;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n setActiveIndex((prev) => {\r\n const start = prev === -1 ? lastEnabled : prev;\r\n return cycleEnabled(start, -1);\r\n });\r\n break;\r\n case \"Home\":\r\n e.preventDefault();\r\n setActiveIndex(firstEnabled);\r\n break;\r\n case \"End\":\r\n e.preventDefault();\r\n setActiveIndex(lastEnabled);\r\n break;\r\n case \"Enter\":\r\n case \" \":\r\n e.preventDefault();\r\n if (activeIndex >= 0) commitSelection(activeIndex);\r\n break;\r\n case \"Escape\":\r\n e.preventDefault();\r\n setOpen(false);\r\n break;\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const refObj = popoverListRef.current;\r\n const el = refObj?.current?.querySelector<HTMLElement>(`[data-index=\"${activeIndex}\"]`);\r\n el?.scrollIntoView({ block: \"nearest\" });\r\n }, [open, activeIndex]);\r\n\r\n const displayValue = selectedOption?.label ?? \"\";\r\n const highlightBorder = \"border-slate-400 dark:border-slate-500\";\r\n const listboxHighlight = open ? highlightBorder : \"\";\r\n\r\n return (\r\n <div className=\"space-y-1.5\">\r\n {label ? (\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-zinc-400\">\r\n {label}\r\n </p>\r\n ) : null}\r\n\r\n <Dropdown\r\n ref={containerRef}\r\n isOpen={open}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n displayValue={displayValue}\r\n query={displayValue}\r\n className={twMerge(\r\n \"w-full\",\r\n error &&\r\n \"border-rose-300 focus-within:border-rose-400 focus-within:shadow-[0_0_0_1px_rgba(248,113,113,0.35)] dark:border-rose-500/60\",\r\n className\r\n )}\r\n inputClassName=\"font-semibold\"\r\n highlightClass={highlightBorder}\r\n ariaControls={listboxId}\r\n ariaLabel={label}\r\n inputRef={inputRef}\r\n chevronRef={chevronRef}\r\n leadingContent={leadingContent}\r\n inlineContent={inlineContent}\r\n onKeyDownCapture={handleKeyDown}\r\n onShellMouseDown={(e) => {\r\n if (disabled) return;\r\n if (chevronRef.current?.contains(e.target as Node)) return;\r\n if (!open) {\r\n e.preventDefault();\r\n openList();\r\n suppressToggleRef.current = true;\r\n }\r\n }}\r\n onInputMouseDown={(e) => {\r\n if (!open && !disabled) {\r\n e.preventDefault();\r\n openList();\r\n }\r\n }}\r\n onInputFocus={() => {\r\n if (suppressToggleRef.current) {\r\n suppressToggleRef.current = false;\r\n }\r\n }}\r\n onInputChange={() => {\r\n // No filtering for Select; keep displayed value static\r\n }}\r\n onChevronClick={() => {\r\n if (disabled) return;\r\n if (suppressToggleRef.current) {\r\n suppressToggleRef.current = false;\r\n setOpen((o) => !o);\r\n return;\r\n }\r\n setOpen((o) => !o);\r\n }}\r\n >\r\n {open && (\r\n <Popover className={listboxHighlight}>\r\n {({ scrollRef }) => {\r\n popoverListRef.current = scrollRef;\r\n return (\r\n <ul\r\n ref={scrollRef}\r\n id={listboxId}\r\n role=\"listbox\"\r\n className=\"combobox-scrollbar max-h-64 overflow-auto px-1 pr-4\"\r\n >\r\n {options.map((opt, index) => {\r\n const isSelected = selected === opt.value;\r\n const isActive = activeIndex === index;\r\n return (\r\n <li key={opt.value} className=\"list-none\" data-index={index}>\r\n <button\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={isSelected}\r\n disabled={opt.disabled}\r\n onMouseEnter={() => !opt.disabled && setActiveIndex(index)}\r\n onClick={() => commitSelection(index)}\r\n className={twMerge(\r\n \"flex w-full items-center gap-3 rounded-xl px-3 py-2 text-left text-sm transition\",\r\n isActive\r\n ? \"bg-slate-100 text-slate-900 dark:bg-zinc-800/70 dark:text-zinc-100\"\r\n : \"text-slate-700 hover:bg-slate-100 dark:text-zinc-200 dark:hover:bg-zinc-800/70\",\r\n isSelected && \"font-semibold\",\r\n opt.disabled && \"cursor-not-allowed opacity-50\"\r\n )}\r\n >\r\n <span className=\"flex-1 text-left\">\r\n <span className=\"block text-slate-900 dark:text-zinc-100\">\r\n {opt.label}\r\n </span>\r\n {opt.description ? (\r\n <span className=\"block text-xs text-slate-500 dark:text-zinc-400\">\r\n {opt.description}\r\n </span>\r\n ) : null}\r\n </span>\r\n {isSelected ? (\r\n <Check className=\"ml-auto h-3 w-3 text-slate-600 dark:text-zinc-300\" />\r\n ) : (\r\n <span className=\"ml-auto inline-flex h-3 w-3\" />\r\n )}\r\n </button>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n }}\r\n </Popover>\r\n )}\r\n </Dropdown>\r\n\r\n {description ? (\r\n <p className=\"text-xs text-slate-500 dark:text-zinc-400\">{description}</p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p className=\"text-xs font-medium text-rose-500 dark:text-rose-400\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport Button from \"../Button/Button\";\r\n\r\nexport type DialogProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n title: string;\r\n description?: string;\r\n children: React.ReactNode;\r\n footer?: React.ReactNode;\r\n modal?: boolean;\r\n draggable?: boolean;\r\n};\r\n\r\nexport function Dialog({\r\n open,\r\n onClose,\r\n title,\r\n description,\r\n children,\r\n footer,\r\n modal = true,\r\n draggable = true,\r\n}: DialogProps) {\r\n const overlayRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const dialogRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const dragState = React.useRef<{\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n width: number;\r\n height: number;\r\n } | null>(null);\r\n const [dragOffset, setDragOffset] = React.useState({ x: 0, y: 0 });\r\n\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const handleKey = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onClose();\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handleKey);\r\n return () => window.removeEventListener(\"keydown\", handleKey);\r\n }, [open, onClose]);\r\n\r\n React.useEffect(() => {\r\n if (!open) return;\r\n const previouslyFocused = document.activeElement as HTMLElement | null;\r\n dialogRef.current?.focus();\r\n return () => previouslyFocused?.focus();\r\n }, [open]);\r\n\r\n React.useEffect(() => {\r\n if (!open || modal) return;\r\n const handlePointer = (event: PointerEvent) => {\r\n const target = event.target as Node;\r\n if (dialogRef.current && !dialogRef.current.contains(target)) {\r\n onClose();\r\n }\r\n };\r\n document.addEventListener(\"pointerdown\", handlePointer);\r\n return () => document.removeEventListener(\"pointerdown\", handlePointer);\r\n }, [open, modal, onClose]);\r\n\r\n React.useEffect(() => {\r\n if (!open) {\r\n setDragOffset({ x: 0, y: 0 });\r\n }\r\n }, [open]);\r\n\r\n React.useEffect(() => {\r\n return () => {\r\n dragState.current = null;\r\n };\r\n }, []);\r\n\r\n const clampOffset = React.useCallback(\r\n (x: number, y: number, size: { width: number; height: number }) => {\r\n if (!modal) return { x, y };\r\n const maxX = Math.max(0, (window.innerWidth - size.width) / 2);\r\n const maxY = Math.max(0, (window.innerHeight - size.height) / 2);\r\n return {\r\n x: Math.min(maxX, Math.max(-maxX, x)),\r\n y: Math.min(maxY, Math.max(-maxY, y)),\r\n };\r\n },\r\n [modal]\r\n );\r\n\r\n const isInteractiveTarget = (node: HTMLElement | null) => {\r\n if (!node) return false;\r\n if (node.closest(\"[data-dialog-draggable-stop]\")) return true;\r\n const tag = node.tagName.toLowerCase();\r\n const interactive = [\"button\", \"input\", \"select\", \"textarea\", \"option\", \"a\", \"label\"];\r\n if (interactive.includes(tag)) return true;\r\n if (node.getAttribute(\"role\") === \"button\" || node.getAttribute(\"role\") === \"link\") return true;\r\n if (node.isContentEditable) return true;\r\n return false;\r\n };\r\n\r\n const onDragPointerDown = (event: React.PointerEvent) => {\r\n if (!draggable) return;\r\n if (isInteractiveTarget(event.target as HTMLElement)) return;\r\n event.preventDefault();\r\n const rect = dialogRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n dragState.current = {\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: dragOffset.x,\r\n originY: dragOffset.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n\r\n const handleMove = (e: PointerEvent) => {\r\n const current = dragState.current;\r\n if (!current) return;\r\n const deltaX = e.clientX - current.startX;\r\n const deltaY = e.clientY - current.startY;\r\n const next = {\r\n x: current.originX + deltaX,\r\n y: current.originY + deltaY,\r\n };\r\n const clamped = clampOffset(next.x, next.y, { width: current.width, height: current.height });\r\n setDragOffset(clamped);\r\n };\r\n\r\n const handleUp = () => {\r\n dragState.current = null;\r\n window.removeEventListener(\"pointermove\", handleMove);\r\n window.removeEventListener(\"pointerup\", handleUp);\r\n window.removeEventListener(\"pointercancel\", handleUp);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", handleMove);\r\n window.addEventListener(\"pointerup\", handleUp);\r\n window.addEventListener(\"pointercancel\", handleUp);\r\n };\r\n\r\n if (!open) return null;\r\n\r\n const dialogCard = (\r\n <div\r\n ref={dialogRef}\r\n role=\"dialog\"\r\n aria-modal={modal || undefined}\r\n tabIndex={-1}\r\n aria-label={title}\r\n className={twMerge(\r\n \"w-[min(640px,92vw)] rounded-3xl border border-slate-200 bg-white/95 p-6 shadow-2xl ring-1 ring-white/80 dark:border-zinc-700/60 dark:bg-zinc-900/95 dark:ring-zinc-800/80\",\r\n modal ? \"\" : \"pointer-events-auto\",\r\n draggable && \"cursor-grab active:cursor-grabbing\"\r\n )}\r\n style={{ transform: `translate(${dragOffset.x}px, ${dragOffset.y}px)` }}\r\n onPointerDown={onDragPointerDown}\r\n >\r\n <div className=\"flex items-start justify-between gap-3\">\r\n <div>\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.3em] text-slate-500 dark:text-zinc-400\">\r\n Dialog\r\n </p>\r\n <h2 className=\"text-xl font-semibold text-slate-900 dark:text-zinc-100\">{title}</h2>\r\n {description ? (\r\n <p className=\"mt-1 text-sm text-slate-600 dark:text-zinc-400\">{description}</p>\r\n ) : null}\r\n </div>\r\n <Button\r\n onClick={onClose}\r\n aria-label=\"Close dialog\"\r\n className=\"size-8 !px-0 !py-0 text-sm font-semibold\"\r\n >\r\n X\r\n </Button>\r\n </div>\r\n\r\n <div className=\"mt-4 space-y-3 text-sm text-slate-700 dark:text-zinc-300\">{children}</div>\r\n\r\n {footer ? <div className=\"mt-6 flex flex-wrap justify-end gap-2\">{footer}</div> : null}\r\n </div>\r\n );\r\n\r\n return createPortal(\r\n modal ? (\r\n <div\r\n ref={overlayRef}\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-zinc-950/60 backdrop-blur-sm\"\r\n onMouseDown={(e) => {\r\n if (e.target === overlayRef.current) onClose();\r\n }}\r\n >\r\n {dialogCard}\r\n </div>\r\n ) : (\r\n <div className=\"pointer-events-none fixed bottom-6 right-6 z-50 flex justify-end\">\r\n {dialogCard}\r\n </div>\r\n ),\r\n document.body\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type DisclosureProps = React.DetailsHTMLAttributes<HTMLDetailsElement> & {\r\n title: React.ReactNode;\r\n subtle?: boolean;\r\n defaultOpen?: boolean;\r\n};\r\n\r\nexport const Disclosure = React.forwardRef<HTMLDetailsElement, DisclosureProps>(function Disclosure(\r\n { title, children, className, subtle, ...rest },\r\n ref\r\n) {\r\n const summaryId = React.useId();\r\n\r\n return (\r\n <details\r\n {...rest}\r\n ref={ref}\r\n className={twMerge(\r\n \"group rounded-2xl border border-slate-200 bg-white/90 p-3 shadow-sm transition dark:border-zinc-700/60 dark:bg-zinc-900/70\",\r\n subtle && \"border-transparent bg-white/60 shadow-none dark:bg-zinc-900/40\",\r\n className\r\n )}\r\n >\r\n <summary\r\n id={summaryId}\r\n className=\"flex cursor-pointer list-none items-center justify-between gap-3 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400/70\"\r\n >\r\n <span className=\"flex flex-1 items-center gap-2\">\r\n <span className=\"rounded-lg bg-slate-100 px-2 py-1 text-[11px] font-semibold uppercase tracking-[0.2em] text-slate-500 shadow-inner dark:bg-zinc-800/70 dark:text-zinc-300\">\r\n {title}\r\n </span>\r\n </span>\r\n <span\r\n className=\"text-slate-400 transition-transform duration-200 group-open:rotate-180 dark:text-zinc-500\"\r\n aria-hidden=\"true\"\r\n >\r\n ▾\r\n </span>\r\n </summary>\r\n\r\n <div className=\"mt-3 space-y-2 text-sm text-slate-600 dark:text-zinc-300\">{children}</div>\r\n </details>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type InputFieldProps = React.InputHTMLAttributes<HTMLInputElement> & {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n leadingIcon?: React.ReactNode;\r\n trailingLabel?: string;\r\n};\r\n\r\nexport const InputField = React.forwardRef<HTMLInputElement, InputFieldProps>(function InputField(\r\n { label, description, error, leadingIcon, trailingLabel, className, id, disabled, ...rest },\r\n ref\r\n) {\r\n const generatedId = React.useId();\r\n const inputId = id ?? generatedId;\r\n const descriptionId = React.useId();\r\n const errorId = React.useId();\r\n\r\n const hintIds = [description ? descriptionId : null, error ? errorId : null].filter(Boolean);\r\n\r\n const resolvedAriaDescribedBy = hintIds.length ? hintIds.join(\" \") : undefined;\r\n\r\n const containerClasses = twMerge(\r\n \"flex items-center gap-3 rounded-2xl border border-slate-300 bg-white/70 px-3 py-2 transition focus-within:border-slate-400 focus-within:shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-zinc-700 dark:bg-zinc-900/70 dark:focus-within:border-slate-500\",\r\n disabled && \"opacity-60\",\r\n error &&\r\n \"border-rose-300 focus-within:border-rose-400 focus-within:shadow-[0_0_0_1px_rgba(248,113,113,0.35)] dark:border-rose-500/60\"\r\n );\r\n\r\n const inputClasses = twMerge(\r\n \"flex-1 border-none bg-transparent text-sm text-slate-900 placeholder:text-slate-400 focus:outline-none disabled:cursor-not-allowed dark:text-zinc-100 dark:placeholder:text-zinc-500\",\r\n className\r\n );\r\n\r\n const leadingElm = leadingIcon ? (\r\n <span className=\"text-slate-400 dark:text-zinc-500\" aria-hidden=\"true\">\r\n {leadingIcon}\r\n </span>\r\n ) : null;\r\n\r\n const trailingElm = trailingLabel ? (\r\n <span className=\"text-xs font-semibold uppercase tracking-wide text-slate-400 dark:text-zinc-500\">\r\n {trailingLabel}\r\n </span>\r\n ) : null;\r\n\r\n return (\r\n <div className=\"space-y-1.5\">\r\n {label ? (\r\n <label\r\n htmlFor={inputId}\r\n className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-zinc-400\"\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n\r\n <div className={containerClasses}>\r\n {leadingElm}\r\n <input\r\n {...rest}\r\n ref={ref}\r\n id={inputId}\r\n className={inputClasses}\r\n aria-invalid={error ? true : undefined}\r\n aria-describedby={resolvedAriaDescribedBy}\r\n disabled={disabled}\r\n />\r\n {trailingElm}\r\n </div>\r\n\r\n {description ? (\r\n <p id={descriptionId} className=\"text-xs text-slate-500 dark:text-zinc-400\">\r\n {description}\r\n </p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p id={errorId} className=\"text-xs font-medium text-rose-500 dark:text-rose-400\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type NumberInputProps = {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n step?: number;\r\n suffix?: React.ReactNode;\r\n min?: number;\r\n max?: number;\r\n};\r\n\r\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\r\n function NumberInput(\r\n {\r\n label,\r\n description,\r\n error,\r\n className,\r\n disabled,\r\n value,\r\n defaultValue = 0,\r\n onChange,\r\n step = 1,\r\n suffix,\r\n min,\r\n max,\r\n },\r\n ref\r\n ) {\r\n const [internal, setInternal] = React.useState(defaultValue);\r\n const isControlled = typeof value === \"number\";\r\n const resolved = isControlled ? (value ?? 0) : internal;\r\n\r\n const update = (next: number) => {\r\n const clamped = Math.max(min ?? -Infinity, Math.min(max ?? Infinity, next));\r\n if (!isControlled) setInternal(clamped);\r\n onChange?.(clamped);\r\n };\r\n\r\n return (\r\n <div className=\"space-y-1.5\">\r\n {label ? (\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-zinc-400\">\r\n {label}\r\n </p>\r\n ) : null}\r\n <div\r\n className={twMerge(\r\n \"flex items-center gap-3 rounded-2xl border border-slate-300 bg-white/80 px-3 py-2 shadow-sm transition focus-within:border-slate-400 focus-within:shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-zinc-700 dark:bg-zinc-900/70 dark:focus-within:border-slate-500\",\r\n disabled && \"opacity-60\",\r\n error &&\r\n \"border-rose-300 focus-within:border-rose-400 focus-within:shadow-[0_0_0_1px_rgba(248,113,113,0.35)] dark:border-rose-500/60\"\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"Increase\"\r\n onClick={() => update(resolved + step)}\r\n className=\"grid size-7 place-items-center rounded-xl border border-slate-200 bg-white text-xs font-semibold text-slate-700 shadow-sm transition hover:-translate-y-[1px] hover:shadow-md disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\"\r\n disabled={disabled}\r\n >\r\n +\r\n </button>\r\n <button\r\n type=\"button\"\r\n aria-label=\"Decrease\"\r\n onClick={() => update(resolved - step)}\r\n className=\"grid size-7 place-items-center rounded-xl border border-slate-200 bg-white text-xs font-semibold text-slate-700 shadow-sm transition hover:-translate-y-[1px] hover:shadow-md disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100\"\r\n disabled={disabled}\r\n >\r\n -\r\n </button>\r\n </div>\r\n <input\r\n ref={ref}\r\n type=\"number\"\r\n value={resolved}\r\n onChange={(e) => update(Number(e.target.value))}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n className={twMerge(\r\n \"flex-1 border-none bg-transparent text-2xl font-semibold tabular-nums text-slate-900 placeholder:text-slate-400 focus:outline-none dark:text-zinc-100 dark:placeholder:text-zinc-500 appearance-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\",\r\n className\r\n )}\r\n />\r\n {suffix ? (\r\n <span className=\"text-sm font-semibold uppercase tracking-wide text-slate-500 dark:text-zinc-300\">\r\n {suffix}\r\n </span>\r\n ) : null}\r\n </div>\r\n {description ? (\r\n <p className=\"text-xs text-slate-500 dark:text-zinc-400\">{description}</p>\r\n ) : null}\r\n {error ? (\r\n <p className=\"text-xs font-medium text-rose-500 dark:text-rose-400\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type OutputChipProps = React.OutputHTMLAttributes<HTMLOutputElement> & {\r\n tone?: \"neutral\" | \"success\" | \"warning\" | \"danger\";\r\n label?: string;\r\n};\r\n\r\nconst toneStyles: Record<\r\n NonNullable<OutputChipProps[\"tone\"]>,\r\n { bg: string; text: string; ring: string }\r\n> = {\r\n neutral: { bg: \"bg-slate-900\", text: \"text-white\", ring: \"ring-slate-300\" },\r\n success: { bg: \"bg-emerald-500\", text: \"text-white\", ring: \"ring-emerald-200\" },\r\n warning: { bg: \"bg-amber-500\", text: \"text-white\", ring: \"ring-amber-200\" },\r\n danger: { bg: \"bg-rose-500\", text: \"text-white\", ring: \"ring-rose-200\" },\r\n};\r\n\r\nexport const OutputChip = React.forwardRef<HTMLOutputElement, OutputChipProps>(function OutputChip(\r\n { children, className, tone = \"neutral\", label, ...rest },\r\n ref\r\n) {\r\n const styles = toneStyles[tone];\r\n return (\r\n <output\r\n {...rest}\r\n ref={ref}\r\n className={twMerge(\r\n \"inline-flex items-center justify-center gap-2 rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-[0.25em] shadow-sm ring-1 text-center\",\r\n styles.bg,\r\n styles.text,\r\n styles.ring,\r\n className\r\n )}\r\n >\r\n {label ? <span className=\"opacity-70\">{label}</span> : null}\r\n <span>{children}</span>\r\n </output>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\ntype CommonProps = {\r\n label?: string;\r\n description?: string;\r\n className?: string;\r\n};\r\n\r\nexport type ProgressProps = CommonProps & {\r\n value: number;\r\n max?: number;\r\n showValue?: boolean;\r\n};\r\n\r\nexport function Progress({\r\n label,\r\n description,\r\n value,\r\n max = 100,\r\n showValue = true,\r\n className,\r\n}: ProgressProps) {\r\n const clamped = Math.min(max, Math.max(0, value));\r\n const percent = max === 0 ? 0 : Math.round((clamped / max) * 100);\r\n\r\n return (\r\n <div className={twMerge(\"space-y-1.5\", className)}>\r\n {label ? (\r\n <div className=\"flex items-center justify-between gap-3\">\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.24em] text-slate-500 dark:text-zinc-400\">\r\n {label}\r\n </p>\r\n {showValue ? (\r\n <span className=\"text-xs font-semibold text-slate-600 dark:text-zinc-300\">\r\n {percent}%\r\n </span>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n {description ? (\r\n <p className=\"text-[11px] text-slate-500 dark:text-zinc-400\">{description}</p>\r\n ) : null}\r\n <div className=\"relative h-3 w-full overflow-hidden rounded-full border border-slate-200 bg-white shadow-inner ring-1 ring-slate-100/80 dark:border-zinc-700 dark:bg-zinc-900/80 dark:ring-zinc-800/70\">\r\n <progress\r\n value={clamped}\r\n max={max}\r\n className=\"absolute inset-0 h-full w-full appearance-none\"\r\n aria-label={label}\r\n />\r\n <div\r\n className=\"absolute inset-y-0 left-0 rounded-full bg-gradient-to-r from-slate-900 via-slate-700 to-slate-900 shadow-[0_0_0_1px_rgba(15,23,42,0.2)] transition-[width]\"\r\n style={{ width: `${percent}%` }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport type MeterProps = CommonProps & {\r\n value: number;\r\n min?: number;\r\n max?: number;\r\n thresholds?: { value: number; color: string }[];\r\n};\r\n\r\nexport function Meter({\r\n label,\r\n description,\r\n value,\r\n min = 0,\r\n max = 100,\r\n thresholds,\r\n className,\r\n}: MeterProps) {\r\n const clamped = Math.min(max, Math.max(min, value));\r\n const percent = max === min ? 0 : ((clamped - min) / (max - min)) * 100;\r\n const activeColor = thresholds\r\n ? thresholds.reduce(\r\n (acc, t) => (clamped >= t.value ? t.color : acc),\r\n thresholds[0]?.color ?? \"linear-gradient(90deg, #22c55e, #0ea5e9)\"\r\n )\r\n : \"linear-gradient(90deg, #22c55e, #0ea5e9)\";\r\n\r\n return (\r\n <div className={twMerge(\"space-y-1.5\", className)}>\r\n {label ? (\r\n <div className=\"flex items-center justify-between gap-3\">\r\n <p className=\"text-xs font-semibold uppercase tracking-[0.24em] text-slate-500 dark:text-zinc-400\">\r\n {label}\r\n </p>\r\n <span className=\"text-xs font-semibold text-slate-600 dark:text-zinc-300\">{clamped}</span>\r\n </div>\r\n ) : null}\r\n {description ? (\r\n <p className=\"text-[11px] text-slate-500 dark:text-zinc-400\">{description}</p>\r\n ) : null}\r\n <div className=\"relative h-3 w-full overflow-hidden rounded-full border border-slate-200 bg-white shadow-inner ring-1 ring-slate-100/80 dark:border-zinc-700 dark:bg-zinc-900/80 dark:ring-zinc-800/70\">\r\n <meter\r\n value={clamped}\r\n min={min}\r\n max={max}\r\n className=\"absolute inset-0 h-full w-full appearance-none\"\r\n aria-label={label}\r\n />\r\n <div\r\n className=\"absolute inset-y-0 left-0 rounded-full shadow-[0_0_0_1px_rgba(15,23,42,0.2)] transition-[width]\"\r\n style={{ width: `${percent}%`, background: activeColor }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type RadioProps = Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n \"type\" | \"onChange\" | \"checked\" | \"defaultChecked\"\r\n> & {\r\n label: string;\r\n description?: string;\r\n extra?: React.ReactNode;\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n};\r\n\r\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(function Radio(\r\n {\r\n label,\r\n description,\r\n extra,\r\n checked,\r\n defaultChecked = false,\r\n onChange,\r\n disabled,\r\n className,\r\n id,\r\n ...rest\r\n },\r\n forwardedRef\r\n) {\r\n const generatedId = React.useId();\r\n const radioId = id ?? generatedId;\r\n const descriptionId = React.useId();\r\n\r\n const isControlled = typeof checked === \"boolean\";\r\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked);\r\n const resolvedChecked = isControlled ? !!checked : internalChecked;\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const next = event.target.checked;\r\n if (!isControlled) {\r\n setInternalChecked(next);\r\n }\r\n onChange?.(next);\r\n };\r\n\r\n return (\r\n <label\r\n htmlFor={radioId}\r\n className={twMerge(\r\n \"flex items-center justify-between gap-3 rounded-2xl border border-transparent px-3 py-2 text-left transition hover:bg-slate-50 focus-within:bg-slate-50 dark:hover:bg-zinc-900/60 dark:focus-within:bg-zinc-900/60\",\r\n disabled && \"cursor-not-allowed opacity-60\",\r\n className\r\n )}\r\n >\r\n <span className=\"flex flex-1 items-center gap-3\">\r\n <span className=\"flex h-6 w-6 items-center justify-center\">\r\n <input\r\n {...rest}\r\n ref={forwardedRef}\r\n id={radioId}\r\n type=\"radio\"\r\n className=\"peer sr-only\"\r\n checked={resolvedChecked}\r\n onChange={handleChange}\r\n aria-describedby={description ? descriptionId : rest[\"aria-describedby\"]}\r\n disabled={disabled}\r\n />\r\n <span\r\n className={twMerge(\r\n \"grid size-5 place-items-center rounded-full border border-slate-300 bg-white text-slate-600 shadow-sm transition duration-150 peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-slate-400 dark:border-zinc-600 dark:bg-zinc-950/70 dark:text-zinc-200\",\r\n resolvedChecked &&\r\n \"border-slate-400 bg-slate-100 shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-zinc-500 dark:bg-zinc-700/70\"\r\n )}\r\n aria-hidden=\"true\"\r\n >\r\n <span\r\n className={twMerge(\r\n \"block h-2.5 w-2.5 rounded-full bg-slate-900 opacity-0 transition duration-200 dark:bg-zinc-100\",\r\n resolvedChecked && \"opacity-100\"\r\n )}\r\n />\r\n </span>\r\n </span>\r\n\r\n <span className=\"flex flex-1 flex-col\">\r\n <span className=\"text-sm font-semibold text-slate-900 dark:text-zinc-100\">{label}</span>\r\n {description ? (\r\n <span id={descriptionId} className=\"text-xs text-slate-500 dark:text-zinc-400\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n </span>\r\n\r\n {extra ? (\r\n <span className=\"self-center rounded-xl border border-slate-200 bg-white/80 px-3 py-1 text-xs font-semibold text-slate-600 dark:border-zinc-700 dark:bg-zinc-900/60 dark:text-zinc-200\">\r\n {extra}\r\n </span>\r\n ) : null}\r\n </label>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\nimport { assignRef } from \"../../utils/ref\";\r\n\r\ntype SliderRenderProps = {\r\n value: number;\r\n min: number;\r\n max: number;\r\n percentage: number;\r\n disabled?: boolean;\r\n focused: boolean;\r\n orientation: \"horizontal\" | \"vertical\";\r\n reversed: boolean;\r\n position: number;\r\n trackLength: number;\r\n thumbSize: number;\r\n trackOffset: number;\r\n trackCrossOffset: number;\r\n trackThickness: number;\r\n};\r\n\r\nexport type SliderProps = Omit<\r\n React.InputHTMLAttributes<HTMLInputElement>,\r\n \"type\" | \"value\" | \"defaultValue\" | \"onChange\" | \"min\" | \"max\" | \"step\"\r\n> & {\r\n label?: string;\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n formatValue?: (value: number) => string;\r\n renderTrack?: (props: SliderRenderProps & { children: React.ReactNode }) => React.ReactNode;\r\n renderThumb?: (props: SliderRenderProps) => React.ReactNode;\r\n trackClassName?: string;\r\n thumbClassName?: string;\r\n orientation?: \"horizontal\" | \"vertical\";\r\n reversed?: boolean;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n /**\r\n * Approximate thumb size along the track axis (used for bounds and progress).\r\n * For custom thumbs wider than tall (e.g., pills with labels), set this to the thumb's total width (horizontal) or height (vertical).\r\n */\r\n thumbSize?: number;\r\n /**\r\n * Allow the thumb center to travel slightly beyond the track ends. Useful for wide custom thumbs that should visually meet the track edges.\r\n */\r\n edgeOverlap?: number;\r\n /**\r\n * How the fill gradient should behave.\r\n * - \"stretch\" (default): gradient is scaled to the filled portion.\r\n * - \"mask\": gradient spans the full track and is revealed up to the thumb.\r\n */\r\n fillMode?: \"stretch\" | \"mask\";\r\n};\r\n\r\nfunction clampValue(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nfunction percentFromValue(value: number, min: number, max: number) {\r\n if (max === min) return 0;\r\n return clampValue(((value - min) / (max - min)) * 100, 0, 100);\r\n}\r\n\r\nfunction snapToStep(value: number, min: number, max: number, step: number) {\r\n const safeStep = step > 0 ? step : 1;\r\n const limited = clampValue(value, min, max);\r\n const stepped = Math.round((limited - min) / safeStep) * safeStep + min;\r\n return clampValue(Number(stepped.toFixed(6)), min, max);\r\n}\r\n\r\nexport const Slider = React.forwardRef<HTMLInputElement, SliderProps>(function Slider(\r\n {\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n formatValue = (val) => `${val}`,\r\n renderTrack,\r\n renderThumb,\r\n trackClassName,\r\n thumbClassName,\r\n className,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n thumbSize = 24,\r\n edgeOverlap = 0,\r\n fillMode = \"stretch\",\r\n disabled,\r\n orientation = \"horizontal\",\r\n reversed = false,\r\n id,\r\n ...rest\r\n },\r\n forwardedRef\r\n) {\r\n const isControlled = typeof value === \"number\";\r\n const initialValue = typeof defaultValue === \"number\" ? defaultValue : min;\r\n const [internalValue, setInternalValue] = React.useState<number>(() =>\r\n snapToStep(initialValue, min, max, step)\r\n );\r\n const [focused, setFocused] = React.useState(false);\r\n const [dragging, setDragging] = React.useState(false);\r\n const [trackMetrics, setTrackMetrics] = React.useState({\r\n length: 0,\r\n mainOffset: 0,\r\n crossOffset: 0,\r\n thickness: 0,\r\n });\r\n const generatedId = React.useId();\r\n const inputId = id ?? generatedId;\r\n\r\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\r\n const interactionRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const trackContainerRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const trackRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const mergedRef = React.useCallback(\r\n (node: HTMLInputElement | null) => {\r\n inputRef.current = node;\r\n assignRef(forwardedRef, node);\r\n },\r\n [forwardedRef]\r\n );\r\n\r\n React.useEffect(() => {\r\n setInternalValue((prev) => snapToStep(prev, min, max, step));\r\n }, [min, max, step]);\r\n\r\n const resolvedValue = snapToStep(\r\n isControlled ? (typeof value === \"number\" ? value : min) : internalValue,\r\n min,\r\n max,\r\n step\r\n );\r\n const percentage = percentFromValue(resolvedValue, min, max);\r\n const isVertical = orientation === \"vertical\";\r\n\r\n const thumbDiameter = Math.max(thumbSize, 2);\r\n const thumbRadius = thumbDiameter / 2;\r\n\r\n React.useLayoutEffect(() => {\r\n const track = trackRef.current;\r\n const container = trackContainerRef.current;\r\n if (!track || !container) return;\r\n const update = () => {\r\n const trackRect = track.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n const isVert = orientation === \"vertical\";\r\n const length = isVert ? trackRect.height : trackRect.width;\r\n const thickness = isVert ? trackRect.width : trackRect.height;\r\n const mainOffset = isVert\r\n ? trackRect.top - containerRect.top\r\n : trackRect.left - containerRect.left;\r\n const crossOffset = isVert\r\n ? trackRect.left - containerRect.left\r\n : trackRect.top - containerRect.top;\r\n setTrackMetrics({ length, mainOffset, crossOffset, thickness });\r\n };\r\n update();\r\n const observer = new ResizeObserver(update);\r\n observer.observe(track);\r\n observer.observe(container);\r\n return () => observer.disconnect();\r\n }, [orientation]);\r\n\r\n const trackLength = trackMetrics.length;\r\n const trackOffset = trackMetrics.mainOffset;\r\n const trackCrossOffset = trackMetrics.crossOffset;\r\n const trackThickness = trackMetrics.thickness;\r\n const overlap = Math.max(edgeOverlap, 0);\r\n const minCenter = Math.max(thumbRadius - overlap, 0);\r\n const maxCenter = Math.max(trackLength - thumbRadius + overlap, minCenter);\r\n const usableLength = Math.max(maxCenter - minCenter, 0);\r\n\r\n const logicalRatio = clampValue((resolvedValue - min) / (max - min || 1), 0, 1);\r\n const positionRatio = (() => {\r\n if (isVertical) {\r\n return reversed ? logicalRatio : 1 - logicalRatio;\r\n }\r\n return reversed ? 1 - logicalRatio : logicalRatio;\r\n })();\r\n\r\n const positionPx = minCenter + usableLength * positionRatio;\r\n\r\n const gradientSize = React.useMemo(() => {\r\n if (fillMode === \"stretch\" || trackLength === 0) return \"100% 100%\";\r\n return isVertical ? `100% ${trackLength}px` : `${trackLength}px 100%`;\r\n }, [fillMode, isVertical, trackLength]);\r\n\r\n const gradientPosition = React.useMemo(() => {\r\n if (fillMode === \"stretch\") return undefined;\r\n if (!isVertical && reversed) return \"right center\";\r\n if (isVertical && !reversed) return \"center bottom\";\r\n return \"left top\";\r\n }, [fillMode, isVertical, reversed]);\r\n\r\n const progressStyle: React.CSSProperties = React.useMemo(() => {\r\n if (trackLength === 0) return {};\r\n const half = thumbRadius;\r\n\r\n if (!isVertical && !reversed) {\r\n const width = Math.min(positionPx + half, trackLength);\r\n return { left: 0, width, top: 0, bottom: 0 };\r\n }\r\n\r\n if (!isVertical && reversed) {\r\n const start = Math.max(positionPx - half, 0);\r\n const width = Math.max(trackLength - start, 0);\r\n return { right: 0, width, top: 0, bottom: 0 };\r\n }\r\n\r\n if (isVertical && reversed) {\r\n // min at top; fill grows downward from top\r\n const height = Math.min(positionPx + half, trackLength);\r\n return { top: 0, height, left: 0, right: 0 };\r\n }\r\n\r\n // vertical, min at bottom; fill grows upward from bottom\r\n const start = Math.max(positionPx - half, 0);\r\n const height = Math.max(Math.min(trackLength - start, trackLength), 0);\r\n return { bottom: 0, height, left: 0, right: 0 };\r\n }, [isVertical, reversed, positionPx, trackLength, thumbRadius]);\r\n\r\n const trackGradient = React.useMemo(() => {\r\n if (!isVertical && !reversed) return \"linear-gradient(90deg, #e2e8f0, #fff, #e2e8f0)\";\r\n if (!isVertical && reversed) return \"linear-gradient(270deg, #e2e8f0, #fff, #e2e8f0)\";\r\n if (isVertical && reversed) return \"linear-gradient(180deg, #e2e8f0, #fff, #e2e8f0)\";\r\n return \"linear-gradient(0deg, #e2e8f0, #fff, #e2e8f0)\";\r\n }, [isVertical, reversed]);\r\n\r\n const fillGradient = React.useMemo(() => {\r\n if (!isVertical && !reversed) return \"linear-gradient(90deg, #38bdf8, #6366f1)\";\r\n if (!isVertical && reversed) return \"linear-gradient(270deg, #38bdf8, #6366f1)\";\r\n if (isVertical && reversed) return \"linear-gradient(180deg, #38bdf8, #6366f1)\";\r\n return \"linear-gradient(0deg, #38bdf8, #6366f1)\";\r\n }, [isVertical, reversed]);\r\n\r\n const thumbStyle: React.CSSProperties = React.useMemo(() => {\r\n if (isVertical) {\r\n return { top: trackOffset + positionPx, left: trackCrossOffset + trackThickness / 2 };\r\n }\r\n return { left: trackOffset + positionPx, top: trackCrossOffset + trackThickness / 2 };\r\n }, [isVertical, positionPx, trackOffset, trackCrossOffset, trackThickness]);\r\n\r\n const renderProps: SliderRenderProps = React.useMemo(\r\n () => ({\r\n value: resolvedValue,\r\n min,\r\n max,\r\n percentage,\r\n disabled,\r\n focused,\r\n orientation,\r\n reversed,\r\n position: positionPx,\r\n trackLength,\r\n thumbSize: thumbDiameter,\r\n trackOffset,\r\n trackCrossOffset,\r\n trackThickness,\r\n }),\r\n [\r\n resolvedValue,\r\n min,\r\n max,\r\n percentage,\r\n disabled,\r\n focused,\r\n orientation,\r\n reversed,\r\n positionPx,\r\n trackLength,\r\n thumbDiameter,\r\n trackOffset,\r\n trackCrossOffset,\r\n trackThickness,\r\n ]\r\n );\r\n\r\n const commitValue = React.useCallback(\r\n (next: number) => {\r\n const snapped = snapToStep(next, min, max, step);\r\n if (!isControlled) {\r\n setInternalValue(snapped);\r\n }\r\n onChange?.(snapped);\r\n },\r\n [isControlled, max, min, onChange, step]\r\n );\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const next = Number(event.target.value);\r\n if (Number.isNaN(next)) return;\r\n commitValue(next);\r\n };\r\n\r\n const formattedValue = formatValue(resolvedValue);\r\n\r\n const setValueFromPointer = React.useCallback(\r\n (clientX: number, clientY: number) => {\r\n const rect = trackRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n\r\n const overlapComp = Math.max(thumbRadius - overlap, 0);\r\n const length = isVertical ? rect.height : rect.width;\r\n const usable = Math.max(length - overlapComp * 2, 1);\r\n\r\n if (length <= 0) return;\r\n\r\n const clampToTrack = (pos: number) => clampValue(pos, overlapComp, length - overlapComp);\r\n\r\n if (isVertical) {\r\n const position = clampToTrack(clientY - rect.top);\r\n const positionRatio = (position - overlapComp) / usable;\r\n const logicalRatio = reversed ? positionRatio : 1 - positionRatio;\r\n const next = min + logicalRatio * (max - min);\r\n commitValue(next);\r\n return;\r\n }\r\n\r\n const position = clampToTrack(clientX - rect.left);\r\n const positionRatio = (position - overlapComp) / usable;\r\n const logicalRatio = reversed ? 1 - positionRatio : positionRatio;\r\n const next = min + logicalRatio * (max - min);\r\n commitValue(next);\r\n },\r\n [commitValue, isVertical, max, min, overlap, reversed, thumbRadius]\r\n );\r\n\r\n const handlePointerDown = React.useCallback(\r\n (event: React.PointerEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n interactionRef.current?.setPointerCapture(event.pointerId);\r\n inputRef.current?.focus({ preventScroll: true });\r\n setDragging(true);\r\n setValueFromPointer(event.clientX, event.clientY);\r\n\r\n const move = (moveEvent: PointerEvent) => {\r\n moveEvent.preventDefault();\r\n setValueFromPointer(moveEvent.clientX, moveEvent.clientY);\r\n };\r\n const stop = (upEvent: PointerEvent) => {\r\n upEvent.preventDefault();\r\n interactionRef.current?.releasePointerCapture(event.pointerId);\r\n setDragging(false);\r\n window.removeEventListener(\"pointermove\", move);\r\n window.removeEventListener(\"pointerup\", stop);\r\n window.removeEventListener(\"pointercancel\", stop);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", move, { passive: false });\r\n window.addEventListener(\"pointerup\", stop, { passive: false });\r\n window.addEventListener(\"pointercancel\", stop, { passive: false });\r\n },\r\n [setValueFromPointer]\r\n );\r\n\r\n const defaultTrack = (\r\n <div\r\n ref={trackRef}\r\n className={twMerge(\r\n \"relative overflow-hidden rounded-full shadow-inner ring-1 ring-slate-200/80 dark:ring-white/10\",\r\n \"bg-[length:100%_100%]\",\r\n isVertical ? \"mx-auto h-full w-3\" : \"h-3 w-full\",\r\n disabled && \"opacity-60\",\r\n trackClassName\r\n )}\r\n style={{ backgroundImage: trackGradient }}\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n className={twMerge(\r\n \"absolute rounded-full shadow-[0_0_0_1px_rgba(59,130,246,0.18)]\",\r\n dragging ? \"transition-none\" : \"transition-[width,height] duration-150 ease-out\",\r\n isVertical ? \"left-0 right-0\" : \"inset-y-0\"\r\n )}\r\n style={{\r\n ...progressStyle,\r\n backgroundImage: fillGradient,\r\n backgroundSize: gradientSize,\r\n backgroundPosition: gradientPosition,\r\n }}\r\n />\r\n <div className=\"pointer-events-none absolute inset-0 rounded-full ring-1 ring-black/5 dark:ring-white/10\" />\r\n </div>\r\n );\r\n\r\n const defaultThumb = (\r\n <span\r\n className={twMerge(\r\n \"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 rounded-full border border-white bg-white shadow-md shadow-slate-900/20 ring-1 ring-slate-200 transition-transform duration-150 dark:border-zinc-700/60 dark:bg-zinc-800 dark:shadow-black/30 dark:ring-zinc-700\",\r\n focused && \"scale-[1.04] ring-slate-300 dark:ring-slate-500\",\r\n disabled && \"opacity-60 shadow-none dark:shadow-none\",\r\n thumbClassName\r\n )}\r\n style={{ ...thumbStyle, width: thumbDiameter, height: thumbDiameter }}\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"relative block h-full w-full\">\r\n <span className=\"absolute inset-[5px] rounded-full bg-gradient-to-br from-slate-50 to-slate-200 dark:from-slate-600 dark:to-slate-700\" />\r\n <span className=\"absolute inset-0 rounded-full bg-slate-950/5 backdrop-blur-[1px] dark:bg-white/5\" />\r\n </span>\r\n </span>\r\n );\r\n\r\n return (\r\n <div className={twMerge(\"w-full space-y-2\", isVertical && \"max-w-[120px]\", className)}>\r\n {label ? (\r\n <div className=\"flex items-center justify-between gap-3\">\r\n <label\r\n htmlFor={inputId}\r\n className=\"text-[11px] font-semibold uppercase tracking-[0.25em] text-slate-500 dark:text-zinc-400\"\r\n >\r\n {label}\r\n </label>\r\n <span className=\"rounded-full bg-white/90 px-2 py-0.5 text-xs font-semibold text-slate-700 shadow-sm ring-1 ring-slate-200 dark:bg-zinc-900/80 dark:text-zinc-200 dark:ring-zinc-700\">\r\n {formattedValue}\r\n </span>\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n ref={trackContainerRef}\r\n className={twMerge(\r\n \"relative w-full pt-2 pb-3\",\r\n isVertical && \"flex h-48 items-center justify-center px-4 pb-4 pt-4\"\r\n )}\r\n data-orientation={orientation}\r\n >\r\n {renderTrack ? renderTrack({ ...renderProps, children: defaultTrack }) : defaultTrack}\r\n {renderThumb ? renderThumb(renderProps) : defaultThumb}\r\n\r\n <input\r\n {...rest}\r\n ref={mergedRef}\r\n id={inputId}\r\n type=\"range\"\r\n min={min}\r\n max={max}\r\n step={step}\r\n value={resolvedValue}\r\n onChange={handleInputChange}\r\n onInput={handleInputChange}\r\n onFocus={() => setFocused(true)}\r\n onBlur={() => setFocused(false)}\r\n disabled={disabled}\r\n aria-valuetext={formattedValue}\r\n aria-orientation={orientation}\r\n data-orientation={orientation}\r\n className=\"absolute inset-0 h-10 w-full appearance-none opacity-0 pointer-events-none\"\r\n />\r\n <div\r\n ref={interactionRef}\r\n aria-hidden=\"true\"\r\n onPointerDown={handlePointerDown}\r\n className={twMerge(\r\n \"absolute inset-0 cursor-pointer bg-transparent\",\r\n isVertical ? \"left-1/2 w-8 -translate-x-1/2\" : \"top-1/2 h-8 -translate-y-1/2\"\r\n )}\r\n />\r\n </div>\r\n </div>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type StackedListItem = {\r\n id: string;\r\n title: string;\r\n description?: string;\r\n meta?: string;\r\n icon?: React.ReactNode;\r\n action?: React.ReactNode;\r\n};\r\n\r\nexport type StackedListProps = React.HTMLAttributes<HTMLDivElement> & {\r\n items: StackedListItem[];\r\n dense?: boolean;\r\n};\r\n\r\nexport function StackedList({ items, dense, className, ...rest }: StackedListProps) {\r\n return (\r\n <div\r\n {...rest}\r\n className={twMerge(\r\n \"rounded-3xl border border-slate-200 bg-white/80 shadow-xl shadow-slate-200/40 dark:border-zinc-800 dark:bg-zinc-900/80 dark:shadow-none\",\r\n className\r\n )}\r\n >\r\n <ul role=\"list\" className=\"divide-y divide-slate-100 dark:divide-zinc-800\">\r\n {items.map((item) => (\r\n <li\r\n key={item.id}\r\n className={twMerge(\"flex items-start gap-4 px-5 py-4\", dense && \"py-3\")}\r\n >\r\n {item.icon ? (\r\n <div\r\n className=\"mt-0.5 rounded-2xl bg-slate-100 p-2 text-slate-600 dark:bg-zinc-900/50 dark:text-zinc-200\"\r\n aria-hidden=\"true\"\r\n >\r\n {item.icon}\r\n </div>\r\n ) : null}\r\n <div className=\"flex-1\">\r\n <p className=\"text-sm font-semibold text-slate-900 dark:text-zinc-100\">\r\n {item.title}\r\n </p>\r\n {item.description ? (\r\n <p className=\"text-sm text-slate-500 dark:text-zinc-400\">{item.description}</p>\r\n ) : null}\r\n </div>\r\n <div className=\"flex flex-col items-end gap-1 text-right\">\r\n {item.meta ? (\r\n <span className=\"text-xs uppercase tracking-wide text-slate-400 dark:text-zinc-500\">\r\n {item.meta}\r\n </span>\r\n ) : null}\r\n {item.action}\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type TableColumn<T> = {\r\n key: keyof T;\r\n header: string;\r\n render?: (value: T[keyof T], row: T) => React.ReactNode;\r\n align?: \"left\" | \"right\" | \"center\";\r\n};\r\n\r\nexport type TableProps<T> = {\r\n columns: TableColumn<T>[];\r\n data: T[];\r\n caption?: string;\r\n className?: string;\r\n scrollAreaStyle?: React.CSSProperties;\r\n style?: React.CSSProperties;\r\n};\r\n\r\nconst MIN_THUMB = 24;\r\nconst TRACK_PADDING = 6; // inset overlay tracks from edges\r\nconst TRACK_THICKNESS = 6;\r\nconst TRACK_INSET = 8; // extra padding to shorten the horizontal track inside the container\r\nconst V_TRACK_INSET = 10; // extra inset to shorten the vertical track\r\n\r\ntype ThumbState = { visible: boolean; size: number; offset: number };\r\n\r\nfunction useScrollbarMetrics(\r\n ref: React.RefObject<HTMLDivElement>,\r\n axis: \"vertical\" | \"horizontal\",\r\n extraSpace: number\r\n) {\r\n const [state, setState] = React.useState<ThumbState>({\r\n visible: false,\r\n size: MIN_THUMB,\r\n offset: 0,\r\n });\r\n\r\n React.useLayoutEffect(() => {\r\n const el = ref.current;\r\n if (!el) return;\r\n let raf = 0;\r\n\r\n const update = () => {\r\n const target = ref.current;\r\n if (!target) return;\r\n const scrollRange =\r\n axis === \"vertical\"\r\n ? target.scrollHeight - target.clientHeight\r\n : target.scrollWidth - target.clientWidth;\r\n const trackLength =\r\n axis === \"vertical\"\r\n ? Math.max(0, target.clientHeight + extraSpace - TRACK_PADDING * 2 - V_TRACK_INSET * 2)\r\n : Math.max(0, target.clientWidth + extraSpace - 2 * (TRACK_PADDING + TRACK_INSET));\r\n\r\n if (scrollRange <= 0 || trackLength <= 0) {\r\n setState((prev) => (prev.visible ? { ...prev, visible: false } : prev));\r\n return;\r\n }\r\n\r\n const ratio =\r\n axis === \"vertical\"\r\n ? target.clientHeight / target.scrollHeight\r\n : target.clientWidth / target.scrollWidth;\r\n const thumbSize = Math.max(trackLength * ratio, MIN_THUMB);\r\n const maxOffset = Math.max(0, trackLength - thumbSize);\r\n const currentOffset =\r\n maxOffset > 0\r\n ? ((axis === \"vertical\" ? target.scrollTop : target.scrollLeft) / scrollRange) * maxOffset\r\n : 0;\r\n\r\n setState({ visible: true, size: thumbSize, offset: currentOffset });\r\n };\r\n\r\n const handleScroll = () => {\r\n cancelAnimationFrame(raf);\r\n raf = window.requestAnimationFrame(update);\r\n };\r\n\r\n const resizeObserver =\r\n typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : null;\r\n resizeObserver?.observe(el);\r\n el.addEventListener(\"scroll\", handleScroll, { passive: true });\r\n update();\r\n\r\n return () => {\r\n resizeObserver?.disconnect();\r\n el.removeEventListener(\"scroll\", handleScroll);\r\n cancelAnimationFrame(raf);\r\n };\r\n }, [ref, axis, extraSpace]);\r\n\r\n return state;\r\n}\r\n\r\nfunction useThumbDrag(\r\n ref: React.RefObject<HTMLDivElement>,\r\n axis: \"vertical\" | \"horizontal\",\r\n thumbState: ThumbState,\r\n extraSpace: number\r\n) {\r\n const startDrag = React.useCallback(\r\n (event: React.PointerEvent<HTMLDivElement>, startScrollOverride?: number) => {\r\n const el = ref.current;\r\n if (!el) return;\r\n event.preventDefault();\r\n\r\n const startPos = axis === \"vertical\" ? event.clientY : event.clientX;\r\n const startScroll =\r\n startScrollOverride ?? (axis === \"vertical\" ? el.scrollTop : el.scrollLeft);\r\n const thumbSize = thumbState.size;\r\n\r\n const handleMove = (moveEvent: PointerEvent) => {\r\n const delta = (axis === \"vertical\" ? moveEvent.clientY : moveEvent.clientX) - startPos;\r\n const scrollRange =\r\n axis === \"vertical\" ? el.scrollHeight - el.clientHeight : el.scrollWidth - el.clientWidth;\r\n const trackLength =\r\n axis === \"vertical\"\r\n ? el.clientHeight + extraSpace - TRACK_PADDING * 2 - V_TRACK_INSET * 2\r\n : el.clientWidth + extraSpace - 2 * (TRACK_PADDING + TRACK_INSET);\r\n if (scrollRange <= 0 || trackLength <= thumbSize) return;\r\n\r\n const ratio = scrollRange / (trackLength - thumbSize);\r\n const next = startScroll + delta * ratio;\r\n if (axis === \"vertical\") el.scrollTop = Math.min(scrollRange, Math.max(0, next));\r\n else el.scrollLeft = Math.min(scrollRange, Math.max(0, next));\r\n };\r\n\r\n const handleUp = () => {\r\n window.removeEventListener(\"pointermove\", handleMove);\r\n window.removeEventListener(\"pointerup\", handleUp);\r\n window.removeEventListener(\"pointercancel\", handleUp);\r\n };\r\n\r\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\r\n window.addEventListener(\"pointermove\", handleMove);\r\n window.addEventListener(\"pointerup\", handleUp);\r\n window.addEventListener(\"pointercancel\", handleUp);\r\n },\r\n [axis, ref, thumbState.size, extraSpace]\r\n );\r\n\r\n const onThumbPointerDown = React.useCallback(\r\n (event: React.PointerEvent<HTMLDivElement>) => {\r\n event.stopPropagation();\r\n startDrag(event);\r\n },\r\n [startDrag]\r\n );\r\n\r\n return { onThumbPointerDown, startDrag };\r\n}\r\n\r\nexport function Table<T extends Record<string, unknown>>({\r\n columns,\r\n data,\r\n caption,\r\n className,\r\n scrollAreaStyle,\r\n style,\r\n}: TableProps<T>) {\r\n const scrollRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const [padRight, setPadRight] = React.useState(0);\r\n const [padBottom, setPadBottom] = React.useState(0);\r\n\r\n const vThumb = useScrollbarMetrics(scrollRef, \"vertical\", padBottom);\r\n const hThumb = useScrollbarMetrics(scrollRef, \"horizontal\", padRight);\r\n\r\n React.useEffect(() => {\r\n setPadRight(vThumb.visible ? TRACK_PADDING + 10 : 0);\r\n }, [vThumb.visible]);\r\n\r\n React.useEffect(() => {\r\n setPadBottom(hThumb.visible ? TRACK_PADDING + 10 : 0);\r\n }, [hThumb.visible]);\r\n\r\n const { onThumbPointerDown: handleVThumbDown, startDrag: startVDrag } = useThumbDrag(\r\n scrollRef,\r\n \"vertical\",\r\n vThumb,\r\n padBottom\r\n );\r\n const { onThumbPointerDown: handleHThumbDown, startDrag: startHDrag } = useThumbDrag(\r\n scrollRef,\r\n \"horizontal\",\r\n hThumb,\r\n padRight\r\n );\r\n\r\n const handleTrackPointerDown = React.useCallback(\r\n (\r\n axis: \"vertical\" | \"horizontal\",\r\n thumb: ThumbState,\r\n startDrag: (e: React.PointerEvent<HTMLDivElement>, startScroll?: number) => void,\r\n event: React.PointerEvent<HTMLDivElement>\r\n ) => {\r\n const el = scrollRef.current;\r\n if (!el) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const rect = event.currentTarget.getBoundingClientRect();\r\n const clickOffset =\r\n axis === \"vertical\" ? event.clientY - rect.top : event.clientX - rect.left;\r\n const trackLength = axis === \"vertical\" ? rect.height : rect.width;\r\n const scrollRange =\r\n axis === \"vertical\" ? el.scrollHeight - el.clientHeight : el.scrollWidth - el.clientWidth;\r\n if (scrollRange <= 0 || trackLength <= 0) return;\r\n const effective = Math.max(1, trackLength - thumb.size);\r\n const ratio = Math.max(0, Math.min(effective, clickOffset - thumb.size / 2)) / effective;\r\n const target = ratio * scrollRange;\r\n if (axis === \"vertical\") el.scrollTop = target;\r\n else el.scrollLeft = target;\r\n startDrag(event, axis === \"vertical\" ? el.scrollTop : el.scrollLeft);\r\n },\r\n []\r\n );\r\n\r\n const vSlot = padRight || TRACK_PADDING;\r\n const hSlot = padBottom || TRACK_PADDING;\r\n const vOffset = Math.max(TRACK_PADDING, (vSlot - TRACK_THICKNESS) / 2);\r\n const hOffset = Math.max(TRACK_PADDING, (hSlot - TRACK_THICKNESS) / 2);\r\n const hBottom = Math.max(TRACK_PADDING / 2, (hSlot - TRACK_THICKNESS) / 2);\r\n\r\n return (\r\n <div\r\n className={twMerge(\r\n \"overflow-hidden rounded-3xl border border-slate-200 shadow-sm dark:border-zinc-800\",\r\n className\r\n )}\r\n style={style}\r\n >\r\n <div\r\n className=\"relative overflow-hidden bg-white/90 dark:bg-zinc-950/80\"\r\n style={{ paddingRight: padRight, paddingBottom: padBottom }}\r\n >\r\n <div\r\n ref={scrollRef}\r\n className=\"table-scrollbar overflow-auto\"\r\n style={{ ...scrollAreaStyle }}\r\n >\r\n <table className=\"w-full border-collapse text-sm text-slate-700 dark:text-zinc-200\">\r\n {caption ? (\r\n <caption className=\"bg-slate-50 px-4 py-2 text-left text-xs font-semibold uppercase tracking-[0.25em] text-slate-500 dark:bg-zinc-900/70 dark:text-zinc-400\">\r\n {caption}\r\n </caption>\r\n ) : null}\r\n <thead className=\"bg-white/90 text-xs uppercase tracking-[0.16em] text-slate-500 dark:bg-zinc-900/80 dark:text-zinc-400\">\r\n <tr>\r\n {columns.map((col) => (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n className={twMerge(\r\n \"px-4 py-3 text-left font-semibold\",\r\n col.align === \"right\" && \"text-right\",\r\n col.align === \"center\" && \"text-center\"\r\n )}\r\n >\r\n {col.header}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {data.map((row, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className={twMerge(\r\n \"border-t border-slate-100 transition dark:border-zinc-800\",\r\n rowIndex % 2 === 0\r\n ? \"bg-slate-100/70 hover:bg-slate-200 dark:bg-zinc-950/70 dark:hover:bg-zinc-800\"\r\n : \"bg-white/80 hover:bg-slate-200 dark:bg-zinc-900/60 dark:hover:bg-zinc-800\"\r\n )}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n className={twMerge(\r\n \"px-4 py-3 align-middle\",\r\n col.align === \"right\" && \"text-right\",\r\n col.align === \"center\" && \"text-center\"\r\n )}\r\n >\r\n {col.render\r\n ? col.render(row[col.key], row)\r\n : (row[col.key] as React.ReactNode)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n {vThumb.visible ? (\r\n <div\r\n className=\"absolute z-20 pointer-events-auto rounded-full bg-white/80 shadow-inner dark:bg-zinc-900/70\"\r\n style={{\r\n right: vOffset,\r\n top: TRACK_PADDING + V_TRACK_INSET,\r\n bottom: TRACK_PADDING + V_TRACK_INSET,\r\n width: TRACK_THICKNESS,\r\n }}\r\n onPointerDown={(e) => handleTrackPointerDown(\"vertical\", vThumb, startVDrag, e)}\r\n >\r\n <div className=\"relative h-full w-full rounded-full bg-slate-900/5 shadow-inner dark:bg-white/10\">\r\n <div\r\n className=\"absolute left-1/2 w-full -translate-x-1/2 rounded-full bg-slate-400/80 shadow-sm transition-colors dark:bg-zinc-500/70\"\r\n style={{ height: `${vThumb.size}px`, top: `${vThumb.offset}px` }}\r\n onPointerDown={handleVThumbDown}\r\n />\r\n </div>\r\n </div>\r\n ) : null}\r\n {hThumb.visible ? (\r\n <div\r\n className=\"absolute z-20 pointer-events-auto rounded-full bg-white/80 shadow-inner dark:bg-zinc-900/70\"\r\n style={{\r\n left: hOffset + TRACK_INSET,\r\n right: hOffset + TRACK_INSET,\r\n bottom: hBottom,\r\n height: TRACK_THICKNESS,\r\n }}\r\n onPointerDown={(e) => handleTrackPointerDown(\"horizontal\", hThumb, startHDrag, e)}\r\n >\r\n <div className=\"relative h-full w-full rounded-full bg-slate-900/5 shadow-inner dark:bg-white/10\">\r\n <div\r\n className=\"absolute top-1/2 h-full -translate-y-1/2 rounded-full bg-slate-400/80 shadow-sm transition-colors dark:bg-zinc-500/70\"\r\n style={{ width: `${hThumb.size}px`, left: `${hThumb.offset}px` }}\r\n onPointerDown={handleHThumbDown}\r\n />\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n maxLength?: number;\r\n showCount?: boolean;\r\n resizeDirection?: \"vertical\" | \"horizontal\" | \"both\" | \"none\";\r\n};\r\n\r\ntype ThumbState = { visible: boolean; size: number; offset: number };\r\n\r\nconst MIN_THUMB = 24;\r\nconst TRACK_THICKNESS = 6;\r\nconst TRACK_TOP = 8;\r\nconst TRACK_BOTTOM = 22; // leave room for counter + handle row\r\nconst TRACK_REDUCTION = 20; // static reduction to shorten the track\r\nconst TRACK_REDUCTION_HALF = TRACK_REDUCTION / 2; // center the shortened track\r\n\r\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\r\n {\r\n label,\r\n description,\r\n error,\r\n className,\r\n id,\r\n disabled,\r\n maxLength,\r\n showCount = true,\r\n resizeDirection = \"vertical\",\r\n ...rest\r\n },\r\n ref\r\n) {\r\n const generatedId = React.useId();\r\n const textareaId = id ?? generatedId;\r\n const descriptionId = React.useId();\r\n const errorId = React.useId();\r\n const textareaRef: React.MutableRefObject<HTMLTextAreaElement | null> = React.useRef(null);\r\n const shellRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const resizeListenersRef = React.useRef<{\r\n move?: (event: MouseEvent) => void;\r\n up?: (event: MouseEvent) => void;\r\n }>({});\r\n const [thumb, setThumb] = React.useState<ThumbState>({\r\n visible: false,\r\n size: MIN_THUMB,\r\n offset: 0,\r\n });\r\n\r\n const hintIds = [description ? descriptionId : null, error ? errorId : null].filter(Boolean);\r\n const resolvedAriaDescribedBy = hintIds.length ? hintIds.join(\" \") : undefined;\r\n\r\n const [value, setValue] = React.useState(rest.defaultValue?.toString() ?? \"\");\r\n const [height, setHeight] = React.useState<number | undefined>(undefined);\r\n const [width, setWidth] = React.useState<number | undefined>(undefined);\r\n\r\n const setRefs = React.useCallback(\r\n (node: HTMLTextAreaElement | null) => {\r\n textareaRef.current = node;\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n } else if (ref) {\r\n ref.current = node;\r\n }\r\n },\r\n [ref]\r\n );\r\n\r\n React.useEffect(() => {\r\n if (typeof rest.value === \"string\") {\r\n setValue(rest.value);\r\n }\r\n }, [rest.value]);\r\n\r\n React.useLayoutEffect(() => {\r\n if (textareaRef.current && height === undefined) {\r\n setHeight(textareaRef.current.offsetHeight);\r\n }\r\n }, [height]);\r\n\r\n React.useLayoutEffect(() => {\r\n const el = textareaRef.current;\r\n if (!el) return;\r\n let raf = 0;\r\n\r\n const update = () => {\r\n const target = textareaRef.current;\r\n if (!target) return;\r\n const scrollRange = target.scrollHeight - target.clientHeight;\r\n const hostHeight = shellRef.current?.clientHeight ?? target.clientHeight;\r\n const trackLength = Math.max(0, hostHeight - TRACK_TOP - TRACK_BOTTOM - TRACK_REDUCTION);\r\n\r\n if (scrollRange <= 0 || trackLength <= 0) {\r\n setThumb((prev) => (prev.visible ? { ...prev, visible: false } : prev));\r\n return;\r\n }\r\n\r\n const ratio = target.clientHeight / target.scrollHeight;\r\n const size = Math.max(trackLength * ratio, MIN_THUMB);\r\n const maxOffset = Math.max(0, trackLength - size);\r\n const offset =\r\n maxOffset > 0 ? Math.min(maxOffset, (target.scrollTop / scrollRange) * maxOffset) : 0;\r\n setThumb({ visible: true, size, offset });\r\n };\r\n\r\n const handleScroll = () => {\r\n cancelAnimationFrame(raf);\r\n raf = window.requestAnimationFrame(update);\r\n };\r\n\r\n const ro = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : null;\r\n ro?.observe(el);\r\n el.addEventListener(\"scroll\", handleScroll, { passive: true });\r\n update();\r\n\r\n return () => {\r\n ro?.disconnect();\r\n el.removeEventListener(\"scroll\", handleScroll);\r\n cancelAnimationFrame(raf);\r\n };\r\n }, [height]);\r\n\r\n React.useLayoutEffect(() => {\r\n if (!shellRef.current || width !== undefined) return;\r\n setWidth(shellRef.current.offsetWidth);\r\n }, [width]);\r\n\r\n React.useEffect(() => {\r\n return () => {\r\n if (resizeListenersRef.current.move) {\r\n window.removeEventListener(\"mousemove\", resizeListenersRef.current.move);\r\n }\r\n if (resizeListenersRef.current.up) {\r\n window.removeEventListener(\"mouseup\", resizeListenersRef.current.up);\r\n }\r\n };\r\n }, []);\r\n\r\n const handleResizeStart = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n if (!textareaRef.current) return;\r\n\r\n const allowY = resizeDirection === \"vertical\" || resizeDirection === \"both\";\r\n const allowX = resizeDirection === \"horizontal\" || resizeDirection === \"both\";\r\n\r\n const startY = event.clientY;\r\n const startX = event.clientX;\r\n const startHeight = textareaRef.current.offsetHeight;\r\n const startWidth = shellRef.current?.offsetWidth ?? textareaRef.current.offsetWidth;\r\n const minHeight = 120;\r\n const minWidth = 240;\r\n const parentWidth = shellRef.current?.parentElement?.clientWidth ?? startWidth;\r\n\r\n const onMove = (moveEvent: MouseEvent) => {\r\n if (allowY) {\r\n const nextHeight = Math.max(minHeight, startHeight + (moveEvent.clientY - startY));\r\n setHeight(nextHeight);\r\n }\r\n if (allowX) {\r\n const proposed = startWidth + (moveEvent.clientX - startX);\r\n const nextWidth = Math.min(parentWidth, Math.max(minWidth, proposed));\r\n setWidth(nextWidth);\r\n }\r\n };\r\n\r\n const onUp = () => {\r\n window.removeEventListener(\"mousemove\", onMove);\r\n window.removeEventListener(\"mouseup\", onUp);\r\n resizeListenersRef.current = {};\r\n };\r\n\r\n resizeListenersRef.current = { move: onMove, up: onUp };\r\n\r\n window.addEventListener(\"mousemove\", onMove);\r\n window.addEventListener(\"mouseup\", onUp);\r\n };\r\n\r\n const handleThumbDrag = React.useCallback(\r\n (event: React.PointerEvent<HTMLDivElement>, startScrollOverride?: number) => {\r\n const el = textareaRef.current;\r\n if (!el) return;\r\n event.preventDefault();\r\n\r\n const startY = event.clientY;\r\n const startScroll = startScrollOverride ?? el.scrollTop;\r\n\r\n const handleMove = (moveEvent: PointerEvent) => {\r\n const delta = moveEvent.clientY - startY;\r\n const scrollRange = el.scrollHeight - el.clientHeight;\r\n const hostHeight = shellRef.current?.clientHeight ?? el.clientHeight;\r\n const trackLength = Math.max(0, hostHeight - TRACK_TOP - TRACK_BOTTOM - TRACK_REDUCTION);\r\n if (scrollRange <= 0 || trackLength <= thumb.size) return;\r\n\r\n const ratio = scrollRange / (trackLength - thumb.size);\r\n const next = startScroll + delta * ratio;\r\n el.scrollTop = Math.min(scrollRange, Math.max(0, next));\r\n };\r\n\r\n const handleUp = () => {\r\n window.removeEventListener(\"pointermove\", handleMove);\r\n window.removeEventListener(\"pointerup\", handleUp);\r\n window.removeEventListener(\"pointercancel\", handleUp);\r\n };\r\n\r\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\r\n window.addEventListener(\"pointermove\", handleMove);\r\n window.addEventListener(\"pointerup\", handleUp);\r\n window.addEventListener(\"pointercancel\", handleUp);\r\n },\r\n [thumb.size]\r\n );\r\n\r\n const shellClasses = twMerge(\r\n \"relative rounded-2xl border border-slate-300 bg-white/80 px-3 py-2 shadow-sm transition focus-within:border-slate-400 focus-within:shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-zinc-700 dark:bg-zinc-900/70 dark:focus-within:border-slate-500\",\r\n disabled && \"opacity-60\",\r\n error &&\r\n \"border-rose-300 focus-within:border-rose-400 focus-within:shadow-[0_0_0_1px_rgba(248,113,113,0.35)] dark:border-rose-500/60\"\r\n );\r\n\r\n const textareaClasses = twMerge(\r\n \"textarea-scrollbar min-h-[120px] w-full resize-none border-none bg-transparent pb-4 pr-5 text-sm text-slate-900 placeholder:text-slate-400 focus:outline-none dark:text-zinc-100 dark:placeholder:text-zinc-500\",\r\n className\r\n );\r\n\r\n const count = value.length;\r\n const limit = maxLength ?? undefined;\r\n const { style, ...restProps } = rest;\r\n const textareaStyle = {\r\n ...style,\r\n ...(height !== undefined ? { height } : null),\r\n ...(width !== undefined ? { width } : null),\r\n maxWidth: \"100%\",\r\n };\r\n const shellStyle = width !== undefined ? { width, maxWidth: \"100%\" } : { maxWidth: \"100%\" };\r\n\r\n return (\r\n <div className=\"space-y-1.5\">\r\n {label ? (\r\n <label\r\n htmlFor={textareaId}\r\n className=\"text-xs font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-zinc-400\"\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n\r\n <div className={shellClasses} ref={shellRef} style={shellStyle}>\r\n <textarea\r\n {...restProps}\r\n ref={setRefs}\r\n id={textareaId}\r\n className={textareaClasses}\r\n aria-invalid={error ? true : undefined}\r\n aria-describedby={resolvedAriaDescribedBy}\r\n disabled={disabled}\r\n maxLength={maxLength}\r\n style={textareaStyle}\r\n onChange={(e) => {\r\n setValue(e.target.value);\r\n rest.onChange?.(e);\r\n }}\r\n />\r\n {thumb.visible ? (\r\n <div\r\n className=\"pointer-events-auto absolute z-20 rounded-full bg-white/60 shadow-inner backdrop-blur-sm transition-colors dark:bg-zinc-800/70\"\r\n style={{\r\n right: 4,\r\n top: TRACK_TOP + TRACK_REDUCTION_HALF,\r\n bottom: TRACK_BOTTOM + TRACK_REDUCTION_HALF,\r\n width: TRACK_THICKNESS,\r\n }}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const el = textareaRef.current;\r\n if (!el) return;\r\n const rect = event.currentTarget.getBoundingClientRect();\r\n const clickOffset = event.clientY - rect.top;\r\n const trackLength = rect.height;\r\n const scrollRange = el.scrollHeight - el.clientHeight;\r\n if (scrollRange <= 0 || trackLength <= 0) return;\r\n const effective = Math.max(1, trackLength - thumb.size);\r\n const ratio =\r\n Math.max(0, Math.min(effective, clickOffset - thumb.size / 2)) / effective;\r\n const target = ratio * scrollRange;\r\n el.scrollTop = target;\r\n handleThumbDrag(event as unknown as React.PointerEvent<HTMLDivElement>, target);\r\n }}\r\n >\r\n <div className=\"relative h-full w-full rounded-full bg-slate-900/5 shadow-inner dark:bg-white/10\">\r\n <div\r\n className=\"absolute left-1/2 w-full -translate-x-1/2 rounded-full bg-slate-400/80 shadow-sm transition-colors dark:bg-zinc-500/70\"\r\n style={{ height: `${thumb.size}px`, top: `${thumb.offset}px` }}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n handleThumbDrag(event);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ) : null}\r\n {resizeDirection !== \"none\" ? (\r\n <div className=\"pointer-events-none absolute bottom-2 right-2 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-400 dark:text-zinc-500\">\r\n {showCount && limit ? (\r\n <div className=\"pointer-events-auto\">\r\n {count}/{limit}\r\n </div>\r\n ) : null}\r\n <button\r\n type=\"button\"\r\n aria-label=\"Resize textarea\"\r\n onMouseDown={handleResizeStart}\r\n className=\"pointer-events-auto inline-flex h-[14px] w-[14px] items-center justify-center rounded-[3px] bg-transparent text-slate-400 outline-none transition hover:text-slate-500 focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-1 focus-visible:ring-offset-white active:cursor-grab dark:bg-transparent dark:text-zinc-400 dark:hover:text-zinc-200 dark:focus-visible:ring-slate-500 dark:focus-visible:ring-offset-zinc-900\"\r\n style={{\r\n border: \"none\",\r\n boxShadow: \"none\",\r\n appearance: \"none\",\r\n background: \"transparent\",\r\n }}\r\n >\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n aria-hidden=\"true\"\r\n className=\"h-3 w-3 text-slate-400 dark:text-zinc-400\"\r\n >\r\n <path\r\n d=\"M2 10.5 10.5 2M4.5 10.5 10.5 4.5M7 10.5 10.5 7\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.1\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n {description ? (\r\n <p id={descriptionId} className=\"text-xs text-slate-500 dark:text-zinc-400\">\r\n {description}\r\n </p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p id={errorId} className=\"text-xs font-medium text-rose-500 dark:text-rose-400\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n","import * as React from \"react\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport type ToggleProps = Omit<\r\n React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n \"onChange\" | \"type\"\r\n> & {\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n};\r\n\r\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\r\n { checked, defaultChecked = false, onChange, disabled, className, onClick, ...rest },\r\n ref\r\n) {\r\n const isControlled = typeof checked === \"boolean\";\r\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked);\r\n const resolvedChecked = isControlled ? !!checked : internalChecked;\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n if (disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const next = !resolvedChecked;\r\n if (!isControlled) {\r\n setInternalChecked(next);\r\n }\r\n onChange?.(next);\r\n onClick?.(event);\r\n };\r\n\r\n const buttonClasses = twMerge(\r\n \"relative inline-flex h-7 w-12 shrink-0 cursor-pointer items-center rounded-full border border-slate-300 bg-slate-200 transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-100\",\r\n \"dark:border-zinc-700/70 dark:bg-zinc-900/70 dark:focus-visible:ring-offset-slate-950\",\r\n resolvedChecked &&\r\n \"border-slate-400 bg-slate-500/40 shadow-[0_0_0_1px_rgba(148,163,184,0.45)] dark:border-zinc-500 dark:bg-zinc-500\",\r\n disabled && \"cursor-not-allowed opacity-60\",\r\n className\r\n );\r\n\r\n const thumbClasses = twMerge(\r\n \"pointer-events-none absolute left-1 top-[3px] size-5 rounded-full bg-white text-zinc-900 shadow-lg shadow-black/30 transition-transform duration-200\",\r\n resolvedChecked ? \"translate-x-[19px]\" : \"translate-x-0\"\r\n );\r\n\r\n return (\r\n <button\r\n {...rest}\r\n ref={ref}\r\n type=\"button\"\r\n role=\"switch\"\r\n aria-checked={resolvedChecked}\r\n disabled={disabled}\r\n data-state={resolvedChecked ? \"on\" : \"off\"}\r\n className={buttonClasses}\r\n onClick={handleClick}\r\n >\r\n <span aria-hidden=\"true\" className={thumbClasses} />\r\n </button>\r\n );\r\n});\r\n\r\nexport default Toggle;\r\n"],"mappings":"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","names":["Alert","React","twMerge","jsx","jsxs","Badge","twMerge","jsx","React","twMerge","jsx","jsxs","Card","React","twMerge","jsx","jsxs","jsx","jsxs","Checkbox","twMerge","React","twMerge","jsx","jsxs","ColorPicker","_a","value","twMerge","React","twMerge","React","twMerge","jsx","jsxs","twMerge","React","twMerge","jsx","jsxs","useCallback","useEffect","useState","React","twMerge","jsx","jsxs","twMerge","jsx","_a","twMerge","React","twMerge","jsx","jsxs","DatalistInput","_a","twMerge","React","twMerge","React","twMerge","jsx","jsxs","_a","twMerge","jsx","jsxs","DatePicker","id","twMerge","_a","React","twMerge","jsx","jsxs","twMerge","React","twMerge","jsx","jsxs","Disclosure","React","twMerge","jsx","jsxs","InputField","React","twMerge","jsx","jsxs","NumberInput","React","twMerge","jsx","jsxs","OutputChip","twMerge","jsx","jsxs","React","twMerge","jsx","jsxs","Radio","React","twMerge","jsx","jsxs","Slider","start","height","position","positionRatio","logicalRatio","next","_a","twMerge","twMerge","jsx","jsxs","React","twMerge","jsx","jsxs","TRACK_PADDING","React","twMerge","jsx","jsxs","MIN_THUMB","TRACK_THICKNESS","Textarea","_a","_b","React","twMerge","jsx","Toggle"]}