@aviala-design/spiral 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1113 -1010
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +132 -4
- package/dist/index.d.ts +132 -4
- package/dist/index.js +985 -880
- package/dist/index.js.map +1 -1
- package/dist/props.json +7 -1
- package/dist/styles.css +8 -1
- package/package.json +3 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +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/number-input.tsx","../src/components/textarea.tsx","../src/components/select.tsx","../src/components/link.tsx","../src/components/label.tsx","../src/components/avatar.tsx","../src/components/tag.tsx","../src/components/progress.tsx","../src/components/scroll.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-month-wheels.tsx","../src/components/date-picker/date-picker-time-wheel.tsx","../src/lib/sticky-wheel.ts","../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","../src/components/slider.tsx","../src/components/upload.tsx","../src/components/scroll-picker.tsx","../src/components/breadcrumb.tsx","../src/components/pagehead.tsx","../src/components/steps.tsx","../src/components/pagination.tsx","../src/components/card.tsx","../src/components/table.tsx"],"sourcesContent":["export { ThemeProvider, useTheme, useThemeLayoutKey, ThemeScript, type ThemeProviderProps } from \"./theme/theme-provider\";\nexport {\n DEFAULT_PALETTE_CONFIG,\n PALETTE_HUE_FAMILIES,\n type BaseNumbersDensity,\n type PaletteConfig,\n type HueFamily,\n} from \"@aviala-design/tokens\";\n\nexport { Button, buttonVariants, type ButtonProps, type ButtonMode, type ButtonSize } from \"./components/button\";\nexport { Input, inputRootVariants, type InputProps, type InputSize } from \"./components/input\";\nexport {\n NumberInput,\n numberInputRootVariants,\n type NumberInputProps,\n type NumberInputStyle,\n} from \"./components/number-input\";\nexport { Textarea, type TextareaProps, type TextareaSize } from \"./components/textarea\";\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectItemGroup,\n SelectItemPeople,\n SelectLabel,\n SelectSeparator,\n SelectSubItem,\n SelectSubItemPeople,\n SelectSubMenu,\n SelectTrigger,\n SelectValue,\n type SelectContentProps,\n type SelectItemFunction,\n type SelectItemGroupProps,\n type SelectItemLayout,\n type SelectItemPeopleProps,\n type SelectItemProps,\n type SelectLabelProps,\n type SelectSeparatorProps,\n type SelectSize,\n type SelectSubItemPeopleProps,\n type SelectSubItemProps,\n type SelectSubMenuProps,\n type SelectTriggerProps,\n} from \"./components/select\";\nexport { Label } from \"./components/label\";\nexport {\n Badge,\n type BadgeProps,\n type BadgeStyle,\n type BadgeLevel,\n type BadgeLineHeightFix,\n} from \"./components/badge\";\nexport {\n Avatar,\n type AvatarProps,\n type AvatarLevel,\n type AvatarContent,\n} from \"./components/avatar\";\nexport {\n Tag,\n TagClose,\n type TagProps,\n type TagCloseProps,\n type TagLevel,\n type TagContent,\n type TagLineHeightFix,\n} from \"./components/tag\";\nexport {\n Progress,\n type ProgressProps,\n type ProgressType,\n type ProgressSize,\n type ProgressShape,\n} from \"./components/progress\";\nexport {\n Scroll,\n type ScrollProps,\n type ScrollSize,\n type ScrollOrientation,\n} from \"./components/scroll\";\nexport {\n Loading,\n loadingLevelForButtonSize,\n type LoadingProps,\n type LoadingLevel,\n type LoadingMode,\n type LoadingButtonSize,\n} from \"./components/loading\";\nexport {\n Checkbox,\n CheckboxGroup,\n CheckboxInput,\n type CheckboxProps,\n type CheckboxGroupProps,\n type CheckboxInputProps,\n type CheckboxGroupDirection,\n} from \"./components/checkbox\";\nexport {\n RadioGroup,\n RadioGroupItem,\n RadioInput,\n type RadioGroupProps,\n type RadioGroupItemProps,\n type RadioInputProps,\n type RadioGroupDirection,\n type RadioInputVariant,\n} from \"./components/radio-group\";\nexport { Switch, type SwitchProps, type SwitchSize } from \"./components/switch\";\nexport { Link, type LinkProps, type LinkLevel, type LinkMode } from \"./components/link\";\nexport {\n Anchor,\n AnchorItem,\n type AnchorProps,\n type AnchorItemProps,\n type AnchorIndentLevel,\n} from \"./components/anchor\";\nexport {\n SegmentatorGroup,\n SegmentatorItem,\n type SegmentatorGroupProps,\n type SegmentatorItemProps,\n type SegmentatorMode,\n} from \"./components/segmentator\";\nexport { FormField, type FormFieldProps, type FormFieldDirection } from \"./components/form-field\";\nexport {\n Typography,\n typographyVariants,\n type TypographyProps,\n type TypographyLevel,\n type TypographyContent,\n type TypographyTone,\n} from \"./components/typography\";\nexport {\n Typeface,\n TypefacePair,\n type TypefaceProps,\n type TypefaceContent,\n type TypefacePairProps,\n} from \"./components/typeface\";\nexport { InputGroup, InputGroupAddon, type InputGroupProps } from \"./components/input-group\";\nexport {\n Stack,\n Fieldset,\n type StackProps,\n type FieldsetProps,\n} from \"./components/stack\";\nexport {\n ColorPicker,\n ColorPickerTrigger,\n ColorPickerContent,\n ColorPickerPanel,\n ColorPickButton,\n ColorPickerArea,\n ColorPickerSlider,\n ColorPickerInputs,\n ColorPickerPresets,\n DEFAULT_COLOR,\n useColorPickerState,\n type ColorPickerProps,\n type ColorPickerTriggerProps,\n type ColorPickerContentProps,\n type ColorPickerPanelProps,\n type ColorPickButtonProps,\n type ColorPickerAreaProps,\n type ColorPickerSliderProps,\n type ColorPickerInputsProps,\n type ColorPickerPresetsProps,\n type ColorFormat,\n type HSVA,\n type UseColorPickerStateOptions,\n} from \"./components/color-picker\";\nexport {\n Cascader,\n CascaderTrigger,\n CascaderContent,\n CascaderMenu,\n CascaderColumn,\n CascaderItemGroup,\n CascaderItem,\n CascaderOptionsMenu,\n CascaderField,\n type CascaderProps,\n type CascaderTriggerProps,\n type CascaderContentProps,\n type CascaderMenuProps,\n type CascaderColumnProps,\n type CascaderItemGroupProps,\n type CascaderItemProps,\n type CascaderOptionsMenuProps,\n type CascaderFieldProps,\n type CascaderOption,\n type CascaderSize,\n type CascaderItemFunction,\n type CascaderItemLayout,\n} from \"./components/cascader\";\nexport {\n DatePicker,\n DatePickerTrigger,\n DatePickerContent,\n DatePickerCalendar,\n DatePickerField,\n type DatePickerProps,\n type DatePickerSingleProps,\n type DatePickerRangeProps,\n type DatePickerTriggerProps,\n type DatePickerContentProps,\n type DatePickerCalendarProps,\n type DatePickerFieldProps,\n type DatePickerSize,\n type DatePickerMode,\n type DatePickerPanel,\n type DatePickerTimeValue,\n type DateRange,\n formatDisplayDate,\n formatMonthYear,\n formatTimeValue,\n parseDateInput,\n parseDateRangeInput,\n} from \"./components/date-picker\";\nexport {\n TimePicker,\n TimePickerTrigger,\n TimePickerContent,\n TimePickerPanel,\n TimePickerField,\n TimePickerWheels,\n type TimePickerProps,\n type TimePickerTriggerProps,\n type TimePickerContentProps,\n type TimePickerPanelProps,\n type TimePickerFieldProps,\n type TimePickerSize,\n type TimePickerValue,\n type TimePickerWheelsValue,\n} from \"./components/time-picker\";\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n type PopoverProps,\n type PopoverContentProps,\n} from \"./components/popover\";\nexport {\n Modal,\n ModalTrigger,\n ModalPortal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalHeaderText,\n ModalTitle,\n ModalDescription,\n ModalBody,\n ModalFooter,\n ModalClose,\n modalContentVariants,\n type ModalProps,\n type ModalSize,\n type ModalOverlayProps,\n type ModalContentProps,\n type ModalHeaderProps,\n type ModalHeaderTextProps,\n type ModalTitleProps,\n type ModalDescriptionProps,\n type ModalBodyProps,\n type ModalFooterProps,\n} from \"./components/modal\";\nexport {\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TOOLTIP_DELAY_DURATION,\n type TooltipProviderProps,\n type TooltipContentProps,\n} from \"./components/tooltip\";\nexport {\n Feedback,\n type FeedbackProps,\n type FeedbackType,\n type FeedbackSize,\n type FeedbackMode,\n} from \"./components/feedback\";\nexport {\n Alert,\n alertVariants,\n type AlertProps,\n type AlertType,\n type AlertSize,\n type AlertAppearance,\n} from \"./components/alert\";\nexport {\n List,\n ListTitle,\n ListGroup,\n ListItem,\n ListItemGroup,\n ListDivider,\n ListSeparator,\n type ListProps,\n type ListTitleProps,\n type ListGroupProps,\n type ListItemProps,\n type ListItemGroupProps,\n type ListDividerProps,\n type ListSeparatorProps,\n type ListItemType,\n type ListItemLeading,\n} from \"./components/list\";\nexport {\n Navigation,\n NavigationBrand,\n NavigationBrandTitle,\n NavigationSection,\n NavigationGroup,\n NavigationItemGroup,\n NavigationItem,\n NavigationItemMenu,\n NavigationItemMenuTrigger,\n NavigationItemMenuContent,\n NavigationItemMenuItem,\n NavigationActions,\n NavigationActionsSlot,\n type NavigationProps,\n type NavigationBackground,\n type NavigationDirection,\n type NavigationBrandProps,\n type NavigationBrandTitleProps,\n type NavigationSectionProps,\n type NavigationGroupProps,\n type NavigationItemGroupProps,\n type NavigationItemProps,\n type NavigationItemType,\n type NavigationItemMenuProps,\n type NavigationItemMenuTriggerProps,\n type NavigationItemMenuContentProps,\n type NavigationItemMenuItemProps,\n type NavigationActionsProps,\n type NavigationActionsSlotProps,\n} from \"./components/navigation\";\nexport { Slider, type SliderProps, type SliderSize, type SliderType } from \"./components/slider\";\nexport { Upload, type UploadProps, type UploadStyle } from \"./components/upload\";\nexport {\n ScrollPicker,\n ScrollPickerColumn,\n ScrollPickerItem,\n type ScrollPickerProps,\n type ScrollPickerColumnProps,\n type ScrollPickerItemProps,\n} from \"./components/scroll-picker\";\nexport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n BreadcrumbEllipsisItem,\n type BreadcrumbProps,\n type BreadcrumbItemProps,\n type BreadcrumbSeparatorProps,\n type BreadcrumbEllipsisProps,\n type BreadcrumbEllipsisItemProps,\n type BreadcrumbSize,\n} from \"./components/breadcrumb\";\nexport { Pagehead, type PageheadProps } from \"./components/pagehead\";\nexport {\n Steps,\n StepsItem,\n StepsIcon,\n type StepsProps,\n type StepsItemProps,\n type StepsIconProps,\n type StepsDirection,\n type StepsState,\n} from \"./components/steps\";\nexport { Pagination, type PaginationProps } from \"./components/pagination\";\nexport {\n Card,\n CardHead,\n CardBody,\n CardBottom,\n type CardProps,\n type CardHeadProps,\n type CardBodyProps,\n type CardBottomProps,\n type CardSlotType,\n} from \"./components/card\";\nexport {\n Table,\n TableRow,\n TableHead,\n TableCell,\n type TableProps,\n type TableRowProps,\n type TableHeadProps,\n type TableCellProps,\n type TableCellContent,\n} from \"./components/table\";\n\nexport { cn } from \"./lib/utils\";\nexport { initKeyboardFocus } from \"./lib/keyboard-focus\";\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n applyTheme,\n applyBaseNumbersDensity,\n DEFAULT_PALETTE_CONFIG,\n generateTheme,\n getPreset,\n presetList,\n removeTheme,\n type BaseNumbersDensity,\n type PaletteConfig,\n type ThemeMode,\n type ThemePreset,\n} from \"@aviala-design/tokens\";\nimport { initKeyboardFocus } from \"../lib/keyboard-focus\";\n\nexport type ThemeProviderProps = {\n children: ReactNode;\n defaultMode?: ThemeMode;\n defaultPrimary?: string;\n defaultPresetId?: string;\n defaultPaletteConfig?: PaletteConfig;\n defaultDensity?: BaseNumbersDensity;\n storageKey?: string;\n onThemeChange?: (vars: Record<string, string>) => void;\n};\n\ntype ThemeContextValue = {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n primaryColor: string;\n setPrimaryColor: (color: string) => void;\n presetId: string | undefined;\n applyPreset: (id: string) => void;\n presets: ThemePreset[];\n /** True when the active preset is a frozen ALD theme (palette engine bypassed). */\n isStaticTheme: boolean;\n density: BaseNumbersDensity;\n setDensity: (density: BaseNumbersDensity) => void;\n paletteConfig: PaletteConfig;\n setPaletteConfig: (config: Partial<PaletteConfig>) => void;\n resetPaletteConfig: () => void;\n themeVars: Record<string, string>;\n};\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport function ThemeProvider({\n children,\n defaultMode = \"light\",\n defaultPrimary,\n defaultPresetId = \"ald\",\n defaultPaletteConfig,\n defaultDensity = \"default\",\n storageKey = \"aviala-theme\",\n onThemeChange,\n}: ThemeProviderProps) {\n const [mode, setModeState] = useState<ThemeMode>(() => {\n if (typeof window === \"undefined\") return defaultMode;\n const stored = localStorage.getItem(`${storageKey}:mode`);\n return (stored as ThemeMode) || defaultMode;\n });\n\n const [primaryColor, setPrimaryColorState] = useState(() => {\n if (typeof window === \"undefined\") {\n return defaultPrimary ?? getPreset(defaultPresetId)?.primary ?? \"#FF5532\";\n }\n return (\n localStorage.getItem(`${storageKey}:primary`) ??\n defaultPrimary ??\n getPreset(defaultPresetId)?.primary ??\n \"#FF5532\"\n );\n });\n\n const [presetId, setPresetId] = useState<string | undefined>(() => {\n if (typeof window === \"undefined\") return defaultPresetId;\n return localStorage.getItem(`${storageKey}:preset`) ?? defaultPresetId;\n });\n\n const [paletteConfig, setPaletteConfigState] = useState<PaletteConfig>(() => {\n const base: PaletteConfig = { ...DEFAULT_PALETTE_CONFIG, ...defaultPaletteConfig };\n if (typeof window === \"undefined\") return base;\n const stored = localStorage.getItem(`${storageKey}:palette`);\n if (!stored) return base;\n try {\n return { ...base, ...(JSON.parse(stored) as PaletteConfig) };\n } catch {\n return base;\n }\n });\n\n const [density, setDensityState] = useState<BaseNumbersDensity>(() => {\n if (typeof window === \"undefined\") return defaultDensity;\n const stored = localStorage.getItem(`${storageKey}:density`);\n return stored === \"mobile-friendly\" ? \"mobile-friendly\" : defaultDensity;\n });\n\n const isStaticTheme = presetId ? getPreset(presetId)?.static === true : false;\n\n const themeVars = useMemo(\n () =>\n isStaticTheme\n ? {}\n : generateTheme({\n mode,\n primary: primaryColor,\n presetId,\n palette: paletteConfig,\n }),\n [isStaticTheme, mode, primaryColor, presetId, paletteConfig]\n );\n\n useLayoutEffect(() => {\n initKeyboardFocus();\n }, []);\n\n useLayoutEffect(() => {\n applyBaseNumbersDensity(document.documentElement, density);\n\n if (isStaticTheme) {\n // Clear any inline palette vars so the frozen [data-theme=\"ald\"] CSS wins.\n removeTheme();\n document.documentElement.setAttribute(\"data-theme\", presetId ?? \"ald\");\n document.documentElement.setAttribute(\"data-mode\", mode);\n onThemeChange?.(themeVars);\n return;\n }\n applyTheme(themeVars, { mode, themeId: presetId, density });\n onThemeChange?.(themeVars);\n }, [isStaticTheme, themeVars, mode, presetId, density, onThemeChange]);\n\n const setMode = useCallback(\n (next: ThemeMode) => {\n setModeState(next);\n localStorage.setItem(`${storageKey}:mode`, next);\n },\n [storageKey]\n );\n\n const setPrimaryColor = useCallback(\n (color: string) => {\n setPrimaryColorState(color);\n setPresetId(undefined);\n localStorage.setItem(`${storageKey}:primary`, color);\n localStorage.removeItem(`${storageKey}:preset`);\n },\n [storageKey]\n );\n\n const applyPreset = useCallback(\n (id: string) => {\n const preset = getPreset(id);\n if (!preset) return;\n setPresetId(id);\n setPrimaryColorState(preset.primary);\n localStorage.setItem(`${storageKey}:primary`, preset.primary);\n localStorage.setItem(`${storageKey}:preset`, id);\n },\n [storageKey]\n );\n\n const setPaletteConfig = useCallback(\n (config: Partial<PaletteConfig>) => {\n setPaletteConfigState((prev) => {\n const next = { ...prev, ...config };\n localStorage.setItem(`${storageKey}:palette`, JSON.stringify(next));\n return next;\n });\n },\n [storageKey]\n );\n\n const resetPaletteConfig = useCallback(() => {\n const base: PaletteConfig = { ...DEFAULT_PALETTE_CONFIG, ...defaultPaletteConfig };\n setPaletteConfigState(base);\n localStorage.removeItem(`${storageKey}:palette`);\n }, [storageKey, defaultPaletteConfig]);\n\n const setDensity = useCallback(\n (next: BaseNumbersDensity) => {\n setDensityState(next);\n if (next === \"mobile-friendly\") {\n localStorage.setItem(`${storageKey}:density`, next);\n } else {\n localStorage.removeItem(`${storageKey}:density`);\n }\n },\n [storageKey]\n );\n\n const value = useMemo(\n () => ({\n mode,\n setMode,\n primaryColor,\n setPrimaryColor,\n presetId,\n applyPreset,\n presets: presetList,\n isStaticTheme,\n density,\n setDensity,\n paletteConfig,\n setPaletteConfig,\n resetPaletteConfig,\n themeVars,\n }),\n [\n mode,\n setMode,\n primaryColor,\n setPrimaryColor,\n presetId,\n applyPreset,\n isStaticTheme,\n density,\n setDensity,\n paletteConfig,\n setPaletteConfig,\n resetPaletteConfig,\n themeVars,\n ]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme must be used within ThemeProvider\");\n }\n return ctx;\n}\n\n/** Layout key for remeasuring size-sensitive UI when theme density/mode changes. */\nexport function useThemeLayoutKey(): string | null {\n const ctx = useContext(ThemeContext);\n if (!ctx) return null;\n return `${ctx.density}:${ctx.mode}`;\n}\n\nexport function ThemeScript({\n storageKey = \"aviala-theme\",\n defaultMode = \"light\",\n defaultPrimary = \"#FF5532\",\n defaultDensity = \"default\",\n}: {\n storageKey?: string;\n defaultMode?: ThemeMode;\n defaultPrimary?: string;\n defaultDensity?: BaseNumbersDensity;\n}) {\n const script = `\n(function(){\n try {\n var mode = localStorage.getItem('${storageKey}:mode') || '${defaultMode}';\n var primary = localStorage.getItem('${storageKey}:primary') || '${defaultPrimary}';\n var density = localStorage.getItem('${storageKey}:density') || '${defaultDensity}';\n document.documentElement.setAttribute('data-mode', mode);\n if (density === 'mobile-friendly') {\n document.documentElement.setAttribute('data-density', 'mobile-friendly');\n }\n } catch(e) {}\n})();\n`;\n return <script dangerouslySetInnerHTML={{ __html: script }} />;\n}\n","const KBD_ATTR = \"data-aviala-kbd\";\n\nlet installed = false;\n\n/**\n * Gate `.aviala-focus-ring` to true keyboard modality.\n *\n * `:focus-visible` alone is not enough for menus: mouse-opening Select/Cascader\n * programmatically focuses an item, and browsers treat that as focus-visible.\n * We clear the gate on pointer/touch and set it on non-modifier keydown.\n */\nexport function initKeyboardFocus(): void {\n if (typeof window === \"undefined\" || installed) return;\n installed = true;\n\n const root = document.documentElement;\n\n const setKeyboard = (on: boolean) => {\n if (on) root.setAttribute(KBD_ATTR, \"\");\n else root.removeAttribute(KBD_ATTR);\n };\n\n window.addEventListener(\n \"keydown\",\n (event) => {\n if (event.metaKey || event.ctrlKey || event.altKey) return;\n // Ignore pure modifier presses\n if (event.key === \"Meta\" || event.key === \"Control\" || event.key === \"Alt\" || event.key === \"Shift\") {\n return;\n }\n setKeyboard(true);\n },\n true\n );\n\n window.addEventListener(\"pointerdown\", () => setKeyboard(false), true);\n window.addEventListener(\"touchstart\", () => setKeyboard(false), { capture: true, passive: true });\n}\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\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\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\";\nimport { typographyVariants } from \"./typography\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport type { IconLevel } from \"@aviala-design/icons\";\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { resolveIconSlotSizing } from \"../lib/icon-slot-sizing\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\n\n/** Figma Components → Basic Input → Button */\nexport type ButtonMode =\n | \"primary\"\n | \"second\"\n | \"default\"\n | \"defaultCustom\"\n | \"noBackground\"\n | \"noBackgroundCustom\"\n | \"destructive\";\n\nexport type ButtonSize = \"tiny\" | \"small\" | \"regular\" | \"big\";\n\nconst sizeLabelLevels = {\n tiny: \"caption\" as const,\n small: \"text\" as const,\n regular: \"text\" as const,\n big: \"text\" as const,\n} as const;\n\nconst buttonVariants = cva(\n \"aviala-button aviala-focus-ring 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)]\",\n {\n variants: {\n mode: {\n primary: \"aviala-button--mode-primary\",\n second: \"aviala-button--mode-second\",\n default: \"aviala-button--mode-default\",\n defaultCustom: \"aviala-button--mode-defaultCustom\",\n noBackground: \"aviala-button--mode-noBackground\",\n noBackgroundCustom: \"aviala-button--mode-noBackgroundCustom\",\n destructive: \"aviala-button--mode-destructive\",\n },\n allRound: {\n true: \"min-w-[var(--button-min-width-allround,48px)] !rounded-[var(--border-radius-allround,99px)]\",\n false: \"min-w-[var(--button-min-width,46px)]\",\n },\n },\n defaultVariants: {\n mode: \"primary\",\n allRound: false,\n },\n }\n);\n\nfunction resolveMode(\n mode?: ButtonMode | null,\n variant?: LegacyVariant | null\n): ButtonMode {\n if (mode) return mode;\n switch (variant) {\n case \"secondary\":\n return \"second\";\n case \"outline\":\n return \"default\";\n case \"ghost\":\n return \"noBackground\";\n case \"destructive\":\n return \"destructive\";\n case \"link\":\n return \"noBackground\";\n default:\n return \"primary\";\n }\n}\n\nfunction resolveSize(\n size?: ButtonSize | LegacySize | null,\n iconOnly?: boolean,\n variant?: LegacyVariant | null\n): ButtonSize {\n if (size === \"tiny\" || size === \"small\" || size === \"regular\" || size === \"big\") {\n return size;\n }\n switch (size) {\n case \"sm\":\n return \"small\";\n case \"lg\":\n return \"big\";\n case \"icon\":\n return \"regular\";\n default:\n break;\n }\n if (variant === \"link\" || iconOnly) return \"regular\";\n return \"regular\";\n}\n\ntype LegacyVariant =\n | \"default\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n\ntype LegacySize = \"default\" | \"sm\" | \"lg\" | \"icon\";\n\nfunction hasSurface(mode: ButtonMode): boolean {\n return (\n mode !== \"noBackground\" &&\n mode !== \"noBackgroundCustom\"\n );\n}\n\nfunction renderIcon(\n node: ReactNode,\n iconLevel: IconLevel,\n dimmed?: boolean,\n debugId?: string\n): ReactNode {\n if (!node) return null;\n\n const slotSizing = resolveIconSlotSizing(node, iconLevel, true);\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-button__icon\",\n dimmed && \"opacity-[var(--button-disabled-opacity,0.55)]\"\n )}\n style={\n {\n \"--button-icon-size\": resolveIconSizeToken(\n slotSizing.level,\n slotSizing.biggerSize\n ),\n } as CSSProperties\n }\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction resolveIconOnlyIcon(\n leftIcon?: ReactNode,\n icon?: ReactNode,\n children?: ReactNode,\n iconOnly?: boolean\n): ReactNode {\n const fromProp = leftIcon ?? icon;\n if (fromProp) return fromProp;\n if (!iconOnly || children == null || children === false) return undefined;\n if (isValidElement(children) && typeof children.type !== \"string\") return children;\n return undefined;\n}\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n Omit<VariantProps<typeof buttonVariants>, \"mode\"> & {\n /** Figma `Mode` — preferred over legacy `variant`. */\n mode?: ButtonMode;\n /** Figma `Size` — preferred over legacy shadcn sizes. */\n size?: ButtonSize | LegacySize;\n /** Figma `All-Round` */\n allRound?: boolean;\n /** Figma `IconOnly` */\n iconOnly?: boolean;\n /** @deprecated Use `mode` instead. */\n variant?: LegacyVariant;\n loading?: boolean;\n /** @deprecated Use `leftIcon`. */\n icon?: ReactNode;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n asChild?: boolean;\n };\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n mode: modeProp,\n variant,\n size: sizeProp,\n allRound = false,\n iconOnly: iconOnlyProp,\n asChild = false,\n loading = false,\n disabled,\n icon,\n leftIcon,\n rightIcon,\n children,\n ...props\n },\n ref\n ) => {\n const mode = resolveMode(modeProp, variant);\n const iconOnly =\n iconOnlyProp ??\n (sizeProp === \"icon\" ||\n ((!!(leftIcon ?? icon) ||\n (isValidElement(children) && typeof children.type !== \"string\")) &&\n !rightIcon &&\n (leftIcon ?? icon ? !children : true)));\n const size = resolveSize(sizeProp, iconOnly, variant);\n const isDisabled = disabled || loading;\n const showSurface = hasSurface(mode);\n\n const contentOpacity = loading\n ? \"opacity-[var(--button-loading-opacity,0.6)]\"\n : undefined;\n\n const resolvedLeft = iconOnly\n ? resolveIconOnlyIcon(leftIcon, icon, children, true)\n : leftIcon ?? icon;\n const label = iconOnly ? null : children;\n const iconLevel = sizeLabelLevels[size];\n\n const inner = (\n <>\n {showSurface && (\n <span\n aria-hidden\n className=\"aviala-button-surface pointer-events-none absolute inset-0 rounded-[inherit]\"\n {...spiralDebugId(\"button.surface\")}\n />\n )}\n {loading && (\n <Loading\n level={loadingLevelForButtonSize(size)}\n mode=\"inherit\"\n lineHeightFix={false}\n className=\"relative z-[1] shrink-0 text-inherit\"\n aria-hidden\n />\n )}\n {!iconOnly && renderIcon(resolvedLeft, iconLevel, undefined, \"button.icon-left\")}\n {iconOnly\n ? renderIcon(resolvedLeft, iconLevel, undefined, \"button.icon-left\")\n : label !== null && label !== undefined && (\n <span\n className={cn(\n typographyVariants({ level: sizeLabelLevels[size] }),\n \"relative z-[1] shrink-0\",\n contentOpacity\n )}\n {...spiralDebugId(\"button.label\")}\n >\n {label}\n </span>\n )}\n {!iconOnly && renderIcon(rightIcon, iconLevel, undefined, \"button.icon-right\")}\n </>\n );\n\n const classes = cn(\n buttonVariants({ mode, ...(iconOnly ? {} : { allRound }) }),\n iconOnly && \"min-w-0\",\n iconOnly && allRound && \"!rounded-[var(--border-radius-allround,99px)]\",\n className\n );\n\n if (asChild) {\n return (\n <Slot\n className={classes}\n ref={ref}\n aria-disabled={isDisabled || undefined}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n className={classes}\n ref={ref}\n data-size={size}\n data-icon-only={iconOnly || undefined}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...spiralDebugId(\"button\")}\n {...props}\n >\n {inner}\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import type { AvialaIconProps, IconLevel } from \"@aviala-design/icons\";\nimport {\n cloneElement,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"./utils\";\n\nexport type CloneAvialaIconDefaults = {\n level?: IconLevel;\n biggerSize?: boolean;\n className?: string;\n};\n\n/** Clone an Aviala icon element, applying defaults only for unset level/biggerSize. */\nexport function cloneAvialaIconElement(\n node: ReactNode,\n defaults: CloneAvialaIconDefaults = {}\n): ReactNode {\n if (!node) return null;\n if (!isValidElement(node) || typeof node.type === \"string\") return node;\n\n const element = node as ReactElement<AvialaIconProps>;\n const { level, biggerSize, className } = element.props;\n\n return cloneElement(element, {\n level: level !== undefined ? level : defaults.level,\n biggerSize: biggerSize !== undefined ? biggerSize : defaults.biggerSize,\n width: undefined,\n height: undefined,\n className: cn(className, defaults.className, \"shrink-0\"),\n });\n}\n","import type { AvialaIconProps, IconLevel } from \"@aviala-design/icons\";\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\nimport { isValidElement, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\n\nexport function resolveIconSlotSizing(\n node: ReactNode,\n defaultLevel: IconLevel,\n defaultBiggerSize = true\n): { level: IconLevel; biggerSize: boolean } {\n if (!isValidElement(node) || typeof node.type === \"string\") {\n return { level: defaultLevel, biggerSize: defaultBiggerSize };\n }\n\n const props = (node as ReactElement<AvialaIconProps>).props;\n return {\n level: props.level ?? defaultLevel,\n biggerSize: props.biggerSize ?? defaultBiggerSize,\n };\n}\n\nexport function iconSlotCssVarStyle(\n node: ReactNode,\n cssVarName: string,\n defaultLevel: IconLevel,\n defaultBiggerSize = true\n): CSSProperties {\n const slotSizing = resolveIconSlotSizing(node, defaultLevel, defaultBiggerSize);\n return {\n [cssVarName]: resolveIconSizeToken(slotSizing.level, slotSizing.biggerSize),\n } as CSSProperties;\n}\n\nexport function iconLevelCssVarStyle(\n level: IconLevel,\n biggerSize: boolean,\n cssVarName: string\n): CSSProperties {\n return {\n [cssVarName]: resolveIconSizeToken(level, biggerSize),\n } as CSSProperties;\n}\n","/** Stable ids for docs component debugger — safe to leave on DOM in production. */\nexport const SPIRAL_DEBUG_ATTR = \"data-spiral-debug-id\" as const;\n\nexport function spiralDebugId(id: string): { [SPIRAL_DEBUG_ATTR]: string; \"data-component\": string } {\n const component = id.split(\".\")[0] ?? id;\n return {\n [SPIRAL_DEBUG_ATTR]: id,\n \"data-component\": component,\n };\n}\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 { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\nimport { cn } from \"../lib/utils\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Information Display → Badge (166:137) */\nexport type BadgeStyle = \"theme\" | \"info\" | \"fail\" | \"warning\" | \"success\" | \"normal\";\nexport type BadgeLevel = \"caption\" | \"text\";\nexport type BadgeLineHeightFix = \"text\" | \"subtitle\" | \"off\";\n\nconst badgeVariants = cva(\"aviala-badge\", {\n variants: {\n style: {\n theme: \"aviala-badge--style-theme\",\n info: \"aviala-badge--style-info\",\n fail: \"aviala-badge--style-fail\",\n warning: \"aviala-badge--style-warning\",\n success: \"aviala-badge--style-success\",\n normal: \"aviala-badge--style-normal\",\n },\n level: {\n caption: \"aviala-badge--level-caption\",\n text: \"aviala-badge--level-text\",\n },\n primary: {\n true: \"aviala-badge--primary\",\n false: \"aviala-badge--secondary\",\n },\n lineHeightFix: {\n text: \"aviala-badge--lhf-text\",\n subtitle: \"aviala-badge--lhf-subtitle\",\n off: \"aviala-badge--lhf-off\",\n },\n },\n defaultVariants: {\n style: \"theme\",\n level: \"caption\",\n primary: false,\n lineHeightFix: \"text\",\n },\n});\n\nfunction resolveLineHeightFix(\n level: BadgeLevel,\n lineHeightFix: boolean | BadgeLineHeightFix | undefined\n): BadgeLineHeightFix {\n if (lineHeightFix === false || lineHeightFix === \"off\") return \"off\";\n if (lineHeightFix === \"subtitle\") return \"subtitle\";\n if (lineHeightFix === \"text\" || lineHeightFix === true) {\n return level === \"text\" ? \"subtitle\" : \"text\";\n }\n return level === \"text\" ? \"subtitle\" : \"text\";\n}\n\nfunction iconSizeForLevel(level: BadgeLevel): string {\n return resolveIconSizeToken(level);\n}\n\nfunction renderBadgeIcon(node: ReactNode, level: BadgeLevel): ReactNode {\n if (!node) return null;\n const size = iconSizeForLevel(level);\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(\n node as ReactElement<{\n width?: number | string;\n height?: number | string;\n className?: string;\n }>,\n {\n width: size,\n height: size,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n }\n )\n : node;\n\n return (\n <span className=\"aviala-badge__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nexport type BadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, \"style\"> &\n Omit<VariantProps<typeof badgeVariants>, \"lineHeightFix\" | \"primary\"> & {\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n /** Figma `Primary` — filled primary surface vs secondary surface */\n primary?: boolean;\n /**\n * Figma `LineHeightFix`.\n * - `true` / omitted: Caption → AlignToTextLevel, Text → AlignToSubtitleLevel\n * - `false` / `\"off\"`: OFF\n */\n lineHeightFix?: boolean | BadgeLineHeightFix;\n };\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n className,\n children,\n leftIcon,\n rightIcon,\n style = \"theme\",\n level = \"caption\",\n primary = false,\n lineHeightFix,\n ...props\n },\n ref\n ) => {\n const resolvedLevel = level ?? \"caption\";\n const resolvedStyle = style ?? \"theme\";\n const resolvedLhf = resolveLineHeightFix(resolvedLevel, lineHeightFix);\n const typographyLevel: TypographyLevel = resolvedLevel;\n const tone = primary ? (\"white\" as const) : (\"default\" as const);\n\n return (\n <span\n ref={ref}\n className={cn(\n badgeVariants({\n style: resolvedStyle,\n level: resolvedLevel,\n primary,\n lineHeightFix: resolvedLhf,\n }),\n className\n )}\n data-style={resolvedStyle}\n data-level={resolvedLevel}\n data-primary={primary ? \"true\" : \"false\"}\n data-line-height-fix={resolvedLhf}\n {...props}\n >\n {renderBadgeIcon(leftIcon, resolvedLevel)}\n <Typography\n level={typographyLevel}\n tone={tone}\n as=\"span\"\n className=\"aviala-badge__text whitespace-nowrap\"\n >\n {children}\n </Typography>\n {renderBadgeIcon(rightIcon, resolvedLevel)}\n </span>\n );\n }\n);\nBadge.displayName = \"Badge\";\n","import {\n DirectionArrowDownLight,\n DirectionArrowUpLight,\n} from \"@aviala-design/icons\";\nimport {\n forwardRef,\n isValidElement,\n useRef,\n useState,\n type ChangeEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\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\";\nimport {\n inputRootVariants,\n type InputSize,\n type InputState,\n} from \"./input\";\n\n/** Figma Components → Information Collect → NumberInput (197:3237) */\nexport type NumberInputStyle = \"default\" | \"monospaced\";\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n ref.current = value;\n}\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\nfunction parseNumeric(raw: string): number | null {\n if (raw.trim() === \"\") return null;\n const parsed = Number(raw);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction clamp(value: number, min?: number, max?: number): number {\n let next = value;\n if (min !== undefined && Number.isFinite(min)) next = Math.max(min, next);\n if (max !== undefined && Number.isFinite(max)) next = Math.min(max, next);\n return next;\n}\n\nfunction stepValue(\n current: number | null,\n direction: 1 | -1,\n step: number,\n min?: number,\n max?: number\n): number {\n const base = current ?? (direction > 0 ? (min ?? 0) : (max ?? 0));\n const next = clamp(base + direction * step, min, max);\n // Avoid float noise for common decimal steps\n const precision = Math.max(\n decimalPlaces(step),\n decimalPlaces(base),\n decimalPlaces(min ?? 0),\n decimalPlaces(max ?? 0)\n );\n return Number(next.toFixed(precision));\n}\n\nfunction decimalPlaces(n: number): number {\n if (!Number.isFinite(n)) return 0;\n const text = String(n);\n const i = text.indexOf(\".\");\n return i === -1 ? 0 : text.length - i - 1;\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\nconst numberInputRootVariants = inputRootVariants;\n\nexport type NumberInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"value\" | \"defaultValue\" | \"onChange\"\n> & {\n /** Figma `Size` */\n size?: InputSize;\n /** Figma `All-Round` */\n allRound?: boolean;\n /** Figma `Style` — Default vs Monospaced (tabular / light numeric) */\n inputStyle?: NumberInputStyle;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n leftBadge?: ReactNode;\n rightBadge?: ReactNode;\n /** Figma `showNumberControlButton` — vertical steppers */\n showControls?: boolean;\n /** When false, input sizes to content */\n fullWidth?: boolean;\n error?: boolean;\n value?: number | string | \"\";\n defaultValue?: number | string;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Fires with the parsed number (or `null` when empty / invalid) */\n onValueChange?: (value: number | null) => void;\n};\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n className,\n size = \"regular\",\n allRound = false,\n inputStyle = \"default\",\n leftIcon,\n rightIcon,\n leftBadge,\n rightBadge,\n showControls = true,\n fullWidth = true,\n error = false,\n disabled,\n value,\n defaultValue,\n step = 1,\n min,\n max,\n onChange,\n onValueChange,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(() =>\n defaultValue === undefined || defaultValue === null ? \"\" : String(defaultValue)\n );\n const isControlled = value !== undefined;\n const resolvedValue = isControlled\n ? value === \"\" || value === null || value === undefined\n ? \"\"\n : String(value)\n : internalValue;\n const inputState = resolveInputState(resolvedValue, undefined, focused);\n const numeric = parseNumeric(resolvedValue);\n const stepAmount = Number.isFinite(step) && step !== 0 ? Math.abs(step) : 1;\n\n const commitString = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(parseNumeric(next));\n onChange?.({\n target: { value: next },\n currentTarget: { value: next },\n } as ChangeEvent<HTMLInputElement>);\n };\n\n const applyStep = (direction: 1 | -1) => {\n if (disabled) return;\n const next = stepValue(numeric, direction, stepAmount, min, max);\n commitString(String(next));\n inputRef.current?.focus();\n };\n\n return (\n <div\n className={cn(\n inputRootVariants({ fullWidth }),\n \"aviala-number-input\",\n className\n )}\n data-size={size}\n data-all-round={allRound ? \"true\" : undefined}\n data-input-state={inputState}\n data-input-style={inputStyle}\n data-error={error ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n {...spiralDebugId(\"number-input\")}\n >\n {renderSlotIcon(leftIcon, \"number-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(\"number-input.field\")}\n >\n <input\n ref={(node) => {\n inputRef.current = node;\n assignRef(ref, node);\n }}\n type=\"number\"\n inputMode=\"decimal\"\n disabled={disabled}\n value={resolvedValue}\n step={stepAmount}\n min={min}\n max={max}\n aria-invalid={error || undefined}\n className={cn(\n typographyVariants({ level: \"text\" }),\n \"aviala-number-input__input 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 data-content={inputStyle === \"monospaced\" ? \"number\" : \"text\"}\n onChange={(event) => {\n const next = event.target.value;\n if (!isControlled) setInternalValue(next);\n onValueChange?.(parseNumeric(next));\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n // Clamp on blur when a finite number is present\n const parsed = parseNumeric(event.target.value);\n if (parsed !== null) {\n const clamped = clamp(parsed, min, max);\n if (clamped !== parsed) {\n commitString(String(clamped));\n }\n }\n onBlur?.(event);\n }}\n onKeyDown={(event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n applyStep(1);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n applyStep(-1);\n }\n onKeyDown?.(event);\n }}\n {...props}\n />\n </div>\n\n {renderBadgeArea(rightBadge)}\n {renderSlotIcon(rightIcon, \"number-input.right-icon\")}\n\n {showControls ? (\n <div\n className=\"aviala-number-input__controls\"\n {...spiralDebugId(\"number-input.controls\")}\n >\n <button\n type=\"button\"\n className=\"aviala-number-input__step aviala-number-input__step--up\"\n tabIndex={-1}\n disabled={\n disabled ||\n (max !== undefined && numeric !== null && numeric >= max)\n }\n aria-label=\"Increment\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => applyStep(1)}\n {...spiralDebugId(\"number-input.step-up\")}\n >\n <DirectionArrowUpLight level=\"text\" biggerSize aria-hidden />\n </button>\n <button\n type=\"button\"\n className=\"aviala-number-input__step aviala-number-input__step--down\"\n tabIndex={-1}\n disabled={\n disabled ||\n (min !== undefined && numeric !== null && numeric <= min)\n }\n aria-label=\"Decrement\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => applyStep(-1)}\n {...spiralDebugId(\"number-input.step-down\")}\n >\n <DirectionArrowDownLight level=\"text\" biggerSize aria-hidden />\n </button>\n </div>\n ) : null}\n </div>\n );\n }\n);\nNumberInput.displayName = \"NumberInput\";\n\nexport { numberInputRootVariants };\n","import { SymbolResize } from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type TextareaHTMLAttributes,\n type ReactNode,\n type Ref,\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 (301:6320) */\nexport type TextareaSize = \"regular\" | \"big\";\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n ref.current = value;\n}\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\nexport type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> & {\n /** Figma `Size` */\n size?: TextareaSize;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Figma `Controller` — character counter + SymbolResize drag handle */\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 style,\n ...props\n },\n ref\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(() => String(defaultValue ?? \"\"));\n const [resizing, setResizing] = useState(false);\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 const setTextareaRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n textareaRef.current = node;\n assignRef(ref, node);\n },\n [ref]\n );\n\n /** Clicks on padding / icon slots should focus the real control. */\n const handleShellMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n const target = event.target as HTMLElement | null;\n if (!target) return;\n if (target.closest(\".aviala-textarea__resize-handle\")) return;\n if (target.closest(\"textarea\") === textareaRef.current) return;\n\n event.preventDefault();\n textareaRef.current?.focus();\n },\n [disabled]\n );\n\n const handleResizePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLButtonElement>) => {\n if (disabled || event.button !== 0) return;\n const root = rootRef.current;\n if (!root) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const handle = event.currentTarget;\n const startX = event.clientX;\n const startY = event.clientY;\n const startW = root.offsetWidth;\n const startH = root.offsetHeight;\n const styles = getComputedStyle(root);\n const minW = parseFloat(styles.minWidth) || 46;\n const minH = parseFloat(styles.minHeight) || 70;\n\n handle.setPointerCapture(event.pointerId);\n setResizing(true);\n\n const onMove = (ev: PointerEvent) => {\n const nextW = Math.max(minW, Math.round(startW + (ev.clientX - startX)));\n const nextH = Math.max(minH, Math.round(startH + (ev.clientY - startY)));\n root.style.width = `${nextW}px`;\n root.style.height = `${nextH}px`;\n };\n\n const onUp = (ev: PointerEvent) => {\n if (handle.hasPointerCapture(ev.pointerId)) {\n handle.releasePointerCapture(ev.pointerId);\n }\n handle.removeEventListener(\"pointermove\", onMove);\n handle.removeEventListener(\"pointerup\", onUp);\n handle.removeEventListener(\"pointercancel\", onUp);\n setResizing(false);\n };\n\n handle.addEventListener(\"pointermove\", onMove);\n handle.addEventListener(\"pointerup\", onUp);\n handle.addEventListener(\"pointercancel\", onUp);\n },\n [disabled]\n );\n\n useEffect(() => {\n if (!resizing) return;\n const previous = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.cursor = \"nwse-resize\";\n document.body.style.userSelect = \"none\";\n return () => {\n document.body.style.cursor = previous;\n document.body.style.userSelect = previousUserSelect;\n };\n }, [resizing]);\n\n return (\n <div\n ref={rootRef}\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 data-resizing={resizing ? \"true\" : undefined}\n style={style}\n onMouseDown={handleShellMouseDown}\n {...spiralDebugId(\"textarea\")}\n >\n {renderSlotIcon(leftIcon, \"textarea.left-icon\")}\n\n <div className=\"aviala-textarea__field\" {...spiralDebugId(\"textarea.field\")}>\n <textarea\n ref={setTextareaRef}\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 }\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\" {...spiralDebugId(\"textarea.controller\")}>\n <span\n className={cn(\"aviala-textarea__counter\", typographyVariants({ level: \"caption\" }))}\n aria-hidden\n >\n {displayLength}\n {maxLength !== undefined ? `/${maxLength}` : \"\"}\n </span>\n <button\n type=\"button\"\n className=\"aviala-textarea__resize-handle\"\n aria-label=\"Resize textarea\"\n disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onPointerDown={handleResizePointerDown}\n {...spiralDebugId(\"textarea.resize\")}\n >\n <SymbolResize thickness=\"Regular\" mode=\"default\" aria-hidden />\n </button>\n </div>\n ) : null}\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n DirectionArrowDownLight,\n DirectionArrowRight,\n SymbolRight,\n UsersUserCircle,\n type IconLevel,\n} from \"@aviala-design/icons\";\nimport {\n Children,\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type FocusEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n isValidElement,\n} from \"react\";\nimport { Badge } from \"./badge\";\nimport { Link } from \"./link\";\nimport { typographyVariants } from \"./typography\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { iconLevelCssVarStyle, iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\n\n/** Figma Components → Information Collect → Select */\nexport type SelectSize = \"regular\" | \"big\";\n\n/** Figma Select Menu Item `Function` variant */\nexport type SelectItemFunction =\n | \"action\"\n | \"simple\"\n | \"checkbox\"\n | \"form-checkbox\"\n | \"radio\"\n | \"form-radio\";\n\n/** Figma Select Menu Item `Type` variant */\nexport type SelectItemLayout = \"default\" | \"title\" | \"people\" | \"checked\";\n\nconst SELECT_SUB_MENU_CLOSE_DELAY_MS = 250;\nconst SELECT_SUB_MENU_EXIT_ANIM_MS = 150;\n\ntype SelectSubMenuMarkerProps = {\n children: ReactNode;\n className?: string;\n side?: \"left\" | \"right\";\n sideOffset?: number;\n portalled?: boolean;\n};\n\ntype ParsedSelectSubMenu = {\n children: ReactNode;\n className?: string;\n side: \"left\" | \"right\";\n sideOffset: number;\n portalled: boolean;\n};\n\ntype SubMenuItemRegistration = {\n getRoot: () => HTMLElement | null;\n getContent: () => HTMLElement | null;\n};\n\ntype SelectSubMenuContextValue = {\n contentId: string;\n registerSubItem: (id: string, registration: SubMenuItemRegistration) => void;\n unregisterSubItem: (id: string) => void;\n openSubItem: (id: string) => void;\n scheduleCloseSubItem: (id: string, relatedTarget?: EventTarget | null) => void;\n closeActiveSubItem: () => void;\n isSubItemOpen: (id: string) => boolean;\n isSubItemExiting: (id: string) => boolean;\n};\n\nconst SelectSubMenuContext = createContext<SelectSubMenuContextValue | null>(null);\n\ntype SelectDismissContextValue = {\n pointerDownCloseRef: React.MutableRefObject<boolean>;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n};\n\nconst SelectDismissContext = createContext<SelectDismissContextValue | null>(null);\n\nfunction useSelectSubMenuContext() {\n const context = useContext(SelectSubMenuContext);\n if (!context) {\n throw new Error(\"Select sub-menu components must be used within SelectContent.\");\n }\n return context;\n}\n\nfunction useSelectSubMenuLayer(): SelectSubMenuContextValue {\n const contentId = useId();\n const [activeSubItemId, setActiveSubItemId] = useState<string | null>(null);\n const [exitingSubItemId, setExitingSubItemId] = useState<string | null>(null);\n const itemsRef = useRef(new Map<string, SubMenuItemRegistration>());\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const exitTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const pointerRef = useRef({ x: 0, y: 0 });\n\n const cancelScheduledClose = useCallback(() => {\n if (closeTimerRef.current !== undefined) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = undefined;\n }\n }, []);\n\n const clearExitTimer = useCallback(() => {\n if (exitTimerRef.current !== undefined) {\n clearTimeout(exitTimerRef.current);\n exitTimerRef.current = undefined;\n }\n }, []);\n\n const isTargetInSubItemTree = useCallback((id: string, target: EventTarget | null | undefined) => {\n if (!(target instanceof Node)) return false;\n const registration = itemsRef.current.get(id);\n if (!registration) return false;\n const root = registration.getRoot();\n const content = registration.getContent();\n return (root?.contains(target) ?? false) || (content?.contains(target) ?? false);\n }, []);\n\n const findSubItemIdForTarget = useCallback((target: EventTarget | null | undefined, excludeId?: string) => {\n if (!(target instanceof Node)) return null;\n for (const [id, registration] of itemsRef.current) {\n if (id === excludeId) continue;\n const root = registration.getRoot();\n const content = registration.getContent();\n if (root?.contains(target) || content?.contains(target)) return id;\n }\n return null;\n }, []);\n\n const isPointerOverSubItem = useCallback((id: string) => {\n const hovered = document.elementFromPoint(pointerRef.current.x, pointerRef.current.y);\n if (!(hovered instanceof Element)) return false;\n const registration = itemsRef.current.get(id);\n if (!registration) return false;\n const root = registration.getRoot();\n const content = registration.getContent();\n return (root?.contains(hovered) ?? false) || (content?.contains(hovered) ?? false);\n }, []);\n\n const findSubItemIdAtPointer = useCallback((excludeId?: string) => {\n const hovered = document.elementFromPoint(pointerRef.current.x, pointerRef.current.y);\n if (!(hovered instanceof Element)) return null;\n for (const [id, registration] of itemsRef.current) {\n if (id === excludeId) continue;\n const root = registration.getRoot();\n const content = registration.getContent();\n if (root?.contains(hovered) || content?.contains(hovered)) return id;\n }\n return null;\n }, []);\n\n const beginExit = useCallback(\n (id: string) => {\n cancelScheduledClose();\n clearExitTimer();\n setExitingSubItemId(id);\n setActiveSubItemId(null);\n exitTimerRef.current = setTimeout(() => {\n setExitingSubItemId((current) => (current === id ? null : current));\n exitTimerRef.current = undefined;\n }, SELECT_SUB_MENU_EXIT_ANIM_MS);\n },\n [cancelScheduledClose, clearExitTimer]\n );\n\n const openSubItem = useCallback(\n (id: string) => {\n cancelScheduledClose();\n clearExitTimer();\n setExitingSubItemId(null);\n setActiveSubItemId(id);\n },\n [cancelScheduledClose, clearExitTimer]\n );\n\n const closeActiveSubItem = useCallback(() => {\n if (activeSubItemId) {\n beginExit(activeSubItemId);\n return;\n }\n cancelScheduledClose();\n }, [activeSubItemId, beginExit, cancelScheduledClose]);\n\n const scheduleCloseSubItem = useCallback(\n (id: string, relatedTarget?: EventTarget | null) => {\n if (exitingSubItemId === id) return;\n if (isTargetInSubItemTree(id, relatedTarget)) return;\n\n const siblingId = findSubItemIdForTarget(relatedTarget, id);\n if (siblingId) {\n openSubItem(siblingId);\n return;\n }\n\n cancelScheduledClose();\n closeTimerRef.current = setTimeout(() => {\n if (isPointerOverSubItem(id)) return;\n\n const pointerSiblingId = findSubItemIdAtPointer(id);\n if (pointerSiblingId) {\n openSubItem(pointerSiblingId);\n return;\n }\n\n beginExit(id);\n }, SELECT_SUB_MENU_CLOSE_DELAY_MS);\n },\n [\n beginExit,\n cancelScheduledClose,\n exitingSubItemId,\n findSubItemIdAtPointer,\n findSubItemIdForTarget,\n isPointerOverSubItem,\n isTargetInSubItemTree,\n openSubItem,\n ]\n );\n\n const registerSubItem = useCallback((id: string, registration: SubMenuItemRegistration) => {\n itemsRef.current.set(id, registration);\n }, []);\n\n const unregisterSubItem = useCallback((id: string) => {\n itemsRef.current.delete(id);\n setActiveSubItemId((current) => (current === id ? null : current));\n setExitingSubItemId((current) => (current === id ? null : current));\n }, []);\n\n useEffect(() => {\n const trackPointer = (event: PointerEvent) => {\n pointerRef.current = { x: event.clientX, y: event.clientY };\n };\n document.addEventListener(\"pointermove\", trackPointer, { passive: true });\n return () => document.removeEventListener(\"pointermove\", trackPointer);\n }, []);\n\n useEffect(\n () => () => {\n cancelScheduledClose();\n clearExitTimer();\n },\n [cancelScheduledClose, clearExitTimer]\n );\n\n useEffect(() => {\n const visibleSubItemId = activeSubItemId ?? exitingSubItemId;\n if (!visibleSubItemId) return;\n\n const keepSelectOpen = (event: Event) => {\n if (isWithinSelectSubLayer(event.target)) {\n event.stopPropagation();\n }\n };\n\n const handleEscape = (event: globalThis.KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n event.preventDefault();\n event.stopPropagation();\n if (activeSubItemId) {\n beginExit(activeSubItemId);\n return;\n }\n if (exitingSubItemId) {\n clearExitTimer();\n setExitingSubItemId(null);\n }\n };\n\n document.addEventListener(\"pointerdown\", keepSelectOpen, true);\n document.addEventListener(\"keydown\", handleEscape, true);\n return () => {\n document.removeEventListener(\"pointerdown\", keepSelectOpen, true);\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n }, [activeSubItemId, beginExit, clearExitTimer, exitingSubItemId]);\n\n return useMemo(\n () => ({\n contentId,\n registerSubItem,\n unregisterSubItem,\n openSubItem,\n scheduleCloseSubItem,\n closeActiveSubItem,\n isSubItemOpen: (id: string) => activeSubItemId === id || exitingSubItemId === id,\n isSubItemExiting: (id: string) => exitingSubItemId === id && activeSubItemId !== id,\n }),\n [\n activeSubItemId,\n closeActiveSubItem,\n contentId,\n exitingSubItemId,\n openSubItem,\n registerSubItem,\n scheduleCloseSubItem,\n unregisterSubItem,\n ]\n );\n}\n\n/** Marker child for {@link SelectSubItem} — extracted and rendered in the flyout panel. */\nexport function SelectSubMenu(_props: SelectSubMenuMarkerProps): null {\n return null;\n}\nSelectSubMenu.displayName = \"SelectSubMenu\";\n\nfunction isSelectSubMenuElement(child: ReactNode): child is ReactElement<SelectSubMenuMarkerProps> {\n return isValidElement(child) && child.type === SelectSubMenu;\n}\n\nfunction parseSelectSubItemChildren(children: ReactNode): {\n itemChildren: ReactNode;\n subMenu: ParsedSelectSubMenu | null;\n} {\n const itemNodes: ReactNode[] = [];\n let subMenu: ParsedSelectSubMenu | null = null;\n\n Children.forEach(children, (child) => {\n if (isSelectSubMenuElement(child)) {\n subMenu = {\n children: child.props.children,\n className: child.props.className,\n side: child.props.side ?? \"right\",\n sideOffset: child.props.sideOffset ?? 8,\n portalled: child.props.portalled ?? false,\n };\n return;\n }\n itemNodes.push(child);\n });\n\n return {\n itemChildren: itemNodes.length === 1 ? itemNodes[0] : itemNodes,\n subMenu,\n };\n}\n\nfunction isWithinSelectSubLayer(target: EventTarget | null) {\n return target instanceof Element && target.closest(\".aviala-select-sub-content\") !== null;\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-select-trigger__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 renderItemIcon(\n node: ReactNode,\n iconLevel: IconLevel = \"text\",\n debugId?: string\n): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-select-item__icon\",\n iconLevel === \"caption\" && \"aviala-select-item__icon--sm\"\n )}\n style={iconSlotCssVarStyle(node, \"--select-item-icon-size\", iconLevel, true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction renderBadgeSlot(node: ReactNode): ReactNode {\n if (node == null || node === false) return null;\n\n return (\n <span className=\"aviala-select-item__badge\">\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\n </span>\n );\n}\n\nfunction SelectItemFormRadio() {\n return (\n <span className=\"aviala-select-item__form-radio\" aria-hidden>\n <span className=\"aviala-select-item__form-radio-surface\" />\n <span className=\"aviala-select-item__form-radio-indicator\" />\n </span>\n );\n}\n\nfunction SelectItemFormCheckbox() {\n return (\n <span className=\"aviala-select-item__form-checkbox\" aria-hidden>\n <SymbolRight\n className=\"aviala-select-item__form-checkbox-icon\"\n width={12}\n height={12}\n aria-hidden\n />\n </span>\n );\n}\n\nfunction SelectItemTrailingRadio() {\n return (\n <SelectPrimitive.ItemIndicator className=\"aviala-select-item__trailing-radio\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </SelectPrimitive.ItemIndicator>\n );\n}\n\nfunction SelectItemTrailingCheckbox() {\n return (\n <SelectPrimitive.ItemIndicator className=\"aviala-select-item__trailing-checkbox\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </SelectPrimitive.ItemIndicator>\n );\n}\n\nfunction SelectItemDefaultAvatar() {\n return (\n <span className=\"aviala-select-item__avatar\" aria-hidden>\n <UsersUserCircle level=\"text\" biggerSize aria-hidden />\n </span>\n );\n}\n\nfunction renderFunctionSlot(\n itemFunction: SelectItemFunction,\n layout: SelectItemLayout,\n showFunctionIcon: boolean,\n icon?: ReactNode\n): ReactNode {\n if (!showFunctionIcon) return null;\n if (layout === \"checked\") return null;\n\n const functionStyle = icon\n ? iconSlotCssVarStyle(icon, \"--select-item-function-icon-size\", \"text\", true)\n : undefined;\n\n if (icon !== undefined) {\n return (\n <span\n className=\"aviala-select-item__function\"\n style={functionStyle}\n {...spiralDebugId(\"select.content.item.function\")}\n >\n {cloneAvialaIconElement(icon, { level: \"text\", biggerSize: true })}\n </span>\n );\n }\n\n switch (itemFunction) {\n case \"radio\":\n return (\n <span className=\"aviala-select-item__function\" {...spiralDebugId(\"select.content.item.function\")}>\n <SelectItemTrailingRadio />\n </span>\n );\n case \"checkbox\":\n return (\n <span className=\"aviala-select-item__function\" {...spiralDebugId(\"select.content.item.function\")}>\n <SelectItemTrailingCheckbox />\n </span>\n );\n case \"simple\":\n case \"action\":\n default:\n return (\n <span\n className=\"aviala-select-item__function\"\n style={iconLevelCssVarStyle(\"text\", true, \"--select-item-function-icon-size\")}\n {...spiralDebugId(\"select.content.item.function\")}\n >\n <DirectionArrowRight level=\"text\" biggerSize aria-hidden />\n </span>\n );\n }\n}\n\nexport type SelectProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Root>;\n\n/**\n * Radix Select closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down (outside click, item select, trigger toggle)\n * and Escape must still dismiss on the first interaction.\n */\nexport function Select({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: SelectProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n const dismissContextValue = useMemo(\n () => ({ pointerDownCloseRef, triggerRef }),\n []\n );\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) return;\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n if (nextOpen) {\n pointerDownCloseRef.current = false;\n }\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange]\n );\n\n return (\n <SelectDismissContext.Provider value={dismissContextValue}>\n <SelectPrimitive.Root open={open} onOpenChange={handleOpenChange} {...props} />\n </SelectDismissContext.Provider>\n );\n}\nexport const SelectValue = SelectPrimitive.Value;\nexport const SelectGroup = SelectPrimitive.Group;\n\nconst SELECT_MENU_ITEM_DISPLAY_NAMES = new Set([\n SelectPrimitive.Item.displayName,\n \"SelectItem\",\n \"SelectSubItem\",\n \"SelectItemPeople\",\n]);\n\nfunction getComponentDisplayName(type: unknown): string | undefined {\n if (typeof type === \"function\" || (typeof type === \"object\" && type !== null)) {\n return (type as { displayName?: string }).displayName;\n }\n return undefined;\n}\n\nfunction isSelectGroupElement(child: ReactNode): boolean {\n if (!isValidElement(child)) return false;\n if (child.type === SelectGroup) return true;\n return getComponentDisplayName(child.type) === \"SelectItemGroup\";\n}\n\nfunction isSelectMenuItemElement(child: ReactNode): boolean {\n if (!isValidElement(child)) return false;\n const displayName = getComponentDisplayName(child.type);\n return displayName !== undefined && SELECT_MENU_ITEM_DISPLAY_NAMES.has(displayName);\n}\n\n/** Ensures bare menu items are wrapped in a SelectGroup in the DOM (Figma requirement). */\nfunction wrapUngroupedSelectItems(children: ReactNode): ReactNode {\n const nodes = Children.toArray(children);\n if (nodes.length === 0) return children;\n\n const wrapped: ReactNode[] = [];\n let bareItems: ReactNode[] = [];\n let autoGroupIndex = 0;\n\n const flushBareItems = () => {\n if (bareItems.length === 0) return;\n wrapped.push(\n <SelectGroup key={`__select-auto-group-${autoGroupIndex++}`} className=\"aviala-select-group\">\n <div className=\"aviala-select-group__slot\">{bareItems}</div>\n </SelectGroup>\n );\n bareItems = [];\n };\n\n for (const node of nodes) {\n if (isSelectGroupElement(node)) {\n flushBareItems();\n wrapped.push(node);\n } else if (isSelectMenuItemElement(node)) {\n bareItems.push(node);\n } else {\n flushBareItems();\n wrapped.push(node);\n }\n }\n\n flushBareItems();\n return wrapped.length === 1 ? wrapped[0] : wrapped;\n}\n\nexport type SelectTriggerProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n size?: SelectSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Override chevron expand icon (defaults to DirectionArrowDownLight). */\n expandIcon?: ReactNode;\n placeholder?: string;\n error?: boolean;\n};\n\nexport const SelectTrigger = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(\n (\n {\n className,\n size = \"regular\",\n allRound = false,\n leftIcon,\n rightIcon,\n expandIcon,\n placeholder,\n error = false,\n ...props\n },\n ref\n ) => {\n const dismissContext = useContext(SelectDismissContext);\n\n return (\n <SelectPrimitive.Trigger\n ref={(node) => {\n if (dismissContext) {\n dismissContext.triggerRef.current = node;\n }\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(\"aviala-select-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-error={error ? \"true\" : undefined}\n {...spiralDebugId(\"select.trigger\")}\n {...props}\n >\n {renderSlotIcon(leftIcon, \"select.trigger.icon-left\")}\n <span className=\"aviala-select-trigger__field\">\n <SelectPrimitive.Value\n placeholder={placeholder}\n className={cn(\"aviala-select-trigger__value\", typographyVariants({ level: \"text\" }))}\n {...spiralDebugId(\"select.trigger.value\")}\n />\n </span>\n {renderSlotIcon(rightIcon, \"select.trigger.icon-right\")}\n <SelectPrimitive.Icon asChild>\n <span\n className=\"aviala-select-trigger__expand\"\n aria-hidden\n style={\n expandIcon\n ? iconSlotCssVarStyle(expandIcon, \"--input-slot-icon-size\", \"text\", true)\n : iconLevelCssVarStyle(\"text\", true, \"--input-slot-icon-size\")\n }\n {...spiralDebugId(\"select.trigger.expand\")}\n >\n {expandIcon ?? (\n <DirectionArrowDownLight\n className=\"aviala-select-trigger__expand-icon\"\n level=\"text\"\n biggerSize\n aria-hidden\n />\n )}\n </span>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n }\n);\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nexport type SelectContentProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & {\n /** Render without Portal — use inside nested overlays (e.g. ColorPicker popover). */\n portalled?: boolean;\n};\n\nexport const SelectContent = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n SelectContentProps\n>(\n (\n {\n className,\n children,\n position = \"popper\",\n sideOffset = 8,\n portalled = true,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const subMenuLayer = useSelectSubMenuLayer();\n const dismissContext = useContext(SelectDismissContext);\n\n const handleCloseAutoFocus: NonNullable<SelectContentProps[\"onCloseAutoFocus\"]> = (\n event\n ) => {\n onCloseAutoFocus?.(event);\n if (event.defaultPrevented) {\n if (dismissContext) {\n dismissContext.pointerDownCloseRef.current = false;\n }\n return;\n }\n if (dismissContext?.pointerDownCloseRef.current) {\n event.preventDefault();\n dismissContext.triggerRef.current?.blur();\n dismissContext.pointerDownCloseRef.current = false;\n }\n };\n\n const content = (\n <SelectSubMenuContext.Provider value={subMenuLayer}>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\"aviala-select-content\", className)}\n position={position}\n sideOffset={sideOffset}\n onCloseAutoFocus={handleCloseAutoFocus}\n {...spiralDebugId(\"select.content\")}\n {...props}\n >\n <SelectPrimitive.Viewport\n className=\"aviala-select-viewport\"\n {...spiralDebugId(\"select.content.viewport\")}\n >\n {wrapUngroupedSelectItems(children)}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectSubMenuContext.Provider>\n );\n\n if (!portalled) return content;\n\n return <SelectPrimitive.Portal>{content}</SelectPrimitive.Portal>;\n }\n);\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nexport type SelectLabelProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Label>;\n\nexport const SelectLabel = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n SelectLabelProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"aviala-select-label\", typographyVariants({ level: \"caption\" }), className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nexport type SelectItemProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Item> & {\n /** Figma Function variant (default Action Item) */\n itemFunction?: SelectItemFunction;\n /** Figma Type variant */\n layout?: SelectItemLayout;\n leftIcon?: ReactNode;\n showLeftIcon?: boolean;\n rightIcon?: ReactNode;\n showRightIcon?: boolean;\n badge?: ReactNode;\n showBadge?: boolean;\n showMoreFunction?: boolean;\n /** Inline action before the function icon (Figma MoreFunction) */\n moreAction?: ReactNode;\n /** Override trailing function slot (Figma function icon) */\n icon?: ReactNode;\n /** Show trailing function icon (Figma showFunctionIcon; hidden when layout=`checked` and selected) */\n showFunctionIcon?: boolean;\n /** People layout — 26px avatar node; defaults to UsersUserCircle */\n avatar?: ReactNode;\n /** People layout — secondary caption line */\n subtitle?: ReactNode;\n};\n\nexport const SelectItem = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(\n (\n {\n className,\n children,\n itemFunction = \"action\",\n layout = \"default\",\n leftIcon,\n showLeftIcon = false,\n rightIcon,\n showRightIcon = false,\n badge,\n showBadge = false,\n showMoreFunction = false,\n moreAction,\n icon,\n showFunctionIcon = true,\n avatar,\n subtitle,\n ...props\n },\n ref\n ) => {\n const isPeople = layout === \"people\";\n const isTitle = layout === \"title\";\n const isFormLeading =\n itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\n const showTrailingFunction =\n showFunctionIcon &&\n layout !== \"checked\" &&\n itemFunction !== \"form-radio\" &&\n itemFunction !== \"form-checkbox\";\n\n const textLevel = isTitle ? \"caption\" : \"text\";\n\n const textContent = isPeople ? (\n <span className=\"aviala-select-item__content\">\n <SelectPrimitive.ItemText\n className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}\n >\n {children}\n </SelectPrimitive.ItemText>\n {subtitle != null && subtitle !== false ? (\n <span className={cn(\"aviala-select-item__subtitle\", typographyVariants({ level: \"caption\" }))}>\n {subtitle}\n </span>\n ) : null}\n </span>\n ) : (\n <SelectPrimitive.ItemText\n className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}\n >\n {children}\n </SelectPrimitive.ItemText>\n );\n\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\"aviala-select-item\", className)}\n data-layout={layout !== \"default\" ? layout : undefined}\n data-function={itemFunction !== \"action\" ? itemFunction : undefined}\n {...spiralDebugId(\"select.content.item\")}\n {...props}\n >\n {isFormLeading && itemFunction === \"form-radio\" ? <SelectItemFormRadio /> : null}\n {isFormLeading && itemFunction === \"form-checkbox\" ? (\n <SelectItemFormCheckbox />\n ) : null}\n\n {showLeftIcon && leftIcon\n ? renderItemIcon(leftIcon, leftIconLevel, \"select.content.item.icon-left\")\n : null}\n\n {isPeople ? (avatar ?? <SelectItemDefaultAvatar />) : null}\n\n {textContent}\n\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\n\n {showRightIcon && rightIcon\n ? renderItemIcon(rightIcon, leftIconLevel, \"select.content.item.icon-right\")\n : null}\n\n {showMoreFunction ? (\n <span className=\"aviala-select-item__more\">\n {moreAction ?? (\n <Link level=\"text\" href=\"#\" onClick={(event) => event.preventDefault()}>\n Text\n </Link>\n )}\n </span>\n ) : null}\n\n {renderFunctionSlot(itemFunction, layout, showTrailingFunction, icon)}\n </SelectPrimitive.Item>\n );\n }\n);\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nexport type SelectSubMenuProps = SelectSubMenuMarkerProps;\n\nexport type SelectSubItemProps = {\n children: ReactNode;\n className?: string;\n disabled?: boolean;\n /** Figma Function variant (default Action Item — trailing chevron) */\n itemFunction?: SelectItemFunction;\n /** Figma Type variant */\n layout?: SelectItemLayout;\n leftIcon?: ReactNode;\n showLeftIcon?: boolean;\n rightIcon?: ReactNode;\n showRightIcon?: boolean;\n badge?: ReactNode;\n showBadge?: boolean;\n showMoreFunction?: boolean;\n moreAction?: ReactNode;\n icon?: ReactNode;\n showFunctionIcon?: boolean;\n avatar?: ReactNode;\n subtitle?: ReactNode;\n /** Popover side when space allows (default right). Flips to left on collision. */\n side?: \"left\" | \"right\";\n sideOffset?: number;\n /** Render flyout in a Portal (default false — keeps panel inside SelectContent). */\n portalled?: boolean;\n};\n\n/**\n * Figma Select Menu Item with nested sub-menu — opens a flyout panel on hover/focus.\n * Compose with {@link SelectSubMenu} for sub-menu items.\n */\nexport const SelectSubItem = forwardRef<HTMLDivElement, SelectSubItemProps>(\n (\n {\n className,\n children,\n itemFunction = \"action\",\n layout = \"default\",\n leftIcon,\n showLeftIcon = false,\n rightIcon,\n showRightIcon = false,\n badge,\n showBadge = false,\n showMoreFunction = false,\n moreAction,\n icon,\n showFunctionIcon = true,\n avatar,\n subtitle,\n side: sideProp,\n sideOffset: sideOffsetProp,\n portalled: portalledProp,\n disabled = false,\n },\n ref\n ) => {\n const {\n registerSubItem,\n unregisterSubItem,\n openSubItem,\n scheduleCloseSubItem,\n closeActiveSubItem,\n isSubItemOpen,\n isSubItemExiting,\n } = useSelectSubMenuContext();\n const { itemChildren, subMenu } = parseSelectSubItemChildren(children);\n\n if (!subMenu) {\n throw new Error(\"SelectSubItem requires a SelectSubMenu child.\");\n }\n\n const subItemId = useId();\n const subMenuId = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n const side = sideProp ?? subMenu.side;\n const sideOffset = sideOffsetProp ?? subMenu.sideOffset;\n const portalled = portalledProp ?? subMenu.portalled;\n\n const open = isSubItemOpen(subItemId);\n const exiting = isSubItemExiting(subItemId);\n\n useEffect(() => {\n registerSubItem(subItemId, {\n getRoot: () => rootRef.current,\n getContent: () => contentRef.current,\n });\n return () => unregisterSubItem(subItemId);\n }, [registerSubItem, subItemId, unregisterSubItem]);\n\n const handleOpen = useCallback(() => {\n if (disabled) return;\n openSubItem(subItemId);\n }, [disabled, openSubItem, subItemId]);\n\n const handlePointerLeave = useCallback(\n (event: { relatedTarget: EventTarget | null }) => {\n scheduleCloseSubItem(subItemId, event.relatedTarget);\n },\n [scheduleCloseSubItem, subItemId]\n );\n\n const isPeople = layout === \"people\";\n const isTitle = layout === \"title\";\n const isFormLeading =\n itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\n const showTrailingFunction =\n showFunctionIcon &&\n layout !== \"checked\" &&\n itemFunction !== \"form-radio\" &&\n itemFunction !== \"form-checkbox\";\n\n const textLevel = isTitle ? \"caption\" : \"text\";\n\n const textContent = isPeople ? (\n <span className=\"aviala-select-item__content\">\n <span className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}>\n {itemChildren}\n </span>\n {subtitle != null && subtitle !== false ? (\n <span className={cn(\"aviala-select-item__subtitle\", typographyVariants({ level: \"caption\" }))}>\n {subtitle}\n </span>\n ) : null}\n </span>\n ) : (\n <span className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}>\n {itemChildren}\n </span>\n );\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n scheduleCloseSubItem(subItemId, event.relatedTarget);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === \"ArrowRight\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleOpen();\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n closeActiveSubItem();\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n closeActiveSubItem();\n }\n };\n\n const itemRow = (\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\"aviala-select-item aviala-select-sub-item\", className)}\n data-layout={layout !== \"default\" ? layout : undefined}\n data-function={itemFunction !== \"action\" ? itemFunction : undefined}\n data-state={open ? \"open\" : undefined}\n data-highlighted={open ? \"\" : undefined}\n data-disabled={disabled ? \"\" : undefined}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? subMenuId : undefined}\n onFocus={handleOpen}\n onBlur={handleTriggerBlur}\n onKeyDown={handleKeyDown}\n >\n {isFormLeading && itemFunction === \"form-radio\" ? <SelectItemFormRadio /> : null}\n {isFormLeading && itemFunction === \"form-checkbox\" ? (\n <SelectItemFormCheckbox />\n ) : null}\n\n {showLeftIcon && leftIcon ? renderItemIcon(leftIcon, leftIconLevel) : null}\n\n {isPeople ? (avatar ?? <SelectItemDefaultAvatar />) : null}\n\n {textContent}\n\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\n\n {showRightIcon && rightIcon ? renderItemIcon(rightIcon, leftIconLevel) : null}\n\n {showMoreFunction ? (\n <span className=\"aviala-select-item__more\">\n {moreAction ?? (\n <Link level=\"text\" href=\"#\" onClick={(event) => event.preventDefault()}>\n Text\n </Link>\n )}\n </span>\n ) : null}\n\n {renderFunctionSlot(itemFunction, layout, showTrailingFunction, icon)}\n </button>\n );\n\n const flyout = (\n <PopoverPrimitive.Content\n ref={contentRef}\n id={subMenuId}\n role=\"menu\"\n className={cn(\"aviala-select-content aviala-select-sub-content\", subMenu.className)}\n side={side}\n align=\"center\"\n sideOffset={sideOffset}\n avoidCollisions\n collisionPadding={8}\n data-exiting={exiting ? \"true\" : undefined}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onPointerEnter={handleOpen}\n onPointerLeave={handlePointerLeave}\n onPointerDownOutside={(event) => event.preventDefault()}\n >\n <div className=\"aviala-select-viewport aviala-select-sub-content__viewport\">\n {wrapUngroupedSelectItems(subMenu.children)}\n </div>\n </PopoverPrimitive.Content>\n );\n\n return (\n <PopoverPrimitive.Root open={open} modal={false}>\n <div\n ref={(node) => {\n rootRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className=\"aviala-select-sub-item__root\"\n onPointerEnter={handleOpen}\n onPointerLeave={handlePointerLeave}\n >\n <PopoverPrimitive.Anchor asChild>{itemRow}</PopoverPrimitive.Anchor>\n {portalled ? <PopoverPrimitive.Portal>{flyout}</PopoverPrimitive.Portal> : flyout}\n </div>\n </PopoverPrimitive.Root>\n );\n }\n);\nSelectSubItem.displayName = \"SelectSubItem\";\n\n/** People layout convenience alias — same as `<SelectSubItem layout=\"people\" … />`. */\nexport type SelectSubItemPeopleProps = Omit<SelectSubItemProps, \"layout\">;\n\nexport const SelectSubItemPeople = forwardRef<HTMLDivElement, SelectSubItemPeopleProps>(\n (props, ref) => <SelectSubItem ref={ref} layout=\"people\" {...props} />\n);\nSelectSubItemPeople.displayName = \"SelectSubItemPeople\";\n\n/** People layout convenience alias — same as `<SelectItem layout=\"people\" … />`. */\nexport type SelectItemPeopleProps = Omit<SelectItemProps, \"layout\">;\n\nexport const SelectItemPeople = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n SelectItemPeopleProps\n>((props, ref) => <SelectItem ref={ref} layout=\"people\" {...props} />);\nSelectItemPeople.displayName = \"SelectItemPeople\";\n\nexport type SelectSeparatorProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>;\n\nexport const SelectSeparator = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"aviala-select-separator\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\n/** Convenience wrapper matching Figma Select Menu Item Group */\nexport type SelectItemGroupProps = {\n label?: ReactNode;\n showDivider?: boolean;\n children: ReactNode;\n className?: string;\n};\n\nexport function SelectItemGroup({\n label,\n showDivider = false,\n children,\n className,\n}: SelectItemGroupProps) {\n return (\n <SelectGroup className={cn(\"aviala-select-group\", className)}>\n {label ? <SelectLabel>{label}</SelectLabel> : null}\n <div className=\"aviala-select-group__slot\">{children}</div>\n {showDivider ? <SelectSeparator /> : null}\n </SelectGroup>\n );\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport type { IconLevel } from \"@aviala-design/icons\";\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { cn } from \"../lib/utils\";\nimport { typographyVariants } from \"./typography\";\n\n/** Figma Components → Basic Input → Link */\nexport type LinkLevel = \"caption\" | \"text\";\nexport type LinkMode = \"noBackground\" | \"noBackgroundCustom\";\n\nconst levelStyles = {\n caption: {\n className: typographyVariants({ level: \"caption\" }),\n iconBox: \"h-5\",\n },\n text: {\n className: typographyVariants({ level: \"text\" }),\n iconBox: \"h-6\",\n },\n} as const;\n\nfunction renderIcon(\n node: ReactNode,\n level: LinkLevel\n): ReactNode {\n if (!node) return null;\n const { iconBox } = levelStyles[level];\n const iconLevel: IconLevel = level;\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"relative inline-flex shrink-0 items-center justify-center\",\n iconBox\n )}\n >\n {content}\n </span>\n );\n}\n\nexport type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"disabled\"> & {\n level?: LinkLevel;\n mode?: LinkMode;\n iconOnly?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n asChild?: boolean;\n disabled?: boolean;\n};\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n className,\n level = \"caption\",\n mode = \"noBackground\",\n iconOnly: iconOnlyProp,\n leftIcon,\n rightIcon,\n children,\n asChild = false,\n disabled,\n ...props\n },\n ref\n ) => {\n const iconOnly =\n iconOnlyProp ?? (!!(leftIcon ?? rightIcon) && !children);\n const resolvedLevel = level ?? \"caption\";\n const Comp = asChild ? Slot : \"a\";\n\n const sharedClassName = cn(\n \"aviala-link aviala-focus-ring\",\n iconOnly ? \"aviala-link--icon-only\" : undefined,\n className\n );\n const { href, onClick, tabIndex, ...restProps } = props;\n const handleClick = (e: MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n if (asChild) {\n return (\n <Comp\n className={sharedClassName}\n data-mode={mode}\n data-disabled={disabled ? \"true\" : undefined}\n ref={ref}\n aria-disabled={disabled || undefined}\n {...restProps}\n href={disabled ? undefined : href}\n tabIndex={disabled ? -1 : tabIndex}\n onClick={handleClick}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n className={sharedClassName}\n data-mode={mode}\n data-disabled={disabled ? \"true\" : undefined}\n ref={ref}\n aria-disabled={disabled || undefined}\n {...restProps}\n href={disabled ? undefined : href}\n tabIndex={disabled ? -1 : tabIndex}\n onClick={handleClick}\n >\n {renderIcon(leftIcon ?? (iconOnly ? rightIcon : undefined), resolvedLevel)}\n {!iconOnly && children !== undefined && children !== null && (\n <span\n className={cn(\n \"aviala-link__label relative shrink-0\",\n levelStyles[resolvedLevel].className\n )}\n >\n {children}\n </span>\n )}\n {!iconOnly && renderIcon(rightIcon, resolvedLevel)}\n </Comp>\n );\n }\n);\nLink.displayName = \"Link\";\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 { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Information Display → Avata (305:7013) */\nexport type AvatarLevel =\n | \"display\"\n | \"headline1\"\n | \"headline2\"\n | \"title\"\n | \"subtitle\"\n | \"text\";\n\nexport type AvatarContent = \"text\" | \"picture\" | \"icon\";\n\nconst avatarVariants = cva(\"aviala-avatar\", {\n variants: {\n level: {\n display: \"aviala-avatar--level-display\",\n headline1: \"aviala-avatar--level-headline1\",\n headline2: \"aviala-avatar--level-headline2\",\n title: \"aviala-avatar--level-title\",\n subtitle: \"aviala-avatar--level-subtitle\",\n text: \"aviala-avatar--level-text\",\n },\n content: {\n text: \"aviala-avatar--content-text\",\n picture: \"aviala-avatar--content-picture\",\n icon: \"aviala-avatar--content-icon\",\n },\n lineHeightFix: {\n true: \"aviala-avatar--line-height-fix\",\n false: \"\",\n },\n },\n defaultVariants: {\n level: \"text\",\n content: \"text\",\n lineHeightFix: true,\n },\n});\n\nconst AVATAR_TEXT_LEVEL: Record<AvatarLevel, TypographyLevel> = {\n display: \"subtitle\",\n headline1: \"text\",\n headline2: \"caption\",\n title: \"caption\",\n subtitle: \"caption\",\n text: \"caption\",\n};\n\n/** Inner icon sizes aligned to --size-* (rem) so they track root font-size. */\nconst AVATAR_ICON_SIZE: Record<AvatarLevel, string> = {\n display: \"var(--size-middle, 1rem)\",\n headline1: \"var(--size-regular, 0.875rem)\",\n headline2: \"var(--size-small, 0.75rem)\",\n title: \"var(--size-small, 0.75rem)\",\n subtitle: \"var(--size-tiny, 0.625rem)\",\n text: \"0.5rem\",\n};\n\nfunction renderAvatarIcon(node: ReactNode, level: AvatarLevel): ReactNode {\n if (!node) return null;\n const size = AVATAR_ICON_SIZE[level];\n if (isValidElement(node) && typeof node.type !== \"string\") {\n return cloneElement(\n node as ReactElement<{ width?: number | string; height?: number | string; className?: string }>,\n {\n width: size,\n height: size,\n className: cn((node as ReactElement<{ className?: string }>).props.className, \"shrink-0\"),\n }\n );\n }\n return node;\n}\n\nexport type AvatarProps = HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof avatarVariants> & {\n /** Initials / text content when `content=\"text\"` */\n children?: ReactNode;\n /** Image URL when `content=\"picture\"` */\n src?: string;\n alt?: string;\n /** Icon node when `content=\"icon\"` */\n icon?: ReactNode;\n imgProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\">;\n };\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n className,\n level = \"text\",\n content = \"text\",\n lineHeightFix = true,\n children,\n src,\n alt = \"\",\n icon,\n imgProps,\n ...props\n },\n ref\n ) => {\n const resolvedLevel = level ?? \"text\";\n const resolvedContent = content ?? \"text\";\n\n return (\n <span\n ref={ref}\n className={cn(\n avatarVariants({\n level: resolvedLevel,\n content: resolvedContent,\n lineHeightFix: lineHeightFix ?? true,\n }),\n className\n )}\n data-level={resolvedLevel}\n data-content={resolvedContent}\n data-line-height-fix={lineHeightFix ? \"true\" : \"false\"}\n {...props}\n >\n <span className=\"aviala-avatar__surface\">\n {resolvedContent === \"picture\" && src ? (\n <img\n className=\"aviala-avatar__image\"\n src={src}\n alt={alt}\n {...imgProps}\n />\n ) : null}\n {resolvedContent === \"icon\" ? (\n <span className=\"aviala-avatar__icon\" aria-hidden>\n {renderAvatarIcon(icon, resolvedLevel)}\n </span>\n ) : null}\n {resolvedContent === \"text\" ? (\n <Typography\n level={AVATAR_TEXT_LEVEL[resolvedLevel]}\n as=\"span\"\n className=\"aviala-avatar__text\"\n >\n {children}\n </Typography>\n ) : null}\n </span>\n </span>\n );\n }\n);\nAvatar.displayName = \"Avatar\";\n","import { resolveIconSizeToken, SymbolWrong } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Information Display → Tag (617:55892) */\nexport type TagLevel = \"caption\" | \"text\";\nexport type TagContent = \"text\" | \"people\";\nexport type TagLineHeightFix = \"text\" | \"subtitle\" | \"off\";\n\nconst tagVariants = cva(\"aviala-tag\", {\n variants: {\n level: {\n caption: \"aviala-tag--level-caption\",\n text: \"aviala-tag--level-text\",\n },\n content: {\n text: \"aviala-tag--content-text\",\n people: \"aviala-tag--content-people\",\n },\n lineHeightFix: {\n text: \"aviala-tag--lhf-text\",\n subtitle: \"aviala-tag--lhf-subtitle\",\n off: \"aviala-tag--lhf-off\",\n },\n },\n defaultVariants: {\n level: \"caption\",\n content: \"text\",\n lineHeightFix: \"text\",\n },\n});\n\nfunction resolveLineHeightFix(\n level: TagLevel,\n lineHeightFix: boolean | TagLineHeightFix | undefined\n): TagLineHeightFix {\n if (lineHeightFix === false || lineHeightFix === \"off\") return \"off\";\n if (lineHeightFix === \"subtitle\") return \"subtitle\";\n if (lineHeightFix === \"text\" || lineHeightFix === true) {\n return level === \"text\" ? \"subtitle\" : \"text\";\n }\n return level === \"text\" ? \"subtitle\" : \"text\";\n}\n\nfunction iconSizeForLevel(level: TagLevel): string {\n /* Caption tags use text-level glyphs; text tags use the bigger text slot. */\n return level === \"caption\"\n ? resolveIconSizeToken(\"text\")\n : resolveIconSizeToken(\"text\", true);\n}\n\nfunction renderTagIcon(node: ReactNode, level: TagLevel): ReactNode {\n if (!node) return null;\n const size = iconSizeForLevel(level);\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(\n node as ReactElement<{\n width?: number | string;\n height?: number | string;\n className?: string;\n }>,\n {\n width: size,\n height: size,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n }\n )\n : node;\n\n return (\n <span className=\"aviala-tag__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nexport type TagProps = HTMLAttributes<HTMLSpanElement> &\n Omit<VariantProps<typeof tagVariants>, \"lineHeightFix\"> & {\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n /** People content — avatar image or initials */\n avatar?: ReactNode;\n avatarSrc?: string;\n avatarText?: ReactNode;\n closable?: boolean;\n onClose?: (event: MouseEvent<HTMLButtonElement>) => void;\n closeLabel?: string;\n lineHeightFix?: boolean | TagLineHeightFix;\n };\n\nexport type TagCloseProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const TagClose = forwardRef<HTMLButtonElement, TagCloseProps>(\n ({ className, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-tag__close aviala-focus-ring\", className)}\n {...props}\n >\n {children ?? <SymbolWrong aria-hidden width={14} height={14} />}\n </button>\n )\n);\nTagClose.displayName = \"TagClose\";\n\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n (\n {\n className,\n children,\n leftIcon,\n rightIcon,\n level = \"caption\",\n content = \"text\",\n disabled = false,\n avatar,\n avatarSrc,\n avatarText,\n closable = false,\n onClose,\n closeLabel = \"Remove\",\n lineHeightFix,\n ...props\n },\n ref\n ) => {\n const resolvedLevel = level ?? \"caption\";\n const resolvedContent = content ?? \"text\";\n const resolvedLhf = resolveLineHeightFix(resolvedLevel, lineHeightFix);\n const typographyLevel: TypographyLevel = resolvedLevel;\n\n const peopleAvatar =\n avatar ??\n (avatarSrc ? (\n <Avatar level=\"text\" content=\"picture\" src={avatarSrc} lineHeightFix={false} />\n ) : (\n <Avatar level=\"text\" content=\"text\" lineHeightFix={false}>\n {avatarText ?? (typeof children === \"string\" ? children.charAt(0) : \"?\")}\n </Avatar>\n ));\n\n return (\n <span\n ref={ref}\n className={cn(\n tagVariants({\n level: resolvedLevel,\n content: resolvedContent,\n lineHeightFix: resolvedLhf,\n }),\n className\n )}\n data-level={resolvedLevel}\n data-content={resolvedContent}\n data-disabled={disabled ? \"true\" : undefined}\n data-line-height-fix={resolvedLhf}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {resolvedContent === \"people\" ? (\n <span className=\"aviala-tag__avatar\">{peopleAvatar}</span>\n ) : (\n renderTagIcon(leftIcon, resolvedLevel)\n )}\n <Typography\n level={typographyLevel}\n as=\"span\"\n className=\"aviala-tag__text whitespace-nowrap\"\n >\n {children}\n </Typography>\n {resolvedContent === \"text\" ? renderTagIcon(rightIcon, resolvedLevel) : null}\n {closable ? (\n <TagClose\n aria-label={closeLabel}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) return;\n onClose?.(event);\n }}\n />\n ) : null}\n </span>\n );\n }\n);\nTag.displayName = \"Tag\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Response And Feedback → Progress (589:55818) */\nexport type ProgressType = \"default\" | \"success\" | \"fail\";\nexport type ProgressSize = \"default\" | \"big\";\nexport type ProgressShape = \"bar\" | \"ring\";\n\nconst progressVariants = cva(\"aviala-progress\", {\n variants: {\n type: {\n default: \"aviala-progress--type-default\",\n success: \"aviala-progress--type-success\",\n fail: \"aviala-progress--type-fail\",\n },\n size: {\n default: \"aviala-progress--size-default\",\n big: \"aviala-progress--size-big\",\n },\n shape: {\n bar: \"aviala-progress--shape-bar\",\n ring: \"aviala-progress--shape-ring\",\n },\n },\n defaultVariants: {\n type: \"default\",\n size: \"default\",\n shape: \"bar\",\n },\n});\n\nfunction clampPercent(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(100, Math.max(0, value));\n}\n\nexport type ProgressProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof progressVariants> & {\n /** 0–100 */\n value?: number;\n /** Show percent label (bar shape only) */\n showLabel?: boolean;\n label?: string;\n };\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n type = \"default\",\n size = \"default\",\n shape = \"bar\",\n value = 0,\n showLabel = true,\n label,\n ...props\n },\n ref\n ) => {\n const percent = clampPercent(value ?? 0);\n const resolvedType = type ?? \"default\";\n const resolvedSize = size ?? \"default\";\n const resolvedShape = shape ?? \"bar\";\n const displayLabel = label ?? `${Math.round(percent)}%`;\n /* Figma ring sizes: default 16px / big 24px (--progress-ring-size) */\n const diameter = resolvedSize === \"big\" ? 24 : 16;\n const radius = diameter / 2;\n const stroke = 2;\n const normalizedRadius = radius - stroke;\n const circumference = normalizedRadius * 2 * Math.PI;\n const strokeDashoffset = circumference - (percent / 100) * circumference;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={props[\"aria-label\"] ?? displayLabel}\n className={cn(\n progressVariants({\n type: resolvedType,\n size: resolvedSize,\n shape: resolvedShape,\n }),\n className\n )}\n data-type={resolvedType}\n data-size={resolvedSize}\n data-shape={resolvedShape}\n {...props}\n >\n {resolvedShape === \"bar\" ? (\n <>\n <div className=\"aviala-progress__track\">\n <div\n className=\"aviala-progress__fill\"\n style={{ width: `${percent}%` }}\n />\n </div>\n {showLabel ? (\n <Typography\n level=\"caption\"\n content=\"number\"\n as=\"span\"\n className=\"aviala-progress__label\"\n >\n {displayLabel}\n </Typography>\n ) : null}\n </>\n ) : (\n <svg\n className=\"aviala-progress__ring\"\n width={radius * 2}\n height={radius * 2}\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\n aria-hidden\n >\n <circle\n className=\"aviala-progress__ring-track\"\n cx={radius}\n cy={radius}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"aviala-progress__ring-fill\"\n cx={radius}\n cy={radius}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={`${circumference} ${circumference}`}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${radius} ${radius})`}\n />\n </svg>\n )}\n </div>\n );\n }\n);\nProgress.displayName = \"Progress\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → System Composition → Scroll (301:6312) */\nexport type ScrollSize = \"default\" | \"small\";\nexport type ScrollOrientation = \"vertical\" | \"horizontal\";\n\nconst scrollVariants = cva(\"aviala-scroll\", {\n variants: {\n size: {\n default: \"aviala-scroll--size-default\",\n small: \"aviala-scroll--size-small\",\n },\n orientation: {\n vertical: \"aviala-scroll--orientation-vertical\",\n horizontal: \"aviala-scroll--orientation-horizontal\",\n },\n },\n defaultVariants: {\n size: \"default\",\n orientation: \"vertical\",\n },\n});\n\nexport type ScrollProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof scrollVariants> & {\n children?: ReactNode;\n };\n\n/**\n * Scrollable region with Aviala-styled scrollbar (track + thumb).\n * Figma documents the thumb/track chrome; this wraps content with that chrome.\n */\nexport const Scroll = forwardRef<HTMLDivElement, ScrollProps>(\n (\n {\n className,\n size = \"default\",\n orientation = \"vertical\",\n children,\n ...props\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n scrollVariants({ size: size ?? \"default\", orientation: orientation ?? \"vertical\" }),\n className\n )}\n data-size={size ?? \"default\"}\n data-orientation={orientation ?? \"vertical\"}\n {...props}\n >\n {children}\n </div>\n )\n);\nScroll.displayName = \"Scroll\";\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { SymbolRight } from \"@aviala-design/icons\";\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 → Checkbox */\nexport type CheckboxGroupDirection = \"vertical\" | \"horizontal\";\n\nexport type CheckboxProps = ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n /** Figma Checkbox `Round` */\n round?: boolean;\n};\n\nexport const Checkbox = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, round = false, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\"aviala-checkbox aviala-focus-ring\", className)}\n data-round={round ? \"true\" : undefined}\n {...props}\n >\n <span aria-hidden className=\"aviala-checkbox__surface\" />\n <CheckboxPrimitive.Indicator className=\"aviala-checkbox__indicator\">\n <SymbolRight\n className=\"aviala-checkbox__indicator-icon aviala-checkbox__indicator-icon--check\"\n thickness=\"Bold\"\n width={12}\n height={12}\n aria-hidden\n />\n <span\n aria-hidden\n className=\"aviala-checkbox__indeterminate-mark aviala-checkbox__indicator-icon--indeterminate\"\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport type CheckboxGroupProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Figma Checkbox Input Group `Direction` */\n direction?: CheckboxGroupDirection;\n};\n\nexport const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n ({ className, direction = \"vertical\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"aviala-checkbox-group\", className)}\n data-direction={direction}\n {...props}\n />\n )\n);\nCheckboxGroup.displayName = \"CheckboxGroup\";\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-checkbox-input__icon\">{content}</span>;\n}\n\nexport type CheckboxInputProps = Omit<CheckboxProps, \"children\"> & {\n /** Figma Typeface primary line */\n title: ReactNode;\n /** Figma Typeface caption line */\n description?: ReactNode;\n icon?: ReactNode;\n};\n\nexport const CheckboxInput = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxInputProps\n>(\n (\n {\n className,\n title,\n description,\n icon,\n disabled,\n id,\n ...props\n },\n ref\n ) => (\n <label\n htmlFor={id}\n className={cn(\"aviala-checkbox-input\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n >\n <Checkbox ref={ref} id={id} disabled={disabled} {...props} />\n {renderIcon(icon)}\n <TypefacePair\n className=\"aviala-checkbox-input__content min-w-0 flex-1\"\n title={title}\n description={description}\n />\n </label>\n )\n);\nCheckboxInput.displayName = \"CheckboxInput\";\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 aviala-focus-ring\", 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 aviala-focus-ring\",\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\";\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → System Composition → Anchor */\nexport type AnchorIndentLevel = 0 | 1 | 2 | 3;\n\nexport type AnchorProps = HTMLAttributes<HTMLElement> & {\n as?: \"nav\" | \"div\";\n};\n\nexport const Anchor = forwardRef<HTMLElement, AnchorProps>(\n ({ className, as: Tag = \"nav\", ...props }, ref) => (\n <Tag ref={ref as never} className={cn(\"aviala-anchor\", className)} {...props} />\n )\n);\nAnchor.displayName = \"Anchor\";\n\nexport type AnchorItemProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"children\"> & {\n activated?: boolean;\n indentLevel?: AnchorIndentLevel;\n asChild?: boolean;\n children: ReactNode;\n};\n\nexport const AnchorItem = forwardRef<HTMLAnchorElement, AnchorItemProps>(\n (\n {\n className,\n activated = false,\n indentLevel = 0,\n asChild = false,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n ref={ref}\n className={cn(\"aviala-anchor-item aviala-focus-ring\", className)}\n data-activated={activated ? \"true\" : \"false\"}\n data-indent={String(indentLevel)}\n {...props}\n >\n <span className=\"aviala-anchor-item__rail\" aria-hidden />\n <span className=\"aviala-anchor-item__content\">\n <Typography level=\"text\" as=\"span\" className=\"aviala-anchor-item__label\">\n {children}\n </Typography>\n </span>\n </Comp>\n );\n }\n);\nAnchorItem.displayName = \"AnchorItem\";\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;\n/** Max finger-follow offset while stuck on an item (px), keeps drag feeling tactile. */\nconst SEGMENTATOR_STICKY_OFFSET_PX = 10;\n/** If a drag update jumps farther than this, animate instead of teleporting. */\nconst SEGMENTATOR_DRAG_ANIMATE_JUMP_PX = 6;\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};\n\ntype SegmentatorPointerDrag = {\n pointerId: number;\n startX: number;\n moved: boolean;\n fallback: SegmentatorThumbMetrics;\n previewValue: string | null;\n lastMetrics?: SegmentatorThumbMetrics;\n /** While settling onto a new item, keep writes animated so live offset can't cut the snap. */\n snapUntil?: number;\n cleanupWindowListeners?: () => void;\n};\n\n/** Geometry (x/y/width/height) is always written imperatively — React must not own those. */\nfunction buildThumbStyle(): CSSProperties {\n return {\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n zIndex: 0,\n transformOrigin: \"center center\",\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 getItemCenterX(item: HTMLButtonElement): number {\n const rect = item.getBoundingClientRect();\n return rect.left + rect.width / 2;\n}\n\n/**\n * Map finger X onto the nearest item, with a small tactile offset while stuck.\n * Crossing items is a discrete jump in metrics — callers should animate those.\n * Edge limits only apply on the first/last item (outward side); mid-track sticky\n * offset stays free.\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 item = findItemAtClientX(items, clientX);\n if (!item) {\n return { metrics: fallback, item: null };\n }\n\n const base = measureItemThumbMetrics(item, group);\n const center = getItemCenterX(item);\n const rawOffset = Math.max(\n -SEGMENTATOR_STICKY_OFFSET_PX,\n Math.min(SEGMENTATOR_STICKY_OFFSET_PX, clientX - center)\n );\n let x = base.x + rawOffset;\n\n const isFirst = item === items[0];\n const isLast = item === items[items.length - 1];\n // Only block dragging past the outer edge of the end items.\n if (isFirst && x < base.x) x = base.x;\n if (isLast && x > base.x) x = base.x;\n\n return {\n metrics: {\n ...base,\n x,\n },\n item,\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 } else {\n el.removeAttribute(\"data-instant\");\n }\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 // Flush the instant paint, then leave data-instant on only if the caller\n // keeps it (drag session). Default: clear so settle animations can run.\n void el.offsetWidth;\n el.removeAttribute(\"data-instant\");\n }\n}\n\n/** Drag-follow write: keep transitions off for the whole gesture (no per-frame toggle). */\nfunction applyThumbMetricsLive(el: HTMLSpanElement, metrics: SegmentatorThumbMetrics) {\n el.setAttribute(\"data-instant\", \"true\");\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}\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 /** Imperative-only write — safe during drag (avoids React style thrashing / flicker). */\n const writeThumbMetrics = useCallback(\n (metrics: SegmentatorThumbMetrics, instant = false) => {\n metricsRef.current = metrics;\n const el = thumbElRef.current;\n if (el) applyThumbMetrics(el, metrics, instant);\n },\n []\n );\n\n /** Continuous drag follow — transitions stay disabled until gesture ends. */\n const writeThumbMetricsLive = useCallback((metrics: SegmentatorThumbMetrics) => {\n metricsRef.current = metrics;\n const el = thumbElRef.current;\n if (el) applyThumbMetricsLive(el, metrics);\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 // Press/drag owns the thumb via writeThumbMetrics — do not sync from React here.\n if (dragState.pressing || dragState.active) return;\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 (prefersReducedMotion) {\n syncThumb(next, true);\n return;\n }\n\n if (metricsApproxEqual(startMetrics, next)) {\n // Already targeting this geometry (e.g. press started the slide). Do not\n // re-apply with data-instant — that forced the in-flight transition to finish\n // the moment the finger lifted.\n metricsRef.current = next;\n setThumb(next);\n return;\n }\n\n syncThumb(next, false);\n }, [selectedValue, measureThumb, syncThumb, dragState.active, dragState.pressing]);\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, writeThumbMetrics, writeThumbMetricsLive };\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 /** When true, the group fills its container and items split the width equally. */\n equalWidth?: 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 equalWidth = 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 });\n const { thumb, onThumbRef, writeThumbMetrics, writeThumbMetricsLive } =\n useSegmentatorThumb(groupRef, currentValue, layoutKey, dragState);\n\n const resetPointerInteraction = useCallback(() => {\n pointerDragRef.current?.cleanupWindowListeners?.();\n pointerDragRef.current = null;\n setDragPreviewValue(null);\n setDragState({ pressing: false, active: false });\n const thumbEl = groupRef.current?.querySelector<HTMLSpanElement>(\n \".aviala-segmentator-thumb\"\n );\n if (thumbEl) {\n thumbEl.removeAttribute(\"data-pressing\");\n // Leave data-instant cleared so the settle animation can run.\n thumbEl.removeAttribute(\"data-instant\");\n }\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 } else if (drag.previewValue && drag.previewValue !== currentValue) {\n consumeClickRef.current = true;\n setValue(drag.previewValue);\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(\n group,\n items,\n clientX,\n fallback\n );\n const nextPreviewValue = item?.dataset.value ?? drag.previewValue;\n const itemChanged =\n !!nextPreviewValue && nextPreviewValue !== drag.previewValue;\n\n if (itemChanged) {\n triggerSegmentatorHaptic(\"select\");\n // Hold animated writes long enough for the cross-item settle to play.\n drag.snapUntil = performance.now() + 540;\n if (nextPreviewValue) {\n setDragPreviewValue(nextPreviewValue);\n }\n }\n drag.previewValue = nextPreviewValue;\n\n const prev = drag.lastMetrics;\n const jumpDistance = prev\n ? Math.abs(metrics.x - prev.x) + Math.abs(metrics.width - prev.width)\n : Number.POSITIVE_INFINITY;\n const settling = performance.now() < (drag.snapUntil ?? 0);\n const shouldAnimate =\n itemChanged || settling || jumpDistance >= SEGMENTATOR_DRAG_ANIMATE_JUMP_PX;\n\n drag.lastMetrics = metrics;\n\n if (shouldAnimate) {\n writeThumbMetrics(metrics, false);\n } else {\n writeThumbMetricsLive(metrics);\n }\n return item;\n },\n [writeThumbMetrics, writeThumbMetricsLive]\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) {\n return;\n }\n\n if (!drag.moved) {\n drag.moved = true;\n setDragState({ pressing: true, active: true });\n }\n event.preventDefault();\n updateDragThumb(event.clientX);\n };\n\n const onPointerEnd = (event: PointerEvent) => {\n if (event.pointerId !== pointerId) return;\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 = measureItemThumbMetrics(pressedItem, group);\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 lastMetrics: metrics,\n };\n pointerDragRef.current.cleanupWindowListeners = attachWindowDragListeners(\n event.pointerId\n );\n\n // Animate onto the pressed item (including when it wasn't selected), and\n // let press-scale transition run — do not use live/instant writes here.\n writeThumbMetrics(metrics, false);\n setDragPreviewValue(pressedValue);\n setDragState({ pressing: true, active: false });\n group.setPointerCapture(event.pointerId);\n };\n\n const thumbStyle: CSSProperties | undefined = thumb ? buildThumbStyle() : 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=\"radiogroup\"\n {...props}\n className={cn(\"aviala-segmentator-group\", className)}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-equal-width={equalWidth ? \"true\" : undefined}\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 onLostPointerCapture={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 aviala-focus-ring\", 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 <span className=\"aviala-segmentator-item__content\">\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 </span>\n </button>\n );\n }\n);\nSegmentatorItem.displayName = \"SegmentatorItem\";\n","import { SymbolInformationCircle, SymbolWrongCircle } from \"@aviala-design/icons\";\nimport { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → System Composition → Form (527:57461 / 527:57641) */\nexport type FormFieldDirection = \"vertical\" | \"horizontal\";\n\nexport type FormFieldProps = HTMLAttributes<HTMLDivElement> & {\n label?: ReactNode;\n htmlFor?: string;\n description?: ReactNode;\n error?: ReactNode;\n info?: ReactNode;\n /** Optional Alert / Feedback under the control */\n alert?: ReactNode;\n required?: boolean;\n /** Figma `Direction` — vertical stacks label above control; horizontal places label beside */\n direction?: FormFieldDirection;\n};\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(\n (\n {\n className,\n label,\n htmlFor,\n description,\n error,\n info,\n alert,\n required,\n direction = \"vertical\",\n children,\n ...props\n },\n ref\n ) => {\n const reactId = useId();\n const labelId = `${reactId}-label`;\n const hasLabel = label != null && label !== \"\";\n const labelNode =\n hasLabel || description ? (\n htmlFor ? (\n <label htmlFor={htmlFor} className=\"aviala-form__label aviala-form__label--control\">\n <Typeface\n id={labelId}\n content=\"textCaption\"\n primary={\n hasLabel ? (\n <>\n {label}\n {required ? (\n <span className=\"aviala-form__required\" aria-hidden>\n *\n </span>\n ) : null}\n </>\n ) : undefined\n }\n secondary={description}\n />\n </label>\n ) : (\n <Typeface\n id={labelId}\n className=\"aviala-form__label\"\n content=\"textCaption\"\n primary={\n hasLabel ? (\n <>\n {label}\n {required ? (\n <span className=\"aviala-form__required\" aria-hidden>\n *\n </span>\n ) : null}\n </>\n ) : undefined\n }\n secondary={description}\n />\n )\n ) : null;\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-form\", className)}\n data-direction={direction}\n aria-labelledby={hasLabel ? labelId : undefined}\n {...props}\n >\n {labelNode}\n <div className=\"aviala-form__content\">\n {children}\n {error ? (\n <div className=\"aviala-form__message aviala-form__message--error\" role=\"alert\">\n <SymbolWrongCircle\n className=\"aviala-form__message-icon\"\n width={14}\n height={14}\n aria-hidden\n />\n <Typography level=\"caption\" as=\"p\" className=\"aviala-form__message-text\">\n {error}\n </Typography>\n </div>\n ) : null}\n {info ? (\n <div className=\"aviala-form__message aviala-form__message--info\">\n <SymbolInformationCircle\n className=\"aviala-form__message-icon\"\n width={14}\n height={14}\n aria-hidden\n />\n <Typography level=\"caption\" as=\"p\" className=\"aviala-form__message-text\">\n {info}\n </Typography>\n </div>\n ) : null}\n {alert ? <div className=\"aviala-form__alert\">{alert}</div> : null}\n </div>\n </div>\n );\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, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\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\n/** Figma Components → System Composition → Form Group (530:65349) */\nexport type FieldsetProps = HTMLAttributes<HTMLFieldSetElement> & {\n /** @deprecated Prefer `title` — kept for API compatibility */\n legend?: ReactNode;\n /** Form Group title (Typeface Text+Title primary) */\n title?: ReactNode;\n /** Form Group subtitle (Typeface Text+Title secondary) */\n description?: ReactNode;\n /** Optional footer info row above actions */\n info?: ReactNode;\n /** Optional Alert / Feedback above actions */\n feedback?: ReactNode;\n /** Action slot — typically a Button row */\n actions?: ReactNode;\n};\n\nexport const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(\n (\n {\n className,\n legend,\n title,\n description,\n info,\n feedback,\n actions,\n children,\n ...props\n },\n ref\n ) => {\n const reactId = useId();\n const headingId = `${reactId}-heading`;\n const heading = title ?? legend;\n const hasHeading = heading != null && heading !== \"\";\n const hasAction = info != null || feedback != null || actions != null;\n\n return (\n <fieldset\n ref={ref}\n className={cn(\"aviala-form-group\", className)}\n aria-labelledby={hasHeading ? headingId : undefined}\n {...props}\n >\n {hasHeading || description ? (\n <Typeface\n id={headingId}\n className=\"aviala-form-group__header\"\n content=\"textTitle\"\n primary={heading}\n secondary={description}\n />\n ) : null}\n\n <div className=\"aviala-form-group__slot\">{children}</div>\n\n {hasAction ? (\n <div className=\"aviala-form-group__action\">\n {info ? <div className=\"aviala-form-group__info\">{info}</div> : null}\n {feedback ? <div className=\"aviala-form-group__feedback\">{feedback}</div> : null}\n {actions ? <div className=\"aviala-form-group__actions\">{actions}</div> : null}\n </div>\n ) : null}\n </fieldset>\n );\n }\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 aviala-focus-ring\", 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 aviala-focus-ring\"\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\";\n\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\n\nexport type HSVA = { h: number; s: number; v: number; a: number };\n\nexport const DEFAULT_COLOR = \"#FF0000\";\n\nexport function parseColor(value?: string): Colord {\n const c = colord(value ?? DEFAULT_COLOR);\n return c.isValid() ? c : colord(DEFAULT_COLOR);\n}\n\nexport function toHsva(value: string): HSVA {\n const { h, s, v, a } = parseColor(value).toHsv();\n return { h, s, v, a: a ?? 1 };\n}\n\nexport function fromHsva(hsva: HSVA): string {\n return colord({ h: hsva.h, s: hsva.s, v: hsva.v, a: hsva.a }).toHex();\n}\n\nexport function toHexInput(value: string, includeAlpha = false): string {\n const hex = parseColor(value).toHex().replace(/^#/, \"\").toUpperCase();\n return includeAlpha ? hex : hex.slice(0, 6);\n}\n\nexport function fromHexInput(input: string, alpha = 1): string {\n const cleaned = input.replace(/^#/, \"\").trim();\n if (!cleaned) return parseColor(DEFAULT_COLOR).alpha(alpha).toHex();\n const base = cleaned.slice(0, 6);\n const alphaHex = cleaned.length >= 8 ? cleaned.slice(6, 8) : undefined;\n let c = parseColor(`#${base}`);\n if (alphaHex) {\n c = c.alpha(parseInt(alphaHex, 16) / 255);\n } else if (alpha < 1) {\n c = c.alpha(alpha);\n }\n return c.toHex();\n}\n\nexport function alphaPercent(value: string): number {\n return Math.round(parseColor(value).alpha() * 100);\n}\n\nexport function setAlphaPercent(value: string, percent: number): string {\n const clamped = Math.min(100, Math.max(0, percent));\n return parseColor(value)\n .alpha(clamped / 100)\n .toHex();\n}\n\nexport function toRgbComponents(value: string) {\n const { r, g, b } = parseColor(value).toRgb();\n return { r, g, b };\n}\n\nexport function fromRgbComponents(r: number, g: number, b: number, alpha = 1): string {\n return colord({ r, g, b, a: alpha }).toHex();\n}\n\nexport function toHslComponents(value: string) {\n const { h, s, l } = parseColor(value).toHsl();\n return { h: Math.round(h), s: Math.round(s), l: Math.round(l) };\n}\n\nexport function fromHslComponents(h: number, s: number, l: number, alpha = 1): string {\n return colord({ h, s, l, a: alpha }).toHex();\n}\n\nexport function pureHueHex(h: number): string {\n return colord({ h, s: 100, v: 100 }).toHex();\n}\n\nexport function solidHex(value: string): string {\n const { r, g, b } = parseColor(value).toRgb();\n return colord({ r, g, b, a: 1 }).toHex();\n}\n\nexport function hueGradientStops(): string {\n return [0, 60, 120, 180, 240, 300, 360]\n .map((h) => colord({ h, s: 100, v: 100 }).toHex())\n .join(\", \");\n}\n\nexport function clamp01(n: number): number {\n return Math.min(1, Math.max(0, n));\n}\n","import { createContext, useContext } from \"react\";\nimport type { ColorFormat, HSVA } from \"./color-utils\";\nimport type { ColorPickerChangeMeta } from \"./use-color-picker-state\";\n\nexport type ColorPickerContextValue = {\n value: string;\n setValue: (value: string, meta?: ColorPickerChangeMeta) => void;\n format: ColorFormat;\n setFormat: (format: ColorFormat) => void;\n hsva: HSVA;\n setHsva: (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => void;\n open: boolean;\n disabled?: boolean;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets: number;\n};\n\nexport const ColorPickerContext = createContext<ColorPickerContextValue | null>(null);\n\nexport function useColorPickerContext() {\n const ctx = useContext(ColorPickerContext);\n if (!ctx) {\n throw new Error(\"ColorPicker compound components must be used within <ColorPicker>\");\n }\n return ctx;\n}\n\nexport function useOptionalColorPickerContext() {\n return useContext(ColorPickerContext);\n}\n","import { useCallback, type PointerEvent, type RefObject } from \"react\";\nimport { clamp01 } from \"./color-utils\";\n\nexport function usePointerDrag<T extends HTMLElement>(\n ref: RefObject<T | null>,\n onMove: (x: number, y: number) => void,\n enabled = true\n) {\n const updateFromEvent = useCallback(\n (clientX: number, clientY: number) => {\n if (!ref.current) return;\n const rect = ref.current.getBoundingClientRect();\n const x = clamp01((clientX - rect.left) / rect.width);\n const y = clamp01((clientY - rect.top) / rect.height);\n onMove(x, y);\n },\n [onMove, ref]\n );\n\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !ref.current) return;\n event.preventDefault();\n ref.current.setPointerCapture(event.pointerId);\n updateFromEvent(event.clientX, event.clientY);\n },\n [enabled, ref, updateFromEvent]\n );\n\n const handlePointerMove = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !ref.current || !ref.current.hasPointerCapture(event.pointerId)) return;\n updateFromEvent(event.clientX, event.clientY);\n },\n [enabled, ref, updateFromEvent]\n );\n\n return { handlePointerDown, handlePointerMove };\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n DEFAULT_COLOR,\n fromHsva,\n parseColor,\n toHsva,\n type ColorFormat,\n type HSVA,\n} from \"./color-utils\";\n\nexport type ColorPickerChangeMeta = { source?: string };\n\nexport type UseColorPickerStateOptions = {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, meta?: ColorPickerChangeMeta) => void;\n format?: ColorFormat;\n defaultFormat?: ColorFormat;\n onFormatChange?: (format: ColorFormat) => void;\n};\n\nexport function useColorPickerState({\n value: controlledValue,\n defaultValue = DEFAULT_COLOR,\n onChange,\n format: controlledFormat,\n defaultFormat = \"hex\",\n onFormatChange,\n}: UseColorPickerStateOptions) {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const [uncontrolledFormat, setUncontrolledFormat] = useState<ColorFormat>(defaultFormat);\n\n const value = controlledValue ?? uncontrolledValue;\n const format = controlledFormat ?? uncontrolledFormat;\n\n const setValue = useCallback(\n (next: string, meta?: ColorPickerChangeMeta) => {\n const normalized = parseColor(next).toHex();\n if (controlledValue === undefined) {\n setUncontrolledValue(normalized);\n }\n onChange?.(normalized, meta);\n },\n [controlledValue, onChange]\n );\n\n const hsva = useMemo(() => toHsva(value), [value]);\n\n const setHsva = useCallback(\n (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => {\n setValue(fromHsva({ ...hsva, ...partial }), meta);\n },\n [hsva, setValue]\n );\n\n const setFormat = useCallback(\n (next: ColorFormat) => {\n if (controlledFormat === undefined) {\n setUncontrolledFormat(next);\n }\n onFormatChange?.(next);\n },\n [controlledFormat, onFormatChange]\n );\n\n return { value, format, setValue, hsva, setHsva, setFormat };\n}\n","import { EditColorPicker } from \"@aviala-design/icons\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Badge } from \"../badge\";\nimport { Button } from \"../button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectItemGroup,\n SelectTrigger,\n SelectValue,\n} from \"../select\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { typographyVariants } from \"../typography\";\nimport {\n alphaPercent,\n fromHexInput,\n fromHslComponents,\n fromRgbComponents,\n parseColor,\n setAlphaPercent,\n toHexInput,\n toHslComponents,\n toRgbComponents,\n type ColorFormat,\n} from \"./color-utils\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\n\ndeclare global {\n interface Window {\n EyeDropper?: new () => { open: () => Promise<{ sRGBHex: string }> };\n }\n}\n\nexport type ColorPickerInputsProps = {\n className?: string;\n disabled?: boolean;\n showEyedropper?: boolean;\n} & Pick<UseColorPickerStateOptions, \"value\" | \"defaultValue\" | \"onChange\" | \"format\" | \"onFormatChange\">;\n\nexport function ColorPickerInputs({\n className,\n disabled,\n showEyedropper = true,\n value: valueProp,\n defaultValue,\n onChange,\n format: formatProp,\n onFormatChange,\n}: ColorPickerInputsProps) {\n const ctx = useOptionalColorPickerContext();\n const local = useColorPickerState({\n value: ctx ? undefined : valueProp,\n defaultValue: ctx?.value ?? defaultValue,\n onChange: ctx ? undefined : onChange,\n format: ctx ? undefined : formatProp,\n onFormatChange: ctx ? undefined : onFormatChange,\n });\n\n const { value, setValue, format, setFormat, hsva } = ctx ?? local;\n const isDisabled = disabled ?? ctx?.disabled;\n const eyeDropperSupported = typeof window !== \"undefined\" && \"EyeDropper\" in window;\n\n const [hexDraft, setHexDraft] = useState(() => toHexInput(value));\n const [alphaDraft, setAlphaDraft] = useState(() => String(alphaPercent(value)));\n const [componentDraft, setComponentDraft] = useState(() => buildComponentDraft(value, format));\n\n useEffect(() => {\n setHexDraft(toHexInput(value));\n setAlphaDraft(String(alphaPercent(value)));\n setComponentDraft(buildComponentDraft(value, format));\n }, [value, format]);\n\n const commitHex = useCallback(() => {\n setValue(fromHexInput(hexDraft, hsva.a), { source: \"hex-input\" });\n }, [hexDraft, hsva.a, setValue]);\n\n const commitAlpha = useCallback(() => {\n const parsed = Number.parseInt(alphaDraft, 10);\n if (Number.isNaN(parsed)) return;\n setValue(setAlphaPercent(value, parsed), { source: \"alpha-input\" });\n }, [alphaDraft, setValue, value]);\n\n const commitComponents = useCallback(() => {\n const parts = componentDraft.split(/[\\s,]+/).filter(Boolean).map(Number);\n if (parts.some((n) => Number.isNaN(n))) return;\n if (format === \"rgb\") {\n setValue(fromRgbComponents(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, hsva.a), {\n source: \"rgb-input\",\n });\n } else if (format === \"hsl\") {\n setValue(fromHslComponents(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, hsva.a), {\n source: \"hsl-input\",\n });\n }\n }, [componentDraft, format, hsva.a, setValue]);\n\n const handleEyedropper = useCallback(async () => {\n if (!eyeDropperSupported || isDisabled) return;\n try {\n const dropper = new window.EyeDropper!();\n const result = await dropper.open();\n setValue(parseColor(result.sRGBHex).toHex(), { source: \"eyedropper\" });\n } catch {\n /* user cancelled */\n }\n }, [eyeDropperSupported, isDisabled, setValue]);\n\n return (\n <div className={cn(\"aviala-color-picker-inputs\", className)} {...spiralDebugId(\"color-picker.content.inputs\")}>\n {showEyedropper ? (\n <Button\n type=\"button\"\n mode=\"defaultCustom\"\n size=\"regular\"\n iconOnly\n disabled={isDisabled}\n aria-label=\"Pick color from screen\"\n {...spiralDebugId(\"color-picker.content.inputs.eyedropper\")}\n title={\n eyeDropperSupported\n ? \"Pick color from screen\"\n : \"EyeDropper not supported in this browser\"\n }\n onClick={handleEyedropper}\n >\n <EditColorPicker aria-hidden />\n </Button>\n ) : null}\n\n {format === \"hex\" ? (\n <div className=\"aviala-color-picker-field\">\n <span className=\"aviala-color-picker-field__badge-area\">\n <Badge style=\"normal\">#</Badge>\n </span>\n <input\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\n value={hexDraft}\n disabled={isDisabled}\n aria-label=\"Hex color\"\n onChange={(e) => setHexDraft(e.target.value.toUpperCase())}\n onBlur={commitHex}\n onKeyDown={(e) => e.key === \"Enter\" && commitHex()}\n />\n </div>\n ) : (\n <div className=\"aviala-color-picker-field\">\n <input\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\n value={componentDraft}\n disabled={isDisabled}\n aria-label={format === \"rgb\" ? \"RGB color\" : \"HSL color\"}\n onChange={(e) => setComponentDraft(e.target.value)}\n onBlur={commitComponents}\n onKeyDown={(e) => e.key === \"Enter\" && commitComponents()}\n />\n </div>\n )}\n\n <div className=\"aviala-color-picker-field aviala-color-picker-field--alpha\">\n <input\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\n value={alphaDraft}\n disabled={isDisabled}\n aria-label=\"Opacity percent\"\n inputMode=\"numeric\"\n onChange={(e) => setAlphaDraft(e.target.value)}\n onBlur={commitAlpha}\n onKeyDown={(e) => e.key === \"Enter\" && commitAlpha()}\n />\n <span className=\"aviala-color-picker-field__badge-area\">\n <Badge style=\"normal\">%</Badge>\n </span>\n </div>\n\n <Select\n value={format}\n onValueChange={(next) => setFormat(next as ColorFormat)}\n disabled={isDisabled}\n >\n <SelectTrigger className=\"aviala-color-picker-format-select w-[76px] shrink-0\" size=\"regular\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(event) => event.preventDefault()}>\n <SelectItemGroup>\n <SelectItem value=\"hex\" itemFunction=\"radio\">\n HEX\n </SelectItem>\n <SelectItem value=\"rgb\" itemFunction=\"radio\">\n RGB\n </SelectItem>\n <SelectItem value=\"hsl\" itemFunction=\"radio\">\n HSL\n </SelectItem>\n </SelectItemGroup>\n </SelectContent>\n </Select>\n </div>\n );\n}\n\nfunction buildComponentDraft(value: string, format: ColorFormat): string {\n if (format === \"rgb\") {\n const { r, g, b } = toRgbComponents(value);\n return `${r}, ${g}, ${b}`;\n }\n if (format === \"hsl\") {\n const { h, s, l } = toHslComponents(value);\n return `${h}, ${s}, ${l}`;\n }\n return toHexInput(value);\n}\n","import { SymbolAdd } from \"@aviala-design/icons\";\nimport { Button } from \"../button\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { parseColor } from \"./color-utils\";\nimport { ColorPickButton } from \"./color-pick-button\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\n\nexport type ColorPickerPresetsProps = {\n className?: string;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets?: number;\n disabled?: boolean;\n};\n\nexport function ColorPickerPresets({\n className,\n presets: presetsProp,\n onPresetsChange: onPresetsChangeProp,\n maxPresets: maxPresetsProp,\n disabled,\n}: ColorPickerPresetsProps) {\n const ctx = useOptionalColorPickerContext();\n const presets = presetsProp ?? ctx?.presets ?? [];\n const onPresetsChange = onPresetsChangeProp ?? ctx?.onPresetsChange;\n const maxPresets = maxPresetsProp ?? ctx?.maxPresets ?? 8;\n const isDisabled = disabled ?? ctx?.disabled;\n const value = ctx?.value;\n const setValue = ctx?.setValue;\n\n const handleAdd = () => {\n if (!onPresetsChange || !value || isDisabled) return;\n const normalized = parseColor(value).toHex();\n if (presets.includes(normalized)) return;\n const next = [...presets, normalized].slice(-maxPresets);\n onPresetsChange(next);\n };\n\n return (\n <div className={cn(\"aviala-color-picker-presets\", className)} {...spiralDebugId(\"color-picker.content.presets\")}>\n <Button\n type=\"button\"\n mode=\"defaultCustom\"\n size=\"regular\"\n iconOnly\n disabled={isDisabled || !onPresetsChange || presets.length >= maxPresets}\n aria-label=\"Add current color to presets\"\n onClick={handleAdd}\n >\n <SymbolAdd aria-hidden />\n </Button>\n {presets.map((color) => (\n <ColorPickButton\n key={color}\n color={color}\n selected={value === color}\n disabled={isDisabled}\n onClick={() => setValue?.(color, { source: \"preset\" })}\n />\n ))}\n </div>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { parseColor } from \"./color-utils\";\n\nexport type ColorPickButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\"> & {\n color: string;\n selected?: boolean;\n};\n\nexport const ColorPickButton = forwardRef<HTMLButtonElement, ColorPickButtonProps>(\n ({ className, color, selected = false, style, ...props }, ref) => {\n const swatch = parseColor(color).toHex();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-color-pick-button aviala-focus-ring\", className)}\n data-selected={selected ? \"true\" : undefined}\n style={style}\n {...props}\n >\n <span\n className=\"aviala-color-pick-button__swatch\"\n style={{ backgroundColor: swatch }}\n aria-hidden\n />\n </button>\n );\n }\n);\nColorPickButton.displayName = \"ColorPickButton\";\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 aviala-focus-ring\"\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\";\nimport { ColorPickerArea } from \"./color-picker-area\";\nimport { ColorPickerInputs } from \"./color-picker-inputs\";\nimport { ColorPickerPresets } from \"./color-picker-presets\";\nimport { ColorPickerSlider } from \"./color-picker-slider\";\nimport { ColorPickerContext } from \"./color-picker-context\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\n\nexport type ColorPickerPanelProps = UseColorPickerStateOptions & {\n className?: string;\n disabled?: boolean;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets?: number;\n showEyedropper?: boolean;\n showPresets?: boolean;\n};\n\nexport function ColorPickerPanel({\n className,\n disabled,\n presets,\n onPresetsChange,\n maxPresets = 8,\n showEyedropper = true,\n showPresets = true,\n value,\n defaultValue,\n onChange,\n format,\n defaultFormat,\n onFormatChange,\n}: ColorPickerPanelProps) {\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: true,\n disabled,\n presets,\n onPresetsChange,\n maxPresets,\n };\n\n return (\n <ColorPickerContext.Provider value={contextValue}>\n <div className={cn(\"aviala-color-picker-panel\", className)}>\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 </ColorPickerContext.Provider>\n );\n}\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n DirectionArrowDownLight,\n DirectionArrowRightLight,\n SymbolRight,\n type AvialaIconProps,\n type IconLevel,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Badge } from \"./badge\";\nimport { typographyVariants } from \"./typography\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { iconLevelCssVarStyle, iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\n\n/** Figma Components → Information Collect → Cascader Input */\nexport type CascaderSize = \"regular\" | \"big\";\n\n/** Figma Cascader Menu Item `Function` variant */\nexport type CascaderItemFunction =\n | \"simple\"\n | \"checkbox\"\n | \"form-checkbox\"\n | \"radio\"\n | \"form-radio\"\n | \"search\"\n | \"custom\";\n\n/** Figma Cascader Menu Item `Type` variant */\nexport type CascaderItemLayout = \"default\" | \"title\" | \"custom\";\n\nexport type CascaderOption = {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n children?: CascaderOption[];\n};\n\ntype CascaderContextValue = {\n open: boolean;\n disabled?: boolean;\n size: CascaderSize;\n activePath: string[];\n selectedPath: string[];\n highlightedValue: string | null;\n setHighlightedValue: (value: string | null) => void;\n expandTo: (path: string[]) => void;\n selectPath: (path: string[], closeOnLeaf?: boolean) => void;\n getOptionAtPath: (path: string[]) => CascaderOption | undefined;\n getOptionsAtPath: (path: string[]) => CascaderOption[];\n isPathSelected: (path: string[]) => boolean;\n isPathExpanded: (path: string[]) => boolean;\n};\n\nconst CascaderContext = createContext<CascaderContextValue | null>(null);\n\nfunction useCascaderContext() {\n const context = useContext(CascaderContext);\n if (!context) {\n throw new Error(\"Cascader compound components must be used within Cascader.\");\n }\n return context;\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-cascader-trigger__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 renderItemIcon(\n node: ReactNode,\n iconLevel: IconLevel = \"text\",\n debugId?: string\n): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-cascader-item__icon\",\n iconLevel === \"caption\" && \"aviala-cascader-item__icon--sm\"\n )}\n style={iconSlotCssVarStyle(node, \"--cascader-item-icon-size\", iconLevel, true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction renderBadgeSlot(node: ReactNode): ReactNode {\n if (node == null || node === false) return null;\n\n return (\n <span className=\"aviala-cascader-item__badge\">\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\n </span>\n );\n}\n\nfunction CascaderItemFormRadio() {\n return (\n <span className=\"aviala-cascader-item__form-radio\" aria-hidden>\n <span className=\"aviala-cascader-item__form-radio-surface\" />\n <span className=\"aviala-cascader-item__form-radio-indicator\" />\n </span>\n );\n}\n\nfunction CascaderItemFormCheckbox() {\n return (\n <span className=\"aviala-cascader-item__form-checkbox\" aria-hidden>\n <SymbolRight\n className=\"aviala-cascader-item__form-checkbox-icon\"\n thickness=\"Bold\"\n width={12}\n height={12}\n aria-hidden\n />\n </span>\n );\n}\n\nfunction CascaderItemTrailingRadio({ selected }: { selected: boolean }) {\n if (!selected) return null;\n\n return (\n <span className=\"aviala-cascader-item__trailing-radio\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </span>\n );\n}\n\nfunction CascaderItemTrailingCheckbox({ selected }: { selected: boolean }) {\n if (!selected) return null;\n\n return (\n <span className=\"aviala-cascader-item__trailing-checkbox\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </span>\n );\n}\n\nfunction renderFunctionSlot(\n itemFunction: CascaderItemFunction,\n layout: CascaderItemLayout,\n showFunctionIcon: boolean,\n hasChildren: boolean,\n selected: boolean,\n icon?: ReactNode\n): ReactNode {\n if (!showFunctionIcon || layout === \"title\") return null;\n\n if (icon !== undefined) {\n return <span className=\"aviala-cascader-item__function\">{icon}</span>;\n }\n\n switch (itemFunction) {\n case \"radio\":\n return (\n <span className=\"aviala-cascader-item__function\">\n <CascaderItemTrailingRadio selected={selected} />\n </span>\n );\n case \"checkbox\":\n return (\n <span className=\"aviala-cascader-item__function\">\n <CascaderItemTrailingCheckbox selected={selected} />\n </span>\n );\n case \"simple\":\n default:\n return (\n <span className=\"aviala-cascader-item__function\">\n {selected ? (\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n ) : null}\n {hasChildren ? (\n <DirectionArrowRightLight level=\"text\" biggerSize aria-hidden />\n ) : null}\n </span>\n );\n }\n}\n\nfunction findOptionPath(\n options: CascaderOption[],\n targetPath: string[]\n): CascaderOption | undefined {\n let currentOptions = options;\n let current: CascaderOption | undefined;\n\n for (const segment of targetPath) {\n current = currentOptions.find((option) => option.value === segment);\n if (!current) return undefined;\n currentOptions = current.children ?? [];\n }\n\n return current;\n}\n\nfunction getOptionsAtPath(options: CascaderOption[], path: string[]): CascaderOption[] {\n if (path.length === 0) return options;\n const node = findOptionPath(options, path);\n return node?.children ?? [];\n}\n\nfunction getLabelsForPath(options: CascaderOption[], path: string[]): ReactNode[] {\n const labels: ReactNode[] = [];\n let currentOptions = options;\n\n for (const segment of path) {\n const option = currentOptions.find((item) => item.value === segment);\n if (!option) break;\n labels.push(option.label);\n currentOptions = option.children ?? [];\n }\n\n return labels;\n}\n\n/** True when `path` is a prefix of `selectedPath` (item lies on the current selection). */\nfunction isPathOnSelectedPath(path: string[], selectedPath: string[]) {\n if (path.length === 0 || path.length > selectedPath.length) return false;\n return path.every((segment, index) => segment === selectedPath[index]);\n}\n\nexport type CascaderProps = {\n children: ReactNode;\n options?: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[], selectedOptions: CascaderOption[]) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: CascaderSize;\n /** Select parent nodes — Figma allows any-level selection (default true). */\n changeOnSelect?: boolean;\n className?: string;\n};\n\n/**\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down (outside click, item select, trigger toggle)\n * and Escape must still dismiss on the first interaction.\n */\nexport function Cascader({\n children,\n options = [],\n value: valueProp,\n defaultValue,\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n size = \"regular\",\n changeOnSelect = true,\n className,\n}: CascaderProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue ?? []);\n const [activePath, setActivePath] = useState<string[]>(defaultValue ?? []);\n const [highlightedValue, setHighlightedValue] = useState<string | null>(null);\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n const isOpenControlled = openProp !== undefined;\n const isValueControlled = valueProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n const selectedPath = isValueControlled ? valueProp ?? [] : internalValue;\n const wasOpenRef = useRef(open);\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n // Only seed expansion when the panel opens. While open, `selectPath` /\n // `expandTo` own `activePath` — re-syncing on every `selectedPath` change\n // collapses the next column (desktop recovers via hover; touch cannot).\n useEffect(() => {\n const justOpened = open && !wasOpenRef.current;\n wasOpenRef.current = open;\n if (!justOpened) return;\n\n if (selectedPath.length === 0) {\n setActivePath([]);\n return;\n }\n\n const selectedOption = findOptionPath(options, selectedPath);\n if (selectedOption?.children?.length) {\n setActivePath(selectedPath);\n return;\n }\n\n setActivePath(selectedPath.slice(0, -1));\n }, [open, options, selectedPath]);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n return;\n }\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isOpenControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isOpenControlled, onOpenChange]\n );\n\n const commitValue = useCallback(\n (path: string[]) => {\n const selectedOptions = path\n .map((_, index) => findOptionPath(options, path.slice(0, index + 1)))\n .filter((option): option is CascaderOption => option !== undefined);\n\n if (!isValueControlled) {\n setInternalValue(path);\n }\n onValueChange?.(path, selectedOptions);\n },\n [isValueControlled, onValueChange, options]\n );\n\n const expandTo = useCallback((path: string[]) => {\n setActivePath(path);\n }, []);\n\n const selectPath = useCallback(\n (path: string[], closeOnLeaf = true) => {\n const option = findOptionPath(options, path);\n const hasChildren = Boolean(option?.children?.length);\n\n if (!changeOnSelect && hasChildren) {\n expandTo(path);\n return;\n }\n\n commitValue(path);\n\n if (hasChildren) {\n expandTo(path);\n return;\n }\n\n if (closeOnLeaf) {\n handleOpenChange(false);\n }\n },\n [changeOnSelect, commitValue, expandTo, handleOpenChange, options]\n );\n\n const contextValue = useMemo<CascaderContextValue>(\n () => ({\n open,\n disabled,\n size,\n activePath,\n selectedPath,\n highlightedValue,\n setHighlightedValue,\n expandTo,\n selectPath,\n getOptionAtPath: (path) => findOptionPath(options, path),\n getOptionsAtPath: (path) => getOptionsAtPath(options, path),\n isPathSelected: (path) => isPathOnSelectedPath(path, selectedPath),\n isPathExpanded: (path) => {\n const expandedPrefix = activePath.length > 0 ? activePath : selectedPath.slice(0, -1);\n return (\n path.length <= expandedPrefix.length &&\n path.every((segment, index) => segment === expandedPrefix[index])\n );\n },\n }),\n [\n activePath,\n disabled,\n expandTo,\n highlightedValue,\n open,\n options,\n selectPath,\n selectedPath,\n size,\n ]\n );\n\n return (\n <CascaderContext.Provider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)} {...spiralDebugId(\"cascader\")}>{children}</div>\n </PopoverPrimitive.Root>\n </CascaderContext.Provider>\n );\n}\n\nexport type CascaderTriggerProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Trigger> & {\n size?: CascaderSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n expandIcon?: ReactNode;\n placeholder?: string;\n error?: boolean;\n /** Override display when using manual composition without `options`. */\n displayValue?: ReactNode;\n separator?: string;\n className?: string;\n};\n\nexport const CascaderTrigger = forwardRef<HTMLButtonElement, CascaderTriggerProps>(\n (\n {\n className,\n size: sizeProp,\n allRound = false,\n leftIcon,\n rightIcon,\n expandIcon,\n placeholder = \"Text\",\n error = false,\n displayValue,\n separator = \"/\",\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const { open, disabled: disabledContext, size: sizeContext, selectedPath, getOptionAtPath } =\n useCascaderContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n\n const labels = selectedPath\n .map((_, index) => getOptionAtPath(selectedPath.slice(0, index + 1))?.label)\n .filter((label): label is ReactNode => label != null && label !== false);\n\n const resolvedDisplay =\n displayValue ??\n (labels.length > 0\n ? labels.map((label, index) => (\n <span key={`${selectedPath[index]}-${index}`}>\n {index > 0 ? separator : null}\n {label}\n </span>\n ))\n : null);\n\n const hasValue = resolvedDisplay != null && resolvedDisplay !== false;\n\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-cascader-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n {...spiralDebugId(\"cascader.trigger\")}\n {...props}\n >\n {renderSlotIcon(leftIcon, \"cascader.trigger.icon-left\")}\n <span className=\"aviala-cascader-trigger__field\" {...spiralDebugId(\"cascader.trigger.value\")}>\n <span\n className={cn(\"aviala-cascader-trigger__value\", typographyVariants({ level: \"text\" }))}\n data-placeholder={hasValue ? undefined : \"true\"}\n >\n {hasValue ? resolvedDisplay : placeholder}\n </span>\n </span>\n {renderSlotIcon(rightIcon, \"cascader.trigger.icon-right\")}\n <span\n className=\"aviala-cascader-trigger__expand\"\n aria-hidden\n style={\n expandIcon\n ? iconSlotCssVarStyle(expandIcon, \"--input-slot-icon-size\", \"text\", true)\n : iconLevelCssVarStyle(\"text\", true, \"--input-slot-icon-size\")\n }\n {...spiralDebugId(\"cascader.trigger.expand\")}\n >\n {expandIcon ?? (\n <DirectionArrowDownLight level=\"text\" biggerSize aria-hidden />\n )}\n </span>\n </button>\n </PopoverPrimitive.Trigger>\n );\n }\n);\nCascaderTrigger.displayName = \"CascaderTrigger\";\n\nexport type CascaderContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n portalled?: boolean;\n className?: string;\n};\n\nexport const CascaderContent = forwardRef<HTMLDivElement, CascaderContentProps>(\n (\n {\n className,\n children,\n sideOffset = 8,\n align = \"start\",\n portalled = true,\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n className={cn(\"aviala-cascader-content\", className)}\n sideOffset={sideOffset}\n align={align}\n {...spiralDebugId(\"cascader.content\")}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nCascaderContent.displayName = \"CascaderContent\";\n\nexport type CascaderMenuProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/** Figma Cascader Menu — horizontal column container (`348:13915`). */\nexport const CascaderMenu = forwardRef<HTMLDivElement, CascaderMenuProps>(\n ({ children, className }, ref) => (\n <div ref={ref} className={cn(\"aviala-cascader-menu\", className)}>\n {children}\n </div>\n )\n);\nCascaderMenu.displayName = \"CascaderMenu\";\n\nexport type CascaderColumnProps = {\n children: ReactNode;\n className?: string;\n /** Slide + fade in when a new cascade column appears (options-driven menus set this automatically). */\n animateEnter?: boolean;\n /** Slide + fade out before unmount when a cascade column is removed (options-driven menus set this automatically). */\n animateExit?: boolean;\n /** Frozen layout slot for exit overlay columns (keeps flex width stable while animating out). */\n exitLayout?: { left: number; width: number };\n};\n\n/** Figma Cascader Menu Item Group Group — single cascade column (`345:20543`). */\nexport const CascaderColumn = forwardRef<HTMLDivElement, CascaderColumnProps>(\n ({ children, className, animateEnter, animateExit, exitLayout }, ref) => {\n const animate = animateExit ? \"exit\" : animateEnter ? \"enter\" : undefined;\n const exitStyle =\n animateExit && exitLayout\n ? ({\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: exitLayout.left,\n width: exitLayout.width,\n zIndex: 0,\n } as const)\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-cascader-column\", className)}\n data-animate={animate}\n style={exitStyle}\n >\n <div className=\"aviala-cascader-column__surface\" data-animate={animate}>\n {children}\n </div>\n </div>\n );\n }\n);\nCascaderColumn.displayName = \"CascaderColumn\";\n\nexport type CascaderItemGroupProps = {\n label?: ReactNode;\n showDivider?: boolean;\n children: ReactNode;\n className?: string;\n};\n\n/** Figma Cascader Menu Item Group (`345:16552`). */\nexport function CascaderItemGroup({\n label,\n showDivider = true,\n children,\n className,\n}: CascaderItemGroupProps) {\n return (\n <div className={cn(\"aviala-cascader-group\", className)}>\n {label ? (\n <div className={cn(\"aviala-cascader-label\", typographyVariants({ level: \"caption\" }))}>\n {label}\n </div>\n ) : null}\n <div className=\"aviala-cascader-group__slot\">{children}</div>\n {showDivider ? <div className=\"aviala-cascader-separator\" role=\"separator\" /> : null}\n </div>\n );\n}\n\nexport type CascaderItemProps = {\n value: string;\n pathPrefix?: string[];\n itemFunction?: CascaderItemFunction;\n layout?: CascaderItemLayout;\n leftIcon?: ReactNode;\n showLeftIcon?: boolean;\n rightIcon?: ReactNode;\n showRightIcon?: boolean;\n badge?: ReactNode;\n showBadge?: boolean;\n showFunctionIcon?: boolean;\n icon?: ReactNode;\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n hasChildren?: boolean;\n};\n\n/** Figma Cascader Menu Item (`345:12487`). */\nexport const CascaderItem = forwardRef<HTMLButtonElement, CascaderItemProps>(\n (\n {\n value,\n pathPrefix = [],\n itemFunction = \"simple\",\n layout = \"default\",\n leftIcon,\n showLeftIcon = false,\n rightIcon,\n showRightIcon = false,\n badge,\n showBadge = false,\n showFunctionIcon = true,\n icon,\n disabled = false,\n children,\n className,\n hasChildren: hasChildrenProp,\n },\n ref\n ) => {\n const {\n highlightedValue,\n setHighlightedValue,\n expandTo,\n selectPath,\n getOptionAtPath,\n isPathSelected,\n isPathExpanded,\n } = useCascaderContext();\n\n const path = [...pathPrefix, value];\n const option = getOptionAtPath(path);\n const hasChildren = hasChildrenProp ?? Boolean(option?.children?.length);\n const isTitle = layout === \"title\";\n const isSelected = isPathSelected(path);\n const isExpanded = isPathExpanded(path);\n const isHighlighted = highlightedValue === value;\n const isDisabled = disabled || option?.disabled;\n\n const isFormLeading = itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\n const showTrailingFunction =\n showFunctionIcon &&\n !isTitle &&\n itemFunction !== \"form-radio\" &&\n itemFunction !== \"form-checkbox\";\n\n const handleClick = () => {\n if (isTitle || isDisabled) return;\n if (hasChildren) {\n selectPath(path, false);\n return;\n }\n selectPath(path, true);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (isTitle || isDisabled) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleClick();\n }\n if (event.key === \"ArrowRight\" && hasChildren) {\n event.preventDefault();\n expandTo(path);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role={isTitle ? \"presentation\" : \"option\"}\n aria-selected={isSelected}\n aria-expanded={hasChildren ? isExpanded : undefined}\n disabled={isDisabled}\n className={cn(\"aviala-cascader-item aviala-focus-ring\", className)}\n data-layout={layout !== \"default\" ? layout : undefined}\n data-function={itemFunction !== \"simple\" ? itemFunction : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n {...spiralDebugId(\"cascader.content.item\")}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => {\n if (!isTitle) setHighlightedValue(value);\n if (hasChildren) expandTo(pathPrefix.concat(value));\n }}\n onMouseLeave={(event) => {\n if (isTitle) return;\n const next = event.relatedTarget;\n if (next instanceof Node && event.currentTarget.contains(next)) return;\n if (highlightedValue === value) setHighlightedValue(null);\n }}\n onFocus={() => {\n if (!isTitle) setHighlightedValue(value);\n }}\n >\n {isFormLeading && itemFunction === \"form-radio\" ? <CascaderItemFormRadio /> : null}\n {isFormLeading && itemFunction === \"form-checkbox\" ? <CascaderItemFormCheckbox /> : null}\n\n {showLeftIcon && leftIcon\n ? renderItemIcon(leftIcon, leftIconLevel, \"cascader.content.item.icon-left\")\n : null}\n\n <span className={cn(\"aviala-cascader-item__text\", typographyVariants({ level: isTitle ? \"caption\" : \"text\" }))}>\n {children ?? option?.label}\n </span>\n\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\n {showRightIcon && rightIcon ? renderItemIcon(rightIcon, leftIconLevel) : null}\n\n {renderFunctionSlot(\n itemFunction,\n layout,\n showTrailingFunction,\n hasChildren,\n isSelected,\n icon\n )}\n </button>\n );\n }\n);\nCascaderItem.displayName = \"CascaderItem\";\n\nexport type CascaderOptionsMenuProps = {\n className?: string;\n};\n\nconst COLUMN_ANIMATION_MS = 150;\n\ntype RenderColumn = {\n pathPrefix: string[];\n key: string;\n animateEnter: boolean;\n animateExit: boolean;\n exitLayout?: { left: number; width: number };\n};\n\nfunction toColumnKey(pathPrefix: string[]) {\n return pathPrefix.join(\"/\") || \"root\";\n}\n\nfunction prefersReducedMotion() {\n return (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\n/** Renders cascade columns from `Cascader` `options` prop. */\nexport function CascaderOptionsMenu({ className }: CascaderOptionsMenuProps) {\n const { activePath, selectedPath, getOptionsAtPath, open } = useCascaderContext();\n const prevColumnCountRef = useRef<number | null>(null);\n const prevColumnPathsRef = useRef<string[][]>([]);\n const lastPathChangeAtRef = useRef(0);\n const menuRef = useRef<HTMLDivElement>(null);\n const columnElRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n const [columns, setColumns] = useState<RenderColumn[]>([]);\n\n const columnPaths = useMemo(() => {\n const paths: string[][] = [[]];\n const expansion = activePath.length > 0 ? activePath : selectedPath.slice(0, -1);\n\n for (let index = 0; index < expansion.length; index += 1) {\n const prefix = expansion.slice(0, index + 1);\n const nextOptions = getOptionsAtPath(prefix);\n if (nextOptions.length > 0) {\n paths.push(prefix);\n }\n }\n\n return paths;\n }, [activePath, getOptionsAtPath, selectedPath]);\n\n useLayoutEffect(() => {\n if (!open) {\n prevColumnCountRef.current = null;\n prevColumnPathsRef.current = [];\n lastPathChangeAtRef.current = 0;\n setColumns([]);\n return;\n }\n\n const prevPaths = prevColumnPathsRef.current;\n const prevCount = prevColumnCountRef.current;\n const nextKeys = new Set(columnPaths.map(toColumnKey));\n const now = performance.now();\n const isRapid = now - lastPathChangeAtRef.current < COLUMN_ANIMATION_MS;\n lastPathChangeAtRef.current = now;\n\n const skipAnimations = prefersReducedMotion() || isRapid;\n const isExpanding = prevCount !== null && columnPaths.length > prevCount;\n const enterFromIndex = isExpanding ? prevCount : columnPaths.length;\n\n const isLateralReplace =\n prevPaths.length > 0 &&\n columnPaths.length === prevPaths.length &&\n columnPaths.some(\n (pathPrefix, index) => toColumnKey(pathPrefix) !== toColumnKey(prevPaths[index]!)\n );\n\n const removedCount = prevPaths.filter(\n (pathPrefix) => !nextKeys.has(toColumnKey(pathPrefix))\n ).length;\n\n const allowExitAnimation = !skipAnimations && !isLateralReplace && removedCount === 1;\n\n const measureExitLayout = (key: string) => {\n const columnEl = columnElRefs.current.get(key);\n const menuEl = menuRef.current;\n if (!columnEl || !menuEl) return undefined;\n\n const columnRect = columnEl.getBoundingClientRect();\n const menuRect = menuEl.getBoundingClientRect();\n return {\n left: columnRect.left - menuRect.left,\n width: columnRect.width,\n };\n };\n\n setColumns((prev) => {\n const settled = prev.filter((column) => !column.animateExit);\n const prevByKey = new Map(settled.map((column) => [column.key, column]));\n\n const active: RenderColumn[] = columnPaths.map((pathPrefix, index) => {\n const key = toColumnKey(pathPrefix);\n const existing = prevByKey.get(key);\n\n return {\n pathPrefix,\n key,\n animateEnter: skipAnimations ? false : existing ? false : index >= enterFromIndex,\n animateExit: false,\n };\n });\n\n if (settled.length === 0) {\n return active;\n }\n\n const toExit: RenderColumn[] = allowExitAnimation\n ? settled\n .filter((column) => !nextKeys.has(column.key))\n .flatMap((column) => {\n const exitLayout = measureExitLayout(column.key);\n if (!exitLayout) {\n return [];\n }\n\n return [\n {\n ...column,\n animateEnter: false,\n animateExit: true,\n exitLayout,\n },\n ];\n })\n : [];\n\n const activeMap = new Map(active.map((column) => [column.key, column]));\n const merged: RenderColumn[] = columnPaths.map((pathPrefix) => activeMap.get(toColumnKey(pathPrefix))!);\n\n return [...merged, ...toExit];\n });\n\n prevColumnCountRef.current = columnPaths.length;\n prevColumnPathsRef.current = columnPaths;\n }, [columnPaths, open]);\n\n useEffect(() => {\n if (!open || !columns.some((column) => column.animateExit)) {\n return undefined;\n }\n\n const timeout = window.setTimeout(() => {\n setColumns((prev) => prev.filter((column) => !column.animateExit));\n }, COLUMN_ANIMATION_MS);\n\n return () => window.clearTimeout(timeout);\n }, [columns, open]);\n\n return (\n <CascaderMenu ref={menuRef} className={className}>\n {columns.map(({ pathPrefix, key, animateEnter, animateExit, exitLayout }) => (\n <CascaderColumn\n key={key}\n ref={(element) => {\n if (element) {\n columnElRefs.current.set(key, element);\n return;\n }\n columnElRefs.current.delete(key);\n }}\n animateEnter={animateEnter}\n animateExit={animateExit}\n exitLayout={exitLayout}\n >\n <CascaderItemGroup label=\"Title\" showDivider>\n {getOptionsAtPath(pathPrefix).map((option) => (\n <CascaderItem\n key={[...pathPrefix, option.value].join(\"/\")}\n value={option.value}\n pathPrefix={pathPrefix}\n disabled={option.disabled}\n hasChildren={Boolean(option.children?.length)}\n >\n {option.label}\n </CascaderItem>\n ))}\n </CascaderItemGroup>\n </CascaderColumn>\n ))}\n </CascaderMenu>\n );\n}\n\nexport type CascaderFieldProps = Omit<CascaderProps, \"children\"> &\n Omit<CascaderTriggerProps, \"displayValue\"> & {\n contentClassName?: string;\n menuClassName?: string;\n };\n\n/** Convenience field — trigger + options-driven menu. */\nexport function CascaderField({\n options,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n size = \"regular\",\n changeOnSelect,\n className,\n contentClassName,\n menuClassName,\n allRound,\n leftIcon,\n rightIcon,\n expandIcon,\n placeholder,\n error,\n separator,\n ...triggerProps\n}: CascaderFieldProps) {\n return (\n <Cascader\n options={options}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n size={size}\n changeOnSelect={changeOnSelect}\n className={className}\n >\n <CascaderTrigger\n size={size}\n allRound={allRound}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n expandIcon={expandIcon}\n placeholder={placeholder}\n error={error}\n separator={separator}\n {...triggerProps}\n />\n <CascaderContent className={contentClassName}>\n <CascaderOptionsMenu className={menuClassName} />\n </CascaderContent>\n </Cascader>\n );\n}\n\nexport { getLabelsForPath, getOptionsAtPath, findOptionPath as getOptionAtPath };\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n DirectionArrowLeft,\n DirectionArrowRight,\n TimeAndDateClock,\n TimeAndDateDate,\n} from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { cloneAvialaIconElement } from \"../../lib/clone-aviala-icon\";\nimport { iconSlotCssVarStyle } from \"../../lib/icon-slot-sizing\";\nimport { typographyVariants } from \"../typography\";\nimport {\n DatePickerProvider,\n useDatePickerContext,\n type DatePickerMode,\n type DatePickerPanel,\n type DatePickerSize,\n type DatePickerTimeValue,\n} from \"./date-picker-context\";\nimport {\n addMonths,\n applyTimeToDate,\n formatDisplayDate,\n formatDisplayDateTime,\n formatIsoDate,\n formatMonthYear,\n formatTimeValue,\n getCalendarDays,\n getRangeSelectionPosition,\n isDateDisabled,\n isDateInRange,\n isSameDay,\n isSameMonth,\n normalizeRange,\n parseDateInput,\n parseDateRangeInput,\n startOfDay,\n WEEKDAY_LABELS,\n type DateRange,\n type RangeSelectionPosition,\n} from \"./date-utils\";\nimport {\n SegmentatorGroup,\n SegmentatorItem,\n} from \"../segmentator\";\nimport { DatePickerMonthYearWheels } from \"./date-picker-month-wheels\";\nimport { TimePickerWheels } from \"../time-picker/time-picker-wheels\";\n\nexport type { DatePickerMode, DatePickerPanel, DatePickerSize, DatePickerTimeValue } from \"./date-picker-context\";\n\ntype DatePickerBaseProps = {\n children: ReactNode;\n mode?: DatePickerMode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: DatePickerSize;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n /** Figma DatePickerLIstGroup — footer date/time Segmentator */\n enableTime?: boolean;\n timeValue?: DatePickerTimeValue;\n defaultTimeValue?: DatePickerTimeValue;\n onTimeChange?: (value: DatePickerTimeValue) => void;\n};\n\nexport type DatePickerSingleProps = DatePickerBaseProps & {\n mode?: \"single\";\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (value: Date | undefined) => void;\n};\n\nexport type DatePickerRangeProps = DatePickerBaseProps & {\n mode: \"range\";\n value?: DateRange;\n defaultValue?: DateRange;\n onValueChange?: (value: DateRange) => void;\n};\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nfunction renderSlotIcon(node: ReactNode): 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-datepicker-trigger__slot\"\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\n >\n {content}\n </span>\n );\n}\n\nfunction getInitialViewMonth(\n mode: DatePickerMode,\n singleValue?: Date,\n rangeValue?: DateRange\n): Date {\n if (mode === \"single\" && singleValue) return startOfDay(singleValue);\n if (mode === \"range\") {\n if (rangeValue?.from) return startOfDay(rangeValue.from);\n if (rangeValue?.to) return startOfDay(rangeValue.to);\n }\n return startOfDay(new Date());\n}\n\n/**\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down and Escape must still dismiss on first interaction.\n */\nexport function DatePicker(props: DatePickerProps) {\n const {\n children,\n mode = \"single\",\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n size = \"regular\",\n minDate,\n maxDate,\n className,\n enableTime = true,\n timeValue: timeValueProp,\n defaultTimeValue = { hours: 17, minutes: 0 },\n onTimeChange,\n } = props;\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [internalSingle, setInternalSingle] = useState<Date | undefined>(() =>\n mode === \"single\" ? (props as DatePickerSingleProps).defaultValue : undefined\n );\n const [internalRange, setInternalRange] = useState<DateRange>(() =>\n mode === \"range\" ? (props as DatePickerRangeProps).defaultValue ?? {} : {}\n );\n const [rangeDraftFrom, setRangeDraftFrom] = useState<Date | undefined>(undefined);\n const [activePanel, setActivePanel] = useState<DatePickerPanel>(\"date\");\n const [internalTime, setInternalTime] = useState<DatePickerTimeValue>(defaultTimeValue);\n\n const isOpenControlled = openProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n\n const timeValue =\n timeValueProp !== undefined ? timeValueProp : internalTime;\n\n const setTimeValue = useCallback(\n (next: DatePickerTimeValue) => {\n if (timeValueProp === undefined) {\n setInternalTime(next);\n }\n onTimeChange?.(next);\n\n // Keep committed Date in sync with the time wheels when a day is selected.\n if (!enableTime) return;\n if (mode === \"single\") {\n const current =\n (props as DatePickerSingleProps).value !== undefined\n ? (props as DatePickerSingleProps).value\n : internalSingle;\n if (!current) return;\n const controlled = (props as DatePickerSingleProps).value !== undefined;\n const merged = applyTimeToDate(current, next.hours, next.minutes);\n if (!controlled) {\n setInternalSingle(merged);\n }\n (props as DatePickerSingleProps).onValueChange?.(merged);\n return;\n }\n\n const currentRange =\n (props as DatePickerRangeProps).value !== undefined\n ? ((props as DatePickerRangeProps).value ?? {})\n : internalRange;\n if (!currentRange.from && !currentRange.to) return;\n const controlled = (props as DatePickerRangeProps).value !== undefined;\n const merged: DateRange = {\n from: currentRange.from\n ? applyTimeToDate(currentRange.from, next.hours, next.minutes)\n : undefined,\n to: currentRange.to\n ? applyTimeToDate(currentRange.to, next.hours, next.minutes)\n : undefined,\n };\n if (!controlled) {\n setInternalRange(merged);\n }\n (props as DatePickerRangeProps).onValueChange?.(merged);\n },\n [\n enableTime,\n internalRange,\n internalSingle,\n mode,\n onTimeChange,\n props,\n timeValueProp,\n ]\n );\n\n const singleValue =\n mode === \"single\"\n ? (props as DatePickerSingleProps).value !== undefined\n ? (props as DatePickerSingleProps).value\n : internalSingle\n : undefined;\n\n const rangeValue =\n mode === \"range\"\n ? (props as DatePickerRangeProps).value !== undefined\n ? ((props as DatePickerRangeProps).value ?? {})\n : internalRange\n : { from: rangeDraftFrom };\n\n const [viewMonth, setViewMonth] = useState(() =>\n getInitialViewMonth(mode, singleValue, mode === \"range\" ? rangeValue : undefined)\n );\n const [focusedDay, setFocusedDay] = useState<Date | null>(null);\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n setRangeDraftFrom(undefined);\n setActivePanel(\"date\");\n return;\n }\n\n setFocusedDay((current) => {\n if (current) return current;\n if (mode === \"single\" && singleValue) return startOfDay(singleValue);\n const rangeAnchor =\n mode === \"range\" ? rangeValue.from ?? rangeValue.to : undefined;\n if (rangeAnchor) return startOfDay(rangeAnchor);\n return startOfDay(new Date());\n });\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [mode, open, rangeValue.from, rangeValue.to, singleValue]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isOpenControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isOpenControlled, onOpenChange]\n );\n\n const commitSingle = useCallback(\n (next: Date | undefined) => {\n if (mode !== \"single\") return;\n const controlled = (props as DatePickerSingleProps).value !== undefined;\n if (!controlled) {\n setInternalSingle(next);\n }\n (props as DatePickerSingleProps).onValueChange?.(next);\n },\n [mode, props]\n );\n\n const commitRange = useCallback(\n (next: DateRange) => {\n if (mode !== \"range\") return;\n const controlled = (props as DatePickerRangeProps).value !== undefined;\n if (!controlled) {\n setInternalRange(next);\n }\n (props as DatePickerRangeProps).onValueChange?.(next);\n },\n [mode, props]\n );\n\n const commitTypedValue = useCallback(\n (text: string) => {\n const trimmed = text.trim();\n\n if (mode === \"single\") {\n if (!trimmed) {\n commitSingle(undefined);\n return true;\n }\n const parsed = parseDateInput(trimmed);\n if (!parsed) return false;\n if (isDateDisabled(parsed.date, minDate, maxDate)) return false;\n\n const hours = parsed.hours ?? timeValue.hours;\n const minutes = parsed.minutes ?? timeValue.minutes;\n if (enableTime && (parsed.hours != null || parsed.minutes != null)) {\n setTimeValue({ hours, minutes });\n }\n\n const next = enableTime\n ? applyTimeToDate(parsed.date, hours, minutes)\n : parsed.date;\n commitSingle(next);\n setViewMonth(new Date(next.getFullYear(), next.getMonth(), 1));\n setFocusedDay(startOfDay(next));\n return true;\n }\n\n if (!trimmed) {\n setRangeDraftFrom(undefined);\n commitRange({});\n return true;\n }\n\n const parsedRange = parseDateRangeInput(trimmed);\n if (!parsedRange) return false;\n if (parsedRange.from && isDateDisabled(parsedRange.from, minDate, maxDate)) {\n return false;\n }\n if (parsedRange.to && isDateDisabled(parsedRange.to, minDate, maxDate)) {\n return false;\n }\n\n const withTime = (date: Date) =>\n enableTime\n ? applyTimeToDate(date, timeValue.hours, timeValue.minutes)\n : date;\n\n const next: DateRange = {\n from: parsedRange.from ? withTime(parsedRange.from) : undefined,\n to: parsedRange.to ? withTime(parsedRange.to) : undefined,\n };\n setRangeDraftFrom(next.to ? undefined : next.from ? startOfDay(next.from) : undefined);\n commitRange(next);\n const anchor = next.from ?? next.to;\n if (anchor) {\n setViewMonth(new Date(anchor.getFullYear(), anchor.getMonth(), 1));\n setFocusedDay(startOfDay(anchor));\n }\n return true;\n },\n [\n commitRange,\n commitSingle,\n enableTime,\n maxDate,\n minDate,\n mode,\n setTimeValue,\n timeValue.hours,\n timeValue.minutes,\n ]\n );\n\n const selectDate = useCallback(\n (date: Date, options?: { close?: boolean; switchToTime?: boolean }) => {\n if (disabled || isDateDisabled(date, minDate, maxDate)) return;\n const day = startOfDay(date);\n setFocusedDay(day);\n\n if (!isSameMonth(day, viewMonth)) {\n setViewMonth(new Date(day.getFullYear(), day.getMonth(), 1));\n }\n\n const switchToTime = options?.switchToTime ?? enableTime;\n const shouldClose = options?.close ?? !enableTime;\n\n if (mode === \"single\") {\n const next = enableTime\n ? applyTimeToDate(day, timeValue.hours, timeValue.minutes)\n : day;\n commitSingle(next);\n if (switchToTime) {\n setActivePanel(\"time\");\n } else if (shouldClose) {\n handleOpenChange(false);\n }\n return;\n }\n\n const currentFrom = rangeDraftFrom ?? rangeValue.from;\n const currentTo = rangeValue.to;\n const withTime = (d: Date) =>\n enableTime ? applyTimeToDate(d, timeValue.hours, timeValue.minutes) : d;\n\n if (!currentFrom || (currentFrom && currentTo)) {\n setRangeDraftFrom(day);\n commitRange({ from: withTime(day), to: undefined });\n return;\n }\n\n if (isSameDay(day, currentFrom)) {\n commitRange({ from: withTime(day), to: withTime(day) });\n setRangeDraftFrom(undefined);\n if (switchToTime) {\n setActivePanel(\"time\");\n } else if (shouldClose) {\n handleOpenChange(false);\n }\n return;\n }\n\n const normalized = normalizeRange(currentFrom, day);\n commitRange({\n from: normalized.from ? withTime(normalized.from) : undefined,\n to: normalized.to ? withTime(normalized.to) : undefined,\n });\n setRangeDraftFrom(undefined);\n if (switchToTime) {\n setActivePanel(\"time\");\n } else if (shouldClose) {\n handleOpenChange(false);\n }\n },\n [\n commitRange,\n commitSingle,\n disabled,\n enableTime,\n handleOpenChange,\n maxDate,\n minDate,\n mode,\n rangeDraftFrom,\n rangeValue.from,\n rangeValue.to,\n timeValue.hours,\n timeValue.minutes,\n viewMonth,\n ]\n );\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen: handleOpenChange,\n disabled,\n size,\n mode,\n viewMonth,\n setViewMonth,\n singleValue,\n rangeValue:\n mode === \"range\"\n ? rangeDraftFrom\n ? { from: rangeDraftFrom, to: rangeValue.to }\n : rangeValue\n : rangeValue,\n selectDate,\n commitTypedValue,\n minDate,\n maxDate,\n focusedDay,\n setFocusedDay,\n enableTime,\n activePanel,\n setActivePanel,\n timeValue,\n setTimeValue,\n }),\n [\n activePanel,\n commitTypedValue,\n disabled,\n enableTime,\n focusedDay,\n handleOpenChange,\n maxDate,\n minDate,\n mode,\n open,\n rangeDraftFrom,\n rangeValue,\n selectDate,\n singleValue,\n size,\n timeValue,\n setTimeValue,\n viewMonth,\n ]\n );\n\n return (\n <DatePickerProvider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)}>{children}</div>\n </PopoverPrimitive.Root>\n </DatePickerProvider>\n );\n}\n\nexport type DatePickerTriggerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"size\" | \"onChange\"\n> & {\n size?: DatePickerSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n placeholder?: string;\n rangePlaceholder?: string;\n error?: boolean;\n displayValue?: ReactNode;\n rangeSeparator?: string;\n className?: string;\n /** When false, shows a read-only value instead of an editable input. Default true. */\n editable?: boolean;\n};\n\nfunction formatTriggerValue(\n mode: DatePickerMode,\n singleValue: Date | undefined,\n rangeValue: DateRange,\n enableTime: boolean,\n timeValue: DatePickerTimeValue,\n rangeSeparator: string\n): string | null {\n if (mode === \"single\") {\n if (!singleValue) return null;\n return enableTime\n ? formatDisplayDateTime(singleValue, timeValue.hours, timeValue.minutes)\n : formatIsoDate(singleValue);\n }\n\n if (rangeValue.from && rangeValue.to) {\n return enableTime\n ? `${formatDisplayDateTime(rangeValue.from, timeValue.hours, timeValue.minutes)}${rangeSeparator}${formatDisplayDateTime(rangeValue.to, timeValue.hours, timeValue.minutes)}`\n : `${formatIsoDate(rangeValue.from)}${rangeSeparator}${formatIsoDate(rangeValue.to)}`;\n }\n\n if (rangeValue.from) {\n return enableTime\n ? `${formatDisplayDateTime(rangeValue.from, timeValue.hours, timeValue.minutes)}${rangeSeparator}…`\n : `${formatIsoDate(rangeValue.from)}${rangeSeparator}…`;\n }\n\n return null;\n}\n\nexport const DatePickerTrigger = forwardRef<HTMLInputElement, DatePickerTriggerProps>(\n (\n {\n className,\n size: sizeProp,\n allRound = false,\n leftIcon,\n rightIcon,\n placeholder = \"YYYY-MM-DD\",\n rangePlaceholder = \"Start date - End date\",\n error = false,\n displayValue,\n rangeSeparator = \" - \",\n disabled: disabledProp,\n editable = true,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const {\n open,\n setOpen,\n disabled: disabledContext,\n size: sizeContext,\n mode,\n singleValue,\n rangeValue,\n enableTime,\n timeValue,\n commitTypedValue,\n } = useDatePickerContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n const inputRef = useRef<HTMLInputElement>(null);\n const editingRef = useRef(false);\n\n const setInputRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref]\n );\n\n const formatted =\n displayValue ??\n formatTriggerValue(\n mode,\n singleValue,\n rangeValue,\n enableTime,\n timeValue,\n rangeSeparator\n );\n\n const defaultPlaceholder = enableTime ? \"YYYY-MM-DD HH:mm\" : placeholder;\n const emptyPlaceholder = mode === \"range\" ? rangePlaceholder : defaultPlaceholder;\n const formattedText = typeof formatted === \"string\" ? formatted : null;\n const [draft, setDraft] = useState(formattedText ?? \"\");\n\n useEffect(() => {\n if (editingRef.current) return;\n setDraft(formattedText ?? \"\");\n }, [formattedText]);\n\n const commitDraft = useCallback(() => {\n const nextText = draft;\n const ok = commitTypedValue(nextText);\n if (!ok) {\n setDraft(formattedText ?? \"\");\n }\n return ok;\n }, [commitTypedValue, draft, formattedText]);\n\n const openPicker = () => {\n if (disabled) return;\n setOpen(true);\n };\n\n const showEditableInput = editable && displayValue == null;\n\n if (!showEditableInput) {\n const hasValue = formatted != null && formatted !== false;\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\"aviala-datepicker-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n >\n {renderSlotIcon(\n leftIcon ?? <TimeAndDateDate level=\"text\" biggerSize aria-hidden />\n )}\n <span className=\"aviala-datepicker-trigger__field\">\n <span\n className={cn(\n \"aviala-datepicker-trigger__value\",\n typographyVariants({ level: \"text\" })\n )}\n data-placeholder={hasValue ? undefined : \"true\"}\n >\n {hasValue ? formatted : emptyPlaceholder}\n </span>\n </span>\n {renderSlotIcon(rightIcon)}\n </button>\n </PopoverPrimitive.Trigger>\n );\n }\n\n return (\n <PopoverPrimitive.Anchor asChild>\n <div\n className={cn(\"aviala-datepicker-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n onMouseDown={(event) => {\n if (disabled) return;\n if (event.target === inputRef.current) return;\n event.preventDefault();\n inputRef.current?.focus();\n openPicker();\n }}\n >\n {renderSlotIcon(\n leftIcon ?? <TimeAndDateDate level=\"text\" biggerSize aria-hidden />\n )}\n <span className=\"aviala-datepicker-trigger__field\">\n <input\n ref={setInputRefs}\n type=\"text\"\n className={cn(\n \"aviala-datepicker-trigger__input\",\n typographyVariants({ level: \"text\" })\n )}\n value={draft}\n placeholder={emptyPlaceholder}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n autoComplete=\"off\"\n spellCheck={false}\n onChange={(event) => setDraft(event.target.value)}\n onFocus={(event) => {\n editingRef.current = true;\n openPicker();\n // #region agent log\n {\n const inputEl = event.currentTarget;\n const logTriggerStyles = (phase: string) => {\n const trigger = inputEl.closest(\n \".aviala-datepicker-trigger\"\n ) as HTMLElement | null;\n const cs = trigger ? getComputedStyle(trigger) : null;\n fetch(\n \"http://127.0.0.1:7374/ingest/ad1201c6-cfe5-466e-96ed-49d0c8840eda\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Debug-Session-Id\": \"0f383b\",\n },\n body: JSON.stringify({\n sessionId: \"0f383b\",\n runId: \"pre-fix\",\n hypothesisId: \"A-E\",\n location: \"date-picker.tsx:DatePickerTrigger.onFocus\",\n message: `trigger styles on input focus (${phase})`,\n data: {\n phase,\n openProp: open,\n dataState: trigger?.getAttribute(\"data-state\"),\n matchesFocusWithin:\n trigger?.matches(\":focus-within\") ?? null,\n matchesFocusVisible:\n trigger?.matches(\":focus-visible\") ?? null,\n hasFocusRingClass:\n trigger?.classList.contains(\"aviala-focus-ring\") ??\n null,\n kbdAttr: document.documentElement.hasAttribute(\n \"data-aviala-kbd\"\n ),\n bg: cs?.backgroundColor ?? null,\n boxShadow: cs?.boxShadow ?? null,\n borderColor: cs?.borderColor ?? null,\n borderWidth: cs?.borderWidth ?? null,\n activeTag: document.activeElement?.tagName ?? null,\n activeClass:\n (document.activeElement as HTMLElement | null)\n ?.className ?? null,\n },\n timestamp: Date.now(),\n }),\n }\n ).catch(() => {});\n };\n logTriggerStyles(\"sync\");\n requestAnimationFrame(() => logTriggerStyles(\"raf\"));\n }\n // #endregion\n onFocus?.(event);\n }}\n onBlur={(event) => {\n editingRef.current = false;\n // #region agent log\n {\n const trigger = event.currentTarget.closest(\n \".aviala-datepicker-trigger\"\n ) as HTMLElement | null;\n const cs = trigger ? getComputedStyle(trigger) : null;\n fetch(\n \"http://127.0.0.1:7374/ingest/ad1201c6-cfe5-466e-96ed-49d0c8840eda\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Debug-Session-Id\": \"0f383b\",\n },\n body: JSON.stringify({\n sessionId: \"0f383b\",\n runId: \"pre-fix\",\n hypothesisId: \"A-E\",\n location: \"date-picker.tsx:DatePickerTrigger.onBlur\",\n message: \"trigger styles on input blur\",\n data: {\n openProp: open,\n dataState: trigger?.getAttribute(\"data-state\"),\n matchesFocusWithin:\n trigger?.matches(\":focus-within\") ?? null,\n kbdAttr: document.documentElement.hasAttribute(\n \"data-aviala-kbd\"\n ),\n bg: cs?.backgroundColor ?? null,\n boxShadow: cs?.boxShadow ?? null,\n relatedTargetTag:\n (event.relatedTarget as HTMLElement | null)\n ?.tagName ?? null,\n },\n timestamp: Date.now(),\n }),\n }\n ).catch(() => {});\n }\n // #endregion\n window.setTimeout(() => {\n const active = document.activeElement;\n if (\n active?.closest(\n \".aviala-datepicker-content, .aviala-datepicker-trigger\"\n )\n ) {\n return;\n }\n commitDraft();\n }, 0);\n onBlur?.(event);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n commitDraft();\n }\n if (event.key === \"Escape\") {\n setDraft(formattedText ?? \"\");\n setOpen(false);\n }\n if (event.key === \"ArrowDown\" && !open) {\n event.preventDefault();\n openPicker();\n }\n onKeyDown?.(event);\n }}\n {...props}\n />\n </span>\n {renderSlotIcon(rightIcon)}\n </div>\n </PopoverPrimitive.Anchor>\n );\n }\n);\nDatePickerTrigger.displayName = \"DatePickerTrigger\";\n\nexport type DatePickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n portalled?: boolean;\n};\n\nexport const DatePickerContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n DatePickerContentProps\n>(\n (\n {\n className,\n children,\n portalled = true,\n sideOffset = 8,\n align = \"start\",\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n className={cn(\"aviala-datepicker-content\", className)}\n sideOffset={sideOffset}\n align={align}\n {...props}\n >\n {children ?? <DatePickerCalendar />}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nDatePickerContent.displayName = \"DatePickerContent\";\n\nexport type DatePickerCalendarProps = {\n className?: string;\n};\n\nfunction getFooterDateLabel(\n mode: DatePickerMode,\n singleValue: Date | undefined,\n rangeValue: DateRange\n): string {\n if (mode === \"single\") {\n return singleValue ? formatIsoDate(singleValue) : \"选择日期\";\n }\n if (rangeValue.from && rangeValue.to) {\n return `${formatIsoDate(rangeValue.from)} 至 ${formatIsoDate(rangeValue.to)}`;\n }\n if (rangeValue.from) {\n return `${formatIsoDate(rangeValue.from)} 至 …`;\n }\n return \"选择日期范围\";\n}\n\nfunction DatePickerTimePanel() {\n const { timeValue, setTimeValue } = useDatePickerContext();\n\n return <TimePickerWheels value={timeValue} onChange={setTimeValue} />;\n}\n\nfunction DatePickerPanelFooter() {\n const {\n mode,\n singleValue,\n rangeValue,\n enableTime,\n activePanel,\n setActivePanel,\n timeValue,\n } = useDatePickerContext();\n\n if (!enableTime) return null;\n\n const panelValue = activePanel === \"time\" ? \"time\" : \"date\";\n const isRangeMode = mode === \"range\";\n\n return (\n <div className=\"aviala-datepicker-footer-wrap\">\n <SegmentatorGroup\n value={panelValue}\n onValueChange={(value) => setActivePanel(value as DatePickerPanel)}\n mode=\"nested\"\n className=\"aviala-datepicker-footer\"\n data-layout={isRangeMode ? \"range\" : \"single\"}\n data-active-panel={activePanel}\n aria-label=\"日期与时间切换\"\n >\n <SegmentatorItem\n value=\"date\"\n leftIcon={<TimeAndDateDate level=\"text\" biggerSize aria-hidden />}\n iconOnly={isRangeMode && panelValue === \"time\"}\n >\n {getFooterDateLabel(mode, singleValue, rangeValue)}\n </SegmentatorItem>\n <SegmentatorItem\n value=\"time\"\n leftIcon={<TimeAndDateClock level=\"text\" biggerSize aria-hidden />}\n iconOnly={isRangeMode && panelValue === \"date\"}\n >\n {formatTimeValue(timeValue.hours, timeValue.minutes)}\n </SegmentatorItem>\n </SegmentatorGroup>\n </div>\n );\n}\n\ntype MonthSlideDirection = \"prev\" | \"next\";\n\ntype MonthSlideState = {\n direction: MonthSlideDirection;\n outgoingMonth: Date;\n};\n\ntype CalendarContentView = \"date\" | \"month\";\n\ntype ViewCrossfadeState = {\n outgoing: CalendarContentView;\n};\n\ntype PanelKind = \"date\" | \"time\";\n\ntype PanelSlideState = {\n outgoing: PanelKind;\n direction: MonthSlideDirection;\n};\n\nfunction monthDiff(from: Date, to: Date): number {\n return (to.getFullYear() - from.getFullYear()) * 12 + (to.getMonth() - from.getMonth());\n}\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\nexport function DatePickerCalendar({ className }: DatePickerCalendarProps) {\n const calendarId = useId();\n const {\n mode,\n viewMonth,\n setViewMonth,\n singleValue,\n rangeValue,\n selectDate,\n minDate,\n maxDate,\n focusedDay,\n setFocusedDay,\n activePanel,\n setActivePanel,\n enableTime,\n } = useDatePickerContext();\n\n const today = useMemo(() => startOfDay(new Date()), []);\n const days = useMemo(() => getCalendarDays(viewMonth), [viewMonth]);\n const prevViewMonthRef = useRef(viewMonth);\n const dayGridRef = useRef<HTMLDivElement>(null);\n const pendingDayFocusRef = useRef(false);\n const [monthSlide, setMonthSlide] = useState<MonthSlideState | null>(null);\n const isMonthPanel = activePanel === \"month\";\n const isTimePanel = activePanel === \"time\" && enableTime;\n const targetContentView: CalendarContentView = isMonthPanel ? \"month\" : \"date\";\n const [contentView, setContentView] = useState<CalendarContentView>(targetContentView);\n const [viewCrossfade, setViewCrossfade] = useState<ViewCrossfadeState | null>(null);\n const [monthWheelLayoutKey, setMonthWheelLayoutKey] = useState(0);\n const contentViewRef = useRef(contentView);\n contentViewRef.current = contentView;\n\n const targetPanel: PanelKind = isTimePanel ? \"time\" : \"date\";\n const [panel, setPanel] = useState<PanelKind>(targetPanel);\n const [panelSlide, setPanelSlide] = useState<PanelSlideState | null>(null);\n const panelRef = useRef(panel);\n panelRef.current = panel;\n\n useLayoutEffect(() => {\n const previous = panelRef.current;\n if (targetPanel === previous) return;\n if (prefersReducedMotion()) {\n setPanel(targetPanel);\n setPanelSlide(null);\n panelRef.current = targetPanel;\n return;\n }\n setPanelSlide({\n outgoing: previous,\n direction: targetPanel === \"time\" ? \"next\" : \"prev\",\n });\n setPanel(targetPanel);\n panelRef.current = targetPanel;\n }, [targetPanel]);\n\n useLayoutEffect(() => {\n const previous = contentViewRef.current;\n if (targetContentView === previous) return;\n if (prefersReducedMotion()) {\n setContentView(targetContentView);\n setViewCrossfade(null);\n contentViewRef.current = targetContentView;\n return;\n }\n setViewCrossfade({ outgoing: previous });\n setContentView(targetContentView);\n contentViewRef.current = targetContentView;\n }, [targetContentView]);\n\n useLayoutEffect(() => {\n const previous = prevViewMonthRef.current;\n const diff = monthDiff(previous, viewMonth);\n prevViewMonthRef.current = viewMonth;\n if (diff === 0 || prefersReducedMotion() || contentView === \"month\" || panel === \"time\") {\n setMonthSlide(null);\n return;\n }\n setMonthSlide({\n direction: diff > 0 ? \"next\" : \"prev\",\n outgoingMonth: previous,\n });\n }, [contentView, panel, viewMonth]);\n\n useLayoutEffect(() => {\n if (!pendingDayFocusRef.current || !focusedDay) return;\n const grid = dayGridRef.current;\n if (!grid) return;\n const target = grid.querySelector<HTMLButtonElement>(\n `button[data-day=\"${formatIsoDate(focusedDay)}\"]`\n );\n if (!target || target.disabled) return;\n pendingDayFocusRef.current = false;\n target.focus();\n }, [focusedDay, days, monthSlide]);\n\n const outgoingDays = useMemo(\n () => (monthSlide ? getCalendarDays(monthSlide.outgoingMonth) : null),\n [monthSlide]\n );\n\n const handleDayKeyDown = (event: KeyboardEvent<HTMLButtonElement>, date: Date) => {\n let deltaDays = 0;\n switch (event.key) {\n case \"ArrowLeft\":\n deltaDays = -1;\n break;\n case \"ArrowRight\":\n deltaDays = 1;\n break;\n case \"ArrowUp\":\n deltaDays = -7;\n break;\n case \"ArrowDown\":\n deltaDays = 7;\n break;\n case \"Home\":\n case \"End\":\n case \"PageUp\":\n case \"PageDown\":\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n selectDate(date);\n return;\n default:\n return;\n }\n\n event.preventDefault();\n\n let next: Date;\n if (event.key === \"Home\") {\n next = new Date(date.getFullYear(), date.getMonth(), 1);\n } else if (event.key === \"End\") {\n next = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n } else if (event.key === \"PageUp\") {\n next = addMonths(date, event.shiftKey ? -12 : -1);\n } else if (event.key === \"PageDown\") {\n next = addMonths(date, event.shiftKey ? 12 : 1);\n } else {\n next = new Date(date);\n next.setDate(next.getDate() + deltaDays);\n // Skip disabled days while moving in the same direction\n let guard = 0;\n while (isDateDisabled(next, minDate, maxDate) && guard < 366) {\n next.setDate(next.getDate() + (deltaDays > 0 ? 1 : -1));\n guard += 1;\n }\n }\n\n const normalized = startOfDay(next);\n if (isDateDisabled(normalized, minDate, maxDate)) return;\n\n pendingDayFocusRef.current = true;\n if (mode === \"single\") {\n selectDate(normalized, { close: false, switchToTime: false });\n return;\n }\n\n setFocusedDay(normalized);\n if (!isSameMonth(normalized, viewMonth)) {\n setViewMonth(new Date(normalized.getFullYear(), normalized.getMonth(), 1));\n }\n };\n\n const stepMonth = isMonthPanel ? 12 : 1;\n\n const renderDateContent = () => (\n <>\n <div className=\"aviala-datepicker-calendar__weekdays\" aria-hidden>\n {WEEKDAY_LABELS.map((label) => (\n <span\n key={label}\n className={cn(\n \"aviala-datepicker-calendar__weekday\",\n typographyVariants({ level: \"caption\" })\n )}\n >\n {label}\n </span>\n ))}\n </div>\n\n <div className=\"aviala-datepicker-calendar__grid-viewport\">\n {monthSlide && outgoingDays ? (\n <div\n key={`out-${monthSlide.outgoingMonth.getFullYear()}-${monthSlide.outgoingMonth.getMonth()}`}\n className=\"aviala-datepicker-calendar__grid\"\n data-slide-role=\"exit\"\n data-slide={monthSlide.direction}\n aria-hidden\n >\n {outgoingDays.map((day) => {\n const outside = !isSameMonth(day, monthSlide.outgoingMonth);\n return (\n <span\n key={day.toISOString()}\n className=\"aviala-datepicker-day\"\n data-outside={outside ? \"true\" : undefined}\n >\n <span\n className={cn(\n \"aviala-datepicker-day__label\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {day.getDate()}\n </span>\n </span>\n );\n })}\n </div>\n ) : null}\n\n <div\n ref={dayGridRef}\n key={`in-${viewMonth.getFullYear()}-${viewMonth.getMonth()}`}\n className=\"aviala-datepicker-calendar__grid\"\n role=\"grid\"\n aria-labelledby={`${calendarId}-label`}\n data-slide-role={monthSlide ? \"enter\" : undefined}\n data-slide={monthSlide?.direction}\n onAnimationEnd={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.currentTarget.dataset.slideRole === \"enter\") {\n setMonthSlide(null);\n }\n }}\n >\n {days.map((day) => {\n const outside = !isSameMonth(day, viewMonth);\n const rangePos: RangeSelectionPosition =\n mode === \"range\"\n ? getRangeSelectionPosition(day, rangeValue.from, rangeValue.to)\n : singleValue && isSameDay(day, singleValue)\n ? \"single\"\n : \"none\";\n const selected = rangePos !== \"none\";\n const inRange =\n mode === \"range\" && isDateInRange(day, rangeValue.from, rangeValue.to);\n const isToday = isSameDay(day, today);\n const dayDisabled = isDateDisabled(day, minDate, maxDate);\n const focused = focusedDay ? isSameDay(day, focusedDay) : false;\n const dayKey = formatIsoDate(day);\n\n return (\n <button\n key={dayKey}\n type=\"button\"\n role=\"gridcell\"\n data-day={dayKey}\n tabIndex={focused || (!focusedDay && isToday) ? 0 : -1}\n className=\"aviala-datepicker-day aviala-focus-ring\"\n data-outside={outside ? \"true\" : undefined}\n data-selected={selected ? \"true\" : undefined}\n data-in-range={inRange && !selected ? \"true\" : undefined}\n data-range-pos={rangePos !== \"none\" ? rangePos : undefined}\n data-today={isToday ? \"true\" : undefined}\n data-disabled={dayDisabled ? \"true\" : undefined}\n aria-label={formatDisplayDate(day)}\n aria-selected={selected || undefined}\n aria-disabled={dayDisabled || undefined}\n disabled={dayDisabled}\n onClick={() => selectDate(day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(event) => handleDayKeyDown(event, day)}\n >\n <span\n className={cn(\n \"aviala-datepicker-day__label\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {day.getDate()}\n </span>\n {isToday ? (\n <span className=\"aviala-datepicker-day__today-dot\" aria-hidden />\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n </>\n );\n\n const renderContentView = (view: CalendarContentView) =>\n view === \"month\" ? (\n <DatePickerMonthYearWheels layoutKey={monthWheelLayoutKey} />\n ) : (\n renderDateContent()\n );\n\n const renderDatePanel = () => (\n <>\n <div className=\"aviala-datepicker-calendar__header\">\n <button\n type=\"button\"\n className=\"aviala-datepicker-calendar__nav aviala-focus-ring\"\n aria-label={isMonthPanel ? \"Previous year\" : \"Previous month\"}\n onClick={() => setViewMonth(addMonths(viewMonth, -stepMonth))}\n >\n <DirectionArrowLeft level=\"text\" biggerSize aria-hidden />\n </button>\n <button\n type=\"button\"\n id={`${calendarId}-label`}\n className={cn(\n \"aviala-datepicker-calendar__title aviala-focus-ring\",\n typographyVariants({ level: \"subtitle\" })\n )}\n data-active={isMonthPanel ? \"true\" : undefined}\n aria-expanded={isMonthPanel}\n aria-label={isMonthPanel ? \"关闭年月选择\" : \"选择年月\"}\n onClick={() => setActivePanel(isMonthPanel ? \"date\" : \"month\")}\n >\n <span\n key={`${viewMonth.getFullYear()}-${viewMonth.getMonth()}`}\n className=\"aviala-datepicker-calendar__title-text\"\n data-slide={isMonthPanel ? undefined : monthSlide?.direction}\n >\n {formatMonthYear(viewMonth)}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"aviala-datepicker-calendar__nav aviala-focus-ring\"\n aria-label={isMonthPanel ? \"Next year\" : \"Next month\"}\n onClick={() => setViewMonth(addMonths(viewMonth, stepMonth))}\n >\n <DirectionArrowRight level=\"text\" biggerSize aria-hidden />\n </button>\n </div>\n\n <div className=\"aviala-datepicker-calendar__view-viewport\">\n {viewCrossfade ? (\n <div\n key={`exit-${viewCrossfade.outgoing}`}\n className=\"aviala-datepicker-calendar__view\"\n data-view-role=\"exit\"\n data-view={viewCrossfade.outgoing}\n aria-hidden\n >\n {renderContentView(viewCrossfade.outgoing)}\n </div>\n ) : null}\n <div\n key={`enter-${contentView}`}\n className=\"aviala-datepicker-calendar__view\"\n data-view-role={viewCrossfade ? \"enter\" : undefined}\n data-view={contentView}\n onAnimationEnd={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.currentTarget.dataset.viewRole === \"enter\") {\n setViewCrossfade(null);\n if (contentView === \"month\") {\n setMonthWheelLayoutKey((key) => key + 1);\n }\n }\n }}\n >\n {renderContentView(contentView)}\n </div>\n </div>\n </>\n );\n\n const renderPanel = (kind: PanelKind) =>\n kind === \"time\" ? <DatePickerTimePanel /> : renderDatePanel();\n\n return (\n <div\n className={cn(\"aviala-datepicker-calendar\", className)}\n role=\"application\"\n aria-label=\"Calendar\"\n >\n <div className=\"aviala-datepicker-calendar__panel-viewport\">\n {panelSlide ? (\n <div\n key={`panel-exit-${panelSlide.outgoing}`}\n className=\"aviala-datepicker-calendar__panel aviala-datepicker-calendar__body\"\n data-panel-role=\"exit\"\n data-slide={panelSlide.direction}\n data-panel={panelSlide.outgoing}\n aria-hidden\n >\n {renderPanel(panelSlide.outgoing)}\n </div>\n ) : null}\n <div\n key={`panel-enter-${panel}`}\n className=\"aviala-datepicker-calendar__panel aviala-datepicker-calendar__body\"\n data-panel-role={panelSlide ? \"enter\" : undefined}\n data-slide={panelSlide?.direction}\n data-panel={panel}\n onAnimationEnd={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.currentTarget.dataset.panelRole === \"enter\") {\n setPanelSlide(null);\n }\n }}\n >\n {renderPanel(panel)}\n </div>\n </div>\n\n <DatePickerPanelFooter />\n </div>\n );\n}\n\nexport type DatePickerFieldProps = Omit<DatePickerTriggerProps, \"displayValue\"> & {\n contentClassName?: string;\n calendarClassName?: string;\n mode?: DatePickerMode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: DatePickerSize;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n value?: Date | DateRange;\n defaultValue?: Date | DateRange;\n onValueChange?: ((value: Date | undefined) => void) | ((value: DateRange) => void);\n enableTime?: boolean;\n timeValue?: DatePickerTimeValue;\n defaultTimeValue?: DatePickerTimeValue;\n onTimeChange?: (value: DatePickerTimeValue) => void;\n};\n\n/** Convenience field — trigger + calendar panel. */\nexport function DatePickerField({\n contentClassName,\n calendarClassName,\n className,\n size = \"regular\",\n mode = \"single\",\n allRound,\n leftIcon,\n rightIcon,\n placeholder,\n rangePlaceholder,\n error,\n rangeSeparator,\n editable,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n minDate,\n maxDate,\n enableTime = true,\n timeValue,\n defaultTimeValue,\n onTimeChange,\n}: DatePickerFieldProps) {\n const pickerProps =\n mode === \"range\"\n ? {\n mode: \"range\" as const,\n value: value as DateRange | undefined,\n defaultValue: defaultValue as DateRange | undefined,\n onValueChange: onValueChange as ((value: DateRange) => void) | undefined,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n minDate,\n maxDate,\n enableTime,\n timeValue,\n defaultTimeValue,\n onTimeChange,\n }\n : {\n mode: \"single\" as const,\n value: value as Date | undefined,\n defaultValue: defaultValue as Date | undefined,\n onValueChange: onValueChange as ((value: Date | undefined) => void) | undefined,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n minDate,\n maxDate,\n enableTime,\n timeValue,\n defaultTimeValue,\n onTimeChange,\n };\n\n return (\n <DatePicker {...pickerProps} size={size} className={className}>\n <DatePickerTrigger\n size={size}\n allRound={allRound}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n placeholder={placeholder}\n rangePlaceholder={rangePlaceholder}\n error={error}\n rangeSeparator={rangeSeparator}\n editable={editable}\n />\n <DatePickerContent className={contentClassName}>\n <DatePickerCalendar className={calendarClassName} />\n </DatePickerContent>\n </DatePicker>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\n\nimport type { DateRange } from \"./date-utils\";\n\n/** Figma Components → Information Collect → DatePicker Input */\nexport type DatePickerSize = \"regular\" | \"big\";\nexport type DatePickerMode = \"single\" | \"range\";\nexport type DatePickerPanel = \"date\" | \"time\" | \"month\";\nexport type DatePickerTimeValue = { hours: number; minutes: number };\n\nexport type DatePickerContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n disabled?: boolean;\n size: DatePickerSize;\n mode: DatePickerMode;\n viewMonth: Date;\n setViewMonth: (month: Date) => void;\n singleValue?: Date;\n rangeValue: DateRange;\n selectDate: (date: Date, options?: { close?: boolean; switchToTime?: boolean }) => void;\n commitTypedValue: (text: string) => boolean;\n minDate?: Date;\n maxDate?: Date;\n focusedDay: Date | null;\n setFocusedDay: (date: Date | null) => void;\n enableTime: boolean;\n activePanel: DatePickerPanel;\n setActivePanel: (panel: DatePickerPanel) => void;\n timeValue: DatePickerTimeValue;\n setTimeValue: (value: DatePickerTimeValue) => void;\n};\n\nconst DatePickerContext = createContext<DatePickerContextValue | null>(null);\n\nexport function DatePickerProvider({\n value,\n children,\n}: {\n value: DatePickerContextValue;\n children: ReactNode;\n}) {\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nexport function useDatePickerContext() {\n const context = useContext(DatePickerContext);\n if (!context) {\n throw new Error(\"DatePicker compound components must be used within DatePicker.\");\n }\n return context;\n}\n","/** Calendar helpers — no external date library. */\n\nexport type DateRange = {\n from?: Date;\n to?: Date;\n};\n\nexport const WEEKDAY_LABELS = [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"] as const;\n\nexport type RangeSelectionPosition = \"none\" | \"single\" | \"head\" | \"middle\" | \"last\";\n\nexport function startOfDay(date: Date): Date {\n const copy = new Date(date);\n copy.setHours(0, 0, 0, 0);\n return copy;\n}\n\n/** Merge calendar day with hours/minutes into a single Date. */\nexport function applyTimeToDate(\n date: Date,\n hours: number,\n minutes: number\n): Date {\n const next = startOfDay(date);\n next.setHours(hours, minutes, 0, 0);\n return next;\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nexport function addMonths(date: Date, count: number): Date {\n const next = new Date(date);\n next.setDate(1);\n next.setMonth(next.getMonth() + count);\n return next;\n}\n\nexport function addDays(date: Date, count: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + count);\n return startOfDay(next);\n}\n\nexport function getCalendarDays(month: Date): Date[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const firstDay = new Date(year, monthIndex, 1);\n const lastDay = new Date(year, monthIndex + 1, 0);\n /** Figma DateButtonGrid — week starts on Monday */\n const startOffset = (firstDay.getDay() + 6) % 7;\n const days: Date[] = [];\n\n for (let index = startOffset - 1; index >= 0; index -= 1) {\n days.push(new Date(year, monthIndex, -index));\n }\n\n for (let day = 1; day <= lastDay.getDate(); day += 1) {\n days.push(new Date(year, monthIndex, day));\n }\n\n while (days.length < 42) {\n const nextDay = days.length - startOffset - lastDay.getDate() + 1;\n days.push(new Date(year, monthIndex + 1, nextDay));\n }\n\n return days;\n}\n\nexport function formatDisplayDate(date: Date, locale = \"en-US\"): string {\n return new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n }).format(date);\n}\n\n/** Figma DatePicker footer / trigger — `YYYY-MM-DD` */\nexport function formatIsoDate(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nexport function formatDisplayDateTime(\n date: Date,\n hours: number,\n minutes: number\n): string {\n return `${formatIsoDate(date)} ${formatTimeValue(hours, minutes)}`;\n}\n\nexport function formatMonthYear(date: Date, locale = \"zh-CN\"): string {\n return new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"long\",\n }).format(date);\n}\n\nexport function formatTimeValue(hours: number, minutes: number): string {\n return `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}`;\n}\n\nexport function getRangeSelectionPosition(\n day: Date,\n from?: Date,\n to?: Date\n): RangeSelectionPosition {\n if (!from) return \"none\";\n\n const dayNorm = startOfDay(day);\n\n if (!to) {\n return isSameDay(dayNorm, from) ? \"single\" : \"none\";\n }\n\n if (!isDateInRange(dayNorm, from, to)) return \"none\";\n\n const normalized = normalizeRange(from, to);\n const rangeStart = startOfDay(normalized.from!);\n const rangeEnd = startOfDay(normalized.to!);\n\n if (isSameDay(rangeStart, rangeEnd)) return \"single\";\n\n /** Figma DateButton — per-row Head/Middle/Last with row-break rounding */\n const weekCol = (dayNorm.getDay() + 6) % 7;\n const prevInRange = isDateInRange(addDays(dayNorm, -1), rangeStart, rangeEnd);\n const nextInRange = isDateInRange(addDays(dayNorm, 1), rangeStart, rangeEnd);\n const isVisualStart = !prevInRange || weekCol === 0;\n const isVisualEnd = !nextInRange || weekCol === 6;\n\n if (isVisualStart && isVisualEnd) return \"single\";\n if (isVisualStart) return \"head\";\n if (isVisualEnd) return \"last\";\n return \"middle\";\n}\n\nexport function isDateInRange(date: Date, from?: Date, to?: Date): boolean {\n if (!from) return false;\n const time = startOfDay(date).getTime();\n const fromTime = startOfDay(from).getTime();\n if (!to) return time === fromTime;\n const toTime = startOfDay(to).getTime();\n const min = Math.min(fromTime, toTime);\n const max = Math.max(fromTime, toTime);\n return time >= min && time <= max;\n}\n\nexport function isRangeStart(date: Date, from?: Date, to?: Date): boolean {\n if (!from) return false;\n if (!to) return isSameDay(date, from);\n const start = startOfDay(from).getTime() <= startOfDay(to).getTime() ? from : to;\n return isSameDay(date, start);\n}\n\nexport function isRangeEnd(date: Date, from?: Date, to?: Date): boolean {\n if (!from || !to) return false;\n const end = startOfDay(from).getTime() <= startOfDay(to).getTime() ? to : from;\n return isSameDay(date, end);\n}\n\nexport function isDateDisabled(date: Date, minDate?: Date, maxDate?: Date): boolean {\n const time = startOfDay(date).getTime();\n if (minDate && time < startOfDay(minDate).getTime()) return true;\n if (maxDate && time > startOfDay(maxDate).getTime()) return true;\n return false;\n}\n\nexport function normalizeRange(from: Date, to: Date): DateRange {\n if (startOfDay(from).getTime() <= startOfDay(to).getTime()) {\n return { from, to };\n }\n return { from: to, to: from };\n}\n\nexport type ParsedDateInput = {\n date: Date;\n hours?: number;\n minutes?: number;\n};\n\nfunction isValidYmd(year: number, month: number, day: number): boolean {\n if (month < 1 || month > 12 || day < 1 || day > 31) return false;\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n}\n\nfunction parseTimeFragment(\n hoursText?: string,\n minutesText?: string\n): { hours: number; minutes: number } | undefined {\n if (hoursText == null || minutesText == null) return undefined;\n const hours = Number(hoursText);\n const minutes = Number(minutesText);\n if (\n !Number.isInteger(hours) ||\n !Number.isInteger(minutes) ||\n hours < 0 ||\n hours > 23 ||\n minutes < 0 ||\n minutes > 59\n ) {\n return undefined;\n }\n return { hours, minutes };\n}\n\n/** Parse typed date strings: `YYYY-MM-DD`, `YYYY/MM/DD`, `YYYY.MM.DD`, optional `HH:mm`. */\nexport function parseDateInput(text: string): ParsedDateInput | null {\n const trimmed = text.trim();\n if (!trimmed) return null;\n\n const ymd = trimmed.match(\n /^(\\d{4})[-/.](\\d{1,2})[-/.](\\d{1,2})(?:[ T](\\d{1,2}):(\\d{2}))?$/\n );\n if (ymd) {\n const year = Number(ymd[1]);\n const month = Number(ymd[2]);\n const day = Number(ymd[3]);\n if (!isValidYmd(year, month, day)) return null;\n const time = parseTimeFragment(ymd[4], ymd[5]);\n if (ymd[4] != null && !time) return null;\n return {\n date: startOfDay(new Date(year, month - 1, day)),\n hours: time?.hours,\n minutes: time?.minutes,\n };\n }\n\n const mdy = trimmed.match(\n /^(\\d{1,2})[-/.](\\d{1,2})[-/.](\\d{4})(?:[ T](\\d{1,2}):(\\d{2}))?$/\n );\n if (mdy) {\n const month = Number(mdy[1]);\n const day = Number(mdy[2]);\n const year = Number(mdy[3]);\n if (!isValidYmd(year, month, day)) return null;\n const time = parseTimeFragment(mdy[4], mdy[5]);\n if (mdy[4] != null && !time) return null;\n return {\n date: startOfDay(new Date(year, month - 1, day)),\n hours: time?.hours,\n minutes: time?.minutes,\n };\n }\n\n return null;\n}\n\nconst RANGE_SEPARATOR = /\\s*(?:-|~|—|–|至)\\s*/;\n\n/** Parse range text like `2026-07-01 - 2026-07-15` or `2026/07/01 至 2026/07/15`. */\nexport function parseDateRangeInput(text: string): DateRange | null {\n const trimmed = text.trim();\n if (!trimmed) return { from: undefined, to: undefined };\n\n const parts = trimmed.split(RANGE_SEPARATOR).filter(Boolean);\n if (parts.length === 1) {\n const parsed = parseDateInput(parts[0]);\n if (!parsed) return null;\n return { from: parsed.date, to: undefined };\n }\n if (parts.length !== 2) return null;\n\n const fromParsed = parseDateInput(parts[0]);\n const toParsed = parseDateInput(parts[1]);\n if (!fromParsed || !toParsed) return null;\n return normalizeRange(fromParsed.date, toParsed.date);\n}\n","import { useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useDatePickerContext } from \"./date-picker-context\";\nimport { DatePickerTimeWheelColumn } from \"./date-picker-time-wheel\";\n\nconst MONTH_VALUES = Array.from({ length: 12 }, (_, index) => index + 1);\n\nfunction formatYearValue(value: number): string {\n return String(value);\n}\n\nfunction formatMonthValue(value: number): string {\n return String(value);\n}\n\ntype DatePickerMonthYearWheelsProps = {\n className?: string;\n /** Bump after view enter animation so wheels re-sync to the current month. */\n layoutKey?: number;\n};\n\nexport function DatePickerMonthYearWheels({\n className,\n layoutKey = 0,\n}: DatePickerMonthYearWheelsProps) {\n const { viewMonth, setViewMonth, minDate, maxDate } = useDatePickerContext();\n const year = viewMonth.getFullYear();\n const month = viewMonth.getMonth() + 1;\n\n const yearValues = useMemo(() => {\n const currentYear = new Date().getFullYear();\n const start = minDate?.getFullYear() ?? currentYear - 100;\n const end = maxDate?.getFullYear() ?? currentYear + 100;\n const length = Math.max(end - start + 1, 1);\n return Array.from({ length }, (_, index) => start + index);\n }, [maxDate, minDate]);\n\n const setYearMonth = (nextYear: number, nextMonth: number) => {\n setViewMonth(new Date(nextYear, nextMonth - 1, 1));\n };\n\n return (\n <div\n className={cn(\"aviala-datepicker-month\", className)}\n role=\"group\"\n aria-label=\"选择年月\"\n >\n <div className=\"aviala-datepicker-month__columns\">\n <DatePickerTimeWheelColumn\n aria-label=\"年\"\n values={yearValues}\n value={year}\n loop={false}\n layoutKey={layoutKey}\n formatValue={formatYearValue}\n onChange={(nextYear) => setYearMonth(nextYear, month)}\n />\n <DatePickerTimeWheelColumn\n aria-label=\"月\"\n values={MONTH_VALUES}\n value={month}\n loop={false}\n layoutKey={layoutKey}\n formatValue={formatMonthValue}\n onChange={(nextMonth) => setYearMonth(year, nextMonth)}\n />\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n type KeyboardEvent,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n stickyRoundIndex,\n WHEEL_SCROLL_END_MS,\n WHEEL_STEP_THRESHOLD_FACTOR,\n WHEEL_STICKY_AMOUNT,\n} from \"../../lib/sticky-wheel\";\nimport { typographyVariants } from \"../typography\";\n\nconst LOOP_SECTIONS = 3;\nconst MIDDLE_SECTION = 1;\n\ntype DatePickerTimeWheelColumnProps = {\n values: readonly number[];\n value: number;\n onChange: (value: number) => void;\n \"aria-label\": string;\n loop?: boolean;\n className?: string;\n formatValue?: (value: number) => string;\n /** Bump to force a scroll re-sync after layout/animation settles. */\n layoutKey?: number;\n};\n\nfunction formatWheelValue(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nfunction normalizeIndex(index: number, length: number): number {\n return ((index % length) + length) % length;\n}\n\nfunction getValueIndex(values: readonly number[], value: number): number {\n const index = values.indexOf(value);\n if (index >= 0) return index;\n\n let nearestIndex = 0;\n let smallestDistance = Number.POSITIVE_INFINITY;\n\n values.forEach((candidate, candidateIndex) => {\n const distance = Math.abs(candidate - value);\n if (distance < smallestDistance) {\n smallestDistance = distance;\n nearestIndex = candidateIndex;\n }\n });\n\n return nearestIndex;\n}\n\nfunction readItemHeight(container: HTMLElement): number {\n const item = container.querySelector<HTMLElement>(\".aviala-datepicker-time__wheel-item\");\n if (item) {\n // Prefer offsetHeight — getBoundingClientRect is skewed by ancestor\n // transforms (e.g. date ↔ month view enter scale animation).\n const layoutHeight = item.offsetHeight;\n if (layoutHeight > 0) return layoutHeight;\n }\n\n const style = getComputedStyle(container);\n const token = style.getPropertyValue(\"--datepicker-time-wheel-item-height\").trim();\n const parsed = parseFloat(token);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 36;\n}\n\nexport function DatePickerTimeWheelColumn({\n values,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n loop = true,\n className,\n formatValue = formatWheelValue,\n /** Bump to force a scroll re-sync after layout/animation settles. */\n layoutKey = 0,\n}: DatePickerTimeWheelColumnProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const isProgrammaticScrollRef = useRef(false);\n /** When set, value-driven auto sync must not cancel an in-flight smooth scroll. */\n const smoothTargetValueRef = useRef<number | null>(null);\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const wheelAccumRef = useRef(0);\n const selectedValueRef = useRef(value);\n\n selectedValueRef.current = value;\n\n const repeatedValues = useMemo(() => {\n if (!loop) return [...values];\n return Array.from({ length: LOOP_SECTIONS }, () => values).flat();\n }, [loop, values]);\n\n const scrollToIndex = useCallback(\n (index: number, behavior: ScrollBehavior = \"auto\") => {\n const container = scrollRef.current;\n if (!container) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n isProgrammaticScrollRef.current = true;\n container.scrollTo({ top: index * itemHeight, behavior });\n },\n []\n );\n\n const scrollToValue = useCallback(\n (nextValue: number, behavior: ScrollBehavior = \"smooth\") => {\n if (behavior === \"smooth\") {\n smoothTargetValueRef.current = nextValue;\n } else {\n smoothTargetValueRef.current = null;\n }\n const valueIndex = getValueIndex(values, nextValue);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n scrollToIndex(targetIndex, behavior);\n },\n [loop, scrollToIndex, values]\n );\n\n const syncScrollToValue = useCallback(\n (behavior: ScrollBehavior = \"auto\") => {\n if (isUserScrollingRef.current) return;\n // Click/keyboard already started a smooth scroll to this value — don't snap.\n if (\n behavior === \"auto\" &&\n smoothTargetValueRef.current != null &&\n smoothTargetValueRef.current === selectedValueRef.current\n ) {\n return;\n }\n\n const container = scrollRef.current;\n if (!container) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n const valueIndex = getValueIndex(values, selectedValueRef.current);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const currentIndex = Math.round(container.scrollTop / itemHeight);\n const currentValueIndex = loop\n ? normalizeIndex(currentIndex, values.length)\n : Math.min(Math.max(currentIndex, 0), values.length - 1);\n const inMiddleSection =\n !loop || Math.floor(currentIndex / values.length) === MIDDLE_SECTION;\n\n if (currentValueIndex === valueIndex && inMiddleSection) return;\n scrollToIndex(targetIndex, behavior);\n },\n [loop, scrollToIndex, values]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container || isProgrammaticScrollRef.current) {\n isProgrammaticScrollRef.current = false;\n smoothTargetValueRef.current = null;\n return;\n }\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0 || values.length === 0) return;\n\n const lastIndex = values.length - 1;\n const maxScroll = Math.max(container.scrollHeight - container.clientHeight, 0);\n const fractionalIndex = container.scrollTop / itemHeight;\n let rawIndex = stickyRoundIndex(fractionalIndex, WHEEL_STICKY_AMOUNT);\n\n if (!loop) {\n // Trailing spacer may be a hair short — pin ends to first/last.\n if (container.scrollTop >= maxScroll - 1) {\n rawIndex = lastIndex;\n } else if (container.scrollTop <= 1) {\n rawIndex = 0;\n }\n }\n\n const valueIndex = loop\n ? normalizeIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const targetTop = targetIndex * itemHeight;\n const section = loop ? Math.floor(rawIndex / values.length) : MIDDLE_SECTION;\n const needsLoopRecenter = loop && section !== MIDDLE_SECTION;\n const needsSnap = Math.abs(container.scrollTop - targetTop) > 1;\n\n if (needsLoopRecenter) {\n // Invisible section wrap — keep instant so the list doesn't fly through copies.\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n } else if (needsSnap) {\n isProgrammaticScrollRef.current = true;\n smoothTargetValueRef.current = nextValue;\n container.scrollTo({ top: targetTop, behavior: \"smooth\" });\n }\n\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n\n if (!needsSnap) {\n smoothTargetValueRef.current = null;\n }\n isUserScrollingRef.current = false;\n wheelAccumRef.current = 0;\n }, [loop, onChange, values]);\n\n const handleScroll = useCallback(() => {\n if (isProgrammaticScrollRef.current) return;\n isUserScrollingRef.current = true;\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n scrollEndTimerRef.current = setTimeout(settleScroll, WHEEL_SCROLL_END_MS);\n }, [settleScroll]);\n\n useLayoutEffect(() => {\n syncScrollToValue(\"auto\");\n const raf = requestAnimationFrame(() => {\n syncScrollToValue(\"auto\");\n });\n return () => cancelAnimationFrame(raf);\n }, [layoutKey, syncScrollToValue, value]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onScrollEnd = () => {\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n settleScroll();\n };\n\n container.addEventListener(\"scrollend\", onScrollEnd);\n\n const resizeObserver = new ResizeObserver(() => {\n syncScrollToValue(\"auto\");\n });\n resizeObserver.observe(container);\n\n return () => {\n container.removeEventListener(\"scrollend\", onScrollEnd);\n resizeObserver.disconnect();\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n };\n }, [settleScroll, syncScrollToValue]);\n\n // Sticky mouse-wheel: require clearer intent to leave the current item, then\n // animate one step (finger drag still uses CSS snap + smooth settle).\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n if (isProgrammaticScrollRef.current || values.length === 0) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n wheelAccumRef.current += event.deltaY;\n const threshold = itemHeight * WHEEL_STEP_THRESHOLD_FACTOR;\n if (Math.abs(wheelAccumRef.current) < threshold) return;\n\n const direction = wheelAccumRef.current > 0 ? 1 : -1;\n wheelAccumRef.current = 0;\n\n const currentIndex = getValueIndex(values, selectedValueRef.current);\n const nextIndex = loop\n ? normalizeIndex(currentIndex + direction, values.length)\n : Math.min(Math.max(currentIndex + direction, 0), values.length - 1);\n if (nextIndex === currentIndex) return;\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[nextIndex];\n isUserScrollingRef.current = false;\n scrollToValue(nextValue, \"smooth\");\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n };\n\n container.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n container.removeEventListener(\"wheel\", onWheel);\n };\n }, [loop, onChange, scrollToValue, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const currentIndex = getValueIndex(values, selectedValueRef.current);\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case \"ArrowUp\":\n nextIndex = loop\n ? normalizeIndex(currentIndex - 1, values.length)\n : Math.max(currentIndex - 1, 0);\n break;\n case \"ArrowDown\":\n nextIndex = loop\n ? normalizeIndex(currentIndex + 1, values.length)\n : Math.min(currentIndex + 1, values.length - 1);\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const nextValue = values[nextIndex];\n scrollToValue(nextValue, \"smooth\");\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n };\n\n const selectedOptionId = loop\n ? `${ariaLabel}-${value}-${values.length * MIDDLE_SECTION + getValueIndex(values, value)}`\n : `${ariaLabel}-${value}`;\n\n return (\n <div className={cn(\"aviala-datepicker-time__wheel\", className)}>\n <div className=\"aviala-datepicker-time__wheel-highlight\" aria-hidden />\n <div\n className=\"aviala-datepicker-time__wheel-fade aviala-datepicker-time__wheel-fade--top\"\n aria-hidden\n />\n <div\n className=\"aviala-datepicker-time__wheel-fade aviala-datepicker-time__wheel-fade--bottom\"\n aria-hidden\n />\n <div\n ref={scrollRef}\n className=\"aviala-datepicker-time__wheel-scroll aviala-focus-ring\"\n onScroll={handleScroll}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-activedescendant={selectedOptionId}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n >\n <ul className=\"aviala-datepicker-time__wheel-list\">\n {repeatedValues.map((itemValue, index) => {\n const isSelected = itemValue === value;\n const optionId = loop ? `${ariaLabel}-${itemValue}-${index}` : `${ariaLabel}-${itemValue}`;\n\n return (\n <li\n key={optionId}\n id={optionId}\n className=\"aviala-datepicker-time__wheel-item\"\n role=\"option\"\n aria-selected={isSelected}\n >\n <button\n type=\"button\"\n className={cn(\n \"aviala-datepicker-time__wheel-option\",\n typographyVariants({ level: \"text\" })\n )}\n data-selected={isSelected ? \"true\" : undefined}\n tabIndex={-1}\n onClick={() => {\n scrollToValue(itemValue, \"smooth\");\n if (itemValue !== selectedValueRef.current) {\n onChange(itemValue);\n }\n }}\n >\n {formatValue(itemValue)}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n </div>\n );\n}\n","/**\n * Sticky wheel helpers — same continuous dwell curve used by Segmentator.\n * Pulls fractional progress toward item centers so slow scrolls linger, then\n * settle animates onto the sticky-biased nearest item.\n */\n\n/** 0 = linear, higher = stronger dwell near item centers. */\nexport const WHEEL_STICKY_AMOUNT = 0.45;\n\n/** Debounce after the last scroll event before settling. */\nexport const WHEEL_SCROLL_END_MS = 100;\n\n/**\n * Mouse-wheel step threshold as a fraction of item pitch.\n * Base 0.5 + sticky bias → need a clearer intent to leave the current item.\n */\nexport const WHEEL_STEP_THRESHOLD_FACTOR = 0.5 + WHEEL_STICKY_AMOUNT * 0.35;\n\n/**\n * Continuous sticky remap: dwells near 0 / 1 and moves faster through the midpoint.\n */\nexport function stickyRemapProgress(t: number, amount: number): number {\n const clamped = Math.max(0, Math.min(1, t));\n if (amount <= 0) return clamped;\n\n const exponent = 1 + amount * 2;\n if (clamped <= 0.5) {\n return 0.5 * Math.pow(2 * clamped, exponent);\n }\n return 1 - 0.5 * Math.pow(2 * (1 - clamped), exponent);\n}\n\n/** Map a fractional scroll index onto a sticky-biased integer item index. */\nexport function stickyRoundIndex(\n fractionalIndex: number,\n stickiness: number = WHEEL_STICKY_AMOUNT\n): number {\n const base = Math.floor(fractionalIndex);\n const frac = fractionalIndex - base;\n const sticky = stickyRemapProgress(frac, stickiness);\n return sticky < 0.5 ? base : base + 1;\n}\n","import { cn } from \"../../lib/utils\";\nimport { DatePickerTimeWheelColumn } from \"../date-picker/date-picker-time-wheel\";\n\nexport const TIME_PICKER_HOUR_VALUES = Array.from({ length: 24 }, (_, index) => index);\nexport const TIME_PICKER_MINUTE_VALUES = Array.from({ length: 12 }, (_, index) => index * 5);\n\nexport type TimePickerWheelsValue = {\n hours: number;\n minutes: number;\n};\n\ntype TimePickerWheelsProps = {\n value: TimePickerWheelsValue;\n onChange: (value: TimePickerWheelsValue) => void;\n className?: string;\n};\n\nexport function TimePickerWheels({ value, onChange, className }: TimePickerWheelsProps) {\n return (\n <div className={cn(\"aviala-datepicker-time\", className)} role=\"group\" aria-label=\"选择时间\">\n <div className=\"aviala-datepicker-time__columns\">\n <DatePickerTimeWheelColumn\n aria-label=\"小时\"\n values={TIME_PICKER_HOUR_VALUES}\n value={value.hours}\n onChange={(hours) => onChange({ ...value, hours })}\n />\n <DatePickerTimeWheelColumn\n aria-label=\"分钟\"\n values={TIME_PICKER_MINUTE_VALUES}\n value={value.minutes}\n onChange={(minutes) => onChange({ ...value, minutes })}\n />\n </div>\n </div>\n );\n}\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { TimeAndDateClock } from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { cloneAvialaIconElement } from \"../../lib/clone-aviala-icon\";\nimport { iconSlotCssVarStyle } from \"../../lib/icon-slot-sizing\";\nimport { formatTimeValue } from \"../date-picker/date-utils\";\nimport { typographyVariants } from \"../typography\";\nimport {\n TimePickerProvider,\n useTimePickerContext,\n type TimePickerSize,\n type TimePickerValue,\n} from \"./time-picker-context\";\nimport { TimePickerWheels } from \"./time-picker-wheels\";\n\nexport type { TimePickerSize, TimePickerValue } from \"./time-picker-context\";\n\nexport type TimePickerProps = {\n children: ReactNode;\n value?: TimePickerValue;\n defaultValue?: TimePickerValue;\n onValueChange?: (value: TimePickerValue) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: TimePickerSize;\n className?: string;\n};\n\nfunction renderSlotIcon(node: ReactNode): 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-timepicker-trigger__slot\"\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\n >\n {content}\n </span>\n );\n}\n\nexport function TimePicker({\n children,\n value: valueProp,\n defaultValue = { hours: 17, minutes: 0 },\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n size = \"regular\",\n className,\n}: TimePickerProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [internalValue, setInternalValue] = useState<TimePickerValue>(defaultValue);\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n const isOpenControlled = openProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n const value = valueProp !== undefined ? valueProp : internalValue;\n\n const setValue = useCallback(\n (next: TimePickerValue) => {\n if (valueProp === undefined) {\n setInternalValue(next);\n }\n onValueChange?.(next);\n },\n [onValueChange, valueProp]\n );\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n return;\n }\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isOpenControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isOpenControlled, onOpenChange]\n );\n\n const contextValue = useMemo(\n () => ({\n open,\n disabled,\n size,\n value,\n setValue,\n }),\n [disabled, open, size, value, setValue]\n );\n\n return (\n <TimePickerProvider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)}>{children}</div>\n </PopoverPrimitive.Root>\n </TimePickerProvider>\n );\n}\n\nexport type TimePickerTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> & {\n size?: TimePickerSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n placeholder?: string;\n error?: boolean;\n displayValue?: string | null;\n};\n\nexport const TimePickerTrigger = forwardRef<HTMLButtonElement, TimePickerTriggerProps>(\n (\n {\n className,\n size: sizeProp,\n allRound = false,\n leftIcon,\n rightIcon,\n placeholder = \"HH:mm\",\n error = false,\n displayValue,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const { open, disabled: disabledContext, size: sizeContext, value } = useTimePickerContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n const formatted =\n displayValue !== undefined\n ? displayValue\n : formatTimeValue(value.hours, value.minutes);\n const hasValue = formatted != null && formatted !== \"\";\n\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-timepicker-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n {...props}\n >\n {renderSlotIcon(\n leftIcon ?? <TimeAndDateClock level=\"text\" biggerSize aria-hidden />\n )}\n <span className=\"aviala-timepicker-trigger__field\">\n <span\n className={cn(\n \"aviala-timepicker-trigger__value\",\n typographyVariants({ level: \"text\" })\n )}\n data-placeholder={hasValue ? undefined : \"true\"}\n >\n {hasValue ? formatted : placeholder}\n </span>\n </span>\n {renderSlotIcon(rightIcon)}\n </button>\n </PopoverPrimitive.Trigger>\n );\n }\n);\nTimePickerTrigger.displayName = \"TimePickerTrigger\";\n\nexport type TimePickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n portalled?: boolean;\n};\n\nexport const TimePickerContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n TimePickerContentProps\n>(\n (\n {\n className,\n children,\n portalled = true,\n sideOffset = 8,\n align = \"start\",\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n className={cn(\"aviala-timepicker-content\", className)}\n sideOffset={sideOffset}\n align={align}\n {...props}\n >\n {children ?? <TimePickerPanel />}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nTimePickerContent.displayName = \"TimePickerContent\";\n\nexport type TimePickerPanelProps = {\n className?: string;\n};\n\nexport function TimePickerPanel({ className }: TimePickerPanelProps) {\n const { value, setValue } = useTimePickerContext();\n\n return (\n <div className={cn(\"aviala-timepicker-panel\", className)} role=\"application\" aria-label=\"Time picker\">\n <TimePickerWheels value={value} onChange={setValue} />\n </div>\n );\n}\n\nexport type TimePickerFieldProps = Omit<TimePickerTriggerProps, \"displayValue\"> & {\n contentClassName?: string;\n panelClassName?: string;\n value?: TimePickerValue;\n defaultValue?: TimePickerValue;\n onValueChange?: (value: TimePickerValue) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: TimePickerSize;\n className?: string;\n};\n\n/** Convenience field — trigger + time wheel panel. */\nexport function TimePickerField({\n contentClassName,\n panelClassName,\n className,\n size = \"regular\",\n allRound,\n leftIcon,\n rightIcon,\n placeholder,\n error,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n}: TimePickerFieldProps) {\n return (\n <TimePicker\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n size={size}\n className={className}\n >\n <TimePickerTrigger\n size={size}\n allRound={allRound}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n placeholder={placeholder}\n error={error}\n />\n <TimePickerContent className={contentClassName}>\n <TimePickerPanel className={panelClassName} />\n </TimePickerContent>\n </TimePicker>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\n\n/** Figma Components → Information Collect → TimePicker */\nexport type TimePickerSize = \"regular\" | \"big\";\n\nexport type TimePickerValue = {\n hours: number;\n minutes: number;\n};\n\nexport type TimePickerContextValue = {\n open: boolean;\n disabled?: boolean;\n size: TimePickerSize;\n value: TimePickerValue;\n setValue: (value: TimePickerValue) => void;\n};\n\nconst TimePickerContext = createContext<TimePickerContextValue | null>(null);\n\nexport function TimePickerProvider({\n value,\n children,\n}: {\n value: TimePickerContextValue;\n children: ReactNode;\n}) {\n return <TimePickerContext.Provider value={value}>{children}</TimePickerContext.Provider>;\n}\n\nexport function useTimePickerContext() {\n const context = useContext(TimePickerContext);\n if (!context) {\n throw new Error(\"TimePicker compound components must be used within TimePicker.\");\n }\n return context;\n}\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\nimport { OverlayPointerSvg, POPOVER_POINTER } from \"./overlay-pointer\";\n\nexport type PopoverProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>;\n\n/**\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down (outside click, trigger toggle) and Escape\n * must still dismiss on the first interaction.\n */\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n modal = false,\n ...props\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n return;\n }\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange]\n );\n\n return (\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n modal={modal}\n {...props}\n />\n );\n}\n\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport type PopoverContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n /** Render without Portal — use inside nested overlays. */\n portalled?: boolean;\n /** Show a caret arrow pointing at the trigger (Figma with-arrow variant). */\n showArrow?: boolean;\n};\n\nexport const PopoverContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverContentProps\n>(\n (\n {\n className,\n children,\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n portalled = true,\n showArrow = false,\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n className={cn(\"aviala-popover-content\", className)}\n {...props}\n >\n <div className={cn(\"aviala-popover-content__surface\", typographyVariants({ level: \"text\" }))}>\n {children}\n </div>\n {showArrow ? (\n <PopoverPrimitive.Arrow\n asChild\n width={POPOVER_POINTER.width}\n height={POPOVER_POINTER.height}\n >\n <OverlayPointerSvg\n variant=\"popover\"\n className=\"aviala-popover-content__arrow\"\n width={POPOVER_POINTER.width}\n height={POPOVER_POINTER.height}\n path={POPOVER_POINTER.path}\n />\n </PopoverPrimitive.Arrow>\n ) : null}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n","import type { ComponentPropsWithoutRef } from \"react\";\n\n/** Figma System Composition → Tooltip pointer (14×5). */\nexport const TOOLTIP_POINTER = {\n width: 14,\n height: 5,\n path: \"M14 0L0 0C4.97025 1 3.98967 5 7 5C10.0103 5 9.02975 1 14 0Z\",\n} as const;\n\n/** Figma System Composition → Popover pointer (16×5). */\nexport const POPOVER_POINTER = {\n width: 16,\n height: 5,\n path: \"M16 0H0C4.12448 0 4.76977 5 8 5C11.2302 5 11.8755 0 16 0Z\",\n} as const;\n\nexport type OverlayPointerSvgProps = ComponentPropsWithoutRef<\"svg\"> & {\n width: number;\n height: number;\n path: string;\n /** Popover caret — stroked outline so the pointer reads on light page backgrounds. */\n variant?: \"default\" | \"popover\";\n};\n\n/** Curved caret SVG — fill via parent `color` / CSS token on the svg class. */\nexport function OverlayPointerSvg({\n width,\n height,\n path,\n variant = \"default\",\n className,\n style,\n ...props\n}: OverlayPointerSvgProps) {\n const isPopover = variant === \"popover\";\n\n return (\n <svg\n {...props}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={className}\n style={{ ...style, width, height }}\n >\n {isPopover ? (\n <>\n <path d={path} className=\"aviala-popover-content__arrow-outline\" />\n <path d={path} className=\"aviala-popover-content__arrow-fill\" />\n </>\n ) : (\n <path d={path} />\n )}\n </svg>\n );\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { SymbolWrong } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Information Display → Modal (553:58593) */\nexport type ModalSize = \"default\" | \"large\";\n\nconst MODAL_ICON_SIZE = 16;\n\nconst modalContentVariants = cva(\"aviala-modal-content\", {\n variants: {\n size: {\n default: \"aviala-modal-content--size-default\",\n large: \"aviala-modal-content--size-large\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nfunction renderModalIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: MODAL_ICON_SIZE,\n height: MODAL_ICON_SIZE,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return (\n <span className=\"aviala-modal__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nexport type ModalProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\nexport const Modal = DialogPrimitive.Root;\n\nexport const ModalTrigger = DialogPrimitive.Trigger;\n\nexport const ModalPortal = DialogPrimitive.Portal;\n\nexport const ModalClose = DialogPrimitive.Close;\n\nexport type ModalOverlayProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\nexport const ModalOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n ModalOverlayProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\"aviala-modal-overlay\", className)}\n {...props}\n />\n));\nModalOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nexport type ModalContentProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Content> &\n VariantProps<typeof modalContentVariants> & {\n /** Render without Portal — use inside nested overlays. */\n portalled?: boolean;\n /** Show the default overlay scrim. */\n showOverlay?: boolean;\n };\n\nexport const ModalContent = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(\n (\n {\n className,\n children,\n size = \"default\",\n portalled = true,\n showOverlay = true,\n onOpenAutoFocus,\n ...props\n },\n ref\n ) => {\n // Overlay + Content must be direct Portal children (not a Fragment) so Radix\n // Presence can keep each mounted through the exit `data-state=\"closed\"` animation.\n const overlay = showOverlay ? <ModalOverlay /> : null;\n const panel = (\n <DialogPrimitive.Content\n ref={ref}\n className={cn(modalContentVariants({ size }), className)}\n onOpenAutoFocus={onOpenAutoFocus}\n {...props}\n >\n <div className=\"aviala-modal-content__surface\">{children}</div>\n </DialogPrimitive.Content>\n );\n\n if (!portalled) {\n return (\n <>\n {overlay}\n {panel}\n </>\n );\n }\n\n return (\n <DialogPrimitive.Portal>\n {overlay}\n {panel}\n </DialogPrimitive.Portal>\n );\n }\n);\nModalContent.displayName = DialogPrimitive.Content.displayName;\n\nexport type ModalHeaderProps = HTMLAttributes<HTMLDivElement> & {\n /** Optional leading status icon */\n icon?: ReactNode;\n /** Show the leading icon slot */\n showIcon?: boolean;\n /** Show the header close control */\n showClose?: boolean;\n closeLabel?: string;\n};\n\nexport const ModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n (\n {\n className,\n children,\n icon,\n showIcon = false,\n showClose = true,\n closeLabel = \"Close dialog\",\n ...props\n },\n ref\n ) => (\n <div ref={ref} className={cn(\"aviala-modal__header\", className)} {...props}>\n <div className=\"aviala-modal__header-row\">\n {showIcon ? renderModalIcon(icon) : null}\n <div className=\"aviala-modal__header-main\">{children}</div>\n {showClose ? (\n <DialogPrimitive.Close asChild>\n <Button\n type=\"button\"\n mode=\"noBackgroundCustom\"\n iconOnly\n aria-label={closeLabel}\n className=\"aviala-modal__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n />\n </DialogPrimitive.Close>\n ) : null}\n </div>\n </div>\n )\n);\nModalHeader.displayName = \"ModalHeader\";\n\nexport type ModalTitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\nexport const ModalTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n ModalTitleProps\n>(({ className, children, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} asChild {...props}>\n <Typography level=\"text\" className={cn(\"aviala-modal__title\", className)}>\n {children}\n </Typography>\n </DialogPrimitive.Title>\n));\nModalTitle.displayName = DialogPrimitive.Title.displayName;\n\nexport type ModalDescriptionProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\n\nexport const ModalDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n ModalDescriptionProps\n>(({ className, children, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} asChild {...props}>\n <Typography level=\"caption\" className={cn(\"aviala-modal__description\", className)}>\n {children}\n </Typography>\n </DialogPrimitive.Description>\n));\nModalDescription.displayName = DialogPrimitive.Description.displayName;\n\n/** Convenience wrapper — Figma header Typeface (text + caption). */\nexport type ModalHeaderTextProps = Omit<ModalHeaderProps, \"children\"> & {\n title: ReactNode;\n description?: ReactNode;\n};\n\nexport function ModalHeaderText({\n title,\n description,\n ...props\n}: ModalHeaderTextProps) {\n return (\n <ModalHeader {...props}>\n <div className=\"aviala-modal__header-typeface\">\n <ModalTitle>{title}</ModalTitle>\n {description ? <ModalDescription>{description}</ModalDescription> : null}\n </div>\n </ModalHeader>\n );\n}\n\nexport type ModalBodyProps = HTMLAttributes<HTMLDivElement> & {\n /** Figma `Content=Text` — title + body copy preset */\n layout?: \"default\" | \"text\";\n title?: ReactNode;\n description?: ReactNode;\n};\n\nexport const ModalBody = forwardRef<HTMLDivElement, ModalBodyProps>(\n ({ className, children, layout = \"default\", title, description, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-modal__body\", className)} {...props}>\n {layout === \"text\" ? (\n <Typeface\n className=\"aviala-modal__body-typeface\"\n content=\"textTitle\"\n primary={title}\n secondary={description ?? children}\n />\n ) : (\n children\n )}\n </div>\n )\n);\nModalBody.displayName = \"ModalBody\";\n\nexport type ModalFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-modal__footer\", className)} {...props} />\n )\n);\nModalFooter.displayName = \"ModalFooter\";\n\nexport { modalContentVariants };\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\nimport { OverlayPointerSvg, TOOLTIP_POINTER } from \"./overlay-pointer\";\n\n/** Default show delay — 300ms per ALD / Radix convention. */\nexport const TOOLTIP_DELAY_DURATION = 300;\n\nexport type TooltipProviderProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>;\n\nexport function TooltipProvider({\n delayDuration = TOOLTIP_DELAY_DURATION,\n skipDelayDuration = 0,\n ...props\n}: TooltipProviderProps) {\n return (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n {...props}\n />\n );\n}\n\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport type TooltipContentProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n /** Show a caret arrow pointing at the trigger (default true). */\n showArrow?: boolean;\n};\n\nexport const TooltipContent = forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(\n (\n {\n className,\n children,\n sideOffset = 4,\n collisionPadding = 8,\n showArrow = true,\n ...props\n },\n ref\n ) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n className={cn(\"aviala-tooltip-content\", className)}\n {...props}\n >\n <div className={cn(\"aviala-tooltip-content__surface\", typographyVariants({ level: \"caption\" }))}>\n {children}\n </div>\n {showArrow ? (\n <TooltipPrimitive.Arrow\n asChild\n width={TOOLTIP_POINTER.width}\n height={TOOLTIP_POINTER.height}\n >\n <OverlayPointerSvg\n className=\"aviala-tooltip-content__arrow\"\n width={TOOLTIP_POINTER.width}\n height={TOOLTIP_POINTER.height}\n path={TOOLTIP_POINTER.path}\n />\n </TooltipPrimitive.Arrow>\n ) : null}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n);\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n GeneralNotification,\n SymbolInformationCircle,\n SymbolRightCircle,\n SymbolWarningCircle,\n SymbolWrong,\n SymbolWrongCircle,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Link } from \"./link\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Response And Feedback → Feedback (553:58620) */\nexport type FeedbackType = \"information\" | \"warning\" | \"wrong\" | \"success\" | \"normal\";\nexport type FeedbackSize = \"default\" | \"small\";\nexport type FeedbackMode = \"default\" | \"primary\";\n\nconst FEEDBACK_ICON_SIZE = 22;\n\nconst feedbackVariants = cva(\"aviala-feedback\", {\n variants: {\n type: {\n information: \"aviala-feedback--type-information\",\n warning: \"aviala-feedback--type-warning\",\n wrong: \"aviala-feedback--type-wrong\",\n success: \"aviala-feedback--type-success\",\n normal: \"aviala-feedback--type-normal\",\n },\n size: {\n default: \"aviala-feedback--size-default\",\n small: \"aviala-feedback--size-small\",\n },\n mode: {\n default: \"aviala-feedback--mode-default\",\n primary: \"aviala-feedback--mode-primary\",\n },\n },\n defaultVariants: {\n type: \"information\",\n size: \"default\",\n mode: \"default\",\n },\n});\n\nfunction renderFeedbackIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: FEEDBACK_ICON_SIZE,\n height: FEEDBACK_ICON_SIZE,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return (\n <span className=\"aviala-feedback__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nfunction defaultStatusIcon(type: FeedbackType, mode: FeedbackMode): ReactNode {\n const iconMode = mode === \"primary\" ? \"fill\" : \"fill\";\n const thickness = \"Regular\";\n\n switch (type) {\n case \"information\":\n return (\n <SymbolInformationCircle thickness={thickness} mode={iconMode} aria-hidden />\n );\n case \"warning\":\n return <SymbolWarningCircle thickness={thickness} mode={iconMode} aria-hidden />;\n case \"wrong\":\n return <SymbolWrongCircle thickness={thickness} mode={iconMode} aria-hidden />;\n case \"success\":\n return <SymbolRightCircle thickness={thickness} mode={iconMode} aria-hidden />;\n case \"normal\":\n return <GeneralNotification thickness={thickness} mode=\"default\" aria-hidden />;\n }\n}\n\nexport type FeedbackProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof feedbackVariants> & {\n /** Primary line — bold on default size */\n title: ReactNode;\n /** Secondary caption line — default size only */\n description?: ReactNode;\n /** Status icon override */\n icon?: ReactNode;\n /** Figma `Show Close Button` */\n showClose?: boolean;\n onClose?: (event: MouseEvent<HTMLAnchorElement>) => void;\n closeLabel?: string;\n /** Figma `Show Quick Action` — inline link in body row */\n action?: ReactNode;\n onAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n };\n\nexport const Feedback = forwardRef<HTMLDivElement, FeedbackProps>(\n (\n {\n className,\n type = \"information\",\n size = \"default\",\n mode: modeProp = \"default\",\n title,\n description,\n icon,\n showClose = true,\n onClose,\n closeLabel = \"Dismiss\",\n action,\n onAction,\n ...props\n },\n ref\n ) => {\n const resolvedType = type ?? \"information\";\n const resolvedSize = size ?? \"default\";\n const mode = resolvedType === \"normal\" ? \"default\" : (modeProp ?? \"default\");\n const tone = mode === \"primary\" ? \"white\" : \"default\";\n const isSmall = resolvedSize === \"small\";\n const resolvedRole = resolvedType === \"wrong\" ? \"alert\" : \"status\";\n\n return (\n <div\n ref={ref}\n role={resolvedRole}\n aria-live={resolvedType === \"wrong\" ? \"assertive\" : \"polite\"}\n className={cn(\n feedbackVariants({ type: resolvedType, size: resolvedSize, mode }),\n className\n )}\n data-type={resolvedType}\n data-size={resolvedSize}\n data-mode={mode}\n {...props}\n >\n <div className=\"aviala-feedback__body\">\n {renderFeedbackIcon(icon ?? defaultStatusIcon(resolvedType, mode))}\n\n {isSmall ? (\n <Typography level=\"text\" tone={tone} className=\"aviala-feedback__title\">\n {title}\n </Typography>\n ) : (\n <Typeface\n className=\"aviala-feedback__typeface\"\n content=\"textCaption\"\n primary={title}\n secondary={description}\n tone={tone}\n />\n )}\n\n {action ? (\n <Link\n level=\"text\"\n mode=\"noBackground\"\n href={onAction ? \"#\" : undefined}\n className=\"aviala-feedback__action\"\n onClick={(event) => {\n if (onAction) {\n event.preventDefault();\n onAction(event);\n }\n }}\n >\n {action}\n </Link>\n ) : null}\n\n {showClose ? (\n <Link\n level=\"text\"\n mode=\"noBackgroundCustom\"\n iconOnly\n href={onClose ? \"#\" : undefined}\n aria-label={closeLabel}\n className=\"aviala-feedback__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n onClick={(event) => {\n if (onClose) {\n event.preventDefault();\n onClose(event);\n }\n }}\n />\n ) : null}\n </div>\n </div>\n );\n }\n);\nFeedback.displayName = \"Feedback\";\n","import {\n SymbolInformationCircle,\n SymbolRightCircle,\n SymbolWarningCircle,\n SymbolWrong,\n SymbolWrongCircle,\n} from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Link } from \"./link\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Response And Feedback → Alert (527:56855) */\nexport type AlertType = \"info\" | \"warning\" | \"error\" | \"success\" | \"neutral\";\nexport type AlertSize = \"default\" | \"small\";\n/** Figma `Style` — bordered light surface vs filled secondary surface */\nexport type AlertAppearance = \"default\" | \"light\";\n\nconst ALERT_ICON_SIZE = 16;\n\nconst alertVariants = cva(\"aviala-alert\", {\n variants: {\n type: {\n info: \"aviala-alert--type-info\",\n warning: \"aviala-alert--type-warning\",\n error: \"aviala-alert--type-error\",\n success: \"aviala-alert--type-success\",\n neutral: \"aviala-alert--type-neutral\",\n },\n size: {\n default: \"aviala-alert--size-default\",\n small: \"aviala-alert--size-small\",\n },\n appearance: {\n default: \"aviala-alert--appearance-default\",\n light: \"aviala-alert--appearance-light\",\n },\n },\n defaultVariants: {\n type: \"info\",\n size: \"default\",\n appearance: \"default\",\n },\n});\n\nfunction renderAlertIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: ALERT_ICON_SIZE,\n height: ALERT_ICON_SIZE,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return (\n <span className=\"aviala-alert__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nfunction defaultStatusIcon(type: AlertType): ReactNode {\n const iconProps = { thickness: \"Regular\" as const, mode: \"fill\" as const, \"aria-hidden\": true };\n\n switch (type) {\n case \"info\":\n case \"neutral\":\n return <SymbolInformationCircle {...iconProps} />;\n case \"warning\":\n return <SymbolWarningCircle {...iconProps} />;\n case \"error\":\n return <SymbolWrongCircle {...iconProps} />;\n case \"success\":\n return <SymbolRightCircle {...iconProps} />;\n }\n}\n\nexport type AlertProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof alertVariants> & {\n /** Primary line — bold on default size */\n title: ReactNode;\n /** Secondary caption line — default size only */\n description?: ReactNode;\n /** Status icon override */\n icon?: ReactNode;\n /** Show the leading status icon */\n showIcon?: boolean;\n /** Figma `Show Close Button` */\n dismissible?: boolean;\n onDismiss?: (event: MouseEvent<HTMLAnchorElement>) => void;\n closeLabel?: string;\n /** Figma `Show Quick Action` — inline link in body row */\n quickAction?: ReactNode;\n onQuickAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n /** Figma footer primary action */\n action?: ReactNode;\n onAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n /** Figma footer secondary action */\n secondaryAction?: ReactNode;\n onSecondaryAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n /** Figma `Show Action` — footer action row */\n showActions?: boolean;\n };\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n type = \"info\",\n size = \"default\",\n appearance = \"default\",\n title,\n description,\n icon,\n showIcon = true,\n dismissible = true,\n onDismiss,\n closeLabel = \"Dismiss alert\",\n quickAction,\n onQuickAction,\n action,\n onAction,\n secondaryAction,\n onSecondaryAction,\n showActions = false,\n ...props\n },\n ref\n ) => {\n const isSmall = size === \"small\";\n const resolvedType = type ?? \"info\";\n const resolvedRole = resolvedType === \"error\" ? \"alert\" : \"status\";\n const hasActions = showActions && (action || secondaryAction);\n\n return (\n <div\n ref={ref}\n role={resolvedRole}\n aria-live={resolvedType === \"error\" ? \"assertive\" : \"polite\"}\n className={cn(alertVariants({ type, size, appearance }), className)}\n data-type={resolvedType}\n data-size={size}\n data-appearance={appearance}\n {...props}\n >\n <div className=\"aviala-alert__body\">\n {showIcon ? renderAlertIcon(icon ?? defaultStatusIcon(resolvedType)) : null}\n\n {isSmall ? (\n <Typography level=\"text\" className=\"aviala-alert__title\">\n {title}\n </Typography>\n ) : (\n <Typeface\n className=\"aviala-alert__typeface\"\n content=\"textCaption\"\n primary={title}\n secondary={description}\n />\n )}\n\n {quickAction ? (\n <Link\n level=\"text\"\n mode=\"noBackground\"\n href={onQuickAction ? \"#\" : undefined}\n className=\"aviala-alert__quick-action\"\n onClick={(event) => {\n if (onQuickAction) {\n event.preventDefault();\n onQuickAction(event);\n }\n }}\n >\n {quickAction}\n </Link>\n ) : null}\n\n {dismissible ? (\n <Link\n level=\"text\"\n mode=\"noBackgroundCustom\"\n iconOnly\n href={onDismiss ? \"#\" : undefined}\n aria-label={closeLabel}\n className=\"aviala-alert__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n onClick={(event) => {\n if (onDismiss) {\n event.preventDefault();\n onDismiss(event);\n }\n }}\n />\n ) : null}\n </div>\n\n {hasActions ? (\n <div className=\"aviala-alert__actions\">\n {action ? (\n <Link\n level=\"caption\"\n mode=\"noBackground\"\n href={onAction ? \"#\" : undefined}\n className=\"aviala-alert__action\"\n onClick={(event) => {\n if (onAction) {\n event.preventDefault();\n onAction(event);\n }\n }}\n >\n {action}\n </Link>\n ) : null}\n {secondaryAction ? (\n <Link\n level=\"caption\"\n mode=\"noBackgroundCustom\"\n href={onSecondaryAction ? \"#\" : undefined}\n className=\"aviala-alert__action aviala-alert__action--secondary\"\n onClick={(event) => {\n if (onSecondaryAction) {\n event.preventDefault();\n onSecondaryAction(event);\n }\n }}\n >\n {secondaryAction}\n </Link>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n }\n);\nAlert.displayName = \"Alert\";\n\nexport { alertVariants };\n","import {\n DirectionArrowRightLight,\n GeneralSetting,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./button\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typeface } from \"./typeface\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma List item `Type` variant (738:148304, 647:87555) */\nexport type ListItemType = \"action\" | \"switch\" | \"select\";\n\n/** Figma List item `left icon setting` variant */\nexport type ListItemLeading = \"shaped\" | \"default\" | \"none\";\n\nexport type ListProps = HTMLAttributes<HTMLDivElement> & {\n /** Optional section title above the list card */\n title?: ReactNode;\n};\n\n/** Figma Structure Navigation → List root */\nexport const List = forwardRef<HTMLDivElement, ListProps>(\n ({ className, title, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-list\", className)} {...props}>\n {title != null ? <ListTitle>{title}</ListTitle> : null}\n <ListGroup>{children}</ListGroup>\n </div>\n )\n);\nList.displayName = \"List\";\n\nexport type ListTitleProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma List title row — Typography text level */\nexport const ListTitle = forwardRef<HTMLDivElement, ListTitleProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-list-title\", className)} {...props}>\n <span className={cn(typographyVariants({ level: \"text\" }))}>{children}</span>\n </div>\n )\n);\nListTitle.displayName = \"ListTitle\";\n\nexport type ListGroupProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma List card container — rounded white surface for items */\nexport const ListGroup = forwardRef<HTMLDivElement, ListGroupProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-list-group\", className)} role=\"list\" {...props}>\n {children}\n </div>\n )\n);\nListGroup.displayName = \"ListGroup\";\n\nexport type ListItemGroupProps = {\n label?: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\n/** Convenience wrapper — titled list section (Figma List title + card) */\nexport function ListItemGroup({ label, children, className }: ListItemGroupProps) {\n return (\n <div className={cn(\"aviala-list\", className)}>\n {label != null ? <ListTitle>{label}</ListTitle> : null}\n <ListGroup>{children}</ListGroup>\n </div>\n );\n}\n\nexport type ListDividerProps = HTMLAttributes<HTMLSpanElement>;\n\n/** Vertical divider between trailing actions (Figma `last` separator) */\nexport const ListDivider = forwardRef<HTMLSpanElement, ListDividerProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"aviala-list-item__divider\", className)}\n aria-hidden\n {...props}\n />\n )\n);\nListDivider.displayName = \"ListDivider\";\n\nexport type ListSeparatorProps = HTMLAttributes<HTMLHRElement>;\n\n/** Horizontal separator between list groups */\nexport const ListSeparator = forwardRef<HTMLHRElement, ListSeparatorProps>(\n ({ className, ...props }, ref) => (\n <hr ref={ref} className={cn(\"aviala-list-separator\", className)} {...props} />\n )\n);\nListSeparator.displayName = \"ListSeparator\";\n\nfunction renderLeadingIcon(node: ReactNode, leading: ListItemLeading): ReactNode {\n if (leading === \"none\") return null;\n\n const iconSize = leading === \"shaped\" ? 20 : 22;\n const content =\n node ??\n (leading === \"shaped\" ? (\n <GeneralSetting aria-hidden />\n ) : (\n <GeneralSetting aria-hidden />\n ));\n\n const rendered =\n isValidElement(content) && typeof content.type !== \"string\"\n ? cloneElement(content as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: iconSize,\n height: iconSize,\n className: cn(\n (content as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : content;\n\n return (\n <span className=\"aviala-list-item__icon\">\n <span\n className={cn(\n leading === \"shaped\"\n ? \"aviala-list-item__icon--shaped\"\n : \"aviala-list-item__icon--default\"\n )}\n >\n {rendered}\n </span>\n </span>\n );\n}\n\nexport type ListItemProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Figma `Type` variant */\n itemType?: ListItemType;\n /** Figma `left icon setting` variant */\n leading?: ListItemLeading;\n /** Leading icon node — defaults to GeneralSetting */\n icon?: ReactNode;\n /** Primary line (Typeface text) */\n title: ReactNode;\n /** Secondary line (Typeface caption) */\n subtitle?: ReactNode;\n /** Primary trailing button label */\n actionLabel?: ReactNode;\n /** Override primary trailing button */\n action?: ReactNode;\n /** Secondary icon-only button for `action` type */\n secondaryAction?: ReactNode;\n /** Trailing select slot for `select` type */\n select?: ReactNode;\n /** Trailing switch props for `switch` type */\n switchProps?: Omit<SwitchProps, \"size\">;\n /** Fully custom trailing region — overrides type presets */\n trailing?: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n /** Enables hover highlight (auto when `onClick` is set) */\n interactive?: boolean;\n};\n\n/** Figma Structure Navigation → List item */\nexport const ListItem = forwardRef<HTMLDivElement, ListItemProps>(\n (\n {\n className,\n itemType = \"select\",\n leading = \"shaped\",\n icon,\n title,\n subtitle,\n actionLabel = \"Text\",\n action,\n secondaryAction,\n select,\n switchProps,\n trailing,\n selected = false,\n disabled = false,\n interactive,\n onClick,\n ...props\n },\n ref\n ) => {\n const isInteractive = interactive ?? onClick != null;\n\n const primaryAction =\n action ??\n (\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\n {actionLabel}\n </Button>\n );\n\n const renderTrailing = () => {\n if (trailing !== undefined) return trailing;\n\n switch (itemType) {\n case \"action\":\n return (\n <div className=\"aviala-list-item__more\">\n <div className=\"aviala-list-item__trailing\">\n {primaryAction}\n {secondaryAction ?? (\n <Button\n mode=\"default\"\n size=\"regular\"\n iconOnly\n aria-label=\"More\"\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n </div>\n <ListDivider />\n <span className=\"aviala-list-item__chevron\" aria-hidden>\n <DirectionArrowRightLight width={18} height={18} />\n </span>\n </div>\n );\n case \"switch\":\n return (\n <div className=\"aviala-list-item__trailing\">\n {primaryAction}\n <ListDivider />\n <Switch {...switchProps} />\n </div>\n );\n case \"select\":\n default:\n return (\n <div className=\"aviala-list-item__trailing\">\n {primaryAction}\n <ListDivider />\n <span className=\"aviala-list-item__select\">{select}</span>\n </div>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n className={cn(\"aviala-list-item\", className)}\n data-leading={leading}\n data-type={itemType}\n data-selected={selected ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n data-interactive={isInteractive ? \"true\" : undefined}\n onClick={disabled ? undefined : onClick}\n {...props}\n >\n {renderLeadingIcon(icon, leading)}\n <div className=\"aviala-list-item__body\">\n <div className=\"aviala-list-item__content\">\n <div className=\"aviala-list-item__head\">\n <Typeface content=\"textCaption\" primary={title} secondary={subtitle} />\n </div>\n {renderTrailing()}\n </div>\n </div>\n </div>\n );\n }\n);\nListItem.displayName = \"ListItem\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\n\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\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 { Popover } from \"./popover\";\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 isInsideCollapsedGroup(item: HTMLElement): boolean {\n return (\n item.closest('.aviala-navigation-item-group[data-expanded=\"false\"]') !== null\n );\n}\n\nfunction findActiveNavigationItem(group: HTMLElement): HTMLElement | null {\n const activeItems = Array.from(\n group.querySelectorAll<HTMLElement>(\n '.aviala-navigation-item[data-active=\"true\"]'\n )\n ).filter((item) => !isInsideCollapsedGroup(item));\n\n if (activeItems.length === 0) return null;\n\n const activeChild = activeItems.find(\n (item) => item.getAttribute(\"data-item-type\") === \"child\"\n );\n\n return activeChild ?? activeItems[0]!;\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\n/** Matches the `--navigation-transition-easing` fallback cubic-bezier(0.33, 1, 0.68, 1). */\nfunction easeOutCubic(t: number) {\n return 1 - Math.pow(1 - t, 3);\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 /**\n * While a child group's grid transition reflows the layout, tween the\n * indicator from its current visual position toward a live re-measured\n * target. Measuring the final position up-front is wrong (the layout has\n * not moved yet when `data-expanded` flips), which used to make the\n * indicator snap without animation once the transition ended.\n */\n const startExpandCollapseTracking = useCallback(() => {\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 } = getNavigationAnimationTiming(group);\n\n // Capture the start in viewport coordinates: when a horizontal group\n // resizes, the whole navigation group can shift, so group-relative\n // start metrics would ride along with the moving origin.\n const startRect = el.getBoundingClientRect();\n const startVisible = el.dataset.visible === \"true\";\n const startTime = performance.now();\n\n isLayoutTrackingRef.current = true;\n\n const finish = () => {\n layoutTrackingFrameRef.current = null;\n isLayoutTrackingRef.current = false;\n const final = measureIndicator();\n if (final) syncIndicator(final, true);\n };\n\n const tick = (now: number) => {\n if (!isLayoutTrackingRef.current) return;\n\n const progress = Math.min(1, (now - startTime) / durationMs);\n\n if (progress >= 1) {\n finish();\n return;\n }\n\n const target = measureIndicator();\n\n if (target) {\n if (!startVisible || !target.visible) {\n syncIndicator(target, true);\n } else {\n const eased = easeOutCubic(progress);\n const groupRect = group.getBoundingClientRect();\n const targetAbsX = groupRect.left + target.x;\n const targetAbsY = groupRect.top + target.y;\n\n syncIndicator(\n {\n x:\n startRect.left +\n (targetAbsX - startRect.left) * eased -\n groupRect.left,\n y:\n startRect.top +\n (targetAbsY - startRect.top) * eased -\n groupRect.top,\n width: startRect.width + (target.width - startRect.width) * eased,\n height:\n startRect.height + (target.height - startRect.height) * eased,\n visible: true,\n },\n true\n );\n }\n }\n\n layoutTrackingFrameRef.current = requestAnimationFrame(tick);\n };\n\n layoutTrackingFrameRef.current = requestAnimationFrame(tick);\n }, [cancelLayoutTracking, groupRef, measureIndicator, syncIndicator]);\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 const expandCollapseChanged = mutations.some(\n (mutation) =>\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-expanded\" &&\n mutation.target instanceof HTMLElement\n );\n\n if (expandCollapseChanged) {\n startExpandCollapseTracking();\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 (\n event.propertyName !== \"grid-template-rows\" &&\n event.propertyName !== \"width\"\n ) {\n return;\n }\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 aviala-focus-ring\", 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 const isCollapsed = isCollapsible && !expanded;\n const innerRef = useRef<HTMLDivElement>(null);\n\n // Collapsed children stay in the DOM for the height transition, so `inert`\n // is what keeps them out of the tab order and the accessibility tree. Set it\n // imperatively: React 18 and 19 disagree on the JSX prop type.\n useLayoutEffect(() => {\n const inner = innerRef.current;\n\n if (!inner) return;\n\n if (isCollapsed) inner.setAttribute(\"inert\", \"\");\n else inner.removeAttribute(\"inert\");\n }, [isCollapsed]);\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={isCollapsed ? true : undefined}\n {...props}\n >\n {isCollapsible ? (\n <div ref={innerRef} className=\"aviala-navigation-item-group__inner\">\n {children}\n </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\n/* -------------------------------------------------------------------------\n * NavigationItemMenu — child items collapsed into a hover flyout menu.\n * Select-like API: value/defaultValue/onValueChange on the root, `value` on\n * each item. Hidden by default, shown on hover (or click/Enter on the\n * trigger). Selected item gets a highlight, no check icon.\n * ---------------------------------------------------------------------- */\n\nconst NAVIGATION_MENU_CLOSE_DELAY_MS = 150;\n\ntype NavigationItemMenuContextValue = {\n value: string | undefined;\n\n hasSelection: boolean;\n\n select: (value: string) => void;\n\n openMenu: (viaHover: boolean) => void;\n\n scheduleClose: () => void;\n\n cancelClose: () => void;\n\n openedByHoverRef: RefObject<boolean>;\n};\n\nconst NavigationItemMenuContext =\n createContext<NavigationItemMenuContextValue | null>(null);\n\nfunction useNavigationItemMenuContext(component: string) {\n const context = useContext(NavigationItemMenuContext);\n\n if (!context) {\n throw new Error(`${component} must be used within <NavigationItemMenu>`);\n }\n\n return context;\n}\n\nexport type NavigationItemMenuProps = {\n /** Selected child value — similar to Select `value`. */\n value?: string;\n\n defaultValue?: string;\n\n onValueChange?: (value: string) => void;\n\n open?: boolean;\n\n onOpenChange?: (open: boolean) => void;\n\n children: ReactNode;\n};\n\nexport function NavigationItemMenu({\n value: valueProp,\n\n defaultValue,\n\n onValueChange,\n\n open: openProp,\n\n onOpenChange,\n\n children,\n}: NavigationItemMenuProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n const isValueControlled = valueProp !== undefined;\n\n const value = isValueControlled ? valueProp : internalValue;\n\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isOpenControlled = openProp !== undefined;\n\n const open = isOpenControlled ? openProp : internalOpen;\n\n const closeTimerRef = useRef<number | null>(null);\n\n const openedByHoverRef = useRef(false);\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isOpenControlled) setInternalOpen(nextOpen);\n\n onOpenChange?.(nextOpen);\n },\n [isOpenControlled, onOpenChange]\n );\n\n const cancelClose = useCallback(() => {\n if (closeTimerRef.current != null) {\n window.clearTimeout(closeTimerRef.current);\n\n closeTimerRef.current = null;\n }\n }, []);\n\n const openMenu = useCallback(\n (viaHover: boolean) => {\n cancelClose();\n\n openedByHoverRef.current = viaHover;\n\n setOpen(true);\n },\n [cancelClose, setOpen]\n );\n\n const scheduleClose = useCallback(() => {\n cancelClose();\n\n closeTimerRef.current = window.setTimeout(() => {\n closeTimerRef.current = null;\n\n setOpen(false);\n }, NAVIGATION_MENU_CLOSE_DELAY_MS);\n }, [cancelClose, setOpen]);\n\n const select = useCallback(\n (nextValue: string) => {\n if (!isValueControlled) setInternalValue(nextValue);\n\n onValueChange?.(nextValue);\n\n cancelClose();\n\n setOpen(false);\n },\n [cancelClose, isValueControlled, onValueChange, setOpen]\n );\n\n useEffect(() => cancelClose, [cancelClose]);\n\n const contextValue = useMemo<NavigationItemMenuContextValue>(\n () => ({\n value,\n\n hasSelection: value != null && value !== \"\",\n\n select,\n\n openMenu,\n\n scheduleClose,\n\n cancelClose,\n\n openedByHoverRef,\n }),\n [cancelClose, openMenu, scheduleClose, select, value]\n );\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) openedByHoverRef.current = false;\n\n cancelClose();\n\n setOpen(nextOpen);\n },\n [cancelClose, setOpen]\n );\n\n return (\n <NavigationItemMenuContext.Provider value={contextValue}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n {children}\n </Popover>\n </NavigationItemMenuContext.Provider>\n );\n}\n\nexport type NavigationItemMenuTriggerProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"children\"\n> & {\n /** Defaults to highlighted when the menu has a selected child. */\n active?: boolean;\n\n leftIcon?: ReactNode;\n\n rightIcon?: ReactNode;\n\n children: ReactNode;\n};\n\n/** Parent item — renders as a Navigation tab item and anchors the flyout. */\n\nexport const NavigationItemMenuTrigger = forwardRef<\n HTMLButtonElement,\n NavigationItemMenuTriggerProps\n>(\n (\n {\n className,\n\n active,\n\n leftIcon,\n\n rightIcon,\n\n children,\n\n ...props\n },\n\n ref\n ) => {\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuTrigger\");\n\n const isActive = active ?? menu.hasSelection;\n\n const mode = navigationItemButtonMode(isActive);\n\n return (\n <span\n className={cn(\"aviala-navigation-item\", className)}\n data-item-type=\"default\"\n data-active={isActive ? \"true\" : \"false\"}\n onMouseEnter={() => menu.openMenu(true)}\n onMouseLeave={menu.scheduleClose}\n >\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n buttonVariants({ mode }),\n \"aviala-navigation-item__control whitespace-normal\"\n )}\n data-size=\"regular\"\n {...props}\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 </button>\n </PopoverPrimitive.Trigger>\n </span>\n );\n }\n);\n\nNavigationItemMenuTrigger.displayName = \"NavigationItemMenuTrigger\";\n\nexport type NavigationItemMenuContentProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Content\n>;\n\n/** Flyout surface — right of the item in vertical, below it in horizontal. */\n\nexport const NavigationItemMenuContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n NavigationItemMenuContentProps\n>(\n (\n {\n className,\n\n side,\n\n align = \"start\",\n\n sideOffset = 6,\n\n collisionPadding = 8,\n\n onOpenAutoFocus,\n\n ...props\n },\n\n ref\n ) => {\n const direction = useNavigationDirection();\n\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuContent\");\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={side ?? (direction === \"vertical\" ? \"right\" : \"bottom\")}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n className={cn(\"aviala-navigation-menu\", className)}\n onMouseEnter={menu.cancelClose}\n onMouseLeave={menu.scheduleClose}\n onOpenAutoFocus={(event) => {\n // Hover-open must not steal focus; keyboard/click open should.\n if (menu.openedByHoverRef.current) event.preventDefault();\n\n onOpenAutoFocus?.(event);\n }}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n }\n);\n\nNavigationItemMenuContent.displayName = \"NavigationItemMenuContent\";\n\nexport type NavigationItemMenuItemProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"children\" | \"value\"\n> & {\n value: string;\n\n /** Defaults to highlighted when it matches the menu value. */\n selected?: boolean;\n\n leftIcon?: ReactNode;\n\n rightIcon?: ReactNode;\n\n children: ReactNode;\n};\n\n/** Child option — highlighted when selected, no check icon by default. */\n\nexport const NavigationItemMenuItem = forwardRef<\n HTMLButtonElement,\n NavigationItemMenuItemProps\n>(\n (\n {\n className,\n\n value,\n\n selected,\n\n leftIcon,\n\n rightIcon,\n\n disabled,\n\n onClick,\n\n children,\n\n ...props\n },\n\n ref\n ) => {\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuItem\");\n\n const isSelected = selected ?? menu.value === value;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n \"aviala-navigation-menu-item aviala-focus-ring\",\n className\n )}\n data-selected={isSelected ? \"true\" : \"false\"}\n data-disabled={disabled ? \"\" : undefined}\n aria-current={isSelected ? \"true\" : undefined}\n onClick={(event) => {\n onClick?.(event);\n\n if (!event.defaultPrevented) menu.select(value);\n }}\n {...props}\n >\n {renderItemIcon(leftIcon)}\n\n <Typography\n level=\"text\"\n as=\"span\"\n className=\"aviala-navigation-menu-item__label\"\n >\n {children}\n </Typography>\n\n {rightIcon ? (\n <span className=\"aviala-navigation-menu-item__trailing\">\n {renderItemIcon(rightIcon)}\n </span>\n ) : null}\n </button>\n );\n }\n);\n\nNavigationItemMenuItem.displayName = \"NavigationItemMenuItem\";\n","import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → Information Collect → Slider (384:21585) */\nexport type SliderSize = \"default\" | \"big\";\nexport type SliderType = \"default\" | \"range\";\n\nconst sliderVariants = cva(\"aviala-slider\", {\n variants: {\n size: {\n default: \"aviala-slider--size-default\",\n big: \"aviala-slider--size-big\",\n },\n type: {\n default: \"aviala-slider--type-default\",\n range: \"aviala-slider--type-range\",\n },\n },\n defaultVariants: {\n size: \"default\",\n type: \"default\",\n },\n});\n\nexport type SliderProps = Omit<\n ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"orientation\"\n> &\n VariantProps<typeof sliderVariants> & {\n /** Figma `Type` — single thumb vs range (two thumbs) */\n type?: SliderType;\n };\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n size = \"default\",\n type = \"default\",\n disabled,\n value,\n defaultValue,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const resolvedType = type ?? \"default\";\n const resolvedSize = size ?? \"default\";\n const isRange = resolvedType === \"range\";\n const resolvedDefaultValue =\n defaultValue ?? (isRange ? [25, 75] : [50]);\n const thumbCount = isRange\n ? Math.max(2, value?.length ?? defaultValue?.length ?? 2)\n : 1;\n\n return (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n sliderVariants({ size: resolvedSize, type: resolvedType }),\n className\n )}\n disabled={disabled}\n value={value}\n defaultValue={value == null ? resolvedDefaultValue : undefined}\n min={min}\n max={max}\n data-size={resolvedSize}\n data-type={resolvedType}\n data-disabled={disabled ? \"true\" : undefined}\n {...props}\n >\n <SliderPrimitive.Track className=\"aviala-slider__track\">\n <SliderPrimitive.Range className=\"aviala-slider__range\" />\n </SliderPrimitive.Track>\n {Array.from({ length: thumbCount }, (_, index) => (\n <SliderPrimitive.Thumb key={index} className=\"aviala-slider__thumb aviala-focus-ring\" />\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\nSlider.displayName = \"Slider\";\n","import { GeneralUpload } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n useRef,\n useState,\n type ChangeEvent,\n type DragEvent,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Information Collect → Upload (527:56239) */\nexport type UploadStyle = \"default\" | \"large\";\n\nconst uploadVariants = cva(\"aviala-upload aviala-focus-ring\", {\n variants: {\n style: {\n default: \"aviala-upload--style-default\",\n large: \"aviala-upload--style-large\",\n },\n },\n defaultVariants: {\n style: \"default\",\n },\n});\n\nexport type UploadProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"style\"> &\n VariantProps<typeof uploadVariants> & {\n /** Primary line — Large style */\n title?: ReactNode;\n /** Secondary line — Large style */\n description?: ReactNode;\n /** Default style button label */\n label?: ReactNode;\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n /** Enable drag-and-drop (Large style defaults to true) */\n dragAndDrop?: boolean;\n onChange?: (files: FileList | null) => void;\n inputProps?: Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"accept\" | \"multiple\" | \"disabled\" | \"onChange\"\n >;\n };\n\nexport const Upload = forwardRef<HTMLDivElement, UploadProps>(\n (\n {\n className,\n style = \"default\",\n title = \"Drag the file here to upload the file\",\n description = \"Or click here to upload\",\n label = \"Upload\",\n accept,\n multiple,\n disabled,\n dragAndDrop,\n onChange,\n inputProps,\n onDragOver,\n onDragLeave,\n onDrop,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n const resolvedStyle = style ?? \"default\";\n const allowDrag = dragAndDrop ?? resolvedStyle === \"large\";\n\n const openPicker = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.files);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n onDrop?.(event);\n setDragging(false);\n if (disabled || !allowDrag) return;\n event.preventDefault();\n if (event.dataTransfer.files?.length) {\n onChange?.(event.dataTransfer.files);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n className={cn(uploadVariants({ style: resolvedStyle }), className)}\n data-style={resolvedStyle}\n data-disabled={disabled ? \"true\" : undefined}\n data-dragging={dragging ? \"true\" : undefined}\n aria-disabled={disabled || undefined}\n onClick={openPicker}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openPicker();\n }\n }}\n onDragOver={(event) => {\n onDragOver?.(event);\n if (disabled || !allowDrag) return;\n event.preventDefault();\n setDragging(true);\n }}\n onDragLeave={(event) => {\n onDragLeave?.(event);\n setDragging(false);\n }}\n onDrop={handleDrop}\n {...props}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className=\"aviala-upload__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleChange}\n tabIndex={-1}\n aria-hidden\n {...inputProps}\n />\n <span className=\"aviala-upload__icon\" aria-hidden>\n <GeneralUpload width={16} height={16} />\n </span>\n {resolvedStyle === \"large\" ? (\n <Typeface\n className=\"aviala-upload__typeface\"\n content=\"textCaption\"\n primary={title}\n secondary={description}\n />\n ) : (\n <Typography level=\"text\" as=\"span\" className=\"aviala-upload__label\">\n {label}\n </Typography>\n )}\n </div>\n );\n }\n);\nUpload.displayName = \"Upload\";\n","import {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n stickyRoundIndex,\n WHEEL_SCROLL_END_MS,\n WHEEL_STEP_THRESHOLD_FACTOR,\n WHEEL_STICKY_AMOUNT,\n} from \"../lib/sticky-wheel\";\nimport { typographyVariants } from \"./typography\";\n\nconst LOOP_SECTIONS = 3;\nconst MIDDLE_SECTION = 1;\n\n/** Figma Components → Information Collect → ScrollPicker (579:88681) */\n\nfunction normalizeIndex(index: number, length: number): number {\n return ((index % length) + length) % length;\n}\n\ntype ColumnMetrics = {\n /** Distance between the top edges of two consecutive items (height + gap). */\n pitch: number;\n /** Scroll offset that centers the item at index 0 inside the viewport. */\n originTop: number;\n};\n\n/**\n * Geometry is measured from the live DOM rather than derived from the height\n * token: items carry collapsible block margins and the list is padded by\n * spacer pseudo-elements, so the scroll pitch is not the item height and index\n * 0 does not sit at scrollTop 0.\n */\nfunction readMetrics(container: HTMLElement): ColumnMetrics | null {\n const items = container.querySelectorAll<HTMLElement>(\".aviala-scroll-picker-item\");\n const first = items[0];\n if (!first) return null;\n\n const itemHeight = first.offsetHeight;\n const second = items[1];\n const measuredPitch = second ? second.offsetTop - first.offsetTop : itemHeight;\n const pitch = measuredPitch > 0 ? measuredPitch : itemHeight;\n if (pitch <= 0) return null;\n\n return {\n pitch,\n originTop: first.offsetTop + itemHeight / 2 - container.clientHeight / 2,\n };\n}\n\nfunction scrollTopForIndex(container: HTMLElement, metrics: ColumnMetrics, index: number): number {\n const maxScroll = Math.max(container.scrollHeight - container.clientHeight, 0);\n return Math.min(Math.max(metrics.originTop + index * metrics.pitch, 0), maxScroll);\n}\n\nfunction fractionalIndexAtScrollTop(metrics: ColumnMetrics, scrollTop: number): number {\n return (scrollTop - metrics.originTop) / metrics.pitch;\n}\n\nexport type ScrollPickerProps = HTMLAttributes<HTMLDivElement>;\n\nexport function ScrollPicker({ className, children, ...props }: ScrollPickerProps) {\n return (\n <div className={cn(\"aviala-scroll-picker\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type ScrollPickerColumnProps<T = string> = {\n className?: string;\n values: readonly T[];\n value: T;\n onChange: (value: T) => void;\n \"aria-label\": string;\n loop?: boolean;\n formatValue?: (value: T) => ReactNode;\n getValueKey?: (value: T, index: number) => string;\n};\n\nexport function ScrollPickerColumn<T = string>({\n className,\n values,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n loop = true,\n formatValue,\n getValueKey,\n}: ScrollPickerColumnProps<T>) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const isProgrammaticScrollRef = useRef(false);\n /** When set, value-driven auto sync must not cancel an in-flight smooth scroll. */\n const smoothTargetValueRef = useRef<T | null>(null);\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const wheelAccumRef = useRef(0);\n const selectedValueRef = useRef(value);\n const reactId = useId();\n\n selectedValueRef.current = value;\n\n const getIndex = useCallback(\n (candidate: T) => {\n const index = values.findIndex((item) => Object.is(item, candidate));\n return index >= 0 ? index : 0;\n },\n [values]\n );\n\n const repeatedValues = useMemo(() => {\n if (!loop) return [...values];\n return Array.from({ length: LOOP_SECTIONS }, () => values).flat();\n }, [loop, values]);\n\n const scrollToIndex = useCallback((index: number, behavior: ScrollBehavior = \"auto\") => {\n const container = scrollRef.current;\n if (!container) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n isProgrammaticScrollRef.current = true;\n container.scrollTo({ top: scrollTopForIndex(container, metrics, index), behavior });\n }, []);\n\n const scrollToValue = useCallback(\n (nextValue: T, behavior: ScrollBehavior = \"smooth\") => {\n if (behavior === \"smooth\") {\n smoothTargetValueRef.current = nextValue;\n } else {\n smoothTargetValueRef.current = null;\n }\n const valueIndex = getIndex(nextValue);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n scrollToIndex(targetIndex, behavior);\n },\n [getIndex, loop, scrollToIndex, values.length]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container || isProgrammaticScrollRef.current) {\n isProgrammaticScrollRef.current = false;\n smoothTargetValueRef.current = null;\n return;\n }\n\n const metrics = readMetrics(container);\n if (!metrics || values.length === 0) return;\n\n const lastIndex = values.length - 1;\n const maxScroll = Math.max(container.scrollHeight - container.clientHeight, 0);\n let rawIndex = stickyRoundIndex(\n fractionalIndexAtScrollTop(metrics, container.scrollTop),\n WHEEL_STICKY_AMOUNT\n );\n\n if (!loop) {\n // The trailing spacer may be a hair too short to fully centre the edge\n // items; treat a scroll pinned to either end as that end's index so the\n // first/last option stays selectable.\n if (container.scrollTop >= maxScroll - 1) {\n rawIndex = lastIndex;\n } else if (container.scrollTop <= 1) {\n rawIndex = 0;\n }\n }\n\n const valueIndex = loop\n ? normalizeIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const targetTop = scrollTopForIndex(container, metrics, targetIndex);\n const section = loop ? Math.floor(rawIndex / values.length) : MIDDLE_SECTION;\n const needsLoopRecenter = loop && section !== MIDDLE_SECTION;\n const needsSnap = Math.abs(container.scrollTop - targetTop) > 1;\n\n if (needsLoopRecenter) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n } else if (needsSnap) {\n isProgrammaticScrollRef.current = true;\n smoothTargetValueRef.current = nextValue;\n container.scrollTo({ top: targetTop, behavior: \"smooth\" });\n }\n\n if (!Object.is(nextValue, selectedValueRef.current)) {\n onChange(nextValue);\n }\n\n if (!needsSnap) {\n smoothTargetValueRef.current = null;\n }\n isUserScrollingRef.current = false;\n wheelAccumRef.current = 0;\n }, [loop, onChange, values]);\n\n const handleScroll = useCallback(() => {\n if (isProgrammaticScrollRef.current) return;\n isUserScrollingRef.current = true;\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n scrollEndTimerRef.current = setTimeout(settleScroll, WHEEL_SCROLL_END_MS);\n }, [settleScroll]);\n\n useLayoutEffect(() => {\n if (isUserScrollingRef.current) return;\n // Click/keyboard already started a smooth scroll to this value — don't snap.\n if (\n smoothTargetValueRef.current != null &&\n Object.is(smoothTargetValueRef.current, value)\n ) {\n return;\n }\n\n const container = scrollRef.current;\n if (!container || values.length === 0) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n const valueIndex = getIndex(value);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const targetTop = scrollTopForIndex(container, metrics, targetIndex);\n\n if (Math.abs(container.scrollTop - targetTop) <= 1) return;\n\n scrollToIndex(targetIndex, \"auto\");\n }, [getIndex, loop, scrollToIndex, value, values.length]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onScrollEnd = () => {\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n settleScroll();\n };\n\n container.addEventListener(\"scrollend\", onScrollEnd);\n return () => {\n container.removeEventListener(\"scrollend\", onScrollEnd);\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n };\n }, [settleScroll]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n if (isProgrammaticScrollRef.current || values.length === 0) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n wheelAccumRef.current += event.deltaY;\n const threshold = metrics.pitch * WHEEL_STEP_THRESHOLD_FACTOR;\n if (Math.abs(wheelAccumRef.current) < threshold) return;\n\n const direction = wheelAccumRef.current > 0 ? 1 : -1;\n wheelAccumRef.current = 0;\n\n const currentIndex = getIndex(selectedValueRef.current);\n const nextIndex = loop\n ? normalizeIndex(currentIndex + direction, values.length)\n : Math.min(Math.max(currentIndex + direction, 0), values.length - 1);\n if (nextIndex === currentIndex) return;\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[nextIndex];\n isUserScrollingRef.current = false;\n scrollToValue(nextValue, \"smooth\");\n if (!Object.is(nextValue, selectedValueRef.current)) {\n onChange(nextValue);\n }\n };\n\n container.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n container.removeEventListener(\"wheel\", onWheel);\n };\n }, [getIndex, loop, onChange, scrollToValue, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const currentIndex = getIndex(selectedValueRef.current);\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case \"ArrowUp\":\n nextIndex = loop\n ? normalizeIndex(currentIndex - 1, values.length)\n : Math.max(currentIndex - 1, 0);\n break;\n case \"ArrowDown\":\n nextIndex = loop\n ? normalizeIndex(currentIndex + 1, values.length)\n : Math.min(currentIndex + 1, values.length - 1);\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const nextValue = values[nextIndex];\n scrollToValue(nextValue, \"smooth\");\n if (!Object.is(nextValue, selectedValueRef.current)) {\n onChange(nextValue);\n }\n };\n\n const selectedOptionId = `${reactId}-${getIndex(value)}`;\n\n return (\n <div className={cn(\"aviala-scroll-picker-column\", className)}>\n <div className=\"aviala-scroll-picker-column__viewport\">\n <div className=\"aviala-scroll-picker-column__highlight\" aria-hidden />\n <div\n ref={scrollRef}\n className=\"aviala-scroll-picker-column__scroll aviala-focus-ring\"\n onScroll={handleScroll}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-activedescendant={selectedOptionId}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n >\n <ul className=\"aviala-scroll-picker-column__list\">\n {repeatedValues.map((itemValue, index) => {\n const isSelected = Object.is(itemValue, value);\n const valueIndex = loop ? normalizeIndex(index, values.length) : index;\n const optionId = `${reactId}-${loop ? index : valueIndex}`;\n const key =\n getValueKey?.(itemValue, index) ??\n `${String(itemValue)}-${index}`;\n\n return (\n <li key={key} className=\"contents\">\n <ScrollPickerItem\n id={isSelected ? selectedOptionId : optionId}\n selected={isSelected}\n onSelect={() => {\n scrollToValue(itemValue, \"smooth\");\n if (!Object.is(itemValue, selectedValueRef.current)) {\n onChange(itemValue);\n }\n }}\n >\n {formatValue ? formatValue(itemValue) : String(itemValue)}\n </ScrollPickerItem>\n </li>\n );\n })}\n </ul>\n </div>\n </div>\n </div>\n );\n}\n\nexport type ScrollPickerItemProps = {\n id?: string;\n selected?: boolean;\n children?: ReactNode;\n className?: string;\n onSelect?: () => void;\n};\n\nexport function ScrollPickerItem({\n id,\n selected = false,\n children,\n className,\n onSelect,\n}: ScrollPickerItemProps) {\n return (\n <button\n type=\"button\"\n id={id}\n role=\"option\"\n aria-selected={selected}\n className={cn(\n \"aviala-scroll-picker-item\",\n typographyVariants({ level: \"text\" }),\n className\n )}\n data-selected={selected ? \"true\" : undefined}\n tabIndex={-1}\n onClick={onSelect}\n >\n {children}\n </button>\n );\n}\n","import { DirectionArrowRightLight, SymbolMore } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Breadcrumb (622:7883) */\nexport type BreadcrumbSize = \"default\" | \"small\";\n\nconst BreadcrumbSizeContext = createContext<BreadcrumbSize>(\"default\");\n\nfunction breadcrumbTypeLevel(size: BreadcrumbSize): TypographyLevel {\n /* Figma: Default → Typography Text; Small → Typography Caption */\n return size === \"small\" ? \"caption\" : \"text\";\n}\n\nconst breadcrumbVariants = cva(\"aviala-breadcrumb\", {\n variants: {\n size: {\n default: \"aviala-breadcrumb--size-default\",\n small: \"aviala-breadcrumb--size-small\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nexport type BreadcrumbProps = HTMLAttributes<HTMLElement> &\n VariantProps<typeof breadcrumbVariants>;\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, size = \"default\", children, ...props }, ref) => {\n const resolvedSize = size ?? \"default\";\n return (\n <BreadcrumbSizeContext.Provider value={resolvedSize}>\n <nav\n ref={ref}\n aria-label={props[\"aria-label\"] ?? \"Breadcrumb\"}\n className={cn(breadcrumbVariants({ size: resolvedSize }), className)}\n data-size={resolvedSize}\n {...props}\n >\n <ol className=\"aviala-breadcrumb__list\">{children}</ol>\n </nav>\n </BreadcrumbSizeContext.Provider>\n );\n }\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport type BreadcrumbItemProps = ComponentPropsWithoutRef<\"li\"> & {\n href?: string;\n current?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n};\n\nexport const BreadcrumbItem = forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n ({ className, href, current = false, icon, onClick, children, ...props }, ref) => {\n const size = useContext(BreadcrumbSizeContext);\n const label = (\n <>\n {icon ? <span className=\"aviala-breadcrumb-item__icon\">{icon}</span> : null}\n {children != null ? (\n <Typography\n level={breadcrumbTypeLevel(size)}\n as=\"span\"\n className=\"aviala-breadcrumb-item__label\"\n >\n {children}\n </Typography>\n ) : null}\n </>\n );\n\n return (\n <li\n ref={ref}\n className={cn(\"aviala-breadcrumb-item-wrap\", className)}\n {...props}\n >\n {href != null ? (\n <a\n href={href}\n className=\"aviala-breadcrumb-item aviala-focus-ring\"\n data-current={current ? \"true\" : undefined}\n aria-current={current ? \"page\" : undefined}\n >\n {label}\n </a>\n ) : onClick != null ? (\n <button\n type=\"button\"\n className=\"aviala-breadcrumb-item aviala-focus-ring\"\n data-current={current ? \"true\" : undefined}\n aria-current={current ? \"page\" : undefined}\n onClick={onClick}\n >\n {label}\n </button>\n ) : (\n <span\n className=\"aviala-breadcrumb-item\"\n data-current={current ? \"true\" : undefined}\n aria-current={current ? \"page\" : undefined}\n >\n {label}\n </span>\n )}\n </li>\n );\n }\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport type BreadcrumbSeparatorProps = HTMLAttributes<HTMLLIElement> & {\n children?: ReactNode;\n};\n\nexport const BreadcrumbSeparator = forwardRef<HTMLLIElement, BreadcrumbSeparatorProps>(\n ({ className, children = \"/\", ...props }, ref) => {\n const size = useContext(BreadcrumbSizeContext);\n return (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden\n className={cn(\"aviala-breadcrumb-separator\", className)}\n {...props}\n >\n <Typography level={breadcrumbTypeLevel(size)} as=\"span\">\n {children}\n </Typography>\n </li>\n );\n }\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nexport type BreadcrumbEllipsisItemProps = Omit<\n ComponentPropsWithoutRef<\"a\">,\n \"type\"\n> & {\n href?: string;\n onClick?: () => void;\n /** Figma Select Menu Item trailing chevron — default true */\n showChevron?: boolean;\n};\n\n/** Figma Select Menu Item inside Storage item button activated=ON */\nexport const BreadcrumbEllipsisItem = forwardRef<\n HTMLAnchorElement | HTMLButtonElement,\n BreadcrumbEllipsisItemProps\n>(\n (\n {\n className,\n href,\n onClick,\n showChevron = true,\n children,\n ...props\n },\n ref\n ) => {\n const content = (\n <>\n <Typography level=\"text\" as=\"span\" className=\"aviala-breadcrumb-ellipsis-item__label\">\n {children}\n </Typography>\n {showChevron ? (\n <span className=\"aviala-breadcrumb-ellipsis-item__chevron\" aria-hidden>\n <DirectionArrowRightLight width={14} height={14} thickness=\"Light\" />\n </span>\n ) : null}\n </>\n );\n\n if (href != null) {\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n className={cn(\"aviala-breadcrumb-ellipsis-item aviala-focus-ring\", className)}\n onClick={onClick}\n {...props}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n className={cn(\"aviala-breadcrumb-ellipsis-item aviala-focus-ring\", className)}\n onClick={onClick}\n {...(props as ComponentPropsWithoutRef<\"button\">)}\n >\n {content}\n </button>\n );\n }\n);\nBreadcrumbEllipsisItem.displayName = \"BreadcrumbEllipsisItem\";\n\nexport type BreadcrumbEllipsisProps = Omit<ComponentPropsWithoutRef<\"button\">, \"type\"> & {\n className?: string;\n /**\n * Figma `activated` on Storage item button.\n * OFF = muted ellipsis; ON = full opacity + open Select Menu (when `menu` is set).\n */\n activated?: boolean;\n defaultActivated?: boolean;\n onActivatedChange?: (activated: boolean) => void;\n /** Collapsed middle-path items shown in the Select Menu when activated */\n menu?: ReactNode;\n};\n\n/** Figma `Storage item button` — collapsed middle path */\nexport const BreadcrumbEllipsis = forwardRef<HTMLLIElement, BreadcrumbEllipsisProps>(\n (\n {\n className,\n children,\n activated: activatedProp,\n defaultActivated = false,\n onActivatedChange,\n menu,\n onClick,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const size = useContext(BreadcrumbSizeContext);\n const [uncontrolledActivated, setUncontrolledActivated] = useState(defaultActivated);\n const isControlled = activatedProp !== undefined;\n const activated = isControlled ? Boolean(activatedProp) : uncontrolledActivated;\n\n const setActivated = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledActivated(next);\n onActivatedChange?.(next);\n },\n [isControlled, onActivatedChange]\n );\n\n /* Figma Small Storage item button still uses 14px SymbolMore */\n const iconSize = 14;\n const icon = children ?? (\n <SymbolMore width={iconSize} height={iconSize} thickness=\"Light\" aria-hidden />\n );\n\n const trigger = (\n <button\n type=\"button\"\n className=\"aviala-breadcrumb-ellipsis aviala-focus-ring\"\n data-size={size}\n data-activated={activated ? \"true\" : undefined}\n aria-label={ariaLabel ?? \"Show more breadcrumb items\"}\n aria-expanded={menu != null ? activated : undefined}\n aria-haspopup={menu != null ? \"menu\" : undefined}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (menu == null) setActivated(!activated);\n }}\n {...props}\n >\n {icon}\n </button>\n );\n\n return (\n <li ref={ref} className={cn(\"aviala-breadcrumb-ellipsis-wrap\", className)}>\n {menu != null ? (\n <Popover open={activated} onOpenChange={setActivated}>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n <PopoverContent\n className=\"aviala-breadcrumb-ellipsis-menu\"\n align=\"center\"\n side=\"bottom\"\n sideOffset={7}\n showArrow={false}\n role=\"menu\"\n >\n <div className=\"aviala-breadcrumb-ellipsis-menu__items\">{menu}</div>\n </PopoverContent>\n </Popover>\n ) : (\n trigger\n )}\n </li>\n );\n }\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\n\n/** Figma Components → Structure Navigation → Pagehead (643:172156) */\n\nexport type PageheadProps = HTMLAttributes<HTMLElement> & {\n /** Optional leading control (typically back button) */\n back?: ReactNode;\n /** Optional breadcrumb above the title */\n breadcrumb?: ReactNode;\n /** Primary title line */\n title?: ReactNode;\n /** Secondary caption under title */\n description?: ReactNode;\n /** Trailing actions slot */\n actions?: ReactNode;\n};\n\nexport const Pagehead = forwardRef<HTMLElement, PageheadProps>(\n (\n {\n className,\n back,\n breadcrumb,\n title,\n description,\n actions,\n children,\n ...props\n },\n ref\n ) => (\n <header ref={ref} className={cn(\"aviala-pagehead\", className)} {...props}>\n <div className=\"aviala-pagehead__main\">\n {back != null ? <div className=\"aviala-pagehead__back\">{back}</div> : null}\n <div className=\"aviala-pagehead__title-block\">\n {breadcrumb != null ? (\n <div className=\"aviala-pagehead__breadcrumb\">{breadcrumb}</div>\n ) : null}\n {title != null || description != null ? (\n <div className=\"aviala-pagehead__title\">\n <Typeface content=\"textCaption\" primary={title} secondary={description} />\n </div>\n ) : null}\n {children}\n </div>\n </div>\n {actions != null ? <div className=\"aviala-pagehead__actions\">{actions}</div> : null}\n </header>\n )\n);\nPagehead.displayName = \"Pagehead\";\n","import {\n SymbolRight,\n SymbolWarning,\n SymbolWrong,\n} from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Steps (791:143425) */\nexport type StepsDirection = \"horizontal\" | \"vertical\";\nexport type StepsState =\n | \"done\"\n | \"fail\"\n | \"warning\"\n | \"waiting\"\n | \"inProgress\"\n | \"default\";\n\nconst stepsVariants = cva(\"aviala-steps\", {\n variants: {\n direction: {\n horizontal: \"aviala-steps--direction-horizontal\",\n vertical: \"aviala-steps--direction-vertical\",\n },\n },\n defaultVariants: {\n direction: \"horizontal\",\n },\n});\n\nexport type StepsProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof stepsVariants>;\n\nexport const Steps = forwardRef<HTMLDivElement, StepsProps>(\n ({ className, direction = \"horizontal\", children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(stepsVariants({ direction }), className)}\n data-direction={direction}\n {...props}\n >\n {children}\n </div>\n )\n);\nSteps.displayName = \"Steps\";\n\nexport type StepsIconProps = HTMLAttributes<HTMLSpanElement> & {\n state?: StepsState;\n /** Step number shown for default / inProgress / waiting */\n index?: number;\n children?: ReactNode;\n};\n\nfunction defaultStepsIconContent(state: StepsState, index?: number): ReactNode {\n switch (state) {\n case \"done\":\n return <SymbolRight width={12} height={12} thickness=\"Bold\" aria-hidden />;\n case \"fail\":\n return <SymbolWrong width={12} height={12} thickness=\"Bold\" aria-hidden />;\n case \"warning\":\n return <SymbolWarning width={12} height={12} thickness=\"Bold\" aria-hidden />;\n case \"waiting\":\n case \"inProgress\":\n case \"default\":\n default:\n return index != null ? (\n <Typography level=\"caption\" as=\"span\" className=\"aviala-steps-icon__index\">\n {index}\n </Typography>\n ) : null;\n }\n}\n\nexport const StepsIcon = forwardRef<HTMLSpanElement, StepsIconProps>(\n ({ className, state = \"default\", index, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"aviala-steps-icon\", className)}\n data-state={state}\n {...props}\n >\n {children ?? defaultStepsIconContent(state, index)}\n </span>\n )\n);\nStepsIcon.displayName = \"StepsIcon\";\n\nexport type StepsItemProps = HTMLAttributes<HTMLDivElement> & {\n state?: StepsState;\n title?: ReactNode;\n description?: ReactNode;\n index?: number;\n icon?: ReactNode;\n};\n\nexport const StepsItem = forwardRef<HTMLDivElement, StepsItemProps>(\n (\n {\n className,\n state = \"default\",\n title,\n description,\n index,\n icon,\n children,\n ...props\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\"aviala-steps-item\", className)}\n data-state={state}\n {...props}\n >\n {icon ?? <StepsIcon state={state} index={index} />}\n <div className=\"aviala-steps-item__body\">\n {title != null ? (\n <Typography\n level=\"subtitle\"\n as=\"div\"\n className=\"aviala-steps-item__title\"\n >\n {title}\n </Typography>\n ) : null}\n {description != null ? (\n <Typography\n level=\"text\"\n as=\"div\"\n className=\"aviala-steps-item__description\"\n >\n {description}\n </Typography>\n ) : null}\n {children}\n </div>\n </div>\n )\n);\nStepsItem.displayName = \"StepsItem\";\n","import {\n DirectionArrowLeftLight,\n DirectionArrowRightLight,\n} from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectItemGroup,\n SelectTrigger,\n} from \"./select\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Pagination (791:146366) */\n\nfunction buildPageList(page: number, pageCount: number): Array<number | \"ellipsis\"> {\n if (pageCount <= 7) {\n return Array.from({ length: pageCount }, (_, index) => index + 1);\n }\n\n const pages = new Set<number>();\n pages.add(1);\n pages.add(pageCount);\n for (let i = page - 1; i <= page + 1; i += 1) {\n if (i >= 1 && i <= pageCount) pages.add(i);\n }\n\n const sorted = [...pages].sort((a, b) => a - b);\n const result: Array<number | \"ellipsis\"> = [];\n for (let i = 0; i < sorted.length; i += 1) {\n const current = sorted[i];\n const prev = sorted[i - 1];\n if (prev != null && current - prev > 1) {\n result.push(\"ellipsis\");\n }\n result.push(current);\n }\n return result;\n}\n\nexport type PaginationProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> & {\n page?: number;\n defaultPage?: number;\n pageCount: number;\n onPageChange?: (page: number) => void;\n showJump?: boolean;\n showSizeChanger?: boolean;\n pageSize?: number;\n defaultPageSize?: number;\n pageSizeOptions?: number[];\n onPageSizeChange?: (pageSize: number) => void;\n jumpLabel?: ReactNode;\n sizeLabel?: ReactNode;\n sizeOptionLabel?: (size: number) => ReactNode;\n};\n\nexport const Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n className,\n page: pageProp,\n defaultPage = 1,\n pageCount,\n onPageChange,\n showJump = true,\n showSizeChanger = true,\n pageSize: pageSizeProp,\n defaultPageSize = 10,\n pageSizeOptions = [10, 20, 50],\n onPageSizeChange,\n jumpLabel = \"跳转至\",\n sizeLabel = \"每页\",\n sizeOptionLabel = (size) => `${size} 项`,\n ...props\n },\n ref\n ) => {\n const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n const [uncontrolledPageSize, setUncontrolledPageSize] = useState(defaultPageSize);\n const [jumpValue, setJumpValue] = useState(\"\");\n const page = pageProp ?? uncontrolledPage;\n const pageSize = pageSizeProp ?? uncontrolledPageSize;\n const safePageCount = Math.max(1, pageCount);\n const currentPage = Math.min(Math.max(page, 1), safePageCount);\n const pages = buildPageList(currentPage, safePageCount);\n\n const setPage = (next: number) => {\n const clamped = Math.min(Math.max(next, 1), safePageCount);\n if (pageProp == null) setUncontrolledPage(clamped);\n onPageChange?.(clamped);\n };\n\n const setPageSize = (next: number) => {\n if (pageSizeProp == null) setUncontrolledPageSize(next);\n onPageSizeChange?.(next);\n };\n\n const commitJump = () => {\n const parsed = Number.parseInt(jumpValue, 10);\n if (!Number.isFinite(parsed)) return;\n setPage(parsed);\n setJumpValue(\"\");\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-pagination\", className)}\n role=\"navigation\"\n aria-label={props[\"aria-label\"] ?? \"Pagination\"}\n {...props}\n >\n <div className=\"aviala-pagination__controls\">\n <Button\n mode=\"noBackgroundCustom\"\n size=\"regular\"\n iconOnly\n aria-label=\"Previous page\"\n disabled={currentPage <= 1}\n leftIcon={<DirectionArrowLeftLight aria-hidden />}\n onClick={() => setPage(currentPage - 1)}\n />\n <div className=\"aviala-pagination__pages\">\n {pages.map((item, index) =>\n item === \"ellipsis\" ? (\n <Typography\n key={`ellipsis-${index}`}\n level=\"text\"\n as=\"span\"\n className=\"aviala-pagination__page\"\n aria-hidden\n >\n …\n </Typography>\n ) : (\n <button\n key={item}\n type=\"button\"\n className=\"aviala-pagination__page aviala-focus-ring\"\n data-active={item === currentPage ? \"true\" : undefined}\n aria-current={item === currentPage ? \"page\" : undefined}\n onClick={() => setPage(item)}\n >\n <Typography level=\"text\" as=\"span\">\n {item}\n </Typography>\n </button>\n )\n )}\n </div>\n <Button\n mode=\"noBackgroundCustom\"\n size=\"regular\"\n iconOnly\n aria-label=\"Next page\"\n disabled={currentPage >= safePageCount}\n leftIcon={<DirectionArrowRightLight aria-hidden />}\n onClick={() => setPage(currentPage + 1)}\n />\n </div>\n\n {showJump ? (\n <div className=\"aviala-pagination__jump\">\n <Typography level=\"text\" as=\"span\">\n {jumpLabel}\n </Typography>\n <Input\n className=\"aviala-pagination__jump-input\"\n size=\"regular\"\n fullWidth={false}\n value={jumpValue}\n placeholder=\"页码\"\n inputMode=\"numeric\"\n onChange={(event) => setJumpValue(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n commitJump();\n }\n }}\n onBlur={commitJump}\n />\n </div>\n ) : null}\n\n {showSizeChanger ? (\n <div className=\"aviala-pagination__size\">\n <Typography level=\"text\" as=\"span\">\n {sizeLabel}\n </Typography>\n <Select\n value={String(pageSize)}\n onValueChange={(value) => setPageSize(Number(value))}\n >\n <SelectTrigger\n size=\"regular\"\n className=\"aviala-pagination__size-select\"\n aria-label=\"Page size\"\n />\n <SelectContent>\n <SelectItemGroup>\n {pageSizeOptions.map((option) => (\n <SelectItem\n key={option}\n value={String(option)}\n itemFunction=\"checkbox\"\n >\n {sizeOptionLabel(option)}\n </SelectItem>\n ))}\n </SelectItemGroup>\n </SelectContent>\n </Select>\n </div>\n ) : null}\n </div>\n );\n }\n);\nPagination.displayName = \"Pagination\";\n","import {\n DirectionArrowRightLight,\n GeneralSetting,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Card (738:145715) */\nexport type CardSlotType = \"action\" | \"switch\" | \"select\";\n\nexport type CardProps = HTMLAttributes<HTMLDivElement>;\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-card\", className)} {...props}>\n {children}\n </div>\n )\n);\nCard.displayName = \"Card\";\n\nfunction renderCardIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: 14,\n height: 14,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return <span className=\"aviala-card-head__icon\">{content}</span>;\n}\n\nexport type CardHeadProps = ComponentPropsWithoutRef<\"div\"> & {\n slotType?: CardSlotType;\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n actionLabel?: ReactNode;\n action?: ReactNode;\n secondaryAction?: ReactNode;\n select?: ReactNode;\n switchProps?: Omit<SwitchProps, \"size\">;\n trailing?: ReactNode;\n};\n\nexport const CardHead = forwardRef<HTMLDivElement, CardHeadProps>(\n (\n {\n className,\n slotType = \"select\",\n icon,\n title,\n description,\n actionLabel = \"Text\",\n action,\n secondaryAction,\n select,\n switchProps,\n trailing,\n children,\n ...props\n },\n ref\n ) => {\n const primaryAction =\n action ??\n (\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\n {actionLabel}\n </Button>\n );\n\n const renderTrailing = () => {\n if (trailing !== undefined) return trailing;\n\n switch (slotType) {\n case \"action\":\n return (\n <div className=\"aviala-card-head__trailing\">\n {primaryAction}\n {secondaryAction ?? (\n <Button\n mode=\"default\"\n size=\"regular\"\n iconOnly\n aria-label=\"More\"\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <DirectionArrowRightLight width={14} height={14} aria-hidden />\n </div>\n );\n case \"switch\":\n return (\n <div className=\"aviala-card-head__trailing\">\n {primaryAction}\n <span className=\"aviala-card__divider\" aria-hidden />\n <Switch {...switchProps} />\n </div>\n );\n case \"select\":\n default:\n return select != null ? (\n <div className=\"aviala-card-head__trailing\">{select}</div>\n ) : null;\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-card-head\", className)}\n data-type={slotType}\n {...props}\n >\n <div className=\"aviala-card-head__main\">\n {/* Figma Card item head always includes a leading icon slot */}\n {renderCardIcon(icon ?? <GeneralSetting aria-hidden />)}\n <div className=\"aviala-card-head__title\">\n {title != null || description != null ? (\n <Typeface content=\"textCaption\" primary={title} secondary={description} />\n ) : (\n children\n )}\n </div>\n </div>\n {renderTrailing()}\n </div>\n );\n }\n);\nCardHead.displayName = \"CardHead\";\n\nexport type CardBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardBody = forwardRef<HTMLDivElement, CardBodyProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-card-body\", className)} {...props}>\n <div className=\"aviala-card-body__content\">\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Typography level=\"text\" as=\"span\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </div>\n </div>\n )\n);\nCardBody.displayName = \"CardBody\";\n\nexport type CardBottomProps = ComponentPropsWithoutRef<\"div\"> & {\n slotType?: CardSlotType;\n actionLabel?: ReactNode;\n action?: ReactNode;\n secondaryAction?: ReactNode;\n select?: ReactNode;\n switchProps?: Omit<SwitchProps, \"size\">;\n trailing?: ReactNode;\n};\n\nexport const CardBottom = forwardRef<HTMLDivElement, CardBottomProps>(\n (\n {\n className,\n slotType = \"action\",\n actionLabel = \"Text\",\n action,\n secondaryAction,\n select,\n switchProps,\n trailing,\n children,\n ...props\n },\n ref\n ) => {\n const primaryAction =\n action ??\n (\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\n {actionLabel}\n </Button>\n );\n\n const renderTrailing = () => {\n if (trailing !== undefined) return trailing;\n if (children != null) return children;\n\n switch (slotType) {\n case \"switch\":\n return (\n <>\n {primaryAction}\n <span className=\"aviala-card__divider\" aria-hidden />\n <Switch {...switchProps} />\n </>\n );\n case \"select\":\n return select;\n case \"action\":\n default:\n return (\n <>\n {primaryAction}\n {secondaryAction ?? (\n <Button\n mode=\"default\"\n size=\"regular\"\n iconOnly\n aria-label=\"More\"\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <DirectionArrowRightLight width={14} height={14} aria-hidden />\n </>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-card-bottom\", className)}\n data-type={slotType}\n {...props}\n >\n <div className=\"aviala-card-bottom__trailing\">{renderTrailing()}</div>\n </div>\n );\n }\n);\nCardBottom.displayName = \"CardBottom\";\n","import {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Badge } from \"./badge\";\nimport { Checkbox } from \"./checkbox\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Information Display → Table (1457:1475) */\nexport type TableCellContent =\n | \"text\"\n | \"icon+text\"\n | \"people\"\n | \"badge\"\n | \"switch\"\n | \"action\"\n | \"checkbox\";\n\nexport type TableProps = HTMLAttributes<HTMLDivElement>;\n\nexport const Table = forwardRef<HTMLDivElement, TableProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"table\"\n className={cn(\"aviala-table\", className)}\n {...props}\n >\n {children}\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nexport type TableRowProps = HTMLAttributes<HTMLDivElement> & {\n header?: boolean;\n};\n\nexport const TableRow = forwardRef<HTMLDivElement, TableRowProps>(\n ({ className, header = false, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"row\"\n className={cn(\"aviala-table__row\", className)}\n data-header={header ? \"true\" : undefined}\n {...props}\n >\n {children}\n </div>\n )\n);\nTableRow.displayName = \"TableRow\";\n\nexport type TableHeadProps = ComponentPropsWithoutRef<\"div\"> & {\n content?: Extract<TableCellContent, \"text\" | \"checkbox\">;\n};\n\nexport const TableHead = forwardRef<HTMLDivElement, TableHeadProps>(\n ({ className, content = \"text\", children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"columnheader\"\n className={cn(\"aviala-table-head\", className)}\n data-content={content}\n {...props}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Typography level=\"caption\" as=\"span\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </div>\n )\n);\nTableHead.displayName = \"TableHead\";\n\nfunction renderCellIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: 16,\n height: 16,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return <span className=\"aviala-table-cell__icon\">{content}</span>;\n}\n\nexport type TableCellProps = ComponentPropsWithoutRef<\"div\"> & {\n content?: TableCellContent;\n icon?: ReactNode;\n text?: ReactNode;\n people?: ReactNode;\n badge?: ReactNode;\n badgeLabel?: ReactNode;\n switchProps?: SwitchProps;\n actions?: ReactNode;\n checkboxProps?: ComponentPropsWithoutRef<typeof Checkbox>;\n};\n\nexport const TableCell = forwardRef<HTMLDivElement, TableCellProps>(\n (\n {\n className,\n content = \"text\",\n icon,\n text,\n people,\n badge,\n badgeLabel,\n switchProps,\n actions,\n checkboxProps,\n children,\n ...props\n },\n ref\n ) => {\n const renderContent = () => {\n if (children != null) return children;\n\n switch (content) {\n case \"checkbox\":\n return <Checkbox {...checkboxProps} />;\n case \"icon+text\":\n return (\n <>\n {renderCellIcon(icon)}\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n </span>\n </>\n );\n case \"people\":\n return (\n <>\n {people ?? <Avatar content=\"text\" level=\"text\">A</Avatar>}\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n </span>\n </>\n );\n case \"badge\":\n return (\n badge ?? (\n <Badge style=\"theme\" level=\"caption\">\n {badgeLabel ?? \"Text\"}\n </Badge>\n )\n );\n case \"switch\":\n return <Switch {...switchProps} />;\n case \"action\":\n return <div className=\"aviala-table-cell__actions\">{actions}</div>;\n case \"text\":\n default:\n return (\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n </span>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"cell\"\n className={cn(\"aviala-table-cell\", className)}\n data-content={content}\n {...props}\n >\n {renderContent()}\n </div>\n );\n }\n);\nTableCell.displayName = \"TableCell\";\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","Tag","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_class_variance_authority","import_react","import_icons","import_jsx_runtime","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","resolveInputState","renderSlotIcon","renderBadgeArea","import_icons","import_react","import_jsx_runtime","assignRef","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_class_variance_authority","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","resolveLineHeightFix","iconSizeForLevel","import_class_variance_authority","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","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","Tag","import_react","import_jsx_runtime","renderIcon","prefersReducedMotion","import_icons","import_react","import_jsx_runtime","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_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","renderSlotIcon","controlled","merged","next","prefersReducedMotion","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","PopoverPrimitive","import_react_slot","import_react","import_jsx_runtime","metricsApproxEqual","prefersReducedMotion","Tag","renderItemIcon","import_class_variance_authority","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","LOOP_SECTIONS","MIDDLE_SECTION","normalizeIndex","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
|
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/lib/render-slot-icon.tsx","../src/components/badge.tsx","../src/components/number-input.tsx","../src/components/textarea.tsx","../src/components/select.tsx","../src/components/link.tsx","../src/components/label.tsx","../src/components/avatar.tsx","../src/components/tag.tsx","../src/components/progress.tsx","../src/components/scroll.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-month-wheels.tsx","../src/components/date-picker/date-picker-time-wheel.tsx","../src/lib/sticky-wheel.ts","../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/hover-popover.tsx","../src/components/use-coarse-pointer.ts","../src/components/modal.tsx","../src/components/tooltip.tsx","../src/components/responsive-tooltip.tsx","../src/components/feedback.tsx","../src/components/alert.tsx","../src/components/list.tsx","../src/components/navigation.tsx","../src/components/slider.tsx","../src/components/upload.tsx","../src/components/scroll-picker.tsx","../src/components/breadcrumb.tsx","../src/components/pagehead.tsx","../src/components/steps.tsx","../src/components/pagination.tsx","../src/components/card.tsx","../src/components/table.tsx"],"sourcesContent":["export { ThemeProvider, useTheme, useThemeLayoutKey, ThemeScript, type ThemeProviderProps } from \"./theme/theme-provider\";\nexport {\n DEFAULT_PALETTE_CONFIG,\n PALETTE_HUE_FAMILIES,\n type BaseNumbersDensity,\n type PaletteConfig,\n type HueFamily,\n} from \"@aviala-design/tokens\";\n\nexport { Button, buttonVariants, type ButtonProps, type ButtonMode, type ButtonSize } from \"./components/button\";\nexport { Input, inputRootVariants, type InputProps, type InputSize } from \"./components/input\";\nexport {\n NumberInput,\n numberInputRootVariants,\n type NumberInputProps,\n type NumberInputStyle,\n} from \"./components/number-input\";\nexport { Textarea, type TextareaProps, type TextareaSize } from \"./components/textarea\";\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectItemGroup,\n SelectItemPeople,\n SelectLabel,\n SelectSeparator,\n SelectSubItem,\n SelectSubItemPeople,\n SelectSubMenu,\n SelectTrigger,\n SelectValue,\n type SelectContentProps,\n type SelectItemFunction,\n type SelectItemGroupProps,\n type SelectItemLayout,\n type SelectItemPeopleProps,\n type SelectItemProps,\n type SelectLabelProps,\n type SelectSeparatorProps,\n type SelectSize,\n type SelectSubItemPeopleProps,\n type SelectSubItemProps,\n type SelectSubMenuProps,\n type SelectTriggerProps,\n} from \"./components/select\";\nexport { Label } from \"./components/label\";\nexport {\n Badge,\n type BadgeProps,\n type BadgeStyle,\n type BadgeLevel,\n type BadgeLineHeightFix,\n} from \"./components/badge\";\nexport {\n Avatar,\n type AvatarProps,\n type AvatarLevel,\n type AvatarContent,\n} from \"./components/avatar\";\nexport {\n Tag,\n TagClose,\n type TagProps,\n type TagCloseProps,\n type TagLevel,\n type TagContent,\n type TagLineHeightFix,\n} from \"./components/tag\";\nexport {\n Progress,\n type ProgressProps,\n type ProgressType,\n type ProgressSize,\n type ProgressShape,\n} from \"./components/progress\";\nexport {\n Scroll,\n type ScrollProps,\n type ScrollSize,\n type ScrollOrientation,\n} from \"./components/scroll\";\nexport {\n Loading,\n loadingLevelForButtonSize,\n type LoadingProps,\n type LoadingLevel,\n type LoadingMode,\n type LoadingButtonSize,\n} from \"./components/loading\";\nexport {\n Checkbox,\n CheckboxGroup,\n CheckboxInput,\n type CheckboxProps,\n type CheckboxGroupProps,\n type CheckboxInputProps,\n type CheckboxGroupDirection,\n} from \"./components/checkbox\";\nexport {\n RadioGroup,\n RadioGroupItem,\n RadioInput,\n type RadioGroupProps,\n type RadioGroupItemProps,\n type RadioInputProps,\n type RadioGroupDirection,\n type RadioInputVariant,\n} from \"./components/radio-group\";\nexport { Switch, type SwitchProps, type SwitchSize } from \"./components/switch\";\nexport { Link, type LinkProps, type LinkLevel, type LinkMode } from \"./components/link\";\nexport {\n Anchor,\n AnchorItem,\n type AnchorProps,\n type AnchorItemProps,\n type AnchorIndentLevel,\n} from \"./components/anchor\";\nexport {\n SegmentatorGroup,\n SegmentatorItem,\n type SegmentatorGroupProps,\n type SegmentatorItemProps,\n type SegmentatorMode,\n} from \"./components/segmentator\";\nexport { FormField, type FormFieldProps, type FormFieldDirection } from \"./components/form-field\";\nexport {\n Typography,\n typographyVariants,\n type TypographyProps,\n type TypographyLevel,\n type TypographyContent,\n type TypographyTone,\n} from \"./components/typography\";\nexport {\n Typeface,\n TypefacePair,\n type TypefaceProps,\n type TypefaceContent,\n type TypefacePairProps,\n} from \"./components/typeface\";\nexport { InputGroup, InputGroupAddon, type InputGroupProps } from \"./components/input-group\";\nexport {\n Stack,\n Fieldset,\n type StackProps,\n type FieldsetProps,\n} from \"./components/stack\";\nexport {\n ColorPicker,\n ColorPickerTrigger,\n ColorPickerContent,\n ColorPickerPanel,\n ColorPickButton,\n ColorPickerArea,\n ColorPickerSlider,\n ColorPickerInputs,\n ColorPickerPresets,\n DEFAULT_COLOR,\n useColorPickerState,\n type ColorPickerProps,\n type ColorPickerTriggerProps,\n type ColorPickerContentProps,\n type ColorPickerPanelProps,\n type ColorPickButtonProps,\n type ColorPickerAreaProps,\n type ColorPickerSliderProps,\n type ColorPickerInputsProps,\n type ColorPickerPresetsProps,\n type ColorFormat,\n type HSVA,\n type UseColorPickerStateOptions,\n} from \"./components/color-picker\";\nexport {\n Cascader,\n CascaderTrigger,\n CascaderContent,\n CascaderMenu,\n CascaderColumn,\n CascaderItemGroup,\n CascaderItem,\n CascaderOptionsMenu,\n CascaderField,\n type CascaderProps,\n type CascaderTriggerProps,\n type CascaderContentProps,\n type CascaderMenuProps,\n type CascaderColumnProps,\n type CascaderItemGroupProps,\n type CascaderItemProps,\n type CascaderOptionsMenuProps,\n type CascaderFieldProps,\n type CascaderOption,\n type CascaderSize,\n type CascaderItemFunction,\n type CascaderItemLayout,\n} from \"./components/cascader\";\nexport {\n DatePicker,\n DatePickerTrigger,\n DatePickerContent,\n DatePickerCalendar,\n DatePickerField,\n type DatePickerProps,\n type DatePickerSingleProps,\n type DatePickerRangeProps,\n type DatePickerTriggerProps,\n type DatePickerContentProps,\n type DatePickerCalendarProps,\n type DatePickerFieldProps,\n type DatePickerSize,\n type DatePickerMode,\n type DatePickerPanel,\n type DatePickerTimeValue,\n type DateRange,\n formatDisplayDate,\n formatMonthYear,\n formatTimeValue,\n parseDateInput,\n parseDateRangeInput,\n} from \"./components/date-picker\";\nexport {\n TimePicker,\n TimePickerTrigger,\n TimePickerContent,\n TimePickerPanel,\n TimePickerField,\n TimePickerWheels,\n type TimePickerProps,\n type TimePickerTriggerProps,\n type TimePickerContentProps,\n type TimePickerPanelProps,\n type TimePickerFieldProps,\n type TimePickerSize,\n type TimePickerValue,\n type TimePickerWheelsValue,\n} from \"./components/time-picker\";\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n type PopoverProps,\n type PopoverContentProps,\n type PopoverAppearance,\n} from \"./components/popover\";\nexport {\n HoverPopover,\n type HoverPopoverProps,\n} from \"./components/hover-popover\";\nexport {\n Modal,\n ModalTrigger,\n ModalPortal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalHeaderText,\n ModalTitle,\n ModalDescription,\n ModalBody,\n ModalFooter,\n ModalClose,\n modalContentVariants,\n type ModalProps,\n type ModalSize,\n type ModalOverlayProps,\n type ModalContentProps,\n type ModalHeaderProps,\n type ModalHeaderTextProps,\n type ModalTitleProps,\n type ModalDescriptionProps,\n type ModalBodyProps,\n type ModalFooterProps,\n} from \"./components/modal\";\nexport {\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TOOLTIP_DELAY_DURATION,\n type TooltipProviderProps,\n type TooltipContentProps,\n} from \"./components/tooltip\";\nexport {\n ResponsiveTooltip,\n type ResponsiveTooltipProps,\n} from \"./components/responsive-tooltip\";\nexport {\n Feedback,\n type FeedbackProps,\n type FeedbackType,\n type FeedbackSize,\n type FeedbackMode,\n} from \"./components/feedback\";\nexport {\n Alert,\n alertVariants,\n type AlertProps,\n type AlertType,\n type AlertSize,\n type AlertAppearance,\n} from \"./components/alert\";\nexport {\n List,\n ListTitle,\n ListGroup,\n ListItem,\n ListItemGroup,\n ListDivider,\n ListSeparator,\n type ListProps,\n type ListTitleProps,\n type ListGroupProps,\n type ListItemProps,\n type ListItemGroupProps,\n type ListDividerProps,\n type ListSeparatorProps,\n type ListItemType,\n type ListItemLeading,\n} from \"./components/list\";\nexport {\n Navigation,\n NavigationBrand,\n NavigationBrandTitle,\n NavigationSection,\n NavigationGroup,\n NavigationItemGroup,\n NavigationItem,\n NavigationItemMenu,\n NavigationItemMenuTrigger,\n NavigationItemMenuContent,\n NavigationItemMenuItem,\n NavigationActions,\n NavigationActionsSlot,\n type NavigationProps,\n type NavigationBackground,\n type NavigationDirection,\n type NavigationBrandProps,\n type NavigationBrandTitleProps,\n type NavigationSectionProps,\n type NavigationGroupProps,\n type NavigationItemGroupProps,\n type NavigationItemProps,\n type NavigationItemType,\n type NavigationItemMenuProps,\n type NavigationItemMenuTriggerProps,\n type NavigationItemMenuContentProps,\n type NavigationItemMenuItemProps,\n type NavigationActionsProps,\n type NavigationActionsSlotProps,\n} from \"./components/navigation\";\nexport { Slider, type SliderProps, type SliderSize, type SliderType } from \"./components/slider\";\nexport { Upload, type UploadProps, type UploadStyle } from \"./components/upload\";\nexport {\n ScrollPicker,\n ScrollPickerColumn,\n ScrollPickerItem,\n type ScrollPickerProps,\n type ScrollPickerColumnProps,\n type ScrollPickerItemProps,\n} from \"./components/scroll-picker\";\nexport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n BreadcrumbEllipsisItem,\n type BreadcrumbProps,\n type BreadcrumbItemProps,\n type BreadcrumbSeparatorProps,\n type BreadcrumbEllipsisProps,\n type BreadcrumbEllipsisItemProps,\n type BreadcrumbSize,\n} from \"./components/breadcrumb\";\nexport { Pagehead, type PageheadProps } from \"./components/pagehead\";\nexport {\n Steps,\n StepsItem,\n StepsIcon,\n type StepsProps,\n type StepsItemProps,\n type StepsIconProps,\n type StepsDirection,\n type StepsState,\n} from \"./components/steps\";\nexport { Pagination, type PaginationProps } from \"./components/pagination\";\nexport {\n Card,\n CardHead,\n CardBody,\n CardBottom,\n type CardProps,\n type CardHeadProps,\n type CardBodyProps,\n type CardBottomProps,\n type CardSlotType,\n} from \"./components/card\";\nexport {\n Table,\n TableRow,\n TableHead,\n TableCell,\n type TableProps,\n type TableRowProps,\n type TableHeadProps,\n type TableCellProps,\n type TableCellContent,\n} from \"./components/table\";\n\nexport { cn } from \"./lib/utils\";\nexport { initKeyboardFocus } from \"./lib/keyboard-focus\";\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n applyTheme,\n applyBaseNumbersDensity,\n DEFAULT_PALETTE_CONFIG,\n generateTheme,\n getPreset,\n presetList,\n removeTheme,\n type BaseNumbersDensity,\n type PaletteConfig,\n type ThemeMode,\n type ThemePreset,\n} from \"@aviala-design/tokens\";\nimport { initKeyboardFocus } from \"../lib/keyboard-focus\";\n\nexport type ThemeProviderProps = {\n children: ReactNode;\n defaultMode?: ThemeMode;\n defaultPrimary?: string;\n defaultPresetId?: string;\n defaultPaletteConfig?: PaletteConfig;\n defaultDensity?: BaseNumbersDensity;\n storageKey?: string;\n onThemeChange?: (vars: Record<string, string>) => void;\n};\n\ntype ThemeContextValue = {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n primaryColor: string;\n setPrimaryColor: (color: string) => void;\n presetId: string | undefined;\n applyPreset: (id: string) => void;\n presets: ThemePreset[];\n /** True when the active preset is a frozen ALD theme (palette engine bypassed). */\n isStaticTheme: boolean;\n density: BaseNumbersDensity;\n setDensity: (density: BaseNumbersDensity) => void;\n paletteConfig: PaletteConfig;\n setPaletteConfig: (config: Partial<PaletteConfig>) => void;\n resetPaletteConfig: () => void;\n themeVars: Record<string, string>;\n};\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport function ThemeProvider({\n children,\n defaultMode = \"light\",\n defaultPrimary,\n defaultPresetId = \"ald\",\n defaultPaletteConfig,\n defaultDensity = \"default\",\n storageKey = \"aviala-theme\",\n onThemeChange,\n}: ThemeProviderProps) {\n const [mode, setModeState] = useState<ThemeMode>(() => {\n if (typeof window === \"undefined\") return defaultMode;\n const stored = localStorage.getItem(`${storageKey}:mode`);\n return (stored as ThemeMode) || defaultMode;\n });\n\n const [primaryColor, setPrimaryColorState] = useState(() => {\n if (typeof window === \"undefined\") {\n return defaultPrimary ?? getPreset(defaultPresetId)?.primary ?? \"#FF5532\";\n }\n return (\n localStorage.getItem(`${storageKey}:primary`) ??\n defaultPrimary ??\n getPreset(defaultPresetId)?.primary ??\n \"#FF5532\"\n );\n });\n\n const [presetId, setPresetId] = useState<string | undefined>(() => {\n if (typeof window === \"undefined\") return defaultPresetId;\n return localStorage.getItem(`${storageKey}:preset`) ?? defaultPresetId;\n });\n\n const [paletteConfig, setPaletteConfigState] = useState<PaletteConfig>(() => {\n const base: PaletteConfig = { ...DEFAULT_PALETTE_CONFIG, ...defaultPaletteConfig };\n if (typeof window === \"undefined\") return base;\n const stored = localStorage.getItem(`${storageKey}:palette`);\n if (!stored) return base;\n try {\n return { ...base, ...(JSON.parse(stored) as PaletteConfig) };\n } catch {\n return base;\n }\n });\n\n const [density, setDensityState] = useState<BaseNumbersDensity>(() => {\n if (typeof window === \"undefined\") return defaultDensity;\n const stored = localStorage.getItem(`${storageKey}:density`);\n return stored === \"mobile-friendly\" ? \"mobile-friendly\" : defaultDensity;\n });\n\n const isStaticTheme = presetId ? getPreset(presetId)?.static === true : false;\n\n const themeVars = useMemo(\n () =>\n isStaticTheme\n ? {}\n : generateTheme({\n mode,\n primary: primaryColor,\n presetId,\n palette: paletteConfig,\n }),\n [isStaticTheme, mode, primaryColor, presetId, paletteConfig]\n );\n\n useLayoutEffect(() => {\n initKeyboardFocus();\n }, []);\n\n useLayoutEffect(() => {\n applyBaseNumbersDensity(document.documentElement, density);\n\n if (isStaticTheme) {\n // Clear any inline palette vars so the frozen [data-theme=\"ald\"] CSS wins.\n removeTheme();\n document.documentElement.setAttribute(\"data-theme\", presetId ?? \"ald\");\n document.documentElement.setAttribute(\"data-mode\", mode);\n onThemeChange?.(themeVars);\n return;\n }\n applyTheme(themeVars, { mode, themeId: presetId, density });\n onThemeChange?.(themeVars);\n }, [isStaticTheme, themeVars, mode, presetId, density, onThemeChange]);\n\n const setMode = useCallback(\n (next: ThemeMode) => {\n setModeState(next);\n localStorage.setItem(`${storageKey}:mode`, next);\n },\n [storageKey]\n );\n\n const setPrimaryColor = useCallback(\n (color: string) => {\n setPrimaryColorState(color);\n setPresetId(undefined);\n localStorage.setItem(`${storageKey}:primary`, color);\n localStorage.removeItem(`${storageKey}:preset`);\n },\n [storageKey]\n );\n\n const applyPreset = useCallback(\n (id: string) => {\n const preset = getPreset(id);\n if (!preset) return;\n setPresetId(id);\n setPrimaryColorState(preset.primary);\n localStorage.setItem(`${storageKey}:primary`, preset.primary);\n localStorage.setItem(`${storageKey}:preset`, id);\n },\n [storageKey]\n );\n\n const setPaletteConfig = useCallback(\n (config: Partial<PaletteConfig>) => {\n setPaletteConfigState((prev) => {\n const next = { ...prev, ...config };\n localStorage.setItem(`${storageKey}:palette`, JSON.stringify(next));\n return next;\n });\n },\n [storageKey]\n );\n\n const resetPaletteConfig = useCallback(() => {\n const base: PaletteConfig = { ...DEFAULT_PALETTE_CONFIG, ...defaultPaletteConfig };\n setPaletteConfigState(base);\n localStorage.removeItem(`${storageKey}:palette`);\n }, [storageKey, defaultPaletteConfig]);\n\n const setDensity = useCallback(\n (next: BaseNumbersDensity) => {\n setDensityState(next);\n if (next === \"mobile-friendly\") {\n localStorage.setItem(`${storageKey}:density`, next);\n } else {\n localStorage.removeItem(`${storageKey}:density`);\n }\n },\n [storageKey]\n );\n\n const value = useMemo(\n () => ({\n mode,\n setMode,\n primaryColor,\n setPrimaryColor,\n presetId,\n applyPreset,\n presets: presetList,\n isStaticTheme,\n density,\n setDensity,\n paletteConfig,\n setPaletteConfig,\n resetPaletteConfig,\n themeVars,\n }),\n [\n mode,\n setMode,\n primaryColor,\n setPrimaryColor,\n presetId,\n applyPreset,\n isStaticTheme,\n density,\n setDensity,\n paletteConfig,\n setPaletteConfig,\n resetPaletteConfig,\n themeVars,\n ]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme must be used within ThemeProvider\");\n }\n return ctx;\n}\n\n/** Layout key for remeasuring size-sensitive UI when theme density/mode changes. */\nexport function useThemeLayoutKey(): string | null {\n const ctx = useContext(ThemeContext);\n if (!ctx) return null;\n return `${ctx.density}:${ctx.mode}`;\n}\n\nexport function ThemeScript({\n storageKey = \"aviala-theme\",\n defaultMode = \"light\",\n defaultPrimary = \"#FF5532\",\n defaultDensity = \"default\",\n}: {\n storageKey?: string;\n defaultMode?: ThemeMode;\n defaultPrimary?: string;\n defaultDensity?: BaseNumbersDensity;\n}) {\n const script = `\n(function(){\n try {\n var mode = localStorage.getItem('${storageKey}:mode') || '${defaultMode}';\n var primary = localStorage.getItem('${storageKey}:primary') || '${defaultPrimary}';\n var density = localStorage.getItem('${storageKey}:density') || '${defaultDensity}';\n document.documentElement.setAttribute('data-mode', mode);\n if (density === 'mobile-friendly') {\n document.documentElement.setAttribute('data-density', 'mobile-friendly');\n }\n } catch(e) {}\n})();\n`;\n return <script dangerouslySetInnerHTML={{ __html: script }} />;\n}\n","const KBD_ATTR = \"data-aviala-kbd\";\n\nlet installed = false;\n\n/**\n * Gate `.aviala-focus-ring` to true keyboard modality.\n *\n * `:focus-visible` alone is not enough for menus: mouse-opening Select/Cascader\n * programmatically focuses an item, and browsers treat that as focus-visible.\n * We clear the gate on pointer/touch and set it on non-modifier keydown.\n */\nexport function initKeyboardFocus(): void {\n if (typeof window === \"undefined\" || installed) return;\n installed = true;\n\n const root = document.documentElement;\n\n const setKeyboard = (on: boolean) => {\n if (on) root.setAttribute(KBD_ATTR, \"\");\n else root.removeAttribute(KBD_ATTR);\n };\n\n window.addEventListener(\n \"keydown\",\n (event) => {\n if (event.metaKey || event.ctrlKey || event.altKey) return;\n // Ignore pure modifier presses\n if (event.key === \"Meta\" || event.key === \"Control\" || event.key === \"Alt\" || event.key === \"Shift\") {\n return;\n }\n setKeyboard(true);\n },\n true\n );\n\n window.addEventListener(\"pointerdown\", () => setKeyboard(false), true);\n window.addEventListener(\"touchstart\", () => setKeyboard(false), { capture: true, passive: true });\n}\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\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\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\";\nimport { typographyVariants } from \"./typography\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport type { IconLevel } from \"@aviala-design/icons\";\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { resolveIconSlotSizing } from \"../lib/icon-slot-sizing\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\n\n/** Figma Components → Basic Input → Button */\nexport type ButtonMode =\n | \"primary\"\n | \"second\"\n | \"default\"\n | \"defaultCustom\"\n | \"noBackground\"\n | \"noBackgroundCustom\"\n | \"destructive\";\n\nexport type ButtonSize = \"tiny\" | \"small\" | \"regular\" | \"big\";\n\nconst sizeLabelLevels = {\n tiny: \"caption\" as const,\n small: \"text\" as const,\n regular: \"text\" as const,\n big: \"text\" as const,\n} as const;\n\nconst buttonVariants = cva(\n \"aviala-button aviala-focus-ring 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)]\",\n {\n variants: {\n mode: {\n primary: \"aviala-button--mode-primary\",\n second: \"aviala-button--mode-second\",\n default: \"aviala-button--mode-default\",\n defaultCustom: \"aviala-button--mode-defaultCustom\",\n noBackground: \"aviala-button--mode-noBackground\",\n noBackgroundCustom: \"aviala-button--mode-noBackgroundCustom\",\n destructive: \"aviala-button--mode-destructive\",\n },\n allRound: {\n true: \"min-w-[var(--button-min-width-allround,48px)] !rounded-[var(--border-radius-allround,99px)]\",\n false: \"min-w-[var(--button-min-width,46px)]\",\n },\n compact: {\n true: \"min-w-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n mode: \"primary\",\n allRound: false,\n },\n }\n);\n\nfunction resolveMode(\n mode?: ButtonMode | null,\n variant?: LegacyVariant | null\n): ButtonMode {\n if (mode) return mode;\n switch (variant) {\n case \"secondary\":\n return \"second\";\n case \"outline\":\n return \"default\";\n case \"ghost\":\n return \"noBackground\";\n case \"destructive\":\n return \"destructive\";\n case \"link\":\n return \"noBackground\";\n default:\n return \"primary\";\n }\n}\n\nfunction resolveSize(\n size?: ButtonSize | LegacySize | null,\n iconOnly?: boolean,\n variant?: LegacyVariant | null\n): ButtonSize {\n if (size === \"tiny\" || size === \"small\" || size === \"regular\" || size === \"big\") {\n return size;\n }\n switch (size) {\n case \"sm\":\n return \"small\";\n case \"lg\":\n return \"big\";\n case \"icon\":\n return \"regular\";\n default:\n break;\n }\n if (variant === \"link\" || iconOnly) return \"regular\";\n return \"regular\";\n}\n\ntype LegacyVariant =\n | \"default\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n\ntype LegacySize = \"default\" | \"sm\" | \"lg\" | \"icon\";\n\nfunction hasSurface(mode: ButtonMode): boolean {\n return (\n mode !== \"noBackground\" &&\n mode !== \"noBackgroundCustom\"\n );\n}\n\nfunction renderIcon(\n node: ReactNode,\n iconLevel: IconLevel,\n dimmed?: boolean,\n debugId?: string\n): ReactNode {\n if (!node) return null;\n\n const slotSizing = resolveIconSlotSizing(node, iconLevel, true);\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-button__icon\",\n dimmed && \"opacity-[var(--button-disabled-opacity,0.55)]\"\n )}\n style={\n {\n \"--button-icon-size\": resolveIconSizeToken(\n slotSizing.level,\n slotSizing.biggerSize\n ),\n } as CSSProperties\n }\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction resolveIconOnlyIcon(\n leftIcon?: ReactNode,\n icon?: ReactNode,\n children?: ReactNode,\n iconOnly?: boolean\n): ReactNode {\n const fromProp = leftIcon ?? icon;\n if (fromProp) return fromProp;\n if (!iconOnly || children == null || children === false) return undefined;\n if (isValidElement(children) && typeof children.type !== \"string\") return children;\n return undefined;\n}\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n Omit<VariantProps<typeof buttonVariants>, \"mode\"> & {\n /** Figma `Mode` — preferred over legacy `variant`. */\n mode?: ButtonMode;\n /** Figma `Size` — preferred over legacy shadcn sizes. */\n size?: ButtonSize | LegacySize;\n /** Figma `All-Round` */\n allRound?: boolean;\n /** Figma `IconOnly` */\n iconOnly?: boolean;\n /** @deprecated Use `mode` instead. */\n variant?: LegacyVariant;\n loading?: boolean;\n /** @deprecated Use `leftIcon`. */\n icon?: ReactNode;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n asChild?: boolean;\n };\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n mode: modeProp,\n variant,\n size: sizeProp,\n allRound = false,\n compact,\n iconOnly: iconOnlyProp,\n asChild = false,\n loading = false,\n disabled,\n icon,\n leftIcon,\n rightIcon,\n children,\n ...props\n },\n ref\n ) => {\n const mode = resolveMode(modeProp, variant);\n const iconOnly =\n iconOnlyProp ??\n (sizeProp === \"icon\" ||\n ((!!(leftIcon ?? icon) ||\n (isValidElement(children) && typeof children.type !== \"string\")) &&\n !rightIcon &&\n (leftIcon ?? icon ? !children : true)));\n const size = resolveSize(sizeProp, iconOnly, variant);\n const isDisabled = disabled || loading;\n const showSurface = hasSurface(mode);\n\n const contentOpacity = loading\n ? \"opacity-[var(--button-loading-opacity,0.6)]\"\n : undefined;\n\n const resolvedLeft = iconOnly\n ? resolveIconOnlyIcon(leftIcon, icon, children, true)\n : leftIcon ?? icon;\n const label = iconOnly ? null : children;\n const iconLevel = sizeLabelLevels[size];\n\n const inner = (\n <>\n {showSurface && (\n <span\n aria-hidden\n className=\"aviala-button-surface pointer-events-none absolute inset-0 rounded-[inherit]\"\n {...spiralDebugId(\"button.surface\")}\n />\n )}\n {loading && (\n <Loading\n level={loadingLevelForButtonSize(size)}\n mode=\"inherit\"\n lineHeightFix={false}\n className=\"relative z-[1] shrink-0 text-inherit\"\n aria-hidden\n />\n )}\n {!iconOnly && renderIcon(resolvedLeft, iconLevel, undefined, \"button.icon-left\")}\n {iconOnly\n ? renderIcon(resolvedLeft, iconLevel, undefined, \"button.icon-left\")\n : label !== null && label !== undefined && (\n <span\n className={cn(\n typographyVariants({ level: sizeLabelLevels[size] }),\n \"relative z-[1] shrink-0\",\n contentOpacity\n )}\n {...spiralDebugId(\"button.label\")}\n >\n {label}\n </span>\n )}\n {!iconOnly && renderIcon(rightIcon, iconLevel, undefined, \"button.icon-right\")}\n </>\n );\n\n const classes = cn(\n buttonVariants({ mode, ...(iconOnly ? {} : { allRound }), compact }),\n iconOnly && \"min-w-0\",\n iconOnly && allRound && \"!rounded-[var(--border-radius-allround,99px)]\",\n className\n );\n\n if (asChild) {\n return (\n <Slot\n className={classes}\n ref={ref}\n aria-disabled={isDisabled || undefined}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n className={classes}\n ref={ref}\n data-size={size}\n data-icon-only={iconOnly || undefined}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...spiralDebugId(\"button\")}\n {...props}\n >\n {inner}\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import type { AvialaIconProps, IconLevel } from \"@aviala-design/icons\";\nimport {\n cloneElement,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"./utils\";\n\nexport type CloneAvialaIconDefaults = {\n level?: IconLevel;\n biggerSize?: boolean;\n className?: string;\n};\n\n/** Clone an Aviala icon element, applying defaults only for unset level/biggerSize. */\nexport function cloneAvialaIconElement(\n node: ReactNode,\n defaults: CloneAvialaIconDefaults = {}\n): ReactNode {\n if (!node) return null;\n if (!isValidElement(node) || typeof node.type === \"string\") return node;\n\n const element = node as ReactElement<AvialaIconProps>;\n const { level, biggerSize, className } = element.props;\n\n return cloneElement(element, {\n level: level !== undefined ? level : defaults.level,\n biggerSize: biggerSize !== undefined ? biggerSize : defaults.biggerSize,\n width: undefined,\n height: undefined,\n className: cn(className, defaults.className, \"shrink-0\"),\n });\n}\n","import type { AvialaIconProps, IconLevel } from \"@aviala-design/icons\";\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\nimport { isValidElement, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\n\nexport function resolveIconSlotSizing(\n node: ReactNode,\n defaultLevel: IconLevel,\n defaultBiggerSize = true\n): { level: IconLevel; biggerSize: boolean } {\n if (!isValidElement(node) || typeof node.type === \"string\") {\n return { level: defaultLevel, biggerSize: defaultBiggerSize };\n }\n\n const props = (node as ReactElement<AvialaIconProps>).props;\n return {\n level: props.level ?? defaultLevel,\n biggerSize: props.biggerSize ?? defaultBiggerSize,\n };\n}\n\nexport function iconSlotCssVarStyle(\n node: ReactNode,\n cssVarName: string,\n defaultLevel: IconLevel,\n defaultBiggerSize = true\n): CSSProperties {\n const slotSizing = resolveIconSlotSizing(node, defaultLevel, defaultBiggerSize);\n return {\n [cssVarName]: resolveIconSizeToken(slotSizing.level, slotSizing.biggerSize),\n } as CSSProperties;\n}\n\nexport function iconLevelCssVarStyle(\n level: IconLevel,\n biggerSize: boolean,\n cssVarName: string\n): CSSProperties {\n return {\n [cssVarName]: resolveIconSizeToken(level, biggerSize),\n } as CSSProperties;\n}\n","/** Stable ids for docs component debugger — safe to leave on DOM in production. */\nexport const SPIRAL_DEBUG_ATTR = \"data-spiral-debug-id\" as const;\n\nexport function spiralDebugId(id: string): { [SPIRAL_DEBUG_ATTR]: string; \"data-component\": string } {\n const component = id.split(\".\")[0] ?? id;\n return {\n [SPIRAL_DEBUG_ATTR]: id,\n \"data-component\": component,\n };\n}\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 { renderSlotIcon } from \"../lib/render-slot-icon\";\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\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, \"aviala-input__slot\", \"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, \"aviala-input__slot\", \"input.right-icon\")}\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { inputRootVariants };\n","import { type ReactNode } from \"react\";\nimport { cloneAvialaIconElement } from \"./clone-aviala-icon\";\nimport { iconSlotCssVarStyle } from \"./icon-slot-sizing\";\nimport { spiralDebugId } from \"./spiral-debug\";\n\nexport function renderSlotIcon(\n node: ReactNode,\n className: string,\n debugId?: string\n): 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={className}\n style={iconSlotCssVarStyle(node, \"--input-slot-icon-size\", \"text\", true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { resolveIconSizeToken } from \"@aviala-design/icons\";\nimport { cn } from \"../lib/utils\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Information Display → Badge (166:137) */\nexport type BadgeStyle = \"theme\" | \"info\" | \"fail\" | \"warning\" | \"success\" | \"normal\";\nexport type BadgeLevel = \"caption\" | \"text\";\nexport type BadgeLineHeightFix = \"text\" | \"subtitle\" | \"off\";\n\nconst badgeVariants = cva(\"aviala-badge\", {\n variants: {\n style: {\n theme: \"aviala-badge--style-theme\",\n info: \"aviala-badge--style-info\",\n fail: \"aviala-badge--style-fail\",\n warning: \"aviala-badge--style-warning\",\n success: \"aviala-badge--style-success\",\n normal: \"aviala-badge--style-normal\",\n },\n level: {\n caption: \"aviala-badge--level-caption\",\n text: \"aviala-badge--level-text\",\n },\n primary: {\n true: \"aviala-badge--primary\",\n false: \"aviala-badge--secondary\",\n },\n lineHeightFix: {\n text: \"aviala-badge--lhf-text\",\n subtitle: \"aviala-badge--lhf-subtitle\",\n off: \"aviala-badge--lhf-off\",\n },\n },\n defaultVariants: {\n style: \"theme\",\n level: \"caption\",\n primary: false,\n lineHeightFix: \"text\",\n },\n});\n\nfunction resolveLineHeightFix(\n level: BadgeLevel,\n lineHeightFix: boolean | BadgeLineHeightFix | undefined\n): BadgeLineHeightFix {\n if (lineHeightFix === false || lineHeightFix === \"off\") return \"off\";\n if (lineHeightFix === \"subtitle\") return \"subtitle\";\n if (lineHeightFix === \"text\" || lineHeightFix === true) {\n return level === \"text\" ? \"subtitle\" : \"text\";\n }\n return level === \"text\" ? \"subtitle\" : \"text\";\n}\n\nfunction iconSizeForLevel(level: BadgeLevel): string {\n return resolveIconSizeToken(level);\n}\n\nfunction renderBadgeIcon(node: ReactNode, level: BadgeLevel): ReactNode {\n if (!node) return null;\n const size = iconSizeForLevel(level);\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(\n node as ReactElement<{\n width?: number | string;\n height?: number | string;\n className?: string;\n }>,\n {\n width: size,\n height: size,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n }\n )\n : node;\n\n return (\n <span className=\"aviala-badge__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nexport type BadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, \"style\"> &\n Omit<VariantProps<typeof badgeVariants>, \"lineHeightFix\" | \"primary\"> & {\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n /** Figma `Primary` — filled primary surface vs secondary surface */\n primary?: boolean;\n /**\n * Figma `LineHeightFix`.\n * - `true` / omitted: Caption → AlignToTextLevel, Text → AlignToSubtitleLevel\n * - `false` / `\"off\"`: OFF\n */\n lineHeightFix?: boolean | BadgeLineHeightFix;\n };\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n className,\n children,\n leftIcon,\n rightIcon,\n style = \"theme\",\n level = \"caption\",\n primary = false,\n lineHeightFix,\n ...props\n },\n ref\n ) => {\n const resolvedLevel = level ?? \"caption\";\n const resolvedStyle = style ?? \"theme\";\n const resolvedLhf = resolveLineHeightFix(resolvedLevel, lineHeightFix);\n const typographyLevel: TypographyLevel = resolvedLevel;\n const tone = primary ? (\"white\" as const) : (\"default\" as const);\n\n return (\n <span\n ref={ref}\n className={cn(\n badgeVariants({\n style: resolvedStyle,\n level: resolvedLevel,\n primary,\n lineHeightFix: resolvedLhf,\n }),\n className\n )}\n data-style={resolvedStyle}\n data-level={resolvedLevel}\n data-primary={primary ? \"true\" : \"false\"}\n data-line-height-fix={resolvedLhf}\n {...props}\n >\n {renderBadgeIcon(leftIcon, resolvedLevel)}\n <Typography\n level={typographyLevel}\n tone={tone}\n as=\"span\"\n className=\"aviala-badge__text whitespace-nowrap\"\n >\n {children}\n </Typography>\n {renderBadgeIcon(rightIcon, resolvedLevel)}\n </span>\n );\n }\n);\nBadge.displayName = \"Badge\";\n","import {\n DirectionArrowDownLight,\n DirectionArrowUpLight,\n} from \"@aviala-design/icons\";\nimport {\n forwardRef,\n isValidElement,\n useRef,\n useState,\n type ChangeEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { renderSlotIcon } from \"../lib/render-slot-icon\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\nimport { typographyVariants } from \"./typography\";\nimport { Badge } from \"./badge\";\nimport {\n inputRootVariants,\n type InputSize,\n type InputState,\n} from \"./input\";\n\n/** Figma Components → Information Collect → NumberInput (197:3237) */\nexport type NumberInputStyle = \"default\" | \"monospaced\";\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n ref.current = value;\n}\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\nfunction parseNumeric(raw: string): number | null {\n if (raw.trim() === \"\") return null;\n const parsed = Number(raw);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction clamp(value: number, min?: number, max?: number): number {\n let next = value;\n if (min !== undefined && Number.isFinite(min)) next = Math.max(min, next);\n if (max !== undefined && Number.isFinite(max)) next = Math.min(max, next);\n return next;\n}\n\nfunction stepValue(\n current: number | null,\n direction: 1 | -1,\n step: number,\n min?: number,\n max?: number\n): number {\n const base = current ?? (direction > 0 ? (min ?? 0) : (max ?? 0));\n const next = clamp(base + direction * step, min, max);\n // Avoid float noise for common decimal steps\n const precision = Math.max(\n decimalPlaces(step),\n decimalPlaces(base),\n decimalPlaces(min ?? 0),\n decimalPlaces(max ?? 0)\n );\n return Number(next.toFixed(precision));\n}\n\nfunction decimalPlaces(n: number): number {\n if (!Number.isFinite(n)) return 0;\n const text = String(n);\n const i = text.indexOf(\".\");\n return i === -1 ? 0 : text.length - i - 1;\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\nconst numberInputRootVariants = inputRootVariants;\n\nexport type NumberInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"value\" | \"defaultValue\" | \"onChange\"\n> & {\n /** Figma `Size` */\n size?: InputSize;\n /** Figma `All-Round` */\n allRound?: boolean;\n /** Figma `Style` — Default vs Monospaced (tabular / light numeric) */\n inputStyle?: NumberInputStyle;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n leftBadge?: ReactNode;\n rightBadge?: ReactNode;\n /** Figma `showNumberControlButton` — vertical steppers */\n showControls?: boolean;\n /** When false, input sizes to content */\n fullWidth?: boolean;\n error?: boolean;\n value?: number | string | \"\";\n defaultValue?: number | string;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Fires with the parsed number (or `null` when empty / invalid) */\n onValueChange?: (value: number | null) => void;\n};\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n className,\n size = \"regular\",\n allRound = false,\n inputStyle = \"default\",\n leftIcon,\n rightIcon,\n leftBadge,\n rightBadge,\n showControls = true,\n fullWidth = true,\n error = false,\n disabled,\n value,\n defaultValue,\n step = 1,\n min,\n max,\n onChange,\n onValueChange,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(() =>\n defaultValue === undefined || defaultValue === null ? \"\" : String(defaultValue)\n );\n const isControlled = value !== undefined;\n const resolvedValue = isControlled\n ? value === \"\" || value === null || value === undefined\n ? \"\"\n : String(value)\n : internalValue;\n const inputState = resolveInputState(resolvedValue, undefined, focused);\n const numeric = parseNumeric(resolvedValue);\n const stepAmount = Number.isFinite(step) && step !== 0 ? Math.abs(step) : 1;\n\n const commitString = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(parseNumeric(next));\n onChange?.({\n target: { value: next },\n currentTarget: { value: next },\n } as ChangeEvent<HTMLInputElement>);\n };\n\n const applyStep = (direction: 1 | -1) => {\n if (disabled) return;\n const next = stepValue(numeric, direction, stepAmount, min, max);\n commitString(String(next));\n inputRef.current?.focus();\n };\n\n return (\n <div\n className={cn(\n inputRootVariants({ fullWidth }),\n \"aviala-number-input\",\n className\n )}\n data-size={size}\n data-all-round={allRound ? \"true\" : undefined}\n data-input-state={inputState}\n data-input-style={inputStyle}\n data-error={error ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n {...spiralDebugId(\"number-input\")}\n >\n {renderSlotIcon(leftIcon, \"aviala-input__slot\", \"number-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(\"number-input.field\")}\n >\n <input\n ref={(node) => {\n inputRef.current = node;\n assignRef(ref, node);\n }}\n type=\"number\"\n inputMode=\"decimal\"\n disabled={disabled}\n value={resolvedValue}\n step={stepAmount}\n min={min}\n max={max}\n aria-invalid={error || undefined}\n className={cn(\n typographyVariants({ level: \"text\" }),\n \"aviala-number-input__input 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 data-content={inputStyle === \"monospaced\" ? \"number\" : \"text\"}\n onChange={(event) => {\n const next = event.target.value;\n if (!isControlled) setInternalValue(next);\n onValueChange?.(parseNumeric(next));\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n // Clamp on blur when a finite number is present\n const parsed = parseNumeric(event.target.value);\n if (parsed !== null) {\n const clamped = clamp(parsed, min, max);\n if (clamped !== parsed) {\n commitString(String(clamped));\n }\n }\n onBlur?.(event);\n }}\n onKeyDown={(event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n applyStep(1);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n applyStep(-1);\n }\n onKeyDown?.(event);\n }}\n {...props}\n />\n </div>\n\n {renderBadgeArea(rightBadge)}\n {renderSlotIcon(rightIcon, \"aviala-input__slot\", \"number-input.right-icon\")}\n\n {showControls ? (\n <div\n className=\"aviala-number-input__controls\"\n {...spiralDebugId(\"number-input.controls\")}\n >\n <button\n type=\"button\"\n className=\"aviala-number-input__step aviala-number-input__step--up\"\n tabIndex={-1}\n disabled={\n disabled ||\n (max !== undefined && numeric !== null && numeric >= max)\n }\n aria-label=\"Increment\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => applyStep(1)}\n {...spiralDebugId(\"number-input.step-up\")}\n >\n <DirectionArrowUpLight level=\"text\" biggerSize aria-hidden />\n </button>\n <button\n type=\"button\"\n className=\"aviala-number-input__step aviala-number-input__step--down\"\n tabIndex={-1}\n disabled={\n disabled ||\n (min !== undefined && numeric !== null && numeric <= min)\n }\n aria-label=\"Decrement\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => applyStep(-1)}\n {...spiralDebugId(\"number-input.step-down\")}\n >\n <DirectionArrowDownLight level=\"text\" biggerSize aria-hidden />\n </button>\n </div>\n ) : null}\n </div>\n );\n }\n);\nNumberInput.displayName = \"NumberInput\";\n\nexport { numberInputRootVariants };\n","import { SymbolResize } from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type TextareaHTMLAttributes,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { renderSlotIcon } from \"../lib/render-slot-icon\";\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 (301:6320) */\nexport type TextareaSize = \"regular\" | \"big\";\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n ref.current = value;\n}\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\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 + SymbolResize drag handle */\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 style,\n ...props\n },\n ref\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(() => String(defaultValue ?? \"\"));\n const [resizing, setResizing] = useState(false);\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 const setTextareaRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n textareaRef.current = node;\n assignRef(ref, node);\n },\n [ref]\n );\n\n /** Clicks on padding / icon slots should focus the real control. */\n const handleShellMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n const target = event.target as HTMLElement | null;\n if (!target) return;\n if (target.closest(\".aviala-textarea__resize-handle\")) return;\n if (target.closest(\"textarea\") === textareaRef.current) return;\n\n event.preventDefault();\n textareaRef.current?.focus();\n },\n [disabled]\n );\n\n const handleResizePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLButtonElement>) => {\n if (disabled || event.button !== 0) return;\n const root = rootRef.current;\n if (!root) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const handle = event.currentTarget;\n const startX = event.clientX;\n const startY = event.clientY;\n const startW = root.offsetWidth;\n const startH = root.offsetHeight;\n const styles = getComputedStyle(root);\n const minW = parseFloat(styles.minWidth) || 46;\n const minH = parseFloat(styles.minHeight) || 70;\n\n handle.setPointerCapture(event.pointerId);\n setResizing(true);\n\n const onMove = (ev: PointerEvent) => {\n const nextW = Math.max(minW, Math.round(startW + (ev.clientX - startX)));\n const nextH = Math.max(minH, Math.round(startH + (ev.clientY - startY)));\n root.style.width = `${nextW}px`;\n root.style.height = `${nextH}px`;\n };\n\n const onUp = (ev: PointerEvent) => {\n if (handle.hasPointerCapture(ev.pointerId)) {\n handle.releasePointerCapture(ev.pointerId);\n }\n handle.removeEventListener(\"pointermove\", onMove);\n handle.removeEventListener(\"pointerup\", onUp);\n handle.removeEventListener(\"pointercancel\", onUp);\n setResizing(false);\n };\n\n handle.addEventListener(\"pointermove\", onMove);\n handle.addEventListener(\"pointerup\", onUp);\n handle.addEventListener(\"pointercancel\", onUp);\n },\n [disabled]\n );\n\n useEffect(() => {\n if (!resizing) return;\n const previous = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.cursor = \"nwse-resize\";\n document.body.style.userSelect = \"none\";\n return () => {\n document.body.style.cursor = previous;\n document.body.style.userSelect = previousUserSelect;\n };\n }, [resizing]);\n\n return (\n <div\n ref={rootRef}\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 data-resizing={resizing ? \"true\" : undefined}\n style={style}\n onMouseDown={handleShellMouseDown}\n {...spiralDebugId(\"textarea\")}\n >\n {renderSlotIcon(leftIcon, \"aviala-textarea__slot\", \"textarea.left-icon\")}\n\n <div className=\"aviala-textarea__field\" {...spiralDebugId(\"textarea.field\")}>\n <textarea\n ref={setTextareaRef}\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 }\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, \"aviala-textarea__slot\", \"textarea.right-icon\")}\n\n {showController ? (\n <div className=\"aviala-textarea__controller\" {...spiralDebugId(\"textarea.controller\")}>\n <span\n className={cn(\"aviala-textarea__counter\", typographyVariants({ level: \"caption\" }))}\n aria-hidden\n >\n {displayLength}\n {maxLength !== undefined ? `/${maxLength}` : \"\"}\n </span>\n <button\n type=\"button\"\n className=\"aviala-textarea__resize-handle\"\n aria-label=\"Resize textarea\"\n disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onPointerDown={handleResizePointerDown}\n {...spiralDebugId(\"textarea.resize\")}\n >\n <SymbolResize thickness=\"Regular\" mode=\"default\" aria-hidden />\n </button>\n </div>\n ) : null}\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n DirectionArrowDownLight,\n DirectionArrowRight,\n SymbolRight,\n UsersUserCircle,\n type IconLevel,\n} from \"@aviala-design/icons\";\nimport {\n Children,\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type FocusEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n isValidElement,\n} from \"react\";\nimport { Badge } from \"./badge\";\nimport { Link } from \"./link\";\nimport { typographyVariants } from \"./typography\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { iconLevelCssVarStyle, iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\nimport { renderSlotIcon } from \"../lib/render-slot-icon\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\n\n/** Figma Components → Information Collect → Select */\nexport type SelectSize = \"regular\" | \"big\";\n\n/** Figma Select Menu Item `Function` variant */\nexport type SelectItemFunction =\n | \"action\"\n | \"simple\"\n | \"checkbox\"\n | \"form-checkbox\"\n | \"radio\"\n | \"form-radio\";\n\n/** Figma Select Menu Item `Type` variant */\nexport type SelectItemLayout = \"default\" | \"title\" | \"people\" | \"checked\";\n\nconst SELECT_SUB_MENU_CLOSE_DELAY_MS = 250;\nconst SELECT_SUB_MENU_EXIT_ANIM_MS = 150;\n\ntype SelectSubMenuMarkerProps = {\n children: ReactNode;\n className?: string;\n side?: \"left\" | \"right\";\n sideOffset?: number;\n portalled?: boolean;\n};\n\ntype ParsedSelectSubMenu = {\n children: ReactNode;\n className?: string;\n side: \"left\" | \"right\";\n sideOffset: number;\n portalled: boolean;\n};\n\ntype SubMenuItemRegistration = {\n getRoot: () => HTMLElement | null;\n getContent: () => HTMLElement | null;\n};\n\ntype SelectSubMenuContextValue = {\n contentId: string;\n registerSubItem: (id: string, registration: SubMenuItemRegistration) => void;\n unregisterSubItem: (id: string) => void;\n openSubItem: (id: string) => void;\n scheduleCloseSubItem: (id: string, relatedTarget?: EventTarget | null) => void;\n closeActiveSubItem: () => void;\n isSubItemOpen: (id: string) => boolean;\n isSubItemExiting: (id: string) => boolean;\n};\n\nconst SelectSubMenuContext = createContext<SelectSubMenuContextValue | null>(null);\n\ntype SelectDismissContextValue = {\n pointerDownCloseRef: React.MutableRefObject<boolean>;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n};\n\nconst SelectDismissContext = createContext<SelectDismissContextValue | null>(null);\n\nfunction useSelectSubMenuContext() {\n const context = useContext(SelectSubMenuContext);\n if (!context) {\n throw new Error(\"Select sub-menu components must be used within SelectContent.\");\n }\n return context;\n}\n\nfunction useSelectSubMenuLayer(): SelectSubMenuContextValue {\n const contentId = useId();\n const [activeSubItemId, setActiveSubItemId] = useState<string | null>(null);\n const [exitingSubItemId, setExitingSubItemId] = useState<string | null>(null);\n const itemsRef = useRef(new Map<string, SubMenuItemRegistration>());\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const exitTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const pointerRef = useRef({ x: 0, y: 0 });\n\n const cancelScheduledClose = useCallback(() => {\n if (closeTimerRef.current !== undefined) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = undefined;\n }\n }, []);\n\n const clearExitTimer = useCallback(() => {\n if (exitTimerRef.current !== undefined) {\n clearTimeout(exitTimerRef.current);\n exitTimerRef.current = undefined;\n }\n }, []);\n\n const isTargetInSubItemTree = useCallback((id: string, target: EventTarget | null | undefined) => {\n if (!(target instanceof Node)) return false;\n const registration = itemsRef.current.get(id);\n if (!registration) return false;\n const root = registration.getRoot();\n const content = registration.getContent();\n return (root?.contains(target) ?? false) || (content?.contains(target) ?? false);\n }, []);\n\n const findSubItemIdForTarget = useCallback((target: EventTarget | null | undefined, excludeId?: string) => {\n if (!(target instanceof Node)) return null;\n for (const [id, registration] of itemsRef.current) {\n if (id === excludeId) continue;\n const root = registration.getRoot();\n const content = registration.getContent();\n if (root?.contains(target) || content?.contains(target)) return id;\n }\n return null;\n }, []);\n\n const isPointerOverSubItem = useCallback((id: string) => {\n const hovered = document.elementFromPoint(pointerRef.current.x, pointerRef.current.y);\n if (!(hovered instanceof Element)) return false;\n const registration = itemsRef.current.get(id);\n if (!registration) return false;\n const root = registration.getRoot();\n const content = registration.getContent();\n return (root?.contains(hovered) ?? false) || (content?.contains(hovered) ?? false);\n }, []);\n\n const findSubItemIdAtPointer = useCallback((excludeId?: string) => {\n const hovered = document.elementFromPoint(pointerRef.current.x, pointerRef.current.y);\n if (!(hovered instanceof Element)) return null;\n for (const [id, registration] of itemsRef.current) {\n if (id === excludeId) continue;\n const root = registration.getRoot();\n const content = registration.getContent();\n if (root?.contains(hovered) || content?.contains(hovered)) return id;\n }\n return null;\n }, []);\n\n const beginExit = useCallback(\n (id: string) => {\n cancelScheduledClose();\n clearExitTimer();\n setExitingSubItemId(id);\n setActiveSubItemId(null);\n exitTimerRef.current = setTimeout(() => {\n setExitingSubItemId((current) => (current === id ? null : current));\n exitTimerRef.current = undefined;\n }, SELECT_SUB_MENU_EXIT_ANIM_MS);\n },\n [cancelScheduledClose, clearExitTimer]\n );\n\n const openSubItem = useCallback(\n (id: string) => {\n cancelScheduledClose();\n clearExitTimer();\n setExitingSubItemId(null);\n setActiveSubItemId(id);\n },\n [cancelScheduledClose, clearExitTimer]\n );\n\n const closeActiveSubItem = useCallback(() => {\n if (activeSubItemId) {\n beginExit(activeSubItemId);\n return;\n }\n cancelScheduledClose();\n }, [activeSubItemId, beginExit, cancelScheduledClose]);\n\n const scheduleCloseSubItem = useCallback(\n (id: string, relatedTarget?: EventTarget | null) => {\n if (exitingSubItemId === id) return;\n if (isTargetInSubItemTree(id, relatedTarget)) return;\n\n const siblingId = findSubItemIdForTarget(relatedTarget, id);\n if (siblingId) {\n openSubItem(siblingId);\n return;\n }\n\n cancelScheduledClose();\n closeTimerRef.current = setTimeout(() => {\n if (isPointerOverSubItem(id)) return;\n\n const pointerSiblingId = findSubItemIdAtPointer(id);\n if (pointerSiblingId) {\n openSubItem(pointerSiblingId);\n return;\n }\n\n beginExit(id);\n }, SELECT_SUB_MENU_CLOSE_DELAY_MS);\n },\n [\n beginExit,\n cancelScheduledClose,\n exitingSubItemId,\n findSubItemIdAtPointer,\n findSubItemIdForTarget,\n isPointerOverSubItem,\n isTargetInSubItemTree,\n openSubItem,\n ]\n );\n\n const registerSubItem = useCallback((id: string, registration: SubMenuItemRegistration) => {\n itemsRef.current.set(id, registration);\n }, []);\n\n const unregisterSubItem = useCallback((id: string) => {\n itemsRef.current.delete(id);\n setActiveSubItemId((current) => (current === id ? null : current));\n setExitingSubItemId((current) => (current === id ? null : current));\n }, []);\n\n useEffect(() => {\n const trackPointer = (event: PointerEvent) => {\n pointerRef.current = { x: event.clientX, y: event.clientY };\n };\n document.addEventListener(\"pointermove\", trackPointer, { passive: true });\n return () => document.removeEventListener(\"pointermove\", trackPointer);\n }, []);\n\n useEffect(\n () => () => {\n cancelScheduledClose();\n clearExitTimer();\n },\n [cancelScheduledClose, clearExitTimer]\n );\n\n useEffect(() => {\n const visibleSubItemId = activeSubItemId ?? exitingSubItemId;\n if (!visibleSubItemId) return;\n\n const keepSelectOpen = (event: Event) => {\n if (isWithinSelectSubLayer(event.target)) {\n event.stopPropagation();\n }\n };\n\n const handleEscape = (event: globalThis.KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n event.preventDefault();\n event.stopPropagation();\n if (activeSubItemId) {\n beginExit(activeSubItemId);\n return;\n }\n if (exitingSubItemId) {\n clearExitTimer();\n setExitingSubItemId(null);\n }\n };\n\n document.addEventListener(\"pointerdown\", keepSelectOpen, true);\n document.addEventListener(\"keydown\", handleEscape, true);\n return () => {\n document.removeEventListener(\"pointerdown\", keepSelectOpen, true);\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n }, [activeSubItemId, beginExit, clearExitTimer, exitingSubItemId]);\n\n return useMemo(\n () => ({\n contentId,\n registerSubItem,\n unregisterSubItem,\n openSubItem,\n scheduleCloseSubItem,\n closeActiveSubItem,\n isSubItemOpen: (id: string) => activeSubItemId === id || exitingSubItemId === id,\n isSubItemExiting: (id: string) => exitingSubItemId === id && activeSubItemId !== id,\n }),\n [\n activeSubItemId,\n closeActiveSubItem,\n contentId,\n exitingSubItemId,\n openSubItem,\n registerSubItem,\n scheduleCloseSubItem,\n unregisterSubItem,\n ]\n );\n}\n\n/** Marker child for {@link SelectSubItem} — extracted and rendered in the flyout panel. */\nexport function SelectSubMenu(_props: SelectSubMenuMarkerProps): null {\n return null;\n}\nSelectSubMenu.displayName = \"SelectSubMenu\";\n\nfunction isSelectSubMenuElement(child: ReactNode): child is ReactElement<SelectSubMenuMarkerProps> {\n return isValidElement(child) && child.type === SelectSubMenu;\n}\n\nfunction parseSelectSubItemChildren(children: ReactNode): {\n itemChildren: ReactNode;\n subMenu: ParsedSelectSubMenu | null;\n} {\n const itemNodes: ReactNode[] = [];\n let subMenu: ParsedSelectSubMenu | null = null;\n\n Children.forEach(children, (child) => {\n if (isSelectSubMenuElement(child)) {\n subMenu = {\n children: child.props.children,\n className: child.props.className,\n side: child.props.side ?? \"right\",\n sideOffset: child.props.sideOffset ?? 8,\n portalled: child.props.portalled ?? false,\n };\n return;\n }\n itemNodes.push(child);\n });\n\n return {\n itemChildren: itemNodes.length === 1 ? itemNodes[0] : itemNodes,\n subMenu,\n };\n}\n\nfunction isWithinSelectSubLayer(target: EventTarget | null) {\n return target instanceof Element && target.closest(\".aviala-select-sub-content\") !== null;\n}\n\n\nfunction renderItemIcon(\n node: ReactNode,\n iconLevel: IconLevel = \"text\",\n debugId?: string\n): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-select-item__icon\",\n iconLevel === \"caption\" && \"aviala-select-item__icon--sm\"\n )}\n style={iconSlotCssVarStyle(node, \"--select-item-icon-size\", iconLevel, true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction renderBadgeSlot(node: ReactNode): ReactNode {\n if (node == null || node === false) return null;\n\n return (\n <span className=\"aviala-select-item__badge\">\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\n </span>\n );\n}\n\nfunction SelectItemFormRadio() {\n return (\n <span className=\"aviala-select-item__form-radio\" aria-hidden>\n <span className=\"aviala-select-item__form-radio-surface\" />\n <span className=\"aviala-select-item__form-radio-indicator\" />\n </span>\n );\n}\n\nfunction SelectItemFormCheckbox() {\n return (\n <span className=\"aviala-select-item__form-checkbox\" aria-hidden>\n <SymbolRight\n className=\"aviala-select-item__form-checkbox-icon\"\n width={12}\n height={12}\n aria-hidden\n />\n </span>\n );\n}\n\nfunction SelectItemTrailingRadio() {\n return (\n <SelectPrimitive.ItemIndicator className=\"aviala-select-item__trailing-radio\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </SelectPrimitive.ItemIndicator>\n );\n}\n\nfunction SelectItemTrailingCheckbox() {\n return (\n <SelectPrimitive.ItemIndicator className=\"aviala-select-item__trailing-checkbox\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </SelectPrimitive.ItemIndicator>\n );\n}\n\nfunction SelectItemDefaultAvatar() {\n return (\n <span className=\"aviala-select-item__avatar\" aria-hidden>\n <UsersUserCircle level=\"text\" biggerSize aria-hidden />\n </span>\n );\n}\n\nfunction renderFunctionSlot(\n itemFunction: SelectItemFunction,\n layout: SelectItemLayout,\n showFunctionIcon: boolean,\n icon?: ReactNode\n): ReactNode {\n if (!showFunctionIcon) return null;\n if (layout === \"checked\") return null;\n\n const functionStyle = icon\n ? iconSlotCssVarStyle(icon, \"--select-item-function-icon-size\", \"text\", true)\n : undefined;\n\n if (icon !== undefined) {\n return (\n <span\n className=\"aviala-select-item__function\"\n style={functionStyle}\n {...spiralDebugId(\"select.content.item.function\")}\n >\n {cloneAvialaIconElement(icon, { level: \"text\", biggerSize: true })}\n </span>\n );\n }\n\n switch (itemFunction) {\n case \"radio\":\n return (\n <span className=\"aviala-select-item__function\" {...spiralDebugId(\"select.content.item.function\")}>\n <SelectItemTrailingRadio />\n </span>\n );\n case \"checkbox\":\n return (\n <span className=\"aviala-select-item__function\" {...spiralDebugId(\"select.content.item.function\")}>\n <SelectItemTrailingCheckbox />\n </span>\n );\n case \"simple\":\n case \"action\":\n default:\n return (\n <span\n className=\"aviala-select-item__function\"\n style={iconLevelCssVarStyle(\"text\", true, \"--select-item-function-icon-size\")}\n {...spiralDebugId(\"select.content.item.function\")}\n >\n <DirectionArrowRight level=\"text\" biggerSize aria-hidden />\n </span>\n );\n }\n}\n\nexport type SelectProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Root>;\n\n/**\n * Radix Select closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down (outside click, item select, trigger toggle)\n * and Escape must still dismiss on the first interaction.\n */\nexport function Select({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: SelectProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n const dismissContextValue = useMemo(\n () => ({ pointerDownCloseRef, triggerRef }),\n []\n );\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) return;\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n if (nextOpen) {\n pointerDownCloseRef.current = false;\n }\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange]\n );\n\n return (\n <SelectDismissContext.Provider value={dismissContextValue}>\n <SelectPrimitive.Root open={open} onOpenChange={handleOpenChange} {...props} />\n </SelectDismissContext.Provider>\n );\n}\nexport const SelectValue = SelectPrimitive.Value;\nexport const SelectGroup = SelectPrimitive.Group;\n\nconst SELECT_MENU_ITEM_DISPLAY_NAMES = new Set([\n SelectPrimitive.Item.displayName,\n \"SelectItem\",\n \"SelectSubItem\",\n \"SelectItemPeople\",\n]);\n\nfunction getComponentDisplayName(type: unknown): string | undefined {\n if (typeof type === \"function\" || (typeof type === \"object\" && type !== null)) {\n return (type as { displayName?: string }).displayName;\n }\n return undefined;\n}\n\nfunction isSelectGroupElement(child: ReactNode): boolean {\n if (!isValidElement(child)) return false;\n if (child.type === SelectGroup) return true;\n return getComponentDisplayName(child.type) === \"SelectItemGroup\";\n}\n\nfunction isSelectMenuItemElement(child: ReactNode): boolean {\n if (!isValidElement(child)) return false;\n const displayName = getComponentDisplayName(child.type);\n return displayName !== undefined && SELECT_MENU_ITEM_DISPLAY_NAMES.has(displayName);\n}\n\n/** Ensures bare menu items are wrapped in a SelectGroup in the DOM (Figma requirement). */\nfunction wrapUngroupedSelectItems(children: ReactNode): ReactNode {\n const nodes = Children.toArray(children);\n if (nodes.length === 0) return children;\n\n const wrapped: ReactNode[] = [];\n let bareItems: ReactNode[] = [];\n let autoGroupIndex = 0;\n\n const flushBareItems = () => {\n if (bareItems.length === 0) return;\n wrapped.push(\n <SelectGroup key={`__select-auto-group-${autoGroupIndex++}`} className=\"aviala-select-group\">\n <div className=\"aviala-select-group__slot\">{bareItems}</div>\n </SelectGroup>\n );\n bareItems = [];\n };\n\n for (const node of nodes) {\n if (isSelectGroupElement(node)) {\n flushBareItems();\n wrapped.push(node);\n } else if (isSelectMenuItemElement(node)) {\n bareItems.push(node);\n } else {\n flushBareItems();\n wrapped.push(node);\n }\n }\n\n flushBareItems();\n return wrapped.length === 1 ? wrapped[0] : wrapped;\n}\n\nexport type SelectTriggerProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n size?: SelectSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Override chevron expand icon (defaults to DirectionArrowDownLight). */\n expandIcon?: ReactNode;\n placeholder?: string;\n error?: boolean;\n};\n\nexport const SelectTrigger = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(\n (\n {\n className,\n size = \"regular\",\n allRound = false,\n leftIcon,\n rightIcon,\n expandIcon,\n placeholder,\n error = false,\n ...props\n },\n ref\n ) => {\n const dismissContext = useContext(SelectDismissContext);\n\n return (\n <SelectPrimitive.Trigger\n ref={(node) => {\n if (dismissContext) {\n dismissContext.triggerRef.current = node;\n }\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(\"aviala-select-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-error={error ? \"true\" : undefined}\n {...spiralDebugId(\"select.trigger\")}\n {...props}\n >\n {renderSlotIcon(leftIcon, \"aviala-select-trigger__slot\", \"select.trigger.icon-left\")}\n <span className=\"aviala-select-trigger__field\">\n <SelectPrimitive.Value\n placeholder={placeholder}\n className={cn(\"aviala-select-trigger__value\", typographyVariants({ level: \"text\" }))}\n {...spiralDebugId(\"select.trigger.value\")}\n />\n </span>\n {renderSlotIcon(rightIcon, \"aviala-select-trigger__slot\", \"select.trigger.icon-right\")}\n <SelectPrimitive.Icon asChild>\n <span\n className=\"aviala-select-trigger__expand\"\n aria-hidden\n style={\n expandIcon\n ? iconSlotCssVarStyle(expandIcon, \"--input-slot-icon-size\", \"text\", true)\n : iconLevelCssVarStyle(\"text\", true, \"--input-slot-icon-size\")\n }\n {...spiralDebugId(\"select.trigger.expand\")}\n >\n {expandIcon ?? (\n <DirectionArrowDownLight\n className=\"aviala-select-trigger__expand-icon\"\n level=\"text\"\n biggerSize\n aria-hidden\n />\n )}\n </span>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n }\n);\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nexport type SelectContentProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & {\n /** Render without Portal — use inside nested overlays (e.g. ColorPicker popover). */\n portalled?: boolean;\n};\n\nexport const SelectContent = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n SelectContentProps\n>(\n (\n {\n className,\n children,\n position = \"popper\",\n sideOffset = 8,\n portalled = true,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const subMenuLayer = useSelectSubMenuLayer();\n const dismissContext = useContext(SelectDismissContext);\n\n const handleCloseAutoFocus: NonNullable<SelectContentProps[\"onCloseAutoFocus\"]> = (\n event\n ) => {\n onCloseAutoFocus?.(event);\n if (event.defaultPrevented) {\n if (dismissContext) {\n dismissContext.pointerDownCloseRef.current = false;\n }\n return;\n }\n if (dismissContext?.pointerDownCloseRef.current) {\n event.preventDefault();\n dismissContext.triggerRef.current?.blur();\n dismissContext.pointerDownCloseRef.current = false;\n }\n };\n\n const content = (\n <SelectSubMenuContext.Provider value={subMenuLayer}>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\"aviala-select-content\", className)}\n position={position}\n sideOffset={sideOffset}\n onCloseAutoFocus={handleCloseAutoFocus}\n {...spiralDebugId(\"select.content\")}\n {...props}\n >\n <SelectPrimitive.Viewport\n className=\"aviala-select-viewport\"\n {...spiralDebugId(\"select.content.viewport\")}\n >\n {wrapUngroupedSelectItems(children)}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectSubMenuContext.Provider>\n );\n\n if (!portalled) return content;\n\n return <SelectPrimitive.Portal>{content}</SelectPrimitive.Portal>;\n }\n);\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nexport type SelectLabelProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Label>;\n\nexport const SelectLabel = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n SelectLabelProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"aviala-select-label\", typographyVariants({ level: \"caption\" }), className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nexport type SelectItemProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Item> & {\n /** Figma Function variant (default Action Item) */\n itemFunction?: SelectItemFunction;\n /** Figma Type variant */\n layout?: SelectItemLayout;\n leftIcon?: ReactNode;\n showLeftIcon?: boolean;\n rightIcon?: ReactNode;\n showRightIcon?: boolean;\n badge?: ReactNode;\n showBadge?: boolean;\n showMoreFunction?: boolean;\n /** Inline action before the function icon (Figma MoreFunction) */\n moreAction?: ReactNode;\n /** Override trailing function slot (Figma function icon) */\n icon?: ReactNode;\n /** Show trailing function icon (Figma showFunctionIcon; hidden when layout=`checked` and selected) */\n showFunctionIcon?: boolean;\n /** People layout — 26px avatar node; defaults to UsersUserCircle */\n avatar?: ReactNode;\n /** People layout — secondary caption line */\n subtitle?: ReactNode;\n};\n\nexport const SelectItem = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(\n (\n {\n className,\n children,\n itemFunction = \"action\",\n layout = \"default\",\n leftIcon,\n showLeftIcon = false,\n rightIcon,\n showRightIcon = false,\n badge,\n showBadge = false,\n showMoreFunction = false,\n moreAction,\n icon,\n showFunctionIcon = true,\n avatar,\n subtitle,\n ...props\n },\n ref\n ) => {\n const isPeople = layout === \"people\";\n const isTitle = layout === \"title\";\n const isFormLeading =\n itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\n const showTrailingFunction =\n showFunctionIcon &&\n layout !== \"checked\" &&\n itemFunction !== \"form-radio\" &&\n itemFunction !== \"form-checkbox\";\n\n const textLevel = isTitle ? \"caption\" : \"text\";\n\n const textContent = isPeople ? (\n <span className=\"aviala-select-item__content\">\n <SelectPrimitive.ItemText\n className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}\n >\n {children}\n </SelectPrimitive.ItemText>\n {subtitle != null && subtitle !== false ? (\n <span className={cn(\"aviala-select-item__subtitle\", typographyVariants({ level: \"caption\" }))}>\n {subtitle}\n </span>\n ) : null}\n </span>\n ) : (\n <SelectPrimitive.ItemText\n className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}\n >\n {children}\n </SelectPrimitive.ItemText>\n );\n\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\"aviala-select-item\", className)}\n data-layout={layout !== \"default\" ? layout : undefined}\n data-function={itemFunction !== \"action\" ? itemFunction : undefined}\n {...spiralDebugId(\"select.content.item\")}\n {...props}\n >\n {isFormLeading && itemFunction === \"form-radio\" ? <SelectItemFormRadio /> : null}\n {isFormLeading && itemFunction === \"form-checkbox\" ? (\n <SelectItemFormCheckbox />\n ) : null}\n\n {showLeftIcon && leftIcon\n ? renderItemIcon(leftIcon, leftIconLevel, \"select.content.item.icon-left\")\n : null}\n\n {isPeople ? (avatar ?? <SelectItemDefaultAvatar />) : null}\n\n {textContent}\n\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\n\n {showRightIcon && rightIcon\n ? renderItemIcon(rightIcon, leftIconLevel, \"select.content.item.icon-right\")\n : null}\n\n {showMoreFunction ? (\n <span className=\"aviala-select-item__more\">\n {moreAction ?? (\n <Link level=\"text\" href=\"#\" onClick={(event) => event.preventDefault()}>\n Text\n </Link>\n )}\n </span>\n ) : null}\n\n {renderFunctionSlot(itemFunction, layout, showTrailingFunction, icon)}\n </SelectPrimitive.Item>\n );\n }\n);\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nexport type SelectSubMenuProps = SelectSubMenuMarkerProps;\n\nexport type SelectSubItemProps = {\n children: ReactNode;\n className?: string;\n disabled?: boolean;\n /** Figma Function variant (default Action Item — trailing chevron) */\n itemFunction?: SelectItemFunction;\n /** Figma Type variant */\n layout?: SelectItemLayout;\n leftIcon?: ReactNode;\n showLeftIcon?: boolean;\n rightIcon?: ReactNode;\n showRightIcon?: boolean;\n badge?: ReactNode;\n showBadge?: boolean;\n showMoreFunction?: boolean;\n moreAction?: ReactNode;\n icon?: ReactNode;\n showFunctionIcon?: boolean;\n avatar?: ReactNode;\n subtitle?: ReactNode;\n /** Popover side when space allows (default right). Flips to left on collision. */\n side?: \"left\" | \"right\";\n sideOffset?: number;\n /** Render flyout in a Portal (default false — keeps panel inside SelectContent). */\n portalled?: boolean;\n};\n\n/**\n * Figma Select Menu Item with nested sub-menu — opens a flyout panel on hover/focus.\n * Compose with {@link SelectSubMenu} for sub-menu items.\n */\nexport const SelectSubItem = forwardRef<HTMLDivElement, SelectSubItemProps>(\n (\n {\n className,\n children,\n itemFunction = \"action\",\n layout = \"default\",\n leftIcon,\n showLeftIcon = false,\n rightIcon,\n showRightIcon = false,\n badge,\n showBadge = false,\n showMoreFunction = false,\n moreAction,\n icon,\n showFunctionIcon = true,\n avatar,\n subtitle,\n side: sideProp,\n sideOffset: sideOffsetProp,\n portalled: portalledProp,\n disabled = false,\n },\n ref\n ) => {\n const {\n registerSubItem,\n unregisterSubItem,\n openSubItem,\n scheduleCloseSubItem,\n closeActiveSubItem,\n isSubItemOpen,\n isSubItemExiting,\n } = useSelectSubMenuContext();\n const { itemChildren, subMenu } = parseSelectSubItemChildren(children);\n\n if (!subMenu) {\n throw new Error(\"SelectSubItem requires a SelectSubMenu child.\");\n }\n\n const subItemId = useId();\n const subMenuId = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n const side = sideProp ?? subMenu.side;\n const sideOffset = sideOffsetProp ?? subMenu.sideOffset;\n const portalled = portalledProp ?? subMenu.portalled;\n\n const open = isSubItemOpen(subItemId);\n const exiting = isSubItemExiting(subItemId);\n\n useEffect(() => {\n registerSubItem(subItemId, {\n getRoot: () => rootRef.current,\n getContent: () => contentRef.current,\n });\n return () => unregisterSubItem(subItemId);\n }, [registerSubItem, subItemId, unregisterSubItem]);\n\n const handleOpen = useCallback(() => {\n if (disabled) return;\n openSubItem(subItemId);\n }, [disabled, openSubItem, subItemId]);\n\n const handlePointerLeave = useCallback(\n (event: { relatedTarget: EventTarget | null }) => {\n scheduleCloseSubItem(subItemId, event.relatedTarget);\n },\n [scheduleCloseSubItem, subItemId]\n );\n\n const isPeople = layout === \"people\";\n const isTitle = layout === \"title\";\n const isFormLeading =\n itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\n const showTrailingFunction =\n showFunctionIcon &&\n layout !== \"checked\" &&\n itemFunction !== \"form-radio\" &&\n itemFunction !== \"form-checkbox\";\n\n const textLevel = isTitle ? \"caption\" : \"text\";\n\n const textContent = isPeople ? (\n <span className=\"aviala-select-item__content\">\n <span className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}>\n {itemChildren}\n </span>\n {subtitle != null && subtitle !== false ? (\n <span className={cn(\"aviala-select-item__subtitle\", typographyVariants({ level: \"caption\" }))}>\n {subtitle}\n </span>\n ) : null}\n </span>\n ) : (\n <span className={cn(\"aviala-select-item__text\", typographyVariants({ level: textLevel }))}>\n {itemChildren}\n </span>\n );\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n scheduleCloseSubItem(subItemId, event.relatedTarget);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === \"ArrowRight\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleOpen();\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n closeActiveSubItem();\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n closeActiveSubItem();\n }\n };\n\n const itemRow = (\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\"aviala-select-item aviala-select-sub-item\", className)}\n data-layout={layout !== \"default\" ? layout : undefined}\n data-function={itemFunction !== \"action\" ? itemFunction : undefined}\n data-state={open ? \"open\" : undefined}\n data-highlighted={open ? \"\" : undefined}\n data-disabled={disabled ? \"\" : undefined}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? subMenuId : undefined}\n onFocus={handleOpen}\n onBlur={handleTriggerBlur}\n onKeyDown={handleKeyDown}\n >\n {isFormLeading && itemFunction === \"form-radio\" ? <SelectItemFormRadio /> : null}\n {isFormLeading && itemFunction === \"form-checkbox\" ? (\n <SelectItemFormCheckbox />\n ) : null}\n\n {showLeftIcon && leftIcon ? renderItemIcon(leftIcon, leftIconLevel) : null}\n\n {isPeople ? (avatar ?? <SelectItemDefaultAvatar />) : null}\n\n {textContent}\n\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\n\n {showRightIcon && rightIcon ? renderItemIcon(rightIcon, leftIconLevel) : null}\n\n {showMoreFunction ? (\n <span className=\"aviala-select-item__more\">\n {moreAction ?? (\n <Link level=\"text\" href=\"#\" onClick={(event) => event.preventDefault()}>\n Text\n </Link>\n )}\n </span>\n ) : null}\n\n {renderFunctionSlot(itemFunction, layout, showTrailingFunction, icon)}\n </button>\n );\n\n const flyout = (\n <PopoverPrimitive.Content\n ref={contentRef}\n id={subMenuId}\n role=\"menu\"\n className={cn(\"aviala-select-content aviala-select-sub-content\", subMenu.className)}\n side={side}\n align=\"center\"\n sideOffset={sideOffset}\n avoidCollisions\n collisionPadding={8}\n data-exiting={exiting ? \"true\" : undefined}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onPointerEnter={handleOpen}\n onPointerLeave={handlePointerLeave}\n onPointerDownOutside={(event) => event.preventDefault()}\n >\n <div className=\"aviala-select-viewport aviala-select-sub-content__viewport\">\n {wrapUngroupedSelectItems(subMenu.children)}\n </div>\n </PopoverPrimitive.Content>\n );\n\n return (\n <PopoverPrimitive.Root open={open} modal={false}>\n <div\n ref={(node) => {\n rootRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className=\"aviala-select-sub-item__root\"\n onPointerEnter={handleOpen}\n onPointerLeave={handlePointerLeave}\n >\n <PopoverPrimitive.Anchor asChild>{itemRow}</PopoverPrimitive.Anchor>\n {portalled ? <PopoverPrimitive.Portal>{flyout}</PopoverPrimitive.Portal> : flyout}\n </div>\n </PopoverPrimitive.Root>\n );\n }\n);\nSelectSubItem.displayName = \"SelectSubItem\";\n\n/** People layout convenience alias — same as `<SelectSubItem layout=\"people\" … />`. */\nexport type SelectSubItemPeopleProps = Omit<SelectSubItemProps, \"layout\">;\n\nexport const SelectSubItemPeople = forwardRef<HTMLDivElement, SelectSubItemPeopleProps>(\n (props, ref) => <SelectSubItem ref={ref} layout=\"people\" {...props} />\n);\nSelectSubItemPeople.displayName = \"SelectSubItemPeople\";\n\n/** People layout convenience alias — same as `<SelectItem layout=\"people\" … />`. */\nexport type SelectItemPeopleProps = Omit<SelectItemProps, \"layout\">;\n\nexport const SelectItemPeople = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n SelectItemPeopleProps\n>((props, ref) => <SelectItem ref={ref} layout=\"people\" {...props} />);\nSelectItemPeople.displayName = \"SelectItemPeople\";\n\nexport type SelectSeparatorProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>;\n\nexport const SelectSeparator = forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"aviala-select-separator\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\n/** Convenience wrapper matching Figma Select Menu Item Group */\nexport type SelectItemGroupProps = {\n label?: ReactNode;\n showDivider?: boolean;\n children: ReactNode;\n className?: string;\n};\n\nexport function SelectItemGroup({\n label,\n showDivider = false,\n children,\n className,\n}: SelectItemGroupProps) {\n return (\n <SelectGroup className={cn(\"aviala-select-group\", className)}>\n {label ? <SelectLabel>{label}</SelectLabel> : null}\n <div className=\"aviala-select-group__slot\">{children}</div>\n {showDivider ? <SelectSeparator /> : null}\n </SelectGroup>\n );\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport type { IconLevel } from \"@aviala-design/icons\";\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { cn } from \"../lib/utils\";\nimport { typographyVariants } from \"./typography\";\n\n/** Figma Components → Basic Input → Link */\nexport type LinkLevel = \"caption\" | \"text\";\nexport type LinkMode = \"noBackground\" | \"noBackgroundCustom\";\n\nconst levelStyles = {\n caption: {\n className: typographyVariants({ level: \"caption\" }),\n iconBox: \"h-5\",\n },\n text: {\n className: typographyVariants({ level: \"text\" }),\n iconBox: \"h-6\",\n },\n} as const;\n\nfunction renderIcon(\n node: ReactNode,\n level: LinkLevel\n): ReactNode {\n if (!node) return null;\n const { iconBox } = levelStyles[level];\n const iconLevel: IconLevel = level;\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"relative inline-flex shrink-0 items-center justify-center\",\n iconBox\n )}\n >\n {content}\n </span>\n );\n}\n\nexport type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"disabled\"> & {\n level?: LinkLevel;\n mode?: LinkMode;\n iconOnly?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n asChild?: boolean;\n disabled?: boolean;\n};\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n className,\n level = \"caption\",\n mode = \"noBackground\",\n iconOnly: iconOnlyProp,\n leftIcon,\n rightIcon,\n children,\n asChild = false,\n disabled,\n ...props\n },\n ref\n ) => {\n const iconOnly =\n iconOnlyProp ?? (!!(leftIcon ?? rightIcon) && !children);\n const resolvedLevel = level ?? \"caption\";\n const Comp = asChild ? Slot : \"a\";\n\n const sharedClassName = cn(\n \"aviala-link aviala-focus-ring\",\n iconOnly ? \"aviala-link--icon-only\" : undefined,\n className\n );\n const { href, onClick, tabIndex, ...restProps } = props;\n const handleClick = (e: MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n if (asChild) {\n return (\n <Comp\n className={sharedClassName}\n data-mode={mode}\n data-disabled={disabled ? \"true\" : undefined}\n ref={ref}\n aria-disabled={disabled || undefined}\n {...restProps}\n href={disabled ? undefined : href}\n tabIndex={disabled ? -1 : tabIndex}\n onClick={handleClick}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n className={sharedClassName}\n data-mode={mode}\n data-disabled={disabled ? \"true\" : undefined}\n ref={ref}\n aria-disabled={disabled || undefined}\n {...restProps}\n href={disabled ? undefined : href}\n tabIndex={disabled ? -1 : tabIndex}\n onClick={handleClick}\n >\n {renderIcon(leftIcon ?? (iconOnly ? rightIcon : undefined), resolvedLevel)}\n {!iconOnly && children !== undefined && children !== null && (\n <span\n className={cn(\n \"aviala-link__label relative shrink-0\",\n levelStyles[resolvedLevel].className\n )}\n >\n {children}\n </span>\n )}\n {!iconOnly && renderIcon(rightIcon, resolvedLevel)}\n </Comp>\n );\n }\n);\nLink.displayName = \"Link\";\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 { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Information Display → Avata (305:7013) */\nexport type AvatarLevel =\n | \"display\"\n | \"headline1\"\n | \"headline2\"\n | \"title\"\n | \"subtitle\"\n | \"text\";\n\nexport type AvatarContent = \"text\" | \"picture\" | \"icon\";\n\nconst avatarVariants = cva(\"aviala-avatar\", {\n variants: {\n level: {\n display: \"aviala-avatar--level-display\",\n headline1: \"aviala-avatar--level-headline1\",\n headline2: \"aviala-avatar--level-headline2\",\n title: \"aviala-avatar--level-title\",\n subtitle: \"aviala-avatar--level-subtitle\",\n text: \"aviala-avatar--level-text\",\n },\n content: {\n text: \"aviala-avatar--content-text\",\n picture: \"aviala-avatar--content-picture\",\n icon: \"aviala-avatar--content-icon\",\n },\n lineHeightFix: {\n true: \"aviala-avatar--line-height-fix\",\n false: \"\",\n },\n },\n defaultVariants: {\n level: \"text\",\n content: \"text\",\n lineHeightFix: true,\n },\n});\n\nconst AVATAR_TEXT_LEVEL: Record<AvatarLevel, TypographyLevel> = {\n display: \"subtitle\",\n headline1: \"text\",\n headline2: \"caption\",\n title: \"caption\",\n subtitle: \"caption\",\n text: \"caption\",\n};\n\n/** Inner icon sizes aligned to --size-* (rem) so they track root font-size. */\nconst AVATAR_ICON_SIZE: Record<AvatarLevel, string> = {\n display: \"var(--size-middle, 1rem)\",\n headline1: \"var(--size-regular, 0.875rem)\",\n headline2: \"var(--size-small, 0.75rem)\",\n title: \"var(--size-small, 0.75rem)\",\n subtitle: \"var(--size-tiny, 0.625rem)\",\n text: \"0.5rem\",\n};\n\nfunction renderAvatarIcon(node: ReactNode, level: AvatarLevel): ReactNode {\n if (!node) return null;\n const size = AVATAR_ICON_SIZE[level];\n if (isValidElement(node) && typeof node.type !== \"string\") {\n return cloneElement(\n node as ReactElement<{ width?: number | string; height?: number | string; className?: string }>,\n {\n width: size,\n height: size,\n className: cn((node as ReactElement<{ className?: string }>).props.className, \"shrink-0\"),\n }\n );\n }\n return node;\n}\n\nexport type AvatarProps = HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof avatarVariants> & {\n /** Initials / text content when `content=\"text\"` */\n children?: ReactNode;\n /** Image URL when `content=\"picture\"` */\n src?: string;\n alt?: string;\n /** Icon node when `content=\"icon\"` */\n icon?: ReactNode;\n imgProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\">;\n };\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n className,\n level = \"text\",\n content = \"text\",\n lineHeightFix = true,\n children,\n src,\n alt = \"\",\n icon,\n imgProps,\n ...props\n },\n ref\n ) => {\n const resolvedLevel = level ?? \"text\";\n const resolvedContent = content ?? \"text\";\n\n return (\n <span\n ref={ref}\n className={cn(\n avatarVariants({\n level: resolvedLevel,\n content: resolvedContent,\n lineHeightFix: lineHeightFix ?? true,\n }),\n className\n )}\n data-level={resolvedLevel}\n data-content={resolvedContent}\n data-line-height-fix={lineHeightFix ? \"true\" : \"false\"}\n {...props}\n >\n <span className=\"aviala-avatar__surface\">\n {resolvedContent === \"picture\" && src ? (\n <img\n className=\"aviala-avatar__image\"\n src={src}\n alt={alt}\n {...imgProps}\n />\n ) : null}\n {resolvedContent === \"icon\" ? (\n <span className=\"aviala-avatar__icon\" aria-hidden>\n {renderAvatarIcon(icon, resolvedLevel)}\n </span>\n ) : null}\n {resolvedContent === \"text\" ? (\n <Typography\n level={AVATAR_TEXT_LEVEL[resolvedLevel]}\n as=\"span\"\n className=\"aviala-avatar__text\"\n >\n {children}\n </Typography>\n ) : null}\n </span>\n </span>\n );\n }\n);\nAvatar.displayName = \"Avatar\";\n","import { resolveIconSizeToken, SymbolWrong } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Information Display → Tag (617:55892) */\nexport type TagLevel = \"caption\" | \"text\";\nexport type TagContent = \"text\" | \"people\";\nexport type TagLineHeightFix = \"text\" | \"subtitle\" | \"off\";\n\nconst tagVariants = cva(\"aviala-tag\", {\n variants: {\n level: {\n caption: \"aviala-tag--level-caption\",\n text: \"aviala-tag--level-text\",\n },\n content: {\n text: \"aviala-tag--content-text\",\n people: \"aviala-tag--content-people\",\n },\n lineHeightFix: {\n text: \"aviala-tag--lhf-text\",\n subtitle: \"aviala-tag--lhf-subtitle\",\n off: \"aviala-tag--lhf-off\",\n },\n },\n defaultVariants: {\n level: \"caption\",\n content: \"text\",\n lineHeightFix: \"text\",\n },\n});\n\nfunction resolveLineHeightFix(\n level: TagLevel,\n lineHeightFix: boolean | TagLineHeightFix | undefined\n): TagLineHeightFix {\n if (lineHeightFix === false || lineHeightFix === \"off\") return \"off\";\n if (lineHeightFix === \"subtitle\") return \"subtitle\";\n if (lineHeightFix === \"text\" || lineHeightFix === true) {\n return level === \"text\" ? \"subtitle\" : \"text\";\n }\n return level === \"text\" ? \"subtitle\" : \"text\";\n}\n\nfunction iconSizeForLevel(level: TagLevel): string {\n /* Caption tags use text-level glyphs; text tags use the bigger text slot. */\n return level === \"caption\"\n ? resolveIconSizeToken(\"text\")\n : resolveIconSizeToken(\"text\", true);\n}\n\nfunction renderTagIcon(node: ReactNode, level: TagLevel): ReactNode {\n if (!node) return null;\n const size = iconSizeForLevel(level);\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(\n node as ReactElement<{\n width?: number | string;\n height?: number | string;\n className?: string;\n }>,\n {\n width: size,\n height: size,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n }\n )\n : node;\n\n return (\n <span className=\"aviala-tag__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nexport type TagProps = HTMLAttributes<HTMLSpanElement> &\n Omit<VariantProps<typeof tagVariants>, \"lineHeightFix\"> & {\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n /** People content — avatar image or initials */\n avatar?: ReactNode;\n avatarSrc?: string;\n avatarText?: ReactNode;\n closable?: boolean;\n onClose?: (event: MouseEvent<HTMLButtonElement>) => void;\n closeLabel?: string;\n lineHeightFix?: boolean | TagLineHeightFix;\n };\n\nexport type TagCloseProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const TagClose = forwardRef<HTMLButtonElement, TagCloseProps>(\n ({ className, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-tag__close aviala-focus-ring\", className)}\n {...props}\n >\n {children ?? <SymbolWrong aria-hidden width={14} height={14} />}\n </button>\n )\n);\nTagClose.displayName = \"TagClose\";\n\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n (\n {\n className,\n children,\n leftIcon,\n rightIcon,\n level = \"caption\",\n content = \"text\",\n disabled = false,\n avatar,\n avatarSrc,\n avatarText,\n closable = false,\n onClose,\n closeLabel = \"Remove\",\n lineHeightFix,\n ...props\n },\n ref\n ) => {\n const resolvedLevel = level ?? \"caption\";\n const resolvedContent = content ?? \"text\";\n const resolvedLhf = resolveLineHeightFix(resolvedLevel, lineHeightFix);\n const typographyLevel: TypographyLevel = resolvedLevel;\n\n const peopleAvatar =\n avatar ??\n (avatarSrc ? (\n <Avatar level=\"text\" content=\"picture\" src={avatarSrc} lineHeightFix={false} />\n ) : (\n <Avatar level=\"text\" content=\"text\" lineHeightFix={false}>\n {avatarText ?? (typeof children === \"string\" ? children.charAt(0) : \"?\")}\n </Avatar>\n ));\n\n return (\n <span\n ref={ref}\n className={cn(\n tagVariants({\n level: resolvedLevel,\n content: resolvedContent,\n lineHeightFix: resolvedLhf,\n }),\n className\n )}\n data-level={resolvedLevel}\n data-content={resolvedContent}\n data-disabled={disabled ? \"true\" : undefined}\n data-line-height-fix={resolvedLhf}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {resolvedContent === \"people\" ? (\n <span className=\"aviala-tag__avatar\">{peopleAvatar}</span>\n ) : (\n renderTagIcon(leftIcon, resolvedLevel)\n )}\n <Typography\n level={typographyLevel}\n as=\"span\"\n className=\"aviala-tag__text whitespace-nowrap\"\n >\n {children}\n </Typography>\n {resolvedContent === \"text\" ? renderTagIcon(rightIcon, resolvedLevel) : null}\n {closable ? (\n <TagClose\n aria-label={closeLabel}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) return;\n onClose?.(event);\n }}\n />\n ) : null}\n </span>\n );\n }\n);\nTag.displayName = \"Tag\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Response And Feedback → Progress (589:55818) */\nexport type ProgressType = \"default\" | \"success\" | \"fail\";\nexport type ProgressSize = \"default\" | \"big\";\nexport type ProgressShape = \"bar\" | \"ring\";\n\nconst progressVariants = cva(\"aviala-progress\", {\n variants: {\n type: {\n default: \"aviala-progress--type-default\",\n success: \"aviala-progress--type-success\",\n fail: \"aviala-progress--type-fail\",\n },\n size: {\n default: \"aviala-progress--size-default\",\n big: \"aviala-progress--size-big\",\n },\n shape: {\n bar: \"aviala-progress--shape-bar\",\n ring: \"aviala-progress--shape-ring\",\n },\n },\n defaultVariants: {\n type: \"default\",\n size: \"default\",\n shape: \"bar\",\n },\n});\n\nfunction clampPercent(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(100, Math.max(0, value));\n}\n\nexport type ProgressProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof progressVariants> & {\n /** 0–100 */\n value?: number;\n /** Show percent label (bar shape only) */\n showLabel?: boolean;\n label?: string;\n };\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n type = \"default\",\n size = \"default\",\n shape = \"bar\",\n value = 0,\n showLabel = true,\n label,\n ...props\n },\n ref\n ) => {\n const percent = clampPercent(value ?? 0);\n const resolvedType = type ?? \"default\";\n const resolvedSize = size ?? \"default\";\n const resolvedShape = shape ?? \"bar\";\n const displayLabel = label ?? `${Math.round(percent)}%`;\n /* Figma ring sizes: default 16px / big 24px (--progress-ring-size) */\n const diameter = resolvedSize === \"big\" ? 24 : 16;\n const radius = diameter / 2;\n const stroke = 2;\n const normalizedRadius = radius - stroke;\n const circumference = normalizedRadius * 2 * Math.PI;\n const strokeDashoffset = circumference - (percent / 100) * circumference;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={props[\"aria-label\"] ?? displayLabel}\n className={cn(\n progressVariants({\n type: resolvedType,\n size: resolvedSize,\n shape: resolvedShape,\n }),\n className\n )}\n data-type={resolvedType}\n data-size={resolvedSize}\n data-shape={resolvedShape}\n {...props}\n >\n {resolvedShape === \"bar\" ? (\n <>\n <div className=\"aviala-progress__track\">\n <div\n className=\"aviala-progress__fill\"\n style={{ width: `${percent}%` }}\n />\n </div>\n {showLabel ? (\n <Typography\n level=\"caption\"\n content=\"number\"\n as=\"span\"\n className=\"aviala-progress__label\"\n >\n {displayLabel}\n </Typography>\n ) : null}\n </>\n ) : (\n <svg\n className=\"aviala-progress__ring\"\n width={radius * 2}\n height={radius * 2}\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\n aria-hidden\n >\n <circle\n className=\"aviala-progress__ring-track\"\n cx={radius}\n cy={radius}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"aviala-progress__ring-fill\"\n cx={radius}\n cy={radius}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={`${circumference} ${circumference}`}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${radius} ${radius})`}\n />\n </svg>\n )}\n </div>\n );\n }\n);\nProgress.displayName = \"Progress\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → System Composition → Scroll (301:6312) */\nexport type ScrollSize = \"default\" | \"small\";\nexport type ScrollOrientation = \"vertical\" | \"horizontal\";\n\nconst scrollVariants = cva(\"aviala-scroll\", {\n variants: {\n size: {\n default: \"aviala-scroll--size-default\",\n small: \"aviala-scroll--size-small\",\n },\n orientation: {\n vertical: \"aviala-scroll--orientation-vertical\",\n horizontal: \"aviala-scroll--orientation-horizontal\",\n },\n },\n defaultVariants: {\n size: \"default\",\n orientation: \"vertical\",\n },\n});\n\nexport type ScrollProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof scrollVariants> & {\n children?: ReactNode;\n };\n\n/**\n * Scrollable region with Aviala-styled scrollbar (track + thumb).\n * Figma documents the thumb/track chrome; this wraps content with that chrome.\n */\nexport const Scroll = forwardRef<HTMLDivElement, ScrollProps>(\n (\n {\n className,\n size = \"default\",\n orientation = \"vertical\",\n children,\n ...props\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n scrollVariants({ size: size ?? \"default\", orientation: orientation ?? \"vertical\" }),\n className\n )}\n data-size={size ?? \"default\"}\n data-orientation={orientation ?? \"vertical\"}\n {...props}\n >\n {children}\n </div>\n )\n);\nScroll.displayName = \"Scroll\";\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { SymbolRight } from \"@aviala-design/icons\";\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 → Checkbox */\nexport type CheckboxGroupDirection = \"vertical\" | \"horizontal\";\n\nexport type CheckboxProps = ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n /** Figma Checkbox `Round` */\n round?: boolean;\n};\n\nexport const Checkbox = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, round = false, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\"aviala-checkbox aviala-focus-ring\", className)}\n data-round={round ? \"true\" : undefined}\n {...props}\n >\n <span aria-hidden className=\"aviala-checkbox__surface\" />\n <CheckboxPrimitive.Indicator className=\"aviala-checkbox__indicator\">\n <SymbolRight\n className=\"aviala-checkbox__indicator-icon aviala-checkbox__indicator-icon--check\"\n thickness=\"Bold\"\n width={12}\n height={12}\n aria-hidden\n />\n <span\n aria-hidden\n className=\"aviala-checkbox__indeterminate-mark aviala-checkbox__indicator-icon--indeterminate\"\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport type CheckboxGroupProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Figma Checkbox Input Group `Direction` */\n direction?: CheckboxGroupDirection;\n};\n\nexport const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n ({ className, direction = \"vertical\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"aviala-checkbox-group\", className)}\n data-direction={direction}\n {...props}\n />\n )\n);\nCheckboxGroup.displayName = \"CheckboxGroup\";\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-checkbox-input__icon\">{content}</span>;\n}\n\nexport type CheckboxInputProps = Omit<CheckboxProps, \"children\"> & {\n /** Figma Typeface primary line */\n title: ReactNode;\n /** Figma Typeface caption line */\n description?: ReactNode;\n icon?: ReactNode;\n};\n\nexport const CheckboxInput = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxInputProps\n>(\n (\n {\n className,\n title,\n description,\n icon,\n disabled,\n id,\n ...props\n },\n ref\n ) => (\n <label\n htmlFor={id}\n className={cn(\"aviala-checkbox-input\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n >\n <Checkbox ref={ref} id={id} disabled={disabled} {...props} />\n {renderIcon(icon)}\n <TypefacePair\n className=\"aviala-checkbox-input__content min-w-0 flex-1\"\n title={title}\n description={description}\n />\n </label>\n )\n);\nCheckboxInput.displayName = \"CheckboxInput\";\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 aviala-focus-ring\", 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 aviala-focus-ring\",\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\";\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → System Composition → Anchor */\nexport type AnchorIndentLevel = 0 | 1 | 2 | 3;\n\nexport type AnchorProps = HTMLAttributes<HTMLElement> & {\n as?: \"nav\" | \"div\";\n};\n\nexport const Anchor = forwardRef<HTMLElement, AnchorProps>(\n ({ className, as: Tag = \"nav\", ...props }, ref) => (\n <Tag ref={ref as never} className={cn(\"aviala-anchor\", className)} {...props} />\n )\n);\nAnchor.displayName = \"Anchor\";\n\nexport type AnchorItemProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"children\"> & {\n activated?: boolean;\n indentLevel?: AnchorIndentLevel;\n asChild?: boolean;\n children: ReactNode;\n};\n\nexport const AnchorItem = forwardRef<HTMLAnchorElement, AnchorItemProps>(\n (\n {\n className,\n activated = false,\n indentLevel = 0,\n asChild = false,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n ref={ref}\n className={cn(\"aviala-anchor-item aviala-focus-ring\", className)}\n data-activated={activated ? \"true\" : \"false\"}\n data-indent={String(indentLevel)}\n {...props}\n >\n <span className=\"aviala-anchor-item__rail\" aria-hidden />\n <span className=\"aviala-anchor-item__content\">\n <Typography level=\"text\" as=\"span\" className=\"aviala-anchor-item__label\">\n {children}\n </Typography>\n </span>\n </Comp>\n );\n }\n);\nAnchorItem.displayName = \"AnchorItem\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\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};\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 = useCallback(\n (next: string) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange]\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;\n/** Max finger-follow offset while stuck on an item (px), keeps drag feeling tactile. */\nconst SEGMENTATOR_STICKY_OFFSET_PX = 10;\n/** If a drag update jumps farther than this, animate instead of teleporting. */\nconst SEGMENTATOR_DRAG_ANIMATE_JUMP_PX = 6;\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};\n\ntype SegmentatorPointerDrag = {\n pointerId: number;\n startX: number;\n moved: boolean;\n fallback: SegmentatorThumbMetrics;\n previewValue: string | null;\n lastMetrics?: SegmentatorThumbMetrics;\n /** While settling onto a new item, keep writes animated so live offset can't cut the snap. */\n snapUntil?: number;\n cleanupWindowListeners?: () => void;\n};\n\n/** Geometry (x/y/width/height) is always written imperatively — React must not own those. */\nfunction buildThumbStyle(): CSSProperties {\n return {\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n zIndex: 0,\n transformOrigin: \"center center\",\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\n/**\n * Imperatively toggle the drag-preview highlight on items.\n * Mirrors the command-only philosophy of writeThumbMetrics — drag preview must\n * not go through React state/context, otherwise every item re-renders per crossing.\n */\nfunction applyDragPreview(group: HTMLElement, activeItem: HTMLButtonElement | null) {\n const items = getEnabledSegmentatorItems(group);\n for (const item of items) {\n if (item === activeItem) {\n item.setAttribute(\"data-drag-preview\", \"true\");\n } else {\n item.removeAttribute(\"data-drag-preview\");\n }\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 getItemCenterX(item: HTMLButtonElement): number {\n const rect = item.getBoundingClientRect();\n return rect.left + rect.width / 2;\n}\n\n/**\n * Map finger X onto the nearest item, with a small tactile offset while stuck.\n * Crossing items is a discrete jump in metrics — callers should animate those.\n * Edge limits only apply on the first/last item (outward side); mid-track sticky\n * offset stays free.\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 item = findItemAtClientX(items, clientX);\n if (!item) {\n return { metrics: fallback, item: null };\n }\n\n const base = measureItemThumbMetrics(item, group);\n const center = getItemCenterX(item);\n const rawOffset = Math.max(\n -SEGMENTATOR_STICKY_OFFSET_PX,\n Math.min(SEGMENTATOR_STICKY_OFFSET_PX, clientX - center)\n );\n let x = base.x + rawOffset;\n\n const isFirst = item === items[0];\n const isLast = item === items[items.length - 1];\n // Only block dragging past the outer edge of the end items.\n if (isFirst && x < base.x) x = base.x;\n if (isLast && x > base.x) x = base.x;\n\n return {\n metrics: {\n ...base,\n x,\n },\n item,\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 } else {\n el.removeAttribute(\"data-instant\");\n }\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 // Flush the instant paint, then leave data-instant on only if the caller\n // keeps it (drag session). Default: clear so settle animations can run.\n void el.offsetWidth;\n el.removeAttribute(\"data-instant\");\n }\n}\n\n/** Drag-follow write: keep transitions off for the whole gesture (no per-frame toggle). */\nfunction applyThumbMetricsLive(el: HTMLSpanElement, metrics: SegmentatorThumbMetrics) {\n el.setAttribute(\"data-instant\", \"true\");\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}\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 /** Imperative-only write — safe during drag (avoids React style thrashing / flicker). */\n const writeThumbMetrics = useCallback(\n (metrics: SegmentatorThumbMetrics, instant = false) => {\n metricsRef.current = metrics;\n const el = thumbElRef.current;\n if (el) applyThumbMetrics(el, metrics, instant);\n },\n []\n );\n\n /** Continuous drag follow — transitions stay disabled until gesture ends. */\n const writeThumbMetricsLive = useCallback((metrics: SegmentatorThumbMetrics) => {\n metricsRef.current = metrics;\n const el = thumbElRef.current;\n if (el) applyThumbMetricsLive(el, metrics);\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 // Press/drag owns the thumb via writeThumbMetrics — do not sync from React here.\n if (dragState.pressing || dragState.active) return;\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 (prefersReducedMotion) {\n syncThumb(next, true);\n return;\n }\n\n if (metricsApproxEqual(startMetrics, next)) {\n // Already targeting this geometry (e.g. press started the slide). Do not\n // re-apply with data-instant — that forced the in-flight transition to finish\n // the moment the finger lifted.\n metricsRef.current = next;\n setThumb(next);\n return;\n }\n\n syncThumb(next, false);\n }, [selectedValue, measureThumb, syncThumb, dragState.active, dragState.pressing]);\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, writeThumbMetrics, writeThumbMetricsLive };\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 /** When true, the group fills its container and items split the width equally. */\n equalWidth?: 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 equalWidth = 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 [dragState, setDragState] = useState<SegmentatorDragState>({\n pressing: false,\n active: false,\n });\n const { thumb, onThumbRef, writeThumbMetrics, writeThumbMetricsLive } =\n useSegmentatorThumb(groupRef, currentValue, layoutKey, dragState);\n\n const resetPointerInteraction = useCallback(() => {\n pointerDragRef.current?.cleanupWindowListeners?.();\n pointerDragRef.current = null;\n setDragState({ pressing: false, active: false });\n const group = groupRef.current;\n if (group) {\n applyDragPreview(group, null);\n }\n const thumbEl = group?.querySelector<HTMLSpanElement>(\n \".aviala-segmentator-thumb\"\n );\n if (thumbEl) {\n thumbEl.removeAttribute(\"data-pressing\");\n // Leave data-instant cleared so the settle animation can run.\n thumbEl.removeAttribute(\"data-instant\");\n }\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 } else if (drag.previewValue && drag.previewValue !== currentValue) {\n consumeClickRef.current = true;\n setValue(drag.previewValue);\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(\n group,\n items,\n clientX,\n fallback\n );\n const nextPreviewValue = item?.dataset.value ?? drag.previewValue;\n const itemChanged =\n !!nextPreviewValue && nextPreviewValue !== drag.previewValue;\n\n if (itemChanged) {\n triggerSegmentatorHaptic(\"select\");\n // Hold animated writes long enough for the cross-item settle to play.\n drag.snapUntil = performance.now() + 540;\n if (item) {\n applyDragPreview(group, item);\n }\n }\n drag.previewValue = nextPreviewValue;\n\n const prev = drag.lastMetrics;\n const jumpDistance = prev\n ? Math.abs(metrics.x - prev.x) + Math.abs(metrics.width - prev.width)\n : Number.POSITIVE_INFINITY;\n const settling = performance.now() < (drag.snapUntil ?? 0);\n const shouldAnimate =\n itemChanged || settling || jumpDistance >= SEGMENTATOR_DRAG_ANIMATE_JUMP_PX;\n\n drag.lastMetrics = metrics;\n\n if (shouldAnimate) {\n writeThumbMetrics(metrics, false);\n } else {\n writeThumbMetricsLive(metrics);\n }\n return item;\n },\n [writeThumbMetrics, writeThumbMetricsLive]\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) {\n return;\n }\n\n if (!drag.moved) {\n drag.moved = true;\n setDragState({ pressing: true, active: true });\n }\n event.preventDefault();\n updateDragThumb(event.clientX);\n };\n\n const onPointerEnd = (event: PointerEvent) => {\n if (event.pointerId !== pointerId) return;\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 = measureItemThumbMetrics(pressedItem, group);\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 lastMetrics: metrics,\n };\n pointerDragRef.current.cleanupWindowListeners = attachWindowDragListeners(\n event.pointerId\n );\n\n // Animate onto the pressed item (including when it wasn't selected), and\n // let press-scale transition run — do not use live/instant writes here.\n writeThumbMetrics(metrics, false);\n applyDragPreview(group, pressedItem);\n setDragState({ pressing: true, active: false });\n group.setPointerCapture(event.pointerId);\n };\n\n const thumbStyle: CSSProperties | undefined = thumb ? buildThumbStyle() : undefined;\n\n return (\n <SegmentatorContext.Provider\n value={useMemo(\n () => ({\n value: currentValue,\n onValueChange: setValue,\n mode,\n allRound,\n disabled,\n consumeClickRef,\n }),\n [currentValue, setValue, mode, allRound, disabled]\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=\"radiogroup\"\n {...props}\n className={cn(\"aviala-segmentator-group\", className)}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-equal-width={equalWidth ? \"true\" : undefined}\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 onLostPointerCapture={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-all-round={ctx.allRound ? \"true\" : \"false\"}\n disabled={isDisabled}\n className={cn(\"aviala-segmentator-item aviala-focus-ring\", 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 <span className=\"aviala-segmentator-item__content\">\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 </span>\n </button>\n );\n }\n);\nSegmentatorItem.displayName = \"SegmentatorItem\";\n","import { SymbolInformationCircle, SymbolWrongCircle } from \"@aviala-design/icons\";\nimport { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → System Composition → Form (527:57461 / 527:57641) */\nexport type FormFieldDirection = \"vertical\" | \"horizontal\";\n\nexport type FormFieldProps = HTMLAttributes<HTMLDivElement> & {\n label?: ReactNode;\n htmlFor?: string;\n description?: ReactNode;\n error?: ReactNode;\n info?: ReactNode;\n /** Optional Alert / Feedback under the control */\n alert?: ReactNode;\n required?: boolean;\n /** Figma `Direction` — vertical stacks label above control; horizontal places label beside */\n direction?: FormFieldDirection;\n};\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(\n (\n {\n className,\n label,\n htmlFor,\n description,\n error,\n info,\n alert,\n required,\n direction = \"vertical\",\n children,\n ...props\n },\n ref\n ) => {\n const reactId = useId();\n const labelId = `${reactId}-label`;\n const hasLabel = label != null && label !== \"\";\n const labelNode =\n hasLabel || description ? (\n htmlFor ? (\n <label htmlFor={htmlFor} className=\"aviala-form__label aviala-form__label--control\">\n <Typeface\n id={labelId}\n content=\"textCaption\"\n primary={\n hasLabel ? (\n <>\n {label}\n {required ? (\n <span className=\"aviala-form__required\" aria-hidden>\n *\n </span>\n ) : null}\n </>\n ) : undefined\n }\n secondary={description}\n />\n </label>\n ) : (\n <Typeface\n id={labelId}\n className=\"aviala-form__label\"\n content=\"textCaption\"\n primary={\n hasLabel ? (\n <>\n {label}\n {required ? (\n <span className=\"aviala-form__required\" aria-hidden>\n *\n </span>\n ) : null}\n </>\n ) : undefined\n }\n secondary={description}\n />\n )\n ) : null;\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-form\", className)}\n data-direction={direction}\n aria-labelledby={hasLabel ? labelId : undefined}\n {...props}\n >\n {labelNode}\n <div className=\"aviala-form__content\">\n {children}\n {error ? (\n <div className=\"aviala-form__message aviala-form__message--error\" role=\"alert\">\n <SymbolWrongCircle\n className=\"aviala-form__message-icon\"\n width={14}\n height={14}\n aria-hidden\n />\n <Typography level=\"caption\" as=\"p\" className=\"aviala-form__message-text\">\n {error}\n </Typography>\n </div>\n ) : null}\n {info ? (\n <div className=\"aviala-form__message aviala-form__message--info\">\n <SymbolInformationCircle\n className=\"aviala-form__message-icon\"\n width={14}\n height={14}\n aria-hidden\n />\n <Typography level=\"caption\" as=\"p\" className=\"aviala-form__message-text\">\n {info}\n </Typography>\n </div>\n ) : null}\n {alert ? <div className=\"aviala-form__alert\">{alert}</div> : null}\n </div>\n </div>\n );\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, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\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\n/** Figma Components → System Composition → Form Group (530:65349) */\nexport type FieldsetProps = HTMLAttributes<HTMLFieldSetElement> & {\n /** @deprecated Prefer `title` — kept for API compatibility */\n legend?: ReactNode;\n /** Form Group title (Typeface Text+Title primary) */\n title?: ReactNode;\n /** Form Group subtitle (Typeface Text+Title secondary) */\n description?: ReactNode;\n /** Optional footer info row above actions */\n info?: ReactNode;\n /** Optional Alert / Feedback above actions */\n feedback?: ReactNode;\n /** Action slot — typically a Button row */\n actions?: ReactNode;\n};\n\nexport const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(\n (\n {\n className,\n legend,\n title,\n description,\n info,\n feedback,\n actions,\n children,\n ...props\n },\n ref\n ) => {\n const reactId = useId();\n const headingId = `${reactId}-heading`;\n const heading = title ?? legend;\n const hasHeading = heading != null && heading !== \"\";\n const hasAction = info != null || feedback != null || actions != null;\n\n return (\n <fieldset\n ref={ref}\n className={cn(\"aviala-form-group\", className)}\n aria-labelledby={hasHeading ? headingId : undefined}\n {...props}\n >\n {hasHeading || description ? (\n <Typeface\n id={headingId}\n className=\"aviala-form-group__header\"\n content=\"textTitle\"\n primary={heading}\n secondary={description}\n />\n ) : null}\n\n <div className=\"aviala-form-group__slot\">{children}</div>\n\n {hasAction ? (\n <div className=\"aviala-form-group__action\">\n {info ? <div className=\"aviala-form-group__info\">{info}</div> : null}\n {feedback ? <div className=\"aviala-form-group__feedback\">{feedback}</div> : null}\n {actions ? <div className=\"aviala-form-group__actions\">{actions}</div> : null}\n </div>\n ) : null}\n </fieldset>\n );\n }\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 aviala-focus-ring\", 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 aviala-focus-ring\"\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\";\n\nexport type ColorFormat = \"hex\" | \"rgb\" | \"hsl\";\n\nexport type HSVA = { h: number; s: number; v: number; a: number };\n\nexport const DEFAULT_COLOR = \"#FF0000\";\n\nexport function parseColor(value?: string): Colord {\n const c = colord(value ?? DEFAULT_COLOR);\n return c.isValid() ? c : colord(DEFAULT_COLOR);\n}\n\nexport function toHsva(value: string): HSVA {\n const { h, s, v, a } = parseColor(value).toHsv();\n return { h, s, v, a: a ?? 1 };\n}\n\nexport function fromHsva(hsva: HSVA): string {\n return colord({ h: hsva.h, s: hsva.s, v: hsva.v, a: hsva.a }).toHex();\n}\n\nexport function toHexInput(value: string, includeAlpha = false): string {\n const hex = parseColor(value).toHex().replace(/^#/, \"\").toUpperCase();\n return includeAlpha ? hex : hex.slice(0, 6);\n}\n\nexport function fromHexInput(input: string, alpha = 1): string {\n const cleaned = input.replace(/^#/, \"\").trim();\n if (!cleaned) return parseColor(DEFAULT_COLOR).alpha(alpha).toHex();\n const base = cleaned.slice(0, 6);\n const alphaHex = cleaned.length >= 8 ? cleaned.slice(6, 8) : undefined;\n let c = parseColor(`#${base}`);\n if (alphaHex) {\n c = c.alpha(parseInt(alphaHex, 16) / 255);\n } else if (alpha < 1) {\n c = c.alpha(alpha);\n }\n return c.toHex();\n}\n\nexport function alphaPercent(value: string): number {\n return Math.round(parseColor(value).alpha() * 100);\n}\n\nexport function setAlphaPercent(value: string, percent: number): string {\n const clamped = Math.min(100, Math.max(0, percent));\n return parseColor(value)\n .alpha(clamped / 100)\n .toHex();\n}\n\nexport function toRgbComponents(value: string) {\n const { r, g, b } = parseColor(value).toRgb();\n return { r, g, b };\n}\n\nexport function fromRgbComponents(r: number, g: number, b: number, alpha = 1): string {\n return colord({ r, g, b, a: alpha }).toHex();\n}\n\nexport function toHslComponents(value: string) {\n const { h, s, l } = parseColor(value).toHsl();\n return { h: Math.round(h), s: Math.round(s), l: Math.round(l) };\n}\n\nexport function fromHslComponents(h: number, s: number, l: number, alpha = 1): string {\n return colord({ h, s, l, a: alpha }).toHex();\n}\n\nexport function pureHueHex(h: number): string {\n return colord({ h, s: 100, v: 100 }).toHex();\n}\n\nexport function solidHex(value: string): string {\n const { r, g, b } = parseColor(value).toRgb();\n return colord({ r, g, b, a: 1 }).toHex();\n}\n\nexport function hueGradientStops(): string {\n return [0, 60, 120, 180, 240, 300, 360]\n .map((h) => colord({ h, s: 100, v: 100 }).toHex())\n .join(\", \");\n}\n\nexport function clamp01(n: number): number {\n return Math.min(1, Math.max(0, n));\n}\n","import { createContext, useContext } from \"react\";\nimport type { ColorFormat, HSVA } from \"./color-utils\";\nimport type { ColorPickerChangeMeta } from \"./use-color-picker-state\";\n\nexport type ColorPickerContextValue = {\n value: string;\n setValue: (value: string, meta?: ColorPickerChangeMeta) => void;\n format: ColorFormat;\n setFormat: (format: ColorFormat) => void;\n hsva: HSVA;\n setHsva: (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => void;\n open: boolean;\n disabled?: boolean;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets: number;\n};\n\nexport const ColorPickerContext = createContext<ColorPickerContextValue | null>(null);\n\nexport function useColorPickerContext() {\n const ctx = useContext(ColorPickerContext);\n if (!ctx) {\n throw new Error(\"ColorPicker compound components must be used within <ColorPicker>\");\n }\n return ctx;\n}\n\nexport function useOptionalColorPickerContext() {\n return useContext(ColorPickerContext);\n}\n","import { useCallback, type PointerEvent, type RefObject } from \"react\";\nimport { clamp01 } from \"./color-utils\";\n\nexport function usePointerDrag<T extends HTMLElement>(\n ref: RefObject<T | null>,\n onMove: (x: number, y: number) => void,\n enabled = true\n) {\n const updateFromEvent = useCallback(\n (clientX: number, clientY: number) => {\n if (!ref.current) return;\n const rect = ref.current.getBoundingClientRect();\n const x = clamp01((clientX - rect.left) / rect.width);\n const y = clamp01((clientY - rect.top) / rect.height);\n onMove(x, y);\n },\n [onMove, ref]\n );\n\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !ref.current) return;\n event.preventDefault();\n ref.current.setPointerCapture(event.pointerId);\n updateFromEvent(event.clientX, event.clientY);\n },\n [enabled, ref, updateFromEvent]\n );\n\n const handlePointerMove = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !ref.current || !ref.current.hasPointerCapture(event.pointerId)) return;\n updateFromEvent(event.clientX, event.clientY);\n },\n [enabled, ref, updateFromEvent]\n );\n\n return { handlePointerDown, handlePointerMove };\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n DEFAULT_COLOR,\n fromHsva,\n parseColor,\n toHsva,\n type ColorFormat,\n type HSVA,\n} from \"./color-utils\";\n\nexport type ColorPickerChangeMeta = { source?: string };\n\nexport type UseColorPickerStateOptions = {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, meta?: ColorPickerChangeMeta) => void;\n format?: ColorFormat;\n defaultFormat?: ColorFormat;\n onFormatChange?: (format: ColorFormat) => void;\n};\n\nexport function useColorPickerState({\n value: controlledValue,\n defaultValue = DEFAULT_COLOR,\n onChange,\n format: controlledFormat,\n defaultFormat = \"hex\",\n onFormatChange,\n}: UseColorPickerStateOptions) {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const [uncontrolledFormat, setUncontrolledFormat] = useState<ColorFormat>(defaultFormat);\n\n const value = controlledValue ?? uncontrolledValue;\n const format = controlledFormat ?? uncontrolledFormat;\n\n const setValue = useCallback(\n (next: string, meta?: ColorPickerChangeMeta) => {\n const normalized = parseColor(next).toHex();\n if (controlledValue === undefined) {\n setUncontrolledValue(normalized);\n }\n onChange?.(normalized, meta);\n },\n [controlledValue, onChange]\n );\n\n const hsva = useMemo(() => toHsva(value), [value]);\n\n const setHsva = useCallback(\n (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => {\n setValue(fromHsva({ ...hsva, ...partial }), meta);\n },\n [hsva, setValue]\n );\n\n const setFormat = useCallback(\n (next: ColorFormat) => {\n if (controlledFormat === undefined) {\n setUncontrolledFormat(next);\n }\n onFormatChange?.(next);\n },\n [controlledFormat, onFormatChange]\n );\n\n return { value, format, setValue, hsva, setHsva, setFormat };\n}\n","import { EditColorPicker } from \"@aviala-design/icons\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Badge } from \"../badge\";\nimport { Button } from \"../button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectItemGroup,\n SelectTrigger,\n SelectValue,\n} from \"../select\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { typographyVariants } from \"../typography\";\nimport {\n alphaPercent,\n fromHexInput,\n fromHslComponents,\n fromRgbComponents,\n parseColor,\n setAlphaPercent,\n toHexInput,\n toHslComponents,\n toRgbComponents,\n type ColorFormat,\n} from \"./color-utils\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\n\ndeclare global {\n interface Window {\n EyeDropper?: new () => { open: () => Promise<{ sRGBHex: string }> };\n }\n}\n\nexport type ColorPickerInputsProps = {\n className?: string;\n disabled?: boolean;\n showEyedropper?: boolean;\n} & Pick<UseColorPickerStateOptions, \"value\" | \"defaultValue\" | \"onChange\" | \"format\" | \"onFormatChange\">;\n\nexport function ColorPickerInputs({\n className,\n disabled,\n showEyedropper = true,\n value: valueProp,\n defaultValue,\n onChange,\n format: formatProp,\n onFormatChange,\n}: ColorPickerInputsProps) {\n const ctx = useOptionalColorPickerContext();\n const local = useColorPickerState({\n value: ctx ? undefined : valueProp,\n defaultValue: ctx?.value ?? defaultValue,\n onChange: ctx ? undefined : onChange,\n format: ctx ? undefined : formatProp,\n onFormatChange: ctx ? undefined : onFormatChange,\n });\n\n const { value, setValue, format, setFormat, hsva } = ctx ?? local;\n const isDisabled = disabled ?? ctx?.disabled;\n const eyeDropperSupported = typeof window !== \"undefined\" && \"EyeDropper\" in window;\n\n const [hexDraft, setHexDraft] = useState(() => toHexInput(value));\n const [alphaDraft, setAlphaDraft] = useState(() => String(alphaPercent(value)));\n const [componentDraft, setComponentDraft] = useState(() => buildComponentDraft(value, format));\n\n useEffect(() => {\n setHexDraft(toHexInput(value));\n setAlphaDraft(String(alphaPercent(value)));\n setComponentDraft(buildComponentDraft(value, format));\n }, [value, format]);\n\n const commitHex = useCallback(() => {\n setValue(fromHexInput(hexDraft, hsva.a), { source: \"hex-input\" });\n }, [hexDraft, hsva.a, setValue]);\n\n const commitAlpha = useCallback(() => {\n const parsed = Number.parseInt(alphaDraft, 10);\n if (Number.isNaN(parsed)) return;\n setValue(setAlphaPercent(value, parsed), { source: \"alpha-input\" });\n }, [alphaDraft, setValue, value]);\n\n const commitComponents = useCallback(() => {\n const parts = componentDraft.split(/[\\s,]+/).filter(Boolean).map(Number);\n if (parts.some((n) => Number.isNaN(n))) return;\n if (format === \"rgb\") {\n setValue(fromRgbComponents(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, hsva.a), {\n source: \"rgb-input\",\n });\n } else if (format === \"hsl\") {\n setValue(fromHslComponents(parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0, hsva.a), {\n source: \"hsl-input\",\n });\n }\n }, [componentDraft, format, hsva.a, setValue]);\n\n const handleEyedropper = useCallback(async () => {\n if (!eyeDropperSupported || isDisabled) return;\n try {\n const dropper = new window.EyeDropper!();\n const result = await dropper.open();\n setValue(parseColor(result.sRGBHex).toHex(), { source: \"eyedropper\" });\n } catch {\n /* user cancelled */\n }\n }, [eyeDropperSupported, isDisabled, setValue]);\n\n return (\n <div className={cn(\"aviala-color-picker-inputs\", className)} {...spiralDebugId(\"color-picker.content.inputs\")}>\n {showEyedropper ? (\n <Button\n type=\"button\"\n mode=\"defaultCustom\"\n size=\"regular\"\n iconOnly\n disabled={isDisabled}\n aria-label=\"Pick color from screen\"\n {...spiralDebugId(\"color-picker.content.inputs.eyedropper\")}\n title={\n eyeDropperSupported\n ? \"Pick color from screen\"\n : \"EyeDropper not supported in this browser\"\n }\n onClick={handleEyedropper}\n >\n <EditColorPicker aria-hidden />\n </Button>\n ) : null}\n\n {format === \"hex\" ? (\n <div className=\"aviala-color-picker-field\">\n <span className=\"aviala-color-picker-field__badge-area\">\n <Badge style=\"normal\">#</Badge>\n </span>\n <input\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\n value={hexDraft}\n disabled={isDisabled}\n aria-label=\"Hex color\"\n onChange={(e) => setHexDraft(e.target.value.toUpperCase())}\n onBlur={commitHex}\n onKeyDown={(e) => e.key === \"Enter\" && commitHex()}\n />\n </div>\n ) : (\n <div className=\"aviala-color-picker-field\">\n <input\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\n value={componentDraft}\n disabled={isDisabled}\n aria-label={format === \"rgb\" ? \"RGB color\" : \"HSL color\"}\n onChange={(e) => setComponentDraft(e.target.value)}\n onBlur={commitComponents}\n onKeyDown={(e) => e.key === \"Enter\" && commitComponents()}\n />\n </div>\n )}\n\n <div className=\"aviala-color-picker-field aviala-color-picker-field--alpha\">\n <input\n className={cn(\"aviala-color-picker-field__input\", typographyVariants({ level: \"text\" }))}\n value={alphaDraft}\n disabled={isDisabled}\n aria-label=\"Opacity percent\"\n inputMode=\"numeric\"\n onChange={(e) => setAlphaDraft(e.target.value)}\n onBlur={commitAlpha}\n onKeyDown={(e) => e.key === \"Enter\" && commitAlpha()}\n />\n <span className=\"aviala-color-picker-field__badge-area\">\n <Badge style=\"normal\">%</Badge>\n </span>\n </div>\n\n <Select\n value={format}\n onValueChange={(next) => setFormat(next as ColorFormat)}\n disabled={isDisabled}\n >\n <SelectTrigger className=\"aviala-color-picker-format-select w-[76px] shrink-0\" size=\"regular\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(event) => event.preventDefault()}>\n <SelectItemGroup>\n <SelectItem value=\"hex\" itemFunction=\"radio\">\n HEX\n </SelectItem>\n <SelectItem value=\"rgb\" itemFunction=\"radio\">\n RGB\n </SelectItem>\n <SelectItem value=\"hsl\" itemFunction=\"radio\">\n HSL\n </SelectItem>\n </SelectItemGroup>\n </SelectContent>\n </Select>\n </div>\n );\n}\n\nfunction buildComponentDraft(value: string, format: ColorFormat): string {\n if (format === \"rgb\") {\n const { r, g, b } = toRgbComponents(value);\n return `${r}, ${g}, ${b}`;\n }\n if (format === \"hsl\") {\n const { h, s, l } = toHslComponents(value);\n return `${h}, ${s}, ${l}`;\n }\n return toHexInput(value);\n}\n","import { SymbolAdd } from \"@aviala-design/icons\";\nimport { Button } from \"../button\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { parseColor } from \"./color-utils\";\nimport { ColorPickButton } from \"./color-pick-button\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\n\nexport type ColorPickerPresetsProps = {\n className?: string;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets?: number;\n disabled?: boolean;\n};\n\nexport function ColorPickerPresets({\n className,\n presets: presetsProp,\n onPresetsChange: onPresetsChangeProp,\n maxPresets: maxPresetsProp,\n disabled,\n}: ColorPickerPresetsProps) {\n const ctx = useOptionalColorPickerContext();\n const presets = presetsProp ?? ctx?.presets ?? [];\n const onPresetsChange = onPresetsChangeProp ?? ctx?.onPresetsChange;\n const maxPresets = maxPresetsProp ?? ctx?.maxPresets ?? 8;\n const isDisabled = disabled ?? ctx?.disabled;\n const value = ctx?.value;\n const setValue = ctx?.setValue;\n\n const handleAdd = () => {\n if (!onPresetsChange || !value || isDisabled) return;\n const normalized = parseColor(value).toHex();\n if (presets.includes(normalized)) return;\n const next = [...presets, normalized].slice(-maxPresets);\n onPresetsChange(next);\n };\n\n return (\n <div className={cn(\"aviala-color-picker-presets\", className)} {...spiralDebugId(\"color-picker.content.presets\")}>\n <Button\n type=\"button\"\n mode=\"defaultCustom\"\n size=\"regular\"\n iconOnly\n disabled={isDisabled || !onPresetsChange || presets.length >= maxPresets}\n aria-label=\"Add current color to presets\"\n onClick={handleAdd}\n >\n <SymbolAdd aria-hidden />\n </Button>\n {presets.map((color) => (\n <ColorPickButton\n key={color}\n color={color}\n selected={value === color}\n disabled={isDisabled}\n onClick={() => setValue?.(color, { source: \"preset\" })}\n />\n ))}\n </div>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { parseColor } from \"./color-utils\";\n\nexport type ColorPickButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\"> & {\n color: string;\n selected?: boolean;\n};\n\nexport const ColorPickButton = forwardRef<HTMLButtonElement, ColorPickButtonProps>(\n ({ className, color, selected = false, style, ...props }, ref) => {\n const swatch = parseColor(color).toHex();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-color-pick-button aviala-focus-ring\", className)}\n data-selected={selected ? \"true\" : undefined}\n style={style}\n {...props}\n >\n <span\n className=\"aviala-color-pick-button__swatch\"\n style={{ backgroundColor: swatch }}\n aria-hidden\n />\n </button>\n );\n }\n);\nColorPickButton.displayName = \"ColorPickButton\";\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 aviala-focus-ring\"\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\";\nimport { ColorPickerArea } from \"./color-picker-area\";\nimport { ColorPickerInputs } from \"./color-picker-inputs\";\nimport { ColorPickerPresets } from \"./color-picker-presets\";\nimport { ColorPickerSlider } from \"./color-picker-slider\";\nimport { ColorPickerContext } from \"./color-picker-context\";\nimport { useColorPickerState, type UseColorPickerStateOptions } from \"./use-color-picker-state\";\n\nexport type ColorPickerPanelProps = UseColorPickerStateOptions & {\n className?: string;\n disabled?: boolean;\n presets?: string[];\n onPresetsChange?: (presets: string[]) => void;\n maxPresets?: number;\n showEyedropper?: boolean;\n showPresets?: boolean;\n};\n\nexport function ColorPickerPanel({\n className,\n disabled,\n presets,\n onPresetsChange,\n maxPresets = 8,\n showEyedropper = true,\n showPresets = true,\n value,\n defaultValue,\n onChange,\n format,\n defaultFormat,\n onFormatChange,\n}: ColorPickerPanelProps) {\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: true,\n disabled,\n presets,\n onPresetsChange,\n maxPresets,\n };\n\n return (\n <ColorPickerContext.Provider value={contextValue}>\n <div className={cn(\"aviala-color-picker-panel\", className)}>\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 </ColorPickerContext.Provider>\n );\n}\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n DirectionArrowDownLight,\n DirectionArrowRightLight,\n SymbolRight,\n type AvialaIconProps,\n type IconLevel,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Badge } from \"./badge\";\nimport { typographyVariants } from \"./typography\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { iconLevelCssVarStyle, iconSlotCssVarStyle } from \"../lib/icon-slot-sizing\";\nimport { renderSlotIcon } from \"../lib/render-slot-icon\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\n\n/** Figma Components → Information Collect → Cascader Input */\nexport type CascaderSize = \"regular\" | \"big\";\n\n/** Figma Cascader Menu Item `Function` variant */\nexport type CascaderItemFunction =\n | \"simple\"\n | \"checkbox\"\n | \"form-checkbox\"\n | \"radio\"\n | \"form-radio\"\n | \"search\"\n | \"custom\";\n\n/** Figma Cascader Menu Item `Type` variant */\nexport type CascaderItemLayout = \"default\" | \"title\" | \"custom\";\n\nexport type CascaderOption = {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n children?: CascaderOption[];\n};\n\ntype CascaderContextValue = {\n open: boolean;\n disabled?: boolean;\n size: CascaderSize;\n activePath: string[];\n selectedPath: string[];\n highlightedValue: string | null;\n setHighlightedValue: (value: string | null) => void;\n expandTo: (path: string[]) => void;\n selectPath: (path: string[], closeOnLeaf?: boolean) => void;\n getOptionAtPath: (path: string[]) => CascaderOption | undefined;\n getOptionsAtPath: (path: string[]) => CascaderOption[];\n isPathSelected: (path: string[]) => boolean;\n isPathExpanded: (path: string[]) => boolean;\n};\n\nconst CascaderContext = createContext<CascaderContextValue | null>(null);\n\nfunction useCascaderContext() {\n const context = useContext(CascaderContext);\n if (!context) {\n throw new Error(\"Cascader compound components must be used within Cascader.\");\n }\n return context;\n}\n\n\nfunction renderItemIcon(\n node: ReactNode,\n iconLevel: IconLevel = \"text\",\n debugId?: string\n): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: iconLevel,\n biggerSize: true,\n });\n\n return (\n <span\n className={cn(\n \"aviala-cascader-item__icon\",\n iconLevel === \"caption\" && \"aviala-cascader-item__icon--sm\"\n )}\n style={iconSlotCssVarStyle(node, \"--cascader-item-icon-size\", iconLevel, true)}\n {...(debugId ? spiralDebugId(debugId) : undefined)}\n >\n {content}\n </span>\n );\n}\n\nfunction renderBadgeSlot(node: ReactNode): ReactNode {\n if (node == null || node === false) return null;\n\n return (\n <span className=\"aviala-cascader-item__badge\">\n {isValidElement(node) && node.type === Badge ? node : <Badge>{node}</Badge>}\n </span>\n );\n}\n\nfunction CascaderItemFormRadio() {\n return (\n <span className=\"aviala-cascader-item__form-radio\" aria-hidden>\n <span className=\"aviala-cascader-item__form-radio-surface\" />\n <span className=\"aviala-cascader-item__form-radio-indicator\" />\n </span>\n );\n}\n\nfunction CascaderItemFormCheckbox() {\n return (\n <span className=\"aviala-cascader-item__form-checkbox\" aria-hidden>\n <SymbolRight\n className=\"aviala-cascader-item__form-checkbox-icon\"\n thickness=\"Bold\"\n width={12}\n height={12}\n aria-hidden\n />\n </span>\n );\n}\n\nfunction CascaderItemTrailingRadio({ selected }: { selected: boolean }) {\n if (!selected) return null;\n\n return (\n <span className=\"aviala-cascader-item__trailing-radio\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </span>\n );\n}\n\nfunction CascaderItemTrailingCheckbox({ selected }: { selected: boolean }) {\n if (!selected) return null;\n\n return (\n <span className=\"aviala-cascader-item__trailing-checkbox\" aria-hidden>\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n </span>\n );\n}\n\nfunction renderFunctionSlot(\n itemFunction: CascaderItemFunction,\n layout: CascaderItemLayout,\n showFunctionIcon: boolean,\n hasChildren: boolean,\n selected: boolean,\n icon?: ReactNode\n): ReactNode {\n if (!showFunctionIcon || layout === \"title\") return null;\n\n if (icon !== undefined) {\n return <span className=\"aviala-cascader-item__function\">{icon}</span>;\n }\n\n switch (itemFunction) {\n case \"radio\":\n return (\n <span className=\"aviala-cascader-item__function\">\n <CascaderItemTrailingRadio selected={selected} />\n </span>\n );\n case \"checkbox\":\n return (\n <span className=\"aviala-cascader-item__function\">\n <CascaderItemTrailingCheckbox selected={selected} />\n </span>\n );\n case \"simple\":\n default:\n return (\n <span className=\"aviala-cascader-item__function\">\n {selected ? (\n <SymbolRight level=\"text\" biggerSize aria-hidden />\n ) : null}\n {hasChildren ? (\n <DirectionArrowRightLight level=\"text\" biggerSize aria-hidden />\n ) : null}\n </span>\n );\n }\n}\n\nfunction findOptionPath(\n options: CascaderOption[],\n targetPath: string[]\n): CascaderOption | undefined {\n let currentOptions = options;\n let current: CascaderOption | undefined;\n\n for (const segment of targetPath) {\n current = currentOptions.find((option) => option.value === segment);\n if (!current) return undefined;\n currentOptions = current.children ?? [];\n }\n\n return current;\n}\n\nfunction getOptionsAtPath(options: CascaderOption[], path: string[]): CascaderOption[] {\n if (path.length === 0) return options;\n const node = findOptionPath(options, path);\n return node?.children ?? [];\n}\n\nfunction getLabelsForPath(options: CascaderOption[], path: string[]): ReactNode[] {\n const labels: ReactNode[] = [];\n let currentOptions = options;\n\n for (const segment of path) {\n const option = currentOptions.find((item) => item.value === segment);\n if (!option) break;\n labels.push(option.label);\n currentOptions = option.children ?? [];\n }\n\n return labels;\n}\n\n/** True when `path` is a prefix of `selectedPath` (item lies on the current selection). */\nfunction isPathOnSelectedPath(path: string[], selectedPath: string[]) {\n if (path.length === 0 || path.length > selectedPath.length) return false;\n return path.every((segment, index) => segment === selectedPath[index]);\n}\n\nexport type CascaderProps = {\n children: ReactNode;\n options?: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[], selectedOptions: CascaderOption[]) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: CascaderSize;\n /** Select parent nodes — Figma allows any-level selection (default true). */\n changeOnSelect?: boolean;\n className?: string;\n};\n\n/**\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down (outside click, item select, trigger toggle)\n * and Escape must still dismiss on the first interaction.\n */\nexport function Cascader({\n children,\n options = [],\n value: valueProp,\n defaultValue,\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n size = \"regular\",\n changeOnSelect = true,\n className,\n}: CascaderProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue ?? []);\n const [activePath, setActivePath] = useState<string[]>(defaultValue ?? []);\n const [highlightedValue, setHighlightedValue] = useState<string | null>(null);\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n const isOpenControlled = openProp !== undefined;\n const isValueControlled = valueProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n const selectedPath = isValueControlled ? valueProp ?? [] : internalValue;\n const wasOpenRef = useRef(open);\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n // Only seed expansion when the panel opens. While open, `selectPath` /\n // `expandTo` own `activePath` — re-syncing on every `selectedPath` change\n // collapses the next column (desktop recovers via hover; touch cannot).\n useEffect(() => {\n const justOpened = open && !wasOpenRef.current;\n wasOpenRef.current = open;\n if (!justOpened) return;\n\n if (selectedPath.length === 0) {\n setActivePath([]);\n return;\n }\n\n const selectedOption = findOptionPath(options, selectedPath);\n if (selectedOption?.children?.length) {\n setActivePath(selectedPath);\n return;\n }\n\n setActivePath(selectedPath.slice(0, -1));\n }, [open, options, selectedPath]);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n return;\n }\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isOpenControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isOpenControlled, onOpenChange]\n );\n\n const commitValue = useCallback(\n (path: string[]) => {\n const selectedOptions = path\n .map((_, index) => findOptionPath(options, path.slice(0, index + 1)))\n .filter((option): option is CascaderOption => option !== undefined);\n\n if (!isValueControlled) {\n setInternalValue(path);\n }\n onValueChange?.(path, selectedOptions);\n },\n [isValueControlled, onValueChange, options]\n );\n\n const expandTo = useCallback((path: string[]) => {\n setActivePath(path);\n }, []);\n\n const selectPath = useCallback(\n (path: string[], closeOnLeaf = true) => {\n const option = findOptionPath(options, path);\n const hasChildren = Boolean(option?.children?.length);\n\n if (!changeOnSelect && hasChildren) {\n expandTo(path);\n return;\n }\n\n commitValue(path);\n\n if (hasChildren) {\n expandTo(path);\n return;\n }\n\n if (closeOnLeaf) {\n handleOpenChange(false);\n }\n },\n [changeOnSelect, commitValue, expandTo, handleOpenChange, options]\n );\n\n const contextValue = useMemo<CascaderContextValue>(\n () => ({\n open,\n disabled,\n size,\n activePath,\n selectedPath,\n highlightedValue,\n setHighlightedValue,\n expandTo,\n selectPath,\n getOptionAtPath: (path) => findOptionPath(options, path),\n getOptionsAtPath: (path) => getOptionsAtPath(options, path),\n isPathSelected: (path) => isPathOnSelectedPath(path, selectedPath),\n isPathExpanded: (path) => {\n const expandedPrefix = activePath.length > 0 ? activePath : selectedPath.slice(0, -1);\n return (\n path.length <= expandedPrefix.length &&\n path.every((segment, index) => segment === expandedPrefix[index])\n );\n },\n }),\n [\n activePath,\n disabled,\n expandTo,\n highlightedValue,\n open,\n options,\n selectPath,\n selectedPath,\n size,\n ]\n );\n\n return (\n <CascaderContext.Provider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)} {...spiralDebugId(\"cascader\")}>{children}</div>\n </PopoverPrimitive.Root>\n </CascaderContext.Provider>\n );\n}\n\nexport type CascaderTriggerProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Trigger> & {\n size?: CascaderSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n expandIcon?: ReactNode;\n placeholder?: string;\n error?: boolean;\n /** Override display when using manual composition without `options`. */\n displayValue?: ReactNode;\n separator?: string;\n className?: string;\n};\n\nexport const CascaderTrigger = forwardRef<HTMLButtonElement, CascaderTriggerProps>(\n (\n {\n className,\n size: sizeProp,\n allRound = false,\n leftIcon,\n rightIcon,\n expandIcon,\n placeholder = \"Text\",\n error = false,\n displayValue,\n separator = \"/\",\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const { open, disabled: disabledContext, size: sizeContext, selectedPath, getOptionAtPath } =\n useCascaderContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n\n const labels = selectedPath\n .map((_, index) => getOptionAtPath(selectedPath.slice(0, index + 1))?.label)\n .filter((label): label is ReactNode => label != null && label !== false);\n\n const resolvedDisplay =\n displayValue ??\n (labels.length > 0\n ? labels.map((label, index) => (\n <span key={`${selectedPath[index]}-${index}`}>\n {index > 0 ? separator : null}\n {label}\n </span>\n ))\n : null);\n\n const hasValue = resolvedDisplay != null && resolvedDisplay !== false;\n\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-cascader-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n {...spiralDebugId(\"cascader.trigger\")}\n {...props}\n >\n {renderSlotIcon(leftIcon, \"aviala-cascader-trigger__slot\", \"cascader.trigger.icon-left\")}\n <span className=\"aviala-cascader-trigger__field\" {...spiralDebugId(\"cascader.trigger.value\")}>\n <span\n className={cn(\"aviala-cascader-trigger__value\", typographyVariants({ level: \"text\" }))}\n data-placeholder={hasValue ? undefined : \"true\"}\n >\n {hasValue ? resolvedDisplay : placeholder}\n </span>\n </span>\n {renderSlotIcon(rightIcon, \"aviala-cascader-trigger__slot\", \"cascader.trigger.icon-right\")}\n <span\n className=\"aviala-cascader-trigger__expand\"\n aria-hidden\n style={\n expandIcon\n ? iconSlotCssVarStyle(expandIcon, \"--input-slot-icon-size\", \"text\", true)\n : iconLevelCssVarStyle(\"text\", true, \"--input-slot-icon-size\")\n }\n {...spiralDebugId(\"cascader.trigger.expand\")}\n >\n {expandIcon ?? (\n <DirectionArrowDownLight level=\"text\" biggerSize aria-hidden />\n )}\n </span>\n </button>\n </PopoverPrimitive.Trigger>\n );\n }\n);\nCascaderTrigger.displayName = \"CascaderTrigger\";\n\nexport type CascaderContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n portalled?: boolean;\n className?: string;\n};\n\nexport const CascaderContent = forwardRef<HTMLDivElement, CascaderContentProps>(\n (\n {\n className,\n children,\n sideOffset = 8,\n align = \"start\",\n portalled = true,\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n className={cn(\"aviala-cascader-content\", className)}\n sideOffset={sideOffset}\n align={align}\n {...spiralDebugId(\"cascader.content\")}\n {...props}\n >\n {children}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nCascaderContent.displayName = \"CascaderContent\";\n\nexport type CascaderMenuProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/** Figma Cascader Menu — horizontal column container (`348:13915`). */\nexport const CascaderMenu = forwardRef<HTMLDivElement, CascaderMenuProps>(\n ({ children, className }, ref) => (\n <div ref={ref} className={cn(\"aviala-cascader-menu\", className)}>\n {children}\n </div>\n )\n);\nCascaderMenu.displayName = \"CascaderMenu\";\n\nexport type CascaderColumnProps = {\n children: ReactNode;\n className?: string;\n /** Slide + fade in when a new cascade column appears (options-driven menus set this automatically). */\n animateEnter?: boolean;\n /** Slide + fade out before unmount when a cascade column is removed (options-driven menus set this automatically). */\n animateExit?: boolean;\n /** Frozen layout slot for exit overlay columns (keeps flex width stable while animating out). */\n exitLayout?: { left: number; width: number };\n};\n\n/** Figma Cascader Menu Item Group Group — single cascade column (`345:20543`). */\nexport const CascaderColumn = forwardRef<HTMLDivElement, CascaderColumnProps>(\n ({ children, className, animateEnter, animateExit, exitLayout }, ref) => {\n const animate = animateExit ? \"exit\" : animateEnter ? \"enter\" : undefined;\n const exitStyle =\n animateExit && exitLayout\n ? ({\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: exitLayout.left,\n width: exitLayout.width,\n zIndex: 0,\n } as const)\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-cascader-column\", className)}\n data-animate={animate}\n style={exitStyle}\n >\n <div className=\"aviala-cascader-column__surface\" data-animate={animate}>\n {children}\n </div>\n </div>\n );\n }\n);\nCascaderColumn.displayName = \"CascaderColumn\";\n\nexport type CascaderItemGroupProps = {\n label?: ReactNode;\n showDivider?: boolean;\n children: ReactNode;\n className?: string;\n};\n\n/** Figma Cascader Menu Item Group (`345:16552`). */\nexport function CascaderItemGroup({\n label,\n showDivider = true,\n children,\n className,\n}: CascaderItemGroupProps) {\n return (\n <div className={cn(\"aviala-cascader-group\", className)}>\n {label ? (\n <div className={cn(\"aviala-cascader-label\", typographyVariants({ level: \"caption\" }))}>\n {label}\n </div>\n ) : null}\n <div className=\"aviala-cascader-group__slot\">{children}</div>\n {showDivider ? <div className=\"aviala-cascader-separator\" role=\"separator\" /> : null}\n </div>\n );\n}\n\nexport type CascaderItemProps = {\n value: string;\n pathPrefix?: string[];\n itemFunction?: CascaderItemFunction;\n layout?: CascaderItemLayout;\n leftIcon?: ReactNode;\n showLeftIcon?: boolean;\n rightIcon?: ReactNode;\n showRightIcon?: boolean;\n badge?: ReactNode;\n showBadge?: boolean;\n showFunctionIcon?: boolean;\n icon?: ReactNode;\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n hasChildren?: boolean;\n};\n\n/** Figma Cascader Menu Item (`345:12487`). */\nexport const CascaderItem = forwardRef<HTMLButtonElement, CascaderItemProps>(\n (\n {\n value,\n pathPrefix = [],\n itemFunction = \"simple\",\n layout = \"default\",\n leftIcon,\n showLeftIcon = false,\n rightIcon,\n showRightIcon = false,\n badge,\n showBadge = false,\n showFunctionIcon = true,\n icon,\n disabled = false,\n children,\n className,\n hasChildren: hasChildrenProp,\n },\n ref\n ) => {\n const {\n highlightedValue,\n setHighlightedValue,\n expandTo,\n selectPath,\n getOptionAtPath,\n isPathSelected,\n isPathExpanded,\n } = useCascaderContext();\n\n const path = [...pathPrefix, value];\n const option = getOptionAtPath(path);\n const hasChildren = hasChildrenProp ?? Boolean(option?.children?.length);\n const isTitle = layout === \"title\";\n const isSelected = isPathSelected(path);\n const isExpanded = isPathExpanded(path);\n const isHighlighted = highlightedValue === value;\n const isDisabled = disabled || option?.disabled;\n\n const isFormLeading = itemFunction === \"form-radio\" || itemFunction === \"form-checkbox\";\n const leftIconLevel: IconLevel = isTitle ? \"caption\" : \"text\";\n const showTrailingFunction =\n showFunctionIcon &&\n !isTitle &&\n itemFunction !== \"form-radio\" &&\n itemFunction !== \"form-checkbox\";\n\n const handleClick = () => {\n if (isTitle || isDisabled) return;\n if (hasChildren) {\n selectPath(path, false);\n return;\n }\n selectPath(path, true);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (isTitle || isDisabled) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleClick();\n }\n if (event.key === \"ArrowRight\" && hasChildren) {\n event.preventDefault();\n expandTo(path);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role={isTitle ? \"presentation\" : \"option\"}\n aria-selected={isSelected}\n aria-expanded={hasChildren ? isExpanded : undefined}\n disabled={isDisabled}\n className={cn(\"aviala-cascader-item aviala-focus-ring\", className)}\n data-layout={layout !== \"default\" ? layout : undefined}\n data-function={itemFunction !== \"simple\" ? itemFunction : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n {...spiralDebugId(\"cascader.content.item\")}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => {\n if (!isTitle) setHighlightedValue(value);\n if (hasChildren) expandTo(pathPrefix.concat(value));\n }}\n onMouseLeave={(event) => {\n if (isTitle) return;\n const next = event.relatedTarget;\n if (next instanceof Node && event.currentTarget.contains(next)) return;\n if (highlightedValue === value) setHighlightedValue(null);\n }}\n onFocus={() => {\n if (!isTitle) setHighlightedValue(value);\n }}\n >\n {isFormLeading && itemFunction === \"form-radio\" ? <CascaderItemFormRadio /> : null}\n {isFormLeading && itemFunction === \"form-checkbox\" ? <CascaderItemFormCheckbox /> : null}\n\n {showLeftIcon && leftIcon\n ? renderItemIcon(leftIcon, leftIconLevel, \"cascader.content.item.icon-left\")\n : null}\n\n <span className={cn(\"aviala-cascader-item__text\", typographyVariants({ level: isTitle ? \"caption\" : \"text\" }))}>\n {children ?? option?.label}\n </span>\n\n {showBadge ? renderBadgeSlot(badge ?? \"Text\") : null}\n {showRightIcon && rightIcon ? renderItemIcon(rightIcon, leftIconLevel) : null}\n\n {renderFunctionSlot(\n itemFunction,\n layout,\n showTrailingFunction,\n hasChildren,\n isSelected,\n icon\n )}\n </button>\n );\n }\n);\nCascaderItem.displayName = \"CascaderItem\";\n\nexport type CascaderOptionsMenuProps = {\n className?: string;\n};\n\nconst COLUMN_ANIMATION_MS = 150;\n\ntype RenderColumn = {\n pathPrefix: string[];\n key: string;\n animateEnter: boolean;\n animateExit: boolean;\n exitLayout?: { left: number; width: number };\n};\n\nfunction toColumnKey(pathPrefix: string[]) {\n return pathPrefix.join(\"/\") || \"root\";\n}\n\nfunction prefersReducedMotion() {\n return (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\n/** Renders cascade columns from `Cascader` `options` prop. */\nexport function CascaderOptionsMenu({ className }: CascaderOptionsMenuProps) {\n const { activePath, selectedPath, getOptionsAtPath, open } = useCascaderContext();\n const prevColumnCountRef = useRef<number | null>(null);\n const prevColumnPathsRef = useRef<string[][]>([]);\n const lastPathChangeAtRef = useRef(0);\n const menuRef = useRef<HTMLDivElement>(null);\n const columnElRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n const [columns, setColumns] = useState<RenderColumn[]>([]);\n\n const columnPaths = useMemo(() => {\n const paths: string[][] = [[]];\n const expansion = activePath.length > 0 ? activePath : selectedPath.slice(0, -1);\n\n for (let index = 0; index < expansion.length; index += 1) {\n const prefix = expansion.slice(0, index + 1);\n const nextOptions = getOptionsAtPath(prefix);\n if (nextOptions.length > 0) {\n paths.push(prefix);\n }\n }\n\n return paths;\n }, [activePath, getOptionsAtPath, selectedPath]);\n\n useLayoutEffect(() => {\n if (!open) {\n prevColumnCountRef.current = null;\n prevColumnPathsRef.current = [];\n lastPathChangeAtRef.current = 0;\n setColumns([]);\n return;\n }\n\n const prevPaths = prevColumnPathsRef.current;\n const prevCount = prevColumnCountRef.current;\n const nextKeys = new Set(columnPaths.map(toColumnKey));\n const now = performance.now();\n const isRapid = now - lastPathChangeAtRef.current < COLUMN_ANIMATION_MS;\n lastPathChangeAtRef.current = now;\n\n const skipAnimations = prefersReducedMotion() || isRapid;\n const isExpanding = prevCount !== null && columnPaths.length > prevCount;\n const enterFromIndex = isExpanding ? prevCount : columnPaths.length;\n\n const isLateralReplace =\n prevPaths.length > 0 &&\n columnPaths.length === prevPaths.length &&\n columnPaths.some(\n (pathPrefix, index) => toColumnKey(pathPrefix) !== toColumnKey(prevPaths[index]!)\n );\n\n const removedCount = prevPaths.filter(\n (pathPrefix) => !nextKeys.has(toColumnKey(pathPrefix))\n ).length;\n\n const allowExitAnimation = !skipAnimations && !isLateralReplace && removedCount === 1;\n\n const measureExitLayout = (key: string) => {\n const columnEl = columnElRefs.current.get(key);\n const menuEl = menuRef.current;\n if (!columnEl || !menuEl) return undefined;\n\n const columnRect = columnEl.getBoundingClientRect();\n const menuRect = menuEl.getBoundingClientRect();\n return {\n left: columnRect.left - menuRect.left,\n width: columnRect.width,\n };\n };\n\n setColumns((prev) => {\n const settled = prev.filter((column) => !column.animateExit);\n const prevByKey = new Map(settled.map((column) => [column.key, column]));\n\n const active: RenderColumn[] = columnPaths.map((pathPrefix, index) => {\n const key = toColumnKey(pathPrefix);\n const existing = prevByKey.get(key);\n\n return {\n pathPrefix,\n key,\n animateEnter: skipAnimations ? false : existing ? false : index >= enterFromIndex,\n animateExit: false,\n };\n });\n\n if (settled.length === 0) {\n return active;\n }\n\n const toExit: RenderColumn[] = allowExitAnimation\n ? settled\n .filter((column) => !nextKeys.has(column.key))\n .flatMap((column) => {\n const exitLayout = measureExitLayout(column.key);\n if (!exitLayout) {\n return [];\n }\n\n return [\n {\n ...column,\n animateEnter: false,\n animateExit: true,\n exitLayout,\n },\n ];\n })\n : [];\n\n const activeMap = new Map(active.map((column) => [column.key, column]));\n const merged: RenderColumn[] = columnPaths.map((pathPrefix) => activeMap.get(toColumnKey(pathPrefix))!);\n\n return [...merged, ...toExit];\n });\n\n prevColumnCountRef.current = columnPaths.length;\n prevColumnPathsRef.current = columnPaths;\n }, [columnPaths, open]);\n\n useEffect(() => {\n if (!open || !columns.some((column) => column.animateExit)) {\n return undefined;\n }\n\n const timeout = window.setTimeout(() => {\n setColumns((prev) => prev.filter((column) => !column.animateExit));\n }, COLUMN_ANIMATION_MS);\n\n return () => window.clearTimeout(timeout);\n }, [columns, open]);\n\n return (\n <CascaderMenu ref={menuRef} className={className}>\n {columns.map(({ pathPrefix, key, animateEnter, animateExit, exitLayout }) => (\n <CascaderColumn\n key={key}\n ref={(element) => {\n if (element) {\n columnElRefs.current.set(key, element);\n return;\n }\n columnElRefs.current.delete(key);\n }}\n animateEnter={animateEnter}\n animateExit={animateExit}\n exitLayout={exitLayout}\n >\n <CascaderItemGroup label=\"Title\" showDivider>\n {getOptionsAtPath(pathPrefix).map((option) => (\n <CascaderItem\n key={[...pathPrefix, option.value].join(\"/\")}\n value={option.value}\n pathPrefix={pathPrefix}\n disabled={option.disabled}\n hasChildren={Boolean(option.children?.length)}\n >\n {option.label}\n </CascaderItem>\n ))}\n </CascaderItemGroup>\n </CascaderColumn>\n ))}\n </CascaderMenu>\n );\n}\n\nexport type CascaderFieldProps = Omit<CascaderProps, \"children\"> &\n Omit<CascaderTriggerProps, \"displayValue\"> & {\n contentClassName?: string;\n menuClassName?: string;\n };\n\n/** Convenience field — trigger + options-driven menu. */\nexport function CascaderField({\n options,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n size = \"regular\",\n changeOnSelect,\n className,\n contentClassName,\n menuClassName,\n allRound,\n leftIcon,\n rightIcon,\n expandIcon,\n placeholder,\n error,\n separator,\n ...triggerProps\n}: CascaderFieldProps) {\n return (\n <Cascader\n options={options}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n size={size}\n changeOnSelect={changeOnSelect}\n className={className}\n >\n <CascaderTrigger\n size={size}\n allRound={allRound}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n expandIcon={expandIcon}\n placeholder={placeholder}\n error={error}\n separator={separator}\n {...triggerProps}\n />\n <CascaderContent className={contentClassName}>\n <CascaderOptionsMenu className={menuClassName} />\n </CascaderContent>\n </Cascader>\n );\n}\n\nexport { getLabelsForPath, getOptionsAtPath, findOptionPath as getOptionAtPath };\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n DirectionArrowLeft,\n DirectionArrowRight,\n TimeAndDateClock,\n TimeAndDateDate,\n} from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { renderSlotIcon } from \"../../lib/render-slot-icon\";\nimport { typographyVariants } from \"../typography\";\nimport {\n DatePickerProvider,\n useDatePickerContext,\n type DatePickerMode,\n type DatePickerPanel,\n type DatePickerSize,\n type DatePickerTimeValue,\n} from \"./date-picker-context\";\nimport {\n addMonths,\n applyTimeToDate,\n formatDisplayDate,\n formatDisplayDateTime,\n formatIsoDate,\n formatMonthYear,\n formatTimeValue,\n getCalendarDays,\n getRangeSelectionPosition,\n isDateDisabled,\n isDateInRange,\n isSameDay,\n isSameMonth,\n normalizeRange,\n parseDateInput,\n parseDateRangeInput,\n startOfDay,\n WEEKDAY_LABELS,\n type DateRange,\n type RangeSelectionPosition,\n} from \"./date-utils\";\nimport {\n SegmentatorGroup,\n SegmentatorItem,\n} from \"../segmentator\";\nimport { DatePickerMonthYearWheels } from \"./date-picker-month-wheels\";\nimport { TimePickerWheels } from \"../time-picker/time-picker-wheels\";\n\nexport type { DatePickerMode, DatePickerPanel, DatePickerSize, DatePickerTimeValue } from \"./date-picker-context\";\n\ntype DatePickerBaseProps = {\n children: ReactNode;\n mode?: DatePickerMode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: DatePickerSize;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n /** Figma DatePickerLIstGroup — footer date/time Segmentator */\n enableTime?: boolean;\n timeValue?: DatePickerTimeValue;\n defaultTimeValue?: DatePickerTimeValue;\n onTimeChange?: (value: DatePickerTimeValue) => void;\n};\n\nexport type DatePickerSingleProps = DatePickerBaseProps & {\n mode?: \"single\";\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (value: Date | undefined) => void;\n};\n\nexport type DatePickerRangeProps = DatePickerBaseProps & {\n mode: \"range\";\n value?: DateRange;\n defaultValue?: DateRange;\n onValueChange?: (value: DateRange) => void;\n};\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\n\nfunction getInitialViewMonth(\n mode: DatePickerMode,\n singleValue?: Date,\n rangeValue?: DateRange\n): Date {\n if (mode === \"single\" && singleValue) return startOfDay(singleValue);\n if (mode === \"range\") {\n if (rangeValue?.from) return startOfDay(rangeValue.from);\n if (rangeValue?.to) return startOfDay(rangeValue.to);\n }\n return startOfDay(new Date());\n}\n\n/**\n * Radix Popover closes on `window` blur (e.g. focusing DevTools). Suppress only\n * blur-initiated closes; pointer-down and Escape must still dismiss on first interaction.\n */\nexport function DatePicker(props: DatePickerProps) {\n const {\n children,\n mode = \"single\",\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n size = \"regular\",\n minDate,\n maxDate,\n className,\n enableTime = true,\n timeValue: timeValueProp,\n defaultTimeValue = { hours: 17, minutes: 0 },\n onTimeChange,\n } = props;\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [internalSingle, setInternalSingle] = useState<Date | undefined>(() =>\n mode === \"single\" ? (props as DatePickerSingleProps).defaultValue : undefined\n );\n const [internalRange, setInternalRange] = useState<DateRange>(() =>\n mode === \"range\" ? (props as DatePickerRangeProps).defaultValue ?? {} : {}\n );\n const [rangeDraftFrom, setRangeDraftFrom] = useState<Date | undefined>(undefined);\n const [activePanel, setActivePanel] = useState<DatePickerPanel>(\"date\");\n const [internalTime, setInternalTime] = useState<DatePickerTimeValue>(defaultTimeValue);\n\n const isOpenControlled = openProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n\n const timeValue =\n timeValueProp !== undefined ? timeValueProp : internalTime;\n\n const setTimeValue = useCallback(\n (next: DatePickerTimeValue) => {\n if (timeValueProp === undefined) {\n setInternalTime(next);\n }\n onTimeChange?.(next);\n\n // Keep committed Date in sync with the time wheels when a day is selected.\n if (!enableTime) return;\n if (mode === \"single\") {\n const current =\n (props as DatePickerSingleProps).value !== undefined\n ? (props as DatePickerSingleProps).value\n : internalSingle;\n if (!current) return;\n const controlled = (props as DatePickerSingleProps).value !== undefined;\n const merged = applyTimeToDate(current, next.hours, next.minutes);\n if (!controlled) {\n setInternalSingle(merged);\n }\n (props as DatePickerSingleProps).onValueChange?.(merged);\n return;\n }\n\n const currentRange =\n (props as DatePickerRangeProps).value !== undefined\n ? ((props as DatePickerRangeProps).value ?? {})\n : internalRange;\n if (!currentRange.from && !currentRange.to) return;\n const controlled = (props as DatePickerRangeProps).value !== undefined;\n const merged: DateRange = {\n from: currentRange.from\n ? applyTimeToDate(currentRange.from, next.hours, next.minutes)\n : undefined,\n to: currentRange.to\n ? applyTimeToDate(currentRange.to, next.hours, next.minutes)\n : undefined,\n };\n if (!controlled) {\n setInternalRange(merged);\n }\n (props as DatePickerRangeProps).onValueChange?.(merged);\n },\n [\n enableTime,\n internalRange,\n internalSingle,\n mode,\n onTimeChange,\n props,\n timeValueProp,\n ]\n );\n\n const singleValue =\n mode === \"single\"\n ? (props as DatePickerSingleProps).value !== undefined\n ? (props as DatePickerSingleProps).value\n : internalSingle\n : undefined;\n\n const rangeValue =\n mode === \"range\"\n ? (props as DatePickerRangeProps).value !== undefined\n ? ((props as DatePickerRangeProps).value ?? {})\n : internalRange\n : { from: rangeDraftFrom };\n\n const [viewMonth, setViewMonth] = useState(() =>\n getInitialViewMonth(mode, singleValue, mode === \"range\" ? rangeValue : undefined)\n );\n const [focusedDay, setFocusedDay] = useState<Date | null>(null);\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n setRangeDraftFrom(undefined);\n setActivePanel(\"date\");\n return;\n }\n\n setFocusedDay((current) => {\n if (current) return current;\n if (mode === \"single\" && singleValue) return startOfDay(singleValue);\n const rangeAnchor =\n mode === \"range\" ? rangeValue.from ?? rangeValue.to : undefined;\n if (rangeAnchor) return startOfDay(rangeAnchor);\n return startOfDay(new Date());\n });\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [mode, open, rangeValue.from, rangeValue.to, singleValue]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isOpenControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isOpenControlled, onOpenChange]\n );\n\n const commitSingle = useCallback(\n (next: Date | undefined) => {\n if (mode !== \"single\") return;\n const controlled = (props as DatePickerSingleProps).value !== undefined;\n if (!controlled) {\n setInternalSingle(next);\n }\n (props as DatePickerSingleProps).onValueChange?.(next);\n },\n [mode, props]\n );\n\n const commitRange = useCallback(\n (next: DateRange) => {\n if (mode !== \"range\") return;\n const controlled = (props as DatePickerRangeProps).value !== undefined;\n if (!controlled) {\n setInternalRange(next);\n }\n (props as DatePickerRangeProps).onValueChange?.(next);\n },\n [mode, props]\n );\n\n const commitTypedValue = useCallback(\n (text: string) => {\n const trimmed = text.trim();\n\n if (mode === \"single\") {\n if (!trimmed) {\n commitSingle(undefined);\n return true;\n }\n const parsed = parseDateInput(trimmed);\n if (!parsed) return false;\n if (isDateDisabled(parsed.date, minDate, maxDate)) return false;\n\n const hours = parsed.hours ?? timeValue.hours;\n const minutes = parsed.minutes ?? timeValue.minutes;\n if (enableTime && (parsed.hours != null || parsed.minutes != null)) {\n setTimeValue({ hours, minutes });\n }\n\n const next = enableTime\n ? applyTimeToDate(parsed.date, hours, minutes)\n : parsed.date;\n commitSingle(next);\n setViewMonth(new Date(next.getFullYear(), next.getMonth(), 1));\n setFocusedDay(startOfDay(next));\n return true;\n }\n\n if (!trimmed) {\n setRangeDraftFrom(undefined);\n commitRange({});\n return true;\n }\n\n const parsedRange = parseDateRangeInput(trimmed);\n if (!parsedRange) return false;\n if (parsedRange.from && isDateDisabled(parsedRange.from, minDate, maxDate)) {\n return false;\n }\n if (parsedRange.to && isDateDisabled(parsedRange.to, minDate, maxDate)) {\n return false;\n }\n\n const withTime = (date: Date) =>\n enableTime\n ? applyTimeToDate(date, timeValue.hours, timeValue.minutes)\n : date;\n\n const next: DateRange = {\n from: parsedRange.from ? withTime(parsedRange.from) : undefined,\n to: parsedRange.to ? withTime(parsedRange.to) : undefined,\n };\n setRangeDraftFrom(next.to ? undefined : next.from ? startOfDay(next.from) : undefined);\n commitRange(next);\n const anchor = next.from ?? next.to;\n if (anchor) {\n setViewMonth(new Date(anchor.getFullYear(), anchor.getMonth(), 1));\n setFocusedDay(startOfDay(anchor));\n }\n return true;\n },\n [\n commitRange,\n commitSingle,\n enableTime,\n maxDate,\n minDate,\n mode,\n setTimeValue,\n timeValue.hours,\n timeValue.minutes,\n ]\n );\n\n const selectDate = useCallback(\n (date: Date, options?: { close?: boolean; switchToTime?: boolean }) => {\n if (disabled || isDateDisabled(date, minDate, maxDate)) return;\n const day = startOfDay(date);\n setFocusedDay(day);\n\n if (!isSameMonth(day, viewMonth)) {\n setViewMonth(new Date(day.getFullYear(), day.getMonth(), 1));\n }\n\n const switchToTime = options?.switchToTime ?? enableTime;\n const shouldClose = options?.close ?? !enableTime;\n\n if (mode === \"single\") {\n const next = enableTime\n ? applyTimeToDate(day, timeValue.hours, timeValue.minutes)\n : day;\n commitSingle(next);\n if (switchToTime) {\n setActivePanel(\"time\");\n } else if (shouldClose) {\n handleOpenChange(false);\n }\n return;\n }\n\n const currentFrom = rangeDraftFrom ?? rangeValue.from;\n const currentTo = rangeValue.to;\n const withTime = (d: Date) =>\n enableTime ? applyTimeToDate(d, timeValue.hours, timeValue.minutes) : d;\n\n if (!currentFrom || (currentFrom && currentTo)) {\n setRangeDraftFrom(day);\n commitRange({ from: withTime(day), to: undefined });\n return;\n }\n\n if (isSameDay(day, currentFrom)) {\n commitRange({ from: withTime(day), to: withTime(day) });\n setRangeDraftFrom(undefined);\n if (switchToTime) {\n setActivePanel(\"time\");\n } else if (shouldClose) {\n handleOpenChange(false);\n }\n return;\n }\n\n const normalized = normalizeRange(currentFrom, day);\n commitRange({\n from: normalized.from ? withTime(normalized.from) : undefined,\n to: normalized.to ? withTime(normalized.to) : undefined,\n });\n setRangeDraftFrom(undefined);\n if (switchToTime) {\n setActivePanel(\"time\");\n } else if (shouldClose) {\n handleOpenChange(false);\n }\n },\n [\n commitRange,\n commitSingle,\n disabled,\n enableTime,\n handleOpenChange,\n maxDate,\n minDate,\n mode,\n rangeDraftFrom,\n rangeValue.from,\n rangeValue.to,\n timeValue.hours,\n timeValue.minutes,\n viewMonth,\n ]\n );\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen: handleOpenChange,\n disabled,\n size,\n mode,\n viewMonth,\n setViewMonth,\n singleValue,\n rangeValue:\n mode === \"range\"\n ? rangeDraftFrom\n ? { from: rangeDraftFrom, to: rangeValue.to }\n : rangeValue\n : rangeValue,\n selectDate,\n commitTypedValue,\n minDate,\n maxDate,\n focusedDay,\n setFocusedDay,\n enableTime,\n activePanel,\n setActivePanel,\n timeValue,\n setTimeValue,\n }),\n [\n activePanel,\n commitTypedValue,\n disabled,\n enableTime,\n focusedDay,\n handleOpenChange,\n maxDate,\n minDate,\n mode,\n open,\n rangeDraftFrom,\n rangeValue,\n selectDate,\n singleValue,\n size,\n timeValue,\n setTimeValue,\n viewMonth,\n ]\n );\n\n return (\n <DatePickerProvider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)}>{children}</div>\n </PopoverPrimitive.Root>\n </DatePickerProvider>\n );\n}\n\nexport type DatePickerTriggerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"size\" | \"onChange\"\n> & {\n size?: DatePickerSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n placeholder?: string;\n rangePlaceholder?: string;\n error?: boolean;\n displayValue?: ReactNode;\n rangeSeparator?: string;\n className?: string;\n /** When false, shows a read-only value instead of an editable input. Default true. */\n editable?: boolean;\n};\n\nfunction formatTriggerValue(\n mode: DatePickerMode,\n singleValue: Date | undefined,\n rangeValue: DateRange,\n enableTime: boolean,\n timeValue: DatePickerTimeValue,\n rangeSeparator: string\n): string | null {\n if (mode === \"single\") {\n if (!singleValue) return null;\n return enableTime\n ? formatDisplayDateTime(singleValue, timeValue.hours, timeValue.minutes)\n : formatIsoDate(singleValue);\n }\n\n if (rangeValue.from && rangeValue.to) {\n return enableTime\n ? `${formatDisplayDateTime(rangeValue.from, timeValue.hours, timeValue.minutes)}${rangeSeparator}${formatDisplayDateTime(rangeValue.to, timeValue.hours, timeValue.minutes)}`\n : `${formatIsoDate(rangeValue.from)}${rangeSeparator}${formatIsoDate(rangeValue.to)}`;\n }\n\n if (rangeValue.from) {\n return enableTime\n ? `${formatDisplayDateTime(rangeValue.from, timeValue.hours, timeValue.minutes)}${rangeSeparator}…`\n : `${formatIsoDate(rangeValue.from)}${rangeSeparator}…`;\n }\n\n return null;\n}\n\nexport const DatePickerTrigger = forwardRef<HTMLInputElement, DatePickerTriggerProps>(\n (\n {\n className,\n size: sizeProp,\n allRound = false,\n leftIcon,\n rightIcon,\n placeholder = \"YYYY-MM-DD\",\n rangePlaceholder = \"Start date - End date\",\n error = false,\n displayValue,\n rangeSeparator = \" - \",\n disabled: disabledProp,\n editable = true,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const {\n open,\n setOpen,\n disabled: disabledContext,\n size: sizeContext,\n mode,\n singleValue,\n rangeValue,\n enableTime,\n timeValue,\n commitTypedValue,\n } = useDatePickerContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n const inputRef = useRef<HTMLInputElement>(null);\n const editingRef = useRef(false);\n\n const setInputRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref]\n );\n\n const formatted =\n displayValue ??\n formatTriggerValue(\n mode,\n singleValue,\n rangeValue,\n enableTime,\n timeValue,\n rangeSeparator\n );\n\n const defaultPlaceholder = enableTime ? \"YYYY-MM-DD HH:mm\" : placeholder;\n const emptyPlaceholder = mode === \"range\" ? rangePlaceholder : defaultPlaceholder;\n const formattedText = typeof formatted === \"string\" ? formatted : null;\n const [draft, setDraft] = useState(formattedText ?? \"\");\n\n useEffect(() => {\n if (editingRef.current) return;\n setDraft(formattedText ?? \"\");\n }, [formattedText]);\n\n const commitDraft = useCallback(() => {\n const nextText = draft;\n const ok = commitTypedValue(nextText);\n if (!ok) {\n setDraft(formattedText ?? \"\");\n }\n return ok;\n }, [commitTypedValue, draft, formattedText]);\n\n const openPicker = () => {\n if (disabled) return;\n setOpen(true);\n };\n\n const showEditableInput = editable && displayValue == null;\n\n if (!showEditableInput) {\n const hasValue = formatted != null && formatted !== false;\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\"aviala-datepicker-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n >\n {renderSlotIcon(\n leftIcon ?? <TimeAndDateDate level=\"text\" biggerSize aria-hidden />,\n \"aviala-datepicker-trigger__slot\"\n )}\n <span className=\"aviala-datepicker-trigger__field\">\n <span\n className={cn(\n \"aviala-datepicker-trigger__value\",\n typographyVariants({ level: \"text\" })\n )}\n data-placeholder={hasValue ? undefined : \"true\"}\n >\n {hasValue ? formatted : emptyPlaceholder}\n </span>\n </span>\n {renderSlotIcon(rightIcon, \"aviala-datepicker-trigger__slot\")}\n </button>\n </PopoverPrimitive.Trigger>\n );\n }\n\n return (\n <PopoverPrimitive.Anchor asChild>\n <div\n className={cn(\"aviala-datepicker-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n onMouseDown={(event) => {\n if (disabled) return;\n if (event.target === inputRef.current) return;\n event.preventDefault();\n inputRef.current?.focus();\n openPicker();\n }}\n >\n {renderSlotIcon(\n leftIcon ?? <TimeAndDateDate level=\"text\" biggerSize aria-hidden />,\n \"aviala-datepicker-trigger__slot\"\n )}\n <span className=\"aviala-datepicker-trigger__field\">\n <input\n ref={setInputRefs}\n type=\"text\"\n className={cn(\n \"aviala-datepicker-trigger__input\",\n typographyVariants({ level: \"text\" })\n )}\n value={draft}\n placeholder={emptyPlaceholder}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n autoComplete=\"off\"\n spellCheck={false}\n onChange={(event) => setDraft(event.target.value)}\n onFocus={(event) => {\n editingRef.current = true;\n openPicker();\n onFocus?.(event);\n }}\n onBlur={(event) => {\n editingRef.current = false;\n window.setTimeout(() => {\n const active = document.activeElement;\n if (\n active?.closest(\n \".aviala-datepicker-content, .aviala-datepicker-trigger\"\n )\n ) {\n return;\n }\n commitDraft();\n }, 0);\n onBlur?.(event);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n commitDraft();\n }\n if (event.key === \"Escape\") {\n setDraft(formattedText ?? \"\");\n setOpen(false);\n }\n if (event.key === \"ArrowDown\" && !open) {\n event.preventDefault();\n openPicker();\n }\n onKeyDown?.(event);\n }}\n {...props}\n />\n </span>\n {renderSlotIcon(rightIcon, \"aviala-datepicker-trigger__slot\")}\n </div>\n </PopoverPrimitive.Anchor>\n );\n }\n);\nDatePickerTrigger.displayName = \"DatePickerTrigger\";\n\nexport type DatePickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n portalled?: boolean;\n};\n\nexport const DatePickerContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n DatePickerContentProps\n>(\n (\n {\n className,\n children,\n portalled = true,\n sideOffset = 8,\n align = \"start\",\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n className={cn(\"aviala-datepicker-content\", className)}\n sideOffset={sideOffset}\n align={align}\n {...props}\n >\n {children ?? <DatePickerCalendar />}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nDatePickerContent.displayName = \"DatePickerContent\";\n\nexport type DatePickerCalendarProps = {\n className?: string;\n};\n\nfunction getFooterDateLabel(\n mode: DatePickerMode,\n singleValue: Date | undefined,\n rangeValue: DateRange\n): string {\n if (mode === \"single\") {\n return singleValue ? formatIsoDate(singleValue) : \"选择日期\";\n }\n if (rangeValue.from && rangeValue.to) {\n return `${formatIsoDate(rangeValue.from)} 至 ${formatIsoDate(rangeValue.to)}`;\n }\n if (rangeValue.from) {\n return `${formatIsoDate(rangeValue.from)} 至 …`;\n }\n return \"选择日期范围\";\n}\n\nfunction DatePickerTimePanel() {\n const { timeValue, setTimeValue } = useDatePickerContext();\n\n return <TimePickerWheels value={timeValue} onChange={setTimeValue} />;\n}\n\nfunction DatePickerPanelFooter() {\n const {\n mode,\n singleValue,\n rangeValue,\n enableTime,\n activePanel,\n setActivePanel,\n timeValue,\n } = useDatePickerContext();\n\n if (!enableTime) return null;\n\n const panelValue = activePanel === \"time\" ? \"time\" : \"date\";\n const isRangeMode = mode === \"range\";\n\n return (\n <div className=\"aviala-datepicker-footer-wrap\">\n <SegmentatorGroup\n value={panelValue}\n onValueChange={(value) => setActivePanel(value as DatePickerPanel)}\n mode=\"nested\"\n className=\"aviala-datepicker-footer\"\n data-layout={isRangeMode ? \"range\" : \"single\"}\n data-active-panel={activePanel}\n aria-label=\"日期与时间切换\"\n >\n <SegmentatorItem\n value=\"date\"\n leftIcon={<TimeAndDateDate level=\"text\" biggerSize aria-hidden />}\n iconOnly={isRangeMode && panelValue === \"time\"}\n >\n {getFooterDateLabel(mode, singleValue, rangeValue)}\n </SegmentatorItem>\n <SegmentatorItem\n value=\"time\"\n leftIcon={<TimeAndDateClock level=\"text\" biggerSize aria-hidden />}\n iconOnly={isRangeMode && panelValue === \"date\"}\n >\n {formatTimeValue(timeValue.hours, timeValue.minutes)}\n </SegmentatorItem>\n </SegmentatorGroup>\n </div>\n );\n}\n\ntype MonthSlideDirection = \"prev\" | \"next\";\n\ntype MonthSlideState = {\n direction: MonthSlideDirection;\n outgoingMonth: Date;\n};\n\ntype CalendarContentView = \"date\" | \"month\";\n\ntype ViewCrossfadeState = {\n outgoing: CalendarContentView;\n};\n\ntype PanelKind = \"date\" | \"time\";\n\ntype PanelSlideState = {\n outgoing: PanelKind;\n direction: MonthSlideDirection;\n};\n\nfunction monthDiff(from: Date, to: Date): number {\n return (to.getFullYear() - from.getFullYear()) * 12 + (to.getMonth() - from.getMonth());\n}\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\nexport function DatePickerCalendar({ className }: DatePickerCalendarProps) {\n const calendarId = useId();\n const {\n mode,\n viewMonth,\n setViewMonth,\n singleValue,\n rangeValue,\n selectDate,\n minDate,\n maxDate,\n focusedDay,\n setFocusedDay,\n activePanel,\n setActivePanel,\n enableTime,\n } = useDatePickerContext();\n\n const today = useMemo(() => startOfDay(new Date()), []);\n const days = useMemo(() => getCalendarDays(viewMonth), [viewMonth]);\n const prevViewMonthRef = useRef(viewMonth);\n const dayGridRef = useRef<HTMLDivElement>(null);\n const pendingDayFocusRef = useRef(false);\n const [monthSlide, setMonthSlide] = useState<MonthSlideState | null>(null);\n const isMonthPanel = activePanel === \"month\";\n const isTimePanel = activePanel === \"time\" && enableTime;\n const targetContentView: CalendarContentView = isMonthPanel ? \"month\" : \"date\";\n const [contentView, setContentView] = useState<CalendarContentView>(targetContentView);\n const [viewCrossfade, setViewCrossfade] = useState<ViewCrossfadeState | null>(null);\n const [monthWheelLayoutKey, setMonthWheelLayoutKey] = useState(0);\n const contentViewRef = useRef(contentView);\n contentViewRef.current = contentView;\n\n const targetPanel: PanelKind = isTimePanel ? \"time\" : \"date\";\n const [panel, setPanel] = useState<PanelKind>(targetPanel);\n const [panelSlide, setPanelSlide] = useState<PanelSlideState | null>(null);\n const panelRef = useRef(panel);\n panelRef.current = panel;\n\n useLayoutEffect(() => {\n const previous = panelRef.current;\n if (targetPanel === previous) return;\n if (prefersReducedMotion()) {\n setPanel(targetPanel);\n setPanelSlide(null);\n panelRef.current = targetPanel;\n return;\n }\n setPanelSlide({\n outgoing: previous,\n direction: targetPanel === \"time\" ? \"next\" : \"prev\",\n });\n setPanel(targetPanel);\n panelRef.current = targetPanel;\n }, [targetPanel]);\n\n useLayoutEffect(() => {\n const previous = contentViewRef.current;\n if (targetContentView === previous) return;\n if (prefersReducedMotion()) {\n setContentView(targetContentView);\n setViewCrossfade(null);\n contentViewRef.current = targetContentView;\n return;\n }\n setViewCrossfade({ outgoing: previous });\n setContentView(targetContentView);\n contentViewRef.current = targetContentView;\n }, [targetContentView]);\n\n useLayoutEffect(() => {\n const previous = prevViewMonthRef.current;\n const diff = monthDiff(previous, viewMonth);\n prevViewMonthRef.current = viewMonth;\n if (diff === 0 || prefersReducedMotion() || contentView === \"month\" || panel === \"time\") {\n setMonthSlide(null);\n return;\n }\n setMonthSlide({\n direction: diff > 0 ? \"next\" : \"prev\",\n outgoingMonth: previous,\n });\n }, [contentView, panel, viewMonth]);\n\n useLayoutEffect(() => {\n if (!pendingDayFocusRef.current || !focusedDay) return;\n const grid = dayGridRef.current;\n if (!grid) return;\n const target = grid.querySelector<HTMLButtonElement>(\n `button[data-day=\"${formatIsoDate(focusedDay)}\"]`\n );\n if (!target || target.disabled) return;\n pendingDayFocusRef.current = false;\n target.focus();\n }, [focusedDay, days, monthSlide]);\n\n const outgoingDays = useMemo(\n () => (monthSlide ? getCalendarDays(monthSlide.outgoingMonth) : null),\n [monthSlide]\n );\n\n const handleDayKeyDown = (event: KeyboardEvent<HTMLButtonElement>, date: Date) => {\n let deltaDays = 0;\n switch (event.key) {\n case \"ArrowLeft\":\n deltaDays = -1;\n break;\n case \"ArrowRight\":\n deltaDays = 1;\n break;\n case \"ArrowUp\":\n deltaDays = -7;\n break;\n case \"ArrowDown\":\n deltaDays = 7;\n break;\n case \"Home\":\n case \"End\":\n case \"PageUp\":\n case \"PageDown\":\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n selectDate(date);\n return;\n default:\n return;\n }\n\n event.preventDefault();\n\n let next: Date;\n if (event.key === \"Home\") {\n next = new Date(date.getFullYear(), date.getMonth(), 1);\n } else if (event.key === \"End\") {\n next = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n } else if (event.key === \"PageUp\") {\n next = addMonths(date, event.shiftKey ? -12 : -1);\n } else if (event.key === \"PageDown\") {\n next = addMonths(date, event.shiftKey ? 12 : 1);\n } else {\n next = new Date(date);\n next.setDate(next.getDate() + deltaDays);\n // Skip disabled days while moving in the same direction\n let guard = 0;\n while (isDateDisabled(next, minDate, maxDate) && guard < 366) {\n next.setDate(next.getDate() + (deltaDays > 0 ? 1 : -1));\n guard += 1;\n }\n }\n\n const normalized = startOfDay(next);\n if (isDateDisabled(normalized, minDate, maxDate)) return;\n\n pendingDayFocusRef.current = true;\n if (mode === \"single\") {\n selectDate(normalized, { close: false, switchToTime: false });\n return;\n }\n\n setFocusedDay(normalized);\n if (!isSameMonth(normalized, viewMonth)) {\n setViewMonth(new Date(normalized.getFullYear(), normalized.getMonth(), 1));\n }\n };\n\n const stepMonth = isMonthPanel ? 12 : 1;\n\n const renderDateContent = () => (\n <>\n <div className=\"aviala-datepicker-calendar__weekdays\" aria-hidden>\n {WEEKDAY_LABELS.map((label) => (\n <span\n key={label}\n className={cn(\n \"aviala-datepicker-calendar__weekday\",\n typographyVariants({ level: \"caption\" })\n )}\n >\n {label}\n </span>\n ))}\n </div>\n\n <div className=\"aviala-datepicker-calendar__grid-viewport\">\n {monthSlide && outgoingDays ? (\n <div\n key={`out-${monthSlide.outgoingMonth.getFullYear()}-${monthSlide.outgoingMonth.getMonth()}`}\n className=\"aviala-datepicker-calendar__grid\"\n data-slide-role=\"exit\"\n data-slide={monthSlide.direction}\n aria-hidden\n >\n {outgoingDays.map((day) => {\n const outside = !isSameMonth(day, monthSlide.outgoingMonth);\n return (\n <span\n key={day.toISOString()}\n className=\"aviala-datepicker-day\"\n data-outside={outside ? \"true\" : undefined}\n >\n <span\n className={cn(\n \"aviala-datepicker-day__label\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {day.getDate()}\n </span>\n </span>\n );\n })}\n </div>\n ) : null}\n\n <div\n ref={dayGridRef}\n key={`in-${viewMonth.getFullYear()}-${viewMonth.getMonth()}`}\n className=\"aviala-datepicker-calendar__grid\"\n role=\"grid\"\n aria-labelledby={`${calendarId}-label`}\n data-slide-role={monthSlide ? \"enter\" : undefined}\n data-slide={monthSlide?.direction}\n onAnimationEnd={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.currentTarget.dataset.slideRole === \"enter\") {\n setMonthSlide(null);\n }\n }}\n >\n {days.map((day) => {\n const outside = !isSameMonth(day, viewMonth);\n const rangePos: RangeSelectionPosition =\n mode === \"range\"\n ? getRangeSelectionPosition(day, rangeValue.from, rangeValue.to)\n : singleValue && isSameDay(day, singleValue)\n ? \"single\"\n : \"none\";\n const selected = rangePos !== \"none\";\n const inRange =\n mode === \"range\" && isDateInRange(day, rangeValue.from, rangeValue.to);\n const isToday = isSameDay(day, today);\n const dayDisabled = isDateDisabled(day, minDate, maxDate);\n const focused = focusedDay ? isSameDay(day, focusedDay) : false;\n const dayKey = formatIsoDate(day);\n\n return (\n <button\n key={dayKey}\n type=\"button\"\n role=\"gridcell\"\n data-day={dayKey}\n tabIndex={focused || (!focusedDay && isToday) ? 0 : -1}\n className=\"aviala-datepicker-day aviala-focus-ring\"\n data-outside={outside ? \"true\" : undefined}\n data-selected={selected ? \"true\" : undefined}\n data-in-range={inRange && !selected ? \"true\" : undefined}\n data-range-pos={rangePos !== \"none\" ? rangePos : undefined}\n data-today={isToday ? \"true\" : undefined}\n data-disabled={dayDisabled ? \"true\" : undefined}\n aria-label={formatDisplayDate(day)}\n aria-selected={selected || undefined}\n aria-disabled={dayDisabled || undefined}\n disabled={dayDisabled}\n onClick={() => selectDate(day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(event) => handleDayKeyDown(event, day)}\n >\n <span\n className={cn(\n \"aviala-datepicker-day__label\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {day.getDate()}\n </span>\n {isToday ? (\n <span className=\"aviala-datepicker-day__today-dot\" aria-hidden />\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n </>\n );\n\n const renderContentView = (view: CalendarContentView) =>\n view === \"month\" ? (\n <DatePickerMonthYearWheels layoutKey={monthWheelLayoutKey} />\n ) : (\n renderDateContent()\n );\n\n const renderDatePanel = () => (\n <>\n <div className=\"aviala-datepicker-calendar__header\">\n <button\n type=\"button\"\n className=\"aviala-datepicker-calendar__nav aviala-focus-ring\"\n aria-label={isMonthPanel ? \"Previous year\" : \"Previous month\"}\n onClick={() => setViewMonth(addMonths(viewMonth, -stepMonth))}\n >\n <DirectionArrowLeft level=\"text\" biggerSize aria-hidden />\n </button>\n <button\n type=\"button\"\n id={`${calendarId}-label`}\n className={cn(\n \"aviala-datepicker-calendar__title aviala-focus-ring\",\n typographyVariants({ level: \"subtitle\" })\n )}\n data-active={isMonthPanel ? \"true\" : undefined}\n aria-expanded={isMonthPanel}\n aria-label={isMonthPanel ? \"关闭年月选择\" : \"选择年月\"}\n onClick={() => setActivePanel(isMonthPanel ? \"date\" : \"month\")}\n >\n <span\n key={`${viewMonth.getFullYear()}-${viewMonth.getMonth()}`}\n className=\"aviala-datepicker-calendar__title-text\"\n data-slide={isMonthPanel ? undefined : monthSlide?.direction}\n >\n {formatMonthYear(viewMonth)}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"aviala-datepicker-calendar__nav aviala-focus-ring\"\n aria-label={isMonthPanel ? \"Next year\" : \"Next month\"}\n onClick={() => setViewMonth(addMonths(viewMonth, stepMonth))}\n >\n <DirectionArrowRight level=\"text\" biggerSize aria-hidden />\n </button>\n </div>\n\n <div className=\"aviala-datepicker-calendar__view-viewport\">\n {viewCrossfade ? (\n <div\n key={`exit-${viewCrossfade.outgoing}`}\n className=\"aviala-datepicker-calendar__view\"\n data-view-role=\"exit\"\n data-view={viewCrossfade.outgoing}\n aria-hidden\n >\n {renderContentView(viewCrossfade.outgoing)}\n </div>\n ) : null}\n <div\n key={`enter-${contentView}`}\n className=\"aviala-datepicker-calendar__view\"\n data-view-role={viewCrossfade ? \"enter\" : undefined}\n data-view={contentView}\n onAnimationEnd={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.currentTarget.dataset.viewRole === \"enter\") {\n setViewCrossfade(null);\n if (contentView === \"month\") {\n setMonthWheelLayoutKey((key) => key + 1);\n }\n }\n }}\n >\n {renderContentView(contentView)}\n </div>\n </div>\n </>\n );\n\n const renderPanel = (kind: PanelKind) =>\n kind === \"time\" ? <DatePickerTimePanel /> : renderDatePanel();\n\n return (\n <div\n className={cn(\"aviala-datepicker-calendar\", className)}\n role=\"application\"\n aria-label=\"Calendar\"\n >\n <div className=\"aviala-datepicker-calendar__panel-viewport\">\n {panelSlide ? (\n <div\n key={`panel-exit-${panelSlide.outgoing}`}\n className=\"aviala-datepicker-calendar__panel aviala-datepicker-calendar__body\"\n data-panel-role=\"exit\"\n data-slide={panelSlide.direction}\n data-panel={panelSlide.outgoing}\n aria-hidden\n >\n {renderPanel(panelSlide.outgoing)}\n </div>\n ) : null}\n <div\n key={`panel-enter-${panel}`}\n className=\"aviala-datepicker-calendar__panel aviala-datepicker-calendar__body\"\n data-panel-role={panelSlide ? \"enter\" : undefined}\n data-slide={panelSlide?.direction}\n data-panel={panel}\n onAnimationEnd={(event) => {\n if (event.target !== event.currentTarget) return;\n if (event.currentTarget.dataset.panelRole === \"enter\") {\n setPanelSlide(null);\n }\n }}\n >\n {renderPanel(panel)}\n </div>\n </div>\n\n <DatePickerPanelFooter />\n </div>\n );\n}\n\nexport type DatePickerFieldProps = Omit<DatePickerTriggerProps, \"displayValue\"> & {\n contentClassName?: string;\n calendarClassName?: string;\n mode?: DatePickerMode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: DatePickerSize;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n value?: Date | DateRange;\n defaultValue?: Date | DateRange;\n onValueChange?: ((value: Date | undefined) => void) | ((value: DateRange) => void);\n enableTime?: boolean;\n timeValue?: DatePickerTimeValue;\n defaultTimeValue?: DatePickerTimeValue;\n onTimeChange?: (value: DatePickerTimeValue) => void;\n};\n\n/** Convenience field — trigger + calendar panel. */\nexport function DatePickerField({\n contentClassName,\n calendarClassName,\n className,\n size = \"regular\",\n mode = \"single\",\n allRound,\n leftIcon,\n rightIcon,\n placeholder,\n rangePlaceholder,\n error,\n rangeSeparator,\n editable,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n minDate,\n maxDate,\n enableTime = true,\n timeValue,\n defaultTimeValue,\n onTimeChange,\n}: DatePickerFieldProps) {\n const pickerProps =\n mode === \"range\"\n ? {\n mode: \"range\" as const,\n value: value as DateRange | undefined,\n defaultValue: defaultValue as DateRange | undefined,\n onValueChange: onValueChange as ((value: DateRange) => void) | undefined,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n minDate,\n maxDate,\n enableTime,\n timeValue,\n defaultTimeValue,\n onTimeChange,\n }\n : {\n mode: \"single\" as const,\n value: value as Date | undefined,\n defaultValue: defaultValue as Date | undefined,\n onValueChange: onValueChange as ((value: Date | undefined) => void) | undefined,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n minDate,\n maxDate,\n enableTime,\n timeValue,\n defaultTimeValue,\n onTimeChange,\n };\n\n return (\n <DatePicker {...pickerProps} size={size} className={className}>\n <DatePickerTrigger\n size={size}\n allRound={allRound}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n placeholder={placeholder}\n rangePlaceholder={rangePlaceholder}\n error={error}\n rangeSeparator={rangeSeparator}\n editable={editable}\n />\n <DatePickerContent className={contentClassName}>\n <DatePickerCalendar className={calendarClassName} />\n </DatePickerContent>\n </DatePicker>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\n\nimport type { DateRange } from \"./date-utils\";\n\n/** Figma Components → Information Collect → DatePicker Input */\nexport type DatePickerSize = \"regular\" | \"big\";\nexport type DatePickerMode = \"single\" | \"range\";\nexport type DatePickerPanel = \"date\" | \"time\" | \"month\";\nexport type DatePickerTimeValue = { hours: number; minutes: number };\n\nexport type DatePickerContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n disabled?: boolean;\n size: DatePickerSize;\n mode: DatePickerMode;\n viewMonth: Date;\n setViewMonth: (month: Date) => void;\n singleValue?: Date;\n rangeValue: DateRange;\n selectDate: (date: Date, options?: { close?: boolean; switchToTime?: boolean }) => void;\n commitTypedValue: (text: string) => boolean;\n minDate?: Date;\n maxDate?: Date;\n focusedDay: Date | null;\n setFocusedDay: (date: Date | null) => void;\n enableTime: boolean;\n activePanel: DatePickerPanel;\n setActivePanel: (panel: DatePickerPanel) => void;\n timeValue: DatePickerTimeValue;\n setTimeValue: (value: DatePickerTimeValue) => void;\n};\n\nconst DatePickerContext = createContext<DatePickerContextValue | null>(null);\n\nexport function DatePickerProvider({\n value,\n children,\n}: {\n value: DatePickerContextValue;\n children: ReactNode;\n}) {\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nexport function useDatePickerContext() {\n const context = useContext(DatePickerContext);\n if (!context) {\n throw new Error(\"DatePicker compound components must be used within DatePicker.\");\n }\n return context;\n}\n","/** Calendar helpers — no external date library. */\n\nexport type DateRange = {\n from?: Date;\n to?: Date;\n};\n\nexport const WEEKDAY_LABELS = [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"] as const;\n\nexport type RangeSelectionPosition = \"none\" | \"single\" | \"head\" | \"middle\" | \"last\";\n\nexport function startOfDay(date: Date): Date {\n const copy = new Date(date);\n copy.setHours(0, 0, 0, 0);\n return copy;\n}\n\n/** Merge calendar day with hours/minutes into a single Date. */\nexport function applyTimeToDate(\n date: Date,\n hours: number,\n minutes: number\n): Date {\n const next = startOfDay(date);\n next.setHours(hours, minutes, 0, 0);\n return next;\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nexport function addMonths(date: Date, count: number): Date {\n const next = new Date(date);\n next.setDate(1);\n next.setMonth(next.getMonth() + count);\n return next;\n}\n\nexport function addDays(date: Date, count: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + count);\n return startOfDay(next);\n}\n\nexport function getCalendarDays(month: Date): Date[] {\n const year = month.getFullYear();\n const monthIndex = month.getMonth();\n const firstDay = new Date(year, monthIndex, 1);\n const lastDay = new Date(year, monthIndex + 1, 0);\n /** Figma DateButtonGrid — week starts on Monday */\n const startOffset = (firstDay.getDay() + 6) % 7;\n const days: Date[] = [];\n\n for (let index = startOffset - 1; index >= 0; index -= 1) {\n days.push(new Date(year, monthIndex, -index));\n }\n\n for (let day = 1; day <= lastDay.getDate(); day += 1) {\n days.push(new Date(year, monthIndex, day));\n }\n\n while (days.length < 42) {\n const nextDay = days.length - startOffset - lastDay.getDate() + 1;\n days.push(new Date(year, monthIndex + 1, nextDay));\n }\n\n return days;\n}\n\nexport function formatDisplayDate(date: Date, locale = \"en-US\"): string {\n return new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n }).format(date);\n}\n\n/** Figma DatePicker footer / trigger — `YYYY-MM-DD` */\nexport function formatIsoDate(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nexport function formatDisplayDateTime(\n date: Date,\n hours: number,\n minutes: number\n): string {\n return `${formatIsoDate(date)} ${formatTimeValue(hours, minutes)}`;\n}\n\nexport function formatMonthYear(date: Date, locale = \"zh-CN\"): string {\n return new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"long\",\n }).format(date);\n}\n\nexport function formatTimeValue(hours: number, minutes: number): string {\n return `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}`;\n}\n\nexport function getRangeSelectionPosition(\n day: Date,\n from?: Date,\n to?: Date\n): RangeSelectionPosition {\n if (!from) return \"none\";\n\n const dayNorm = startOfDay(day);\n\n if (!to) {\n return isSameDay(dayNorm, from) ? \"single\" : \"none\";\n }\n\n if (!isDateInRange(dayNorm, from, to)) return \"none\";\n\n const normalized = normalizeRange(from, to);\n const rangeStart = startOfDay(normalized.from!);\n const rangeEnd = startOfDay(normalized.to!);\n\n if (isSameDay(rangeStart, rangeEnd)) return \"single\";\n\n /** Figma DateButton — per-row Head/Middle/Last with row-break rounding */\n const weekCol = (dayNorm.getDay() + 6) % 7;\n const prevInRange = isDateInRange(addDays(dayNorm, -1), rangeStart, rangeEnd);\n const nextInRange = isDateInRange(addDays(dayNorm, 1), rangeStart, rangeEnd);\n const isVisualStart = !prevInRange || weekCol === 0;\n const isVisualEnd = !nextInRange || weekCol === 6;\n\n if (isVisualStart && isVisualEnd) return \"single\";\n if (isVisualStart) return \"head\";\n if (isVisualEnd) return \"last\";\n return \"middle\";\n}\n\nexport function isDateInRange(date: Date, from?: Date, to?: Date): boolean {\n if (!from) return false;\n const time = startOfDay(date).getTime();\n const fromTime = startOfDay(from).getTime();\n if (!to) return time === fromTime;\n const toTime = startOfDay(to).getTime();\n const min = Math.min(fromTime, toTime);\n const max = Math.max(fromTime, toTime);\n return time >= min && time <= max;\n}\n\nexport function isRangeStart(date: Date, from?: Date, to?: Date): boolean {\n if (!from) return false;\n if (!to) return isSameDay(date, from);\n const start = startOfDay(from).getTime() <= startOfDay(to).getTime() ? from : to;\n return isSameDay(date, start);\n}\n\nexport function isRangeEnd(date: Date, from?: Date, to?: Date): boolean {\n if (!from || !to) return false;\n const end = startOfDay(from).getTime() <= startOfDay(to).getTime() ? to : from;\n return isSameDay(date, end);\n}\n\nexport function isDateDisabled(date: Date, minDate?: Date, maxDate?: Date): boolean {\n const time = startOfDay(date).getTime();\n if (minDate && time < startOfDay(minDate).getTime()) return true;\n if (maxDate && time > startOfDay(maxDate).getTime()) return true;\n return false;\n}\n\nexport function normalizeRange(from: Date, to: Date): DateRange {\n if (startOfDay(from).getTime() <= startOfDay(to).getTime()) {\n return { from, to };\n }\n return { from: to, to: from };\n}\n\nexport type ParsedDateInput = {\n date: Date;\n hours?: number;\n minutes?: number;\n};\n\nfunction isValidYmd(year: number, month: number, day: number): boolean {\n if (month < 1 || month > 12 || day < 1 || day > 31) return false;\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n}\n\nfunction parseTimeFragment(\n hoursText?: string,\n minutesText?: string\n): { hours: number; minutes: number } | undefined {\n if (hoursText == null || minutesText == null) return undefined;\n const hours = Number(hoursText);\n const minutes = Number(minutesText);\n if (\n !Number.isInteger(hours) ||\n !Number.isInteger(minutes) ||\n hours < 0 ||\n hours > 23 ||\n minutes < 0 ||\n minutes > 59\n ) {\n return undefined;\n }\n return { hours, minutes };\n}\n\n/** Parse typed date strings: `YYYY-MM-DD`, `YYYY/MM/DD`, `YYYY.MM.DD`, optional `HH:mm`. */\nexport function parseDateInput(text: string): ParsedDateInput | null {\n const trimmed = text.trim();\n if (!trimmed) return null;\n\n const ymd = trimmed.match(\n /^(\\d{4})[-/.](\\d{1,2})[-/.](\\d{1,2})(?:[ T](\\d{1,2}):(\\d{2}))?$/\n );\n if (ymd) {\n const year = Number(ymd[1]);\n const month = Number(ymd[2]);\n const day = Number(ymd[3]);\n if (!isValidYmd(year, month, day)) return null;\n const time = parseTimeFragment(ymd[4], ymd[5]);\n if (ymd[4] != null && !time) return null;\n return {\n date: startOfDay(new Date(year, month - 1, day)),\n hours: time?.hours,\n minutes: time?.minutes,\n };\n }\n\n const mdy = trimmed.match(\n /^(\\d{1,2})[-/.](\\d{1,2})[-/.](\\d{4})(?:[ T](\\d{1,2}):(\\d{2}))?$/\n );\n if (mdy) {\n const month = Number(mdy[1]);\n const day = Number(mdy[2]);\n const year = Number(mdy[3]);\n if (!isValidYmd(year, month, day)) return null;\n const time = parseTimeFragment(mdy[4], mdy[5]);\n if (mdy[4] != null && !time) return null;\n return {\n date: startOfDay(new Date(year, month - 1, day)),\n hours: time?.hours,\n minutes: time?.minutes,\n };\n }\n\n return null;\n}\n\nconst RANGE_SEPARATOR = /\\s*(?:-|~|—|–|至)\\s*/;\n\n/** Parse range text like `2026-07-01 - 2026-07-15` or `2026/07/01 至 2026/07/15`. */\nexport function parseDateRangeInput(text: string): DateRange | null {\n const trimmed = text.trim();\n if (!trimmed) return { from: undefined, to: undefined };\n\n const parts = trimmed.split(RANGE_SEPARATOR).filter(Boolean);\n if (parts.length === 1) {\n const parsed = parseDateInput(parts[0]);\n if (!parsed) return null;\n return { from: parsed.date, to: undefined };\n }\n if (parts.length !== 2) return null;\n\n const fromParsed = parseDateInput(parts[0]);\n const toParsed = parseDateInput(parts[1]);\n if (!fromParsed || !toParsed) return null;\n return normalizeRange(fromParsed.date, toParsed.date);\n}\n","import { useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useDatePickerContext } from \"./date-picker-context\";\nimport { DatePickerTimeWheelColumn } from \"./date-picker-time-wheel\";\n\nconst MONTH_VALUES = Array.from({ length: 12 }, (_, index) => index + 1);\n\nfunction formatYearValue(value: number): string {\n return String(value);\n}\n\nfunction formatMonthValue(value: number): string {\n return String(value);\n}\n\ntype DatePickerMonthYearWheelsProps = {\n className?: string;\n /** Bump after view enter animation so wheels re-sync to the current month. */\n layoutKey?: number;\n};\n\nexport function DatePickerMonthYearWheels({\n className,\n layoutKey = 0,\n}: DatePickerMonthYearWheelsProps) {\n const { viewMonth, setViewMonth, minDate, maxDate } = useDatePickerContext();\n const year = viewMonth.getFullYear();\n const month = viewMonth.getMonth() + 1;\n\n const yearValues = useMemo(() => {\n const currentYear = new Date().getFullYear();\n const start = minDate?.getFullYear() ?? currentYear - 100;\n const end = maxDate?.getFullYear() ?? currentYear + 100;\n const length = Math.max(end - start + 1, 1);\n return Array.from({ length }, (_, index) => start + index);\n }, [maxDate, minDate]);\n\n const setYearMonth = (nextYear: number, nextMonth: number) => {\n setViewMonth(new Date(nextYear, nextMonth - 1, 1));\n };\n\n return (\n <div\n className={cn(\"aviala-datepicker-month\", className)}\n role=\"group\"\n aria-label=\"选择年月\"\n >\n <div className=\"aviala-datepicker-month__columns\">\n <DatePickerTimeWheelColumn\n aria-label=\"年\"\n values={yearValues}\n value={year}\n loop={false}\n layoutKey={layoutKey}\n formatValue={formatYearValue}\n onChange={(nextYear) => setYearMonth(nextYear, month)}\n />\n <DatePickerTimeWheelColumn\n aria-label=\"月\"\n values={MONTH_VALUES}\n value={month}\n loop={false}\n layoutKey={layoutKey}\n formatValue={formatMonthValue}\n onChange={(nextMonth) => setYearMonth(year, nextMonth)}\n />\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n type KeyboardEvent,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n stickyRoundIndex,\n WHEEL_SCROLL_END_MS,\n WHEEL_STEP_THRESHOLD_FACTOR,\n WHEEL_STICKY_AMOUNT,\n} from \"../../lib/sticky-wheel\";\nimport { typographyVariants } from \"../typography\";\n\nconst LOOP_SECTIONS = 3;\nconst MIDDLE_SECTION = 1;\n\ntype DatePickerTimeWheelColumnProps = {\n values: readonly number[];\n value: number;\n onChange: (value: number) => void;\n \"aria-label\": string;\n loop?: boolean;\n className?: string;\n formatValue?: (value: number) => string;\n /** Bump to force a scroll re-sync after layout/animation settles. */\n layoutKey?: number;\n};\n\nfunction formatWheelValue(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nfunction normalizeIndex(index: number, length: number): number {\n return ((index % length) + length) % length;\n}\n\nfunction getValueIndex(values: readonly number[], value: number): number {\n const index = values.indexOf(value);\n if (index >= 0) return index;\n\n let nearestIndex = 0;\n let smallestDistance = Number.POSITIVE_INFINITY;\n\n values.forEach((candidate, candidateIndex) => {\n const distance = Math.abs(candidate - value);\n if (distance < smallestDistance) {\n smallestDistance = distance;\n nearestIndex = candidateIndex;\n }\n });\n\n return nearestIndex;\n}\n\nfunction readItemHeight(container: HTMLElement): number {\n const item = container.querySelector<HTMLElement>(\".aviala-datepicker-time__wheel-item\");\n if (item) {\n // Prefer offsetHeight — getBoundingClientRect is skewed by ancestor\n // transforms (e.g. date ↔ month view enter scale animation).\n const layoutHeight = item.offsetHeight;\n if (layoutHeight > 0) return layoutHeight;\n }\n\n const style = getComputedStyle(container);\n const token = style.getPropertyValue(\"--datepicker-time-wheel-item-height\").trim();\n const parsed = parseFloat(token);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 36;\n}\n\nexport function DatePickerTimeWheelColumn({\n values,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n loop = true,\n className,\n formatValue = formatWheelValue,\n /** Bump to force a scroll re-sync after layout/animation settles. */\n layoutKey = 0,\n}: DatePickerTimeWheelColumnProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const isProgrammaticScrollRef = useRef(false);\n /** When set, value-driven auto sync must not cancel an in-flight smooth scroll. */\n const smoothTargetValueRef = useRef<number | null>(null);\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const wheelAccumRef = useRef(0);\n const selectedValueRef = useRef(value);\n\n selectedValueRef.current = value;\n\n const repeatedValues = useMemo(() => {\n if (!loop) return [...values];\n return Array.from({ length: LOOP_SECTIONS }, () => values).flat();\n }, [loop, values]);\n\n const scrollToIndex = useCallback(\n (index: number, behavior: ScrollBehavior = \"auto\") => {\n const container = scrollRef.current;\n if (!container) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n isProgrammaticScrollRef.current = true;\n container.scrollTo({ top: index * itemHeight, behavior });\n },\n []\n );\n\n const scrollToValue = useCallback(\n (nextValue: number, behavior: ScrollBehavior = \"smooth\") => {\n if (behavior === \"smooth\") {\n smoothTargetValueRef.current = nextValue;\n } else {\n smoothTargetValueRef.current = null;\n }\n const valueIndex = getValueIndex(values, nextValue);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n scrollToIndex(targetIndex, behavior);\n },\n [loop, scrollToIndex, values]\n );\n\n const syncScrollToValue = useCallback(\n (behavior: ScrollBehavior = \"auto\") => {\n if (isUserScrollingRef.current) return;\n // Click/keyboard already started a smooth scroll to this value — don't snap.\n if (\n behavior === \"auto\" &&\n smoothTargetValueRef.current != null &&\n smoothTargetValueRef.current === selectedValueRef.current\n ) {\n return;\n }\n\n const container = scrollRef.current;\n if (!container) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n const valueIndex = getValueIndex(values, selectedValueRef.current);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const currentIndex = Math.round(container.scrollTop / itemHeight);\n const currentValueIndex = loop\n ? normalizeIndex(currentIndex, values.length)\n : Math.min(Math.max(currentIndex, 0), values.length - 1);\n const inMiddleSection =\n !loop || Math.floor(currentIndex / values.length) === MIDDLE_SECTION;\n\n if (currentValueIndex === valueIndex && inMiddleSection) return;\n scrollToIndex(targetIndex, behavior);\n },\n [loop, scrollToIndex, values]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container || isProgrammaticScrollRef.current) {\n isProgrammaticScrollRef.current = false;\n smoothTargetValueRef.current = null;\n return;\n }\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0 || values.length === 0) return;\n\n const lastIndex = values.length - 1;\n const maxScroll = Math.max(container.scrollHeight - container.clientHeight, 0);\n const fractionalIndex = container.scrollTop / itemHeight;\n let rawIndex = stickyRoundIndex(fractionalIndex, WHEEL_STICKY_AMOUNT);\n\n if (!loop) {\n // Trailing spacer may be a hair short — pin ends to first/last.\n if (container.scrollTop >= maxScroll - 1) {\n rawIndex = lastIndex;\n } else if (container.scrollTop <= 1) {\n rawIndex = 0;\n }\n }\n\n const valueIndex = loop\n ? normalizeIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const targetTop = targetIndex * itemHeight;\n const section = loop ? Math.floor(rawIndex / values.length) : MIDDLE_SECTION;\n const needsLoopRecenter = loop && section !== MIDDLE_SECTION;\n const needsSnap = Math.abs(container.scrollTop - targetTop) > 1;\n\n if (needsLoopRecenter) {\n // Invisible section wrap — keep instant so the list doesn't fly through copies.\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n } else if (needsSnap) {\n isProgrammaticScrollRef.current = true;\n smoothTargetValueRef.current = nextValue;\n container.scrollTo({ top: targetTop, behavior: \"smooth\" });\n }\n\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n\n if (!needsSnap) {\n smoothTargetValueRef.current = null;\n }\n isUserScrollingRef.current = false;\n wheelAccumRef.current = 0;\n }, [loop, onChange, values]);\n\n const handleScroll = useCallback(() => {\n if (isProgrammaticScrollRef.current) return;\n isUserScrollingRef.current = true;\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n scrollEndTimerRef.current = setTimeout(settleScroll, WHEEL_SCROLL_END_MS);\n }, [settleScroll]);\n\n useLayoutEffect(() => {\n syncScrollToValue(\"auto\");\n const raf = requestAnimationFrame(() => {\n syncScrollToValue(\"auto\");\n });\n return () => cancelAnimationFrame(raf);\n }, [layoutKey, syncScrollToValue, value]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onScrollEnd = () => {\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n settleScroll();\n };\n\n container.addEventListener(\"scrollend\", onScrollEnd);\n\n const resizeObserver = new ResizeObserver(() => {\n syncScrollToValue(\"auto\");\n });\n resizeObserver.observe(container);\n\n return () => {\n container.removeEventListener(\"scrollend\", onScrollEnd);\n resizeObserver.disconnect();\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n };\n }, [settleScroll, syncScrollToValue]);\n\n // Sticky mouse-wheel: require clearer intent to leave the current item, then\n // animate one step (finger drag still uses CSS snap + smooth settle).\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n if (isProgrammaticScrollRef.current || values.length === 0) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n wheelAccumRef.current += event.deltaY;\n const threshold = itemHeight * WHEEL_STEP_THRESHOLD_FACTOR;\n if (Math.abs(wheelAccumRef.current) < threshold) return;\n\n const direction = wheelAccumRef.current > 0 ? 1 : -1;\n wheelAccumRef.current = 0;\n\n const currentIndex = getValueIndex(values, selectedValueRef.current);\n const nextIndex = loop\n ? normalizeIndex(currentIndex + direction, values.length)\n : Math.min(Math.max(currentIndex + direction, 0), values.length - 1);\n if (nextIndex === currentIndex) return;\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[nextIndex];\n isUserScrollingRef.current = false;\n scrollToValue(nextValue, \"smooth\");\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n };\n\n container.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n container.removeEventListener(\"wheel\", onWheel);\n };\n }, [loop, onChange, scrollToValue, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const currentIndex = getValueIndex(values, selectedValueRef.current);\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case \"ArrowUp\":\n nextIndex = loop\n ? normalizeIndex(currentIndex - 1, values.length)\n : Math.max(currentIndex - 1, 0);\n break;\n case \"ArrowDown\":\n nextIndex = loop\n ? normalizeIndex(currentIndex + 1, values.length)\n : Math.min(currentIndex + 1, values.length - 1);\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const nextValue = values[nextIndex];\n scrollToValue(nextValue, \"smooth\");\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n };\n\n const selectedOptionId = loop\n ? `${ariaLabel}-${value}-${values.length * MIDDLE_SECTION + getValueIndex(values, value)}`\n : `${ariaLabel}-${value}`;\n\n return (\n <div className={cn(\"aviala-datepicker-time__wheel\", className)}>\n <div className=\"aviala-datepicker-time__wheel-highlight\" aria-hidden />\n <div\n className=\"aviala-datepicker-time__wheel-fade aviala-datepicker-time__wheel-fade--top\"\n aria-hidden\n />\n <div\n className=\"aviala-datepicker-time__wheel-fade aviala-datepicker-time__wheel-fade--bottom\"\n aria-hidden\n />\n <div\n ref={scrollRef}\n className=\"aviala-datepicker-time__wheel-scroll aviala-focus-ring\"\n onScroll={handleScroll}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-activedescendant={selectedOptionId}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n >\n <ul className=\"aviala-datepicker-time__wheel-list\">\n {repeatedValues.map((itemValue, index) => {\n const isSelected = itemValue === value;\n const optionId = loop ? `${ariaLabel}-${itemValue}-${index}` : `${ariaLabel}-${itemValue}`;\n\n return (\n <li\n key={optionId}\n id={optionId}\n className=\"aviala-datepicker-time__wheel-item\"\n role=\"option\"\n aria-selected={isSelected}\n >\n <button\n type=\"button\"\n className={cn(\n \"aviala-datepicker-time__wheel-option\",\n typographyVariants({ level: \"text\" })\n )}\n data-selected={isSelected ? \"true\" : undefined}\n tabIndex={-1}\n onClick={() => {\n scrollToValue(itemValue, \"smooth\");\n if (itemValue !== selectedValueRef.current) {\n onChange(itemValue);\n }\n }}\n >\n {formatValue(itemValue)}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n </div>\n );\n}\n","/**\n * Sticky wheel helpers — same continuous dwell curve used by Segmentator.\n * Pulls fractional progress toward item centers so slow scrolls linger, then\n * settle animates onto the sticky-biased nearest item.\n */\n\n/** 0 = linear, higher = stronger dwell near item centers. */\nexport const WHEEL_STICKY_AMOUNT = 0.45;\n\n/** Debounce after the last scroll event before settling. */\nexport const WHEEL_SCROLL_END_MS = 100;\n\n/**\n * Mouse-wheel step threshold as a fraction of item pitch.\n * Base 0.5 + sticky bias → need a clearer intent to leave the current item.\n */\nexport const WHEEL_STEP_THRESHOLD_FACTOR = 0.5 + WHEEL_STICKY_AMOUNT * 0.35;\n\n/**\n * Continuous sticky remap: dwells near 0 / 1 and moves faster through the midpoint.\n */\nexport function stickyRemapProgress(t: number, amount: number): number {\n const clamped = Math.max(0, Math.min(1, t));\n if (amount <= 0) return clamped;\n\n const exponent = 1 + amount * 2;\n if (clamped <= 0.5) {\n return 0.5 * Math.pow(2 * clamped, exponent);\n }\n return 1 - 0.5 * Math.pow(2 * (1 - clamped), exponent);\n}\n\n/** Map a fractional scroll index onto a sticky-biased integer item index. */\nexport function stickyRoundIndex(\n fractionalIndex: number,\n stickiness: number = WHEEL_STICKY_AMOUNT\n): number {\n const base = Math.floor(fractionalIndex);\n const frac = fractionalIndex - base;\n const sticky = stickyRemapProgress(frac, stickiness);\n return sticky < 0.5 ? base : base + 1;\n}\n","import { cn } from \"../../lib/utils\";\nimport { DatePickerTimeWheelColumn } from \"../date-picker/date-picker-time-wheel\";\n\nexport const TIME_PICKER_HOUR_VALUES = Array.from({ length: 24 }, (_, index) => index);\nexport const TIME_PICKER_MINUTE_VALUES = Array.from({ length: 12 }, (_, index) => index * 5);\n\nexport type TimePickerWheelsValue = {\n hours: number;\n minutes: number;\n};\n\ntype TimePickerWheelsProps = {\n value: TimePickerWheelsValue;\n onChange: (value: TimePickerWheelsValue) => void;\n className?: string;\n};\n\nexport function TimePickerWheels({ value, onChange, className }: TimePickerWheelsProps) {\n return (\n <div className={cn(\"aviala-datepicker-time\", className)} role=\"group\" aria-label=\"选择时间\">\n <div className=\"aviala-datepicker-time__columns\">\n <DatePickerTimeWheelColumn\n aria-label=\"小时\"\n values={TIME_PICKER_HOUR_VALUES}\n value={value.hours}\n onChange={(hours) => onChange({ ...value, hours })}\n />\n <DatePickerTimeWheelColumn\n aria-label=\"分钟\"\n values={TIME_PICKER_MINUTE_VALUES}\n value={value.minutes}\n onChange={(minutes) => onChange({ ...value, minutes })}\n />\n </div>\n </div>\n );\n}\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { TimeAndDateClock } from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { renderSlotIcon } from \"../../lib/render-slot-icon\";\nimport { formatTimeValue } from \"../date-picker/date-utils\";\nimport { typographyVariants } from \"../typography\";\nimport {\n TimePickerProvider,\n useTimePickerContext,\n type TimePickerSize,\n type TimePickerValue,\n} from \"./time-picker-context\";\nimport { TimePickerWheels } from \"./time-picker-wheels\";\n\nexport type { TimePickerSize, TimePickerValue } from \"./time-picker-context\";\n\nexport type TimePickerProps = {\n children: ReactNode;\n value?: TimePickerValue;\n defaultValue?: TimePickerValue;\n onValueChange?: (value: TimePickerValue) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: TimePickerSize;\n className?: string;\n};\n\n\nexport function TimePicker({\n children,\n value: valueProp,\n defaultValue = { hours: 17, minutes: 0 },\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n size = \"regular\",\n className,\n}: TimePickerProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [internalValue, setInternalValue] = useState<TimePickerValue>(defaultValue);\n const windowBlurCloseRef = useRef(false);\n const pointerDownCloseRef = useRef(false);\n\n const isOpenControlled = openProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n const value = valueProp !== undefined ? valueProp : internalValue;\n\n const setValue = useCallback(\n (next: TimePickerValue) => {\n if (valueProp === undefined) {\n setInternalValue(next);\n }\n onValueChange?.(next);\n },\n [onValueChange, valueProp]\n );\n\n useEffect(() => {\n const markWindowBlur = () => {\n windowBlurCloseRef.current = true;\n };\n window.addEventListener(\"blur\", markWindowBlur, true);\n return () => window.removeEventListener(\"blur\", markWindowBlur, true);\n }, []);\n\n useEffect(() => {\n if (!open) {\n pointerDownCloseRef.current = false;\n return;\n }\n\n const markPointerDown = () => {\n pointerDownCloseRef.current = true;\n };\n document.addEventListener(\"pointerdown\", markPointerDown, true);\n return () => document.removeEventListener(\"pointerdown\", markPointerDown, true);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!nextOpen && windowBlurCloseRef.current && !pointerDownCloseRef.current) {\n windowBlurCloseRef.current = false;\n return;\n }\n windowBlurCloseRef.current = false;\n pointerDownCloseRef.current = false;\n if (!isOpenControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isOpenControlled, onOpenChange]\n );\n\n const contextValue = useMemo(\n () => ({\n open,\n disabled,\n size,\n value,\n setValue,\n }),\n [disabled, open, size, value, setValue]\n );\n\n return (\n <TimePickerProvider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <div className={cn(\"inline-flex\", className)}>{children}</div>\n </PopoverPrimitive.Root>\n </TimePickerProvider>\n );\n}\n\nexport type TimePickerTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\"> & {\n size?: TimePickerSize;\n allRound?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n placeholder?: string;\n error?: boolean;\n displayValue?: string | null;\n};\n\nexport const TimePickerTrigger = forwardRef<HTMLButtonElement, TimePickerTriggerProps>(\n (\n {\n className,\n size: sizeProp,\n allRound = false,\n leftIcon,\n rightIcon,\n placeholder = \"HH:mm\",\n error = false,\n displayValue,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const { open, disabled: disabledContext, size: sizeContext, value } = useTimePickerContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n const formatted =\n displayValue !== undefined\n ? displayValue\n : formatTimeValue(value.hours, value.minutes);\n const hasValue = formatted != null && formatted !== \"\";\n\n return (\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"aviala-timepicker-trigger aviala-focus-ring\", className)}\n data-size={size}\n data-all-round={allRound ? \"true\" : \"false\"}\n data-state={open ? \"open\" : \"closed\"}\n data-error={error ? \"true\" : undefined}\n disabled={disabled}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n {...props}\n >\n {renderSlotIcon(\n leftIcon ?? <TimeAndDateClock level=\"text\" biggerSize aria-hidden />,\n \"aviala-timepicker-trigger__slot\"\n )}\n <span className=\"aviala-timepicker-trigger__field\">\n <span\n className={cn(\n \"aviala-timepicker-trigger__value\",\n typographyVariants({ level: \"text\" })\n )}\n data-placeholder={hasValue ? undefined : \"true\"}\n >\n {hasValue ? formatted : placeholder}\n </span>\n </span>\n {renderSlotIcon(rightIcon, \"aviala-timepicker-trigger__slot\")}\n </button>\n </PopoverPrimitive.Trigger>\n );\n }\n);\nTimePickerTrigger.displayName = \"TimePickerTrigger\";\n\nexport type TimePickerContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n portalled?: boolean;\n};\n\nexport const TimePickerContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n TimePickerContentProps\n>(\n (\n {\n className,\n children,\n portalled = true,\n sideOffset = 8,\n align = \"start\",\n ...props\n },\n ref\n ) => {\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n className={cn(\"aviala-timepicker-content\", className)}\n sideOffset={sideOffset}\n align={align}\n {...props}\n >\n {children ?? <TimePickerPanel />}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nTimePickerContent.displayName = \"TimePickerContent\";\n\nexport type TimePickerPanelProps = {\n className?: string;\n};\n\nexport function TimePickerPanel({ className }: TimePickerPanelProps) {\n const { value, setValue } = useTimePickerContext();\n\n return (\n <div className={cn(\"aviala-timepicker-panel\", className)} role=\"application\" aria-label=\"Time picker\">\n <TimePickerWheels value={value} onChange={setValue} />\n </div>\n );\n}\n\nexport type TimePickerFieldProps = Omit<TimePickerTriggerProps, \"displayValue\"> & {\n contentClassName?: string;\n panelClassName?: string;\n value?: TimePickerValue;\n defaultValue?: TimePickerValue;\n onValueChange?: (value: TimePickerValue) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n size?: TimePickerSize;\n className?: string;\n};\n\n/** Convenience field — trigger + time wheel panel. */\nexport function TimePickerField({\n contentClassName,\n panelClassName,\n className,\n size = \"regular\",\n allRound,\n leftIcon,\n rightIcon,\n placeholder,\n error,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n}: TimePickerFieldProps) {\n return (\n <TimePicker\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n size={size}\n className={className}\n >\n <TimePickerTrigger\n size={size}\n allRound={allRound}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n placeholder={placeholder}\n error={error}\n />\n <TimePickerContent className={contentClassName}>\n <TimePickerPanel className={panelClassName} />\n </TimePickerContent>\n </TimePicker>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\n\n/** Figma Components → Information Collect → TimePicker */\nexport type TimePickerSize = \"regular\" | \"big\";\n\nexport type TimePickerValue = {\n hours: number;\n minutes: number;\n};\n\nexport type TimePickerContextValue = {\n open: boolean;\n disabled?: boolean;\n size: TimePickerSize;\n value: TimePickerValue;\n setValue: (value: TimePickerValue) => void;\n};\n\nconst TimePickerContext = createContext<TimePickerContextValue | null>(null);\n\nexport function TimePickerProvider({\n value,\n children,\n}: {\n value: TimePickerContextValue;\n children: ReactNode;\n}) {\n return <TimePickerContext.Provider value={value}>{children}</TimePickerContext.Provider>;\n}\n\nexport function useTimePickerContext() {\n const context = useContext(TimePickerContext);\n if (!context) {\n throw new Error(\"TimePicker compound components must be used within TimePicker.\");\n }\n return context;\n}\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport {\n forwardRef,\n useCallback,\n useState,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\nimport { OverlayPointerSvg, POPOVER_POINTER, TOOLTIP_POINTER } from \"./overlay-pointer\";\n\nexport type PopoverProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>;\n\n/**\n * Thin controlled/uncontrolled wrapper around Radix `Popover.Root`. We don't add\n * any custom close-suppression: a non-modal Popover already prevents focus-outside\n * from dismissing (`onFocusOutside` is default-prevented by Radix), so a window\n * blur never closes it — no extra bookkeeping needed, and it keeps Escape a\n * single, predictable dismiss.\n */\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n modal = false,\n ...props\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange]\n );\n\n return (\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n modal={modal}\n {...props}\n />\n );\n}\n\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport type PopoverAppearance = \"default\" | \"tooltip\" | \"primary\";\n\nexport type PopoverContentProps = ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n /** Render without Portal — use inside nested overlays. */\n portalled?: boolean;\n /** Show a caret arrow pointing at the trigger (Figma with-arrow variant). */\n showArrow?: boolean;\n /** Strip surface padding — consumer controls inner spacing. */\n flush?: boolean;\n /**\n * Visual skin of the surface:\n * - `default` — light bordered panel (select-menu aligned), text typography, stroked caret.\n * - `tooltip` — shared inverted tooltip skin (dark, caption text, borderless, solid caret).\n * - `primary` — brand primary surface with white text, borderless, solid caret.\n */\n appearance?: PopoverAppearance;\n};\n\nexport const PopoverContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverContentProps\n>(\n (\n {\n className,\n children,\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n portalled = true,\n showArrow = false,\n flush = false,\n appearance = \"default\",\n ...props\n },\n ref\n ) => {\n const isDefaultAppearance = appearance === \"default\";\n const surfaceLevel = appearance === \"tooltip\" ? \"caption\" : \"text\";\n const pointer = isDefaultAppearance ? POPOVER_POINTER : TOOLTIP_POINTER;\n\n const content = (\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n data-appearance={appearance}\n className={cn(\"aviala-popover-content\", className)}\n {...props}\n >\n <div\n className={cn(\n \"aviala-popover-content__surface\",\n typographyVariants({ level: surfaceLevel })\n )}\n data-flush={flush ? \"true\" : undefined}\n >\n {children}\n </div>\n {showArrow ? (\n <PopoverPrimitive.Arrow\n asChild\n width={pointer.width}\n height={pointer.height}\n >\n <OverlayPointerSvg\n variant={isDefaultAppearance ? \"popover\" : \"default\"}\n className=\"aviala-popover-content__arrow\"\n width={pointer.width}\n height={pointer.height}\n path={pointer.path}\n />\n </PopoverPrimitive.Arrow>\n ) : null}\n </PopoverPrimitive.Content>\n );\n\n if (!portalled) return content;\n\n return <PopoverPrimitive.Portal>{content}</PopoverPrimitive.Portal>;\n }\n);\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n","import type { ComponentPropsWithoutRef } from \"react\";\n\n/** Figma System Composition → Tooltip pointer (14×5). */\nexport const TOOLTIP_POINTER = {\n width: 14,\n height: 5,\n path: \"M14 0L0 0C4.97025 1 3.98967 5 7 5C10.0103 5 9.02975 1 14 0Z\",\n} as const;\n\n/** Figma System Composition → Popover pointer (16×5). */\nexport const POPOVER_POINTER = {\n width: 16,\n height: 5,\n path: \"M16 0H0C4.12448 0 4.76977 5 8 5C11.2302 5 11.8755 0 16 0Z\",\n} as const;\n\nexport type OverlayPointerSvgProps = ComponentPropsWithoutRef<\"svg\"> & {\n width: number;\n height: number;\n path: string;\n /** Popover caret — stroked outline so the pointer reads on light page backgrounds. */\n variant?: \"default\" | \"popover\";\n};\n\n/** Curved caret SVG — fill via parent `color` / CSS token on the svg class. */\nexport function OverlayPointerSvg({\n width,\n height,\n path,\n variant = \"default\",\n className,\n style,\n ...props\n}: OverlayPointerSvgProps) {\n const isPopover = variant === \"popover\";\n\n return (\n <svg\n {...props}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n className={className}\n style={{ ...style, width, height }}\n >\n {isPopover ? (\n <>\n <path d={path} className=\"aviala-popover-content__arrow-outline\" />\n <path d={path} className=\"aviala-popover-content__arrow-fill\" />\n </>\n ) : (\n <path d={path} />\n )}\n </svg>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\";\nimport { useCoarsePointer } from \"./use-coarse-pointer\";\n\nexport interface HoverPopoverProps {\n /** Floating body — may hold rich / interactive content. */\n content: ReactNode;\n /** The trigger element. Rendered with `asChild`, so pass a single element. */\n children: ReactNode;\n /** Preferred placement of the floating content. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Cross-axis alignment relative to the trigger. */\n align?: \"start\" | \"center\" | \"end\";\n /** Gap between trigger and content, in px. */\n sideOffset?: number;\n /** Distance from viewport edges before collision flipping, in px. */\n collisionPadding?: number;\n /** Show the caret arrow pointing at the trigger. */\n showArrow?: boolean;\n /** Delay before opening on hover, in ms. */\n openDelay?: number;\n /** Delay before closing on pointer leave, in ms (lets the cursor reach the content). */\n closeDelay?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Open-state change callback. */\n onOpenChange?: (open: boolean) => void;\n /** Extra class on the inner content surface. */\n contentClassName?: string;\n}\n\n/**\n * Popover that opens on hover (desktop) / tap (touch).\n *\n * Radix Popover is click-only, so this wraps it in a controlled shell:\n * - Desktop (`pointer: fine`): opens on `mouseenter` (after `openDelay`) via the\n * trigger's hover handlers. Keyboard uses Radix `PopoverTrigger`'s native\n * semantics — Tab *selects* the trigger (does not open), Enter/Space reveals\n * the popover, and Escape closes it on the *first* press with focus returned\n * to the trigger. Hover/click opens keep focus on the trigger; keyboard opens\n * move focus into the content. Closes on `mouseleave`/`blur` after\n * `closeDelay`. The delay keeps the surface open while the cursor travels the\n * gap into the content, and cancels the close when the cursor/focus\n * re-enters the content.\n * - Touch (`pointer: coarse`): degrades to a normal Popover — `PopoverTrigger`\n * tap to toggle, outside tap / Escape to dismiss. No hover exists on touch.\n *\n * Use this for rich / interactive previews. For a non-essential text hint,\n * prefer `Tooltip` / `ResponsiveTooltip`.\n *\n * @example\n * <HoverPopover content={<PriceBreakdown />}>\n * <Button>See price</Button>\n * </HoverPopover>\n */\nexport function HoverPopover({\n content,\n children,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n showArrow = true,\n openDelay = 150,\n closeDelay = 150,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n contentClassName,\n}: HoverPopoverProps) {\n const coarse = useCoarsePointer();\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? openProp : internalOpen;\n\n const openTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const clearTimers = useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n useEffect(() => () => clearTimers(), [clearTimers]);\n\n // Radix Popover's content *forces* focus trapping (trapFocus is hard-coded to\n // `open` and cannot be turned off), and on close it returns focus to its\n // Trigger. That is exactly why we must use `PopoverTrigger` (not `PopoverAnchor`)\n // for the desktop branch: with a real trigger, the first Escape dismisses and\n // focus lands back on the trigger. Without one, the FocusScope swallows the\n // first Escape trying to return focus to a non-existent trigger.\n //\n // `keyboardOpenRef` only decides whether we *steal* focus into the content on\n // open: hover/click opens must keep focus on the trigger, keyboard opens may\n // move it into the content. Radix's Trigger handles Tab-select / Enter-Space\n // open / single-Escape-close natively.\n const keyboardOpenRef = useRef(false);\n const contentRef = useRef<HTMLDivElement>(null);\n\n const openNow = useCallback(() => {\n keyboardOpenRef.current = false;\n clearTimers();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n }, [clearTimers, openDelay, setOpen]);\n\n const closeSoon = useCallback(() => {\n clearTimers();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n }, [clearTimers, closeDelay, setOpen]);\n\n if (coarse) {\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n showArrow={showArrow}\n className={contentClassName}\n >\n {content}\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n asChild\n onMouseEnter={openNow}\n onMouseLeave={closeSoon}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") keyboardOpenRef.current = true;\n }}\n >\n {children}\n </PopoverTrigger>\n <PopoverContent\n ref={contentRef}\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n showArrow={showArrow}\n className={contentClassName}\n // Hover/click opens keep focus on the trigger; only keyboard opens move\n // focus into the content (Radix returns focus to the trigger on close).\n onOpenAutoFocus={(e) => {\n if (!keyboardOpenRef.current) e.preventDefault();\n }}\n // Escape must close on the first press. We handle it explicitly and\n // preventDefault so Radix's DismissableLayer doesn't also run its own\n // dismiss path (which, combined with focus-return bookkeeping, could\n // otherwise swallow the first press). Focus return to the trigger is\n // still handled by Radix's default onCloseAutoFocus.\n onEscapeKeyDown={(e) => {\n e.preventDefault();\n setOpen(false);\n }}\n onMouseEnter={clearTimers}\n onMouseLeave={closeSoon}\n onBlur={(e) => {\n const next = e.relatedTarget as Node | null;\n if (next && contentRef.current?.contains(next)) return;\n closeSoon();\n }}\n >\n {content}\n </PopoverContent>\n </Popover>\n );\n}\n","import { useEffect, useState } from \"react\";\n\n/**\n * True when the primary pointer is coarse (touch). Defaults to `false` (desktop)\n * so the first paint is already correct and there is no SSR/hydration mismatch\n * flash; the real value is read on mount and kept in sync.\n */\nexport function useCoarsePointer(): boolean {\n const [coarse, setCoarse] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(pointer: coarse)\");\n const update = () => setCoarse(mq.matches);\n update();\n mq.addEventListener(\"change\", update);\n return () => mq.removeEventListener(\"change\", update);\n }, []);\n\n return coarse;\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { SymbolWrong } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Information Display → Modal (553:58593) */\nexport type ModalSize = \"default\" | \"large\";\n\nconst MODAL_ICON_SIZE = 16;\n\nconst modalContentVariants = cva(\"aviala-modal-content\", {\n variants: {\n size: {\n default: \"aviala-modal-content--size-default\",\n large: \"aviala-modal-content--size-large\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nfunction renderModalIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: MODAL_ICON_SIZE,\n height: MODAL_ICON_SIZE,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return (\n <span className=\"aviala-modal__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nexport type ModalProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\n\nexport const Modal = DialogPrimitive.Root;\n\nexport const ModalTrigger = DialogPrimitive.Trigger;\n\nexport const ModalPortal = DialogPrimitive.Portal;\n\nexport const ModalClose = DialogPrimitive.Close;\n\nexport type ModalOverlayProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\nexport const ModalOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n ModalOverlayProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\"aviala-modal-overlay\", className)}\n {...props}\n />\n));\nModalOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nexport type ModalContentProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Content> &\n VariantProps<typeof modalContentVariants> & {\n /** Render without Portal — use inside nested overlays. */\n portalled?: boolean;\n /** Show the default overlay scrim. */\n showOverlay?: boolean;\n };\n\nexport const ModalContent = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(\n (\n {\n className,\n children,\n size = \"default\",\n portalled = true,\n showOverlay = true,\n onOpenAutoFocus,\n ...props\n },\n ref\n ) => {\n // Overlay + Content must be direct Portal children (not a Fragment) so Radix\n // Presence can keep each mounted through the exit `data-state=\"closed\"` animation.\n const overlay = showOverlay ? <ModalOverlay /> : null;\n const panel = (\n <DialogPrimitive.Content\n ref={ref}\n className={cn(modalContentVariants({ size }), className)}\n onOpenAutoFocus={onOpenAutoFocus}\n {...props}\n >\n <div className=\"aviala-modal-content__surface\">{children}</div>\n </DialogPrimitive.Content>\n );\n\n if (!portalled) {\n return (\n <>\n {overlay}\n {panel}\n </>\n );\n }\n\n return (\n <DialogPrimitive.Portal>\n {overlay}\n {panel}\n </DialogPrimitive.Portal>\n );\n }\n);\nModalContent.displayName = DialogPrimitive.Content.displayName;\n\nexport type ModalHeaderProps = HTMLAttributes<HTMLDivElement> & {\n /** Optional leading status icon */\n icon?: ReactNode;\n /** Show the leading icon slot */\n showIcon?: boolean;\n /** Show the header close control */\n showClose?: boolean;\n closeLabel?: string;\n};\n\nexport const ModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n (\n {\n className,\n children,\n icon,\n showIcon = false,\n showClose = true,\n closeLabel = \"Close dialog\",\n ...props\n },\n ref\n ) => (\n <div ref={ref} className={cn(\"aviala-modal__header\", className)} {...props}>\n <div className=\"aviala-modal__header-row\">\n {showIcon ? renderModalIcon(icon) : null}\n <div className=\"aviala-modal__header-main\">{children}</div>\n {showClose ? (\n <DialogPrimitive.Close asChild>\n <Button\n type=\"button\"\n mode=\"noBackgroundCustom\"\n iconOnly\n aria-label={closeLabel}\n className=\"aviala-modal__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n />\n </DialogPrimitive.Close>\n ) : null}\n </div>\n </div>\n )\n);\nModalHeader.displayName = \"ModalHeader\";\n\nexport type ModalTitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\nexport const ModalTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n ModalTitleProps\n>(({ className, children, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} asChild {...props}>\n <Typography level=\"text\" className={cn(\"aviala-modal__title\", className)}>\n {children}\n </Typography>\n </DialogPrimitive.Title>\n));\nModalTitle.displayName = DialogPrimitive.Title.displayName;\n\nexport type ModalDescriptionProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\n\nexport const ModalDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n ModalDescriptionProps\n>(({ className, children, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} asChild {...props}>\n <Typography level=\"caption\" className={cn(\"aviala-modal__description\", className)}>\n {children}\n </Typography>\n </DialogPrimitive.Description>\n));\nModalDescription.displayName = DialogPrimitive.Description.displayName;\n\n/** Convenience wrapper — Figma header Typeface (text + caption). */\nexport type ModalHeaderTextProps = Omit<ModalHeaderProps, \"children\"> & {\n title: ReactNode;\n description?: ReactNode;\n};\n\nexport function ModalHeaderText({\n title,\n description,\n ...props\n}: ModalHeaderTextProps) {\n return (\n <ModalHeader {...props}>\n <div className=\"aviala-modal__header-typeface\">\n <ModalTitle>{title}</ModalTitle>\n {description ? <ModalDescription>{description}</ModalDescription> : null}\n </div>\n </ModalHeader>\n );\n}\n\nexport type ModalBodyProps = HTMLAttributes<HTMLDivElement> & {\n /** Figma `Content=Text` — title + body copy preset */\n layout?: \"default\" | \"text\";\n title?: ReactNode;\n description?: ReactNode;\n};\n\nexport const ModalBody = forwardRef<HTMLDivElement, ModalBodyProps>(\n ({ className, children, layout = \"default\", title, description, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-modal__body\", className)} {...props}>\n {layout === \"text\" ? (\n <Typeface\n className=\"aviala-modal__body-typeface\"\n content=\"textTitle\"\n primary={title}\n secondary={description ?? children}\n />\n ) : (\n children\n )}\n </div>\n )\n);\nModalBody.displayName = \"ModalBody\";\n\nexport type ModalFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-modal__footer\", className)} {...props} />\n )\n);\nModalFooter.displayName = \"ModalFooter\";\n\nexport { modalContentVariants };\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\nimport { OverlayPointerSvg, TOOLTIP_POINTER } from \"./overlay-pointer\";\n\n/** Default show delay — 300ms per ALD / Radix convention. */\nexport const TOOLTIP_DELAY_DURATION = 300;\n\nexport type TooltipProviderProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>;\n\nexport function TooltipProvider({\n delayDuration = TOOLTIP_DELAY_DURATION,\n skipDelayDuration = 0,\n ...props\n}: TooltipProviderProps) {\n return (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n {...props}\n />\n );\n}\n\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport type TooltipContentProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n /** Show a caret arrow pointing at the trigger (default true). */\n showArrow?: boolean;\n};\n\nexport const TooltipContent = forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(\n (\n {\n className,\n children,\n sideOffset = 4,\n collisionPadding = 8,\n showArrow = true,\n ...props\n },\n ref\n ) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n className={cn(\"aviala-tooltip-content\", className)}\n {...props}\n >\n <div className={cn(\"aviala-tooltip-content__surface\", typographyVariants({ level: \"caption\" }))}>\n {children}\n </div>\n {showArrow ? (\n <TooltipPrimitive.Arrow\n asChild\n width={TOOLTIP_POINTER.width}\n height={TOOLTIP_POINTER.height}\n >\n <OverlayPointerSvg\n className=\"aviala-tooltip-content__arrow\"\n width={TOOLTIP_POINTER.width}\n height={TOOLTIP_POINTER.height}\n path={TOOLTIP_POINTER.path}\n />\n </TooltipPrimitive.Arrow>\n ) : null}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n);\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n","import { type ReactNode } from \"react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TOOLTIP_DELAY_DURATION,\n} from \"./tooltip\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\";\nimport { useCoarsePointer } from \"./use-coarse-pointer\";\n\nexport interface ResponsiveTooltipProps {\n /** Tooltip body — the same content is shown on desktop (hover) and touch (tap). */\n content: ReactNode;\n /** The trigger element. Rendered with `asChild`, so pass a single element. */\n children: ReactNode;\n /** Preferred placement of the floating content. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Cross-axis alignment relative to the trigger. */\n align?: \"start\" | \"center\" | \"end\";\n /** Gap between trigger and content, in px. */\n sideOffset?: number;\n /** Distance from viewport edges before collision flipping, in px. */\n collisionPadding?: number;\n /** Show the caret arrow pointing at the trigger. */\n showArrow?: boolean;\n /** Hover open delay on desktop, in ms (ignored on touch). Requires a TooltipProvider ancestor. */\n delayDuration?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Open-state change callback. */\n onOpenChange?: (open: boolean) => void;\n /** Extra class on the inner content surface. */\n contentClassName?: string;\n}\n\n/**\n * Tooltip with a mobile-friendly trigger.\n *\n * Radix Tooltip is hover/focus only and deliberately ignores touch, so it has\n * no trigger on phones. `ResponsiveTooltip` renders the SAME content through the\n * right primitive for the device:\n * - Desktop (`pointer: fine`): Radix Tooltip — opens on hover and keyboard focus.\n * - Touch (`pointer: coarse`): Radix Popover with `appearance=\"tooltip\"` — opens on\n * tap, dismisses on outside tap / Escape, but keeps the tooltip visual skin\n * (dark surface, caption text, solid caret) so it looks identical to desktop.\n *\n * The consumer API and the look are unchanged between devices; only the trigger\n * gesture differs. Animations are handled by the respective effect CSS\n * (tooltip-effects / popover-effects), so direction-aware scale-in/out works on\n * both branches.\n *\n * @example\n * <TooltipProvider> // needed for the desktop hover-delay; Popover needs none\n * <ResponsiveTooltip content=\"Save changes\">\n * <Button>Save</Button>\n * </ResponsiveTooltip>\n * </TooltipProvider>\n */\nexport function ResponsiveTooltip({\n content,\n children,\n side = \"top\",\n align = \"center\",\n sideOffset = 4,\n collisionPadding = 8,\n showArrow = true,\n delayDuration = TOOLTIP_DELAY_DURATION,\n open,\n defaultOpen,\n onOpenChange,\n contentClassName,\n}: ResponsiveTooltipProps) {\n const coarse = useCoarsePointer();\n\n if (coarse) {\n return (\n <Popover open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent\n appearance=\"tooltip\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n showArrow={showArrow}\n className={contentClassName}\n >\n {content}\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <Tooltip\n delayDuration={delayDuration}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n showArrow={showArrow}\n className={contentClassName}\n >\n {content}\n </TooltipContent>\n </Tooltip>\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n GeneralNotification,\n SymbolInformationCircle,\n SymbolRightCircle,\n SymbolWarningCircle,\n SymbolWrong,\n SymbolWrongCircle,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Link } from \"./link\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Response And Feedback → Feedback (553:58620) */\nexport type FeedbackType = \"information\" | \"warning\" | \"wrong\" | \"success\" | \"normal\";\nexport type FeedbackSize = \"default\" | \"small\";\nexport type FeedbackMode = \"default\" | \"primary\";\n\nconst FEEDBACK_ICON_SIZE = 22;\n\nconst feedbackVariants = cva(\"aviala-feedback\", {\n variants: {\n type: {\n information: \"aviala-feedback--type-information\",\n warning: \"aviala-feedback--type-warning\",\n wrong: \"aviala-feedback--type-wrong\",\n success: \"aviala-feedback--type-success\",\n normal: \"aviala-feedback--type-normal\",\n },\n size: {\n default: \"aviala-feedback--size-default\",\n small: \"aviala-feedback--size-small\",\n },\n mode: {\n default: \"aviala-feedback--mode-default\",\n primary: \"aviala-feedback--mode-primary\",\n },\n },\n defaultVariants: {\n type: \"information\",\n size: \"default\",\n mode: \"default\",\n },\n});\n\nfunction renderFeedbackIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: FEEDBACK_ICON_SIZE,\n height: FEEDBACK_ICON_SIZE,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return (\n <span className=\"aviala-feedback__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nfunction defaultStatusIcon(type: FeedbackType, mode: FeedbackMode): ReactNode {\n const iconMode = mode === \"primary\" ? \"fill\" : \"fill\";\n const thickness = \"Regular\";\n\n switch (type) {\n case \"information\":\n return (\n <SymbolInformationCircle thickness={thickness} mode={iconMode} aria-hidden />\n );\n case \"warning\":\n return <SymbolWarningCircle thickness={thickness} mode={iconMode} aria-hidden />;\n case \"wrong\":\n return <SymbolWrongCircle thickness={thickness} mode={iconMode} aria-hidden />;\n case \"success\":\n return <SymbolRightCircle thickness={thickness} mode={iconMode} aria-hidden />;\n case \"normal\":\n return <GeneralNotification thickness={thickness} mode=\"default\" aria-hidden />;\n }\n}\n\nexport type FeedbackProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof feedbackVariants> & {\n /** Primary line — bold on default size */\n title: ReactNode;\n /** Secondary caption line — default size only */\n description?: ReactNode;\n /** Status icon override */\n icon?: ReactNode;\n /** Figma `Show Close Button` */\n showClose?: boolean;\n onClose?: (event: MouseEvent<HTMLAnchorElement>) => void;\n closeLabel?: string;\n /** Figma `Show Quick Action` — inline link in body row */\n action?: ReactNode;\n onAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n };\n\nexport const Feedback = forwardRef<HTMLDivElement, FeedbackProps>(\n (\n {\n className,\n type = \"information\",\n size = \"default\",\n mode: modeProp = \"default\",\n title,\n description,\n icon,\n showClose = true,\n onClose,\n closeLabel = \"Dismiss\",\n action,\n onAction,\n ...props\n },\n ref\n ) => {\n const resolvedType = type ?? \"information\";\n const resolvedSize = size ?? \"default\";\n const mode = resolvedType === \"normal\" ? \"default\" : (modeProp ?? \"default\");\n const tone = mode === \"primary\" ? \"white\" : \"default\";\n const isSmall = resolvedSize === \"small\";\n const resolvedRole = resolvedType === \"wrong\" ? \"alert\" : \"status\";\n\n return (\n <div\n ref={ref}\n role={resolvedRole}\n aria-live={resolvedType === \"wrong\" ? \"assertive\" : \"polite\"}\n className={cn(\n feedbackVariants({ type: resolvedType, size: resolvedSize, mode }),\n className\n )}\n data-type={resolvedType}\n data-size={resolvedSize}\n data-mode={mode}\n {...props}\n >\n <div className=\"aviala-feedback__body\">\n {renderFeedbackIcon(icon ?? defaultStatusIcon(resolvedType, mode))}\n\n {isSmall ? (\n <Typography level=\"text\" tone={tone} className=\"aviala-feedback__title\">\n {title}\n </Typography>\n ) : (\n <Typeface\n className=\"aviala-feedback__typeface\"\n content=\"textCaption\"\n primary={title}\n secondary={description}\n tone={tone}\n />\n )}\n\n {action ? (\n <Link\n level=\"text\"\n mode=\"noBackground\"\n href={onAction ? \"#\" : undefined}\n className=\"aviala-feedback__action\"\n onClick={(event) => {\n if (onAction) {\n event.preventDefault();\n onAction(event);\n }\n }}\n >\n {action}\n </Link>\n ) : null}\n\n {showClose ? (\n <Link\n level=\"text\"\n mode=\"noBackgroundCustom\"\n iconOnly\n href={onClose ? \"#\" : undefined}\n aria-label={closeLabel}\n className=\"aviala-feedback__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n onClick={(event) => {\n if (onClose) {\n event.preventDefault();\n onClose(event);\n }\n }}\n />\n ) : null}\n </div>\n </div>\n );\n }\n);\nFeedback.displayName = \"Feedback\";\n","import {\n SymbolInformationCircle,\n SymbolRightCircle,\n SymbolWarningCircle,\n SymbolWrong,\n SymbolWrongCircle,\n} from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Link } from \"./link\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Response And Feedback → Alert (527:56855) */\nexport type AlertType = \"info\" | \"warning\" | \"error\" | \"success\" | \"neutral\";\nexport type AlertSize = \"default\" | \"small\";\n/** Figma `Style` — bordered light surface vs filled secondary surface */\nexport type AlertAppearance = \"default\" | \"light\";\n\nconst ALERT_ICON_SIZE = 16;\n\nconst alertVariants = cva(\"aviala-alert\", {\n variants: {\n type: {\n info: \"aviala-alert--type-info\",\n warning: \"aviala-alert--type-warning\",\n error: \"aviala-alert--type-error\",\n success: \"aviala-alert--type-success\",\n neutral: \"aviala-alert--type-neutral\",\n },\n size: {\n default: \"aviala-alert--size-default\",\n small: \"aviala-alert--size-small\",\n },\n appearance: {\n default: \"aviala-alert--appearance-default\",\n light: \"aviala-alert--appearance-light\",\n },\n },\n defaultVariants: {\n type: \"info\",\n size: \"default\",\n appearance: \"default\",\n },\n});\n\nfunction renderAlertIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: ALERT_ICON_SIZE,\n height: ALERT_ICON_SIZE,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return (\n <span className=\"aviala-alert__icon\" aria-hidden>\n {content}\n </span>\n );\n}\n\nfunction defaultStatusIcon(type: AlertType): ReactNode {\n const iconProps = { thickness: \"Regular\" as const, mode: \"fill\" as const, \"aria-hidden\": true };\n\n switch (type) {\n case \"info\":\n case \"neutral\":\n return <SymbolInformationCircle {...iconProps} />;\n case \"warning\":\n return <SymbolWarningCircle {...iconProps} />;\n case \"error\":\n return <SymbolWrongCircle {...iconProps} />;\n case \"success\":\n return <SymbolRightCircle {...iconProps} />;\n }\n}\n\nexport type AlertProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof alertVariants> & {\n /** Primary line — bold on default size */\n title: ReactNode;\n /** Secondary caption line — default size only */\n description?: ReactNode;\n /** Status icon override */\n icon?: ReactNode;\n /** Show the leading status icon */\n showIcon?: boolean;\n /** Figma `Show Close Button` */\n dismissible?: boolean;\n onDismiss?: (event: MouseEvent<HTMLAnchorElement>) => void;\n closeLabel?: string;\n /** Figma `Show Quick Action` — inline link in body row */\n quickAction?: ReactNode;\n onQuickAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n /** Figma footer primary action */\n action?: ReactNode;\n onAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n /** Figma footer secondary action */\n secondaryAction?: ReactNode;\n onSecondaryAction?: (event: MouseEvent<HTMLAnchorElement>) => void;\n /** Figma `Show Action` — footer action row */\n showActions?: boolean;\n };\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n type = \"info\",\n size = \"default\",\n appearance = \"default\",\n title,\n description,\n icon,\n showIcon = true,\n dismissible = true,\n onDismiss,\n closeLabel = \"Dismiss alert\",\n quickAction,\n onQuickAction,\n action,\n onAction,\n secondaryAction,\n onSecondaryAction,\n showActions = false,\n ...props\n },\n ref\n ) => {\n const isSmall = size === \"small\";\n const resolvedType = type ?? \"info\";\n const resolvedRole = resolvedType === \"error\" ? \"alert\" : \"status\";\n const hasActions = showActions && (action || secondaryAction);\n\n return (\n <div\n ref={ref}\n role={resolvedRole}\n aria-live={resolvedType === \"error\" ? \"assertive\" : \"polite\"}\n className={cn(alertVariants({ type, size, appearance }), className)}\n data-type={resolvedType}\n data-size={size}\n data-appearance={appearance}\n {...props}\n >\n <div className=\"aviala-alert__body\">\n {showIcon ? renderAlertIcon(icon ?? defaultStatusIcon(resolvedType)) : null}\n\n {isSmall ? (\n <Typography level=\"text\" className=\"aviala-alert__title\">\n {title}\n </Typography>\n ) : (\n <Typeface\n className=\"aviala-alert__typeface\"\n content=\"textCaption\"\n primary={title}\n secondary={description}\n />\n )}\n\n {quickAction ? (\n <Link\n level=\"text\"\n mode=\"noBackground\"\n href={onQuickAction ? \"#\" : undefined}\n className=\"aviala-alert__quick-action\"\n onClick={(event) => {\n if (onQuickAction) {\n event.preventDefault();\n onQuickAction(event);\n }\n }}\n >\n {quickAction}\n </Link>\n ) : null}\n\n {dismissible ? (\n <Link\n level=\"text\"\n mode=\"noBackgroundCustom\"\n iconOnly\n href={onDismiss ? \"#\" : undefined}\n aria-label={closeLabel}\n className=\"aviala-alert__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n onClick={(event) => {\n if (onDismiss) {\n event.preventDefault();\n onDismiss(event);\n }\n }}\n />\n ) : null}\n </div>\n\n {hasActions ? (\n <div className=\"aviala-alert__actions\">\n {action ? (\n <Link\n level=\"caption\"\n mode=\"noBackground\"\n href={onAction ? \"#\" : undefined}\n className=\"aviala-alert__action\"\n onClick={(event) => {\n if (onAction) {\n event.preventDefault();\n onAction(event);\n }\n }}\n >\n {action}\n </Link>\n ) : null}\n {secondaryAction ? (\n <Link\n level=\"caption\"\n mode=\"noBackgroundCustom\"\n href={onSecondaryAction ? \"#\" : undefined}\n className=\"aviala-alert__action aviala-alert__action--secondary\"\n onClick={(event) => {\n if (onSecondaryAction) {\n event.preventDefault();\n onSecondaryAction(event);\n }\n }}\n >\n {secondaryAction}\n </Link>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n }\n);\nAlert.displayName = \"Alert\";\n\nexport { alertVariants };\n","import {\n DirectionArrowRightLight,\n GeneralSetting,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./button\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typeface } from \"./typeface\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma List item `Type` variant (738:148304, 647:87555) */\nexport type ListItemType = \"action\" | \"switch\" | \"select\";\n\n/** Figma List item `left icon setting` variant */\nexport type ListItemLeading = \"shaped\" | \"default\" | \"none\";\n\nexport type ListProps = HTMLAttributes<HTMLDivElement> & {\n /** Optional section title above the list card */\n title?: ReactNode;\n};\n\n/** Figma Structure Navigation → List root */\nexport const List = forwardRef<HTMLDivElement, ListProps>(\n ({ className, title, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-list\", className)} {...props}>\n {title != null ? <ListTitle>{title}</ListTitle> : null}\n <ListGroup>{children}</ListGroup>\n </div>\n )\n);\nList.displayName = \"List\";\n\nexport type ListTitleProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma List title row — Typography text level */\nexport const ListTitle = forwardRef<HTMLDivElement, ListTitleProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-list-title\", className)} {...props}>\n <span className={cn(typographyVariants({ level: \"text\" }))}>{children}</span>\n </div>\n )\n);\nListTitle.displayName = \"ListTitle\";\n\nexport type ListGroupProps = HTMLAttributes<HTMLDivElement>;\n\n/** Figma List card container — rounded white surface for items */\nexport const ListGroup = forwardRef<HTMLDivElement, ListGroupProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-list-group\", className)} role=\"list\" {...props}>\n {children}\n </div>\n )\n);\nListGroup.displayName = \"ListGroup\";\n\nexport type ListItemGroupProps = {\n label?: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\n/** Convenience wrapper — titled list section (Figma List title + card) */\nexport function ListItemGroup({ label, children, className }: ListItemGroupProps) {\n return (\n <div className={cn(\"aviala-list\", className)}>\n {label != null ? <ListTitle>{label}</ListTitle> : null}\n <ListGroup>{children}</ListGroup>\n </div>\n );\n}\n\nexport type ListDividerProps = HTMLAttributes<HTMLSpanElement>;\n\n/** Vertical divider between trailing actions (Figma `last` separator) */\nexport const ListDivider = forwardRef<HTMLSpanElement, ListDividerProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"aviala-list-item__divider\", className)}\n aria-hidden\n {...props}\n />\n )\n);\nListDivider.displayName = \"ListDivider\";\n\nexport type ListSeparatorProps = HTMLAttributes<HTMLHRElement>;\n\n/** Horizontal separator between list groups */\nexport const ListSeparator = forwardRef<HTMLHRElement, ListSeparatorProps>(\n ({ className, ...props }, ref) => (\n <hr ref={ref} className={cn(\"aviala-list-separator\", className)} {...props} />\n )\n);\nListSeparator.displayName = \"ListSeparator\";\n\nfunction renderLeadingIcon(node: ReactNode, leading: ListItemLeading): ReactNode {\n if (leading === \"none\") return null;\n\n const iconSize = leading === \"shaped\" ? 20 : 22;\n const content =\n node ??\n (leading === \"shaped\" ? (\n <GeneralSetting aria-hidden />\n ) : (\n <GeneralSetting aria-hidden />\n ));\n\n const rendered =\n isValidElement(content) && typeof content.type !== \"string\"\n ? cloneElement(content as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: iconSize,\n height: iconSize,\n className: cn(\n (content as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : content;\n\n return (\n <span className=\"aviala-list-item__icon\">\n <span\n className={cn(\n leading === \"shaped\"\n ? \"aviala-list-item__icon--shaped\"\n : \"aviala-list-item__icon--default\"\n )}\n >\n {rendered}\n </span>\n </span>\n );\n}\n\nexport type ListItemProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Figma `Type` variant */\n itemType?: ListItemType;\n /** Figma `left icon setting` variant */\n leading?: ListItemLeading;\n /** Leading icon node — defaults to GeneralSetting */\n icon?: ReactNode;\n /** Primary line (Typeface text) */\n title: ReactNode;\n /** Secondary line (Typeface caption) */\n subtitle?: ReactNode;\n /** Primary trailing button label */\n actionLabel?: ReactNode;\n /** Override primary trailing button */\n action?: ReactNode;\n /** Secondary icon-only button for `action` type */\n secondaryAction?: ReactNode;\n /** Trailing select slot for `select` type */\n select?: ReactNode;\n /** Trailing switch props for `switch` type */\n switchProps?: Omit<SwitchProps, \"size\">;\n /** Fully custom trailing region — overrides type presets */\n trailing?: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n /** Enables hover highlight (auto when `onClick` is set) */\n interactive?: boolean;\n};\n\n/** Figma Structure Navigation → List item */\nexport const ListItem = forwardRef<HTMLDivElement, ListItemProps>(\n (\n {\n className,\n itemType = \"select\",\n leading = \"shaped\",\n icon,\n title,\n subtitle,\n actionLabel = \"Text\",\n action,\n secondaryAction,\n select,\n switchProps,\n trailing,\n selected = false,\n disabled = false,\n interactive,\n onClick,\n ...props\n },\n ref\n ) => {\n const isInteractive = interactive ?? onClick != null;\n\n const primaryAction =\n action ??\n (\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\n {actionLabel}\n </Button>\n );\n\n const renderTrailing = () => {\n if (trailing !== undefined) return trailing;\n\n switch (itemType) {\n case \"action\":\n return (\n <div className=\"aviala-list-item__more\">\n <div className=\"aviala-list-item__trailing\">\n {primaryAction}\n {secondaryAction ?? (\n <Button\n mode=\"default\"\n size=\"regular\"\n iconOnly\n aria-label=\"More\"\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n </div>\n <ListDivider />\n <span className=\"aviala-list-item__chevron\" aria-hidden>\n <DirectionArrowRightLight width={18} height={18} />\n </span>\n </div>\n );\n case \"switch\":\n return (\n <div className=\"aviala-list-item__trailing\">\n {primaryAction}\n <ListDivider />\n <Switch {...switchProps} />\n </div>\n );\n case \"select\":\n default:\n return (\n <div className=\"aviala-list-item__trailing\">\n {primaryAction}\n <ListDivider />\n <span className=\"aviala-list-item__select\">{select}</span>\n </div>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n className={cn(\"aviala-list-item\", className)}\n data-leading={leading}\n data-type={itemType}\n data-selected={selected ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n data-interactive={isInteractive ? \"true\" : undefined}\n onClick={disabled ? undefined : onClick}\n {...props}\n >\n {renderLeadingIcon(icon, leading)}\n <div className=\"aviala-list-item__body\">\n <div className=\"aviala-list-item__content\">\n <div className=\"aviala-list-item__head\">\n <Typeface content=\"textCaption\" primary={title} secondary={subtitle} />\n </div>\n {renderTrailing()}\n </div>\n </div>\n </div>\n );\n }\n);\nListItem.displayName = \"ListItem\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\n\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\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 { Popover } from \"./popover\";\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 isInsideCollapsedGroup(item: HTMLElement): boolean {\n return (\n item.closest('.aviala-navigation-item-group[data-expanded=\"false\"]') !== null\n );\n}\n\nfunction findActiveNavigationItem(group: HTMLElement): HTMLElement | null {\n const activeItems = Array.from(\n group.querySelectorAll<HTMLElement>(\n '.aviala-navigation-item[data-active=\"true\"]'\n )\n ).filter((item) => !isInsideCollapsedGroup(item));\n\n if (activeItems.length === 0) return null;\n\n const activeChild = activeItems.find(\n (item) => item.getAttribute(\"data-item-type\") === \"child\"\n );\n\n return activeChild ?? activeItems[0]!;\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 let inset = railInset;\n\n // Grow / shrink the rail on the active item only (hover taller, press shorter).\n if (item.matches(\":active\")) {\n inset = readIndicatorToken(group, \"--navigation-rail-inset-press\", 9);\n } else if (item.matches(\":hover\")) {\n inset = readIndicatorToken(group, \"--navigation-rail-inset-hover\", 3);\n }\n\n return {\n x: railLeft,\n\n y: itemRect.top - groupRect.top + inset,\n\n width: railWidth,\n\n height: Math.max(0, itemRect.height - inset * 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\n/** Matches the `--navigation-transition-easing` fallback cubic-bezier(0.33, 1, 0.68, 1). */\nfunction easeOutCubic(t: number) {\n return 1 - Math.pow(1 - t, 3);\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 /**\n * While a child group's grid transition reflows the layout, tween the\n * indicator from its current visual position toward a live re-measured\n * target. Measuring the final position up-front is wrong (the layout has\n * not moved yet when `data-expanded` flips), which used to make the\n * indicator snap without animation once the transition ended.\n */\n const startExpandCollapseTracking = useCallback(() => {\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 } = getNavigationAnimationTiming(group);\n\n // Capture the start in viewport coordinates: when a horizontal group\n // resizes, the whole navigation group can shift, so group-relative\n // start metrics would ride along with the moving origin.\n const startRect = el.getBoundingClientRect();\n const startVisible = el.dataset.visible === \"true\";\n const startTime = performance.now();\n\n isLayoutTrackingRef.current = true;\n\n const finish = () => {\n layoutTrackingFrameRef.current = null;\n isLayoutTrackingRef.current = false;\n const final = measureIndicator();\n if (final) syncIndicator(final, true);\n };\n\n const tick = (now: number) => {\n if (!isLayoutTrackingRef.current) return;\n\n const progress = Math.min(1, (now - startTime) / durationMs);\n\n if (progress >= 1) {\n finish();\n return;\n }\n\n const target = measureIndicator();\n\n if (target) {\n if (!startVisible || !target.visible) {\n syncIndicator(target, true);\n } else {\n const eased = easeOutCubic(progress);\n const groupRect = group.getBoundingClientRect();\n const targetAbsX = groupRect.left + target.x;\n const targetAbsY = groupRect.top + target.y;\n\n syncIndicator(\n {\n x:\n startRect.left +\n (targetAbsX - startRect.left) * eased -\n groupRect.left,\n y:\n startRect.top +\n (targetAbsY - startRect.top) * eased -\n groupRect.top,\n width: startRect.width + (target.width - startRect.width) * eased,\n height:\n startRect.height + (target.height - startRect.height) * eased,\n visible: true,\n },\n true\n );\n }\n }\n\n layoutTrackingFrameRef.current = requestAnimationFrame(tick);\n };\n\n layoutTrackingFrameRef.current = requestAnimationFrame(tick);\n }, [cancelLayoutTracking, groupRef, measureIndicator, syncIndicator]);\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 const expandCollapseChanged = mutations.some(\n (mutation) =>\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-expanded\" &&\n mutation.target instanceof HTMLElement\n );\n\n if (expandCollapseChanged) {\n startExpandCollapseTracking();\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 (\n event.propertyName !== \"grid-template-rows\" &&\n event.propertyName !== \"width\"\n ) {\n return;\n }\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 // Vertical rail: resize when hovering / pressing the active item.\n useEffect(() => {\n if (direction !== \"vertical\") return;\n\n const group = groupRef.current;\n if (!group) return;\n\n const refreshInteractionMetrics = () => {\n if (isLayoutTrackingRef.current || isAnimatingRef.current) return;\n\n const metrics = measureIndicator();\n if (!metrics) return;\n if (metricsRef.current && metricsApproxEqual(metrics, metricsRef.current)) {\n return;\n }\n\n syncIndicator(metrics, false);\n };\n\n group.addEventListener(\"pointerover\", refreshInteractionMetrics);\n group.addEventListener(\"pointerout\", refreshInteractionMetrics);\n group.addEventListener(\"pointerdown\", refreshInteractionMetrics);\n group.addEventListener(\"pointerup\", refreshInteractionMetrics);\n group.addEventListener(\"pointercancel\", refreshInteractionMetrics);\n\n return () => {\n group.removeEventListener(\"pointerover\", refreshInteractionMetrics);\n group.removeEventListener(\"pointerout\", refreshInteractionMetrics);\n group.removeEventListener(\"pointerdown\", refreshInteractionMetrics);\n group.removeEventListener(\"pointerup\", refreshInteractionMetrics);\n group.removeEventListener(\"pointercancel\", refreshInteractionMetrics);\n };\n }, [direction, groupRef, measureIndicator, syncIndicator]);\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 aviala-focus-ring\", 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 const isCollapsed = isCollapsible && !expanded;\n const innerRef = useRef<HTMLDivElement>(null);\n\n // Collapsed children stay in the DOM for the height transition, so `inert`\n // is what keeps them out of the tab order and the accessibility tree. Set it\n // imperatively: React 18 and 19 disagree on the JSX prop type.\n useLayoutEffect(() => {\n const inner = innerRef.current;\n\n if (!inner) return;\n\n if (isCollapsed) inner.setAttribute(\"inert\", \"\");\n else inner.removeAttribute(\"inert\");\n }, [isCollapsed]);\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={isCollapsed ? true : undefined}\n {...props}\n >\n {isCollapsible ? (\n <div ref={innerRef} className=\"aviala-navigation-item-group__inner\">\n {children}\n </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\n/* -------------------------------------------------------------------------\n * NavigationItemMenu — child items collapsed into a hover flyout menu.\n * Select-like API: value/defaultValue/onValueChange on the root, `value` on\n * each item. Hidden by default, shown on hover (or click/Enter on the\n * trigger). Selected item gets a highlight, no check icon.\n * ---------------------------------------------------------------------- */\n\nconst NAVIGATION_MENU_CLOSE_DELAY_MS = 150;\n\ntype NavigationItemMenuContextValue = {\n value: string | undefined;\n\n hasSelection: boolean;\n\n select: (value: string) => void;\n\n openMenu: (viaHover: boolean) => void;\n\n scheduleClose: () => void;\n\n cancelClose: () => void;\n\n openedByHoverRef: RefObject<boolean>;\n};\n\nconst NavigationItemMenuContext =\n createContext<NavigationItemMenuContextValue | null>(null);\n\nfunction useNavigationItemMenuContext(component: string) {\n const context = useContext(NavigationItemMenuContext);\n\n if (!context) {\n throw new Error(`${component} must be used within <NavigationItemMenu>`);\n }\n\n return context;\n}\n\nexport type NavigationItemMenuProps = {\n /** Selected child value — similar to Select `value`. */\n value?: string;\n\n defaultValue?: string;\n\n onValueChange?: (value: string) => void;\n\n open?: boolean;\n\n onOpenChange?: (open: boolean) => void;\n\n children: ReactNode;\n};\n\nexport function NavigationItemMenu({\n value: valueProp,\n\n defaultValue,\n\n onValueChange,\n\n open: openProp,\n\n onOpenChange,\n\n children,\n}: NavigationItemMenuProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n const isValueControlled = valueProp !== undefined;\n\n const value = isValueControlled ? valueProp : internalValue;\n\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isOpenControlled = openProp !== undefined;\n\n const open = isOpenControlled ? openProp : internalOpen;\n\n const closeTimerRef = useRef<number | null>(null);\n\n const openedByHoverRef = useRef(false);\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isOpenControlled) setInternalOpen(nextOpen);\n\n onOpenChange?.(nextOpen);\n },\n [isOpenControlled, onOpenChange]\n );\n\n const cancelClose = useCallback(() => {\n if (closeTimerRef.current != null) {\n window.clearTimeout(closeTimerRef.current);\n\n closeTimerRef.current = null;\n }\n }, []);\n\n const openMenu = useCallback(\n (viaHover: boolean) => {\n cancelClose();\n\n openedByHoverRef.current = viaHover;\n\n setOpen(true);\n },\n [cancelClose, setOpen]\n );\n\n const scheduleClose = useCallback(() => {\n cancelClose();\n\n closeTimerRef.current = window.setTimeout(() => {\n closeTimerRef.current = null;\n\n setOpen(false);\n }, NAVIGATION_MENU_CLOSE_DELAY_MS);\n }, [cancelClose, setOpen]);\n\n const select = useCallback(\n (nextValue: string) => {\n if (!isValueControlled) setInternalValue(nextValue);\n\n onValueChange?.(nextValue);\n\n cancelClose();\n\n setOpen(false);\n },\n [cancelClose, isValueControlled, onValueChange, setOpen]\n );\n\n useEffect(() => cancelClose, [cancelClose]);\n\n const contextValue = useMemo<NavigationItemMenuContextValue>(\n () => ({\n value,\n\n hasSelection: value != null && value !== \"\",\n\n select,\n\n openMenu,\n\n scheduleClose,\n\n cancelClose,\n\n openedByHoverRef,\n }),\n [cancelClose, openMenu, scheduleClose, select, value]\n );\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) openedByHoverRef.current = false;\n\n cancelClose();\n\n setOpen(nextOpen);\n },\n [cancelClose, setOpen]\n );\n\n return (\n <NavigationItemMenuContext.Provider value={contextValue}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n {children}\n </Popover>\n </NavigationItemMenuContext.Provider>\n );\n}\n\nexport type NavigationItemMenuTriggerProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"children\"\n> & {\n /** Defaults to highlighted when the menu has a selected child. */\n active?: boolean;\n\n leftIcon?: ReactNode;\n\n rightIcon?: ReactNode;\n\n children: ReactNode;\n};\n\n/** Parent item — renders as a Navigation tab item and anchors the flyout. */\n\nexport const NavigationItemMenuTrigger = forwardRef<\n HTMLButtonElement,\n NavigationItemMenuTriggerProps\n>(\n (\n {\n className,\n\n active,\n\n leftIcon,\n\n rightIcon,\n\n children,\n\n ...props\n },\n\n ref\n ) => {\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuTrigger\");\n\n const isActive = active ?? menu.hasSelection;\n\n const mode = navigationItemButtonMode(isActive);\n\n return (\n <span\n className={cn(\"aviala-navigation-item\", className)}\n data-item-type=\"default\"\n data-active={isActive ? \"true\" : \"false\"}\n onMouseEnter={() => menu.openMenu(true)}\n onMouseLeave={menu.scheduleClose}\n >\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n buttonVariants({ mode }),\n \"aviala-navigation-item__control whitespace-normal\"\n )}\n data-size=\"regular\"\n {...props}\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 </button>\n </PopoverPrimitive.Trigger>\n </span>\n );\n }\n);\n\nNavigationItemMenuTrigger.displayName = \"NavigationItemMenuTrigger\";\n\nexport type NavigationItemMenuContentProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Content\n>;\n\n/** Flyout surface — right of the item in vertical, below it in horizontal. */\n\nexport const NavigationItemMenuContent = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n NavigationItemMenuContentProps\n>(\n (\n {\n className,\n\n side,\n\n align = \"start\",\n\n sideOffset = 6,\n\n collisionPadding = 8,\n\n onOpenAutoFocus,\n\n ...props\n },\n\n ref\n ) => {\n const direction = useNavigationDirection();\n\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuContent\");\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={side ?? (direction === \"vertical\" ? \"right\" : \"bottom\")}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n className={cn(\"aviala-navigation-menu\", className)}\n onMouseEnter={menu.cancelClose}\n onMouseLeave={menu.scheduleClose}\n onOpenAutoFocus={(event) => {\n // Hover-open must not steal focus; keyboard/click open should.\n if (menu.openedByHoverRef.current) event.preventDefault();\n\n onOpenAutoFocus?.(event);\n }}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n }\n);\n\nNavigationItemMenuContent.displayName = \"NavigationItemMenuContent\";\n\nexport type NavigationItemMenuItemProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"children\" | \"value\"\n> & {\n value: string;\n\n /** Defaults to highlighted when it matches the menu value. */\n selected?: boolean;\n\n leftIcon?: ReactNode;\n\n rightIcon?: ReactNode;\n\n children: ReactNode;\n};\n\n/** Child option — highlighted when selected, no check icon by default. */\n\nexport const NavigationItemMenuItem = forwardRef<\n HTMLButtonElement,\n NavigationItemMenuItemProps\n>(\n (\n {\n className,\n\n value,\n\n selected,\n\n leftIcon,\n\n rightIcon,\n\n disabled,\n\n onClick,\n\n children,\n\n ...props\n },\n\n ref\n ) => {\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuItem\");\n\n const isSelected = selected ?? menu.value === value;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n \"aviala-navigation-menu-item aviala-focus-ring\",\n className\n )}\n data-selected={isSelected ? \"true\" : \"false\"}\n data-disabled={disabled ? \"\" : undefined}\n aria-current={isSelected ? \"true\" : undefined}\n onClick={(event) => {\n onClick?.(event);\n\n if (!event.defaultPrevented) menu.select(value);\n }}\n {...props}\n >\n {renderItemIcon(leftIcon)}\n\n <Typography\n level=\"text\"\n as=\"span\"\n className=\"aviala-navigation-menu-item__label\"\n >\n {children}\n </Typography>\n\n {rightIcon ? (\n <span className=\"aviala-navigation-menu-item__trailing\">\n {renderItemIcon(rightIcon)}\n </span>\n ) : null}\n </button>\n );\n }\n);\n\nNavigationItemMenuItem.displayName = \"NavigationItemMenuItem\";\n","import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/** Figma Components → Information Collect → Slider (384:21585) */\nexport type SliderSize = \"default\" | \"big\";\nexport type SliderType = \"default\" | \"range\";\n\nconst sliderVariants = cva(\"aviala-slider\", {\n variants: {\n size: {\n default: \"aviala-slider--size-default\",\n big: \"aviala-slider--size-big\",\n },\n type: {\n default: \"aviala-slider--type-default\",\n range: \"aviala-slider--type-range\",\n },\n },\n defaultVariants: {\n size: \"default\",\n type: \"default\",\n },\n});\n\nexport type SliderProps = Omit<\n ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"orientation\"\n> &\n VariantProps<typeof sliderVariants> & {\n /** Figma `Type` — single thumb vs range (two thumbs) */\n type?: SliderType;\n };\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n size = \"default\",\n type = \"default\",\n disabled,\n value,\n defaultValue,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const resolvedType = type ?? \"default\";\n const resolvedSize = size ?? \"default\";\n const isRange = resolvedType === \"range\";\n const resolvedDefaultValue =\n defaultValue ?? (isRange ? [25, 75] : [50]);\n const thumbCount = isRange\n ? Math.max(2, value?.length ?? defaultValue?.length ?? 2)\n : 1;\n\n return (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n sliderVariants({ size: resolvedSize, type: resolvedType }),\n className\n )}\n disabled={disabled}\n value={value}\n defaultValue={value == null ? resolvedDefaultValue : undefined}\n min={min}\n max={max}\n data-size={resolvedSize}\n data-type={resolvedType}\n data-disabled={disabled ? \"true\" : undefined}\n {...props}\n >\n <SliderPrimitive.Track className=\"aviala-slider__track\">\n <SliderPrimitive.Range className=\"aviala-slider__range\" />\n </SliderPrimitive.Track>\n {Array.from({ length: thumbCount }, (_, index) => (\n <SliderPrimitive.Thumb key={index} className=\"aviala-slider__thumb aviala-focus-ring\" />\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\nSlider.displayName = \"Slider\";\n","import { GeneralUpload } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n useRef,\n useState,\n type ChangeEvent,\n type DragEvent,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Information Collect → Upload (527:56239) */\nexport type UploadStyle = \"default\" | \"large\";\n\nconst uploadVariants = cva(\"aviala-upload aviala-focus-ring\", {\n variants: {\n style: {\n default: \"aviala-upload--style-default\",\n large: \"aviala-upload--style-large\",\n },\n },\n defaultVariants: {\n style: \"default\",\n },\n});\n\nexport type UploadProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"style\"> &\n VariantProps<typeof uploadVariants> & {\n /** Primary line — Large style */\n title?: ReactNode;\n /** Secondary line — Large style */\n description?: ReactNode;\n /** Default style button label */\n label?: ReactNode;\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n /** Enable drag-and-drop (Large style defaults to true) */\n dragAndDrop?: boolean;\n onChange?: (files: FileList | null) => void;\n inputProps?: Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"accept\" | \"multiple\" | \"disabled\" | \"onChange\"\n >;\n };\n\nexport const Upload = forwardRef<HTMLDivElement, UploadProps>(\n (\n {\n className,\n style = \"default\",\n title = \"Drag the file here to upload the file\",\n description = \"Or click here to upload\",\n label = \"Upload\",\n accept,\n multiple,\n disabled,\n dragAndDrop,\n onChange,\n inputProps,\n onDragOver,\n onDragLeave,\n onDrop,\n ...props\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n const resolvedStyle = style ?? \"default\";\n const allowDrag = dragAndDrop ?? resolvedStyle === \"large\";\n\n const openPicker = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.files);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n onDrop?.(event);\n setDragging(false);\n if (disabled || !allowDrag) return;\n event.preventDefault();\n if (event.dataTransfer.files?.length) {\n onChange?.(event.dataTransfer.files);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n className={cn(uploadVariants({ style: resolvedStyle }), className)}\n data-style={resolvedStyle}\n data-disabled={disabled ? \"true\" : undefined}\n data-dragging={dragging ? \"true\" : undefined}\n aria-disabled={disabled || undefined}\n onClick={openPicker}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openPicker();\n }\n }}\n onDragOver={(event) => {\n onDragOver?.(event);\n if (disabled || !allowDrag) return;\n event.preventDefault();\n setDragging(true);\n }}\n onDragLeave={(event) => {\n onDragLeave?.(event);\n setDragging(false);\n }}\n onDrop={handleDrop}\n {...props}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className=\"aviala-upload__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleChange}\n tabIndex={-1}\n aria-hidden\n {...inputProps}\n />\n <span className=\"aviala-upload__icon\" aria-hidden>\n <GeneralUpload width={16} height={16} />\n </span>\n {resolvedStyle === \"large\" ? (\n <Typeface\n className=\"aviala-upload__typeface\"\n content=\"textCaption\"\n primary={title}\n secondary={description}\n />\n ) : (\n <Typography level=\"text\" as=\"span\" className=\"aviala-upload__label\">\n {label}\n </Typography>\n )}\n </div>\n );\n }\n);\nUpload.displayName = \"Upload\";\n","import {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n stickyRoundIndex,\n WHEEL_SCROLL_END_MS,\n WHEEL_STEP_THRESHOLD_FACTOR,\n WHEEL_STICKY_AMOUNT,\n} from \"../lib/sticky-wheel\";\nimport { typographyVariants } from \"./typography\";\n\nconst LOOP_SECTIONS = 3;\nconst MIDDLE_SECTION = 1;\n\n/** Figma Components → Information Collect → ScrollPicker (579:88681) */\n\nfunction normalizeIndex(index: number, length: number): number {\n return ((index % length) + length) % length;\n}\n\ntype ColumnMetrics = {\n /** Distance between the top edges of two consecutive items (height + gap). */\n pitch: number;\n /** Scroll offset that centers the item at index 0 inside the viewport. */\n originTop: number;\n};\n\n/**\n * Geometry is measured from the live DOM rather than derived from the height\n * token: items carry collapsible block margins and the list is padded by\n * spacer pseudo-elements, so the scroll pitch is not the item height and index\n * 0 does not sit at scrollTop 0.\n */\nfunction readMetrics(container: HTMLElement): ColumnMetrics | null {\n const items = container.querySelectorAll<HTMLElement>(\".aviala-scroll-picker-item\");\n const first = items[0];\n if (!first) return null;\n\n const itemHeight = first.offsetHeight;\n const second = items[1];\n const measuredPitch = second ? second.offsetTop - first.offsetTop : itemHeight;\n const pitch = measuredPitch > 0 ? measuredPitch : itemHeight;\n if (pitch <= 0) return null;\n\n return {\n pitch,\n originTop: first.offsetTop + itemHeight / 2 - container.clientHeight / 2,\n };\n}\n\nfunction scrollTopForIndex(container: HTMLElement, metrics: ColumnMetrics, index: number): number {\n const maxScroll = Math.max(container.scrollHeight - container.clientHeight, 0);\n return Math.min(Math.max(metrics.originTop + index * metrics.pitch, 0), maxScroll);\n}\n\nfunction fractionalIndexAtScrollTop(metrics: ColumnMetrics, scrollTop: number): number {\n return (scrollTop - metrics.originTop) / metrics.pitch;\n}\n\nexport type ScrollPickerProps = HTMLAttributes<HTMLDivElement>;\n\nexport function ScrollPicker({ className, children, ...props }: ScrollPickerProps) {\n return (\n <div className={cn(\"aviala-scroll-picker\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type ScrollPickerColumnProps<T = string> = {\n className?: string;\n values: readonly T[];\n value: T;\n onChange: (value: T) => void;\n \"aria-label\": string;\n loop?: boolean;\n formatValue?: (value: T) => ReactNode;\n getValueKey?: (value: T, index: number) => string;\n};\n\nexport function ScrollPickerColumn<T = string>({\n className,\n values,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n loop = true,\n formatValue,\n getValueKey,\n}: ScrollPickerColumnProps<T>) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const isProgrammaticScrollRef = useRef(false);\n /** When set, value-driven auto sync must not cancel an in-flight smooth scroll. */\n const smoothTargetValueRef = useRef<T | null>(null);\n const scrollEndTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const wheelAccumRef = useRef(0);\n const selectedValueRef = useRef(value);\n const reactId = useId();\n\n selectedValueRef.current = value;\n\n const getIndex = useCallback(\n (candidate: T) => {\n const index = values.findIndex((item) => Object.is(item, candidate));\n return index >= 0 ? index : 0;\n },\n [values]\n );\n\n const repeatedValues = useMemo(() => {\n if (!loop) return [...values];\n return Array.from({ length: LOOP_SECTIONS }, () => values).flat();\n }, [loop, values]);\n\n const scrollToIndex = useCallback((index: number, behavior: ScrollBehavior = \"auto\") => {\n const container = scrollRef.current;\n if (!container) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n isProgrammaticScrollRef.current = true;\n container.scrollTo({ top: scrollTopForIndex(container, metrics, index), behavior });\n }, []);\n\n const scrollToValue = useCallback(\n (nextValue: T, behavior: ScrollBehavior = \"smooth\") => {\n if (behavior === \"smooth\") {\n smoothTargetValueRef.current = nextValue;\n } else {\n smoothTargetValueRef.current = null;\n }\n const valueIndex = getIndex(nextValue);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n scrollToIndex(targetIndex, behavior);\n },\n [getIndex, loop, scrollToIndex, values.length]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container || isProgrammaticScrollRef.current) {\n isProgrammaticScrollRef.current = false;\n smoothTargetValueRef.current = null;\n return;\n }\n\n const metrics = readMetrics(container);\n if (!metrics || values.length === 0) return;\n\n const lastIndex = values.length - 1;\n const maxScroll = Math.max(container.scrollHeight - container.clientHeight, 0);\n let rawIndex = stickyRoundIndex(\n fractionalIndexAtScrollTop(metrics, container.scrollTop),\n WHEEL_STICKY_AMOUNT\n );\n\n if (!loop) {\n // The trailing spacer may be a hair too short to fully centre the edge\n // items; treat a scroll pinned to either end as that end's index so the\n // first/last option stays selectable.\n if (container.scrollTop >= maxScroll - 1) {\n rawIndex = lastIndex;\n } else if (container.scrollTop <= 1) {\n rawIndex = 0;\n }\n }\n\n const valueIndex = loop\n ? normalizeIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const targetTop = scrollTopForIndex(container, metrics, targetIndex);\n const section = loop ? Math.floor(rawIndex / values.length) : MIDDLE_SECTION;\n const needsLoopRecenter = loop && section !== MIDDLE_SECTION;\n const needsSnap = Math.abs(container.scrollTop - targetTop) > 1;\n\n if (needsLoopRecenter) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n } else if (needsSnap) {\n isProgrammaticScrollRef.current = true;\n smoothTargetValueRef.current = nextValue;\n container.scrollTo({ top: targetTop, behavior: \"smooth\" });\n }\n\n if (!Object.is(nextValue, selectedValueRef.current)) {\n onChange(nextValue);\n }\n\n if (!needsSnap) {\n smoothTargetValueRef.current = null;\n }\n isUserScrollingRef.current = false;\n wheelAccumRef.current = 0;\n }, [loop, onChange, values]);\n\n const handleScroll = useCallback(() => {\n if (isProgrammaticScrollRef.current) return;\n isUserScrollingRef.current = true;\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n scrollEndTimerRef.current = setTimeout(settleScroll, WHEEL_SCROLL_END_MS);\n }, [settleScroll]);\n\n useLayoutEffect(() => {\n if (isUserScrollingRef.current) return;\n // Click/keyboard already started a smooth scroll to this value — don't snap.\n if (\n smoothTargetValueRef.current != null &&\n Object.is(smoothTargetValueRef.current, value)\n ) {\n return;\n }\n\n const container = scrollRef.current;\n if (!container || values.length === 0) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n const valueIndex = getIndex(value);\n const targetIndex = loop ? values.length * MIDDLE_SECTION + valueIndex : valueIndex;\n const targetTop = scrollTopForIndex(container, metrics, targetIndex);\n\n if (Math.abs(container.scrollTop - targetTop) <= 1) return;\n\n scrollToIndex(targetIndex, \"auto\");\n }, [getIndex, loop, scrollToIndex, value, values.length]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onScrollEnd = () => {\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n settleScroll();\n };\n\n container.addEventListener(\"scrollend\", onScrollEnd);\n return () => {\n container.removeEventListener(\"scrollend\", onScrollEnd);\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n };\n }, [settleScroll]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n if (isProgrammaticScrollRef.current || values.length === 0) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n wheelAccumRef.current += event.deltaY;\n const threshold = metrics.pitch * WHEEL_STEP_THRESHOLD_FACTOR;\n if (Math.abs(wheelAccumRef.current) < threshold) return;\n\n const direction = wheelAccumRef.current > 0 ? 1 : -1;\n wheelAccumRef.current = 0;\n\n const currentIndex = getIndex(selectedValueRef.current);\n const nextIndex = loop\n ? normalizeIndex(currentIndex + direction, values.length)\n : Math.min(Math.max(currentIndex + direction, 0), values.length - 1);\n if (nextIndex === currentIndex) return;\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[nextIndex];\n isUserScrollingRef.current = false;\n scrollToValue(nextValue, \"smooth\");\n if (!Object.is(nextValue, selectedValueRef.current)) {\n onChange(nextValue);\n }\n };\n\n container.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n container.removeEventListener(\"wheel\", onWheel);\n };\n }, [getIndex, loop, onChange, scrollToValue, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const currentIndex = getIndex(selectedValueRef.current);\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case \"ArrowUp\":\n nextIndex = loop\n ? normalizeIndex(currentIndex - 1, values.length)\n : Math.max(currentIndex - 1, 0);\n break;\n case \"ArrowDown\":\n nextIndex = loop\n ? normalizeIndex(currentIndex + 1, values.length)\n : Math.min(currentIndex + 1, values.length - 1);\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const nextValue = values[nextIndex];\n scrollToValue(nextValue, \"smooth\");\n if (!Object.is(nextValue, selectedValueRef.current)) {\n onChange(nextValue);\n }\n };\n\n const selectedOptionId = `${reactId}-${getIndex(value)}`;\n\n return (\n <div className={cn(\"aviala-scroll-picker-column\", className)}>\n <div className=\"aviala-scroll-picker-column__viewport\">\n <div className=\"aviala-scroll-picker-column__highlight\" aria-hidden />\n <div\n ref={scrollRef}\n className=\"aviala-scroll-picker-column__scroll aviala-focus-ring\"\n onScroll={handleScroll}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-activedescendant={selectedOptionId}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n >\n <ul className=\"aviala-scroll-picker-column__list\">\n {repeatedValues.map((itemValue, index) => {\n const isSelected = Object.is(itemValue, value);\n const valueIndex = loop ? normalizeIndex(index, values.length) : index;\n const optionId = `${reactId}-${loop ? index : valueIndex}`;\n const key =\n getValueKey?.(itemValue, index) ??\n `${String(itemValue)}-${index}`;\n\n return (\n <li key={key} className=\"contents\">\n <ScrollPickerItem\n id={isSelected ? selectedOptionId : optionId}\n selected={isSelected}\n onSelect={() => {\n scrollToValue(itemValue, \"smooth\");\n if (!Object.is(itemValue, selectedValueRef.current)) {\n onChange(itemValue);\n }\n }}\n >\n {formatValue ? formatValue(itemValue) : String(itemValue)}\n </ScrollPickerItem>\n </li>\n );\n })}\n </ul>\n </div>\n </div>\n </div>\n );\n}\n\nexport type ScrollPickerItemProps = {\n id?: string;\n selected?: boolean;\n children?: ReactNode;\n className?: string;\n onSelect?: () => void;\n};\n\nexport function ScrollPickerItem({\n id,\n selected = false,\n children,\n className,\n onSelect,\n}: ScrollPickerItemProps) {\n return (\n <button\n type=\"button\"\n id={id}\n role=\"option\"\n aria-selected={selected}\n className={cn(\n \"aviala-scroll-picker-item\",\n typographyVariants({ level: \"text\" }),\n className\n )}\n data-selected={selected ? \"true\" : undefined}\n tabIndex={-1}\n onClick={onSelect}\n >\n {children}\n </button>\n );\n}\n","import { DirectionArrowRightLight, SymbolMore } from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { Typography, type TypographyLevel } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Breadcrumb (622:7883) */\nexport type BreadcrumbSize = \"default\" | \"small\";\n\nconst BreadcrumbSizeContext = createContext<BreadcrumbSize>(\"default\");\n\nfunction breadcrumbTypeLevel(size: BreadcrumbSize): TypographyLevel {\n /* Figma: Default → Typography Text; Small → Typography Caption */\n return size === \"small\" ? \"caption\" : \"text\";\n}\n\nconst breadcrumbVariants = cva(\"aviala-breadcrumb\", {\n variants: {\n size: {\n default: \"aviala-breadcrumb--size-default\",\n small: \"aviala-breadcrumb--size-small\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nexport type BreadcrumbProps = HTMLAttributes<HTMLElement> &\n VariantProps<typeof breadcrumbVariants>;\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, size = \"default\", children, ...props }, ref) => {\n const resolvedSize = size ?? \"default\";\n return (\n <BreadcrumbSizeContext.Provider value={resolvedSize}>\n <nav\n ref={ref}\n aria-label={props[\"aria-label\"] ?? \"Breadcrumb\"}\n className={cn(breadcrumbVariants({ size: resolvedSize }), className)}\n data-size={resolvedSize}\n {...props}\n >\n <ol className=\"aviala-breadcrumb__list\">{children}</ol>\n </nav>\n </BreadcrumbSizeContext.Provider>\n );\n }\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport type BreadcrumbItemProps = ComponentPropsWithoutRef<\"li\"> & {\n href?: string;\n current?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n};\n\nexport const BreadcrumbItem = forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n ({ className, href, current = false, icon, onClick, children, ...props }, ref) => {\n const size = useContext(BreadcrumbSizeContext);\n const label = (\n <>\n {icon ? <span className=\"aviala-breadcrumb-item__icon\">{icon}</span> : null}\n {children != null ? (\n <Typography\n level={breadcrumbTypeLevel(size)}\n as=\"span\"\n className=\"aviala-breadcrumb-item__label\"\n >\n {children}\n </Typography>\n ) : null}\n </>\n );\n\n return (\n <li\n ref={ref}\n className={cn(\"aviala-breadcrumb-item-wrap\", className)}\n {...props}\n >\n {href != null ? (\n <a\n href={href}\n className=\"aviala-breadcrumb-item aviala-focus-ring\"\n data-current={current ? \"true\" : undefined}\n aria-current={current ? \"page\" : undefined}\n >\n {label}\n </a>\n ) : onClick != null ? (\n <button\n type=\"button\"\n className=\"aviala-breadcrumb-item aviala-focus-ring\"\n data-current={current ? \"true\" : undefined}\n aria-current={current ? \"page\" : undefined}\n onClick={onClick}\n >\n {label}\n </button>\n ) : (\n <span\n className=\"aviala-breadcrumb-item\"\n data-current={current ? \"true\" : undefined}\n aria-current={current ? \"page\" : undefined}\n >\n {label}\n </span>\n )}\n </li>\n );\n }\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport type BreadcrumbSeparatorProps = HTMLAttributes<HTMLLIElement> & {\n children?: ReactNode;\n};\n\nexport const BreadcrumbSeparator = forwardRef<HTMLLIElement, BreadcrumbSeparatorProps>(\n ({ className, children = \"/\", ...props }, ref) => {\n const size = useContext(BreadcrumbSizeContext);\n return (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden\n className={cn(\"aviala-breadcrumb-separator\", className)}\n {...props}\n >\n <Typography level={breadcrumbTypeLevel(size)} as=\"span\">\n {children}\n </Typography>\n </li>\n );\n }\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nexport type BreadcrumbEllipsisItemProps = Omit<\n ComponentPropsWithoutRef<\"a\">,\n \"type\"\n> & {\n href?: string;\n onClick?: () => void;\n /** Figma Select Menu Item trailing chevron — default true */\n showChevron?: boolean;\n};\n\n/** Figma Select Menu Item inside Storage item button activated=ON */\nexport const BreadcrumbEllipsisItem = forwardRef<\n HTMLAnchorElement | HTMLButtonElement,\n BreadcrumbEllipsisItemProps\n>(\n (\n {\n className,\n href,\n onClick,\n showChevron = true,\n children,\n ...props\n },\n ref\n ) => {\n const content = (\n <>\n <Typography level=\"text\" as=\"span\" className=\"aviala-breadcrumb-ellipsis-item__label\">\n {children}\n </Typography>\n {showChevron ? (\n <span className=\"aviala-breadcrumb-ellipsis-item__chevron\" aria-hidden>\n <DirectionArrowRightLight width={14} height={14} thickness=\"Light\" />\n </span>\n ) : null}\n </>\n );\n\n if (href != null) {\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n className={cn(\"aviala-breadcrumb-ellipsis-item aviala-focus-ring\", className)}\n onClick={onClick}\n {...props}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n className={cn(\"aviala-breadcrumb-ellipsis-item aviala-focus-ring\", className)}\n onClick={onClick}\n {...(props as ComponentPropsWithoutRef<\"button\">)}\n >\n {content}\n </button>\n );\n }\n);\nBreadcrumbEllipsisItem.displayName = \"BreadcrumbEllipsisItem\";\n\nexport type BreadcrumbEllipsisProps = Omit<ComponentPropsWithoutRef<\"button\">, \"type\"> & {\n className?: string;\n /**\n * Figma `activated` on Storage item button.\n * OFF = muted ellipsis; ON = full opacity + open Select Menu (when `menu` is set).\n */\n activated?: boolean;\n defaultActivated?: boolean;\n onActivatedChange?: (activated: boolean) => void;\n /** Collapsed middle-path items shown in the Select Menu when activated */\n menu?: ReactNode;\n};\n\n/** Figma `Storage item button` — collapsed middle path */\nexport const BreadcrumbEllipsis = forwardRef<HTMLLIElement, BreadcrumbEllipsisProps>(\n (\n {\n className,\n children,\n activated: activatedProp,\n defaultActivated = false,\n onActivatedChange,\n menu,\n onClick,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const size = useContext(BreadcrumbSizeContext);\n const [uncontrolledActivated, setUncontrolledActivated] = useState(defaultActivated);\n const isControlled = activatedProp !== undefined;\n const activated = isControlled ? Boolean(activatedProp) : uncontrolledActivated;\n\n const setActivated = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledActivated(next);\n onActivatedChange?.(next);\n },\n [isControlled, onActivatedChange]\n );\n\n /* Figma Small Storage item button still uses 14px SymbolMore */\n const iconSize = 14;\n const icon = children ?? (\n <SymbolMore width={iconSize} height={iconSize} thickness=\"Light\" aria-hidden />\n );\n\n const trigger = (\n <button\n type=\"button\"\n className=\"aviala-breadcrumb-ellipsis aviala-focus-ring\"\n data-size={size}\n data-activated={activated ? \"true\" : undefined}\n aria-label={ariaLabel ?? \"Show more breadcrumb items\"}\n aria-expanded={menu != null ? activated : undefined}\n aria-haspopup={menu != null ? \"menu\" : undefined}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (menu == null) setActivated(!activated);\n }}\n {...props}\n >\n {icon}\n </button>\n );\n\n return (\n <li ref={ref} className={cn(\"aviala-breadcrumb-ellipsis-wrap\", className)}>\n {menu != null ? (\n <Popover open={activated} onOpenChange={setActivated}>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n <PopoverContent\n className=\"aviala-breadcrumb-ellipsis-menu\"\n align=\"center\"\n side=\"bottom\"\n sideOffset={7}\n showArrow={false}\n role=\"menu\"\n >\n <div className=\"aviala-breadcrumb-ellipsis-menu__items\">{menu}</div>\n </PopoverContent>\n </Popover>\n ) : (\n trigger\n )}\n </li>\n );\n }\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typeface } from \"./typeface\";\n\n/** Figma Components → Structure Navigation → Pagehead (643:172156) */\n\nexport type PageheadProps = HTMLAttributes<HTMLElement> & {\n /** Optional leading control (typically back button) */\n back?: ReactNode;\n /** Optional breadcrumb above the title */\n breadcrumb?: ReactNode;\n /** Primary title line */\n title?: ReactNode;\n /** Secondary caption under title */\n description?: ReactNode;\n /** Trailing actions slot */\n actions?: ReactNode;\n};\n\nexport const Pagehead = forwardRef<HTMLElement, PageheadProps>(\n (\n {\n className,\n back,\n breadcrumb,\n title,\n description,\n actions,\n children,\n ...props\n },\n ref\n ) => (\n <header ref={ref} className={cn(\"aviala-pagehead\", className)} {...props}>\n <div className=\"aviala-pagehead__main\">\n {back != null ? <div className=\"aviala-pagehead__back\">{back}</div> : null}\n <div className=\"aviala-pagehead__title-block\">\n {breadcrumb != null ? (\n <div className=\"aviala-pagehead__breadcrumb\">{breadcrumb}</div>\n ) : null}\n {title != null || description != null ? (\n <div className=\"aviala-pagehead__title\">\n <Typeface content=\"textCaption\" primary={title} secondary={description} />\n </div>\n ) : null}\n {children}\n </div>\n </div>\n {actions != null ? <div className=\"aviala-pagehead__actions\">{actions}</div> : null}\n </header>\n )\n);\nPagehead.displayName = \"Pagehead\";\n","import {\n SymbolRight,\n SymbolWarning,\n SymbolWrong,\n} from \"@aviala-design/icons\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Steps (791:143425) */\nexport type StepsDirection = \"horizontal\" | \"vertical\";\nexport type StepsState =\n | \"done\"\n | \"fail\"\n | \"warning\"\n | \"waiting\"\n | \"inProgress\"\n | \"default\";\n\nconst stepsVariants = cva(\"aviala-steps\", {\n variants: {\n direction: {\n horizontal: \"aviala-steps--direction-horizontal\",\n vertical: \"aviala-steps--direction-vertical\",\n },\n },\n defaultVariants: {\n direction: \"horizontal\",\n },\n});\n\nexport type StepsProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof stepsVariants>;\n\nexport const Steps = forwardRef<HTMLDivElement, StepsProps>(\n ({ className, direction = \"horizontal\", children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(stepsVariants({ direction }), className)}\n data-direction={direction}\n {...props}\n >\n {children}\n </div>\n )\n);\nSteps.displayName = \"Steps\";\n\nexport type StepsIconProps = HTMLAttributes<HTMLSpanElement> & {\n state?: StepsState;\n /** Step number shown for default / inProgress / waiting */\n index?: number;\n children?: ReactNode;\n};\n\nfunction defaultStepsIconContent(state: StepsState, index?: number): ReactNode {\n switch (state) {\n case \"done\":\n return <SymbolRight width={12} height={12} thickness=\"Bold\" aria-hidden />;\n case \"fail\":\n return <SymbolWrong width={12} height={12} thickness=\"Bold\" aria-hidden />;\n case \"warning\":\n return <SymbolWarning width={12} height={12} thickness=\"Bold\" aria-hidden />;\n case \"waiting\":\n case \"inProgress\":\n case \"default\":\n default:\n return index != null ? (\n <Typography level=\"caption\" as=\"span\" className=\"aviala-steps-icon__index\">\n {index}\n </Typography>\n ) : null;\n }\n}\n\nexport const StepsIcon = forwardRef<HTMLSpanElement, StepsIconProps>(\n ({ className, state = \"default\", index, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"aviala-steps-icon\", className)}\n data-state={state}\n {...props}\n >\n {children ?? defaultStepsIconContent(state, index)}\n </span>\n )\n);\nStepsIcon.displayName = \"StepsIcon\";\n\nexport type StepsItemProps = HTMLAttributes<HTMLDivElement> & {\n state?: StepsState;\n title?: ReactNode;\n description?: ReactNode;\n index?: number;\n icon?: ReactNode;\n};\n\nexport const StepsItem = forwardRef<HTMLDivElement, StepsItemProps>(\n (\n {\n className,\n state = \"default\",\n title,\n description,\n index,\n icon,\n children,\n ...props\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\"aviala-steps-item\", className)}\n data-state={state}\n {...props}\n >\n {icon ?? <StepsIcon state={state} index={index} />}\n <div className=\"aviala-steps-item__body\">\n {title != null ? (\n <Typography\n level=\"subtitle\"\n as=\"div\"\n className=\"aviala-steps-item__title\"\n >\n {title}\n </Typography>\n ) : null}\n {description != null ? (\n <Typography\n level=\"text\"\n as=\"div\"\n className=\"aviala-steps-item__description\"\n >\n {description}\n </Typography>\n ) : null}\n {children}\n </div>\n </div>\n )\n);\nStepsItem.displayName = \"StepsItem\";\n","import {\n DirectionArrowLeftLight,\n DirectionArrowRightLight,\n} from \"@aviala-design/icons\";\nimport {\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button, buttonVariants } from \"./button\";\nimport { Input } from \"./input\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectItemGroup,\n SelectTrigger,\n} from \"./select\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Pagination (791:146366) */\n\nfunction buildPageList(page: number, pageCount: number): Array<number | \"ellipsis\"> {\n if (pageCount <= 7) {\n return Array.from({ length: pageCount }, (_, index) => index + 1);\n }\n\n const pages = new Set<number>();\n pages.add(1);\n pages.add(pageCount);\n for (let i = page - 1; i <= page + 1; i += 1) {\n if (i >= 1 && i <= pageCount) pages.add(i);\n }\n\n const sorted = [...pages].sort((a, b) => a - b);\n const result: Array<number | \"ellipsis\"> = [];\n for (let i = 0; i < sorted.length; i += 1) {\n const current = sorted[i];\n const prev = sorted[i - 1];\n if (prev != null && current - prev > 1) {\n result.push(\"ellipsis\");\n }\n result.push(current);\n }\n return result;\n}\n\n/** Resolve the page numbers hidden behind an ellipsis slot. */\nfunction ellipsisRange(\n pages: Array<number | \"ellipsis\">,\n index: number\n): number[] {\n const prev = pages[index - 1];\n const next = pages[index + 1];\n if (typeof prev !== \"number\" || typeof next !== \"number\") return [];\n const start = prev + 1;\n const end = next - 1;\n const range: number[] = [];\n for (let p = start; p <= end; p += 1) range.push(p);\n return range;\n}\n\nexport type PaginationProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> & {\n page?: number;\n defaultPage?: number;\n pageCount: number;\n onPageChange?: (page: number) => void;\n showJump?: boolean;\n showSizeChanger?: boolean;\n pageSize?: number;\n defaultPageSize?: number;\n pageSizeOptions?: number[];\n onPageSizeChange?: (pageSize: number) => void;\n jumpLabel?: ReactNode;\n sizeLabel?: ReactNode;\n sizeOptionLabel?: (size: number) => ReactNode;\n};\n\nexport const Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n className,\n page: pageProp,\n defaultPage = 1,\n pageCount,\n onPageChange,\n showJump = true,\n showSizeChanger = true,\n pageSize: pageSizeProp,\n defaultPageSize = 10,\n pageSizeOptions = [10, 20, 50],\n onPageSizeChange,\n jumpLabel = \"跳转至\",\n sizeLabel = \"每页\",\n sizeOptionLabel = (size) => `${size} 项`,\n ...props\n },\n ref\n ) => {\n const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n const [uncontrolledPageSize, setUncontrolledPageSize] = useState(defaultPageSize);\n const [jumpValue, setJumpValue] = useState(\"\");\n const [openEllipsis, setOpenEllipsis] = useState<number | null>(null);\n const page = pageProp ?? uncontrolledPage;\n const pageSize = pageSizeProp ?? uncontrolledPageSize;\n const safePageCount = Math.max(1, pageCount);\n const currentPage = Math.min(Math.max(page, 1), safePageCount);\n const pages = buildPageList(currentPage, safePageCount);\n\n const setPage = (next: number) => {\n const clamped = Math.min(Math.max(next, 1), safePageCount);\n if (pageProp == null) setUncontrolledPage(clamped);\n onPageChange?.(clamped);\n };\n\n const setPageSize = (next: number) => {\n if (pageSizeProp == null) setUncontrolledPageSize(next);\n onPageSizeChange?.(next);\n };\n\n const commitJump = () => {\n const parsed = Number.parseInt(jumpValue, 10);\n if (!Number.isFinite(parsed)) return;\n setPage(parsed);\n setJumpValue(\"\");\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-pagination\", className)}\n role=\"navigation\"\n aria-label={props[\"aria-label\"] ?? \"Pagination\"}\n {...props}\n >\n <div className=\"aviala-pagination__controls\">\n <Button\n mode=\"noBackgroundCustom\"\n size=\"regular\"\n iconOnly\n aria-label=\"Previous page\"\n disabled={currentPage <= 1}\n leftIcon={<DirectionArrowLeftLight aria-hidden />}\n onClick={() => setPage(currentPage - 1)}\n />\n <div className=\"aviala-pagination__pages\">\n {pages.map((item, index) =>\n item === \"ellipsis\" ? (\n <Popover\n key={`ellipsis-${index}`}\n open={openEllipsis === index}\n onOpenChange={(open) => setOpenEllipsis(open ? index : null)}\n >\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-size=\"regular\"\n className={cn(\n buttonVariants({ mode: \"noBackgroundCustom\", compact: true }),\n \"aviala-pagination__page--ellipsis\"\n )}\n aria-label=\"更多页码\"\n aria-haspopup=\"menu\"\n >\n <Typography level=\"text\" as=\"span\">\n …\n </Typography>\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"aviala-pagination__ellipsis-content\" showArrow flush>\n <div className=\"aviala-pagination__ellipsis-menu\">\n {ellipsisRange(pages, index).map((p) => (\n <button\n key={p}\n type=\"button\"\n data-size=\"regular\"\n className={cn(\n buttonVariants({ mode: \"noBackgroundCustom\", compact: true }),\n \"aviala-pagination__ellipsis-page\"\n )}\n onClick={() => {\n setPage(p);\n setOpenEllipsis(null);\n }}\n >\n <Typography level=\"text\" as=\"span\">\n {p}\n </Typography>\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n ) : (\n <button\n key={item}\n type=\"button\"\n data-size=\"regular\"\n className={cn(\n buttonVariants({ mode: \"noBackgroundCustom\", compact: true }),\n \"aviala-pagination__page\"\n )}\n data-active={item === currentPage ? \"true\" : undefined}\n aria-current={item === currentPage ? \"page\" : undefined}\n onClick={() => setPage(item)}\n >\n <Typography level=\"text\" as=\"span\">\n {item}\n </Typography>\n </button>\n )\n )}\n </div>\n <Button\n mode=\"noBackgroundCustom\"\n size=\"regular\"\n iconOnly\n aria-label=\"Next page\"\n disabled={currentPage >= safePageCount}\n leftIcon={<DirectionArrowRightLight aria-hidden />}\n onClick={() => setPage(currentPage + 1)}\n />\n </div>\n\n {showJump ? (\n <div className=\"aviala-pagination__jump\">\n <Typography level=\"text\" as=\"span\">\n {jumpLabel}\n </Typography>\n <Input\n className=\"aviala-pagination__jump-input\"\n size=\"regular\"\n fullWidth={false}\n value={jumpValue}\n placeholder=\"页码\"\n inputMode=\"numeric\"\n onChange={(event) => setJumpValue(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n commitJump();\n }\n }}\n onBlur={commitJump}\n />\n </div>\n ) : null}\n\n {showSizeChanger ? (\n <div className=\"aviala-pagination__size\">\n <Typography level=\"text\" as=\"span\">\n {sizeLabel}\n </Typography>\n <Select\n value={String(pageSize)}\n onValueChange={(value) => setPageSize(Number(value))}\n >\n <SelectTrigger\n size=\"regular\"\n className=\"aviala-pagination__size-select\"\n aria-label=\"Page size\"\n />\n <SelectContent>\n <SelectItemGroup>\n {pageSizeOptions.map((option) => (\n <SelectItem\n key={option}\n value={String(option)}\n itemFunction=\"checkbox\"\n >\n {sizeOptionLabel(option)}\n </SelectItem>\n ))}\n </SelectItemGroup>\n </SelectContent>\n </Select>\n </div>\n ) : null}\n </div>\n );\n }\n);\nPagination.displayName = \"Pagination\";\n","import {\n DirectionArrowRightLight,\n GeneralSetting,\n} from \"@aviala-design/icons\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typeface } from \"./typeface\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Card (738:145715) */\nexport type CardSlotType = \"action\" | \"switch\" | \"select\";\n\nexport type CardProps = HTMLAttributes<HTMLDivElement>;\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-card\", className)} {...props}>\n {children}\n </div>\n )\n);\nCard.displayName = \"Card\";\n\nfunction renderCardIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: 14,\n height: 14,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return <span className=\"aviala-card-head__icon\">{content}</span>;\n}\n\nexport type CardHeadProps = ComponentPropsWithoutRef<\"div\"> & {\n slotType?: CardSlotType;\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n actionLabel?: ReactNode;\n action?: ReactNode;\n secondaryAction?: ReactNode;\n select?: ReactNode;\n switchProps?: Omit<SwitchProps, \"size\">;\n trailing?: ReactNode;\n};\n\nexport const CardHead = forwardRef<HTMLDivElement, CardHeadProps>(\n (\n {\n className,\n slotType = \"select\",\n icon,\n title,\n description,\n actionLabel = \"Text\",\n action,\n secondaryAction,\n select,\n switchProps,\n trailing,\n children,\n ...props\n },\n ref\n ) => {\n const primaryAction =\n action ??\n (\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\n {actionLabel}\n </Button>\n );\n\n const renderTrailing = () => {\n if (trailing !== undefined) return trailing;\n\n switch (slotType) {\n case \"action\":\n return (\n <div className=\"aviala-card-head__trailing\">\n {primaryAction}\n {secondaryAction ?? (\n <Button\n mode=\"default\"\n size=\"regular\"\n iconOnly\n aria-label=\"More\"\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <DirectionArrowRightLight width={14} height={14} aria-hidden />\n </div>\n );\n case \"switch\":\n return (\n <div className=\"aviala-card-head__trailing\">\n {primaryAction}\n <span className=\"aviala-card__divider\" aria-hidden />\n <Switch {...switchProps} />\n </div>\n );\n case \"select\":\n default:\n return select != null ? (\n <div className=\"aviala-card-head__trailing\">{select}</div>\n ) : null;\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-card-head\", className)}\n data-type={slotType}\n {...props}\n >\n <div className=\"aviala-card-head__main\">\n {/* Figma Card item head always includes a leading icon slot */}\n {renderCardIcon(icon ?? <GeneralSetting aria-hidden />)}\n <div className=\"aviala-card-head__title\">\n {title != null || description != null ? (\n <Typeface content=\"textCaption\" primary={title} secondary={description} />\n ) : (\n children\n )}\n </div>\n </div>\n {renderTrailing()}\n </div>\n );\n }\n);\nCardHead.displayName = \"CardHead\";\n\nexport type CardBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardBody = forwardRef<HTMLDivElement, CardBodyProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"aviala-card-body\", className)} {...props}>\n <div className=\"aviala-card-body__content\">\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Typography level=\"text\" as=\"span\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </div>\n </div>\n )\n);\nCardBody.displayName = \"CardBody\";\n\nexport type CardBottomProps = ComponentPropsWithoutRef<\"div\"> & {\n slotType?: CardSlotType;\n actionLabel?: ReactNode;\n action?: ReactNode;\n secondaryAction?: ReactNode;\n select?: ReactNode;\n switchProps?: Omit<SwitchProps, \"size\">;\n trailing?: ReactNode;\n};\n\nexport const CardBottom = forwardRef<HTMLDivElement, CardBottomProps>(\n (\n {\n className,\n slotType = \"action\",\n actionLabel = \"Text\",\n action,\n secondaryAction,\n select,\n switchProps,\n trailing,\n children,\n ...props\n },\n ref\n ) => {\n const primaryAction =\n action ??\n (\n <Button mode=\"primary\" size=\"regular\" leftIcon={<GeneralSetting aria-hidden />}>\n {actionLabel}\n </Button>\n );\n\n const renderTrailing = () => {\n if (trailing !== undefined) return trailing;\n if (children != null) return children;\n\n switch (slotType) {\n case \"switch\":\n return (\n <>\n {primaryAction}\n <span className=\"aviala-card__divider\" aria-hidden />\n <Switch {...switchProps} />\n </>\n );\n case \"select\":\n return select;\n case \"action\":\n default:\n return (\n <>\n {primaryAction}\n {secondaryAction ?? (\n <Button\n mode=\"default\"\n size=\"regular\"\n iconOnly\n aria-label=\"More\"\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <DirectionArrowRightLight width={14} height={14} aria-hidden />\n </>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"aviala-card-bottom\", className)}\n data-type={slotType}\n {...props}\n >\n <div className=\"aviala-card-bottom__trailing\">{renderTrailing()}</div>\n </div>\n );\n }\n);\nCardBottom.displayName = \"CardBottom\";\n","import {\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Avatar } from \"./avatar\";\nimport { Badge } from \"./badge\";\nimport { Checkbox } from \"./checkbox\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Information Display → Table (1457:1475) */\nexport type TableCellContent =\n | \"text\"\n | \"icon+text\"\n | \"people\"\n | \"badge\"\n | \"switch\"\n | \"action\"\n | \"checkbox\";\n\nexport type TableProps = HTMLAttributes<HTMLDivElement>;\n\nexport const Table = forwardRef<HTMLDivElement, TableProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"table\"\n className={cn(\"aviala-table\", className)}\n {...props}\n >\n {children}\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nexport type TableRowProps = HTMLAttributes<HTMLDivElement> & {\n header?: boolean;\n};\n\nexport const TableRow = forwardRef<HTMLDivElement, TableRowProps>(\n ({ className, header = false, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"row\"\n className={cn(\"aviala-table__row\", className)}\n data-header={header ? \"true\" : undefined}\n {...props}\n >\n {children}\n </div>\n )\n);\nTableRow.displayName = \"TableRow\";\n\nexport type TableHeadProps = ComponentPropsWithoutRef<\"div\"> & {\n content?: Extract<TableCellContent, \"text\" | \"checkbox\">;\n};\n\nexport const TableHead = forwardRef<HTMLDivElement, TableHeadProps>(\n ({ className, content = \"text\", children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"columnheader\"\n className={cn(\"aviala-table-head\", className)}\n data-content={content}\n {...props}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Typography level=\"caption\" as=\"span\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </div>\n )\n);\nTableHead.displayName = \"TableHead\";\n\nfunction renderCellIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content =\n isValidElement(node) && typeof node.type !== \"string\"\n ? cloneElement(node as ReactElement<{ width?: number; height?: number; className?: string }>, {\n width: 16,\n height: 16,\n className: cn(\n (node as ReactElement<{ className?: string }>).props.className,\n \"shrink-0\"\n ),\n })\n : node;\n\n return <span className=\"aviala-table-cell__icon\">{content}</span>;\n}\n\nexport type TableCellProps = ComponentPropsWithoutRef<\"div\"> & {\n content?: TableCellContent;\n icon?: ReactNode;\n text?: ReactNode;\n people?: ReactNode;\n badge?: ReactNode;\n badgeLabel?: ReactNode;\n switchProps?: SwitchProps;\n actions?: ReactNode;\n checkboxProps?: ComponentPropsWithoutRef<typeof Checkbox>;\n};\n\nexport const TableCell = forwardRef<HTMLDivElement, TableCellProps>(\n (\n {\n className,\n content = \"text\",\n icon,\n text,\n people,\n badge,\n badgeLabel,\n switchProps,\n actions,\n checkboxProps,\n children,\n ...props\n },\n ref\n ) => {\n const renderContent = () => {\n if (children != null) return children;\n\n switch (content) {\n case \"checkbox\":\n return <Checkbox {...checkboxProps} />;\n case \"icon+text\":\n return (\n <>\n {renderCellIcon(icon)}\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n </span>\n </>\n );\n case \"people\":\n return (\n <>\n {people ?? <Avatar content=\"text\" level=\"text\">A</Avatar>}\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n </span>\n </>\n );\n case \"badge\":\n return (\n badge ?? (\n <Badge style=\"theme\" level=\"caption\">\n {badgeLabel ?? \"Text\"}\n </Badge>\n )\n );\n case \"switch\":\n return <Switch {...switchProps} />;\n case \"action\":\n return <div className=\"aviala-table-cell__actions\">{actions}</div>;\n case \"text\":\n default:\n return (\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n </span>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"cell\"\n className={cn(\"aviala-table-cell\", className)}\n data-content={content}\n {...props}\n >\n {renderContent()}\n </div>\n );\n }\n);\nTableCell.displayName = \"TableCell\";\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","Tag","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_jsx_runtime","import_class_variance_authority","import_react","import_icons","import_jsx_runtime","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","resolveInputState","renderBadgeArea","import_icons","import_react","import_jsx_runtime","assignRef","import_icons","import_react","import_react_slot","import_react","import_jsx_runtime","renderIcon","import_jsx_runtime","import_react","import_jsx_runtime","Label","import_class_variance_authority","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","resolveLineHeightFix","iconSizeForLevel","import_class_variance_authority","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","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","Tag","import_react","import_jsx_runtime","renderIcon","prefersReducedMotion","import_icons","import_react","import_jsx_runtime","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","renderItemIcon","renderBadgeSlot","renderFunctionSlot","renderItemIcon","renderBadgeSlot","renderFunctionSlot","getOptionsAtPath","PopoverPrimitive","import_icons","import_react","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","controlled","merged","next","prefersReducedMotion","PopoverPrimitive","import_icons","import_react","import_react","import_jsx_runtime","import_jsx_runtime","PopoverPrimitive","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","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","PopoverPrimitive","import_react_slot","import_react","import_jsx_runtime","metricsApproxEqual","prefersReducedMotion","Tag","renderItemIcon","import_class_variance_authority","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","LOOP_SECTIONS","MIDDLE_SECTION","normalizeIndex","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","import_icons","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|