banhatten-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ColorPalette.tsx","../src/components/accordion.tsx","../src/lib/utils.ts","../src/components/icon.tsx","../src/components/divider.tsx","../src/components/alert.tsx","../src/components/button.tsx","../src/components/close-button.tsx","../src/components/avatar.tsx","../src/components/avatar-group.tsx","../src/components/avatar-profile.tsx","../src/components/badge.tsx","../src/components/breadcrumb.tsx","../src/components/breadcrumb-item.tsx","../src/components/button-group-item.tsx","../src/components/button-group.tsx","../src/components/featured-icon.tsx","../src/components/progress-bar.tsx","../src/components/menu-item.tsx","../src/components/toggle.tsx","../src/components/menu-heading.tsx","../src/components/menu-group.tsx","../src/components/menu.tsx","../src/components/sidebar-menu-item.tsx","../src/components/sidebar.tsx","../src/components/sidebar-submenu-item.tsx","../src/components/sidebar-account-card.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/checkbox.tsx","../src/components/checkbox-card.tsx","../src/components/radio.tsx","../src/components/radio-card.tsx","../src/components/tag.tsx","../src/components/slider-handle.tsx","../src/components/tooltip.tsx","../src/components/slider.tsx"],"sourcesContent":["import * as React from \"react\";\n\nconst tokenSamples = [\n {\n className: \"bg-brand\",\n label: \"bg-brand\",\n textClass: \"text-white\",\n },\n {\n className: \"bg-danger\",\n label: \"bg-danger\",\n textClass: \"text-white\",\n },\n {\n className: \"bg-inactive\",\n label: \"bg-inactive\",\n textClass: \"text-primary\",\n },\n {\n className: \"bg-success\",\n label: \"bg-success\",\n textClass: \"text-white\",\n },\n {\n className: \"bg-warning\",\n label: \"bg-warning\",\n textClass: \"text-white\",\n },\n {\n className: \"bg-info\",\n label: \"bg-info\",\n textClass: \"text-white\",\n },\n];\n\nexport const ColorPalette: React.FC = () => {\n return (\n <div className=\"p-0\">\n <h2 className=\"text-primary mb-lg text-xl font-semibold\">\n Token Validation\n </h2>\n <div className=\"grid grid-cols-2 gap-4 md:grid-cols-3\">\n {tokenSamples.map((sample) => (\n <div\n key={sample.label}\n className={`${sample.className} ${sample.textClass} flex h-24 items-center justify-center rounded-lg p-4 text-sm font-mono`}\n >\n {sample.label}\n </div>\n ))}\n </div>\n\n <h3 className=\"text-primary mt-8 mb-4 text-lg font-semibold\">\n Text Colors\n </h3>\n <div className=\"space-y-2\">\n <p className=\"text-primary\">\n text-primary (dark gray)\n </p>\n <p className=\"text-secondary\">\n text-secondary (medium gray)\n </p>\n <p className=\"text-brand\">\n text-brand (primary blue)\n </p>\n <p className=\"text-danger\">\n text-danger (red)\n </p>\n </div>\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\nimport { Divider } from \"./divider\";\n\n/* ── CVA ──\n * Token-only: spacing (py-md px-md, gap-md), bg (hover:bg-tertiary),\n * text (text-primary, text-inactive), icon (text-icon-primary, text-icon-inactive).\n * States: default, hover, disabled.\n */\n\nconst accordionTriggerVariants = cva(\n \"flex w-full items-center gap-md py-md px-md text-left text-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n {\n variants: {\n disabled: {\n true:\n \"cursor-default text-inactive pointer-events-none [&_*]:pointer-events-none [&_.accordion-expand-icon]:text-icon-inactive [&_.accordion-icon-left]:text-icon-inactive\",\n false:\n \"cursor-pointer hover:bg-tertiary [&_.accordion-expand-icon]:text-icon-primary [&_.accordion-icon-left]:text-icon-secondary\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/* ── Contexts ── */\n\ntype AccordionType = \"single\" | \"multiple\";\n\ninterface AccordionContextValue {\n openKeys: Set<string>;\n onToggle: (value: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\ninterface AccordionItemContextValue {\n value: string;\n disabled: boolean;\n showDivider: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordion() {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error(\"Accordion components must be used within Accordion.\");\n return ctx;\n}\n\nfunction useAccordionItem() {\n const ctx = React.useContext(AccordionItemContext);\n if (!ctx) throw new Error(\"AccordionTrigger/AccordionContent must be used within AccordionItem.\");\n return ctx;\n}\n\n/* ── Helpers ── */\n\n/** Normalize string | string[] into a Set<string>. */\nfunction toSet(value: string | string[]): Set<string> {\n if (Array.isArray(value)) return new Set(value.filter(Boolean));\n return value ? new Set([value]) : new Set();\n}\n\n/* ── Accordion (root) ── */\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \"single\" = one item open at a time; \"multiple\" = many. Default: \"single\". */\n type?: AccordionType;\n /** Controlled open value(s). \"single\" uses string; \"multiple\" uses string[]. */\n value?: string | string[];\n /** Default open value(s) when uncontrolled. */\n defaultValue?: string | string[];\n /** Called when open state changes. */\n onValueChange?: (value: string | string[]) => void;\n children: React.ReactNode;\n}\n\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n className,\n type = \"single\",\n value: controlledValue,\n defaultValue,\n onValueChange,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = React.useState<\n string | string[]\n >(() => defaultValue ?? (type === \"single\" ? \"\" : []));\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n const openKeys = React.useMemo(() => toSet(value), [value]);\n\n const onToggle = React.useCallback(\n (key: string) => {\n let nextKeys: Set<string>;\n\n if (openKeys.has(key)) {\n nextKeys = new Set(openKeys);\n nextKeys.delete(key);\n } else {\n nextKeys = type === \"single\" ? new Set([key]) : new Set([...openKeys, key]);\n }\n\n const nextValue = type === \"single\"\n ? (Array.from(nextKeys)[0] ?? \"\")\n : Array.from(nextKeys);\n\n if (!isControlled) setUncontrolledValue(nextValue);\n onValueChange?.(nextValue);\n },\n [type, openKeys, isControlled, onValueChange]\n );\n\n const ctx = React.useMemo<AccordionContextValue>(\n () => ({ openKeys, onToggle }),\n [openKeys, onToggle]\n );\n\n return (\n <AccordionContext.Provider value={ctx}>\n <div ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n }\n);\n\nAccordion.displayName = \"Accordion\";\n\n/* ── AccordionItem ── */\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Unique value for this item (used for open state and accessibility). */\n value: string;\n /** When true, trigger and content use disabled styling and are not expandable. */\n disabled?: boolean;\n /** When true, a Divider is shown between the trigger and content when expanded. */\n showDivider?: boolean;\n children: React.ReactNode;\n}\n\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n (\n { className, value, disabled = false, showDivider = false, children, ...props },\n ref\n ) => {\n const triggerId = React.useId();\n const contentId = React.useId();\n\n const itemCtx = React.useMemo<AccordionItemContextValue>(\n () => ({ value, disabled, showDivider, triggerId, contentId }),\n [value, disabled, showDivider, triggerId, contentId]\n );\n\n return (\n <AccordionItemContext.Provider value={itemCtx}>\n <div ref={ref} className={cn(\"flex flex-col\", className)} data-value={value} {...props}>\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n }\n);\n\nAccordionItem.displayName = \"AccordionItem\";\n\n/* ── AccordionTrigger ── */\n\nexport interface AccordionTriggerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n Omit<VariantProps<typeof accordionTriggerVariants>, \"disabled\"> {\n /** Optional icon or element shown to the left of the heading (e.g. info icon). */\n iconLeft?: React.ReactNode;\n /** Heading content (e.g. question text). */\n children: React.ReactNode;\n}\n\nconst AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n (\n { className, disabled: propDisabled, iconLeft, children, ...props },\n ref\n ) => {\n const { openKeys, onToggle } = useAccordion();\n const { value, disabled: itemDisabled, triggerId, contentId } = useAccordionItem();\n const disabled = propDisabled ?? itemDisabled;\n const isExpanded = openKeys.has(value);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onToggle(value);\n props.onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-disabled={disabled ?? undefined}\n className={cn(accordionTriggerVariants({ disabled }), className)}\n onClick={handleClick}\n {...props}\n >\n {iconLeft != null && <span className=\"accordion-icon-left shrink-0\">{iconLeft}</span>}\n <span className=\"min-w-0 flex-1\">{children}</span>\n <Icon\n name={isExpanded ? \"expand_less\" : \"expand_more\"}\n size=\"sm\"\n className=\"accordion-expand-icon shrink-0\"\n aria-hidden\n />\n </button>\n );\n }\n);\n\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\n/* ── AccordionContent ── */\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nconst AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ className, children, ...props }, ref) => {\n const { openKeys } = useAccordion();\n const { value, showDivider, triggerId, contentId } = useAccordionItem();\n const isExpanded = openKeys.has(value);\n\n if (!isExpanded) return null;\n\n return (\n <>\n {showDivider && <Divider className=\"my-0\" />}\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n className={cn(\"py-md px-md text-secondary text-sm\", className)}\n {...props}\n >\n {children}\n </div>\n </>\n );\n }\n);\n\nAccordionContent.displayName = \"AccordionContent\";\n\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n accordionTriggerVariants,\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst iconVariants = cva(\"shrink-0 select-none\", {\n variants: {\n variant: {\n outlined: \"material-symbols-outlined\",\n rounded: \"material-symbols-rounded\",\n sharp: \"material-symbols-sharp\",\n },\n },\n defaultVariants: {\n variant: \"outlined\",\n },\n});\n\nconst sizeMap = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n} as const;\n\nexport type IconSize = keyof typeof sizeMap;\n\nexport interface IconProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof iconVariants> {\n /** Material Symbol name in snake_case (e.g. \"home\", \"arrow_forward\", \"settings\") */\n name: string;\n /** Size preset: xs (12px), sm (16px), md (20px), lg (24px), xl (32px). Default: md */\n size?: IconSize;\n /** Render the filled variant of the icon */\n filled?: boolean;\n /** Font weight: 100-700. Default: 400 */\n weight?: number;\n /** Grade: -25 to 200. Default: 0 */\n grade?: number;\n /** Accessible label. If omitted, the icon is treated as decorative (aria-hidden). */\n label?: string;\n}\n\nconst Icon = React.forwardRef<HTMLSpanElement, IconProps>(\n (\n {\n name,\n variant,\n size = \"md\",\n filled = false,\n weight = 400,\n grade = 0,\n label,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const fontSize = sizeMap[size];\n\n return (\n <span\n ref={ref}\n className={cn(iconVariants({ variant }), className)}\n style={{\n fontSize,\n fontVariationSettings: `'FILL' ${filled ? 1 : 0}, 'wght' ${weight}, 'GRAD' ${grade}`,\n ...style,\n }}\n aria-hidden={!label}\n aria-label={label}\n role={label ? \"img\" : undefined}\n {...props}\n >\n {name}\n </span>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n\nexport { Icon, iconVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst dividerVariants = cva(\"border-default\", {\n variants: {\n orientation: {\n horizontal: \"w-full border-t\",\n vertical: \"h-full border-l\",\n },\n variant: {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n variant: \"solid\",\n },\n});\n\nexport interface DividerProps\n extends React.HTMLAttributes<HTMLHRElement>,\n VariantProps<typeof dividerVariants> {}\n\nconst Divider = React.forwardRef<HTMLHRElement, DividerProps>(\n (\n { className, orientation = \"horizontal\", variant = \"solid\", ...props },\n ref\n ) => {\n const Component = orientation === \"vertical\" ? \"div\" : \"hr\";\n \n return (\n <Component\n ref={ref as any}\n className={cn(dividerVariants({ orientation, variant }), className)}\n role=\"separator\"\n aria-orientation={orientation ?? undefined}\n {...props}\n />\n );\n }\n);\n\nDivider.displayName = \"Divider\";\n\nexport { Divider, dividerVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps } from \"./icon\";\nimport { Button } from \"./button\";\nimport { CloseButton } from \"./close-button\";\n\n// ---------------------------------------------------------------------------\n// Variants\n// ---------------------------------------------------------------------------\n\nconst alertVariants = cva(\n \"flex gap-md rounded-sm px-md py-md transition-colors\",\n {\n variants: {\n type: {\n info: \"\",\n success: \"\",\n warning: \"\",\n danger: \"\",\n neutral: \"\",\n },\n emphasis: {\n // Low is identical across all types — no compound variant needed\n low: \"bg-primary border border-strong text-primary\",\n medium: \"\",\n // NOTE: \"medium\" and \"moderate\" are near-synonyms in English.\n // Consider renaming to \"subtle\" / \"bold\" in a future major version.\n moderate: \"\",\n high: \"\",\n },\n },\n compoundVariants: [\n // Medium emphasis — light pastel backgrounds with pastel borders\n { emphasis: \"medium\", type: \"info\", className: \"bg-info-tertiary border border-info-subtle text-info\" },\n { emphasis: \"medium\", type: \"success\", className: \"bg-success-tertiary border border-success-secondary text-success\" },\n { emphasis: \"medium\", type: \"warning\", className: \"bg-warning-tertiary border border-warning-secondary text-warning-strong\" },\n { emphasis: \"medium\", type: \"danger\", className: \"bg-danger-tertiary border border-danger-secondary text-danger\" },\n { emphasis: \"medium\", type: \"neutral\", className: \"bg-secondary border border-strong\" },\n // Moderate emphasis — secondary backgrounds with more saturated borders\n { emphasis: \"moderate\", type: \"info\", className: \"bg-info-secondary border border-info-subtle text-info\" },\n { emphasis: \"moderate\", type: \"success\", className: \"bg-success-secondary border border-success-secondary text-success\" },\n { emphasis: \"moderate\", type: \"warning\", className: \"bg-warning-secondary border border-warning-secondary text-warning-strong\" },\n { emphasis: \"moderate\", type: \"danger\", className: \"bg-danger-secondary border border-danger-secondary text-danger\" },\n { emphasis: \"moderate\", type: \"neutral\", className: \"bg-tertiary border border-strong\" },\n // High emphasis — saturated backgrounds with white text, no border\n { emphasis: \"high\", type: \"info\", className: \"bg-info text-on-color\" },\n { emphasis: \"high\", type: \"success\", className: \"bg-success text-on-color\" },\n { emphasis: \"high\", type: \"warning\", className: \"bg-warning text-on-color\" },\n { emphasis: \"high\", type: \"danger\", className: \"bg-danger text-on-color\" },\n { emphasis: \"high\", type: \"neutral\", className: \"bg-quarterary text-primary\" },\n ],\n defaultVariants: {\n type: \"info\",\n emphasis: \"medium\",\n },\n }\n);\n\n// ---------------------------------------------------------------------------\n// Lookup maps — single source of truth for type → visual mapping\n// ---------------------------------------------------------------------------\n\ntype AlertType = NonNullable<VariantProps<typeof alertVariants>[\"type\"]>;\n\n/** Maps alert type to its preset Material Symbol icon name */\nconst TYPE_ICON: Record<AlertType, string> = {\n danger: \"error\",\n success: \"check_circle\",\n warning: \"warning\",\n info: \"info\",\n neutral: \"notifications\",\n};\n\n/** Maps alert type to its semantic text color class */\nconst TYPE_COLOR: Record<AlertType, string> = {\n danger: \"text-danger\",\n success: \"text-success\",\n warning: \"text-warning-strong\",\n info: \"text-info\",\n neutral: \"text-primary\",\n};\n\n/** Maps alert type to its icon color class */\nconst TYPE_ICON_COLOR: Record<AlertType, string> = {\n danger: \"text-danger\",\n success: \"text-success\",\n warning: \"text-warning-strong\",\n info: \"text-info\",\n neutral: \"text-icon-primary\",\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface AlertAction {\n /** Button label text */\n label: string;\n /** Click handler */\n onClick: () => void;\n}\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof alertVariants> {\n /** Main title text displayed in the alert */\n title: string;\n /** Optional subtitle/description text (shown when expand=true) */\n description?: string;\n /** Action buttons (shown when expand=true). Rendered as link-style buttons. */\n actions?: AlertAction[];\n /** Callback fired when the close button is clicked */\n onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of the status icon */\n iconFilled?: boolean;\n /** Expand to show description and action buttons */\n expand?: boolean;\n /** ARIA role. Default: \"alert\" for danger/warning, \"status\" for others */\n role?: \"alert\" | \"status\";\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n type = \"info\",\n emphasis = \"medium\",\n expand = false,\n title,\n description,\n actions,\n onClose,\n iconVariant,\n iconFilled,\n role,\n ...props\n },\n ref\n ) => {\n // Resolve nullable CVA variant props (VariantProps yields T | null | undefined)\n const t = type ?? \"info\";\n const e = emphasis ?? \"medium\";\n\n const isHigh = e === \"high\";\n // High-emphasis neutral has a light bg (bg-quarterary) unlike other high types\n const isHighContrast = isHigh && t !== \"neutral\";\n const iconSize = e === \"low\" ? \"sm\" : \"md\";\n const iconColor = isHighContrast ? \"text-on-color\" : TYPE_ICON_COLOR[t];\n const descriptionColor = isHighContrast ? \"text-on-color\" : \"\";\n\n const closeButtonColor =\n e === \"low\"\n ? \"text-icon-secondary\"\n : t === \"neutral\"\n ? isHigh\n ? \"text-icon-primary\"\n : \"text-icon-secondary\"\n : iconColor;\n\n const resolvedRole =\n role ?? (t === \"danger\" || t === \"warning\" ? \"alert\" : \"status\");\n const liveRegion =\n t === \"danger\" || t === \"warning\" ? \"assertive\" : \"polite\";\n\n return (\n <div\n ref={ref}\n role={resolvedRole}\n aria-live={liveRegion}\n className={cn(\n alertVariants({ type: t, emphasis: e }),\n expand ? \"items-start\" : \"items-center\",\n className\n )}\n {...props}\n >\n {/* Status icon */}\n <Icon\n name={TYPE_ICON[t]}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n className={cn(\"shrink-0\", iconColor)}\n aria-hidden\n />\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div\n className={cn(\n \"flex justify-between gap-md\",\n expand ? \"items-start\" : \"items-center\"\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div\n className={cn(\n \"text-sm leading-5\",\n expand && description ? \"font-medium\" : \"font-regular\"\n )}\n >\n {title}\n </div>\n {expand && description && (\n <div\n className={cn(\"text-sm leading-5 mt-xs\", descriptionColor)}\n >\n {description}\n </div>\n )}\n </div>\n\n {onClose && (\n <CloseButton\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClose}\n aria-label=\"Close alert\"\n className={closeButtonColor}\n />\n )}\n </div>\n\n {/* Action buttons */}\n {expand && actions && actions.length > 0 && (\n <div className=\"flex items-center gap-md mt-sm\">\n {actions.map((action, index) => (\n <Button\n key={index}\n variant=\"link-brand\"\n size=\"xs\"\n onClick={action.onClick}\n className={\n isHighContrast\n ? \"text-on-color\"\n : e === \"low\"\n ? undefined\n : TYPE_COLOR[t]\n }\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nAlert.displayName = \"Alert\";\n\nexport { Alert, alertVariants };\n","import * as React from \"react\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps, type IconSize } from \"./icon\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center font-medium shrink-0 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none\",\n {\n variants: {\n variant: {\n primary:\n \"bg-component-button-brand-bg text-on-color hover:bg-component-button-brand-bg-hover active:bg-brand-strong\",\n secondary:\n \"bg-component-button-secondary-bg border border-strong text-component-button-secondary-fg shadow-xs hover:bg-component-button-secondary-bg-hover active:bg-quarterary\",\n tertiary:\n \"bg-transparent text-component-button-tertiary-color-fg hover:bg-component-button-tertiary-bg-hover active:bg-quarterary\",\n danger:\n \"bg-component-button-danger-bg text-on-color hover:bg-component-button-danger-bg-hover active:bg-danger-strong\",\n link: \"bg-transparent text-component-button-tertiary-color-fg underline-offset-4 hover:underline\",\n \"link-brand\":\n \"bg-transparent text-component-button-link-color-fg underline-offset-4 hover:text-component-button-link-color-fg-hover\",\n },\n size: {\n xs: \"h-9 px-md gap-0.5 text-sm rounded-sm\",\n md: \"h-10 px-lg gap-1 text-sm rounded-sm\",\n lg: \"h-11 px-xl gap-1 text-base rounded-sm\",\n xl: \"h-12 px-2xl gap-1 text-base rounded-sm\",\n \"2xl\": \"h-14 px-2xl gap-2 text-base rounded-md\",\n },\n iconOnly: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Link variants don't need height/padding\n {\n variant: \"link\",\n className: \"h-auto px-0 py-0 rounded-[6px]\",\n },\n {\n variant: \"link-brand\",\n className: \"h-auto px-0 py-0 rounded-[6px]\",\n },\n // Icon-only variants: square buttons with no horizontal padding\n {\n iconOnly: true,\n size: \"xs\",\n className: \"w-9 px-0\",\n },\n {\n iconOnly: true,\n size: \"md\",\n className: \"w-10 px-0\",\n },\n {\n iconOnly: true,\n size: \"lg\",\n className: \"w-11 px-0\",\n },\n {\n iconOnly: true,\n size: \"xl\",\n className: \"w-12 px-0\",\n },\n {\n iconOnly: true,\n size: \"2xl\",\n className: \"w-14 px-0\",\n },\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n iconOnly: false,\n },\n }\n);\n\n/** Maps button size to appropriate icon size */\nconst buttonSizeToIconSize: Record<NonNullable<ButtonProps[\"size\"]>, IconSize> =\n {\n xs: \"md\",\n md: \"md\",\n lg: \"md\",\n xl: \"lg\",\n \"2xl\": \"lg\",\n };\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render as child element instead of a `<button>`. Useful for Next.js `<Link>` or `<a>` tags. */\n asChild?: boolean;\n /** Material Symbol name for icon-only button (e.g. \"close\", \"more_vert\"). When provided, renders a square icon-only button. Requires `aria-label` for accessibility. */\n icon?: string;\n /** Material Symbol name for left icon (e.g. \"arrow_back\", \"add\") */\n leftIcon?: string;\n /** Material Symbol name for right icon (e.g. \"arrow_forward\", \"chevron_right\") */\n rightIcon?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icons */\n iconFilled?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n asChild = false,\n icon,\n leftIcon,\n rightIcon,\n iconVariant,\n iconFilled,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const iconSize = buttonSizeToIconSize[size ?? \"md\"];\n\n // Determine if this is an icon-only button\n // Icon-only mode: when `icon` prop is provided, or when only one icon (leftIcon XOR rightIcon) is provided without children\n const hasChildren = children != null && children !== \"\";\n const isIconOnly =\n !!icon ||\n ((!!leftIcon && !rightIcon && !hasChildren) ||\n (!!rightIcon && !leftIcon && !hasChildren));\n\n const iconElement = icon ? (\n <Icon\n name={icon}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n aria-hidden\n />\n ) : null;\n\n const leftIconElement = leftIcon && !icon ? (\n <Icon\n name={leftIcon}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n aria-hidden\n />\n ) : null;\n\n const rightIconElement = rightIcon && !icon ? (\n <Icon\n name={rightIcon}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n aria-hidden\n />\n ) : null;\n\n return (\n <Comp\n ref={ref}\n className={cn(\n buttonVariants({ variant, size, iconOnly: isIconOnly }),\n className\n )}\n {...props}\n >\n {iconElement}\n {leftIconElement}\n <Slottable>{children}</Slottable>\n {rightIconElement}\n </Comp>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps, type IconSize } from \"./icon\";\n\nconst closeButtonVariants = cva(\n \"inline-flex items-center justify-center shrink-0 rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n ghost:\n \"bg-transparent text-icon-primary hover:bg-tertiary active:bg-quarterary disabled:text-inactive\",\n outlined:\n \"bg-transparent border border-strong text-icon-primary hover:border-strong hover:bg-secondary active:bg-tertiary disabled:border-inactive-subtle disabled:bg-secondary disabled:text-inactive\",\n },\n size: {\n sm: \"size-6\",\n md: \"size-8\",\n lg: \"size-10\",\n xl: \"size-12\",\n },\n },\n defaultVariants: {\n variant: \"ghost\",\n size: \"md\",\n },\n }\n);\n\nconst closeButtonSizeToIconSize: Record<\n NonNullable<VariantProps<typeof closeButtonVariants>[\"size\"]>,\n IconSize\n> = {\n sm: \"sm\",\n md: \"md\",\n lg: \"md\",\n xl: \"lg\",\n};\n\nexport type CloseButtonProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\"\n> &\n VariantProps<typeof closeButtonVariants> & {\n /** Accessible name for the close action. Default: \"Close\" */\n \"aria-label\"?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of the icon */\n iconFilled?: boolean;\n };\n\nconst CloseButton = React.forwardRef<HTMLButtonElement, CloseButtonProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n \"aria-label\": ariaLabel = \"Close\",\n iconVariant,\n iconFilled,\n ...props\n },\n ref\n ) => {\n const iconSize = closeButtonSizeToIconSize[size ?? \"md\"];\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={ariaLabel}\n className={cn(closeButtonVariants({ variant, size }), className)}\n {...props}\n >\n <Icon\n name=\"close\"\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n aria-hidden\n />\n </button>\n );\n }\n);\n\nCloseButton.displayName = \"CloseButton\";\n\nexport { CloseButton, closeButtonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconSize } from \"./icon\";\n\nconst avatarVariants = cva(\n \"inline-flex items-center justify-center font-medium shrink-0 bg-quarterary text-secondary select-none overflow-hidden\",\n {\n variants: {\n shape: {\n circle: \"rounded-full\",\n rounded: \"rounded-md\",\n },\n size: {\n xs: \"h-6 w-6 text-xs\",\n sm: \"h-7 w-7 text-xs\",\n md: \"h-8 w-8 text-sm\",\n lg: \"h-9 w-9 text-sm\",\n xl: \"h-10 w-10 text-base\",\n \"2xl\": \"h-12 w-12 text-lg\",\n \"3xl\": \"h-14 w-14 text-xl\",\n \"4xl\": \"h-16 w-16 text-xl\",\n },\n },\n defaultVariants: {\n shape: \"circle\",\n size: \"md\",\n },\n }\n);\n\n/** Maps avatar size to icon size for the fallback person icon */\nconst avatarSizeToIconSize: Record<\n NonNullable<VariantProps<typeof avatarVariants>[\"size\"]>,\n IconSize\n> = {\n xs: \"xs\",\n sm: \"xs\",\n md: \"sm\",\n lg: \"sm\",\n xl: \"md\",\n \"2xl\": \"md\",\n \"3xl\": \"lg\",\n \"4xl\": \"lg\",\n};\n\nexport type AvatarProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof avatarVariants> & {\n /** Initials to show (e.g. \"AG\", \"A\"). When provided, renders initials instead of the fallback icon. */\n initials?: string;\n /** Accessible name for the avatar (e.g. user name). Used for role=\"img\" and aria-label. Required when the avatar conveys meaning. */\n \"aria-label\"?: string;\n /** Optional username shown beside the avatar (e.g. \"Ahmed Galal\"). Renders as primary text when provided. */\n username?: string;\n /** Optional supporting line below username (e.g. \"View profile\"). Renders as secondary text. */\n supportingText?: string;\n };\n\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n className,\n shape,\n size = \"md\",\n initials,\n \"aria-label\": ariaLabel,\n username,\n supportingText,\n ...props\n },\n ref\n ) => {\n const iconSize = avatarSizeToIconSize[size ?? \"md\"];\n const trimmedInitials = initials?.trim() ?? \"\";\n const trimmedUsername = username?.trim() ?? \"\";\n const trimmedSupporting = supportingText?.trim() ?? \"\";\n const hasInitials = trimmedInitials !== \"\";\n const isDecorative = ariaLabel == null || ariaLabel.trim() === \"\";\n const hasText = trimmedUsername !== \"\" || trimmedSupporting !== \"\";\n\n const circle = (\n <div\n role={isDecorative ? undefined : \"img\"}\n aria-label={isDecorative ? undefined : ariaLabel}\n className={cn(avatarVariants({ shape, size }), !hasText && className)}\n >\n {hasInitials ? (\n <span className=\"shrink-0 leading-none\">\n {trimmedInitials.slice(0, 2).toUpperCase()}\n </span>\n ) : (\n <Icon\n name=\"person\"\n size={iconSize}\n className=\"text-icon-secondary\"\n aria-hidden\n />\n )}\n </div>\n );\n\n if (hasText) {\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex items-center gap-md min-w-0\", className)}\n {...props}\n >\n {circle}\n <div className=\"flex min-w-0 flex-col justify-center\">\n {trimmedUsername !== \"\" && (\n <span className=\"truncate text-sm font-medium text-primary\">\n {trimmedUsername}\n </span>\n )}\n {trimmedSupporting !== \"\" && (\n <span className=\"truncate text-xs text-secondary\">\n {trimmedSupporting}\n </span>\n )}\n </div>\n </div>\n );\n }\n\n return React.cloneElement(circle, {\n ref,\n className: cn(avatarVariants({ shape, size }), className),\n ...props,\n });\n }\n);\n\nAvatar.displayName = \"Avatar\";\n\nexport { Avatar, avatarVariants };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { AvatarProps } from \"./avatar\";\nimport { AvatarProfile } from \"./avatar-profile\";\nimport { Icon, type IconSize } from \"./icon\";\n\n/** Group size options: pixel values matching Figma. */\ntype AvatarGroupSize = \"24\" | \"32\" | \"40\";\n\n/** Group size maps to AvatarProfile size (24→xs, 32→md, 40→xl). */\nconst groupSizeToProfileSize: Record<\n AvatarGroupSize,\n NonNullable<AvatarProps[\"size\"]>\n> = {\n \"24\": \"xs\",\n \"32\": \"md\",\n \"40\": \"xl\",\n};\n\n/** Badge/Add icon size per group size. */\nconst groupSizeToIconSize: Record<AvatarGroupSize, IconSize> = {\n \"24\": \"xs\",\n \"32\": \"sm\",\n \"40\": \"md\",\n};\n\n/** Overlap offset: negative margin between avatars (token spacing). */\nconst overlapClass = \"-ml-sm\";\n\n/** Badge and Add button: same height/width as avatar, circular, token styles (Figma: bg/tertiary, border/subtract). */\nconst badgeSizeClasses: Record<AvatarGroupSize, string> = {\n \"24\": \"h-6 w-6 min-w-6 min-h-6 text-xs\",\n \"32\": \"h-8 w-8 min-w-8 min-h-8 text-sm\",\n \"40\": \"h-10 w-10 min-w-10 min-h-10 text-base\",\n};\n\nexport type AvatarGroupItem = {\n /** Initials for the avatar (e.g. \"AG\"). */\n initials?: string;\n /** Accessible name for the avatar. */\n \"aria-label\"?: string;\n};\n\nexport type AvatarGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n /** Group avatar size: 24, 32, or 40 px. Default 32. */\n size?: AvatarGroupSize;\n /** When true, the first (leftmost) avatar is drawn on top. Default true. */\n lastOnTop?: boolean;\n /** When true, show a \"+N\" overflow indicator after visible avatars. Default false. */\n moreAvatars?: boolean;\n /** When true, show an Add More button after avatars (and overflow). Default false. */\n addMore?: boolean;\n /** List of avatars to show (initials and optional aria-label). No image support. */\n avatars: AvatarGroupItem[];\n /** Max number of avatars to show before \"+N\". Used when moreAvatars is true. Default 4. */\n maxVisible?: number;\n /** Called when the Add More button is clicked. Only relevant when addMore is true. */\n onAddMore?: () => void;\n};\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n (\n {\n className,\n lastOnTop = true,\n size = \"32\",\n moreAvatars = false,\n addMore = false,\n avatars,\n maxVisible = 4,\n onAddMore,\n ...props\n },\n ref\n ) => {\n const profileSize = groupSizeToProfileSize[size];\n const iconSize = groupSizeToIconSize[size];\n const badgeSize = badgeSizeClasses[size];\n const visible = avatars.slice(0, maxVisible);\n const overflowCount = avatars.length - visible.length;\n const showOverflow = moreAvatars && overflowCount > 0;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={\n avatars.length > 0\n ? `${avatars.length} ${avatars.length === 1 ? \"member\" : \"members\"}`\n : undefined\n }\n className={cn(\"inline-flex items-center\", className)}\n {...props}\n >\n {visible.map((item, index) => (\n <span\n key={index}\n className={cn(\"relative shrink-0\", index === 0 ? \"\" : overlapClass)}\n style={{\n zIndex: lastOnTop ? visible.length - index : index + 1,\n }}\n >\n <AvatarProfile\n size={profileSize}\n shape=\"circle\"\n initials={item.initials}\n aria-label={item[\"aria-label\"]}\n />\n </span>\n ))}\n {showOverflow && (\n <span\n className={cn(\n \"inline-flex items-center justify-center rounded-full border-2 border-subtract bg-tertiary text-secondary font-medium shrink-0\",\n overlapClass,\n badgeSize\n )}\n style={{ zIndex: 0 }}\n aria-hidden\n >\n +{overflowCount}\n </span>\n )}\n {addMore && (\n <button\n type=\"button\"\n onClick={onAddMore}\n className={cn(\n \"inline-flex items-center justify-center rounded-full border-2 border-dashed border-strong bg-transparent text-icon-tertiary shrink-0 transition-colors hover:bg-tertiary hover:border-strong focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n overlapClass,\n badgeSize\n )}\n aria-label=\"Add member\"\n >\n <Icon name=\"add\" size={iconSize} filled aria-hidden />\n </button>\n )}\n </div>\n );\n }\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport { AvatarGroup, type AvatarGroupSize };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Avatar, type AvatarProps } from \"./avatar\";\nimport { Icon, type IconProps } from \"./icon\";\n\n/** Ensures badge slot icons render filled (Material Symbols). */\nfunction withFilledIcon(node: React.ReactNode): React.ReactNode {\n if (React.isValidElement(node) && node.type === Icon) {\n return React.cloneElement(node as React.ReactElement<IconProps>, {\n filled: true,\n });\n }\n return node;\n}\n\nconst avatarProfileVariants = cva(\n \"relative inline-flex shrink-0 border-2 border-subtract shadow-sm\",\n {\n variants: {\n shape: {\n circle: \"rounded-full\",\n rounded: \"rounded-md\",\n },\n },\n defaultVariants: {\n shape: \"circle\",\n },\n }\n);\n\n/** Badge slot: Figma 4207-3135 — colored circle (bg-brand) + thin light ring (border-subtract) + white icon (text-on-color). */\nconst badgeSlotClasses =\n \"absolute flex items-center justify-center rounded-full shrink-0 overflow-hidden z-10 box-border \" +\n \"border-2 border-subtract bg-brand text-on-color w-xl h-xl min-w-xl min-h-xl\";\n\nexport type AvatarProfileProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof avatarProfileVariants> & {\n /** Avatar size. Passed through to the inner Avatar. */\n size?: AvatarProps[\"size\"];\n /** Initials to display in the inner Avatar. */\n initials?: AvatarProps[\"initials\"];\n /** Optional content for the top-right badge (e.g. edit icon). Use Icon from @banhatten/ui (Material Symbols); icons are forced to filled. */\n topRight?: React.ReactNode;\n /** Optional content for the bottom-right badge (e.g. status or verified icon). Use Icon from @banhatten/ui (Material Symbols); icons are forced to filled. */\n bottomRight?: React.ReactNode;\n };\n\nconst AvatarProfile = React.forwardRef<HTMLDivElement, AvatarProfileProps>(\n (\n {\n className,\n shape,\n size = \"md\",\n initials,\n \"aria-label\": ariaLabel,\n topRight,\n bottomRight,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(avatarProfileVariants({ shape }), className)}\n {...props}\n >\n <Avatar\n shape={shape ?? \"circle\"}\n size={size}\n initials={initials}\n aria-label={ariaLabel}\n className=\"shrink-0\"\n />\n {topRight != null && (\n <div\n className={cn(\n badgeSlotClasses,\n \"top-0 right-0 translate-x-1/2 -translate-y-1/2\"\n )}\n aria-hidden\n >\n {withFilledIcon(topRight)}\n </div>\n )}\n {bottomRight != null && (\n <div\n className={cn(\n badgeSlotClasses,\n \"bottom-0 right-0 translate-x-1/2 translate-y-1/2\"\n )}\n aria-hidden\n >\n {withFilledIcon(bottomRight)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAvatarProfile.displayName = \"AvatarProfile\";\n\nexport { AvatarProfile, avatarProfileVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps, type IconSize } from \"./icon\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full font-medium shrink-0 gap-1\",\n {\n variants: {\n variant: {\n filled: \"\",\n light: \"border\",\n outlined: \"border bg-transparent\",\n },\n color: {\n brand: \"\",\n neutral: \"\",\n success: \"\",\n warning: \"\",\n danger: \"\",\n info: \"\",\n },\n size: {\n sm: \"h-6 px-sm text-xs leading-4\",\n lg: \"h-7 px-md text-sm leading-5\",\n },\n },\n compoundVariants: [\n // Filled variants\n {\n variant: \"filled\",\n color: \"brand\",\n className: \"bg-brand text-on-color\",\n },\n {\n variant: \"filled\",\n color: \"neutral\",\n className: \"bg-brand-neutral-700 text-on-color\",\n },\n {\n variant: \"filled\",\n color: \"success\",\n className: \"bg-success text-on-color\",\n },\n {\n variant: \"filled\",\n color: \"warning\",\n className: \"bg-warning text-on-color\",\n },\n {\n variant: \"filled\",\n color: \"danger\",\n className: \"bg-danger text-on-color\",\n },\n {\n variant: \"filled\",\n color: \"info\",\n className: \"bg-info text-on-color\",\n },\n\n // Light variants\n {\n variant: \"light\",\n color: \"brand\",\n className: \"bg-brand-tertiary border-brand-secondary text-brand\",\n },\n {\n variant: \"light\",\n color: \"neutral\",\n className: \"bg-secondary border-strong text-primary\",\n },\n {\n variant: \"light\",\n color: \"success\",\n className: \"bg-success-tertiary border-success-secondary text-success-strong\",\n },\n {\n variant: \"light\",\n color: \"warning\",\n className: \"bg-warning-tertiary border-warning-secondary text-warning-strong\",\n },\n {\n variant: \"light\",\n color: \"danger\",\n className: \"bg-danger-tertiary border-danger-secondary text-danger-strong\",\n },\n {\n variant: \"light\",\n color: \"info\",\n className: \"bg-info-tertiary border-info-subtle text-info-strong\",\n },\n\n // Outlined variants\n {\n variant: \"outlined\",\n color: \"brand\",\n className: \"border-brand text-brand\",\n },\n {\n variant: \"outlined\",\n color: \"neutral\",\n className: \"border-strong text-primary\",\n },\n {\n variant: \"outlined\",\n color: \"success\",\n className: \"border-success text-success\",\n },\n {\n variant: \"outlined\",\n color: \"warning\",\n className: \"border-warning text-warning-strong\",\n },\n {\n variant: \"outlined\",\n color: \"danger\",\n className: \"border-danger text-danger\",\n },\n {\n variant: \"outlined\",\n color: \"info\",\n className: \"border-info text-info\",\n },\n ],\n defaultVariants: {\n variant: \"light\",\n color: \"brand\",\n size: \"sm\",\n },\n }\n);\n\n/** Maps badge size to appropriate icon size */\nconst badgeSizeToIconSize: Record<\n NonNullable<BadgeProps[\"size\"]>,\n IconSize\n> = {\n sm: \"xs\",\n lg: \"sm\",\n};\n\nexport interface BadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n VariantProps<typeof badgeVariants> {\n /** Render a small status dot before the badge content */\n withDot?: boolean;\n /** Material Symbol name for left icon (e.g. \"info\", \"check\") */\n leftIcon?: string;\n /** Material Symbol name for right icon (e.g. \"close\", \"chevron_right\") */\n rightIcon?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icons */\n iconFilled?: boolean;\n}\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n className,\n variant,\n color,\n size = \"sm\",\n withDot,\n leftIcon,\n rightIcon,\n iconVariant,\n iconFilled,\n children,\n ...props\n },\n ref\n ) => {\n const iconSize = badgeSizeToIconSize[size ?? \"sm\"];\n\n const dotElement = withDot ? (\n <span\n className=\"inline-block size-1.5 rounded-full bg-current\"\n aria-hidden=\"true\"\n />\n ) : null;\n\n const leftIconElement = leftIcon ? (\n <Icon\n name={leftIcon}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n aria-hidden\n />\n ) : null;\n\n const rightIconElement = rightIcon ? (\n <Icon\n name={rightIcon}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n aria-hidden\n />\n ) : null;\n\n return (\n <span\n ref={ref}\n className={cn(badgeVariants({ variant, color, size }), className)}\n {...props}\n >\n {dotElement}\n {leftIconElement}\n {children}\n {rightIconElement}\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\n\nconst breadcrumbListVariants = cva(\"flex flex-wrap items-center gap-xs\", {\n variants: {\n containerStyle: {\n default: \"\",\n withBackground:\n \"rounded-sm border border-default bg-primary p-md\",\n },\n },\n defaultVariants: {\n containerStyle: \"default\",\n },\n});\n\nconst breadcrumbSeparatorVariants = cva(\n \"flex items-center shrink-0 text-inactive\",\n {\n variants: {\n separator: {\n slash: \"px-xs text-sm font-normal\",\n chevron: \"[&_.breadcrumb-sep-icon]:text-icon-inactive\",\n },\n },\n defaultVariants: {\n separator: \"chevron\",\n },\n }\n);\n\nexport interface BreadcrumbProps\n extends React.HTMLAttributes<HTMLElement> {}\n\nconst Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(className)}\n {...props}\n />\n )\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport interface BreadcrumbListProps\n extends React.OlHTMLAttributes<HTMLOListElement>,\n VariantProps<typeof breadcrumbListVariants> {}\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, BreadcrumbListProps>(\n ({ className, containerStyle, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(breadcrumbListVariants({ containerStyle }), className)}\n {...props}\n />\n )\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport interface BreadcrumbListItemProps\n extends React.LiHTMLAttributes<HTMLLIElement> {}\n\nconst BreadcrumbListItem = React.forwardRef<\n HTMLLIElement,\n BreadcrumbListItemProps\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"inline-flex items-center gap-xs\", className)}\n {...props}\n />\n));\nBreadcrumbListItem.displayName = \"BreadcrumbListItem\";\n\nexport interface BreadcrumbSeparatorProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof breadcrumbSeparatorVariants> {}\n\nconst BreadcrumbSeparator = React.forwardRef<\n HTMLSpanElement,\n BreadcrumbSeparatorProps\n>(({ className, separator = \"chevron\", ...props }, ref) => (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden\n className={cn(breadcrumbSeparatorVariants({ separator }), className)}\n {...props}\n >\n {separator === \"slash\" ? (\n \"/\"\n ) : (\n <Icon\n name=\"chevron_right\"\n size=\"sm\"\n aria-hidden\n className=\"breadcrumb-sep-icon\"\n />\n )}\n </span>\n));\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbListItem,\n BreadcrumbSeparator,\n breadcrumbListVariants,\n breadcrumbSeparatorVariants,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\n\nconst breadcrumbItemVariants = cva(\n \"inline-flex text-sm items-center gap-xs rounded-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2 [&_.breadcrumb-icon]:shrink-0\",\n {\n variants: {\n variant: {\n iconText: \"min-w-0\",\n iconOnly: \"\",\n overflow: \"min-w-0\",\n },\n state: {\n default:\n \"text-secondary [&_.breadcrumb-icon]:text-icon-secondary hover:text-tertiary-hover hover:[&_.breadcrumb-icon]:text-icon-tertiary-hover\",\n active:\n \"text-primary font-medium [&_.breadcrumb-icon]:text-icon-primary\",\n disabled:\n \"text-inactive [&_.breadcrumb-icon]:text-icon-inactive-subtle cursor-default pointer-events-none\",\n },\n overflowHover: {\n true: \"hover:bg-tertiary\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n variant: \"overflow\",\n overflowHover: true,\n state: \"default\",\n className:\n \"hover:bg-tertiary hover:text-secondary-hover hover:[&_.breadcrumb-icon]:text-icon-secondary-hover\",\n },\n ],\n defaultVariants: {\n variant: \"iconText\",\n state: \"default\",\n overflowHover: false,\n },\n }\n);\n\nexport interface BreadcrumbItemProps\n extends Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement> &\n React.HTMLAttributes<HTMLSpanElement>,\n \"children\"\n >,\n VariantProps<typeof breadcrumbItemVariants> {\n /** Visual style: icon with label, icon only, or overflow (ellipsis). */\n variant?: \"iconText\" | \"iconOnly\" | \"overflow\";\n /** Current page / active state. Renders as span with aria-current=\"page\". */\n active?: boolean;\n /** Disabled state. Renders as span with aria-disabled=\"true\". */\n disabled?: boolean;\n /** Material Symbol name (e.g. \"home\", \"folder\"). Ignored when variant=\"overflow\"; overflow uses \"more_horiz\". */\n icon?: string;\n /** Label text. Shown when variant is \"iconText\". */\n children?: React.ReactNode;\n /** When provided, item renders as <a href=\"...\">. Omit for current page or overflow trigger. */\n href?: string;\n}\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLAnchorElement | HTMLSpanElement,\n BreadcrumbItemProps\n>(\n (\n {\n className,\n variant: styleVariant = \"iconText\",\n state,\n overflowHover,\n active = false,\n disabled = false,\n icon,\n href,\n children,\n ...props\n },\n ref\n ) => {\n const derivedState = state\n ? state\n : disabled\n ? \"disabled\"\n : active\n ? \"active\"\n : \"default\";\n\n const showOverflowHover =\n overflowHover ?? (styleVariant === \"overflow\" && derivedState === \"default\");\n\n const iconName =\n styleVariant === \"overflow\" ? \"more_horiz\" : icon ?? \"home\";\n\n const classes = cn(\n breadcrumbItemVariants({\n variant: styleVariant,\n state: derivedState,\n overflowHover: showOverflowHover,\n }),\n className\n );\n\n const iconElement =\n styleVariant !== \"overflow\" || iconName ? (\n <Icon\n name={iconName}\n size=\"sm\"\n filled={derivedState === \"active\"}\n aria-hidden\n className=\"breadcrumb-icon\"\n />\n ) : null;\n\n const labelContent =\n styleVariant === \"iconText\" && children != null ? (\n <span className=\"truncate\">{children}</span>\n ) : (styleVariant === \"iconOnly\" || styleVariant === \"overflow\") &&\n children != null ? (\n <span className=\"sr-only\">{children}</span>\n ) : null;\n\n if (disabled) {\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={classes}\n aria-disabled=\"true\"\n {...(props as React.HTMLAttributes<HTMLSpanElement>)}\n >\n {iconElement}\n {labelContent}\n </span>\n );\n }\n\n if (active || !href) {\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={classes}\n aria-current={active ? \"page\" : undefined}\n {...(props as React.HTMLAttributes<HTMLSpanElement>)}\n >\n {iconElement}\n {labelContent}\n </span>\n );\n }\n\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n className={classes}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {iconElement}\n {labelContent}\n </a>\n );\n }\n);\n\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport { BreadcrumbItem, breadcrumbItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconSize } from \"./icon\";\n\nconst buttonGroupItemVariants = cva(\n \"inline-flex items-center justify-center shrink-0 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2 disabled:pointer-events-none\",\n {\n variants: {\n size: {\n small: \"h-9 px-md gap-0.5 text-sm\",\n medium: \"h-10 px-lg gap-1 text-sm\",\n },\n type: {\n textAndIcon: \"\",\n textOnly: \"\",\n iconOnly: \"\",\n },\n selected: {\n true: \"bg-brand-tertiary text-brand\",\n false:\n \"bg-transparent text-primary hover:bg-tertiary disabled:text-inactive disabled:bg-inactive\",\n },\n },\n compoundVariants: [\n {\n type: \"iconOnly\",\n size: \"small\",\n className: \"w-9 px-0\",\n },\n {\n type: \"iconOnly\",\n size: \"medium\",\n className: \"w-10 px-0\",\n },\n ],\n defaultVariants: {\n size: \"medium\",\n type: \"textAndIcon\",\n selected: false,\n },\n }\n);\n\nconst sizeToIconSize: Record<\"small\" | \"medium\", IconSize> = {\n small: \"sm\",\n medium: \"md\",\n};\n\nexport interface ButtonGroupItemProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"type\">,\n VariantProps<typeof buttonGroupItemVariants> {\n /** Material Symbol name for left icon (e.g. \"add\"). Used when type is \"textAndIcon\". */\n leftIcon?: string;\n /** Material Symbol name for right icon (e.g. \"chevron_right\"). Used when type is \"textAndIcon\". */\n rightIcon?: string;\n /** Material Symbol name for icon-only item. Used when type is \"iconOnly\". Requires aria-label for accessibility. */\n icon?: string;\n /** When true, shows selected state (bg-brand-tertiary, text-brand, border). Sets aria-current=\"true\". */\n selected?: boolean;\n /** Position inside a ButtonGroup. Middle items get no border rounding when selected. Set by ButtonGroup automatically. */\n position?: \"first\" | \"middle\" | \"last\" | \"only\";\n}\n\nconst ButtonGroupItem = React.forwardRef<\n HTMLButtonElement,\n ButtonGroupItemProps\n>(\n (\n {\n className,\n size = \"medium\",\n type = \"textAndIcon\",\n selected = false,\n position,\n leftIcon,\n rightIcon,\n icon,\n children,\n disabled,\n \"aria-current\": ariaCurrent,\n ...props\n },\n ref\n ) => {\n const iconSize = sizeToIconSize[size ?? \"medium\"];\n /* Position drives rounding and the left-border divider between items */\n const positionClass =\n position === \"first\"\n ? \"rounded-l-sm rounded-r-none\"\n : position === \"middle\"\n ? \"rounded-none border-l border-strong\"\n : position === \"last\"\n ? \"rounded-r-sm rounded-l-none border-l border-strong\"\n : \"rounded-sm\";\n const iconColorClass = selected\n ? \"text-icon-brand\"\n : disabled\n ? \"text-icon-inactive\"\n : \"text-icon-primary\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n buttonGroupItemVariants({ size, type, selected }),\n positionClass,\n className\n )}\n disabled={disabled}\n aria-current={selected ? \"true\" : ariaCurrent}\n aria-disabled={disabled}\n {...props}\n >\n {type === \"textAndIcon\" && leftIcon && (\n <Icon name={leftIcon} size={iconSize} className={iconColorClass} aria-hidden />\n )}\n {type === \"iconOnly\" && icon && (\n <Icon name={icon} size={iconSize} className={iconColorClass} aria-hidden />\n )}\n {type !== \"iconOnly\" && (\n <span className=\"inline-grid [&>*]:col-start-1 [&>*]:row-start-1\">\n {/* Invisible bold copy reserves width so font-medium on selected doesn't cause shift */}\n <span className=\"invisible font-medium\" aria-hidden>\n {children}\n </span>\n <span className={selected ? \"font-medium\" : \"font-normal\"}>\n {children}\n </span>\n </span>\n )}\n {type === \"textAndIcon\" && rightIcon && (\n <Icon name={rightIcon} size={iconSize} className={iconColorClass} aria-hidden />\n )}\n </button>\n );\n }\n);\n\nButtonGroupItem.displayName = \"ButtonGroupItem\";\n\nexport { ButtonGroupItem, buttonGroupItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst buttonGroupVariants = cva(\n \"inline-flex flex-row items-stretch rounded-sm border border-strong bg-primary overflow-hidden\"\n);\n\nexport type ButtonGroupSize = \"small\" | \"medium\";\n\nexport interface ButtonGroupProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof buttonGroupVariants> {\n /** ButtonGroupItem components. */\n children: React.ReactNode;\n /** Size of the group. Passed to each ButtonGroupItem so all items share the same size. Default: \"medium\". */\n size?: ButtonGroupSize;\n}\n\nfunction getPosition(index: number, total: number): \"first\" | \"middle\" | \"last\" | \"only\" {\n if (total <= 1) return \"only\";\n if (index === 0) return \"first\";\n if (index === total - 1) return \"last\";\n return \"middle\";\n}\n\nconst ButtonGroup = React.forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ className, size = \"medium\", children, ...props }, ref) => {\n const items = React.Children.toArray(children).filter(Boolean);\n const total = items.length;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n className={cn(buttonGroupVariants(), className)}\n {...props}\n >\n {items.map((child, index) => {\n const position = getPosition(index, total);\n const childProps = React.isValidElement(child)\n ? (child.props as { size?: ButtonGroupSize })\n : {};\n const injectedProps = {\n position,\n ...(childProps.size === undefined ? { size } : {}),\n };\n return React.isValidElement(child) && typeof child.type !== \"string\"\n ? React.cloneElement(\n child as React.ReactElement<{\n position?: \"first\" | \"middle\" | \"last\" | \"only\";\n size?: ButtonGroupSize;\n }>,\n injectedProps\n )\n : child;\n })}\n </div>\n );\n }\n);\n\nButtonGroup.displayName = \"ButtonGroup\";\n\nexport { ButtonGroup, buttonGroupVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconSize } from \"./icon\";\n\nconst featuredIconVariants = cva(\n \"inline-flex shrink-0 items-center justify-center\",\n {\n variants: {\n variant: {\n \"circle-light\": \"rounded-full\",\n \"square-light\": \"rounded-lg\",\n \"circle-pulse\": \"rounded-full\",\n \"solid-circle\": \"rounded-full\",\n \"solid-square\": \"rounded-lg\",\n },\n type: {\n brand: \"\",\n success: \"\",\n danger: \"\",\n warning: \"\",\n neutral: \"\",\n },\n size: {\n sm: \"p-sm\",\n md: \"p-md\",\n lg: \"p-lg\",\n },\n },\n compoundVariants: [\n // Circle light + type (light bg, colored icon)\n { variant: \"circle-light\", type: \"brand\", className: \"bg-brand-tertiary text-brand\" },\n { variant: \"circle-light\", type: \"success\", className: \"bg-success-tertiary text-success\" },\n { variant: \"circle-light\", type: \"danger\", className: \"bg-danger-tertiary text-danger\" },\n { variant: \"circle-light\", type: \"warning\", className: \"bg-warning-tertiary text-warning\" },\n { variant: \"circle-light\", type: \"neutral\", className: \"bg-tertiary text-secondary\" },\n // Square light + type\n { variant: \"square-light\", type: \"brand\", className: \"bg-brand-tertiary text-brand\" },\n { variant: \"square-light\", type: \"success\", className: \"bg-success-tertiary text-success\" },\n { variant: \"square-light\", type: \"danger\", className: \"bg-danger-tertiary text-danger\" },\n { variant: \"square-light\", type: \"warning\", className: \"bg-warning-tertiary text-warning\" },\n { variant: \"square-light\", type: \"neutral\", className: \"bg-tertiary text-secondary\" },\n // Circle pulse + type (solid bg, on-color icon, glow, 8px border)\n { variant: \"circle-pulse\", type: \"brand\", className: \"border-8 border-brand-tertiary bg-brand-secondary text-brand\" },\n { variant: \"circle-pulse\", type: \"success\", className: \"border-8 border-success-tertiary bg-success-secondary text-success\" },\n { variant: \"circle-pulse\", type: \"danger\", className: \"border-8 border-danger-tertiary bg-danger-secondary text-danger\" },\n { variant: \"circle-pulse\", type: \"warning\", className: \"border-8 border-warning-tertiary bg-warning-secondary text-warning\" },\n { variant: \"circle-pulse\", type: \"neutral\", className: \"border-8 border-secondary bg-quarterary text-secondary\" },\n // Solid circle + type\n { variant: \"solid-circle\", type: \"brand\", className: \"bg-brand text-on-color\" },\n { variant: \"solid-circle\", type: \"success\", className: \"bg-success text-on-color\" },\n { variant: \"solid-circle\", type: \"danger\", className: \"bg-danger text-on-color\" },\n { variant: \"solid-circle\", type: \"warning\", className: \"bg-warning text-on-color\" },\n { variant: \"solid-circle\", type: \"neutral\", className: \"bg-primary-inverse text-on-color\" },\n // Solid square + type\n { variant: \"solid-square\", type: \"brand\", className: \"bg-brand text-on-color\" },\n { variant: \"solid-square\", type: \"success\", className: \"bg-success text-on-color\" },\n { variant: \"solid-square\", type: \"danger\", className: \"bg-danger text-on-color\" },\n { variant: \"solid-square\", type: \"warning\", className: \"bg-warning text-on-color\" },\n { variant: \"solid-square\", type: \"neutral\", className: \"bg-primary-inverse text-on-color\" },\n ],\n defaultVariants: {\n variant: \"solid-circle\",\n type: \"brand\",\n size: \"md\",\n },\n }\n);\n\n/** Featured icon size → icon size: sm→md, md→lg, lg→xl */\nconst featuredSizeToIconSize: Record<\"sm\" | \"md\" | \"lg\", IconSize> = {\n sm: \"md\",\n md: \"lg\",\n lg: \"xl\",\n};\n\nexport interface FeaturedIconProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n VariantProps<typeof featuredIconVariants> {\n /** Material Symbol name in snake_case (e.g. \"info\", \"check_circle\", \"warning\") */\n name: string;\n /** Accessible label when the icon conveys meaning. If omitted, treated as decorative (aria-hidden). */\n label?: string;\n}\n\nconst FeaturedIcon = React.forwardRef<HTMLSpanElement, FeaturedIconProps>(\n (\n {\n className,\n variant,\n type,\n size = \"md\",\n name,\n label,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n featuredIconVariants({ variant, type, size }),\n className\n )}\n role={label ? \"img\" : undefined}\n aria-label={label}\n aria-hidden={!label}\n {...props}\n >\n <Icon name={name} size={featuredSizeToIconSize[size ?? \"md\"]} filled />\n </span>\n );\n }\n);\n\nFeaturedIcon.displayName = \"FeaturedIcon\";\n\nexport { FeaturedIcon, featuredIconVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\n\nconst progressBarTrackVariants = cva(\n \"w-full overflow-hidden rounded-sm bg-tertiary\",\n {\n variants: {\n size: {\n sm: \"h-1\",\n lg: \"h-2\",\n },\n },\n defaultVariants: {\n size: \"sm\",\n },\n }\n);\n\nconst progressBarFillVariants = cva(\"h-full rounded-sm shrink-0\", {\n variants: {\n color: {\n brand: \"bg-brand\",\n success: \"bg-success\",\n danger: \"bg-danger\",\n info: \"bg-info\",\n neutral: \"bg-quarterary\",\n },\n },\n defaultVariants: {\n color: \"brand\",\n },\n});\n\nexport interface ProgressBarProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\" | \"color\">,\n VariantProps<typeof progressBarTrackVariants>,\n VariantProps<typeof progressBarFillVariants> {\n /** Progress value 0–100. Omit for indeterminate (animated) state. */\n value?: number;\n /** Optional label above the bar (e.g. \"Label (Optional)\"). */\n label?: React.ReactNode;\n /** Optional info icon shown next to the label. */\n showLabelInfoIcon?: boolean;\n /** Optional helper text below the bar. */\n helperText?: React.ReactNode;\n /** Whether to show the numeric value (e.g. \"40%\") beside the bar. */\n showValue?: boolean;\n /** Callback for the optional refresh icon button. When set, a refresh icon is shown next to the value. */\n onRefresh?: () => void;\n /** Accessible name for the progress bar when no visible label is provided. */\n \"aria-label\"?: string;\n}\n\nconst ProgressBar = React.forwardRef<HTMLDivElement, ProgressBarProps>(\n (\n {\n className,\n size = \"sm\",\n color = \"brand\",\n value,\n label,\n showLabelInfoIcon = false,\n helperText,\n showValue = false,\n onRefresh,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const isIndeterminate = value === undefined;\n const clampedValue = isIndeterminate\n ? undefined\n : Math.min(100, Math.max(0, value));\n const valueText =\n clampedValue !== undefined ? `${Math.round(clampedValue)}%` : undefined;\n\n const barId = React.useId();\n const labelId = `${barId}-label`;\n const helperId = `${barId}-helper`;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n className={cn(\"flex min-w-0 flex-col\", className)}\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={helperText ? helperId : undefined}\n {...props}\n >\n {label && (\n <div\n id={labelId}\n className=\"flex items-center gap-xs text-sm font-medium text-primary mb-sm\"\n >\n {label}\n {showLabelInfoIcon && (\n <Icon\n name=\"info\"\n size=\"xs\"\n className=\"text-icon-tertiary\"\n aria-hidden\n />\n )}\n </div>\n )}\n\n <div\n id={barId}\n role=\"progressbar\"\n aria-valuenow={isIndeterminate ? undefined : clampedValue}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? \"Loading\" : valueText}\n aria-label={ariaLabel}\n className=\"flex min-w-0 items-center gap-md\"\n >\n <div\n className={cn(\n \"min-w-0 flex-1\",\n progressBarTrackVariants({ size })\n )}\n >\n <div\n className={cn(\n progressBarFillVariants({ color }),\n isIndeterminate\n ? \"w-[40%] min-w-[40%] animate-pulse\"\n : \"min-w-0\"\n )}\n style={\n !isIndeterminate && clampedValue !== undefined\n ? { width: `${clampedValue}%` }\n : undefined\n }\n />\n </div>\n {showValue && !isIndeterminate && (\n <div className=\"flex items-center gap-1 text-sm text-secondary shrink-0\">\n <span aria-hidden>{valueText}</span>\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n className=\"rounded-sm p-xxs text-icon-secondary hover:text-icon-primary hover:bg-tertiary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-1\"\n aria-label=\"Refresh\"\n >\n <Icon name=\"refresh\" size=\"xs\" aria-hidden />\n </button>\n )}\n </div>\n )}\n </div>\n\n {helperText && (\n <p\n id={helperId}\n className=\"mt-sm text-sm text-secondary\"\n role=\"status\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nProgressBar.displayName = \"ProgressBar\";\n\nexport { ProgressBar, progressBarTrackVariants, progressBarFillVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\nimport { Toggle } from \"./toggle\";\nimport { ProgressBar } from \"./progress-bar\";\n\n/* Slots use design-system components: Icon (left/right), Toggle (switch), Badge, Avatar, Button (CTA), ProgressBar — consumer passes as ReactNode where applicable. */\n\n/* ── CVA ──\n * Token-only: spacing (px-md, py-sm, gap-md), radius (rounded-sm),\n * bg (hover:bg-tertiary), text (text-primary, text-secondary, text-inactive),\n * icon (text-icon-secondary, text-icon-inactive-subtle).\n */\n\nconst menuItemVariants = cva(\n \"flex items-center w-full gap-md rounded-sm px-md py-sm text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n {\n variants: {\n disabled: {\n true: \"cursor-default opacity-50 pointer-events-none [&_*]:pointer-events-none\",\n false: \"cursor-pointer hover:bg-tertiary\",\n },\n active: {\n true: \"bg-brand-tertiary text-brand font-medium\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n active: false,\n },\n }\n);\n\n/** Prevent switch interactions from triggering the parent button. */\nconst stopPropagation = (e: React.SyntheticEvent) => e.stopPropagation();\n\nexport type MenuItemType = \"default\" | \"multiline\" | \"callToAction\" | \"progress\";\n\nexport interface MenuItemProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"type\"\n >,\n Omit<VariantProps<typeof menuItemVariants>, \"disabled\"> {\n /** Menu item type. Default: \"default\". */\n type?: MenuItemType;\n /** When true, shows selected/current state (bg-brand-tertiary, text-brand). Sets aria-current=\"page\". Default: false. */\n active?: boolean;\n /** Primary content (e.g. \"Text item\"). */\n children?: React.ReactNode;\n /** Supporting text below primary (multiline / callToAction). */\n supportingText?: React.ReactNode;\n /** Material Symbol name for left icon (e.g. \"add\"). */\n leftIcon?: string;\n /** Material Symbol name for right icon (e.g. \"chevron_right\"). */\n rightIcon?: string;\n /** Avatar slot (use Avatar component). */\n avatar?: React.ReactNode;\n /** Badge slot (use Badge component). */\n badge?: React.ReactNode;\n /** Show switch; use with switchChecked and onSwitchChange. */\n showSwitch?: boolean;\n /** Controlled switch state. */\n switchChecked?: boolean;\n /** Switch change handler. */\n onSwitchChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Supporting text on the right (default / multiline). */\n textRight?: React.ReactNode;\n /** CTA button slot (use Button; for type=\"callToAction\"). */\n cta?: React.ReactNode;\n /** Progress type: label above the bar. */\n progressLabel?: React.ReactNode;\n /** Progress type: value 0–100. */\n progressValue?: number;\n}\n\nconst MenuItem = React.forwardRef<HTMLButtonElement, MenuItemProps>(\n (\n {\n className,\n type: typeVariant = \"default\",\n disabled = false,\n active = false,\n children,\n supportingText,\n leftIcon,\n rightIcon,\n avatar,\n badge,\n showSwitch = false,\n switchChecked,\n onSwitchChange,\n textRight,\n cta,\n progressLabel,\n progressValue,\n ...props\n },\n ref\n ) => {\n const isMultiline =\n typeVariant === \"multiline\" || typeVariant === \"callToAction\";\n const isProgress = typeVariant === \"progress\";\n\n /* ── Left section ── */\n\n const leftSection =\n leftIcon || avatar ? (\n <span className=\"flex shrink-0 items-center gap-md\">\n {leftIcon && (\n <Icon\n name={leftIcon}\n size=\"sm\"\n className={disabled ? \"text-icon-inactive-subtle\" : \"text-icon-secondary\"}\n aria-hidden\n />\n )}\n {avatar}\n </span>\n ) : null;\n\n /* ── Center section ── */\n\n const centerSection = isProgress ? (\n <span className=\"min-w-0 flex-1\">\n <ProgressBar\n label={progressLabel}\n value={progressValue}\n showValue\n size=\"sm\"\n className=\"mb-0\"\n />\n </span>\n ) : (\n <span\n className={cn(\n \"min-w-0 flex-1\",\n isMultiline && \"flex flex-col gap-xxs\"\n )}\n >\n {children != null && (\n <span\n className={cn(\n \"text-sm font-medium leading-5\",\n disabled ? \"text-inactive\" : \"text-primary\"\n )}\n >\n {children}\n </span>\n )}\n {isMultiline && supportingText != null && (\n <span\n className={cn(\n \"text-sm leading-5\",\n disabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {supportingText}\n </span>\n )}\n </span>\n );\n\n /* ── Right section (never rendered for progress type) ── */\n\n const rightSection = isProgress ? null : (\n <>\n {badge}\n {showSwitch && (\n <span\n role=\"presentation\"\n onPointerDown={stopPropagation}\n onClick={stopPropagation}\n >\n <Toggle\n size=\"sm\"\n togglePosition=\"trailing\"\n checked={switchChecked}\n onChange={onSwitchChange}\n disabled={disabled}\n aria-label={typeof children === \"string\" ? `Toggle ${children}` : \"Toggle\"}\n />\n </span>\n )}\n {textRight != null && (\n <span\n className={cn(\n \"text-sm\",\n disabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {textRight}\n </span>\n )}\n {rightIcon && (\n <Icon\n name={rightIcon}\n size=\"sm\"\n className={disabled ? \"text-icon-inactive-subtle\" : \"text-icon-secondary\"}\n aria-hidden\n />\n )}\n {typeVariant === \"callToAction\" && cta}\n </>\n );\n\n const hasRightContent =\n rightSection !== null &&\n (!!badge || showSwitch || !!textRight || !!rightIcon || (typeVariant === \"callToAction\" && !!cta));\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(menuItemVariants({ disabled, active }), className)}\n aria-disabled={disabled}\n aria-current={active ? \"page\" : undefined}\n {...props}\n >\n {leftSection}\n {centerSection}\n {hasRightContent && (\n <span className=\"flex shrink-0 items-center gap-md\">\n {rightSection}\n </span>\n )}\n </button>\n );\n }\n);\n\nMenuItem.displayName = \"MenuItem\";\n\nexport { MenuItem, menuItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\n\n/* ── CVA ── */\n\nconst toggleVariants = cva(\n \"relative inline-flex shrink-0 rounded-full p-0.5 transition-colors\",\n {\n variants: {\n size: {\n sm: \"h-5 w-8\",\n md: \"h-6 w-10\",\n },\n active: {\n true: \"bg-component-toggle-brand-bg hover:bg-component-toggle-brand-bg-hover\",\n false: \"bg-quarterary hover:bg-quarterary/80\",\n },\n disabled: {\n true: \"bg-inactive-subtle hover:bg-inactive-subtle\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n active: false,\n disabled: false,\n },\n }\n);\n\nconst thumbVariants = cva(\n \"pointer-events-none absolute top-1/2 -translate-y-1/2 flex items-center justify-center rounded-full bg-primary shadow-md transition-transform\",\n {\n variants: {\n size: {\n sm: \"left-0.5 size-3.5 data-[state=on]:translate-x-3\",\n md: \"left-0.5 size-5 data-[state=on]:translate-x-4\",\n },\n disabled: {\n true: \"bg-quarterary shadow-none\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n disabled: false,\n },\n }\n);\n\n/* ── Props ── */\n\nexport interface ToggleProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"children\"\n > {\n /** Label text displayed next to the toggle */\n label?: string;\n /** Support text displayed below the label */\n supportText?: string;\n /** Position of the toggle relative to the label. Default: \"trailing\" */\n togglePosition?: \"leading\" | \"trailing\";\n /** Size of the toggle. Default: \"md\" */\n size?: \"sm\" | \"md\";\n /** When true, shows a check icon when on and a close icon when off */\n withIcon?: boolean;\n}\n\n/* ── Component ── */\n\nconst Toggle = React.forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n className,\n label,\n supportText,\n togglePosition = \"trailing\",\n size = \"md\",\n withIcon = false,\n checked,\n defaultChecked,\n disabled,\n onChange,\n id,\n ...props\n },\n ref\n ) => {\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const inputId = id || React.useId();\n\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? !!checked : internalChecked;\n const isDisabled = !!disabled;\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalChecked(e.target.checked);\n onChange?.(e);\n },\n [isControlled, onChange]\n );\n\n const iconName = isChecked ? \"check\" : \"close\";\n const iconColor = isDisabled\n ? \"text-icon-inactive-subtle\"\n : isChecked\n ? \"text-icon-primary-inverse\"\n : \"text-icon-secondary\";\n\n const switchElement = (\n <span\n className={cn(\n toggleVariants({ size, active: isChecked, disabled: isDisabled }),\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-brand peer-focus-visible:ring-offset-2\"\n )}\n aria-hidden\n >\n <span\n className={thumbVariants({ size, disabled: isDisabled })}\n data-state={isChecked ? \"on\" : \"off\"}\n >\n {withIcon && (\n <Icon\n name={iconName}\n size=\"xs\"\n className={cn(\"pointer-events-none\", iconColor)}\n aria-hidden\n />\n )}\n </span>\n </span>\n );\n\n const labelContent =\n label || supportText ? (\n <span className={cn(\"flex min-w-0 flex-col\", supportText && \"gap-xxs\")}>\n {label && (\n <span\n className={cn(\n \"text-sm font-medium leading-4\",\n isDisabled ? \"text-inactive\" : \"text-primary\"\n )}\n >\n {label}\n </span>\n )}\n {supportText && (\n <span\n className={cn(\n \"text-sm leading-5\",\n isDisabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {supportText}\n </span>\n )}\n </span>\n ) : null;\n\n return (\n <label\n className={cn(\n \"group/toggle inline-flex gap-md\",\n supportText ? \"items-start\" : \"items-center\",\n isDisabled ? \"cursor-default\" : \"cursor-pointer\",\n className\n )}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"peer sr-only\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-checked={isChecked}\n onChange={handleChange}\n {...props}\n />\n {togglePosition === \"leading\" ? (\n <>\n {switchElement}\n {labelContent}\n </>\n ) : (\n <>\n {labelContent}\n {switchElement}\n </>\n )}\n </label>\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\n\nexport { Toggle, toggleVariants, thumbVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\n/* ── CVA ──\n * Token-only: spacing (px-md, py-xs), text (text-tertiary), typography (text-sm font-medium).\n * Non-interactive section label for menu groups.\n */\n\nconst menuHeadingVariants = cva(\n \"px-md py-xs text-sm font-medium text-tertiary\"\n);\n\nexport interface MenuHeadingProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof menuHeadingVariants> {\n /** Heading content (e.g. \"Section header\"). */\n children?: React.ReactNode;\n}\n\nconst MenuHeading = React.forwardRef<HTMLDivElement, MenuHeadingProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(menuHeadingVariants(), className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nMenuHeading.displayName = \"MenuHeading\";\n\nexport { MenuHeading, menuHeadingVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\n/* ── CVA ──\n * Token-only: spacing between heading and items (mb-sm = spacing.sm).\n * Groups one optional MenuHeading and one or more MenuItem children.\n */\n\nconst menuGroupVariants = cva(\"flex flex-col\");\n\nexport interface MenuGroupProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof menuGroupVariants> {\n /** Optional section label (e.g. <MenuHeading>Section header</MenuHeading>). At most one. */\n heading?: React.ReactNode;\n /** One or more menu items (e.g. MenuItem). */\n children: React.ReactNode;\n /** When provided with heading, set on the heading wrapper for role=\"group\" aria-labelledby. */\n headingId?: string;\n}\n\nconst MenuGroup = React.forwardRef<HTMLDivElement, MenuGroupProps>(\n ({ className, heading, children, headingId, ...props }, ref) => {\n const hasHeading = heading != null;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n className={cn(menuGroupVariants(), className)}\n aria-labelledby={hasHeading && headingId ? headingId : undefined}\n {...props}\n >\n {hasHeading && (\n <div\n className=\"mb-sm shrink-0\"\n id={headingId}\n >\n {heading}\n </div>\n )}\n {children}\n </div>\n );\n }\n);\n\nMenuGroup.displayName = \"MenuGroup\";\n\nexport { MenuGroup, menuGroupVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Divider } from \"./divider\";\n\n/* ── CVA ──\n * Token-only: padding (py-md px-sm), radius (rounded-sm), bg (bg-primary), shadow (shadow-sm).\n * Container for one or more MenuGroup; inserts Divider + spacing (my-sm) between groups.\n */\n\nconst menuVariants = cva(\n \"flex flex-col rounded-sm bg-primary py-md px-sm shadow-sm\"\n);\n\nexport interface MenuProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof menuVariants> {\n /** One or more MenuGroup components. Dividers are inserted between each child. */\n children: React.ReactNode;\n}\n\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>(\n ({ className, children, ...props }, ref) => {\n const items = React.Children.toArray(children);\n\n return (\n <div\n ref={ref}\n className={cn(menuVariants(), className)}\n {...props}\n >\n {items.flatMap((child, index) =>\n index === 0\n ? [child]\n : [\n <Divider key={`menu-divider-${index}`} className=\"my-sm\" />,\n child,\n ]\n )}\n </div>\n );\n }\n);\n\nMenu.displayName = \"Menu\";\n\nexport { Menu, menuVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\nimport { useSidebarContext } from \"./sidebar\";\n\n/* ── CVA ──\n * Token-only: spacing (px-md, py-sm, gap-md), radius (rounded-sm),\n * bg (hover:bg-tertiary, active:bg-brand-tertiary), text (text-primary, text-brand),\n * icon (text-icon-secondary, text-icon-brand), border (active: border-l-2 border-brand).\n * Side navigation item; supports expanded (icon + label) and collapsed (icon only) layout.\n * When submenu is provided, shows chevron and expand/collapse of submenu vertically.\n */\n\nconst sidebarMenuItemVariants = cva(\n \"flex items-center w-full gap-md rounded-sm px-md py-sm text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n {\n variants: {\n disabled: {\n true:\n \"cursor-default opacity-50 pointer-events-none [&_*]:pointer-events-none\",\n false: \"cursor-pointer hover:bg-tertiary\",\n },\n active: {\n true: \"bg-brand-tertiary text-brand\",\n false: \"\",\n },\n collapsed: {\n true: \"justify-center px-sm\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n active: false,\n collapsed: false,\n },\n }\n);\n\nexport interface SidebarMenuItemProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"type\"\n >,\n Omit<VariantProps<typeof sidebarMenuItemVariants>, \"disabled\"> {\n /** When true, shows selected/current state. Sets aria-current=\"page\". Default: false. */\n active?: boolean;\n /** When true, shows icon only (for collapsed sidebar). Default: false. */\n collapsed?: boolean;\n /** Label (e.g. \"Dashboard\"). Omitted visually when collapsed; use aria-label when collapsed for accessibility. */\n children?: React.ReactNode;\n /** Material Symbol name for left icon (e.g. \"dashboard\"). When omitted, no icon is shown. */\n leftIcon?: string;\n /** SidebarSubmenuItem children. When present, a chevron is shown and the item expands/collapses vertically. */\n submenu?: React.ReactNode;\n /** Controlled expanded state for submenu. */\n expanded?: boolean;\n /** Called when submenu expand/collapse is toggled (only when submenu is provided). */\n onExpandedChange?: (expanded: boolean) => void;\n /** Default expanded state for submenu when uncontrolled. Default: false. */\n defaultExpanded?: boolean;\n}\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLButtonElement,\n SidebarMenuItemProps\n>(\n (\n {\n className,\n disabled = false,\n active = false,\n collapsed = false,\n children,\n leftIcon,\n submenu,\n expanded: expandedProp,\n onExpandedChange,\n defaultExpanded = false,\n onClick,\n ...props\n },\n ref\n ) => {\n const sidebarContext = useSidebarContext();\n const collapsedResolved =\n collapsed !== undefined ? collapsed : sidebarContext?.collapsed ?? false;\n const [expandedState, setExpandedState] = React.useState(defaultExpanded);\n const expanded =\n expandedProp !== undefined ? expandedProp : expandedState;\n const setExpanded =\n onExpandedChange != null\n ? (value: boolean) => {\n setExpandedState(value);\n onExpandedChange(value);\n }\n : setExpandedState;\n\n const hasSubmenu = submenu != null && React.Children.count(submenu) > 0;\n const submenuId = React.useId();\n const regionId = `${submenuId}-submenu`;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (hasSubmenu) {\n e.preventDefault();\n setExpanded(!expanded);\n }\n onClick?.(e);\n };\n\n const trigger = (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n sidebarMenuItemVariants({\n disabled,\n active,\n collapsed: collapsedResolved,\n }),\n hasSubmenu && !collapsedResolved && \"flex-1\",\n !hasSubmenu && className\n )}\n aria-disabled={disabled}\n aria-current={active ? \"page\" : undefined}\n aria-label={\n collapsedResolved && typeof children === \"string\"\n ? children\n : undefined\n }\n aria-expanded={\n hasSubmenu && !collapsedResolved ? expanded : undefined\n }\n aria-controls={hasSubmenu && !collapsedResolved ? regionId : undefined}\n onClick={handleClick}\n {...props}\n >\n {leftIcon != null && (\n <Icon\n name={leftIcon}\n size=\"sm\"\n className={\n disabled\n ? \"text-icon-inactive-subtle\"\n : active\n ? \"text-icon-brand\"\n : \"text-icon-secondary\"\n }\n aria-hidden\n />\n )}\n {!collapsedResolved && children != null && (\n <span\n className={cn(\n \"min-w-0 flex-1 truncate text-sm font-medium leading-5\",\n disabled ? \"text-inactive\" : active ? \"text-brand\" : \"text-primary\"\n )}\n >\n {children}\n </span>\n )}\n {hasSubmenu && !collapsedResolved && (\n <Icon\n name={expanded ? \"expand_less\" : \"expand_more\"}\n size=\"sm\"\n className={\n disabled\n ? \"text-icon-inactive-subtle\"\n : active\n ? \"text-icon-brand\"\n : \"text-icon-secondary\"\n }\n aria-hidden\n />\n )}\n </button>\n );\n\n if (!hasSubmenu || collapsedResolved) {\n return hasSubmenu && collapsedResolved ? (\n <div className={cn(\"flex flex-col\", className)}>{trigger}</div>\n ) : (\n trigger\n );\n }\n\n return (\n <div className={cn(\"flex flex-col\", className)}>\n {trigger}\n <div\n id={regionId}\n role=\"group\"\n aria-label={typeof children === \"string\" ? `${children} submenu` : \"Submenu\"}\n className={cn(\n \"flex flex-col overflow-hidden transition-[height] duration-200 ease-out\",\n expanded ? \"visible\" : \"hidden\"\n )}\n >\n {submenu}\n </div>\n </div>\n );\n }\n);\n\nSidebarMenuItem.displayName = \"SidebarMenuItem\";\n\nexport { SidebarMenuItem, sidebarMenuItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Divider } from \"./divider\";\nimport { Icon } from \"./icon\";\n\n/* ── CVA ──\n * Token-only: padding (header/content/footer per Figma), radius (rounded-sm),\n * bg (bg-primary), shadow (shadow-sm). Three sections: header (logo), content (scrollable), footer.\n */\n\nconst sidebarVariants = cva(\n \"flex h-full flex-col bg-primary shadow-sm transition-[width] duration-200 ease-out\",\n {\n variants: {\n collapsed: {\n true: \"w-16 min-w-16\",\n false: \"w-64 min-w-64\",\n },\n },\n defaultVariants: {\n collapsed: false,\n },\n }\n);\n\nexport interface SidebarContextValue {\n collapsed: boolean;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nfunction useSidebarContext(): SidebarContextValue | null {\n return React.useContext(SidebarContext);\n}\n\nexport interface SidebarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof sidebarVariants> {\n /** Header content (e.g. logo). Rendered at top; collapse toggle shown only when collapsible. */\n header?: React.ReactNode;\n /** Main content (SidebarMenuItem, SidebarSubmenuItem). Scrollable. */\n children?: React.ReactNode;\n /** Footer content (e.g. Settings, Help, SidebarAccountCard). Rendered at bottom. */\n footer?: React.ReactNode;\n /** When true, sidebar can be collapsed via header toggle. Default: false (expanded only, no button). */\n collapsible?: boolean;\n /** When true, sidebar is collapsed (icon-only). Only used when collapsible. Default: false. */\n collapsed?: boolean;\n /** Called when collapse toggle in header is clicked. Only used when collapsible. */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Default collapsed state when uncontrolled. Only used when collapsible. Default: false. */\n defaultCollapsed?: boolean;\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\n (\n {\n className,\n header,\n children,\n footer,\n collapsible = false,\n collapsed: collapsedProp,\n onCollapsedChange,\n defaultCollapsed = false,\n ...props\n },\n ref\n ) => {\n const [collapsedState, setCollapsedState] = React.useState(defaultCollapsed);\n const collapsed = collapsible\n ? (collapsedProp !== undefined ? collapsedProp : collapsedState)\n : false;\n const setCollapsed =\n collapsible && onCollapsedChange != null\n ? (value: boolean) => {\n setCollapsedState(value);\n onCollapsedChange(value);\n }\n : setCollapsedState;\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({ collapsed }),\n [collapsed]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <aside\n ref={ref}\n aria-label=\"Sidebar\"\n className={cn(\n sidebarVariants({ collapsed }),\n \"rounded-sm\",\n className\n )}\n {...props}\n >\n {/* Header: logo + optional collapse toggle. Token padding: px-md py-md */}\n <div\n className={cn(\n \"flex shrink-0 items-center gap-sm px-2xl py-2xl\",\n collapsible ? \"justify-between\" : \"\"\n )}\n >\n <div className={collapsible ? \"min-w-0 flex-1\" : \"min-w-0\"}>{header}</div>\n {collapsible && (\n <button\n type=\"button\"\n onClick={() => setCollapsed(!collapsed)}\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-icon-secondary transition-colors hover:bg-tertiary hover:text-icon-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\"\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n <Icon\n name={collapsed ? \"chevron_right\" : \"chevron_left\"}\n size=\"sm\"\n aria-hidden\n />\n </button>\n )}\n </div>\n\n <Divider orientation=\"horizontal\" className=\"shrink-0\" />\n\n {/* Content: scrollable, scrollbar hidden. Token padding: px-sm py-md */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto overflow-x-hidden px-xl py-xl [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n {children}\n </div>\n\n {/* Footer: token padding px-sm py-md pt-lg for separation from content */}\n {footer != null && (\n <div className=\"flex shrink-0 flex-col gap-xxs border-t border-secondary px-md py-md pt-lg\">\n {footer}\n </div>\n )}\n </aside>\n </SidebarContext.Provider>\n );\n }\n);\n\nSidebar.displayName = \"Sidebar\";\n\nexport {\n Sidebar,\n sidebarVariants,\n SidebarContext,\n useSidebarContext,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\n/* ── CVA ──\n * Token-only: spacing (pl-xl, px-md, py-sm), radius (rounded-sm),\n * bg (hover:bg-tertiary, active:bg-brand-tertiary), text (text-primary, text-brand).\n * Nested item under SidebarMenuItem; visually indented, no leading icon.\n */\n\nconst sidebarSubmenuItemVariants = cva(\n \"flex w-full items-center rounded-sm pl-xl pr-md py-sm text-secondary text-left text-sm font-regular leading-5 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2\",\n {\n variants: {\n disabled: {\n true:\n \"cursor-default opacity-50 pointer-events-none [&_*]:pointer-events-none\",\n false: \"group cursor-pointer hover:bg-tertiary\",\n },\n active: {\n true: \"bg-brand-tertiary text-brand font-medium\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n active: false,\n },\n }\n);\n\nexport interface SidebarSubmenuItemProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"type\"\n >,\n Omit<VariantProps<typeof sidebarSubmenuItemVariants>, \"disabled\"> {\n /** When true, shows selected/current state. Sets aria-current=\"page\". Default: false. */\n active?: boolean;\n /** Label (e.g. \"Submenu Item\"). */\n children?: React.ReactNode;\n}\n\nconst SidebarSubmenuItem = React.forwardRef<\n HTMLButtonElement,\n SidebarSubmenuItemProps\n>(({ className, disabled = false, active = false, children, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n sidebarSubmenuItemVariants({ disabled, active }),\n className\n )}\n aria-disabled={disabled}\n aria-current={active ? \"page\" : undefined}\n {...props}\n >\n {children != null && (\n <span\n className={cn(\n \"min-w-0 truncate\",\n disabled ? \"text-inactive\" : \"group-hover:text-primary\",\n !disabled && (active ? \"text-brand\" : \"text-secondary\")\n )}\n >\n {children}\n </span>\n )}\n </button>\n );\n});\n\nSidebarSubmenuItem.displayName = \"SidebarSubmenuItem\";\n\nexport { SidebarSubmenuItem, sidebarSubmenuItemVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Icon } from \"./icon\";\nimport { useSidebarContext } from \"./sidebar\";\n\n/* ── CVA ──\n * Token-only: spacing (px-md, py-sm, gap-md), radius (rounded-sm),\n * bg (default: transparent, selected: bg-tertiary).\n * Uses Avatar (text variant) + right icon; padding from Figma applied to container.\n */\n\nconst sidebarAccountCardVariants = cva(\n \"flex w-full items-center gap-md rounded-sm px-md py-md min-w-0\",\n {\n variants: {\n selected: {\n true: \"bg-tertiary\",\n false: \"\",\n },\n collapsed: {\n true: \"justify-center px-0 py-sm\",\n false: \"\",\n },\n },\n defaultVariants: {\n selected: false,\n collapsed: false,\n },\n }\n);\n\nexport interface SidebarAccountCardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<VariantProps<typeof sidebarAccountCardVariants>, \"collapsed\"> {\n /** User display name (e.g. \"Ahmed Galal\"). Passed to Avatar as username. */\n username: string;\n /** Supporting line below name (e.g. \"Free plan\"). Passed to Avatar as supportingText. */\n supportingText?: string;\n /** Initials for Avatar when no image (e.g. \"AG\"). Optional. */\n initials?: string;\n /** Accessible name for the avatar (e.g. user name). Passed to Avatar aria-label. */\n \"aria-label\"?: string;\n /** Material Symbol name for right icon (e.g. \"unfold_more\", \"more_vert\"). */\n rightIcon?: string;\n /** When true, shows selected/active state (light background). Default: false. */\n selected?: boolean;\n /** When true, shows avatar only (e.g. collapsed sidebar). Default from SidebarContext when inside Sidebar. */\n collapsed?: boolean;\n}\n\nconst SidebarAccountCard = React.forwardRef<\n HTMLDivElement,\n SidebarAccountCardProps\n>(\n (\n {\n className,\n username,\n supportingText,\n initials,\n \"aria-label\": ariaLabel,\n rightIcon,\n selected = false,\n collapsed: collapsedProp,\n ...props\n },\n ref\n ) => {\n const sidebarContext = useSidebarContext();\n const collapsed =\n collapsedProp ?? sidebarContext?.collapsed ?? false;\n\n return (\n <div\n ref={ref}\n className={cn(\n sidebarAccountCardVariants({ selected, collapsed }),\n className\n )}\n {...props}\n >\n <Avatar\n size=\"md\"\n initials={initials}\n username={collapsed ? undefined : username}\n supportingText={collapsed ? undefined : supportingText}\n aria-label={ariaLabel ?? username}\n className={collapsed ? \"shrink-0\" : \"min-w-0 flex-1\"}\n />\n {!collapsed && rightIcon != null && (\n <Icon\n name={rightIcon}\n size=\"sm\"\n className=\"shrink-0 text-icon-secondary\"\n aria-hidden\n />\n )}\n </div>\n );\n }\n);\n\nSidebarAccountCard.displayName = \"SidebarAccountCard\";\n\nexport { SidebarAccountCard, sidebarAccountCardVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps } from \"./icon\";\n\nconst inputWrapperVariants = cva(\n \"flex w-full items-center border bg-component-input-bg border-strong rounded-sm shadow-xs transition-colors\",\n {\n variants: {\n size: {\n sm: \"h-9 px-sm\",\n md: \"h-10 px-sm\",\n lg: \"h-11 px-sm\",\n },\n error: {\n true: \"border-danger-secondary\",\n false: \"\",\n },\n disabled: {\n true: \"bg-secondary border-inactive shadow-none pointer-events-none\",\n false: \"\",\n },\n focused: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n { focused: true, error: false, className: \"border-brand\" },\n { focused: true, error: true, className: \"border-danger\" },\n ],\n defaultVariants: {\n size: \"md\",\n error: false,\n disabled: false,\n focused: false,\n },\n }\n);\n\nconst focusRingVariants = cva(\n \"pointer-events-none absolute inset-[-1px] rounded-sm border-4\",\n {\n variants: {\n error: {\n true: \"border-focused-danger\",\n false: \"border-focused\",\n },\n },\n defaultVariants: {\n error: false,\n },\n }\n);\n\nexport type InputPreset =\n | \"user\"\n | \"email\"\n | \"password\"\n | \"date\"\n | \"amount\"\n | \"description\"\n | \"search\";\n\ntype PresetConfig = {\n leftIcon?: string;\n rightIcon?: string;\n type?: React.InputHTMLAttributes<HTMLInputElement>[\"type\"];\n optional?: boolean;\n hasPasswordToggle?: boolean;\n hasClearBehavior?: boolean;\n};\n\nconst presetConfig: Record<InputPreset, PresetConfig> = {\n user: {\n leftIcon: \"account_circle\",\n },\n email: {\n leftIcon: \"email\",\n type: \"email\",\n },\n password: {\n leftIcon: \"lock\",\n rightIcon: \"visibility\",\n type: \"password\",\n hasPasswordToggle: true,\n },\n date: {\n leftIcon: \"calendar_month\",\n type: \"date\",\n },\n amount: {\n leftIcon: \"attach_money\",\n rightIcon: \"close\",\n type: \"number\",\n hasClearBehavior: true,\n },\n description: {\n leftIcon: \"description\",\n optional: true,\n },\n search: {\n leftIcon: \"search\",\n rightIcon: \"close\",\n optional: true,\n hasClearBehavior: true,\n },\n};\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n Omit<VariantProps<typeof inputWrapperVariants>, \"disabled\" | \"focused\"> {\n /** Label text displayed above the input */\n label?: string;\n /** Whether the field is optional (displays \"(Optional)\" next to label) */\n optional?: boolean;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Material Symbol name for helper text icon (e.g., \"error\", \"info\") */\n helperTextIcon?: string;\n /** Error message displayed below the input (overrides helperText when present) */\n errorMessage?: string;\n /** Maximum character count (displays counter outside input, aligned with top) */\n maxLength?: number;\n /** Current character count (if not provided, calculated from value length) */\n characterCount?: number;\n /** Material Symbol name for left icon (e.g., \"search\", \"email\") */\n leftIcon?: string;\n /** Material Symbol name for right icon (e.g., \"visibility\", \"close\") */\n rightIcon?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icons */\n iconFilled?: boolean;\n /** Preset configuration that sets icons, type, and behaviors automatically */\n preset?: InputPreset;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n size = \"md\",\n error: errorProp,\n label,\n optional,\n helperText,\n helperTextIcon,\n errorMessage,\n maxLength,\n characterCount,\n leftIcon,\n rightIcon,\n iconVariant,\n iconFilled,\n id,\n disabled,\n value,\n defaultValue,\n onFocus,\n onBlur,\n preset,\n type,\n onChange,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [showPassword, setShowPassword] = React.useState(false);\n const internalRef = React.useRef<HTMLInputElement>(null);\n const inputId = id || React.useId();\n \n // Merge forwarded ref with internal ref\n const inputRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n },\n [ref]\n );\n const helperId = `${inputId}-helper`;\n const errorId = `${inputId}-error`;\n const hasError = errorProp || !!errorMessage;\n const isControlled = value !== undefined;\n\n // Merge preset config with explicit props (explicit props take priority)\n const presetData = preset ? presetConfig[preset] : null;\n const mergedLeftIcon = leftIcon ?? presetData?.leftIcon;\n const mergedRightIcon = rightIcon ?? presetData?.rightIcon;\n const mergedType = type ?? presetData?.type;\n const mergedOptional = optional ?? presetData?.optional;\n const hasPasswordToggle = presetData?.hasPasswordToggle ?? false;\n const hasClearBehavior = presetData?.hasClearBehavior ?? false;\n\n // Determine actual input type (password toggle affects this)\n const actualInputType =\n hasPasswordToggle && mergedType === \"password\"\n ? showPassword\n ? \"text\"\n : \"password\"\n : mergedType;\n\n // Calculate character count\n const currentValue = value ?? defaultValue ?? \"\";\n const currentLength =\n characterCount !== undefined\n ? characterCount\n : typeof currentValue === \"string\"\n ? currentValue.length\n : 0;\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n const handlePasswordToggle = React.useCallback(() => {\n setShowPassword((prev) => !prev);\n }, []);\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (isControlled && onChange) {\n // Controlled input: trigger onChange\n const syntheticEvent = {\n target: { value: \"\" },\n currentTarget: { value: \"\" },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n } else if (internalRef.current) {\n // Uncontrolled input: directly set value\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set;\n nativeInputValueSetter?.call(internalRef.current, \"\");\n const event = new Event(\"input\", { bubbles: true });\n internalRef.current.dispatchEvent(event);\n }\n },\n [isControlled, onChange]\n );\n\n const leftIconElement = mergedLeftIcon ? (\n <span\n className={cn(\n \"flex shrink-0 items-center\",\n size !== \"sm\" && \"pl-[4px]\"\n )}\n >\n <Icon\n name={mergedLeftIcon}\n size=\"md\"\n variant={iconVariant}\n filled={iconFilled}\n className={disabled ? \"text-inactive-subtle\" : \"text-tertiary\"}\n aria-hidden\n />\n </span>\n ) : null;\n\n const rightIconElement = mergedRightIcon ? (\n <span\n className={cn(\n \"flex shrink-0 items-center\",\n size === \"sm\" ? \"pl-[2px]\" : \"px-[2px]\",\n (hasPasswordToggle || hasClearBehavior) &&\n !disabled &&\n \"cursor-pointer\"\n )}\n onClick={\n hasPasswordToggle\n ? handlePasswordToggle\n : hasClearBehavior\n ? handleClear\n : undefined\n }\n role={\n hasPasswordToggle || hasClearBehavior ? \"button\" : undefined\n }\n aria-label={\n hasPasswordToggle\n ? showPassword\n ? \"Hide password\"\n : \"Show password\"\n : hasClearBehavior\n ? \"Clear input\"\n : undefined\n }\n tabIndex={\n hasPasswordToggle || hasClearBehavior ? (disabled ? -1 : 0) : undefined\n }\n onKeyDown={\n hasPasswordToggle || hasClearBehavior\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (hasPasswordToggle) {\n handlePasswordToggle();\n } else if (hasClearBehavior) {\n handleClear(e as unknown as React.MouseEvent);\n }\n }\n }\n : undefined\n }\n >\n <Icon\n name={\n hasPasswordToggle && showPassword\n ? \"visibility_off\"\n : mergedRightIcon\n }\n size=\"md\"\n variant={iconVariant}\n filled={iconFilled}\n className={disabled ? \"text-inactive-subtle\" : \"text-tertiary\"}\n aria-hidden\n />\n </span>\n ) : null;\n\n return (\n <div className={cn(\"w-full\", className)}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium text-primary mb-sm\"\n >\n {label}\n {mergedOptional && (\n <span className=\"text-tertiary font-normal ml-1\">\n (Optional)\n </span>\n )}\n </label>\n )}\n <div className=\"flex items-start gap-xs\">\n <div\n className={cn(\n inputWrapperVariants({\n size,\n error: hasError,\n disabled: !!disabled,\n focused: isFocused,\n }),\n \"relative flex-1\"\n )}\n >\n {isFocused && (\n <div className={focusRingVariants({ error: hasError })} />\n )}\n {leftIconElement}\n <input\n ref={inputRef}\n id={inputId}\n className={cn(\n \"flex-1 min-w-0 bg-transparent text-sm text-primary placeholder:text-placeholder focus:outline-none disabled:text-inactive pl-[6px] pr-[8px]\",\n \"leading-[20px]\"\n )}\n disabled={disabled}\n type={actualInputType}\n value={value}\n defaultValue={defaultValue}\n maxLength={maxLength}\n aria-invalid={hasError}\n aria-describedby={\n errorMessage ? errorId : helperText ? helperId : undefined\n }\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={onChange}\n {...props}\n />\n {rightIconElement}\n </div>\n {maxLength !== undefined && (\n <span\n className={cn(\n \"text-sm shrink-0\",\n size === \"sm\" && \"leading-9\",\n size === \"md\" && \"leading-10\",\n size === \"lg\" && \"leading-[44px]\",\n hasError ? \"text-error\" : \"text-tertiary\"\n )}\n >\n {currentLength}\n </span>\n )}\n </div>\n {(helperText || errorMessage) && (\n <p\n id={errorMessage ? errorId : helperId}\n className={cn(\n \"mt-sm text-sm flex items-center gap-1\",\n errorMessage ? \"text-error\" : \"text-secondary\"\n )}\n >\n {helperTextIcon && !errorMessage && (\n <Icon\n name={helperTextIcon}\n size=\"sm\"\n className=\"text-secondary shrink-0\"\n aria-hidden\n />\n )}\n {errorMessage || helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input, inputWrapperVariants as inputVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps } from \"./icon\";\n\nconst textareaWrapperVariants = cva(\n \"flex w-full items-start border bg-component-input-bg border-strong rounded-sm shadow-xs transition-colors min-h-[88px] px-sm py-sm\",\n {\n variants: {\n error: {\n true: \"border-danger-secondary\",\n false: \"\",\n },\n disabled: {\n true: \"bg-secondary border-inactive shadow-none pointer-events-none\",\n false: \"\",\n },\n focused: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n { focused: true, error: false, className: \"border-brand\" },\n { focused: true, error: true, className: \"border-danger\" },\n ],\n defaultVariants: {\n error: false,\n disabled: false,\n focused: false,\n },\n }\n);\n\nconst focusRingVariants = cva(\n \"pointer-events-none absolute inset-[-1px] rounded-sm border-4\",\n {\n variants: {\n error: {\n true: \"border-focused-danger\",\n false: \"border-focused\",\n },\n },\n defaultVariants: {\n error: false,\n },\n }\n);\n\nexport interface TextAreaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n Omit<VariantProps<typeof textareaWrapperVariants>, \"disabled\" | \"focused\"> {\n /** Label text displayed above the textarea */\n label?: string;\n /** Whether the field is optional (displays \"(Optional)\" next to label) */\n optional?: boolean;\n /** Helper text displayed below the textarea */\n helperText?: string;\n /** Material Symbol name for helper text icon (e.g., \"error\", \"info\") */\n helperTextIcon?: string;\n /** Error message displayed below the textarea (overrides helperText when present) */\n errorMessage?: string;\n /** Maximum character count (displays counter outside textarea, aligned with top) */\n maxLength?: number;\n /** Current character count (if not provided, calculated from value length) */\n characterCount?: number;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icons */\n iconFilled?: boolean;\n}\n\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n className,\n error: errorProp,\n label,\n optional,\n helperText,\n helperTextIcon,\n errorMessage,\n maxLength,\n characterCount,\n iconVariant,\n iconFilled,\n id,\n disabled,\n value,\n defaultValue,\n onFocus,\n onBlur,\n onChange,\n rows,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const internalRef = React.useRef<HTMLTextAreaElement>(null);\n const textareaId = id || React.useId();\n \n // Merge forwarded ref with internal ref\n const textareaRef = React.useCallback(\n (node: HTMLTextAreaElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n }\n },\n [ref]\n );\n const helperId = `${textareaId}-helper`;\n const errorId = `${textareaId}-error`;\n const hasError = errorProp || !!errorMessage;\n\n // Calculate character count\n const currentValue = value ?? defaultValue ?? \"\";\n const currentLength =\n characterCount !== undefined\n ? characterCount\n : typeof currentValue === \"string\"\n ? currentValue.length\n : 0;\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n return (\n <div className={cn(\"w-full\", className)}>\n {label && (\n <label\n htmlFor={textareaId}\n className=\"block text-sm font-medium text-primary mb-sm\"\n >\n {label}\n {optional && (\n <span className=\"text-tertiary font-normal ml-1\">\n (Optional)\n </span>\n )}\n {optional && (\n <Icon\n name=\"info\"\n size=\"sm\"\n variant={iconVariant}\n filled={iconFilled}\n className=\"text-tertiary ml-1 inline-block align-middle\"\n aria-hidden\n />\n )}\n </label>\n )}\n <div className=\"flex items-start gap-xs\">\n <div\n className={cn(\n textareaWrapperVariants({\n error: hasError,\n disabled: !!disabled,\n focused: isFocused,\n }),\n \"relative flex-1\"\n )}\n >\n {isFocused && (\n <div className={focusRingVariants({ error: hasError })} />\n )}\n <textarea\n ref={textareaRef}\n id={textareaId}\n className={cn(\n \"flex-1 min-w-0 w-full bg-transparent text-sm text-primary placeholder:text-placeholder focus:outline-none disabled:text-inactive resize-none\",\n \"leading-[20px]\"\n )}\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n maxLength={maxLength}\n rows={rows ?? 4}\n aria-invalid={hasError}\n aria-describedby={\n errorMessage ? errorId : helperText ? helperId : undefined\n }\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={onChange}\n {...props}\n />\n </div>\n {maxLength !== undefined && (\n <span\n className={cn(\n \"text-sm shrink-0 leading-[88px]\",\n hasError ? \"text-error\" : \"text-tertiary\"\n )}\n >\n {currentLength}\n </span>\n )}\n </div>\n {(helperText || errorMessage) && (\n <p\n id={errorMessage ? errorId : helperId}\n className={cn(\n \"mt-sm text-sm flex items-center gap-1\",\n errorMessage ? \"text-error\" : \"text-secondary\"\n )}\n >\n {helperTextIcon && !errorMessage && (\n <Icon\n name={helperTextIcon}\n size=\"sm\"\n className=\"text-secondary shrink-0\"\n aria-hidden\n />\n )}\n {errorMessage && (\n <Icon\n name=\"error\"\n size=\"sm\"\n className=\"text-error shrink-0\"\n aria-hidden\n />\n )}\n {errorMessage || helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nTextArea.displayName = \"TextArea\";\n\nexport { TextArea, textareaWrapperVariants as textareaVariants };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\n\n/* ── Internal Icons ── */\n\nfunction CheckSvg({ className }: { className?: string }) {\n return (\n <Icon\n name=\"check\"\n size=\"xs\"\n className={cn(\n \"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className\n )}\n />\n );\n}\n\nfunction IndeterminateSvg({ className }: { className?: string }) {\n return (\n <Icon\n name=\"remove\"\n size=\"xs\"\n className={cn(\n \"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className\n )}\n />\n );\n}\n\n/* ── Props ── */\n\nexport interface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n /** Label text displayed next to the checkbox */\n label?: string;\n /** Support text displayed below the label */\n supportText?: string;\n /** Position of the checkbox relative to the label. Default: \"leading\" */\n checkboxPosition?: \"leading\" | \"trailing\";\n /** Whether the checkbox is in an indeterminate state */\n indeterminate?: boolean;\n}\n\n/* ── Component ── */\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n label,\n supportText,\n checkboxPosition = \"leading\",\n indeterminate = false,\n checked,\n defaultChecked,\n disabled,\n onChange,\n onFocus,\n onBlur,\n id,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const internalRef = React.useRef<HTMLInputElement>(null);\n const inputId = id || React.useId();\n\n // Merge forwarded ref with internal ref\n const mergedRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n // Set indeterminate via DOM property (not available as HTML attribute)\n React.useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? !!checked : internalChecked;\n const isActive = indeterminate || isChecked;\n const isDisabled = !!disabled;\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n },\n [isControlled, onChange]\n );\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Icon color for check / indeterminate marks\n const iconColor = isDisabled\n ? \"text-icon-inactive-subtle\"\n : \"text-icon-primary-inverse\";\n\n // Checkbox visual indicator\n const indicator = (\n <span className=\"relative size-5 shrink-0\">\n {/* Focus ring (behind inner box) */}\n {isFocused && !isDisabled && (\n <span className=\"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-4 rounded-xs border-2 border-focused\" />\n )}\n {/* Inner box */}\n <span\n className={cn(\n \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-4 rounded-xs transition-colors\",\n isDisabled\n ? \"bg-inactive-subtle border border-inactive\"\n : isActive\n ? \"bg-brand group-hover/checkbox:bg-brand-hover\"\n : cn(\n \"bg-primary border\",\n isFocused ? \"border-brand\" : \"border-strong\"\n )\n )}\n />\n {/* Check or indeterminate icon */}\n {isActive &&\n (indeterminate ? (\n <IndeterminateSvg className={iconColor} />\n ) : (\n <CheckSvg className={iconColor} />\n ))}\n </span>\n );\n\n // Label + support text content\n const labelContent = label ? (\n <span\n className={cn(\"flex min-w-0 flex-col\", supportText && \"gap-xxs\")}\n >\n <span\n className={cn(\n \"text-sm font-medium leading-4\",\n isDisabled ? \"text-inactive\" : \"text-primary\"\n )}\n >\n {label}\n </span>\n {supportText && (\n <span\n className={cn(\n \"text-sm leading-5\",\n isDisabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {supportText}\n </span>\n )}\n </span>\n ) : null;\n\n return (\n <label\n className={cn(\n \"group/checkbox inline-flex gap-md\",\n supportText ? \"items-start\" : \"items-center\",\n isDisabled ? \"cursor-default\" : \"cursor-pointer\",\n className\n )}\n >\n <input\n ref={mergedRef}\n id={inputId}\n type=\"checkbox\"\n className=\"sr-only\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-checked={indeterminate ? \"mixed\" : undefined}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n />\n {checkboxPosition === \"leading\" ? (\n <>\n {indicator}\n {labelContent}\n </>\n ) : (\n <>\n {labelContent}\n {indicator}\n </>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps } from \"./icon\";\n\n/* ── Internal SVG Icons (shared with Checkbox) ── */\n\nfunction CheckSvg({ className }: { className?: string }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={cn(\n \"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className\n )}\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 3L4.5 8.5L2 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction IndeterminateSvg({ className }: { className?: string }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={cn(\n \"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className\n )}\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 6H9.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n/* ── Props ── */\n\nexport interface CheckboxCardProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n /** Label text displayed in the card */\n label: string;\n /** Description text displayed below the label */\n description?: string;\n /** Material Symbol name for the card icon (e.g. \"person\", \"settings\") */\n icon?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icon */\n iconFilled?: boolean;\n /** Position of the checkbox relative to the content. Default: \"trailing\" */\n checkboxPosition?: \"leading\" | \"trailing\";\n /** Whether the checkbox is in an indeterminate state */\n indeterminate?: boolean;\n}\n\n/* ── Component ── */\n\nconst CheckboxCard = React.forwardRef<HTMLInputElement, CheckboxCardProps>(\n (\n {\n className,\n label,\n description,\n icon,\n iconVariant,\n iconFilled,\n checkboxPosition = \"trailing\",\n indeterminate = false,\n checked,\n defaultChecked,\n disabled,\n onChange,\n onFocus,\n onBlur,\n id,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const internalRef = React.useRef<HTMLInputElement>(null);\n const inputId = id || React.useId();\n\n // Merge forwarded ref with internal ref\n const mergedRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n // Set indeterminate via DOM property\n React.useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? !!checked : internalChecked;\n const isActive = indeterminate || isChecked;\n const isDisabled = !!disabled;\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n },\n [isControlled, onChange]\n );\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Icon color for check / indeterminate marks inside the checkbox indicator\n const checkIconColor = isDisabled\n ? \"text-icon-inactive-subtle\"\n : \"text-icon-primary-inverse\";\n\n // Checkbox indicator (card version — no internal focus ring)\n const checkboxIndicator = (\n <span className=\"relative size-5 shrink-0\">\n <span\n className={cn(\n \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-4 rounded-xs transition-colors\",\n isDisabled\n ? \"bg-inactive-subtle border border-inactive\"\n : isActive\n ? \"bg-brand\"\n : \"bg-primary border border-strong\"\n )}\n />\n {isActive &&\n (indeterminate ? (\n <IndeterminateSvg className={checkIconColor} />\n ) : (\n <CheckSvg className={checkIconColor} />\n ))}\n </span>\n );\n\n // Icon element (Material Symbol)\n const iconElement = icon ? (\n <Icon\n name={icon}\n size=\"lg\"\n variant={iconVariant}\n filled={iconFilled}\n className={isDisabled ? \"text-icon-inactive\" : \"text-icon-secondary\"}\n aria-hidden\n />\n ) : null;\n\n // Text content (label + optional description)\n const textContent = (\n <div\n className={cn(\n \"flex min-w-0 flex-1 flex-col\",\n description && \"gap-xs\"\n )}\n >\n <span\n className={cn(\n \"font-medium\",\n description\n ? \"text-sm leading-4\"\n : \"text-base leading-5\",\n isDisabled ? \"text-inactive\" : \"text-primary\"\n )}\n >\n {label}\n </span>\n {description && (\n <span\n className={cn(\n \"text-sm leading-5\",\n isDisabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {description}\n </span>\n )}\n </div>\n );\n\n // Card container classes\n const cardClasses = cn(\n \"relative flex rounded-md p-lg border transition-colors\",\n checkboxPosition === \"leading\" ? \"gap-md\" : \"gap-lg\",\n !description && checkboxPosition === \"leading\"\n ? \"items-center\"\n : \"items-start\",\n isDisabled\n ? \"bg-inactive-subtle border-inactive-subtle cursor-default\"\n : isActive\n ? \"bg-primary border-brand cursor-pointer\"\n : \"bg-primary border-default hover:bg-highlight-hover cursor-pointer\",\n className\n );\n\n return (\n <label className={cardClasses}>\n <input\n ref={mergedRef}\n id={inputId}\n type=\"checkbox\"\n className=\"sr-only\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-checked={indeterminate ? \"mixed\" : undefined}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n />\n\n {/* Selection / focus ring overlay */}\n {(isActive || isFocused) && !isDisabled && (\n <span className=\"pointer-events-none absolute inset-[-1px] rounded-md border-2 border-focused\" />\n )}\n\n {checkboxPosition === \"leading\" ? (\n <>\n {checkboxIndicator}\n {iconElement && (\n <div className=\"flex flex-1 items-start gap-md\">\n {iconElement}\n {textContent}\n </div>\n )}\n {!iconElement && textContent}\n </>\n ) : (\n <>\n {iconElement ? (\n <div className=\"flex min-w-0 flex-1 items-start gap-md\">\n {iconElement}\n {textContent}\n </div>\n ) : (\n textContent\n )}\n {checkboxIndicator}\n </>\n )}\n </label>\n );\n }\n);\n\nCheckboxCard.displayName = \"CheckboxCard\";\n\nexport { CheckboxCard };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/* ── Internal Icons ── */\n\nfunction RadioDot({ className }: { className?: string }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={cn(\n \"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className\n )}\n aria-hidden=\"true\"\n >\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill=\"currentColor\" />\n </svg>\n );\n}\n\n/* ── Props ── */\n\nexport interface RadioProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n /** Label text displayed next to the radio */\n label?: string;\n /** Support text displayed below the label */\n supportText?: string;\n /** Position of the radio relative to the label. Default: \"leading\" */\n radioPosition?: \"leading\" | \"trailing\";\n}\n\n/* ── Component ── */\n\nconst Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n label,\n supportText,\n radioPosition = \"leading\",\n checked,\n defaultChecked,\n disabled,\n onChange,\n onFocus,\n onBlur,\n id,\n name,\n value,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const internalRef = React.useRef<HTMLInputElement>(null);\n const inputId = id || React.useId();\n\n // Merge forwarded ref with internal ref\n const mergedRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? !!checked : internalChecked;\n const isDisabled = !!disabled;\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n },\n [isControlled, onChange]\n );\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Icon color for radio dot\n const iconColor = isDisabled\n ? \"text-icon-inactive-subtle\"\n : \"text-icon-primary-inverse\";\n\n // Radio visual indicator\n const indicator = (\n <span className=\"relative size-5 shrink-0\">\n {/* Focus ring (behind inner circle) */}\n {isFocused && !isDisabled && (\n <span className=\"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-4 rounded-full border-2 border-focused\" />\n )}\n {/* Outer circle */}\n <span\n className={cn(\n \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-4 rounded-full transition-colors\",\n isDisabled\n ? \"bg-inactive-subtle border border-inactive\"\n : isChecked\n ? \"bg-brand group-hover/radio:bg-brand-hover\"\n : cn(\n \"bg-primary border\",\n isFocused ? \"border-brand\" : \"border-strong\"\n )\n )}\n />\n {/* Radio dot icon */}\n {isChecked && <RadioDot className={iconColor} />}\n </span>\n );\n\n // Label + support text content\n const labelContent = label ? (\n <span\n className={cn(\"flex min-w-0 flex-col\", supportText && \"gap-xxs\")}\n >\n <span\n className={cn(\n \"text-sm font-medium leading-4\",\n isDisabled ? \"text-inactive\" : \"text-primary\"\n )}\n >\n {label}\n </span>\n {supportText && (\n <span\n className={cn(\n \"text-sm leading-5\",\n isDisabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {supportText}\n </span>\n )}\n </span>\n ) : null;\n\n return (\n <label\n className={cn(\n \"group/radio inline-flex gap-md\",\n supportText ? \"items-start\" : \"items-center\",\n isDisabled ? \"cursor-default\" : \"cursor-pointer\",\n className\n )}\n >\n <input\n ref={mergedRef}\n id={inputId}\n type=\"radio\"\n className=\"sr-only\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n name={name}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n />\n {radioPosition === \"leading\" ? (\n <>\n {indicator}\n {labelContent}\n </>\n ) : (\n <>\n {labelContent}\n {indicator}\n </>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = \"Radio\";\n\nexport { Radio };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type IconProps } from \"./icon\";\n\n/* ── Internal SVG Icons (shared with Radio) ── */\n\nfunction RadioDotSvg({ className }: { className?: string }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={cn(\n \"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className\n )}\n aria-hidden=\"true\"\n >\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill=\"currentColor\" />\n </svg>\n );\n}\n\n/* ── Props ── */\n\nexport interface RadioCardProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n /** Label text displayed in the card */\n label: string;\n /** Description text displayed below the label */\n description?: string;\n /** Material Symbol name for the card icon (e.g. \"person\", \"settings\") */\n icon?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icon */\n iconFilled?: boolean;\n /** Position of the radio relative to the content. Default: \"trailing\" */\n radioPosition?: \"leading\" | \"trailing\";\n}\n\n/* ── Component ── */\n\nconst RadioCard = React.forwardRef<HTMLInputElement, RadioCardProps>(\n (\n {\n className,\n label,\n description,\n icon,\n iconVariant,\n iconFilled,\n radioPosition = \"trailing\",\n checked,\n defaultChecked,\n disabled,\n onChange,\n onFocus,\n onBlur,\n id,\n name,\n value,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [internalChecked, setInternalChecked] = React.useState(\n defaultChecked ?? false\n );\n const internalRef = React.useRef<HTMLInputElement>(null);\n const inputId = id || React.useId();\n\n // Merge forwarded ref with internal ref\n const mergedRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? !!checked : internalChecked;\n const isDisabled = !!disabled;\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n },\n [isControlled, onChange]\n );\n\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Icon color for radio dot inside the radio indicator\n const radioDotColor = isDisabled\n ? \"text-icon-inactive-subtle\"\n : \"text-icon-primary-inverse\";\n\n // Radio indicator (card version — no internal focus ring)\n const radioIndicator = (\n <span className=\"relative size-5 shrink-0\">\n <span\n className={cn(\n \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-4 rounded-full transition-colors\",\n isDisabled\n ? \"bg-inactive-subtle border border-inactive\"\n : isChecked\n ? \"bg-brand\"\n : \"bg-primary border border-strong\"\n )}\n />\n {isChecked && <RadioDotSvg className={radioDotColor} />}\n </span>\n );\n\n // Icon element (Material Symbol)\n const iconElement = icon ? (\n <Icon\n name={icon}\n size=\"lg\"\n variant={iconVariant}\n filled={iconFilled}\n className={isDisabled ? \"text-icon-inactive\" : \"text-icon-secondary\"}\n aria-hidden\n />\n ) : null;\n\n // Text content (label + optional description)\n const textContent = (\n <div\n className={cn(\n \"flex min-w-0 flex-1 flex-col\",\n description && \"gap-xs\"\n )}\n >\n <span\n className={cn(\n \"font-medium\",\n description\n ? \"text-sm leading-4\"\n : \"text-base leading-5\",\n isDisabled ? \"text-inactive\" : \"text-primary\"\n )}\n >\n {label}\n </span>\n {description && (\n <span\n className={cn(\n \"text-sm leading-5\",\n isDisabled ? \"text-inactive\" : \"text-secondary\"\n )}\n >\n {description}\n </span>\n )}\n </div>\n );\n\n // Card container classes\n const cardClasses = cn(\n \"relative flex rounded-md p-lg border transition-colors\",\n radioPosition === \"leading\" ? \"gap-md\" : \"gap-lg\",\n !description && radioPosition === \"leading\"\n ? \"items-center\"\n : \"items-start\",\n isDisabled\n ? \"bg-inactive-subtle border-inactive-subtle cursor-default\"\n : isChecked\n ? \"bg-primary border-brand cursor-pointer\"\n : \"bg-primary border-default hover:bg-highlight-hover cursor-pointer\",\n className\n );\n\n return (\n <label className={cardClasses}>\n <input\n ref={mergedRef}\n id={inputId}\n type=\"radio\"\n className=\"sr-only\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n name={name}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n />\n\n {/* Selection / focus ring overlay */}\n {(isChecked || isFocused) && !isDisabled && (\n <span className=\"pointer-events-none absolute inset-[-1px] rounded-md border-2 border-focused\" />\n )}\n\n {radioPosition === \"leading\" ? (\n <>\n {radioIndicator}\n {iconElement && (\n <div className=\"flex flex-1 items-start gap-md\">\n {iconElement}\n {textContent}\n </div>\n )}\n {!iconElement && textContent}\n </>\n ) : (\n <>\n {iconElement ? (\n <div className=\"flex min-w-0 flex-1 items-start gap-md\">\n {iconElement}\n {textContent}\n </div>\n ) : (\n textContent\n )}\n {radioIndicator}\n </>\n )}\n </label>\n );\n }\n);\n\nRadioCard.displayName = \"RadioCard\";\n\nexport { RadioCard };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { CloseButton } from \"./close-button\";\nimport { Icon, type IconProps, type IconSize } from \"./icon\";\n\nconst tagVariants = cva(\n \"inline-flex items-center justify-center rounded-sm font-regular shrink-0 gap-1 border transition-colors\",\n {\n variants: {\n type: {\n simple: \"\",\n \"with-dot\": \"\",\n \"with-icon\": \"\",\n },\n state: {\n default:\n \"bg-primary border-strong text-primary hover:bg-highlight-hover\",\n focus: \"bg-primary border-brand text-brand\",\n active: \"bg-brand-tertiary border-brand text-primary\",\n disabled:\n \"bg-secondary border-inactive-subtle text-inactive pointer-events-none\",\n },\n size: {\n small: \"h-6 px-sm text-xs leading-4\",\n large: \"h-7 px-md text-sm leading-5\",\n },\n },\n compoundVariants: [\n {\n state: \"disabled\",\n className: \"hover:bg-secondary hover:border-inactive-subtle\",\n },\n {\n state: \"active\",\n className: \"hover:bg-brand-tertiary hover:border-brand\",\n },\n ],\n defaultVariants: {\n type: \"simple\",\n state: \"default\",\n size: \"small\",\n },\n }\n);\n\n/** Maps tag size to appropriate icon size */\nconst tagSizeToIconSize: Record<\n NonNullable<TagProps[\"size\"]>,\n IconSize\n> = {\n small: \"xs\",\n large: \"sm\",\n};\n\nexport interface TagProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n VariantProps<typeof tagVariants> {\n /** Material Symbol name for left icon when type is \"with-icon\" (e.g. \"calendar_month\", \"info\"). Default: \"calendar_month\" */\n leftIcon?: string;\n /** Icon variant style. Default: \"outlined\" */\n iconVariant?: IconProps[\"variant\"];\n /** Render filled variant of icons */\n iconFilled?: boolean;\n /** Whether to show a close button on the right */\n close?: boolean;\n /** Callback fired when the close button is clicked */\n onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nconst Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n (\n {\n className,\n type = \"simple\",\n state = \"default\",\n size = \"small\",\n leftIcon,\n iconVariant,\n iconFilled,\n close,\n onClose,\n children,\n ...props\n },\n ref\n ) => {\n const iconSize = tagSizeToIconSize[size ?? \"small\"];\n const isDisabled = state === \"disabled\";\n const isActive = state === \"active\";\n const isDefault = state === \"default\" || !state;\n\n // Determine dot color: green (success) in default and active states, matches text in other states\n const dotColor =\n (isDefault || isActive) && !isDisabled ? \"bg-success\" : \"bg-current\";\n\n // Determine icon/text color based on state\n const iconColor = isDisabled\n ? \"text-inactive\"\n : isActive\n ? \"text-brand\"\n : state === \"focus\"\n ? \"text-brand\"\n : \"text-primary\";\n\n const dotElement =\n type === \"with-dot\" ? (\n <span\n className={cn(\n \"inline-block size-1.5 rounded-full shrink-0\",\n dotColor\n )}\n aria-hidden=\"true\"\n />\n ) : null;\n\n const leftIconElement =\n type === \"with-icon\" ? (\n <Icon\n name={leftIcon || \"calendar_month\"}\n size={iconSize}\n variant={iconVariant}\n filled={iconFilled}\n className={iconColor}\n aria-hidden\n />\n ) : null;\n\n const handleCloseClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n if (!isDisabled && onClose) {\n onClose(e);\n }\n },\n [isDisabled, onClose]\n );\n\n const closeButtonElement = close ? (\n <CloseButton\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCloseClick}\n disabled={isDisabled}\n aria-label=\"Remove tag\"\n className={iconColor}\n iconVariant={iconVariant}\n iconFilled={iconFilled}\n />\n ) : null;\n\n return (\n <span\n ref={ref}\n className={cn(tagVariants({ type, state, size }), className)}\n {...props}\n >\n {dotElement}\n {leftIconElement}\n {children}\n {closeButtonElement}\n </span>\n );\n }\n);\n\nTag.displayName = \"Tag\";\n\nexport { Tag, tagVariants };\n","import * as React from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { Tooltip } from \"./tooltip\";\n\n/**\n * Slider Handle — Figma node 191:15504\n * Variants: State (default, hover, active) × Label (none, tooltip above/below, simple label above/below).\n * Tokens only: radius.full, border-brand, bg-primary, bg-brand-tertiary, bg-brand-secondary, spacing (size, gap), shadow (tooltip uses Tooltip component).\n */\n\n/* ── CVA ── */\n\nconst stateClassMap = {\n default: \"hover:bg-primary active:bg-primary\",\n hover: \"bg-brand-tertiary pointer-events-none\",\n active: \"bg-brand-secondary pointer-events-none\",\n} as const;\n\n/** Fixed 24×24px per Figma; no size variant. */\nconst sliderHandleCircleVariants = cva(\n \"size-2xl shrink-0 rounded-full border border-brand bg-primary transition-colors cursor-grab touch-none select-none hover:bg-brand-tertiary active:bg-brand-secondary active:cursor-grabbing shadow-sm\"\n);\n\n/* ── Props ── */\n\nexport interface SliderHandleProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Value to show as tooltip or label (e.g. \"0%\"). When set with labelVariant, shows above or below the handle. */\n valueLabel?: React.ReactNode;\n /** How to show the value: \"tooltip\" (hover) or \"label\" (always visible). Omitted when valueLabel is not set. */\n labelVariant?: \"tooltip\" | \"label\";\n /** Position of tooltip or label relative to the circle. Default: \"below\" */\n labelPosition?: \"above\" | \"below\";\n /** Force visual state for display (e.g. docs). Omit for interactive :hover/:active. */\n state?: \"default\" | \"hover\" | \"active\";\n}\n\n/* ── Component ── */\n\nconst SliderHandle = React.forwardRef<HTMLDivElement, SliderHandleProps>(\n (\n {\n className,\n state,\n valueLabel,\n labelVariant,\n labelPosition = \"below\",\n ...props\n },\n ref\n ) => {\n const circle = (\n <div\n ref={ref}\n role=\"img\"\n {...(valueLabel != null && valueLabel !== \"\"\n ? { \"aria-hidden\": true }\n : { \"aria-label\": \"Slider handle\" })}\n className={cn(\n sliderHandleCircleVariants(),\n state && stateClassMap[state],\n className\n )}\n {...props}\n />\n );\n\n if (!valueLabel || valueLabel === \"\") return circle;\n\n const tooltipSide = labelPosition === \"above\" ? \"top\" : \"bottom\";\n\n const label =\n labelVariant === \"label\" ? (\n <span\n className={cn(\n \"absolute left-1/2 -translate-x-1/2 text-xs text-primary whitespace-nowrap\",\n labelPosition === \"above\"\n ? \"bottom-[calc(100%+8px)]\"\n : \"top-[calc(100%+8px)]\"\n )}\n >\n {valueLabel}\n </span>\n ) : null;\n\n const handle =\n labelVariant === \"tooltip\" ? (\n <Tooltip\n content={valueLabel}\n variant=\"light\"\n side={tooltipSide}\n sideOffset={8}\n open\n showArrow={false}\n >\n {circle}\n </Tooltip>\n ) : (\n circle\n );\n\n return (\n <div className=\"relative inline-flex flex-col items-center\">\n {label}\n {handle}\n </div>\n );\n }\n);\n\nSliderHandle.displayName = \"SliderHandle\";\n\nexport { SliderHandle, sliderHandleCircleVariants };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Visual specifications (tokens from packages/tokens/src/tokens.json)\n *\n * ── Shared (all variants) ──\n * Rounding: rounded-sm → radius.sm → 8px\n * Typography: text-xs, leading-5 (body copy)\n *\n * ── Variant: dark ──\n * Background: bg-always-dark\n * Text: text-on-color\n * Subtitle: text-on-color → alias → brand.neutral-25 → #ffffff\n * Arrow fill: fill-primary-inverse\n *\n * ── Variant: light ──\n * Background: bg-primary → alias → brand.neutral-25 → #ffffff\n * Text: text-primary → alias → brand.neutral-800 → #1f242e\n * Subtitle: text-on-color-inverse → alias → brand.neutral-700 → #3a424d\n * Shadow: shadow-sm → shadow.sm\n * Arrow fill: fill-white → #ffffff\n *\n * ── Size: small ──\n * Padding: px-md py-sm → spacing.md (0.75rem / 12px) horizontal, spacing.sm (0.5rem / 8px) vertical\n *\n * ── Size: large ──\n * Padding: px-md py-md → spacing.md (0.75rem / 12px) horizontal, spacing.md (0.75rem / 12px) vertical\n * Gap (title ↔ subtitle): gap-xs → spacing.xs → 0.25rem / 4px\n */\n\n/* ── CVA ── */\n\nconst tooltipContentVariants = cva(\n \"rounded-sm text-xs leading-5 max-w-[var(--radix-tooltip-content-available-width)] z-50 transition-opacity duration-150 ease-out data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n {\n variants: {\n size: {\n small: \"px-md py-sm\",\n large: \"px-md py-md flex flex-col gap-xs\",\n },\n variant: {\n dark: \"bg-always-dark text-on-color\",\n light: \"bg-primary text-primary shadow-lg border border-default\",\n },\n },\n defaultVariants: {\n size: \"small\",\n variant: \"dark\",\n },\n }\n);\n\n/* ── Variant-keyed style maps ── */\n\nconst arrowClassMap = {\n dark: \"fill-primary-inverse\",\n light: \"fill-white\",\n} as const;\n\nconst subtitleClassMap = {\n dark: \"text-on-color\",\n light: \"text-on-color-inverse\",\n} as const;\n\n/* ── TooltipContent ── */\n\nexport interface TooltipContentProps\n extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>,\n VariantProps<typeof tooltipContentVariants> {\n /** Single-line content (size=\"small\") */\n children?: React.ReactNode;\n /** Title text (size=\"large\") */\n title?: string;\n /** Subtitle text (size=\"large\") */\n subtitle?: string;\n /** When false, the arrow/pointer is not rendered. Default: true */\n showArrow?: boolean;\n}\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(\n (\n {\n className,\n size: sizeProp,\n variant = \"dark\",\n title,\n subtitle,\n children,\n side = \"bottom\",\n sideOffset = 8,\n showArrow = true,\n ...props\n },\n ref\n ) => {\n const resolvedVariant = variant ?? \"dark\";\n const isLarge = sizeProp === \"large\" || (!sizeProp && (title != null || subtitle != null));\n const size = isLarge ? \"large\" : (sizeProp ?? \"small\");\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n side={side}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ size, variant: resolvedVariant }), className)}\n {...props}\n >\n {isLarge ? (\n <>\n {title != null && (\n <span className=\"font-medium\">{title}</span>\n )}\n {subtitle != null && (\n <span className={cn(\"font-regular\", subtitleClassMap[resolvedVariant])}>\n {subtitle}\n </span>\n )}\n </>\n ) : (\n children\n )}\n {showArrow && (\n <TooltipPrimitive.Arrow\n className={arrowClassMap[resolvedVariant]}\n width={12}\n height={6}\n />\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n }\n);\n\nTooltipContent.displayName = \"TooltipContent\";\n\n/* ── Primitive re-exports ── */\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipProvider = TooltipPrimitive.Provider;\n\n/* ── Tooltip (convenience wrapper) ── */\n\nexport interface TooltipProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>,\n \"content\"\n > {\n /** Trigger element (must accept a ref) */\n children: React.ReactNode;\n /** Single-line content (size=\"small\") */\n content?: React.ReactNode;\n /** Title text (size=\"large\") */\n title?: string;\n /** Subtitle text (size=\"large\") */\n subtitle?: string;\n /** Small: single text line. Large: title + subtitle. Auto-inferred from title/subtitle when omitted. */\n size?: \"small\" | \"large\";\n /** Dark: inverse bg/text. Light: primary bg/text + shadow. */\n variant?: \"dark\" | \"light\";\n /** Which side of the trigger the tooltip appears on. Arrow adjusts automatically. Default: \"bottom\". */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Distance in px between the tooltip and the trigger. Default: 8. */\n sideOffset?: number;\n /** Delay in ms before showing. Default from provider. */\n delayDuration?: number;\n /** When false, the arrow/pointer is not rendered. Default: true */\n showArrow?: boolean;\n /** Additional class name applied to the tooltip content. */\n contentClassName?: string;\n}\n\nfunction Tooltip({\n children,\n content,\n title,\n subtitle,\n size,\n variant = \"dark\",\n side = \"bottom\",\n sideOffset = 8,\n delayDuration = 200,\n showArrow = true,\n contentClassName,\n ...rootProps\n}: TooltipProps) {\n return (\n <TooltipPrimitive.Root delayDuration={delayDuration} {...rootProps}>\n <TooltipPrimitive.Trigger asChild>\n {children}\n </TooltipPrimitive.Trigger>\n <TooltipContent\n size={size}\n variant={variant}\n side={side}\n sideOffset={sideOffset}\n title={title}\n subtitle={subtitle}\n showArrow={showArrow}\n className={contentClassName}\n >\n {content}\n </TooltipContent>\n </TooltipPrimitive.Root>\n );\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n tooltipContentVariants,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n progressBarTrackVariants,\n progressBarFillVariants,\n} from \"./progress-bar\";\nimport { SliderHandle } from \"./slider-handle\";\nimport { Icon } from \"./icon\";\n\n/**\n * Slider — Figma node 4306:225189\n * Single-node: one handle, fill from 0 to value.\n * Double-node: two handles, fill between start and end.\n * Progress bar (large size) as track. Tokens only.\n */\n\n/* ── Types ── */\n\nexport type SliderVariant = \"single\" | \"double\";\n\nexport interface SliderPropsBase\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"children\" | \"onChange\" | \"defaultValue\" | \"value\"\n > {\n variant?: SliderVariant;\n label?: React.ReactNode;\n showLabelInfoIcon?: boolean;\n helperText?: React.ReactNode;\n valueLabelVariant?: \"tooltip\" | \"label\";\n valueLabelPosition?: \"above\" | \"below\";\n formatValue?: (value: number) => string;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n \"aria-label\"?: string;\n}\n\nexport interface SliderSingleProps extends SliderPropsBase {\n variant?: \"single\";\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n}\n\nexport interface SliderDoubleProps extends SliderPropsBase {\n variant: \"double\";\n value?: [number, number];\n defaultValue?: [number, number];\n onChange?: (value: [number, number]) => void;\n}\n\nexport type SliderProps = SliderSingleProps | SliderDoubleProps;\n\n/* ── Helpers ── */\n\nfunction clamp(v: number, lo: number, hi: number) {\n return Math.min(hi, Math.max(lo, v));\n}\n\nfunction snap(raw: number, min: number, max: number, step: number) {\n if (step <= 0) return raw;\n return clamp(Math.round((raw - min) / step) * step + min, min, max);\n}\n\nfunction toPct(v: number, min: number, max: number) {\n return max > min ? ((v - min) / (max - min)) * 100 : 0;\n}\n\n/* ── Component ── */\n\nconst Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n className,\n variant = \"single\",\n value: valueProp,\n defaultValue,\n onChange,\n label,\n showLabelInfoIcon = false,\n helperText,\n valueLabelVariant,\n valueLabelPosition = \"below\",\n formatValue,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const isSingle = variant === \"single\";\n const isControlled = valueProp !== undefined;\n const trackRef = React.useRef<HTMLDivElement>(null);\n\n /* ── State ── */\n\n const [internalSingle, setInternalSingle] = React.useState(\n () => (isSingle ? ((defaultValue as number | undefined) ?? 0) : 0)\n );\n const [internalRange, setInternalRange] = React.useState<[number, number]>(\n () => {\n if (isSingle) return [min, max];\n const [s, e] = (defaultValue as [number, number] | undefined) ?? [min, max];\n return [clamp(Math.min(s, e), min, max), clamp(Math.max(s, e), min, max)];\n }\n );\n\n /* ── Derived values ── */\n\n const singleVal = isSingle\n ? clamp(isControlled ? (valueProp as number) : internalSingle, min, max)\n : 0;\n const singlePct = toPct(singleVal, min, max);\n\n const rawRange = !isSingle\n ? (isControlled ? (valueProp as [number, number]) : internalRange)\n : ([min, max] as [number, number]);\n const rangeStart = clamp(Math.min(rawRange[0], rawRange[1]), min, max);\n const rangeEnd = clamp(Math.max(rawRange[0], rawRange[1]), min, max);\n const startPct = toPct(rangeStart, min, max);\n const endPct = toPct(rangeEnd, min, max);\n\n const format = formatValue ?? ((v: number) => `${Math.round(v)}%`);\n\n /* ── Refs for latest values (avoids stale closures during drag) ── */\n\n const latestRef = React.useRef({ rangeStart, rangeEnd });\n latestRef.current = { rangeStart, rangeEnd };\n\n /* ── Commit helpers ── */\n\n const commitSingle = React.useCallback(\n (next: number) => {\n const v = clamp(next, min, max);\n if (!isControlled) setInternalSingle(v);\n (onChange as ((v: number) => void) | undefined)?.(v);\n },\n [isControlled, min, max, onChange]\n );\n\n const commitRange = React.useCallback(\n (next: [number, number]) => {\n const ordered: [number, number] = [\n clamp(Math.min(next[0], next[1]), min, max),\n clamp(Math.max(next[0], next[1]), min, max),\n ];\n if (!isControlled) setInternalRange(ordered);\n (onChange as ((v: [number, number]) => void) | undefined)?.(ordered);\n },\n [isControlled, min, max, onChange]\n );\n\n /* ── ClientX → snapped value ── */\n\n const valueFromClientX = React.useCallback(\n (clientX: number): number => {\n const track = trackRef.current;\n if (!track) return min;\n const { left, width } = track.getBoundingClientRect();\n if (width <= 0) return min;\n return snap(min + clamp((clientX - left) / width, 0, 1) * (max - min), min, max, step);\n },\n [min, max, step]\n );\n\n /* ── Update refs (read latest range inside drag via ref) ── */\n\n const updateSingleRef = React.useRef((clientX: number) => {});\n updateSingleRef.current = (clientX: number) => {\n commitSingle(valueFromClientX(clientX));\n };\n\n const updateStartRef = React.useRef((clientX: number) => {});\n updateStartRef.current = (clientX: number) => {\n const v = valueFromClientX(clientX);\n const { rangeEnd: end } = latestRef.current;\n commitRange([Math.min(v, end), end]);\n };\n\n const updateEndRef = React.useRef((clientX: number) => {});\n updateEndRef.current = (clientX: number) => {\n const v = valueFromClientX(clientX);\n const { rangeStart: start } = latestRef.current;\n commitRange([start, Math.max(v, start)]);\n };\n\n /* ── Drag factory (single pattern for all three handlers) ── */\n\n const makeDrag = React.useCallback(\n (fnRef: React.MutableRefObject<(clientX: number) => void>) =>\n (e: React.PointerEvent) => {\n if (disabled) return;\n e.preventDefault();\n fnRef.current(e.clientX);\n const onMove = (ev: PointerEvent) => fnRef.current(ev.clientX);\n const onUp = () => {\n document.removeEventListener(\"pointermove\", onMove);\n document.removeEventListener(\"pointerup\", onUp);\n };\n document.addEventListener(\"pointermove\", onMove);\n document.addEventListener(\"pointerup\", onUp);\n },\n [disabled]\n );\n\n const onSingleDrag = makeDrag(updateSingleRef);\n const onStartDrag = makeDrag(updateStartRef);\n const onEndDrag = makeDrag(updateEndRef);\n\n /* ── Track click (double: move whichever handle is closer) ── */\n\n const onTrackClick = React.useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n e.preventDefault();\n const v = valueFromClientX(e.clientX);\n const { rangeStart: s, rangeEnd: en } = latestRef.current;\n const mid = (s + en) / 2;\n commitRange(v < mid ? [Math.min(v, en), en] : [s, Math.max(v, s)]);\n },\n [disabled, valueFromClientX, commitRange]\n );\n\n /* ── IDs ── */\n\n const barId = React.useId();\n const labelId = `${barId}-label`;\n const helperId = `${barId}-helper`;\n\n /* ── Handle renderer (DRY for single + double) ── */\n\n const renderHandle = (\n pct: number,\n text: string,\n onPointerDown: (e: React.PointerEvent) => void\n ) => (\n <div\n className=\"absolute top-1/2 z-20 overflow-visible\"\n style={{ left: `${pct}%`, transform: \"translate(-50%, -50%)\" }}\n onPointerDown={disabled ? undefined : onPointerDown}\n >\n <SliderHandle\n valueLabel={valueLabelVariant ? text : undefined}\n labelVariant={valueLabelVariant}\n labelPosition={valueLabelPosition}\n aria-hidden\n />\n </div>\n );\n\n /* ── Render ── */\n\n return (\n <div\n ref={ref}\n role=\"group\"\n className={cn(\"flex min-w-0 flex-col\", className)}\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={helperText ? helperId : undefined}\n {...props}\n >\n {label && (\n <div\n id={labelId}\n className=\"flex items-center gap-xs text-sm font-medium text-primary mb-sm\"\n >\n {label}\n {showLabelInfoIcon && (\n <Icon\n name=\"info\"\n size=\"xs\"\n className=\"text-icon-tertiary\"\n aria-hidden\n />\n )}\n </div>\n )}\n\n <div id={barId} className=\"relative flex min-w-0 items-center overflow-visible\">\n <div\n ref={trackRef}\n className={cn(\n \"relative min-w-0 flex-1\",\n progressBarTrackVariants({ size: \"lg\" }),\n \"overflow-visible\"\n )}\n >\n {/* Fill */}\n <div\n className={cn(\n progressBarFillVariants({ color: \"brand\" }),\n !isSingle && \"absolute inset-y-0\"\n )}\n style={\n isSingle\n ? { width: `${singlePct}%` }\n : { left: `${startPct}%`, width: `${endPct - startPct}%` }\n }\n />\n\n {isSingle ? (\n <>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={singleVal}\n onChange={(e) => commitSingle(parseFloat(e.target.value))}\n disabled={disabled}\n aria-valuenow={singleVal}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={format(singleVal)}\n aria-label={ariaLabel}\n className=\"absolute inset-0 w-full opacity-0 cursor-grab disabled:cursor-default z-10 disabled:pointer-events-none\"\n />\n {renderHandle(singlePct, format(singleVal), onSingleDrag)}\n </>\n ) : (\n <>\n {/* Hidden inputs for keyboard a11y — pointer interaction via handles and track overlay */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={rangeStart}\n onChange={(e) => {\n const v = parseFloat(e.target.value);\n commitRange([Math.min(v, rangeEnd), rangeEnd]);\n }}\n disabled={disabled}\n aria-valuenow={rangeStart}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={format(rangeStart)}\n aria-label={ariaLabel ? `${ariaLabel} (start)` : \"Range start\"}\n className=\"sr-only\"\n />\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={rangeEnd}\n onChange={(e) => {\n const v = parseFloat(e.target.value);\n commitRange([rangeStart, Math.max(v, rangeStart)]);\n }}\n disabled={disabled}\n aria-valuenow={rangeEnd}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={format(rangeEnd)}\n aria-label={ariaLabel ? `${ariaLabel} (end)` : \"Range end\"}\n className=\"sr-only\"\n />\n {/* Track click overlay */}\n <div\n role=\"presentation\"\n className=\"absolute inset-0 z-10\"\n style={{\n cursor: disabled ? \"default\" : \"grab\",\n pointerEvents: disabled ? \"none\" : undefined,\n }}\n onPointerDown={onTrackClick}\n />\n {renderHandle(startPct, format(rangeStart), onStartDrag)}\n {renderHandle(endPct, format(rangeEnd), onEndDrag)}\n </>\n )}\n </div>\n </div>\n\n {helperText && (\n <p\n id={helperId}\n className=\"mt-sm text-sm text-secondary\"\n role=\"status\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport { Slider };\n"],"mappings":"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","names":["React","cva","jsx","React","cva","jsx","cva","jsx","jsxs","cva","React","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","cva","jsx","jsxs","cva","React","cva","jsx","jsxs","cva","React","React","cva","jsx","jsxs","cva","jsx","jsxs","React","cva","jsx","jsxs","cva","React","cva","jsx","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","cva","React","cva","jsx","cva","React","cva","jsx","jsxs","cva","React","cva","React","cva","Fragment","jsx","jsxs","cva","Fragment","jsx","jsxs","cva","React","cva","jsx","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","cva","React","cva","React","cva","jsx","jsxs","cva","jsx","jsxs","cva","React","cva","jsx","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","jsxs","cva","React","cva","jsx","jsxs","cva","focusRingVariants","React","Fragment","jsx","jsxs","React","Fragment","jsx","jsxs","CheckSvg","IndeterminateSvg","React","Fragment","jsx","jsxs","React","Fragment","jsx","jsxs","React","cva","jsx","jsxs","cva","React","cva","React","cva","Fragment","jsx","jsxs","cva","jsx","jsxs","cva","React","Fragment","jsx","jsxs"]}