@aviala-design/spiral 0.0.2

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/index.ts","../src/theme/theme-provider.tsx","../src/lib/keyboard-focus.ts","../src/components/loading.tsx","../src/lib/utils.ts","../src/components/typography.tsx","../src/components/button.tsx","../src/lib/clone-aviala-icon.tsx","../src/lib/icon-slot-sizing.ts","../src/lib/spiral-debug.ts","../src/components/input.tsx","../src/components/badge.tsx","../src/components/textarea.tsx","../src/components/select.tsx","../src/components/link.tsx","../src/components/label.tsx","../src/components/checkbox.tsx","../src/components/typeface.tsx","../src/components/radio-group.tsx","../src/components/switch.tsx","../src/components/anchor.tsx","../src/components/segmentator.tsx","../src/components/form-field.tsx","../src/components/input-group.tsx","../src/components/stack.tsx","../src/components/color-picker/color-picker.tsx","../src/components/color-picker/color-picker-area.tsx","../src/components/color-picker/color-utils.ts","../src/components/color-picker/color-picker-context.tsx","../src/components/color-picker/use-pointer-drag.ts","../src/components/color-picker/use-color-picker-state.ts","../src/components/color-picker/color-picker-inputs.tsx","../src/components/color-picker/color-picker-presets.tsx","../src/components/color-picker/color-pick-button.tsx","../src/components/color-picker/color-picker-slider.tsx","../src/components/color-picker/color-picker-panel.tsx","../src/components/cascader.tsx","../src/components/date-picker/date-picker.tsx","../src/components/date-picker/date-picker-context.tsx","../src/components/date-picker/date-utils.ts","../src/components/date-picker/date-picker-time-wheel.tsx","../src/components/time-picker/time-picker-wheels.tsx","../src/components/time-picker/time-picker.tsx","../src/components/time-picker/time-picker-context.tsx","../src/components/popover.tsx","../src/components/overlay-pointer.tsx","../src/components/modal.tsx","../src/components/tooltip.tsx","../src/components/feedback.tsx","../src/components/alert.tsx","../src/components/list.tsx","../src/components/navigation.tsx"],"sourcesContent":["export { ThemeProvider, useTheme, useThemeLayoutKey, ThemeScript, type ThemeProviderProps } from \"./theme/theme-provider\";\r\nexport {\r\n DEFAULT_PALETTE_CONFIG,\r\n PALETTE_HUE_FAMILIES,\r\n type BaseNumbersDensity,\r\n type PaletteConfig,\r\n type HueFamily,\r\n} from \"@aviala-design/tokens\";\r\n\r\nexport { Button, buttonVariants, type ButtonProps, type ButtonMode, type ButtonSize } from \"./components/button\";\r\nexport { Input, inputRootVariants, type InputProps, type InputSize } from \"./components/input\";\r\nexport { Textarea, type TextareaProps, type TextareaSize } from \"./components/textarea\";\r\nexport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectItemGroup,\r\n SelectItemPeople,\r\n SelectLabel,\r\n SelectSeparator,\r\n SelectSubItem,\r\n SelectSubItemPeople,\r\n SelectSubMenu,\r\n SelectTrigger,\r\n SelectValue,\r\n type SelectContentProps,\r\n type SelectItemFunction,\r\n type SelectItemGroupProps,\r\n type SelectItemLayout,\r\n type SelectItemPeopleProps,\r\n type SelectItemProps,\r\n type SelectLabelProps,\r\n type SelectSeparatorProps,\r\n type SelectSize,\r\n type SelectSubItemPeopleProps,\r\n type SelectSubItemProps,\r\n type SelectSubMenuProps,\r\n type SelectTriggerProps,\r\n} from \"./components/select\";\r\nexport { Label } from \"./components/label\";\r\nexport { Badge, type BadgeProps } from \"./components/badge\";\r\nexport {\r\n Loading,\r\n loadingLevelForButtonSize,\r\n type LoadingProps,\r\n type LoadingLevel,\r\n type LoadingMode,\r\n type LoadingButtonSize,\r\n} from \"./components/loading\";\r\nexport {\r\n Checkbox,\r\n CheckboxGroup,\r\n CheckboxInput,\r\n type CheckboxProps,\r\n type CheckboxGroupProps,\r\n type CheckboxInputProps,\r\n type CheckboxGroupDirection,\r\n} from \"./components/checkbox\";\r\nexport {\r\n RadioGroup,\r\n RadioGroupItem,\r\n RadioInput,\r\n type RadioGroupProps,\r\n type RadioGroupItemProps,\r\n type RadioInputProps,\r\n type RadioGroupDirection,\r\n type RadioInputVariant,\r\n} from \"./components/radio-group\";\r\nexport { Switch, type SwitchProps, type SwitchSize } from \"./components/switch\";\r\nexport { Link, type LinkProps, type LinkLevel, type LinkMode } from \"./components/link\";\r\nexport {\r\n Anchor,\r\n AnchorItem,\r\n type AnchorProps,\r\n type AnchorItemProps,\r\n type AnchorIndentLevel,\r\n} from \"./components/anchor\";\r\nexport {\r\n SegmentatorGroup,\r\n SegmentatorItem,\r\n type SegmentatorGroupProps,\r\n type SegmentatorItemProps,\r\n type SegmentatorMode,\r\n} from \"./components/segmentator\";\r\nexport { FormField, type FormFieldProps } from \"./components/form-field\";\r\nexport {\r\n Typography,\r\n typographyVariants,\r\n type TypographyProps,\r\n type TypographyLevel,\r\n type TypographyContent,\r\n type TypographyTone,\r\n} from \"./components/typography\";\r\nexport {\r\n Typeface,\r\n TypefacePair,\r\n type TypefaceProps,\r\n type TypefaceContent,\r\n type TypefacePairProps,\r\n} from \"./components/typeface\";\r\nexport { InputGroup, InputGroupAddon, type InputGroupProps } from \"./components/input-group\";\r\nexport { Stack, Fieldset, type StackProps } from \"./components/stack\";\r\nexport {\r\n ColorPicker,\r\n ColorPickerTrigger,\r\n ColorPickerContent,\r\n ColorPickerPanel,\r\n ColorPickButton,\r\n ColorPickerArea,\r\n ColorPickerSlider,\r\n ColorPickerInputs,\r\n ColorPickerPresets,\r\n DEFAULT_COLOR,\r\n useColorPickerState,\r\n type ColorPickerProps,\r\n type ColorPickerTriggerProps,\r\n type ColorPickerContentProps,\r\n type ColorPickerPanelProps,\r\n type ColorPickButtonProps,\r\n type ColorPickerAreaProps,\r\n type ColorPickerSliderProps,\r\n type ColorPickerInputsProps,\r\n type ColorPickerPresetsProps,\r\n type ColorFormat,\r\n type HSVA,\r\n type UseColorPickerStateOptions,\r\n} from \"./components/color-picker\";\r\nexport {\r\n Cascader,\r\n CascaderTrigger,\r\n CascaderContent,\r\n CascaderMenu,\r\n CascaderColumn,\r\n CascaderItemGroup,\r\n CascaderItem,\r\n CascaderOptionsMenu,\r\n CascaderField,\r\n type CascaderProps,\r\n type CascaderTriggerProps,\r\n type CascaderContentProps,\r\n type CascaderMenuProps,\r\n type CascaderColumnProps,\r\n type CascaderItemGroupProps,\r\n type CascaderItemProps,\r\n type CascaderOptionsMenuProps,\r\n type CascaderFieldProps,\r\n type CascaderOption,\r\n type CascaderSize,\r\n type CascaderItemFunction,\r\n type CascaderItemLayout,\r\n} from \"./components/cascader\";\r\nexport {\r\n DatePicker,\r\n DatePickerTrigger,\r\n DatePickerContent,\r\n DatePickerCalendar,\r\n DatePickerField,\r\n type DatePickerProps,\r\n type DatePickerSingleProps,\r\n type DatePickerRangeProps,\r\n type DatePickerTriggerProps,\r\n type DatePickerContentProps,\r\n type DatePickerCalendarProps,\r\n type DatePickerFieldProps,\r\n type DatePickerSize,\r\n type DatePickerMode,\r\n type DatePickerPanel,\r\n type DatePickerTimeValue,\r\n type DateRange,\r\n formatDisplayDate,\r\n formatMonthYear,\r\n formatTimeValue,\r\n} from \"./components/date-picker\";\r\nexport {\r\n TimePicker,\r\n TimePickerTrigger,\r\n TimePickerContent,\r\n TimePickerPanel,\r\n TimePickerField,\r\n TimePickerWheels,\r\n type TimePickerProps,\r\n type TimePickerTriggerProps,\r\n type TimePickerContentProps,\r\n type TimePickerPanelProps,\r\n type TimePickerFieldProps,\r\n type TimePickerSize,\r\n type TimePickerValue,\r\n type TimePickerWheelsValue,\r\n} from \"./components/time-picker\";\r\nexport {\r\n Popover,\r\n PopoverTrigger,\r\n PopoverContent,\r\n PopoverAnchor,\r\n type PopoverProps,\r\n type PopoverContentProps,\r\n} from \"./components/popover\";\r\nexport {\r\n Modal,\r\n ModalTrigger,\r\n ModalPortal,\r\n ModalOverlay,\r\n ModalContent,\r\n ModalHeader,\r\n ModalHeaderText,\r\n ModalTitle,\r\n ModalDescription,\r\n ModalBody,\r\n ModalFooter,\r\n ModalClose,\r\n modalContentVariants,\r\n type ModalProps,\r\n type ModalSize,\r\n type ModalOverlayProps,\r\n type ModalContentProps,\r\n type ModalHeaderProps,\r\n type ModalHeaderTextProps,\r\n type ModalTitleProps,\r\n type ModalDescriptionProps,\r\n type ModalBodyProps,\r\n type ModalFooterProps,\r\n} from \"./components/modal\";\r\nexport {\r\n TooltipProvider,\r\n Tooltip,\r\n TooltipTrigger,\r\n TooltipContent,\r\n TOOLTIP_DELAY_DURATION,\r\n type TooltipProviderProps,\r\n type TooltipContentProps,\r\n} from \"./components/tooltip\";\r\nexport {\r\n Feedback,\r\n type FeedbackProps,\r\n type FeedbackType,\r\n type FeedbackSize,\r\n type FeedbackMode,\r\n} from \"./components/feedback\";\r\nexport {\r\n Alert,\r\n alertVariants,\r\n type AlertProps,\r\n type AlertType,\r\n type AlertSize,\r\n type AlertAppearance,\r\n} from \"./components/alert\";\r\nexport {\r\n List,\r\n ListTitle,\r\n ListGroup,\r\n ListItem,\r\n ListItemGroup,\r\n ListDivider,\r\n ListSeparator,\r\n type ListProps,\r\n type ListTitleProps,\r\n type ListGroupProps,\r\n type ListItemProps,\r\n type ListItemGroupProps,\r\n type ListDividerProps,\r\n type ListSeparatorProps,\r\n type ListItemType,\r\n type ListItemLeading,\r\n} from \"./components/list\";\r\nexport {\r\n Navigation,\r\n NavigationBrand,\r\n NavigationBrandTitle,\r\n NavigationSection,\r\n NavigationGroup,\r\n NavigationItemGroup,\r\n NavigationItem,\r\n NavigationActions,\r\n NavigationActionsSlot,\r\n type NavigationProps,\r\n type NavigationBackground,\r\n type NavigationDirection,\r\n type NavigationBrandProps,\r\n type NavigationBrandTitleProps,\r\n type NavigationSectionProps,\r\n type NavigationGroupProps,\r\n type NavigationItemGroupProps,\r\n type NavigationItemProps,\r\n type NavigationItemType,\r\n type NavigationActionsProps,\r\n type NavigationActionsSlotProps,\r\n} from \"./components/navigation\";\r\n\r\nexport { cn } from \"./lib/utils\";\r\nexport { initKeyboardFocus } from \"./lib/keyboard-focus\";\r\n","import {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useLayoutEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\nimport {\r\n applyTheme,\r\n applyBaseNumbersDensity,\r\n DEFAULT_PALETTE_CONFIG,\r\n generateTheme,\r\n getPreset,\r\n presetList,\r\n removeTheme,\r\n type BaseNumbersDensity,\r\n type PaletteConfig,\r\n type ThemeMode,\r\n type ThemePreset,\r\n} from \"@aviala-design/tokens\";\r\nimport { initKeyboardFocus } from \"../lib/keyboard-focus\";\r\n\r\nexport type ThemeProviderProps = {\r\n children: ReactNode;\r\n defaultMode?: ThemeMode;\r\n defaultPrimary?: string;\r\n defaultPresetId?: string;\r\n defaultPaletteConfig?: PaletteConfig;\r\n defaultDensity?: BaseNumbersDensity;\r\n storageKey?: string;\r\n onThemeChange?: (vars: Record<string, string>) => void;\r\n};\r\n\r\ntype ThemeContextValue = {\r\n mode: ThemeMode;\r\n setMode: (mode: ThemeMode) => void;\r\n primaryColor: string;\r\n setPrimaryColor: (color: string) => void;\r\n presetId: string | undefined;\r\n applyPreset: (id: string) => void;\r\n presets: ThemePreset[];\r\n /** True when the active preset is a frozen ALD theme (palette engine bypassed). */\r\n isStaticTheme: boolean;\r\n density: BaseNumbersDensity;\r\n setDensity: (density: BaseNumbersDensity) => void;\r\n paletteConfig: PaletteConfig;\r\n setPaletteConfig: (config: Partial<PaletteConfig>) => void;\r\n resetPaletteConfig: () => void;\r\n themeVars: Record<string, string>;\r\n};\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultMode = \"light\",\r\n defaultPrimary,\r\n defaultPresetId = \"ald\",\r\n defaultPaletteConfig,\r\n defaultDensity = \"default\",\r\n storageKey = \"aviala-theme\",\r\n onThemeChange,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === \"undefined\") return defaultMode;\r\n const stored = localStorage.getItem(`${storageKey}:mode`);\r\n return (stored as ThemeMode) || defaultMode;\r\n });\r\n\r\n const [primaryColor, setPrimaryColorState] = useState(() => {\r\n if (typeof window === \"undefined\") {\r\n return defaultPrimary ?? getPreset(defaultPresetId)?.primary ?? \"#FF5532\";\r\n }\r\n return (\r\n localStorage.getItem(`${storageKey}:primary`) ??\r\n defaultPrimary ??\r\n getPreset(defaultPresetId)?.primary ??\r\n \"#FF5532\"\r\n );\r\n });\r\n\r\n const [presetId, setPresetId] = useState<string | undefined>(() => {\r\n if (typeof window === \"undefined\") return defaultPresetId;\r\n return localStorage.getItem(`${storageKey}:preset`) ?? defaultPresetId;\r\n });\r\n\r\n const [paletteConfig, setPaletteConfigState] = useState<PaletteConfig>(() => {\r\n const base: PaletteConfig = { ...DEFAULT_PALETTE_CONFIG, ...defaultPaletteConfig };\r\n if (typeof window === \"undefined\") return base;\r\n const stored = localStorage.getItem(`${storageKey}:palette`);\r\n if (!stored) return base;\r\n try {\r\n return { ...base, ...(JSON.parse(stored) as PaletteConfig) };\r\n } catch {\r\n return base;\r\n }\r\n });\r\n\r\n const [density, setDensityState] = useState<BaseNumbersDensity>(() => {\r\n if (typeof window === \"undefined\") return defaultDensity;\r\n const stored = localStorage.getItem(`${storageKey}:density`);\r\n return stored === \"mobile-friendly\" ? \"mobile-friendly\" : defaultDensity;\r\n });\r\n\r\n const isStaticTheme = presetId ? getPreset(presetId)?.static === true : false;\r\n\r\n const themeVars = useMemo(\r\n () =>\r\n isStaticTheme\r\n ? {}\r\n : generateTheme({\r\n mode,\r\n primary: primaryColor,\r\n presetId,\r\n palette: paletteConfig,\r\n }),\r\n [isStaticTheme, mode, primaryColor, presetId, paletteConfig]\r\n );\r\n\r\n useLayoutEffect(() => {\r\n initKeyboardFocus();\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n applyBaseNumbersDensity(document.documentElement, density);\r\n\r\n if (isStaticTheme) {\r\n // Clear any inline palette vars so the frozen [data-theme=\"ald\"] CSS wins.\r\n removeTheme();\r\n document.documentElement.setAttribute(\"data-theme\", presetId ?? \"ald\");\r\n document.documentElement.setAttribute(\"data-mode\", mode);\r\n onThemeChange?.(themeVars);\r\n return;\r\n }\r\n applyTheme(themeVars, { mode, themeId: presetId, density });\r\n onThemeChange?.(themeVars);\r\n }, [isStaticTheme, themeVars, mode, presetId, density, onThemeChange]);\r\n\r\n const setMode = useCallback(\r\n (next: ThemeMode) => {\r\n setModeState(next);\r\n localStorage.setItem(`${storageKey}:mode`, next);\r\n },\r\n [storageKey]\r\n );\r\n\r\n const setPrimaryColor = useCallback(\r\n (color: string) => {\r\n setPrimaryColorState(color);\r\n setPresetId(undefined);\r\n localStorage.setItem(`${storageKey}:primary`, color);\r\n localStorage.removeItem(`${storageKey}:preset`);\r\n },\r\n [storageKey]\r\n );\r\n\r\n const applyPreset = useCallback(\r\n (id: string) => {\r\n const preset = getPreset(id);\r\n if (!preset) return;\r\n setPresetId(id);\r\n setPrimaryColorState(preset.primary);\r\n localStorage.setItem(`${storageKey}:primary`, preset.primary);\r\n localStorage.setItem(`${storageKey}:preset`, id);\r\n },\r\n [storageKey]\r\n );\r\n\r\n const setPaletteConfig = useCallback(\r\n (config: Partial<PaletteConfig>) => {\r\n setPaletteConfigState((prev) => {\r\n const next = { ...prev, ...config };\r\n localStorage.setItem(`${storageKey}:palette`, JSON.stringify(next));\r\n return next;\r\n });\r\n },\r\n [storageKey]\r\n );\r\n\r\n const resetPaletteConfig = useCallback(() => {\r\n const base: PaletteConfig = { ...DEFAULT_PALETTE_CONFIG, ...defaultPaletteConfig };\r\n setPaletteConfigState(base);\r\n localStorage.removeItem(`${storageKey}:palette`);\r\n }, [storageKey, defaultPaletteConfig]);\r\n\r\n const setDensity = useCallback(\r\n (next: BaseNumbersDensity) => {\r\n setDensityState(next);\r\n if (next === \"mobile-friendly\") {\r\n localStorage.setItem(`${storageKey}:density`, next);\r\n } else {\r\n localStorage.removeItem(`${storageKey}:density`);\r\n }\r\n },\r\n [storageKey]\r\n );\r\n\r\n const value = useMemo(\r\n () => ({\r\n mode,\r\n setMode,\r\n primaryColor,\r\n setPrimaryColor,\r\n presetId,\r\n applyPreset,\r\n presets: presetList,\r\n isStaticTheme,\r\n density,\r\n setDensity,\r\n paletteConfig,\r\n setPaletteConfig,\r\n resetPaletteConfig,\r\n themeVars,\r\n }),\r\n [\r\n mode,\r\n setMode,\r\n primaryColor,\r\n setPrimaryColor,\r\n presetId,\r\n applyPreset,\r\n isStaticTheme,\r\n density,\r\n setDensity,\r\n paletteConfig,\r\n setPaletteConfig,\r\n resetPaletteConfig,\r\n themeVars,\r\n ]\r\n );\r\n\r\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\r\n}\r\n\r\nexport function useTheme(): ThemeContextValue {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx) {\r\n throw new Error(\"useTheme must be used within ThemeProvider\");\r\n }\r\n return ctx;\r\n}\r\n\r\n/** Layout key for remeasuring size-sensitive UI when theme density/mode changes. */\r\nexport function useThemeLayoutKey(): string | null {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx) return null;\r\n return `${ctx.density}:${ctx.mode}`;\r\n}\r\n\r\nexport function ThemeScript({\r\n storageKey = \"aviala-theme\",\r\n defaultMode = \"light\",\r\n defaultPrimary = \"#FF5532\",\r\n defaultDensity = \"default\",\r\n}: {\r\n storageKey?: string;\r\n defaultMode?: ThemeMode;\r\n defaultPrimary?: string;\r\n defaultDensity?: BaseNumbersDensity;\r\n}) {\r\n const script = `\r\n(function(){\r\n try {\r\n var mode = localStorage.getItem('${storageKey}:mode') || '${defaultMode}';\r\n var primary = localStorage.getItem('${storageKey}:primary') || '${defaultPrimary}';\r\n var density = localStorage.getItem('${storageKey}:density') || '${defaultDensity}';\r\n document.documentElement.setAttribute('data-mode', mode);\r\n if (density === 'mobile-friendly') {\r\n document.documentElement.setAttribute('data-density', 'mobile-friendly');\r\n }\r\n } catch(e) {}\r\n})();\r\n`;\r\n return <script dangerouslySetInnerHTML={{ __html: script }} />;\r\n}\r\n","/** Keys that indicate keyboard-driven focus (Tab + roving/menu navigation). */\r\nconst KEYBOARD_FOCUS_KEYS = new Set([\r\n \"Tab\",\r\n \"ArrowUp\",\r\n \"ArrowDown\",\r\n \"ArrowLeft\",\r\n \"ArrowRight\",\r\n \"Home\",\r\n \"End\",\r\n \"PageUp\",\r\n \"PageDown\",\r\n]);\r\n\r\nlet initialized = false;\r\n\r\n/** Toggle `html[data-aviala-keyboard-focus]` for keyboard-only focus ring CSS. */\r\nexport function initKeyboardFocus(): void {\r\n if (initialized || typeof window === \"undefined\") return;\r\n initialized = true;\r\n\r\n const root = document.documentElement;\r\n\r\n const enable = () => {\r\n root.dataset.avialaKeyboardFocus = \"\";\r\n };\r\n\r\n const disable = () => {\r\n delete root.dataset.avialaKeyboardFocus;\r\n };\r\n\r\n window.addEventListener(\r\n \"keydown\",\r\n (event) => {\r\n if (KEYBOARD_FOCUS_KEYS.has(event.key)) {\r\n enable();\r\n }\r\n },\r\n true\r\n );\r\n\r\n window.addEventListener(\"mousedown\", disable, true);\r\n window.addEventListener(\"pointerdown\", disable, true);\r\n}\r\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → Loading Icon */\nexport type LoadingLevel =\n | \"display\"\n | \"headline1\"\n | \"headline2\"\n | \"title\"\n | \"subtitle\"\n | \"text\"\n | \"caption\";\n\nexport type LoadingMode = \"theme\" | \"themeText\" | \"black\" | \"white\" | \"inherit\";\n\nconst loadingVariants = cva(\"aviala-loading\", {\n variants: {\n level: {\n display: \"aviala-loading--level-display\",\n headline1: \"aviala-loading--level-headline1\",\n headline2: \"aviala-loading--level-headline2\",\n title: \"aviala-loading--level-title\",\n subtitle: \"aviala-loading--level-subtitle\",\n text: \"aviala-loading--level-text\",\n caption: \"aviala-loading--level-caption\",\n },\n mode: {\n theme: \"aviala-loading--mode-theme\",\n themeText: \"aviala-loading--mode-themeText\",\n black: \"aviala-loading--mode-black\",\n white: \"aviala-loading--mode-white\",\n inherit: \"aviala-loading--mode-inherit\",\n },\n lineHeightFix: {\n true: \"aviala-loading--line-height-fix\",\n false: \"\",\n },\n },\n defaultVariants: {\n level: \"text\",\n mode: \"theme\",\n lineHeightFix: true,\n },\n});\n\nconst BUTTON_SIZE_TO_LOADING_LEVEL = {\n tiny: \"caption\",\n small: \"text\",\n regular: \"text\",\n big: \"text\",\n} as const satisfies Record<string, LoadingLevel>;\n\nexport type LoadingButtonSize = keyof typeof BUTTON_SIZE_TO_LOADING_LEVEL;\n\nexport function loadingLevelForButtonSize(size: LoadingButtonSize): LoadingLevel {\n return BUTTON_SIZE_TO_LOADING_LEVEL[size];\n}\n\n/** Conic ring fill — inline so theme tokens apply reliably (CSS vars do not inherit into foreignObject). */\nfunction loadingRingStyle(mode: LoadingMode): CSSProperties {\n const conic = (fg: string): CSSProperties => ({\n background: `conic-gradient(from 90deg, color-mix(in srgb, ${fg} 0%, transparent) 0deg, ${fg} 360deg)`,\n });\n\n switch (mode) {\n case \"theme\":\n return conic(\"var(--loading-fg-theme)\");\n case \"themeText\":\n return conic(\"var(--loading-fg-theme-text)\");\n case \"black\":\n return conic(\"var(--loading-fg-black)\");\n case \"white\":\n return conic(\"var(--loading-fg-white)\");\n case \"inherit\":\n return {\n background:\n \"conic-gradient(from 90deg, color-mix(in srgb, currentColor 0%, transparent) 0deg, currentColor 360deg)\",\n };\n }\n}\n\nexport type LoadingProps = HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof loadingVariants> & {\n /** Accessible name; omit when decorative (`aria-hidden`). */\n label?: string;\n };\n\nexport const Loading = forwardRef<HTMLSpanElement, LoadingProps>(\n (\n {\n className,\n level = \"text\",\n mode = \"theme\",\n lineHeightFix = true,\n label = \"Loading\",\n ...props\n },\n ref\n ) => {\n const isDecorative = props[\"aria-hidden\"] === true || props[\"aria-hidden\"] === \"true\";\n\n return (\n <span\n ref={ref}\n className={cn(loadingVariants({ level, mode, lineHeightFix }), className)}\n role={isDecorative ? undefined : \"status\"}\n aria-label={isDecorative ? undefined : label}\n aria-live={isDecorative ? undefined : \"polite\"}\n {...props}\n >\n <span className=\"aviala-loading__icon\" aria-hidden>\n <span className=\"aviala-loading__ring\" style={loadingRingStyle(mode ?? \"theme\")} />\n </span>\n </span>\n );\n }\n);\n\nLoading.displayName = \"Loading\";\n","import { type ClassValue, clsx } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → System Composition → Typography (128:85) */\nexport type TypographyLevel =\n | \"display\"\n | \"headline1\"\n | \"headline2\"\n | \"title\"\n | \"subtitle\"\n | \"text\"\n | \"caption\";\n\nexport type TypographyContent = \"text\" | \"number\";\nexport type TypographyTone = \"default\" | \"white\";\n\nexport const typographyVariants = cva(\"aviala-typography\", {\n variants: {\n level: {\n display: \"aviala-typography--display\",\n headline1: \"aviala-typography--headline1\",\n headline2: \"aviala-typography--headline2\",\n title: \"aviala-typography--title\",\n subtitle: \"aviala-typography--subtitle\",\n text: \"aviala-typography--text\",\n caption: \"aviala-typography--caption\",\n },\n },\n defaultVariants: {\n level: \"text\",\n },\n});\n\nexport type TypographyProps = HTMLAttributes<HTMLElement> &\n VariantProps<typeof typographyVariants> & {\n /** Figma `Content` — text vs numeric styling */\n content?: TypographyContent;\n /** Figma `White` — light text on dark surfaces */\n tone?: TypographyTone;\n asChild?: boolean;\n as?: \"p\" | \"span\" | \"div\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"label\";\n };\n\nexport const Typography = forwardRef<HTMLSpanElement, TypographyProps>(\n (\n {\n className,\n level = \"text\",\n content = \"text\",\n tone = \"default\",\n as: Tag = \"span\",\n asChild = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : Tag;\n\n return (\n <Comp\n ref={ref as never}\n className={cn(typographyVariants({ level }), className)}\n data-content={content}\n data-tone={tone === \"white\" ? \"white\" : undefined}\n {...props}\n />\n );\n }\n);\nTypography.displayName = \"Typography\";\n","import { Loading, loadingLevelForButtonSize } from \"./loading\";\r\nimport { typographyVariants } from \"./typography\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport {\r\n forwardRef,\r\n isValidElement,\r\n type ButtonHTMLAttributes,\r\n type CSSProperties,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport type { IconLevel } from \"@aviala-design/icons\";\r\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\r\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\r\nimport { resolveIconSlotSizing } from \"../lib/icon-slot-sizing\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { spiralDebugId } from \"../lib/spiral-debug\";\r\n\r\n/** Figma Components → Basic Input → Button */\r\nexport type ButtonMode =\r\n | \"primary\"\r\n | \"second\"\r\n | \"default\"\r\n | \"defaultCustom\"\r\n | \"noBackground\"\r\n | \"noBackgroundCustom\"\r\n | \"destructive\";\r\n\r\nexport type ButtonSize = \"tiny\" | \"small\" | \"regular\" | \"big\";\r\n\r\nconst sizeLabelLevels = {\r\n tiny: \"caption\" as const,\r\n small: \"text\" as const,\r\n regular: \"text\" as const,\r\n big: \"text\" as const,\r\n} as const;\r\n\r\nconst buttonVariants = cva(\r\n \"aviala-button relative inline-flex shrink-0 cursor-pointer items-center justify-center overflow-hidden border-0 bg-transparent font-sans whitespace-nowrap focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--button-disabled-opacity,0.55)]\",\r\n {\r\n variants: {\r\n mode: {\r\n primary: \"aviala-button--mode-primary\",\r\n second: \"aviala-button--mode-second\",\r\n default: \"aviala-button--mode-default\",\r\n defaultCustom: \"aviala-button--mode-defaultCustom\",\r\n noBackground: \"aviala-button--mode-noBackground\",\r\n noBackgroundCustom: \"aviala-button--mode-noBackgroundCustom\",\r\n destructive: \"aviala-button--mode-destructive\",\r\n },\r\n allRound: {\r\n true: \"min-w-[var(--button-min-width-allround,48px)] !rounded-[var(--border-radius-allround,99px)]\",\r\n false: \"min-w-[var(--button-min-width,46px)]\",\r\n },\r\n },\r\n defaultVariants: {\r\n mode: \"primary\",\r\n allRound: false,\r\n },\r\n }\r\n);\r\n\r\nfunction resolveMode(\r\n mode?: ButtonMode | null,\r\n variant?: LegacyVariant | null\r\n): ButtonMode {\r\n if (mode) return mode;\r\n switch (variant) {\r\n case \"secondary\":\r\n return \"second\";\r\n case \"outline\":\r\n return \"default\";\r\n case \"ghost\":\r\n return \"noBackground\";\r\n case \"destructive\":\r\n return \"destructive\";\r\n case \"link\":\r\n return \"noBackground\";\r\n default:\r\n return \"primary\";\r\n }\r\n}\r\n\r\nfunction resolveSize(\r\n size?: ButtonSize | LegacySize | null,\r\n iconOnly?: boolean,\r\n variant?: LegacyVariant | null\r\n): ButtonSize {\r\n if (size === \"tiny\" || size === \"small\" || size === \"regular\" || size === \"big\") {\r\n return size;\r\n }\r\n switch (size) {\r\n case \"sm\":\r\n return \"small\";\r\n case \"lg\":\r\n return \"big\";\r\n case \"icon\":\r\n return \"regular\";\r\n default:\r\n break;\r\n }\r\n if (variant === \"link\" || iconOnly) return \"regular\";\r\n return \"regular\";\r\n}\r\n\r\ntype LegacyVariant =\r\n | \"default\"\r\n | \"secondary\"\r\n | \"outline\"\r\n | \"ghost\"\r\n | \"destructive\"\r\n | \"link\";\r\n\r\ntype LegacySize = \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n\r\nfunction hasSurface(mode: ButtonMode): boolean {\r\n return (\r\n mode !== \"noBackground\" &&\r\n mode !== \"noBackgroundCustom\"\r\n );\r\n}\r\n\r\nfunction renderIcon(\r\n node: ReactNode,\r\n iconLevel: IconLevel,\r\n dimmed?: boolean,\r\n debugId?: string\r\n): ReactNode {\r\n if (!node) return null;\r\n\r\n const slotSizing = resolveIconSlotSizing(node, iconLevel, true);\r\n const content = cloneAvialaIconElement(node, {\r\n level: iconLevel,\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className={cn(\r\n \"aviala-button__icon\",\r\n dimmed && \"opacity-[var(--button-disabled-opacity,0.55)]\"\r\n )}\r\n style={\r\n {\r\n \"--button-icon-size\": resolveIconSizeToken(\r\n slotSizing.level,\r\n slotSizing.biggerSize\r\n ),\r\n } as CSSProperties\r\n }\r\n {...(debugId ? spiralDebugId(debugId) : undefined)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction resolveIconOnlyIcon(\r\n leftIcon?: ReactNode,\r\n icon?: ReactNode,\r\n children?: ReactNode,\r\n iconOnly?: boolean\r\n): ReactNode {\r\n const fromProp = leftIcon ?? icon;\r\n if (fromProp) return fromProp;\r\n if (!iconOnly || children == null || children === false) return undefined;\r\n if (isValidElement(children) && typeof children.type !== \"string\") return children;\r\n return undefined;\r\n}\r\n\r\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\r\n Omit<VariantProps<typeof buttonVariants>, \"mode\"> & {\r\n /** Figma `Mode` — preferred over legacy `variant`. */\r\n mode?: ButtonMode;\r\n /** Figma `Size` — preferred over legacy shadcn sizes. */\r\n size?: ButtonSize | LegacySize;\r\n /** Figma `All-Round` */\r\n allRound?: boolean;\r\n /** Figma `IconOnly` */\r\n iconOnly?: boolean;\r\n /** @deprecated Use `mode` instead. */\r\n variant?: LegacyVariant;\r\n loading?: boolean;\r\n /** @deprecated Use `leftIcon`. */\r\n icon?: ReactNode;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n asChild?: boolean;\r\n };\r\n\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n {\r\n className,\r\n mode: modeProp,\r\n variant,\r\n size: sizeProp,\r\n allRound = false,\r\n iconOnly: iconOnlyProp,\r\n asChild = false,\r\n loading = false,\r\n disabled,\r\n icon,\r\n leftIcon,\r\n rightIcon,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const mode = resolveMode(modeProp, variant);\r\n const iconOnly =\r\n iconOnlyProp ??\r\n (sizeProp === \"icon\" ||\r\n ((!!(leftIcon ?? icon) ||\r\n (isValidElement(children) && typeof children.type !== \"string\")) &&\r\n !rightIcon &&\r\n (leftIcon ?? icon ? !children : true)));\r\n const size = resolveSize(sizeProp, iconOnly, variant);\r\n const isDisabled = disabled || loading;\r\n const showSurface = hasSurface(mode);\r\n\r\n const contentOpacity = loading\r\n ? \"opacity-[var(--button-loading-opacity,0.6)]\"\r\n : undefined;\r\n\r\n const resolvedLeft = iconOnly\r\n ? resolveIconOnlyIcon(leftIcon, icon, children, true)\r\n : leftIcon ?? icon;\r\n const label = iconOnly ? null : children;\r\n const iconLevel = sizeLabelLevels[size];\r\n\r\n const inner = (\r\n <>\r\n {showSurface && (\r\n <span\r\n aria-hidden\r\n className=\"aviala-button-surface pointer-events-none absolute inset-0 rounded-[inherit]\"\r\n {...spiralDebugId(\"button.surface\")}\r\n />\r\n )}\r\n {loading && (\r\n <Loading\r\n level={loadingLevelForButtonSize(size)}\r\n mode=\"inherit\"\r\n lineHeightFix={false}\r\n className=\"relative z-[1] shrink-0 text-inherit\"\r\n aria-hidden\r\n />\r\n )}\r\n {!iconOnly && renderIcon(resolvedLeft, iconLevel, undefined, \"button.icon-left\")}\r\n {iconOnly\r\n ? renderIcon(resolvedLeft, iconLevel, undefined, \"button.icon-left\")\r\n : label !== null && label !== undefined && (\r\n <span\r\n className={cn(\r\n typographyVariants({ level: sizeLabelLevels[size] }),\r\n \"relative z-[1] shrink-0\",\r\n contentOpacity\r\n )}\r\n {...spiralDebugId(\"button.label\")}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n {!iconOnly && renderIcon(rightIcon, iconLevel, undefined, \"button.icon-right\")}\r\n </>\r\n );\r\n\r\n const classes = cn(\r\n buttonVariants({ mode, ...(iconOnly ? {} : { allRound }) }),\r\n iconOnly && \"min-w-0\",\r\n iconOnly && allRound && \"!rounded-[var(--border-radius-allround,99px)]\",\r\n className\r\n );\r\n\r\n if (asChild) {\r\n return (\r\n <Slot\r\n className={classes}\r\n ref={ref}\r\n aria-disabled={isDisabled || undefined}\r\n {...props}\r\n >\r\n {children}\r\n </Slot>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n className={classes}\r\n ref={ref}\r\n data-size={size}\r\n data-icon-only={iconOnly || undefined}\r\n disabled={isDisabled}\r\n aria-busy={loading || undefined}\r\n {...spiralDebugId(\"button\")}\r\n {...props}\r\n >\r\n {inner}\r\n </button>\r\n );\r\n }\r\n);\r\nButton.displayName = \"Button\";\r\n\r\nexport { buttonVariants };\r\n","import type { AvialaIconProps, IconLevel } from \"@aviala-design/icons\";\r\nimport {\r\n cloneElement,\r\n isValidElement,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"./utils\";\r\n\r\nexport type CloneAvialaIconDefaults = {\r\n level?: IconLevel;\r\n biggerSize?: boolean;\r\n className?: string;\r\n};\r\n\r\n/** Clone an Aviala icon element, applying defaults only for unset level/biggerSize. */\r\nexport function cloneAvialaIconElement(\r\n node: ReactNode,\r\n defaults: CloneAvialaIconDefaults = {}\r\n): ReactNode {\r\n if (!node) return null;\r\n if (!isValidElement(node) || typeof node.type === \"string\") return node;\r\n\r\n const element = node as ReactElement<AvialaIconProps>;\r\n const { level, biggerSize, className } = element.props;\r\n\r\n return cloneElement(element, {\r\n level: level !== undefined ? level : defaults.level,\r\n biggerSize: biggerSize !== undefined ? biggerSize : defaults.biggerSize,\r\n width: undefined,\r\n height: undefined,\r\n className: cn(className, defaults.className, \"shrink-0\"),\r\n });\r\n}\r\n","import type { AvialaIconProps, IconLevel } from \"@aviala-design/icons\";\r\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\r\nimport { isValidElement, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\r\n\r\nexport function resolveIconSlotSizing(\r\n node: ReactNode,\r\n defaultLevel: IconLevel,\r\n defaultBiggerSize = true\r\n): { level: IconLevel; biggerSize: boolean } {\r\n if (!isValidElement(node) || typeof node.type === \"string\") {\r\n return { level: defaultLevel, biggerSize: defaultBiggerSize };\r\n }\r\n\r\n const props = (node as ReactElement<AvialaIconProps>).props;\r\n return {\r\n level: props.level ?? defaultLevel,\r\n biggerSize: props.biggerSize ?? defaultBiggerSize,\r\n };\r\n}\r\n\r\nexport function iconSlotCssVarStyle(\r\n node: ReactNode,\r\n cssVarName: string,\r\n defaultLevel: IconLevel,\r\n defaultBiggerSize = true\r\n): CSSProperties {\r\n const slotSizing = resolveIconSlotSizing(node, defaultLevel, defaultBiggerSize);\r\n return {\r\n [cssVarName]: resolveIconSizeToken(slotSizing.level, slotSizing.biggerSize),\r\n } as CSSProperties;\r\n}\r\n\r\nexport function iconLevelCssVarStyle(\r\n level: IconLevel,\r\n biggerSize: boolean,\r\n cssVarName: string\r\n): CSSProperties {\r\n return {\r\n [cssVarName]: resolveIconSizeToken(level, biggerSize),\r\n } as CSSProperties;\r\n}\r\n","/** Stable ids for docs component debugger — safe to leave on DOM in production. */\r\nexport const SPIRAL_DEBUG_ATTR = \"data-spiral-debug-id\" as const;\r\n\r\nexport function spiralDebugId(id: string): { [SPIRAL_DEBUG_ATTR]: string; \"data-component\": string } {\r\n const component = id.split(\".\")[0] ?? id;\r\n return {\r\n [SPIRAL_DEBUG_ATTR]: id,\r\n \"data-component\": component,\r\n };\r\n}\r\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n isValidElement,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\nimport { typographyVariants } from \"./typography\";\nimport { Badge } from \"./badge\";\n\n/** Figma Components → Information Collect → BaseInput */\nexport type InputSize = \"regular\" | \"big\";\nexport type InputState = \"empty\" | \"fill\" | \"typing\";\n\nfunction resolveInputState(\n value: string | number | readonly string[] | undefined,\n defaultValue: string | number | readonly string[] | undefined,\n focused: boolean\n): InputState {\n const current = value ?? defaultValue ?? \"\";\n if (String(current).length === 0) return \"empty\";\n return focused ? \"typing\" : \"fill\";\n}\n\nconst inputRootVariants = cva(\"aviala-input relative min-w-0 font-sans\", {\n variants: {\n fullWidth: {\n true: \"w-full\",\n false: \"w-auto\",\n },\n },\n defaultVariants: {\n fullWidth: true,\n },\n});\n\nfunction renderSlotIcon(node: ReactNode, debugId?: string): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: \"text\",\n biggerSize: true,\n });\n\n return (\n <span\n className=\"aviala-input__slot\"\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction renderBadgeArea(node: ReactNode): ReactNode {\n if (node == null || node === false) return null;\n\n return (\n <span className=\"aviala-input__badge-area\">\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\n </span>\n );\n}\n\nexport type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> &\n VariantProps<typeof inputRootVariants> & {\n /** Figma `Size` */\n size?: InputSize;\n /** Figma `All-Round` */\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Figma badge area — left slot inside BaseInput */\n leftBadge?: ReactNode;\n /** Figma badge area — right slot inside BaseInput */\n rightBadge?: ReactNode;\n /** When false, input sizes to content (e.g. ColorPicker panel row) */\n fullWidth?: boolean;\n error?: boolean;\n };\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n size = \"regular\",\n allRound = false,\n leftIcon,\n rightIcon,\n leftBadge,\n rightBadge,\n fullWidth = true,\n error = false,\n disabled,\n type = \"text\",\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(() => String(defaultValue ?? \"\"));\n const resolvedValue = value !== undefined ? String(value) : internalValue;\n const inputState = resolveInputState(resolvedValue, undefined, focused);\n\n return (\n <div\n className={cn(inputRootVariants({ fullWidth }), className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : undefined}\n data-input-state={inputState}\n data-error={error ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n {...spiralDebugId(\"input\")}\n >\n {renderSlotIcon(leftIcon, \"input.left-icon\")}\n {renderBadgeArea(leftBadge)}\n\n <div\n className=\"aviala-input__field relative z-[1] flex min-w-0 flex-1 flex-col justify-center\"\n {...spiralDebugId(\"input.field\")}\n >\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n aria-invalid={error || undefined}\n className={cn(\n typographyVariants({ level: \"text\" }),\n \"w-full min-w-0 border-0 bg-transparent p-0 text-[var(--input-fg,#343333)] outline-none\",\n \"disabled:cursor-not-allowed\"\n )}\n onChange={(event) => {\n if (value === undefined) {\n setInternalValue(event.target.value);\n }\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n {...props}\n />\n </div>\n\n {renderBadgeArea(rightBadge)}\n {renderSlotIcon(rightIcon, \"input.right-icon\")}\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { inputRootVariants };\n","import {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n type HTMLAttributes,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { Typography } from \"./typography\";\r\n\r\n/** Figma Components → Information Display → Badge (also used in BaseInput badge area) */\r\nexport type BadgeProps = HTMLAttributes<HTMLSpanElement> & {\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n children: ReactNode;\r\n};\r\n\r\nfunction renderBadgeIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const content =\r\n isValidElement(node) && typeof node.type !== \"string\"\r\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\r\n width: 18,\r\n height: 18,\r\n className: cn(\r\n (node as ReactElement<{ className?: string }>).props.className,\r\n \"shrink-0\"\r\n ),\r\n })\r\n : node;\r\n\r\n return (\r\n <span className=\"aviala-badge__icon\" aria-hidden>\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\r\n ({ className, children, leftIcon, rightIcon, ...props }, ref) => (\r\n <span ref={ref} className={cn(\"aviala-badge\", className)} {...props}>\r\n {renderBadgeIcon(leftIcon)}\r\n <Typography level=\"text\" as=\"span\" className=\"aviala-badge__text whitespace-nowrap\">\r\n {children}\r\n </Typography>\r\n {renderBadgeIcon(rightIcon)}\r\n </span>\r\n )\r\n);\r\nBadge.displayName = \"Badge\";\r\n","import {\n forwardRef,\n useState,\n type TextareaHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\nimport { typographyVariants } from \"./typography\";\nimport type { InputState } from \"./input\";\n\n/** Figma Components → Information Collect → TextareaInput */\nexport type TextareaSize = \"regular\" | \"big\";\n\nfunction resolveTextareaState(\n value: string | number | readonly string[] | undefined,\n defaultValue: string | number | readonly string[] | undefined,\n focused: boolean\n): InputState {\n const current = value ?? defaultValue ?? \"\";\n if (String(current).length === 0) return \"empty\";\n return focused ? \"typing\" : \"fill\";\n}\n\nfunction renderSlotIcon(node: ReactNode, debugId?: string): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: \"text\",\n biggerSize: true,\n });\n\n return (\n <span\n className=\"aviala-textarea__slot\"\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction resolveLength(\n value: string | number | readonly string[] | undefined,\n defaultValue: string | number | readonly string[] | undefined\n) {\n const current = value ?? defaultValue ?? \"\";\n return String(current).length;\n}\n\nexport type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> & {\n /** Figma `Size` */\n size?: TextareaSize;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Figma `Controller` — character counter + resize affordance */\n showController?: boolean;\n error?: boolean;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n size = \"regular\",\n leftIcon,\n rightIcon,\n showController: showControllerProp,\n maxLength,\n error = false,\n disabled,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [length, setLength] = useState(() => resolveLength(value, defaultValue));\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(() => String(defaultValue ?? \"\"));\n const showController = showControllerProp ?? maxLength !== undefined;\n const resolvedSize = size ?? \"regular\";\n const resolvedValue = value !== undefined ? String(value) : internalValue;\n const displayLength = resolvedValue.length;\n const inputState = resolveTextareaState(resolvedValue, undefined, focused);\n\n return (\n <div\n className={cn(\"aviala-textarea\", className)}\n data-size={resolvedSize}\n data-input-state={inputState}\n data-error={error ? \"true\" : undefined}\n data-has-controller={showController ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n {...spiralDebugId(\"textarea\")}\n >\n {renderSlotIcon(leftIcon, \"textarea.left-icon\")}\n\n <div className=\"aviala-textarea__field\" {...spiralDebugId(\"textarea.field\")}>\n <textarea\n ref={ref}\n disabled={disabled}\n maxLength={maxLength}\n value={value}\n defaultValue={defaultValue}\n aria-invalid={error || undefined}\n className={cn(\"aviala-textarea__input\", typographyVariants({ level: \"text\" }))}\n onChange={(event) => {\n if (value === undefined) {\n setInternalValue(event.target.value);\n setLength(event.target.value.length);\n }\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n {...props}\n />\n </div>\n\n {renderSlotIcon(rightIcon, \"textarea.right-icon\")}\n\n {showController && (\n <div className=\"aviala-textarea__controller\" aria-hidden {...spiralDebugId(\"textarea.controller\")}>\n <span className={cn(\"aviala-textarea__counter\", typographyVariants({ level: \"caption\" }))}>\n {displayLength}\n {maxLength !== undefined ? `/${maxLength}` : \"\"}\n </span>\n <span className=\"aviala-textarea__resize-handle\" />\n </div>\n )}\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\r\nimport {\r\n DirectionArrowDownLight,\r\n DirectionArrowRight,\r\n SymbolRight,\r\n UsersUserCircle,\r\n type IconLevel,\r\n} from \"@aviala-design/icons\";\r\nimport {\r\n Children,\r\n createContext,\r\n forwardRef,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useId,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type ComponentPropsWithoutRef,\r\n type CSSProperties,\r\n type FocusEvent,\r\n type KeyboardEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n isValidElement,\r\n} from \"react\";\r\nimport { Badge } from \"./badge\";\r\nimport { Link } from \"./link\";\r\nimport { typographyVariants } from \"./typography\";\r\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\r\nimport { iconLevelCssVarStyle, iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { spiralDebugId } from \"../lib/spiral-debug\";\r\n\r\n/** Figma Components → Information Collect → Select */\r\nexport type SelectSize = \"regular\" | \"big\";\r\n\r\n/** Figma Select Menu Item `Function` variant */\r\nexport type SelectItemFunction =\r\n | \"action\"\r\n | \"simple\"\r\n | \"checkbox\"\r\n | \"form-checkbox\"\r\n | \"radio\"\r\n | \"form-radio\";\r\n\r\n/** Figma Select Menu Item `Type` variant */\r\nexport type SelectItemLayout = \"default\" | \"title\" | \"people\" | \"checked\";\r\n\r\nconst SELECT_SUB_MENU_CLOSE_DELAY_MS = 250;\r\nconst SELECT_SUB_MENU_EXIT_ANIM_MS = 150;\r\n\r\ntype SelectSubMenuMarkerProps = {\r\n children: ReactNode;\r\n className?: string;\r\n side?: \"left\" | \"right\";\r\n sideOffset?: number;\r\n portalled?: boolean;\r\n};\r\n\r\ntype ParsedSelectSubMenu = {\r\n children: ReactNode;\r\n className?: string;\r\n side: \"left\" | \"right\";\r\n sideOffset: number;\r\n portalled: boolean;\r\n};\r\n\r\ntype SubMenuItemRegistration = {\r\n getRoot: () => HTMLElement | null;\r\n getContent: () => HTMLElement | null;\r\n};\r\n\r\ntype SelectSubMenuContextValue = {\r\n contentId: string;\r\n registerSubItem: (id: string, registration: SubMenuItemRegistration) => void;\r\n unregisterSubItem: (id: string) => void;\r\n openSubItem: (id: string) => void;\r\n scheduleCloseSubItem: (id: string, relatedTarget?: EventTarget | null) => void;\r\n closeActiveSubItem: () => void;\r\n isSubItemOpen: (id: string) => boolean;\r\n isSubItemExiting: (id: string) => boolean;\r\n};\r\n\r\nconst SelectSubMenuContext = createContext<SelectSubMenuContextValue | null>(null);\r\n\r\ntype SelectDismissContextValue = {\r\n pointerDownCloseRef: React.MutableRefObject<boolean>;\r\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\r\n};\r\n\r\nconst SelectDismissContext = createContext<SelectDismissContextValue | null>(null);\r\n\r\nfunction useSelectSubMenuContext() {\r\n const context = useContext(SelectSubMenuContext);\r\n if (!context) {\r\n throw new Error(\"Select sub-menu components must be used within SelectContent.\");\r\n }\r\n return context;\r\n}\r\n\r\nfunction useSelectSubMenuLayer(): SelectSubMenuContextValue {\r\n const contentId = useId();\r\n const [activeSubItemId, setActiveSubItemId] = useState<string | null>(null);\r\n const [exitingSubItemId, setExitingSubItemId] = useState<string | null>(null);\r\n const itemsRef = useRef(new Map<string, SubMenuItemRegistration>());\r\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\r\n const exitTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\r\n const pointerRef = useRef({ x: 0, y: 0 });\r\n\r\n const cancelScheduledClose = useCallback(() => {\r\n if (closeTimerRef.current !== undefined) {\r\n clearTimeout(closeTimerRef.current);\r\n closeTimerRef.current = undefined;\r\n }\r\n }, []);\r\n\r\n const clearExitTimer = useCallback(() => {\r\n if (exitTimerRef.current !== undefined) {\r\n clearTimeout(exitTimerRef.current);\r\n exitTimerRef.current = undefined;\r\n }\r\n }, []);\r\n\r\n const isTargetInSubItemTree = useCallback((id: string, target: EventTarget | null | undefined) => {\r\n if (!(target instanceof Node)) return false;\r\n const registration = itemsRef.current.get(id);\r\n if (!registration) return false;\r\n const root = registration.getRoot();\r\n const content = registration.getContent();\r\n return (root?.contains(target) ?? false) || (content?.contains(target) ?? false);\r\n }, []);\r\n\r\n const findSubItemIdForTarget = useCallback((target: EventTarget | null | undefined, excludeId?: string) => {\r\n if (!(target instanceof Node)) return null;\r\n for (const [id, registration] of itemsRef.current) {\r\n if (id === excludeId) continue;\r\n const root = registration.getRoot();\r\n const content = registration.getContent();\r\n if (root?.contains(target) || content?.contains(target)) return id;\r\n }\r\n return null;\r\n }, []);\r\n\r\n const isPointerOverSubItem = useCallback((id: string) => {\r\n const hovered = document.elementFromPoint(pointerRef.current.x, pointerRef.current.y);\r\n if (!(hovered instanceof Element)) return false;\r\n const registration = itemsRef.current.get(id);\r\n if (!registration) return false;\r\n const root = registration.getRoot();\r\n const content = registration.getContent();\r\n return (root?.contains(hovered) ?? false) || (content?.contains(hovered) ?? false);\r\n }, []);\r\n\r\n const findSubItemIdAtPointer = useCallback((excludeId?: string) => {\r\n const hovered = document.elementFromPoint(pointerRef.current.x, pointerRef.current.y);\r\n if (!(hovered instanceof Element)) return null;\r\n for (const [id, registration] of itemsRef.current) {\r\n if (id === excludeId) continue;\r\n const root = registration.getRoot();\r\n const content = registration.getContent();\r\n if (root?.contains(hovered) || content?.contains(hovered)) return id;\r\n }\r\n return null;\r\n }, []);\r\n\r\n const beginExit = useCallback(\r\n (id: string) => {\r\n cancelScheduledClose();\r\n clearExitTimer();\r\n setExitingSubItemId(id);\r\n setActiveSubItemId(null);\r\n exitTimerRef.current = setTimeout(() => {\r\n setExitingSubItemId((current) => (current === id ? null : current));\r\n exitTimerRef.current = undefined;\r\n }, SELECT_SUB_MENU_EXIT_ANIM_MS);\r\n },\r\n [cancelScheduledClose, clearExitTimer]\r\n );\r\n\r\n const openSubItem = useCallback(\r\n (id: string) => {\r\n cancelScheduledClose();\r\n clearExitTimer();\r\n setExitingSubItemId(null);\r\n setActiveSubItemId(id);\r\n },\r\n [cancelScheduledClose, clearExitTimer]\r\n );\r\n\r\n const closeActiveSubItem = useCallback(() => {\r\n if (activeSubItemId) {\r\n beginExit(activeSubItemId);\r\n return;\r\n }\r\n cancelScheduledClose();\r\n }, [activeSubItemId, beginExit, cancelScheduledClose]);\r\n\r\n const scheduleCloseSubItem = useCallback(\r\n (id: string, relatedTarget?: EventTarget | null) => {\r\n if (exitingSubItemId === id) return;\r\n if (isTargetInSubItemTree(id, relatedTarget)) return;\r\n\r\n const siblingId = findSubItemIdForTarget(relatedTarget, id);\r\n if (siblingId) {\r\n openSubItem(siblingId);\r\n return;\r\n }\r\n\r\n cancelScheduledClose();\r\n closeTimerRef.current = setTimeout(() => {\r\n if (isPointerOverSubItem(id)) return;\r\n\r\n const pointerSiblingId = findSubItemIdAtPointer(id);\r\n if (pointerSiblingId) {\r\n openSubItem(pointerSiblingId);\r\n return;\r\n }\r\n\r\n beginExit(id);\r\n }, SELECT_SUB_MENU_CLOSE_DELAY_MS);\r\n },\r\n [\r\n beginExit,\r\n cancelScheduledClose,\r\n exitingSubItemId,\r\n findSubItemIdAtPointer,\r\n findSubItemIdForTarget,\r\n isPointerOverSubItem,\r\n isTargetInSubItemTree,\r\n openSubItem,\r\n ]\r\n );\r\n\r\n const registerSubItem = useCallback((id: string, registration: SubMenuItemRegistration) => {\r\n itemsRef.current.set(id, registration);\r\n }, []);\r\n\r\n const unregisterSubItem = useCallback((id: string) => {\r\n itemsRef.current.delete(id);\r\n setActiveSubItemId((current) => (current === id ? null : current));\r\n setExitingSubItemId((current) => (current === id ? null : current));\r\n }, []);\r\n\r\n useEffect(() => {\r\n const trackPointer = (event: PointerEvent) => {\r\n pointerRef.current = { x: event.clientX, y: event.clientY };\r\n };\r\n document.addEventListener(\"pointermove\", trackPointer, { passive: true });\r\n return () => document.removeEventListener(\"pointermove\", trackPointer);\r\n }, []);\r\n\r\n useEffect(\r\n () => () => {\r\n cancelScheduledClose();\r\n clearExitTimer();\r\n },\r\n [cancelScheduledClose, clearExitTimer]\r\n );\r\n\r\n useEffect(() => {\r\n const visibleSubItemId = activeSubItemId ?? exitingSubItemId;\r\n if (!visibleSubItemId) return;\r\n\r\n const keepSelectOpen = (event: Event) => {\r\n if (isWithinSelectSubLayer(event.target)) {\r\n event.stopPropagation();\r\n }\r\n };\r\n\r\n const handleEscape = (event: globalThis.KeyboardEvent) => {\r\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (activeSubItemId) {\r\n beginExit(activeSubItemId);\r\n return;\r\n }\r\n if (exitingSubItemId) {\r\n clearExitTimer();\r\n setExitingSubItemId(null);\r\n }\r\n };\r\n\r\n document.addEventListener(\"pointerdown\", keepSelectOpen, true);\r\n document.addEventListener(\"keydown\", handleEscape, true);\r\n return () => {\r\n document.removeEventListener(\"pointerdown\", keepSelectOpen, true);\r\n document.removeEventListener(\"keydown\", handleEscape, true);\r\n };\r\n }, [activeSubItemId, beginExit, clearExitTimer, exitingSubItemId]);\r\n\r\n return useMemo(\r\n () => ({\r\n contentId,\r\n registerSubItem,\r\n unregisterSubItem,\r\n openSubItem,\r\n scheduleCloseSubItem,\r\n closeActiveSubItem,\r\n isSubItemOpen: (id: string) => activeSubItemId === id || exitingSubItemId === id,\r\n isSubItemExiting: (id: string) => exitingSubItemId === id && activeSubItemId !== id,\r\n }),\r\n [\r\n activeSubItemId,\r\n closeActiveSubItem,\r\n contentId,\r\n exitingSubItemId,\r\n openSubItem,\r\n registerSubItem,\r\n scheduleCloseSubItem,\r\n unregisterSubItem,\r\n ]\r\n );\r\n}\r\n\r\n/** Marker child for {@link SelectSubItem} — extracted and rendered in the flyout panel. */\r\nexport function SelectSubMenu(_props: SelectSubMenuMarkerProps): null {\r\n return null;\r\n}\r\nSelectSubMenu.displayName = \"SelectSubMenu\";\r\n\r\nfunction isSelectSubMenuElement(child: ReactNode): child is ReactElement<SelectSubMenuMarkerProps> {\r\n return isValidElement(child) && child.type === SelectSubMenu;\r\n}\r\n\r\nfunction parseSelectSubItemChildren(children: ReactNode): {\r\n itemChildren: ReactNode;\r\n subMenu: ParsedSelectSubMenu | null;\r\n} {\r\n const itemNodes: ReactNode[] = [];\r\n let subMenu: ParsedSelectSubMenu | null = null;\r\n\r\n Children.forEach(children, (child) => {\r\n if (isSelectSubMenuElement(child)) {\r\n subMenu = {\r\n children: child.props.children,\r\n className: child.props.className,\r\n side: child.props.side ?? \"right\",\r\n sideOffset: child.props.sideOffset ?? 8,\r\n portalled: child.props.portalled ?? false,\r\n };\r\n return;\r\n }\r\n itemNodes.push(child);\r\n });\r\n\r\n return {\r\n itemChildren: itemNodes.length === 1 ? itemNodes[0] : itemNodes,\r\n subMenu,\r\n };\r\n}\r\n\r\nfunction isWithinSelectSubLayer(target: EventTarget | null) {\r\n return target instanceof Element && target.closest(\".aviala-select-sub-content\") !== null;\r\n}\r\n\r\nfunction renderSlotIcon(node: ReactNode, debugId?: string): ReactNode {\r\n if (!node) return null;\r\n const content = cloneAvialaIconElement(node, {\r\n level: \"text\",\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className=\"aviala-select-trigger__slot\"\r\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\r\n {...(debugId ? spiralDebugId(debugId) : undefined)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderItemIcon(\r\n node: ReactNode,\r\n iconLevel: IconLevel = \"text\",\r\n debugId?: string\r\n): ReactNode {\r\n if (!node) return null;\r\n const content = cloneAvialaIconElement(node, {\r\n level: iconLevel,\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className={cn(\r\n \"aviala-select-item__icon\",\r\n iconLevel === \"caption\" && \"aviala-select-item__icon--sm\"\r\n )}\r\n style={iconSlotCssVarStyle(node, \"--select-item-icon-size\", iconLevel, true)}\r\n {...(debugId ? spiralDebugId(debugId) : undefined)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderBadgeSlot(node: ReactNode): ReactNode {\r\n if (node == null || node === false) return null;\r\n\r\n return (\r\n <span className=\"aviala-select-item__badge\">\r\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\r\n </span>\r\n );\r\n}\r\n\r\nfunction SelectItemFormRadio() {\r\n return (\r\n <span className=\"aviala-select-item__form-radio\" aria-hidden>\r\n <span className=\"aviala-select-item__form-radio-surface\" />\r\n <span className=\"aviala-select-item__form-radio-indicator\" />\r\n </span>\r\n );\r\n}\r\n\r\nfunction SelectItemFormCheckbox() {\r\n return (\r\n <span className=\"aviala-select-item__form-checkbox\" aria-hidden>\r\n <SymbolRight\r\n className=\"aviala-select-item__form-checkbox-icon\"\r\n width={12}\r\n height={12}\r\n aria-hidden\r\n />\r\n </span>\r\n );\r\n}\r\n\r\nfunction SelectItemTrailingRadio() {\r\n return (\r\n <SelectPrimitive.ItemIndicator className=\"aviala-select-item__trailing-radio\" aria-hidden>\r\n <SymbolRight level=\"text\" biggerSize aria-hidden />\r\n </SelectPrimitive.ItemIndicator>\r\n );\r\n}\r\n\r\nfunction SelectItemTrailingCheckbox() {\r\n return (\r\n <SelectPrimitive.ItemIndicator className=\"aviala-select-item__trailing-checkbox\" aria-hidden>\r\n <SymbolRight level=\"text\" biggerSize aria-hidden />\r\n </SelectPrimitive.ItemIndicator>\r\n );\r\n}\r\n\r\nfunction SelectItemDefaultAvatar() {\r\n return (\r\n <span className=\"aviala-select-item__avatar\" aria-hidden>\r\n <UsersUserCircle level=\"text\" biggerSize aria-hidden />\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderFunctionSlot(\r\n itemFunction: SelectItemFunction,\r\n layout: SelectItemLayout,\r\n showFunctionIcon: boolean,\r\n icon?: ReactNode\r\n): ReactNode {\r\n if (!showFunctionIcon) return null;\r\n if (layout === \"checked\") return null;\r\n\r\n const functionStyle = icon\r\n ? iconSlotCssVarStyle(icon, \"--select-item-function-icon-size\", \"text\", true)\r\n : undefined;\r\n\r\n if (icon !== undefined) {\r\n return (\r\n <span\r\n className=\"aviala-select-item__function\"\r\n style={functionStyle}\r\n {...spiralDebugId(\"select.content.item.function\")}\r\n >\r\n {cloneAvialaIconElement(icon, { level: \"text\", biggerSize: true })}\r\n </span>\r\n );\r\n }\r\n\r\n switch (itemFunction) {\r\n case \"radio\":\r\n return (\r\n <span className=\"aviala-select-item__function\" {...spiralDebugId(\"select.content.item.function\")}>\r\n <SelectItemTrailingRadio />\r\n </span>\r\n );\r\n case \"checkbox\":\r\n return (\r\n <span className=\"aviala-select-item__function\" {...spiralDebugId(\"select.content.item.function\")}>\r\n <SelectItemTrailingCheckbox />\r\n </span>\r\n );\r\n case \"simple\":\r\n case \"action\":\r\n default:\r\n return (\r\n <span\r\n className=\"aviala-select-item__function\"\r\n style={iconLevelCssVarStyle(\"text\", true, \"--select-item-function-icon-size\")}\r\n {...spiralDebugId(\"select.content.item.function\")}\r\n >\r\n <DirectionArrowRight level=\"text\" biggerSize aria-hidden />\r\n </span>\r\n );\r\n }\r\n}\r\n\r\nexport type SelectProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Root>;\r\n\r\n/**\r\n * Radix Select closes on `window` blur (e.g. focusing DevTools). Suppress only\r\n * blur-initiated closes; pointer-down (outside click, item select, trigger toggle)\r\n * and Escape must still dismiss on the first interaction.\r\n */\r\nexport function Select({\r\n open: openProp,\r\n defaultOpen = false,\r\n onOpenChange,\r\n ...props\r\n}: SelectProps) {\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n const isControlled = openProp !== undefined;\r\n const open = isControlled ? openProp : internalOpen;\r\n const windowBlurCloseRef = useRef(false);\r\n const pointerDownCloseRef = useRef(false);\r\n const triggerRef = useRef<HTMLButtonElement | null>(null);\r\n\r\n const dismissContextValue = useMemo(\r\n () => ({ pointerDownCloseRef, triggerRef }),\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n const markWindowBlur = () => {\r\n windowBlurCloseRef.current = true;\r\n };\r\n window.addEventListener(\"blur\", markWindowBlur, true);\r\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n const markPointerDown = () => {\r\n pointerDownCloseRef.current = true;\r\n };\r\n document.addEventListener(\"pointerdown\", markPointerDown, true);\r\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\r\n }, [open]);\r\n\r\n const handleOpenChange = useCallback(\r\n (nextOpen: boolean) => {\r\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\r\n windowBlurCloseRef.current = false;\r\n return;\r\n }\r\n windowBlurCloseRef.current = false;\r\n if (nextOpen) {\r\n pointerDownCloseRef.current = false;\r\n }\r\n if (!isControlled) {\r\n setInternalOpen(nextOpen);\r\n }\r\n onOpenChange?.(nextOpen);\r\n },\r\n [isControlled, onOpenChange]\r\n );\r\n\r\n return (\r\n <SelectDismissContext.Provider value={dismissContextValue}>\r\n <SelectPrimitive.Root open={open} onOpenChange={handleOpenChange} {...props} />\r\n </SelectDismissContext.Provider>\r\n );\r\n}\r\nexport const SelectValue = SelectPrimitive.Value;\r\nexport const SelectGroup = SelectPrimitive.Group;\r\n\r\nconst SELECT_MENU_ITEM_DISPLAY_NAMES = new Set([\r\n SelectPrimitive.Item.displayName,\r\n \"SelectItem\",\r\n \"SelectSubItem\",\r\n \"SelectItemPeople\",\r\n]);\r\n\r\nfunction getComponentDisplayName(type: unknown): string | undefined {\r\n if (typeof type === \"function\" || (typeof type === \"object\" && type !== null)) {\r\n return (type as { displayName?: string }).displayName;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction isSelectGroupElement(child: ReactNode): boolean {\r\n if (!isValidElement(child)) return false;\r\n if (child.type === SelectGroup) return true;\r\n return getComponentDisplayName(child.type) === \"SelectItemGroup\";\r\n}\r\n\r\nfunction isSelectMenuItemElement(child: ReactNode): boolean {\r\n if (!isValidElement(child)) return false;\r\n const displayName = getComponentDisplayName(child.type);\r\n return displayName !== undefined && SELECT_MENU_ITEM_DISPLAY_NAMES.has(displayName);\r\n}\r\n\r\n/** Ensures bare menu items are wrapped in a SelectGroup in the DOM (Figma requirement). */\r\nfunction wrapUngroupedSelectItems(children: ReactNode): ReactNode {\r\n const nodes = Children.toArray(children);\r\n if (nodes.length === 0) return children;\r\n\r\n const wrapped: ReactNode[] = [];\r\n let bareItems: ReactNode[] = [];\r\n let autoGroupIndex = 0;\r\n\r\n const flushBareItems = () => {\r\n if (bareItems.length === 0) return;\r\n wrapped.push(\r\n <SelectGroup key={`__select-auto-group-${autoGroupIndex++}`} className=\"aviala-select-group\">\r\n <div className=\"aviala-select-group__slot\">{bareItems}</div>\r\n </SelectGroup>\r\n );\r\n bareItems = [];\r\n };\r\n\r\n for (const node of nodes) {\r\n if (isSelectGroupElement(node)) {\r\n flushBareItems();\r\n wrapped.push(node);\r\n } else if (isSelectMenuItemElement(node)) {\r\n bareItems.push(node);\r\n } else {\r\n flushBareItems();\r\n wrapped.push(node);\r\n }\r\n }\r\n\r\n flushBareItems();\r\n return wrapped.length === 1 ? wrapped[0] : wrapped;\r\n}\r\n\r\nexport type SelectTriggerProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\r\n size?: SelectSize;\r\n allRound?: boolean;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n /** Override chevron expand icon (defaults to DirectionArrowDownLight). */\r\n expandIcon?: ReactNode;\r\n placeholder?: string;\r\n error?: boolean;\r\n};\r\n\r\nexport const SelectTrigger = forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Trigger>,\r\n SelectTriggerProps\r\n>(\r\n (\r\n {\r\n className,\r\n size = \"regular\",\r\n allRound = false,\r\n leftIcon,\r\n rightIcon,\r\n expandIcon,\r\n placeholder,\r\n error = false,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const dismissContext = useContext(SelectDismissContext);\r\n\r\n return (\r\n <SelectPrimitive.Trigger\r\n ref={(node) => {\r\n if (dismissContext) {\r\n dismissContext.triggerRef.current = node;\r\n }\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n } else if (ref) {\r\n ref.current = node;\r\n }\r\n }}\r\n className={cn(\"aviala-select-trigger\", className)}\r\n data-size={size}\r\n data-all-round={allRound ? \"true\" : \"false\"}\r\n data-error={error ? \"true\" : undefined}\r\n {...spiralDebugId(\"select.trigger\")}\r\n {...props}\r\n >\r\n {renderSlotIcon(leftIcon, \"select.trigger.icon-left\")}\r\n <span className=\"aviala-select-trigger__field\">\r\n <SelectPrimitive.Value\r\n placeholder={placeholder}\r\n className={cn(\"aviala-select-trigger__value\", typographyVariants({ level: \"text\" }))}\r\n {...spiralDebugId(\"select.trigger.value\")}\r\n />\r\n </span>\r\n {renderSlotIcon(rightIcon, \"select.trigger.icon-right\")}\r\n <SelectPrimitive.Icon asChild>\r\n <span\r\n className=\"aviala-select-trigger__expand\"\r\n aria-hidden\r\n style={\r\n expandIcon\r\n ? iconSlotCssVarStyle(expandIcon, \"--input-slot-icon-size\", \"text\", true)\r\n : iconLevelCssVarStyle(\"text\", true, \"--input-slot-icon-size\")\r\n }\r\n {...spiralDebugId(\"select.trigger.expand\")}\r\n >\r\n {expandIcon ?? (\r\n <DirectionArrowDownLight\r\n className=\"aviala-select-trigger__expand-icon\"\r\n level=\"text\"\r\n biggerSize\r\n aria-hidden\r\n />\r\n )}\r\n </span>\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n );\r\n }\r\n);\r\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\r\n\r\nexport type SelectContentProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & {\r\n /** Render without Portal — use inside nested overlays (e.g. ColorPicker popover). */\r\n portalled?: boolean;\r\n};\r\n\r\nexport const SelectContent = forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Content>,\r\n SelectContentProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n position = \"popper\",\r\n sideOffset = 8,\r\n portalled = true,\r\n onCloseAutoFocus,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const subMenuLayer = useSelectSubMenuLayer();\r\n const dismissContext = useContext(SelectDismissContext);\r\n\r\n const handleCloseAutoFocus: NonNullable<SelectContentProps[\"onCloseAutoFocus\"]> = (\r\n event\r\n ) => {\r\n onCloseAutoFocus?.(event);\r\n if (event.defaultPrevented) {\r\n if (dismissContext) {\r\n dismissContext.pointerDownCloseRef.current = false;\r\n }\r\n return;\r\n }\r\n if (dismissContext?.pointerDownCloseRef.current) {\r\n event.preventDefault();\r\n dismissContext.triggerRef.current?.blur();\r\n dismissContext.pointerDownCloseRef.current = false;\r\n }\r\n };\r\n\r\n const content = (\r\n <SelectSubMenuContext.Provider value={subMenuLayer}>\r\n <SelectPrimitive.Content\r\n ref={ref}\r\n className={cn(\"aviala-select-content\", className)}\r\n position={position}\r\n sideOffset={sideOffset}\r\n onCloseAutoFocus={handleCloseAutoFocus}\r\n {...spiralDebugId(\"select.content\")}\r\n {...props}\r\n >\r\n <SelectPrimitive.Viewport\r\n className=\"aviala-select-viewport\"\r\n {...spiralDebugId(\"select.content.viewport\")}\r\n >\r\n {wrapUngroupedSelectItems(children)}\r\n </SelectPrimitive.Viewport>\r\n </SelectPrimitive.Content>\r\n </SelectSubMenuContext.Provider>\r\n );\r\n\r\n if (!portalled) return content;\r\n\r\n return <SelectPrimitive.Portal>{content}</SelectPrimitive.Portal>;\r\n }\r\n);\r\nSelectContent.displayName = SelectPrimitive.Content.displayName;\r\n\r\nexport type SelectLabelProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Label>;\r\n\r\nexport const SelectLabel = forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Label>,\r\n SelectLabelProps\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Label\r\n ref={ref}\r\n className={cn(\"aviala-select-label\", typographyVariants({ level: \"caption\" }), className)}\r\n {...props}\r\n />\r\n));\r\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\r\n\r\nexport type SelectItemProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Item> & {\r\n /** Figma Function variant (default Action Item) */\r\n itemFunction?: SelectItemFunction;\r\n /** Figma Type variant */\r\n layout?: SelectItemLayout;\r\n leftIcon?: ReactNode;\r\n showLeftIcon?: boolean;\r\n rightIcon?: ReactNode;\r\n showRightIcon?: boolean;\r\n badge?: ReactNode;\r\n showBadge?: boolean;\r\n showMoreFunction?: boolean;\r\n /** Inline action before the function icon (Figma MoreFunction) */\r\n moreAction?: ReactNode;\r\n /** Override trailing function slot (Figma function icon) */\r\n icon?: ReactNode;\r\n /** Show trailing function icon (Figma showFunctionIcon; hidden when layout=`checked` and selected) */\r\n showFunctionIcon?: boolean;\r\n /** People layout — 26px avatar node; defaults to UsersUserCircle */\r\n avatar?: ReactNode;\r\n /** People layout — secondary caption line */\r\n subtitle?: ReactNode;\r\n};\r\n\r\nexport const SelectItem = forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Item>,\r\n SelectItemProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n itemFunction = \"action\",\r\n layout = \"default\",\r\n leftIcon,\r\n showLeftIcon = false,\r\n rightIcon,\r\n showRightIcon = false,\r\n badge,\r\n showBadge = false,\r\n showMoreFunction = false,\r\n moreAction,\r\n icon,\r\n showFunctionIcon = true,\r\n avatar,\r\n subtitle,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const isPeople = layout === \"people\";\r\n const isTitle = layout === \"title\";\r\n const isFormLeading =\r\n itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\r\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\r\n const showTrailingFunction =\r\n showFunctionIcon &&\r\n layout !== \"checked\" &&\r\n itemFunction !== \"form-radio\" &&\r\n itemFunction !== \"form-checkbox\";\r\n\r\n const textLevel = isTitle ? \"caption\" : \"text\";\r\n\r\n const textContent = isPeople ? (\r\n <span className=\"aviala-select-item__content\">\r\n <SelectPrimitive.ItemText\r\n className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}\r\n >\r\n {children}\r\n </SelectPrimitive.ItemText>\r\n {subtitle != null && subtitle !== false ? (\r\n <span className={cn(\"aviala-select-item__subtitle\", typographyVariants({ level: \"caption\" }))}>\r\n {subtitle}\r\n </span>\r\n ) : null}\r\n </span>\r\n ) : (\r\n <SelectPrimitive.ItemText\r\n className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}\r\n >\r\n {children}\r\n </SelectPrimitive.ItemText>\r\n );\r\n\r\n return (\r\n <SelectPrimitive.Item\r\n ref={ref}\r\n className={cn(\"aviala-select-item\", className)}\r\n data-layout={layout !== \"default\" ? layout : undefined}\r\n data-function={itemFunction !== \"action\" ? itemFunction : undefined}\r\n {...spiralDebugId(\"select.content.item\")}\r\n {...props}\r\n >\r\n {isFormLeading && itemFunction === \"form-radio\" ? <SelectItemFormRadio /> : null}\r\n {isFormLeading && itemFunction === \"form-checkbox\" ? (\r\n <SelectItemFormCheckbox />\r\n ) : null}\r\n\r\n {showLeftIcon && leftIcon\r\n ? renderItemIcon(leftIcon, leftIconLevel, \"select.content.item.icon-left\")\r\n : null}\r\n\r\n {isPeople ? (avatar ?? <SelectItemDefaultAvatar />) : null}\r\n\r\n {textContent}\r\n\r\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\r\n\r\n {showRightIcon && rightIcon\r\n ? renderItemIcon(rightIcon, leftIconLevel, \"select.content.item.icon-right\")\r\n : null}\r\n\r\n {showMoreFunction ? (\r\n <span className=\"aviala-select-item__more\">\r\n {moreAction ?? (\r\n <Link level=\"text\" href=\"#\" onClick={(event) => event.preventDefault()}>\r\n Text\r\n </Link>\r\n )}\r\n </span>\r\n ) : null}\r\n\r\n {renderFunctionSlot(itemFunction, layout, showTrailingFunction, icon)}\r\n </SelectPrimitive.Item>\r\n );\r\n }\r\n);\r\nSelectItem.displayName = SelectPrimitive.Item.displayName;\r\n\r\nexport type SelectSubMenuProps = SelectSubMenuMarkerProps;\r\n\r\nexport type SelectSubItemProps = {\r\n children: ReactNode;\r\n className?: string;\r\n disabled?: boolean;\r\n /** Figma Function variant (default Action Item — trailing chevron) */\r\n itemFunction?: SelectItemFunction;\r\n /** Figma Type variant */\r\n layout?: SelectItemLayout;\r\n leftIcon?: ReactNode;\r\n showLeftIcon?: boolean;\r\n rightIcon?: ReactNode;\r\n showRightIcon?: boolean;\r\n badge?: ReactNode;\r\n showBadge?: boolean;\r\n showMoreFunction?: boolean;\r\n moreAction?: ReactNode;\r\n icon?: ReactNode;\r\n showFunctionIcon?: boolean;\r\n avatar?: ReactNode;\r\n subtitle?: ReactNode;\r\n /** Popover side when space allows (default right). Flips to left on collision. */\r\n side?: \"left\" | \"right\";\r\n sideOffset?: number;\r\n /** Render flyout in a Portal (default false — keeps panel inside SelectContent). */\r\n portalled?: boolean;\r\n};\r\n\r\n/**\r\n * Figma Select Menu Item with nested sub-menu — opens a flyout panel on hover/focus.\r\n * Compose with {@link SelectSubMenu} for sub-menu items.\r\n */\r\nexport const SelectSubItem = forwardRef<HTMLDivElement, SelectSubItemProps>(\r\n (\r\n {\r\n className,\r\n children,\r\n itemFunction = \"action\",\r\n layout = \"default\",\r\n leftIcon,\r\n showLeftIcon = false,\r\n rightIcon,\r\n showRightIcon = false,\r\n badge,\r\n showBadge = false,\r\n showMoreFunction = false,\r\n moreAction,\r\n icon,\r\n showFunctionIcon = true,\r\n avatar,\r\n subtitle,\r\n side: sideProp,\r\n sideOffset: sideOffsetProp,\r\n portalled: portalledProp,\r\n disabled = false,\r\n },\r\n ref\r\n ) => {\r\n const {\r\n registerSubItem,\r\n unregisterSubItem,\r\n openSubItem,\r\n scheduleCloseSubItem,\r\n closeActiveSubItem,\r\n isSubItemOpen,\r\n isSubItemExiting,\r\n } = useSelectSubMenuContext();\r\n const { itemChildren, subMenu } = parseSelectSubItemChildren(children);\r\n\r\n if (!subMenu) {\r\n throw new Error(\"SelectSubItem requires a SelectSubMenu child.\");\r\n }\r\n\r\n const subItemId = useId();\r\n const subMenuId = useId();\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n\r\n const side = sideProp ?? subMenu.side;\r\n const sideOffset = sideOffsetProp ?? subMenu.sideOffset;\r\n const portalled = portalledProp ?? subMenu.portalled;\r\n\r\n const open = isSubItemOpen(subItemId);\r\n const exiting = isSubItemExiting(subItemId);\r\n\r\n useEffect(() => {\r\n registerSubItem(subItemId, {\r\n getRoot: () => rootRef.current,\r\n getContent: () => contentRef.current,\r\n });\r\n return () => unregisterSubItem(subItemId);\r\n }, [registerSubItem, subItemId, unregisterSubItem]);\r\n\r\n const handleOpen = useCallback(() => {\r\n if (disabled) return;\r\n openSubItem(subItemId);\r\n }, [disabled, openSubItem, subItemId]);\r\n\r\n const handlePointerLeave = useCallback(\r\n (event: { relatedTarget: EventTarget | null }) => {\r\n scheduleCloseSubItem(subItemId, event.relatedTarget);\r\n },\r\n [scheduleCloseSubItem, subItemId]\r\n );\r\n\r\n const isPeople = layout === \"people\";\r\n const isTitle = layout === \"title\";\r\n const isFormLeading =\r\n itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\r\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\r\n const showTrailingFunction =\r\n showFunctionIcon &&\r\n layout !== \"checked\" &&\r\n itemFunction !== \"form-radio\" &&\r\n itemFunction !== \"form-checkbox\";\r\n\r\n const textLevel = isTitle ? \"caption\" : \"text\";\r\n\r\n const textContent = isPeople ? (\r\n <span className=\"aviala-select-item__content\">\r\n <span className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}>\r\n {itemChildren}\r\n </span>\r\n {subtitle != null && subtitle !== false ? (\r\n <span className={cn(\"aviala-select-item__subtitle\", typographyVariants({ level: \"caption\" }))}>\r\n {subtitle}\r\n </span>\r\n ) : null}\r\n </span>\r\n ) : (\r\n <span className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}>\r\n {itemChildren}\r\n </span>\r\n );\r\n\r\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\r\n scheduleCloseSubItem(subItemId, event.relatedTarget);\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\r\n if (event.key === \"ArrowRight\" || event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n handleOpen();\r\n }\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeActiveSubItem();\r\n }\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault();\r\n closeActiveSubItem();\r\n }\r\n };\r\n\r\n const itemRow = (\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n className={cn(\"aviala-select-item aviala-select-sub-item\", className)}\r\n data-layout={layout !== \"default\" ? layout : undefined}\r\n data-function={itemFunction !== \"action\" ? itemFunction : undefined}\r\n data-state={open ? \"open\" : undefined}\r\n data-highlighted={open ? \"\" : undefined}\r\n data-disabled={disabled ? \"\" : undefined}\r\n aria-haspopup=\"menu\"\r\n aria-expanded={open}\r\n aria-controls={open ? subMenuId : undefined}\r\n onFocus={handleOpen}\r\n onBlur={handleTriggerBlur}\r\n onKeyDown={handleKeyDown}\r\n >\r\n {isFormLeading && itemFunction === \"form-radio\" ? <SelectItemFormRadio /> : null}\r\n {isFormLeading && itemFunction === \"form-checkbox\" ? (\r\n <SelectItemFormCheckbox />\r\n ) : null}\r\n\r\n {showLeftIcon && leftIcon ? renderItemIcon(leftIcon, leftIconLevel) : null}\r\n\r\n {isPeople ? (avatar ?? <SelectItemDefaultAvatar />) : null}\r\n\r\n {textContent}\r\n\r\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\r\n\r\n {showRightIcon && rightIcon ? renderItemIcon(rightIcon, leftIconLevel) : null}\r\n\r\n {showMoreFunction ? (\r\n <span className=\"aviala-select-item__more\">\r\n {moreAction ?? (\r\n <Link level=\"text\" href=\"#\" onClick={(event) => event.preventDefault()}>\r\n Text\r\n </Link>\r\n )}\r\n </span>\r\n ) : null}\r\n\r\n {renderFunctionSlot(itemFunction, layout, showTrailingFunction, icon)}\r\n </button>\r\n );\r\n\r\n const flyout = (\r\n <PopoverPrimitive.Content\r\n ref={contentRef}\r\n id={subMenuId}\r\n role=\"menu\"\r\n className={cn(\"aviala-select-content aviala-select-sub-content\", subMenu.className)}\r\n side={side}\r\n align=\"center\"\r\n sideOffset={sideOffset}\r\n avoidCollisions\r\n collisionPadding={8}\r\n data-exiting={exiting ? \"true\" : undefined}\r\n onOpenAutoFocus={(event) => event.preventDefault()}\r\n onCloseAutoFocus={(event) => event.preventDefault()}\r\n onPointerEnter={handleOpen}\r\n onPointerLeave={handlePointerLeave}\r\n onPointerDownOutside={(event) => event.preventDefault()}\r\n >\r\n <div className=\"aviala-select-viewport aviala-select-sub-content__viewport\">\r\n {wrapUngroupedSelectItems(subMenu.children)}\r\n </div>\r\n </PopoverPrimitive.Content>\r\n );\r\n\r\n return (\r\n <PopoverPrimitive.Root open={open} modal={false}>\r\n <div\r\n ref={(node) => {\r\n rootRef.current = node;\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n } else if (ref) {\r\n ref.current = node;\r\n }\r\n }}\r\n className=\"aviala-select-sub-item__root\"\r\n onPointerEnter={handleOpen}\r\n onPointerLeave={handlePointerLeave}\r\n >\r\n <PopoverPrimitive.Anchor asChild>{itemRow}</PopoverPrimitive.Anchor>\r\n {portalled ? <PopoverPrimitive.Portal>{flyout}</PopoverPrimitive.Portal> : flyout}\r\n </div>\r\n </PopoverPrimitive.Root>\r\n );\r\n }\r\n);\r\nSelectSubItem.displayName = \"SelectSubItem\";\r\n\r\n/** People layout convenience alias — same as `<SelectSubItem layout=\"people\" … />`. */\r\nexport type SelectSubItemPeopleProps = Omit<SelectSubItemProps, \"layout\">;\r\n\r\nexport const SelectSubItemPeople = forwardRef<HTMLDivElement, SelectSubItemPeopleProps>(\r\n (props, ref) => <SelectSubItem ref={ref} layout=\"people\" {...props} />\r\n);\r\nSelectSubItemPeople.displayName = \"SelectSubItemPeople\";\r\n\r\n/** People layout convenience alias — same as `<SelectItem layout=\"people\" … />`. */\r\nexport type SelectItemPeopleProps = Omit<SelectItemProps, \"layout\">;\r\n\r\nexport const SelectItemPeople = forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Item>,\r\n SelectItemPeopleProps\r\n>((props, ref) => <SelectItem ref={ref} layout=\"people\" {...props} />);\r\nSelectItemPeople.displayName = \"SelectItemPeople\";\r\n\r\nexport type SelectSeparatorProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>;\r\n\r\nexport const SelectSeparator = forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Separator>,\r\n SelectSeparatorProps\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"aviala-select-separator\", className)}\r\n {...props}\r\n />\r\n));\r\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\r\n\r\n/** Convenience wrapper matching Figma Select Menu Item Group */\r\nexport type SelectItemGroupProps = {\r\n label?: ReactNode;\r\n showDivider?: boolean;\r\n children: ReactNode;\r\n className?: string;\r\n};\r\n\r\nexport function SelectItemGroup({\r\n label,\r\n showDivider = false,\r\n children,\r\n className,\r\n}: SelectItemGroupProps) {\r\n return (\r\n <SelectGroup className={cn(\"aviala-select-group\", className)}>\r\n {label ? <SelectLabel>{label}</SelectLabel> : null}\r\n <div className=\"aviala-select-group__slot\">{children}</div>\r\n {showDivider ? <SelectSeparator /> : null}\r\n </SelectGroup>\r\n );\r\n}\r\n","import { Slot } from \"@radix-ui/react-slot\";\r\nimport type { IconLevel } from \"@aviala-design/icons\";\r\nimport {\r\n forwardRef,\r\n type AnchorHTMLAttributes,\r\n type MouseEvent,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { typographyVariants } from \"./typography\";\r\n\r\n/** Figma Components → Basic Input → Link */\r\nexport type LinkLevel = \"caption\" | \"text\";\r\nexport type LinkMode = \"noBackground\" | \"noBackgroundCustom\";\r\n\r\nconst levelStyles = {\r\n caption: {\r\n className: typographyVariants({ level: \"caption\" }),\r\n iconBox: \"h-5\",\r\n },\r\n text: {\r\n className: typographyVariants({ level: \"text\" }),\r\n iconBox: \"h-6\",\r\n },\r\n} as const;\r\n\r\nfunction renderIcon(\r\n node: ReactNode,\r\n level: LinkLevel\r\n): ReactNode {\r\n if (!node) return null;\r\n const { iconBox } = levelStyles[level];\r\n const iconLevel: IconLevel = level;\r\n const content = cloneAvialaIconElement(node, {\r\n level: iconLevel,\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className={cn(\r\n \"relative inline-flex shrink-0 items-center justify-center\",\r\n iconBox\r\n )}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nexport type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"disabled\"> & {\r\n level?: LinkLevel;\r\n mode?: LinkMode;\r\n iconOnly?: boolean;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n asChild?: boolean;\r\n disabled?: boolean;\r\n};\r\n\r\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\r\n (\r\n {\r\n className,\r\n level = \"caption\",\r\n mode = \"noBackground\",\r\n iconOnly: iconOnlyProp,\r\n leftIcon,\r\n rightIcon,\r\n children,\r\n asChild = false,\r\n disabled,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const iconOnly =\r\n iconOnlyProp ?? (!!(leftIcon ?? rightIcon) && !children);\r\n const resolvedLevel = level ?? \"caption\";\r\n const Comp = asChild ? Slot : \"a\";\r\n\r\n const sharedClassName = cn(\r\n \"aviala-link\",\r\n iconOnly ? \"aviala-link--icon-only\" : undefined,\r\n className\r\n );\r\n const disabledProps = disabled\r\n ? {\r\n tabIndex: -1 as const,\r\n onClick: (e: MouseEvent<HTMLAnchorElement>) => e.preventDefault(),\r\n }\r\n : {};\r\n\r\n if (asChild) {\r\n return (\r\n <Comp\r\n className={sharedClassName}\r\n data-mode={mode}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n ref={ref}\r\n aria-disabled={disabled || undefined}\r\n {...disabledProps}\r\n {...props}\r\n >\r\n {children}\r\n </Comp>\r\n );\r\n }\r\n\r\n return (\r\n <Comp\r\n className={sharedClassName}\r\n data-mode={mode}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n ref={ref}\r\n aria-disabled={disabled || undefined}\r\n {...disabledProps}\r\n {...props}\r\n >\r\n {renderIcon(leftIcon ?? (iconOnly ? rightIcon : undefined), resolvedLevel)}\r\n {!iconOnly && children !== undefined && children !== null && (\r\n <span\r\n className={cn(\r\n \"aviala-link__label relative shrink-0\",\r\n levelStyles[resolvedLevel].className\r\n )}\r\n >\r\n {children}\r\n </span>\r\n )}\r\n {!iconOnly && renderIcon(rightIcon, resolvedLevel)}\r\n </Comp>\r\n );\r\n }\r\n);\r\nLink.displayName = \"Link\";\r\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { typographyVariants } from \"./typography\";\n\nexport const Label = forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n typographyVariants({ level: \"text\" }),\n \"peer-disabled:cursor-not-allowed peer-disabled:opacity-55\",\n className\n )}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\r\nimport { SymbolRight } from \"@aviala-design/icons\";\r\nimport {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n type ComponentPropsWithoutRef,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { TypefacePair } from \"./typeface\";\r\n\r\n/** Figma Components → Information Collect → Checkbox */\r\nexport type CheckboxGroupDirection = \"vertical\" | \"horizontal\";\r\n\r\nexport type CheckboxProps = ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\r\n /** Figma Checkbox `Round` */\r\n round?: boolean;\r\n};\r\n\r\nexport const Checkbox = forwardRef<\r\n React.ElementRef<typeof CheckboxPrimitive.Root>,\r\n CheckboxProps\r\n>(({ className, round = false, ...props }, ref) => (\r\n <CheckboxPrimitive.Root\r\n ref={ref}\r\n className={cn(\"aviala-checkbox\", className)}\r\n data-round={round ? \"true\" : undefined}\r\n {...props}\r\n >\r\n <span aria-hidden className=\"aviala-checkbox__surface\" />\r\n <CheckboxPrimitive.Indicator className=\"aviala-checkbox__indicator\">\r\n <SymbolRight\r\n className=\"aviala-checkbox__indicator-icon aviala-checkbox__indicator-icon--check\"\r\n thickness=\"Bold\"\r\n width={12}\r\n height={12}\r\n aria-hidden\r\n />\r\n <span\r\n aria-hidden\r\n className=\"aviala-checkbox__indeterminate-mark aviala-checkbox__indicator-icon--indeterminate\"\r\n />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n));\r\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\r\n\r\nexport type CheckboxGroupProps = ComponentPropsWithoutRef<\"div\"> & {\r\n /** Figma Checkbox Input Group `Direction` */\r\n direction?: CheckboxGroupDirection;\r\n};\r\n\r\nexport const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\r\n ({ className, direction = \"vertical\", ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\"aviala-checkbox-group\", className)}\r\n data-direction={direction}\r\n {...props}\r\n />\r\n )\r\n);\r\nCheckboxGroup.displayName = \"CheckboxGroup\";\r\n\r\nfunction renderIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const icon = 18;\r\n const content =\r\n isValidElement(node) && typeof node.type !== \"string\"\r\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\r\n width: icon,\r\n height: icon,\r\n className: cn(\r\n (node as ReactElement<{ className?: string }>).props.className,\r\n \"shrink-0\"\r\n ),\r\n })\r\n : node;\r\n\r\n return <span className=\"aviala-checkbox-input__icon\">{content}</span>;\r\n}\r\n\r\nexport type CheckboxInputProps = Omit<CheckboxProps, \"children\"> & {\r\n /** Figma Typeface primary line */\r\n title: ReactNode;\r\n /** Figma Typeface caption line */\r\n description?: ReactNode;\r\n icon?: ReactNode;\r\n};\r\n\r\nexport const CheckboxInput = forwardRef<\r\n React.ElementRef<typeof CheckboxPrimitive.Root>,\r\n CheckboxInputProps\r\n>(\r\n (\r\n {\r\n className,\r\n title,\r\n description,\r\n icon,\r\n disabled,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => (\r\n <label\r\n htmlFor={id}\r\n className={cn(\"aviala-checkbox-input\", className)}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n >\r\n <Checkbox ref={ref} id={id} disabled={disabled} {...props} />\r\n {renderIcon(icon)}\r\n <TypefacePair\r\n className=\"aviala-checkbox-input__content min-w-0 flex-1\"\r\n title={title}\r\n description={description}\r\n />\r\n </label>\r\n )\r\n);\r\nCheckboxInput.displayName = \"CheckboxInput\";\r\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n Typography,\n type TypographyContent,\n type TypographyLevel,\n type TypographyTone,\n} from \"./typography\";\n\n/** Figma Components → System Composition → Typeface (527:56311) */\nexport type TypefaceContent =\n | \"allCustom\"\n | \"textCaption\"\n | \"textCaptionSubtitle\"\n | \"textTitle\"\n | \"textHeadline2\"\n | \"textHeadline1\";\n\ntype TypefaceLine = {\n level: TypographyLevel;\n content?: TypographyContent;\n tone?: TypographyTone;\n children: ReactNode;\n};\n\nconst typefaceLayouts: Record<TypefaceContent, TypefaceLine[]> = {\n allCustom: [\n { level: \"text\", children: null },\n { level: \"caption\", children: null },\n ],\n textCaption: [\n { level: \"text\", children: null },\n { level: \"caption\", children: null },\n ],\n textCaptionSubtitle: [\n { level: \"subtitle\", children: null },\n { level: \"text\", children: null },\n { level: \"caption\", children: null },\n ],\n textTitle: [\n { level: \"title\", children: null },\n { level: \"text\", children: null },\n ],\n textHeadline2: [\n { level: \"headline2\", children: null },\n { level: \"text\", children: null },\n ],\n textHeadline1: [\n { level: \"headline1\", children: null },\n { level: \"text\", children: null },\n ],\n};\n\nexport type TypefaceProps = Omit<HTMLAttributes<HTMLDivElement>, \"content\"> & {\n /** Figma `Content` preset */\n content?: TypefaceContent;\n /** Primary line — overrides preset first line */\n primary?: ReactNode;\n /** Secondary line — overrides preset second line */\n secondary?: ReactNode;\n /** Tertiary line — used by `textCaptionSubtitle` */\n tertiary?: ReactNode;\n /** Per-line content mode for numeric text */\n primaryContent?: TypographyContent;\n secondaryContent?: TypographyContent;\n tertiaryContent?: TypographyContent;\n tone?: TypographyTone;\n};\n\nexport const Typeface = forwardRef<HTMLDivElement, TypefaceProps>(\n (\n {\n className,\n content = \"allCustom\",\n primary,\n secondary,\n tertiary,\n primaryContent = \"text\",\n secondaryContent = \"text\",\n tertiaryContent = \"text\",\n tone = \"default\",\n children,\n ...props\n },\n ref\n ) => {\n const layout = typefaceLayouts[content];\n const values = resolveTypefaceValues(content, primary, secondary, tertiary, children);\n\n return (\n <div ref={ref} className={cn(\"aviala-typeface\", className)} data-content={content} {...props}>\n {layout.map((line, index) => {\n const value = values[index];\n if (value === undefined || value === null || value === false) return null;\n\n const lineContent =\n index === 0\n ? primaryContent\n : index === 1\n ? secondaryContent\n : tertiaryContent;\n\n return (\n <span key={`${line.level}-${index}`} className=\"aviala-typeface__line\">\n <Typography level={line.level} content={lineContent} tone={tone}>\n {value}\n </Typography>\n </span>\n );\n })}\n </div>\n );\n }\n);\nTypeface.displayName = \"Typeface\";\n\nfunction resolveTypefaceValues(\n content: TypefaceContent,\n primary?: ReactNode,\n secondary?: ReactNode,\n tertiary?: ReactNode,\n children?: ReactNode\n): ReactNode[] {\n if (primary !== undefined || secondary !== undefined || tertiary !== undefined) {\n return [primary, secondary, tertiary];\n }\n\n if (children == null || children === false) {\n return typefaceLayouts[content].map(() => \"Text\");\n }\n\n if (Array.isArray(children)) {\n return children;\n }\n\n return [children];\n}\n\n/** Convenience helper for two-line label + caption pairs (Radio, Checkbox, etc.) */\nexport type TypefacePairProps = Omit<TypefaceProps, \"content\"> & {\n title: ReactNode;\n description?: ReactNode;\n};\n\nexport const TypefacePair = forwardRef<HTMLDivElement, TypefacePairProps>(\n ({ title, description, ...props }, ref) => (\n <Typeface\n ref={ref}\n content=\"textCaption\"\n primary={title}\n secondary={description}\n {...props}\n />\n )\n);\nTypefacePair.displayName = \"TypefacePair\";\n","import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { TypefacePair } from \"./typeface\";\n\n/** Figma Components → Information Collect → Radio */\nexport type RadioGroupDirection = \"vertical\" | \"horizontal\";\nexport type RadioInputVariant = \"normal\" | \"card\";\n\nexport type RadioGroupProps = ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {\n /** Figma Radio Input Group `Direction` */\n direction?: RadioGroupDirection;\n};\n\nexport const RadioGroup = forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({ className, direction = \"vertical\", ...props }, ref) => (\n <RadioGroupPrimitive.Root\n className={cn(\"aviala-radio-group\", className)}\n data-direction={direction}\n ref={ref}\n {...props}\n />\n));\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nexport type RadioGroupItemProps = ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>;\n\nexport const RadioGroupItem = forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\"aviala-radio\", className)}\n {...props}\n >\n <span aria-hidden className=\"aviala-radio__surface\" />\n <span aria-hidden className=\"aviala-radio__indicator\" />\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nfunction renderIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const icon = 18;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: icon,\n height: icon,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return <span className=\"aviala-radio-input__icon\">{content}</span>;\n}\n\nexport type RadioInputProps = Omit<RadioGroupItemProps, \"children\"> & {\n /** Figma Typeface primary line */\n title: ReactNode;\n /** Figma Typeface caption line */\n description?: ReactNode;\n icon?: ReactNode;\n /** Figma Radio Input `Style` */\n variant?: RadioInputVariant;\n};\n\nexport const RadioInput = forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioInputProps\n>(\n (\n {\n className,\n title,\n description,\n icon,\n variant = \"normal\",\n disabled,\n id,\n ...props\n },\n ref\n ) => (\n <label\n htmlFor={id}\n className={cn(\"aviala-radio-input\", className)}\n data-style={variant}\n data-disabled={disabled ? \"true\" : undefined}\n >\n <RadioGroupItem ref={ref} id={id} disabled={disabled} {...props} />\n {renderIcon(icon)}\n <TypefacePair\n className=\"aviala-radio-input__content min-w-0 flex-1\"\n title={title}\n description={description}\n />\n </label>\n )\n);\nRadioInput.displayName = \"RadioInput\";\n","import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → Basic Input → Switch */\nexport type SwitchSize = \"regular\" | \"small\";\n\nexport type SwitchProps = ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> & {\n size?: SwitchSize;\n};\n\nexport const Switch = forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size = \"regular\", ...props }, ref) => (\n <SwitchPrimitive.Root\n className={cn(\n \"aviala-switch\",\n size === \"small\" && \"aviala-switch--small\",\n className\n )}\n ref={ref}\n {...props}\n >\n <span aria-hidden className=\"aviala-switch__surface\" />\n <SwitchPrimitive.Thumb className=\"aviala-switch__thumb\" />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n","import { Slot } from \"@radix-ui/react-slot\";\r\nimport {\r\n forwardRef,\r\n type AnchorHTMLAttributes,\r\n type HTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { Typography } from \"./typography\";\r\n\r\n/** Figma Components → System Composition → Anchor */\r\nexport type AnchorIndentLevel = 0 | 1 | 2 | 3;\r\n\r\nexport type AnchorProps = HTMLAttributes<HTMLElement> & {\r\n as?: \"nav\" | \"div\";\r\n};\r\n\r\nexport const Anchor = forwardRef<HTMLElement, AnchorProps>(\r\n ({ className, as: Tag = \"nav\", ...props }, ref) => (\r\n <Tag ref={ref as never} className={cn(\"aviala-anchor\", className)} {...props} />\r\n )\r\n);\r\nAnchor.displayName = \"Anchor\";\r\n\r\nexport type AnchorItemProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"children\"> & {\r\n activated?: boolean;\r\n indentLevel?: AnchorIndentLevel;\r\n asChild?: boolean;\r\n children: ReactNode;\r\n};\r\n\r\nexport const AnchorItem = forwardRef<HTMLAnchorElement, AnchorItemProps>(\r\n (\r\n {\r\n className,\r\n activated = false,\r\n indentLevel = 0,\r\n asChild = false,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const Comp = asChild ? Slot : \"a\";\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(\"aviala-anchor-item\", className)}\r\n data-activated={activated ? \"true\" : \"false\"}\r\n data-indent={String(indentLevel)}\r\n {...props}\r\n >\r\n <span className=\"aviala-anchor-item__rail\" aria-hidden />\r\n <span className=\"aviala-anchor-item__content\">\r\n <Typography level=\"text\" as=\"span\" className=\"aviala-anchor-item__label\">\r\n {children}\r\n </Typography>\r\n </span>\r\n </Comp>\r\n );\r\n }\r\n);\r\nAnchorItem.displayName = \"AnchorItem\";\r\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { cn } from \"../lib/utils\";\nimport { useThemeLayoutKey } from \"../theme/theme-provider\";\nimport { typographyVariants } from \"./typography\";\n\n/** Figma Components → Basic Input → Segmentator */\nexport type SegmentatorMode = \"nested\" | \"tiled\";\n\ntype SegmentatorContextValue = {\n value?: string;\n onValueChange?: (value: string) => void;\n mode: SegmentatorMode;\n allRound: boolean;\n disabled?: boolean;\n consumeClickRef: RefObject<boolean>;\n dragPreviewValue: string | null;\n isPressing: boolean;\n};\n\nconst SegmentatorContext = createContext<SegmentatorContextValue | null>(null);\n\nfunction useSegmentatorContext() {\n const ctx = useContext(SegmentatorContext);\n if (!ctx) {\n throw new Error(\"SegmentatorItem must be used within SegmentatorGroup\");\n }\n return ctx;\n}\n\nfunction renderIcon(node: ReactNode, dimmed?: boolean): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: \"text\",\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-segmentator-item__icon\",\n dimmed && \"opacity-[var(--button-disabled-opacity,0.55)]\"\n )}\n >\n {content}\n </span>\n );\n}\n\nfunction useSegmentatorState(\n value: string | undefined,\n defaultValue: string | undefined,\n onValueChange?: (value: string) => void\n) {\n const [internal, setInternal] = useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const current = isControlled ? value : internal;\n\n const setValue = (next: string) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n };\n\n return [current, setValue] as const;\n}\n\ntype SegmentatorThumbMetrics = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nconst SEGMENTATOR_DRAG_THRESHOLD_PX = 4;\nconst SEGMENTATOR_PRESS_SCALE = 0.96;\nconst SEGMENTATOR_HAPTIC_PRESS_PATTERN = [20, 30, 15] as const;\nconst SEGMENTATOR_HAPTIC_SELECT_MS = 16;\n\nfunction getPressedItemFromTarget(target: EventTarget | null): HTMLButtonElement | null {\n if (!(target instanceof Element)) return null;\n const item = target.closest<HTMLButtonElement>(\".aviala-segmentator-item\");\n if (!item || item.disabled) return null;\n return item;\n}\n\nfunction triggerSegmentatorHaptic(kind: \"press\" | \"select\") {\n if (typeof navigator === \"undefined\" || typeof navigator.vibrate !== \"function\") return;\n\n try {\n if (kind === \"press\") {\n navigator.vibrate([...SEGMENTATOR_HAPTIC_PRESS_PATTERN]);\n } else {\n navigator.vibrate(SEGMENTATOR_HAPTIC_SELECT_MS);\n }\n } catch {\n // Vibration API is unavailable on iOS Safari and may be blocked without user gesture.\n }\n}\n\ntype SegmentatorDragState = {\n pressing: boolean;\n active: boolean;\n metrics: SegmentatorThumbMetrics | null;\n};\n\ntype SegmentatorPointerDrag = {\n pointerId: number;\n startX: number;\n moved: boolean;\n fallback: SegmentatorThumbMetrics;\n previewValue: string | null;\n cleanupWindowListeners?: () => void;\n};\n\nfunction buildThumbStyle(metrics: SegmentatorThumbMetrics): CSSProperties {\n return {\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n zIndex: 0,\n width: metrics.width,\n height: metrics.height,\n transformOrigin: \"center center\",\n [\"--segmentator-thumb-x\" as string]: `${metrics.x}px`,\n [\"--segmentator-thumb-y\" as string]: `${metrics.y}px`,\n };\n}\n\nfunction isSegmentatorDragPointer(pointerType: string): boolean {\n if (pointerType === \"touch\" || pointerType === \"pen\") return true;\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(hover: none), (pointer: coarse)\").matches;\n}\n\nfunction getEnabledSegmentatorItems(group: HTMLElement): HTMLButtonElement[] {\n return Array.from(\n group.querySelectorAll<HTMLButtonElement>('.aviala-segmentator-item:not(:disabled)')\n );\n}\n\nfunction measureItemThumbMetrics(\n item: HTMLButtonElement,\n group: HTMLElement\n): SegmentatorThumbMetrics {\n const groupRect = group.getBoundingClientRect();\n const itemRect = item.getBoundingClientRect();\n return {\n x: itemRect.left - groupRect.left,\n y: itemRect.top - groupRect.top,\n width: itemRect.width,\n height: itemRect.height,\n };\n}\n\nfunction findItemAtClientX(\n items: HTMLButtonElement[],\n clientX: number\n): HTMLButtonElement | null {\n for (const item of items) {\n const rect = item.getBoundingClientRect();\n if (clientX >= rect.left && clientX <= rect.right) return item;\n }\n\n let nearest: HTMLButtonElement | null = null;\n let minDistance = Number.POSITIVE_INFINITY;\n\n for (const item of items) {\n const rect = item.getBoundingClientRect();\n const center = rect.left + rect.width / 2;\n const distance = Math.abs(clientX - center);\n if (distance < minDistance) {\n minDistance = distance;\n nearest = item;\n }\n }\n\n return nearest;\n}\n\nfunction lerpSegmentatorThumbMetrics(\n from: SegmentatorThumbMetrics,\n to: SegmentatorThumbMetrics,\n t: number\n): SegmentatorThumbMetrics {\n const clamped = Math.max(0, Math.min(1, t));\n return {\n x: from.x + (to.x - from.x) * clamped,\n y: from.y + (to.y - from.y) * clamped,\n width: from.width + (to.width - from.width) * clamped,\n height: from.height + (to.height - from.height) * clamped,\n };\n}\n\nfunction getItemCenterX(item: HTMLButtonElement): number {\n const rect = item.getBoundingClientRect();\n return rect.left + rect.width / 2;\n}\n\nfunction computeDragThumbMetrics(\n group: HTMLElement,\n items: HTMLButtonElement[],\n clientX: number,\n fallback: SegmentatorThumbMetrics\n): { metrics: SegmentatorThumbMetrics; item: HTMLButtonElement | null } {\n if (items.length === 0) {\n return { metrics: fallback, item: null };\n }\n\n const measured = items.map((item) => ({\n item,\n metrics: measureItemThumbMetrics(item, group),\n }));\n\n const first = measured[0];\n const last = measured[measured.length - 1];\n const firstCenter = getItemCenterX(first.item);\n const lastCenter = getItemCenterX(last.item);\n\n if (clientX <= firstCenter) {\n return { metrics: first.metrics, item: first.item };\n }\n\n if (clientX >= lastCenter) {\n return { metrics: last.metrics, item: last.item };\n }\n\n for (let index = 0; index < measured.length - 1; index += 1) {\n const current = measured[index];\n const next = measured[index + 1];\n const currentCenter = getItemCenterX(current.item);\n const nextCenter = getItemCenterX(next.item);\n\n if (clientX >= currentCenter && clientX <= nextCenter) {\n const span = nextCenter - currentCenter;\n const progress = span > 0 ? (clientX - currentCenter) / span : 0;\n const previewItem = progress < 0.5 ? current.item : next.item;\n return {\n metrics: lerpSegmentatorThumbMetrics(current.metrics, next.metrics, progress),\n item: previewItem,\n };\n }\n }\n\n const targetItem = findItemAtClientX(items, clientX);\n if (!targetItem) {\n return { metrics: fallback, item: null };\n }\n\n return {\n metrics: measureItemThumbMetrics(targetItem, group),\n item: targetItem,\n };\n}\n\nfunction applyThumbMetrics(\n el: HTMLSpanElement,\n metrics: SegmentatorThumbMetrics,\n instant = false\n) {\n if (instant) {\n el.setAttribute(\"data-instant\", \"true\");\n }\n el.style.removeProperty(\"transform\");\n el.style.width = `${metrics.width}px`;\n el.style.height = `${metrics.height}px`;\n el.style.setProperty(\"--segmentator-thumb-x\", `${metrics.x}px`);\n el.style.setProperty(\"--segmentator-thumb-y\", `${metrics.y}px`);\n if (instant) {\n void el.offsetWidth;\n el.removeAttribute(\"data-instant\");\n }\n}\n\nfunction metricsApproxEqual(\n a: SegmentatorThumbMetrics,\n b: SegmentatorThumbMetrics,\n epsilon = 0.5\n) {\n return (\n Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.width - b.width) < epsilon &&\n Math.abs(a.height - b.height) < epsilon\n );\n}\n\nfunction useSegmentatorThumb(\n groupRef: RefObject<HTMLDivElement | null>,\n selectedValue: string | undefined,\n layoutKey: string | null,\n dragState: SegmentatorDragState\n) {\n const thumbElRef = useRef<HTMLSpanElement | null>(null);\n const metricsRef = useRef<SegmentatorThumbMetrics | null>(null);\n const dragStateRef = useRef(dragState);\n const [thumb, setThumb] = useState<SegmentatorThumbMetrics | null>(null);\n const isInitialMount = useRef(true);\n\n dragStateRef.current = dragState;\n\n const measureThumb = useCallback((): SegmentatorThumbMetrics | null => {\n const group = groupRef.current;\n if (!group) return null;\n\n const selected = group.querySelector<HTMLButtonElement>(\n '.aviala-segmentator-item[data-selected=\"true\"]'\n );\n if (!selected) return null;\n\n const groupRect = group.getBoundingClientRect();\n const itemRect = selected.getBoundingClientRect();\n return {\n x: itemRect.left - groupRect.left,\n y: itemRect.top - groupRect.top,\n width: itemRect.width,\n height: itemRect.height,\n };\n }, [groupRef]);\n\n const syncThumb = useCallback(\n (metrics: SegmentatorThumbMetrics, instant = false) => {\n metricsRef.current = metrics;\n setThumb(metrics);\n const el = thumbElRef.current;\n if (el) applyThumbMetrics(el, metrics, instant);\n },\n []\n );\n\n const remeasureThumb = useCallback(() => {\n if (dragStateRef.current.pressing || dragStateRef.current.active) return;\n\n const metrics = measureThumb();\n if (!metrics) return;\n\n syncThumb(metrics, true);\n }, [measureThumb, syncThumb]);\n\n const onThumbRef = useCallback((node: HTMLSpanElement | null) => {\n thumbElRef.current = node;\n if (node && metricsRef.current && isInitialMount.current) {\n applyThumbMetrics(node, metricsRef.current, true);\n isInitialMount.current = false;\n }\n }, []);\n\n useLayoutEffect(() => {\n if ((dragState.pressing || dragState.active) && dragState.metrics) {\n syncThumb(dragState.metrics, true);\n return;\n }\n\n const next = measureThumb();\n if (!next) return;\n\n const el = thumbElRef.current;\n\n if (isInitialMount.current) {\n metricsRef.current = next;\n setThumb(next);\n if (el) {\n applyThumbMetrics(el, next, true);\n isInitialMount.current = false;\n }\n return;\n }\n\n if (!el) {\n syncThumb(next, true);\n return;\n }\n\n const startMetrics = metricsRef.current ?? next;\n const prefersReducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (metricsApproxEqual(startMetrics, next) || prefersReducedMotion) {\n syncThumb(next, true);\n return;\n }\n\n syncThumb(next, false);\n }, [\n selectedValue,\n measureThumb,\n syncThumb,\n dragState.active,\n dragState.pressing,\n dragState.metrics,\n ]);\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n if (!group) return;\n\n const observer = new ResizeObserver(() => {\n remeasureThumb();\n });\n observer.observe(group);\n\n const items = group.querySelectorAll(\".aviala-segmentator-item\");\n items.forEach((item) => observer.observe(item));\n\n const layoutObserver = new MutationObserver(() => {\n requestAnimationFrame(remeasureThumb);\n });\n layoutObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"data-density\", \"data-mode\"],\n });\n\n return () => {\n observer.disconnect();\n layoutObserver.disconnect();\n };\n }, [groupRef, remeasureThumb]);\n\n // ThemeProvider applies density/mode in useLayoutEffect on ancestors; remeasure after\n // layout settles so thumb width/height match the updated item metrics.\n useEffect(() => {\n if (!layoutKey) return;\n const frame = requestAnimationFrame(() => {\n remeasureThumb();\n });\n return () => cancelAnimationFrame(frame);\n }, [layoutKey, remeasureThumb]);\n\n return { thumb, onThumbRef, measureThumb, applyThumbImmediate: syncThumb };\n}\n\nexport type SegmentatorGroupProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"defaultValue\" | \"onChange\"\n> & {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n mode?: SegmentatorMode;\n allRound?: boolean;\n disabled?: boolean;\n};\n\nexport const SegmentatorGroup = forwardRef<HTMLDivElement, SegmentatorGroupProps>(\n (\n {\n className,\n value,\n defaultValue,\n onValueChange,\n mode = \"nested\",\n allRound = false,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [currentValue, setValue] = useSegmentatorState(value, defaultValue, onValueChange);\n const groupRef = useRef<HTMLDivElement>(null);\n const layoutKey = useThemeLayoutKey();\n const consumeClickRef = useRef(false);\n const pointerDragRef = useRef<SegmentatorPointerDrag | null>(null);\n const [dragPreviewValue, setDragPreviewValue] = useState<string | null>(null);\n const [dragState, setDragState] = useState<SegmentatorDragState>({\n pressing: false,\n active: false,\n metrics: null,\n });\n const { thumb, onThumbRef, measureThumb, applyThumbImmediate } = useSegmentatorThumb(\n groupRef,\n currentValue,\n layoutKey,\n dragState\n );\n\n const resetPointerInteraction = useCallback(() => {\n pointerDragRef.current?.cleanupWindowListeners?.();\n pointerDragRef.current = null;\n setDragPreviewValue(null);\n setDragState({ pressing: false, active: false, metrics: null });\n }, []);\n\n const finishPointerInteraction = useCallback(\n (pointerId: number) => {\n const drag = pointerDragRef.current;\n const group = groupRef.current;\n if (!drag || drag.pointerId !== pointerId || !group) return;\n\n drag.cleanupWindowListeners?.();\n drag.cleanupWindowListeners = undefined;\n\n if (group.hasPointerCapture(pointerId)) {\n group.releasePointerCapture(pointerId);\n }\n\n if (drag.moved) {\n consumeClickRef.current = true;\n const nextValue = drag.previewValue ?? currentValue;\n if (nextValue) {\n setValue(nextValue);\n }\n }\n\n resetPointerInteraction();\n },\n [currentValue, resetPointerInteraction, setValue]\n );\n\n const updateDragThumb = useCallback(\n (clientX: number) => {\n const group = groupRef.current;\n const drag = pointerDragRef.current;\n if (!group || !drag) return null;\n\n const items = getEnabledSegmentatorItems(group);\n if (items.length === 0) return null;\n\n const fallback =\n drag.fallback ??\n (() => {\n const selected = group.querySelector<HTMLButtonElement>(\n '.aviala-segmentator-item[data-selected=\"true\"]'\n );\n if (selected) return measureItemThumbMetrics(selected, group);\n return measureItemThumbMetrics(items[0], group);\n })();\n\n const { metrics, item } = computeDragThumbMetrics(group, items, clientX, fallback);\n const nextPreviewValue = item?.dataset.value ?? drag.previewValue;\n\n if (nextPreviewValue && nextPreviewValue !== drag.previewValue) {\n triggerSegmentatorHaptic(\"select\");\n }\n\n drag.previewValue = nextPreviewValue;\n applyThumbImmediate(metrics, true);\n setDragPreviewValue(nextPreviewValue);\n setDragState({ pressing: true, active: true, metrics });\n return item;\n },\n [applyThumbImmediate]\n );\n\n const attachWindowDragListeners = useCallback(\n (pointerId: number) => {\n const onPointerMove = (event: PointerEvent) => {\n const drag = pointerDragRef.current;\n if (!drag || drag.pointerId !== pointerId) return;\n\n if (Math.abs(event.clientX - drag.startX) < SEGMENTATOR_DRAG_THRESHOLD_PX) return;\n\n drag.moved = true;\n event.preventDefault();\n updateDragThumb(event.clientX);\n };\n\n const onPointerEnd = (event: PointerEvent) => {\n finishPointerInteraction(event.pointerId);\n };\n\n window.addEventListener(\"pointermove\", onPointerMove, { capture: true, passive: false });\n window.addEventListener(\"pointerup\", onPointerEnd, { capture: true });\n window.addEventListener(\"pointercancel\", onPointerEnd, { capture: true });\n\n return () => {\n window.removeEventListener(\"pointermove\", onPointerMove, { capture: true });\n window.removeEventListener(\"pointerup\", onPointerEnd, { capture: true });\n window.removeEventListener(\"pointercancel\", onPointerEnd, { capture: true });\n };\n },\n [finishPointerInteraction, updateDragThumb]\n );\n\n const finishPointerDrag = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n finishPointerInteraction(event.pointerId);\n },\n [finishPointerInteraction]\n );\n\n const handlePointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled || !isSegmentatorDragPointer(event.pointerType)) return;\n\n const pressedItem = getPressedItemFromTarget(event.target);\n if (!pressedItem) return;\n\n const group = groupRef.current;\n if (!group) return;\n\n const metrics = measureThumb();\n if (!metrics) return;\n\n const pressedValue = pressedItem.dataset.value ?? currentValue;\n\n triggerSegmentatorHaptic(\"press\");\n event.preventDefault();\n\n pointerDragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n moved: false,\n fallback: metrics,\n previewValue: pressedValue,\n };\n pointerDragRef.current.cleanupWindowListeners = attachWindowDragListeners(\n event.pointerId\n );\n\n setDragPreviewValue(pressedValue);\n setDragState({ pressing: true, active: false, metrics });\n group.setPointerCapture(event.pointerId);\n };\n\n const thumbStyle: CSSProperties | undefined = thumb ? buildThumbStyle(thumb) : undefined;\n\n return (\n <SegmentatorContext.Provider\n value={{\n value: currentValue,\n onValueChange: setValue,\n mode,\n allRound,\n disabled,\n consumeClickRef,\n dragPreviewValue,\n isPressing: dragState.pressing,\n }}\n >\n <div\n ref={(node) => {\n groupRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"group\"\n {...props}\n className={cn(\"aviala-segmentator-group\", className)}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-mode={mode}\n data-dragging={dragState.active ? \"true\" : undefined}\n data-pressing={dragState.pressing ? \"true\" : undefined}\n onPointerDown={handlePointerDown}\n onPointerUp={finishPointerDrag}\n onPointerCancel={finishPointerDrag}\n >\n {children}\n {thumb && (\n <span\n ref={onThumbRef}\n aria-hidden\n className=\"aviala-segmentator-thumb\"\n data-mode={mode}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-pressing={dragState.pressing ? \"true\" : undefined}\n style={thumbStyle}\n />\n )}\n </div>\n </SegmentatorContext.Provider>\n );\n }\n);\nSegmentatorGroup.displayName = \"SegmentatorGroup\";\n\nexport type SegmentatorItemProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> & {\n value: string;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n iconOnly?: boolean;\n};\n\nexport const SegmentatorItem = forwardRef<HTMLButtonElement, SegmentatorItemProps>(\n (\n {\n className,\n value,\n leftIcon,\n rightIcon,\n iconOnly: iconOnlyProp,\n children,\n disabled,\n onClick,\n ...props\n },\n ref\n ) => {\n const ctx = useSegmentatorContext();\n const selected = ctx.value === value;\n const iconOnly =\n iconOnlyProp ?? (!!(leftIcon ?? rightIcon) && !children);\n const isDisabled = disabled || ctx.disabled;\n const dimmed = isDisabled;\n const icon = iconOnly ? (leftIcon ?? rightIcon) : leftIcon;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n data-selected={selected ? \"true\" : \"false\"}\n data-value={value}\n data-mode={ctx.mode}\n data-drag-preview={\n ctx.isPressing && ctx.dragPreviewValue === value ? \"true\" : undefined\n }\n data-all-round={ctx.allRound ? \"true\" : \"false\"}\n disabled={isDisabled}\n className={cn(\"aviala-segmentator-item\", iconOnly && \"min-w-0\", className)}\n onClick={(e) => {\n if (ctx.consumeClickRef.current) {\n ctx.consumeClickRef.current = false;\n return;\n }\n ctx.onValueChange?.(value);\n onClick?.(e);\n }}\n {...props}\n >\n {renderIcon(icon, dimmed && !!icon)}\n {!iconOnly && (\n <span\n className={cn(\n \"relative z-[1] shrink-0 [word-break:break-word]\",\n typographyVariants({ level: \"text\" }),\n dimmed && \"opacity-[var(--button-disabled-opacity,0.55)]\"\n )}\n >\n {children}\n </span>\n )}\n {!iconOnly && renderIcon(rightIcon, dimmed && !!rightIcon)}\n </button>\n );\n }\n);\nSegmentatorItem.displayName = \"SegmentatorItem\";\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Label } from \"./label\";\nimport { Typography } from \"./typography\";\n\nexport type FormFieldProps = HTMLAttributes<HTMLDivElement> & {\n label?: string;\n htmlFor?: string;\n description?: ReactNode;\n error?: string;\n required?: boolean;\n};\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, label, htmlFor, description, error, required, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"grid gap-[var(--gap-inside,4px)]\", className)} {...props}>\n {label ? (\n <Label htmlFor={htmlFor}>\n {label}\n {required ? <span className=\"text-destructive ml-0.5\">*</span> : null}\n </Label>\n ) : null}\n {children}\n {description && !error ? (\n <Typography level=\"caption\" as=\"p\">\n {description}\n </Typography>\n ) : null}\n {error ? (\n <Typography level=\"caption\" as=\"p\" className=\"text-destructive\">\n {error}\n </Typography>\n ) : null}\n </div>\n )\n);\nFormField.displayName = \"FormField\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { typographyVariants } from \"./typography\";\n\nexport type InputGroupProps = HTMLAttributes<HTMLDivElement> & {\n orientation?: \"horizontal\" | \"vertical\";\n};\n\nexport const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(\n ({ className, orientation = \"horizontal\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n orientation === \"horizontal\"\n ? \"flex-row items-center gap-[var(--gap-component,8px)]\"\n : \"flex-col gap-[var(--gap-inside,4px)]\",\n className\n )}\n {...props}\n />\n )\n);\nInputGroup.displayName = \"InputGroup\";\n\nexport const InputGroupAddon = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center shrink-0\",\n typographyVariants({ level: \"caption\" }),\n className\n )}\n {...props}\n />\n));\nInputGroupAddon.displayName = \"InputGroupAddon\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { typographyVariants } from \"./typography\";\n\nexport type StackProps = HTMLAttributes<HTMLDivElement> & {\n gap?: \"inside\" | \"component\" | \"content\" | \"block\" | \"page\";\n direction?: \"row\" | \"column\";\n};\n\nconst gapMap = {\n inside: \"var(--gap-inside, 4px)\",\n component: \"var(--gap-component, 8px)\",\n content: \"var(--gap-content, 10px)\",\n block: \"var(--gap-block, 14px)\",\n page: \"var(--gap-page-space, 24px)\",\n};\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n ({ className, gap = \"component\", direction = \"column\", style, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex\", direction === \"row\" ? \"flex-row\" : \"flex-col\", className)}\n style={{ gap: gapMap[gap], ...style }}\n {...props}\n />\n )\n);\nStack.displayName = \"Stack\";\n\nexport const Fieldset = forwardRef<\n HTMLFieldSetElement,\n HTMLAttributes<HTMLFieldSetElement> & { legend?: string }\n>(({ className, legend, children, ...props }, ref) => (\n <fieldset\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-md)] border border-border p-[var(--padding-md,10px)]\",\n className\n )}\n {...props}\n >\n {legend ? (\n <legend className={cn(\"px-1\", typographyVariants({ level: \"text\" }))}>{legend}</legend>\n ) : null}\n {children}\n </fieldset>\n));\nFieldset.displayName = \"Fieldset\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { ColorPickerArea } from \"./color-picker-area\";\nimport { ColorPickerContext, useColorPickerContext } from \"./color-picker-context\";\nimport { ColorPickerInputs } from \"./color-picker-inputs\";\nimport { ColorPickerPresets } from \"./color-picker-presets\";\nimport { ColorPickerSlider } from \"./color-picker-slider\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\nimport type { ColorFormat } from \"./color-utils\";\n\nexport type ColorPickerProps = UseColorPickerStateOptions & {\n children: ReactNode;\n className?: string;\n disabled?: boolean;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets?: number;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport function ColorPicker({\n children,\n className,\n disabled,\n presets,\n onPresetsChange,\n maxPresets = 8,\n value,\n defaultValue,\n onChange,\n format,\n defaultFormat,\n onFormatChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n}: ColorPickerProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? uncontrolledOpen;\n\n const handleOpenChange = (next: boolean) => {\n if (disabled && next) return;\n if (controlledOpen === undefined) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n };\n\n const state = useColorPickerState({\n value,\n defaultValue,\n onChange,\n format,\n defaultFormat,\n onFormatChange,\n });\n\n const contextValue = {\n ...state,\n open,\n disabled,\n presets,\n onPresetsChange,\n maxPresets,\n };\n\n return (\n <ColorPickerContextProvider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)} {...spiralDebugId(\"color-picker\")}>\n {children}\n </div>\n </PopoverPrimitive.Root>\n </ColorPickerContextProvider>\n );\n}\n\nfunction ColorPickerContextProvider({\n value,\n children,\n}: {\n value: NonNullable<React.ComponentProps<typeof ColorPickerContext.Provider>[\"value\"]>;\n children: ReactNode;\n}) {\n return <ColorPickerContext.Provider value={value}>{children}</ColorPickerContext.Provider>;\n}\n\nexport type ColorPickerTriggerProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Trigger> & {\n size?: \"regular\" | \"big\";\n allRound?: boolean;\n placeholder?: string;\n className?: string;\n};\n\nexport const ColorPickerTrigger = forwardRef<\n HTMLButtonElement,\n ColorPickerTriggerProps\n>(({ className, size = \"regular\", allRound = false, placeholder = \"Select color\", ...props }, ref) => {\n const { value, open, disabled } = useColorPickerContext();\n\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-color-picker-trigger\", className)}\n {...spiralDebugId(\"color-picker.trigger\")}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-open={open ? \"true\" : \"false\"}\n data-disabled={disabled ? \"true\" : undefined}\n disabled={disabled}\n {...props}\n >\n <span className=\"aviala-color-picker-trigger__swatch\" {...spiralDebugId(\"color-picker.trigger.swatch\")}>\n <span\n className=\"aviala-color-picker-trigger__swatch-inner\"\n style={{ backgroundColor: value }}\n aria-hidden\n />\n </span>\n <span className=\"aviala-color-picker-trigger__value\" {...spiralDebugId(\"color-picker.trigger.value\")}>\n {value ? (\n value.replace(/^#/, \"\").slice(0, 6).toUpperCase()\n ) : (\n <span className=\"aviala-color-picker-trigger__placeholder\">{placeholder}</span>\n )}\n </span>\n </button>\n </PopoverPrimitive.Trigger>\n );\n});\nColorPickerTrigger.displayName = \"ColorPickerTrigger\";\n\nfunction isWithinSelectLayer(target: EventTarget | null) {\n return (\n target instanceof Element &&\n (target.closest(\".aviala-select-content\") !== null ||\n target.closest(\"[data-radix-select-viewport]\") !== null)\n );\n}\n\nexport type ColorPickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n showEyedropper?: boolean;\n showPresets?: boolean;\n};\n\nexport const ColorPickerContent = forwardRef<HTMLDivElement, ColorPickerContentProps>(\n (\n {\n className,\n align = \"start\",\n sideOffset = 8,\n showEyedropper = true,\n showPresets = true,\n ...props\n },\n ref\n ) => {\n const { presets, onPresetsChange, maxPresets, disabled } = useColorPickerContext();\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\"aviala-color-picker-content\", className)}\n {...spiralDebugId(\"color-picker.content\")}\n onPointerDownOutside={(event) => {\n if (isWithinSelectLayer(event.target)) event.preventDefault();\n }}\n onInteractOutside={(event) => {\n if (isWithinSelectLayer(event.target)) event.preventDefault();\n }}\n onFocusOutside={(event) => event.preventDefault()}\n {...props}\n >\n <div className=\"aviala-color-picker-panel\">\n <ColorPickerArea disabled={disabled} />\n <ColorPickerSlider kind=\"hue\" disabled={disabled} />\n <ColorPickerSlider kind=\"alpha\" disabled={disabled} />\n <ColorPickerInputs disabled={disabled} showEyedropper={showEyedropper} />\n {showPresets ? (\n <ColorPickerPresets\n disabled={disabled}\n presets={presets}\n onPresetsChange={onPresetsChange}\n maxPresets={maxPresets}\n />\n ) : null}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n }\n);\nColorPickerContent.displayName = \"ColorPickerContent\";\n\nexport type { ColorFormat };\n","import { useCallback, useRef } from \"react\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { clamp01, pureHueHex } from \"./color-utils\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\nimport { usePointerDrag } from \"./use-pointer-drag\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\n\nexport type ColorPickerAreaProps = {\n className?: string;\n disabled?: boolean;\n} & Pick<UseColorPickerStateOptions, \"value\" | \"defaultValue\" | \"onChange\">;\n\nexport function ColorPickerArea({\n className,\n disabled,\n value: valueProp,\n defaultValue,\n onChange,\n}: ColorPickerAreaProps) {\n const ctx = useOptionalColorPickerContext();\n const local = useColorPickerState({\n value: ctx ? undefined : valueProp,\n defaultValue: ctx?.value ?? defaultValue,\n onChange: ctx ? undefined : onChange,\n });\n\n const { hsva, setHsva } = ctx ?? local;\n const isDisabled = disabled ?? ctx?.disabled;\n\n const ref = useRef<HTMLDivElement>(null);\n\n const handleMove = useCallback(\n (x: number, y: number) => {\n if (isDisabled) return;\n setHsva(\n {\n s: clamp01(x) * 100,\n v: (1 - clamp01(y)) * 100,\n },\n { source: \"area\" }\n );\n },\n [isDisabled, setHsva]\n );\n\n const { handlePointerDown, handlePointerMove } = usePointerDrag(ref, handleMove, !isDisabled);\n\n const hueColor = pureHueHex(hsva.h);\n\n return (\n <div className={cn(\"aviala-color-picker-area\", className)} {...spiralDebugId(\"color-picker.content.area\")}>\n <div\n ref={ref}\n className=\"aviala-color-picker-area__surface\"\n style={{ backgroundColor: hueColor }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n role=\"slider\"\n aria-label=\"Saturation and brightness\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(hsva.s)}\n tabIndex={isDisabled ? -1 : 0}\n >\n <div className=\"aviala-color-picker-area__white\" aria-hidden />\n <div className=\"aviala-color-picker-area__black\" aria-hidden />\n <div\n className=\"aviala-color-picker-area__thumb\"\n style={{\n left: `${hsva.s}%`,\n top: `${100 - hsva.v}%`,\n }}\n aria-hidden\n />\n </div>\n </div>\n );\n}\n","import { colord, type Colord } from \"colord\";\r\n\r\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\r\n\r\nexport type HSVA = { h: number; s: number; v: number; a: number };\r\n\r\nexport const DEFAULT_COLOR = \"#FF0000\";\r\n\r\nexport function parseColor(value?: string): Colord {\r\n const c = colord(value ?? DEFAULT_COLOR);\r\n return c.isValid() ? c : colord(DEFAULT_COLOR);\r\n}\r\n\r\nexport function toHsva(value: string): HSVA {\r\n const { h, s, v, a } = parseColor(value).toHsv();\r\n return { h, s, v, a: a ?? 1 };\r\n}\r\n\r\nexport function fromHsva(hsva: HSVA): string {\r\n return colord({ h: hsva.h, s: hsva.s, v: hsva.v, a: hsva.a }).toHex();\r\n}\r\n\r\nexport function toHexInput(value: string, includeAlpha = false): string {\r\n const hex = parseColor(value).toHex().replace(/^#/, \"\").toUpperCase();\r\n return includeAlpha ? hex : hex.slice(0, 6);\r\n}\r\n\r\nexport function fromHexInput(input: string, alpha = 1): string {\r\n const cleaned = input.replace(/^#/, \"\").trim();\r\n if (!cleaned) return parseColor(DEFAULT_COLOR).alpha(alpha).toHex();\r\n const base = cleaned.slice(0, 6);\r\n const alphaHex = cleaned.length >= 8 ? cleaned.slice(6, 8) : undefined;\r\n let c = parseColor(`#${base}`);\r\n if (alphaHex) {\r\n c = c.alpha(parseInt(alphaHex, 16) / 255);\r\n } else if (alpha < 1) {\r\n c = c.alpha(alpha);\r\n }\r\n return c.toHex();\r\n}\r\n\r\nexport function alphaPercent(value: string): number {\r\n return Math.round(parseColor(value).alpha() * 100);\r\n}\r\n\r\nexport function setAlphaPercent(value: string, percent: number): string {\r\n const clamped = Math.min(100, Math.max(0, percent));\r\n return parseColor(value)\r\n .alpha(clamped / 100)\r\n .toHex();\r\n}\r\n\r\nexport function toRgbComponents(value: string) {\r\n const { r, g, b } = parseColor(value).toRgb();\r\n return { r, g, b };\r\n}\r\n\r\nexport function fromRgbComponents(r: number, g: number, b: number, alpha = 1): string {\r\n return colord({ r, g, b, a: alpha }).toHex();\r\n}\r\n\r\nexport function toHslComponents(value: string) {\r\n const { h, s, l } = parseColor(value).toHsl();\r\n return { h: Math.round(h), s: Math.round(s), l: Math.round(l) };\r\n}\r\n\r\nexport function fromHslComponents(h: number, s: number, l: number, alpha = 1): string {\r\n return colord({ h, s, l, a: alpha }).toHex();\r\n}\r\n\r\nexport function pureHueHex(h: number): string {\r\n return colord({ h, s: 100, v: 100 }).toHex();\r\n}\r\n\r\nexport function solidHex(value: string): string {\r\n const { r, g, b } = parseColor(value).toRgb();\r\n return colord({ r, g, b, a: 1 }).toHex();\r\n}\r\n\r\nexport function hueGradientStops(): string {\r\n return [0, 60, 120, 180, 240, 300, 360]\r\n .map((h) => colord({ h, s: 100, v: 100 }).toHex())\r\n .join(\", \");\r\n}\r\n\r\nexport function clamp01(n: number): number {\r\n return Math.min(1, Math.max(0, n));\r\n}\r\n","import { createContext, useContext } from \"react\";\r\nimport type { ColorFormat, HSVA } from \"./color-utils\";\r\nimport type { ColorPickerChangeMeta } from \"./use-color-picker-state\";\r\n\r\nexport type ColorPickerContextValue = {\r\n value: string;\r\n setValue: (value: string, meta?: ColorPickerChangeMeta) => void;\r\n format: ColorFormat;\r\n setFormat: (format: ColorFormat) => void;\r\n hsva: HSVA;\r\n setHsva: (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => void;\r\n open: boolean;\r\n disabled?: boolean;\r\n presets?: string[];\r\n onPresetsChange?: (presets: string[]) => void;\r\n maxPresets: number;\r\n};\r\n\r\nexport const ColorPickerContext = createContext<ColorPickerContextValue | null>(null);\r\n\r\nexport function useColorPickerContext() {\r\n const ctx = useContext(ColorPickerContext);\r\n if (!ctx) {\r\n throw new Error(\"ColorPicker compound components must be used within <ColorPicker>\");\r\n }\r\n return ctx;\r\n}\r\n\r\nexport function useOptionalColorPickerContext() {\r\n return useContext(ColorPickerContext);\r\n}\r\n","import { useCallback, type PointerEvent, type RefObject } from \"react\";\r\nimport { clamp01 } from \"./color-utils\";\r\n\r\nexport function usePointerDrag<T extends HTMLElement>(\r\n ref: RefObject<T | null>,\r\n onMove: (x: number, y: number) => void,\r\n enabled = true\r\n) {\r\n const updateFromEvent = useCallback(\r\n (clientX: number, clientY: number) => {\r\n if (!ref.current) return;\r\n const rect = ref.current.getBoundingClientRect();\r\n const x = clamp01((clientX - rect.left) / rect.width);\r\n const y = clamp01((clientY - rect.top) / rect.height);\r\n onMove(x, y);\r\n },\r\n [onMove, ref]\r\n );\r\n\r\n const handlePointerDown = useCallback(\r\n (event: PointerEvent<T>) => {\r\n if (!enabled || !ref.current) return;\r\n event.preventDefault();\r\n ref.current.setPointerCapture(event.pointerId);\r\n updateFromEvent(event.clientX, event.clientY);\r\n },\r\n [enabled, ref, updateFromEvent]\r\n );\r\n\r\n const handlePointerMove = useCallback(\r\n (event: PointerEvent<T>) => {\r\n if (!enabled || !ref.current || !ref.current.hasPointerCapture(event.pointerId)) return;\r\n updateFromEvent(event.clientX, event.clientY);\r\n },\r\n [enabled, ref, updateFromEvent]\r\n );\r\n\r\n return { handlePointerDown, handlePointerMove };\r\n}\r\n","import { useCallback, useMemo, useState } from \"react\";\r\nimport {\r\n DEFAULT_COLOR,\r\n fromHsva,\r\n parseColor,\r\n toHsva,\r\n type ColorFormat,\r\n type HSVA,\r\n} from \"./color-utils\";\r\n\r\nexport type ColorPickerChangeMeta = { source?: string };\r\n\r\nexport type UseColorPickerStateOptions = {\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string, meta?: ColorPickerChangeMeta) => void;\r\n format?: ColorFormat;\r\n defaultFormat?: ColorFormat;\r\n onFormatChange?: (format: ColorFormat) => void;\r\n};\r\n\r\nexport function useColorPickerState({\r\n value: controlledValue,\r\n defaultValue = DEFAULT_COLOR,\r\n onChange,\r\n format: controlledFormat,\r\n defaultFormat = \"hex\",\r\n onFormatChange,\r\n}: UseColorPickerStateOptions) {\r\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\r\n const [uncontrolledFormat, setUncontrolledFormat] = useState<ColorFormat>(defaultFormat);\r\n\r\n const value = controlledValue ?? uncontrolledValue;\r\n const format = controlledFormat ?? uncontrolledFormat;\r\n\r\n const setValue = useCallback(\r\n (next: string, meta?: ColorPickerChangeMeta) => {\r\n const normalized = parseColor(next).toHex();\r\n if (controlledValue === undefined) {\r\n setUncontrolledValue(normalized);\r\n }\r\n onChange?.(normalized, meta);\r\n },\r\n [controlledValue, onChange]\r\n );\r\n\r\n const hsva = useMemo(() => toHsva(value), [value]);\r\n\r\n const setHsva = useCallback(\r\n (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => {\r\n setValue(fromHsva({ ...hsva, ...partial }), meta);\r\n },\r\n [hsva, setValue]\r\n );\r\n\r\n const setFormat = useCallback(\r\n (next: ColorFormat) => {\r\n if (controlledFormat === undefined) {\r\n setUncontrolledFormat(next);\r\n }\r\n onFormatChange?.(next);\r\n },\r\n [controlledFormat, onFormatChange]\r\n );\r\n\r\n return { value, format, setValue, hsva, setHsva, setFormat };\r\n}\r\n","import { EditColorPicker } from \"@aviala-design/icons\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { Badge } from \"../badge\";\r\nimport { Button } from \"../button\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectItemGroup,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"../select\";\r\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { typographyVariants } from \"../typography\";\r\nimport {\r\n alphaPercent,\r\n fromHexInput,\r\n fromHslComponents,\r\n fromRgbComponents,\r\n parseColor,\r\n setAlphaPercent,\r\n toHexInput,\r\n toHslComponents,\r\n toRgbComponents,\r\n type ColorFormat,\r\n} from \"./color-utils\";\r\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\r\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\r\n\r\ndeclare global {\r\n interface Window {\r\n EyeDropper?: new () => { open: () => Promise<{ sRGBHex: string }> };\r\n }\r\n}\r\n\r\nexport type ColorPickerInputsProps = {\r\n className?: string;\r\n disabled?: boolean;\r\n showEyedropper?: boolean;\r\n} & Pick<UseColorPickerStateOptions, \"value\" | \"defaultValue\" | \"onChange\" | \"format\" | \"onFormatChange\">;\r\n\r\nexport function ColorPickerInputs({\r\n className,\r\n disabled,\r\n showEyedropper = true,\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n format: formatProp,\r\n onFormatChange,\r\n}: ColorPickerInputsProps) {\r\n const ctx = useOptionalColorPickerContext();\r\n const local = useColorPickerState({\r\n value: ctx ? undefined : valueProp,\r\n defaultValue: ctx?.value ?? defaultValue,\r\n onChange: ctx ? undefined : onChange,\r\n format: ctx ? undefined : formatProp,\r\n onFormatChange: ctx ? undefined : onFormatChange,\r\n });\r\n\r\n const { value, setValue, format, setFormat, hsva } = ctx ?? local;\r\n const isDisabled = disabled ?? ctx?.disabled;\r\n const eyeDropperSupported = typeof window !== \"undefined\" && \"EyeDropper\" in window;\r\n\r\n const [hexDraft, setHexDraft] = useState(() => toHexInput(value));\r\n const [alphaDraft, setAlphaDraft] = useState(() => String(alphaPercent(value)));\r\n const [componentDraft, setComponentDraft] = useState(() => buildComponentDraft(value, format));\r\n\r\n useEffect(() => {\r\n setHexDraft(toHexInput(value));\r\n setAlphaDraft(String(alphaPercent(value)));\r\n setComponentDraft(buildComponentDraft(value, format));\r\n }, [value, format]);\r\n\r\n const commitHex = useCallback(() => {\r\n setValue(fromHexInput(hexDraft, hsva.a), { source: \"hex-input\" });\r\n }, [hexDraft, hsva.a, setValue]);\r\n\r\n const commitAlpha = useCallback(() => {\r\n const parsed = Number.parseInt(alphaDraft, 10);\r\n if (Number.isNaN(parsed)) return;\r\n setValue(setAlphaPercent(value, parsed), { source: \"alpha-input\" });\r\n }, [alphaDraft, setValue, value]);\r\n\r\n const commitComponents = useCallback(() => {\r\n const parts = componentDraft.split(/[\\s,]+/).filter(Boolean).map(Number);\r\n if (parts.some((n) => Number.isNaN(n))) return;\r\n if (format === \"rgb\") {\r\n setValue(fromRgbComponents(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, hsva.a), {\r\n source: \"rgb-input\",\r\n });\r\n } else if (format === \"hsl\") {\r\n setValue(fromHslComponents(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, hsva.a), {\r\n source: \"hsl-input\",\r\n });\r\n }\r\n }, [componentDraft, format, hsva.a, setValue]);\r\n\r\n const handleEyedropper = useCallback(async () => {\r\n if (!eyeDropperSupported || isDisabled) return;\r\n try {\r\n const dropper = new window.EyeDropper!();\r\n const result = await dropper.open();\r\n setValue(parseColor(result.sRGBHex).toHex(), { source: \"eyedropper\" });\r\n } catch {\r\n /* user cancelled */\r\n }\r\n }, [eyeDropperSupported, isDisabled, setValue]);\r\n\r\n return (\r\n <div className={cn(\"aviala-color-picker-inputs\", className)} {...spiralDebugId(\"color-picker.content.inputs\")}>\r\n {showEyedropper ? (\r\n <Button\r\n type=\"button\"\r\n mode=\"defaultCustom\"\r\n size=\"regular\"\r\n iconOnly\r\n disabled={isDisabled}\r\n aria-label=\"Pick color from screen\"\r\n {...spiralDebugId(\"color-picker.content.inputs.eyedropper\")}\r\n title={\r\n eyeDropperSupported\r\n ? \"Pick color from screen\"\r\n : \"EyeDropper not supported in this browser\"\r\n }\r\n onClick={handleEyedropper}\r\n >\r\n <EditColorPicker aria-hidden />\r\n </Button>\r\n ) : null}\r\n\r\n {format === \"hex\" ? (\r\n <div className=\"aviala-color-picker-field\">\r\n <span className=\"aviala-color-picker-field__badge-area\">\r\n <Badge>#</Badge>\r\n </span>\r\n <input\r\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\r\n value={hexDraft}\r\n disabled={isDisabled}\r\n aria-label=\"Hex color\"\r\n onChange={(e) => setHexDraft(e.target.value.toUpperCase())}\r\n onBlur={commitHex}\r\n onKeyDown={(e) => e.key === \"Enter\" && commitHex()}\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"aviala-color-picker-field\">\r\n <input\r\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\r\n value={componentDraft}\r\n disabled={isDisabled}\r\n aria-label={format === \"rgb\" ? \"RGB color\" : \"HSL color\"}\r\n onChange={(e) => setComponentDraft(e.target.value)}\r\n onBlur={commitComponents}\r\n onKeyDown={(e) => e.key === \"Enter\" && commitComponents()}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"aviala-color-picker-field aviala-color-picker-field--alpha\">\r\n <input\r\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\r\n value={alphaDraft}\r\n disabled={isDisabled}\r\n aria-label=\"Opacity percent\"\r\n inputMode=\"numeric\"\r\n onChange={(e) => setAlphaDraft(e.target.value)}\r\n onBlur={commitAlpha}\r\n onKeyDown={(e) => e.key === \"Enter\" && commitAlpha()}\r\n />\r\n <span className=\"aviala-color-picker-field__badge-area\">\r\n <Badge>%</Badge>\r\n </span>\r\n </div>\r\n\r\n <Select\r\n value={format}\r\n onValueChange={(next) => setFormat(next as ColorFormat)}\r\n disabled={isDisabled}\r\n >\r\n <SelectTrigger className=\"aviala-color-picker-format-select w-[76px] shrink-0\" size=\"regular\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent onCloseAutoFocus={(event) => event.preventDefault()}>\r\n <SelectItemGroup>\r\n <SelectItem value=\"hex\" itemFunction=\"radio\">\r\n HEX\r\n </SelectItem>\r\n <SelectItem value=\"rgb\" itemFunction=\"radio\">\r\n RGB\r\n </SelectItem>\r\n <SelectItem value=\"hsl\" itemFunction=\"radio\">\r\n HSL\r\n </SelectItem>\r\n </SelectItemGroup>\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n );\r\n}\r\n\r\nfunction buildComponentDraft(value: string, format: ColorFormat): string {\r\n if (format === \"rgb\") {\r\n const { r, g, b } = toRgbComponents(value);\r\n return `${r}, ${g}, ${b}`;\r\n }\r\n if (format === \"hsl\") {\r\n const { h, s, l } = toHslComponents(value);\r\n return `${h}, ${s}, ${l}`;\r\n }\r\n return toHexInput(value);\r\n}\r\n","import { SymbolAdd } from \"@aviala-design/icons\";\r\nimport { Button } from \"../button\";\r\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { parseColor } from \"./color-utils\";\r\nimport { ColorPickButton } from \"./color-pick-button\";\r\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\r\n\r\nexport type ColorPickerPresetsProps = {\r\n className?: string;\r\n presets?: string[];\r\n onPresetsChange?: (presets: string[]) => void;\r\n maxPresets?: number;\r\n disabled?: boolean;\r\n};\r\n\r\nexport function ColorPickerPresets({\r\n className,\r\n presets: presetsProp,\r\n onPresetsChange: onPresetsChangeProp,\r\n maxPresets: maxPresetsProp,\r\n disabled,\r\n}: ColorPickerPresetsProps) {\r\n const ctx = useOptionalColorPickerContext();\r\n const presets = presetsProp ?? ctx?.presets ?? [];\r\n const onPresetsChange = onPresetsChangeProp ?? ctx?.onPresetsChange;\r\n const maxPresets = maxPresetsProp ?? ctx?.maxPresets ?? 8;\r\n const isDisabled = disabled ?? ctx?.disabled;\r\n const value = ctx?.value;\r\n const setValue = ctx?.setValue;\r\n\r\n const handleAdd = () => {\r\n if (!onPresetsChange || !value || isDisabled) return;\r\n const normalized = parseColor(value).toHex();\r\n if (presets.includes(normalized)) return;\r\n const next = [...presets, normalized].slice(-maxPresets);\r\n onPresetsChange(next);\r\n };\r\n\r\n return (\r\n <div className={cn(\"aviala-color-picker-presets\", className)} {...spiralDebugId(\"color-picker.content.presets\")}>\r\n <Button\r\n type=\"button\"\r\n mode=\"defaultCustom\"\r\n size=\"regular\"\r\n iconOnly\r\n disabled={isDisabled || !onPresetsChange || presets.length >= maxPresets}\r\n aria-label=\"Add current color to presets\"\r\n onClick={handleAdd}\r\n >\r\n <SymbolAdd aria-hidden />\r\n </Button>\r\n {presets.map((color) => (\r\n <ColorPickButton\r\n key={color}\r\n color={color}\r\n selected={value === color}\r\n disabled={isDisabled}\r\n onClick={() => setValue?.(color, { source: \"preset\" })}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import { forwardRef, type ButtonHTMLAttributes } from \"react\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { parseColor } from \"./color-utils\";\r\n\r\nexport type ColorPickButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\"> & {\r\n color: string;\r\n selected?: boolean;\r\n};\r\n\r\nexport const ColorPickButton = forwardRef<HTMLButtonElement, ColorPickButtonProps>(\r\n ({ className, color, selected = false, style, ...props }, ref) => {\r\n const swatch = parseColor(color).toHex();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className={cn(\"aviala-color-pick-button\", className)}\r\n data-selected={selected ? \"true\" : undefined}\r\n style={style}\r\n {...props}\r\n >\r\n <span\r\n className=\"aviala-color-pick-button__swatch\"\r\n style={{ backgroundColor: swatch }}\r\n aria-hidden\r\n />\r\n </button>\r\n );\r\n }\r\n);\r\nColorPickButton.displayName = \"ColorPickButton\";\r\n","import { useCallback, useRef } from \"react\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { clamp01, hueGradientStops, solidHex } from \"./color-utils\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\nimport { usePointerDrag } from \"./use-pointer-drag\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\n\nexport type ColorPickerSliderKind = \"hue\" | \"alpha\";\n\nexport type ColorPickerSliderProps = {\n kind: ColorPickerSliderKind;\n className?: string;\n disabled?: boolean;\n} & Pick<UseColorPickerStateOptions, \"value\" | \"defaultValue\" | \"onChange\">;\n\nexport function ColorPickerSlider({\n kind,\n className,\n disabled,\n value: valueProp,\n defaultValue,\n onChange,\n}: ColorPickerSliderProps) {\n const ctx = useOptionalColorPickerContext();\n const local = useColorPickerState({\n value: ctx ? undefined : valueProp,\n defaultValue: ctx?.value ?? defaultValue,\n onChange: ctx ? undefined : onChange,\n });\n\n const { value, hsva, setHsva } = ctx ?? local;\n const isDisabled = disabled ?? ctx?.disabled;\n\n const ref = useRef<HTMLDivElement>(null);\n\n const handleMove = useCallback(\n (x: number) => {\n if (isDisabled) return;\n const ratio = clamp01(x);\n if (kind === \"hue\") {\n setHsva({ h: ratio * 360 }, { source: \"hue\" });\n } else {\n setHsva({ a: ratio }, { source: \"alpha\" });\n }\n },\n [isDisabled, kind, setHsva]\n );\n\n const handleMove2d = useCallback(\n (x: number, _y: number) => {\n handleMove(x);\n },\n [handleMove]\n );\n\n const { handlePointerDown, handlePointerMove } = usePointerDrag(\n ref,\n handleMove2d,\n !isDisabled\n );\n\n const thumbLeft = kind === \"hue\" ? (hsva.h / 360) * 100 : hsva.a * 100;\n const ariaValueNow = kind === \"hue\" ? Math.round(hsva.h) : Math.round(hsva.a * 100);\n const ariaMax = kind === \"hue\" ? 360 : 100;\n\n const trackStyle =\n kind === \"hue\"\n ? { background: `linear-gradient(90deg, ${hueGradientStops()})` }\n : {\n backgroundImage: `linear-gradient(90deg, transparent, ${solidHex(value)})`,\n backgroundColor: \"var(--color-picker-checkerboard)\",\n };\n\n return (\n <div\n className={cn(\"aviala-color-picker-slider-row\", className)}\n {...spiralDebugId(`color-picker.content.${kind}-slider`)}\n >\n <div\n ref={ref}\n className=\"aviala-color-picker-slider\"\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n role=\"slider\"\n aria-label={kind === \"hue\" ? \"Hue\" : \"Opacity\"}\n aria-valuemin={0}\n aria-valuemax={ariaMax}\n aria-valuenow={ariaValueNow}\n tabIndex={isDisabled ? -1 : 0}\n >\n <div className=\"aviala-color-picker-slider__track\" style={trackStyle} />\n <div\n className=\"aviala-color-picker-slider__thumb\"\n style={{ left: `${thumbLeft}%` }}\n aria-hidden\n />\n </div>\n </div>\n );\n}\n","import { cn } from \"../../lib/utils\";\r\nimport { ColorPickerArea } from \"./color-picker-area\";\r\nimport { ColorPickerInputs } from \"./color-picker-inputs\";\r\nimport { ColorPickerPresets } from \"./color-picker-presets\";\r\nimport { ColorPickerSlider } from \"./color-picker-slider\";\r\nimport { ColorPickerContext } from \"./color-picker-context\";\r\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\r\n\r\nexport type ColorPickerPanelProps = UseColorPickerStateOptions & {\r\n className?: string;\r\n disabled?: boolean;\r\n presets?: string[];\r\n onPresetsChange?: (presets: string[]) => void;\r\n maxPresets?: number;\r\n showEyedropper?: boolean;\r\n showPresets?: boolean;\r\n};\r\n\r\nexport function ColorPickerPanel({\r\n className,\r\n disabled,\r\n presets,\r\n onPresetsChange,\r\n maxPresets = 8,\r\n showEyedropper = true,\r\n showPresets = true,\r\n value,\r\n defaultValue,\r\n onChange,\r\n format,\r\n defaultFormat,\r\n onFormatChange,\r\n}: ColorPickerPanelProps) {\r\n const state = useColorPickerState({\r\n value,\r\n defaultValue,\r\n onChange,\r\n format,\r\n defaultFormat,\r\n onFormatChange,\r\n });\r\n\r\n const contextValue = {\r\n ...state,\r\n open: true,\r\n disabled,\r\n presets,\r\n onPresetsChange,\r\n maxPresets,\r\n };\r\n\r\n return (\r\n <ColorPickerContext.Provider value={contextValue}>\r\n <div className={cn(\"aviala-color-picker-panel\", className)}>\r\n <ColorPickerArea disabled={disabled} />\r\n <ColorPickerSlider kind=\"hue\" disabled={disabled} />\r\n <ColorPickerSlider kind=\"alpha\" disabled={disabled} />\r\n <ColorPickerInputs disabled={disabled} showEyedropper={showEyedropper} />\r\n {showPresets ? (\r\n <ColorPickerPresets\r\n disabled={disabled}\r\n presets={presets}\r\n onPresetsChange={onPresetsChange}\r\n maxPresets={maxPresets}\r\n />\r\n ) : null}\r\n </div>\r\n </ColorPickerContext.Provider>\r\n );\r\n}\r\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport {\r\n DirectionArrowDownLight,\r\n DirectionArrowRightLight,\r\n SymbolRight,\r\n type AvialaIconProps,\r\n type IconLevel,\r\n} from \"@aviala-design/icons\";\r\nimport {\r\n cloneElement,\r\n createContext,\r\n forwardRef,\r\n isValidElement,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useLayoutEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type ComponentPropsWithoutRef,\r\n type KeyboardEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { Badge } from \"./badge\";\r\nimport { typographyVariants } from \"./typography\";\r\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\r\nimport { iconLevelCssVarStyle, iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { spiralDebugId } from \"../lib/spiral-debug\";\r\n\r\n/** Figma Components → Information Collect → Cascader Input */\r\nexport type CascaderSize = \"regular\" | \"big\";\r\n\r\n/** Figma Cascader Menu Item `Function` variant */\r\nexport type CascaderItemFunction =\r\n | \"simple\"\r\n | \"checkbox\"\r\n | \"form-checkbox\"\r\n | \"radio\"\r\n | \"form-radio\"\r\n | \"search\"\r\n | \"custom\";\r\n\r\n/** Figma Cascader Menu Item `Type` variant */\r\nexport type CascaderItemLayout = \"default\" | \"title\" | \"custom\";\r\n\r\nexport type CascaderOption = {\r\n value: string;\r\n label: ReactNode;\r\n disabled?: boolean;\r\n children?: CascaderOption[];\r\n};\r\n\r\ntype CascaderContextValue = {\r\n open: boolean;\r\n disabled?: boolean;\r\n size: CascaderSize;\r\n activePath: string[];\r\n selectedPath: string[];\r\n highlightedValue: string | null;\r\n setHighlightedValue: (value: string | null) => void;\r\n expandTo: (path: string[]) => void;\r\n selectPath: (path: string[], closeOnLeaf?: boolean) => void;\r\n getOptionAtPath: (path: string[]) => CascaderOption | undefined;\r\n getOptionsAtPath: (path: string[]) => CascaderOption[];\r\n isPathSelected: (path: string[]) => boolean;\r\n isPathExpanded: (path: string[]) => boolean;\r\n};\r\n\r\nconst CascaderContext = createContext<CascaderContextValue | null>(null);\r\n\r\nfunction useCascaderContext() {\r\n const context = useContext(CascaderContext);\r\n if (!context) {\r\n throw new Error(\"Cascader compound components must be used within Cascader.\");\r\n }\r\n return context;\r\n}\r\n\r\nfunction renderSlotIcon(node: ReactNode, debugId?: string): ReactNode {\r\n if (!node) return null;\r\n const content = cloneAvialaIconElement(node, {\r\n level: \"text\",\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className=\"aviala-cascader-trigger__slot\"\r\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\r\n {...(debugId ? spiralDebugId(debugId) : undefined)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderItemIcon(\r\n node: ReactNode,\r\n iconLevel: IconLevel = \"text\",\r\n debugId?: string\r\n): ReactNode {\r\n if (!node) return null;\r\n const content = cloneAvialaIconElement(node, {\r\n level: iconLevel,\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className={cn(\r\n \"aviala-cascader-item__icon\",\r\n iconLevel === \"caption\" && \"aviala-cascader-item__icon--sm\"\r\n )}\r\n style={iconSlotCssVarStyle(node, \"--cascader-item-icon-size\", iconLevel, true)}\r\n {...(debugId ? spiralDebugId(debugId) : undefined)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderBadgeSlot(node: ReactNode): ReactNode {\r\n if (node == null || node === false) return null;\r\n\r\n return (\r\n <span className=\"aviala-cascader-item__badge\">\r\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\r\n </span>\r\n );\r\n}\r\n\r\nfunction CascaderItemFormRadio() {\r\n return (\r\n <span className=\"aviala-cascader-item__form-radio\" aria-hidden>\r\n <span className=\"aviala-cascader-item__form-radio-surface\" />\r\n <span className=\"aviala-cascader-item__form-radio-indicator\" />\r\n </span>\r\n );\r\n}\r\n\r\nfunction CascaderItemFormCheckbox() {\r\n return (\r\n <span className=\"aviala-cascader-item__form-checkbox\" aria-hidden>\r\n <SymbolRight\r\n className=\"aviala-cascader-item__form-checkbox-icon\"\r\n thickness=\"Bold\"\r\n width={12}\r\n height={12}\r\n aria-hidden\r\n />\r\n </span>\r\n );\r\n}\r\n\r\nfunction CascaderItemTrailingRadio({ selected }: { selected: boolean }) {\r\n if (!selected) return null;\r\n\r\n return (\r\n <span className=\"aviala-cascader-item__trailing-radio\" aria-hidden>\r\n <SymbolRight level=\"text\" biggerSize aria-hidden />\r\n </span>\r\n );\r\n}\r\n\r\nfunction CascaderItemTrailingCheckbox({ selected }: { selected: boolean }) {\r\n if (!selected) return null;\r\n\r\n return (\r\n <span className=\"aviala-cascader-item__trailing-checkbox\" aria-hidden>\r\n <SymbolRight level=\"text\" biggerSize aria-hidden />\r\n </span>\r\n );\r\n}\r\n\r\nfunction renderFunctionSlot(\r\n itemFunction: CascaderItemFunction,\r\n layout: CascaderItemLayout,\r\n showFunctionIcon: boolean,\r\n hasChildren: boolean,\r\n selected: boolean,\r\n icon?: ReactNode\r\n): ReactNode {\r\n if (!showFunctionIcon || layout === \"title\") return null;\r\n\r\n if (icon !== undefined) {\r\n return <span className=\"aviala-cascader-item__function\">{icon}</span>;\r\n }\r\n\r\n switch (itemFunction) {\r\n case \"radio\":\r\n return (\r\n <span className=\"aviala-cascader-item__function\">\r\n <CascaderItemTrailingRadio selected={selected} />\r\n </span>\r\n );\r\n case \"checkbox\":\r\n return (\r\n <span className=\"aviala-cascader-item__function\">\r\n <CascaderItemTrailingCheckbox selected={selected} />\r\n </span>\r\n );\r\n case \"simple\":\r\n default:\r\n return (\r\n <span className=\"aviala-cascader-item__function\">\r\n {selected ? (\r\n <SymbolRight level=\"text\" biggerSize aria-hidden />\r\n ) : null}\r\n {hasChildren ? (\r\n <DirectionArrowRightLight level=\"text\" biggerSize aria-hidden />\r\n ) : null}\r\n </span>\r\n );\r\n }\r\n}\r\n\r\nfunction findOptionPath(\r\n options: CascaderOption[],\r\n targetPath: string[]\r\n): CascaderOption | undefined {\r\n let currentOptions = options;\r\n let current: CascaderOption | undefined;\r\n\r\n for (const segment of targetPath) {\r\n current = currentOptions.find((option) => option.value === segment);\r\n if (!current) return undefined;\r\n currentOptions = current.children ?? [];\r\n }\r\n\r\n return current;\r\n}\r\n\r\nfunction getOptionsAtPath(options: CascaderOption[], path: string[]): CascaderOption[] {\r\n if (path.length === 0) return options;\r\n const node = findOptionPath(options, path);\r\n return node?.children ?? [];\r\n}\r\n\r\nfunction getLabelsForPath(options: CascaderOption[], path: string[]): ReactNode[] {\r\n const labels: ReactNode[] = [];\r\n let currentOptions = options;\r\n\r\n for (const segment of path) {\r\n const option = currentOptions.find((item) => item.value === segment);\r\n if (!option) break;\r\n labels.push(option.label);\r\n currentOptions = option.children ?? [];\r\n }\r\n\r\n return labels;\r\n}\r\n\r\n/** True when `path` is a prefix of `selectedPath` (item lies on the current selection). */\r\nfunction isPathOnSelectedPath(path: string[], selectedPath: string[]) {\r\n if (path.length === 0 || path.length > selectedPath.length) return false;\r\n return path.every((segment, index) => segment === selectedPath[index]);\r\n}\r\n\r\nexport type CascaderProps = {\r\n children: ReactNode;\r\n options?: CascaderOption[];\r\n value?: string[];\r\n defaultValue?: string[];\r\n onValueChange?: (value: string[], selectedOptions: CascaderOption[]) => void;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n size?: CascaderSize;\r\n /** Select parent nodes — Figma allows any-level selection (default true). */\r\n changeOnSelect?: boolean;\r\n className?: string;\r\n};\r\n\r\n/**\r\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\r\n * blur-initiated closes; pointer-down (outside click, item select, trigger toggle)\r\n * and Escape must still dismiss on the first interaction.\r\n */\r\nexport function Cascader({\r\n children,\r\n options = [],\r\n value: valueProp,\r\n defaultValue,\r\n onValueChange,\r\n open: openProp,\r\n defaultOpen = false,\r\n onOpenChange,\r\n disabled = false,\r\n size = \"regular\",\r\n changeOnSelect = true,\r\n className,\r\n}: CascaderProps) {\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue ?? []);\r\n const [activePath, setActivePath] = useState<string[]>(defaultValue ?? []);\r\n const [highlightedValue, setHighlightedValue] = useState<string | null>(null);\r\n const windowBlurCloseRef = useRef(false);\r\n const pointerDownCloseRef = useRef(false);\r\n\r\n const isOpenControlled = openProp !== undefined;\r\n const isValueControlled = valueProp !== undefined;\r\n const open = isOpenControlled ? openProp : internalOpen;\r\n const selectedPath = isValueControlled ? valueProp ?? [] : internalValue;\r\n\r\n useEffect(() => {\r\n const markWindowBlur = () => {\r\n windowBlurCloseRef.current = true;\r\n };\r\n window.addEventListener(\"blur\", markWindowBlur, true);\r\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n setActivePath(selectedPath.length > 0 ? selectedPath.slice(0, -1) : []);\r\n }\r\n }, [open, selectedPath]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n pointerDownCloseRef.current = false;\r\n return;\r\n }\r\n\r\n const markPointerDown = () => {\r\n pointerDownCloseRef.current = true;\r\n };\r\n document.addEventListener(\"pointerdown\", markPointerDown, true);\r\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\r\n }, [open]);\r\n\r\n const handleOpenChange = useCallback(\r\n (nextOpen: boolean) => {\r\n if (disabled && nextOpen) return;\r\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\r\n windowBlurCloseRef.current = false;\r\n return;\r\n }\r\n windowBlurCloseRef.current = false;\r\n pointerDownCloseRef.current = false;\r\n if (!isOpenControlled) {\r\n setInternalOpen(nextOpen);\r\n }\r\n onOpenChange?.(nextOpen);\r\n },\r\n [disabled, isOpenControlled, onOpenChange]\r\n );\r\n\r\n const commitValue = useCallback(\r\n (path: string[]) => {\r\n const selectedOptions = path\r\n .map((_, index) => findOptionPath(options, path.slice(0, index + 1)))\r\n .filter((option): option is CascaderOption => option !== undefined);\r\n\r\n if (!isValueControlled) {\r\n setInternalValue(path);\r\n }\r\n onValueChange?.(path, selectedOptions);\r\n },\r\n [isValueControlled, onValueChange, options]\r\n );\r\n\r\n const expandTo = useCallback((path: string[]) => {\r\n setActivePath(path);\r\n }, []);\r\n\r\n const selectPath = useCallback(\r\n (path: string[], closeOnLeaf = true) => {\r\n const option = findOptionPath(options, path);\r\n const hasChildren = Boolean(option?.children?.length);\r\n\r\n if (!changeOnSelect && hasChildren) {\r\n expandTo(path);\r\n return;\r\n }\r\n\r\n commitValue(path);\r\n\r\n if (hasChildren) {\r\n expandTo(path);\r\n return;\r\n }\r\n\r\n if (closeOnLeaf) {\r\n handleOpenChange(false);\r\n }\r\n },\r\n [changeOnSelect, commitValue, expandTo, handleOpenChange, options]\r\n );\r\n\r\n const contextValue = useMemo<CascaderContextValue>(\r\n () => ({\r\n open,\r\n disabled,\r\n size,\r\n activePath,\r\n selectedPath,\r\n highlightedValue,\r\n setHighlightedValue,\r\n expandTo,\r\n selectPath,\r\n getOptionAtPath: (path) => findOptionPath(options, path),\r\n getOptionsAtPath: (path) => getOptionsAtPath(options, path),\r\n isPathSelected: (path) => isPathOnSelectedPath(path, selectedPath),\r\n isPathExpanded: (path) => {\r\n const expandedPrefix = activePath.length > 0 ? activePath : selectedPath.slice(0, -1);\r\n return (\r\n path.length <= expandedPrefix.length &&\r\n path.every((segment, index) => segment === expandedPrefix[index])\r\n );\r\n },\r\n }),\r\n [\r\n activePath,\r\n disabled,\r\n expandTo,\r\n highlightedValue,\r\n open,\r\n options,\r\n selectPath,\r\n selectedPath,\r\n size,\r\n ]\r\n );\r\n\r\n return (\r\n <CascaderContext.Provider value={contextValue}>\r\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\r\n <div className={cn(\"inline-flex\", className)} {...spiralDebugId(\"cascader\")}>{children}</div>\r\n </PopoverPrimitive.Root>\r\n </CascaderContext.Provider>\r\n );\r\n}\r\n\r\nexport type CascaderTriggerProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Trigger> & {\r\n size?: CascaderSize;\r\n allRound?: boolean;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n expandIcon?: ReactNode;\r\n placeholder?: string;\r\n error?: boolean;\r\n /** Override display when using manual composition without `options`. */\r\n displayValue?: ReactNode;\r\n separator?: string;\r\n className?: string;\r\n};\r\n\r\nexport const CascaderTrigger = forwardRef<HTMLButtonElement, CascaderTriggerProps>(\r\n (\r\n {\r\n className,\r\n size: sizeProp,\r\n allRound = false,\r\n leftIcon,\r\n rightIcon,\r\n expandIcon,\r\n placeholder = \"Text\",\r\n error = false,\r\n displayValue,\r\n separator = \"/\",\r\n disabled: disabledProp,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const { open, disabled: disabledContext, size: sizeContext, selectedPath, getOptionAtPath } =\r\n useCascaderContext();\r\n const size = sizeProp ?? sizeContext;\r\n const disabled = disabledProp ?? disabledContext;\r\n\r\n const labels = selectedPath\r\n .map((_, index) => getOptionAtPath(selectedPath.slice(0, index + 1))?.label)\r\n .filter((label): label is ReactNode => label != null && label !== false);\r\n\r\n const resolvedDisplay =\r\n displayValue ??\r\n (labels.length > 0\r\n ? labels.map((label, index) => (\r\n <span key={`${selectedPath[index]}-${index}`}>\r\n {index > 0 ? separator : null}\r\n {label}\r\n </span>\r\n ))\r\n : null);\r\n\r\n const hasValue = resolvedDisplay != null && resolvedDisplay !== false;\r\n\r\n return (\r\n <PopoverPrimitive.Trigger asChild>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className={cn(\"aviala-cascader-trigger\", className)}\r\n data-size={size}\r\n data-all-round={allRound ? \"true\" : \"false\"}\r\n data-state={open ? \"open\" : \"closed\"}\r\n data-error={error ? \"true\" : undefined}\r\n disabled={disabled}\r\n aria-expanded={open}\r\n aria-haspopup=\"listbox\"\r\n {...spiralDebugId(\"cascader.trigger\")}\r\n {...props}\r\n >\r\n {renderSlotIcon(leftIcon, \"cascader.trigger.icon-left\")}\r\n <span className=\"aviala-cascader-trigger__field\" {...spiralDebugId(\"cascader.trigger.value\")}>\r\n <span\r\n className={cn(\"aviala-cascader-trigger__value\", typographyVariants({ level: \"text\" }))}\r\n data-placeholder={hasValue ? undefined : \"true\"}\r\n >\r\n {hasValue ? resolvedDisplay : placeholder}\r\n </span>\r\n </span>\r\n {renderSlotIcon(rightIcon, \"cascader.trigger.icon-right\")}\r\n <span\r\n className=\"aviala-cascader-trigger__expand\"\r\n aria-hidden\r\n style={\r\n expandIcon\r\n ? iconSlotCssVarStyle(expandIcon, \"--input-slot-icon-size\", \"text\", true)\r\n : iconLevelCssVarStyle(\"text\", true, \"--input-slot-icon-size\")\r\n }\r\n {...spiralDebugId(\"cascader.trigger.expand\")}\r\n >\r\n {expandIcon ?? (\r\n <DirectionArrowDownLight level=\"text\" biggerSize aria-hidden />\r\n )}\r\n </span>\r\n </button>\r\n </PopoverPrimitive.Trigger>\r\n );\r\n }\r\n);\r\nCascaderTrigger.displayName = \"CascaderTrigger\";\r\n\r\nexport type CascaderContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\r\n portalled?: boolean;\r\n className?: string;\r\n};\r\n\r\nexport const CascaderContent = forwardRef<HTMLDivElement, CascaderContentProps>(\r\n (\r\n {\r\n className,\r\n children,\r\n sideOffset = 8,\r\n align = \"start\",\r\n portalled = true,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const content = (\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n className={cn(\"aviala-cascader-content\", className)}\r\n sideOffset={sideOffset}\r\n align={align}\r\n {...spiralDebugId(\"cascader.content\")}\r\n {...props}\r\n >\r\n {children}\r\n </PopoverPrimitive.Content>\r\n );\r\n\r\n if (!portalled) return content;\r\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\r\n }\r\n);\r\nCascaderContent.displayName = \"CascaderContent\";\r\n\r\nexport type CascaderMenuProps = {\r\n children?: ReactNode;\r\n className?: string;\r\n};\r\n\r\n/** Figma Cascader Menu — horizontal column container (`348:13915`). */\r\nexport const CascaderMenu = forwardRef<HTMLDivElement, CascaderMenuProps>(\r\n ({ children, className }, ref) => (\r\n <div ref={ref} className={cn(\"aviala-cascader-menu\", className)}>\r\n {children}\r\n </div>\r\n )\r\n);\r\nCascaderMenu.displayName = \"CascaderMenu\";\r\n\r\nexport type CascaderColumnProps = {\r\n children: ReactNode;\r\n className?: string;\r\n /** Slide + fade in when a new cascade column appears (options-driven menus set this automatically). */\r\n animateEnter?: boolean;\r\n /** Slide + fade out before unmount when a cascade column is removed (options-driven menus set this automatically). */\r\n animateExit?: boolean;\r\n /** Frozen layout slot for exit overlay columns (keeps flex width stable while animating out). */\r\n exitLayout?: { left: number; width: number };\r\n};\r\n\r\n/** Figma Cascader Menu Item Group Group — single cascade column (`345:20543`). */\r\nexport const CascaderColumn = forwardRef<HTMLDivElement, CascaderColumnProps>(\r\n ({ children, className, animateEnter, animateExit, exitLayout }, ref) => {\r\n const animate = animateExit ? \"exit\" : animateEnter ? \"enter\" : undefined;\r\n const exitStyle =\r\n animateExit && exitLayout\r\n ? ({\r\n position: \"absolute\",\r\n top: 0,\r\n bottom: 0,\r\n left: exitLayout.left,\r\n width: exitLayout.width,\r\n zIndex: 0,\r\n } as const)\r\n : undefined;\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"aviala-cascader-column\", className)}\r\n data-animate={animate}\r\n style={exitStyle}\r\n >\r\n <div className=\"aviala-cascader-column__surface\" data-animate={animate}>\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nCascaderColumn.displayName = \"CascaderColumn\";\r\n\r\nexport type CascaderItemGroupProps = {\r\n label?: ReactNode;\r\n showDivider?: boolean;\r\n children: ReactNode;\r\n className?: string;\r\n};\r\n\r\n/** Figma Cascader Menu Item Group (`345:16552`). */\r\nexport function CascaderItemGroup({\r\n label,\r\n showDivider = true,\r\n children,\r\n className,\r\n}: CascaderItemGroupProps) {\r\n return (\r\n <div className={cn(\"aviala-cascader-group\", className)}>\r\n {label ? (\r\n <div className={cn(\"aviala-cascader-label\", typographyVariants({ level: \"caption\" }))}>\r\n {label}\r\n </div>\r\n ) : null}\r\n <div className=\"aviala-cascader-group__slot\">{children}</div>\r\n {showDivider ? <div className=\"aviala-cascader-separator\" role=\"separator\" /> : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport type CascaderItemProps = {\r\n value: string;\r\n pathPrefix?: string[];\r\n itemFunction?: CascaderItemFunction;\r\n layout?: CascaderItemLayout;\r\n leftIcon?: ReactNode;\r\n showLeftIcon?: boolean;\r\n rightIcon?: ReactNode;\r\n showRightIcon?: boolean;\r\n badge?: ReactNode;\r\n showBadge?: boolean;\r\n showFunctionIcon?: boolean;\r\n icon?: ReactNode;\r\n disabled?: boolean;\r\n children?: ReactNode;\r\n className?: string;\r\n hasChildren?: boolean;\r\n};\r\n\r\n/** Figma Cascader Menu Item (`345:12487`). */\r\nexport const CascaderItem = forwardRef<HTMLButtonElement, CascaderItemProps>(\r\n (\r\n {\r\n value,\r\n pathPrefix = [],\r\n itemFunction = \"simple\",\r\n layout = \"default\",\r\n leftIcon,\r\n showLeftIcon = false,\r\n rightIcon,\r\n showRightIcon = false,\r\n badge,\r\n showBadge = false,\r\n showFunctionIcon = true,\r\n icon,\r\n disabled = false,\r\n children,\r\n className,\r\n hasChildren: hasChildrenProp,\r\n },\r\n ref\r\n ) => {\r\n const {\r\n highlightedValue,\r\n setHighlightedValue,\r\n expandTo,\r\n selectPath,\r\n getOptionAtPath,\r\n isPathSelected,\r\n isPathExpanded,\r\n } = useCascaderContext();\r\n\r\n const path = [...pathPrefix, value];\r\n const option = getOptionAtPath(path);\r\n const hasChildren = hasChildrenProp ?? Boolean(option?.children?.length);\r\n const isTitle = layout === \"title\";\r\n const isSelected = isPathSelected(path);\r\n const isExpanded = isPathExpanded(path);\r\n const isHighlighted = highlightedValue === value;\r\n const isDisabled = disabled || option?.disabled;\r\n\r\n const isFormLeading = itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\r\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\r\n const showTrailingFunction =\r\n showFunctionIcon &&\r\n !isTitle &&\r\n itemFunction !== \"form-radio\" &&\r\n itemFunction !== \"form-checkbox\";\r\n\r\n const handleClick = () => {\r\n if (isTitle || isDisabled) return;\r\n if (hasChildren) {\r\n selectPath(path, false);\r\n return;\r\n }\r\n selectPath(path, true);\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\r\n if (isTitle || isDisabled) return;\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n handleClick();\r\n }\r\n if (event.key === \"ArrowRight\" && hasChildren) {\r\n event.preventDefault();\r\n expandTo(path);\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n role={isTitle ? \"presentation\" : \"option\"}\r\n aria-selected={isSelected}\r\n aria-expanded={hasChildren ? isExpanded : undefined}\r\n disabled={isDisabled}\r\n className={cn(\"aviala-cascader-item\", className)}\r\n data-layout={layout !== \"default\" ? layout : undefined}\r\n data-function={itemFunction !== \"simple\" ? itemFunction : undefined}\r\n data-selected={isSelected ? \"true\" : undefined}\r\n data-highlighted={isHighlighted ? \"true\" : undefined}\r\n data-disabled={isDisabled ? \"true\" : undefined}\r\n {...spiralDebugId(\"cascader.content.item\")}\r\n onClick={handleClick}\r\n onKeyDown={handleKeyDown}\r\n onMouseEnter={() => {\r\n if (!isTitle) setHighlightedValue(value);\r\n if (hasChildren) expandTo(pathPrefix.concat(value));\r\n }}\r\n onMouseLeave={(event) => {\r\n if (isTitle) return;\r\n const next = event.relatedTarget;\r\n if (next instanceof Node && event.currentTarget.contains(next)) return;\r\n if (highlightedValue === value) setHighlightedValue(null);\r\n }}\r\n onFocus={() => {\r\n if (!isTitle) setHighlightedValue(value);\r\n }}\r\n >\r\n {isFormLeading && itemFunction === \"form-radio\" ? <CascaderItemFormRadio /> : null}\r\n {isFormLeading && itemFunction === \"form-checkbox\" ? <CascaderItemFormCheckbox /> : null}\r\n\r\n {showLeftIcon && leftIcon\r\n ? renderItemIcon(leftIcon, leftIconLevel, \"cascader.content.item.icon-left\")\r\n : null}\r\n\r\n <span className={cn(\"aviala-cascader-item__text\", typographyVariants({ level: isTitle ? \"caption\" : \"text\" }))}>\r\n {children ?? option?.label}\r\n </span>\r\n\r\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\r\n {showRightIcon && rightIcon ? renderItemIcon(rightIcon, leftIconLevel) : null}\r\n\r\n {renderFunctionSlot(\r\n itemFunction,\r\n layout,\r\n showTrailingFunction,\r\n hasChildren,\r\n isSelected,\r\n icon\r\n )}\r\n </button>\r\n );\r\n }\r\n);\r\nCascaderItem.displayName = \"CascaderItem\";\r\n\r\nexport type CascaderOptionsMenuProps = {\r\n className?: string;\r\n};\r\n\r\nconst COLUMN_ANIMATION_MS = 150;\r\n\r\ntype RenderColumn = {\r\n pathPrefix: string[];\r\n key: string;\r\n animateEnter: boolean;\r\n animateExit: boolean;\r\n exitLayout?: { left: number; width: number };\r\n};\r\n\r\nfunction toColumnKey(pathPrefix: string[]) {\r\n return pathPrefix.join(\"/\") || \"root\";\r\n}\r\n\r\nfunction prefersReducedMotion() {\r\n return (\r\n typeof window !== \"undefined\" &&\r\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\r\n );\r\n}\r\n\r\n/** Renders cascade columns from `Cascader` `options` prop. */\r\nexport function CascaderOptionsMenu({ className }: CascaderOptionsMenuProps) {\r\n const { activePath, selectedPath, getOptionsAtPath, open } = useCascaderContext();\r\n const prevColumnCountRef = useRef<number | null>(null);\r\n const prevColumnPathsRef = useRef<string[][]>([]);\r\n const lastPathChangeAtRef = useRef(0);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const columnElRefs = useRef<Map<string, HTMLDivElement>>(new Map());\r\n const [columns, setColumns] = useState<RenderColumn[]>([]);\r\n\r\n const columnPaths = useMemo(() => {\r\n const paths: string[][] = [[]];\r\n const expansion = activePath.length > 0 ? activePath : selectedPath.slice(0, -1);\r\n\r\n for (let index = 0; index < expansion.length; index += 1) {\r\n const prefix = expansion.slice(0, index + 1);\r\n const nextOptions = getOptionsAtPath(prefix);\r\n if (nextOptions.length > 0) {\r\n paths.push(prefix);\r\n }\r\n }\r\n\r\n return paths;\r\n }, [activePath, getOptionsAtPath, selectedPath]);\r\n\r\n useLayoutEffect(() => {\r\n if (!open) {\r\n prevColumnCountRef.current = null;\r\n prevColumnPathsRef.current = [];\r\n lastPathChangeAtRef.current = 0;\r\n setColumns([]);\r\n return;\r\n }\r\n\r\n const prevPaths = prevColumnPathsRef.current;\r\n const prevCount = prevColumnCountRef.current;\r\n const nextKeys = new Set(columnPaths.map(toColumnKey));\r\n const now = performance.now();\r\n const isRapid = now - lastPathChangeAtRef.current < COLUMN_ANIMATION_MS;\r\n lastPathChangeAtRef.current = now;\r\n\r\n const skipAnimations = prefersReducedMotion() || isRapid;\r\n const isExpanding = prevCount !== null && columnPaths.length > prevCount;\r\n const enterFromIndex = isExpanding ? prevCount : columnPaths.length;\r\n\r\n const isLateralReplace =\r\n prevPaths.length > 0 &&\r\n columnPaths.length === prevPaths.length &&\r\n columnPaths.some(\r\n (pathPrefix, index) => toColumnKey(pathPrefix) !== toColumnKey(prevPaths[index]!)\r\n );\r\n\r\n const removedCount = prevPaths.filter(\r\n (pathPrefix) => !nextKeys.has(toColumnKey(pathPrefix))\r\n ).length;\r\n\r\n const allowExitAnimation = !skipAnimations && !isLateralReplace && removedCount === 1;\r\n\r\n const measureExitLayout = (key: string) => {\r\n const columnEl = columnElRefs.current.get(key);\r\n const menuEl = menuRef.current;\r\n if (!columnEl || !menuEl) return undefined;\r\n\r\n const columnRect = columnEl.getBoundingClientRect();\r\n const menuRect = menuEl.getBoundingClientRect();\r\n return {\r\n left: columnRect.left - menuRect.left,\r\n width: columnRect.width,\r\n };\r\n };\r\n\r\n setColumns((prev) => {\r\n const settled = prev.filter((column) => !column.animateExit);\r\n const prevByKey = new Map(settled.map((column) => [column.key, column]));\r\n\r\n const active: RenderColumn[] = columnPaths.map((pathPrefix, index) => {\r\n const key = toColumnKey(pathPrefix);\r\n const existing = prevByKey.get(key);\r\n\r\n return {\r\n pathPrefix,\r\n key,\r\n animateEnter: skipAnimations ? false : existing ? false : index >= enterFromIndex,\r\n animateExit: false,\r\n };\r\n });\r\n\r\n if (settled.length === 0) {\r\n return active;\r\n }\r\n\r\n const toExit: RenderColumn[] = allowExitAnimation\r\n ? settled\r\n .filter((column) => !nextKeys.has(column.key))\r\n .flatMap((column) => {\r\n const exitLayout = measureExitLayout(column.key);\r\n if (!exitLayout) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n ...column,\r\n animateEnter: false,\r\n animateExit: true,\r\n exitLayout,\r\n },\r\n ];\r\n })\r\n : [];\r\n\r\n const activeMap = new Map(active.map((column) => [column.key, column]));\r\n const merged: RenderColumn[] = columnPaths.map((pathPrefix) => activeMap.get(toColumnKey(pathPrefix))!);\r\n\r\n return [...merged, ...toExit];\r\n });\r\n\r\n prevColumnCountRef.current = columnPaths.length;\r\n prevColumnPathsRef.current = columnPaths;\r\n }, [columnPaths, open]);\r\n\r\n useEffect(() => {\r\n if (!open || !columns.some((column) => column.animateExit)) {\r\n return undefined;\r\n }\r\n\r\n const timeout = window.setTimeout(() => {\r\n setColumns((prev) => prev.filter((column) => !column.animateExit));\r\n }, COLUMN_ANIMATION_MS);\r\n\r\n return () => window.clearTimeout(timeout);\r\n }, [columns, open]);\r\n\r\n return (\r\n <CascaderMenu ref={menuRef} className={className}>\r\n {columns.map(({ pathPrefix, key, animateEnter, animateExit, exitLayout }) => (\r\n <CascaderColumn\r\n key={key}\r\n ref={(element) => {\r\n if (element) {\r\n columnElRefs.current.set(key, element);\r\n return;\r\n }\r\n columnElRefs.current.delete(key);\r\n }}\r\n animateEnter={animateEnter}\r\n animateExit={animateExit}\r\n exitLayout={exitLayout}\r\n >\r\n <CascaderItemGroup label=\"Title\" showDivider>\r\n {getOptionsAtPath(pathPrefix).map((option) => (\r\n <CascaderItem\r\n key={[...pathPrefix, option.value].join(\"/\")}\r\n value={option.value}\r\n pathPrefix={pathPrefix}\r\n disabled={option.disabled}\r\n hasChildren={Boolean(option.children?.length)}\r\n >\r\n {option.label}\r\n </CascaderItem>\r\n ))}\r\n </CascaderItemGroup>\r\n </CascaderColumn>\r\n ))}\r\n </CascaderMenu>\r\n );\r\n}\r\n\r\nexport type CascaderFieldProps = Omit<CascaderProps, \"children\"> &\r\n Omit<CascaderTriggerProps, \"displayValue\"> & {\r\n contentClassName?: string;\r\n menuClassName?: string;\r\n };\r\n\r\n/** Convenience field — trigger + options-driven menu. */\r\nexport function CascaderField({\r\n options,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n open,\r\n defaultOpen,\r\n onOpenChange,\r\n disabled,\r\n size = \"regular\",\r\n changeOnSelect,\r\n className,\r\n contentClassName,\r\n menuClassName,\r\n allRound,\r\n leftIcon,\r\n rightIcon,\r\n expandIcon,\r\n placeholder,\r\n error,\r\n separator,\r\n ...triggerProps\r\n}: CascaderFieldProps) {\r\n return (\r\n <Cascader\r\n options={options}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n open={open}\r\n defaultOpen={defaultOpen}\r\n onOpenChange={onOpenChange}\r\n disabled={disabled}\r\n size={size}\r\n changeOnSelect={changeOnSelect}\r\n className={className}\r\n >\r\n <CascaderTrigger\r\n size={size}\r\n allRound={allRound}\r\n leftIcon={leftIcon}\r\n rightIcon={rightIcon}\r\n expandIcon={expandIcon}\r\n placeholder={placeholder}\r\n error={error}\r\n separator={separator}\r\n {...triggerProps}\r\n />\r\n <CascaderContent className={contentClassName}>\r\n <CascaderOptionsMenu className={menuClassName} />\r\n </CascaderContent>\r\n </Cascader>\r\n );\r\n}\r\n\r\nexport { getLabelsForPath, getOptionsAtPath, findOptionPath as getOptionAtPath };\r\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport {\r\n DirectionArrowLeft,\r\n DirectionArrowRight,\r\n TimeAndDateClock,\r\n TimeAndDateDate,\r\n type AvialaIconProps,\r\n} from \"@aviala-design/icons\";\r\nimport {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n useCallback,\r\n useEffect,\r\n useId,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type ComponentPropsWithoutRef,\r\n type KeyboardEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { cloneAvialaIconElement } from \"../../lib/clone-aviala-icon\";\r\nimport { iconSlotCssVarStyle } from \"../../lib/icon-slot-sizing\";\r\nimport { typographyVariants } from \"../typography\";\r\nimport {\r\n DatePickerProvider,\r\n useDatePickerContext,\r\n type DatePickerMode,\r\n type DatePickerPanel,\r\n type DatePickerSize,\r\n type DatePickerTimeValue,\r\n} from \"./date-picker-context\";\r\nimport {\r\n addMonths,\r\n formatDisplayDate,\r\n formatDisplayDateTime,\r\n formatIsoDate,\r\n formatMonthYear,\r\n formatTimeValue,\r\n getCalendarDays,\r\n getRangeSelectionPosition,\r\n isDateDisabled,\r\n isDateInRange,\r\n isSameDay,\r\n isSameMonth,\r\n normalizeRange,\r\n startOfDay,\r\n WEEKDAY_LABELS,\r\n type DateRange,\r\n type RangeSelectionPosition,\r\n} from \"./date-utils\";\r\nimport {\r\n SegmentatorGroup,\r\n SegmentatorItem,\r\n} from \"../segmentator\";\r\nimport { DatePickerTimeWheelColumn } from \"./date-picker-time-wheel\";\r\nimport { TimePickerWheels } from \"../time-picker/time-picker-wheels\";\r\n\r\nexport type { DatePickerMode, DatePickerPanel, DatePickerSize, DatePickerTimeValue } from \"./date-picker-context\";\r\n\r\ntype DatePickerBaseProps = {\r\n children: ReactNode;\r\n mode?: DatePickerMode;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n size?: DatePickerSize;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n className?: string;\r\n /** Figma DatePickerLIstGroup — footer date/time Segmentator */\r\n enableTime?: boolean;\r\n timeValue?: DatePickerTimeValue;\r\n defaultTimeValue?: DatePickerTimeValue;\r\n onTimeChange?: (value: DatePickerTimeValue) => void;\r\n};\r\n\r\nexport type DatePickerSingleProps = DatePickerBaseProps & {\r\n mode?: \"single\";\r\n value?: Date;\r\n defaultValue?: Date;\r\n onValueChange?: (value: Date | undefined) => void;\r\n};\r\n\r\nexport type DatePickerRangeProps = DatePickerBaseProps & {\r\n mode: \"range\";\r\n value?: DateRange;\r\n defaultValue?: DateRange;\r\n onValueChange?: (value: DateRange) => void;\r\n};\r\n\r\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\r\n\r\nfunction renderSlotIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const content = cloneAvialaIconElement(node, {\r\n level: \"text\",\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className=\"aviala-datepicker-trigger__slot\"\r\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction getInitialViewMonth(\r\n mode: DatePickerMode,\r\n singleValue?: Date,\r\n rangeValue?: DateRange\r\n): Date {\r\n if (mode === \"single\" && singleValue) return startOfDay(singleValue);\r\n if (mode === \"range\") {\r\n if (rangeValue?.from) return startOfDay(rangeValue.from);\r\n if (rangeValue?.to) return startOfDay(rangeValue.to);\r\n }\r\n return startOfDay(new Date());\r\n}\r\n\r\n/**\r\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\r\n * blur-initiated closes; pointer-down and Escape must still dismiss on first interaction.\r\n */\r\nexport function DatePicker(props: DatePickerProps) {\r\n const {\r\n children,\r\n mode = \"single\",\r\n open: openProp,\r\n defaultOpen = false,\r\n onOpenChange,\r\n disabled = false,\r\n size = \"regular\",\r\n minDate,\r\n maxDate,\r\n className,\r\n enableTime = true,\r\n timeValue: timeValueProp,\r\n defaultTimeValue = { hours: 17, minutes: 0 },\r\n onTimeChange,\r\n } = props;\r\n\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n const [internalSingle, setInternalSingle] = useState<Date | undefined>(() =>\r\n mode === \"single\" ? (props as DatePickerSingleProps).defaultValue : undefined\r\n );\r\n const [internalRange, setInternalRange] = useState<DateRange>(() =>\r\n mode === \"range\" ? (props as DatePickerRangeProps).defaultValue ?? {} : {}\r\n );\r\n const [rangeDraftFrom, setRangeDraftFrom] = useState<Date | undefined>(undefined);\r\n const [activePanel, setActivePanel] = useState<DatePickerPanel>(\"date\");\r\n const [internalTime, setInternalTime] = useState<DatePickerTimeValue>(defaultTimeValue);\r\n\r\n const isOpenControlled = openProp !== undefined;\r\n const open = isOpenControlled ? openProp : internalOpen;\r\n\r\n const timeValue =\r\n timeValueProp !== undefined ? timeValueProp : internalTime;\r\n\r\n const setTimeValue = useCallback(\r\n (next: DatePickerTimeValue) => {\r\n if (timeValueProp === undefined) {\r\n setInternalTime(next);\r\n }\r\n onTimeChange?.(next);\r\n },\r\n [onTimeChange, timeValueProp]\r\n );\r\n\r\n const singleValue =\r\n mode === \"single\"\r\n ? (props as DatePickerSingleProps).value !== undefined\r\n ? (props as DatePickerSingleProps).value\r\n : internalSingle\r\n : undefined;\r\n\r\n const rangeValue =\r\n mode === \"range\"\r\n ? (props as DatePickerRangeProps).value !== undefined\r\n ? ((props as DatePickerRangeProps).value ?? {})\r\n : internalRange\r\n : { from: rangeDraftFrom };\r\n\r\n const [viewMonth, setViewMonth] = useState(() =>\r\n getInitialViewMonth(mode, singleValue, mode === \"range\" ? rangeValue : undefined)\r\n );\r\n const [focusedDay, setFocusedDay] = useState<Date | null>(null);\r\n const windowBlurCloseRef = useRef(false);\r\n const pointerDownCloseRef = useRef(false);\r\n\r\n useEffect(() => {\r\n const markWindowBlur = () => {\r\n windowBlurCloseRef.current = true;\r\n };\r\n window.addEventListener(\"blur\", markWindowBlur, true);\r\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n pointerDownCloseRef.current = false;\r\n setRangeDraftFrom(undefined);\r\n setActivePanel(\"date\");\r\n return;\r\n }\r\n\r\n const markPointerDown = () => {\r\n pointerDownCloseRef.current = true;\r\n };\r\n document.addEventListener(\"pointerdown\", markPointerDown, true);\r\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\r\n }, [open]);\r\n\r\n const handleOpenChange = useCallback(\r\n (nextOpen: boolean) => {\r\n if (disabled && nextOpen) return;\r\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\r\n windowBlurCloseRef.current = false;\r\n return;\r\n }\r\n windowBlurCloseRef.current = false;\r\n pointerDownCloseRef.current = false;\r\n if (!isOpenControlled) {\r\n setInternalOpen(nextOpen);\r\n }\r\n onOpenChange?.(nextOpen);\r\n },\r\n [disabled, isOpenControlled, onOpenChange]\r\n );\r\n\r\n const commitSingle = useCallback(\r\n (next: Date | undefined) => {\r\n if (mode !== \"single\") return;\r\n const controlled = (props as DatePickerSingleProps).value !== undefined;\r\n if (!controlled) {\r\n setInternalSingle(next);\r\n }\r\n (props as DatePickerSingleProps).onValueChange?.(next);\r\n },\r\n [mode, props]\r\n );\r\n\r\n const commitRange = useCallback(\r\n (next: DateRange) => {\r\n if (mode !== \"range\") return;\r\n const controlled = (props as DatePickerRangeProps).value !== undefined;\r\n if (!controlled) {\r\n setInternalRange(next);\r\n }\r\n (props as DatePickerRangeProps).onValueChange?.(next);\r\n },\r\n [mode, props]\r\n );\r\n\r\n const selectDate = useCallback(\r\n (date: Date) => {\r\n if (disabled || isDateDisabled(date, minDate, maxDate)) return;\r\n const day = startOfDay(date);\r\n setFocusedDay(day);\r\n\r\n if (!isSameMonth(day, viewMonth)) {\r\n setViewMonth(new Date(day.getFullYear(), day.getMonth(), 1));\r\n }\r\n\r\n if (mode === \"single\") {\r\n commitSingle(day);\r\n handleOpenChange(false);\r\n return;\r\n }\r\n\r\n const currentFrom = rangeDraftFrom ?? rangeValue.from;\r\n const currentTo = rangeValue.to;\r\n\r\n if (!currentFrom || (currentFrom && currentTo)) {\r\n setRangeDraftFrom(day);\r\n commitRange({ from: day, to: undefined });\r\n return;\r\n }\r\n\r\n if (isSameDay(day, currentFrom)) {\r\n commitRange({ from: day, to: day });\r\n setRangeDraftFrom(undefined);\r\n handleOpenChange(false);\r\n return;\r\n }\r\n\r\n const normalized = normalizeRange(currentFrom, day);\r\n commitRange(normalized);\r\n setRangeDraftFrom(undefined);\r\n handleOpenChange(false);\r\n },\r\n [\r\n commitRange,\r\n commitSingle,\r\n disabled,\r\n handleOpenChange,\r\n maxDate,\r\n minDate,\r\n mode,\r\n rangeDraftFrom,\r\n rangeValue.from,\r\n rangeValue.to,\r\n viewMonth,\r\n ]\r\n );\r\n\r\n const contextValue = useMemo(\r\n () => ({\r\n open,\r\n disabled,\r\n size,\r\n mode,\r\n viewMonth,\r\n setViewMonth,\r\n singleValue,\r\n rangeValue:\r\n mode === \"range\"\r\n ? rangeDraftFrom\r\n ? { from: rangeDraftFrom, to: rangeValue.to }\r\n : rangeValue\r\n : rangeValue,\r\n selectDate,\r\n minDate,\r\n maxDate,\r\n focusedDay,\r\n setFocusedDay,\r\n enableTime,\r\n activePanel,\r\n setActivePanel,\r\n timeValue,\r\n setTimeValue,\r\n }),\r\n [\r\n activePanel,\r\n disabled,\r\n enableTime,\r\n focusedDay,\r\n maxDate,\r\n minDate,\r\n mode,\r\n open,\r\n rangeDraftFrom,\r\n rangeValue,\r\n selectDate,\r\n singleValue,\r\n size,\r\n timeValue,\r\n setTimeValue,\r\n viewMonth,\r\n ]\r\n );\r\n\r\n return (\r\n <DatePickerProvider value={contextValue}>\r\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\r\n <div className={cn(\"inline-flex\", className)}>{children}</div>\r\n </PopoverPrimitive.Root>\r\n </DatePickerProvider>\r\n );\r\n}\r\n\r\nexport type DatePickerTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> & {\r\n size?: DatePickerSize;\r\n allRound?: boolean;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n placeholder?: string;\r\n rangePlaceholder?: string;\r\n error?: boolean;\r\n displayValue?: ReactNode;\r\n rangeSeparator?: string;\r\n className?: string;\r\n};\r\n\r\nexport const DatePickerTrigger = forwardRef<HTMLButtonElement, DatePickerTriggerProps>(\r\n (\r\n {\r\n className,\r\n size: sizeProp,\r\n allRound = false,\r\n leftIcon,\r\n rightIcon,\r\n placeholder = \"YYYY/MM/DD\",\r\n rangePlaceholder = \"Start date - End date\",\r\n error = false,\r\n displayValue,\r\n rangeSeparator = \" - \",\r\n disabled: disabledProp,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const {\r\n open,\r\n disabled: disabledContext,\r\n size: sizeContext,\r\n mode,\r\n singleValue,\r\n rangeValue,\r\n enableTime,\r\n timeValue,\r\n } = useDatePickerContext();\r\n const size = sizeProp ?? sizeContext;\r\n const disabled = disabledProp ?? disabledContext;\r\n\r\n const formatted =\r\n displayValue ??\r\n (mode === \"single\"\r\n ? singleValue\r\n ? enableTime\r\n ? formatDisplayDateTime(singleValue, timeValue.hours, timeValue.minutes)\r\n : formatDisplayDate(singleValue)\r\n : null\r\n : rangeValue.from && rangeValue.to\r\n ? enableTime\r\n ? `${formatDisplayDateTime(rangeValue.from, timeValue.hours, timeValue.minutes)}${rangeSeparator}${formatDisplayDateTime(rangeValue.to, timeValue.hours, timeValue.minutes)}`\r\n : `${formatDisplayDate(rangeValue.from)}${rangeSeparator}${formatDisplayDate(rangeValue.to)}`\r\n : rangeValue.from\r\n ? enableTime\r\n ? `${formatDisplayDateTime(rangeValue.from, timeValue.hours, timeValue.minutes)}${rangeSeparator}…`\r\n : `${formatDisplayDate(rangeValue.from)}${rangeSeparator}…`\r\n : null);\r\n\r\n const defaultPlaceholder = enableTime ? \"YYYY-MM-DD HH:mm\" : placeholder;\r\n\r\n const hasValue = formatted != null && formatted !== false;\r\n\r\n return (\r\n <PopoverPrimitive.Trigger asChild>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className={cn(\"aviala-datepicker-trigger\", className)}\r\n data-size={size}\r\n data-all-round={allRound ? \"true\" : \"false\"}\r\n data-state={open ? \"open\" : \"closed\"}\r\n data-error={error ? \"true\" : undefined}\r\n disabled={disabled}\r\n aria-expanded={open}\r\n aria-haspopup=\"dialog\"\r\n {...props}\r\n >\r\n {renderSlotIcon(\r\n leftIcon ?? (\r\n <TimeAndDateDate level=\"text\" biggerSize aria-hidden />\r\n )\r\n )}\r\n <span className=\"aviala-datepicker-trigger__field\">\r\n <span\r\n className={cn(\r\n \"aviala-datepicker-trigger__value\",\r\n typographyVariants({ level: \"text\" })\r\n )}\r\n data-placeholder={hasValue ? undefined : \"true\"}\r\n >\r\n {hasValue ? formatted : mode === \"range\" ? rangePlaceholder : defaultPlaceholder}\r\n </span>\r\n </span>\r\n {renderSlotIcon(rightIcon)}\r\n </button>\r\n </PopoverPrimitive.Trigger>\r\n );\r\n }\r\n);\r\nDatePickerTrigger.displayName = \"DatePickerTrigger\";\r\n\r\nexport type DatePickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\r\n portalled?: boolean;\r\n};\r\n\r\nexport const DatePickerContent = forwardRef<\r\n React.ElementRef<typeof PopoverPrimitive.Content>,\r\n DatePickerContentProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n portalled = true,\r\n sideOffset = 8,\r\n align = \"start\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const content = (\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n className={cn(\"aviala-datepicker-content\", className)}\r\n sideOffset={sideOffset}\r\n align={align}\r\n {...props}\r\n >\r\n {children ?? <DatePickerCalendar />}\r\n </PopoverPrimitive.Content>\r\n );\r\n\r\n if (!portalled) return content;\r\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\r\n }\r\n);\r\nDatePickerContent.displayName = \"DatePickerContent\";\r\n\r\nexport type DatePickerCalendarProps = {\r\n className?: string;\r\n};\r\n\r\nfunction getFooterDateLabel(\r\n mode: DatePickerMode,\r\n singleValue: Date | undefined,\r\n rangeValue: DateRange\r\n): string {\r\n if (mode === \"single\") {\r\n return singleValue ? formatIsoDate(singleValue) : \"选择日期\";\r\n }\r\n if (rangeValue.from && rangeValue.to) {\r\n return `${formatIsoDate(rangeValue.from)} 至 ${formatIsoDate(rangeValue.to)}`;\r\n }\r\n if (rangeValue.from) {\r\n return `${formatIsoDate(rangeValue.from)} 至 …`;\r\n }\r\n return \"选择日期范围\";\r\n}\r\n\r\nfunction DatePickerTimePanel() {\r\n const { timeValue, setTimeValue } = useDatePickerContext();\r\n\r\n return <TimePickerWheels value={timeValue} onChange={setTimeValue} />;\r\n}\r\n\r\nfunction DatePickerPanelFooter() {\r\n const {\r\n mode,\r\n singleValue,\r\n rangeValue,\r\n enableTime,\r\n activePanel,\r\n setActivePanel,\r\n timeValue,\r\n } = useDatePickerContext();\r\n\r\n if (!enableTime) return null;\r\n\r\n const panelValue = activePanel === \"date\" ? \"date\" : \"time\";\r\n const isRangeMode = mode === \"range\";\r\n\r\n return (\r\n <SegmentatorGroup\r\n value={panelValue}\r\n onValueChange={(value) => setActivePanel(value as DatePickerPanel)}\r\n mode=\"nested\"\r\n className=\"aviala-datepicker-footer\"\r\n data-layout={isRangeMode ? \"range\" : \"single\"}\r\n data-active-panel={activePanel}\r\n aria-label=\"日期与时间切换\"\r\n >\r\n <SegmentatorItem\r\n value=\"date\"\r\n leftIcon={<TimeAndDateDate level=\"text\" biggerSize aria-hidden />}\r\n iconOnly={isRangeMode && activePanel === \"time\"}\r\n >\r\n {getFooterDateLabel(mode, singleValue, rangeValue)}\r\n </SegmentatorItem>\r\n <SegmentatorItem\r\n value=\"time\"\r\n leftIcon={<TimeAndDateClock level=\"text\" biggerSize aria-hidden />}\r\n iconOnly={isRangeMode && activePanel === \"date\"}\r\n >\r\n {formatTimeValue(timeValue.hours, timeValue.minutes)}\r\n </SegmentatorItem>\r\n </SegmentatorGroup>\r\n );\r\n}\r\n\r\nexport function DatePickerCalendar({ className }: DatePickerCalendarProps) {\r\n const calendarId = useId();\r\n const {\r\n mode,\r\n viewMonth,\r\n setViewMonth,\r\n singleValue,\r\n rangeValue,\r\n selectDate,\r\n minDate,\r\n maxDate,\r\n focusedDay,\r\n setFocusedDay,\r\n activePanel,\r\n enableTime,\r\n } = useDatePickerContext();\r\n\r\n const today = useMemo(() => startOfDay(new Date()), []);\r\n const days = useMemo(() => getCalendarDays(viewMonth), [viewMonth]);\r\n\r\n const handleDayKeyDown = (event: KeyboardEvent<HTMLButtonElement>, date: Date) => {\r\n let next: Date | null = null;\r\n switch (event.key) {\r\n case \"ArrowLeft\":\r\n next = new Date(date);\r\n next.setDate(next.getDate() - 1);\r\n break;\r\n case \"ArrowRight\":\r\n next = new Date(date);\r\n next.setDate(next.getDate() + 1);\r\n break;\r\n case \"ArrowUp\":\r\n next = new Date(date);\r\n next.setDate(next.getDate() - 7);\r\n break;\r\n case \"ArrowDown\":\r\n next = new Date(date);\r\n next.setDate(next.getDate() + 7);\r\n break;\r\n case \"Home\":\r\n next = new Date(date.getFullYear(), date.getMonth(), 1);\r\n break;\r\n case \"End\":\r\n next = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n break;\r\n case \"PageUp\":\r\n next = addMonths(date, event.shiftKey ? -12 : -1);\r\n break;\r\n case \"PageDown\":\r\n next = addMonths(date, event.shiftKey ? 12 : 1);\r\n break;\r\n case \"Enter\":\r\n case \" \":\r\n event.preventDefault();\r\n selectDate(date);\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n if (!next) return;\r\n const normalized = startOfDay(next);\r\n setFocusedDay(normalized);\r\n if (!isSameMonth(normalized, viewMonth)) {\r\n setViewMonth(new Date(normalized.getFullYear(), normalized.getMonth(), 1));\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\"aviala-datepicker-calendar\", className)}\r\n role=\"application\"\r\n aria-label=\"Calendar\"\r\n >\r\n {activePanel === \"time\" && enableTime ? (\r\n <div className=\"aviala-datepicker-calendar__body\">\r\n <DatePickerTimePanel />\r\n </div>\r\n ) : (\r\n <div className=\"aviala-datepicker-calendar__body\">\r\n <div className=\"aviala-datepicker-calendar__header\">\r\n <button\r\n type=\"button\"\r\n className=\"aviala-datepicker-calendar__nav\"\r\n aria-label=\"Previous month\"\r\n onClick={() => setViewMonth(addMonths(viewMonth, -1))}\r\n >\r\n <DirectionArrowLeft level=\"text\" biggerSize aria-hidden />\r\n </button>\r\n <div\r\n id={`${calendarId}-label`}\r\n className={cn(\r\n \"aviala-datepicker-calendar__title\",\r\n typographyVariants({ level: \"subtitle\" })\r\n )}\r\n >\r\n {formatMonthYear(viewMonth)}\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"aviala-datepicker-calendar__nav\"\r\n aria-label=\"Next month\"\r\n onClick={() => setViewMonth(addMonths(viewMonth, 1))}\r\n >\r\n <DirectionArrowRight level=\"text\" biggerSize aria-hidden />\r\n </button>\r\n </div>\r\n\r\n <div className=\"aviala-datepicker-calendar__weekdays\" aria-hidden>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <span\r\n key={label}\r\n className={cn(\r\n \"aviala-datepicker-calendar__weekday\",\r\n typographyVariants({ level: \"caption\" })\r\n )}\r\n >\r\n {label}\r\n </span>\r\n ))}\r\n </div>\r\n\r\n <div\r\n className=\"aviala-datepicker-calendar__grid\"\r\n role=\"grid\"\r\n aria-labelledby={`${calendarId}-label`}\r\n >\r\n {days.map((day) => {\r\n const outside = !isSameMonth(day, viewMonth);\r\n const rangePos: RangeSelectionPosition =\r\n mode === \"range\"\r\n ? getRangeSelectionPosition(day, rangeValue.from, rangeValue.to)\r\n : singleValue && isSameDay(day, singleValue)\r\n ? \"single\"\r\n : \"none\";\r\n const selected = rangePos !== \"none\";\r\n const inRange =\r\n mode === \"range\" && isDateInRange(day, rangeValue.from, rangeValue.to);\r\n const isToday = isSameDay(day, today);\r\n const disabled = isDateDisabled(day, minDate, maxDate);\r\n const focused = focusedDay ? isSameDay(day, focusedDay) : false;\r\n\r\n return (\r\n <button\r\n key={day.toISOString()}\r\n type=\"button\"\r\n role=\"gridcell\"\r\n tabIndex={focused || (!focusedDay && isToday) ? 0 : -1}\r\n className=\"aviala-datepicker-day\"\r\n data-outside={outside ? \"true\" : undefined}\r\n data-selected={selected ? \"true\" : undefined}\r\n data-in-range={inRange && !selected ? \"true\" : undefined}\r\n data-range-pos={rangePos !== \"none\" ? rangePos : undefined}\r\n data-today={isToday ? \"true\" : undefined}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n aria-label={formatDisplayDate(day)}\r\n aria-selected={selected || undefined}\r\n aria-disabled={disabled || undefined}\r\n disabled={disabled}\r\n onClick={() => selectDate(day)}\r\n onFocus={() => setFocusedDay(day)}\r\n onKeyDown={(event) => handleDayKeyDown(event, day)}\r\n >\r\n <span\r\n className={cn(\r\n \"aviala-datepicker-day__label\",\r\n typographyVariants({ level: \"text\" })\r\n )}\r\n >\r\n {day.getDate()}\r\n </span>\r\n {isToday ? (\r\n <span className=\"aviala-datepicker-day__today-dot\" aria-hidden />\r\n ) : null}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <DatePickerPanelFooter />\r\n </div>\r\n );\r\n}\r\n\r\nexport type DatePickerFieldProps = Omit<DatePickerTriggerProps, \"displayValue\"> & {\r\n contentClassName?: string;\r\n calendarClassName?: string;\r\n mode?: DatePickerMode;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n size?: DatePickerSize;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n className?: string;\r\n value?: Date | DateRange;\r\n defaultValue?: Date | DateRange;\r\n onValueChange?: ((value: Date | undefined) => void) | ((value: DateRange) => void);\r\n enableTime?: boolean;\r\n timeValue?: DatePickerTimeValue;\r\n defaultTimeValue?: DatePickerTimeValue;\r\n onTimeChange?: (value: DatePickerTimeValue) => void;\r\n};\r\n\r\n/** Convenience field — trigger + calendar panel. */\r\nexport function DatePickerField({\r\n contentClassName,\r\n calendarClassName,\r\n className,\r\n size = \"regular\",\r\n mode = \"single\",\r\n allRound,\r\n leftIcon,\r\n rightIcon,\r\n placeholder,\r\n rangePlaceholder,\r\n error,\r\n rangeSeparator,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n open,\r\n defaultOpen,\r\n onOpenChange,\r\n disabled,\r\n minDate,\r\n maxDate,\r\n enableTime = true,\r\n timeValue,\r\n defaultTimeValue,\r\n onTimeChange,\r\n}: DatePickerFieldProps) {\r\n const pickerProps =\r\n mode === \"range\"\r\n ? {\r\n mode: \"range\" as const,\r\n value: value as DateRange | undefined,\r\n defaultValue: defaultValue as DateRange | undefined,\r\n onValueChange: onValueChange as ((value: DateRange) => void) | undefined,\r\n open,\r\n defaultOpen,\r\n onOpenChange,\r\n disabled,\r\n minDate,\r\n maxDate,\r\n enableTime,\r\n timeValue,\r\n defaultTimeValue,\r\n onTimeChange,\r\n }\r\n : {\r\n mode: \"single\" as const,\r\n value: value as Date | undefined,\r\n defaultValue: defaultValue as Date | undefined,\r\n onValueChange: onValueChange as ((value: Date | undefined) => void) | undefined,\r\n open,\r\n defaultOpen,\r\n onOpenChange,\r\n disabled,\r\n minDate,\r\n maxDate,\r\n enableTime,\r\n timeValue,\r\n defaultTimeValue,\r\n onTimeChange,\r\n };\r\n\r\n return (\r\n <DatePicker {...pickerProps} size={size} className={className}>\r\n <DatePickerTrigger\r\n size={size}\r\n allRound={allRound}\r\n leftIcon={leftIcon}\r\n rightIcon={rightIcon}\r\n placeholder={placeholder}\r\n rangePlaceholder={rangePlaceholder}\r\n error={error}\r\n rangeSeparator={rangeSeparator}\r\n />\r\n <DatePickerContent className={contentClassName}>\r\n <DatePickerCalendar className={calendarClassName} />\r\n </DatePickerContent>\r\n </DatePicker>\r\n );\r\n}\r\n","import { createContext, useContext, type ReactNode } from \"react\";\r\n\r\nimport type { DateRange } from \"./date-utils\";\r\n\r\n\r\n\r\n/** Figma Components → Information Collect → DatePicker Input */\r\n\r\nexport type DatePickerSize = \"regular\" | \"big\";\r\n\r\nexport type DatePickerMode = \"single\" | \"range\";\r\n\r\nexport type DatePickerPanel = \"date\" | \"time\";\r\n\r\nexport type DatePickerTimeValue = { hours: number; minutes: number };\r\n\r\n\r\n\r\nexport type DatePickerContextValue = {\r\n\r\n open: boolean;\r\n\r\n disabled?: boolean;\r\n\r\n size: DatePickerSize;\r\n\r\n mode: DatePickerMode;\r\n\r\n viewMonth: Date;\r\n\r\n setViewMonth: (month: Date) => void;\r\n\r\n singleValue?: Date;\r\n\r\n rangeValue: DateRange;\r\n\r\n selectDate: (date: Date) => void;\r\n\r\n minDate?: Date;\r\n\r\n maxDate?: Date;\r\n\r\n focusedDay: Date | null;\r\n\r\n setFocusedDay: (date: Date | null) => void;\r\n\r\n enableTime: boolean;\r\n\r\n activePanel: DatePickerPanel;\r\n\r\n setActivePanel: (panel: DatePickerPanel) => void;\r\n\r\n timeValue: DatePickerTimeValue;\r\n\r\n setTimeValue: (value: DatePickerTimeValue) => void;\r\n\r\n};\r\n\r\n\r\n\r\nconst DatePickerContext = createContext<DatePickerContextValue | null>(null);\r\n\r\n\r\n\r\nexport function DatePickerProvider({\r\n\r\n value,\r\n\r\n children,\r\n\r\n}: {\r\n\r\n value: DatePickerContextValue;\r\n\r\n children: ReactNode;\r\n\r\n}) {\r\n\r\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\r\n\r\n}\r\n\r\n\r\n\r\nexport function useDatePickerContext() {\r\n\r\n const context = useContext(DatePickerContext);\r\n\r\n if (!context) {\r\n\r\n throw new Error(\"DatePicker compound components must be used within DatePicker.\");\r\n\r\n }\r\n\r\n return context;\r\n\r\n}\r\n\r\n","/** Calendar helpers — no external date library. */\r\n\r\nexport type DateRange = {\r\n from?: Date;\r\n to?: Date;\r\n};\r\n\r\nexport const WEEKDAY_LABELS = [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"] as const;\r\n\r\nexport type RangeSelectionPosition = \"none\" | \"single\" | \"head\" | \"middle\" | \"last\";\r\n\r\nexport function startOfDay(date: Date): Date {\r\n const copy = new Date(date);\r\n copy.setHours(0, 0, 0, 0);\r\n return copy;\r\n}\r\n\r\nexport function isSameDay(a: Date, b: Date): boolean {\r\n return (\r\n a.getFullYear() === b.getFullYear() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getDate() === b.getDate()\r\n );\r\n}\r\n\r\nexport function isSameMonth(a: Date, b: Date): boolean {\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\r\n}\r\n\r\nexport function addMonths(date: Date, count: number): Date {\r\n const next = new Date(date);\r\n next.setDate(1);\r\n next.setMonth(next.getMonth() + count);\r\n return next;\r\n}\r\n\r\nexport function addDays(date: Date, count: number): Date {\r\n const next = new Date(date);\r\n next.setDate(next.getDate() + count);\r\n return startOfDay(next);\r\n}\r\n\r\nexport function getCalendarDays(month: Date): Date[] {\r\n const year = month.getFullYear();\r\n const monthIndex = month.getMonth();\r\n const firstDay = new Date(year, monthIndex, 1);\r\n const lastDay = new Date(year, monthIndex + 1, 0);\r\n /** Figma DateButtonGrid — week starts on Monday */\r\n const startOffset = (firstDay.getDay() + 6) % 7;\r\n const days: Date[] = [];\r\n\r\n for (let index = startOffset - 1; index >= 0; index -= 1) {\r\n days.push(new Date(year, monthIndex, -index));\r\n }\r\n\r\n for (let day = 1; day <= lastDay.getDate(); day += 1) {\r\n days.push(new Date(year, monthIndex, day));\r\n }\r\n\r\n while (days.length < 42) {\r\n const nextDay = days.length - startOffset - lastDay.getDate() + 1;\r\n days.push(new Date(year, monthIndex + 1, nextDay));\r\n }\r\n\r\n return days;\r\n}\r\n\r\nexport function formatDisplayDate(date: Date, locale = \"en-US\"): string {\r\n return new Intl.DateTimeFormat(locale, {\r\n year: \"numeric\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n }).format(date);\r\n}\r\n\r\n/** Figma DatePicker footer / trigger — `YYYY-MM-DD` */\r\nexport function formatIsoDate(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nexport function formatDisplayDateTime(\r\n date: Date,\r\n hours: number,\r\n minutes: number\r\n): string {\r\n return `${formatIsoDate(date)} ${formatTimeValue(hours, minutes)}`;\r\n}\r\n\r\nexport function formatMonthYear(date: Date, locale = \"zh-CN\"): string {\r\n return new Intl.DateTimeFormat(locale, {\r\n year: \"numeric\",\r\n month: \"long\",\r\n }).format(date);\r\n}\r\n\r\nexport function formatTimeValue(hours: number, minutes: number): string {\r\n return `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}`;\r\n}\r\n\r\nexport function getRangeSelectionPosition(\r\n day: Date,\r\n from?: Date,\r\n to?: Date\r\n): RangeSelectionPosition {\r\n if (!from) return \"none\";\r\n\r\n const dayNorm = startOfDay(day);\r\n\r\n if (!to) {\r\n return isSameDay(dayNorm, from) ? \"single\" : \"none\";\r\n }\r\n\r\n if (!isDateInRange(dayNorm, from, to)) return \"none\";\r\n\r\n const normalized = normalizeRange(from, to);\r\n const rangeStart = startOfDay(normalized.from!);\r\n const rangeEnd = startOfDay(normalized.to!);\r\n\r\n if (isSameDay(rangeStart, rangeEnd)) return \"single\";\r\n\r\n /** Figma DateButton — per-row Head/Middle/Last with row-break rounding */\r\n const weekCol = (dayNorm.getDay() + 6) % 7;\r\n const prevInRange = isDateInRange(addDays(dayNorm, -1), rangeStart, rangeEnd);\r\n const nextInRange = isDateInRange(addDays(dayNorm, 1), rangeStart, rangeEnd);\r\n const isVisualStart = !prevInRange || weekCol === 0;\r\n const isVisualEnd = !nextInRange || weekCol === 6;\r\n\r\n if (isVisualStart && isVisualEnd) return \"single\";\r\n if (isVisualStart) return \"head\";\r\n if (isVisualEnd) return \"last\";\r\n return \"middle\";\r\n}\r\n\r\nexport function isDateInRange(date: Date, from?: Date, to?: Date): boolean {\r\n if (!from) return false;\r\n const time = startOfDay(date).getTime();\r\n const fromTime = startOfDay(from).getTime();\r\n if (!to) return time === fromTime;\r\n const toTime = startOfDay(to).getTime();\r\n const min = Math.min(fromTime, toTime);\r\n const max = Math.max(fromTime, toTime);\r\n return time >= min && time <= max;\r\n}\r\n\r\nexport function isRangeStart(date: Date, from?: Date, to?: Date): boolean {\r\n if (!from) return false;\r\n if (!to) return isSameDay(date, from);\r\n const start = startOfDay(from).getTime() <= startOfDay(to).getTime() ? from : to;\r\n return isSameDay(date, start);\r\n}\r\n\r\nexport function isRangeEnd(date: Date, from?: Date, to?: Date): boolean {\r\n if (!from || !to) return false;\r\n const end = startOfDay(from).getTime() <= startOfDay(to).getTime() ? to : from;\r\n return isSameDay(date, end);\r\n}\r\n\r\nexport function isDateDisabled(date: Date, minDate?: Date, maxDate?: Date): boolean {\r\n const time = startOfDay(date).getTime();\r\n if (minDate && time < startOfDay(minDate).getTime()) return true;\r\n if (maxDate && time > startOfDay(maxDate).getTime()) return true;\r\n return false;\r\n}\r\n\r\nexport function normalizeRange(from: Date, to: Date): DateRange {\r\n if (startOfDay(from).getTime() <= startOfDay(to).getTime()) {\r\n return { from, to };\r\n }\r\n return { from: to, to: from };\r\n}\r\n","import {\r\n useCallback,\r\n useEffect,\r\n useLayoutEffect,\r\n useMemo,\r\n useRef,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { typographyVariants } from \"../typography\";\r\n\r\nconst LOOP_SECTIONS = 3;\r\nconst MIDDLE_SECTION = 1;\r\nconst SCROLL_END_DEBOUNCE_MS = 80;\r\n\r\ntype DatePickerTimeWheelColumnProps = {\r\n values: readonly number[];\r\n value: number;\r\n onChange: (value: number) => void;\r\n \"aria-label\": string;\r\n loop?: boolean;\r\n className?: string;\r\n};\r\n\r\nfunction formatWheelValue(value: number): string {\r\n return String(value).padStart(2, \"0\");\r\n}\r\n\r\nfunction normalizeIndex(index: number, length: number): number {\r\n return ((index % length) + length) % length;\r\n}\r\n\r\nfunction getValueIndex(values: readonly number[], value: number): number {\r\n const index = values.indexOf(value);\r\n if (index >= 0) return index;\r\n\r\n let nearestIndex = 0;\r\n let smallestDistance = Number.POSITIVE_INFINITY;\r\n\r\n values.forEach((candidate, candidateIndex) => {\r\n const distance = Math.abs(candidate - value);\r\n if (distance < smallestDistance) {\r\n smallestDistance = distance;\r\n nearestIndex = candidateIndex;\r\n }\r\n });\r\n\r\n return nearestIndex;\r\n}\r\n\r\nfunction readItemHeight(container: HTMLElement): number {\r\n const item = container.querySelector<HTMLElement>(\".aviala-datepicker-time__wheel-item\");\r\n if (item) {\r\n return item.getBoundingClientRect().height;\r\n }\r\n\r\n const style = getComputedStyle(container);\r\n const token = style.getPropertyValue(\"--datepicker-time-wheel-item-height\").trim();\r\n const parsed = parseFloat(token);\r\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 36;\r\n}\r\n\r\nexport function DatePickerTimeWheelColumn({\r\n values,\r\n value,\r\n onChange,\r\n \"aria-label\": ariaLabel,\r\n loop = true,\r\n className,\r\n}: DatePickerTimeWheelColumnProps) {\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n const isUserScrollingRef = useRef(false);\r\n const isProgrammaticScrollRef = useRef(false);\r\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\r\n const selectedValueRef = useRef(value);\r\n\r\n selectedValueRef.current = value;\r\n\r\n const repeatedValues = useMemo(() => {\r\n if (!loop) return [...values];\r\n return Array.from({ length: LOOP_SECTIONS }, () => values).flat();\r\n }, [loop, values]);\r\n\r\n const scrollToIndex = useCallback(\r\n (index: number, behavior: ScrollBehavior = \"auto\") => {\r\n const container = scrollRef.current;\r\n if (!container) return;\r\n\r\n const itemHeight = readItemHeight(container);\r\n isProgrammaticScrollRef.current = true;\r\n container.scrollTo({ top: index * itemHeight, behavior });\r\n },\r\n []\r\n );\r\n\r\n const scrollToValue = useCallback(\r\n (nextValue: number, behavior: ScrollBehavior = \"smooth\") => {\r\n const valueIndex = getValueIndex(values, nextValue);\r\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\r\n scrollToIndex(targetIndex, behavior);\r\n },\r\n [loop, scrollToIndex, values]\r\n );\r\n\r\n const settleScroll = useCallback(() => {\r\n const container = scrollRef.current;\r\n if (!container || isProgrammaticScrollRef.current) {\r\n isProgrammaticScrollRef.current = false;\r\n return;\r\n }\r\n\r\n const itemHeight = readItemHeight(container);\r\n if (itemHeight <= 0) return;\r\n\r\n const rawIndex = Math.round(container.scrollTop / itemHeight);\r\n const valueIndex = loop\r\n ? normalizeIndex(rawIndex, values.length)\r\n : Math.min(Math.max(rawIndex, 0), values.length - 1);\r\n const nextValue = values[valueIndex];\r\n\r\n if (loop) {\r\n const section = Math.floor(rawIndex / values.length);\r\n if (section !== MIDDLE_SECTION) {\r\n isProgrammaticScrollRef.current = true;\r\n container.scrollTop = (values.length * MIDDLE_SECTION + valueIndex) * itemHeight;\r\n }\r\n } else if (rawIndex !== valueIndex) {\r\n isProgrammaticScrollRef.current = true;\r\n container.scrollTop = valueIndex * itemHeight;\r\n }\r\n\r\n if (nextValue !== selectedValueRef.current) {\r\n onChange(nextValue);\r\n }\r\n\r\n isUserScrollingRef.current = false;\r\n }, [loop, onChange, values]);\r\n\r\n const handleScroll = useCallback(() => {\r\n if (isProgrammaticScrollRef.current) return;\r\n isUserScrollingRef.current = true;\r\n if (scrollEndTimerRef.current) {\r\n clearTimeout(scrollEndTimerRef.current);\r\n }\r\n scrollEndTimerRef.current = setTimeout(settleScroll, SCROLL_END_DEBOUNCE_MS);\r\n }, [settleScroll]);\r\n\r\n useLayoutEffect(() => {\r\n if (isUserScrollingRef.current) return;\r\n\r\n const container = scrollRef.current;\r\n if (!container) return;\r\n\r\n const itemHeight = readItemHeight(container);\r\n if (itemHeight <= 0) return;\r\n\r\n const valueIndex = getValueIndex(values, value);\r\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\r\n const currentIndex = Math.round(container.scrollTop / itemHeight);\r\n const currentValueIndex = loop\r\n ? normalizeIndex(currentIndex, values.length)\r\n : Math.min(Math.max(currentIndex, 0), values.length - 1);\r\n const inMiddleSection =\r\n !loop || Math.floor(currentIndex / values.length) === MIDDLE_SECTION;\r\n\r\n if (currentValueIndex === valueIndex && inMiddleSection) return;\r\n\r\n scrollToIndex(targetIndex, \"auto\");\r\n }, [loop, scrollToIndex, value, values]);\r\n\r\n useEffect(() => {\r\n const container = scrollRef.current;\r\n if (!container) return;\r\n\r\n const onScrollEnd = () => {\r\n if (scrollEndTimerRef.current) {\r\n clearTimeout(scrollEndTimerRef.current);\r\n }\r\n settleScroll();\r\n };\r\n\r\n container.addEventListener(\"scrollend\", onScrollEnd);\r\n return () => {\r\n container.removeEventListener(\"scrollend\", onScrollEnd);\r\n if (scrollEndTimerRef.current) {\r\n clearTimeout(scrollEndTimerRef.current);\r\n }\r\n };\r\n }, [settleScroll]);\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n const currentIndex = getValueIndex(values, selectedValueRef.current);\r\n let nextIndex: number | null = null;\r\n\r\n switch (event.key) {\r\n case \"ArrowUp\":\r\n nextIndex = loop\r\n ? normalizeIndex(currentIndex - 1, values.length)\r\n : Math.max(currentIndex - 1, 0);\r\n break;\r\n case \"ArrowDown\":\r\n nextIndex = loop\r\n ? normalizeIndex(currentIndex + 1, values.length)\r\n : Math.min(currentIndex + 1, values.length - 1);\r\n break;\r\n case \"Home\":\r\n nextIndex = 0;\r\n break;\r\n case \"End\":\r\n nextIndex = values.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const nextValue = values[nextIndex];\r\n scrollToValue(nextValue, \"smooth\");\r\n if (nextValue !== selectedValueRef.current) {\r\n onChange(nextValue);\r\n }\r\n };\r\n\r\n const selectedOptionId = loop\r\n ? `${ariaLabel}-${value}-${values.length * MIDDLE_SECTION + getValueIndex(values, value)}`\r\n : `${ariaLabel}-${value}`;\r\n\r\n return (\r\n <div className={cn(\"aviala-datepicker-time__wheel\", className)}>\r\n <div className=\"aviala-datepicker-time__wheel-highlight\" aria-hidden />\r\n <div\r\n className=\"aviala-datepicker-time__wheel-fade aviala-datepicker-time__wheel-fade--top\"\r\n aria-hidden\r\n />\r\n <div\r\n className=\"aviala-datepicker-time__wheel-fade aviala-datepicker-time__wheel-fade--bottom\"\r\n aria-hidden\r\n />\r\n <div\r\n ref={scrollRef}\r\n className=\"aviala-datepicker-time__wheel-scroll\"\r\n onScroll={handleScroll}\r\n role=\"listbox\"\r\n aria-label={ariaLabel}\r\n aria-activedescendant={selectedOptionId}\r\n tabIndex={0}\r\n onKeyDown={handleKeyDown}\r\n >\r\n <ul className=\"aviala-datepicker-time__wheel-list\">\r\n {repeatedValues.map((itemValue, index) => {\r\n const isSelected = itemValue === value;\r\n const optionId = loop ? `${ariaLabel}-${itemValue}-${index}` : `${ariaLabel}-${itemValue}`;\r\n\r\n return (\r\n <li\r\n key={optionId}\r\n id={optionId}\r\n className=\"aviala-datepicker-time__wheel-item\"\r\n role=\"option\"\r\n aria-selected={isSelected}\r\n >\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n \"aviala-datepicker-time__wheel-option\",\r\n typographyVariants({ level: \"text\" })\r\n )}\r\n data-selected={isSelected ? \"true\" : undefined}\r\n tabIndex={-1}\r\n onClick={() => {\r\n scrollToValue(itemValue, \"smooth\");\r\n if (itemValue !== selectedValueRef.current) {\r\n onChange(itemValue);\r\n }\r\n }}\r\n >\r\n {formatWheelValue(itemValue)}\r\n </button>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { cn } from \"../../lib/utils\";\r\nimport { DatePickerTimeWheelColumn } from \"../date-picker/date-picker-time-wheel\";\r\n\r\nexport const TIME_PICKER_HOUR_VALUES = Array.from({ length: 24 }, (_, index) => index);\r\nexport const TIME_PICKER_MINUTE_VALUES = Array.from({ length: 12 }, (_, index) => index * 5);\r\n\r\nexport type TimePickerWheelsValue = {\r\n hours: number;\r\n minutes: number;\r\n};\r\n\r\ntype TimePickerWheelsProps = {\r\n value: TimePickerWheelsValue;\r\n onChange: (value: TimePickerWheelsValue) => void;\r\n className?: string;\r\n};\r\n\r\nexport function TimePickerWheels({ value, onChange, className }: TimePickerWheelsProps) {\r\n return (\r\n <div className={cn(\"aviala-datepicker-time\", className)} role=\"group\" aria-label=\"选择时间\">\r\n <div className=\"aviala-datepicker-time__columns\">\r\n <DatePickerTimeWheelColumn\r\n aria-label=\"小时\"\r\n values={TIME_PICKER_HOUR_VALUES}\r\n value={value.hours}\r\n onChange={(hours) => onChange({ ...value, hours })}\r\n />\r\n <DatePickerTimeWheelColumn\r\n aria-label=\"分钟\"\r\n values={TIME_PICKER_MINUTE_VALUES}\r\n value={value.minutes}\r\n onChange={(minutes) => onChange({ ...value, minutes })}\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport { TimeAndDateClock } from \"@aviala-design/icons\";\r\nimport {\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type ComponentPropsWithoutRef,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { cloneAvialaIconElement } from \"../../lib/clone-aviala-icon\";\r\nimport { iconSlotCssVarStyle } from \"../../lib/icon-slot-sizing\";\r\nimport { formatTimeValue } from \"../date-picker/date-utils\";\r\nimport { typographyVariants } from \"../typography\";\r\nimport {\r\n TimePickerProvider,\r\n useTimePickerContext,\r\n type TimePickerSize,\r\n type TimePickerValue,\r\n} from \"./time-picker-context\";\r\nimport { TimePickerWheels } from \"./time-picker-wheels\";\r\n\r\nexport type { TimePickerSize, TimePickerValue } from \"./time-picker-context\";\r\n\r\nexport type TimePickerProps = {\r\n children: ReactNode;\r\n value?: TimePickerValue;\r\n defaultValue?: TimePickerValue;\r\n onValueChange?: (value: TimePickerValue) => void;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n size?: TimePickerSize;\r\n className?: string;\r\n};\r\n\r\nfunction renderSlotIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const content = cloneAvialaIconElement(node, {\r\n level: \"text\",\r\n biggerSize: true,\r\n });\r\n\r\n return (\r\n <span\r\n className=\"aviala-timepicker-trigger__slot\"\r\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\r\n >\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nexport function TimePicker({\r\n children,\r\n value: valueProp,\r\n defaultValue = { hours: 17, minutes: 0 },\r\n onValueChange,\r\n open: openProp,\r\n defaultOpen = false,\r\n onOpenChange,\r\n disabled = false,\r\n size = \"regular\",\r\n className,\r\n}: TimePickerProps) {\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n const [internalValue, setInternalValue] = useState<TimePickerValue>(defaultValue);\r\n const windowBlurCloseRef = useRef(false);\r\n const pointerDownCloseRef = useRef(false);\r\n\r\n const isOpenControlled = openProp !== undefined;\r\n const open = isOpenControlled ? openProp : internalOpen;\r\n const value = valueProp !== undefined ? valueProp : internalValue;\r\n\r\n const setValue = useCallback(\r\n (next: TimePickerValue) => {\r\n if (valueProp === undefined) {\r\n setInternalValue(next);\r\n }\r\n onValueChange?.(next);\r\n },\r\n [onValueChange, valueProp]\r\n );\r\n\r\n useEffect(() => {\r\n const markWindowBlur = () => {\r\n windowBlurCloseRef.current = true;\r\n };\r\n window.addEventListener(\"blur\", markWindowBlur, true);\r\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n pointerDownCloseRef.current = false;\r\n return;\r\n }\r\n\r\n const markPointerDown = () => {\r\n pointerDownCloseRef.current = true;\r\n };\r\n document.addEventListener(\"pointerdown\", markPointerDown, true);\r\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\r\n }, [open]);\r\n\r\n const handleOpenChange = useCallback(\r\n (nextOpen: boolean) => {\r\n if (disabled && nextOpen) return;\r\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\r\n windowBlurCloseRef.current = false;\r\n return;\r\n }\r\n windowBlurCloseRef.current = false;\r\n pointerDownCloseRef.current = false;\r\n if (!isOpenControlled) {\r\n setInternalOpen(nextOpen);\r\n }\r\n onOpenChange?.(nextOpen);\r\n },\r\n [disabled, isOpenControlled, onOpenChange]\r\n );\r\n\r\n const contextValue = useMemo(\r\n () => ({\r\n open,\r\n disabled,\r\n size,\r\n value,\r\n setValue,\r\n }),\r\n [disabled, open, size, value, setValue]\r\n );\r\n\r\n return (\r\n <TimePickerProvider value={contextValue}>\r\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\r\n <div className={cn(\"inline-flex\", className)}>{children}</div>\r\n </PopoverPrimitive.Root>\r\n </TimePickerProvider>\r\n );\r\n}\r\n\r\nexport type TimePickerTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> & {\r\n size?: TimePickerSize;\r\n allRound?: boolean;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n placeholder?: string;\r\n error?: boolean;\r\n displayValue?: string | null;\r\n};\r\n\r\nexport const TimePickerTrigger = forwardRef<HTMLButtonElement, TimePickerTriggerProps>(\r\n (\r\n {\r\n className,\r\n size: sizeProp,\r\n allRound = false,\r\n leftIcon,\r\n rightIcon,\r\n placeholder = \"HH:mm\",\r\n error = false,\r\n displayValue,\r\n disabled: disabledProp,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const { open, disabled: disabledContext, size: sizeContext, value } = useTimePickerContext();\r\n const size = sizeProp ?? sizeContext;\r\n const disabled = disabledProp ?? disabledContext;\r\n const formatted =\r\n displayValue !== undefined\r\n ? displayValue\r\n : formatTimeValue(value.hours, value.minutes);\r\n const hasValue = formatted != null && formatted !== \"\";\r\n\r\n return (\r\n <PopoverPrimitive.Trigger asChild>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n className={cn(\"aviala-timepicker-trigger\", className)}\r\n data-size={size}\r\n data-all-round={allRound ? \"true\" : \"false\"}\r\n data-state={open ? \"open\" : \"closed\"}\r\n data-error={error ? \"true\" : undefined}\r\n disabled={disabled}\r\n aria-expanded={open}\r\n aria-haspopup=\"dialog\"\r\n {...props}\r\n >\r\n {renderSlotIcon(\r\n leftIcon ?? <TimeAndDateClock level=\"text\" biggerSize aria-hidden />\r\n )}\r\n <span className=\"aviala-timepicker-trigger__field\">\r\n <span\r\n className={cn(\r\n \"aviala-timepicker-trigger__value\",\r\n typographyVariants({ level: \"text\" })\r\n )}\r\n data-placeholder={hasValue ? undefined : \"true\"}\r\n >\r\n {hasValue ? formatted : placeholder}\r\n </span>\r\n </span>\r\n {renderSlotIcon(rightIcon)}\r\n </button>\r\n </PopoverPrimitive.Trigger>\r\n );\r\n }\r\n);\r\nTimePickerTrigger.displayName = \"TimePickerTrigger\";\r\n\r\nexport type TimePickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\r\n portalled?: boolean;\r\n};\r\n\r\nexport const TimePickerContent = forwardRef<\r\n React.ElementRef<typeof PopoverPrimitive.Content>,\r\n TimePickerContentProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n portalled = true,\r\n sideOffset = 8,\r\n align = \"start\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const content = (\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n className={cn(\"aviala-timepicker-content\", className)}\r\n sideOffset={sideOffset}\r\n align={align}\r\n {...props}\r\n >\r\n {children ?? <TimePickerPanel />}\r\n </PopoverPrimitive.Content>\r\n );\r\n\r\n if (!portalled) return content;\r\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\r\n }\r\n);\r\nTimePickerContent.displayName = \"TimePickerContent\";\r\n\r\nexport type TimePickerPanelProps = {\r\n className?: string;\r\n};\r\n\r\nexport function TimePickerPanel({ className }: TimePickerPanelProps) {\r\n const { value, setValue } = useTimePickerContext();\r\n\r\n return (\r\n <div className={cn(\"aviala-timepicker-panel\", className)} role=\"application\" aria-label=\"Time picker\">\r\n <TimePickerWheels value={value} onChange={setValue} />\r\n </div>\r\n );\r\n}\r\n\r\nexport type TimePickerFieldProps = Omit<TimePickerTriggerProps, \"displayValue\"> & {\r\n contentClassName?: string;\r\n panelClassName?: string;\r\n value?: TimePickerValue;\r\n defaultValue?: TimePickerValue;\r\n onValueChange?: (value: TimePickerValue) => void;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n disabled?: boolean;\r\n size?: TimePickerSize;\r\n className?: string;\r\n};\r\n\r\n/** Convenience field — trigger + time wheel panel. */\r\nexport function TimePickerField({\r\n contentClassName,\r\n panelClassName,\r\n className,\r\n size = \"regular\",\r\n allRound,\r\n leftIcon,\r\n rightIcon,\r\n placeholder,\r\n error,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n open,\r\n defaultOpen,\r\n onOpenChange,\r\n disabled,\r\n}: TimePickerFieldProps) {\r\n return (\r\n <TimePicker\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n open={open}\r\n defaultOpen={defaultOpen}\r\n onOpenChange={onOpenChange}\r\n disabled={disabled}\r\n size={size}\r\n className={className}\r\n >\r\n <TimePickerTrigger\r\n size={size}\r\n allRound={allRound}\r\n leftIcon={leftIcon}\r\n rightIcon={rightIcon}\r\n placeholder={placeholder}\r\n error={error}\r\n />\r\n <TimePickerContent className={contentClassName}>\r\n <TimePickerPanel className={panelClassName} />\r\n </TimePickerContent>\r\n </TimePicker>\r\n );\r\n}\r\n","import { createContext, useContext, type ReactNode } from \"react\";\r\n\r\n/** Figma Components → Information Collect → TimePicker */\r\nexport type TimePickerSize = \"regular\" | \"big\";\r\n\r\nexport type TimePickerValue = {\r\n hours: number;\r\n minutes: number;\r\n};\r\n\r\nexport type TimePickerContextValue = {\r\n open: boolean;\r\n disabled?: boolean;\r\n size: TimePickerSize;\r\n value: TimePickerValue;\r\n setValue: (value: TimePickerValue) => void;\r\n};\r\n\r\nconst TimePickerContext = createContext<TimePickerContextValue | null>(null);\r\n\r\nexport function TimePickerProvider({\r\n value,\r\n children,\r\n}: {\r\n value: TimePickerContextValue;\r\n children: ReactNode;\r\n}) {\r\n return <TimePickerContext.Provider value={value}>{children}</TimePickerContext.Provider>;\r\n}\r\n\r\nexport function useTimePickerContext() {\r\n const context = useContext(TimePickerContext);\r\n if (!context) {\r\n throw new Error(\"TimePicker compound components must be used within TimePicker.\");\r\n }\r\n return context;\r\n}\r\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport {\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n type ComponentPropsWithoutRef,\r\n} from \"react\";\r\nimport { typographyVariants } from \"./typography\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { OverlayPointerSvg, POPOVER_POINTER } from \"./overlay-pointer\";\r\n\r\nexport type PopoverProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>;\r\n\r\n/**\r\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\r\n * blur-initiated closes; pointer-down (outside click, trigger toggle) and Escape\r\n * must still dismiss on the first interaction.\r\n */\r\nexport function Popover({\r\n open: openProp,\r\n defaultOpen = false,\r\n onOpenChange,\r\n modal = false,\r\n ...props\r\n}: PopoverProps) {\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n const isControlled = openProp !== undefined;\r\n const open = isControlled ? openProp : internalOpen;\r\n const windowBlurCloseRef = useRef(false);\r\n const pointerDownCloseRef = useRef(false);\r\n\r\n useEffect(() => {\r\n const markWindowBlur = () => {\r\n windowBlurCloseRef.current = true;\r\n };\r\n window.addEventListener(\"blur\", markWindowBlur, true);\r\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n pointerDownCloseRef.current = false;\r\n return;\r\n }\r\n\r\n const markPointerDown = () => {\r\n pointerDownCloseRef.current = true;\r\n };\r\n document.addEventListener(\"pointerdown\", markPointerDown, true);\r\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\r\n }, [open]);\r\n\r\n const handleOpenChange = useCallback(\r\n (nextOpen: boolean) => {\r\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\r\n windowBlurCloseRef.current = false;\r\n return;\r\n }\r\n windowBlurCloseRef.current = false;\r\n pointerDownCloseRef.current = false;\r\n if (!isControlled) {\r\n setInternalOpen(nextOpen);\r\n }\r\n onOpenChange?.(nextOpen);\r\n },\r\n [isControlled, onOpenChange]\r\n );\r\n\r\n return (\r\n <PopoverPrimitive.Root\r\n open={open}\r\n onOpenChange={handleOpenChange}\r\n modal={modal}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\r\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\r\n\r\nexport type PopoverContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\r\n /** Render without Portal — use inside nested overlays. */\r\n portalled?: boolean;\r\n /** Show a caret arrow pointing at the trigger (Figma with-arrow variant). */\r\n showArrow?: boolean;\r\n};\r\n\r\nexport const PopoverContent = forwardRef<\r\n React.ElementRef<typeof PopoverPrimitive.Content>,\r\n PopoverContentProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n align = \"center\",\r\n sideOffset = 8,\r\n collisionPadding = 8,\r\n portalled = true,\r\n showArrow = false,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const content = (\r\n <PopoverPrimitive.Content\r\n ref={ref}\r\n align={align}\r\n sideOffset={sideOffset}\r\n collisionPadding={collisionPadding}\r\n className={cn(\"aviala-popover-content\", className)}\r\n {...props}\r\n >\r\n <div className={cn(\"aviala-popover-content__surface\", typographyVariants({ level: \"text\" }))}>\r\n {children}\r\n </div>\r\n {showArrow ? (\r\n <PopoverPrimitive.Arrow\r\n asChild\r\n width={POPOVER_POINTER.width}\r\n height={POPOVER_POINTER.height}\r\n >\r\n <OverlayPointerSvg\r\n variant=\"popover\"\r\n className=\"aviala-popover-content__arrow\"\r\n width={POPOVER_POINTER.width}\r\n height={POPOVER_POINTER.height}\r\n path={POPOVER_POINTER.path}\r\n />\r\n </PopoverPrimitive.Arrow>\r\n ) : null}\r\n </PopoverPrimitive.Content>\r\n );\r\n\r\n if (!portalled) return content;\r\n\r\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\r\n }\r\n);\r\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\r\n","import type { ComponentPropsWithoutRef } from \"react\";\r\n\r\n/** Figma System Composition → Tooltip pointer (14×5). */\r\nexport const TOOLTIP_POINTER = {\r\n width: 14,\r\n height: 5,\r\n path: \"M14 0L0 0C4.97025 1 3.98967 5 7 5C10.0103 5 9.02975 1 14 0Z\",\r\n} as const;\r\n\r\n/** Figma System Composition → Popover pointer (16×5). */\r\nexport const POPOVER_POINTER = {\r\n width: 16,\r\n height: 5,\r\n path: \"M16 0H0C4.12448 0 4.76977 5 8 5C11.2302 5 11.8755 0 16 0Z\",\r\n} as const;\r\n\r\nexport type OverlayPointerSvgProps = ComponentPropsWithoutRef<\"svg\"> & {\r\n width: number;\r\n height: number;\r\n path: string;\r\n /** Popover caret — stroked outline so the pointer reads on light page backgrounds. */\r\n variant?: \"default\" | \"popover\";\r\n};\r\n\r\n/** Curved caret SVG — fill via parent `color` / CSS token on the svg class. */\r\nexport function OverlayPointerSvg({\r\n width,\r\n height,\r\n path,\r\n variant = \"default\",\r\n className,\r\n style,\r\n ...props\r\n}: OverlayPointerSvgProps) {\r\n const isPopover = variant === \"popover\";\r\n\r\n return (\r\n <svg\r\n {...props}\r\n width={width}\r\n height={height}\r\n viewBox={`0 0 ${width} ${height}`}\r\n preserveAspectRatio=\"none\"\r\n fill=\"currentColor\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden\r\n className={className}\r\n style={{ ...style, width, height }}\r\n >\r\n {isPopover ? (\r\n <>\r\n <path d={path} className=\"aviala-popover-content__arrow-outline\" />\r\n <path d={path} className=\"aviala-popover-content__arrow-fill\" />\r\n </>\r\n ) : (\r\n <path d={path} />\r\n )}\r\n </svg>\r\n );\r\n}\r\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\r\nimport { SymbolWrong } from \"@aviala-design/icons\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n type ComponentPropsWithoutRef,\r\n type HTMLAttributes,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { Link } from \"./link\";\r\nimport { Typeface } from \"./typeface\";\r\nimport { Typography } from \"./typography\";\r\n\r\n/** Figma Components → Information Display → Modal (553:58593) */\r\nexport type ModalSize = \"default\" | \"large\";\r\n\r\nconst MODAL_ICON_SIZE = 16;\r\n\r\nconst modalContentVariants = cva(\"aviala-modal-content\", {\r\n variants: {\r\n size: {\r\n default: \"aviala-modal-content--size-default\",\r\n large: \"aviala-modal-content--size-large\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"default\",\r\n },\r\n});\r\n\r\nfunction renderModalIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const content =\r\n isValidElement(node) && typeof node.type !== \"string\"\r\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\r\n width: MODAL_ICON_SIZE,\r\n height: MODAL_ICON_SIZE,\r\n className: cn(\r\n (node as ReactElement<{ className?: string }>).props.className,\r\n \"shrink-0\"\r\n ),\r\n })\r\n : node;\r\n\r\n return (\r\n <span className=\"aviala-modal__icon\" aria-hidden>\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nexport type ModalProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\r\n\r\nexport const Modal = DialogPrimitive.Root;\r\n\r\nexport const ModalTrigger = DialogPrimitive.Trigger;\r\n\r\nexport const ModalPortal = DialogPrimitive.Portal;\r\n\r\nexport const ModalClose = DialogPrimitive.Close;\r\n\r\nexport type ModalOverlayProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\r\n\r\nexport const ModalOverlay = forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Overlay>,\r\n ModalOverlayProps\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Overlay\r\n ref={ref}\r\n className={cn(\"aviala-modal-overlay\", className)}\r\n {...props}\r\n />\r\n));\r\nModalOverlay.displayName = DialogPrimitive.Overlay.displayName;\r\n\r\nexport type ModalContentProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Content> &\r\n VariantProps<typeof modalContentVariants> & {\r\n /** Render without Portal — use inside nested overlays. */\r\n portalled?: boolean;\r\n /** Show the default overlay scrim. */\r\n showOverlay?: boolean;\r\n };\r\n\r\nexport const ModalContent = forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Content>,\r\n ModalContentProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n size = \"default\",\r\n portalled = true,\r\n showOverlay = true,\r\n onOpenAutoFocus,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const content = (\r\n <>\r\n {showOverlay ? <ModalOverlay /> : null}\r\n <DialogPrimitive.Content\r\n ref={ref}\r\n className={cn(modalContentVariants({ size }), className)}\r\n onOpenAutoFocus={onOpenAutoFocus}\r\n {...props}\r\n >\r\n <div className=\"aviala-modal-content__surface\">{children}</div>\r\n </DialogPrimitive.Content>\r\n </>\r\n );\r\n\r\n if (!portalled) return content;\r\n\r\n return <DialogPrimitive.Portal>{content}</DialogPrimitive.Portal>;\r\n }\r\n);\r\nModalContent.displayName = DialogPrimitive.Content.displayName;\r\n\r\nexport type ModalHeaderProps = HTMLAttributes<HTMLDivElement> & {\r\n /** Optional leading status icon */\r\n icon?: ReactNode;\r\n /** Show the leading icon slot */\r\n showIcon?: boolean;\r\n /** Show the header close control */\r\n showClose?: boolean;\r\n closeLabel?: string;\r\n};\r\n\r\nexport const ModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\r\n (\r\n {\r\n className,\r\n children,\r\n icon,\r\n showIcon = false,\r\n showClose = true,\r\n closeLabel = \"Close dialog\",\r\n ...props\r\n },\r\n ref\r\n ) => (\r\n <div ref={ref} className={cn(\"aviala-modal__header\", className)} {...props}>\r\n <div className=\"aviala-modal__header-row\">\r\n {showIcon ? renderModalIcon(icon) : null}\r\n <div className=\"aviala-modal__header-main\">{children}</div>\r\n {showClose ? (\r\n <DialogPrimitive.Close asChild>\r\n <Link\r\n level=\"text\"\r\n mode=\"noBackgroundCustom\"\r\n iconOnly\r\n aria-label={closeLabel}\r\n className=\"aviala-modal__close\"\r\n leftIcon={<SymbolWrong aria-hidden />}\r\n />\r\n </DialogPrimitive.Close>\r\n ) : null}\r\n </div>\r\n </div>\r\n )\r\n);\r\nModalHeader.displayName = \"ModalHeader\";\r\n\r\nexport type ModalTitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\r\n\r\nexport const ModalTitle = forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Title>,\r\n ModalTitleProps\r\n>(({ className, children, ...props }, ref) => (\r\n <DialogPrimitive.Title ref={ref} asChild {...props}>\r\n <Typography level=\"text\" className={cn(\"aviala-modal__title\", className)}>\r\n {children}\r\n </Typography>\r\n </DialogPrimitive.Title>\r\n));\r\nModalTitle.displayName = DialogPrimitive.Title.displayName;\r\n\r\nexport type ModalDescriptionProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\r\n\r\nexport const ModalDescription = forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Description>,\r\n ModalDescriptionProps\r\n>(({ className, children, ...props }, ref) => (\r\n <DialogPrimitive.Description ref={ref} asChild {...props}>\r\n <Typography level=\"caption\" className={cn(\"aviala-modal__description\", className)}>\r\n {children}\r\n </Typography>\r\n </DialogPrimitive.Description>\r\n));\r\nModalDescription.displayName = DialogPrimitive.Description.displayName;\r\n\r\n/** Convenience wrapper — Figma header Typeface (text + caption). */\r\nexport type ModalHeaderTextProps = Omit<ModalHeaderProps, \"children\"> & {\r\n title: ReactNode;\r\n description?: ReactNode;\r\n};\r\n\r\nexport function ModalHeaderText({\r\n title,\r\n description,\r\n ...props\r\n}: ModalHeaderTextProps) {\r\n return (\r\n <ModalHeader {...props}>\r\n <div className=\"aviala-modal__header-typeface\">\r\n <ModalTitle>{title}</ModalTitle>\r\n {description ? <ModalDescription>{description}</ModalDescription> : null}\r\n </div>\r\n </ModalHeader>\r\n );\r\n}\r\n\r\nexport type ModalBodyProps = HTMLAttributes<HTMLDivElement> & {\r\n /** Figma `Content=Text` — title + body copy preset */\r\n layout?: \"default\" | \"text\";\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n};\r\n\r\nexport const ModalBody = forwardRef<HTMLDivElement, ModalBodyProps>(\r\n ({ className, children, layout = \"default\", title, description, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"aviala-modal__body\", className)} {...props}>\r\n {layout === \"text\" ? (\r\n <Typeface\r\n className=\"aviala-modal__body-typeface\"\r\n content=\"textTitle\"\r\n primary={title}\r\n secondary={description ?? children}\r\n />\r\n ) : (\r\n children\r\n )}\r\n </div>\r\n )\r\n);\r\nModalBody.displayName = \"ModalBody\";\r\n\r\nexport type ModalFooterProps = HTMLAttributes<HTMLDivElement>;\r\n\r\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\r\n ({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"aviala-modal__footer\", className)} {...props} />\r\n )\r\n);\r\nModalFooter.displayName = \"ModalFooter\";\r\n\r\nexport { modalContentVariants };\r\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\r\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\r\nimport { typographyVariants } from \"./typography\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { OverlayPointerSvg, TOOLTIP_POINTER } from \"./overlay-pointer\";\r\n\r\n/** Default show delay — 300ms per ALD / Radix convention. */\r\nexport const TOOLTIP_DELAY_DURATION = 300;\r\n\r\nexport type TooltipProviderProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>;\r\n\r\nexport function TooltipProvider({\r\n delayDuration = TOOLTIP_DELAY_DURATION,\r\n skipDelayDuration = 0,\r\n ...props\r\n}: TooltipProviderProps) {\r\n return (\r\n <TooltipPrimitive.Provider\r\n delayDuration={delayDuration}\r\n skipDelayDuration={skipDelayDuration}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport const Tooltip = TooltipPrimitive.Root;\r\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\r\n\r\nexport type TooltipContentProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\r\n /** Show a caret arrow pointing at the trigger (default true). */\r\n showArrow?: boolean;\r\n};\r\n\r\nexport const TooltipContent = forwardRef<\r\n React.ElementRef<typeof TooltipPrimitive.Content>,\r\n TooltipContentProps\r\n>(\r\n (\r\n {\r\n className,\r\n children,\r\n sideOffset = 4,\r\n collisionPadding = 8,\r\n showArrow = true,\r\n ...props\r\n },\r\n ref\r\n ) => (\r\n <TooltipPrimitive.Portal>\r\n <TooltipPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n collisionPadding={collisionPadding}\r\n className={cn(\"aviala-tooltip-content\", className)}\r\n {...props}\r\n >\r\n <div className={cn(\"aviala-tooltip-content__surface\", typographyVariants({ level: \"caption\" }))}>\r\n {children}\r\n </div>\r\n {showArrow ? (\r\n <TooltipPrimitive.Arrow\r\n asChild\r\n width={TOOLTIP_POINTER.width}\r\n height={TOOLTIP_POINTER.height}\r\n >\r\n <OverlayPointerSvg\r\n className=\"aviala-tooltip-content__arrow\"\r\n width={TOOLTIP_POINTER.width}\r\n height={TOOLTIP_POINTER.height}\r\n path={TOOLTIP_POINTER.path}\r\n />\r\n </TooltipPrimitive.Arrow>\r\n ) : null}\r\n </TooltipPrimitive.Content>\r\n </TooltipPrimitive.Portal>\r\n )\r\n);\r\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\r\n","import { cva, type VariantProps } from \"class-variance-authority\";\r\nimport {\r\n GeneralNotification,\r\n SymbolInformationCircle,\r\n SymbolRightCircle,\r\n SymbolWarningCircle,\r\n SymbolWrong,\r\n SymbolWrongCircle,\r\n} from \"@aviala-design/icons\";\r\nimport {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n type HTMLAttributes,\r\n type MouseEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { Link } from \"./link\";\r\nimport { Typeface } from \"./typeface\";\r\nimport { Typography } from \"./typography\";\r\n\r\n/** Figma Components → Response And Feedback → Feedback (553:58620) */\r\nexport type FeedbackType = \"information\" | \"warning\" | \"wrong\" | \"success\" | \"normal\";\r\nexport type FeedbackSize = \"default\" | \"small\";\r\nexport type FeedbackMode = \"default\" | \"primary\";\r\n\r\nconst FEEDBACK_ICON_SIZE = 22;\r\n\r\nconst feedbackVariants = cva(\"aviala-feedback\", {\r\n variants: {\r\n type: {\r\n information: \"aviala-feedback--type-information\",\r\n warning: \"aviala-feedback--type-warning\",\r\n wrong: \"aviala-feedback--type-wrong\",\r\n success: \"aviala-feedback--type-success\",\r\n normal: \"aviala-feedback--type-normal\",\r\n },\r\n size: {\r\n default: \"aviala-feedback--size-default\",\r\n small: \"aviala-feedback--size-small\",\r\n },\r\n mode: {\r\n default: \"aviala-feedback--mode-default\",\r\n primary: \"aviala-feedback--mode-primary\",\r\n },\r\n },\r\n defaultVariants: {\r\n type: \"information\",\r\n size: \"default\",\r\n mode: \"default\",\r\n },\r\n});\r\n\r\nfunction renderFeedbackIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const content =\r\n isValidElement(node) && typeof node.type !== \"string\"\r\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\r\n width: FEEDBACK_ICON_SIZE,\r\n height: FEEDBACK_ICON_SIZE,\r\n className: cn(\r\n (node as ReactElement<{ className?: string }>).props.className,\r\n \"shrink-0\"\r\n ),\r\n })\r\n : node;\r\n\r\n return (\r\n <span className=\"aviala-feedback__icon\" aria-hidden>\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction defaultStatusIcon(type: FeedbackType, mode: FeedbackMode): ReactNode {\r\n const iconMode = mode === \"primary\" ? \"fill\" : \"fill\";\r\n const thickness = \"Regular\";\r\n\r\n switch (type) {\r\n case \"information\":\r\n return (\r\n <SymbolInformationCircle thickness={thickness} mode={iconMode} aria-hidden />\r\n );\r\n case \"warning\":\r\n return <SymbolWarningCircle thickness={thickness} mode={iconMode} aria-hidden />;\r\n case \"wrong\":\r\n return <SymbolWrongCircle thickness={thickness} mode={iconMode} aria-hidden />;\r\n case \"success\":\r\n return <SymbolRightCircle thickness={thickness} mode={iconMode} aria-hidden />;\r\n case \"normal\":\r\n return <GeneralNotification thickness={thickness} mode=\"default\" aria-hidden />;\r\n }\r\n}\r\n\r\nexport type FeedbackProps = HTMLAttributes<HTMLDivElement> &\r\n VariantProps<typeof feedbackVariants> & {\r\n /** Primary line — bold on default size */\r\n title: ReactNode;\r\n /** Secondary caption line — default size only */\r\n description?: ReactNode;\r\n /** Status icon override */\r\n icon?: ReactNode;\r\n /** Figma `Show Close Button` */\r\n showClose?: boolean;\r\n onClose?: (event: MouseEvent<HTMLAnchorElement>) => void;\r\n closeLabel?: string;\r\n /** Figma `Show Quick Action` — inline link in body row */\r\n action?: ReactNode;\r\n onAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\r\n };\r\n\r\nexport const Feedback = forwardRef<HTMLDivElement, FeedbackProps>(\r\n (\r\n {\r\n className,\r\n type = \"information\",\r\n size = \"default\",\r\n mode: modeProp = \"default\",\r\n title,\r\n description,\r\n icon,\r\n showClose = true,\r\n onClose,\r\n closeLabel = \"Dismiss\",\r\n action,\r\n onAction,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const resolvedType = type ?? \"information\";\r\n const resolvedSize = size ?? \"default\";\r\n const mode = resolvedType === \"normal\" ? \"default\" : (modeProp ?? \"default\");\r\n const tone = mode === \"primary\" ? \"white\" : \"default\";\r\n const isSmall = resolvedSize === \"small\";\r\n const resolvedRole = resolvedType === \"wrong\" ? \"alert\" : \"status\";\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role={resolvedRole}\r\n aria-live={resolvedType === \"wrong\" ? \"assertive\" : \"polite\"}\r\n className={cn(\r\n feedbackVariants({ type: resolvedType, size: resolvedSize, mode }),\r\n className\r\n )}\r\n data-type={resolvedType}\r\n data-size={resolvedSize}\r\n data-mode={mode}\r\n {...props}\r\n >\r\n <div className=\"aviala-feedback__body\">\r\n {renderFeedbackIcon(icon ?? defaultStatusIcon(resolvedType, mode))}\r\n\r\n {isSmall ? (\r\n <Typography level=\"text\" tone={tone} className=\"aviala-feedback__title\">\r\n {title}\r\n </Typography>\r\n ) : (\r\n <Typeface\r\n className=\"aviala-feedback__typeface\"\r\n content=\"textCaption\"\r\n primary={title}\r\n secondary={description}\r\n tone={tone}\r\n />\r\n )}\r\n\r\n {action ? (\r\n <Link\r\n level=\"text\"\r\n mode=\"noBackground\"\r\n href={onAction ? \"#\" : undefined}\r\n className=\"aviala-feedback__action\"\r\n onClick={(event) => {\r\n if (onAction) {\r\n event.preventDefault();\r\n onAction(event);\r\n }\r\n }}\r\n >\r\n {action}\r\n </Link>\r\n ) : null}\r\n\r\n {showClose ? (\r\n <Link\r\n level=\"text\"\r\n mode=\"noBackgroundCustom\"\r\n iconOnly\r\n href={onClose ? \"#\" : undefined}\r\n aria-label={closeLabel}\r\n className=\"aviala-feedback__close\"\r\n leftIcon={<SymbolWrong aria-hidden />}\r\n onClick={(event) => {\r\n if (onClose) {\r\n event.preventDefault();\r\n onClose(event);\r\n }\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nFeedback.displayName = \"Feedback\";\r\n","import {\r\n SymbolInformationCircle,\r\n SymbolRightCircle,\r\n SymbolWarningCircle,\r\n SymbolWrong,\r\n SymbolWrongCircle,\r\n} from \"@aviala-design/icons\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n type HTMLAttributes,\r\n type MouseEvent,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { cn } from \"../lib/utils\";\r\nimport { Link } from \"./link\";\r\nimport { Typeface } from \"./typeface\";\r\nimport { Typography } from \"./typography\";\r\n\r\n/** Figma Components → Response And Feedback → Alert (527:56855) */\r\nexport type AlertType = \"info\" | \"warning\" | \"error\" | \"success\" | \"neutral\";\r\nexport type AlertSize = \"default\" | \"small\";\r\n/** Figma `Style` — bordered light surface vs filled secondary surface */\r\nexport type AlertAppearance = \"default\" | \"light\";\r\n\r\nconst ALERT_ICON_SIZE = 16;\r\n\r\nconst alertVariants = cva(\"aviala-alert\", {\r\n variants: {\r\n type: {\r\n info: \"aviala-alert--type-info\",\r\n warning: \"aviala-alert--type-warning\",\r\n error: \"aviala-alert--type-error\",\r\n success: \"aviala-alert--type-success\",\r\n neutral: \"aviala-alert--type-neutral\",\r\n },\r\n size: {\r\n default: \"aviala-alert--size-default\",\r\n small: \"aviala-alert--size-small\",\r\n },\r\n appearance: {\r\n default: \"aviala-alert--appearance-default\",\r\n light: \"aviala-alert--appearance-light\",\r\n },\r\n },\r\n defaultVariants: {\r\n type: \"info\",\r\n size: \"default\",\r\n appearance: \"default\",\r\n },\r\n});\r\n\r\nfunction renderAlertIcon(node: ReactNode): ReactNode {\r\n if (!node) return null;\r\n const content =\r\n isValidElement(node) && typeof node.type !== \"string\"\r\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\r\n width: ALERT_ICON_SIZE,\r\n height: ALERT_ICON_SIZE,\r\n className: cn(\r\n (node as ReactElement<{ className?: string }>).props.className,\r\n \"shrink-0\"\r\n ),\r\n })\r\n : node;\r\n\r\n return (\r\n <span className=\"aviala-alert__icon\" aria-hidden>\r\n {content}\r\n </span>\r\n );\r\n}\r\n\r\nfunction defaultStatusIcon(type: AlertType): ReactNode {\r\n const iconProps = { thickness: \"Regular\" as const, mode: \"fill\" as const, \"aria-hidden\": true };\r\n\r\n switch (type) {\r\n case \"info\":\r\n case \"neutral\":\r\n return <SymbolInformationCircle {...iconProps} />;\r\n case \"warning\":\r\n return <SymbolWarningCircle {...iconProps} />;\r\n case \"error\":\r\n return <SymbolWrongCircle {...iconProps} />;\r\n case \"success\":\r\n return <SymbolRightCircle {...iconProps} />;\r\n }\r\n}\r\n\r\nexport type AlertProps = HTMLAttributes<HTMLDivElement> &\r\n VariantProps<typeof alertVariants> & {\r\n /** Primary line — bold on default size */\r\n title: ReactNode;\r\n /** Secondary caption line — default size only */\r\n description?: ReactNode;\r\n /** Status icon override */\r\n icon?: ReactNode;\r\n /** Show the leading status icon */\r\n showIcon?: boolean;\r\n /** Figma `Show Close Button` */\r\n dismissible?: boolean;\r\n onDismiss?: (event: MouseEvent<HTMLAnchorElement>) => void;\r\n closeLabel?: string;\r\n /** Figma `Show Quick Action` — inline link in body row */\r\n quickAction?: ReactNode;\r\n onQuickAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\r\n /** Figma footer primary action */\r\n action?: ReactNode;\r\n onAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\r\n /** Figma footer secondary action */\r\n secondaryAction?: ReactNode;\r\n onSecondaryAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\r\n /** Figma `Show Action` — footer action row */\r\n showActions?: boolean;\r\n };\r\n\r\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\r\n (\r\n {\r\n className,\r\n type = \"info\",\r\n size = \"default\",\r\n appearance = \"default\",\r\n title,\r\n description,\r\n icon,\r\n showIcon = true,\r\n dismissible = true,\r\n onDismiss,\r\n closeLabel = \"Dismiss alert\",\r\n quickAction,\r\n onQuickAction,\r\n action,\r\n onAction,\r\n secondaryAction,\r\n onSecondaryAction,\r\n showActions = false,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const isSmall = size === \"small\";\r\n const resolvedType = type ?? \"info\";\r\n const resolvedRole = resolvedType === \"error\" ? \"alert\" : \"status\";\r\n const hasActions = showActions && (action || secondaryAction);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role={resolvedRole}\r\n aria-live={resolvedType === \"error\" ? \"assertive\" : \"polite\"}\r\n className={cn(alertVariants({ type, size, appearance }), className)}\r\n data-type={resolvedType}\r\n data-size={size}\r\n data-appearance={appearance}\r\n {...props}\r\n >\r\n <div className=\"aviala-alert__body\">\r\n {showIcon ? renderAlertIcon(icon ?? defaultStatusIcon(resolvedType)) : null}\r\n\r\n {isSmall ? (\r\n <Typography level=\"text\" className=\"aviala-alert__title\">\r\n {title}\r\n </Typography>\r\n ) : (\r\n <Typeface\r\n className=\"aviala-alert__typeface\"\r\n content=\"textCaption\"\r\n primary={title}\r\n secondary={description}\r\n />\r\n )}\r\n\r\n {quickAction ? (\r\n <Link\r\n level=\"text\"\r\n mode=\"noBackground\"\r\n href={onQuickAction ? \"#\" : undefined}\r\n className=\"aviala-alert__quick-action\"\r\n onClick={(event) => {\r\n if (onQuickAction) {\r\n event.preventDefault();\r\n onQuickAction(event);\r\n }\r\n }}\r\n >\r\n {quickAction}\r\n </Link>\r\n ) : null}\r\n\r\n {dismissible ? (\r\n <Link\r\n level=\"text\"\r\n mode=\"noBackgroundCustom\"\r\n iconOnly\r\n href={onDismiss ? \"#\" : undefined}\r\n aria-label={closeLabel}\r\n className=\"aviala-alert__close\"\r\n leftIcon={<SymbolWrong aria-hidden />}\r\n onClick={(event) => {\r\n if (onDismiss) {\r\n event.preventDefault();\r\n onDismiss(event);\r\n }\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n\r\n {hasActions ? (\r\n <div className=\"aviala-alert__actions\">\r\n {action ? (\r\n <Link\r\n level=\"caption\"\r\n mode=\"noBackground\"\r\n href={onAction ? \"#\" : undefined}\r\n className=\"aviala-alert__action\"\r\n onClick={(event) => {\r\n if (onAction) {\r\n event.preventDefault();\r\n onAction(event);\r\n }\r\n }}\r\n >\r\n {action}\r\n </Link>\r\n ) : null}\r\n {secondaryAction ? (\r\n <Link\r\n level=\"caption\"\r\n mode=\"noBackgroundCustom\"\r\n href={onSecondaryAction ? \"#\" : undefined}\r\n className=\"aviala-alert__action aviala-alert__action--secondary\"\r\n onClick={(event) => {\r\n if (onSecondaryAction) {\r\n event.preventDefault();\r\n onSecondaryAction(event);\r\n }\r\n }}\r\n >\r\n {secondaryAction}\r\n </Link>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\nAlert.displayName = \"Alert\";\r\n\r\nexport { alertVariants };\r\n","import {\r\n DirectionArrowRightLight,\r\n GeneralSetting,\r\n} from \"@aviala-design/icons\";\r\nimport {\r\n cloneElement,\r\n forwardRef,\r\n isValidElement,\r\n type ComponentPropsWithoutRef,\r\n type HTMLAttributes,\r\n type ReactElement,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { Button } from \"./button\";\r\nimport { Switch, type SwitchProps } from \"./switch\";\r\nimport { Typeface } from \"./typeface\";\r\nimport { typographyVariants } from \"./typography\";\r\nimport { cn } from \"../lib/utils\";\r\n\r\n/** Figma List item `Type` variant (738:148304, 647:87555) */\r\nexport type ListItemType = \"action\" | \"switch\" | \"select\";\r\n\r\n/** Figma List item `left icon setting` variant */\r\nexport type ListItemLeading = \"shaped\" | \"default\" | \"none\";\r\n\r\nexport type ListProps = HTMLAttributes<HTMLDivElement> & {\r\n /** Optional section title above the list card */\r\n title?: ReactNode;\r\n};\r\n\r\n/** Figma Structure Navigation → List root */\r\nexport const List = forwardRef<HTMLDivElement, ListProps>(\r\n ({ className, title, children, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"aviala-list\", className)} role=\"list\" {...props}>\r\n {title != null ? <ListTitle>{title}</ListTitle> : null}\r\n <ListGroup>{children}</ListGroup>\r\n </div>\r\n )\r\n);\r\nList.displayName = \"List\";\r\n\r\nexport type ListTitleProps = HTMLAttributes<HTMLDivElement>;\r\n\r\n/** Figma List title row — Typography text level */\r\nexport const ListTitle = forwardRef<HTMLDivElement, ListTitleProps>(\r\n ({ className, children, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"aviala-list-title\", className)} {...props}>\r\n <span className={cn(typographyVariants({ level: \"text\" }))}>{children}</span>\r\n </div>\r\n )\r\n);\r\nListTitle.displayName = \"ListTitle\";\r\n\r\nexport type ListGroupProps = HTMLAttributes<HTMLDivElement>;\r\n\r\n/** Figma List card container — rounded white surface for items */\r\nexport const ListGroup = forwardRef<HTMLDivElement, ListGroupProps>(\r\n ({ className, children, ...props }, ref) => (\r\n <div ref={ref} className={cn(\"aviala-list-group\", className)} {...props}>\r\n {children}\r\n </div>\r\n )\r\n);\r\nListGroup.displayName = \"ListGroup\";\r\n\r\nexport type ListItemGroupProps = {\r\n label?: ReactNode;\r\n children: ReactNode;\r\n className?: string;\r\n};\r\n\r\n/** Convenience wrapper — titled list section (Figma List title + card) */\r\nexport function ListItemGroup({ label, children, className }: ListItemGroupProps) {\r\n return (\r\n <div className={cn(\"aviala-list\", className)}>\r\n {label != null ? <ListTitle>{label}</ListTitle> : null}\r\n <ListGroup>{children}</ListGroup>\r\n </div>\r\n );\r\n}\r\n\r\nexport type ListDividerProps = HTMLAttributes<HTMLSpanElement>;\r\n\r\n/** Vertical divider between trailing actions (Figma `last` separator) */\r\nexport const ListDivider = forwardRef<HTMLSpanElement, ListDividerProps>(\r\n ({ className, ...props }, ref) => (\r\n <span\r\n ref={ref}\r\n className={cn(\"aviala-list-item__divider\", className)}\r\n aria-hidden\r\n {...props}\r\n />\r\n )\r\n);\r\nListDivider.displayName = \"ListDivider\";\r\n\r\nexport type ListSeparatorProps = HTMLAttributes<HTMLHRElement>;\r\n\r\n/** Horizontal separator between list groups */\r\nexport const ListSeparator = forwardRef<HTMLHRElement, ListSeparatorProps>(\r\n ({ className, ...props }, ref) => (\r\n <hr ref={ref} className={cn(\"aviala-list-separator\", className)} {...props} />\r\n )\r\n);\r\nListSeparator.displayName = \"ListSeparator\";\r\n\r\nfunction renderLeadingIcon(node: ReactNode, leading: ListItemLeading): ReactNode {\r\n if (leading === \"none\") return null;\r\n\r\n const iconSize = leading === \"shaped\" ? 20 : 22;\r\n const content =\r\n node ??\r\n (leading === \"shaped\" ? (\r\n <GeneralSetting aria-hidden />\r\n ) : (\r\n <GeneralSetting aria-hidden />\r\n ));\r\n\r\n const rendered =\r\n isValidElement(content) && typeof content.type !== \"string\"\r\n ? cloneElement(content as ReactElement<{ width?: number; height?: number; className?: string }>, {\r\n width: iconSize,\r\n height: iconSize,\r\n className: cn(\r\n (content as ReactElement<{ className?: string }>).props.className,\r\n \"shrink-0\"\r\n ),\r\n })\r\n : content;\r\n\r\n return (\r\n <span className=\"aviala-list-item__icon\">\r\n <span\r\n className={cn(\r\n leading === \"shaped\"\r\n ? \"aviala-list-item__icon--shaped\"\r\n : \"aviala-list-item__icon--default\"\r\n )}\r\n >\r\n {rendered}\r\n </span>\r\n </span>\r\n );\r\n}\r\n\r\nexport type ListItemProps = ComponentPropsWithoutRef<\"div\"> & {\r\n /** Figma `Type` variant */\r\n itemType?: ListItemType;\r\n /** Figma `left icon setting` variant */\r\n leading?: ListItemLeading;\r\n /** Leading icon node — defaults to GeneralSetting */\r\n icon?: ReactNode;\r\n /** Primary line (Typeface text) */\r\n title: ReactNode;\r\n /** Secondary line (Typeface caption) */\r\n subtitle?: ReactNode;\r\n /** Primary trailing button label */\r\n actionLabel?: ReactNode;\r\n /** Override primary trailing button */\r\n action?: ReactNode;\r\n /** Secondary icon-only button for `action` type */\r\n secondaryAction?: ReactNode;\r\n /** Trailing select slot for `select` type */\r\n select?: ReactNode;\r\n /** Trailing switch props for `switch` type */\r\n switchProps?: Omit<SwitchProps, \"size\">;\r\n /** Fully custom trailing region — overrides type presets */\r\n trailing?: ReactNode;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n /** Enables hover highlight (auto when `onClick` is set) */\r\n interactive?: boolean;\r\n};\r\n\r\n/** Figma Structure Navigation → List item */\r\nexport const ListItem = forwardRef<HTMLDivElement, ListItemProps>(\r\n (\r\n {\r\n className,\r\n itemType = \"select\",\r\n leading = \"shaped\",\r\n icon,\r\n title,\r\n subtitle,\r\n actionLabel = \"Text\",\r\n action,\r\n secondaryAction,\r\n select,\r\n switchProps,\r\n trailing,\r\n selected = false,\r\n disabled = false,\r\n interactive,\r\n onClick,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const isInteractive = interactive ?? onClick != null;\r\n\r\n const primaryAction =\r\n action ??\r\n (\r\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\r\n {actionLabel}\r\n </Button>\r\n );\r\n\r\n const renderTrailing = () => {\r\n if (trailing !== undefined) return trailing;\r\n\r\n switch (itemType) {\r\n case \"action\":\r\n return (\r\n <div className=\"aviala-list-item__more\">\r\n <div className=\"aviala-list-item__trailing\">\r\n {primaryAction}\r\n {secondaryAction ?? (\r\n <Button\r\n mode=\"default\"\r\n size=\"regular\"\r\n iconOnly\r\n aria-label=\"More\"\r\n leftIcon={<GeneralSetting aria-hidden />}\r\n />\r\n )}\r\n </div>\r\n <ListDivider />\r\n <span className=\"aviala-list-item__chevron\" aria-hidden>\r\n <DirectionArrowRightLight width={18} height={18} />\r\n </span>\r\n </div>\r\n );\r\n case \"switch\":\r\n return (\r\n <div className=\"aviala-list-item__trailing\">\r\n {primaryAction}\r\n <ListDivider />\r\n <Switch defaultChecked {...switchProps} />\r\n </div>\r\n );\r\n case \"select\":\r\n default:\r\n return (\r\n <div className=\"aviala-list-item__trailing\">\r\n {primaryAction}\r\n <ListDivider />\r\n <span className=\"aviala-list-item__select\">{select}</span>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"listitem\"\r\n className={cn(\"aviala-list-item\", className)}\r\n data-leading={leading}\r\n data-type={itemType}\r\n data-selected={selected ? \"true\" : undefined}\r\n data-disabled={disabled ? \"true\" : undefined}\r\n data-interactive={isInteractive ? \"true\" : undefined}\r\n onClick={disabled ? undefined : onClick}\r\n {...props}\r\n >\r\n {renderLeadingIcon(icon, leading)}\r\n <div className=\"aviala-list-item__body\">\r\n <div className=\"aviala-list-item__content\">\r\n <div className=\"aviala-list-item__head\">\r\n <Typeface content=\"textCaption\" primary={title} secondary={subtitle} />\r\n </div>\r\n {renderTrailing()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\nListItem.displayName = \"ListItem\";\r\n","import { Slot } from \"@radix-ui/react-slot\";\n\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n type AnchorHTMLAttributes,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\n\nimport { cn } from \"../lib/utils\";\n\nimport { useThemeLayoutKey } from \"../theme/theme-provider\";\n\nimport { buttonVariants, type ButtonMode } from \"./button\";\n\nimport { Typography } from \"./typography\";\n\nfunction navigationItemButtonMode(active: boolean): ButtonMode {\n return active ? \"second\" : \"noBackgroundCustom\";\n}\n\n/** Figma Navigation `Background` variant (624:61777) */\n\nexport type NavigationBackground = \"none\" | \"default\";\n\n/** Figma Navigation `direction` variant */\n\nexport type NavigationDirection = \"horizontal\" | \"vertical\";\n\nconst NavigationDirectionContext =\n createContext<NavigationDirection>(\"vertical\");\n\nfunction useNavigationDirection() {\n return useContext(NavigationDirectionContext);\n}\n\ntype IndicatorMetrics = {\n x: number;\n\n y: number;\n\n width: number;\n\n height: number;\n\n visible: boolean;\n};\n\nconst NAVIGATION_ANIMATION_MS_FALLBACK = 300;\n\nconst NAVIGATION_ANIMATION_EASING_FALLBACK = \"cubic-bezier(0.33, 1, 0.68, 1)\";\n\nfunction parseDurationMs(value: string): number {\n const trimmed = value.trim();\n\n if (!trimmed) return NAVIGATION_ANIMATION_MS_FALLBACK;\n\n if (trimmed.endsWith(\"ms\"))\n return parseFloat(trimmed) || NAVIGATION_ANIMATION_MS_FALLBACK;\n\n if (trimmed.endsWith(\"s\")) {\n return (parseFloat(trimmed) || 0.3) * 1000;\n }\n\n const parsed = parseFloat(trimmed);\n\n return Number.isFinite(parsed) ? parsed : NAVIGATION_ANIMATION_MS_FALLBACK;\n}\n\nfunction getNavigationAnimationTiming(el: HTMLElement) {\n const style = getComputedStyle(el);\n\n const durationMs = parseDurationMs(\n style.getPropertyValue(\"--navigation-transition-duration\")\n );\n\n const easing =\n style.getPropertyValue(\"--navigation-transition-easing\").trim() ||\n NAVIGATION_ANIMATION_EASING_FALLBACK;\n\n return { durationMs, easing };\n}\n\nfunction readIndicatorToken(el: HTMLElement, name: string, fallback: number) {\n const value = getComputedStyle(el).getPropertyValue(name).trim();\n\n const parsed = parseFloat(value);\n\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction findActiveNavigationItem(group: HTMLElement): HTMLElement | null {\n const activeItems = group.querySelectorAll<HTMLElement>(\n '.aviala-navigation-item[data-active=\"true\"]'\n );\n\n if (activeItems.length === 0) return null;\n\n for (const item of activeItems) {\n if (item.getAttribute(\"data-item-type\") === \"child\") {\n const collapsedGroup = item.closest(\n '.aviala-navigation-item-group[data-expanded=\"false\"]'\n );\n\n if (collapsedGroup) continue;\n\n return item;\n }\n }\n\n return activeItems[0] ?? null;\n}\n\nfunction measureNavigationIndicator(\n group: HTMLElement,\n\n direction: NavigationDirection\n): IndicatorMetrics | null {\n const item = findActiveNavigationItem(group);\n\n if (!item) {\n return { x: 0, y: 0, width: 0, height: 0, visible: false };\n }\n\n const groupRect = group.getBoundingClientRect();\n\n const itemRect = item.getBoundingClientRect();\n\n const railLeft = readIndicatorToken(group, \"--navigation-rail-left\", 1);\n\n const railInset = readIndicatorToken(group, \"--navigation-rail-inset\", 6);\n\n const railWidth = readIndicatorToken(group, \"--navigation-rail-width\", 3);\n\n const horizontalWidth = readIndicatorToken(\n group,\n\n \"--navigation-indicator-width-horizontal\",\n\n 50\n );\n\n if (direction === \"vertical\") {\n return {\n x: railLeft,\n\n y: itemRect.top - groupRect.top + railInset,\n\n width: railWidth,\n\n height: Math.max(0, itemRect.height - railInset * 2),\n\n visible: true,\n };\n }\n\n const itemCenterX = itemRect.left + itemRect.width / 2;\n\n return {\n x: itemCenterX - groupRect.left - horizontalWidth / 2,\n\n y: itemRect.bottom - groupRect.top - railWidth,\n\n width: horizontalWidth,\n\n height: railWidth,\n\n visible: true,\n };\n}\n\nfunction resetIndicatorMotion(el: HTMLSpanElement) {\n el.getAnimations().forEach((animation) => animation.cancel());\n}\n\nfunction applyIndicatorMetrics(\n el: HTMLSpanElement,\n\n metrics: IndicatorMetrics,\n\n instant = false\n) {\n resetIndicatorMotion(el);\n\n if (instant) {\n el.setAttribute(\"data-instant\", \"true\");\n }\n\n el.style.width = `${metrics.width}px`;\n\n el.style.height = `${metrics.height}px`;\n\n el.style.transform = `translate(${metrics.x}px, ${metrics.y}px)`;\n\n el.dataset.visible = metrics.visible ? \"true\" : \"false\";\n\n if (instant) {\n void el.offsetWidth;\n\n el.removeAttribute(\"data-instant\");\n }\n}\n\nfunction measureIndicatorFromElement(\n indicatorEl: HTMLElement,\n\n groupEl: HTMLElement\n): IndicatorMetrics {\n const groupRect = groupEl.getBoundingClientRect();\n\n const indicatorRect = indicatorEl.getBoundingClientRect();\n\n return {\n x: indicatorRect.left - groupRect.left,\n\n y: indicatorRect.top - groupRect.top,\n\n width: indicatorRect.width,\n\n height: indicatorRect.height,\n\n visible: indicatorEl.dataset.visible === \"true\",\n };\n}\n\nfunction metricsApproxEqual(\n a: IndicatorMetrics,\n b: IndicatorMetrics,\n epsilon = 0.5\n) {\n return (\n Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.width - b.width) < epsilon &&\n Math.abs(a.height - b.height) < epsilon &&\n a.visible === b.visible\n );\n}\n\nfunction runIndicatorAnimation(\n el: HTMLSpanElement,\n group: HTMLElement,\n start: IndicatorMetrics,\n next: IndicatorMetrics,\n durationMs: number,\n easing: string,\n generation: number,\n animationGenerationRef: RefObject<number>,\n animationRef: RefObject<Animation | null>,\n isAnimatingRef: RefObject<boolean>,\n syncIndicator: (metrics: IndicatorMetrics, instant?: boolean) => void\n) {\n animationRef.current?.cancel();\n animationRef.current = null;\n isAnimatingRef.current = false;\n\n if (metricsApproxEqual(start, next)) {\n syncIndicator(next, true);\n return;\n }\n\n isAnimatingRef.current = true;\n applyIndicatorMetrics(el, start, true);\n el.setAttribute(\"data-instant\", \"true\");\n\n const animation = el.animate(\n [\n {\n transform: `translate(${start.x}px, ${start.y}px)`,\n width: `${start.width}px`,\n height: `${start.height}px`,\n },\n {\n transform: `translate(${next.x}px, ${next.y}px)`,\n width: `${next.width}px`,\n height: `${next.height}px`,\n },\n ],\n {\n duration: durationMs,\n easing,\n fill: \"forwards\",\n }\n );\n\n animationRef.current = animation;\n\n const finish = () => {\n if (generation !== animationGenerationRef.current) return;\n\n animationRef.current = null;\n isAnimatingRef.current = false;\n el.removeAttribute(\"data-instant\");\n syncIndicator(next, true);\n };\n\n animation.addEventListener(\"finish\", finish, { once: true });\n\n return () => {\n animation.removeEventListener(\"finish\", finish);\n };\n}\n\nfunction useNavigationIndicator(\n groupRef: RefObject<HTMLDivElement | null>,\n\n direction: NavigationDirection,\n\n layoutKey: string | null\n) {\n const indicatorRef = useRef<HTMLSpanElement | null>(null);\n\n const metricsRef = useRef<IndicatorMetrics | null>(null);\n\n const animationRef = useRef<Animation | null>(null);\n\n const animationGenerationRef = useRef(0);\n\n const isAnimatingRef = useRef(false);\n\n const layoutTrackingFrameRef = useRef<number | null>(null);\n\n const isLayoutTrackingRef = useRef(false);\n\n const isInitialMount = useRef(true);\n const [activeRevision, setActiveRevision] = useState(0);\n\n const measureIndicator = useCallback((): IndicatorMetrics | null => {\n const group = groupRef.current;\n\n if (!group) return null;\n\n return measureNavigationIndicator(group, direction);\n }, [direction, groupRef]);\n\n const syncIndicator = useCallback(\n (metrics: IndicatorMetrics, instant = false) => {\n metricsRef.current = metrics;\n\n const el = indicatorRef.current;\n\n if (el) applyIndicatorMetrics(el, metrics, instant);\n },\n []\n );\n\n const cancelLayoutTracking = useCallback(() => {\n if (layoutTrackingFrameRef.current != null) {\n cancelAnimationFrame(layoutTrackingFrameRef.current);\n layoutTrackingFrameRef.current = null;\n }\n\n isLayoutTrackingRef.current = false;\n }, []);\n\n const remeasureIndicator = useCallback(() => {\n if (isLayoutTrackingRef.current) return;\n\n const metrics = measureIndicator();\n\n if (!metrics) return;\n\n animationRef.current?.cancel();\n\n animationRef.current = null;\n\n isAnimatingRef.current = false;\n\n syncIndicator(metrics, true);\n }, [measureIndicator, syncIndicator]);\n\n const startExpandCollapseTracking = useCallback(\n (expanded: boolean) => {\n const group = groupRef.current;\n const el = indicatorRef.current;\n\n if (!group || !el) return;\n\n cancelLayoutTracking();\n\n animationRef.current?.cancel();\n animationRef.current = null;\n isAnimatingRef.current = false;\n\n const prefersReducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (prefersReducedMotion) {\n const metrics = measureIndicator();\n if (metrics) syncIndicator(metrics, true);\n return;\n }\n\n const { durationMs, easing } = getNavigationAnimationTiming(group);\n const startMetrics = measureIndicatorFromElement(el, group);\n\n if (!expanded) {\n const next = measureIndicator();\n if (!next?.visible) {\n syncIndicator(next ?? startMetrics, true);\n return;\n }\n\n const generation = ++animationGenerationRef.current;\n isLayoutTrackingRef.current = true;\n\n runIndicatorAnimation(\n el,\n group,\n startMetrics,\n next,\n durationMs,\n easing,\n generation,\n animationGenerationRef,\n animationRef,\n isAnimatingRef,\n syncIndicator\n );\n\n window.setTimeout(() => {\n if (!isLayoutTrackingRef.current) return;\n isLayoutTrackingRef.current = false;\n const final = measureIndicator();\n if (final) syncIndicator(final, true);\n }, durationMs);\n\n return;\n }\n\n isLayoutTrackingRef.current = true;\n applyIndicatorMetrics(el, startMetrics, true);\n metricsRef.current = startMetrics;\n const deadline = performance.now() + durationMs;\n\n const tick = () => {\n if (!isLayoutTrackingRef.current) return;\n\n const metrics = measureIndicator();\n if (metrics) syncIndicator(metrics, true);\n\n if (performance.now() < deadline) {\n layoutTrackingFrameRef.current = requestAnimationFrame(tick);\n } else {\n layoutTrackingFrameRef.current = null;\n isLayoutTrackingRef.current = false;\n const final = measureIndicator();\n if (final) syncIndicator(final, true);\n }\n };\n\n layoutTrackingFrameRef.current = requestAnimationFrame(tick);\n },\n [cancelLayoutTracking, groupRef, measureIndicator, syncIndicator]\n );\n\n const onIndicatorRef = useCallback((node: HTMLSpanElement | null) => {\n indicatorRef.current = node;\n\n if (node && metricsRef.current && isInitialMount.current) {\n applyIndicatorMetrics(node, metricsRef.current, true);\n\n isInitialMount.current = false;\n }\n }, []);\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n\n const next = measureIndicator();\n\n if (!next) return;\n\n const el = indicatorRef.current;\n\n if (isInitialMount.current) {\n metricsRef.current = next;\n\n if (el) {\n applyIndicatorMetrics(el, next, true);\n\n isInitialMount.current = false;\n }\n\n return;\n }\n\n if (isLayoutTrackingRef.current) return;\n\n if (!el || !group) {\n syncIndicator(next, true);\n\n return;\n }\n\n const generation = ++animationGenerationRef.current;\n\n const hadActiveAnimation = animationRef.current != null;\n\n const start =\n hadActiveAnimation || isAnimatingRef.current\n ? measureIndicatorFromElement(el, group)\n : metricsRef.current ?? next;\n\n const prefersReducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (prefersReducedMotion) {\n syncIndicator(next, true);\n return;\n }\n\n const { durationMs, easing } = getNavigationAnimationTiming(el);\n\n return (\n runIndicatorAnimation(\n el,\n group,\n start,\n next,\n durationMs,\n easing,\n generation,\n animationGenerationRef,\n animationRef,\n isAnimatingRef,\n syncIndicator\n ) ?? undefined\n );\n }, [\n activeRevision,\n direction,\n layoutKey,\n measureIndicator,\n syncIndicator,\n groupRef,\n ]);\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n\n if (!group) return;\n\n const observer = new MutationObserver((mutations) => {\n let expandCollapseChange: boolean | null = null;\n\n for (const mutation of mutations) {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-expanded\" &&\n mutation.target instanceof HTMLElement\n ) {\n expandCollapseChange =\n mutation.target.getAttribute(\"data-expanded\") === \"true\";\n }\n }\n\n if (expandCollapseChange !== null) {\n startExpandCollapseTracking(expandCollapseChange);\n }\n\n setActiveRevision((revision) => revision + 1);\n });\n\n observer.observe(group, {\n subtree: true,\n\n attributes: true,\n\n attributeFilter: [\"data-active\", \"data-expanded\"],\n\n childList: true,\n });\n\n const resizeObserver = new ResizeObserver(() => {\n remeasureIndicator();\n });\n\n resizeObserver.observe(group);\n\n group\n .querySelectorAll<HTMLElement>(\n \".aviala-navigation-item-group__inner\"\n )\n .forEach((inner) => {\n resizeObserver.observe(inner);\n });\n\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.propertyName !== \"grid-template-rows\") return;\n if (!(event.target instanceof HTMLElement)) return;\n if (!event.target.classList.contains(\"aviala-navigation-item-group\")) {\n return;\n }\n\n cancelLayoutTracking();\n animationRef.current?.cancel();\n animationRef.current = null;\n isAnimatingRef.current = false;\n\n const metrics = measureIndicator();\n if (metrics) syncIndicator(metrics, true);\n };\n\n group.addEventListener(\"transitionend\", onTransitionEnd);\n\n return () => {\n observer.disconnect();\n resizeObserver.disconnect();\n group.removeEventListener(\"transitionend\", onTransitionEnd);\n cancelLayoutTracking();\n };\n }, [\n cancelLayoutTracking,\n groupRef,\n measureIndicator,\n remeasureIndicator,\n startExpandCollapseTracking,\n syncIndicator,\n ]);\n\n return onIndicatorRef;\n}\n\n/** Figma Structure Navigation → Navigation root (624:92194) */\n\nexport type NavigationProps = HTMLAttributes<HTMLElement> & {\n as?: \"nav\" | \"div\";\n\n background?: NavigationBackground;\n\n direction?: NavigationDirection;\n\n /** Figma `Dividing line` variant */\n\n dividingLine?: boolean;\n};\n\nexport const Navigation = forwardRef<HTMLElement, NavigationProps>(\n (\n {\n className,\n\n as: Tag = \"nav\",\n\n background = \"default\",\n\n direction = \"vertical\",\n\n dividingLine = false,\n\n ...props\n },\n\n ref\n ) => (\n <NavigationDirectionContext.Provider value={direction}>\n <Tag\n ref={ref as never}\n className={cn(\"aviala-navigation\", className)}\n data-background={background}\n data-direction={direction}\n data-dividing-line={dividingLine ? \"true\" : \"false\"}\n {...props}\n />\n </NavigationDirectionContext.Provider>\n )\n);\n\nNavigation.displayName = \"Navigation\";\n\nexport type NavigationBrandProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma Navigation Items `Content=Brand` (624:119379) */\n\nexport const NavigationBrand = forwardRef<HTMLDivElement, NavigationBrandProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"aviala-navigation-brand\", className)}\n {...props}\n />\n )\n);\n\nNavigationBrand.displayName = \"NavigationBrand\";\n\nexport type NavigationBrandTitleProps = Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n \"children\"\n> & {\n asChild?: boolean;\n\n children: ReactNode;\n};\n\nexport const NavigationBrandTitle = forwardRef<\n HTMLAnchorElement,\n NavigationBrandTitleProps\n>(({ className, asChild = false, children, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n ref={ref}\n className={cn(\"aviala-navigation-brand__title\", className)}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <Typography level=\"text\" as=\"span\">\n {children}\n </Typography>\n )}\n </Comp>\n );\n});\n\nNavigationBrandTitle.displayName = \"NavigationBrandTitle\";\n\nexport type NavigationSectionProps = HTMLAttributes<HTMLDivElement> & {\n children: ReactNode;\n};\n\n/** Section label — docs grouping above tab items */\n\nexport const NavigationSection = forwardRef<\n HTMLDivElement,\n NavigationSectionProps\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"aviala-navigation-section\", className)}\n {...props}\n >\n <Typography level=\"caption\" as=\"p\">\n {children}\n </Typography>\n </div>\n));\n\nNavigationSection.displayName = \"NavigationSection\";\n\nexport type NavigationGroupProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma Navigation Tab Items Group (1651:20222) */\n\nexport const NavigationGroup = forwardRef<HTMLDivElement, NavigationGroupProps>(\n ({ className, children, ...props }, ref) => {\n const direction = useNavigationDirection();\n\n const layoutKey = useThemeLayoutKey();\n\n const groupRef = useRef<HTMLDivElement>(null);\n\n const onIndicatorRef = useNavigationIndicator(\n groupRef,\n direction,\n layoutKey\n );\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n groupRef.current = node;\n\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n\n [ref]\n );\n\n return (\n <div\n ref={setRefs}\n className={cn(\"aviala-navigation-group\", className)}\n {...props}\n >\n <span\n ref={onIndicatorRef}\n className=\"aviala-navigation-indicator\"\n aria-hidden\n data-visible=\"false\"\n />\n\n {children}\n </div>\n );\n }\n);\n\nNavigationGroup.displayName = \"NavigationGroup\";\n\nexport type NavigationItemGroupProps = HTMLAttributes<HTMLDivElement> & {\n /** When set, animates expand/collapse. Omit for always-visible groups. */\n expanded?: boolean;\n};\n\n/** Figma Navigation Vertical Tab Child Items Group (643:127007) */\n\nexport const NavigationItemGroup = forwardRef<\n HTMLDivElement,\n NavigationItemGroupProps\n>(({ className, expanded, children, ...props }, ref) => {\n const isCollapsible = expanded !== undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-navigation-item-group\", className)}\n data-expanded={\n isCollapsible ? (expanded ? \"true\" : \"false\") : undefined\n }\n aria-hidden={isCollapsible && !expanded ? true : undefined}\n {...props}\n >\n {isCollapsible ? (\n <div className=\"aviala-navigation-item-group__inner\">{children}</div>\n ) : (\n children\n )}\n </div>\n );\n});\n\nNavigationItemGroup.displayName = \"NavigationItemGroup\";\n\n/** Figma Navigation Items `Type` variant */\n\nexport type NavigationItemType = \"default\" | \"child\";\n\nexport type NavigationItemProps = ComponentPropsWithoutRef<\"a\"> & {\n /** Figma `Starting=Active` — also inferred from `aria-current=\"page\"` */\n\n active?: boolean;\n\n itemType?: NavigationItemType;\n\n leftIcon?: ReactNode;\n\n rightIcon?: ReactNode;\n\n asChild?: boolean;\n\n children: ReactNode;\n};\n\nfunction renderItemIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n\n const content = cloneAvialaIconElement(node, {\n level: \"text\",\n biggerSize: true,\n });\n\n return <span className=\"aviala-navigation-item__icon\">{content}</span>;\n}\n\n/** Figma Navigation Items `Content=Tab Item` (624:119382, 624:119385, 643:118728) */\n\nexport const NavigationItem = forwardRef<\n HTMLAnchorElement,\n NavigationItemProps\n>(\n (\n {\n className,\n\n active,\n\n itemType = \"default\",\n\n leftIcon,\n\n rightIcon,\n\n asChild = false,\n\n children,\n\n \"aria-current\": ariaCurrent,\n\n ...props\n },\n\n ref\n ) => {\n const Comp = asChild ? Slot : \"a\";\n\n const isActive = active ?? ariaCurrent === \"page\";\n\n const mode = navigationItemButtonMode(isActive);\n\n const controlContent = (\n <>\n {renderItemIcon(leftIcon)}\n\n <Typography\n level=\"text\"\n as=\"span\"\n className=\"aviala-navigation-item__label\"\n >\n {children}\n </Typography>\n\n {rightIcon ? (\n <span className=\"aviala-navigation-item__chevron\">\n {renderItemIcon(rightIcon)}\n </span>\n ) : null}\n </>\n );\n\n return (\n <span\n className={cn(\"aviala-navigation-item\", className)}\n data-item-type={itemType}\n data-active={isActive ? \"true\" : \"false\"}\n >\n <Comp\n ref={ref}\n className={cn(\n buttonVariants({ mode }),\n \"aviala-navigation-item__control whitespace-normal\"\n )}\n data-size=\"regular\"\n aria-current={isActive ? \"page\" : undefined}\n {...props}\n >\n {asChild ? children : controlContent}\n </Comp>\n </span>\n );\n }\n);\n\nNavigationItem.displayName = \"NavigationItem\";\n\nexport type NavigationActionsProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma Navigation Items `Content=Aciton Group` (624:119388) */\n\nexport const NavigationActions = forwardRef<\n HTMLDivElement,\n NavigationActionsProps\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"aviala-navigation-actions\", className)}\n {...props}\n >\n {children}\n </div>\n));\n\nNavigationActions.displayName = \"NavigationActions\";\n\nexport type NavigationActionsSlotProps = HTMLAttributes<HTMLDivElement>;\n\nexport const NavigationActionsSlot = forwardRef<\n HTMLDivElement,\n NavigationActionsSlotProps\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"aviala-navigation-actions__slot\", className)}\n {...props}\n />\n));\n\nNavigationActionsSlot.displayName = \"NavigationActionsSlot\";\n"],"mappings":"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","names":["Anchor","Label","import_tokens","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","import_react_slot","import_class_variance_authority","import_react","import_icons","import_react","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","renderSlotIcon","import_icons","import_react","import_react_slot","import_react","import_jsx_runtime","renderIcon","import_jsx_runtime","renderSlotIcon","import_react","import_jsx_runtime","Label","import_icons","import_react","import_react","import_jsx_runtime","import_jsx_runtime","renderIcon","import_react","import_jsx_runtime","renderIcon","import_react","import_jsx_runtime","import_react_slot","import_react","import_jsx_runtime","Anchor","import_react","import_jsx_runtime","renderIcon","prefersReducedMotion","renderIcon","import_react","import_jsx_runtime","Label","import_react","import_jsx_runtime","import_react","import_jsx_runtime","PopoverPrimitive","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","PopoverPrimitive","import_icons","import_react","import_jsx_runtime","renderSlotIcon","renderItemIcon","renderBadgeSlot","renderFunctionSlot","renderSlotIcon","renderItemIcon","renderBadgeSlot","renderFunctionSlot","getOptionsAtPath","PopoverPrimitive","import_icons","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","renderSlotIcon","PopoverPrimitive","import_icons","import_react","import_react","import_jsx_runtime","import_jsx_runtime","renderSlotIcon","PopoverPrimitive","import_react","import_jsx_runtime","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_class_variance_authority","import_icons","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","defaultStatusIcon","import_icons","import_react","import_jsx_runtime","import_react_slot","import_react","import_jsx_runtime","metricsApproxEqual","prefersReducedMotion","renderItemIcon"]}