react-ui-suite 1.1.12 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../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/FilePicker/FilePicker.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/TabGroup/TabGroup.tsx","../components/Table/Table.tsx","../components/Textarea/Textarea.tsx","../components/ResizableContainer/ResizableContainer.tsx","../components/Toggle/Toggle.tsx"],"sourcesContent":["import \"./styles/utility-vars.css\";\r\nimport \"./styles/tokens.css\";\r\nimport \"./styles/layout-safety.css\";\r\n\r\nexport * from \"./components/Alert\";\r\nexport * from \"./components/Badge\";\r\nexport * from \"./components/Button\";\r\nexport * from \"./components/Card\";\r\nexport * from \"./components/Checkbox\";\r\nexport * from \"./components/ColorPicker\";\r\nexport * from \"./components/Combobox\";\r\nexport * from \"./components/DatalistInput\";\r\nexport * from \"./components/DatePicker\";\r\nexport * from \"./components/Dialog\";\r\nexport * from \"./components/Disclosure\";\r\nexport * from \"./components/Dropdown\";\nexport * from \"./components/FilePicker\";\nexport * from \"./components/InputField\";\nexport * from \"./components/NumberInput\";\r\nexport * from \"./components/OutputChip\";\r\nexport * from \"./components/Popover\";\r\nexport * from \"./components/ProgressMeter\";\r\nexport * from \"./components/Radio\";\r\nexport * from \"./components/Select\";\r\nexport * from \"./components/Slider\";\r\nexport * from \"./components/StackedList\";\r\nexport * from \"./components/TabGroup\";\r\nexport * from \"./components/Table\";\r\nexport * from \"./components/Textarea\";\r\nexport * from \"./components/ResizableContainer\";\r\nexport * from \"./components/Toggle\";\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Alert.css\";\r\n\r\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"danger\";\r\n\r\nconst variantIcons: Record<AlertVariant, string> = {\r\n info: \"ℹ️\",\r\n success: \"✅\",\r\n warning: \"⚠️\",\r\n danger: \"⛔\",\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 return (\r\n <div\r\n {...rest}\r\n ref={ref}\r\n role=\"alert\"\r\n className={clsx(\"rui-alert\", \"rui-root\", \"rui-surface\", `rui-alert--${variant}`, className)}\r\n >\r\n <span className=\"rui-alert__icon\" aria-hidden=\"true\">\r\n {variantIcons[variant]}\r\n </span>\r\n <div className=\"rui-alert__content\">\r\n <p className=\"rui-alert__title rui-text-wrap\">{title}</p>\r\n {description ? <p className=\"rui-alert__description rui-text-wrap\">{description}</p> : null}\r\n </div>\r\n {onDismiss ? (\r\n <button\r\n type=\"button\"\r\n onClick={onDismiss}\r\n className=\"rui-alert__dismiss\"\r\n aria-label=\"Dismiss alert\"\r\n >\r\n ×\r\n </button>\r\n ) : null}\r\n <span className=\"rui-alert__accent\" aria-hidden=\"true\" />\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Badge.css\";\r\n\r\nexport type BadgeVariant = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\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={clsx(\"rui-badge\", \"rui-root\", \"rui-text-wrap\", `rui-badge--${variant}`, className)}\r\n >\r\n {icon ? <span aria-hidden=\"true\">{icon}</span> : null}\r\n {children}\r\n </span>\r\n );\r\n});\r\n\r\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Button.css\";\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 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={clsx(\r\n \"rui-button\",\r\n \"rui-root\",\r\n !hasCustomBackground && \"rui-button--bg-default\",\r\n !hasCustomText && \"rui-button--text-default\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Card.css\";\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 = Boolean(eyebrow || actions);\r\n\r\n return (\r\n <div\r\n {...rest}\r\n ref={ref}\r\n className={clsx(\"rui-card\", \"rui-root\", \"rui-surface\", muted && \"rui-card--muted\", className)}\r\n >\r\n {hasHeader && (\r\n <div className=\"rui-card__header\">\r\n {eyebrow ? (\r\n <p className=\"rui-card__eyebrow rui-text-wrap\">{eyebrow}</p>\r\n ) : (\r\n <p className=\"rui-card__eyebrow rui-text-wrap rui-card__eyebrow--placeholder\">Eyebrow</p>\r\n )}\r\n {actions ? <div className=\"rui-card__actions\">{actions}</div> : null}\r\n </div>\r\n )}\r\n {title ? (\r\n <h3\r\n className={clsx(\r\n \"rui-card__title rui-text-wrap\",\r\n hasHeader && \"rui-card__title--offset\"\r\n )}\r\n >\r\n {title}\r\n </h3>\r\n ) : null}\r\n {children ? <div className=\"rui-card__body rui-text-wrap\">{children}</div> : null}\r\n {footer ? (\r\n <div className=\"rui-card__footer rui-text-wrap\">{footer}</div>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport { Check } from \"../Combobox/icons\";\r\nimport { assignRef } from \"../../utils/ref\";\r\nimport clsx from \"clsx\";\r\nimport \"./Checkbox.css\";\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 uncheckedBoxColor?: string;\r\n checkedBoxColor?: string;\r\n uncheckedBorderColor?: string;\r\n checkedBorderColor?: string;\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 uncheckedBoxColor,\r\n checkedBoxColor,\r\n uncheckedBorderColor,\r\n checkedBorderColor,\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={clsx(\"rui-root\", \r\n \"rui-checkbox\",\r\n disabled && \"rui-checkbox--disabled\",\r\n className\r\n )}\r\n style={{\r\n \"--rui-checkbox-box-bg\": uncheckedBoxColor,\r\n \"--rui-checkbox-box-bg-checked\": checkedBoxColor,\r\n \"--rui-checkbox-box-border\": uncheckedBorderColor,\r\n \"--rui-checkbox-box-border-checked\": checkedBorderColor,\r\n } as React.CSSProperties}\r\n >\r\n <span className=\"rui-checkbox__control\">\r\n <input\r\n {...rest}\r\n ref={mergedRef}\r\n id={checkboxId}\r\n type=\"checkbox\"\r\n className=\"rui-checkbox__input\"\r\n checked={resolvedChecked}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n />\r\n <span\r\n className={clsx(\"rui-checkbox__box\",\r\n resolvedChecked && \"rui-checkbox__box--checked\",\r\n indeterminate && !resolvedChecked && \"rui-checkbox__box--indeterminate\"\r\n )}\r\n aria-hidden=\"true\"\r\n >\r\n {resolvedChecked ? (\r\n <Check className=\"rui-checkbox__check\" />\r\n ) : indeterminate ? (\r\n <span className=\"rui-checkbox__dash\" />\r\n ) : null}\r\n </span>\r\n </span>\r\n <span className=\"rui-checkbox__text\">\r\n <span className=\"rui-checkbox__label rui-text-wrap\">{label}</span>\r\n {description ? (\r\n <span className=\"rui-checkbox__description rui-text-wrap\">{description}</span>\r\n ) : null}\r\n </span>\r\n </label>\r\n );\r\n});\r\n\r\n\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 { assignRef } from \"../../utils/ref\";\r\nimport clsx from \"clsx\";\r\nimport \"./ColorPicker.css\";\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 const lastColorUpdateSource = React.useRef<\r\n null | \"gradient\" | \"hue\" | \"swatch\" | \"channel\" | \"external\"\r\n >(null);\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 if (lastColorUpdateSource.current !== \"gradient\") {\r\n setHue((prev) => (shouldLockHue(resolvedHsv.s, resolvedHsv.v) ? prev : resolvedHsv.h));\r\n }\r\n setSaturation(resolvedHsv.s);\r\n setValueLevel(resolvedHsv.v);\r\n lastColorUpdateSource.current = null;\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 lastColorUpdateSource.current = \"swatch\";\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 lastColorUpdateSource.current = \"channel\";\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 lastColorUpdateSource.current = \"gradient\";\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 lastColorUpdateSource.current = \"hue\";\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=\"rui-root rui-color-picker\">\r\n {label ? (\r\n <p className=\"rui-color-picker__label rui-text-wrap\">{label}</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=\"rui-color-picker__trigger\"\r\n >\r\n <span\r\n className=\"rui-color-picker__trigger-fill\"\r\n style={{ background: resolvedValue }}\r\n aria-hidden=\"true\"\r\n />\r\n <span\r\n className=\"rui-color-picker__trigger-icon\"\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=\"rui-color-picker__panel\"\r\n >\r\n <div className=\"rui-color-picker__panel-body\">\r\n <div className=\"rui-color-picker__gradient-section\">\r\n <div\r\n ref={gradientRef}\r\n onPointerDown={handleGradientPointerDown}\r\n className=\"rui-color-picker__gradient\"\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=\"rui-color-picker__gradient-thumb\"\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=\"rui-color-picker__hue\"\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=\"rui-color-picker__hue-thumb\"\r\n style={{ left: `${(hue / 360) * 100}%` }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"rui-color-picker__swatch-row\">\r\n {swatchList.map((color) => {\r\n const isActive =\r\n color.toLowerCase() === resolvedValue.toLowerCase();\r\n\r\n return (\r\n <div key={color} className=\"rui-color-picker__swatch\">\r\n <button\r\n type=\"button\"\r\n onClick={() => handleSwatchClick(color)}\r\n className={clsx(\r\n \"rui-color-picker__swatch-button\",\r\n isActive && \"rui-color-picker__swatch-button--active\"\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=\"rui-color-picker__swatch-remove\"\r\n aria-label={`Remove ${color} swatch`}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n );\r\n })}\r\n <button\r\n type=\"button\"\r\n onClick={handleAddSwatch}\r\n className=\"rui-color-picker__add-swatch\"\r\n aria-label=\"+ Add swatch\"\r\n >\r\n +\r\n </button>\r\n </div>\r\n <div className=\"rui-color-picker__channels\">\r\n <div className=\"rui-color-picker__channels-header\">\r\n <span>Channels</span>\r\n <div className=\"rui-color-picker__format-toggle\">\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={clsx(\r\n \"rui-color-picker__format-button\",\r\n format === option && \"is-active\"\r\n )}\r\n >\r\n {option.toUpperCase()}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"rui-color-picker__channel-grid\">\r\n {format === \"hex\" ? (\r\n <label className=\"rui-color-picker__channel-field rui-color-picker__channel-field--hex\">\r\n <span className=\"rui-color-picker__channel-prefix\">#</span>\r\n <input\r\n type=\"text\"\r\n value={channelValues[0] ?? \"\"}\r\n onChange={(event) =>\r\n handleChannelChange(0, event.target.value)\r\n }\r\n onBlur={resetChannels}\r\n inputMode=\"text\"\r\n maxLength={6}\r\n className=\"rui-color-picker__channel-input rui-color-picker__channel-input--hex\"\r\n />\r\n </label>\r\n ) : (\r\n channelValues.map((value, index) => (\r\n <label\r\n key={activeLabels[index]}\r\n className=\"rui-color-picker__channel-field\"\r\n >\r\n <span className=\"rui-color-picker__channel-prefix\">\r\n {activeLabels[index]}\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(event) =>\r\n handleChannelChange(index, event.target.value)\r\n }\r\n onBlur={resetChannels}\r\n inputMode=\"numeric\"\r\n className=\"rui-color-picker__channel-input\"\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\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./Combobox.css\";\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 popoverRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const outsideClickRefs = React.useMemo(\r\n () => [\r\n containerRef as unknown as React.RefObject<HTMLElement | null>,\r\n popoverRef as unknown as React.RefObject<HTMLElement | null>,\r\n ],\r\n [containerRef, popoverRef]\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 closeAfterSelectRef = 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 React.useEffect(() => {\r\n if (!closeAfterSelectRef.current) return;\r\n if (open) {\r\n setOpen(false);\r\n return;\r\n }\r\n closeAfterSelectRef.current = false;\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 closeAfterSelectRef.current = true;\r\n setSelected(opt);\r\n onChange?.(opt);\r\n if (opt) setQuery(\"\");\r\n setOpen(false);\r\n if (refocus) {\r\n suppressNextOpenRef.current = true;\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 = \"rui-combobox__highlightBorder\";\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 (!isEffectivelyOpen) {\r\n e.preventDefault();\r\n openList();\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={() => {\n if (disabled) return;\n if (!isEffectivelyOpen) {\n openList();\n return;\n }\n setOpen(false);\n }}\n >\n {isEffectivelyOpen && (\r\n <Popover\r\n anchorRef={containerRef}\r\n rootRef={popoverRef}\r\n className={clsx(listboxHighlight, listClassName)}\r\n >\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\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { ChevronDown } from \"../Combobox/icons\";\r\nimport clsx from \"clsx\";\r\nimport \"./Dropdown.css\";\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.PointerEvent<HTMLDivElement>) => void;\r\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n onInputMouseDown?: (event: React.PointerEvent<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 ? \"rui-dropdown__focusWhenClosed\" : \"\";\r\n\r\n const buttonClasses = \"rui-dropdown__chevronButton\";\r\n const inputClasses = clsx(\"rui-dropdown__input\", inputClassName, inputProps?.className);\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={clsx(\"rui-dropdown\", \"rui-root\", className)}>\r\n <div\r\n onKeyDownCapture={onKeyDownCapture}\r\n onPointerDown={onShellMouseDown}\r\n onFocusCapture={onShellFocusCapture}\r\n onBlurCapture={onShellBlurCapture}\r\n className={clsx(\r\n \"rui-dropdown__shell\",\r\n focusClasses,\r\n isOpen && clsx(\"rui-dropdown__shell--open\", highlightClass),\r\n disabled && \"rui-dropdown__shell--disabled\",\r\n shellClassName\r\n )}\r\n >\r\n {leadingContent ? <div className=\"rui-dropdown__leading\">{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 || !onInputChange}\r\n onPointerDown={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=\"rui-dropdown__inline\">{inlineContent}</div> : null}\r\n {showChevron ? (\n <button\n ref={chevronRef}\n type=\"button\"\n aria-label={isOpen ? \"Close\" : \"Open\"}\n onPointerDown={(event) => {\n if (!onChevronClick) return;\n if (event.button !== 0) return;\n event.preventDefault();\n onChevronClick();\n }}\n onClick={(event) => {\n // Keep keyboard activation (Enter/Space), but ignore mouse/touch click.\n if (!onChevronClick || event.detail !== 0) return;\n onChevronClick();\n }}\n className={buttonClasses}\n disabled={!!disabled}\n >\n <ChevronDown\r\n className={clsx(\"rui-dropdown__chevronIcon\", isOpen && \"rui-dropdown__chevronIcon--open\")}\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\r\n","import * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport clsx from \"clsx\";\r\nimport \"./Popover.css\";\r\n\r\ntype ThumbState = {\r\n visible: boolean;\r\n size: number;\r\n offset: number;\r\n};\r\n\r\ntype PopoverPosition = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n};\r\n\r\nconst MIN_THUMB_SIZE = 28;\r\nconst TRACK_PADDING = 6;\r\n\r\nfunction getAnchorPosition(anchor: HTMLElement | null): PopoverPosition | null {\r\n if (!anchor) return null;\r\n const rect = anchor.getBoundingClientRect();\r\n return {\r\n top: rect.bottom - 1,\r\n left: rect.left,\r\n width: rect.width,\r\n };\r\n}\r\n\r\nfunction Scrollbar({\n scrollRef,\n onVisibilityChange,\n}: {\n scrollRef: React.MutableRefObject<HTMLElement | null>;\n onVisibilityChange?: (visible: boolean) => void;\n}) {\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(() => {\n onVisibilityChange?.(visible);\n }, [onVisibilityChange, visible]);\n\n React.useEffect(() => {\n const handlePointerMove = (event: PointerEvent) => {\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=\"rui-popover__scrollbar\"\r\n >\r\n <div\r\n className=\"rui-popover__scrollbar-track\"\r\n onPointerDown={handleTrackPointerDown}\r\n >\r\n <div\r\n className=\"rui-popover__scrollbar-thumb\"\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 anchorRef?: React.RefObject<HTMLElement | null>;\r\n rootRef?: React.RefObject<HTMLDivElement | null>;\r\n children: (props: {\r\n scrollRef: React.MutableRefObject<HTMLUListElement | null>;\r\n }) => React.ReactNode;\r\n};\r\n\r\nexport function Popover({ className, anchorRef, rootRef, children }: PopoverProps) {\n const scrollRef: React.MutableRefObject<HTMLUListElement | null> = React.useRef(null);\n const [scrollbarVisible, setScrollbarVisible] = React.useState(false);\n const [position, setPosition] = React.useState<PopoverPosition | null>(() =>\n getAnchorPosition(anchorRef?.current ?? null)\n );\n const shouldPortal = Boolean(anchorRef) && typeof document !== \"undefined\";\r\n\r\n React.useLayoutEffect(() => {\r\n if (!anchorRef?.current) return;\r\n let raf = 0;\r\n\r\n const update = () => {\r\n cancelAnimationFrame(raf);\r\n raf = window.requestAnimationFrame(() => {\r\n setPosition(getAnchorPosition(anchorRef.current));\r\n });\r\n };\r\n\r\n update();\r\n\r\n const onScroll = () => update();\r\n window.addEventListener(\"resize\", update);\r\n window.addEventListener(\"scroll\", onScroll, true);\r\n const observer = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : null;\r\n observer?.observe(anchorRef.current);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", update);\r\n window.removeEventListener(\"scroll\", onScroll, true);\r\n observer?.disconnect();\r\n cancelAnimationFrame(raf);\r\n };\r\n }, [anchorRef]);\r\n\r\n const popoverStyle = shouldPortal\r\n ? position\r\n ? { top: position.top, left: position.left, width: position.width }\r\n : { visibility: \"hidden\" as const }\r\n : undefined;\r\n\r\n const popover = (\r\n <div\n ref={rootRef}\n className={clsx(\n \"rui-popover\",\n \"rui-overlay-root\",\n shouldPortal && \"rui-popover--portal\",\n className\n )}\n data-scrollbar-visible={scrollbarVisible ? \"true\" : \"false\"}\n style={popoverStyle}\n >\n <div className=\"rui-popover__inner\">\n {children({ scrollRef })}\n <Scrollbar scrollRef={scrollRef} onVisibilityChange={setScrollbarVisible} />\n </div>\n </div>\n );\n\r\n return shouldPortal ? createPortal(popover, document.body) : popover;\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: PointerEvent) {\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(\"pointerdown\", onDoc);\r\n return () => document.removeEventListener(\"pointerdown\", onDoc);\r\n }, [refs, handler]);\r\n}\r\n","import * as React from \"react\";\r\nimport { Check } from \"./icons\";\r\nimport type { ComboboxOption, ComboboxRenderState } from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport \"./Combobox.css\";\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 | null>; // 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={clsx(\"rui-combobox__listbox\")}\r\n >\r\n {options.length === 0 && (\r\n <li aria-disabled className=\"rui-combobox__empty\">\r\n <div className=\"rui-combobox__empty-content\">\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=\"rui-combobox__option\"\r\n onMouseEnter={() => !opt.disabled && onHoverIndex(i)}\r\n onPointerDown={(e) => {\r\n if (opt.disabled) return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onSelectIndex(i);\r\n }} // keep focus on input\r\n >\r\n {renderOption ? (\r\n renderOption(opt, optionState)\r\n ) : (\r\n <div\r\n className={clsx(\r\n \"rui-combobox__option-row\",\r\n active && \"rui-combobox__option-row--active\",\r\n selected && \"rui-combobox__option-row--selected\",\r\n opt.disabled && \"rui-combobox__option-row--disabled\"\r\n )}\r\n >\r\n <span className=\"rui-combobox__option-label\">{opt.label}</span>\r\n {selected ? (\r\n <Check className=\"rui-combobox__option-icon\" />\r\n ) : (\r\n <span className=\"rui-combobox__option-icon-placeholder\" />\r\n )}\r\n </div>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n}\r\n\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./DatalistInput.css\";\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 (disabled) return;\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 if (disabled) return;\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=\"rui-datalist-input rui-root\">\r\n {label ? (\r\n <label\r\n htmlFor={inputId}\r\n className=\"rui-datalist-input__label rui-text-wrap\"\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=\"rui-datalist-input__inline-key\">\r\n CMD\r\n </span>\r\n }\r\n onKeyDownCapture={handleKeyDown}\r\n onShellMouseDown={() => !disabled && setOpen(true)}\r\n onInputFocus={() => !disabled && setOpen(true)}\r\n onInputMouseDown={() => !disabled && 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 anchorRef={dropdownRef}>\r\n {({ scrollRef }) => (\r\n <ul\r\n ref={(node) => setListRef(node, scrollRef)}\r\n id={listboxId}\r\n role=\"listbox\"\r\n className=\"rui-datalist-input__list\"\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 className=\"rui-datalist-input__option\"\r\n >\r\n <button\r\n type=\"button\"\r\n onMouseEnter={() => setActiveIndex(index)}\r\n onClick={() => handleSelect(opt)}\r\n className={clsx(\r\n \"rui-datalist-input__option-button\",\r\n index === activeIndex && \"is-active\"\r\n )}\r\n >\r\n <span className=\"rui-datalist-input__option-key\">\r\n cmd\r\n </span>\r\n <span className=\"rui-datalist-input__option-text rui-text-truncate\">{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=\"rui-datalist-input__description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./DatePicker.css\";\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 dateMode?: \"local\" | \"utc\"; // only used when type === \"date\"\r\n};\r\n\r\ntype ViewMode = \"day\" | \"month\" | \"year\";\r\ntype DateMode = \"local\" | \"utc\";\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 toDateFromParts(mode: DateMode, year: number, month: number, day: number) {\r\n return mode === \"utc\" ? new Date(Date.UTC(year, month, day)) : new Date(year, month, day);\r\n}\r\n\r\nfunction parseDateString(value: string | undefined, mode: DateMode) {\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 = toDateFromParts(mode, 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, mode: DateMode) {\r\n const first = toDateFromParts(mode, year, month, 1);\r\n const start = mode === \"utc\" ? first.getUTCDay() : first.getDay();\r\n const endOfMonth = toDateFromParts(mode, year, month + 1, 0);\r\n const days = mode === \"utc\" ? endOfMonth.getUTCDate() : endOfMonth.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 grid.push({ day: d, date: formatLocalDateString(year, month, d) });\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 dateMode = \"local\",\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 = parseDateString(value ?? defaultValue, dateMode);\r\n if (normalized) return formatLocalDateString(normalized.year, normalized.month, normalized.day);\r\n const today = new Date();\r\n const year = dateMode === \"utc\" ? today.getUTCFullYear() : today.getFullYear();\r\n const month = dateMode === \"utc\" ? today.getUTCMonth() : today.getMonth();\r\n const day = dateMode === \"utc\" ? today.getUTCDate() : today.getDate();\r\n return formatLocalDateString(year, month, day);\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 parsed = parseDateString(initial, dateMode)?.date;\r\n if (parsed) {\r\n return {\r\n year: dateMode === \"utc\" ? parsed.getUTCFullYear() : parsed.getFullYear(),\r\n month: dateMode === \"utc\" ? parsed.getUTCMonth() : parsed.getMonth(),\r\n };\r\n }\r\n const now = new Date();\r\n return {\r\n year: dateMode === \"utc\" ? now.getUTCFullYear() : now.getFullYear(),\r\n month: dateMode === \"utc\" ? now.getUTCMonth() : now.getMonth(),\r\n };\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 popoverRef: React.MutableRefObject<HTMLDivElement | 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 const outsideClickRefs = React.useMemo(\r\n () => [\r\n dropdownRef as unknown as React.RefObject<HTMLElement | null>,\r\n popoverRef as unknown as React.RefObject<HTMLElement | null>,\r\n ],\r\n []\r\n );\r\n useOutsideClick(outsideClickRefs, () => setOpen(false));\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 = parseDateString(current, dateMode);\r\n return parsed?.date ?? null;\r\n }, [current, dateMode]);\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 timeZone: dateMode === \"utc\" ? \"UTC\" : undefined,\r\n });\r\n }, [parsedDate, current, dateMode]);\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 timeZone: dateMode === \"utc\" ? \"UTC\" : undefined,\r\n });\r\n }, [parsedDate, current, dateMode]);\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 = \"rui-date-picker__highlightBorder\";\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 : toDateFromParts(dateMode, month.year, month.month, 1).toLocaleString(\"default\", {\r\n month: \"long\",\r\n year: \"numeric\",\r\n timeZone: dateMode === \"utc\" ? \"UTC\" : undefined,\r\n });\r\n\r\n function openPicker() {\r\n if (disabled) return;\r\n const base = parsedDate ?? new Date();\r\n setMonth({\r\n year: dateMode === \"utc\" ? base.getUTCFullYear() : base.getFullYear(),\r\n month: dateMode === \"utc\" ? base.getUTCMonth() : base.getMonth(),\r\n });\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=\"rui-date-picker__leading-icon\">\r\n <Clock className=\"rui-date-picker__leading-icon-mark\" />\r\n </span>\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"rui-date-picker rui-root\">\r\n {label ? (\r\n <p className=\"rui-date-picker__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n ) : null}\r\n\r\n <div className=\"rui-date-picker__field\">\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=\"rui-date-picker__dropdown\"\r\n inputClassName={clsx(\"rui-date-picker__input\", className)}\r\n shellClassName={clsx(\r\n error &&\r\n \"rui-date-picker__shell--error\"\r\n )}\r\n leadingContent={\r\n <span className=\"rui-date-picker__leading-icon\">\r\n <Calendar className=\"rui-date-picker__leading-icon-mark\" />\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\r\n anchorRef={dropdownRef}\r\n rootRef={popoverRef}\r\n className={clsx(\"rui-date-picker__popover\", highlightBorder)}\r\n >\r\n {() => (\r\n <div className=\"rui-date-picker__panel\" id={popoverId}>\r\n <div className=\"rui-date-picker__header\">\r\n <Button\r\n type=\"button\"\r\n onClick={goPrev}\r\n className=\"rui-date-picker__nav-button\"\r\n >\r\n <span style={{ transform: \"translateY(-1.5px)\" }}>{\"<\"}</span>\r\n </Button>\r\n {viewMode === \"year\" ? (\r\n <span className=\"rui-date-picker__header-title rui-text-wrap\">\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=\"rui-date-picker__header-title rui-text-wrap rui-date-picker__header-title-button\"\r\n >\r\n {headerLabel}\r\n </button>\r\n )}\r\n <Button\r\n type=\"button\"\r\n onClick={goNext}\r\n className=\"rui-date-picker__nav-button\"\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=\"rui-date-picker__weekday-row\">\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=\"rui-date-picker__day-grid\">\r\n {getMonthDays(month.year, month.month, dateMode).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={clsx(\r\n \"rui-date-picker__day\",\r\n isSelected && \"is-selected\",\r\n !cell.date && \"is-empty\"\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=\"rui-date-picker__month-grid\">\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={clsx(\r\n \"rui-date-picker__tile\",\r\n isSelected && \"is-selected\"\r\n )}\r\n >\r\n {name}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <div className=\"rui-date-picker__year-grid\">\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={clsx(\r\n \"rui-date-picker__tile\",\r\n isSelected && \"is-selected\"\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=\"rui-date-picker__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n {error ? (\r\n <p className=\"rui-date-picker__error rui-text-wrap\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./Select.css\";\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({\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);\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\n const chevronRef: React.MutableRefObject<HTMLButtonElement | null> = React.useRef(null);\n const popoverRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\n const popoverListRef: React.MutableRefObject<React.RefObject<HTMLUListElement | null> | null> =\n React.useRef(null);\n const suppressToggleRef = React.useRef(false);\n const id = React.useId();\n const listboxId = `${id}-listbox`;\n\r\n const [open, setOpen] = React.useState(false);\r\n const [activeIndexState, setActiveIndexState] = React.useState(-1);\r\n const activeIndexRef = React.useRef(activeIndexState);\r\n const setActiveIndex = React.useCallback(\r\n (value: React.SetStateAction<number>) => {\r\n setActiveIndexState((prev) => {\r\n const next = typeof value === \"function\" ? (value as (current: number) => number)(prev) : value;\r\n activeIndexRef.current = next;\r\n return next;\r\n });\r\n },\r\n []\r\n );\r\n const activeIndex = activeIndexState;\r\n const [selected, setSelected] = useControlledState<string | null>(value, defaultValue ?? null);\r\n\r\n const outsideClickRefs = React.useMemo(\n () => [\n containerRef as unknown as React.RefObject<HTMLElement | null>,\n popoverRef as unknown as React.RefObject<HTMLElement | null>,\n ],\n []\n );\n useOutsideClick(outsideClickRefs, () => setOpen(false));\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 (activeIndexRef.current >= 0) commitSelection(activeIndexRef.current);\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 = \"rui-select__highlightBorder\";\r\n const listboxHighlight = open ? highlightBorder : \"\";\r\n\r\n return (\r\n <div className=\"rui-select rui-root\">\r\n {label ? (\r\n <p className=\"rui-select__label rui-text-wrap\">\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={clsx(\r\n \"rui-select__dropdown\",\r\n error && \"rui-select__dropdown--error\",\r\n className\r\n )}\r\n inputClassName=\"rui-select__input\"\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 && (\n <Popover anchorRef={containerRef} rootRef={popoverRef} className={listboxHighlight}>\n {({ scrollRef }) => {\n popoverListRef.current = scrollRef;\n return (\n <ul\r\n ref={scrollRef}\r\n id={listboxId}\r\n role=\"listbox\"\r\n className=\"rui-select__list\"\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=\"rui-select__option\" 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={clsx(\r\n \"rui-select__option-button\",\r\n isActive && \"rui-select__option-button--active\",\r\n isSelected && \"rui-select__option-button--selected\"\r\n )}\r\n >\r\n <span className=\"rui-select__option-content\">\r\n <span className=\"rui-select__option-label rui-text-wrap\">\r\n {opt.label}\r\n </span>\r\n {opt.description ? (\r\n <span className=\"rui-select__option-description rui-text-wrap\">\r\n {opt.description}\r\n </span>\r\n ) : null}\r\n </span>\r\n {isSelected ? (\r\n <Check className=\"rui-select__option-check\" />\r\n ) : (\r\n <span className=\"rui-select__option-check-placeholder\" />\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=\"rui-select__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p className=\"rui-select__error rui-text-wrap\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport Button from \"../Button/Button\";\r\nimport clsx from \"clsx\";\r\nimport \"./Dialog.css\";\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 titleId = React.useId();\r\n const descriptionId = React.useId();\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 return;\r\n }\r\n if (event.key === \"Tab\" && modal) {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n const focusable = Array.from(\r\n dialog.querySelectorAll<HTMLElement>(\r\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex >= 0);\r\n if (focusable.length === 0) {\r\n event.preventDefault();\r\n dialog.focus();\r\n return;\r\n }\r\n const first = focusable[0];\r\n const last = focusable[focusable.length - 1];\r\n const active = document.activeElement as HTMLElement | null;\r\n if (event.shiftKey) {\r\n if (active === first || active === dialog) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n return;\r\n }\r\n if (active === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handleKey);\r\n return () => window.removeEventListener(\"keydown\", handleKey);\r\n }, [open, onClose, modal]);\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 aria-labelledby={titleId}\r\n aria-describedby={description ? descriptionId : undefined}\r\n tabIndex={-1}\r\n className={clsx(\r\n \"rui-dialog__card\",\r\n modal ? \"\" : \"rui-dialog__card--floating\",\r\n draggable && \"rui-dialog__card--draggable\"\r\n )}\r\n style={{ transform: `translate(${dragOffset.x}px, ${dragOffset.y}px)` }}\r\n onPointerDown={onDragPointerDown}\n >\n <div className=\"rui-dialog__header\">\n <div>\n <h2 id={titleId} className=\"rui-dialog__title\">\n {title}\n </h2>\n {description ? (\r\n <p id={descriptionId} className=\"rui-dialog__description\">\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n <Button\r\n onClick={onClose}\r\n aria-label=\"Close dialog\"\r\n className=\"rui-dialog__close-button\"\r\n >\r\n ×\r\n </Button>\r\n </div>\r\n\r\n <div className=\"rui-dialog__content\">{children}</div>\r\n\r\n {footer ? <div className=\"rui-dialog__footer\">{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=\"rui-overlay-root rui-dialog__overlay\"\r\n onPointerDown={(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=\"rui-overlay-root rui-dialog__dock\">\r\n {dialogCard}\r\n </div>\r\n ),\r\n document.body\r\n );\r\n}\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Disclosure.css\";\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={clsx(\r\n \"rui-disclosure\",\r\n \"rui-root\",\r\n subtle && \"rui-disclosure--subtle\",\r\n className\r\n )}\r\n >\r\n <summary\r\n id={summaryId}\r\n className=\"rui-disclosure__summary\"\r\n >\r\n <span className=\"rui-disclosure__header\">\r\n <span className=\"rui-disclosure__title rui-text-wrap\">\r\n {title}\r\n </span>\r\n </span>\r\n <span\r\n className=\"rui-disclosure__caret\"\r\n aria-hidden=\"true\"\r\n >\r\n ▾\r\n </span>\r\n </summary>\r\n\r\n <div className=\"rui-disclosure__content rui-text-wrap\">\r\n {children}\r\n </div>\r\n </details>\r\n );\r\n});\r\n\r\n\r\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport \"./FilePicker.css\";\n\ntype NativeInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\">;\n\nexport type FilePickerMode = \"path\" | \"content\" | \"both\";\n\nexport type FileSelection = {\n file: File;\n path?: string;\n text?: string;\n bytes?: Uint8Array;\n size?: number;\n};\n\nexport type FilePickerExternalRequest = {\n directory: boolean;\n multiple: boolean;\n mode: FilePickerMode;\n accept?: string;\n maxFiles?: number;\n currentSelections: FileSelection[];\n};\n\nexport type FilePickerProps = NativeInputProps & {\n label?: string;\n description?: string;\n error?: string;\n dropzoneLabel?: string;\n maxFiles?: number;\n directory?: boolean;\n mode?: FilePickerMode;\n resolvePath?: (file: File) => string | undefined | Promise<string | undefined>;\n externalPicker?: (\n request: FilePickerExternalRequest\n ) => Promise<FileSelection[] | null | undefined>;\n onFilesChange?: (files: FileSelection[]) => void;\n};\n\ntype DirectoryPickerWindow = Window & {\n showDirectoryPicker?: () => Promise<DirectoryPickerHandle>;\n};\n\ntype DirectoryPickerHandle = {\n name: string;\n values?: () => AsyncIterable<DirectoryPickerEntryHandle>;\n};\n\ntype DirectoryPickerEntryHandle = {\n kind?: \"file\" | \"directory\";\n getFile?: () => Promise<File>;\n values?: () => AsyncIterable<DirectoryPickerEntryHandle>;\n};\n\nfunction matchesAcceptToken(file: File, token: string) {\n const normalizedToken = token.trim().toLowerCase();\n if (!normalizedToken) return true;\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n if (normalizedToken.startsWith(\".\")) {\n return fileName.endsWith(normalizedToken);\n }\n\n if (normalizedToken.endsWith(\"/*\")) {\n const prefix = normalizedToken.slice(0, -1);\n return fileType.startsWith(prefix);\n }\n\n return fileType === normalizedToken;\n}\n\nfunction filterFilesByAccept(files: File[], accept: string | undefined) {\n if (!accept?.trim()) return files;\n const tokens = accept\n .split(\",\")\n .map((token) => token.trim())\n .filter(Boolean);\n if (!tokens.length) return files;\n\n return files.filter((file) => tokens.some((token) => matchesAcceptToken(file, token)));\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction decodeUtf8IfPossible(bytes: Uint8Array) {\n try {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n return decoder.decode(bytes);\n } catch {\n return undefined;\n }\n}\n\nasync function derivePath(\n file: File,\n resolvePath: FilePickerProps[\"resolvePath\"] | undefined\n) {\n const resolved = await resolvePath?.(file);\n if (resolved) return resolved;\n\n const fileWithPath = file as File & { path?: string; webkitRelativePath?: string };\n if (typeof fileWithPath.path === \"string\" && fileWithPath.path.length > 0) {\n return fileWithPath.path;\n }\n if (\n typeof fileWithPath.webkitRelativePath === \"string\" &&\n fileWithPath.webkitRelativePath.length > 0\n ) {\n return fileWithPath.webkitRelativePath;\n }\n\n return undefined;\n}\n\nasync function readFileBytes(file: File) {\n const fileWithArrayBuffer = file as File & { arrayBuffer?: () => Promise<ArrayBuffer> };\n if (typeof fileWithArrayBuffer.arrayBuffer === \"function\") {\n return new Uint8Array(await fileWithArrayBuffer.arrayBuffer());\n }\n\n if (typeof Blob !== \"undefined\" && typeof Blob.prototype.arrayBuffer === \"function\") {\n return new Uint8Array(await Blob.prototype.arrayBuffer.call(file as Blob));\n }\n\n if (typeof FileReader !== \"undefined\") {\n return await new Promise<Uint8Array | undefined>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n resolve(result instanceof ArrayBuffer ? new Uint8Array(result) : undefined);\n };\n reader.onerror = () => resolve(undefined);\n reader.readAsArrayBuffer(file);\n });\n }\n\n return undefined;\n}\n\nasync function readDirectorySize(handle: DirectoryPickerHandle) {\n if (typeof handle.values !== \"function\") {\n return undefined;\n }\n\n let total = 0;\n for await (const entry of handle.values()) {\n if (entry.kind === \"file\" && typeof entry.getFile === \"function\") {\n const file = await entry.getFile();\n total += file.size;\n continue;\n }\n\n if (entry.kind === \"directory\" && typeof entry.values === \"function\") {\n const nestedSize = await readDirectorySize({\n name: \"\",\n values: entry.values,\n });\n if (typeof nestedSize === \"number\") {\n total += nestedSize;\n }\n }\n }\n\n return total;\n}\n\nexport const FilePicker = React.forwardRef<HTMLInputElement, FilePickerProps>(function FilePicker(\n {\n label,\n description,\n error,\n dropzoneLabel = \"Drop files here or click to browse\",\n maxFiles,\n directory = false,\n mode = \"path\",\n resolvePath,\n externalPicker,\n id,\n className,\n accept,\n disabled,\n multiple,\n onFilesChange,\n onChange,\n ...rest\n },\n forwardedRef\n) {\n const generatedId = React.useId();\n const inputId = id ?? generatedId;\n const descriptionId = React.useId();\n const errorId = React.useId();\n const [isDragActive, setIsDragActive] = React.useState(false);\n const [selectedFiles, setSelectedFiles] = React.useState<FileSelection[]>([]);\n const [restrictedCount, setRestrictedCount] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const selectionRequestIdRef = React.useRef(0);\n const canUseDirectoryHandlePicker =\n typeof window !== \"undefined\" &&\n typeof (window as DirectoryPickerWindow).showDirectoryPicker === \"function\";\n const isFolderPathOnlyMode = directory && mode === \"path\";\n const useDirectoryInputAttributes = directory && (!isFolderPathOnlyMode || !canUseDirectoryHandlePicker);\n\n const setRefs = React.useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n\n const hintIds = [description ? descriptionId : null, error ? errorId : null].filter(Boolean);\n const resolvedAriaDescribedBy = hintIds.length ? hintIds.join(\" \") : undefined;\n const resolvedMultiple = multiple || useDirectoryInputAttributes;\n const resolvedMaxFiles = React.useMemo(() => {\n if (typeof maxFiles !== \"number\" || !Number.isFinite(maxFiles)) return undefined;\n return Math.max(1, Math.floor(maxFiles));\n }, [maxFiles]);\n const directoryAttributes = useDirectoryInputAttributes\n ? ({ directory: \"\", webkitdirectory: \"\" } as Record<string, string>)\n : undefined;\n\n const selectDirectoryPath = React.useCallback(async () => {\n if (!isFolderPathOnlyMode || !canUseDirectoryHandlePicker) {\n return false;\n }\n\n const picker = (window as DirectoryPickerWindow).showDirectoryPicker;\n if (!picker) {\n return false;\n }\n\n try {\n const directoryHandle = await picker();\n const requestId = selectionRequestIdRef.current + 1;\n selectionRequestIdRef.current = requestId;\n const selection: FileSelection = {\n file: new File([], directoryHandle.name, { type: \"application/x-directory\" }),\n path: directoryHandle.name,\n };\n const directorySize = await readDirectorySize(directoryHandle);\n if (typeof directorySize === \"number\") {\n selection.size = directorySize;\n }\n const selectionLimit = multiple ? (resolvedMaxFiles ?? Infinity) : 1;\n const mergedSelections = multiple ? [...selectedFiles, selection] : [selection];\n const nextSelections = mergedSelections.slice(0, selectionLimit);\n const nextRestrictedCount = mergedSelections.length - nextSelections.length;\n\n setSelectedFiles(nextSelections);\n setRestrictedCount(nextRestrictedCount);\n onFilesChange?.(nextSelections);\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n\n return true;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return true;\n }\n return false;\n }\n }, [\n canUseDirectoryHandlePicker,\n isFolderPathOnlyMode,\n multiple,\n onFilesChange,\n resolvedMaxFiles,\n selectedFiles,\n ]);\n\n const applyExternalSelections = React.useCallback(\n (incomingSelections: FileSelection[]) => {\n const selectionLimit = resolvedMultiple ? (resolvedMaxFiles ?? Infinity) : 1;\n const nextSelections = incomingSelections.slice(0, selectionLimit);\n const nextRestrictedCount = incomingSelections.length - nextSelections.length;\n\n setSelectedFiles(nextSelections);\n setRestrictedCount(nextRestrictedCount);\n onFilesChange?.(nextSelections);\n },\n [onFilesChange, resolvedMaxFiles, resolvedMultiple]\n );\n\n const applySelectedFiles = React.useCallback(\n async (files: File[]) => {\n const acceptedFiles = filterFilesByAccept(files, accept);\n const selectionLimit = resolvedMultiple ? (resolvedMaxFiles ?? Infinity) : 1;\n const nextFiles = acceptedFiles.slice(0, selectionLimit);\n const nextRestrictedCount = files.length - nextFiles.length;\n const requestId = selectionRequestIdRef.current + 1;\n selectionRequestIdRef.current = requestId;\n\n const nextSelections = await Promise.all(\n nextFiles.map(async (file) => {\n const selection: FileSelection = { file };\n selection.path = await derivePath(file, resolvePath);\n\n if (mode === \"content\" || mode === \"both\") {\n const bytes = await readFileBytes(file);\n if (bytes) {\n selection.bytes = bytes;\n selection.text = decodeUtf8IfPossible(bytes);\n }\n }\n\n return selection;\n })\n );\n\n if (selectionRequestIdRef.current !== requestId) {\n return [];\n }\n\n setSelectedFiles(nextSelections);\n setRestrictedCount(nextRestrictedCount);\n onFilesChange?.(nextSelections);\n\n return nextSelections;\n },\n [accept, mode, onFilesChange, resolvePath, resolvedMaxFiles, resolvedMultiple]\n );\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const incomingFiles = Array.from(event.target.files ?? []);\n void applySelectedFiles(incomingFiles);\n onChange?.(event);\n };\n\n const openFileDialog = async () => {\n if (disabled) return;\n\n if (externalPicker) {\n try {\n const nextSelections = await externalPicker({\n directory,\n multiple: resolvedMultiple,\n mode,\n accept,\n maxFiles: resolvedMaxFiles,\n currentSelections: selectedFiles,\n });\n if (Array.isArray(nextSelections)) {\n applyExternalSelections(nextSelections);\n }\n } catch {\n // Ignore external picker failures to keep component non-throwing.\n }\n return;\n }\n\n const handledByDirectoryPicker = await selectDirectoryPath();\n if (handledByDirectoryPicker) {\n return;\n }\n\n if (inputRef.current) {\n inputRef.current.value = \"\";\n inputRef.current.click();\n }\n };\n\n const handleDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n if (disabled) return;\n\n if (isFolderPathOnlyMode && canUseDirectoryHandlePicker) {\n return;\n }\n\n setIsDragActive(false);\n const files = Array.from(event.dataTransfer.files ?? []);\n void applySelectedFiles(files);\n };\n\n const hasSelection = selectedFiles.length > 0;\n const allowSelectionRemoval = Boolean(multiple);\n const removeSelection = React.useCallback(\n (indexToRemove: number) => {\n const nextSelections = selectedFiles.filter((_, index) => index !== indexToRemove);\n setSelectedFiles(nextSelections);\n setRestrictedCount(0);\n onFilesChange?.(nextSelections);\n },\n [onFilesChange, selectedFiles]\n );\n\n return (\n <div className=\"rui-file-picker rui-root\">\n {label ? (\n <label htmlFor={inputId} className=\"rui-file-picker__label rui-text-wrap\">\n {label}\n </label>\n ) : null}\n\n <div\n className={clsx(\n \"rui-file-picker__dropzone\",\n isDragActive && \"rui-file-picker__dropzone--active\",\n disabled && \"rui-file-picker__dropzone--disabled\",\n error && \"rui-file-picker__dropzone--error\"\n )}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={label ? `${label} file picker` : \"File picker\"}\n aria-disabled={disabled ? true : undefined}\n onClick={() => {\n void openFileDialog();\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n void openFileDialog();\n }\n }}\n onDragEnter={(event) => {\n event.preventDefault();\n if (!disabled) setIsDragActive(true);\n }}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setIsDragActive(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setIsDragActive(false);\n }}\n onDrop={handleDrop}\n >\n <input\n {...rest}\n {...directoryAttributes}\n id={inputId}\n ref={setRefs}\n type=\"file\"\n className={clsx(\"rui-file-picker__input\", className)}\n accept={accept}\n disabled={disabled}\n multiple={resolvedMultiple}\n onClick={(event) => {\n event.stopPropagation();\n if (isFolderPathOnlyMode && canUseDirectoryHandlePicker) {\n event.preventDefault();\n void openFileDialog();\n }\n }}\n onChange={handleInputChange}\n aria-invalid={error ? true : undefined}\n aria-describedby={resolvedAriaDescribedBy}\n />\n <p className=\"rui-file-picker__prompt rui-text-wrap\">{dropzoneLabel}</p>\n <p className=\"rui-file-picker__hint rui-text-wrap\">\n {accept?.trim()\n ? `Accepted: ${accept}`\n : \"Accepted: all file types\"}\n </p>\n {resolvedMaxFiles ? (\n <p className=\"rui-file-picker__hint rui-text-wrap\">\n Maximum files: {resolvedMaxFiles}\n </p>\n ) : null}\n {hasSelection ? (\n <ul className=\"rui-file-picker__list\" aria-label=\"Selected files\">\n {selectedFiles.map((selection, index) => (\n <li\n key={`${selection.file.name}-${selection.file.size}-${selection.file.lastModified}`}\n className=\"rui-file-picker__item\"\n >\n <span className=\"rui-file-picker__file-name rui-text-wrap\">\n <span title={selection.path ?? selection.file.name}>\n {selection.path ?? selection.file.name}\n </span>\n </span>\n <div className=\"rui-file-picker__item-actions\">\n <span className=\"rui-file-picker__file-meta\">\n {formatBytes(selection.size ?? selection.file.size)}\n </span>\n {allowSelectionRemoval ? (\n <button\n type=\"button\"\n className=\"rui-file-picker__remove\"\n aria-label={`Remove ${selection.path ?? selection.file.name}`}\n onClick={(event) => {\n event.stopPropagation();\n removeSelection(index);\n }}\n >\n x\n </button>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n\n {description ? (\n <p id={descriptionId} className=\"rui-file-picker__description rui-text-wrap\">\n {description}\n </p>\n ) : null}\n {restrictedCount > 0 ? (\n <p className=\"rui-file-picker__warning rui-text-wrap\">\n {restrictedCount} file{restrictedCount === 1 ? \"\" : \"s\"}{\" \"}\n {restrictedCount === 1 ? \"was\" : \"were\"} ignored due to selection restrictions.\n </p>\n ) : null}\n {error ? (\n <p id={errorId} className=\"rui-file-picker__error rui-text-wrap\">\n {error}\n </p>\n ) : null}\n </div>\n );\n});\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./InputField.css\";\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 = clsx(\r\n disabled && \"rui-input-field__shell--disabled\",\r\n error && \"rui-input-field__shell--error\"\r\n );\r\n\r\n const inputClasses = clsx(\r\n \"rui-input-field__input\",\r\n className\r\n );\r\n\r\n const leadingElm = leadingIcon ? (\r\n <span className=\"rui-input-field__leading\" aria-hidden=\"true\">\r\n {leadingIcon}\r\n </span>\r\n ) : null;\r\n\r\n const trailingElm = trailingLabel ? (\r\n <span className=\"rui-input-field__trailing rui-text-wrap\">\r\n {trailingLabel}\r\n </span>\r\n ) : null;\r\n\r\n return (\r\n <div className=\"rui-input-field rui-root\">\r\n {label ? (\r\n <label\r\n htmlFor={inputId}\r\n className=\"rui-input-field__label rui-text-wrap\"\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n\r\n <div className={clsx(\"rui-input-field__shell\", 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=\"rui-input-field__description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p id={errorId} className=\"rui-input-field__error rui-text-wrap\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport Button from \"../Button/Button\";\r\nimport \"./NumberInput.css\";\r\nexport type NumberInputProps = {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n className?: string;\r\n style?: React.CSSProperties;\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 scale?: 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 style,\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 scale = 1,\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 const resolvedText = `${resolved}`;\r\n const valueChars = Math.max(resolvedText.length, 1);\r\n\r\n const rootStyle = React.useMemo(\r\n () =>\r\n ({\r\n \"--rui-number-input-scale\": scale,\r\n \"--rui-number-input-value-ch\": valueChars,\r\n ...style,\r\n }) as React.CSSProperties,\r\n [scale, style, valueChars]\r\n );\r\n\r\n return (\r\n <div className=\"rui-number-input rui-root\" style={rootStyle}>\r\n {label ? (\r\n <p className=\"rui-number-input__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n ) : null}\r\n <div\r\n className={clsx(\r\n \"rui-number-input__shell\",\r\n disabled && \"rui-number-input__shell--disabled\",\r\n error && \"rui-number-input__shell--error\"\r\n )}\r\n >\r\n <div className=\"rui-number-input__stepper\">\r\n <Button\r\n type=\"button\"\r\n aria-label=\"Increase\"\r\n onClick={() => update(resolved + step)}\r\n className=\"rui-number-input__step-button\"\r\n disabled={disabled}\r\n >\r\n <svg\r\n viewBox=\"0 0 20 20\"\r\n fill=\"currentColor\"\r\n aria-hidden=\"true\"\r\n width=\"1.1em\"\r\n height=\"1.1em\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M5.23 12.79a.75.75 0 0 0 1.06-.02L10 8.828l3.71 3.94a.75.75 0 1 0 1.08-1.04l-4.24-4.5a.75.75 0 0 0-1.08 0l-4.24 4.5a.75.75 0 0 0 .02 1.06z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </svg>\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n aria-label=\"Decrease\"\r\n onClick={() => update(resolved - step)}\r\n className=\"rui-number-input__step-button\"\r\n disabled={disabled}\r\n >\r\n <svg\r\n viewBox=\"0 0 20 20\"\r\n fill=\"currentColor\"\r\n aria-hidden=\"true\"\r\n width=\"1.1em\"\r\n height=\"1.1em\"\r\n >\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 </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={clsx(\r\n \"rui-number-input__input\",\r\n className\r\n )}\r\n />\r\n {suffix ? (\r\n <span className=\"rui-number-input__suffix rui-text-wrap\">\r\n {suffix}\r\n </span>\r\n ) : null}\r\n </div>\r\n {description ? (\r\n <p className=\"rui-number-input__helper rui-number-input__helper--description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n {error ? (\r\n <p className=\"rui-number-input__helper rui-number-input__helper--error rui-text-wrap\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./OutputChip.css\";\r\nexport type OutputChipProps = React.OutputHTMLAttributes<HTMLOutputElement> & {\r\n tone?: \"neutral\" | \"success\" | \"warning\" | \"danger\";\r\n label?: string;\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 return (\r\n <output\r\n {...rest}\r\n ref={ref}\r\n data-tone={tone}\r\n className={clsx(\"rui-root\", \"rui-output-chip\", className)}\r\n >\r\n {label ? <span className=\"rui-output-chip__label rui-text-wrap\">{label}</span> : null}\r\n <span className=\"rui-output-chip__value rui-text-wrap\">{children}</span>\r\n </output>\r\n );\r\n});\r\n\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./ProgressMeter.css\";\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={clsx(\"rui-progress-meter rui-root\", className)}>\r\n {label ? (\r\n <div className=\"rui-progress-meter__header\">\r\n <p className=\"rui-progress-meter__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n {showValue ? (\r\n <span className=\"rui-progress-meter__value\">\r\n {percent}%\r\n </span>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n {description ? (\r\n <p className=\"rui-progress-meter__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n <div className=\"rui-progress-meter__track\">\r\n <progress\r\n value={clamped}\r\n max={max}\r\n className=\"rui-progress-meter__native\"\r\n aria-label={label}\r\n />\r\n <div\r\n className=\"rui-progress-meter__fill rui-progress-meter__fill--gradient\"\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={clsx(\"rui-progress-meter rui-root\", className)}>\r\n {label ? (\r\n <div className=\"rui-progress-meter__header\">\r\n <p className=\"rui-progress-meter__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n <span className=\"rui-progress-meter__value\">{clamped}</span>\r\n </div>\r\n ) : null}\r\n {description ? (\r\n <p className=\"rui-progress-meter__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n <div className=\"rui-progress-meter__track\">\r\n <meter\r\n value={clamped}\r\n min={min}\r\n max={max}\r\n className=\"rui-progress-meter__native\"\r\n aria-label={label}\r\n />\r\n <div\r\n className=\"rui-progress-meter__fill\"\r\n style={{ width: `${percent}%`, background: activeColor }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Radio.css\";\r\n\r\nexport type RadioColor = \"blue\" | \"green\" | \"red\";\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 color?: RadioColor;\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 color,\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={clsx(\r\n \"rui-radio rui-root\",\r\n color && `rui-radio--color-${color}`,\r\n disabled && \"rui-radio--disabled\",\r\n className\r\n )}\r\n >\r\n <span className=\"rui-radio__content\">\r\n <span className=\"rui-radio__indicator\">\r\n <input\r\n {...rest}\r\n ref={forwardedRef}\r\n id={radioId}\r\n type=\"radio\"\r\n className=\"rui-radio__input\"\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=\"rui-radio__control\"\r\n aria-hidden=\"true\"\r\n >\r\n </span>\r\n </span>\r\n\r\n <span className=\"rui-radio__meta\">\r\n <span className=\"rui-radio__label rui-text-wrap\">{label}</span>\r\n {description ? (\r\n <span id={descriptionId} className=\"rui-radio__description rui-text-wrap\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n </span>\r\n\r\n {extra ? (\r\n <span className=\"rui-radio__extra rui-text-wrap\">\r\n {extra}\r\n </span>\r\n ) : null}\r\n </label>\r\n );\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { assignRef } from \"../../utils/ref\";\r\nimport clsx from \"clsx\";\r\nimport \"./Slider.css\";\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(renderThumb ? 0 : 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 applyInputValue = (value: string) => {\r\n const next = Number(value);\r\n if (Number.isNaN(next)) return;\r\n commitValue(next);\r\n };\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n applyInputValue(event.currentTarget.value);\r\n };\r\n const handleInputEvent = (event: React.FormEvent<HTMLInputElement>) => {\r\n applyInputValue(event.currentTarget.value);\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={clsx(\r\n \"rui-slider__track\",\r\n isVertical && \"rui-slider__track--vertical\",\r\n disabled && \"rui-slider__track--disabled\",\r\n trackClassName\r\n )}\r\n style={{ backgroundImage: trackGradient }}\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n className={clsx(\r\n \"rui-slider__track-fill\",\r\n dragging && \"rui-slider__track-fill--dragging\",\r\n isVertical ? \"rui-slider__track-fill--vertical\" : \"rui-slider__track-fill--horizontal\"\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=\"rui-slider__track-overlay\" />\r\n </div>\r\n );\r\n\r\n const defaultThumb = (\r\n <span\r\n className={clsx(\r\n \"rui-slider__thumb\",\r\n focused && \"rui-slider__thumb--focused\",\r\n disabled && \"rui-slider__thumb--disabled\",\r\n thumbClassName\r\n )}\r\n style={{ ...thumbStyle, width: thumbDiameter, height: thumbDiameter }}\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"rui-slider__thumb-core\">\r\n <span className=\"rui-slider__thumb-gradient\" />\r\n <span className=\"rui-slider__thumb-overlay\" />\r\n </span>\r\n </span>\r\n );\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"rui-root rui-slider\",\r\n isVertical && \"rui-slider--vertical\",\r\n className\r\n )}\r\n >\r\n {label ? (\r\n <div className=\"rui-slider__header\">\r\n <label\r\n htmlFor={inputId}\r\n className=\"rui-slider__label rui-text-wrap\"\r\n >\r\n {label}\r\n </label>\r\n <span className=\"rui-slider__value\">\r\n {formattedValue}\r\n </span>\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n ref={trackContainerRef}\r\n className={clsx(\r\n \"rui-slider__track-container\",\r\n isVertical && \"rui-slider__track-container--vertical\"\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={handleInputEvent}\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=\"rui-slider__input\"\r\n />\r\n <div\r\n ref={interactionRef}\r\n aria-hidden=\"true\"\r\n onPointerDown={handlePointerDown}\r\n className={clsx(\r\n \"rui-slider__interaction\",\r\n isVertical ? \"rui-slider__interaction--vertical\" : \"rui-slider__interaction--horizontal\"\r\n )}\r\n />\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./StackedList.css\";\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={clsx(\r\n \"rui-stacked-list rui-root rui-surface\",\r\n className\r\n )}\r\n >\r\n <ul role=\"list\" className=\"rui-stacked-list__list\">\r\n {items.map((item) => (\r\n <li\r\n key={item.id}\r\n className={clsx(\"rui-stacked-list__item\", dense && \"rui-stacked-list__item--dense\")}\r\n >\r\n {item.icon ? (\r\n <div\r\n className=\"rui-stacked-list__icon\"\r\n aria-hidden=\"true\"\r\n >\r\n {item.icon}\r\n </div>\r\n ) : null}\r\n <div className=\"rui-stacked-list__content\">\r\n <p className=\"rui-stacked-list__title rui-text-wrap\">\r\n {item.title}\r\n </p>\r\n {item.description ? (\r\n <p className=\"rui-stacked-list__description rui-text-wrap\">\r\n {item.description}\r\n </p>\r\n ) : null}\r\n </div>\r\n <div className=\"rui-stacked-list__meta\">\r\n {item.meta ? (\r\n <span className=\"rui-stacked-list__meta-text rui-text-wrap\">\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\r\n\r\n","import React from \"react\";\r\nimport \"./TabGroup.css\";\r\n\r\nexport const TabGroupAlign = [\"start\", \"center\", \"end\"] as const;\r\nexport const TabGroupPosition = [\"top\", \"right\", \"bottom\", \"left\"] as const;\r\nexport const TabGroupFill = [\"full\", \"partial\"] as const;\r\nexport const TabGroupRotation = [\"horizontal\", \"vertical\"] as const;\r\n\r\nexport type TabGroupAlign = (typeof TabGroupAlign)[number];\r\nexport type TabGroupPosition = (typeof TabGroupPosition)[number];\r\nexport type TabGroupFill = (typeof TabGroupFill)[number];\r\nexport type TabGroupRotation = (typeof TabGroupRotation)[number];\r\n\r\nexport type TabGroupTab = {\r\n label: React.ReactNode;\r\n content: React.ReactNode;\r\n disabled?: boolean;\r\n}\r\n\r\nexport type TabGroupProps = {\r\n align?: TabGroupAlign;\r\n position?: TabGroupPosition;\r\n fill?: TabGroupFill;\r\n rotation?: TabGroupRotation;\r\n size?: number;\r\n tabs: TabGroupTab[];\r\n\r\n active?: number;\r\n defaultActive?: number;\r\n onActiveChange?: (index: number) => void;\r\n};\r\n\r\nexport default function TabGroup({\n align = \"start\",\r\n position = \"top\",\r\n fill = \"full\",\r\n rotation = \"horizontal\",\r\n size = 50,\r\n tabs,\r\n active,\r\n defaultActive = 0,\r\n onActiveChange,\r\n}: TabGroupProps) {\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const tabStripRef = React.useRef<HTMLDivElement | null>(null);\n const measureRef = React.useRef<HTMLDivElement | null>(null);\n const idBase = React.useId();\n const [effectiveFill, setEffectiveFill] = React.useState<TabGroupFill>(fill);\n const [availableMain, setAvailableMain] = React.useState(0);\n const [cssMinMain, setCssMinMain] = React.useState(32);\n const [contentMinMain, setContentMinMain] = React.useState(0);\n const count = tabs.length;\n const isVertical = position === \"left\" || position === \"right\";\n const minMain = Math.max(cssMinMain, contentMinMain);\n const partialMainSize = Math.max(Number.isFinite(size) ? size : 0, minMain);\n const clampIndex = React.useCallback(\r\n (i: number) => {\r\n if (count <= 0) {\r\n return 0;\r\n }\r\n if (!Number.isFinite(i)) {\r\n return 0;\r\n }\r\n return Math.max(0, Math.min(count - 1, Math.trunc(i)));\r\n },\r\n [count]\r\n );\r\n const isControlled = active !== undefined;\r\n const [activeInternal, setActiveInternal] = React.useState<number>(() => clampIndex(defaultActive));\r\n React.useEffect(() => {\r\n if(!isControlled) {\r\n setActiveInternal((i) => clampIndex(i));\r\n }\r\n }, [clampIndex, isControlled]);\r\n const currentActive = clampIndex(isControlled ? active! : activeInternal);\r\n const setActive = React.useCallback(\r\n (next: number) => {\r\n const i = clampIndex(next);\r\n if(!isControlled) {\r\n setActiveInternal(i);\r\n }\r\n onActiveChange?.(i);\r\n },\r\n [clampIndex, isControlled, onActiveChange]\r\n );\r\n\r\n const tabsFirst = position === \"top\" || position === \"left\";\r\n const updateEffectiveFill = React.useCallback(() => {\n const root = rootRef.current;\r\n if (!root) {\r\n setEffectiveFill(fill);\r\n return;\r\n }\r\n\r\n const rect = root.getBoundingClientRect();\r\n const computed = getComputedStyle(root);\r\n const radius = parseFloat(computed.getPropertyValue(\"--rui-tab-panel-radius\")) || 0;\n const border = parseFloat(computed.getPropertyValue(\"--rui-tab-border\")) || 0;\n const minMainValue = parseFloat(computed.getPropertyValue(\"--rui-tab-min-main\")) || 32;\n const effectiveMinMain = Math.max(minMainValue, contentMinMain);\n const wiggle = border * 2 + 1;\n const available = position === \"top\" || position === \"bottom\" ? rect.width : rect.height;\n const requiredPerTab = Math.max(size ?? 0, effectiveMinMain);\n const required = requiredPerTab * tabs.length;\n const slots = effectiveMinMain > 0 ? Math.floor(available / effectiveMinMain) : tabs.length;\n const hasOverflowControls = slots < tabs.length;\n const shouldFill = (available - (2 * radius) - wiggle) <= required;\n setEffectiveFill(shouldFill || hasOverflowControls ? \"full\" : \"partial\");\n }, [contentMinMain, fill, position, size, tabs.length]);\n\r\n React.useLayoutEffect(() => {\r\n if (fill === \"full\") {\r\n setEffectiveFill(\"full\");\r\n return;\r\n }\r\n\r\n updateEffectiveFill();\r\n const node = rootRef.current;\r\n if (!node || typeof ResizeObserver === \"undefined\") {\r\n return;\r\n }\r\n const observer = new ResizeObserver(() => updateEffectiveFill());\r\n observer.observe(node);\r\n return () => observer.disconnect();\r\n }, [fill, updateEffectiveFill]);\r\n\r\n React.useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const computed = getComputedStyle(root);\n const cssMin = parseFloat(computed.getPropertyValue(\"--rui-tab-min-main\"));\n setCssMinMain(Number.isFinite(cssMin) && cssMin > 0 ? cssMin : 32);\n }, [position]);\n\n React.useLayoutEffect(() => {\n const node = measureRef.current;\n if (!node) return;\n\n const measure = () => {\n const sampleTab = node.querySelector<HTMLElement>(\".rui-tab-group__tab\");\n const labels = Array.from(node.querySelectorAll<HTMLElement>(\".rui-tab-group__label\"));\n if (!sampleTab || labels.length === 0) {\n setContentMinMain(0);\n return;\n }\n\n const tabStyle = getComputedStyle(sampleTab);\n const paddingMain = isVertical\n ? (parseFloat(tabStyle.paddingTop) || 0) + (parseFloat(tabStyle.paddingBottom) || 0)\n : (parseFloat(tabStyle.paddingLeft) || 0) + (parseFloat(tabStyle.paddingRight) || 0);\n const borderMain = isVertical\n ? (parseFloat(tabStyle.borderTopWidth) || 0) + (parseFloat(tabStyle.borderBottomWidth) || 0)\n : (parseFloat(tabStyle.borderLeftWidth) || 0) + (parseFloat(tabStyle.borderRightWidth) || 0);\n\n let largestLabelMain = 0;\n for (const label of labels) {\n const rect = label.getBoundingClientRect();\n const labelMain = isVertical ? rect.height : rect.width;\n if (labelMain > largestLabelMain) {\n largestLabelMain = labelMain;\n }\n }\n\n const next = Math.ceil(largestLabelMain + paddingMain + borderMain);\n setContentMinMain((prev) => (prev === next ? prev : next));\n };\n\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(() => measure());\n observer.observe(node);\n return () => observer.disconnect();\n }, [isVertical, position, rotation, tabs]);\n\r\n React.useLayoutEffect(() => {\r\n const node = tabStripRef.current;\r\n if (!node) return;\r\n\r\n const measure = () => {\r\n const rect = node.getBoundingClientRect();\r\n setAvailableMain(isVertical ? rect.height : rect.width);\r\n };\r\n\r\n measure();\r\n if (typeof ResizeObserver === \"undefined\") return;\r\n const observer = new ResizeObserver(() => measure());\r\n observer.observe(node);\r\n return () => observer.disconnect();\r\n }, [isVertical]);\r\n\r\n const slots = availableMain > 0 && minMain > 0 ? Math.floor(availableMain / minMain) : count;\n const overflow = slots < count;\n const layoutSlots = overflow ? Math.max(3, slots) : Math.max(1, slots);\n const windowSize = overflow ? Math.max(1, layoutSlots - 2) : count;\n const maxStart = Math.max(0, count - windowSize);\r\n const [startIndex, setStartIndex] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n if (!overflow) {\r\n setStartIndex(0);\r\n return;\r\n }\r\n setStartIndex((prev) => Math.min(Math.max(0, prev), maxStart));\r\n }, [overflow, maxStart]);\r\n\r\n React.useEffect(() => {\r\n if (!overflow) return;\r\n setStartIndex((prev) => {\r\n if (currentActive < prev) return currentActive;\r\n const end = prev + windowSize;\r\n if (currentActive >= end) return currentActive - windowSize + 1;\r\n return prev;\r\n });\r\n }, [currentActive, overflow, windowSize]);\r\n\r\n const visibleTabs = overflow ? tabs.slice(startIndex, startIndex + windowSize) : tabs;\r\n const slotSize = overflow && layoutSlots > 0 ? availableMain / layoutSlots : 0;\n const overflowMainStyle =\r\n overflow && slotSize > 0 ? (isVertical ? { height: slotSize } : { width: slotSize }) : undefined;\r\n const mainStyle =\r\n overflow\r\n ? overflowMainStyle\r\n : effectiveFill === \"partial\"\r\n ? (isVertical ? { height: partialMainSize } : { width: partialMainSize })\n : undefined;\n\r\n const scrollLabels = isVertical\r\n ? { back: \"Scroll tabs up\", forward: \"Scroll tabs down\" }\r\n : { back: \"Scroll tabs left\", forward: \"Scroll tabs right\" };\r\n const scrollMainStyle = overflowMainStyle;\r\n\r\n const panelId = `${idBase}-panel`;\r\n const getTabId = React.useCallback(\r\n (index: number) => `${idBase}-tab-${index}`,\r\n [idBase]\r\n );\r\n\r\n const focusTabAt = React.useCallback((index: number) => {\r\n const node = rootRef.current?.querySelector<HTMLElement>(`[data-tab-index=\"${index}\"]`);\r\n node?.focus();\r\n }, []);\r\n\r\n const moveActiveBy = React.useCallback(\r\n (direction: 1 | -1) => {\r\n if (count === 0) return;\r\n for (let i = 0; i < count; i += 1) {\r\n const next = (currentActive + direction * (i + 1) + count) % count;\r\n if (!tabs[next]?.disabled) {\r\n setActive(next);\r\n requestAnimationFrame(() => focusTabAt(next));\r\n return;\r\n }\r\n }\r\n },\r\n [count, currentActive, focusTabAt, setActive, tabs]\r\n );\r\n\r\n const moveToEdge = React.useCallback(\r\n (edge: \"start\" | \"end\") => {\r\n if (count === 0) return;\r\n const range = edge === \"start\" ? [0, count, 1] : [count - 1, -1, -1];\r\n for (let i = range[0]; i !== range[1]; i += range[2]) {\r\n if (!tabs[i]?.disabled) {\r\n setActive(i);\r\n requestAnimationFrame(() => focusTabAt(i));\r\n return;\r\n }\r\n }\r\n },\r\n [count, focusTabAt, setActive, tabs]\r\n );\r\n\r\n const handleTabListKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n const key = event.key;\r\n const prevKey = isVertical ? \"ArrowUp\" : \"ArrowLeft\";\r\n const nextKey = isVertical ? \"ArrowDown\" : \"ArrowRight\";\r\n if (key === prevKey) {\r\n event.preventDefault();\r\n moveActiveBy(-1);\r\n return;\r\n }\r\n if (key === nextKey) {\r\n event.preventDefault();\r\n moveActiveBy(1);\r\n return;\r\n }\r\n if (key === \"Home\") {\r\n event.preventDefault();\r\n moveToEdge(\"start\");\r\n } else if (key === \"End\") {\r\n event.preventDefault();\r\n moveToEdge(\"end\");\r\n }\r\n },\r\n [isVertical, moveActiveBy, moveToEdge]\r\n );\r\n\r\n const tabList = (\r\n <div className=\"rui-tab-group__tabstrip\" ref={tabStripRef}>\r\n {overflow && (\r\n <button\r\n type=\"button\"\r\n className=\"rui-tab-group__scroll is-back\"\r\n aria-label={scrollLabels.back}\r\n disabled={startIndex === 0}\r\n onClick={() => setStartIndex((i) => Math.max(0, i - 1))}\r\n style={scrollMainStyle}\r\n >\r\n <span aria-hidden=\"true\" className=\"rui-tab-group__scrollIcon\">\r\n {isVertical ? \"\\u25B2\" : \"\\u25C0\"}\r\n </span>\r\n </button>\r\n )}\r\n <div\r\n className=\"rui-tab-group__tablist\"\r\n role=\"tablist\"\r\n aria-orientation={isVertical ? \"vertical\" : \"horizontal\"}\r\n onKeyDown={handleTabListKeyDown}\r\n >\r\n {visibleTabs.map((tab, localIndex) => {\r\n const index = overflow ? startIndex + localIndex : localIndex;\r\n return (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n role=\"tab\"\r\n className={`rui-tab-group__tab ${index === currentActive ? \"is-active\" : \"\"}`}\r\n style={mainStyle}\r\n disabled={tab.disabled}\r\n aria-selected={index === currentActive}\r\n aria-controls={panelId}\r\n id={getTabId(index)}\r\n data-tab-index={index}\r\n tabIndex={index === currentActive ? 0 : -1}\r\n onClick={() => !tab.disabled && setActive(index)}\r\n >\r\n <span className=\"rui-tab-group__label\">{tab.label}</span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n {overflow && (\r\n <button\r\n type=\"button\"\r\n className=\"rui-tab-group__scroll is-forward\"\r\n aria-label={scrollLabels.forward}\r\n disabled={startIndex === maxStart}\r\n onClick={() => setStartIndex((i) => Math.min(maxStart, i + 1))}\r\n style={scrollMainStyle}\r\n >\r\n <span aria-hidden=\"true\" className=\"rui-tab-group__scrollIcon\">\r\n {isVertical ? \"\\u25BC\" : \"\\u25B6\"}\r\n </span>\r\n </button>\r\n )}\r\n </div>\r\n );\r\n\r\n const panel = (\r\n <div\r\n className=\"rui-tab-group__panel\"\r\n role=\"tabpanel\"\r\n id={panelId}\r\n aria-labelledby={getTabId(currentActive)}\r\n tabIndex={0}\r\n >\r\n {tabs[currentActive]?.content ?? null}\r\n </div>\r\n );\r\n\r\n return (\n <div\n ref={rootRef}\n className=\"rui-tab-group\"\r\n data-align={align}\r\n data-position={position}\r\n data-fill={effectiveFill}\r\n data-requested-fill={fill}\r\n data-rotation={rotation}\n data-overflow={overflow ? \"true\" : \"false\"}\n >\n <div ref={measureRef} className=\"rui-tab-group__measure\" aria-hidden=\"true\">\n {tabs.map((tab, index) => (\n <button key={index} type=\"button\" className=\"rui-tab-group__tab\">\n <span className=\"rui-tab-group__label\">{tab.label}</span>\n </button>\n ))}\n </div>\n {tabsFirst ? (\n <>\n {tabList}\n {panel}\r\n </>\r\n ) : (\r\n <>\r\n {panel}\r\n {tabList}\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Table.css\";\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 | null>,\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 | null>,\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={clsx(\r\n \"rui-table\",\r\n className\r\n )}\r\n style={style}\r\n >\r\n <div\r\n className=\"rui-table__container\"\r\n style={{ paddingRight: padRight, paddingBottom: padBottom }}\r\n >\r\n <div\r\n ref={scrollRef}\r\n className=\"rui-table__scroll\"\r\n style={{ ...scrollAreaStyle }}\r\n >\r\n <table className=\"rui-table__table\">\r\n {caption ? (\r\n <caption className=\"rui-table__caption rui-text-wrap\">\r\n {caption}\r\n </caption>\r\n ) : null}\r\n <thead className=\"rui-table__head\">\r\n <tr>\r\n {columns.map((col) => (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n className={clsx(\r\n \"rui-table__header-cell\",\r\n col.align === \"right\" && \"rui-table__header-cell--align-right\",\r\n col.align === \"center\" && \"rui-table__header-cell--align-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={clsx(\r\n \"rui-table__row\",\r\n rowIndex % 2 === 0 && \"rui-table__row--alt\"\r\n )}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n className={clsx(\r\n \"rui-table__cell\",\r\n col.align === \"right\" && \"rui-table__cell--align-right\",\r\n col.align === \"center\" && \"rui-table__cell--align-center\"\r\n )}\r\n >\r\n {col.render ? col.render(row[col.key], row) : (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=\"rui-table__track rui-table__track--vertical\"\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=\"rui-table__track-inner\">\r\n <div\r\n className={clsx(\r\n \"rui-table__thumb rui-table__thumb--vertical\"\r\n )}\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=\"rui-table__track rui-table__track--horizontal\"\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=\"rui-table__track-inner\">\r\n <div\r\n className={clsx(\r\n \"rui-table__thumb rui-table__thumb--horizontal\"\r\n )}\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\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Textarea.css\";\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: PointerEvent) => void;\r\n up?: (event: PointerEvent) => 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() ?? \"\");\n const [height, setHeight] = React.useState<number | undefined>(undefined);\n const [isUserResized, setIsUserResized] = React.useState(false);\n const [width, setWidth] = React.useState<number | undefined>(undefined);\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(() => {\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.useEffect(() => {\n return () => {\n if (resizeListenersRef.current.move) {\r\n window.removeEventListener(\"pointermove\", resizeListenersRef.current.move);\r\n }\r\n if (resizeListenersRef.current.up) {\r\n window.removeEventListener(\"pointerup\", resizeListenersRef.current.up);\r\n window.removeEventListener(\"pointercancel\", resizeListenersRef.current.up);\r\n }\r\n };\r\n }, []);\n\n React.useEffect(() => {\n const allowY = resizeDirection === \"vertical\" || resizeDirection === \"both\";\n if (!allowY) {\n setIsUserResized(false);\n setHeight(undefined);\n }\n }, [resizeDirection]);\n\r\n const handleResizeStart = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (event.pointerType === \"mouse\" && event.button !== 0) return;\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: PointerEvent) => {\n if (allowY) {\n const nextHeight = Math.max(minHeight, startHeight + (moveEvent.clientY - startY));\n setHeight(nextHeight);\n setIsUserResized(true);\n }\n if (allowX) {\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(\"pointermove\", onMove);\r\n window.removeEventListener(\"pointerup\", onUp);\r\n window.removeEventListener(\"pointercancel\", onUp);\r\n resizeListenersRef.current = {};\r\n };\r\n\r\n resizeListenersRef.current = { move: onMove, up: onUp };\r\n\r\n event.currentTarget.setPointerCapture?.(event.pointerId);\r\n window.addEventListener(\"pointermove\", onMove);\r\n window.addEventListener(\"pointerup\", onUp);\r\n window.addEventListener(\"pointercancel\", 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 rootClasses = clsx(\"rui-textarea\", \"rui-root\", disabled && \"rui-textarea--disabled\");\r\n const shellClasses = clsx(\r\n \"rui-textarea__shell\",\r\n disabled && \"rui-textarea__shell--disabled\",\r\n error && \"rui-textarea__shell--error\"\r\n );\r\n\r\n const textareaClasses = clsx(\r\n \"rui-textarea__control\",\r\n `rui-textarea__control--resize-${resizeDirection}`,\r\n className\r\n );\r\n\r\n const count = value.length;\n const limit = maxLength ?? undefined;\n const { style, ...restProps } = rest;\n const allowY = resizeDirection === \"vertical\" || resizeDirection === \"both\";\n const textareaStyle = {\n ...style,\n ...(isUserResized && allowY && height !== undefined ? { height } : null),\n };\n const allowX = resizeDirection === \"horizontal\" || resizeDirection === \"both\";\n const shellStyle = width !== undefined && allowX ? { width } : undefined;\r\n\r\n return (\r\n <div className={rootClasses}>\r\n {label ? (\r\n <label\r\n htmlFor={textareaId}\r\n className=\"rui-textarea__label rui-text-wrap\"\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=\"rui-textarea__scrollbar\"\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=\"rui-textarea__scrollbar-track\">\r\n <div\r\n className=\"rui-textarea__scrollbar-thumb\"\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=\"rui-textarea__footer\">\r\n {showCount && limit ? (\r\n <div className=\"rui-textarea__footer-count\">\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 onPointerDown={handleResizeStart}\r\n className=\"rui-textarea__resize-handle\"\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 16 16\"\r\n aria-hidden=\"true\"\r\n className=\"rui-textarea__resize-handle-icon\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n >\r\n <path d=\"M7 15 L15 7 M11 15 L15 11 M3 15 L15 3\" />\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=\"rui-textarea__description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p id={errorId} className=\"rui-textarea__error rui-text-wrap\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./ResizableContainer.css\";\r\n\r\nexport type ResizableContainerProps = React.HTMLAttributes<HTMLDivElement> & {\r\n axis?: \"both\" | \"x\" | \"y\";\r\n minWidth?: number;\r\n minHeight?: number;\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n defaultWidth?: number;\r\n defaultHeight?: number;\r\n width?: number;\r\n height?: number;\r\n step?: number;\r\n onSizeChange?: (size: { width: number; height: number }) => void;\r\n};\r\n\r\ntype ResizeState = {\r\n startX: number;\r\n startY: number;\r\n startWidth: number;\r\n startHeight: number;\r\n pointerId: number | null;\r\n maxWidthLimit?: number;\r\n maxHeightLimit?: number;\r\n};\r\n\r\nconst DEFAULT_MIN_WIDTH = 240;\r\nconst DEFAULT_MIN_HEIGHT = 120;\r\nconst DEFAULT_STEP = 8;\r\nconst MIN_THUMB = 24;\r\nconst TRACK_PADDING = 6;\r\nconst TRACK_THICKNESS = 6;\r\nconst TRACK_INSET = 8;\r\nconst V_TRACK_INSET = 10;\r\n\r\ntype ThumbState = { visible: boolean; size: number; offset: number };\r\n\r\nfunction useScrollbarMetrics(\r\n ref: React.RefObject<HTMLDivElement | null>,\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 | null>,\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 const ResizableContainer = React.forwardRef<HTMLDivElement, ResizableContainerProps>(\r\n function ResizableContainer(\r\n {\r\n axis = \"both\",\r\n minWidth = DEFAULT_MIN_WIDTH,\r\n minHeight = DEFAULT_MIN_HEIGHT,\r\n maxWidth,\r\n maxHeight,\r\n defaultWidth,\r\n defaultHeight,\r\n width,\r\n height,\r\n step = DEFAULT_STEP,\r\n className,\r\n style,\r\n children,\r\n onSizeChange,\r\n ...rest\r\n },\r\n ref\r\n ) {\r\n const rootRef = React.useRef<HTMLDivElement | null>(null);\r\n const contentRef = React.useRef<HTMLDivElement | null>(null);\r\n const [internalWidth, setInternalWidth] = React.useState<number | undefined>(defaultWidth);\r\n const [internalHeight, setInternalHeight] = React.useState<number | undefined>(defaultHeight);\r\n const [isResizing, setIsResizing] = React.useState(false);\r\n const [padRight, setPadRight] = React.useState(0);\r\n const [padBottom, setPadBottom] = React.useState(0);\r\n const resizeStateRef = React.useRef<ResizeState>({\r\n startX: 0,\r\n startY: 0,\r\n startWidth: 0,\r\n startHeight: 0,\r\n pointerId: null,\r\n });\r\n\r\n const widthControlled = typeof width === \"number\";\r\n const heightControlled = typeof height === \"number\";\r\n const allowX = axis === \"both\" || axis === \"x\";\r\n const allowY = axis === \"both\" || axis === \"y\";\r\n\r\n const maxWidthLimit = maxWidth;\r\n const maxHeightLimit = maxHeight;\r\n\r\n const vThumb = useScrollbarMetrics(contentRef, \"vertical\", padBottom);\r\n const hThumb = useScrollbarMetrics(contentRef, \"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 contentRef,\r\n \"vertical\",\r\n vThumb,\r\n padBottom\r\n );\r\n const { onThumbPointerDown: handleHThumbDown, startDrag: startHDrag } = useThumbDrag(\r\n contentRef,\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 = contentRef.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 setRefs = React.useCallback(\r\n (node: HTMLDivElement | null) => {\r\n rootRef.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 const clamp = React.useCallback((value: number, min?: number, max?: number) => {\r\n return Math.max(min ?? -Infinity, Math.min(max ?? Infinity, value));\r\n }, []);\r\n\r\n const handlePointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (event.pointerType === \"mouse\" && event.button !== 0) return;\r\n event.preventDefault();\r\n const node = rootRef.current;\r\n if (!node) return;\r\n const startWidth = node.offsetWidth;\r\n const startHeight = node.offsetHeight;\r\n\r\n resizeStateRef.current = {\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n startWidth,\r\n startHeight,\r\n pointerId: event.pointerId,\r\n maxWidthLimit,\r\n maxHeightLimit,\r\n };\r\n\r\n setIsResizing(true);\r\n event.currentTarget.setPointerCapture?.(event.pointerId);\r\n };\r\n\r\n const applySize = React.useCallback(\r\n (nextWidth: number, nextHeight: number) => {\r\n if (allowX && !widthControlled) {\r\n setInternalWidth(nextWidth);\r\n }\r\n if (allowY && !heightControlled) {\r\n setInternalHeight(nextHeight);\r\n }\r\n onSizeChange?.({ width: nextWidth, height: nextHeight });\r\n },\r\n [allowX, allowY, heightControlled, onSizeChange, widthControlled]\r\n );\r\n\r\n const handlePointerMove = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (!isResizing) return;\r\n const { startX, startY, startWidth, startHeight } = resizeStateRef.current;\r\n const maxWidthLimit = resizeStateRef.current.maxWidthLimit;\r\n const maxHeightLimit = resizeStateRef.current.maxHeightLimit;\r\n const deltaX = event.clientX - startX;\r\n const deltaY = event.clientY - startY;\r\n\r\n const nextWidth = allowX\r\n ? clamp(startWidth + deltaX, minWidth, maxWidthLimit)\r\n : widthControlled\r\n ? width ?? startWidth\r\n : internalWidth ?? startWidth;\r\n const nextHeight = allowY\r\n ? clamp(startHeight + deltaY, minHeight, maxHeightLimit)\r\n : heightControlled\r\n ? height ?? startHeight\r\n : internalHeight ?? startHeight;\r\n\r\n applySize(nextWidth, nextHeight);\r\n };\r\n\r\n const handlePointerUp = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (!isResizing) return;\r\n setIsResizing(false);\r\n if (resizeStateRef.current.pointerId !== null) {\r\n event.currentTarget.releasePointerCapture?.(resizeStateRef.current.pointerId);\r\n }\r\n resizeStateRef.current.pointerId = null;\r\n };\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\r\n let deltaX = 0;\r\n let deltaY = 0;\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\":\r\n if (allowX) deltaX = -step;\r\n break;\r\n case \"ArrowRight\":\r\n if (allowX) deltaX = step;\r\n break;\r\n case \"ArrowUp\":\r\n if (allowY) deltaY = -step;\r\n break;\r\n case \"ArrowDown\":\r\n if (allowY) deltaY = step;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (deltaX === 0 && deltaY === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const node = rootRef.current;\r\n const measuredWidth = node?.offsetWidth ?? 0;\r\n const measuredHeight = node?.offsetHeight ?? 0;\r\n const limitWidth = maxWidthLimit;\r\n const limitHeight = maxHeightLimit;\r\n const baseWidth = widthControlled ? width ?? measuredWidth : internalWidth ?? measuredWidth;\r\n const baseHeight = heightControlled ? height ?? measuredHeight : internalHeight ?? measuredHeight;\r\n const nextWidth = allowX ? clamp(baseWidth + deltaX, minWidth, limitWidth) : baseWidth;\r\n const nextHeight = allowY ? clamp(baseHeight + deltaY, minHeight, limitHeight) : baseHeight;\r\n\r\n applySize(nextWidth, nextHeight);\r\n };\r\n\r\n const resolvedWidth = widthControlled ? width : internalWidth;\r\n const resolvedHeight = heightControlled ? height : internalHeight;\r\n const sizeStyle: React.CSSProperties = {\r\n ...(resolvedWidth !== undefined ? { width: resolvedWidth } : null),\r\n ...(resolvedHeight !== undefined ? { height: resolvedHeight } : null),\r\n ...(minWidth !== undefined ? { minWidth } : null),\r\n ...(minHeight !== undefined ? { minHeight } : null),\r\n ...(maxWidthLimit !== undefined ? { maxWidth: maxWidthLimit } : null),\r\n ...(maxHeightLimit !== undefined ? { maxHeight: maxHeightLimit } : null),\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 {...rest}\r\n ref={setRefs}\r\n className={clsx(\"rui-resizable\", \"rui-root\", className)}\r\n style={{ ...style, ...sizeStyle }}\r\n data-axis={axis}\r\n data-resizing={isResizing ? \"true\" : undefined}\r\n data-scrollbar-x={hThumb.visible ? \"true\" : undefined}\r\n data-scrollbar-y={vThumb.visible ? \"true\" : undefined}\r\n >\r\n <div\r\n ref={contentRef}\r\n className=\"rui-resizable__content\"\r\n style={{\r\n paddingRight: `calc(var(--rui-resize-content-padding) + ${padRight}px)`,\r\n paddingBottom: `calc(var(--rui-resize-content-padding) + ${padBottom}px)`,\r\n }}\r\n >\r\n {children}\r\n </div>\r\n {vThumb.visible ? (\r\n <div\r\n className=\"rui-resizable__scrollbar rui-resizable__scrollbar--vertical\"\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=\"rui-resizable__scrollbar-track\">\r\n <div\r\n className=\"rui-resizable__scrollbar-thumb\"\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=\"rui-resizable__scrollbar rui-resizable__scrollbar--horizontal\"\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=\"rui-resizable__scrollbar-track\">\r\n <div\r\n className=\"rui-resizable__scrollbar-thumb\"\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 <button\r\n type=\"button\"\r\n className=\"rui-resizable__handle\"\r\n aria-label=\"Resize\"\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={handlePointerUp}\r\n onPointerCancel={handlePointerUp}\r\n onKeyDown={handleKeyDown}\r\n >\r\n <svg\r\n viewBox=\"0 0 16 16\"\r\n aria-hidden=\"true\"\r\n className=\"rui-resizable__handle-icon\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n >\r\n <path d=\"M7 15 L15 7 M11 15 L15 11 M3 15 L15 3\" />\r\n </svg>\r\n </button>\r\n </div>\r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Toggle.css\";\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 = clsx(\r\n \"rui-toggle__button rui-root\",\r\n resolvedChecked && \"rui-toggle__button--checked\",\r\n disabled && \"rui-toggle__button--disabled rui-toggle__is-disabled\",\r\n className\r\n );\r\n\r\n const thumbClasses = clsx(\r\n \"rui-toggle__thumb\",\r\n resolvedChecked ? \"rui-toggle__thumb--checked\" : \"rui-toggle__thumb--unchecked\",\r\n disabled && \"rui-toggle__thumb--disabled\"\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\r\n"],"mappings":"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","names":["Alert","React","clsx","jsx","jsxs","Badge","clsx","jsx","React","clsx","jsx","jsxs","Card","React","jsx","jsxs","clsx","jsx","jsxs","Checkbox","React","clsx","jsx","jsxs","ColorPicker","_a","value","React","React","clsx","jsx","jsxs","React","clsx","jsx","jsxs","useCallback","useEffect","useState","React","clsx","jsx","jsxs","clsx","jsx","_a","React","clsx","jsx","jsxs","DatalistInput","_a","React","React","clsx","jsx","jsxs","value","_a","clsx","jsx","jsxs","DatePicker","month","id","_a","React","createPortal","clsx","jsx","jsxs","createPortal","React","clsx","jsx","jsxs","Disclosure","React","clsx","jsx","jsxs","FilePicker","error","React","clsx","jsx","jsxs","InputField","React","clsx","jsx","jsxs","NumberInput","clsx","React","clsx","jsx","jsxs","OutputChip","clsx","jsx","jsxs","React","clsx","jsx","jsxs","Radio","React","clsx","jsx","jsxs","Slider","start","height","value","position","positionRatio","logicalRatio","next","_a","clsx","jsx","jsxs","React","Fragment","jsx","jsxs","React","slots","_a","jsxs","jsx","Fragment","React","clsx","jsx","jsxs","TRACK_PADDING","React","clsx","jsx","jsxs","MIN_THUMB","TRACK_THICKNESS","Textarea","_a","_b","allowY","allowX","React","clsx","jsx","jsxs","MIN_THUMB","TRACK_PADDING","TRACK_THICKNESS","TRACK_INSET","V_TRACK_INSET","useScrollbarMetrics","useThumbDrag","ResizableContainer","axis","clamp","maxWidthLimit","maxHeightLimit","React","clsx","jsx","Toggle"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../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/FilePicker/FilePicker.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/TabGroup/TabGroup.tsx","../components/Table/Table.tsx","../components/Textarea/Textarea.tsx","../components/ResizableContainer/ResizableContainer.tsx","../components/Toggle/Toggle.tsx"],"sourcesContent":["import \"./styles/utility-vars.css\";\r\nimport \"./styles/tokens.css\";\r\nimport \"./styles/layout-safety.css\";\r\n\r\nexport * from \"./components/Alert\";\r\nexport * from \"./components/Badge\";\r\nexport * from \"./components/Button\";\r\nexport * from \"./components/Card\";\r\nexport * from \"./components/Checkbox\";\r\nexport * from \"./components/ColorPicker\";\r\nexport * from \"./components/Combobox\";\r\nexport * from \"./components/DatalistInput\";\r\nexport * from \"./components/DatePicker\";\r\nexport * from \"./components/Dialog\";\r\nexport * from \"./components/Disclosure\";\r\nexport * from \"./components/Dropdown\";\nexport * from \"./components/FilePicker\";\nexport * from \"./components/InputField\";\nexport * from \"./components/NumberInput\";\r\nexport * from \"./components/OutputChip\";\r\nexport * from \"./components/Popover\";\r\nexport * from \"./components/ProgressMeter\";\r\nexport * from \"./components/Radio\";\r\nexport * from \"./components/Select\";\r\nexport * from \"./components/Slider\";\r\nexport * from \"./components/StackedList\";\r\nexport * from \"./components/TabGroup\";\r\nexport * from \"./components/Table\";\r\nexport * from \"./components/Textarea\";\r\nexport * from \"./components/ResizableContainer\";\r\nexport * from \"./components/Toggle\";\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Alert.css\";\r\n\r\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"danger\";\r\n\r\nconst variantIcons: Record<AlertVariant, string> = {\r\n info: \"ℹ️\",\r\n success: \"✅\",\r\n warning: \"⚠️\",\r\n danger: \"⛔\",\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 return (\r\n <div\r\n {...rest}\r\n ref={ref}\r\n role=\"alert\"\r\n className={clsx(\"rui-alert\", \"rui-root\", \"rui-surface\", `rui-alert--${variant}`, className)}\r\n >\r\n <span className=\"rui-alert__icon\" aria-hidden=\"true\">\r\n {variantIcons[variant]}\r\n </span>\r\n <div className=\"rui-alert__content\">\r\n <p className=\"rui-alert__title rui-text-wrap\">{title}</p>\r\n {description ? <p className=\"rui-alert__description rui-text-wrap\">{description}</p> : null}\r\n </div>\r\n {onDismiss ? (\r\n <button\r\n type=\"button\"\r\n onClick={onDismiss}\r\n className=\"rui-alert__dismiss\"\r\n aria-label=\"Dismiss alert\"\r\n >\r\n ×\r\n </button>\r\n ) : null}\r\n <span className=\"rui-alert__accent\" aria-hidden=\"true\" />\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Badge.css\";\r\n\r\nexport type BadgeVariant = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\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={clsx(\"rui-badge\", \"rui-root\", \"rui-text-wrap\", `rui-badge--${variant}`, className)}\r\n >\r\n {icon ? <span aria-hidden=\"true\">{icon}</span> : null}\r\n {children}\r\n </span>\r\n );\r\n});\r\n\r\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Button.css\";\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 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={clsx(\r\n \"rui-button\",\r\n \"rui-root\",\r\n !hasCustomBackground && \"rui-button--bg-default\",\r\n !hasCustomText && \"rui-button--text-default\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}\r\n\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Card.css\";\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 = Boolean(eyebrow || actions);\r\n\r\n return (\r\n <div\r\n {...rest}\r\n ref={ref}\r\n className={clsx(\"rui-card\", \"rui-root\", \"rui-surface\", muted && \"rui-card--muted\", className)}\r\n >\r\n {hasHeader && (\r\n <div className=\"rui-card__header\">\r\n {eyebrow ? (\r\n <p className=\"rui-card__eyebrow rui-text-wrap\">{eyebrow}</p>\r\n ) : (\r\n <p className=\"rui-card__eyebrow rui-text-wrap rui-card__eyebrow--placeholder\">Eyebrow</p>\r\n )}\r\n {actions ? <div className=\"rui-card__actions\">{actions}</div> : null}\r\n </div>\r\n )}\r\n {title ? (\r\n <h3\r\n className={clsx(\r\n \"rui-card__title rui-text-wrap\",\r\n hasHeader && \"rui-card__title--offset\"\r\n )}\r\n >\r\n {title}\r\n </h3>\r\n ) : null}\r\n {children ? <div className=\"rui-card__body rui-text-wrap\">{children}</div> : null}\r\n {footer ? (\r\n <div className=\"rui-card__footer rui-text-wrap\">{footer}</div>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport { Check } from \"../Combobox/icons\";\r\nimport { assignRef } from \"../../utils/ref\";\r\nimport clsx from \"clsx\";\r\nimport \"./Checkbox.css\";\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 uncheckedBoxColor?: string;\r\n checkedBoxColor?: string;\r\n uncheckedBorderColor?: string;\r\n checkedBorderColor?: string;\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 uncheckedBoxColor,\r\n checkedBoxColor,\r\n uncheckedBorderColor,\r\n checkedBorderColor,\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={clsx(\"rui-root\", \r\n \"rui-checkbox\",\r\n disabled && \"rui-checkbox--disabled\",\r\n className\r\n )}\r\n style={{\r\n \"--rui-checkbox-box-bg\": uncheckedBoxColor,\r\n \"--rui-checkbox-box-bg-checked\": checkedBoxColor,\r\n \"--rui-checkbox-box-border\": uncheckedBorderColor,\r\n \"--rui-checkbox-box-border-checked\": checkedBorderColor,\r\n } as React.CSSProperties}\r\n >\r\n <span className=\"rui-checkbox__control\">\r\n <input\r\n {...rest}\r\n ref={mergedRef}\r\n id={checkboxId}\r\n type=\"checkbox\"\r\n className=\"rui-checkbox__input\"\r\n checked={resolvedChecked}\r\n onChange={handleChange}\r\n disabled={disabled}\r\n />\r\n <span\r\n className={clsx(\"rui-checkbox__box\",\r\n resolvedChecked && \"rui-checkbox__box--checked\",\r\n indeterminate && !resolvedChecked && \"rui-checkbox__box--indeterminate\"\r\n )}\r\n aria-hidden=\"true\"\r\n >\r\n {resolvedChecked ? (\r\n <Check className=\"rui-checkbox__check\" />\r\n ) : indeterminate ? (\r\n <span className=\"rui-checkbox__dash\" />\r\n ) : null}\r\n </span>\r\n </span>\r\n <span className=\"rui-checkbox__text\">\r\n <span className=\"rui-checkbox__label rui-text-wrap\">{label}</span>\r\n {description ? (\r\n <span className=\"rui-checkbox__description rui-text-wrap\">{description}</span>\r\n ) : null}\r\n </span>\r\n </label>\r\n );\r\n});\r\n\r\n\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 { assignRef } from \"../../utils/ref\";\r\nimport clsx from \"clsx\";\r\nimport \"./ColorPicker.css\";\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 const lastColorUpdateSource = React.useRef<\r\n null | \"gradient\" | \"hue\" | \"swatch\" | \"channel\" | \"external\"\r\n >(null);\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 if (lastColorUpdateSource.current !== \"gradient\") {\r\n setHue((prev) => (shouldLockHue(resolvedHsv.s, resolvedHsv.v) ? prev : resolvedHsv.h));\r\n }\r\n setSaturation(resolvedHsv.s);\r\n setValueLevel(resolvedHsv.v);\r\n lastColorUpdateSource.current = null;\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 lastColorUpdateSource.current = \"swatch\";\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 lastColorUpdateSource.current = \"channel\";\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 lastColorUpdateSource.current = \"gradient\";\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 lastColorUpdateSource.current = \"hue\";\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=\"rui-root rui-color-picker\">\r\n {label ? (\r\n <p className=\"rui-color-picker__label rui-text-wrap\">{label}</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=\"rui-color-picker__trigger\"\r\n >\r\n <span\r\n className=\"rui-color-picker__trigger-fill\"\r\n style={{ background: resolvedValue }}\r\n aria-hidden=\"true\"\r\n />\r\n <span\r\n className=\"rui-color-picker__trigger-icon\"\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=\"rui-color-picker__panel\"\r\n >\r\n <div className=\"rui-color-picker__panel-body\">\r\n <div className=\"rui-color-picker__gradient-section\">\r\n <div\r\n ref={gradientRef}\r\n onPointerDown={handleGradientPointerDown}\r\n className=\"rui-color-picker__gradient\"\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=\"rui-color-picker__gradient-thumb\"\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=\"rui-color-picker__hue\"\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=\"rui-color-picker__hue-thumb\"\r\n style={{ left: `${(hue / 360) * 100}%` }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"rui-color-picker__swatch-row\">\r\n {swatchList.map((color) => {\r\n const isActive =\r\n color.toLowerCase() === resolvedValue.toLowerCase();\r\n\r\n return (\r\n <div key={color} className=\"rui-color-picker__swatch\">\r\n <button\r\n type=\"button\"\r\n onClick={() => handleSwatchClick(color)}\r\n className={clsx(\r\n \"rui-color-picker__swatch-button\",\r\n isActive && \"rui-color-picker__swatch-button--active\"\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=\"rui-color-picker__swatch-remove\"\r\n aria-label={`Remove ${color} swatch`}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n );\r\n })}\r\n <button\r\n type=\"button\"\r\n onClick={handleAddSwatch}\r\n className=\"rui-color-picker__add-swatch\"\r\n aria-label=\"+ Add swatch\"\r\n >\r\n +\r\n </button>\r\n </div>\r\n <div className=\"rui-color-picker__channels\">\r\n <div className=\"rui-color-picker__channels-header\">\r\n <span>Channels</span>\r\n <div className=\"rui-color-picker__format-toggle\">\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={clsx(\r\n \"rui-color-picker__format-button\",\r\n format === option && \"is-active\"\r\n )}\r\n >\r\n {option.toUpperCase()}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"rui-color-picker__channel-grid\">\r\n {format === \"hex\" ? (\r\n <label className=\"rui-color-picker__channel-field rui-color-picker__channel-field--hex\">\r\n <span className=\"rui-color-picker__channel-prefix\">#</span>\r\n <input\r\n type=\"text\"\r\n value={channelValues[0] ?? \"\"}\r\n onChange={(event) =>\r\n handleChannelChange(0, event.target.value)\r\n }\r\n onBlur={resetChannels}\r\n inputMode=\"text\"\r\n maxLength={6}\r\n className=\"rui-color-picker__channel-input rui-color-picker__channel-input--hex\"\r\n />\r\n </label>\r\n ) : (\r\n channelValues.map((value, index) => (\r\n <label\r\n key={activeLabels[index]}\r\n className=\"rui-color-picker__channel-field\"\r\n >\r\n <span className=\"rui-color-picker__channel-prefix\">\r\n {activeLabels[index]}\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(event) =>\r\n handleChannelChange(index, event.target.value)\r\n }\r\n onBlur={resetChannels}\r\n inputMode=\"numeric\"\r\n className=\"rui-color-picker__channel-input\"\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\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./Combobox.css\";\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 popoverRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\r\n const outsideClickRefs = React.useMemo(\r\n () => [\r\n containerRef as unknown as React.RefObject<HTMLElement | null>,\r\n popoverRef as unknown as React.RefObject<HTMLElement | null>,\r\n ],\r\n [containerRef, popoverRef]\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 closeAfterSelectRef = 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 React.useEffect(() => {\r\n if (!closeAfterSelectRef.current) return;\r\n if (open) {\r\n setOpen(false);\r\n return;\r\n }\r\n closeAfterSelectRef.current = false;\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 closeAfterSelectRef.current = true;\r\n setSelected(opt);\r\n onChange?.(opt);\r\n if (opt) setQuery(\"\");\r\n setOpen(false);\r\n if (refocus) {\r\n suppressNextOpenRef.current = true;\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 = \"rui-combobox__highlightBorder\";\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 (!isEffectivelyOpen) {\r\n e.preventDefault();\r\n openList();\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={() => {\n if (disabled) return;\n if (!isEffectivelyOpen) {\n openList();\n return;\n }\n setOpen(false);\n }}\n >\n {isEffectivelyOpen && (\r\n <Popover\r\n anchorRef={containerRef}\r\n rootRef={popoverRef}\r\n className={clsx(listboxHighlight, listClassName)}\r\n >\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\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { ChevronDown } from \"../Combobox/icons\";\r\nimport clsx from \"clsx\";\r\nimport \"./Dropdown.css\";\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.PointerEvent<HTMLDivElement>) => void;\r\n onInputFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n onInputMouseDown?: (event: React.PointerEvent<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 ? \"rui-dropdown__focusWhenClosed\" : \"\";\r\n\r\n const buttonClasses = \"rui-dropdown__chevronButton\";\r\n const inputClasses = clsx(\"rui-dropdown__input\", inputClassName, inputProps?.className);\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={clsx(\"rui-dropdown\", \"rui-root\", className)}>\r\n <div\r\n onKeyDownCapture={onKeyDownCapture}\r\n onPointerDown={onShellMouseDown}\r\n onFocusCapture={onShellFocusCapture}\r\n onBlurCapture={onShellBlurCapture}\r\n className={clsx(\r\n \"rui-dropdown__shell\",\r\n focusClasses,\r\n isOpen && clsx(\"rui-dropdown__shell--open\", highlightClass),\r\n disabled && \"rui-dropdown__shell--disabled\",\r\n shellClassName\r\n )}\r\n >\r\n {leadingContent ? <div className=\"rui-dropdown__leading\">{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 || !onInputChange}\r\n onPointerDown={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=\"rui-dropdown__inline\">{inlineContent}</div> : null}\r\n {showChevron ? (\n <button\n ref={chevronRef}\n type=\"button\"\n aria-label={isOpen ? \"Close\" : \"Open\"}\n onPointerDown={(event) => {\n if (!onChevronClick) return;\n if (event.button !== 0) return;\n event.preventDefault();\n onChevronClick();\n }}\n onClick={(event) => {\n // Keep keyboard activation (Enter/Space), but ignore mouse/touch click.\n if (!onChevronClick || event.detail !== 0) return;\n onChevronClick();\n }}\n className={buttonClasses}\n disabled={!!disabled}\n >\n <ChevronDown\r\n className={clsx(\"rui-dropdown__chevronIcon\", isOpen && \"rui-dropdown__chevronIcon--open\")}\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\r\n","import * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport clsx from \"clsx\";\r\nimport \"./Popover.css\";\r\n\r\ntype ThumbState = {\r\n visible: boolean;\r\n size: number;\r\n offset: number;\r\n};\r\n\r\ntype PopoverPosition = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n};\r\n\r\nconst MIN_THUMB_SIZE = 28;\r\nconst TRACK_PADDING = 6;\r\n\r\nfunction getAnchorPosition(anchor: HTMLElement | null): PopoverPosition | null {\r\n if (!anchor) return null;\r\n const rect = anchor.getBoundingClientRect();\r\n return {\r\n top: rect.bottom - 1,\r\n left: rect.left,\r\n width: rect.width,\r\n };\r\n}\r\n\r\nfunction Scrollbar({\n scrollRef,\n onVisibilityChange,\n}: {\n scrollRef: React.MutableRefObject<HTMLElement | null>;\n onVisibilityChange?: (visible: boolean) => void;\n}) {\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(() => {\n onVisibilityChange?.(visible);\n }, [onVisibilityChange, visible]);\n\n React.useEffect(() => {\n const handlePointerMove = (event: PointerEvent) => {\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=\"rui-popover__scrollbar\"\r\n >\r\n <div\r\n className=\"rui-popover__scrollbar-track\"\r\n onPointerDown={handleTrackPointerDown}\r\n >\r\n <div\r\n className=\"rui-popover__scrollbar-thumb\"\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 anchorRef?: React.RefObject<HTMLElement | null>;\r\n rootRef?: React.RefObject<HTMLDivElement | null>;\r\n children: (props: {\r\n scrollRef: React.MutableRefObject<HTMLUListElement | null>;\r\n }) => React.ReactNode;\r\n};\r\n\r\nexport function Popover({ className, anchorRef, rootRef, children }: PopoverProps) {\n const scrollRef: React.MutableRefObject<HTMLUListElement | null> = React.useRef(null);\n const [scrollbarVisible, setScrollbarVisible] = React.useState(false);\n const [position, setPosition] = React.useState<PopoverPosition | null>(() =>\n getAnchorPosition(anchorRef?.current ?? null)\n );\n const shouldPortal = Boolean(anchorRef) && typeof document !== \"undefined\";\r\n\r\n React.useLayoutEffect(() => {\r\n if (!anchorRef?.current) return;\r\n let raf = 0;\r\n\r\n const update = () => {\r\n cancelAnimationFrame(raf);\r\n raf = window.requestAnimationFrame(() => {\r\n setPosition(getAnchorPosition(anchorRef.current));\r\n });\r\n };\r\n\r\n update();\r\n\r\n const onScroll = () => update();\r\n window.addEventListener(\"resize\", update);\r\n window.addEventListener(\"scroll\", onScroll, true);\r\n const observer = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : null;\r\n observer?.observe(anchorRef.current);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", update);\r\n window.removeEventListener(\"scroll\", onScroll, true);\r\n observer?.disconnect();\r\n cancelAnimationFrame(raf);\r\n };\r\n }, [anchorRef]);\r\n\r\n const popoverStyle = shouldPortal\r\n ? position\r\n ? { top: position.top, left: position.left, width: position.width }\r\n : { visibility: \"hidden\" as const }\r\n : undefined;\r\n\r\n const popover = (\r\n <div\n ref={rootRef}\n className={clsx(\n \"rui-popover\",\n \"rui-overlay-root\",\n shouldPortal && \"rui-popover--portal\",\n className\n )}\n data-scrollbar-visible={scrollbarVisible ? \"true\" : \"false\"}\n style={popoverStyle}\n >\n <div className=\"rui-popover__inner\">\n {children({ scrollRef })}\n <Scrollbar scrollRef={scrollRef} onVisibilityChange={setScrollbarVisible} />\n </div>\n </div>\n );\n\r\n return shouldPortal ? createPortal(popover, document.body) : popover;\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: PointerEvent) {\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(\"pointerdown\", onDoc);\r\n return () => document.removeEventListener(\"pointerdown\", onDoc);\r\n }, [refs, handler]);\r\n}\r\n","import * as React from \"react\";\r\nimport { Check } from \"./icons\";\r\nimport type { ComboboxOption, ComboboxRenderState } from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport \"./Combobox.css\";\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 | null>; // 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={clsx(\"rui-combobox__listbox\")}\r\n >\r\n {options.length === 0 && (\r\n <li aria-disabled className=\"rui-combobox__empty\">\r\n <div className=\"rui-combobox__empty-content\">\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=\"rui-combobox__option\"\r\n onMouseEnter={() => !opt.disabled && onHoverIndex(i)}\r\n onPointerDown={(e) => {\r\n if (opt.disabled) return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onSelectIndex(i);\r\n }} // keep focus on input\r\n >\r\n {renderOption ? (\r\n renderOption(opt, optionState)\r\n ) : (\r\n <div\r\n className={clsx(\r\n \"rui-combobox__option-row\",\r\n active && \"rui-combobox__option-row--active\",\r\n selected && \"rui-combobox__option-row--selected\",\r\n opt.disabled && \"rui-combobox__option-row--disabled\"\r\n )}\r\n >\r\n <span className=\"rui-combobox__option-label\">{opt.label}</span>\r\n {selected ? (\r\n <Check className=\"rui-combobox__option-icon\" />\r\n ) : (\r\n <span className=\"rui-combobox__option-icon-placeholder\" />\r\n )}\r\n </div>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n}\r\n\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./DatalistInput.css\";\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 (disabled) return;\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 if (disabled) return;\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=\"rui-datalist-input rui-root\">\r\n {label ? (\r\n <label\r\n htmlFor={inputId}\r\n className=\"rui-datalist-input__label rui-text-wrap\"\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=\"rui-datalist-input__inline-key\">\r\n CMD\r\n </span>\r\n }\r\n onKeyDownCapture={handleKeyDown}\r\n onShellMouseDown={() => !disabled && setOpen(true)}\r\n onInputFocus={() => !disabled && setOpen(true)}\r\n onInputMouseDown={() => !disabled && 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 anchorRef={dropdownRef}>\r\n {({ scrollRef }) => (\r\n <ul\r\n ref={(node) => setListRef(node, scrollRef)}\r\n id={listboxId}\r\n role=\"listbox\"\r\n className=\"rui-datalist-input__list\"\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 className=\"rui-datalist-input__option\"\r\n >\r\n <button\r\n type=\"button\"\r\n onMouseEnter={() => setActiveIndex(index)}\r\n onClick={() => handleSelect(opt)}\r\n className={clsx(\r\n \"rui-datalist-input__option-button\",\r\n index === activeIndex && \"is-active\"\r\n )}\r\n >\r\n <span className=\"rui-datalist-input__option-key\">\r\n cmd\r\n </span>\r\n <span className=\"rui-datalist-input__option-text rui-text-truncate\">{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=\"rui-datalist-input__description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./DatePicker.css\";\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 dateMode?: \"local\" | \"utc\"; // only used when type === \"date\"\r\n};\r\n\r\ntype ViewMode = \"day\" | \"month\" | \"year\";\r\ntype DateMode = \"local\" | \"utc\";\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 toDateFromParts(mode: DateMode, year: number, month: number, day: number) {\r\n return mode === \"utc\" ? new Date(Date.UTC(year, month, day)) : new Date(year, month, day);\r\n}\r\n\r\nfunction parseDateString(value: string | undefined, mode: DateMode) {\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 = toDateFromParts(mode, 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, mode: DateMode) {\r\n const first = toDateFromParts(mode, year, month, 1);\r\n const start = mode === \"utc\" ? first.getUTCDay() : first.getDay();\r\n const endOfMonth = toDateFromParts(mode, year, month + 1, 0);\r\n const days = mode === \"utc\" ? endOfMonth.getUTCDate() : endOfMonth.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 grid.push({ day: d, date: formatLocalDateString(year, month, d) });\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 dateMode = \"local\",\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 = parseDateString(value ?? defaultValue, dateMode);\r\n if (normalized) return formatLocalDateString(normalized.year, normalized.month, normalized.day);\r\n const today = new Date();\r\n const year = dateMode === \"utc\" ? today.getUTCFullYear() : today.getFullYear();\r\n const month = dateMode === \"utc\" ? today.getUTCMonth() : today.getMonth();\r\n const day = dateMode === \"utc\" ? today.getUTCDate() : today.getDate();\r\n return formatLocalDateString(year, month, day);\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 parsed = parseDateString(initial, dateMode)?.date;\r\n if (parsed) {\r\n return {\r\n year: dateMode === \"utc\" ? parsed.getUTCFullYear() : parsed.getFullYear(),\r\n month: dateMode === \"utc\" ? parsed.getUTCMonth() : parsed.getMonth(),\r\n };\r\n }\r\n const now = new Date();\r\n return {\r\n year: dateMode === \"utc\" ? now.getUTCFullYear() : now.getFullYear(),\r\n month: dateMode === \"utc\" ? now.getUTCMonth() : now.getMonth(),\r\n };\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 popoverRef: React.MutableRefObject<HTMLDivElement | 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 const outsideClickRefs = React.useMemo(\r\n () => [\r\n dropdownRef as unknown as React.RefObject<HTMLElement | null>,\r\n popoverRef as unknown as React.RefObject<HTMLElement | null>,\r\n ],\r\n []\r\n );\r\n useOutsideClick(outsideClickRefs, () => setOpen(false));\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 = parseDateString(current, dateMode);\r\n return parsed?.date ?? null;\r\n }, [current, dateMode]);\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 timeZone: dateMode === \"utc\" ? \"UTC\" : undefined,\r\n });\r\n }, [parsedDate, current, dateMode]);\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 timeZone: dateMode === \"utc\" ? \"UTC\" : undefined,\r\n });\r\n }, [parsedDate, current, dateMode]);\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 = \"rui-date-picker__highlightBorder\";\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 : toDateFromParts(dateMode, month.year, month.month, 1).toLocaleString(\"default\", {\r\n month: \"long\",\r\n year: \"numeric\",\r\n timeZone: dateMode === \"utc\" ? \"UTC\" : undefined,\r\n });\r\n\r\n function openPicker() {\r\n if (disabled) return;\r\n const base = parsedDate ?? new Date();\r\n setMonth({\r\n year: dateMode === \"utc\" ? base.getUTCFullYear() : base.getFullYear(),\r\n month: dateMode === \"utc\" ? base.getUTCMonth() : base.getMonth(),\r\n });\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=\"rui-date-picker__leading-icon\">\r\n <Clock className=\"rui-date-picker__leading-icon-mark\" />\r\n </span>\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"rui-date-picker rui-root\">\r\n {label ? (\r\n <p className=\"rui-date-picker__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n ) : null}\r\n\r\n <div className=\"rui-date-picker__field\">\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=\"rui-date-picker__dropdown\"\r\n inputClassName={clsx(\"rui-date-picker__input\", className)}\r\n shellClassName={clsx(\r\n error &&\r\n \"rui-date-picker__shell--error\"\r\n )}\r\n leadingContent={\r\n <span className=\"rui-date-picker__leading-icon\">\r\n <Calendar className=\"rui-date-picker__leading-icon-mark\" />\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\r\n anchorRef={dropdownRef}\r\n rootRef={popoverRef}\r\n className={clsx(\"rui-date-picker__popover\", highlightBorder)}\r\n >\r\n {() => (\r\n <div className=\"rui-date-picker__panel\" id={popoverId}>\r\n <div className=\"rui-date-picker__header\">\r\n <Button\r\n type=\"button\"\r\n onClick={goPrev}\r\n className=\"rui-date-picker__nav-button\"\r\n >\r\n <span style={{ transform: \"translateY(-1.5px)\" }}>{\"<\"}</span>\r\n </Button>\r\n {viewMode === \"year\" ? (\r\n <span className=\"rui-date-picker__header-title rui-text-wrap\">\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=\"rui-date-picker__header-title rui-text-wrap rui-date-picker__header-title-button\"\r\n >\r\n {headerLabel}\r\n </button>\r\n )}\r\n <Button\r\n type=\"button\"\r\n onClick={goNext}\r\n className=\"rui-date-picker__nav-button\"\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=\"rui-date-picker__weekday-row\">\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=\"rui-date-picker__day-grid\">\r\n {getMonthDays(month.year, month.month, dateMode).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={clsx(\r\n \"rui-date-picker__day\",\r\n isSelected && \"is-selected\",\r\n !cell.date && \"is-empty\"\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=\"rui-date-picker__month-grid\">\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={clsx(\r\n \"rui-date-picker__tile\",\r\n isSelected && \"is-selected\"\r\n )}\r\n >\r\n {name}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <div className=\"rui-date-picker__year-grid\">\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={clsx(\r\n \"rui-date-picker__tile\",\r\n isSelected && \"is-selected\"\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=\"rui-date-picker__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n {error ? (\r\n <p className=\"rui-date-picker__error rui-text-wrap\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n\r\n","import * as React from \"react\";\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\nimport clsx from \"clsx\";\r\nimport \"./Select.css\";\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({\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);\n const inputRef: React.MutableRefObject<HTMLInputElement | null> = React.useRef(null);\n const chevronRef: React.MutableRefObject<HTMLButtonElement | null> = React.useRef(null);\n const popoverRef: React.MutableRefObject<HTMLDivElement | null> = React.useRef(null);\n const popoverListRef: React.MutableRefObject<React.RefObject<HTMLUListElement | null> | null> =\n React.useRef(null);\n const suppressToggleRef = React.useRef(false);\n const id = React.useId();\n const listboxId = `${id}-listbox`;\n\r\n const [open, setOpen] = React.useState(false);\r\n const [activeIndexState, setActiveIndexState] = React.useState(-1);\r\n const activeIndexRef = React.useRef(activeIndexState);\r\n const setActiveIndex = React.useCallback(\r\n (value: React.SetStateAction<number>) => {\r\n setActiveIndexState((prev) => {\r\n const next = typeof value === \"function\" ? (value as (current: number) => number)(prev) : value;\r\n activeIndexRef.current = next;\r\n return next;\r\n });\r\n },\r\n []\r\n );\r\n const activeIndex = activeIndexState;\r\n const [selected, setSelected] = useControlledState<string | null>(value, defaultValue ?? null);\r\n\r\n const outsideClickRefs = React.useMemo(\n () => [\n containerRef as unknown as React.RefObject<HTMLElement | null>,\n popoverRef as unknown as React.RefObject<HTMLElement | null>,\n ],\n []\n );\n useOutsideClick(outsideClickRefs, () => setOpen(false));\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 (activeIndexRef.current >= 0) commitSelection(activeIndexRef.current);\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 = \"rui-select__highlightBorder\";\r\n const listboxHighlight = open ? highlightBorder : \"\";\r\n\r\n return (\r\n <div className=\"rui-select rui-root\">\r\n {label ? (\r\n <p className=\"rui-select__label rui-text-wrap\">\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={clsx(\r\n \"rui-select__dropdown\",\r\n error && \"rui-select__dropdown--error\",\r\n className\r\n )}\r\n inputClassName=\"rui-select__input\"\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 && (\n <Popover anchorRef={containerRef} rootRef={popoverRef} className={listboxHighlight}>\n {({ scrollRef }) => {\n popoverListRef.current = scrollRef;\n return (\n <ul\r\n ref={scrollRef}\r\n id={listboxId}\r\n role=\"listbox\"\r\n className=\"rui-select__list\"\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=\"rui-select__option\" 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={clsx(\r\n \"rui-select__option-button\",\r\n isActive && \"rui-select__option-button--active\",\r\n isSelected && \"rui-select__option-button--selected\"\r\n )}\r\n >\r\n <span className=\"rui-select__option-content\">\r\n <span className=\"rui-select__option-label rui-text-wrap\">\r\n {opt.label}\r\n </span>\r\n {opt.description ? (\r\n <span className=\"rui-select__option-description rui-text-wrap\">\r\n {opt.description}\r\n </span>\r\n ) : null}\r\n </span>\r\n {isSelected ? (\r\n <Check className=\"rui-select__option-check\" />\r\n ) : (\r\n <span className=\"rui-select__option-check-placeholder\" />\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=\"rui-select__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p className=\"rui-select__error rui-text-wrap\">{error}</p>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport Button from \"../Button/Button\";\r\nimport clsx from \"clsx\";\r\nimport \"./Dialog.css\";\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 titleId = React.useId();\r\n const descriptionId = React.useId();\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 return;\r\n }\r\n if (event.key === \"Tab\" && modal) {\r\n const dialog = dialogRef.current;\r\n if (!dialog) return;\r\n const focusable = Array.from(\r\n dialog.querySelectorAll<HTMLElement>(\r\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex >= 0);\r\n if (focusable.length === 0) {\r\n event.preventDefault();\r\n dialog.focus();\r\n return;\r\n }\r\n const first = focusable[0];\r\n const last = focusable[focusable.length - 1];\r\n const active = document.activeElement as HTMLElement | null;\r\n if (event.shiftKey) {\r\n if (active === first || active === dialog) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n return;\r\n }\r\n if (active === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handleKey);\r\n return () => window.removeEventListener(\"keydown\", handleKey);\r\n }, [open, onClose, modal]);\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 aria-labelledby={titleId}\r\n aria-describedby={description ? descriptionId : undefined}\r\n tabIndex={-1}\r\n className={clsx(\r\n \"rui-dialog__card\",\r\n modal ? \"\" : \"rui-dialog__card--floating\",\r\n draggable && \"rui-dialog__card--draggable\"\r\n )}\r\n style={{ transform: `translate(${dragOffset.x}px, ${dragOffset.y}px)` }}\r\n onPointerDown={onDragPointerDown}\n >\n <div className=\"rui-dialog__header\">\n <div>\n <h2 id={titleId} className=\"rui-dialog__title\">\n {title}\n </h2>\n {description ? (\r\n <p id={descriptionId} className=\"rui-dialog__description\">\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n <Button\r\n onClick={onClose}\r\n aria-label=\"Close dialog\"\r\n className=\"rui-dialog__close-button\"\r\n >\r\n ×\r\n </Button>\r\n </div>\r\n\r\n <div className=\"rui-dialog__content\">{children}</div>\r\n\r\n {footer ? <div className=\"rui-dialog__footer\">{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=\"rui-overlay-root rui-dialog__overlay\"\r\n onPointerDown={(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=\"rui-overlay-root rui-dialog__dock\">\r\n {dialogCard}\r\n </div>\r\n ),\r\n document.body\r\n );\r\n}\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Disclosure.css\";\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={clsx(\r\n \"rui-disclosure\",\r\n \"rui-root\",\r\n subtle && \"rui-disclosure--subtle\",\r\n className\r\n )}\r\n >\r\n <summary\r\n id={summaryId}\r\n className=\"rui-disclosure__summary\"\r\n >\r\n <span className=\"rui-disclosure__header\">\r\n <span className=\"rui-disclosure__title rui-text-wrap\">\r\n {title}\r\n </span>\r\n </span>\r\n <span\r\n className=\"rui-disclosure__caret\"\r\n aria-hidden=\"true\"\r\n >\r\n ▾\r\n </span>\r\n </summary>\r\n\r\n <div className=\"rui-disclosure__content rui-text-wrap\">\r\n {children}\r\n </div>\r\n </details>\r\n );\r\n});\r\n\r\n\r\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport \"./FilePicker.css\";\n\ntype NativeInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\">;\n\nexport type FilePickerMode = \"path\" | \"content\" | \"both\";\n\nexport type FileSelection = {\n file: File;\n path?: string;\n text?: string;\n bytes?: Uint8Array;\n size?: number;\n};\n\nexport type FilePickerExternalRequest = {\n directory: boolean;\n multiple: boolean;\n mode: FilePickerMode;\n accept?: string;\n maxFiles?: number;\n currentSelections: FileSelection[];\n};\n\nexport type FilePickerProps = NativeInputProps & {\n label?: string;\n description?: string;\n error?: string;\n dropzoneLabel?: string;\n maxFiles?: number;\n directory?: boolean;\n mode?: FilePickerMode;\n resolvePath?: (file: File) => string | undefined | Promise<string | undefined>;\n externalPicker?: (\n request: FilePickerExternalRequest\n ) => Promise<FileSelection[] | null | undefined>;\n onFilesChange?: (files: FileSelection[]) => void;\n};\n\ntype DirectoryPickerWindow = Window & {\n showDirectoryPicker?: () => Promise<DirectoryPickerHandle>;\n};\n\ntype DirectoryPickerHandle = {\n name: string;\n values?: () => AsyncIterable<DirectoryPickerEntryHandle>;\n};\n\ntype DirectoryPickerEntryHandle = {\n kind?: \"file\" | \"directory\";\n getFile?: () => Promise<File>;\n values?: () => AsyncIterable<DirectoryPickerEntryHandle>;\n};\n\nfunction matchesAcceptToken(file: File, token: string) {\n const normalizedToken = token.trim().toLowerCase();\n if (!normalizedToken) return true;\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n if (normalizedToken.startsWith(\".\")) {\n return fileName.endsWith(normalizedToken);\n }\n\n if (normalizedToken.endsWith(\"/*\")) {\n const prefix = normalizedToken.slice(0, -1);\n return fileType.startsWith(prefix);\n }\n\n return fileType === normalizedToken;\n}\n\nfunction filterFilesByAccept(files: File[], accept: string | undefined) {\n if (!accept?.trim()) return files;\n const tokens = accept\n .split(\",\")\n .map((token) => token.trim())\n .filter(Boolean);\n if (!tokens.length) return files;\n\n return files.filter((file) => tokens.some((token) => matchesAcceptToken(file, token)));\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction decodeUtf8IfPossible(bytes: Uint8Array) {\n try {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n return decoder.decode(bytes);\n } catch {\n return undefined;\n }\n}\n\nasync function derivePath(\n file: File,\n resolvePath: FilePickerProps[\"resolvePath\"] | undefined\n) {\n const resolved = await resolvePath?.(file);\n if (resolved) return resolved;\n\n const fileWithPath = file as File & { path?: string; webkitRelativePath?: string };\n if (typeof fileWithPath.path === \"string\" && fileWithPath.path.length > 0) {\n return fileWithPath.path;\n }\n if (\n typeof fileWithPath.webkitRelativePath === \"string\" &&\n fileWithPath.webkitRelativePath.length > 0\n ) {\n return fileWithPath.webkitRelativePath;\n }\n\n return undefined;\n}\n\nasync function readFileBytes(file: File) {\n const fileWithArrayBuffer = file as File & { arrayBuffer?: () => Promise<ArrayBuffer> };\n if (typeof fileWithArrayBuffer.arrayBuffer === \"function\") {\n return new Uint8Array(await fileWithArrayBuffer.arrayBuffer());\n }\n\n if (typeof Blob !== \"undefined\" && typeof Blob.prototype.arrayBuffer === \"function\") {\n return new Uint8Array(await Blob.prototype.arrayBuffer.call(file as Blob));\n }\n\n if (typeof FileReader !== \"undefined\") {\n return await new Promise<Uint8Array | undefined>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n resolve(result instanceof ArrayBuffer ? new Uint8Array(result) : undefined);\n };\n reader.onerror = () => resolve(undefined);\n reader.readAsArrayBuffer(file);\n });\n }\n\n return undefined;\n}\n\nasync function readDirectorySize(handle: DirectoryPickerHandle) {\n if (typeof handle.values !== \"function\") {\n return undefined;\n }\n\n let total = 0;\n for await (const entry of handle.values()) {\n if (entry.kind === \"file\" && typeof entry.getFile === \"function\") {\n const file = await entry.getFile();\n total += file.size;\n continue;\n }\n\n if (entry.kind === \"directory\" && typeof entry.values === \"function\") {\n const nestedSize = await readDirectorySize({\n name: \"\",\n values: entry.values,\n });\n if (typeof nestedSize === \"number\") {\n total += nestedSize;\n }\n }\n }\n\n return total;\n}\n\nexport const FilePicker = React.forwardRef<HTMLInputElement, FilePickerProps>(function FilePicker(\n {\n label,\n description,\n error,\n dropzoneLabel = \"Drop files here or click to browse\",\n maxFiles,\n directory = false,\n mode = \"path\",\n resolvePath,\n externalPicker,\n id,\n className,\n accept,\n disabled,\n multiple,\n onFilesChange,\n onChange,\n ...rest\n },\n forwardedRef\n) {\n const generatedId = React.useId();\n const inputId = id ?? generatedId;\n const descriptionId = React.useId();\n const errorId = React.useId();\n const [isDragActive, setIsDragActive] = React.useState(false);\n const [selectedFiles, setSelectedFiles] = React.useState<FileSelection[]>([]);\n const [restrictedCount, setRestrictedCount] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const selectionRequestIdRef = React.useRef(0);\n const canUseDirectoryHandlePicker =\n typeof window !== \"undefined\" &&\n typeof (window as DirectoryPickerWindow).showDirectoryPicker === \"function\";\n const isFolderPathOnlyMode = directory && mode === \"path\";\n const useDirectoryInputAttributes = directory && (!isFolderPathOnlyMode || !canUseDirectoryHandlePicker);\n\n const setRefs = React.useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n\n const hintIds = [description ? descriptionId : null, error ? errorId : null].filter(Boolean);\n const resolvedAriaDescribedBy = hintIds.length ? hintIds.join(\" \") : undefined;\n const resolvedMultiple = multiple || useDirectoryInputAttributes;\n const resolvedMaxFiles = React.useMemo(() => {\n if (typeof maxFiles !== \"number\" || !Number.isFinite(maxFiles)) return undefined;\n return Math.max(1, Math.floor(maxFiles));\n }, [maxFiles]);\n const directoryAttributes = useDirectoryInputAttributes\n ? ({ directory: \"\", webkitdirectory: \"\" } as Record<string, string>)\n : undefined;\n\n const selectDirectoryPath = React.useCallback(async () => {\n if (!isFolderPathOnlyMode || !canUseDirectoryHandlePicker) {\n return false;\n }\n\n const picker = (window as DirectoryPickerWindow).showDirectoryPicker;\n if (!picker) {\n return false;\n }\n\n try {\n const directoryHandle = await picker();\n const requestId = selectionRequestIdRef.current + 1;\n selectionRequestIdRef.current = requestId;\n const selection: FileSelection = {\n file: new File([], directoryHandle.name, { type: \"application/x-directory\" }),\n path: directoryHandle.name,\n };\n const directorySize = await readDirectorySize(directoryHandle);\n if (typeof directorySize === \"number\") {\n selection.size = directorySize;\n }\n const selectionLimit = multiple ? (resolvedMaxFiles ?? Infinity) : 1;\n const mergedSelections = multiple ? [...selectedFiles, selection] : [selection];\n const nextSelections = mergedSelections.slice(0, selectionLimit);\n const nextRestrictedCount = mergedSelections.length - nextSelections.length;\n\n setSelectedFiles(nextSelections);\n setRestrictedCount(nextRestrictedCount);\n onFilesChange?.(nextSelections);\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n\n return true;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return true;\n }\n return false;\n }\n }, [\n canUseDirectoryHandlePicker,\n isFolderPathOnlyMode,\n multiple,\n onFilesChange,\n resolvedMaxFiles,\n selectedFiles,\n ]);\n\n const applyExternalSelections = React.useCallback(\n (incomingSelections: FileSelection[]) => {\n const selectionLimit = resolvedMultiple ? (resolvedMaxFiles ?? Infinity) : 1;\n const nextSelections = incomingSelections.slice(0, selectionLimit);\n const nextRestrictedCount = incomingSelections.length - nextSelections.length;\n\n setSelectedFiles(nextSelections);\n setRestrictedCount(nextRestrictedCount);\n onFilesChange?.(nextSelections);\n },\n [onFilesChange, resolvedMaxFiles, resolvedMultiple]\n );\n\n const applySelectedFiles = React.useCallback(\n async (files: File[]) => {\n const acceptedFiles = filterFilesByAccept(files, accept);\n const selectionLimit = resolvedMultiple ? (resolvedMaxFiles ?? Infinity) : 1;\n const nextFiles = acceptedFiles.slice(0, selectionLimit);\n const nextRestrictedCount = files.length - nextFiles.length;\n const requestId = selectionRequestIdRef.current + 1;\n selectionRequestIdRef.current = requestId;\n\n const nextSelections = await Promise.all(\n nextFiles.map(async (file) => {\n const selection: FileSelection = { file };\n selection.path = await derivePath(file, resolvePath);\n\n if (mode === \"content\" || mode === \"both\") {\n const bytes = await readFileBytes(file);\n if (bytes) {\n selection.bytes = bytes;\n selection.text = decodeUtf8IfPossible(bytes);\n }\n }\n\n return selection;\n })\n );\n\n if (selectionRequestIdRef.current !== requestId) {\n return [];\n }\n\n setSelectedFiles(nextSelections);\n setRestrictedCount(nextRestrictedCount);\n onFilesChange?.(nextSelections);\n\n return nextSelections;\n },\n [accept, mode, onFilesChange, resolvePath, resolvedMaxFiles, resolvedMultiple]\n );\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const incomingFiles = Array.from(event.target.files ?? []);\n void applySelectedFiles(incomingFiles);\n onChange?.(event);\n };\n\n const openFileDialog = async () => {\n if (disabled) return;\n\n if (externalPicker) {\n try {\n const nextSelections = await externalPicker({\n directory,\n multiple: resolvedMultiple,\n mode,\n accept,\n maxFiles: resolvedMaxFiles,\n currentSelections: selectedFiles,\n });\n if (Array.isArray(nextSelections)) {\n applyExternalSelections(nextSelections);\n }\n } catch {\n // Ignore external picker failures to keep component non-throwing.\n }\n return;\n }\n\n const handledByDirectoryPicker = await selectDirectoryPath();\n if (handledByDirectoryPicker) {\n return;\n }\n\n if (inputRef.current) {\n inputRef.current.value = \"\";\n inputRef.current.click();\n }\n };\n\n const handleDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n if (disabled) return;\n\n if (isFolderPathOnlyMode && canUseDirectoryHandlePicker) {\n return;\n }\n\n setIsDragActive(false);\n const files = Array.from(event.dataTransfer.files ?? []);\n void applySelectedFiles(files);\n };\n\n const hasSelection = selectedFiles.length > 0;\n const allowSelectionRemoval = Boolean(multiple);\n const removeSelection = React.useCallback(\n (indexToRemove: number) => {\n const nextSelections = selectedFiles.filter((_, index) => index !== indexToRemove);\n setSelectedFiles(nextSelections);\n setRestrictedCount(0);\n onFilesChange?.(nextSelections);\n },\n [onFilesChange, selectedFiles]\n );\n\n return (\n <div className=\"rui-file-picker rui-root\">\n {label ? (\n <label htmlFor={inputId} className=\"rui-file-picker__label rui-text-wrap\">\n {label}\n </label>\n ) : null}\n\n <div\n className={clsx(\n \"rui-file-picker__dropzone\",\n isDragActive && \"rui-file-picker__dropzone--active\",\n disabled && \"rui-file-picker__dropzone--disabled\",\n error && \"rui-file-picker__dropzone--error\"\n )}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={label ? `${label} file picker` : \"File picker\"}\n aria-disabled={disabled ? true : undefined}\n onClick={() => {\n void openFileDialog();\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n void openFileDialog();\n }\n }}\n onDragEnter={(event) => {\n event.preventDefault();\n if (!disabled) setIsDragActive(true);\n }}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setIsDragActive(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setIsDragActive(false);\n }}\n onDrop={handleDrop}\n >\n <input\n {...rest}\n {...directoryAttributes}\n id={inputId}\n ref={setRefs}\n type=\"file\"\n className={clsx(\"rui-file-picker__input\", className)}\n accept={accept}\n disabled={disabled}\n multiple={resolvedMultiple}\n onClick={(event) => {\n event.stopPropagation();\n if (isFolderPathOnlyMode && canUseDirectoryHandlePicker) {\n event.preventDefault();\n void openFileDialog();\n }\n }}\n onChange={handleInputChange}\n aria-invalid={error ? true : undefined}\n aria-describedby={resolvedAriaDescribedBy}\n />\n <p className=\"rui-file-picker__prompt rui-text-wrap\">{dropzoneLabel}</p>\n <p className=\"rui-file-picker__hint rui-text-wrap\">\n {accept?.trim()\n ? `Accepted: ${accept}`\n : \"Accepted: all file types\"}\n </p>\n {resolvedMaxFiles ? (\n <p className=\"rui-file-picker__hint rui-text-wrap\">\n Maximum files: {resolvedMaxFiles}\n </p>\n ) : null}\n {hasSelection ? (\n <ul className=\"rui-file-picker__list\" aria-label=\"Selected files\">\n {selectedFiles.map((selection, index) => (\n <li\n key={`${selection.file.name}-${selection.file.size}-${selection.file.lastModified}`}\n className=\"rui-file-picker__item\"\n >\n <span className=\"rui-file-picker__file-name rui-text-wrap\">\n <span title={selection.path ?? selection.file.name}>\n {selection.path ?? selection.file.name}\n </span>\n </span>\n <div className=\"rui-file-picker__item-actions\">\n <span className=\"rui-file-picker__file-meta\">\n {formatBytes(selection.size ?? selection.file.size)}\n </span>\n {allowSelectionRemoval ? (\n <button\n type=\"button\"\n className=\"rui-file-picker__remove\"\n aria-label={`Remove ${selection.path ?? selection.file.name}`}\n onClick={(event) => {\n event.stopPropagation();\n removeSelection(index);\n }}\n >\n x\n </button>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n\n {description ? (\n <p id={descriptionId} className=\"rui-file-picker__description rui-text-wrap\">\n {description}\n </p>\n ) : null}\n {restrictedCount > 0 ? (\n <p className=\"rui-file-picker__warning rui-text-wrap\">\n {restrictedCount} file{restrictedCount === 1 ? \"\" : \"s\"}{\" \"}\n {restrictedCount === 1 ? \"was\" : \"were\"} ignored due to selection restrictions.\n </p>\n ) : null}\n {error ? (\n <p id={errorId} className=\"rui-file-picker__error rui-text-wrap\">\n {error}\n </p>\n ) : null}\n </div>\n );\n});\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./InputField.css\";\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 = clsx(\r\n disabled && \"rui-input-field__shell--disabled\",\r\n error && \"rui-input-field__shell--error\"\r\n );\r\n\r\n const inputClasses = clsx(\r\n \"rui-input-field__input\",\r\n className\r\n );\r\n\r\n const leadingElm = leadingIcon ? (\r\n <span className=\"rui-input-field__leading\" aria-hidden=\"true\">\r\n {leadingIcon}\r\n </span>\r\n ) : null;\r\n\r\n const trailingElm = trailingLabel ? (\r\n <span className=\"rui-input-field__trailing rui-text-wrap\">\r\n {trailingLabel}\r\n </span>\r\n ) : null;\r\n\r\n return (\r\n <div className=\"rui-input-field rui-root\">\r\n {label ? (\r\n <label\r\n htmlFor={inputId}\r\n className=\"rui-input-field__label rui-text-wrap\"\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n\r\n <div className={clsx(\"rui-input-field__shell\", 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=\"rui-input-field__description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p id={errorId} className=\"rui-input-field__error rui-text-wrap\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport Button from \"../Button/Button\";\r\nimport \"./NumberInput.css\";\r\nexport type NumberInputProps = {\r\n label?: string;\r\n description?: string;\r\n error?: string;\r\n className?: string;\r\n style?: React.CSSProperties;\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 scale?: 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 style,\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 scale = 1,\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 const resolvedText = `${resolved}`;\r\n const valueChars = Math.max(resolvedText.length, 1);\r\n\r\n const rootStyle = React.useMemo(\r\n () =>\r\n ({\r\n \"--rui-number-input-scale\": scale,\r\n \"--rui-number-input-value-ch\": valueChars,\r\n ...style,\r\n }) as React.CSSProperties,\r\n [scale, style, valueChars]\r\n );\r\n\r\n return (\r\n <div className=\"rui-number-input rui-root\" style={rootStyle}>\r\n {label ? (\r\n <p className=\"rui-number-input__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n ) : null}\r\n <div\r\n className={clsx(\r\n \"rui-number-input__shell\",\r\n disabled && \"rui-number-input__shell--disabled\",\r\n error && \"rui-number-input__shell--error\"\r\n )}\r\n >\r\n <div className=\"rui-number-input__stepper\">\r\n <Button\r\n type=\"button\"\r\n aria-label=\"Increase\"\r\n onClick={() => update(resolved + step)}\r\n className=\"rui-number-input__step-button\"\r\n disabled={disabled}\r\n >\r\n <svg\r\n viewBox=\"0 0 20 20\"\r\n fill=\"currentColor\"\r\n aria-hidden=\"true\"\r\n width=\"1.1em\"\r\n height=\"1.1em\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M5.23 12.79a.75.75 0 0 0 1.06-.02L10 8.828l3.71 3.94a.75.75 0 1 0 1.08-1.04l-4.24-4.5a.75.75 0 0 0-1.08 0l-4.24 4.5a.75.75 0 0 0 .02 1.06z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </svg>\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n aria-label=\"Decrease\"\r\n onClick={() => update(resolved - step)}\r\n className=\"rui-number-input__step-button\"\r\n disabled={disabled}\r\n >\r\n <svg\r\n viewBox=\"0 0 20 20\"\r\n fill=\"currentColor\"\r\n aria-hidden=\"true\"\r\n width=\"1.1em\"\r\n height=\"1.1em\"\r\n >\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 </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={clsx(\r\n \"rui-number-input__input\",\r\n className\r\n )}\r\n />\r\n {suffix ? (\r\n <span className=\"rui-number-input__suffix rui-text-wrap\">\r\n {suffix}\r\n </span>\r\n ) : null}\r\n </div>\r\n {description ? (\r\n <p className=\"rui-number-input__helper rui-number-input__helper--description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n {error ? (\r\n <p className=\"rui-number-input__helper rui-number-input__helper--error rui-text-wrap\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./OutputChip.css\";\r\nexport type OutputChipProps = React.OutputHTMLAttributes<HTMLOutputElement> & {\r\n tone?: \"neutral\" | \"success\" | \"warning\" | \"danger\";\r\n label?: string;\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 return (\r\n <output\r\n {...rest}\r\n ref={ref}\r\n data-tone={tone}\r\n className={clsx(\"rui-root\", \"rui-output-chip\", className)}\r\n >\r\n {label ? <span className=\"rui-output-chip__label rui-text-wrap\">{label}</span> : null}\r\n <span className=\"rui-output-chip__value rui-text-wrap\">{children}</span>\r\n </output>\r\n );\r\n});\r\n\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./ProgressMeter.css\";\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={clsx(\"rui-progress-meter rui-root\", className)}>\r\n {label ? (\r\n <div className=\"rui-progress-meter__header\">\r\n <p className=\"rui-progress-meter__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n {showValue ? (\r\n <span className=\"rui-progress-meter__value\">\r\n {percent}%\r\n </span>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n {description ? (\r\n <p className=\"rui-progress-meter__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n <div className=\"rui-progress-meter__track\">\r\n <progress\r\n value={clamped}\r\n max={max}\r\n className=\"rui-progress-meter__native\"\r\n aria-label={label}\r\n />\r\n <div\r\n className=\"rui-progress-meter__fill rui-progress-meter__fill--gradient\"\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={clsx(\"rui-progress-meter rui-root\", className)}>\r\n {label ? (\r\n <div className=\"rui-progress-meter__header\">\r\n <p className=\"rui-progress-meter__label rui-text-wrap\">\r\n {label}\r\n </p>\r\n <span className=\"rui-progress-meter__value\">{clamped}</span>\r\n </div>\r\n ) : null}\r\n {description ? (\r\n <p className=\"rui-progress-meter__description rui-text-wrap\">{description}</p>\r\n ) : null}\r\n <div className=\"rui-progress-meter__track\">\r\n <meter\r\n value={clamped}\r\n min={min}\r\n max={max}\r\n className=\"rui-progress-meter__native\"\r\n aria-label={label}\r\n />\r\n <div\r\n className=\"rui-progress-meter__fill\"\r\n style={{ width: `${percent}%`, background: activeColor }}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Radio.css\";\r\n\r\nexport type RadioColor = \"blue\" | \"green\" | \"red\";\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 color?: RadioColor;\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 color,\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={clsx(\r\n \"rui-radio rui-root\",\r\n color && `rui-radio--color-${color}`,\r\n disabled && \"rui-radio--disabled\",\r\n className\r\n )}\r\n >\r\n <span className=\"rui-radio__content\">\r\n <span className=\"rui-radio__indicator\">\r\n <input\r\n {...rest}\r\n ref={forwardedRef}\r\n id={radioId}\r\n type=\"radio\"\r\n className=\"rui-radio__input\"\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=\"rui-radio__control\"\r\n aria-hidden=\"true\"\r\n >\r\n </span>\r\n </span>\r\n\r\n <span className=\"rui-radio__meta\">\r\n <span className=\"rui-radio__label rui-text-wrap\">{label}</span>\r\n {description ? (\r\n <span id={descriptionId} className=\"rui-radio__description rui-text-wrap\">\r\n {description}\r\n </span>\r\n ) : null}\r\n </span>\r\n </span>\r\n\r\n {extra ? (\r\n <span className=\"rui-radio__extra rui-text-wrap\">\r\n {extra}\r\n </span>\r\n ) : null}\r\n </label>\r\n );\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport { assignRef } from \"../../utils/ref\";\r\nimport clsx from \"clsx\";\r\nimport \"./Slider.css\";\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(renderThumb ? 0 : 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 applyInputValue = (value: string) => {\r\n const next = Number(value);\r\n if (Number.isNaN(next)) return;\r\n commitValue(next);\r\n };\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n applyInputValue(event.currentTarget.value);\r\n };\r\n const handleInputEvent = (event: React.FormEvent<HTMLInputElement>) => {\r\n applyInputValue(event.currentTarget.value);\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={clsx(\r\n \"rui-slider__track\",\r\n isVertical && \"rui-slider__track--vertical\",\r\n disabled && \"rui-slider__track--disabled\",\r\n trackClassName\r\n )}\r\n style={{ backgroundImage: trackGradient }}\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n className={clsx(\r\n \"rui-slider__track-fill\",\r\n dragging && \"rui-slider__track-fill--dragging\",\r\n isVertical ? \"rui-slider__track-fill--vertical\" : \"rui-slider__track-fill--horizontal\"\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=\"rui-slider__track-overlay\" />\r\n </div>\r\n );\r\n\r\n const defaultThumb = (\r\n <span\r\n className={clsx(\r\n \"rui-slider__thumb\",\r\n focused && \"rui-slider__thumb--focused\",\r\n disabled && \"rui-slider__thumb--disabled\",\r\n thumbClassName\r\n )}\r\n style={{ ...thumbStyle, width: thumbDiameter, height: thumbDiameter }}\r\n aria-hidden=\"true\"\r\n >\r\n <span className=\"rui-slider__thumb-core\">\r\n <span className=\"rui-slider__thumb-gradient\" />\r\n <span className=\"rui-slider__thumb-overlay\" />\r\n </span>\r\n </span>\r\n );\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n \"rui-root rui-slider\",\r\n isVertical && \"rui-slider--vertical\",\r\n className\r\n )}\r\n >\r\n {label ? (\r\n <div className=\"rui-slider__header\">\r\n <label\r\n htmlFor={inputId}\r\n className=\"rui-slider__label rui-text-wrap\"\r\n >\r\n {label}\r\n </label>\r\n <span className=\"rui-slider__value\">\r\n {formattedValue}\r\n </span>\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n ref={trackContainerRef}\r\n className={clsx(\r\n \"rui-slider__track-container\",\r\n isVertical && \"rui-slider__track-container--vertical\"\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={handleInputEvent}\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=\"rui-slider__input\"\r\n />\r\n <div\r\n ref={interactionRef}\r\n aria-hidden=\"true\"\r\n onPointerDown={handlePointerDown}\r\n className={clsx(\r\n \"rui-slider__interaction\",\r\n isVertical ? \"rui-slider__interaction--vertical\" : \"rui-slider__interaction--horizontal\"\r\n )}\r\n />\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./StackedList.css\";\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={clsx(\r\n \"rui-stacked-list rui-root rui-surface\",\r\n className\r\n )}\r\n >\r\n <ul role=\"list\" className=\"rui-stacked-list__list\">\r\n {items.map((item) => (\r\n <li\r\n key={item.id}\r\n className={clsx(\"rui-stacked-list__item\", dense && \"rui-stacked-list__item--dense\")}\r\n >\r\n {item.icon ? (\r\n <div\r\n className=\"rui-stacked-list__icon\"\r\n aria-hidden=\"true\"\r\n >\r\n {item.icon}\r\n </div>\r\n ) : null}\r\n <div className=\"rui-stacked-list__content\">\r\n <p className=\"rui-stacked-list__title rui-text-wrap\">\r\n {item.title}\r\n </p>\r\n {item.description ? (\r\n <p className=\"rui-stacked-list__description rui-text-wrap\">\r\n {item.description}\r\n </p>\r\n ) : null}\r\n </div>\r\n <div className=\"rui-stacked-list__meta\">\r\n {item.meta ? (\r\n <span className=\"rui-stacked-list__meta-text rui-text-wrap\">\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\r\n\r\n","import React from \"react\";\r\nimport \"./TabGroup.css\";\r\n\r\nexport const TabGroupAlign = [\"start\", \"center\", \"end\"] as const;\r\nexport const TabGroupPosition = [\"top\", \"right\", \"bottom\", \"left\"] as const;\r\nexport const TabGroupFill = [\"full\", \"partial\"] as const;\r\nexport const TabGroupRotation = [\"horizontal\", \"vertical\"] as const;\r\n\r\nexport type TabGroupAlign = (typeof TabGroupAlign)[number];\r\nexport type TabGroupPosition = (typeof TabGroupPosition)[number];\r\nexport type TabGroupFill = (typeof TabGroupFill)[number];\r\nexport type TabGroupRotation = (typeof TabGroupRotation)[number];\r\n\r\nexport type TabGroupTab = {\r\n label: React.ReactNode;\r\n content: React.ReactNode;\r\n disabled?: boolean;\r\n}\r\n\r\nexport type TabGroupProps = {\r\n align?: TabGroupAlign;\r\n position?: TabGroupPosition;\r\n fill?: TabGroupFill;\r\n rotation?: TabGroupRotation;\r\n size?: number;\r\n tabs: TabGroupTab[];\r\n\r\n active?: number;\r\n defaultActive?: number;\r\n onActiveChange?: (index: number) => void;\r\n};\r\n\r\nexport default function TabGroup({\n align = \"start\",\r\n position = \"top\",\r\n fill = \"full\",\r\n rotation = \"horizontal\",\r\n size = 50,\r\n tabs,\r\n active,\r\n defaultActive = 0,\r\n onActiveChange,\r\n}: TabGroupProps) {\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const tabStripRef = React.useRef<HTMLDivElement | null>(null);\n const measureRef = React.useRef<HTMLDivElement | null>(null);\n const idBase = React.useId();\n const [effectiveFill, setEffectiveFill] = React.useState<TabGroupFill>(fill);\n const [availableMain, setAvailableMain] = React.useState(0);\n const [cssMinMain, setCssMinMain] = React.useState(32);\n const [contentMinMain, setContentMinMain] = React.useState(0);\n const count = tabs.length;\n const isVertical = position === \"left\" || position === \"right\";\n const minMain = Math.max(cssMinMain, contentMinMain);\n const partialMainSize = Math.max(Number.isFinite(size) ? size : 0, minMain);\n const clampIndex = React.useCallback(\r\n (i: number) => {\r\n if (count <= 0) {\r\n return 0;\r\n }\r\n if (!Number.isFinite(i)) {\r\n return 0;\r\n }\r\n return Math.max(0, Math.min(count - 1, Math.trunc(i)));\r\n },\r\n [count]\r\n );\r\n const isControlled = active !== undefined;\r\n const [activeInternal, setActiveInternal] = React.useState<number>(() => clampIndex(defaultActive));\r\n React.useEffect(() => {\r\n if(!isControlled) {\r\n setActiveInternal((i) => clampIndex(i));\r\n }\r\n }, [clampIndex, isControlled]);\r\n const currentActive = clampIndex(isControlled ? active! : activeInternal);\r\n const setActive = React.useCallback(\r\n (next: number) => {\r\n const i = clampIndex(next);\r\n if(!isControlled) {\r\n setActiveInternal(i);\r\n }\r\n onActiveChange?.(i);\r\n },\r\n [clampIndex, isControlled, onActiveChange]\r\n );\r\n\r\n const tabsFirst = position === \"top\" || position === \"left\";\r\n const updateEffectiveFill = React.useCallback(() => {\n const root = rootRef.current;\r\n if (!root) {\r\n setEffectiveFill(fill);\r\n return;\r\n }\r\n\r\n const rect = root.getBoundingClientRect();\r\n const computed = getComputedStyle(root);\r\n const radius = parseFloat(computed.getPropertyValue(\"--rui-tab-panel-radius\")) || 0;\n const border = parseFloat(computed.getPropertyValue(\"--rui-tab-border\")) || 0;\n const minMainValue = parseFloat(computed.getPropertyValue(\"--rui-tab-min-main\")) || 32;\n const effectiveMinMain = Math.max(minMainValue, contentMinMain);\n const wiggle = border * 2 + 1;\n const available = position === \"top\" || position === \"bottom\" ? rect.width : rect.height;\n const requiredPerTab = Math.max(size ?? 0, effectiveMinMain);\n const required = requiredPerTab * tabs.length;\n const slots = effectiveMinMain > 0 ? Math.floor(available / effectiveMinMain) : tabs.length;\n const hasOverflowControls = slots < tabs.length;\n const shouldFill = (available - (2 * radius) - wiggle) <= required;\n setEffectiveFill(shouldFill || hasOverflowControls ? \"full\" : \"partial\");\n }, [contentMinMain, fill, position, size, tabs.length]);\n\r\n React.useLayoutEffect(() => {\r\n if (fill === \"full\") {\r\n setEffectiveFill(\"full\");\r\n return;\r\n }\r\n\r\n updateEffectiveFill();\r\n const node = rootRef.current;\r\n if (!node || typeof ResizeObserver === \"undefined\") {\r\n return;\r\n }\r\n const observer = new ResizeObserver(() => updateEffectiveFill());\r\n observer.observe(node);\r\n return () => observer.disconnect();\r\n }, [fill, updateEffectiveFill]);\r\n\r\n React.useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const computed = getComputedStyle(root);\n const cssMin = parseFloat(computed.getPropertyValue(\"--rui-tab-min-main\"));\n setCssMinMain(Number.isFinite(cssMin) && cssMin > 0 ? cssMin : 32);\n }, [position]);\n\n React.useLayoutEffect(() => {\n const node = measureRef.current;\n if (!node) return;\n\n const measure = () => {\n const sampleTab = node.querySelector<HTMLElement>(\".rui-tab-group__tab\");\n const labels = Array.from(node.querySelectorAll<HTMLElement>(\".rui-tab-group__label\"));\n if (!sampleTab || labels.length === 0) {\n setContentMinMain(0);\n return;\n }\n\n const tabStyle = getComputedStyle(sampleTab);\n const paddingMain = isVertical\n ? (parseFloat(tabStyle.paddingTop) || 0) + (parseFloat(tabStyle.paddingBottom) || 0)\n : (parseFloat(tabStyle.paddingLeft) || 0) + (parseFloat(tabStyle.paddingRight) || 0);\n const borderMain = isVertical\n ? (parseFloat(tabStyle.borderTopWidth) || 0) + (parseFloat(tabStyle.borderBottomWidth) || 0)\n : (parseFloat(tabStyle.borderLeftWidth) || 0) + (parseFloat(tabStyle.borderRightWidth) || 0);\n\n let largestLabelMain = 0;\n for (const label of labels) {\n const rect = label.getBoundingClientRect();\n const labelMain = isVertical ? rect.height : rect.width;\n if (labelMain > largestLabelMain) {\n largestLabelMain = labelMain;\n }\n }\n\n const next = Math.ceil(largestLabelMain + paddingMain + borderMain);\n setContentMinMain((prev) => (prev === next ? prev : next));\n };\n\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(() => measure());\n observer.observe(node);\n return () => observer.disconnect();\n }, [isVertical, position, rotation, tabs]);\n\r\n React.useLayoutEffect(() => {\r\n const node = tabStripRef.current;\r\n if (!node) return;\r\n\r\n const measure = () => {\r\n const rect = node.getBoundingClientRect();\r\n setAvailableMain(isVertical ? rect.height : rect.width);\r\n };\r\n\r\n measure();\r\n if (typeof ResizeObserver === \"undefined\") return;\r\n const observer = new ResizeObserver(() => measure());\r\n observer.observe(node);\r\n return () => observer.disconnect();\r\n }, [isVertical]);\r\n\r\n const slots = availableMain > 0 && minMain > 0 ? Math.floor(availableMain / minMain) : count;\n const overflow = slots < count;\n const layoutSlots = overflow ? Math.max(3, slots) : Math.max(1, slots);\n const windowSize = overflow ? Math.max(1, layoutSlots - 2) : count;\n const maxStart = Math.max(0, count - windowSize);\r\n const [startIndex, setStartIndex] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n if (!overflow) {\r\n setStartIndex(0);\r\n return;\r\n }\r\n setStartIndex((prev) => Math.min(Math.max(0, prev), maxStart));\r\n }, [overflow, maxStart]);\r\n\r\n React.useEffect(() => {\r\n if (!overflow) return;\r\n setStartIndex((prev) => {\r\n if (currentActive < prev) return currentActive;\r\n const end = prev + windowSize;\r\n if (currentActive >= end) return currentActive - windowSize + 1;\r\n return prev;\r\n });\r\n }, [currentActive, overflow, windowSize]);\r\n\r\n const visibleTabs = overflow ? tabs.slice(startIndex, startIndex + windowSize) : tabs;\r\n const slotSize = overflow && layoutSlots > 0 ? availableMain / layoutSlots : 0;\n const overflowMainStyle =\r\n overflow && slotSize > 0 ? (isVertical ? { height: slotSize } : { width: slotSize }) : undefined;\r\n const mainStyle =\r\n overflow\r\n ? overflowMainStyle\r\n : effectiveFill === \"partial\"\r\n ? (isVertical ? { height: partialMainSize } : { width: partialMainSize })\n : undefined;\n\r\n const scrollLabels = isVertical\r\n ? { back: \"Scroll tabs up\", forward: \"Scroll tabs down\" }\r\n : { back: \"Scroll tabs left\", forward: \"Scroll tabs right\" };\r\n const scrollMainStyle = overflowMainStyle;\r\n\r\n const panelId = `${idBase}-panel`;\r\n const getTabId = React.useCallback(\r\n (index: number) => `${idBase}-tab-${index}`,\r\n [idBase]\r\n );\r\n\r\n const focusTabAt = React.useCallback((index: number) => {\r\n const node = rootRef.current?.querySelector<HTMLElement>(`[data-tab-index=\"${index}\"]`);\r\n node?.focus();\r\n }, []);\r\n\r\n const moveActiveBy = React.useCallback(\r\n (direction: 1 | -1) => {\r\n if (count === 0) return;\r\n for (let i = 0; i < count; i += 1) {\r\n const next = (currentActive + direction * (i + 1) + count) % count;\r\n if (!tabs[next]?.disabled) {\r\n setActive(next);\r\n requestAnimationFrame(() => focusTabAt(next));\r\n return;\r\n }\r\n }\r\n },\r\n [count, currentActive, focusTabAt, setActive, tabs]\r\n );\r\n\r\n const moveToEdge = React.useCallback(\r\n (edge: \"start\" | \"end\") => {\r\n if (count === 0) return;\r\n const range = edge === \"start\" ? [0, count, 1] : [count - 1, -1, -1];\r\n for (let i = range[0]; i !== range[1]; i += range[2]) {\r\n if (!tabs[i]?.disabled) {\r\n setActive(i);\r\n requestAnimationFrame(() => focusTabAt(i));\r\n return;\r\n }\r\n }\r\n },\r\n [count, focusTabAt, setActive, tabs]\r\n );\r\n\r\n const handleTabListKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n const key = event.key;\r\n const prevKey = isVertical ? \"ArrowUp\" : \"ArrowLeft\";\r\n const nextKey = isVertical ? \"ArrowDown\" : \"ArrowRight\";\r\n if (key === prevKey) {\r\n event.preventDefault();\r\n moveActiveBy(-1);\r\n return;\r\n }\r\n if (key === nextKey) {\r\n event.preventDefault();\r\n moveActiveBy(1);\r\n return;\r\n }\r\n if (key === \"Home\") {\r\n event.preventDefault();\r\n moveToEdge(\"start\");\r\n } else if (key === \"End\") {\r\n event.preventDefault();\r\n moveToEdge(\"end\");\r\n }\r\n },\r\n [isVertical, moveActiveBy, moveToEdge]\r\n );\r\n\r\n const tabList = (\r\n <div className=\"rui-tab-group__tabstrip\" ref={tabStripRef}>\r\n {overflow && (\r\n <button\r\n type=\"button\"\r\n className=\"rui-tab-group__scroll is-back\"\r\n aria-label={scrollLabels.back}\r\n disabled={startIndex === 0}\r\n onClick={() => setStartIndex((i) => Math.max(0, i - 1))}\r\n style={scrollMainStyle}\r\n >\r\n <span aria-hidden=\"true\" className=\"rui-tab-group__scrollIcon\">\r\n {isVertical ? \"\\u25B2\" : \"\\u25C0\"}\r\n </span>\r\n </button>\r\n )}\r\n <div\r\n className=\"rui-tab-group__tablist\"\r\n role=\"tablist\"\r\n aria-orientation={isVertical ? \"vertical\" : \"horizontal\"}\r\n onKeyDown={handleTabListKeyDown}\r\n >\r\n {visibleTabs.map((tab, localIndex) => {\r\n const index = overflow ? startIndex + localIndex : localIndex;\r\n return (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n role=\"tab\"\r\n className={`rui-tab-group__tab ${index === currentActive ? \"is-active\" : \"\"}`}\r\n style={mainStyle}\r\n disabled={tab.disabled}\r\n aria-selected={index === currentActive}\r\n aria-controls={panelId}\r\n id={getTabId(index)}\r\n data-tab-index={index}\r\n tabIndex={index === currentActive ? 0 : -1}\r\n onClick={() => !tab.disabled && setActive(index)}\r\n >\r\n <span className=\"rui-tab-group__label\">{tab.label}</span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n {overflow && (\r\n <button\r\n type=\"button\"\r\n className=\"rui-tab-group__scroll is-forward\"\r\n aria-label={scrollLabels.forward}\r\n disabled={startIndex === maxStart}\r\n onClick={() => setStartIndex((i) => Math.min(maxStart, i + 1))}\r\n style={scrollMainStyle}\r\n >\r\n <span aria-hidden=\"true\" className=\"rui-tab-group__scrollIcon\">\r\n {isVertical ? \"\\u25BC\" : \"\\u25B6\"}\r\n </span>\r\n </button>\r\n )}\r\n </div>\r\n );\r\n\r\n const panel = (\r\n <div\r\n className=\"rui-tab-group__panel\"\r\n role=\"tabpanel\"\r\n id={panelId}\r\n aria-labelledby={getTabId(currentActive)}\r\n tabIndex={0}\r\n >\r\n {tabs[currentActive]?.content ?? null}\r\n </div>\r\n );\r\n\r\n return (\n <div\n ref={rootRef}\n className=\"rui-tab-group\"\r\n data-align={align}\r\n data-position={position}\r\n data-fill={effectiveFill}\r\n data-requested-fill={fill}\r\n data-rotation={rotation}\n data-overflow={overflow ? \"true\" : \"false\"}\n >\n <div ref={measureRef} className=\"rui-tab-group__measure\" aria-hidden=\"true\">\n {tabs.map((tab, index) => (\n <button key={index} type=\"button\" className=\"rui-tab-group__tab\">\n <span className=\"rui-tab-group__label\">{tab.label}</span>\n </button>\n ))}\n </div>\n {tabsFirst ? (\n <>\n {tabList}\n {panel}\r\n </>\r\n ) : (\r\n <>\r\n {panel}\r\n {tabList}\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Table.css\";\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 | null>,\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 | null>,\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={clsx(\r\n \"rui-table\",\r\n className\r\n )}\r\n style={style}\r\n >\r\n <div\r\n className=\"rui-table__container\"\r\n style={{ paddingRight: padRight, paddingBottom: padBottom }}\r\n >\r\n <div\r\n ref={scrollRef}\r\n className=\"rui-table__scroll\"\r\n style={{ ...scrollAreaStyle }}\r\n >\r\n <table className=\"rui-table__table\">\r\n {caption ? (\r\n <caption className=\"rui-table__caption rui-text-wrap\">\r\n {caption}\r\n </caption>\r\n ) : null}\r\n <thead className=\"rui-table__head\">\r\n <tr>\r\n {columns.map((col) => (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n className={clsx(\r\n \"rui-table__header-cell\",\r\n col.align === \"right\" && \"rui-table__header-cell--align-right\",\r\n col.align === \"center\" && \"rui-table__header-cell--align-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={clsx(\r\n \"rui-table__row\",\r\n rowIndex % 2 === 0 && \"rui-table__row--alt\"\r\n )}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n className={clsx(\r\n \"rui-table__cell\",\r\n col.align === \"right\" && \"rui-table__cell--align-right\",\r\n col.align === \"center\" && \"rui-table__cell--align-center\"\r\n )}\r\n >\r\n {col.render ? col.render(row[col.key], row) : (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=\"rui-table__track rui-table__track--vertical\"\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=\"rui-table__track-inner\">\r\n <div\r\n className={clsx(\r\n \"rui-table__thumb rui-table__thumb--vertical\"\r\n )}\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=\"rui-table__track rui-table__track--horizontal\"\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=\"rui-table__track-inner\">\r\n <div\r\n className={clsx(\r\n \"rui-table__thumb rui-table__thumb--horizontal\"\r\n )}\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\r\n\r\n\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Textarea.css\";\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: PointerEvent) => void;\r\n up?: (event: PointerEvent) => 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() ?? \"\");\n const [manualHeight, setManualHeight] = React.useState<number | undefined>(undefined);\n const [isManualHeightActive, setIsManualHeightActive] = React.useState(false);\n const [manualWidth, setManualWidth] = React.useState<number | undefined>(undefined);\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(() => {\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 }, [manualHeight]);\n\r\n React.useEffect(() => {\n return () => {\n if (resizeListenersRef.current.move) {\r\n window.removeEventListener(\"pointermove\", resizeListenersRef.current.move);\r\n }\r\n if (resizeListenersRef.current.up) {\r\n window.removeEventListener(\"pointerup\", resizeListenersRef.current.up);\r\n window.removeEventListener(\"pointercancel\", resizeListenersRef.current.up);\r\n }\r\n };\r\n }, []);\n\n React.useEffect(() => {\n const allowY = resizeDirection === \"vertical\" || resizeDirection === \"both\";\n if (!allowY) {\n setIsManualHeightActive(false);\n setManualHeight(undefined);\n }\n }, [resizeDirection]);\n\r\n const handleResizeStart = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (event.pointerType === \"mouse\" && event.button !== 0) return;\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: PointerEvent) => {\n if (allowY) {\n const deltaY = moveEvent.clientY - startY;\n const nextHeight = Math.max(minHeight, startHeight + deltaY);\n setManualHeight(nextHeight);\n if (Math.abs(deltaY) >= 1) {\n setIsManualHeightActive(true);\n }\n }\n if (allowX) {\n const proposed = startWidth + (moveEvent.clientX - startX);\n const nextWidth = Math.min(parentWidth, Math.max(minWidth, proposed));\n setManualWidth(nextWidth);\n }\n };\r\n\r\n const onUp = () => {\r\n window.removeEventListener(\"pointermove\", onMove);\r\n window.removeEventListener(\"pointerup\", onUp);\r\n window.removeEventListener(\"pointercancel\", onUp);\r\n resizeListenersRef.current = {};\r\n };\r\n\r\n resizeListenersRef.current = { move: onMove, up: onUp };\r\n\r\n event.currentTarget.setPointerCapture?.(event.pointerId);\r\n window.addEventListener(\"pointermove\", onMove);\r\n window.addEventListener(\"pointerup\", onUp);\r\n window.addEventListener(\"pointercancel\", 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 rootClasses = clsx(\"rui-textarea\", \"rui-root\", disabled && \"rui-textarea--disabled\");\r\n const shellClasses = clsx(\r\n \"rui-textarea__shell\",\r\n disabled && \"rui-textarea__shell--disabled\",\r\n error && \"rui-textarea__shell--error\"\r\n );\r\n\r\n const textareaClasses = clsx(\r\n \"rui-textarea__control\",\r\n `rui-textarea__control--resize-${resizeDirection}`,\r\n className\r\n );\r\n\r\n const count = value.length;\n const limit = maxLength ?? undefined;\n const { style, ...restProps } = rest;\n const allowY = resizeDirection === \"vertical\" || resizeDirection === \"both\";\n const manualHeightStyle =\n isManualHeightActive && allowY && manualHeight !== undefined ? { height: manualHeight } : undefined;\n const textareaStyle = manualHeightStyle ? { ...style, ...manualHeightStyle } : style;\n const allowX = resizeDirection === \"horizontal\" || resizeDirection === \"both\";\n const shellStyle = manualWidth !== undefined && allowX ? { width: manualWidth } : undefined;\n\r\n return (\r\n <div className={rootClasses}>\r\n {label ? (\r\n <label\r\n htmlFor={textareaId}\r\n className=\"rui-textarea__label rui-text-wrap\"\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=\"rui-textarea__scrollbar\"\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=\"rui-textarea__scrollbar-track\">\r\n <div\r\n className=\"rui-textarea__scrollbar-thumb\"\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=\"rui-textarea__footer\">\r\n {showCount && limit ? (\r\n <div className=\"rui-textarea__footer-count\">\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 onPointerDown={handleResizeStart}\r\n className=\"rui-textarea__resize-handle\"\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 16 16\"\r\n aria-hidden=\"true\"\r\n className=\"rui-textarea__resize-handle-icon\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n >\r\n <path d=\"M7 15 L15 7 M11 15 L15 11 M3 15 L15 3\" />\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=\"rui-textarea__description rui-text-wrap\">\r\n {description}\r\n </p>\r\n ) : null}\r\n\r\n {error ? (\r\n <p id={errorId} className=\"rui-textarea__error rui-text-wrap\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./ResizableContainer.css\";\r\n\r\nexport type ResizableContainerProps = React.HTMLAttributes<HTMLDivElement> & {\r\n axis?: \"both\" | \"x\" | \"y\";\r\n minWidth?: number;\r\n minHeight?: number;\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n defaultWidth?: number;\r\n defaultHeight?: number;\r\n width?: number;\r\n height?: number;\r\n step?: number;\r\n onSizeChange?: (size: { width: number; height: number }) => void;\r\n};\r\n\r\ntype ResizeState = {\r\n startX: number;\r\n startY: number;\r\n startWidth: number;\r\n startHeight: number;\r\n pointerId: number | null;\r\n maxWidthLimit?: number;\r\n maxHeightLimit?: number;\r\n};\r\n\r\nconst DEFAULT_MIN_WIDTH = 240;\r\nconst DEFAULT_MIN_HEIGHT = 120;\r\nconst DEFAULT_STEP = 8;\r\nconst MIN_THUMB = 24;\r\nconst TRACK_PADDING = 6;\r\nconst TRACK_THICKNESS = 6;\r\nconst TRACK_INSET = 8;\r\nconst V_TRACK_INSET = 10;\r\n\r\ntype ThumbState = { visible: boolean; size: number; offset: number };\r\n\r\nfunction useScrollbarMetrics(\r\n ref: React.RefObject<HTMLDivElement | null>,\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 | null>,\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 const ResizableContainer = React.forwardRef<HTMLDivElement, ResizableContainerProps>(\r\n function ResizableContainer(\r\n {\r\n axis = \"both\",\r\n minWidth = DEFAULT_MIN_WIDTH,\r\n minHeight = DEFAULT_MIN_HEIGHT,\r\n maxWidth,\r\n maxHeight,\r\n defaultWidth,\r\n defaultHeight,\r\n width,\r\n height,\r\n step = DEFAULT_STEP,\r\n className,\r\n style,\r\n children,\r\n onSizeChange,\r\n ...rest\r\n },\r\n ref\r\n ) {\r\n const rootRef = React.useRef<HTMLDivElement | null>(null);\r\n const contentRef = React.useRef<HTMLDivElement | null>(null);\r\n const [internalWidth, setInternalWidth] = React.useState<number | undefined>(defaultWidth);\r\n const [internalHeight, setInternalHeight] = React.useState<number | undefined>(defaultHeight);\r\n const [isResizing, setIsResizing] = React.useState(false);\r\n const [padRight, setPadRight] = React.useState(0);\r\n const [padBottom, setPadBottom] = React.useState(0);\r\n const resizeStateRef = React.useRef<ResizeState>({\r\n startX: 0,\r\n startY: 0,\r\n startWidth: 0,\r\n startHeight: 0,\r\n pointerId: null,\r\n });\r\n\r\n const widthControlled = typeof width === \"number\";\r\n const heightControlled = typeof height === \"number\";\r\n const allowX = axis === \"both\" || axis === \"x\";\r\n const allowY = axis === \"both\" || axis === \"y\";\r\n\r\n const maxWidthLimit = maxWidth;\r\n const maxHeightLimit = maxHeight;\r\n\r\n const vThumb = useScrollbarMetrics(contentRef, \"vertical\", padBottom);\r\n const hThumb = useScrollbarMetrics(contentRef, \"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 contentRef,\r\n \"vertical\",\r\n vThumb,\r\n padBottom\r\n );\r\n const { onThumbPointerDown: handleHThumbDown, startDrag: startHDrag } = useThumbDrag(\r\n contentRef,\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 = contentRef.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 setRefs = React.useCallback(\r\n (node: HTMLDivElement | null) => {\r\n rootRef.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 const clamp = React.useCallback((value: number, min?: number, max?: number) => {\r\n return Math.max(min ?? -Infinity, Math.min(max ?? Infinity, value));\r\n }, []);\r\n\r\n const handlePointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (event.pointerType === \"mouse\" && event.button !== 0) return;\r\n event.preventDefault();\r\n const node = rootRef.current;\r\n if (!node) return;\r\n const startWidth = node.offsetWidth;\r\n const startHeight = node.offsetHeight;\r\n\r\n resizeStateRef.current = {\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n startWidth,\r\n startHeight,\r\n pointerId: event.pointerId,\r\n maxWidthLimit,\r\n maxHeightLimit,\r\n };\r\n\r\n setIsResizing(true);\r\n event.currentTarget.setPointerCapture?.(event.pointerId);\r\n };\r\n\r\n const applySize = React.useCallback(\r\n (nextWidth: number, nextHeight: number) => {\r\n if (allowX && !widthControlled) {\r\n setInternalWidth(nextWidth);\r\n }\r\n if (allowY && !heightControlled) {\r\n setInternalHeight(nextHeight);\r\n }\r\n onSizeChange?.({ width: nextWidth, height: nextHeight });\r\n },\r\n [allowX, allowY, heightControlled, onSizeChange, widthControlled]\r\n );\r\n\r\n const handlePointerMove = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (!isResizing) return;\r\n const { startX, startY, startWidth, startHeight } = resizeStateRef.current;\r\n const maxWidthLimit = resizeStateRef.current.maxWidthLimit;\r\n const maxHeightLimit = resizeStateRef.current.maxHeightLimit;\r\n const deltaX = event.clientX - startX;\r\n const deltaY = event.clientY - startY;\r\n\r\n const nextWidth = allowX\r\n ? clamp(startWidth + deltaX, minWidth, maxWidthLimit)\r\n : widthControlled\r\n ? width ?? startWidth\r\n : internalWidth ?? startWidth;\r\n const nextHeight = allowY\r\n ? clamp(startHeight + deltaY, minHeight, maxHeightLimit)\r\n : heightControlled\r\n ? height ?? startHeight\r\n : internalHeight ?? startHeight;\r\n\r\n applySize(nextWidth, nextHeight);\r\n };\r\n\r\n const handlePointerUp = (event: React.PointerEvent<HTMLButtonElement>) => {\r\n if (!isResizing) return;\r\n setIsResizing(false);\r\n if (resizeStateRef.current.pointerId !== null) {\r\n event.currentTarget.releasePointerCapture?.(resizeStateRef.current.pointerId);\r\n }\r\n resizeStateRef.current.pointerId = null;\r\n };\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\r\n let deltaX = 0;\r\n let deltaY = 0;\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\":\r\n if (allowX) deltaX = -step;\r\n break;\r\n case \"ArrowRight\":\r\n if (allowX) deltaX = step;\r\n break;\r\n case \"ArrowUp\":\r\n if (allowY) deltaY = -step;\r\n break;\r\n case \"ArrowDown\":\r\n if (allowY) deltaY = step;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (deltaX === 0 && deltaY === 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const node = rootRef.current;\r\n const measuredWidth = node?.offsetWidth ?? 0;\r\n const measuredHeight = node?.offsetHeight ?? 0;\r\n const limitWidth = maxWidthLimit;\r\n const limitHeight = maxHeightLimit;\r\n const baseWidth = widthControlled ? width ?? measuredWidth : internalWidth ?? measuredWidth;\r\n const baseHeight = heightControlled ? height ?? measuredHeight : internalHeight ?? measuredHeight;\r\n const nextWidth = allowX ? clamp(baseWidth + deltaX, minWidth, limitWidth) : baseWidth;\r\n const nextHeight = allowY ? clamp(baseHeight + deltaY, minHeight, limitHeight) : baseHeight;\r\n\r\n applySize(nextWidth, nextHeight);\r\n };\r\n\r\n const resolvedWidth = widthControlled ? width : internalWidth;\r\n const resolvedHeight = heightControlled ? height : internalHeight;\r\n const sizeStyle: React.CSSProperties = {\r\n ...(resolvedWidth !== undefined ? { width: resolvedWidth } : null),\r\n ...(resolvedHeight !== undefined ? { height: resolvedHeight } : null),\r\n ...(minWidth !== undefined ? { minWidth } : null),\r\n ...(minHeight !== undefined ? { minHeight } : null),\r\n ...(maxWidthLimit !== undefined ? { maxWidth: maxWidthLimit } : null),\r\n ...(maxHeightLimit !== undefined ? { maxHeight: maxHeightLimit } : null),\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 {...rest}\r\n ref={setRefs}\r\n className={clsx(\"rui-resizable\", \"rui-root\", className)}\r\n style={{ ...style, ...sizeStyle }}\r\n data-axis={axis}\r\n data-resizing={isResizing ? \"true\" : undefined}\r\n data-scrollbar-x={hThumb.visible ? \"true\" : undefined}\r\n data-scrollbar-y={vThumb.visible ? \"true\" : undefined}\r\n >\r\n <div\r\n ref={contentRef}\r\n className=\"rui-resizable__content\"\r\n style={{\r\n paddingRight: `calc(var(--rui-resize-content-padding) + ${padRight}px)`,\r\n paddingBottom: `calc(var(--rui-resize-content-padding) + ${padBottom}px)`,\r\n }}\r\n >\r\n {children}\r\n </div>\r\n {vThumb.visible ? (\r\n <div\r\n className=\"rui-resizable__scrollbar rui-resizable__scrollbar--vertical\"\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=\"rui-resizable__scrollbar-track\">\r\n <div\r\n className=\"rui-resizable__scrollbar-thumb\"\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=\"rui-resizable__scrollbar rui-resizable__scrollbar--horizontal\"\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=\"rui-resizable__scrollbar-track\">\r\n <div\r\n className=\"rui-resizable__scrollbar-thumb\"\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 <button\r\n type=\"button\"\r\n className=\"rui-resizable__handle\"\r\n aria-label=\"Resize\"\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={handlePointerUp}\r\n onPointerCancel={handlePointerUp}\r\n onKeyDown={handleKeyDown}\r\n >\r\n <svg\r\n viewBox=\"0 0 16 16\"\r\n aria-hidden=\"true\"\r\n className=\"rui-resizable__handle-icon\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n >\r\n <path d=\"M7 15 L15 7 M11 15 L15 11 M3 15 L15 3\" />\r\n </svg>\r\n </button>\r\n </div>\r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport \"./Toggle.css\";\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 = clsx(\r\n \"rui-toggle__button rui-root\",\r\n resolvedChecked && \"rui-toggle__button--checked\",\r\n disabled && \"rui-toggle__button--disabled rui-toggle__is-disabled\",\r\n className\r\n );\r\n\r\n const thumbClasses = clsx(\r\n \"rui-toggle__thumb\",\r\n resolvedChecked ? \"rui-toggle__thumb--checked\" : \"rui-toggle__thumb--unchecked\",\r\n disabled && \"rui-toggle__thumb--disabled\"\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\r\n"],"mappings":"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","names":["Alert","React","clsx","jsx","jsxs","Badge","clsx","jsx","React","clsx","jsx","jsxs","Card","React","jsx","jsxs","clsx","jsx","jsxs","Checkbox","React","clsx","jsx","jsxs","ColorPicker","_a","value","React","React","clsx","jsx","jsxs","React","clsx","jsx","jsxs","useCallback","useEffect","useState","React","clsx","jsx","jsxs","clsx","jsx","_a","React","clsx","jsx","jsxs","DatalistInput","_a","React","React","clsx","jsx","jsxs","value","_a","clsx","jsx","jsxs","DatePicker","month","id","_a","React","createPortal","clsx","jsx","jsxs","createPortal","React","clsx","jsx","jsxs","Disclosure","React","clsx","jsx","jsxs","FilePicker","error","React","clsx","jsx","jsxs","InputField","React","clsx","jsx","jsxs","NumberInput","clsx","React","clsx","jsx","jsxs","OutputChip","clsx","jsx","jsxs","React","clsx","jsx","jsxs","Radio","React","clsx","jsx","jsxs","Slider","start","height","value","position","positionRatio","logicalRatio","next","_a","clsx","jsx","jsxs","React","Fragment","jsx","jsxs","React","slots","_a","jsxs","jsx","Fragment","React","clsx","jsx","jsxs","TRACK_PADDING","React","clsx","jsx","jsxs","MIN_THUMB","TRACK_THICKNESS","Textarea","_a","_b","allowY","allowX","React","clsx","jsx","jsxs","MIN_THUMB","TRACK_PADDING","TRACK_THICKNESS","TRACK_INSET","V_TRACK_INSET","useScrollbarMetrics","useThumbDrag","ResizableContainer","axis","clamp","maxWidthLimit","maxHeightLimit","React","clsx","jsx","Toggle"]}
|