@aviala-design/spiral 2.6.2 → 2.7.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/theme/theme-provider.tsx","../src/lib/keyboard-focus.ts","../src/locale/interpolate.ts","../src/locale/context.tsx","../src/locale/source/zh-CN.ts","../src/locale/locale-provider.tsx","../src/locale/use-locale.ts","../src/locale/source/en-US.ts","../src/config/context.tsx","../src/config/config-provider.tsx","../src/config/use-direction.ts","../src/config/direction-utils.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/checkbox-check-icon.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/slider.tsx","../src/components/overlay-pointer.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/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/tab.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\";\nexport {\n LocaleProvider,\n useLocale,\n useLocaleMessages,\n interpolate,\n zhCN,\n enUS,\n type Locale,\n type LocaleProviderProps,\n type LocaleComponentName,\n} from \"./locale\";\nexport {\n ConfigProvider,\n useDirection,\n useRtl,\n mirrorSide,\n mirrorSideForDirection,\n forwardChevronSide,\n backChevronSide,\n type ConfigProviderProps,\n type Direction,\n type PhysicalSide,\n} from \"./config\";\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 type CheckboxSize,\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 type SegmentatorDirection,\n} from \"./components/segmentator\";\nexport {\n Form,\n FormField,\n type FormFieldProps,\n type FormFieldLayoutProps,\n type FormFieldControlledProps,\n type FormFieldRenderProps,\n type FormFieldDirection,\n} 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 PopoverContentLevel,\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 type TooltipContentLevel,\n} from \"./components/tooltip\";\nexport {\n ResponsiveTooltip,\n RESPONSIVE_TOOLTIP_LONG_PRESS_MS,\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 {\n Tab,\n TabItem,\n type TabProps,\n type TabItemProps,\n type TabStyle,\n type TabBackground,\n} from \"./components/tab\";\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","/** Replace `${name}` placeholders (Semi-style). Unknown keys stay as-is. */\nexport function interpolate(\n template: string,\n values: Record<string, string | number>\n): string {\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, key: string) => {\n const value = values[key];\n return value == null ? match : String(value);\n });\n}\n","import { createContext } from \"react\";\nimport type { Locale } from \"./interface\";\nimport zhCN from \"./source/zh-CN\";\n\nexport const LocaleContext = createContext<Locale>(zhCN);\n","import type { Locale } from \"../interface\";\n\nconst zhCN: Locale = {\n code: \"zh-CN\",\n DatePicker: {\n placeholder: \"YYYY-MM-DD\",\n placeholderWithTime: \"YYYY-MM-DD HH:mm\",\n rangePlaceholder: \"开始日期 - 结束日期\",\n selectDate: \"选择日期\",\n selectDateRange: \"选择日期范围\",\n rangeTo: \" 至 \",\n calendar: \"日历\",\n dateTimeSwitch: \"日期与时间切换\",\n previousMonth: \"上个月\",\n nextMonth: \"下个月\",\n previousYear: \"上一年\",\n nextYear: \"下一年\",\n selectMonthYear: \"选择年月\",\n closeMonthYear: \"关闭年月选择\",\n weekdays: [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n year: \"年\",\n month: \"月\",\n selectYearMonth: \"选择年月\",\n },\n TimePicker: {\n placeholder: \"HH:mm\",\n panel: \"时间选择\",\n selectTime: \"选择时间\",\n hour: \"小时\",\n minute: \"分钟\",\n },\n Pagination: {\n jumpTo: \"跳转至\",\n pageSize: \"每页\",\n items: \"${size} 项\",\n pagePlaceholder: \"页码\",\n morePages: \"更多页码\",\n previous: \"上一页\",\n next: \"下一页\",\n pagination: \"分页\",\n pageSizeAria: \"每页条数\",\n },\n Upload: {\n label: \"上传\",\n title: \"将文件拖到此处上传\",\n description: \"或点击此处上传\",\n },\n Modal: {\n close: \"关闭对话框\",\n },\n Feedback: {\n close: \"关闭\",\n },\n Alert: {\n close: \"关闭提示\",\n },\n ColorPicker: {\n placeholder: \"选择颜色\",\n hue: \"色相\",\n opacity: \"透明度\",\n saturationBrightness: \"饱和度与亮度\",\n pickFromScreen: \"从屏幕取色\",\n hex: \"十六进制颜色\",\n rgb: \"RGB 颜色\",\n hsl: \"HSL 颜色\",\n opacityPercent: \"不透明度百分比\",\n },\n Cascader: {\n placeholder: \"请选择\",\n },\n Loading: {\n label: \"加载中\",\n },\n Tag: {\n remove: \"移除\",\n },\n NumberInput: {\n increment: \"增加\",\n decrement: \"减少\",\n },\n Textarea: {\n resize: \"调整文本框大小\",\n },\n Card: {\n more: \"更多\",\n },\n List: {\n more: \"更多\",\n },\n Breadcrumb: {\n label: \"面包屑\",\n showMore: \"显示更多面包屑项\",\n },\n};\n\nexport default zhCN;\n","import type { ReactNode } from \"react\";\nimport { LocaleContext } from \"./context\";\nimport type { Locale } from \"./interface\";\nimport zhCN from \"./source/zh-CN\";\n\nexport type LocaleProviderProps = {\n children: ReactNode;\n /** Locale pack. Defaults to `zhCN`. */\n locale?: Locale;\n};\n\nexport function LocaleProvider({ children, locale = zhCN }: LocaleProviderProps) {\n return <LocaleContext.Provider value={locale}>{children}</LocaleContext.Provider>;\n}\n","import { useContext } from \"react\";\nimport { LocaleContext } from \"./context\";\nimport type { Locale, LocaleComponentName } from \"./interface\";\n\n/** Current locale pack (falls back to zh-CN when no Provider). */\nexport function useLocale(): Locale {\n return useContext(LocaleContext);\n}\n\n/** Messages for one component block (e.g. `Pagination`). */\nexport function useLocaleMessages<K extends LocaleComponentName>(\n component: K\n): Locale[K] {\n return useLocale()[component];\n}\n","import type { Locale } from \"../interface\";\n\nconst enUS: Locale = {\n code: \"en-US\",\n DatePicker: {\n placeholder: \"YYYY-MM-DD\",\n placeholderWithTime: \"YYYY-MM-DD HH:mm\",\n rangePlaceholder: \"Start date - End date\",\n selectDate: \"Select date\",\n selectDateRange: \"Select date range\",\n rangeTo: \" to \",\n calendar: \"Calendar\",\n dateTimeSwitch: \"Date and time\",\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n previousYear: \"Previous year\",\n nextYear: \"Next year\",\n selectMonthYear: \"Select month and year\",\n closeMonthYear: \"Close month and year picker\",\n weekdays: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n year: \"Year\",\n month: \"Month\",\n selectYearMonth: \"Select year and month\",\n },\n TimePicker: {\n placeholder: \"HH:mm\",\n panel: \"Time picker\",\n selectTime: \"Select time\",\n hour: \"Hour\",\n minute: \"Minute\",\n },\n Pagination: {\n jumpTo: \"Go to\",\n pageSize: \"Per page\",\n items: \"${size} items\",\n pagePlaceholder: \"Page\",\n morePages: \"More pages\",\n previous: \"Previous page\",\n next: \"Next page\",\n pagination: \"Pagination\",\n pageSizeAria: \"Page size\",\n },\n Upload: {\n label: \"Upload\",\n title: \"Drag the file here to upload the file\",\n description: \"Or click here to upload\",\n },\n Modal: {\n close: \"Close dialog\",\n },\n Feedback: {\n close: \"Dismiss\",\n },\n Alert: {\n close: \"Dismiss alert\",\n },\n ColorPicker: {\n placeholder: \"Select color\",\n hue: \"Hue\",\n opacity: \"Opacity\",\n saturationBrightness: \"Saturation and brightness\",\n pickFromScreen: \"Pick color from screen\",\n hex: \"Hex color\",\n rgb: \"RGB color\",\n hsl: \"HSL color\",\n opacityPercent: \"Opacity percent\",\n },\n Cascader: {\n placeholder: \"Select\",\n },\n Loading: {\n label: \"Loading\",\n },\n Tag: {\n remove: \"Remove\",\n },\n NumberInput: {\n increment: \"Increment\",\n decrement: \"Decrement\",\n },\n Textarea: {\n resize: \"Resize textarea\",\n },\n Card: {\n more: \"More\",\n },\n List: {\n more: \"More\",\n },\n Breadcrumb: {\n label: \"Breadcrumb\",\n showMore: \"Show more breadcrumb items\",\n },\n};\n\nexport default enUS;\n","import { createContext } from \"react\";\n\nexport type Direction = \"ltr\" | \"rtl\";\n\nexport type ConfigContextValue = {\n direction: Direction;\n /** True when this provider owns `document.documentElement.dir`. */\n isDocumentSyncOwner: boolean;\n};\n\nexport const ConfigContext = createContext<ConfigContextValue>({\n direction: \"ltr\",\n isDocumentSyncOwner: false,\n});\n","import {\n useContext,\n useLayoutEffect,\n useMemo,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { LocaleProvider } from \"../locale/locale-provider\";\nimport type { Locale } from \"../locale/interface\";\nimport { ConfigContext, type Direction } from \"./context\";\n\nexport type ConfigProviderProps = {\n children: ReactNode;\n /** Writing direction. Defaults to `ltr`. */\n direction?: Direction;\n /**\n * When true (default), the outermost ConfigProvider that opts in writes\n * `document.documentElement.dir` so portalled overlays inherit direction.\n * Nested providers only set `dir` on their local wrapper.\n */\n syncDocumentDir?: boolean;\n /** Optional locale pack — nests `LocaleProvider` when provided. */\n locale?: Locale;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function ConfigProvider({\n children,\n direction = \"ltr\",\n syncDocumentDir = true,\n locale,\n className,\n style,\n}: ConfigProviderProps) {\n const parent = useContext(ConfigContext);\n const isDocumentSyncOwner = syncDocumentDir && !parent.isDocumentSyncOwner;\n\n const value = useMemo(\n () => ({\n direction,\n isDocumentSyncOwner,\n }),\n [direction, isDocumentSyncOwner]\n );\n\n useLayoutEffect(() => {\n if (!isDocumentSyncOwner || typeof document === \"undefined\") return;\n const root = document.documentElement;\n const previous = root.getAttribute(\"dir\");\n root.setAttribute(\"dir\", direction);\n return () => {\n if (previous == null || previous === \"\") {\n root.removeAttribute(\"dir\");\n } else {\n root.setAttribute(\"dir\", previous);\n }\n };\n }, [direction, isDocumentSyncOwner]);\n\n let content = children;\n if (locale) {\n content = <LocaleProvider locale={locale}>{content}</LocaleProvider>;\n }\n\n return (\n <ConfigContext.Provider value={value}>\n <div\n className={[\"aviala-config-provider\", className].filter(Boolean).join(\" \")}\n dir={direction}\n style={style}\n >\n {content}\n </div>\n </ConfigContext.Provider>\n );\n}\n","import { useContext } from \"react\";\nimport { ConfigContext, type Direction } from \"./context\";\n\n/** Current writing direction (`ltr` when no ConfigProvider). */\nexport function useDirection(): Direction {\n return useContext(ConfigContext).direction;\n}\n\n/** Convenience: `true` when direction is `rtl`. */\nexport function useRtl(): boolean {\n return useDirection() === \"rtl\";\n}\n","import type { Direction } from \"./context\";\n\nexport type PhysicalSide = \"left\" | \"right\";\n\n/** Mirror a physical side under RTL (left ↔ right). */\nexport function mirrorSide(side: PhysicalSide, rtl: boolean): PhysicalSide {\n if (!rtl) return side;\n return side === \"left\" ? \"right\" : \"left\";\n}\n\n/** Same as `mirrorSide` but from a Direction value. */\nexport function mirrorSideForDirection(\n side: PhysicalSide,\n direction: Direction\n): PhysicalSide {\n return mirrorSide(side, direction === \"rtl\");\n}\n\n/**\n * Chevron that points toward \"forward\" / \"expand\" / \"next\" in the reading direction.\n * LTR → right; RTL → left.\n */\nexport function forwardChevronSide(direction: Direction): PhysicalSide {\n return direction === \"rtl\" ? \"left\" : \"right\";\n}\n\n/**\n * Chevron that points toward \"back\" / \"previous\" in the reading direction.\n * LTR → left; RTL → right.\n */\nexport function backChevronSide(direction: Direction): PhysicalSide {\n return direction === \"rtl\" ? \"right\" : \"left\";\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Loading\");\n const resolvedLabel = label ?? locale.label;\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 : resolvedLabel}\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 | \"outline\"\n | \"outlineCustom\"\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 outline: \"aviala-button--mode-outline\",\n outlineCustom: \"aviala-button--mode-outlineCustom\",\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 \"outline\";\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 mode !== \"outline\" &&\n mode !== \"outlineCustom\"\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 { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"NumberInput\");\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={locale.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={locale.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 { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"Textarea\");\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={locale.resize}\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 DirectionArrowLeft,\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 { forwardChevronSide, useDirection, useRtl } from \"../config\";\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,\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 SelectExpandChevron() {\n const rtl = useRtl();\n const Icon = rtl ? DirectionArrowLeft : DirectionArrowRight;\n return <Icon level=\"text\" biggerSize aria-hidden />;\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 <SelectExpandChevron />\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 rtl = useRtl();\n const direction = useDirection();\n const expandKey = rtl ? \"ArrowLeft\" : \"ArrowRight\";\n const collapseKey = rtl ? \"ArrowRight\" : \"ArrowLeft\";\n\n const side = sideProp ?? subMenu.side ?? forwardChevronSide(direction);\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 === expandKey || 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 === collapseKey) {\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 { useLocaleMessages } from \"../locale\";\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,\n lineHeightFix,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Tag\");\n const resolvedCloseLabel = closeLabel ?? locale.remove;\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={resolvedCloseLabel}\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 {\n cloneElement,\n forwardRef,\n isValidElement,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { TypefacePair } from \"./typeface\";\nimport { CheckboxCheckIcon } from \"./checkbox-check-icon\";\n\n/** Figma Components → Information Collect → Checkbox */\nexport type CheckboxGroupDirection = \"vertical\" | \"horizontal\";\n\n/** Figma Checkbox `Size` — Default → `default`, Huge → `huge` */\nexport type CheckboxSize = \"default\" | \"huge\";\n\nexport type CheckboxProps = ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n /** Figma Checkbox `Round` */\n round?: boolean;\n /** Figma Checkbox `Size` */\n size?: CheckboxSize;\n};\n\nexport const Checkbox = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, round = false, size = \"default\", ...props }, ref) => {\n /** Skip enter transitions on first paint (defaultChecked / controlled initial). */\n const [motionReady, setMotionReady] = useState(false);\n useEffect(() => {\n const id = requestAnimationFrame(() => setMotionReady(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\"aviala-checkbox aviala-focus-ring\", className)}\n data-round={round ? \"true\" : undefined}\n data-size={size}\n data-motion={motionReady ? \"ready\" : \"boot\"}\n {...props}\n >\n <span aria-hidden className=\"aviala-checkbox__surface\" />\n <CheckboxPrimitive.Indicator forceMount className=\"aviala-checkbox__indicator\">\n <CheckboxCheckIcon className=\"aviala-checkbox__indicator-icon aviala-checkbox__indicator-icon--check\" />\n <span\n aria-hidden\n className=\"aviala-checkbox__indeterminate-mark aviala-checkbox__indicator-icon--indeterminate\"\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\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 type { SVGProps } from \"react\";\nimport { cn } from \"../lib/utils\";\n\ntype CheckboxCheckIconProps = Omit<SVGProps<SVGSVGElement>, \"children\">;\n\n/**\n * Motion check path from Figma `symbol_right` Black.\n * Progress is driven by CSS transitions on the parent Checkbox `data-state`\n * (interruptible; `vector-effect: non-scaling-stroke` keeps stroke weight stable).\n * No clipPath — round caps must not be cropped at Default/Huge stroke widths.\n */\nexport function CheckboxCheckIcon({ className, ...props }: CheckboxCheckIconProps) {\n return (\n <svg\n className={cn(\"aviala-checkbox__check-icon\", className)}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n overflow=\"visible\"\n {...props}\n >\n <path\n className=\"aviala-checkbox__check-path\"\n transform=\"translate(1 1.6)\"\n d=\"M0 3.9L3.4974 8.35503C3.83947 8.79075 4.51016 8.75534 4.80444 8.28602L10 0\"\n pathLength={1}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n );\n}\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\";\nexport type SegmentatorDirection = \"horizontal\" | \"vertical\";\n\ntype SegmentatorContextValue = {\n value?: string;\n onValueChange?: (value: string) => void;\n mode: SegmentatorMode;\n direction: SegmentatorDirection;\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 startY: 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 // Absolute thumb lives in the group's content box — include scroll offsets.\n return {\n x: itemRect.left - groupRect.left + group.scrollLeft,\n y: itemRect.top - groupRect.top + group.scrollTop,\n width: itemRect.width,\n height: itemRect.height,\n };\n}\n\nfunction syncSegmentatorOverflowing(group: HTMLElement) {\n const vertical = group.getAttribute(\"data-direction\") === \"vertical\";\n const overflowing = vertical\n ? group.scrollHeight > group.clientHeight + 1\n : group.scrollWidth > group.clientWidth + 1;\n if (overflowing) {\n group.setAttribute(\"data-overflowing\", \"true\");\n } else {\n group.removeAttribute(\"data-overflowing\");\n }\n return overflowing;\n}\n\nfunction isSegmentatorOverflowing(group: HTMLElement | null): boolean {\n return group?.getAttribute(\"data-overflowing\") === \"true\";\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 findItemAtClientY(\n items: HTMLButtonElement[],\n clientY: number\n): HTMLButtonElement | null {\n for (const item of items) {\n const rect = item.getBoundingClientRect();\n if (clientY >= rect.top && clientY <= rect.bottom) 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.top + rect.height / 2;\n const distance = Math.abs(clientY - 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\nfunction getItemCenterY(item: HTMLButtonElement): number {\n const rect = item.getBoundingClientRect();\n return rect.top + rect.height / 2;\n}\n\n/**\n * Map finger 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 clientY: number,\n fallback: SegmentatorThumbMetrics,\n direction: SegmentatorDirection\n): { metrics: SegmentatorThumbMetrics; item: HTMLButtonElement | null } {\n if (items.length === 0) {\n return { metrics: fallback, item: null };\n }\n\n const vertical = direction === \"vertical\";\n const item = vertical\n ? findItemAtClientY(items, clientY)\n : findItemAtClientX(items, clientX);\n if (!item) {\n return { metrics: fallback, item: null };\n }\n\n const base = measureItemThumbMetrics(item, group);\n const isFirst = item === items[0];\n const isLast = item === items[items.length - 1];\n\n if (vertical) {\n const center = getItemCenterY(item);\n const rawOffset = Math.max(\n -SEGMENTATOR_STICKY_OFFSET_PX,\n Math.min(SEGMENTATOR_STICKY_OFFSET_PX, clientY - center)\n );\n let y = base.y + rawOffset;\n if (isFirst && y < base.y) y = base.y;\n if (isLast && y > base.y) y = base.y;\n return { metrics: { ...base, y }, item };\n }\n\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 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 return measureItemThumbMetrics(selected, group);\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 group = groupRef.current;\n if (group) {\n const selected = group.querySelector<HTMLButtonElement>(\n '.aviala-segmentator-item[data-selected=\"true\"]'\n );\n if (selected && !isInitialMount.current) {\n selected.scrollIntoView({\n inline: \"nearest\",\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }\n\n const next = measureThumb();\n if (!next) return;\n\n const el = thumbElRef.current;\n\n if (isInitialMount.current) {\n metricsRef.current = next;\n setThumb(next);\n if (el) {\n applyThumbMetrics(el, next, true);\n isInitialMount.current = false;\n }\n return;\n }\n\n if (!el) {\n syncThumb(next, true);\n return;\n }\n\n const startMetrics = metricsRef.current ?? next;\n const prefersReducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (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, groupRef]);\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n if (!group) return;\n\n const updateOverflowAndThumb = () => {\n syncSegmentatorOverflowing(group);\n remeasureThumb();\n };\n\n updateOverflowAndThumb();\n\n const observer = new ResizeObserver(() => {\n updateOverflowAndThumb();\n });\n observer.observe(group);\n\n const items = group.querySelectorAll(\".aviala-segmentator-item\");\n items.forEach((item) => observer.observe(item));\n\n const onScroll = () => {\n syncSegmentatorOverflowing(group);\n remeasureThumb();\n };\n group.addEventListener(\"scroll\", onScroll, { passive: true });\n\n const layoutObserver = new MutationObserver(() => {\n requestAnimationFrame(updateOverflowAndThumb);\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 group.removeEventListener(\"scroll\", onScroll);\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 /** Figma `direction` — horizontal (default) or vertical stack. */\n direction?: SegmentatorDirection;\n allRound?: boolean;\n /** When true, the group fills its container and items split the main axis 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 direction = \"horizontal\",\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, clientY: 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 clientY,\n fallback,\n direction\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) +\n Math.abs(metrics.y - prev.y) +\n Math.abs(metrics.width - prev.width) +\n Math.abs(metrics.height - prev.height)\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 [direction, 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 const delta =\n direction === \"vertical\"\n ? Math.abs(event.clientY - drag.startY)\n : Math.abs(event.clientX - drag.startX);\n if (delta < 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, event.clientY);\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 [direction, 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 // When overflowing on the main axis, pan owns the gesture — keep tap-to-select only.\n if (isSegmentatorOverflowing(groupRef.current)) 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 startY: event.clientY,\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 direction,\n allRound,\n disabled,\n consumeClickRef,\n }),\n [currentValue, setValue, mode, direction, 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-direction={direction}\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 {\n forwardRef,\n useId,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n FormProvider,\n useController,\n type Control,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type UseControllerProps,\n type UseFormStateReturn,\n} from \"react-hook-form\";\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\n/** Layout mode — the original props-driven wrapper */\nexport type FormFieldLayoutProps = 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 children?: ReactNode;\n};\n\n/** Render arguments passed to `render` in react-hook-form mode */\nexport type FormFieldRenderProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n field: ControllerRenderProps<TFieldValues, TName>;\n fieldState: ControllerFieldState;\n formState: UseFormStateReturn<TFieldValues>;\n /**\n * Auto-generated control id. The field label is already wired to it via\n * `htmlFor` — pass it to the underlying input (`<Input id={id} />`).\n */\n id: string;\n};\n\n/**\n * react-hook-form mode — bind the field to a form via `name` (+ optional\n * `control`; falls back to the surrounding `<Form>` context). Validation\n * errors from the resolver (zod etc.) are rendered automatically unless the\n * `error` prop overrides them.\n */\nexport type FormFieldControlledProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = Omit<FormFieldLayoutProps, \"children\" | \"htmlFor\"> &\n Pick<\n UseControllerProps<TFieldValues, TName>,\n \"rules\" | \"defaultValue\" | \"shouldUnregister\" | \"disabled\"\n > & {\n name: TName;\n control?: Control<TFieldValues>;\n render: (props: FormFieldRenderProps<TFieldValues, TName>) => ReactNode;\n /** Overrides the validation error message shown under the control */\n error?: ReactNode;\n };\n\nexport type FormFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = FormFieldLayoutProps | FormFieldControlledProps<TFieldValues, TName>;\n\nconst FormFieldLayout = forwardRef<HTMLDivElement, FormFieldLayoutProps>(\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);\nFormFieldLayout.displayName = \"FormFieldLayout\";\n\nconst FormFieldControlled = forwardRef<HTMLDivElement, FormFieldControlledProps>(\n (\n {\n control,\n name,\n rules,\n defaultValue,\n shouldUnregister,\n disabled,\n render,\n error,\n ...layoutProps\n },\n ref\n ) => {\n const id = useId();\n const { field, fieldState, formState } = useController({\n name,\n control,\n rules,\n defaultValue,\n shouldUnregister,\n disabled,\n });\n const message = error !== undefined ? error : (fieldState.error?.message ?? null);\n\n return (\n <FormFieldLayout ref={ref} {...layoutProps} htmlFor={id} error={message}>\n {render({ field, fieldState, formState, id })}\n </FormFieldLayout>\n );\n }\n);\nFormFieldControlled.displayName = \"FormFieldControlled\";\n\nfunction isControlledProps(\n props: FormFieldProps\n): props is FormFieldControlledProps {\n return \"render\" in props && typeof props.render === \"function\" && \"name\" in props;\n}\n\nconst FormFieldRoot = forwardRef<HTMLDivElement, FormFieldProps>((props, ref) => {\n if (isControlledProps(props)) {\n return <FormFieldControlled ref={ref} {...props} />;\n }\n return <FormFieldLayout ref={ref} {...props} />;\n});\n\n/**\n * FormField — layout wrapper around a form control, or a react-hook-form\n * bound field when given `name` + `render` (shadcn-style).\n *\n * @example Layout mode\n * <FormField label=\"Email\" htmlFor=\"email\" description=\"...\">\n * <Input id=\"email\" />\n * </FormField>\n *\n * @example react-hook-form + zod mode\n * <Form {...form}>\n * <form onSubmit={form.handleSubmit(onSubmit)}>\n * <FormField\n * control={form.control}\n * name=\"email\"\n * label=\"Email\"\n * render={({ field, fieldState, id }) => (\n * <Input id={id} error={fieldState.invalid} {...field} />\n * )}\n * />\n * </form>\n * </Form>\n */\nexport const FormField = FormFieldRoot as {\n <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n >(\n props: FormFieldProps<TFieldValues, TName> & { ref?: Ref<HTMLDivElement> }\n ): ReactElement | null;\n displayName?: string;\n};\nFormField.displayName = \"FormField\";\n\n/** Alias of react-hook-form's FormProvider — wrap your form with it (shadcn-style `<Form {...form}>`) */\nexport const Form = FormProvider;\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 { useLocaleMessages } from \"../../locale\";\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, ...props }, ref) => {\n const locale = useLocaleMessages(\"ColorPicker\");\n const resolvedPlaceholder = placeholder ?? locale.placeholder;\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\">{resolvedPlaceholder}</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 { useLocaleMessages } from \"../../locale\";\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 locale = useLocaleMessages(\"ColorPicker\");\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={locale.saturationBrightness}\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, useEffect, useRef, 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\nfunction normalizeHex(value: string): string {\n return parseColor(value).toHex().toLowerCase();\n}\n\n/**\n * Keep HSVA as interaction source of truth so hue 360° (≡ hex red / 0°) does\n * not snap the spectrum thumb back to the start after a hex round-trip.\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] =\n useState<ColorFormat>(defaultFormat);\n\n const value = controlledValue ?? uncontrolledValue;\n const format = controlledFormat ?? uncontrolledFormat;\n\n const [hsva, setHsvaState] = useState(() => toHsva(value));\n const hsvaRef = useRef(hsva);\n hsvaRef.current = hsva;\n\n const lastEmittedHexRef = useRef(normalizeHex(value));\n\n // Sync from props/parent only when the hex actually changed from outside\n // (not when we ourselves emitted an equivalent #ff0000 for h=360).\n useEffect(() => {\n const nextHex = normalizeHex(value);\n if (nextHex === lastEmittedHexRef.current) return;\n lastEmittedHexRef.current = nextHex;\n const nextHsva = toHsva(value);\n hsvaRef.current = nextHsva;\n setHsvaState(nextHsva);\n }, [value]);\n\n const emitHex = useCallback(\n (hex: string, meta?: ColorPickerChangeMeta) => {\n const normalized = parseColor(hex).toHex();\n lastEmittedHexRef.current = normalized.toLowerCase();\n if (controlledValue === undefined) {\n setUncontrolledValue(normalized);\n }\n onChange?.(normalized, meta);\n },\n [controlledValue, onChange]\n );\n\n const setValue = useCallback(\n (next: string, meta?: ColorPickerChangeMeta) => {\n const normalized = parseColor(next).toHex();\n const nextHsva = toHsva(normalized);\n hsvaRef.current = nextHsva;\n setHsvaState(nextHsva);\n emitHex(normalized, meta);\n },\n [emitHex]\n );\n\n const setHsva = useCallback(\n (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => {\n const next = { ...hsvaRef.current, ...partial };\n hsvaRef.current = next;\n setHsvaState(next);\n emitHex(fromHsva(next), meta);\n },\n [emitHex]\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 { useLocaleMessages } from \"../../locale\";\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 locale = useLocaleMessages(\"ColorPicker\");\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={locale.pickFromScreen}\n {...spiralDebugId(\"color-picker.content.inputs.eyedropper\")}\n title={\n eyeDropperSupported\n ? locale.pickFromScreen\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={locale.hex}\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\" ? locale.rgb : locale.hsl}\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={locale.opacityPercent}\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, type CSSProperties } from \"react\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { useLocaleMessages } from \"../../locale\";\nimport { Slider } from \"../slider\";\nimport { hueGradientStops, solidHex, toRgbComponents } from \"./color-utils\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\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 locale = useLocaleMessages(\"ColorPicker\");\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 sliderValue =\n kind === \"hue\" ? [hsva.h] : [Math.round(hsva.a * 100)];\n\n const handleValueChange = useCallback(\n (next: number[]) => {\n const raw = next[0] ?? 0;\n if (kind === \"hue\") {\n setHsva({ h: raw }, { source: \"hue\" });\n } else {\n setHsva({ a: raw / 100 }, { source: \"alpha\" });\n }\n },\n [kind, setHsva]\n );\n\n // Hue: spectrum only. Alpha: same-hue 0→1 (avoid `transparent` muddy lerp);\n // checkerboard sits under the gradient in CSS.\n const trackBg =\n kind === \"hue\"\n ? `linear-gradient(90deg, ${hueGradientStops()})`\n : (() => {\n const solid = solidHex(value);\n const { r, g, b } = toRgbComponents(solid);\n return `linear-gradient(90deg, rgba(${r},${g},${b},0), ${solid})`;\n })();\n\n return (\n <div\n className={cn(\"aviala-color-picker-slider-row\", className)}\n style={\n {\n \"--color-picker-slider-track-bg\": trackBg,\n } as CSSProperties\n }\n {...spiralDebugId(`color-picker.content.${kind}-slider`)}\n >\n <Slider\n className=\"aviala-color-picker-slider\"\n data-kind={kind}\n size=\"big\"\n min={0}\n max={kind === \"hue\" ? 360 : 100}\n step={1}\n value={sliderValue}\n onValueChange={handleValueChange}\n disabled={isDisabled}\n aria-label={kind === \"hue\" ? locale.hue : locale.opacity}\n />\n </div>\n );\n}\n","import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { OverlayPointerSvg, TOOLTIP_POINTER } from \"./overlay-pointer\";\nimport { typographyVariants } from \"./typography\";\n\n/** Figma Components → Information Collect → Slider (384:21585) */\nexport type SliderSize = \"default\" | \"big\";\nexport type SliderType = \"default\" | \"range\";\n\ntype SliderRootProps = Omit<\n ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"orientation\"\n>;\ntype SliderPointerHandler = SliderRootProps[\"onPointerMove\"];\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 = SliderRootProps &\n VariantProps<typeof sliderVariants> & {\n /** Figma `Type` — single thumb vs range (two thumbs) */\n type?: SliderType;\n /**\n * When true, hovering a thumb (and while dragging it) shows a value\n * tooltip bound to that thumb.\n */\n showValueTooltip?: boolean;\n /** Format the value tooltip label. Defaults to `String(value)`. */\n formatValueTooltip?: (value: number, index: number) => ReactNode;\n };\n\nfunction SliderValueTooltip({\n open,\n children,\n}: {\n open: boolean;\n children: ReactNode;\n}) {\n return (\n <span\n className=\"aviala-slider__value-tooltip\"\n data-state={open ? \"instant-open\" : \"closed\"}\n aria-hidden={!open}\n >\n <span\n className={cn(\n \"aviala-slider__value-tooltip__surface\",\n typographyVariants({ level: \"caption\" })\n )}\n >\n {children}\n </span>\n <span className=\"aviala-slider__value-tooltip__arrow\" aria-hidden>\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 </span>\n </span>\n );\n}\n\nfunction SliderThumb({\n index,\n value,\n showValueTooltip,\n formatValueTooltip,\n forceTooltipOpen,\n onThumbPointerDown,\n}: {\n index: number;\n value: number;\n showValueTooltip: boolean;\n formatValueTooltip?: (value: number, index: number) => ReactNode;\n forceTooltipOpen: boolean;\n onThumbPointerDown: () => void;\n}) {\n const [hoverOpen, setHoverOpen] = useState(false);\n const tooltipOpen = Boolean(\n showValueTooltip && (forceTooltipOpen || hoverOpen)\n );\n const label = formatValueTooltip\n ? formatValueTooltip(value, index)\n : String(value);\n\n return (\n <SliderPrimitive.unstable_ThumbProvider>\n <SliderPrimitive.unstable_ThumbTrigger\n className=\"aviala-slider__thumb aviala-focus-ring\"\n onPointerDown={onThumbPointerDown}\n onPointerEnter={\n showValueTooltip ? () => setHoverOpen(true) : undefined\n }\n onPointerLeave={\n showValueTooltip ? () => setHoverOpen(false) : undefined\n }\n >\n <span className=\"aviala-slider__thumb-face\" aria-hidden />\n {showValueTooltip ? (\n <SliderValueTooltip open={tooltipOpen}>{label}</SliderValueTooltip>\n ) : null}\n </SliderPrimitive.unstable_ThumbTrigger>\n <SliderPrimitive.unstable_BubbleInput />\n </SliderPrimitive.unstable_ThumbProvider>\n );\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 onValueChange,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerCancel,\n onLostPointerCapture,\n showValueTooltip = false,\n formatValueTooltip,\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 // Transition left/right on click/keyboard jumps; disable once the pointer moves\n // so dragging stays 1:1 with the cursor.\n const [isDragging, setIsDragging] = useState(false);\n // Pointer is down on the slider — keep the active thumb’s value tooltip open\n // (including track presses) without waiting for a move.\n const [pointerDown, setPointerDown] = useState(false);\n const [activeThumbIndex, setActiveThumbIndex] = useState<number | null>(\n null\n );\n const [uncontrolledValue, setUncontrolledValue] = useState<number[]>(\n resolvedDefaultValue\n );\n const currentValues = value ?? uncontrolledValue;\n\n const handleValueChange = (next: number[]) => {\n if (value == null) setUncontrolledValue(next);\n if (showValueTooltip) {\n const prev = currentValues;\n const changed = next.findIndex((v, i) => v !== prev[i]);\n if (changed >= 0) setActiveThumbIndex(changed);\n }\n onValueChange?.(next);\n };\n\n const handlePointerDown: SliderRootProps[\"onPointerDown\"] = (event) => {\n if (showValueTooltip && !disabled) setPointerDown(true);\n onPointerDown?.(event);\n };\n\n const handlePointerMove: SliderPointerHandler = (event) => {\n if (event.buttons !== 0) setIsDragging(true);\n onPointerMove?.(event);\n };\n\n const endPointer = () => {\n setIsDragging(false);\n setPointerDown(false);\n setActiveThumbIndex(null);\n };\n\n const handlePointerUp: SliderRootProps[\"onPointerUp\"] = (event) => {\n endPointer();\n onPointerUp?.(event);\n };\n\n const handlePointerCancel: SliderRootProps[\"onPointerCancel\"] = (event) => {\n endPointer();\n onPointerCancel?.(event);\n };\n\n const handleLostPointerCapture: SliderRootProps[\"onLostPointerCapture\"] = (\n event\n ) => {\n endPointer();\n onLostPointerCapture?.(event);\n };\n\n return (\n <SliderPrimitive.Root\n // Remount when Type changes — Radix keeps internal value; switching\n // default↔range with a stale arity leaves the second thumb at display:none.\n key={resolvedType}\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 data-dragging={isDragging ? \"true\" : undefined}\n data-value-tooltip={showValueTooltip ? \"true\" : undefined}\n onValueChange={handleValueChange}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\n onLostPointerCapture={handleLostPointerCapture}\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 const thumbValue =\n currentValues[index] ??\n resolvedDefaultValue[index] ??\n (isRange ? (index === 0 ? min : max) : min + (max - min) / 2);\n\n const forceTooltipOpen =\n pointerDown &&\n (activeThumbIndex === index ||\n (activeThumbIndex == null && thumbCount === 1 && index === 0));\n\n return (\n <SliderThumb\n key={index}\n index={index}\n value={thumbValue}\n showValueTooltip={Boolean(showValueTooltip && !disabled)}\n formatValueTooltip={formatValueTooltip}\n forceTooltipOpen={forceTooltipOpen}\n onThumbPointerDown={() => setActiveThumbIndex(index)}\n />\n );\n })}\n </SliderPrimitive.Root>\n );\n }\n);\nSlider.displayName = \"Slider\";\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 { 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 DirectionArrowLeftLight,\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 { useRtl } from \"../config\";\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\";\nimport { useLocaleMessages } from \"../locale\";\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 CascaderExpandChevron() {\n const rtl = useRtl();\n const Icon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\n return <Icon level=\"text\" biggerSize aria-hidden />;\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 ? <CascaderExpandChevron /> : 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,\n error = false,\n displayValue,\n separator = \"/\",\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Cascader\");\n const resolvedPlaceholder = placeholder ?? locale.placeholder;\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 : resolvedPlaceholder}\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 const rtl = useRtl();\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 expandKey = rtl ? \"ArrowLeft\" : \"ArrowRight\";\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 === expandKey && 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 DirectionArrowLeftLight,\n DirectionArrowRightLight,\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 { useRtl } from \"../../config\";\nimport { useLocale, useLocaleMessages } from \"../../locale\";\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 type DateRange,\n type RangeSelectionPosition,\n} from \"./date-utils\";\nimport type { LocaleDatePicker } from \"../../locale/interface\";\n\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,\n rangePlaceholder,\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 locale = useLocaleMessages(\"DatePicker\");\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 resolvedPlaceholder = placeholder ?? locale.placeholder;\n const resolvedRangePlaceholder = rangePlaceholder ?? locale.rangePlaceholder;\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\n ? locale.placeholderWithTime\n : resolvedPlaceholder;\n const emptyPlaceholder =\n mode === \"range\" ? resolvedRangePlaceholder : 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 messages: LocaleDatePicker\n): string {\n if (mode === \"single\") {\n return singleValue ? formatIsoDate(singleValue) : messages.selectDate;\n }\n if (rangeValue.from && rangeValue.to) {\n return `${formatIsoDate(rangeValue.from)}${messages.rangeTo}${formatIsoDate(rangeValue.to)}`;\n }\n if (rangeValue.from) {\n return `${formatIsoDate(rangeValue.from)}${messages.rangeTo}…`;\n }\n return messages.selectDateRange;\n}\n\nfunction DatePickerTimePanel() {\n const { timeValue, setTimeValue } = useDatePickerContext();\n\n return <TimePickerWheels value={timeValue} onChange={setTimeValue} />;\n}\n\nfunction DatePickerPanelFooter() {\n const locale = useLocaleMessages(\"DatePicker\");\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={locale.dateTimeSwitch}\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, locale)}\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 { code } = useLocale();\n const locale = useLocaleMessages(\"DatePicker\");\n const rtl = useRtl();\n const PrevIcon = rtl ? DirectionArrowRightLight : DirectionArrowLeftLight;\n const NextIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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 /** Remount keys so prev/next icons replay exit→enter after each press. */\n const [prevNavAnimKey, setPrevNavAnimKey] = useState(0);\n const [nextNavAnimKey, setNextNavAnimKey] = useState(0);\n const [prevNavAnimating, setPrevNavAnimating] = useState(false);\n const [nextNavAnimating, setNextNavAnimating] = useState(false);\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 {locale.weekdays.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, code)}\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 ? locale.previousYear : locale.previousMonth}\n onClick={() => {\n if (!prefersReducedMotion()) {\n setPrevNavAnimKey((n) => n + 1);\n setPrevNavAnimating(true);\n }\n setViewMonth(addMonths(viewMonth, -stepMonth));\n }}\n >\n <span className=\"aviala-datepicker-calendar__nav-icon\">\n <span\n key={prevNavAnimKey}\n className=\"aviala-datepicker-calendar__nav-icon-inner\"\n data-anim={prevNavAnimating ? \"prev\" : undefined}\n onAnimationEnd={() => setPrevNavAnimating(false)}\n >\n <PrevIcon level=\"text\" biggerSize aria-hidden />\n </span>\n </span>\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 ? locale.closeMonthYear : locale.selectMonthYear}\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, code)}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"aviala-datepicker-calendar__nav aviala-focus-ring\"\n aria-label={isMonthPanel ? locale.nextYear : locale.nextMonth}\n onClick={() => {\n if (!prefersReducedMotion()) {\n setNextNavAnimKey((n) => n + 1);\n setNextNavAnimating(true);\n }\n setViewMonth(addMonths(viewMonth, stepMonth));\n }}\n >\n <span className=\"aviala-datepicker-calendar__nav-icon\">\n <span\n key={nextNavAnimKey}\n className=\"aviala-datepicker-calendar__nav-icon-inner\"\n data-anim={nextNavAnimating ? \"next\" : undefined}\n onAnimationEnd={() => setNextNavAnimating(false)}\n >\n <NextIcon level=\"text\" biggerSize aria-hidden />\n </span>\n </span>\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={locale.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\n/** @deprecated Prefer `useLocaleMessages(\"DatePicker\").weekdays`. Kept for callers. */\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 = \"zh-CN\"): 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 { useLocaleMessages } from \"../../locale\";\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 locale = useLocaleMessages(\"DatePicker\");\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={locale.selectYearMonth}\n >\n <div className=\"aviala-datepicker-month__columns\">\n <DatePickerTimeWheelColumn\n aria-label={locale.year}\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={locale.month}\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 consumeWheelSteps,\n nearestLoopIndex,\n normalizeWheelIndex,\n recenterLoopIndex,\n stepLoopRawIndex,\n stickyRoundIndex,\n WHEEL_ACCUM_IDLE_MS,\n WHEEL_LOOP_MIDDLE_SECTION,\n WHEEL_LOOP_SECTIONS,\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 = WHEEL_LOOP_SECTIONS;\nconst MIDDLE_SECTION = WHEEL_LOOP_MIDDLE_SECTION;\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 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 clipTrackRef = 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 wheelAccumIdleTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\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 readRawIndex = useCallback((container: HTMLElement, itemHeight: number) => {\n return Math.round(container.scrollTop / itemHeight);\n }, []);\n\n const syncClipTrack = useCallback(() => {\n const container = scrollRef.current;\n const track = clipTrackRef.current;\n if (!container || !track) return;\n // List items start at 0 in the track; scroll padding is on the container, so\n // the highlight band lines up when we translate by scrollTop only.\n track.style.transform = `translate3d(0, ${-container.scrollTop}px, 0)`;\n }, []);\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 if (behavior === \"auto\") {\n syncClipTrack();\n } else {\n requestAnimationFrame(syncClipTrack);\n }\n },\n [syncClipTrack]\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 currentIndex = readRawIndex(container, itemHeight);\n const currentValueIndex = loop\n ? normalizeWheelIndex(currentIndex, values.length)\n : Math.min(Math.max(currentIndex, 0), values.length - 1);\n\n if (currentValueIndex === valueIndex) {\n syncClipTrack();\n return;\n }\n\n const targetIndex = loop\n ? nearestLoopIndex(currentIndex, valueIndex, values.length, LOOP_SECTIONS)\n : valueIndex;\n scrollToIndex(targetIndex, behavior);\n },\n [loop, readRawIndex, scrollToIndex, syncClipTrack, values]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const wasProgrammatic = isProgrammaticScrollRef.current;\n isProgrammaticScrollRef.current = false;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0 || values.length === 0) {\n smoothTargetValueRef.current = null;\n return;\n }\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 ? normalizeWheelIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop\n ? recenterLoopIndex(rawIndex, values.length, MIDDLE_SECTION)\n : 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\n if (wasProgrammatic) {\n if (needsLoopRecenter) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n }\n smoothTargetValueRef.current = null;\n syncClipTrack();\n return;\n }\n\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 syncClipTrack();\n }, [loop, onChange, syncClipTrack, values]);\n\n const handleScroll = useCallback(() => {\n syncClipTrack();\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, syncClipTrack]);\n\n useLayoutEffect(() => {\n syncScrollToValue(\"auto\");\n syncClipTrack();\n const raf = requestAnimationFrame(() => {\n syncScrollToValue(\"auto\");\n syncClipTrack();\n });\n return () => cancelAnimationFrame(raf);\n }, [layoutKey, syncClipTrack, 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 // Mouse-wheel: accumulate delta into multi-item steps; finger drag still uses\n // CSS snap + sticky settle. Loop targets the nearest raw index so wraps stay short.\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n if (values.length === 0) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n wheelAccumIdleTimerRef.current = setTimeout(() => {\n wheelAccumRef.current = 0;\n }, WHEEL_ACCUM_IDLE_MS);\n\n const threshold = itemHeight * WHEEL_STEP_THRESHOLD_FACTOR;\n const { nextAccum, steps } = consumeWheelSteps(\n wheelAccumRef.current,\n event.deltaY,\n threshold\n );\n wheelAccumRef.current = nextAccum;\n if (steps === 0) return;\n\n const currentRaw = readRawIndex(container, itemHeight);\n let targetRaw: number;\n if (loop) {\n if (Math.floor(currentRaw / values.length) !== MIDDLE_SECTION) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop =\n recenterLoopIndex(currentRaw, values.length, MIDDLE_SECTION) * itemHeight;\n }\n targetRaw = stepLoopRawIndex(\n readRawIndex(container, itemHeight),\n steps,\n values.length,\n LOOP_SECTIONS,\n MIDDLE_SECTION\n ).rawIndex;\n } else {\n targetRaw = Math.min(Math.max(currentRaw + steps, 0), values.length - 1);\n if (targetRaw === currentRaw) return;\n }\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"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 if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n };\n }, [loop, onChange, readRawIndex, scrollToIndex, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const container = scrollRef.current;\n if (!container || values.length === 0) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n const currentRaw = readRawIndex(container, itemHeight);\n let targetRaw: number | null = null;\n let preferDelta = 0;\n\n switch (event.key) {\n case \"ArrowUp\":\n preferDelta = -1;\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, -1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.max(currentRaw - 1, 0);\n break;\n case \"ArrowDown\":\n preferDelta = 1;\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, 1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.min(currentRaw + 1, values.length - 1);\n break;\n case \"Home\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, 0, values.length, LOOP_SECTIONS, -1)\n : 0;\n break;\n case \"End\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, values.length - 1, values.length, LOOP_SECTIONS, 1)\n : values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n if (targetRaw === currentRaw && preferDelta === 0) return;\n\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"smooth\");\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n };\n\n const committedIndex = getValueIndex(values, value);\n const selectedOptionId = loop\n ? `${ariaLabel}-${value}-${values.length * MIDDLE_SECTION + committedIndex}`\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 isCommitted = itemValue === value;\n const optionId = loop ? `${ariaLabel}-${itemValue}-${index}` : `${ariaLabel}-${itemValue}`;\n\n return (\n <li\n key={optionId}\n id={\n loop && isCommitted && Math.floor(index / values.length) === MIDDLE_SECTION\n ? selectedOptionId\n : optionId\n }\n className=\"aviala-datepicker-time__wheel-item\"\n role=\"option\"\n aria-selected={isCommitted}\n >\n <button\n type=\"button\"\n className={cn(\n \"aviala-datepicker-time__wheel-option\",\n typographyVariants({ level: \"text\" })\n )}\n data-selected={isCommitted ? \"true\" : undefined}\n tabIndex={-1}\n onClick={() => {\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = itemValue;\n scrollToIndex(index, \"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 className=\"aviala-datepicker-time__wheel-clip\" aria-hidden>\n <div ref={clipTrackRef} className=\"aviala-datepicker-time__wheel-clip-track\">\n {repeatedValues.map((itemValue, index) => (\n <div\n key={`clip-${loop ? `${itemValue}-${index}` : itemValue}`}\n className={cn(\n \"aviala-datepicker-time__wheel-clip-item\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {formatValue(itemValue)}\n </div>\n ))}\n </div>\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 * Decoupled from stickiness so drag dwell and wheel notches can be tuned apart.\n */\nexport const WHEEL_STEP_THRESHOLD_FACTOR = 0.35;\n\n/** Clear leftover wheel delta after this idle gap (touchpad residual). */\nexport const WHEEL_ACCUM_IDLE_MS = 140;\n\n/** Default number of repeated copies for infinite loop lists. */\nexport const WHEEL_LOOP_SECTIONS = 3;\n\n/** Middle copy index for a 3-section loop buffer. */\nexport const WHEEL_LOOP_MIDDLE_SECTION = 1;\n\n/**\n * Fold a wheel delta into an accumulator and consume whole steps.\n * Reversing direction resets the accumulator so leftover opposite delta\n * cannot immediately bounce back.\n */\nexport function consumeWheelSteps(\n accum: number,\n deltaY: number,\n threshold: number\n): { nextAccum: number; steps: number } {\n if (!(threshold > 0) || !Number.isFinite(deltaY) || deltaY === 0) {\n return { nextAccum: accum, steps: 0 };\n }\n\n let nextAccum = accum;\n if (nextAccum !== 0 && Math.sign(nextAccum) !== Math.sign(deltaY)) {\n nextAccum = 0;\n }\n nextAccum += deltaY;\n\n const steps = Math.trunc(nextAccum / threshold);\n if (steps === 0) {\n return { nextAccum, steps: 0 };\n }\n\n nextAccum -= steps * threshold;\n return { nextAccum, steps };\n}\n\nexport function normalizeWheelIndex(index: number, length: number): number {\n if (length <= 0) return 0;\n return ((index % length) + length) % length;\n}\n\n/**\n * Map a raw index onto the middle loop copy while keeping the same value slot.\n */\nexport function recenterLoopIndex(\n rawIndex: number,\n length: number,\n middleSection: number = WHEEL_LOOP_MIDDLE_SECTION\n): number {\n if (length <= 0) return 0;\n return middleSection * length + normalizeWheelIndex(rawIndex, length);\n}\n\n/**\n * Pick the absolute loop copy of `valueIndex` closest to `currentRawIndex`.\n * `preferDelta` breaks ties toward the scroll direction (+1 / -1).\n */\nexport function nearestLoopIndex(\n currentRawIndex: number,\n valueIndex: number,\n length: number,\n sections: number = WHEEL_LOOP_SECTIONS,\n preferDelta: number = 0\n): number {\n if (length <= 0 || sections <= 0) return 0;\n\n const slot = normalizeWheelIndex(valueIndex, length);\n let best = slot;\n let bestScore = Number.POSITIVE_INFINITY;\n\n for (let section = 0; section < sections; section += 1) {\n const candidate = section * length + slot;\n const distance = Math.abs(candidate - currentRawIndex);\n const directionBias =\n preferDelta === 0\n ? 0\n : Math.sign(candidate - currentRawIndex) === Math.sign(preferDelta)\n ? -0.25\n : 0.25;\n const score = distance + directionBias;\n if (score < bestScore) {\n bestScore = score;\n best = candidate;\n }\n }\n\n return best;\n}\n\n/**\n * Step a raw loop index by `steps`. If already on an outer copy, recenter into\n * the middle copy first so the gesture still has buffer room. Landing on an\n * outer copy is allowed — settle handles the silent wrap.\n */\nexport function stepLoopRawIndex(\n currentRawIndex: number,\n steps: number,\n length: number,\n sections: number = WHEEL_LOOP_SECTIONS,\n middleSection: number = WHEEL_LOOP_MIDDLE_SECTION\n): { rawIndex: number; didRecenter: boolean } {\n if (length <= 0) return { rawIndex: 0, didRecenter: false };\n\n const maxIndex = sections * length - 1;\n let rawIndex = currentRawIndex;\n let didRecenter = false;\n\n const section = Math.floor(rawIndex / length);\n if (section !== middleSection) {\n rawIndex = recenterLoopIndex(rawIndex, length, middleSection);\n didRecenter = true;\n }\n\n const next = rawIndex + steps;\n if (next < 0 || next > maxIndex) {\n return {\n rawIndex: recenterLoopIndex(next, length, middleSection),\n didRecenter: true,\n };\n }\n\n return { rawIndex: next, didRecenter };\n}\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 { useLocaleMessages } from \"../../locale\";\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 const locale = useLocaleMessages(\"TimePicker\");\n\n return (\n <div\n className={cn(\"aviala-datepicker-time\", className)}\n role=\"group\"\n aria-label={locale.selectTime}\n >\n <div className=\"aviala-datepicker-time__columns\">\n <DatePickerTimeWheelColumn\n aria-label={locale.hour}\n values={TIME_PICKER_HOUR_VALUES}\n value={value.hours}\n onChange={(hours) => onChange({ ...value, hours })}\n />\n <DatePickerTimeWheelColumn\n aria-label={locale.minute}\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 { useLocaleMessages } from \"../../locale\";\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,\n error = false,\n displayValue,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"TimePicker\");\n const { open, disabled: disabledContext, size: sizeContext, value } = useTimePickerContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n const resolvedPlaceholder = placeholder ?? locale.placeholder;\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 : resolvedPlaceholder}\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 locale = useLocaleMessages(\"TimePicker\");\n const { value, setValue } = useTimePickerContext();\n\n return (\n <div\n className={cn(\"aviala-timepicker-panel\", className)}\n role=\"application\"\n aria-label={locale.panel}\n >\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\";\nexport type PopoverContentLevel = \"caption\" | \"text\";\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 by default, borderless, solid caret).\n * - `primary` — brand primary surface with white text, borderless, solid caret.\n */\n appearance?: PopoverAppearance;\n /**\n * Typography level for the surface copy.\n * Defaults to `caption` for `appearance=\"tooltip\"`, otherwise `text`.\n */\n level?: PopoverContentLevel;\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 level,\n ...props\n },\n ref\n ) => {\n const isDefaultAppearance = appearance === \"default\";\n const surfaceLevel =\n level ?? (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 {\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 { useLocaleMessages } from \"../locale\";\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,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Modal\");\n const resolvedCloseLabel = closeLabel ?? locale.close;\n\n return (\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={resolvedCloseLabel}\n className=\"aviala-modal__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n />\n </DialogPrimitive.Close>\n ) : null}\n </div>\n </div>\n );\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, type ReactNode } 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 interface TooltipProviderProps {\n children: ReactNode;\n /**\n * Delay before the tooltip opens on hover, in ms.\n * Defaults to `TOOLTIP_DELAY_DURATION` (300). Pass `0` for instant open on hover.\n */\n delayDuration?: number;\n /**\n * When moving between tooltips, skip the open delay within this window (ms).\n */\n skipDelayDuration?: number;\n /** When true, hovering the tooltip content itself does not keep it open. */\n disableHoverableContent?: boolean;\n}\n\n/**\n * Provides shared hover-delay state for nested Tooltips.\n * Pass `delayDuration={0}` for instant open on hover.\n */\nexport function TooltipProvider({\n children,\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 {children}\n </TooltipPrimitive.Provider>\n );\n}\n\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport type TooltipContentLevel = \"caption\" | \"text\";\n\nexport type TooltipContentProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n /** Show a caret arrow pointing at the trigger (default true). */\n showArrow?: boolean;\n /**\n * Typography level for the surface copy.\n * Figma default is `caption`; pass `text` for body-sized tooltip copy.\n */\n level?: TooltipContentLevel;\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 level = \"caption\",\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\n className={cn(\n \"aviala-tooltip-content__surface\",\n typographyVariants({ level })\n )}\n >\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 {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TOOLTIP_DELAY_DURATION,\n type TooltipContentLevel,\n} from \"./tooltip\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\";\nimport { useCoarsePointer } from \"./use-coarse-pointer\";\n\n/** Default hold duration before a touch tooltip opens. */\nexport const RESPONSIVE_TOOLTIP_LONG_PRESS_MS = 500;\n\n/** Cancel the pending long-press if the pointer moves farther than this (px). */\nconst LONG_PRESS_MOVE_THRESHOLD_PX = 10;\n\nexport interface ResponsiveTooltipProps {\n /**\n * Tooltip body — the same content is shown on desktop (hover) and touch\n * (long-press).\n */\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 /** Typography level for the content surface (default `caption`). */\n level?: TooltipContentLevel;\n /**\n * Hover open delay on desktop, in ms (ignored on touch).\n * Defaults to 300 (`TOOLTIP_DELAY_DURATION`). Pass `0` for instant open on hover.\n * Requires a TooltipProvider ancestor for shared delay context.\n */\n delayDuration?: number;\n /**\n * Hold duration on touch before the tip opens, in ms.\n * Defaults to 500 (`RESPONSIVE_TOOLTIP_LONG_PRESS_MS`).\n */\n longPressMs?: 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 * **long-press** (short tap still reaches the trigger’s own `onClick`), dismisses\n * on outside tap / Escape, and keeps the tooltip visual skin (dark surface,\n * 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 level = \"caption\",\n delayDuration = TOOLTIP_DELAY_DURATION,\n longPressMs = RESPONSIVE_TOOLTIP_LONG_PRESS_MS,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n contentClassName,\n}: ResponsiveTooltipProps) {\n const coarse = useCoarsePointer();\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? openProp! : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pressOriginRef = useRef<{ x: number; y: number } | null>(null);\n const suppressClickRef = useRef(false);\n\n const clearLongPressTimer = useCallback(() => {\n if (longPressTimerRef.current != null) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n }, []);\n\n useEffect(() => () => clearLongPressTimer(), [clearLongPressTimer]);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent) => {\n if (event.pointerType === \"mouse\") return;\n clearLongPressTimer();\n suppressClickRef.current = false;\n pressOriginRef.current = { x: event.clientX, y: event.clientY };\n longPressTimerRef.current = setTimeout(() => {\n longPressTimerRef.current = null;\n suppressClickRef.current = true;\n setOpen(true);\n }, longPressMs);\n },\n [clearLongPressTimer, longPressMs, setOpen]\n );\n\n const handlePointerMove = useCallback(\n (event: ReactPointerEvent) => {\n const origin = pressOriginRef.current;\n if (!origin || longPressTimerRef.current == null) return;\n const dx = event.clientX - origin.x;\n const dy = event.clientY - origin.y;\n if (dx * dx + dy * dy > LONG_PRESS_MOVE_THRESHOLD_PX ** 2) {\n clearLongPressTimer();\n pressOriginRef.current = null;\n }\n },\n [clearLongPressTimer]\n );\n\n const handlePointerEnd = useCallback(() => {\n clearLongPressTimer();\n pressOriginRef.current = null;\n }, [clearLongPressTimer]);\n\n if (coarse) {\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n asChild\n // Capture: swallow the synthetic click after a successful long-press\n // so the trigger’s action (e.g. navigate / copy) does not also fire.\n onClickCapture={(event) => {\n if (!suppressClickRef.current) return;\n suppressClickRef.current = false;\n event.preventDefault();\n event.stopPropagation();\n }}\n // Bubble: always block Radix’s click-to-toggle — open is long-press only.\n onClick={(event) => {\n event.preventDefault();\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerEnd}\n onPointerCancel={handlePointerEnd}\n onContextMenu={(event) => {\n // Avoid the OS callout competing with the long-press tip.\n event.preventDefault();\n }}\n >\n {children as ReactElement}\n </PopoverTrigger>\n <PopoverContent\n appearance=\"tooltip\"\n level={level}\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={openProp}\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 level={level}\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 { useLocaleMessages } from \"../locale\";\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\" : \"default\";\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,\n action,\n onAction,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Feedback\");\n const resolvedCloseLabel = closeLabel ?? locale.close;\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={resolvedCloseLabel}\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 { useLocaleMessages } from \"../locale\";\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,\n quickAction,\n onQuickAction,\n action,\n onAction,\n secondaryAction,\n onSecondaryAction,\n showActions = false,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Alert\");\n const resolvedCloseLabel = closeLabel ?? locale.close;\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={resolvedCloseLabel}\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 DirectionArrowLeftLight,\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 type Ref,\n} from \"react\";\nimport { useRtl } from \"../config\";\nimport { Button } from \"./button\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typeface } from \"./typeface\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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\ntype ListItemSharedProps = {\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 /**\n * Fully custom trailing region — overrides type presets.\n * Pass `null` to hide trailing actions + divider (same as `showTrailing={false}`).\n * For `action` type, the chevron is still shown unless `showChevron={false}`.\n */\n trailing?: ReactNode;\n /**\n * When false, hide trailing actions and the vertical divider.\n * `action` type still shows the chevron unless `showChevron={false}`.\n * Default true.\n */\n showTrailing?: boolean;\n /**\n * Show the trailing chevron for `action` type. Default true when `itemType=\"action\"`.\n */\n showChevron?: boolean;\n /**\n * Show the top hairline on the content row (between items).\n * Default: auto — hidden for the first child in a `ListGroup`, shown otherwise.\n * Set explicitly to force show/hide.\n */\n showTopDivider?: boolean;\n selected?: boolean;\n disabled?: boolean;\n /** Enables hover highlight (auto when `onClick` / `href` is set) */\n interactive?: boolean;\n /** Render as a link — navigates when the row is activated */\n href?: string;\n target?: ComponentPropsWithoutRef<\"a\">[\"target\"];\n rel?: string;\n};\n\nexport type ListItemProps = Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> &\n ListItemSharedProps;\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 showTrailing = true,\n showChevron,\n showTopDivider,\n selected = false,\n disabled = false,\n interactive,\n href,\n target,\n rel,\n onClick,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"List\");\n const rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\n const isInteractive = interactive ?? (onClick != null || href != null);\n const chevronVisible = showChevron ?? itemType === \"action\";\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 chevron = chevronVisible ? (\n <span className=\"aviala-list-item__chevron\" aria-hidden>\n <ChevronIcon width={18} height={18} />\n </span>\n ) : null;\n\n const renderTrailing = () => {\n const hideActions = !showTrailing || trailing === null;\n\n if (hideActions) {\n // Keep action-type chevron when trailing actions / divider are hidden.\n return chevron && itemType === \"action\" ? (\n <div className=\"aviala-list-item__more\">{chevron}</div>\n ) : null;\n }\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={locale.more}\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n </div>\n <ListDivider />\n {chevron}\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 const sharedClassName = cn(\"aviala-list-item\", className);\n const sharedData = {\n \"data-leading\": leading,\n \"data-type\": itemType,\n \"data-selected\": selected ? (\"true\" as const) : undefined,\n \"data-disabled\": disabled ? (\"true\" as const) : undefined,\n \"data-interactive\": isInteractive ? (\"true\" as const) : undefined,\n \"data-top-divider\":\n showTopDivider === undefined\n ? undefined\n : showTopDivider\n ? (\"true\" as const)\n : (\"false\" as const),\n };\n const trailingNode = renderTrailing();\n const body = (\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 {trailingNode}\n </div>\n </div>\n </>\n );\n\n if (href && !disabled) {\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n role=\"listitem\"\n className={sharedClassName}\n href={href}\n target={target}\n rel={rel}\n onClick={onClick as ComponentPropsWithoutRef<\"a\">[\"onClick\"]}\n {...sharedData}\n {...(props as ComponentPropsWithoutRef<\"a\">)}\n >\n {body}\n </a>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n className={sharedClassName}\n onClick={disabled ? undefined : onClick}\n {...sharedData}\n {...props}\n >\n {body}\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 { forwardChevronSide, useDirection } from \"../config\";\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.16, 1, 0.3, 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 railInlineStart = readIndicatorToken(group, \"--navigation-rail-inline-start\", 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 const isRtl = getComputedStyle(group).direction === \"rtl\";\n const x = isRtl\n ? groupRect.width - railWidth - railInlineStart\n : railInlineStart;\n\n return {\n x,\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.16, 1, 0.3, 1). */\nfunction easeOutQuint(t: number) {\n return 1 - Math.pow(1 - t, 5);\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 = easeOutQuint(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 — forward of the item in vertical (LTR right / RTL left), 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 const writingDirection = useDirection();\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuContent\");\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={\n side ??\n (direction === \"vertical\"\n ? forwardChevronSide(writingDirection)\n : \"bottom\")\n }\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 {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\nimport { useDirection } from \"../config/use-direction\";\nimport { useThemeLayoutKey } from \"../theme/theme-provider\";\nimport { buttonVariants, type ButtonMode } from \"./button\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Tab `Style` */\nexport type TabStyle = \"default\" | \"card\" | \"tiled\";\n\n/** Figma Components → Structure Navigation → Tab `Background` */\nexport type TabBackground = \"none\" | \"default\";\n\ntype TabContextValue = {\n value: string;\n onValueChange: (value: string) => void;\n style: TabStyle;\n disabled?: boolean;\n registerItem: (value: string, el: HTMLButtonElement | null) => void;\n};\n\nconst TabContext = createContext<TabContextValue | null>(null);\n\nfunction useTabContext() {\n const ctx = useContext(TabContext);\n if (!ctx) {\n throw new Error(\"TabItem must be used within Tab\");\n }\n return ctx;\n}\n\n/** Map TabItem Style + active → nested Button mode (Figma TabItem uses Button). */\nfunction tabItemButtonMode(style: TabStyle, active: boolean): ButtonMode {\n if (style === \"tiled\") return active ? \"second\" : \"noBackgroundCustom\";\n // Card active: theme text via noBackground; white top-radius fill + ears via CSS.\n if (style === \"card\") return active ? \"noBackground\" : \"noBackgroundCustom\";\n return active ? \"noBackground\" : \"noBackgroundCustom\";\n}\n\nfunction useTabState(\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 IndicatorMetrics = {\n x: number;\n y: number;\n width: number;\n height: number;\n visible: boolean;\n};\n\nfunction applyTabIndicatorMetrics(\n el: HTMLSpanElement,\n metrics: IndicatorMetrics,\n instant = false\n) {\n if (instant) el.setAttribute(\"data-instant\", \"true\");\n el.style.width = `${metrics.width}px`;\n el.style.height = `${metrics.height}px`;\n el.style.transform = `translate(${metrics.x}px, ${metrics.y}px)`;\n el.dataset.visible = metrics.visible ? \"true\" : \"false\";\n if (instant) {\n void el.offsetWidth;\n el.removeAttribute(\"data-instant\");\n }\n}\n\nfunction measureTabIndicator(list: HTMLElement): IndicatorMetrics | null {\n const active = list.querySelector<HTMLElement>(\n '.aviala-tab-item[data-active=\"true\"]:not([data-disabled=\"true\"])'\n );\n if (!active) {\n return { x: 0, y: 0, width: 0, height: 0, visible: false };\n }\n\n const control =\n active.querySelector<HTMLElement>(\".aviala-tab-item__control\") ?? active;\n const listRect = list.getBoundingClientRect();\n const controlRect = control.getBoundingClientRect();\n const itemRect = active.getBoundingClientRect();\n const styles = getComputedStyle(list);\n const height =\n Number.parseFloat(styles.getPropertyValue(\"--tab-indicator-height\")) || 4;\n // Figma active Default: indicator x=12, width = itemWidth - 24 (66 → 42)\n const inset =\n Number.parseFloat(styles.getPropertyValue(\"--tab-indicator-inset-inline\")) ||\n 12;\n\n return {\n x: controlRect.left - listRect.left + list.scrollLeft + inset,\n y: itemRect.bottom - listRect.top + list.scrollTop - height,\n width: Math.max(0, controlRect.width - inset * 2),\n height,\n visible: true,\n };\n}\n\nfunction useTabIndicator(\n listRef: RefObject<HTMLDivElement | null>,\n enabled: boolean,\n layoutKey: string | null,\n value: string\n) {\n const indicatorRef = useRef<HTMLSpanElement | null>(null);\n const isInitial = useRef(true);\n\n const sync = useCallback(\n (instant: boolean) => {\n const list = listRef.current;\n const el = indicatorRef.current;\n if (!list || !el || !enabled) {\n if (el) el.dataset.visible = \"false\";\n return;\n }\n const metrics = measureTabIndicator(list);\n if (metrics) applyTabIndicatorMetrics(el, metrics, instant);\n },\n [enabled, listRef]\n );\n\n useLayoutEffect(() => {\n if (!enabled) {\n if (indicatorRef.current) indicatorRef.current.dataset.visible = \"false\";\n return;\n }\n sync(isInitial.current);\n isInitial.current = false;\n }, [enabled, layoutKey, sync, value]);\n\n useEffect(() => {\n if (!enabled) return;\n const list = listRef.current;\n if (!list) return;\n\n const onResize = () => sync(true);\n const ro = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(onResize) : null;\n ro?.observe(list);\n list.addEventListener(\"scroll\", onResize, { passive: true });\n window.addEventListener(\"resize\", onResize);\n\n return () => {\n ro?.disconnect();\n list.removeEventListener(\"scroll\", onResize);\n window.removeEventListener(\"resize\", onResize);\n };\n }, [enabled, listRef, sync]);\n\n return indicatorRef;\n}\n\nfunction renderTabIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: \"text\",\n biggerSize: true,\n });\n return <span className=\"aviala-tab-item__icon\">{content}</span>;\n}\n\n/** Figma Card TabItem ear vectors (1866:38024 / 1866:38019) — 8×8 in a 2×8 frame. */\nfunction TabCardEar({ side }: { side: \"start\" | \"end\" }) {\n const d =\n side === \"start\"\n ? \"M8 8L0 8C4 8 8 5.5 8 0L8 8Z\"\n : \"M0 8L8 8C4 8 0 5.5 0 0L0 8Z\";\n return (\n <span className=\"aviala-tab-item__ear\" data-side={side} aria-hidden>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 8 8\"\n fill=\"none\"\n >\n <path d={d} fill=\"currentColor\" />\n </svg>\n </span>\n );\n}\n\nexport type TabProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"style\"> & {\n /** Figma `Style` */\n style?: TabStyle;\n /** Figma `Background` */\n background?: TabBackground;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n /** Leading accessory (Figma SoltRight — visual start). */\n startSlot?: ReactNode;\n /** Trailing accessory (Figma SoltLeft / SoltLeft2 — visual end). */\n endSlot?: ReactNode;\n};\n\n/** Figma Components → Structure Navigation → Tab */\nexport const Tab = forwardRef<HTMLDivElement, TabProps>(\n (\n {\n className,\n style: tabStyle = \"default\",\n background = \"none\",\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled,\n startSlot,\n endSlot,\n children,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useTabState(valueProp, defaultValue, onValueChange);\n const layoutKey = useThemeLayoutKey();\n const direction = useDirection();\n const listRef = useRef<HTMLDivElement | null>(null);\n const itemsRef = useRef(new Map<string, HTMLButtonElement>());\n const showIndicator = tabStyle === \"default\";\n const indicatorRef = useTabIndicator(listRef, showIndicator, layoutKey, value);\n\n const registerItem = useCallback(\n (itemValue: string, el: HTMLButtonElement | null) => {\n if (el) itemsRef.current.set(itemValue, el);\n else itemsRef.current.delete(itemValue);\n },\n []\n );\n\n const ctx = useMemo<TabContextValue>(\n () => ({\n value,\n onValueChange: setValue,\n style: tabStyle,\n disabled,\n registerItem,\n }),\n [value, setValue, tabStyle, disabled, registerItem]\n );\n\n const focusAdjacent = useCallback(\n (current: string, delta: number) => {\n const entries = Array.from(itemsRef.current.entries()).filter(\n ([, el]) => !el.disabled\n );\n if (!entries.length) return;\n const idx = entries.findIndex(([v]) => v === current);\n const nextIdx =\n idx < 0\n ? 0\n : (idx + delta + entries.length) % entries.length;\n const [nextValue, el] = entries[nextIdx]!;\n setValue(nextValue);\n el.focus();\n },\n [setValue]\n );\n\n const handleListKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) return;\n\n const rtl = direction === \"rtl\";\n const prevKey = rtl ? \"ArrowRight\" : \"ArrowLeft\";\n const nextKey = rtl ? \"ArrowLeft\" : \"ArrowRight\";\n\n if (event.key === prevKey) {\n event.preventDefault();\n focusAdjacent(value, -1);\n } else if (event.key === nextKey) {\n event.preventDefault();\n focusAdjacent(value, 1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n const first = Array.from(itemsRef.current.entries()).find(\n ([, el]) => !el.disabled\n );\n if (first) {\n setValue(first[0]);\n first[1].focus();\n }\n } else if (event.key === \"End\") {\n event.preventDefault();\n const enabled = Array.from(itemsRef.current.entries()).filter(\n ([, el]) => !el.disabled\n );\n const last = enabled[enabled.length - 1];\n if (last) {\n setValue(last[0]);\n last[1].focus();\n }\n }\n };\n\n return (\n <TabContext.Provider value={ctx}>\n <div\n ref={ref}\n className={cn(\"aviala-tab\", className)}\n data-style={tabStyle}\n data-background={background}\n {...spiralDebugId(\"tab\")}\n {...props}\n >\n {startSlot != null && startSlot !== false ? (\n <div className=\"aviala-tab__slot\" data-slot=\"start\">\n {startSlot}\n </div>\n ) : null}\n <div\n ref={listRef}\n className=\"aviala-tab__list\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n onKeyDown={handleListKeyDown}\n {...spiralDebugId(\"tab.list\")}\n >\n {showIndicator ? (\n <span\n ref={indicatorRef}\n className=\"aviala-tab-indicator\"\n aria-hidden\n data-visible=\"false\"\n />\n ) : null}\n {children}\n </div>\n {endSlot != null && endSlot !== false ? (\n <div className=\"aviala-tab__slot\" data-slot=\"end\">\n {endSlot}\n </div>\n ) : null}\n </div>\n </TabContext.Provider>\n );\n }\n);\nTab.displayName = \"Tab\";\n\nexport type TabItemProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"value\" | \"children\"\n> & {\n value: string;\n leftIcon?: ReactNode;\n children?: ReactNode;\n};\n\n/** Figma Components → Structure Navigation → TabItem (nested Button). */\nexport const TabItem = forwardRef<HTMLButtonElement, TabItemProps>(\n (\n {\n className,\n value,\n leftIcon,\n disabled: disabledProp,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const ctx = useTabContext();\n const active = ctx.value === value;\n const disabled = Boolean(ctx.disabled || disabledProp);\n const mode = tabItemButtonMode(ctx.style, active);\n\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n ctx.registerItem(value, node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ctx, ref, value]\n );\n\n const showCardEars = ctx.style === \"card\" && active;\n\n return (\n <span\n className={cn(\"aviala-tab-item\", className)}\n data-active={active ? \"true\" : \"false\"}\n data-style={ctx.style}\n data-disabled={disabled ? \"true\" : undefined}\n {...spiralDebugId(\"tab.item\")}\n >\n {showCardEars ? <TabCardEar side=\"start\" /> : null}\n <button\n ref={setRefs}\n type=\"button\"\n role=\"tab\"\n data-size=\"regular\"\n className={cn(\n buttonVariants({ mode }),\n \"aviala-tab-item__control\"\n )}\n aria-selected={active}\n tabIndex={active ? 0 : -1}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) return;\n ctx.onValueChange(value);\n }}\n {...spiralDebugId(\"tab.item.control\")}\n {...props}\n >\n {renderTabIcon(leftIcon)}\n {children != null && children !== false ? (\n <Typography\n level=\"text\"\n as=\"span\"\n className=\"aviala-tab-item__label\"\n >\n {children}\n </Typography>\n ) : null}\n </button>\n {showCardEars ? <TabCardEar side=\"end\" /> : null}\n </span>\n );\n }\n);\nTabItem.displayName = \"TabItem\";\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 { useLocaleMessages } from \"../locale\";\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,\n description,\n label,\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 locale = useLocaleMessages(\"Upload\");\n const resolvedTitle = title ?? locale.title;\n const resolvedDescription = description ?? locale.description;\n const resolvedLabel = label ?? locale.label;\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={resolvedTitle}\n secondary={resolvedDescription}\n />\n ) : (\n <Typography level=\"text\" as=\"span\" className=\"aviala-upload__label\">\n {resolvedLabel}\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 consumeWheelSteps,\n nearestLoopIndex,\n normalizeWheelIndex,\n recenterLoopIndex,\n stepLoopRawIndex,\n stickyRoundIndex,\n WHEEL_ACCUM_IDLE_MS,\n WHEEL_LOOP_MIDDLE_SECTION,\n WHEEL_LOOP_SECTIONS,\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 = WHEEL_LOOP_SECTIONS;\nconst MIDDLE_SECTION = WHEEL_LOOP_MIDDLE_SECTION;\n\n/** Figma Components → Information Collect → ScrollPicker (579:88681) */\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\nfunction readRawIndex(container: HTMLElement, metrics: ColumnMetrics): number {\n return Math.round(fractionalIndexAtScrollTop(metrics, container.scrollTop));\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 clipTrackRef = 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 wheelAccumIdleTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\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 syncClipTrack = useCallback(() => {\n const container = scrollRef.current;\n const track = clipTrackRef.current;\n if (!container || !track) return;\n // Clip track mirrors the list including spacer pseudo-elements; align the\n // highlight band to the same content Y as the main scroller's center strip.\n const band = container.parentElement?.querySelector<HTMLElement>(\n \".aviala-scroll-picker-column__highlight\"\n );\n const bandHeight = band?.offsetHeight || 26;\n const offset = container.scrollTop + (container.clientHeight - bandHeight) / 2;\n track.style.transform = `translate3d(0, ${-offset}px, 0)`;\n }, []);\n\n const scrollToIndex = useCallback(\n (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 if (behavior === \"auto\") {\n syncClipTrack();\n } else {\n requestAnimationFrame(syncClipTrack);\n }\n },\n [syncClipTrack]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const wasProgrammatic = isProgrammaticScrollRef.current;\n isProgrammaticScrollRef.current = false;\n\n const metrics = readMetrics(container);\n if (!metrics || values.length === 0) {\n smoothTargetValueRef.current = null;\n return;\n }\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 ? normalizeWheelIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop\n ? recenterLoopIndex(rawIndex, values.length, MIDDLE_SECTION)\n : 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\n if (wasProgrammatic) {\n if (needsLoopRecenter) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n }\n smoothTargetValueRef.current = null;\n syncClipTrack();\n return;\n }\n\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 syncClipTrack();\n }, [loop, onChange, syncClipTrack, values]);\n\n const handleScroll = useCallback(() => {\n syncClipTrack();\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, syncClipTrack]);\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 currentRaw = readRawIndex(container, metrics);\n const currentValueIndex = loop\n ? normalizeWheelIndex(currentRaw, values.length)\n : Math.min(Math.max(currentRaw, 0), values.length - 1);\n\n if (currentValueIndex === valueIndex) {\n syncClipTrack();\n return;\n }\n\n const targetIndex = loop\n ? nearestLoopIndex(currentRaw, valueIndex, values.length, LOOP_SECTIONS)\n : valueIndex;\n const targetTop = scrollTopForIndex(container, metrics, targetIndex);\n\n if (Math.abs(container.scrollTop - targetTop) <= 1) {\n syncClipTrack();\n return;\n }\n\n scrollToIndex(targetIndex, \"auto\");\n }, [getIndex, loop, scrollToIndex, syncClipTrack, 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 (values.length === 0) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n wheelAccumIdleTimerRef.current = setTimeout(() => {\n wheelAccumRef.current = 0;\n }, WHEEL_ACCUM_IDLE_MS);\n\n const threshold = metrics.pitch * WHEEL_STEP_THRESHOLD_FACTOR;\n const { nextAccum, steps } = consumeWheelSteps(\n wheelAccumRef.current,\n event.deltaY,\n threshold\n );\n wheelAccumRef.current = nextAccum;\n if (steps === 0) return;\n\n const currentRaw = readRawIndex(container, metrics);\n let targetRaw: number;\n if (loop) {\n if (Math.floor(currentRaw / values.length) !== MIDDLE_SECTION) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = scrollTopForIndex(\n container,\n metrics,\n recenterLoopIndex(currentRaw, values.length, MIDDLE_SECTION)\n );\n }\n targetRaw = stepLoopRawIndex(\n readRawIndex(container, metrics),\n steps,\n values.length,\n LOOP_SECTIONS,\n MIDDLE_SECTION\n ).rawIndex;\n } else {\n targetRaw = Math.min(Math.max(currentRaw + steps, 0), values.length - 1);\n if (targetRaw === currentRaw) return;\n }\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"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 if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n };\n }, [loop, onChange, scrollToIndex, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\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 currentRaw = readRawIndex(container, metrics);\n let targetRaw: number | null = null;\n\n switch (event.key) {\n case \"ArrowUp\":\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, -1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.max(currentRaw - 1, 0);\n break;\n case \"ArrowDown\":\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, 1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.min(currentRaw + 1, values.length - 1);\n break;\n case \"Home\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, 0, values.length, LOOP_SECTIONS, -1)\n : 0;\n break;\n case \"End\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, values.length - 1, values.length, LOOP_SECTIONS, 1)\n : values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"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 isCommitted = Object.is(itemValue, value);\n const valueIndex = loop ? normalizeWheelIndex(index, values.length) : index;\n const optionId = `${reactId}-${loop ? index : valueIndex}`;\n const key =\n getValueKey?.(itemValue, index) ??\n `${String(itemValue)}-${index}`;\n const useSelectedId =\n isCommitted && (!loop || Math.floor(index / values.length) === MIDDLE_SECTION);\n\n return (\n <li key={key} className=\"contents\">\n <ScrollPickerItem\n id={useSelectedId ? selectedOptionId : optionId}\n selected={isCommitted}\n onSelect={() => {\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = itemValue;\n scrollToIndex(index, \"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 className=\"aviala-scroll-picker-column__clip\" aria-hidden>\n <div ref={clipTrackRef} className=\"aviala-scroll-picker-column__clip-track\">\n <div className=\"aviala-scroll-picker-column__list\">\n {repeatedValues.map((itemValue, index) => {\n const key =\n getValueKey?.(itemValue, index) ??\n `clip-${String(itemValue)}-${index}`;\n return (\n <div\n key={key}\n className={cn(\n \"aviala-scroll-picker-column__clip-item\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {formatValue ? formatValue(itemValue) : String(itemValue)}\n </div>\n );\n })}\n </div>\n </div>\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 {\n DirectionArrowLeftLight,\n DirectionArrowRightLight,\n SymbolMore,\n} 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 { useRtl } from \"../config\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"Breadcrumb\");\n const resolvedSize = size ?? \"default\";\n return (\n <BreadcrumbSizeContext.Provider value={resolvedSize}>\n <nav\n ref={ref}\n aria-label={props[\"aria-label\"] ?? locale.label}\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 rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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 <ChevronIcon 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 locale = useLocaleMessages(\"Breadcrumb\");\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 ?? locale.showMore}\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 { useRtl } from \"../config\";\nimport { cn } from \"../lib/utils\";\nimport { interpolate, useLocaleMessages } from \"../locale\";\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,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Pagination\");\n const rtl = useRtl();\n const PrevIcon = rtl ? DirectionArrowRightLight : DirectionArrowLeftLight;\n const NextIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\n const resolvedJumpLabel = jumpLabel ?? locale.jumpTo;\n const resolvedSizeLabel = sizeLabel ?? locale.pageSize;\n const resolvedSizeOptionLabel =\n sizeOptionLabel ?? ((size: number) => interpolate(locale.items, { size }));\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\"] ?? locale.pagination}\n {...props}\n >\n <div className=\"aviala-pagination__controls\">\n <Button\n mode=\"noBackgroundCustom\"\n size=\"regular\"\n iconOnly\n aria-label={locale.previous}\n disabled={currentPage <= 1}\n leftIcon={<PrevIcon 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={locale.morePages}\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={locale.next}\n disabled={currentPage >= safePageCount}\n leftIcon={<NextIcon 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 {resolvedJumpLabel}\n </Typography>\n <Input\n className=\"aviala-pagination__jump-input\"\n size=\"regular\"\n fullWidth={false}\n value={jumpValue}\n placeholder={locale.pagePlaceholder}\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 {resolvedSizeLabel}\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={locale.pageSizeAria}\n />\n <SelectContent>\n <SelectItemGroup>\n {pageSizeOptions.map((option) => (\n <SelectItem\n key={option}\n value={String(option)}\n itemFunction=\"checkbox\"\n >\n {resolvedSizeOptionLabel(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 DirectionArrowLeftLight,\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 { useRtl } from \"../config\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"Card\");\n const rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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={locale.more}\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <ChevronIcon 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 locale = useLocaleMessages(\"Card\");\n const rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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={locale.more}\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <ChevronIcon 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_react","import_react","import_react","import_jsx_runtime","import_react","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","Icon","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_react","import_react","import_jsx_runtime","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","center","rawOffset","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_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","PopoverPrimitive","import_icons","import_react","import_jsx_runtime","renderItemIcon","renderBadgeSlot","Icon","renderFunctionSlot","renderItemIcon","renderBadgeSlot","renderFunctionSlot","getOptionsAtPath","PopoverPrimitive","import_icons","import_react","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","readRawIndex","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_react","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","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_react","import_jsx_runtime","el","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","LOOP_SECTIONS","MIDDLE_SECTION","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/locale/interpolate.ts","../src/locale/context.tsx","../src/locale/source/zh-CN.ts","../src/locale/locale-provider.tsx","../src/locale/use-locale.ts","../src/locale/source/en-US.ts","../src/config/context.tsx","../src/config/config-provider.tsx","../src/config/use-direction.ts","../src/config/direction-utils.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/checkbox-check-icon.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/slider.tsx","../src/components/overlay-pointer.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/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/tab.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\";\nexport {\n LocaleProvider,\n useLocale,\n useLocaleMessages,\n interpolate,\n zhCN,\n enUS,\n type Locale,\n type LocaleProviderProps,\n type LocaleComponentName,\n} from \"./locale\";\nexport {\n ConfigProvider,\n useDirection,\n useRtl,\n mirrorSide,\n mirrorSideForDirection,\n forwardChevronSide,\n backChevronSide,\n type ConfigProviderProps,\n type Direction,\n type PhysicalSide,\n} from \"./config\";\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 type CheckboxSize,\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 type SegmentatorDirection,\n} from \"./components/segmentator\";\nexport {\n Form,\n FormField,\n type FormFieldProps,\n type FormFieldLayoutProps,\n type FormFieldControlledProps,\n type FormFieldRenderProps,\n type FormFieldDirection,\n} 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 PopoverContentLevel,\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 type TooltipContentLevel,\n} from \"./components/tooltip\";\nexport {\n ResponsiveTooltip,\n RESPONSIVE_TOOLTIP_LONG_PRESS_MS,\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 {\n Tab,\n TabItem,\n type TabProps,\n type TabItemProps,\n type TabStyle,\n type TabBackground,\n} from \"./components/tab\";\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","/** Replace `${name}` placeholders (Semi-style). Unknown keys stay as-is. */\nexport function interpolate(\n template: string,\n values: Record<string, string | number>\n): string {\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, key: string) => {\n const value = values[key];\n return value == null ? match : String(value);\n });\n}\n","import { createContext } from \"react\";\nimport type { Locale } from \"./interface\";\nimport zhCN from \"./source/zh-CN\";\n\nexport const LocaleContext = createContext<Locale>(zhCN);\n","import type { Locale } from \"../interface\";\n\nconst zhCN: Locale = {\n code: \"zh-CN\",\n DatePicker: {\n placeholder: \"YYYY-MM-DD\",\n placeholderWithTime: \"YYYY-MM-DD HH:mm\",\n rangePlaceholder: \"开始日期 - 结束日期\",\n selectDate: \"选择日期\",\n selectDateRange: \"选择日期范围\",\n rangeTo: \" 至 \",\n calendar: \"日历\",\n dateTimeSwitch: \"日期与时间切换\",\n previousMonth: \"上个月\",\n nextMonth: \"下个月\",\n previousYear: \"上一年\",\n nextYear: \"下一年\",\n selectMonthYear: \"选择年月\",\n closeMonthYear: \"关闭年月选择\",\n weekdays: [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n year: \"年\",\n month: \"月\",\n selectYearMonth: \"选择年月\",\n },\n TimePicker: {\n placeholder: \"HH:mm\",\n panel: \"时间选择\",\n selectTime: \"选择时间\",\n hour: \"小时\",\n minute: \"分钟\",\n },\n Pagination: {\n jumpTo: \"跳转至\",\n pageSize: \"每页\",\n items: \"${size} 项\",\n pagePlaceholder: \"页码\",\n morePages: \"更多页码\",\n previous: \"上一页\",\n next: \"下一页\",\n pagination: \"分页\",\n pageSizeAria: \"每页条数\",\n },\n Upload: {\n label: \"上传\",\n title: \"将文件拖到此处上传\",\n description: \"或点击此处上传\",\n },\n Modal: {\n close: \"关闭对话框\",\n },\n Feedback: {\n close: \"关闭\",\n },\n Alert: {\n close: \"关闭提示\",\n },\n ColorPicker: {\n placeholder: \"选择颜色\",\n hue: \"色相\",\n opacity: \"透明度\",\n saturationBrightness: \"饱和度与亮度\",\n pickFromScreen: \"从屏幕取色\",\n hex: \"十六进制颜色\",\n rgb: \"RGB 颜色\",\n hsl: \"HSL 颜色\",\n opacityPercent: \"不透明度百分比\",\n },\n Cascader: {\n placeholder: \"请选择\",\n },\n Loading: {\n label: \"加载中\",\n },\n Tag: {\n remove: \"移除\",\n },\n NumberInput: {\n increment: \"增加\",\n decrement: \"减少\",\n },\n Textarea: {\n resize: \"调整文本框大小\",\n },\n Card: {\n more: \"更多\",\n },\n List: {\n more: \"更多\",\n },\n Breadcrumb: {\n label: \"面包屑\",\n showMore: \"显示更多面包屑项\",\n },\n};\n\nexport default zhCN;\n","import type { ReactNode } from \"react\";\nimport { LocaleContext } from \"./context\";\nimport type { Locale } from \"./interface\";\nimport zhCN from \"./source/zh-CN\";\n\nexport type LocaleProviderProps = {\n children: ReactNode;\n /** Locale pack. Defaults to `zhCN`. */\n locale?: Locale;\n};\n\nexport function LocaleProvider({ children, locale = zhCN }: LocaleProviderProps) {\n return <LocaleContext.Provider value={locale}>{children}</LocaleContext.Provider>;\n}\n","import { useContext } from \"react\";\nimport { LocaleContext } from \"./context\";\nimport type { Locale, LocaleComponentName } from \"./interface\";\n\n/** Current locale pack (falls back to zh-CN when no Provider). */\nexport function useLocale(): Locale {\n return useContext(LocaleContext);\n}\n\n/** Messages for one component block (e.g. `Pagination`). */\nexport function useLocaleMessages<K extends LocaleComponentName>(\n component: K\n): Locale[K] {\n return useLocale()[component];\n}\n","import type { Locale } from \"../interface\";\n\nconst enUS: Locale = {\n code: \"en-US\",\n DatePicker: {\n placeholder: \"YYYY-MM-DD\",\n placeholderWithTime: \"YYYY-MM-DD HH:mm\",\n rangePlaceholder: \"Start date - End date\",\n selectDate: \"Select date\",\n selectDateRange: \"Select date range\",\n rangeTo: \" to \",\n calendar: \"Calendar\",\n dateTimeSwitch: \"Date and time\",\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n previousYear: \"Previous year\",\n nextYear: \"Next year\",\n selectMonthYear: \"Select month and year\",\n closeMonthYear: \"Close month and year picker\",\n weekdays: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n year: \"Year\",\n month: \"Month\",\n selectYearMonth: \"Select year and month\",\n },\n TimePicker: {\n placeholder: \"HH:mm\",\n panel: \"Time picker\",\n selectTime: \"Select time\",\n hour: \"Hour\",\n minute: \"Minute\",\n },\n Pagination: {\n jumpTo: \"Go to\",\n pageSize: \"Per page\",\n items: \"${size} items\",\n pagePlaceholder: \"Page\",\n morePages: \"More pages\",\n previous: \"Previous page\",\n next: \"Next page\",\n pagination: \"Pagination\",\n pageSizeAria: \"Page size\",\n },\n Upload: {\n label: \"Upload\",\n title: \"Drag the file here to upload the file\",\n description: \"Or click here to upload\",\n },\n Modal: {\n close: \"Close dialog\",\n },\n Feedback: {\n close: \"Dismiss\",\n },\n Alert: {\n close: \"Dismiss alert\",\n },\n ColorPicker: {\n placeholder: \"Select color\",\n hue: \"Hue\",\n opacity: \"Opacity\",\n saturationBrightness: \"Saturation and brightness\",\n pickFromScreen: \"Pick color from screen\",\n hex: \"Hex color\",\n rgb: \"RGB color\",\n hsl: \"HSL color\",\n opacityPercent: \"Opacity percent\",\n },\n Cascader: {\n placeholder: \"Select\",\n },\n Loading: {\n label: \"Loading\",\n },\n Tag: {\n remove: \"Remove\",\n },\n NumberInput: {\n increment: \"Increment\",\n decrement: \"Decrement\",\n },\n Textarea: {\n resize: \"Resize textarea\",\n },\n Card: {\n more: \"More\",\n },\n List: {\n more: \"More\",\n },\n Breadcrumb: {\n label: \"Breadcrumb\",\n showMore: \"Show more breadcrumb items\",\n },\n};\n\nexport default enUS;\n","import { createContext } from \"react\";\n\nexport type Direction = \"ltr\" | \"rtl\";\n\nexport type ConfigContextValue = {\n direction: Direction;\n /** True when this provider owns `document.documentElement.dir`. */\n isDocumentSyncOwner: boolean;\n};\n\nexport const ConfigContext = createContext<ConfigContextValue>({\n direction: \"ltr\",\n isDocumentSyncOwner: false,\n});\n","import {\n useContext,\n useLayoutEffect,\n useMemo,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { LocaleProvider } from \"../locale/locale-provider\";\nimport type { Locale } from \"../locale/interface\";\nimport { ConfigContext, type Direction } from \"./context\";\n\nexport type ConfigProviderProps = {\n children: ReactNode;\n /** Writing direction. Defaults to `ltr`. */\n direction?: Direction;\n /**\n * When true (default), the outermost ConfigProvider that opts in writes\n * `document.documentElement.dir` so portalled overlays inherit direction.\n * Nested providers only set `dir` on their local wrapper.\n */\n syncDocumentDir?: boolean;\n /** Optional locale pack — nests `LocaleProvider` when provided. */\n locale?: Locale;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function ConfigProvider({\n children,\n direction = \"ltr\",\n syncDocumentDir = true,\n locale,\n className,\n style,\n}: ConfigProviderProps) {\n const parent = useContext(ConfigContext);\n const isDocumentSyncOwner = syncDocumentDir && !parent.isDocumentSyncOwner;\n\n const value = useMemo(\n () => ({\n direction,\n isDocumentSyncOwner,\n }),\n [direction, isDocumentSyncOwner]\n );\n\n useLayoutEffect(() => {\n if (!isDocumentSyncOwner || typeof document === \"undefined\") return;\n const root = document.documentElement;\n const previous = root.getAttribute(\"dir\");\n root.setAttribute(\"dir\", direction);\n return () => {\n if (previous == null || previous === \"\") {\n root.removeAttribute(\"dir\");\n } else {\n root.setAttribute(\"dir\", previous);\n }\n };\n }, [direction, isDocumentSyncOwner]);\n\n let content = children;\n if (locale) {\n content = <LocaleProvider locale={locale}>{content}</LocaleProvider>;\n }\n\n return (\n <ConfigContext.Provider value={value}>\n <div\n className={[\"aviala-config-provider\", className].filter(Boolean).join(\" \")}\n dir={direction}\n style={style}\n >\n {content}\n </div>\n </ConfigContext.Provider>\n );\n}\n","import { useContext } from \"react\";\nimport { ConfigContext, type Direction } from \"./context\";\n\n/** Current writing direction (`ltr` when no ConfigProvider). */\nexport function useDirection(): Direction {\n return useContext(ConfigContext).direction;\n}\n\n/** Convenience: `true` when direction is `rtl`. */\nexport function useRtl(): boolean {\n return useDirection() === \"rtl\";\n}\n","import type { Direction } from \"./context\";\n\nexport type PhysicalSide = \"left\" | \"right\";\n\n/** Mirror a physical side under RTL (left ↔ right). */\nexport function mirrorSide(side: PhysicalSide, rtl: boolean): PhysicalSide {\n if (!rtl) return side;\n return side === \"left\" ? \"right\" : \"left\";\n}\n\n/** Same as `mirrorSide` but from a Direction value. */\nexport function mirrorSideForDirection(\n side: PhysicalSide,\n direction: Direction\n): PhysicalSide {\n return mirrorSide(side, direction === \"rtl\");\n}\n\n/**\n * Chevron that points toward \"forward\" / \"expand\" / \"next\" in the reading direction.\n * LTR → right; RTL → left.\n */\nexport function forwardChevronSide(direction: Direction): PhysicalSide {\n return direction === \"rtl\" ? \"left\" : \"right\";\n}\n\n/**\n * Chevron that points toward \"back\" / \"previous\" in the reading direction.\n * LTR → left; RTL → right.\n */\nexport function backChevronSide(direction: Direction): PhysicalSide {\n return direction === \"rtl\" ? \"right\" : \"left\";\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Loading\");\n const resolvedLabel = label ?? locale.label;\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 : resolvedLabel}\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 | \"outline\"\n | \"outlineCustom\"\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 outline: \"aviala-button--mode-outline\",\n outlineCustom: \"aviala-button--mode-outlineCustom\",\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 \"outline\";\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 mode !== \"outline\" &&\n mode !== \"outlineCustom\"\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 { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"NumberInput\");\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={locale.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={locale.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 { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"Textarea\");\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={locale.resize}\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 DirectionArrowLeft,\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 { forwardChevronSide, useDirection, useRtl } from \"../config\";\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,\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 SelectExpandChevron() {\n const rtl = useRtl();\n const Icon = rtl ? DirectionArrowLeft : DirectionArrowRight;\n return <Icon level=\"text\" biggerSize aria-hidden />;\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 <SelectExpandChevron />\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 rtl = useRtl();\n const direction = useDirection();\n const expandKey = rtl ? \"ArrowLeft\" : \"ArrowRight\";\n const collapseKey = rtl ? \"ArrowRight\" : \"ArrowLeft\";\n\n const side = sideProp ?? subMenu.side ?? forwardChevronSide(direction);\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 === expandKey || 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 === collapseKey) {\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 { useLocaleMessages } from \"../locale\";\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,\n lineHeightFix,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Tag\");\n const resolvedCloseLabel = closeLabel ?? locale.remove;\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={resolvedCloseLabel}\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: default 16 / big 24; stroke 2; radius = half − stroke/2 */\n const diameter = resolvedSize === \"big\" ? 24 : 16;\n const center = diameter / 2;\n const stroke = 2;\n const normalizedRadius = center - stroke / 2;\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={diameter}\n height={diameter}\n viewBox={`0 0 ${diameter} ${diameter}`}\n aria-hidden\n >\n <circle\n className=\"aviala-progress__ring-track\"\n cx={center}\n cy={center}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"aviala-progress__ring-fill\"\n cx={center}\n cy={center}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={`${circumference} ${circumference}`}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${center} ${center})`}\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 {\n cloneElement,\n forwardRef,\n isValidElement,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { TypefacePair } from \"./typeface\";\nimport { CheckboxCheckIcon } from \"./checkbox-check-icon\";\n\n/** Figma Components → Information Collect → Checkbox */\nexport type CheckboxGroupDirection = \"vertical\" | \"horizontal\";\n\n/** Figma Checkbox `Size` — Default → `default`, Huge → `huge` */\nexport type CheckboxSize = \"default\" | \"huge\";\n\nexport type CheckboxProps = ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {\n /** Figma Checkbox `Round` */\n round?: boolean;\n /** Figma Checkbox `Size` */\n size?: CheckboxSize;\n};\n\nexport const Checkbox = forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, round = false, size = \"default\", ...props }, ref) => {\n /** Skip enter transitions on first paint (defaultChecked / controlled initial). */\n const [motionReady, setMotionReady] = useState(false);\n useEffect(() => {\n const id = requestAnimationFrame(() => setMotionReady(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\"aviala-checkbox aviala-focus-ring\", className)}\n data-round={round ? \"true\" : undefined}\n data-size={size}\n data-motion={motionReady ? \"ready\" : \"boot\"}\n {...props}\n >\n <span aria-hidden className=\"aviala-checkbox__surface\" />\n <CheckboxPrimitive.Indicator forceMount className=\"aviala-checkbox__indicator\">\n <CheckboxCheckIcon className=\"aviala-checkbox__indicator-icon aviala-checkbox__indicator-icon--check\" />\n <span\n aria-hidden\n className=\"aviala-checkbox__indeterminate-mark aviala-checkbox__indicator-icon--indeterminate\"\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\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 type { SVGProps } from \"react\";\nimport { cn } from \"../lib/utils\";\n\ntype CheckboxCheckIconProps = Omit<SVGProps<SVGSVGElement>, \"children\">;\n\n/**\n * Motion check path from Figma `symbol_right` Black.\n * Progress is driven by CSS transitions on the parent Checkbox `data-state`\n * (interruptible; `vector-effect: non-scaling-stroke` keeps stroke weight stable).\n * No clipPath — round caps must not be cropped at Default/Huge stroke widths.\n */\nexport function CheckboxCheckIcon({ className, ...props }: CheckboxCheckIconProps) {\n return (\n <svg\n className={cn(\"aviala-checkbox__check-icon\", className)}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n overflow=\"visible\"\n {...props}\n >\n <path\n className=\"aviala-checkbox__check-path\"\n transform=\"translate(1 1.6)\"\n d=\"M0 3.9L3.4974 8.35503C3.83947 8.79075 4.51016 8.75534 4.80444 8.28602L10 0\"\n pathLength={1}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n );\n}\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\";\nexport type SegmentatorDirection = \"horizontal\" | \"vertical\";\n\ntype SegmentatorContextValue = {\n value?: string;\n onValueChange?: (value: string) => void;\n mode: SegmentatorMode;\n direction: SegmentatorDirection;\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 startY: 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 // Absolute thumb lives in the group's content box — include scroll offsets.\n return {\n x: itemRect.left - groupRect.left + group.scrollLeft,\n y: itemRect.top - groupRect.top + group.scrollTop,\n width: itemRect.width,\n height: itemRect.height,\n };\n}\n\nfunction syncSegmentatorOverflowing(group: HTMLElement) {\n const vertical = group.getAttribute(\"data-direction\") === \"vertical\";\n const overflowing = vertical\n ? group.scrollHeight > group.clientHeight + 1\n : group.scrollWidth > group.clientWidth + 1;\n if (overflowing) {\n group.setAttribute(\"data-overflowing\", \"true\");\n } else {\n group.removeAttribute(\"data-overflowing\");\n }\n return overflowing;\n}\n\nfunction isSegmentatorOverflowing(group: HTMLElement | null): boolean {\n return group?.getAttribute(\"data-overflowing\") === \"true\";\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 findItemAtClientY(\n items: HTMLButtonElement[],\n clientY: number\n): HTMLButtonElement | null {\n for (const item of items) {\n const rect = item.getBoundingClientRect();\n if (clientY >= rect.top && clientY <= rect.bottom) 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.top + rect.height / 2;\n const distance = Math.abs(clientY - 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\nfunction getItemCenterY(item: HTMLButtonElement): number {\n const rect = item.getBoundingClientRect();\n return rect.top + rect.height / 2;\n}\n\n/**\n * Map finger 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 clientY: number,\n fallback: SegmentatorThumbMetrics,\n direction: SegmentatorDirection\n): { metrics: SegmentatorThumbMetrics; item: HTMLButtonElement | null } {\n if (items.length === 0) {\n return { metrics: fallback, item: null };\n }\n\n const vertical = direction === \"vertical\";\n const item = vertical\n ? findItemAtClientY(items, clientY)\n : findItemAtClientX(items, clientX);\n if (!item) {\n return { metrics: fallback, item: null };\n }\n\n const base = measureItemThumbMetrics(item, group);\n const isFirst = item === items[0];\n const isLast = item === items[items.length - 1];\n\n if (vertical) {\n const center = getItemCenterY(item);\n const rawOffset = Math.max(\n -SEGMENTATOR_STICKY_OFFSET_PX,\n Math.min(SEGMENTATOR_STICKY_OFFSET_PX, clientY - center)\n );\n let y = base.y + rawOffset;\n if (isFirst && y < base.y) y = base.y;\n if (isLast && y > base.y) y = base.y;\n return { metrics: { ...base, y }, item };\n }\n\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 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 return measureItemThumbMetrics(selected, group);\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 group = groupRef.current;\n if (group) {\n const selected = group.querySelector<HTMLButtonElement>(\n '.aviala-segmentator-item[data-selected=\"true\"]'\n );\n if (selected && !isInitialMount.current) {\n selected.scrollIntoView({\n inline: \"nearest\",\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }\n\n const next = measureThumb();\n if (!next) return;\n\n const el = thumbElRef.current;\n\n if (isInitialMount.current) {\n metricsRef.current = next;\n setThumb(next);\n if (el) {\n applyThumbMetrics(el, next, true);\n isInitialMount.current = false;\n }\n return;\n }\n\n if (!el) {\n syncThumb(next, true);\n return;\n }\n\n const startMetrics = metricsRef.current ?? next;\n const prefersReducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (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, groupRef]);\n\n useLayoutEffect(() => {\n const group = groupRef.current;\n if (!group) return;\n\n const updateOverflowAndThumb = () => {\n syncSegmentatorOverflowing(group);\n remeasureThumb();\n };\n\n updateOverflowAndThumb();\n\n const observer = new ResizeObserver(() => {\n updateOverflowAndThumb();\n });\n observer.observe(group);\n\n const items = group.querySelectorAll(\".aviala-segmentator-item\");\n items.forEach((item) => observer.observe(item));\n\n const onScroll = () => {\n syncSegmentatorOverflowing(group);\n remeasureThumb();\n };\n group.addEventListener(\"scroll\", onScroll, { passive: true });\n\n const layoutObserver = new MutationObserver(() => {\n requestAnimationFrame(updateOverflowAndThumb);\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 group.removeEventListener(\"scroll\", onScroll);\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 /** Figma `direction` — horizontal (default) or vertical stack. */\n direction?: SegmentatorDirection;\n allRound?: boolean;\n /** When true, the group fills its container and items split the main axis 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 direction = \"horizontal\",\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, clientY: 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 clientY,\n fallback,\n direction\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) +\n Math.abs(metrics.y - prev.y) +\n Math.abs(metrics.width - prev.width) +\n Math.abs(metrics.height - prev.height)\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 [direction, 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 const delta =\n direction === \"vertical\"\n ? Math.abs(event.clientY - drag.startY)\n : Math.abs(event.clientX - drag.startX);\n if (delta < 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, event.clientY);\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 [direction, 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 // When overflowing on the main axis, pan owns the gesture — keep tap-to-select only.\n if (isSegmentatorOverflowing(groupRef.current)) 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 startY: event.clientY,\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 direction,\n allRound,\n disabled,\n consumeClickRef,\n }),\n [currentValue, setValue, mode, direction, 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-direction={direction}\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 {\n forwardRef,\n useId,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n FormProvider,\n useController,\n type Control,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type UseControllerProps,\n type UseFormStateReturn,\n} from \"react-hook-form\";\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\n/** Layout mode — the original props-driven wrapper */\nexport type FormFieldLayoutProps = 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 children?: ReactNode;\n};\n\n/** Render arguments passed to `render` in react-hook-form mode */\nexport type FormFieldRenderProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n field: ControllerRenderProps<TFieldValues, TName>;\n fieldState: ControllerFieldState;\n formState: UseFormStateReturn<TFieldValues>;\n /**\n * Auto-generated control id. The field label is already wired to it via\n * `htmlFor` — pass it to the underlying input (`<Input id={id} />`).\n */\n id: string;\n};\n\n/**\n * react-hook-form mode — bind the field to a form via `name` (+ optional\n * `control`; falls back to the surrounding `<Form>` context). Validation\n * errors from the resolver (zod etc.) are rendered automatically unless the\n * `error` prop overrides them.\n */\nexport type FormFieldControlledProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = Omit<FormFieldLayoutProps, \"children\" | \"htmlFor\"> &\n Pick<\n UseControllerProps<TFieldValues, TName>,\n \"rules\" | \"defaultValue\" | \"shouldUnregister\" | \"disabled\"\n > & {\n name: TName;\n control?: Control<TFieldValues>;\n render: (props: FormFieldRenderProps<TFieldValues, TName>) => ReactNode;\n /** Overrides the validation error message shown under the control */\n error?: ReactNode;\n };\n\nexport type FormFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = FormFieldLayoutProps | FormFieldControlledProps<TFieldValues, TName>;\n\nconst FormFieldLayout = forwardRef<HTMLDivElement, FormFieldLayoutProps>(\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);\nFormFieldLayout.displayName = \"FormFieldLayout\";\n\nconst FormFieldControlled = forwardRef<HTMLDivElement, FormFieldControlledProps>(\n (\n {\n control,\n name,\n rules,\n defaultValue,\n shouldUnregister,\n disabled,\n render,\n error,\n ...layoutProps\n },\n ref\n ) => {\n const id = useId();\n const { field, fieldState, formState } = useController({\n name,\n control,\n rules,\n defaultValue,\n shouldUnregister,\n disabled,\n });\n const message = error !== undefined ? error : (fieldState.error?.message ?? null);\n\n return (\n <FormFieldLayout ref={ref} {...layoutProps} htmlFor={id} error={message}>\n {render({ field, fieldState, formState, id })}\n </FormFieldLayout>\n );\n }\n);\nFormFieldControlled.displayName = \"FormFieldControlled\";\n\nfunction isControlledProps(\n props: FormFieldProps\n): props is FormFieldControlledProps {\n return \"render\" in props && typeof props.render === \"function\" && \"name\" in props;\n}\n\nconst FormFieldRoot = forwardRef<HTMLDivElement, FormFieldProps>((props, ref) => {\n if (isControlledProps(props)) {\n return <FormFieldControlled ref={ref} {...props} />;\n }\n return <FormFieldLayout ref={ref} {...props} />;\n});\n\n/**\n * FormField — layout wrapper around a form control, or a react-hook-form\n * bound field when given `name` + `render` (shadcn-style).\n *\n * @example Layout mode\n * <FormField label=\"Email\" htmlFor=\"email\" description=\"...\">\n * <Input id=\"email\" />\n * </FormField>\n *\n * @example react-hook-form + zod mode\n * <Form {...form}>\n * <form onSubmit={form.handleSubmit(onSubmit)}>\n * <FormField\n * control={form.control}\n * name=\"email\"\n * label=\"Email\"\n * render={({ field, fieldState, id }) => (\n * <Input id={id} error={fieldState.invalid} {...field} />\n * )}\n * />\n * </form>\n * </Form>\n */\nexport const FormField = FormFieldRoot as {\n <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n >(\n props: FormFieldProps<TFieldValues, TName> & { ref?: Ref<HTMLDivElement> }\n ): ReactElement | null;\n displayName?: string;\n};\nFormField.displayName = \"FormField\";\n\n/** Alias of react-hook-form's FormProvider — wrap your form with it (shadcn-style `<Form {...form}>`) */\nexport const Form = FormProvider;\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 { useLocaleMessages } from \"../../locale\";\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, ...props }, ref) => {\n const locale = useLocaleMessages(\"ColorPicker\");\n const resolvedPlaceholder = placeholder ?? locale.placeholder;\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\">{resolvedPlaceholder}</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 { useLocaleMessages } from \"../../locale\";\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 locale = useLocaleMessages(\"ColorPicker\");\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={locale.saturationBrightness}\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, useEffect, useRef, 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\nfunction normalizeHex(value: string): string {\n return parseColor(value).toHex().toLowerCase();\n}\n\n/**\n * Keep HSVA as interaction source of truth so hue 360° (≡ hex red / 0°) does\n * not snap the spectrum thumb back to the start after a hex round-trip.\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] =\n useState<ColorFormat>(defaultFormat);\n\n const value = controlledValue ?? uncontrolledValue;\n const format = controlledFormat ?? uncontrolledFormat;\n\n const [hsva, setHsvaState] = useState(() => toHsva(value));\n const hsvaRef = useRef(hsva);\n hsvaRef.current = hsva;\n\n const lastEmittedHexRef = useRef(normalizeHex(value));\n\n // Sync from props/parent only when the hex actually changed from outside\n // (not when we ourselves emitted an equivalent #ff0000 for h=360).\n useEffect(() => {\n const nextHex = normalizeHex(value);\n if (nextHex === lastEmittedHexRef.current) return;\n lastEmittedHexRef.current = nextHex;\n const nextHsva = toHsva(value);\n hsvaRef.current = nextHsva;\n setHsvaState(nextHsva);\n }, [value]);\n\n const emitHex = useCallback(\n (hex: string, meta?: ColorPickerChangeMeta) => {\n const normalized = parseColor(hex).toHex();\n lastEmittedHexRef.current = normalized.toLowerCase();\n if (controlledValue === undefined) {\n setUncontrolledValue(normalized);\n }\n onChange?.(normalized, meta);\n },\n [controlledValue, onChange]\n );\n\n const setValue = useCallback(\n (next: string, meta?: ColorPickerChangeMeta) => {\n const normalized = parseColor(next).toHex();\n const nextHsva = toHsva(normalized);\n hsvaRef.current = nextHsva;\n setHsvaState(nextHsva);\n emitHex(normalized, meta);\n },\n [emitHex]\n );\n\n const setHsva = useCallback(\n (partial: Partial<HSVA>, meta?: ColorPickerChangeMeta) => {\n const next = { ...hsvaRef.current, ...partial };\n hsvaRef.current = next;\n setHsvaState(next);\n emitHex(fromHsva(next), meta);\n },\n [emitHex]\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 { useLocaleMessages } from \"../../locale\";\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 locale = useLocaleMessages(\"ColorPicker\");\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={locale.pickFromScreen}\n {...spiralDebugId(\"color-picker.content.inputs.eyedropper\")}\n title={\n eyeDropperSupported\n ? locale.pickFromScreen\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={locale.hex}\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\" ? locale.rgb : locale.hsl}\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={locale.opacityPercent}\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, type CSSProperties } from \"react\";\nimport { spiralDebugId } from \"../../lib/spiral-debug\";\nimport { cn } from \"../../lib/utils\";\nimport { useLocaleMessages } from \"../../locale\";\nimport { Slider } from \"../slider\";\nimport { hueGradientStops, solidHex, toRgbComponents } from \"./color-utils\";\nimport { useOptionalColorPickerContext } from \"./color-picker-context\";\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 locale = useLocaleMessages(\"ColorPicker\");\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 sliderValue =\n kind === \"hue\" ? [hsva.h] : [Math.round(hsva.a * 100)];\n\n const handleValueChange = useCallback(\n (next: number[]) => {\n const raw = next[0] ?? 0;\n if (kind === \"hue\") {\n setHsva({ h: raw }, { source: \"hue\" });\n } else {\n setHsva({ a: raw / 100 }, { source: \"alpha\" });\n }\n },\n [kind, setHsva]\n );\n\n // Hue: spectrum only. Alpha: same-hue 0→1 (avoid `transparent` muddy lerp);\n // checkerboard sits under the gradient in CSS.\n const trackBg =\n kind === \"hue\"\n ? `linear-gradient(90deg, ${hueGradientStops()})`\n : (() => {\n const solid = solidHex(value);\n const { r, g, b } = toRgbComponents(solid);\n return `linear-gradient(90deg, rgba(${r},${g},${b},0), ${solid})`;\n })();\n\n return (\n <div\n className={cn(\"aviala-color-picker-slider-row\", className)}\n style={\n {\n \"--color-picker-slider-track-bg\": trackBg,\n } as CSSProperties\n }\n {...spiralDebugId(`color-picker.content.${kind}-slider`)}\n >\n <Slider\n className=\"aviala-color-picker-slider\"\n data-kind={kind}\n size=\"big\"\n min={0}\n max={kind === \"hue\" ? 360 : 100}\n step={1}\n value={sliderValue}\n onValueChange={handleValueChange}\n disabled={isDisabled}\n aria-label={kind === \"hue\" ? locale.hue : locale.opacity}\n />\n </div>\n );\n}\n","import * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { OverlayPointerSvg, TOOLTIP_POINTER } from \"./overlay-pointer\";\nimport { typographyVariants } from \"./typography\";\n\n/** Figma Components → Information Collect → Slider (384:21585) */\nexport type SliderSize = \"default\" | \"big\";\nexport type SliderType = \"default\" | \"range\";\n\ntype SliderRootProps = Omit<\n ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"orientation\"\n>;\ntype SliderPointerHandler = SliderRootProps[\"onPointerMove\"];\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 = SliderRootProps &\n VariantProps<typeof sliderVariants> & {\n /** Figma `Type` — single thumb vs range (two thumbs) */\n type?: SliderType;\n /**\n * When true, hovering a thumb (and while dragging it) shows a value\n * tooltip bound to that thumb.\n */\n showValueTooltip?: boolean;\n /** Format the value tooltip label. Defaults to `String(value)`. */\n formatValueTooltip?: (value: number, index: number) => ReactNode;\n };\n\nfunction SliderValueTooltip({\n open,\n children,\n}: {\n open: boolean;\n children: ReactNode;\n}) {\n return (\n <span\n className=\"aviala-slider__value-tooltip\"\n data-state={open ? \"instant-open\" : \"closed\"}\n aria-hidden={!open}\n >\n <span\n className={cn(\n \"aviala-slider__value-tooltip__surface\",\n typographyVariants({ level: \"caption\" })\n )}\n >\n {children}\n </span>\n <span className=\"aviala-slider__value-tooltip__arrow\" aria-hidden>\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 </span>\n </span>\n );\n}\n\nfunction SliderThumb({\n index,\n value,\n showValueTooltip,\n formatValueTooltip,\n forceTooltipOpen,\n onThumbPointerDown,\n}: {\n index: number;\n value: number;\n showValueTooltip: boolean;\n formatValueTooltip?: (value: number, index: number) => ReactNode;\n forceTooltipOpen: boolean;\n onThumbPointerDown: () => void;\n}) {\n const [hoverOpen, setHoverOpen] = useState(false);\n const tooltipOpen = Boolean(\n showValueTooltip && (forceTooltipOpen || hoverOpen)\n );\n const label = formatValueTooltip\n ? formatValueTooltip(value, index)\n : String(value);\n\n return (\n <SliderPrimitive.unstable_ThumbProvider>\n <SliderPrimitive.unstable_ThumbTrigger\n className=\"aviala-slider__thumb aviala-focus-ring\"\n onPointerDown={onThumbPointerDown}\n onPointerEnter={\n showValueTooltip ? () => setHoverOpen(true) : undefined\n }\n onPointerLeave={\n showValueTooltip ? () => setHoverOpen(false) : undefined\n }\n >\n <span className=\"aviala-slider__thumb-face\" aria-hidden />\n {showValueTooltip ? (\n <SliderValueTooltip open={tooltipOpen}>{label}</SliderValueTooltip>\n ) : null}\n </SliderPrimitive.unstable_ThumbTrigger>\n <SliderPrimitive.unstable_BubbleInput />\n </SliderPrimitive.unstable_ThumbProvider>\n );\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 onValueChange,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerCancel,\n onLostPointerCapture,\n showValueTooltip = false,\n formatValueTooltip,\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 // Transition left/right on click/keyboard jumps; disable once the pointer moves\n // so dragging stays 1:1 with the cursor.\n const [isDragging, setIsDragging] = useState(false);\n // Pointer is down on the slider — keep the active thumb’s value tooltip open\n // (including track presses) without waiting for a move.\n const [pointerDown, setPointerDown] = useState(false);\n const [activeThumbIndex, setActiveThumbIndex] = useState<number | null>(\n null\n );\n const [uncontrolledValue, setUncontrolledValue] = useState<number[]>(\n resolvedDefaultValue\n );\n const currentValues = value ?? uncontrolledValue;\n\n const handleValueChange = (next: number[]) => {\n if (value == null) setUncontrolledValue(next);\n if (showValueTooltip) {\n const prev = currentValues;\n const changed = next.findIndex((v, i) => v !== prev[i]);\n if (changed >= 0) setActiveThumbIndex(changed);\n }\n onValueChange?.(next);\n };\n\n const handlePointerDown: SliderRootProps[\"onPointerDown\"] = (event) => {\n if (showValueTooltip && !disabled) setPointerDown(true);\n onPointerDown?.(event);\n };\n\n const handlePointerMove: SliderPointerHandler = (event) => {\n if (event.buttons !== 0) setIsDragging(true);\n onPointerMove?.(event);\n };\n\n const endPointer = () => {\n setIsDragging(false);\n setPointerDown(false);\n setActiveThumbIndex(null);\n };\n\n const handlePointerUp: SliderRootProps[\"onPointerUp\"] = (event) => {\n endPointer();\n onPointerUp?.(event);\n };\n\n const handlePointerCancel: SliderRootProps[\"onPointerCancel\"] = (event) => {\n endPointer();\n onPointerCancel?.(event);\n };\n\n const handleLostPointerCapture: SliderRootProps[\"onLostPointerCapture\"] = (\n event\n ) => {\n endPointer();\n onLostPointerCapture?.(event);\n };\n\n return (\n <SliderPrimitive.Root\n // Remount when Type changes — Radix keeps internal value; switching\n // default↔range with a stale arity leaves the second thumb at display:none.\n key={resolvedType}\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 data-dragging={isDragging ? \"true\" : undefined}\n data-value-tooltip={showValueTooltip ? \"true\" : undefined}\n onValueChange={handleValueChange}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\n onLostPointerCapture={handleLostPointerCapture}\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 const thumbValue =\n currentValues[index] ??\n resolvedDefaultValue[index] ??\n (isRange ? (index === 0 ? min : max) : min + (max - min) / 2);\n\n const forceTooltipOpen =\n pointerDown &&\n (activeThumbIndex === index ||\n (activeThumbIndex == null && thumbCount === 1 && index === 0));\n\n return (\n <SliderThumb\n key={index}\n index={index}\n value={thumbValue}\n showValueTooltip={Boolean(showValueTooltip && !disabled)}\n formatValueTooltip={formatValueTooltip}\n forceTooltipOpen={forceTooltipOpen}\n onThumbPointerDown={() => setActiveThumbIndex(index)}\n />\n );\n })}\n </SliderPrimitive.Root>\n );\n }\n);\nSlider.displayName = \"Slider\";\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 { 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 DirectionArrowLeftLight,\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 { useRtl } from \"../config\";\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\";\nimport { useLocaleMessages } from \"../locale\";\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 CascaderExpandChevron() {\n const rtl = useRtl();\n const Icon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\n return <Icon level=\"text\" biggerSize aria-hidden />;\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 ? <CascaderExpandChevron /> : 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,\n error = false,\n displayValue,\n separator = \"/\",\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Cascader\");\n const resolvedPlaceholder = placeholder ?? locale.placeholder;\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 : resolvedPlaceholder}\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 const rtl = useRtl();\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 expandKey = rtl ? \"ArrowLeft\" : \"ArrowRight\";\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 === expandKey && 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 DirectionArrowLeftLight,\n DirectionArrowRightLight,\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 { useRtl } from \"../../config\";\nimport { useLocale, useLocaleMessages } from \"../../locale\";\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 type DateRange,\n type RangeSelectionPosition,\n} from \"./date-utils\";\nimport type { LocaleDatePicker } from \"../../locale/interface\";\n\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,\n rangePlaceholder,\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 locale = useLocaleMessages(\"DatePicker\");\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 resolvedPlaceholder = placeholder ?? locale.placeholder;\n const resolvedRangePlaceholder = rangePlaceholder ?? locale.rangePlaceholder;\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\n ? locale.placeholderWithTime\n : resolvedPlaceholder;\n const emptyPlaceholder =\n mode === \"range\" ? resolvedRangePlaceholder : 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 messages: LocaleDatePicker\n): string {\n if (mode === \"single\") {\n return singleValue ? formatIsoDate(singleValue) : messages.selectDate;\n }\n if (rangeValue.from && rangeValue.to) {\n return `${formatIsoDate(rangeValue.from)}${messages.rangeTo}${formatIsoDate(rangeValue.to)}`;\n }\n if (rangeValue.from) {\n return `${formatIsoDate(rangeValue.from)}${messages.rangeTo}…`;\n }\n return messages.selectDateRange;\n}\n\nfunction DatePickerTimePanel() {\n const { timeValue, setTimeValue } = useDatePickerContext();\n\n return <TimePickerWheels value={timeValue} onChange={setTimeValue} />;\n}\n\nfunction DatePickerPanelFooter() {\n const locale = useLocaleMessages(\"DatePicker\");\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={locale.dateTimeSwitch}\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, locale)}\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 { code } = useLocale();\n const locale = useLocaleMessages(\"DatePicker\");\n const rtl = useRtl();\n const PrevIcon = rtl ? DirectionArrowRightLight : DirectionArrowLeftLight;\n const NextIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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 /** Remount keys so prev/next icons replay exit→enter after each press. */\n const [prevNavAnimKey, setPrevNavAnimKey] = useState(0);\n const [nextNavAnimKey, setNextNavAnimKey] = useState(0);\n const [prevNavAnimating, setPrevNavAnimating] = useState(false);\n const [nextNavAnimating, setNextNavAnimating] = useState(false);\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 {locale.weekdays.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, code)}\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 ? locale.previousYear : locale.previousMonth}\n onClick={() => {\n if (!prefersReducedMotion()) {\n setPrevNavAnimKey((n) => n + 1);\n setPrevNavAnimating(true);\n }\n setViewMonth(addMonths(viewMonth, -stepMonth));\n }}\n >\n <span className=\"aviala-datepicker-calendar__nav-icon\">\n <span\n key={prevNavAnimKey}\n className=\"aviala-datepicker-calendar__nav-icon-inner\"\n data-anim={prevNavAnimating ? \"prev\" : undefined}\n onAnimationEnd={() => setPrevNavAnimating(false)}\n >\n <PrevIcon level=\"text\" biggerSize aria-hidden />\n </span>\n </span>\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 ? locale.closeMonthYear : locale.selectMonthYear}\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, code)}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"aviala-datepicker-calendar__nav aviala-focus-ring\"\n aria-label={isMonthPanel ? locale.nextYear : locale.nextMonth}\n onClick={() => {\n if (!prefersReducedMotion()) {\n setNextNavAnimKey((n) => n + 1);\n setNextNavAnimating(true);\n }\n setViewMonth(addMonths(viewMonth, stepMonth));\n }}\n >\n <span className=\"aviala-datepicker-calendar__nav-icon\">\n <span\n key={nextNavAnimKey}\n className=\"aviala-datepicker-calendar__nav-icon-inner\"\n data-anim={nextNavAnimating ? \"next\" : undefined}\n onAnimationEnd={() => setNextNavAnimating(false)}\n >\n <NextIcon level=\"text\" biggerSize aria-hidden />\n </span>\n </span>\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={locale.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\n/** @deprecated Prefer `useLocaleMessages(\"DatePicker\").weekdays`. Kept for callers. */\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 = \"zh-CN\"): 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 { useLocaleMessages } from \"../../locale\";\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 locale = useLocaleMessages(\"DatePicker\");\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={locale.selectYearMonth}\n >\n <div className=\"aviala-datepicker-month__columns\">\n <DatePickerTimeWheelColumn\n aria-label={locale.year}\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={locale.month}\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 consumeWheelSteps,\n nearestLoopIndex,\n normalizeWheelIndex,\n recenterLoopIndex,\n stepLoopRawIndex,\n stickyRoundIndex,\n WHEEL_ACCUM_IDLE_MS,\n WHEEL_LOOP_MIDDLE_SECTION,\n WHEEL_LOOP_SECTIONS,\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 = WHEEL_LOOP_SECTIONS;\nconst MIDDLE_SECTION = WHEEL_LOOP_MIDDLE_SECTION;\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 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 clipTrackRef = 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 wheelAccumIdleTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\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 readRawIndex = useCallback((container: HTMLElement, itemHeight: number) => {\n return Math.round(container.scrollTop / itemHeight);\n }, []);\n\n const syncClipTrack = useCallback(() => {\n const container = scrollRef.current;\n const track = clipTrackRef.current;\n if (!container || !track) return;\n // List items start at 0 in the track; scroll padding is on the container, so\n // the highlight band lines up when we translate by scrollTop only.\n track.style.transform = `translate3d(0, ${-container.scrollTop}px, 0)`;\n }, []);\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 if (behavior === \"auto\") {\n syncClipTrack();\n } else {\n requestAnimationFrame(syncClipTrack);\n }\n },\n [syncClipTrack]\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 currentIndex = readRawIndex(container, itemHeight);\n const currentValueIndex = loop\n ? normalizeWheelIndex(currentIndex, values.length)\n : Math.min(Math.max(currentIndex, 0), values.length - 1);\n\n if (currentValueIndex === valueIndex) {\n syncClipTrack();\n return;\n }\n\n const targetIndex = loop\n ? nearestLoopIndex(currentIndex, valueIndex, values.length, LOOP_SECTIONS)\n : valueIndex;\n scrollToIndex(targetIndex, behavior);\n },\n [loop, readRawIndex, scrollToIndex, syncClipTrack, values]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const wasProgrammatic = isProgrammaticScrollRef.current;\n isProgrammaticScrollRef.current = false;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0 || values.length === 0) {\n smoothTargetValueRef.current = null;\n return;\n }\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 ? normalizeWheelIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop\n ? recenterLoopIndex(rawIndex, values.length, MIDDLE_SECTION)\n : 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\n if (wasProgrammatic) {\n if (needsLoopRecenter) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n }\n smoothTargetValueRef.current = null;\n syncClipTrack();\n return;\n }\n\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 syncClipTrack();\n }, [loop, onChange, syncClipTrack, values]);\n\n const handleScroll = useCallback(() => {\n syncClipTrack();\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, syncClipTrack]);\n\n useLayoutEffect(() => {\n syncScrollToValue(\"auto\");\n syncClipTrack();\n const raf = requestAnimationFrame(() => {\n syncScrollToValue(\"auto\");\n syncClipTrack();\n });\n return () => cancelAnimationFrame(raf);\n }, [layoutKey, syncClipTrack, 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 // Mouse-wheel: accumulate delta into multi-item steps; finger drag still uses\n // CSS snap + sticky settle. Loop targets the nearest raw index so wraps stay short.\n useEffect(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n if (values.length === 0) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n wheelAccumIdleTimerRef.current = setTimeout(() => {\n wheelAccumRef.current = 0;\n }, WHEEL_ACCUM_IDLE_MS);\n\n const threshold = itemHeight * WHEEL_STEP_THRESHOLD_FACTOR;\n const { nextAccum, steps } = consumeWheelSteps(\n wheelAccumRef.current,\n event.deltaY,\n threshold\n );\n wheelAccumRef.current = nextAccum;\n if (steps === 0) return;\n\n const currentRaw = readRawIndex(container, itemHeight);\n let targetRaw: number;\n if (loop) {\n if (Math.floor(currentRaw / values.length) !== MIDDLE_SECTION) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop =\n recenterLoopIndex(currentRaw, values.length, MIDDLE_SECTION) * itemHeight;\n }\n targetRaw = stepLoopRawIndex(\n readRawIndex(container, itemHeight),\n steps,\n values.length,\n LOOP_SECTIONS,\n MIDDLE_SECTION\n ).rawIndex;\n } else {\n targetRaw = Math.min(Math.max(currentRaw + steps, 0), values.length - 1);\n if (targetRaw === currentRaw) return;\n }\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"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 if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n };\n }, [loop, onChange, readRawIndex, scrollToIndex, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const container = scrollRef.current;\n if (!container || values.length === 0) return;\n\n const itemHeight = readItemHeight(container);\n if (itemHeight <= 0) return;\n\n const currentRaw = readRawIndex(container, itemHeight);\n let targetRaw: number | null = null;\n let preferDelta = 0;\n\n switch (event.key) {\n case \"ArrowUp\":\n preferDelta = -1;\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, -1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.max(currentRaw - 1, 0);\n break;\n case \"ArrowDown\":\n preferDelta = 1;\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, 1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.min(currentRaw + 1, values.length - 1);\n break;\n case \"Home\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, 0, values.length, LOOP_SECTIONS, -1)\n : 0;\n break;\n case \"End\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, values.length - 1, values.length, LOOP_SECTIONS, 1)\n : values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n if (targetRaw === currentRaw && preferDelta === 0) return;\n\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"smooth\");\n if (nextValue !== selectedValueRef.current) {\n onChange(nextValue);\n }\n };\n\n const committedIndex = getValueIndex(values, value);\n const selectedOptionId = loop\n ? `${ariaLabel}-${value}-${values.length * MIDDLE_SECTION + committedIndex}`\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 isCommitted = itemValue === value;\n const optionId = loop ? `${ariaLabel}-${itemValue}-${index}` : `${ariaLabel}-${itemValue}`;\n\n return (\n <li\n key={optionId}\n id={\n loop && isCommitted && Math.floor(index / values.length) === MIDDLE_SECTION\n ? selectedOptionId\n : optionId\n }\n className=\"aviala-datepicker-time__wheel-item\"\n role=\"option\"\n aria-selected={isCommitted}\n >\n <button\n type=\"button\"\n className={cn(\n \"aviala-datepicker-time__wheel-option\",\n typographyVariants({ level: \"text\" })\n )}\n data-selected={isCommitted ? \"true\" : undefined}\n tabIndex={-1}\n onClick={() => {\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = itemValue;\n scrollToIndex(index, \"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 className=\"aviala-datepicker-time__wheel-clip\" aria-hidden>\n <div ref={clipTrackRef} className=\"aviala-datepicker-time__wheel-clip-track\">\n {repeatedValues.map((itemValue, index) => (\n <div\n key={`clip-${loop ? `${itemValue}-${index}` : itemValue}`}\n className={cn(\n \"aviala-datepicker-time__wheel-clip-item\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {formatValue(itemValue)}\n </div>\n ))}\n </div>\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 * Decoupled from stickiness so drag dwell and wheel notches can be tuned apart.\n */\nexport const WHEEL_STEP_THRESHOLD_FACTOR = 0.35;\n\n/** Clear leftover wheel delta after this idle gap (touchpad residual). */\nexport const WHEEL_ACCUM_IDLE_MS = 140;\n\n/** Default number of repeated copies for infinite loop lists. */\nexport const WHEEL_LOOP_SECTIONS = 3;\n\n/** Middle copy index for a 3-section loop buffer. */\nexport const WHEEL_LOOP_MIDDLE_SECTION = 1;\n\n/**\n * Fold a wheel delta into an accumulator and consume whole steps.\n * Reversing direction resets the accumulator so leftover opposite delta\n * cannot immediately bounce back.\n */\nexport function consumeWheelSteps(\n accum: number,\n deltaY: number,\n threshold: number\n): { nextAccum: number; steps: number } {\n if (!(threshold > 0) || !Number.isFinite(deltaY) || deltaY === 0) {\n return { nextAccum: accum, steps: 0 };\n }\n\n let nextAccum = accum;\n if (nextAccum !== 0 && Math.sign(nextAccum) !== Math.sign(deltaY)) {\n nextAccum = 0;\n }\n nextAccum += deltaY;\n\n const steps = Math.trunc(nextAccum / threshold);\n if (steps === 0) {\n return { nextAccum, steps: 0 };\n }\n\n nextAccum -= steps * threshold;\n return { nextAccum, steps };\n}\n\nexport function normalizeWheelIndex(index: number, length: number): number {\n if (length <= 0) return 0;\n return ((index % length) + length) % length;\n}\n\n/**\n * Map a raw index onto the middle loop copy while keeping the same value slot.\n */\nexport function recenterLoopIndex(\n rawIndex: number,\n length: number,\n middleSection: number = WHEEL_LOOP_MIDDLE_SECTION\n): number {\n if (length <= 0) return 0;\n return middleSection * length + normalizeWheelIndex(rawIndex, length);\n}\n\n/**\n * Pick the absolute loop copy of `valueIndex` closest to `currentRawIndex`.\n * `preferDelta` breaks ties toward the scroll direction (+1 / -1).\n */\nexport function nearestLoopIndex(\n currentRawIndex: number,\n valueIndex: number,\n length: number,\n sections: number = WHEEL_LOOP_SECTIONS,\n preferDelta: number = 0\n): number {\n if (length <= 0 || sections <= 0) return 0;\n\n const slot = normalizeWheelIndex(valueIndex, length);\n let best = slot;\n let bestScore = Number.POSITIVE_INFINITY;\n\n for (let section = 0; section < sections; section += 1) {\n const candidate = section * length + slot;\n const distance = Math.abs(candidate - currentRawIndex);\n const directionBias =\n preferDelta === 0\n ? 0\n : Math.sign(candidate - currentRawIndex) === Math.sign(preferDelta)\n ? -0.25\n : 0.25;\n const score = distance + directionBias;\n if (score < bestScore) {\n bestScore = score;\n best = candidate;\n }\n }\n\n return best;\n}\n\n/**\n * Step a raw loop index by `steps`. If already on an outer copy, recenter into\n * the middle copy first so the gesture still has buffer room. Landing on an\n * outer copy is allowed — settle handles the silent wrap.\n */\nexport function stepLoopRawIndex(\n currentRawIndex: number,\n steps: number,\n length: number,\n sections: number = WHEEL_LOOP_SECTIONS,\n middleSection: number = WHEEL_LOOP_MIDDLE_SECTION\n): { rawIndex: number; didRecenter: boolean } {\n if (length <= 0) return { rawIndex: 0, didRecenter: false };\n\n const maxIndex = sections * length - 1;\n let rawIndex = currentRawIndex;\n let didRecenter = false;\n\n const section = Math.floor(rawIndex / length);\n if (section !== middleSection) {\n rawIndex = recenterLoopIndex(rawIndex, length, middleSection);\n didRecenter = true;\n }\n\n const next = rawIndex + steps;\n if (next < 0 || next > maxIndex) {\n return {\n rawIndex: recenterLoopIndex(next, length, middleSection),\n didRecenter: true,\n };\n }\n\n return { rawIndex: next, didRecenter };\n}\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 { useLocaleMessages } from \"../../locale\";\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 const locale = useLocaleMessages(\"TimePicker\");\n\n return (\n <div\n className={cn(\"aviala-datepicker-time\", className)}\n role=\"group\"\n aria-label={locale.selectTime}\n >\n <div className=\"aviala-datepicker-time__columns\">\n <DatePickerTimeWheelColumn\n aria-label={locale.hour}\n values={TIME_PICKER_HOUR_VALUES}\n value={value.hours}\n onChange={(hours) => onChange({ ...value, hours })}\n />\n <DatePickerTimeWheelColumn\n aria-label={locale.minute}\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 { useLocaleMessages } from \"../../locale\";\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,\n error = false,\n displayValue,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"TimePicker\");\n const { open, disabled: disabledContext, size: sizeContext, value } = useTimePickerContext();\n const size = sizeProp ?? sizeContext;\n const disabled = disabledProp ?? disabledContext;\n const resolvedPlaceholder = placeholder ?? locale.placeholder;\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 : resolvedPlaceholder}\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 locale = useLocaleMessages(\"TimePicker\");\n const { value, setValue } = useTimePickerContext();\n\n return (\n <div\n className={cn(\"aviala-timepicker-panel\", className)}\n role=\"application\"\n aria-label={locale.panel}\n >\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\";\nexport type PopoverContentLevel = \"caption\" | \"text\";\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 by default, borderless, solid caret).\n * - `primary` — brand primary surface with white text, borderless, solid caret.\n */\n appearance?: PopoverAppearance;\n /**\n * Typography level for the surface copy.\n * Defaults to `caption` for `appearance=\"tooltip\"`, otherwise `text`.\n */\n level?: PopoverContentLevel;\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 level,\n ...props\n },\n ref\n ) => {\n const isDefaultAppearance = appearance === \"default\";\n const surfaceLevel =\n level ?? (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 {\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 { useLocaleMessages } from \"../locale\";\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,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Modal\");\n const resolvedCloseLabel = closeLabel ?? locale.close;\n\n return (\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={resolvedCloseLabel}\n className=\"aviala-modal__close\"\n leftIcon={<SymbolWrong aria-hidden />}\n />\n </DialogPrimitive.Close>\n ) : null}\n </div>\n </div>\n );\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, type ReactNode } 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 interface TooltipProviderProps {\n children: ReactNode;\n /**\n * Delay before the tooltip opens on hover, in ms.\n * Defaults to `TOOLTIP_DELAY_DURATION` (300). Pass `0` for instant open on hover.\n */\n delayDuration?: number;\n /**\n * When moving between tooltips, skip the open delay within this window (ms).\n */\n skipDelayDuration?: number;\n /** When true, hovering the tooltip content itself does not keep it open. */\n disableHoverableContent?: boolean;\n}\n\n/**\n * Provides shared hover-delay state for nested Tooltips.\n * Pass `delayDuration={0}` for instant open on hover.\n */\nexport function TooltipProvider({\n children,\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 {children}\n </TooltipPrimitive.Provider>\n );\n}\n\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport type TooltipContentLevel = \"caption\" | \"text\";\n\nexport type TooltipContentProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n /** Show a caret arrow pointing at the trigger (default true). */\n showArrow?: boolean;\n /**\n * Typography level for the surface copy.\n * Figma default is `caption`; pass `text` for body-sized tooltip copy.\n */\n level?: TooltipContentLevel;\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 level = \"caption\",\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\n className={cn(\n \"aviala-tooltip-content__surface\",\n typographyVariants({ level })\n )}\n >\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 {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TOOLTIP_DELAY_DURATION,\n type TooltipContentLevel,\n} from \"./tooltip\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\";\nimport { useCoarsePointer } from \"./use-coarse-pointer\";\n\n/** Default hold duration before a touch tooltip opens. */\nexport const RESPONSIVE_TOOLTIP_LONG_PRESS_MS = 500;\n\n/** Cancel the pending long-press if the pointer moves farther than this (px). */\nconst LONG_PRESS_MOVE_THRESHOLD_PX = 10;\n\nexport interface ResponsiveTooltipProps {\n /**\n * Tooltip body — the same content is shown on desktop (hover) and touch\n * (long-press).\n */\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 /** Typography level for the content surface (default `caption`). */\n level?: TooltipContentLevel;\n /**\n * Hover open delay on desktop, in ms (ignored on touch).\n * Defaults to 300 (`TOOLTIP_DELAY_DURATION`). Pass `0` for instant open on hover.\n * Requires a TooltipProvider ancestor for shared delay context.\n */\n delayDuration?: number;\n /**\n * Hold duration on touch before the tip opens, in ms.\n * Defaults to 500 (`RESPONSIVE_TOOLTIP_LONG_PRESS_MS`).\n */\n longPressMs?: 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 * **long-press** (short tap still reaches the trigger’s own `onClick`), dismisses\n * on outside tap / Escape, and keeps the tooltip visual skin (dark surface,\n * 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 level = \"caption\",\n delayDuration = TOOLTIP_DELAY_DURATION,\n longPressMs = RESPONSIVE_TOOLTIP_LONG_PRESS_MS,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n contentClassName,\n}: ResponsiveTooltipProps) {\n const coarse = useCoarsePointer();\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? openProp! : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pressOriginRef = useRef<{ x: number; y: number } | null>(null);\n const suppressClickRef = useRef(false);\n\n const clearLongPressTimer = useCallback(() => {\n if (longPressTimerRef.current != null) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n }, []);\n\n useEffect(() => () => clearLongPressTimer(), [clearLongPressTimer]);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent) => {\n if (event.pointerType === \"mouse\") return;\n clearLongPressTimer();\n suppressClickRef.current = false;\n pressOriginRef.current = { x: event.clientX, y: event.clientY };\n longPressTimerRef.current = setTimeout(() => {\n longPressTimerRef.current = null;\n suppressClickRef.current = true;\n setOpen(true);\n }, longPressMs);\n },\n [clearLongPressTimer, longPressMs, setOpen]\n );\n\n const handlePointerMove = useCallback(\n (event: ReactPointerEvent) => {\n const origin = pressOriginRef.current;\n if (!origin || longPressTimerRef.current == null) return;\n const dx = event.clientX - origin.x;\n const dy = event.clientY - origin.y;\n if (dx * dx + dy * dy > LONG_PRESS_MOVE_THRESHOLD_PX ** 2) {\n clearLongPressTimer();\n pressOriginRef.current = null;\n }\n },\n [clearLongPressTimer]\n );\n\n const handlePointerEnd = useCallback(() => {\n clearLongPressTimer();\n pressOriginRef.current = null;\n }, [clearLongPressTimer]);\n\n if (coarse) {\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n asChild\n // Capture: swallow the synthetic click after a successful long-press\n // so the trigger’s action (e.g. navigate / copy) does not also fire.\n onClickCapture={(event) => {\n if (!suppressClickRef.current) return;\n suppressClickRef.current = false;\n event.preventDefault();\n event.stopPropagation();\n }}\n // Bubble: always block Radix’s click-to-toggle — open is long-press only.\n onClick={(event) => {\n event.preventDefault();\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerEnd}\n onPointerCancel={handlePointerEnd}\n onContextMenu={(event) => {\n // Avoid the OS callout competing with the long-press tip.\n event.preventDefault();\n }}\n >\n {children as ReactElement}\n </PopoverTrigger>\n <PopoverContent\n appearance=\"tooltip\"\n level={level}\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={openProp}\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 level={level}\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 { useLocaleMessages } from \"../locale\";\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\" : \"default\";\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,\n action,\n onAction,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Feedback\");\n const resolvedCloseLabel = closeLabel ?? locale.close;\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={resolvedCloseLabel}\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 { useLocaleMessages } from \"../locale\";\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,\n quickAction,\n onQuickAction,\n action,\n onAction,\n secondaryAction,\n onSecondaryAction,\n showActions = false,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Alert\");\n const resolvedCloseLabel = closeLabel ?? locale.close;\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={resolvedCloseLabel}\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 DirectionArrowLeftLight,\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 type Ref,\n} from \"react\";\nimport { useRtl } from \"../config\";\nimport { Button } from \"./button\";\nimport { Switch, type SwitchProps } from \"./switch\";\nimport { Typeface } from \"./typeface\";\nimport { typographyVariants } from \"./typography\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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\ntype ListItemSharedProps = {\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 /**\n * Fully custom trailing region — overrides type presets.\n * Pass `null` to hide trailing actions + divider (same as `showTrailing={false}`).\n * For `action` type, the chevron is still shown unless `showChevron={false}`.\n */\n trailing?: ReactNode;\n /**\n * When false, hide trailing actions and the vertical divider.\n * `action` type still shows the chevron unless `showChevron={false}`.\n * Default true.\n */\n showTrailing?: boolean;\n /**\n * Show the trailing chevron for `action` type. Default true when `itemType=\"action\"`.\n */\n showChevron?: boolean;\n /**\n * Show the top hairline on the content row (between items).\n * Default: auto — hidden for the first child in a `ListGroup`, shown otherwise.\n * Set explicitly to force show/hide.\n */\n showTopDivider?: boolean;\n selected?: boolean;\n disabled?: boolean;\n /** Enables hover highlight (auto when `onClick` / `href` is set) */\n interactive?: boolean;\n /** Render as a link — navigates when the row is activated */\n href?: string;\n target?: ComponentPropsWithoutRef<\"a\">[\"target\"];\n rel?: string;\n};\n\nexport type ListItemProps = Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> &\n ListItemSharedProps;\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 showTrailing = true,\n showChevron,\n showTopDivider,\n selected = false,\n disabled = false,\n interactive,\n href,\n target,\n rel,\n onClick,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"List\");\n const rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\n const isInteractive = interactive ?? (onClick != null || href != null);\n const chevronVisible = showChevron ?? itemType === \"action\";\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 chevron = chevronVisible ? (\n <span className=\"aviala-list-item__chevron\" aria-hidden>\n <ChevronIcon width={18} height={18} />\n </span>\n ) : null;\n\n const renderTrailing = () => {\n const hideActions = !showTrailing || trailing === null;\n\n if (hideActions) {\n // Keep action-type chevron when trailing actions / divider are hidden.\n return chevron && itemType === \"action\" ? (\n <div className=\"aviala-list-item__more\">{chevron}</div>\n ) : null;\n }\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={locale.more}\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n </div>\n <ListDivider />\n {chevron}\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 const sharedClassName = cn(\"aviala-list-item\", className);\n const sharedData = {\n \"data-leading\": leading,\n \"data-type\": itemType,\n \"data-selected\": selected ? (\"true\" as const) : undefined,\n \"data-disabled\": disabled ? (\"true\" as const) : undefined,\n \"data-interactive\": isInteractive ? (\"true\" as const) : undefined,\n \"data-top-divider\":\n showTopDivider === undefined\n ? undefined\n : showTopDivider\n ? (\"true\" as const)\n : (\"false\" as const),\n };\n const trailingNode = renderTrailing();\n const body = (\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 {trailingNode}\n </div>\n </div>\n </>\n );\n\n if (href && !disabled) {\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n role=\"listitem\"\n className={sharedClassName}\n href={href}\n target={target}\n rel={rel}\n onClick={onClick as ComponentPropsWithoutRef<\"a\">[\"onClick\"]}\n {...sharedData}\n {...(props as ComponentPropsWithoutRef<\"a\">)}\n >\n {body}\n </a>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n className={sharedClassName}\n onClick={disabled ? undefined : onClick}\n {...sharedData}\n {...props}\n >\n {body}\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 { forwardChevronSide, useDirection } from \"../config\";\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.16, 1, 0.3, 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 railInlineStart = readIndicatorToken(group, \"--navigation-rail-inline-start\", 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 const isRtl = getComputedStyle(group).direction === \"rtl\";\n const x = isRtl\n ? groupRect.width - railWidth - railInlineStart\n : railInlineStart;\n\n return {\n x,\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.16, 1, 0.3, 1). */\nfunction easeOutQuint(t: number) {\n return 1 - Math.pow(1 - t, 5);\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 = easeOutQuint(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 — forward of the item in vertical (LTR right / RTL left), 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 const writingDirection = useDirection();\n const menu = useNavigationItemMenuContext(\"NavigationItemMenuContent\");\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n side={\n side ??\n (direction === \"vertical\"\n ? forwardChevronSide(writingDirection)\n : \"bottom\")\n }\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 {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { cloneAvialaIconElement } from \"../lib/clone-aviala-icon\";\nimport { cn } from \"../lib/utils\";\nimport { spiralDebugId } from \"../lib/spiral-debug\";\nimport { useDirection } from \"../config/use-direction\";\nimport { useThemeLayoutKey } from \"../theme/theme-provider\";\nimport { buttonVariants, type ButtonMode } from \"./button\";\nimport { Typography } from \"./typography\";\n\n/** Figma Components → Structure Navigation → Tab `Style` */\nexport type TabStyle = \"default\" | \"card\" | \"tiled\";\n\n/** Figma Components → Structure Navigation → Tab `Background` */\nexport type TabBackground = \"none\" | \"default\";\n\ntype TabContextValue = {\n value: string;\n onValueChange: (value: string) => void;\n style: TabStyle;\n disabled?: boolean;\n registerItem: (value: string, el: HTMLButtonElement | null) => void;\n};\n\nconst TabContext = createContext<TabContextValue | null>(null);\n\nfunction useTabContext() {\n const ctx = useContext(TabContext);\n if (!ctx) {\n throw new Error(\"TabItem must be used within Tab\");\n }\n return ctx;\n}\n\n/** Map TabItem Style + active → nested Button mode (Figma TabItem uses Button). */\nfunction tabItemButtonMode(style: TabStyle, active: boolean): ButtonMode {\n if (style === \"tiled\") return active ? \"second\" : \"noBackgroundCustom\";\n // Card active: theme text via noBackground; white top-radius fill + ears via CSS.\n if (style === \"card\") return active ? \"noBackground\" : \"noBackgroundCustom\";\n return active ? \"noBackground\" : \"noBackgroundCustom\";\n}\n\nfunction useTabState(\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 IndicatorMetrics = {\n x: number;\n y: number;\n width: number;\n height: number;\n visible: boolean;\n};\n\nfunction applyTabIndicatorMetrics(\n el: HTMLSpanElement,\n metrics: IndicatorMetrics,\n instant = false\n) {\n if (instant) el.setAttribute(\"data-instant\", \"true\");\n el.style.width = `${metrics.width}px`;\n el.style.height = `${metrics.height}px`;\n el.style.transform = `translate(${metrics.x}px, ${metrics.y}px)`;\n el.dataset.visible = metrics.visible ? \"true\" : \"false\";\n if (instant) {\n void el.offsetWidth;\n el.removeAttribute(\"data-instant\");\n }\n}\n\nfunction measureTabIndicator(list: HTMLElement): IndicatorMetrics | null {\n const active = list.querySelector<HTMLElement>(\n '.aviala-tab-item[data-active=\"true\"]:not([data-disabled=\"true\"])'\n );\n if (!active) {\n return { x: 0, y: 0, width: 0, height: 0, visible: false };\n }\n\n const control =\n active.querySelector<HTMLElement>(\".aviala-tab-item__control\") ?? active;\n const listRect = list.getBoundingClientRect();\n const controlRect = control.getBoundingClientRect();\n const itemRect = active.getBoundingClientRect();\n const styles = getComputedStyle(list);\n const height =\n Number.parseFloat(styles.getPropertyValue(\"--tab-indicator-height\")) || 4;\n // Figma active Default: indicator x=12, width = itemWidth - 24 (66 → 42)\n const inset =\n Number.parseFloat(styles.getPropertyValue(\"--tab-indicator-inset-inline\")) ||\n 12;\n\n return {\n x: controlRect.left - listRect.left + list.scrollLeft + inset,\n y: itemRect.bottom - listRect.top + list.scrollTop - height,\n width: Math.max(0, controlRect.width - inset * 2),\n height,\n visible: true,\n };\n}\n\nfunction useTabIndicator(\n listRef: RefObject<HTMLDivElement | null>,\n enabled: boolean,\n layoutKey: string | null,\n value: string\n) {\n const indicatorRef = useRef<HTMLSpanElement | null>(null);\n const isInitial = useRef(true);\n\n const sync = useCallback(\n (instant: boolean) => {\n const list = listRef.current;\n const el = indicatorRef.current;\n if (!list || !el || !enabled) {\n if (el) el.dataset.visible = \"false\";\n return;\n }\n const metrics = measureTabIndicator(list);\n if (metrics) applyTabIndicatorMetrics(el, metrics, instant);\n },\n [enabled, listRef]\n );\n\n useLayoutEffect(() => {\n if (!enabled) {\n if (indicatorRef.current) indicatorRef.current.dataset.visible = \"false\";\n return;\n }\n sync(isInitial.current);\n isInitial.current = false;\n }, [enabled, layoutKey, sync, value]);\n\n useEffect(() => {\n if (!enabled) return;\n const list = listRef.current;\n if (!list) return;\n\n const onResize = () => sync(true);\n const ro = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(onResize) : null;\n ro?.observe(list);\n list.addEventListener(\"scroll\", onResize, { passive: true });\n window.addEventListener(\"resize\", onResize);\n\n return () => {\n ro?.disconnect();\n list.removeEventListener(\"scroll\", onResize);\n window.removeEventListener(\"resize\", onResize);\n };\n }, [enabled, listRef, sync]);\n\n return indicatorRef;\n}\n\nfunction renderTabIcon(node: ReactNode): ReactNode {\n if (!node) return null;\n const content = cloneAvialaIconElement(node, {\n level: \"text\",\n biggerSize: true,\n });\n return <span className=\"aviala-tab-item__icon\">{content}</span>;\n}\n\n/** Figma Card TabItem ear vectors (1866:38024 / 1866:38019) — 8×8 in a 2×8 frame. */\nfunction TabCardEar({ side }: { side: \"start\" | \"end\" }) {\n const d =\n side === \"start\"\n ? \"M8 8L0 8C4 8 8 5.5 8 0L8 8Z\"\n : \"M0 8L8 8C4 8 0 5.5 0 0L0 8Z\";\n return (\n <span className=\"aviala-tab-item__ear\" data-side={side} aria-hidden>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 8 8\"\n fill=\"none\"\n >\n <path d={d} fill=\"currentColor\" />\n </svg>\n </span>\n );\n}\n\nexport type TabProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"style\"> & {\n /** Figma `Style` */\n style?: TabStyle;\n /** Figma `Background` */\n background?: TabBackground;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n /** Leading accessory (Figma SoltRight — visual start). */\n startSlot?: ReactNode;\n /** Trailing accessory (Figma SoltLeft / SoltLeft2 — visual end). */\n endSlot?: ReactNode;\n};\n\n/** Figma Components → Structure Navigation → Tab */\nexport const Tab = forwardRef<HTMLDivElement, TabProps>(\n (\n {\n className,\n style: tabStyle = \"default\",\n background = \"none\",\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled,\n startSlot,\n endSlot,\n children,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useTabState(valueProp, defaultValue, onValueChange);\n const layoutKey = useThemeLayoutKey();\n const direction = useDirection();\n const listRef = useRef<HTMLDivElement | null>(null);\n const itemsRef = useRef(new Map<string, HTMLButtonElement>());\n const showIndicator = tabStyle === \"default\";\n const indicatorRef = useTabIndicator(listRef, showIndicator, layoutKey, value);\n\n const registerItem = useCallback(\n (itemValue: string, el: HTMLButtonElement | null) => {\n if (el) itemsRef.current.set(itemValue, el);\n else itemsRef.current.delete(itemValue);\n },\n []\n );\n\n const ctx = useMemo<TabContextValue>(\n () => ({\n value,\n onValueChange: setValue,\n style: tabStyle,\n disabled,\n registerItem,\n }),\n [value, setValue, tabStyle, disabled, registerItem]\n );\n\n const focusAdjacent = useCallback(\n (current: string, delta: number) => {\n const entries = Array.from(itemsRef.current.entries()).filter(\n ([, el]) => !el.disabled\n );\n if (!entries.length) return;\n const idx = entries.findIndex(([v]) => v === current);\n const nextIdx =\n idx < 0\n ? 0\n : (idx + delta + entries.length) % entries.length;\n const [nextValue, el] = entries[nextIdx]!;\n setValue(nextValue);\n el.focus();\n },\n [setValue]\n );\n\n const handleListKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) return;\n\n const rtl = direction === \"rtl\";\n const prevKey = rtl ? \"ArrowRight\" : \"ArrowLeft\";\n const nextKey = rtl ? \"ArrowLeft\" : \"ArrowRight\";\n\n if (event.key === prevKey) {\n event.preventDefault();\n focusAdjacent(value, -1);\n } else if (event.key === nextKey) {\n event.preventDefault();\n focusAdjacent(value, 1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n const first = Array.from(itemsRef.current.entries()).find(\n ([, el]) => !el.disabled\n );\n if (first) {\n setValue(first[0]);\n first[1].focus();\n }\n } else if (event.key === \"End\") {\n event.preventDefault();\n const enabled = Array.from(itemsRef.current.entries()).filter(\n ([, el]) => !el.disabled\n );\n const last = enabled[enabled.length - 1];\n if (last) {\n setValue(last[0]);\n last[1].focus();\n }\n }\n };\n\n return (\n <TabContext.Provider value={ctx}>\n <div\n ref={ref}\n className={cn(\"aviala-tab\", className)}\n data-style={tabStyle}\n data-background={background}\n {...spiralDebugId(\"tab\")}\n {...props}\n >\n {startSlot != null && startSlot !== false ? (\n <div className=\"aviala-tab__slot\" data-slot=\"start\">\n {startSlot}\n </div>\n ) : null}\n <div\n ref={listRef}\n className=\"aviala-tab__list\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n onKeyDown={handleListKeyDown}\n {...spiralDebugId(\"tab.list\")}\n >\n {showIndicator ? (\n <span\n ref={indicatorRef}\n className=\"aviala-tab-indicator\"\n aria-hidden\n data-visible=\"false\"\n />\n ) : null}\n {children}\n </div>\n {endSlot != null && endSlot !== false ? (\n <div className=\"aviala-tab__slot\" data-slot=\"end\">\n {endSlot}\n </div>\n ) : null}\n </div>\n </TabContext.Provider>\n );\n }\n);\nTab.displayName = \"Tab\";\n\nexport type TabItemProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"value\" | \"children\"\n> & {\n value: string;\n leftIcon?: ReactNode;\n children?: ReactNode;\n};\n\n/** Figma Components → Structure Navigation → TabItem (nested Button). */\nexport const TabItem = forwardRef<HTMLButtonElement, TabItemProps>(\n (\n {\n className,\n value,\n leftIcon,\n disabled: disabledProp,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const ctx = useTabContext();\n const active = ctx.value === value;\n const disabled = Boolean(ctx.disabled || disabledProp);\n const mode = tabItemButtonMode(ctx.style, active);\n\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n ctx.registerItem(value, node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ctx, ref, value]\n );\n\n const showCardEars = ctx.style === \"card\" && active;\n\n return (\n <span\n className={cn(\"aviala-tab-item\", className)}\n data-active={active ? \"true\" : \"false\"}\n data-style={ctx.style}\n data-disabled={disabled ? \"true\" : undefined}\n {...spiralDebugId(\"tab.item\")}\n >\n {showCardEars ? <TabCardEar side=\"start\" /> : null}\n <button\n ref={setRefs}\n type=\"button\"\n role=\"tab\"\n data-size=\"regular\"\n className={cn(\n buttonVariants({ mode }),\n \"aviala-tab-item__control\"\n )}\n aria-selected={active}\n tabIndex={active ? 0 : -1}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) return;\n ctx.onValueChange(value);\n }}\n {...spiralDebugId(\"tab.item.control\")}\n {...props}\n >\n {renderTabIcon(leftIcon)}\n {children != null && children !== false ? (\n <Typography\n level=\"text\"\n as=\"span\"\n className=\"aviala-tab-item__label\"\n >\n {children}\n </Typography>\n ) : null}\n </button>\n {showCardEars ? <TabCardEar side=\"end\" /> : null}\n </span>\n );\n }\n);\nTabItem.displayName = \"TabItem\";\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 { useLocaleMessages } from \"../locale\";\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,\n description,\n label,\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 locale = useLocaleMessages(\"Upload\");\n const resolvedTitle = title ?? locale.title;\n const resolvedDescription = description ?? locale.description;\n const resolvedLabel = label ?? locale.label;\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={resolvedTitle}\n secondary={resolvedDescription}\n />\n ) : (\n <Typography level=\"text\" as=\"span\" className=\"aviala-upload__label\">\n {resolvedLabel}\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 consumeWheelSteps,\n nearestLoopIndex,\n normalizeWheelIndex,\n recenterLoopIndex,\n stepLoopRawIndex,\n stickyRoundIndex,\n WHEEL_ACCUM_IDLE_MS,\n WHEEL_LOOP_MIDDLE_SECTION,\n WHEEL_LOOP_SECTIONS,\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 = WHEEL_LOOP_SECTIONS;\nconst MIDDLE_SECTION = WHEEL_LOOP_MIDDLE_SECTION;\n\n/** Figma Components → Information Collect → ScrollPicker (579:88681) */\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\nfunction readRawIndex(container: HTMLElement, metrics: ColumnMetrics): number {\n return Math.round(fractionalIndexAtScrollTop(metrics, container.scrollTop));\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 clipTrackRef = 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 wheelAccumIdleTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\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 syncClipTrack = useCallback(() => {\n const container = scrollRef.current;\n const track = clipTrackRef.current;\n if (!container || !track) return;\n // Clip track mirrors the list including spacer pseudo-elements; align the\n // highlight band to the same content Y as the main scroller's center strip.\n const band = container.parentElement?.querySelector<HTMLElement>(\n \".aviala-scroll-picker-column__highlight\"\n );\n const bandHeight = band?.offsetHeight || 26;\n const offset = container.scrollTop + (container.clientHeight - bandHeight) / 2;\n track.style.transform = `translate3d(0, ${-offset}px, 0)`;\n }, []);\n\n const scrollToIndex = useCallback(\n (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 if (behavior === \"auto\") {\n syncClipTrack();\n } else {\n requestAnimationFrame(syncClipTrack);\n }\n },\n [syncClipTrack]\n );\n\n const settleScroll = useCallback(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const wasProgrammatic = isProgrammaticScrollRef.current;\n isProgrammaticScrollRef.current = false;\n\n const metrics = readMetrics(container);\n if (!metrics || values.length === 0) {\n smoothTargetValueRef.current = null;\n return;\n }\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 ? normalizeWheelIndex(rawIndex, values.length)\n : Math.min(Math.max(rawIndex, 0), lastIndex);\n const nextValue = values[valueIndex];\n\n const targetIndex = loop\n ? recenterLoopIndex(rawIndex, values.length, MIDDLE_SECTION)\n : 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\n if (wasProgrammatic) {\n if (needsLoopRecenter) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = targetTop;\n }\n smoothTargetValueRef.current = null;\n syncClipTrack();\n return;\n }\n\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 syncClipTrack();\n }, [loop, onChange, syncClipTrack, values]);\n\n const handleScroll = useCallback(() => {\n syncClipTrack();\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, syncClipTrack]);\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 currentRaw = readRawIndex(container, metrics);\n const currentValueIndex = loop\n ? normalizeWheelIndex(currentRaw, values.length)\n : Math.min(Math.max(currentRaw, 0), values.length - 1);\n\n if (currentValueIndex === valueIndex) {\n syncClipTrack();\n return;\n }\n\n const targetIndex = loop\n ? nearestLoopIndex(currentRaw, valueIndex, values.length, LOOP_SECTIONS)\n : valueIndex;\n const targetTop = scrollTopForIndex(container, metrics, targetIndex);\n\n if (Math.abs(container.scrollTop - targetTop) <= 1) {\n syncClipTrack();\n return;\n }\n\n scrollToIndex(targetIndex, \"auto\");\n }, [getIndex, loop, scrollToIndex, syncClipTrack, 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 (values.length === 0) return;\n\n const metrics = readMetrics(container);\n if (!metrics) return;\n\n if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n wheelAccumIdleTimerRef.current = setTimeout(() => {\n wheelAccumRef.current = 0;\n }, WHEEL_ACCUM_IDLE_MS);\n\n const threshold = metrics.pitch * WHEEL_STEP_THRESHOLD_FACTOR;\n const { nextAccum, steps } = consumeWheelSteps(\n wheelAccumRef.current,\n event.deltaY,\n threshold\n );\n wheelAccumRef.current = nextAccum;\n if (steps === 0) return;\n\n const currentRaw = readRawIndex(container, metrics);\n let targetRaw: number;\n if (loop) {\n if (Math.floor(currentRaw / values.length) !== MIDDLE_SECTION) {\n isProgrammaticScrollRef.current = true;\n container.scrollTop = scrollTopForIndex(\n container,\n metrics,\n recenterLoopIndex(currentRaw, values.length, MIDDLE_SECTION)\n );\n }\n targetRaw = stepLoopRawIndex(\n readRawIndex(container, metrics),\n steps,\n values.length,\n LOOP_SECTIONS,\n MIDDLE_SECTION\n ).rawIndex;\n } else {\n targetRaw = Math.min(Math.max(currentRaw + steps, 0), values.length - 1);\n if (targetRaw === currentRaw) return;\n }\n\n if (scrollEndTimerRef.current) {\n clearTimeout(scrollEndTimerRef.current);\n }\n\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"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 if (wheelAccumIdleTimerRef.current) {\n clearTimeout(wheelAccumIdleTimerRef.current);\n }\n };\n }, [loop, onChange, scrollToIndex, values]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\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 currentRaw = readRawIndex(container, metrics);\n let targetRaw: number | null = null;\n\n switch (event.key) {\n case \"ArrowUp\":\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, -1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.max(currentRaw - 1, 0);\n break;\n case \"ArrowDown\":\n targetRaw = loop\n ? stepLoopRawIndex(currentRaw, 1, values.length, LOOP_SECTIONS, MIDDLE_SECTION).rawIndex\n : Math.min(currentRaw + 1, values.length - 1);\n break;\n case \"Home\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, 0, values.length, LOOP_SECTIONS, -1)\n : 0;\n break;\n case \"End\":\n targetRaw = loop\n ? nearestLoopIndex(currentRaw, values.length - 1, values.length, LOOP_SECTIONS, 1)\n : values.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const nextValue = values[normalizeWheelIndex(targetRaw, values.length)];\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = nextValue;\n scrollToIndex(targetRaw, \"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 isCommitted = Object.is(itemValue, value);\n const valueIndex = loop ? normalizeWheelIndex(index, values.length) : index;\n const optionId = `${reactId}-${loop ? index : valueIndex}`;\n const key =\n getValueKey?.(itemValue, index) ??\n `${String(itemValue)}-${index}`;\n const useSelectedId =\n isCommitted && (!loop || Math.floor(index / values.length) === MIDDLE_SECTION);\n\n return (\n <li key={key} className=\"contents\">\n <ScrollPickerItem\n id={useSelectedId ? selectedOptionId : optionId}\n selected={isCommitted}\n onSelect={() => {\n isUserScrollingRef.current = false;\n smoothTargetValueRef.current = itemValue;\n scrollToIndex(index, \"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 className=\"aviala-scroll-picker-column__clip\" aria-hidden>\n <div ref={clipTrackRef} className=\"aviala-scroll-picker-column__clip-track\">\n <div className=\"aviala-scroll-picker-column__list\">\n {repeatedValues.map((itemValue, index) => {\n const key =\n getValueKey?.(itemValue, index) ??\n `clip-${String(itemValue)}-${index}`;\n return (\n <div\n key={key}\n className={cn(\n \"aviala-scroll-picker-column__clip-item\",\n typographyVariants({ level: \"text\" })\n )}\n >\n {formatValue ? formatValue(itemValue) : String(itemValue)}\n </div>\n );\n })}\n </div>\n </div>\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 {\n DirectionArrowLeftLight,\n DirectionArrowRightLight,\n SymbolMore,\n} 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 { useRtl } from \"../config\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"Breadcrumb\");\n const resolvedSize = size ?? \"default\";\n return (\n <BreadcrumbSizeContext.Provider value={resolvedSize}>\n <nav\n ref={ref}\n aria-label={props[\"aria-label\"] ?? locale.label}\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 rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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 <ChevronIcon 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 locale = useLocaleMessages(\"Breadcrumb\");\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 ?? locale.showMore}\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 { useRtl } from \"../config\";\nimport { cn } from \"../lib/utils\";\nimport { interpolate, useLocaleMessages } from \"../locale\";\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,\n ...props\n },\n ref\n ) => {\n const locale = useLocaleMessages(\"Pagination\");\n const rtl = useRtl();\n const PrevIcon = rtl ? DirectionArrowRightLight : DirectionArrowLeftLight;\n const NextIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\n const resolvedJumpLabel = jumpLabel ?? locale.jumpTo;\n const resolvedSizeLabel = sizeLabel ?? locale.pageSize;\n const resolvedSizeOptionLabel =\n sizeOptionLabel ?? ((size: number) => interpolate(locale.items, { size }));\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\"] ?? locale.pagination}\n {...props}\n >\n <div className=\"aviala-pagination__controls\">\n <Button\n mode=\"noBackgroundCustom\"\n size=\"regular\"\n iconOnly\n aria-label={locale.previous}\n disabled={currentPage <= 1}\n leftIcon={<PrevIcon 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={locale.morePages}\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={locale.next}\n disabled={currentPage >= safePageCount}\n leftIcon={<NextIcon 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 {resolvedJumpLabel}\n </Typography>\n <Input\n className=\"aviala-pagination__jump-input\"\n size=\"regular\"\n fullWidth={false}\n value={jumpValue}\n placeholder={locale.pagePlaceholder}\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 {resolvedSizeLabel}\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={locale.pageSizeAria}\n />\n <SelectContent>\n <SelectItemGroup>\n {pageSizeOptions.map((option) => (\n <SelectItem\n key={option}\n value={String(option)}\n itemFunction=\"checkbox\"\n >\n {resolvedSizeOptionLabel(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 DirectionArrowLeftLight,\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 { useRtl } from \"../config\";\nimport { cn } from \"../lib/utils\";\nimport { useLocaleMessages } from \"../locale\";\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 locale = useLocaleMessages(\"Card\");\n const rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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={locale.more}\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <ChevronIcon 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 locale = useLocaleMessages(\"Card\");\n const rtl = useRtl();\n const ChevronIcon = rtl ? DirectionArrowLeftLight : DirectionArrowRightLight;\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={locale.more}\n leftIcon={<GeneralSetting aria-hidden />}\n />\n )}\n <span className=\"aviala-card__divider\" aria-hidden />\n <ChevronIcon 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 (953:75844 / 1457:1475) */\nexport type TableCellContent =\n | \"text\"\n | \"icon+text\"\n | \"icon-place+text\"\n | \"people\"\n | \"badge\"\n | \"switch\"\n | \"action\"\n | \"checkbox\";\n\nexport type TableProps = HTMLAttributes<HTMLDivElement> & {\n /** Freeze header row while the table body scrolls */\n stickyHeader?: boolean;\n};\n\nexport const Table = forwardRef<HTMLDivElement, TableProps>(\n ({ className, stickyHeader = false, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"table\"\n className={cn(\"aviala-table\", className)}\n data-sticky-header={stickyHeader ? \"true\" : undefined}\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\nfunction renderCellIcon(node: ReactNode, sized = true): ReactNode {\n if (!node) return null;\n const content =\n sized && 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\nfunction renderTextBlock(text: ReactNode, caption?: ReactNode) {\n return (\n <span className=\"aviala-table-cell__text\">\n <Typography level=\"text\" as=\"span\">\n {text}\n </Typography>\n {caption != null && caption !== false ? (\n <Typography level=\"caption\" as=\"span\" className=\"aviala-table-cell__caption\">\n {caption}\n </Typography>\n ) : null}\n </span>\n );\n}\n\nfunction renderActions(actions: ReactNode) {\n if (actions == null) return null;\n return <div className=\"aviala-table-cell__actions\">{actions}</div>;\n}\n\nfunction renderCellBody(main: ReactNode, actions?: ReactNode) {\n return (\n <span className=\"aviala-table-cell__body\">\n <span className=\"aviala-table-cell__main\">{main}</span>\n {renderActions(actions)}\n </span>\n );\n}\n\nexport type TableHeadProps = ComponentPropsWithoutRef<\"div\"> & {\n content?: Extract<TableCellContent, \"text\" | \"checkbox\">;\n /** Header trailing button area (Figma Table Head Default) */\n actions?: ReactNode;\n /** Select-all / indeterminate / unchecked via Checkbox props */\n checkboxProps?: ComponentPropsWithoutRef<typeof Checkbox>;\n};\n\nexport const TableHead = forwardRef<HTMLDivElement, TableHeadProps>(\n (\n { className, content = \"text\", actions, checkboxProps, children, ...props },\n ref\n ) => {\n const renderBody = () => {\n if (content === \"checkbox\") {\n return children ?? <Checkbox {...checkboxProps} />;\n }\n\n if (children != null) {\n return (\n <>\n <span className=\"aviala-table-cell__main\">\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Typography level=\"text\" as=\"span\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </span>\n {renderActions(actions)}\n </>\n );\n }\n\n return null;\n };\n\n return (\n <div\n ref={ref}\n role=\"columnheader\"\n className={cn(\"aviala-table-head\", className)}\n data-content={content}\n {...props}\n >\n {renderBody()}\n </div>\n );\n }\n);\nTableHead.displayName = \"TableHead\";\n\nexport type TableCellProps = ComponentPropsWithoutRef<\"div\"> & {\n content?: TableCellContent;\n icon?: ReactNode;\n /** Shaped icon place (Figma `icon place+text`) */\n iconPlace?: ReactNode;\n text?: ReactNode;\n /** Secondary caption under primary text (Figma Typeface pair) */\n caption?: ReactNode;\n people?: ReactNode;\n badge?: ReactNode;\n badgeLabel?: ReactNode;\n switchProps?: SwitchProps;\n /** Trailing button area — supported on text / icon / people / badge / action */\n actions?: ReactNode;\n /** Optional leading grabber control */\n grabber?: ReactNode;\n checkboxProps?: ComponentPropsWithoutRef<typeof Checkbox>;\n};\n\nexport const TableCell = forwardRef<HTMLDivElement, TableCellProps>(\n (\n {\n className,\n content = \"text\",\n icon,\n iconPlace,\n text,\n caption,\n people,\n badge,\n badgeLabel,\n switchProps,\n actions,\n grabber,\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 \"switch\":\n return <Switch {...switchProps} />;\n case \"action\":\n return renderActions(actions);\n case \"icon+text\":\n return (\n <>\n {grabber}\n {renderCellBody(\n <>\n {renderCellIcon(icon)}\n {renderTextBlock(text, caption)}\n </>,\n actions\n )}\n </>\n );\n case \"icon-place+text\":\n return (\n <>\n {grabber}\n {renderCellBody(\n <>\n <span className=\"aviala-table-cell__icon-place\">\n {iconPlace ?? renderCellIcon(icon, false) ?? (\n <Avatar content=\"text\" level=\"text\" lineHeightFix={false}>\n A\n </Avatar>\n )}\n </span>\n {renderTextBlock(text, caption)}\n </>,\n actions\n )}\n </>\n );\n case \"people\":\n return (\n <>\n {grabber}\n {renderCellBody(\n <>\n {people ?? (\n <Avatar content=\"text\" level=\"text\" lineHeightFix={false}>\n A\n </Avatar>\n )}\n {renderTextBlock(text, caption)}\n </>,\n actions\n )}\n </>\n );\n case \"badge\":\n return (\n <>\n {grabber}\n {renderCellBody(\n badge ?? (\n <Badge style=\"theme\" level=\"caption\">\n {badgeLabel ?? \"Text\"}\n </Badge>\n ),\n actions\n )}\n </>\n );\n case \"text\":\n default:\n return (\n <>\n {grabber}\n {renderCellBody(renderTextBlock(text, caption), actions)}\n </>\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_react","import_react","import_react","import_jsx_runtime","import_react","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","Icon","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_react","import_react","import_jsx_runtime","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","center","rawOffset","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_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","PopoverPrimitive","import_icons","import_react","import_jsx_runtime","renderItemIcon","renderBadgeSlot","Icon","renderFunctionSlot","renderItemIcon","renderBadgeSlot","renderFunctionSlot","getOptionsAtPath","PopoverPrimitive","import_icons","import_react","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","readRawIndex","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_react","import_react","import_jsx_runtime","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","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_react","import_jsx_runtime","el","import_icons","import_class_variance_authority","import_react","import_jsx_runtime","import_react","import_jsx_runtime","LOOP_SECTIONS","MIDDLE_SECTION","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"]}