@cytario/design 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +60 -6
- package/dist/index.js +268 -29
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/components/_shared/styles.ts","../src/components/Icon/Icon.tsx","../src/components/Spinner/Spinner.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Table/Table.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Toast/Toast.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Switch/Switch.tsx","../src/components/Radio/Radio.tsx","../src/components/Label/Label.tsx","../src/components/Field/Field.tsx","../src/components/Fieldset/Fieldset.tsx","../src/components/InputGroup/InputGroup.tsx","../src/components/InputAddon/InputAddon.tsx","../src/components/Heading/Heading.tsx","../src/components/Link/Link.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/ButtonLink/ButtonLink.tsx","../src/components/ToggleButton/ToggleButton.tsx","../src/components/Menu/Menu.tsx","../src/components/Popover/Popover.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tree/Tree.tsx","../src/tokens/tokens.ts"],"sourcesContent":["\"use client\";\n\n// React Aria re-exports for consumer integration\nexport { RouterProvider } from \"react-aria-components\";\nexport type { RouterConfig, Key } from \"react-aria-components\";\n\n// Components\nexport { Button } from \"./components/Button\";\nexport type { ButtonProps, ButtonVariant, ButtonSize } from \"./components/Button\";\n\nexport { Spinner } from \"./components/Spinner\";\nexport type { SpinnerProps } from \"./components/Spinner\";\n\nexport { Icon } from \"./components/Icon\";\nexport type { IconProps } from \"./components/Icon\";\n\nexport { Tooltip } from \"./components/Tooltip\";\nexport type { TooltipProps } from \"./components/Tooltip\";\n\nexport { IconButton } from \"./components/IconButton\";\nexport type { IconButtonProps } from \"./components/IconButton\";\n\nexport { Input } from \"./components/Input\";\nexport type { InputProps } from \"./components/Input\";\n\nexport { Select } from \"./components/Select\";\nexport type { SelectProps, SelectItem } from \"./components/Select\";\n\nexport { Table, TableHeader, Column, TableBody, Row, Cell } from \"./components/Table\";\nexport type { DataTableProps, TableSize } from \"./components/Table\";\n\nexport { Dialog } from \"./components/Dialog\";\nexport type { DialogProps } from \"./components/Dialog\";\n\nexport { ToastProvider, useToast, createToastBridge } from \"./components/Toast\";\nexport type { ToastData, ToastVariant, ToastContextValue, ToastBridge } from \"./components/Toast\";\n\nexport { EmptyState } from \"./components/EmptyState\";\nexport type { EmptyStateProps } from \"./components/EmptyState\";\n\nexport { Checkbox } from \"./components/Checkbox\";\nexport type { CheckboxProps } from \"./components/Checkbox\";\n\nexport { Switch } from \"./components/Switch\";\nexport type { SwitchProps } from \"./components/Switch\";\n\nexport { RadioGroup, Radio, RadioButton } from \"./components/Radio\";\nexport type { RadioGroupProps, RadioProps, RadioButtonProps } from \"./components/Radio\";\n\nexport { Label } from \"./components/Label\";\nexport type { LabelProps } from \"./components/Label\";\n\nexport { Field } from \"./components/Field\";\nexport type { FieldProps } from \"./components/Field\";\n\nexport { Fieldset } from \"./components/Fieldset\";\nexport type { FieldsetProps } from \"./components/Fieldset\";\n\nexport { InputGroup, InputGroupContext, useInputGroup } from \"./components/InputGroup\";\nexport type { InputGroupProps, GroupPosition } from \"./components/InputGroup\";\n\nexport { InputAddon } from \"./components/InputAddon\";\nexport type { InputAddonProps } from \"./components/InputAddon\";\n\nexport { Heading, H1, H2, H3 } from \"./components/Heading\";\nexport type { HeadingProps, HeadingLevel, HeadingSize } from \"./components/Heading\";\n\nexport { Link } from \"./components/Link\";\nexport type { LinkProps, LinkVariant } from \"./components/Link\";\n\nexport { Breadcrumbs } from \"./components/Breadcrumbs\";\nexport type { BreadcrumbsProps, BreadcrumbItem } from \"./components/Breadcrumbs\";\n\nexport { ButtonLink, IconButtonLink } from \"./components/ButtonLink\";\nexport type { ButtonLinkProps, IconButtonLinkProps } from \"./components/ButtonLink\";\n\nexport { ToggleButton } from \"./components/ToggleButton\";\nexport type { ToggleButtonProps, ToggleButtonVariant, ToggleButtonSize } from \"./components/ToggleButton\";\n\nexport { Menu } from \"./components/Menu\";\nexport type { MenuProps, MenuItemData } from \"./components/Menu\";\n\nexport { Popover, PopoverTrigger, PopoverContent } from \"./components/Popover\";\nexport type { PopoverProps, PopoverTriggerProps, PopoverContentProps } from \"./components/Popover\";\n\nexport { Tabs, TabList, Tab, TabPanel } from \"./components/Tabs\";\nexport type { TabsProps, TabListProps, TabProps, TabPanelProps, TabsVariant, TabsSize } from \"./components/Tabs\";\n\nexport { Tree } from \"./components/Tree\";\nexport type { TreeProps, TreeNode, TreeApi } from \"./components/Tree\";\n\n// Design tokens (TypeScript constants)\nexport * from \"./tokens/tokens\";\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport {\n Button as AriaButton,\n type ButtonProps as AriaButtonProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n type ButtonVariant,\n type ButtonSize,\n variantStyles,\n sizeStyles,\n} from \"../_shared/styles\";\nimport { Icon } from \"../Icon\";\nimport { Spinner } from \"../Spinner\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nexport type { ButtonVariant, ButtonSize };\n\nexport interface ButtonProps extends AriaButtonProps {\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: ButtonSize;\n /** Shows a spinner and disables interaction */\n isLoading?: boolean;\n /** Lucide icon rendered before children */\n iconLeft?: LucideIcon;\n /** Lucide icon rendered after children */\n iconRight?: LucideIcon;\n}\n\nconst iconSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\",\n} as const;\n\nfunction groupRadiusClass(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n isDisabled,\n iconLeft,\n iconRight,\n className,\n children,\n ...props\n}: ButtonProps) {\n const { inGroup, position } = useInputGroup();\n\n const radiusClass = inGroup\n ? groupRadiusClass(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n const marginClass =\n inGroup && position !== \"start\" && position !== \"standalone\"\n ? \"-ml-px\"\n : \"\";\n\n const focusRing = inGroup\n ? \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-0 focus-visible:z-10\"\n : \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\";\n\n return (\n <AriaButton\n {...props}\n isDisabled={isDisabled || isLoading}\n className={twMerge(\n \"inline-flex items-center justify-center gap-2 shrink-0\",\n radiusClass,\n \"font-[var(--font-weight-medium)]\",\n \"leading-[var(--line-height-tight)]\",\n \"outline-none transition-colors\",\n focusRing,\n \"disabled:opacity-50 disabled:pointer-events-none\",\n isLoading ? \"pointer-events-none\" : \"\",\n variantStyles[variant],\n sizeStyles[size],\n marginClass,\n className as string,\n )}\n >\n {isLoading && <Spinner size={iconSizeMap[size]} />}\n {!isLoading && iconLeft && (\n <Icon icon={iconLeft} size={iconSizeMap[size]} />\n )}\n {children as React.ReactNode}\n {!isLoading && iconRight && (\n <Icon icon={iconRight} size={iconSizeMap[size]} />\n )}\n </AriaButton>\n );\n}\n","export type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\"\n | \"default\"\n | \"success\"\n | \"info\"\n | \"neutral\";\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport const variantStyles: Record<ButtonVariant, string> = {\n primary: [\n \"bg-[var(--color-action-primary)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-primary-hover)]\",\n \"pressed:bg-[var(--color-action-primary-active)]\",\n ].join(\" \"),\n secondary: [\n \"bg-transparent text-[var(--color-action-secondary)]\",\n \"border border-[var(--color-border-brand)]\",\n \"hover:bg-[var(--color-purple-50)]\",\n \"pressed:bg-[var(--color-purple-100)]\",\n ].join(\" \"),\n ghost: [\n \"bg-transparent text-[var(--color-text-primary)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"pressed:bg-[var(--color-neutral-200)]\",\n ].join(\" \"),\n destructive: [\n \"bg-[var(--color-action-danger)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-danger-hover)]\",\n \"pressed:bg-[var(--color-action-danger-hover)]\",\n ].join(\" \"),\n default: [\n \"bg-[var(--color-action-default)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-default-hover)]\",\n \"pressed:bg-[var(--color-slate-600)]\",\n ].join(\" \"),\n success: [\n \"bg-[var(--color-action-success)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-success-hover)]\",\n \"pressed:bg-[var(--color-green-800)]\",\n ].join(\" \"),\n info: [\n \"bg-[var(--color-action-info)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-info-hover)]\",\n \"pressed:bg-[var(--color-slate-800)]\",\n ].join(\" \"),\n neutral: [\n \"bg-[var(--color-surface-default)] text-[var(--color-text-primary)]\",\n \"border border-[var(--color-border-default)]\",\n \"hover:bg-[var(--color-surface-subtle)]\",\n \"pressed:bg-[var(--color-surface-muted)]\",\n ].join(\" \"),\n};\n\nexport const sizeStyles: Record<ButtonSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n","import type { LucideIcon } from \"lucide-react\";\n\nexport interface IconProps {\n /** A Lucide icon component */\n icon: LucideIcon;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** SVG stroke width */\n strokeWidth?: number;\n /** Accessible label — when provided, the icon is treated as meaningful */\n \"aria-label\"?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst sizeMap = {\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n} as const;\n\nexport function Icon({\n icon: LucideComponent,\n size = \"md\",\n strokeWidth,\n \"aria-label\": ariaLabel,\n className,\n}: IconProps) {\n const isDecorative = !ariaLabel;\n\n return (\n <LucideComponent\n size={sizeMap[size]}\n strokeWidth={strokeWidth}\n role={isDecorative ? undefined : \"img\"}\n aria-label={ariaLabel}\n aria-hidden={isDecorative ? \"true\" : undefined}\n className={className}\n />\n );\n}\n","export interface SpinnerProps {\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Accessible label — when provided, the spinner is announced to screen readers */\n \"aria-label\"?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst sizeMap = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n} as const;\n\nexport function Spinner({\n size = \"md\",\n \"aria-label\": ariaLabel,\n className,\n}: SpinnerProps) {\n const isDecorative = !ariaLabel;\n\n return (\n <svg\n role={isDecorative ? undefined : \"status\"}\n aria-label={ariaLabel}\n aria-hidden={isDecorative ? \"true\" : undefined}\n className={[sizeMap[size], \"animate-spin\", className]\n .filter(Boolean)\n .join(\" \")}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n}\n","import { createContext, useContext } from \"react\";\n\nexport type GroupPosition = \"start\" | \"middle\" | \"end\" | \"standalone\";\n\ninterface InputGroupContextValue {\n inGroup: boolean;\n position: GroupPosition;\n}\n\nexport const InputGroupContext = createContext<InputGroupContextValue>({\n inGroup: false,\n position: \"standalone\",\n});\n\nexport function useInputGroup() {\n return useContext(InputGroupContext);\n}\n","import type React from \"react\";\nimport {\n Tooltip as AriaTooltip,\n TooltipTrigger,\n type TooltipProps as AriaTooltipProps,\n} from \"react-aria-components\";\n\nexport interface TooltipProps {\n /** Tooltip text content */\n content: string;\n /** Trigger element */\n children: React.ReactElement;\n /** Placement relative to trigger */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Delay in ms before showing (default 500) */\n delay?: number;\n /** Additional CSS classes for the tooltip */\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n placement = \"top\",\n delay = 500,\n className,\n}: TooltipProps) {\n return (\n <TooltipTrigger delay={delay}>\n {children}\n <AriaTooltip\n placement={placement}\n className={[\n \"bg-[var(--color-surface-overlay)] backdrop-blur-sm\",\n \"text-[var(--color-text-inverse)] text-sm\",\n \"px-3 py-1.5\",\n \"rounded-md\",\n \"max-w-xs\",\n \"entering:animate-in entering:fade-in entering:duration-150\",\n \"exiting:animate-out exiting:fade-out exiting:duration-100\",\n \"entering:placement-top:slide-in-from-bottom-1\",\n \"entering:placement-bottom:slide-in-from-top-1\",\n \"entering:placement-left:slide-in-from-right-1\",\n \"entering:placement-right:slide-in-from-left-1\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {content}\n </AriaTooltip>\n </TooltipTrigger>\n );\n}\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n Button as AriaButton,\n type ButtonProps as AriaButtonProps,\n} from \"react-aria-components\";\nimport { type ButtonVariant, variantStyles } from \"../_shared/styles\";\nimport { Icon } from \"../Icon\";\nimport { Spinner } from \"../Spinner\";\nimport { Tooltip } from \"../Tooltip\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nexport interface IconButtonProps extends Omit<AriaButtonProps, \"className\"> {\n /** Lucide icon to render */\n icon: LucideIcon;\n /** Required for accessibility — also used as tooltip content */\n \"aria-label\": string;\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show tooltip on hover (default true) */\n showTooltip?: boolean;\n /** Tooltip placement */\n tooltipPlacement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Shows a spinner and disables interaction */\n isLoading?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst squareSizeStyles = {\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n} as const;\n\nconst iconSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\",\n} as const;\n\nfunction groupRadiusClass(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function IconButton({\n icon,\n \"aria-label\": ariaLabel,\n variant = \"ghost\",\n size = \"md\",\n showTooltip = true,\n tooltipPlacement = \"top\",\n isLoading = false,\n isDisabled,\n className,\n ...props\n}: IconButtonProps) {\n const { inGroup, position } = useInputGroup();\n\n const radiusClass = inGroup\n ? groupRadiusClass(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n const marginClass =\n inGroup && position !== \"start\" && position !== \"standalone\"\n ? \"-ml-px\"\n : \"\";\n\n const focusRing = inGroup\n ? \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-0 focus-visible:z-10\"\n : \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\";\n\n const button = (\n <AriaButton\n {...props}\n aria-label={ariaLabel}\n isDisabled={isDisabled || isLoading}\n className={[\n \"inline-flex items-center justify-center shrink-0\",\n radiusClass,\n \"outline-none transition-colors\",\n focusRing,\n \"disabled:opacity-50 disabled:pointer-events-none\",\n isLoading ? \"pointer-events-none\" : \"\",\n variantStyles[variant],\n squareSizeStyles[size],\n marginClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {isLoading ? (\n <Spinner size={iconSizeMap[size]} />\n ) : (\n <Icon icon={icon} size={iconSizeMap[size]} />\n )}\n </AriaButton>\n );\n\n if (showTooltip) {\n return (\n <Tooltip content={ariaLabel} placement={tooltipPlacement}>\n {button}\n </Tooltip>\n );\n }\n\n return button;\n}\n","import {\n TextField,\n Label,\n Input as AriaInput,\n Text,\n type TextFieldProps,\n} from \"react-aria-components\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nconst sizeClasses = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n} as const;\n\nconst prefixSizeClasses = {\n sm: \"px-3 text-sm\",\n md: \"px-3 text-base\",\n lg: \"px-4 text-lg\",\n} as const;\n\nconst alignClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n} as const;\n\nexport interface InputProps\n extends Omit<TextFieldProps, \"children\" | \"className\"> {\n /** Label text displayed above the input. Omit for raw input mode. */\n label?: string;\n /** Placeholder text shown when the input is empty */\n placeholder?: string;\n /** Help text shown below the input */\n description?: string;\n /** Error message shown below the input (triggers error styling) */\n errorMessage?: string;\n /** HTML input type */\n type?: \"text\" | \"email\" | \"password\" | \"number\";\n /** Controls padding and font size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Text prefix shown inside the input on the left (e.g., \"$\", \"https://\") */\n prefix?: string;\n /** Text alignment within the input */\n align?: \"left\" | \"center\" | \"right\";\n /** Additional CSS class for the outer wrapper */\n className?: string;\n}\n\n/**\n * Returns Tailwind border-radius classes for the border-bearing element\n * based on InputGroup position context.\n */\nfunction groupRadiusClasses(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function Input({\n label,\n placeholder,\n description,\n errorMessage,\n type = \"text\",\n size = \"md\",\n prefix,\n align = \"left\",\n isDisabled,\n isRequired,\n className,\n ...props\n}: InputProps) {\n const isInvalid = !!errorMessage;\n const { inGroup, position } = useInputGroup();\n\n const borderColor = isInvalid\n ? \"border-[var(--color-border-danger)]\"\n : \"border-[var(--color-border-default)] hover:border-[var(--color-border-strong)]\";\n\n const radiusClass = inGroup\n ? groupRadiusClasses(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n /** When not first in a group, overlap left border with previous sibling */\n const marginClass = inGroup && position !== \"start\" && position !== \"standalone\" ? \"-ml-px\" : \"\";\n\n return (\n <TextField\n {...props}\n type={type}\n isDisabled={isDisabled}\n isRequired={isRequired}\n isInvalid={isInvalid}\n className={[\n \"flex flex-col gap-[var(--spacing-1)]\",\n inGroup ? \"min-w-0 flex-1\" : \"\",\n marginClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {label && (\n <Label\n className={[\n \"text-[length:var(--font-size-sm)]\",\n \"font-[number:var(--font-weight-medium)]\",\n \"text-[var(--color-text-primary)]\",\n ].join(\" \")}\n >\n {label}\n {isRequired && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 text-[var(--color-text-danger)]\"\n >\n *\n </span>\n )}\n </Label>\n )}\n\n {prefix ? (\n <div\n className={[\n \"flex items-center overflow-hidden\",\n radiusClass,\n \"border\",\n \"bg-[var(--color-surface-default)]\",\n \"outline-none transition-colors\",\n borderColor,\n \"focus-within:ring-2 focus-within:ring-[var(--color-border-focus)] focus-within:border-[var(--color-border-focus)]\",\n inGroup ? \"focus-within:z-10\" : \"\",\n isDisabled ? \"opacity-50 pointer-events-none\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <span\n className={[\n \"self-stretch flex items-center shrink-0 select-none\",\n \"bg-[var(--color-surface-subtle)]\",\n \"border-r border-r-[var(--color-border-default)]\",\n \"text-[var(--color-text-secondary)]\",\n prefixSizeClasses[size],\n ].join(\" \")}\n >\n {prefix}\n </span>\n <AriaInput\n placeholder={placeholder}\n className={[\n \"w-full bg-transparent\",\n sizeClasses[size],\n alignClasses[align],\n \"text-[var(--color-text-primary)]\",\n \"placeholder:text-[var(--color-text-tertiary)]\",\n \"outline-none border-none\",\n ].join(\" \")}\n />\n </div>\n ) : (\n <AriaInput\n placeholder={placeholder}\n className={[\n \"w-full\",\n sizeClasses[size],\n alignClasses[align],\n radiusClass,\n \"border\",\n \"text-[var(--color-text-primary)]\",\n \"bg-[var(--color-surface-default)]\",\n \"placeholder:text-[var(--color-text-tertiary)]\",\n \"outline-none transition-colors\",\n borderColor,\n \"focus:ring-2 focus:ring-[var(--color-border-focus)] focus:border-[var(--color-border-focus)]\",\n inGroup ? \"focus:z-10\" : \"\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n ].join(\" \")}\n />\n )}\n\n {description && !isInvalid && (\n <Text\n slot=\"description\"\n className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]\"\n >\n {description}\n </Text>\n )}\n\n {isInvalid && (\n <Text\n slot=\"errorMessage\"\n className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-danger)]\"\n >\n {errorMessage}\n </Text>\n )}\n </TextField>\n );\n}\n","import {\n Button,\n Label,\n ListBox,\n ListBoxItem,\n Popover,\n Select as AriaSelect,\n SelectValue,\n type SelectProps as AriaSelectProps,\n type Key,\n} from \"react-aria-components\";\n\nexport interface SelectItem {\n id: string;\n name: string;\n}\n\nexport interface SelectProps\n extends Omit<AriaSelectProps<SelectItem>, \"children\"> {\n /** Label displayed above the trigger (always visible) */\n label: string;\n /** Options to display in the dropdown */\n items: SelectItem[];\n /** Placeholder text when no item is selected */\n placeholder?: string;\n /** Error message displayed below the trigger */\n errorMessage?: string;\n}\n\nfunction ChevronDown() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-4 w-4 text-[var(--color-text-secondary)]\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 6l4 4 4-4\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-4 w-4 text-[var(--color-action-primary)]\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 8.5l3.5 3.5 6.5-7\" />\n </svg>\n );\n}\n\nexport function Select({\n label,\n items,\n placeholder = \"Select an option\",\n errorMessage,\n isDisabled,\n isRequired,\n className,\n ...props\n}: SelectProps) {\n const hasError = Boolean(errorMessage);\n\n return (\n <AriaSelect\n {...props}\n isDisabled={isDisabled}\n isRequired={isRequired}\n isInvalid={hasError}\n className={[\"flex flex-col gap-1\", className].filter(Boolean).join(\" \")}\n >\n <Label\n className={[\n \"text-sm font-[var(--font-weight-medium)] text-[var(--color-text-primary)]\",\n ].join(\" \")}\n >\n {label}\n {isRequired && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 text-[var(--color-text-danger)]\"\n >\n *\n </span>\n )}\n </Label>\n\n <Button\n className={[\n \"inline-flex items-center justify-between\",\n \"w-full rounded-[var(--border-radius-md)] px-4 py-2\",\n \"text-base text-left\",\n \"border outline-none transition-colors\",\n hasError\n ? \"border-[var(--color-border-danger)]\"\n : \"border-[var(--color-border-default)]\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"bg-[var(--color-surface-default)]\",\n ].join(\" \")}\n >\n <SelectValue className=\"truncate data-[placeholder]:text-[var(--color-text-tertiary)]\">\n {({ selectedText }) => selectedText || placeholder}\n </SelectValue>\n <ChevronDown />\n </Button>\n\n {hasError && (\n <span className=\"text-sm text-[var(--color-text-danger)]\">\n {errorMessage}\n </span>\n )}\n\n <Popover\n className={[\n \"w-[var(--trigger-width)]\",\n \"rounded-[var(--border-radius-md)]\",\n \"border border-[var(--color-border-default)]\",\n \"bg-[var(--color-surface-default)]\",\n \"shadow-lg\",\n \"overflow-auto\",\n \"entering:animate-in entering:fade-in entering:slide-in-from-top-1\",\n \"exiting:animate-out exiting:fade-out exiting:slide-out-to-top-1\",\n ].join(\" \")}\n >\n <ListBox className=\"p-1 outline-none\" items={items}>\n {(item) => (\n <ListBoxItem\n id={item.id}\n textValue={item.name}\n className={[\n \"flex items-center justify-between gap-2\",\n \"px-4 py-2 rounded-[var(--border-radius-sm)]\",\n \"text-base text-[var(--color-text-primary)]\",\n \"cursor-pointer outline-none\",\n \"hover:bg-[var(--color-surface-muted)]\",\n \"focus:bg-[var(--color-surface-muted)]\",\n \"selected:text-[var(--color-action-primary)] selected:font-[var(--font-weight-medium)]\",\n ].join(\" \")}\n >\n {({ isSelected }) => (\n <>\n <span className=\"truncate\">{item.name}</span>\n {isSelected && <CheckIcon />}\n </>\n )}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n","import {\n Cell as AriaCell,\n Column as AriaColumn,\n Row as AriaRow,\n Table as AriaTable,\n TableBody as AriaTableBody,\n TableHeader as AriaTableHeader,\n type CellProps,\n type ColumnProps,\n type RowProps,\n type TableBodyProps,\n type TableHeaderProps,\n type TableProps,\n} from \"react-aria-components\";\n\nexport type TableSize = \"compact\" | \"comfortable\";\n\n/* ------------------------------------------------------------------ */\n/* Table */\n/* ------------------------------------------------------------------ */\n\nexport interface DataTableProps extends TableProps {\n /** Row density */\n size?: TableSize;\n}\n\nconst tableSizeClass: Record<TableSize, string> = {\n compact: \"[--table-row-py:theme(spacing.1)]\",\n comfortable: \"[--table-row-py:theme(spacing.3)]\",\n};\n\nexport function Table({ size = \"comfortable\", className, ...props }: DataTableProps) {\n return (\n <AriaTable\n {...props}\n className={[\n \"w-full border-collapse text-[var(--font-size-sm)] text-[var(--color-text-primary)]\",\n tableSizeClass[size],\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* TableHeader */\n/* ------------------------------------------------------------------ */\n\nexport function TableHeader<T extends object>(props: TableHeaderProps<T>) {\n return <AriaTableHeader {...props} />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Column */\n/* ------------------------------------------------------------------ */\n\nexport function Column(props: ColumnProps) {\n return (\n <AriaColumn\n {...props}\n className={[\n \"px-3 py-2 text-left font-[var(--font-weight-semibold)] text-[var(--color-text-secondary)]\",\n \"border-b-2 border-[var(--color-border-default)]\",\n \"cursor-default select-none outline-none\",\n \"focus-visible:outline-2 focus-visible:outline-[var(--color-border-focus)] focus-visible:outline-offset-[-2px]\",\n ].join(\" \")}\n >\n {({ allowsSorting, sortDirection }) => (\n <span className=\"inline-flex items-center gap-1\">\n {props.children as React.ReactNode}\n {allowsSorting && (\n <span aria-hidden=\"true\" className=\"text-[var(--color-text-tertiary)]\">\n {sortDirection === \"ascending\" ? \"\\u25B2\" : sortDirection === \"descending\" ? \"\\u25BC\" : \"\\u25B4\"}\n </span>\n )}\n </span>\n )}\n </AriaColumn>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* TableBody */\n/* ------------------------------------------------------------------ */\n\nexport function TableBody<T extends object>(props: TableBodyProps<T>) {\n return <AriaTableBody {...props} />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Row */\n/* ------------------------------------------------------------------ */\n\nexport function Row<T extends object>(props: RowProps<T>) {\n return (\n <AriaRow\n {...props}\n className={[\n \"border-b border-[var(--color-border-default)]\",\n \"even:bg-[var(--color-surface-subtle)]\",\n \"hover:bg-[var(--color-surface-muted)]\",\n \"outline-none\",\n \"focus-visible:outline-2 focus-visible:outline-[var(--color-border-focus)] focus-visible:outline-offset-[-2px]\",\n \"transition-colors\",\n ].join(\" \")}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Cell */\n/* ------------------------------------------------------------------ */\n\nexport function Cell(props: CellProps) {\n return (\n <AriaCell\n {...props}\n className={[\n \"px-3 py-[var(--table-row-py)]\",\n \"outline-none\",\n \"focus-visible:outline-2 focus-visible:outline-[var(--color-border-focus)] focus-visible:outline-offset-[-2px]\",\n ].join(\" \")}\n />\n );\n}\n","import type React from \"react\";\nimport {\n Modal,\n ModalOverlay,\n Dialog as AriaDialog,\n Heading,\n type DialogProps as AriaDialogProps,\n} from \"react-aria-components\";\nimport { X } from \"lucide-react\";\n\nexport interface DialogProps {\n isOpen: boolean;\n onOpenChange: (isOpen: boolean) => void;\n title: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst sizeStyles = {\n sm: \"max-w-md\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n} as const;\n\nexport function Dialog({\n isOpen,\n onOpenChange,\n title,\n size = \"md\",\n children,\n className,\n}: DialogProps) {\n return (\n <ModalOverlay\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n isDismissable\n className={[\n \"fixed inset-0 z-50 bg-[var(--color-overlay-backdrop)] backdrop-blur-sm\",\n \"flex items-center justify-center\",\n \"data-[entering]:animate-in data-[entering]:fade-in\",\n \"data-[exiting]:animate-out data-[exiting]:fade-out\",\n ].join(\" \")}\n >\n <Modal\n className={[\n \"w-full mx-4\",\n sizeStyles[size],\n \"bg-[var(--color-surface-default)] rounded-lg shadow-xl max-h-[85vh] flex flex-col\",\n \"data-[entering]:animate-in data-[entering]:zoom-in-95 data-[entering]:fade-in\",\n \"data-[exiting]:animate-out data-[exiting]:zoom-out-95 data-[exiting]:fade-out\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <AriaDialog className=\"outline-none flex flex-col max-h-[85vh]\">\n {({ close }) => (\n <>\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-[var(--color-border-default)]\">\n <Heading\n slot=\"title\"\n className=\"text-lg font-semibold text-[var(--color-text-primary)]\"\n >\n {title}\n </Heading>\n <button\n type=\"button\"\n onClick={close}\n className={[\n \"inline-flex items-center justify-center rounded-md p-1\",\n \"text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-surface-muted)]\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n \"transition-colors\",\n ].join(\" \")}\n aria-label=\"Close\"\n >\n <X size={20} aria-hidden=\"true\" />\n </button>\n </div>\n <div className=\"px-6 py-4 overflow-y-auto\">{children}</div>\n </>\n )}\n </AriaDialog>\n </Modal>\n </ModalOverlay>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CheckCircle, XCircle, Info, X } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\n\nexport type ToastVariant = \"success\" | \"error\" | \"info\";\n\nexport interface ToastData {\n id: string;\n variant: ToastVariant;\n message: string;\n duration?: number;\n}\n\nexport interface ToastContextValue {\n toasts: ToastData[];\n addToast: (toast: Omit<ToastData, \"id\">) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nlet toastCounter = 0;\n\nconst defaultDuration: Record<ToastVariant, number> = {\n success: 5000,\n info: 5000,\n error: 10000,\n};\n\nconst variantConfig: Record<\n ToastVariant,\n { icon: LucideIcon; containerClass: string; iconClass: string }\n> = {\n success: {\n icon: CheckCircle,\n containerClass: \"bg-[var(--color-surface-success)] border-[var(--color-border-success)] text-[var(--color-text-success)]\",\n iconClass: \"text-[var(--color-action-success)]\",\n },\n error: {\n icon: XCircle,\n containerClass: \"bg-[var(--color-surface-danger)] border-[var(--color-border-danger)] text-[var(--color-text-danger)]\",\n iconClass: \"text-[var(--color-action-danger)]\",\n },\n info: {\n icon: Info,\n containerClass: \"bg-[var(--color-surface-info)] border-[var(--color-border-info)] text-[var(--color-text-info)]\",\n iconClass: \"text-[var(--color-text-info)]\",\n },\n};\n\nfunction ToastItem({\n toast,\n onRemove,\n}: {\n toast: ToastData;\n onRemove: (id: string) => void;\n}) {\n const [isExiting, setIsExiting] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const config = variantConfig[toast.variant];\n const IconComponent = config.icon;\n\n const dismiss = useCallback(() => {\n setIsExiting(true);\n setTimeout(() => onRemove(toast.id), 200);\n }, [onRemove, toast.id]);\n\n useEffect(() => {\n const duration = toast.duration ?? defaultDuration[toast.variant];\n timerRef.current = setTimeout(dismiss, duration);\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [toast.duration, toast.variant, dismiss]);\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={[\n \"flex items-start gap-3 rounded-lg border px-4 py-3 shadow-md\",\n \"min-w-[320px] max-w-[420px]\",\n \"transition-all duration-200\",\n isExiting\n ? \"translate-x-full opacity-0\"\n : \"translate-x-0 opacity-100 animate-in slide-in-from-right\",\n config.containerClass,\n ].join(\" \")}\n >\n <IconComponent size={20} className={[\"shrink-0 mt-0.5\", config.iconClass].join(\" \")} aria-hidden=\"true\" />\n <p className=\"flex-1 text-sm font-medium\">{toast.message}</p>\n <button\n type=\"button\"\n onClick={dismiss}\n className=\"shrink-0 rounded p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current\"\n aria-label=\"Dismiss\"\n >\n <X size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n}\n\nfunction ToastContainer({ toasts, removeToast }: { toasts: ToastData[]; removeToast: (id: string) => void }) {\n if (toasts.length === 0) return null;\n\n return createPortal(\n <div className=\"fixed bottom-4 right-4 z-50 flex flex-col gap-2\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onRemove={removeToast} />\n ))}\n </div>,\n document.body,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Toast Bridge — allows code outside the React tree to emit toasts\n// ---------------------------------------------------------------------------\n\nexport interface ToastBridge {\n /** Call from anywhere (including outside React) to show a toast. */\n emit: (toast: Omit<ToastData, \"id\">) => void;\n /** Used internally by ToastProvider to subscribe to external emits. */\n subscribe: (fn: (toast: Omit<ToastData, \"id\">) => void) => () => void;\n}\n\nexport function createToastBridge(): ToastBridge {\n const listeners = new Set<(toast: Omit<ToastData, \"id\">) => void>();\n return {\n emit: (toast) => {\n listeners.forEach((fn) => fn(toast));\n },\n subscribe: (fn) => {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// ToastProvider\n// ---------------------------------------------------------------------------\n\ninterface ToastProviderProps {\n children: ReactNode;\n /** Optional bridge for receiving toasts from outside the React tree. */\n bridge?: ToastBridge;\n}\n\nexport function ToastProvider({ children, bridge }: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n\n const addToast = useCallback((toast: Omit<ToastData, \"id\">) => {\n const id = `toast-${++toastCounter}`;\n setToasts((prev) => [...prev, { ...toast, id }]);\n }, []);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n // Subscribe to external bridge emits\n useEffect(() => {\n if (!bridge) return;\n return bridge.subscribe(addToast);\n }, [bridge, addToast]);\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n <ToastContainer toasts={toasts} removeToast={removeToast} />\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return {\n toast: context.addToast,\n toasts: context.toasts,\n removeToast: context.removeToast,\n };\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { Icon } from \"../Icon\";\n\nexport interface EmptyStateProps {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={[\n \"flex flex-col items-center text-center py-12 px-6\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {icon && (\n <Icon icon={icon} size=\"xl\" className=\"text-[var(--color-text-tertiary)]\" />\n )}\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)] mt-4\">\n {title}\n </h3>\n {description && (\n <p className=\"text-sm text-[var(--color-text-secondary)] mt-2 max-w-sm\">\n {description}\n </p>\n )}\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n );\n}\n","import type React from \"react\";\nimport {\n Checkbox as AriaCheckbox,\n type CheckboxProps as AriaCheckboxProps,\n} from \"react-aria-components\";\nimport { Check } from \"lucide-react\";\n\nexport interface CheckboxProps\n extends Omit<AriaCheckboxProps, \"children\" | \"className\"> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function Checkbox({ children, className, ...props }: CheckboxProps) {\n return (\n <AriaCheckbox\n {...props}\n className={[\n \"group flex items-center gap-2 text-[length:var(--font-size-sm)] text-[var(--color-text-primary)] cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected, isIndeterminate }) => (\n <>\n <div\n className={[\n \"flex items-center justify-center w-6 h-6 shrink-0\",\n \"rounded-[var(--border-radius-sm)] border transition-colors\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected || isIndeterminate\n ? \"bg-[var(--color-action-primary)] border-[var(--color-action-primary)]\"\n : \"bg-[var(--color-surface-default)] border-[var(--color-border-default)] group-hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n >\n {isSelected && (\n <Check className=\"w-4 h-4 text-[var(--color-text-inverse)]\" strokeWidth={3} />\n )}\n {isIndeterminate && (\n <div className=\"w-3 h-0.5 bg-[var(--color-text-inverse)] rounded-full\" />\n )}\n </div>\n {children && <span>{children}</span>}\n </>\n )}\n </AriaCheckbox>\n );\n}\n","import type React from \"react\";\nimport {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from \"react-aria-components\";\n\ntype PresetColor = \"primary\" | \"success\" | \"destructive\";\n\nexport interface SwitchProps\n extends Omit<AriaSwitchProps, \"children\" | \"className\"> {\n children?: React.ReactNode;\n /** Preset color name or any valid CSS color string for the track when selected */\n color?: PresetColor | (string & {});\n className?: string;\n}\n\nconst trackColorMap: Record<PresetColor, string> = {\n primary: \"bg-[var(--color-action-primary)]\",\n success: \"bg-[var(--color-action-success)]\",\n destructive: \"bg-[var(--color-action-danger)]\",\n};\n\nconst presetColors = new Set<string>(Object.keys(trackColorMap));\n\nfunction isPresetColor(color: string): color is PresetColor {\n return presetColors.has(color);\n}\n\nexport function Switch({\n children,\n color = \"primary\",\n className,\n ...props\n}: SwitchProps) {\n const isPreset = isPresetColor(color);\n\n return (\n <AriaSwitch\n {...props}\n className={[\n \"group flex items-center gap-2 text-[length:var(--font-size-sm)] text-[var(--color-text-primary)] cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected }) => (\n <>\n <div\n className={[\n \"w-9 h-5 rounded-full transition-colors shrink-0 p-0.5\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected && isPreset\n ? trackColorMap[color]\n : !isSelected\n ? \"bg-[var(--color-border-strong)]\"\n : \"\",\n ].join(\" \")}\n style={\n isSelected && !isPreset\n ? { backgroundColor: color }\n : undefined\n }\n >\n <div\n className={[\n \"w-4 h-4 rounded-full bg-[var(--color-surface-default)] transition-transform shadow-sm\",\n isSelected ? \"translate-x-4\" : \"translate-x-0\",\n ].join(\" \")}\n />\n </div>\n {children && <span>{children}</span>}\n </>\n )}\n </AriaSwitch>\n );\n}\n","import type React from \"react\";\nimport {\n RadioGroup as AriaRadioGroup,\n Radio as AriaRadio,\n type RadioGroupProps as AriaRadioGroupProps,\n type RadioProps as AriaRadioProps,\n} from \"react-aria-components\";\n\nexport interface RadioGroupProps\n extends Omit<AriaRadioGroupProps, \"children\" | \"className\"> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface RadioProps\n extends Omit<AriaRadioProps, \"children\" | \"className\"> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface RadioButtonProps\n extends Omit<AriaRadioProps, \"children\" | \"className\"> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function RadioGroup({ children, className, ...props }: RadioGroupProps) {\n return (\n <AriaRadioGroup\n {...props}\n className={[\n \"flex flex-col gap-2\",\n \"disabled:opacity-50\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </AriaRadioGroup>\n );\n}\n\nexport function Radio({ children, className, ...props }: RadioProps) {\n return (\n <AriaRadio\n {...props}\n className={[\n \"group flex items-center gap-2 text-[length:var(--font-size-sm)] text-[var(--color-text-primary)] cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected }) => (\n <>\n <div\n className={[\n \"flex items-center justify-center w-5 h-5 shrink-0\",\n \"rounded-full border-2 transition-colors\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected\n ? \"border-[var(--color-action-primary)]\"\n : \"border-[var(--color-border-default)] group-hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n >\n {isSelected && (\n <div className=\"w-2.5 h-2.5 rounded-full bg-[var(--color-action-primary)]\" />\n )}\n </div>\n {children && <span>{children}</span>}\n </>\n )}\n </AriaRadio>\n );\n}\n\nexport function RadioButton({ children, className, ...props }: RadioButtonProps) {\n return (\n <AriaRadio\n {...props}\n className={[\n \"group cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected }) => (\n <div\n className={[\n \"px-4 py-2 text-[length:var(--font-size-sm)] font-[number:var(--font-weight-medium)]\",\n \"rounded-[var(--border-radius-md)] border transition-colors text-center\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected\n ? \"bg-[var(--color-action-primary)] border-[var(--color-action-primary)] text-[var(--color-text-inverse)]\"\n : \"bg-[var(--color-surface-default)] border-[var(--color-border-default)] text-[var(--color-text-primary)] hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n >\n {children}\n </div>\n )}\n </AriaRadio>\n );\n}\n","import {\n Label as AriaLabel,\n type LabelProps as AriaLabelProps,\n} from \"react-aria-components\";\n\nexport interface LabelProps extends Omit<AriaLabelProps, \"className\"> {\n isRequired?: boolean;\n className?: string;\n}\n\nexport function Label({ isRequired, children, className, ...props }: LabelProps) {\n return (\n <AriaLabel\n {...props}\n className={[\n \"text-[length:var(--font-size-sm)]\",\n \"font-[number:var(--font-weight-medium)]\",\n \"text-[var(--color-text-primary)]\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n {isRequired && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 text-[var(--color-text-danger)]\"\n >\n *\n </span>\n )}\n </AriaLabel>\n );\n}\n","import type React from \"react\";\nimport { Label } from \"../Label\";\n\nexport interface FieldProps {\n label?: string;\n isRequired?: boolean;\n description?: string;\n error?: string | { message?: string };\n children: React.ReactNode;\n className?: string;\n}\n\nfunction getErrorMessage(error: FieldProps[\"error\"]): string | undefined {\n if (!error) return undefined;\n if (typeof error === \"string\") return error;\n return error.message;\n}\n\nexport function Field({\n label,\n isRequired,\n description,\n error,\n children,\n className,\n}: FieldProps) {\n const errorMessage = getErrorMessage(error);\n\n return (\n <div\n className={[\"flex flex-col gap-[var(--spacing-1)]\", className]\n .filter(Boolean)\n .join(\" \")}\n >\n {label && <Label isRequired={isRequired}>{label}</Label>}\n {children}\n {description && !errorMessage && (\n <p className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]\">\n {description}\n </p>\n )}\n {errorMessage && (\n <p className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-danger)]\">\n {errorMessage}\n </p>\n )}\n </div>\n );\n}\n","import type React from \"react\";\n\nexport interface FieldsetProps {\n legend?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Fieldset({ legend, children, className }: FieldsetProps) {\n return (\n <fieldset\n className={[\n \"flex flex-col gap-[var(--spacing-8)]\",\n \"border-none p-0 m-0\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {legend && (\n <legend\n className={[\n \"text-[length:var(--font-size-lg)]\",\n \"font-[number:var(--font-weight-semibold)]\",\n \"text-[var(--color-text-primary)]\",\n \"p-0\",\n ].join(\" \")}\n >\n {legend}\n </legend>\n )}\n {children}\n </fieldset>\n );\n}\n","import React from \"react\";\nimport { InputGroupContext, type GroupPosition } from \"./InputGroupContext\";\n\nexport interface InputGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function InputGroup({ children, className }: InputGroupProps) {\n const childArray = React.Children.toArray(children).filter(\n React.isValidElement,\n );\n\n return (\n <div\n className={[\"flex items-stretch\", className].filter(Boolean).join(\" \")}\n >\n {childArray.map((child, index) => {\n const position: GroupPosition =\n childArray.length === 1\n ? \"standalone\"\n : index === 0\n ? \"start\"\n : index === childArray.length - 1\n ? \"end\"\n : \"middle\";\n\n return (\n <InputGroupContext.Provider\n key={index}\n value={{ inGroup: true, position }}\n >\n {child}\n </InputGroupContext.Provider>\n );\n })}\n </div>\n );\n}\n","import type React from \"react\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nexport interface InputAddonProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction groupRadiusClass(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function InputAddon({ children, className }: InputAddonProps) {\n const { inGroup, position } = useInputGroup();\n\n const radiusClass = inGroup\n ? groupRadiusClass(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n const marginClass =\n inGroup && position !== \"start\" && position !== \"standalone\"\n ? \"-ml-px\"\n : \"\";\n\n return (\n <div\n className={[\n \"flex items-center self-stretch shrink-0 select-none\",\n \"px-3 py-2 text-base\",\n \"bg-[var(--color-surface-subtle)]\",\n \"text-[var(--color-text-secondary)]\",\n \"border border-[var(--color-border-default)]\",\n radiusClass,\n marginClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport type HeadingLevel = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\nexport type HeadingSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\nexport type HeadingWeight = \"semibold\" | \"bold\";\n\nexport interface HeadingProps {\n /** HTML heading element to render */\n as?: HeadingLevel;\n /** Visual size (defaults to match the `as` level) */\n size?: HeadingSize;\n /** Font weight (defaults to \"semibold\") */\n weight?: HeadingWeight;\n children: React.ReactNode;\n className?: string;\n}\n\nconst defaultSizeMap: Record<HeadingLevel, HeadingSize> = {\n h1: \"2xl\",\n h2: \"xl\",\n h3: \"lg\",\n h4: \"md\",\n h5: \"sm\",\n h6: \"xs\",\n};\n\nconst sizeStyles: Record<HeadingSize, string> = {\n xs: \"text-sm\",\n sm: \"text-base\",\n md: \"text-lg\",\n lg: \"text-xl\",\n xl: \"text-2xl\",\n \"2xl\": \"text-3xl\",\n \"3xl\": \"text-4xl\",\n};\n\nconst weightStyles: Record<HeadingWeight, string> = {\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n};\n\nexport function Heading({\n as: Tag = \"h2\",\n size,\n weight = \"semibold\",\n className,\n children,\n}: HeadingProps) {\n const resolvedSize = size ?? defaultSizeMap[Tag];\n\n return (\n <Tag\n className={twMerge(\n weightStyles[weight],\n \"text-[var(--color-text-primary)]\",\n sizeStyles[resolvedSize],\n className,\n )}\n >\n {children}\n </Tag>\n );\n}\n\n/** Convenience: renders `<h1>` at 2xl size with bold weight */\nexport function H1(props: Omit<HeadingProps, \"as\">) {\n return (\n <Heading\n {...props}\n as=\"h1\"\n size={props.size ?? \"2xl\"}\n weight={props.weight ?? \"bold\"}\n />\n );\n}\n\n/** Convenience: renders `<h2>` at xl size */\nexport function H2(props: Omit<HeadingProps, \"as\">) {\n return <Heading {...props} as=\"h2\" size={props.size ?? \"xl\"} />;\n}\n\n/** Convenience: renders `<h3>` at lg size */\nexport function H3(props: Omit<HeadingProps, \"as\">) {\n return <Heading {...props} as=\"h3\" size={props.size ?? \"lg\"} />;\n}\n","import {\n Link as AriaLink,\n type LinkProps as AriaLinkProps,\n} from \"react-aria-components\";\n\nexport type LinkVariant = \"default\" | \"subtle\";\n\nexport interface LinkProps extends Omit<AriaLinkProps, \"className\"> {\n /** Visual style variant */\n variant?: LinkVariant;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst variantStyles: Record<LinkVariant, string> = {\n default: [\n \"text-[var(--color-teal-700)] underline\",\n \"hover:text-[var(--color-teal-800)]\",\n ].join(\" \"),\n subtle: [\n \"text-[var(--color-text-secondary)] no-underline\",\n \"hover:underline hover:text-[var(--color-text-primary)]\",\n ].join(\" \"),\n};\n\nexport function Link({\n variant = \"default\",\n className,\n ...props\n}: LinkProps) {\n return (\n <AriaLink\n {...props}\n className={[\n \"outline-none transition-colors\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2 focus-visible:rounded-sm\",\n variantStyles[variant],\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n />\n );\n}\n","import {\n Breadcrumbs as AriaBreadcrumbs,\n Breadcrumb as AriaBreadcrumb,\n Link,\n} from \"react-aria-components\";\nimport { ChevronRight } from \"lucide-react\";\n\nexport interface BreadcrumbItem {\n id: string;\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbsProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport function Breadcrumbs({ items, className }: BreadcrumbsProps) {\n return (\n <nav\n aria-label=\"Breadcrumb\"\n className={className}\n >\n <AriaBreadcrumbs\n className=\"flex items-center gap-1 text-sm min-w-0\"\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <AriaBreadcrumb\n key={item.id}\n id={item.id}\n className={[\n \"flex items-center gap-1\",\n isLast ? \"min-w-0\" : \"shrink-0\",\n ].join(\" \")}\n >\n {isLast ? (\n <span className=\"font-medium text-[var(--color-text-primary)] truncate\">\n {item.label}\n </span>\n ) : (\n <>\n <Link\n href={item.href}\n className=\"whitespace-nowrap text-[var(--color-text-secondary)] outline-none transition-colors hover:text-[var(--color-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2 focus-visible:rounded-sm\"\n >\n {item.label}\n </Link>\n <ChevronRight\n className=\"shrink-0 text-[var(--color-neutral-400)]\"\n size={16}\n aria-hidden=\"true\"\n />\n </>\n )}\n </AriaBreadcrumb>\n );\n })}\n </AriaBreadcrumbs>\n </nav>\n );\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport {\n Link as AriaLink,\n type LinkProps as AriaLinkProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n type ButtonVariant,\n type ButtonSize,\n variantStyles,\n sizeStyles,\n} from \"../_shared/styles\";\nimport { Icon } from \"../Icon\";\nimport { Tooltip } from \"../Tooltip\";\n\nexport type { ButtonVariant, ButtonSize };\n\nexport interface ButtonLinkProps extends Omit<AriaLinkProps, \"className\"> {\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: ButtonSize;\n /** Lucide icon rendered before children */\n iconLeft?: LucideIcon;\n /** Lucide icon rendered after children */\n iconRight?: LucideIcon;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst iconSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\",\n} as const;\n\nexport function ButtonLink({\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n className,\n children,\n ...props\n}: ButtonLinkProps) {\n return (\n <AriaLink\n {...props}\n className={twMerge(\n \"inline-flex items-center justify-center gap-2\",\n \"rounded-[var(--border-radius-md)]\",\n \"font-[var(--font-weight-medium)]\",\n \"leading-[var(--line-height-tight)]\",\n \"outline-none transition-colors no-underline\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n variantStyles[variant],\n sizeStyles[size],\n className,\n )}\n >\n {iconLeft && <Icon icon={iconLeft} size={iconSizeMap[size]} />}\n {children as React.ReactNode}\n {iconRight && <Icon icon={iconRight} size={iconSizeMap[size]} />}\n </AriaLink>\n );\n}\n\n// --- IconButtonLink ---\n\nexport interface IconButtonLinkProps extends Omit<AriaLinkProps, \"className\"> {\n /** Lucide icon to render */\n icon: LucideIcon;\n /** Required for accessibility — also used as tooltip content */\n \"aria-label\": string;\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show tooltip on hover (default true) */\n showTooltip?: boolean;\n /** Tooltip placement */\n tooltipPlacement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Additional CSS classes */\n className?: string;\n}\n\nconst squareSizeStyles = {\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n} as const;\n\nexport function IconButtonLink({\n icon,\n \"aria-label\": ariaLabel,\n variant = \"ghost\",\n size = \"md\",\n showTooltip = true,\n tooltipPlacement = \"top\",\n className,\n ...props\n}: IconButtonLinkProps) {\n const link = (\n <AriaLink\n {...props}\n aria-label={ariaLabel}\n className={twMerge(\n \"inline-flex items-center justify-center\",\n \"rounded-[var(--border-radius-md)]\",\n \"outline-none transition-colors no-underline\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n variantStyles[variant],\n squareSizeStyles[size],\n className,\n )}\n >\n <Icon icon={icon} size={iconSizeMap[size]} />\n </AriaLink>\n );\n\n if (showTooltip) {\n return (\n <Tooltip content={ariaLabel} placement={tooltipPlacement}>\n {link}\n </Tooltip>\n );\n }\n\n return link;\n}\n","import {\n ToggleButton as AriaToggleButton,\n type ToggleButtonProps as AriaToggleButtonProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport type ToggleButtonVariant = \"default\" | \"primary\" | \"outlined\";\nexport type ToggleButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ToggleButtonProps\n extends Omit<AriaToggleButtonProps, \"className\"> {\n /** Visual style variant */\n variant?: ToggleButtonVariant;\n /** Size preset */\n size?: ToggleButtonSize;\n /** Use fixed square dimensions instead of padding-based sizing */\n isSquare?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst sizeStyles: Record<ToggleButtonSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n\nconst squareSizeStyles: Record<ToggleButtonSize, string> = {\n sm: \"h-7 w-7 text-sm\",\n md: \"h-8 w-8 text-base\",\n lg: \"h-10 w-10 text-lg\",\n};\n\nconst variantStyles: Record<ToggleButtonVariant, { base: string; selected: string }> = {\n default: {\n base: [\n \"bg-transparent text-[var(--color-text-primary)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"pressed:bg-[var(--color-neutral-200)]\",\n ].join(\" \"),\n selected: \"bg-[var(--color-neutral-200)] text-[var(--color-text-primary)]\",\n },\n primary: {\n base: [\n \"bg-transparent text-[var(--color-text-primary)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"pressed:bg-[var(--color-neutral-200)]\",\n ].join(\" \"),\n selected: \"bg-[var(--color-teal-500)] text-[var(--color-text-inverse)]\",\n },\n outlined: {\n base: [\n \"bg-[var(--color-surface-default)] text-[var(--color-text-primary)]\",\n \"border border-[var(--color-border-default)]\",\n \"hover:bg-[var(--color-surface-subtle)]\",\n \"pressed:bg-[var(--color-surface-muted)]\",\n ].join(\" \"),\n selected: [\n \"bg-[var(--color-neutral-800)] text-[var(--color-text-inverse)]\",\n \"border border-[var(--color-neutral-800)]\",\n ].join(\" \"),\n },\n};\n\nexport function ToggleButton({\n variant = \"default\",\n size = \"md\",\n isSquare = false,\n className,\n ...props\n}: ToggleButtonProps) {\n const styles = variantStyles[variant];\n\n return (\n <AriaToggleButton\n {...props}\n className={({ isSelected }) =>\n twMerge(\n \"inline-flex items-center justify-center gap-2\",\n isSquare ? \"rounded-none\" : \"rounded-[var(--border-radius-md)]\",\n \"font-[var(--font-weight-medium)]\",\n \"leading-[var(--line-height-tight)]\",\n \"outline-none transition-colors\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n isSquare ? squareSizeStyles[size] : sizeStyles[size],\n isSelected ? styles.selected : styles.base,\n className,\n )\n }\n />\n );\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport {\n MenuTrigger,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n Popover,\n} from \"react-aria-components\";\nimport { Icon } from \"../Icon\";\n\nexport interface MenuItemData {\n id: string;\n label: string;\n icon?: LucideIcon;\n onAction?: () => void;\n /** When set, renders the menu item as a navigational link */\n href?: string;\n /** Link target, e.g. \"_blank\" for external links */\n target?: string;\n isDisabled?: boolean;\n isDanger?: boolean;\n}\n\nexport interface MenuProps {\n /** Items to render in the menu */\n items: MenuItemData[];\n /** Trigger element (typically a Button or IconButton) */\n children: React.ReactNode;\n /** Additional CSS classes for the menu popover */\n className?: string;\n}\n\nexport function Menu({ items, children, className }: MenuProps) {\n return (\n <MenuTrigger>\n {children}\n <Popover\n className={[\n \"bg-[var(--color-surface-primary)] rounded-[var(--border-radius-md)]\",\n \"shadow-lg border border-[var(--color-border-default)]\",\n \"py-1 min-w-48\",\n \"entering:animate-in entering:fade-in entering:zoom-in-95\",\n \"exiting:animate-out exiting:fade-out exiting:zoom-out-95\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <AriaMenu\n items={items}\n onAction={(key) => {\n const item = items.find((i) => i.id === key);\n item?.onAction?.();\n }}\n className=\"outline-none\"\n >\n {(item) => (\n <AriaMenuItem\n id={item.id}\n href={item.href}\n target={item.target}\n isDisabled={item.isDisabled}\n className={[\n \"flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default\",\n \"transition-colors\",\n \"focus:bg-[var(--color-neutral-100)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n item.isDanger\n ? \"text-[var(--color-text-danger)]\"\n : \"text-[var(--color-text-primary)]\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {item.icon && <Icon icon={item.icon} size=\"sm\" />}\n {item.label}\n </AriaMenuItem>\n )}\n </AriaMenu>\n </Popover>\n </MenuTrigger>\n );\n}\n","import type React from \"react\";\nimport {\n DialogTrigger,\n Popover as AriaPopover,\n Dialog as AriaDialog,\n Button as AriaButton,\n type PopoverProps as AriaPopoverProps,\n} from \"react-aria-components\";\n\nexport interface PopoverProps {\n /** Controls open state (uncontrolled by default via DialogTrigger) */\n isOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n children: React.ReactNode;\n}\n\nexport interface PopoverTriggerProps {\n children: React.ReactNode;\n /** Additional CSS classes for the trigger wrapper */\n className?: string;\n}\n\nexport interface PopoverContentProps {\n /** Placement relative to the trigger element */\n placement?: AriaPopoverProps[\"placement\"];\n /** Offset from the trigger in pixels */\n offset?: number;\n /** Additional CSS classes */\n className?: string;\n /** Content to render inside the popover. Can be a render function receiving { close }. */\n children:\n | React.ReactNode\n | ((opts: { close: () => void }) => React.ReactNode);\n}\n\n/**\n * Popover root -- wraps React Aria's DialogTrigger.\n */\nexport function Popover({ children, isOpen, onOpenChange }: PopoverProps) {\n return (\n <DialogTrigger isOpen={isOpen} onOpenChange={onOpenChange}>\n {children}\n </DialogTrigger>\n );\n}\n\n/**\n * PopoverTrigger -- wraps the child in a React Aria Button so it\n * participates in DialogTrigger's open/close handling.\n *\n * Renders as an unstyled inline element. Pass your visual trigger\n * (text, icon, swatch) as children.\n */\nexport function PopoverTrigger({ children, className }: PopoverTriggerProps) {\n return (\n <AriaButton\n className={[\n \"inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:rounded-[var(--border-radius-sm)]\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </AriaButton>\n );\n}\n\n/**\n * PopoverContent -- the floating panel anchored to the trigger.\n * Built on React Aria's Popover + Dialog for accessible focus management.\n */\nexport function PopoverContent({\n placement = \"bottom\",\n offset: offsetPx = 8,\n className,\n children,\n}: PopoverContentProps) {\n return (\n <AriaPopover\n placement={placement}\n offset={offsetPx}\n className={[\n \"z-50\",\n \"bg-[var(--color-surface-default)] border border-[var(--color-border-default)]\",\n \"rounded-[var(--border-radius-md)] shadow-lg\",\n \"entering:animate-in entering:fade-in entering:duration-150\",\n \"exiting:animate-out exiting:fade-out exiting:duration-100\",\n \"entering:placement-top:slide-in-from-bottom-1\",\n \"entering:placement-bottom:slide-in-from-top-1\",\n \"entering:placement-left:slide-in-from-right-1\",\n \"entering:placement-right:slide-in-from-left-1\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <AriaDialog className=\"outline-none\">\n {({ close }) => (\n <>\n {typeof children === \"function\"\n ? children({ close })\n : children}\n </>\n )}\n </AriaDialog>\n </AriaPopover>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\nimport {\n Tabs as AriaTabs,\n TabList as AriaTabList,\n Tab as AriaTab,\n TabPanel as AriaTabPanel,\n type TabsProps as AriaTabsProps,\n type TabListProps as AriaTabListProps,\n type TabProps as AriaTabProps,\n type TabPanelProps as AriaTabPanelProps,\n type Key,\n} from \"react-aria-components\";\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nexport type TabsVariant = \"underline\" | \"pills\";\nexport type TabsSize = \"sm\" | \"md\" | \"lg\";\n\ninterface TabsContextValue {\n variant: TabsVariant;\n size: TabsSize;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n variant: \"underline\",\n size: \"md\",\n});\n\n// ---------------------------------------------------------------------------\n// Style maps\n// ---------------------------------------------------------------------------\n\nconst sizeStyles: Record<TabsSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n\n// ---------------------------------------------------------------------------\n// Tabs (root)\n// ---------------------------------------------------------------------------\n\nexport interface TabsProps\n extends Omit<AriaTabsProps, \"className\" | \"orientation\"> {\n /** Visual style variant */\n variant?: TabsVariant;\n /** Size preset */\n size?: TabsSize;\n /** Layout orientation */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional CSS classes */\n className?: string;\n children: ReactNode;\n}\n\nexport function Tabs({\n variant = \"underline\",\n size = \"md\",\n orientation = \"horizontal\",\n className,\n children,\n ...props\n}: TabsProps) {\n return (\n <TabsContext.Provider value={{ variant, size }}>\n <AriaTabs\n {...props}\n orientation={orientation}\n className={[\n orientation === \"vertical\" ? \"flex\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </AriaTabs>\n </TabsContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TabList\n// ---------------------------------------------------------------------------\n\nexport interface TabListProps<T extends object>\n extends Omit<AriaTabListProps<T>, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function TabList<T extends object>({\n className,\n ...props\n}: TabListProps<T>) {\n const { variant } = useContext(TabsContext);\n\n const baseStyles =\n variant === \"underline\"\n ? \"flex items-center border-b border-[var(--color-border-default)]\"\n : \"inline-flex items-center bg-[var(--color-surface-muted)] rounded-[var(--border-radius-lg)] p-1 gap-1\";\n\n // Vertical orientation overrides\n const verticalStyles =\n variant === \"underline\"\n ? \"flex-col border-b-0 border-r border-[var(--color-border-default)]\"\n : \"flex-col\";\n\n return (\n <AriaTabList\n {...props}\n className={({ orientation }) =>\n [\n baseStyles,\n orientation === \"vertical\" ? verticalStyles : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")\n }\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tab\n// ---------------------------------------------------------------------------\n\nexport interface TabProps extends Omit<AriaTabProps, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function Tab({ className, ...props }: TabProps) {\n const { variant, size } = useContext(TabsContext);\n\n return (\n <AriaTab\n {...props}\n className={({ isSelected, isDisabled, isHovered, isPressed }) =>\n [\n // Base\n \"cursor-pointer outline-none transition-colors\",\n \"font-[var(--font-weight-medium)]\",\n\n // Focus ring\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n\n // Disabled\n isDisabled ? \"opacity-50 pointer-events-none\" : \"\",\n\n // Size\n sizeStyles[size],\n\n // Variant-specific styles\n ...getTabVariantStyles(variant, {\n isSelected,\n isHovered,\n isPressed,\n isDisabled,\n }),\n\n className,\n ]\n .filter(Boolean)\n .join(\" \")\n }\n />\n );\n}\n\nfunction getTabVariantStyles(\n variant: TabsVariant,\n state: {\n isSelected: boolean;\n isHovered: boolean;\n isPressed: boolean;\n isDisabled: boolean;\n },\n): string[] {\n if (variant === \"underline\") {\n return [\n // Shape\n \"relative rounded-t-[var(--border-radius-sm)]\",\n\n // Color states\n state.isSelected\n ? [\n \"text-[var(--color-teal-700)] font-[var(--font-weight-semibold)]\",\n // Bottom indicator via pseudo-element\n \"after:absolute after:bottom-[-1px] after:left-0 after:right-0 after:h-0.5 after:bg-[var(--color-teal-600)]\",\n ].join(\" \")\n : state.isPressed\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-100)]\"\n : state.isHovered\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-50)]\"\n : \"text-[var(--color-text-secondary)] bg-transparent\",\n ];\n }\n\n // Pills variant\n return [\n // Shape\n \"rounded-[var(--border-radius-md)]\",\n\n // Color states\n state.isSelected\n ? \"text-[var(--color-text-primary)] font-[var(--font-weight-semibold)] bg-[var(--color-surface-default)] shadow-sm\"\n : state.isPressed\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-50)] shadow-none\"\n : state.isHovered\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-200)]\"\n : \"text-[var(--color-text-secondary)] bg-transparent\",\n ];\n}\n\n// ---------------------------------------------------------------------------\n// TabPanel\n// ---------------------------------------------------------------------------\n\nexport interface TabPanelProps extends Omit<AriaTabPanelProps, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function TabPanel({ className, ...props }: TabPanelProps) {\n return (\n <AriaTabPanel\n {...props}\n className={[\"mt-4 outline-none\", className].filter(Boolean).join(\" \")}\n />\n );\n}\n","import { useCallback, useImperativeHandle, useRef, useState } from \"react\";\nimport { Tree as ArboristTree } from \"react-arborist\";\nimport type { TreeApi, NodeApi, NodeRendererProps } from \"react-arborist\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { ChevronRight, Folder, File } from \"lucide-react\";\nimport { Check } from \"lucide-react\";\n\nexport type { TreeApi } from \"react-arborist\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface TreeNode {\n id: string;\n name: string;\n icon?: LucideIcon;\n children?: TreeNode[];\n}\n\nexport interface TreeProps<T extends TreeNode = TreeNode> {\n data: readonly T[];\n \"aria-label\": string;\n size?: \"compact\" | \"comfortable\";\n selectionMode?: \"none\" | \"single\" | \"multi\" | \"checkbox\";\n selectedIds?: Set<string>;\n onSelectionChange?: (ids: Set<string>) => void;\n onActivate?: (node: T) => void;\n openByDefault?: boolean;\n searchTerm?: string;\n searchMatch?: (node: T, term: string) => boolean;\n height?: number;\n indent?: number;\n disableDrag?: boolean;\n disableDrop?: boolean;\n treeRef?: React.Ref<TreeApi<T>>;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Row heights */\n/* ------------------------------------------------------------------ */\n\nconst rowHeightMap = {\n compact: 32,\n comfortable: 40,\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Node renderer */\n/* ------------------------------------------------------------------ */\n\nfunction NodeRenderer<T extends TreeNode>({\n node,\n style,\n tree,\n dragHandle,\n checkedIds,\n onCheckToggle,\n selectionMode,\n}: NodeRendererProps<T> & {\n checkedIds: Set<string>;\n onCheckToggle: (id: string) => void;\n selectionMode: string;\n}) {\n const data = node.data;\n const isCheckbox = selectionMode === \"checkbox\";\n const isChecked = isCheckbox && checkedIds.has(node.id);\n\n const IconComponent: LucideIcon = data.icon\n ? data.icon\n : node.isInternal\n ? Folder\n : File;\n\n return (\n <div\n ref={dragHandle}\n style={style}\n className={[\n \"flex items-center gap-1 px-2 cursor-default select-none\",\n \"text-[length:var(--font-size-sm)] text-[var(--color-text-primary)]\",\n \"outline-none\",\n \"transition-colors\",\n node.isSelected && !isCheckbox\n ? \"bg-[var(--color-teal-50)]\"\n : \"hover:bg-[var(--color-teal-50)]\",\n node.isFocused\n ? \"ring-2 ring-inset ring-[var(--color-border-focus)]\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n role=\"treeitem\"\n aria-selected={isCheckbox ? isChecked : node.isSelected}\n aria-expanded={node.isInternal ? node.isOpen : undefined}\n onClick={(e) => {\n if (isCheckbox) {\n // In checkbox mode, clicking toggles the checkbox\n onCheckToggle(node.id);\n } else {\n node.handleClick(e);\n }\n }}\n onKeyDown={(e) => {\n if (isCheckbox && (e.key === \" \" || e.key === \"Enter\")) {\n e.preventDefault();\n onCheckToggle(node.id);\n }\n }}\n >\n {/* Chevron toggle */}\n <button\n type=\"button\"\n className={[\n \"flex items-center justify-center w-5 h-5 shrink-0\",\n \"rounded-[var(--border-radius-sm)]\",\n \"text-[var(--color-text-secondary)]\",\n \"hover:text-[var(--color-text-primary)] hover:bg-[var(--color-neutral-100)]\",\n \"transition-transform\",\n node.isInternal ? \"visible\" : \"invisible\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={(e) => {\n e.stopPropagation();\n node.toggle();\n }}\n tabIndex={-1}\n aria-label={node.isOpen ? \"Collapse\" : \"Expand\"}\n >\n <ChevronRight\n size={14}\n className={[\n \"transition-transform\",\n node.isOpen ? \"rotate-90\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n />\n </button>\n\n {/* Checkbox (only in checkbox mode) */}\n {isCheckbox && (\n <div\n className={[\n \"flex items-center justify-center w-5 h-5 shrink-0\",\n \"rounded-[var(--border-radius-sm)] border transition-colors\",\n isChecked\n ? \"bg-[var(--color-action-primary)] border-[var(--color-action-primary)]\"\n : \"bg-[var(--color-surface-default)] border-[var(--color-border-default)] hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n role=\"checkbox\"\n aria-checked={isChecked}\n aria-label={`Select ${data.name}`}\n >\n {isChecked && (\n <Check\n className=\"w-3 h-3 text-[var(--color-text-inverse)]\"\n strokeWidth={3}\n />\n )}\n </div>\n )}\n\n {/* Icon */}\n <IconComponent\n size={16}\n className=\"shrink-0 text-[var(--color-text-secondary)]\"\n aria-hidden=\"true\"\n />\n\n {/* Name */}\n <span className=\"truncate\">{data.name}</span>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Tree component */\n/* ------------------------------------------------------------------ */\n\nexport function Tree<T extends TreeNode = TreeNode>({\n data,\n \"aria-label\": ariaLabel,\n size = \"comfortable\",\n selectionMode = \"single\",\n selectedIds,\n onSelectionChange,\n onActivate,\n openByDefault = false,\n searchTerm,\n searchMatch,\n height = 400,\n indent = 24,\n disableDrag = true,\n disableDrop = true,\n treeRef,\n className,\n}: TreeProps<T>) {\n const internalRef = useRef<TreeApi<T>>(null);\n\n // Expose tree API via treeRef\n useImperativeHandle(treeRef, () => internalRef.current!, []);\n\n // Checkbox state (managed separately from react-arborist selection)\n const [internalChecked, setInternalChecked] = useState<Set<string>>(\n () => new Set(),\n );\n const checkedIds = selectedIds ?? internalChecked;\n\n const handleCheckToggle = useCallback(\n (id: string) => {\n const next = new Set(checkedIds);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n if (onSelectionChange) {\n onSelectionChange(next);\n } else {\n setInternalChecked(next);\n }\n },\n [checkedIds, onSelectionChange],\n );\n\n // Selection handling for non-checkbox modes\n const handleSelect = useCallback(\n (nodes: NodeApi<T>[]) => {\n if (selectionMode === \"checkbox\" || selectionMode === \"none\") return;\n if (onSelectionChange) {\n onSelectionChange(new Set(nodes.map((n) => n.id)));\n }\n },\n [selectionMode, onSelectionChange],\n );\n\n // Activation handling\n const handleActivate = useCallback(\n (node: NodeApi<T>) => {\n if (onActivate) {\n onActivate(node.data);\n }\n },\n [onActivate],\n );\n\n // Search match adapter: react-arborist passes NodeApi, our prop passes T\n const arboristSearchMatch = searchMatch\n ? (node: NodeApi<T>, term: string) => searchMatch(node.data, term)\n : undefined;\n\n // Selection prop for react-arborist (controls selected node by id)\n // In single mode, pass the first selectedId. In multi, arborist handles it via onSelect.\n const selectionProp =\n selectionMode === \"single\" && selectedIds && selectedIds.size > 0\n ? [...selectedIds][0]\n : undefined;\n\n return (\n <div\n role=\"tree\"\n aria-label={ariaLabel}\n className={[\"outline-none\", className].filter(Boolean).join(\" \")}\n >\n <ArboristTree<T>\n ref={internalRef}\n data={data as T[]}\n width=\"100%\"\n height={height}\n rowHeight={rowHeightMap[size]}\n indent={indent}\n openByDefault={openByDefault}\n searchTerm={searchTerm}\n searchMatch={arboristSearchMatch}\n disableDrag={disableDrag}\n disableDrop={disableDrop}\n disableMultiSelection={selectionMode === \"single\" || selectionMode === \"none\"}\n selection={selectionProp}\n onSelect={handleSelect}\n onActivate={handleActivate}\n disableEdit={true}\n >\n {(props) => (\n <NodeRenderer<T>\n {...props}\n checkedIds={checkedIds}\n onCheckToggle={handleCheckToggle}\n selectionMode={selectionMode}\n />\n )}\n </ArboristTree>\n </div>\n );\n}\n","/**\n * Do not edit directly, this file was auto-generated.\n */\n\nexport const ColorPurple50 = \"#f5f0fa\";\nexport const ColorPurple100 = \"#ead9f5\";\nexport const ColorPurple200 = \"#d4b3eb\";\nexport const ColorPurple300 = \"#b87ddb\";\nexport const ColorPurple400 = \"#9b4fcb\";\nexport const ColorPurple500 = \"#7a2ea8\";\nexport const ColorPurple600 = \"#6b2695\";\nexport const ColorPurple700 = \"#5c2483\";\nexport const ColorPurple800 = \"#4a1d6a\";\nexport const ColorPurple900 = \"#3a1754\";\nexport const ColorTeal50 = \"#edf9f9\";\nexport const ColorTeal100 = \"#d0f0f0\";\nexport const ColorTeal200 = \"#a1e1e2\";\nexport const ColorTeal300 = \"#6dd0d1\";\nexport const ColorTeal400 = \"#44c4c5\";\nexport const ColorTeal500 = \"#35b7b8\";\nexport const ColorTeal600 = \"#2a9b9c\";\nexport const ColorTeal700 = \"#217d7e\";\nexport const ColorTeal800 = \"#1a6364\";\nexport const ColorTeal900 = \"#144d4e\";\nexport const ColorGreen50 = \"#f0fdf4\";\nexport const ColorGreen100 = \"#dcfce7\";\nexport const ColorGreen200 = \"#bbf7d0\";\nexport const ColorGreen300 = \"#86efac\";\nexport const ColorGreen400 = \"#4ade80\";\nexport const ColorGreen500 = \"#22c55e\";\nexport const ColorGreen600 = \"#16a34a\";\nexport const ColorGreen700 = \"#15803d\";\nexport const ColorGreen800 = \"#166534\";\nexport const ColorGreen900 = \"#14532d\";\nexport const ColorRose50 = \"#fff1f2\";\nexport const ColorRose100 = \"#ffe4e6\";\nexport const ColorRose200 = \"#fecdd3\";\nexport const ColorRose300 = \"#fda4af\";\nexport const ColorRose400 = \"#fb7185\";\nexport const ColorRose500 = \"#f43f5e\";\nexport const ColorRose600 = \"#e11d48\";\nexport const ColorRose700 = \"#be123c\";\nexport const ColorRose800 = \"#9f1239\";\nexport const ColorRose900 = \"#881337\";\nexport const ColorSlate50 = \"#f8fafc\";\nexport const ColorSlate100 = \"#f1f5f9\";\nexport const ColorSlate200 = \"#e2e8f0\";\nexport const ColorSlate300 = \"#cbd5e1\";\nexport const ColorSlate400 = \"#94a3b8\";\nexport const ColorSlate500 = \"#64748b\";\nexport const ColorSlate600 = \"#475569\";\nexport const ColorSlate700 = \"#334155\";\nexport const ColorSlate800 = \"#1e293b\";\nexport const ColorSlate900 = \"#0f172a\";\nexport const ColorNeutral0 = \"#ffffff\";\nexport const ColorNeutral50 = \"#f9fafb\";\nexport const ColorNeutral100 = \"#f3f4f6\";\nexport const ColorNeutral200 = \"#e5e7eb\";\nexport const ColorNeutral300 = \"#d1d5db\";\nexport const ColorNeutral400 = \"#9ca3af\";\nexport const ColorNeutral500 = \"#6b7280\";\nexport const ColorNeutral600 = \"#4b5563\";\nexport const ColorNeutral700 = \"#374151\";\nexport const ColorNeutral800 = \"#1f2937\";\nexport const ColorNeutral900 = \"#111827\";\nexport const ColorNeutral950 = \"#030712\";\nexport const ColorNeutral1000 = \"#000000\";\nexport const ColorBrandPrimary = \"#5c2483\";\nexport const ColorBrandAccent = \"#35b7b8\";\nexport const ColorActionPrimary = \"#35b7b8\";\nexport const ColorActionPrimaryHover = \"#2a9b9c\";\nexport const ColorActionPrimaryActive = \"#217d7e\";\nexport const ColorActionSecondary = \"#5c2483\";\nexport const ColorActionSecondaryHover = \"#6b2695\";\nexport const ColorActionDanger = \"#e11d48\";\nexport const ColorActionDangerHover = \"#be123c\";\nexport const ColorActionSuccess = \"#16a34a\";\nexport const ColorActionSuccessHover = \"#15803d\";\nexport const ColorActionInfo = \"#475569\";\nexport const ColorActionInfoHover = \"#334155\";\nexport const ColorActionDefault = \"#1e293b\";\nexport const ColorActionDefaultHover = \"#334155\";\nexport const ColorTextPrimary = \"#111827\";\nexport const ColorTextSecondary = \"#4b5563\";\nexport const ColorTextTertiary = \"#9ca3af\";\nexport const ColorTextInverse = \"#ffffff\";\nexport const ColorTextBrand = \"#5c2483\";\nexport const ColorTextAccent = \"#35b7b8\";\nexport const ColorTextDanger = \"#e11d48\";\nexport const ColorTextSuccess = \"#16a34a\";\nexport const ColorTextInfo = \"#475569\";\nexport const ColorTextWarning = \"#d97706\";\nexport const ColorSurfaceDefault = \"#ffffff\";\nexport const ColorSurfaceSubtle = \"#f9fafb\";\nexport const ColorSurfaceMuted = \"#f3f4f6\";\nexport const ColorSurfaceBrand = \"#5c2483\";\nexport const ColorSurfaceAccent = \"#35b7b8\";\nexport const ColorSurfaceDanger = \"#fff1f2\";\nexport const ColorSurfaceSuccess = \"#f0fdf4\";\nexport const ColorSurfaceWarning = \"#fffbeb\";\nexport const ColorSurfaceInfo = \"#f8fafc\";\nexport const ColorSurfaceOverlay = \"#000000cc\";\nexport const ColorBorderDefault = \"#e5e7eb\";\nexport const ColorBorderStrong = \"#d1d5db\";\nexport const ColorBorderBrand = \"#5c2483\";\nexport const ColorBorderAccent = \"#35b7b8\";\nexport const ColorBorderFocus = \"#35b7b8\";\nexport const ColorBorderDanger = \"#e11d48\";\nexport const ColorBorderSuccess = \"#16a34a\";\nexport const ColorBorderInfo = \"#94a3b8\";\nexport const ColorBorderWarning = \"#d97706\";\nexport const ColorOverlayBackdrop = \"#00000066\";\nexport const Spacing1 = \"4px\";\nexport const Spacing2 = \"8px\";\nexport const Spacing3 = \"12px\";\nexport const Spacing4 = \"16px\";\nexport const Spacing6 = \"24px\";\nexport const Spacing8 = \"32px\";\nexport const Spacing12 = \"48px\";\nexport const Spacing16 = \"64px\";\nexport const BorderRadiusNone = \"0px\";\nexport const BorderRadiusSm = \"4px\";\nexport const BorderRadiusMd = \"8px\";\nexport const BorderRadiusLg = \"12px\";\nexport const BorderRadiusXl = \"16px\";\nexport const BorderRadiusFull = \"9999px\";\nexport const FontSizeXs = \"12px\";\nexport const FontSizeSm = \"14px\";\nexport const FontSizeBase = \"16px\";\nexport const FontSizeLg = \"18px\";\nexport const FontSizeXl = \"20px\";\nexport const FontSize2xl = \"24px\";\nexport const FontSize3xl = \"30px\";\nexport const FontSize4xl = \"36px\";\nexport const FontSize5xl = \"48px\";\nexport const FontWeightLight = 300;\nexport const FontWeightRegular = 400;\nexport const FontWeightMedium = 500;\nexport const FontWeightSemibold = 600;\nexport const FontWeightBold = 700;\nexport const FontWeightExtrabold = 800;\nexport const LineHeightTight = 1.25;\nexport const LineHeightNormal = 1.5;\nexport const LineHeightRelaxed = 1.625;\n"],"mappings":"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","names":["jsx","sizeMap","jsx","jsxs","jsx","jsxs","AriaButton","jsx","iconSizeMap","groupRadiusClass","AriaButton","jsx","jsxs","Button","Label","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","sizeStyles","createContext","useContext","X","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","Label","jsx","jsxs","Label","jsx","jsxs","jsx","jsx","groupRadiusClass","twMerge","jsx","sizeStyles","Heading","jsx","variantStyles","Link","Fragment","jsx","jsxs","AriaLink","twMerge","jsx","jsxs","iconSizeMap","AriaLink","twMerge","squareSizeStyles","twMerge","jsx","sizeStyles","squareSizeStyles","variantStyles","Popover","jsx","jsxs","Popover","AriaDialog","AriaButton","Fragment","jsx","Popover","createContext","useContext","jsx","sizeStyles","useCallback","useRef","useState","ChevronRight","Check","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/components/_shared/styles.ts","../src/components/Icon/Icon.tsx","../src/components/Spinner/Spinner.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Table/Table.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Toast/Toast.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Switch/Switch.tsx","../src/components/Radio/Radio.tsx","../src/components/Label/Label.tsx","../src/components/Field/Field.tsx","../src/components/Fieldset/Fieldset.tsx","../src/components/InputGroup/InputGroup.tsx","../src/components/InputAddon/InputAddon.tsx","../src/components/Heading/Heading.tsx","../src/components/Link/Link.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/ButtonLink/ButtonLink.tsx","../src/components/ToggleButton/ToggleButton.tsx","../src/components/Menu/Menu.tsx","../src/components/Popover/Popover.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tree/Tree.tsx","../src/components/SegmentedControl/SegmentedControl.tsx","../src/components/StorageConnectionCard/StorageConnectionCard.tsx","../src/tokens/tokens.ts"],"sourcesContent":["\"use client\";\n\n// React Aria re-exports for consumer integration\nexport { RouterProvider } from \"react-aria-components\";\nexport type { RouterConfig, Key } from \"react-aria-components\";\n\n// Components\nexport { Button } from \"./components/Button\";\nexport type { ButtonProps, ButtonVariant, ButtonSize } from \"./components/Button\";\n\nexport { Spinner } from \"./components/Spinner\";\nexport type { SpinnerProps } from \"./components/Spinner\";\n\nexport { Icon } from \"./components/Icon\";\nexport type { IconProps } from \"./components/Icon\";\n\nexport { Tooltip } from \"./components/Tooltip\";\nexport type { TooltipProps } from \"./components/Tooltip\";\n\nexport { IconButton } from \"./components/IconButton\";\nexport type { IconButtonProps } from \"./components/IconButton\";\n\nexport { Input } from \"./components/Input\";\nexport type { InputProps } from \"./components/Input\";\n\nexport { Select } from \"./components/Select\";\nexport type { SelectProps, SelectItem } from \"./components/Select\";\n\nexport { Table, TableHeader, Column, TableBody, Row, Cell } from \"./components/Table\";\nexport type { DataTableProps, TableSize } from \"./components/Table\";\n\nexport { Dialog } from \"./components/Dialog\";\nexport type { DialogProps } from \"./components/Dialog\";\n\nexport { ToastProvider, useToast, createToastBridge } from \"./components/Toast\";\nexport type { ToastData, ToastVariant, ToastContextValue, ToastBridge } from \"./components/Toast\";\n\nexport { EmptyState } from \"./components/EmptyState\";\nexport type { EmptyStateProps } from \"./components/EmptyState\";\n\nexport { Checkbox } from \"./components/Checkbox\";\nexport type { CheckboxProps } from \"./components/Checkbox\";\n\nexport { Switch } from \"./components/Switch\";\nexport type { SwitchProps } from \"./components/Switch\";\n\nexport { RadioGroup, Radio, RadioButton } from \"./components/Radio\";\nexport type { RadioGroupProps, RadioProps, RadioButtonProps } from \"./components/Radio\";\n\nexport { Label } from \"./components/Label\";\nexport type { LabelProps } from \"./components/Label\";\n\nexport { Field } from \"./components/Field\";\nexport type { FieldProps } from \"./components/Field\";\n\nexport { Fieldset } from \"./components/Fieldset\";\nexport type { FieldsetProps } from \"./components/Fieldset\";\n\nexport { InputGroup, InputGroupContext, useInputGroup } from \"./components/InputGroup\";\nexport type { InputGroupProps, GroupPosition } from \"./components/InputGroup\";\n\nexport { InputAddon } from \"./components/InputAddon\";\nexport type { InputAddonProps } from \"./components/InputAddon\";\n\nexport { Heading, H1, H2, H3 } from \"./components/Heading\";\nexport type { HeadingProps, HeadingLevel, HeadingSize } from \"./components/Heading\";\n\nexport { Link } from \"./components/Link\";\nexport type { LinkProps, LinkVariant } from \"./components/Link\";\n\nexport { Breadcrumbs } from \"./components/Breadcrumbs\";\nexport type { BreadcrumbsProps, BreadcrumbItem } from \"./components/Breadcrumbs\";\n\nexport { ButtonLink, IconButtonLink } from \"./components/ButtonLink\";\nexport type { ButtonLinkProps, IconButtonLinkProps } from \"./components/ButtonLink\";\n\nexport { ToggleButton } from \"./components/ToggleButton\";\nexport type { ToggleButtonProps, ToggleButtonVariant, ToggleButtonSize } from \"./components/ToggleButton\";\n\nexport { Menu } from \"./components/Menu\";\nexport type { MenuProps, MenuItemData } from \"./components/Menu\";\n\nexport { Popover, PopoverTrigger, PopoverContent } from \"./components/Popover\";\nexport type { PopoverProps, PopoverTriggerProps, PopoverContentProps } from \"./components/Popover\";\n\nexport { Tabs, TabList, Tab, TabPanel } from \"./components/Tabs\";\nexport type { TabsProps, TabListProps, TabProps, TabPanelProps, TabsVariant, TabsSize } from \"./components/Tabs\";\n\n// Raw React Aria Components tab primitives (unstyled escape hatch)\nexport {\n Tabs as UnstyledTabs,\n TabList as UnstyledTabList,\n Tab as UnstyledTab,\n TabPanel as UnstyledTabPanel,\n} from \"react-aria-components\";\n\nexport { Tree } from \"./components/Tree\";\nexport type { TreeProps, TreeNode, TreeApi } from \"./components/Tree\";\n\nexport { SegmentedControl, SegmentedControlItem } from \"./components/SegmentedControl\";\nexport type {\n SegmentedControlProps,\n SegmentedControlItemProps,\n SegmentedControlSize,\n SegmentedControlSelectionMode,\n} from \"./components/SegmentedControl\";\n\nexport { StorageConnectionCard } from \"./components/StorageConnectionCard\";\nexport type { StorageConnectionCardProps } from \"./components/StorageConnectionCard\";\n\n// Design tokens (TypeScript constants)\nexport * from \"./tokens/tokens\";\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport {\n Button as AriaButton,\n type ButtonProps as AriaButtonProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n type ButtonVariant,\n type ButtonSize,\n variantStyles,\n sizeStyles,\n} from \"../_shared/styles\";\nimport { Icon } from \"../Icon\";\nimport { Spinner } from \"../Spinner\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nexport type { ButtonVariant, ButtonSize };\n\nexport interface ButtonProps extends AriaButtonProps {\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: ButtonSize;\n /** Shows a spinner and disables interaction */\n isLoading?: boolean;\n /** Lucide icon rendered before children */\n iconLeft?: LucideIcon;\n /** Lucide icon rendered after children */\n iconRight?: LucideIcon;\n}\n\nconst iconSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\",\n} as const;\n\nfunction groupRadiusClass(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n isDisabled,\n iconLeft,\n iconRight,\n className,\n children,\n ...props\n}: ButtonProps) {\n const { inGroup, position } = useInputGroup();\n\n const radiusClass = inGroup\n ? groupRadiusClass(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n const marginClass =\n inGroup && position !== \"start\" && position !== \"standalone\"\n ? \"-ml-px\"\n : \"\";\n\n const focusRing = inGroup\n ? \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-0 focus-visible:z-10\"\n : \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\";\n\n return (\n <AriaButton\n {...props}\n isDisabled={isDisabled || isLoading}\n className={twMerge(\n \"inline-flex items-center justify-center gap-2 shrink-0\",\n radiusClass,\n \"font-[var(--font-weight-medium)]\",\n \"leading-[var(--line-height-tight)]\",\n \"outline-none transition-colors\",\n focusRing,\n \"disabled:opacity-50 disabled:pointer-events-none\",\n isLoading ? \"pointer-events-none\" : \"\",\n variantStyles[variant],\n sizeStyles[size],\n marginClass,\n className as string,\n )}\n >\n {isLoading && <Spinner size={iconSizeMap[size]} />}\n {!isLoading && iconLeft && (\n <Icon icon={iconLeft} size={iconSizeMap[size]} />\n )}\n {children as React.ReactNode}\n {!isLoading && iconRight && (\n <Icon icon={iconRight} size={iconSizeMap[size]} />\n )}\n </AriaButton>\n );\n}\n","export type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\"\n | \"default\"\n | \"success\"\n | \"info\"\n | \"neutral\";\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport const variantStyles: Record<ButtonVariant, string> = {\n primary: [\n \"bg-[var(--color-action-primary)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-primary-hover)]\",\n \"pressed:bg-[var(--color-action-primary-active)]\",\n ].join(\" \"),\n secondary: [\n \"bg-transparent text-[var(--color-action-secondary)]\",\n \"border border-[var(--color-border-brand)]\",\n \"hover:bg-[var(--color-purple-50)]\",\n \"pressed:bg-[var(--color-purple-100)]\",\n ].join(\" \"),\n ghost: [\n \"bg-transparent text-[var(--color-text-primary)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"pressed:bg-[var(--color-neutral-200)]\",\n ].join(\" \"),\n destructive: [\n \"bg-[var(--color-action-danger)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-danger-hover)]\",\n \"pressed:bg-[var(--color-action-danger-hover)]\",\n ].join(\" \"),\n default: [\n \"bg-[var(--color-action-default)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-default-hover)]\",\n \"pressed:bg-[var(--color-slate-600)]\",\n ].join(\" \"),\n success: [\n \"bg-[var(--color-action-success)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-success-hover)]\",\n \"pressed:bg-[var(--color-green-800)]\",\n ].join(\" \"),\n info: [\n \"bg-[var(--color-action-info)] text-[var(--color-text-inverse)]\",\n \"hover:bg-[var(--color-action-info-hover)]\",\n \"pressed:bg-[var(--color-slate-800)]\",\n ].join(\" \"),\n neutral: [\n \"bg-[var(--color-surface-default)] text-[var(--color-text-primary)]\",\n \"border border-[var(--color-border-default)]\",\n \"hover:bg-[var(--color-surface-subtle)]\",\n \"pressed:bg-[var(--color-surface-muted)]\",\n ].join(\" \"),\n};\n\nexport const sizeStyles: Record<ButtonSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n","import type { LucideIcon } from \"lucide-react\";\n\nexport interface IconProps {\n /** A Lucide icon component */\n icon: LucideIcon;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** SVG stroke width */\n strokeWidth?: number;\n /** Accessible label — when provided, the icon is treated as meaningful */\n \"aria-label\"?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst sizeMap = {\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n} as const;\n\nexport function Icon({\n icon: LucideComponent,\n size = \"md\",\n strokeWidth,\n \"aria-label\": ariaLabel,\n className,\n}: IconProps) {\n const isDecorative = !ariaLabel;\n\n return (\n <LucideComponent\n size={sizeMap[size]}\n strokeWidth={strokeWidth}\n role={isDecorative ? undefined : \"img\"}\n aria-label={ariaLabel}\n aria-hidden={isDecorative ? \"true\" : undefined}\n className={className}\n />\n );\n}\n","export interface SpinnerProps {\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Accessible label — when provided, the spinner is announced to screen readers */\n \"aria-label\"?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst sizeMap = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n} as const;\n\nexport function Spinner({\n size = \"md\",\n \"aria-label\": ariaLabel,\n className,\n}: SpinnerProps) {\n const isDecorative = !ariaLabel;\n\n return (\n <svg\n role={isDecorative ? undefined : \"status\"}\n aria-label={ariaLabel}\n aria-hidden={isDecorative ? \"true\" : undefined}\n className={[sizeMap[size], \"animate-spin\", className]\n .filter(Boolean)\n .join(\" \")}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n}\n","import { createContext, useContext } from \"react\";\n\nexport type GroupPosition = \"start\" | \"middle\" | \"end\" | \"standalone\";\n\ninterface InputGroupContextValue {\n inGroup: boolean;\n position: GroupPosition;\n}\n\nexport const InputGroupContext = createContext<InputGroupContextValue>({\n inGroup: false,\n position: \"standalone\",\n});\n\nexport function useInputGroup() {\n return useContext(InputGroupContext);\n}\n","import type React from \"react\";\nimport {\n Tooltip as AriaTooltip,\n TooltipTrigger,\n type TooltipProps as AriaTooltipProps,\n} from \"react-aria-components\";\n\nexport interface TooltipProps {\n /** Tooltip text content */\n content: string;\n /** Trigger element */\n children: React.ReactElement;\n /** Placement relative to trigger */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Delay in ms before showing (default 500) */\n delay?: number;\n /** Additional CSS classes for the tooltip */\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n placement = \"top\",\n delay = 500,\n className,\n}: TooltipProps) {\n return (\n <TooltipTrigger delay={delay}>\n {children}\n <AriaTooltip\n placement={placement}\n className={[\n \"bg-[var(--color-surface-overlay)] backdrop-blur-sm\",\n \"text-[var(--color-text-inverse)] text-sm\",\n \"px-3 py-1.5\",\n \"rounded-md\",\n \"max-w-xs\",\n \"entering:animate-in entering:fade-in entering:duration-150\",\n \"exiting:animate-out exiting:fade-out exiting:duration-100\",\n \"entering:placement-top:slide-in-from-bottom-1\",\n \"entering:placement-bottom:slide-in-from-top-1\",\n \"entering:placement-left:slide-in-from-right-1\",\n \"entering:placement-right:slide-in-from-left-1\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {content}\n </AriaTooltip>\n </TooltipTrigger>\n );\n}\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n Button as AriaButton,\n type ButtonProps as AriaButtonProps,\n} from \"react-aria-components\";\nimport { type ButtonVariant, variantStyles } from \"../_shared/styles\";\nimport { Icon } from \"../Icon\";\nimport { Spinner } from \"../Spinner\";\nimport { Tooltip } from \"../Tooltip\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nexport interface IconButtonProps extends Omit<AriaButtonProps, \"className\"> {\n /** Lucide icon to render */\n icon: LucideIcon;\n /** Required for accessibility — also used as tooltip content */\n \"aria-label\": string;\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show tooltip on hover (default true) */\n showTooltip?: boolean;\n /** Tooltip placement */\n tooltipPlacement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Shows a spinner and disables interaction */\n isLoading?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst squareSizeStyles = {\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n} as const;\n\nconst iconSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\",\n} as const;\n\nfunction groupRadiusClass(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function IconButton({\n icon,\n \"aria-label\": ariaLabel,\n variant = \"ghost\",\n size = \"md\",\n showTooltip = true,\n tooltipPlacement = \"top\",\n isLoading = false,\n isDisabled,\n className,\n ...props\n}: IconButtonProps) {\n const { inGroup, position } = useInputGroup();\n\n const radiusClass = inGroup\n ? groupRadiusClass(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n const marginClass =\n inGroup && position !== \"start\" && position !== \"standalone\"\n ? \"-ml-px\"\n : \"\";\n\n const focusRing = inGroup\n ? \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-0 focus-visible:z-10\"\n : \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\";\n\n const button = (\n <AriaButton\n {...props}\n aria-label={ariaLabel}\n isDisabled={isDisabled || isLoading}\n className={[\n \"inline-flex items-center justify-center shrink-0\",\n radiusClass,\n \"outline-none transition-colors\",\n focusRing,\n \"disabled:opacity-50 disabled:pointer-events-none\",\n isLoading ? \"pointer-events-none\" : \"\",\n variantStyles[variant],\n squareSizeStyles[size],\n marginClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {isLoading ? (\n <Spinner size={iconSizeMap[size]} />\n ) : (\n <Icon icon={icon} size={iconSizeMap[size]} />\n )}\n </AriaButton>\n );\n\n if (showTooltip) {\n return (\n <Tooltip content={ariaLabel} placement={tooltipPlacement}>\n {button}\n </Tooltip>\n );\n }\n\n return button;\n}\n","import {\n TextField,\n Label,\n Input as AriaInput,\n Text,\n type TextFieldProps,\n} from \"react-aria-components\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nconst sizeClasses = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n} as const;\n\nconst prefixSizeClasses = {\n sm: \"px-3 text-sm\",\n md: \"px-3 text-base\",\n lg: \"px-4 text-lg\",\n} as const;\n\nconst alignClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n} as const;\n\nexport interface InputProps\n extends Omit<TextFieldProps, \"children\" | \"className\"> {\n /** Label text displayed above the input. Omit for raw input mode. */\n label?: string;\n /** Placeholder text shown when the input is empty */\n placeholder?: string;\n /** Help text shown below the input */\n description?: string;\n /** Error message shown below the input (triggers error styling) */\n errorMessage?: string;\n /** HTML input type */\n type?: \"text\" | \"email\" | \"password\" | \"number\";\n /** Controls padding and font size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Text prefix shown inside the input on the left (e.g., \"$\", \"https://\") */\n prefix?: string;\n /** Text alignment within the input */\n align?: \"left\" | \"center\" | \"right\";\n /** Additional CSS class for the outer wrapper */\n className?: string;\n}\n\n/**\n * Returns Tailwind border-radius classes for the border-bearing element\n * based on InputGroup position context.\n */\nfunction groupRadiusClasses(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function Input({\n label,\n placeholder,\n description,\n errorMessage,\n type = \"text\",\n size = \"md\",\n prefix,\n align = \"left\",\n isDisabled,\n isRequired,\n className,\n ...props\n}: InputProps) {\n const isInvalid = !!errorMessage;\n const { inGroup, position } = useInputGroup();\n\n const borderColor = isInvalid\n ? \"border-[var(--color-border-danger)]\"\n : \"border-[var(--color-border-default)] hover:border-[var(--color-border-strong)]\";\n\n const radiusClass = inGroup\n ? groupRadiusClasses(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n /** When not first in a group, overlap left border with previous sibling */\n const marginClass = inGroup && position !== \"start\" && position !== \"standalone\" ? \"-ml-px\" : \"\";\n\n return (\n <TextField\n {...props}\n type={type}\n isDisabled={isDisabled}\n isRequired={isRequired}\n isInvalid={isInvalid}\n className={[\n \"flex flex-col gap-[var(--spacing-1)]\",\n inGroup ? \"min-w-0 flex-1\" : \"\",\n marginClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {label && (\n <Label\n className={[\n \"text-[length:var(--font-size-sm)]\",\n \"font-[number:var(--font-weight-medium)]\",\n \"text-[var(--color-text-primary)]\",\n ].join(\" \")}\n >\n {label}\n {isRequired && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 text-[var(--color-text-danger)]\"\n >\n *\n </span>\n )}\n </Label>\n )}\n\n {prefix ? (\n <div\n className={[\n \"flex items-center overflow-hidden\",\n radiusClass,\n \"border\",\n \"bg-[var(--color-surface-default)]\",\n \"outline-none transition-colors\",\n borderColor,\n \"focus-within:ring-2 focus-within:ring-[var(--color-border-focus)] focus-within:border-[var(--color-border-focus)]\",\n inGroup ? \"focus-within:z-10\" : \"\",\n isDisabled ? \"opacity-50 pointer-events-none\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <span\n className={[\n \"self-stretch flex items-center shrink-0 select-none\",\n \"bg-[var(--color-surface-subtle)]\",\n \"border-r border-r-[var(--color-border-default)]\",\n \"text-[var(--color-text-secondary)]\",\n prefixSizeClasses[size],\n ].join(\" \")}\n >\n {prefix}\n </span>\n <AriaInput\n placeholder={placeholder}\n className={[\n \"w-full bg-transparent\",\n sizeClasses[size],\n alignClasses[align],\n \"text-[var(--color-text-primary)]\",\n \"placeholder:text-[var(--color-text-tertiary)]\",\n \"outline-none border-none\",\n ].join(\" \")}\n />\n </div>\n ) : (\n <AriaInput\n placeholder={placeholder}\n className={[\n \"w-full\",\n sizeClasses[size],\n alignClasses[align],\n radiusClass,\n \"border\",\n \"text-[var(--color-text-primary)]\",\n \"bg-[var(--color-surface-default)]\",\n \"placeholder:text-[var(--color-text-tertiary)]\",\n \"outline-none transition-colors\",\n borderColor,\n \"focus:ring-2 focus:ring-[var(--color-border-focus)] focus:border-[var(--color-border-focus)]\",\n inGroup ? \"focus:z-10\" : \"\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n ].join(\" \")}\n />\n )}\n\n {description && !isInvalid && (\n <Text\n slot=\"description\"\n className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]\"\n >\n {description}\n </Text>\n )}\n\n {isInvalid && (\n <Text\n slot=\"errorMessage\"\n className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-danger)]\"\n >\n {errorMessage}\n </Text>\n )}\n </TextField>\n );\n}\n","import {\n Button,\n Label,\n ListBox,\n ListBoxItem,\n Popover,\n Select as AriaSelect,\n SelectValue,\n type SelectProps as AriaSelectProps,\n type Key,\n} from \"react-aria-components\";\n\nexport interface SelectItem {\n id: string;\n name: string;\n}\n\nexport interface SelectProps\n extends Omit<AriaSelectProps<SelectItem>, \"children\"> {\n /** Label displayed above the trigger (always visible) */\n label: string;\n /** Options to display in the dropdown */\n items: SelectItem[];\n /** Placeholder text when no item is selected */\n placeholder?: string;\n /** Error message displayed below the trigger */\n errorMessage?: string;\n}\n\nfunction ChevronDown() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-4 w-4 text-[var(--color-text-secondary)]\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 6l4 4 4-4\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"h-4 w-4 text-[var(--color-action-primary)]\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 8.5l3.5 3.5 6.5-7\" />\n </svg>\n );\n}\n\nexport function Select({\n label,\n items,\n placeholder = \"Select an option\",\n errorMessage,\n isDisabled,\n isRequired,\n className,\n ...props\n}: SelectProps) {\n const hasError = Boolean(errorMessage);\n\n return (\n <AriaSelect\n {...props}\n isDisabled={isDisabled}\n isRequired={isRequired}\n isInvalid={hasError}\n className={[\"flex flex-col gap-1\", className].filter(Boolean).join(\" \")}\n >\n <Label\n className={[\n \"text-sm font-[var(--font-weight-medium)] text-[var(--color-text-primary)]\",\n ].join(\" \")}\n >\n {label}\n {isRequired && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 text-[var(--color-text-danger)]\"\n >\n *\n </span>\n )}\n </Label>\n\n <Button\n className={[\n \"inline-flex items-center justify-between\",\n \"w-full rounded-[var(--border-radius-md)] px-4 py-2\",\n \"text-base text-left\",\n \"border outline-none transition-colors\",\n hasError\n ? \"border-[var(--color-border-danger)]\"\n : \"border-[var(--color-border-default)]\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"bg-[var(--color-surface-default)]\",\n ].join(\" \")}\n >\n <SelectValue className=\"truncate data-[placeholder]:text-[var(--color-text-tertiary)]\">\n {({ selectedText }) => selectedText || placeholder}\n </SelectValue>\n <ChevronDown />\n </Button>\n\n {hasError && (\n <span className=\"text-sm text-[var(--color-text-danger)]\">\n {errorMessage}\n </span>\n )}\n\n <Popover\n className={[\n \"w-[var(--trigger-width)]\",\n \"rounded-[var(--border-radius-md)]\",\n \"border border-[var(--color-border-default)]\",\n \"bg-[var(--color-surface-default)]\",\n \"shadow-lg\",\n \"overflow-auto\",\n \"entering:animate-in entering:fade-in entering:slide-in-from-top-1\",\n \"exiting:animate-out exiting:fade-out exiting:slide-out-to-top-1\",\n ].join(\" \")}\n >\n <ListBox className=\"p-1 outline-none\" items={items}>\n {(item) => (\n <ListBoxItem\n id={item.id}\n textValue={item.name}\n className={[\n \"flex items-center justify-between gap-2\",\n \"px-4 py-2 rounded-[var(--border-radius-sm)]\",\n \"text-base text-[var(--color-text-primary)]\",\n \"cursor-pointer outline-none\",\n \"hover:bg-[var(--color-surface-muted)]\",\n \"focus:bg-[var(--color-surface-muted)]\",\n \"selected:text-[var(--color-action-primary)] selected:font-[var(--font-weight-medium)]\",\n ].join(\" \")}\n >\n {({ isSelected }) => (\n <>\n <span className=\"truncate\">{item.name}</span>\n {isSelected && <CheckIcon />}\n </>\n )}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n","import {\n Cell as AriaCell,\n Column as AriaColumn,\n Row as AriaRow,\n Table as AriaTable,\n TableBody as AriaTableBody,\n TableHeader as AriaTableHeader,\n type CellProps,\n type ColumnProps,\n type RowProps,\n type TableBodyProps,\n type TableHeaderProps,\n type TableProps,\n} from \"react-aria-components\";\n\nexport type TableSize = \"compact\" | \"comfortable\";\n\n/* ------------------------------------------------------------------ */\n/* Table */\n/* ------------------------------------------------------------------ */\n\nexport interface DataTableProps extends TableProps {\n /** Row density */\n size?: TableSize;\n}\n\nconst tableSizeClass: Record<TableSize, string> = {\n compact: \"[--table-row-py:theme(spacing.1)]\",\n comfortable: \"[--table-row-py:theme(spacing.3)]\",\n};\n\nexport function Table({ size = \"comfortable\", className, ...props }: DataTableProps) {\n return (\n <AriaTable\n {...props}\n className={[\n \"w-full border-collapse text-[var(--font-size-sm)] text-[var(--color-text-primary)]\",\n tableSizeClass[size],\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* TableHeader */\n/* ------------------------------------------------------------------ */\n\nexport function TableHeader<T extends object>(props: TableHeaderProps<T>) {\n return <AriaTableHeader {...props} />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Column */\n/* ------------------------------------------------------------------ */\n\nexport function Column(props: ColumnProps) {\n return (\n <AriaColumn\n {...props}\n className={[\n \"px-3 py-2 text-left font-[var(--font-weight-semibold)] text-[var(--color-text-secondary)]\",\n \"border-b-2 border-[var(--color-border-default)]\",\n \"cursor-default select-none outline-none\",\n \"focus-visible:outline-2 focus-visible:outline-[var(--color-border-focus)] focus-visible:outline-offset-[-2px]\",\n ].join(\" \")}\n >\n {({ allowsSorting, sortDirection }) => (\n <span className=\"inline-flex items-center gap-1\">\n {props.children as React.ReactNode}\n {allowsSorting && (\n <span aria-hidden=\"true\" className=\"text-[var(--color-text-tertiary)]\">\n {sortDirection === \"ascending\" ? \"\\u25B2\" : sortDirection === \"descending\" ? \"\\u25BC\" : \"\\u25B4\"}\n </span>\n )}\n </span>\n )}\n </AriaColumn>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* TableBody */\n/* ------------------------------------------------------------------ */\n\nexport function TableBody<T extends object>(props: TableBodyProps<T>) {\n return <AriaTableBody {...props} />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Row */\n/* ------------------------------------------------------------------ */\n\nexport function Row<T extends object>(props: RowProps<T>) {\n return (\n <AriaRow\n {...props}\n className={[\n \"border-b border-[var(--color-border-default)]\",\n \"even:bg-[var(--color-surface-subtle)]\",\n \"hover:bg-[var(--color-surface-muted)]\",\n \"outline-none\",\n \"focus-visible:outline-2 focus-visible:outline-[var(--color-border-focus)] focus-visible:outline-offset-[-2px]\",\n \"transition-colors\",\n ].join(\" \")}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Cell */\n/* ------------------------------------------------------------------ */\n\nexport function Cell(props: CellProps) {\n return (\n <AriaCell\n {...props}\n className={[\n \"px-3 py-[var(--table-row-py)]\",\n \"text-[var(--color-text-primary)]\",\n \"outline-none\",\n \"focus-visible:outline-2 focus-visible:outline-[var(--color-border-focus)] focus-visible:outline-offset-[-2px]\",\n ].join(\" \")}\n />\n );\n}\n","import type React from \"react\";\nimport {\n Modal,\n ModalOverlay,\n Dialog as AriaDialog,\n Heading,\n type DialogProps as AriaDialogProps,\n} from \"react-aria-components\";\nimport { X } from \"lucide-react\";\n\nexport interface DialogProps {\n isOpen: boolean;\n onOpenChange: (isOpen: boolean) => void;\n title: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Whether clicking outside the dialog dismisses it. Defaults to true. */\n isDismissable?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nconst sizeStyles = {\n sm: \"max-w-md\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n} as const;\n\nexport function Dialog({\n isOpen,\n onOpenChange,\n title,\n size = \"md\",\n isDismissable = true,\n children,\n className,\n}: DialogProps) {\n return (\n <ModalOverlay\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n isDismissable={isDismissable}\n className={[\n \"fixed inset-0 z-50 bg-[var(--color-overlay-backdrop)] backdrop-blur-sm\",\n \"flex items-center justify-center\",\n \"data-[entering]:animate-in data-[entering]:fade-in\",\n \"data-[exiting]:animate-out data-[exiting]:fade-out\",\n ].join(\" \")}\n >\n <Modal\n className={[\n \"w-full mx-4\",\n sizeStyles[size],\n \"bg-[var(--color-surface-default)] rounded-lg shadow-xl max-h-[85vh] flex flex-col\",\n \"data-[entering]:animate-in data-[entering]:zoom-in-95 data-[entering]:fade-in\",\n \"data-[exiting]:animate-out data-[exiting]:zoom-out-95 data-[exiting]:fade-out\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <AriaDialog className=\"outline-none flex flex-col max-h-[85vh]\">\n {({ close }) => (\n <>\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-[var(--color-border-default)]\">\n <Heading\n slot=\"title\"\n className=\"text-lg font-semibold text-[var(--color-text-primary)]\"\n >\n {title}\n </Heading>\n <button\n type=\"button\"\n onClick={close}\n className={[\n \"inline-flex items-center justify-center rounded-md p-1\",\n \"text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-surface-muted)]\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n \"transition-colors\",\n ].join(\" \")}\n aria-label=\"Close\"\n >\n <X size={20} aria-hidden=\"true\" />\n </button>\n </div>\n <div className=\"px-6 py-4 overflow-y-auto\">{children}</div>\n </>\n )}\n </AriaDialog>\n </Modal>\n </ModalOverlay>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CheckCircle, XCircle, Info, X } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\n\nexport type ToastVariant = \"success\" | \"error\" | \"info\";\n\nexport interface ToastData {\n id: string;\n variant: ToastVariant;\n message: string;\n duration?: number;\n}\n\nexport interface ToastContextValue {\n toasts: ToastData[];\n addToast: (toast: Omit<ToastData, \"id\">) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nlet toastCounter = 0;\n\nconst defaultDuration: Record<ToastVariant, number> = {\n success: 5000,\n info: 5000,\n error: 10000,\n};\n\nconst variantConfig: Record<\n ToastVariant,\n { icon: LucideIcon; containerClass: string; iconClass: string }\n> = {\n success: {\n icon: CheckCircle,\n containerClass: \"bg-[var(--color-surface-success)] border-[var(--color-border-success)] text-[var(--color-text-success)]\",\n iconClass: \"text-[var(--color-action-success)]\",\n },\n error: {\n icon: XCircle,\n containerClass: \"bg-[var(--color-surface-danger)] border-[var(--color-border-danger)] text-[var(--color-text-danger)]\",\n iconClass: \"text-[var(--color-action-danger)]\",\n },\n info: {\n icon: Info,\n containerClass: \"bg-[var(--color-surface-info)] border-[var(--color-border-info)] text-[var(--color-text-info)]\",\n iconClass: \"text-[var(--color-text-info)]\",\n },\n};\n\nfunction ToastItem({\n toast,\n onRemove,\n}: {\n toast: ToastData;\n onRemove: (id: string) => void;\n}) {\n const [isExiting, setIsExiting] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const config = variantConfig[toast.variant];\n const IconComponent = config.icon;\n\n const dismiss = useCallback(() => {\n setIsExiting(true);\n setTimeout(() => onRemove(toast.id), 200);\n }, [onRemove, toast.id]);\n\n useEffect(() => {\n const duration = toast.duration ?? defaultDuration[toast.variant];\n timerRef.current = setTimeout(dismiss, duration);\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [toast.duration, toast.variant, dismiss]);\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={[\n \"flex items-start gap-3 rounded-lg border px-4 py-3 shadow-md\",\n \"min-w-[320px] max-w-[420px]\",\n \"transition-all duration-200\",\n isExiting\n ? \"translate-x-full opacity-0\"\n : \"translate-x-0 opacity-100 animate-in slide-in-from-right\",\n config.containerClass,\n ].join(\" \")}\n >\n <IconComponent size={20} className={[\"shrink-0 mt-0.5\", config.iconClass].join(\" \")} aria-hidden=\"true\" />\n <p className=\"flex-1 text-sm font-medium\">{toast.message}</p>\n <button\n type=\"button\"\n onClick={dismiss}\n className=\"shrink-0 rounded p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current\"\n aria-label=\"Dismiss\"\n >\n <X size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n}\n\nfunction ToastContainer({ toasts, removeToast }: { toasts: ToastData[]; removeToast: (id: string) => void }) {\n if (toasts.length === 0) return null;\n\n return createPortal(\n <div className=\"fixed bottom-4 right-4 z-50 flex flex-col gap-2\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onRemove={removeToast} />\n ))}\n </div>,\n document.body,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Toast Bridge — allows code outside the React tree to emit toasts\n// ---------------------------------------------------------------------------\n\nexport interface ToastBridge {\n /** Call from anywhere (including outside React) to show a toast. */\n emit: (toast: Omit<ToastData, \"id\">) => void;\n /** Used internally by ToastProvider to subscribe to external emits. */\n subscribe: (fn: (toast: Omit<ToastData, \"id\">) => void) => () => void;\n}\n\nexport function createToastBridge(): ToastBridge {\n const listeners = new Set<(toast: Omit<ToastData, \"id\">) => void>();\n return {\n emit: (toast) => {\n listeners.forEach((fn) => fn(toast));\n },\n subscribe: (fn) => {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// ToastProvider\n// ---------------------------------------------------------------------------\n\ninterface ToastProviderProps {\n children: ReactNode;\n /** Optional bridge for receiving toasts from outside the React tree. */\n bridge?: ToastBridge;\n}\n\nexport function ToastProvider({ children, bridge }: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n\n const addToast = useCallback((toast: Omit<ToastData, \"id\">) => {\n const id = `toast-${++toastCounter}`;\n setToasts((prev) => [...prev, { ...toast, id }]);\n }, []);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n // Subscribe to external bridge emits\n useEffect(() => {\n if (!bridge) return;\n return bridge.subscribe(addToast);\n }, [bridge, addToast]);\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n <ToastContainer toasts={toasts} removeToast={removeToast} />\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return {\n toast: context.addToast,\n toasts: context.toasts,\n removeToast: context.removeToast,\n };\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { Icon } from \"../Icon\";\n\nexport interface EmptyStateProps {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={[\n \"flex flex-col items-center text-center py-12 px-6\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {icon && (\n <Icon icon={icon} size=\"xl\" className=\"text-[var(--color-text-tertiary)]\" />\n )}\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)] mt-4\">\n {title}\n </h3>\n {description && (\n <p className=\"text-sm text-[var(--color-text-secondary)] mt-2 max-w-sm\">\n {description}\n </p>\n )}\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n );\n}\n","import type React from \"react\";\nimport {\n Checkbox as AriaCheckbox,\n type CheckboxProps as AriaCheckboxProps,\n} from \"react-aria-components\";\nimport { Check } from \"lucide-react\";\n\nexport interface CheckboxProps\n extends Omit<AriaCheckboxProps, \"children\" | \"className\"> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function Checkbox({ children, className, ...props }: CheckboxProps) {\n return (\n <AriaCheckbox\n {...props}\n className={[\n \"group flex items-center gap-2 text-[length:var(--font-size-sm)] text-[var(--color-text-primary)] cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected, isIndeterminate }) => (\n <>\n <div\n className={[\n \"flex items-center justify-center w-6 h-6 shrink-0\",\n \"rounded-[var(--border-radius-sm)] border transition-colors\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected || isIndeterminate\n ? \"bg-[var(--color-action-primary)] border-[var(--color-action-primary)]\"\n : \"bg-[var(--color-surface-default)] border-[var(--color-border-default)] group-hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n >\n {isSelected && (\n <Check className=\"w-4 h-4 text-[var(--color-text-inverse)]\" strokeWidth={3} />\n )}\n {isIndeterminate && (\n <div className=\"w-3 h-0.5 bg-[var(--color-text-inverse)] rounded-full\" />\n )}\n </div>\n {children && <span>{children}</span>}\n </>\n )}\n </AriaCheckbox>\n );\n}\n","import type React from \"react\";\nimport {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from \"react-aria-components\";\n\ntype PresetColor = \"primary\" | \"success\" | \"destructive\";\n\nexport interface SwitchProps\n extends Omit<AriaSwitchProps, \"children\" | \"className\"> {\n children?: React.ReactNode;\n /** Preset color name or any valid CSS color string for the track when selected */\n color?: PresetColor | (string & {});\n className?: string;\n}\n\nconst trackColorMap: Record<PresetColor, string> = {\n primary: \"bg-[var(--color-action-primary)]\",\n success: \"bg-[var(--color-action-success)]\",\n destructive: \"bg-[var(--color-action-danger)]\",\n};\n\nconst presetColors = new Set<string>(Object.keys(trackColorMap));\n\nfunction isPresetColor(color: string): color is PresetColor {\n return presetColors.has(color);\n}\n\nexport function Switch({\n children,\n color = \"primary\",\n className,\n ...props\n}: SwitchProps) {\n const isPreset = isPresetColor(color);\n\n return (\n <AriaSwitch\n {...props}\n className={[\n \"group flex items-center gap-2 text-[length:var(--font-size-sm)] text-[var(--color-text-primary)] cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected }) => (\n <>\n <div\n className={[\n \"w-9 h-5 rounded-full transition-colors shrink-0 p-0.5\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected && isPreset\n ? trackColorMap[color]\n : !isSelected\n ? \"bg-[var(--color-border-strong)]\"\n : \"\",\n ].join(\" \")}\n style={\n isSelected && !isPreset\n ? { backgroundColor: color }\n : undefined\n }\n >\n <div\n className={[\n \"w-4 h-4 rounded-full bg-[var(--color-surface-default)] transition-transform shadow-sm\",\n isSelected ? \"translate-x-4\" : \"translate-x-0\",\n ].join(\" \")}\n />\n </div>\n {children && <span>{children}</span>}\n </>\n )}\n </AriaSwitch>\n );\n}\n","import type React from \"react\";\nimport {\n RadioGroup as AriaRadioGroup,\n Radio as AriaRadio,\n type RadioGroupProps as AriaRadioGroupProps,\n type RadioProps as AriaRadioProps,\n} from \"react-aria-components\";\n\nexport interface RadioGroupProps\n extends Omit<AriaRadioGroupProps, \"children\" | \"className\"> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface RadioProps\n extends Omit<AriaRadioProps, \"children\" | \"className\"> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface RadioButtonProps\n extends Omit<AriaRadioProps, \"children\" | \"className\"> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function RadioGroup({ children, className, ...props }: RadioGroupProps) {\n return (\n <AriaRadioGroup\n {...props}\n className={[\n \"flex flex-col gap-2\",\n \"disabled:opacity-50\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </AriaRadioGroup>\n );\n}\n\nexport function Radio({ children, className, ...props }: RadioProps) {\n return (\n <AriaRadio\n {...props}\n className={[\n \"group flex items-center gap-2 text-[length:var(--font-size-sm)] text-[var(--color-text-primary)] cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected }) => (\n <>\n <div\n className={[\n \"flex items-center justify-center w-5 h-5 shrink-0\",\n \"rounded-full border-2 transition-colors\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected\n ? \"border-[var(--color-action-primary)]\"\n : \"border-[var(--color-border-default)] group-hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n >\n {isSelected && (\n <div className=\"w-2.5 h-2.5 rounded-full bg-[var(--color-action-primary)]\" />\n )}\n </div>\n {children && <span>{children}</span>}\n </>\n )}\n </AriaRadio>\n );\n}\n\nexport function RadioButton({ children, className, ...props }: RadioButtonProps) {\n return (\n <AriaRadio\n {...props}\n className={[\n \"group cursor-pointer\",\n \"disabled:opacity-50 disabled:cursor-default\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {({ isSelected }) => (\n <div\n className={[\n \"px-4 py-2 text-[length:var(--font-size-sm)] font-[number:var(--font-weight-medium)]\",\n \"rounded-[var(--border-radius-md)] border transition-colors text-center\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-[var(--color-border-focus)] group-focus-visible:ring-offset-2\",\n isSelected\n ? \"bg-[var(--color-action-primary)] border-[var(--color-action-primary)] text-[var(--color-text-inverse)]\"\n : \"bg-[var(--color-surface-default)] border-[var(--color-border-default)] text-[var(--color-text-primary)] hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n >\n {children}\n </div>\n )}\n </AriaRadio>\n );\n}\n","import {\n Label as AriaLabel,\n type LabelProps as AriaLabelProps,\n} from \"react-aria-components\";\n\nexport interface LabelProps extends Omit<AriaLabelProps, \"className\"> {\n isRequired?: boolean;\n className?: string;\n}\n\nexport function Label({ isRequired, children, className, ...props }: LabelProps) {\n return (\n <AriaLabel\n {...props}\n className={[\n \"text-[length:var(--font-size-sm)]\",\n \"font-[number:var(--font-weight-medium)]\",\n \"text-[var(--color-text-primary)]\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n {isRequired && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 text-[var(--color-text-danger)]\"\n >\n *\n </span>\n )}\n </AriaLabel>\n );\n}\n","import type React from \"react\";\nimport { Label } from \"../Label\";\n\nexport interface FieldProps {\n label?: string;\n isRequired?: boolean;\n description?: string;\n error?: string | { message?: string };\n children: React.ReactNode;\n className?: string;\n}\n\nfunction getErrorMessage(error: FieldProps[\"error\"]): string | undefined {\n if (!error) return undefined;\n if (typeof error === \"string\") return error;\n return error.message;\n}\n\nexport function Field({\n label,\n isRequired,\n description,\n error,\n children,\n className,\n}: FieldProps) {\n const errorMessage = getErrorMessage(error);\n\n return (\n <div\n className={[\"flex flex-col gap-[var(--spacing-1)]\", className]\n .filter(Boolean)\n .join(\" \")}\n >\n {label && <Label isRequired={isRequired}>{label}</Label>}\n {children}\n {description && !errorMessage && (\n <p className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]\">\n {description}\n </p>\n )}\n {errorMessage && (\n <p className=\"text-[length:var(--font-size-sm)] text-[var(--color-text-danger)]\">\n {errorMessage}\n </p>\n )}\n </div>\n );\n}\n","import type React from \"react\";\n\nexport interface FieldsetProps {\n legend?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Fieldset({ legend, children, className }: FieldsetProps) {\n return (\n <fieldset\n className={[\n \"flex flex-col gap-[var(--spacing-8)]\",\n \"border-none p-0 m-0\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {legend && (\n <legend\n className={[\n \"text-[length:var(--font-size-lg)]\",\n \"font-[number:var(--font-weight-semibold)]\",\n \"text-[var(--color-text-primary)]\",\n \"p-0\",\n ].join(\" \")}\n >\n {legend}\n </legend>\n )}\n {children}\n </fieldset>\n );\n}\n","import React from \"react\";\nimport { InputGroupContext, type GroupPosition } from \"./InputGroupContext\";\n\nexport interface InputGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function InputGroup({ children, className }: InputGroupProps) {\n const childArray = React.Children.toArray(children).filter(\n React.isValidElement,\n );\n\n return (\n <div\n className={[\"flex items-stretch\", className].filter(Boolean).join(\" \")}\n >\n {childArray.map((child, index) => {\n const position: GroupPosition =\n childArray.length === 1\n ? \"standalone\"\n : index === 0\n ? \"start\"\n : index === childArray.length - 1\n ? \"end\"\n : \"middle\";\n\n return (\n <InputGroupContext.Provider\n key={index}\n value={{ inGroup: true, position }}\n >\n {child}\n </InputGroupContext.Provider>\n );\n })}\n </div>\n );\n}\n","import type React from \"react\";\nimport { useInputGroup } from \"../InputGroup/InputGroupContext\";\n\nexport interface InputAddonProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction groupRadiusClass(\n position: \"start\" | \"middle\" | \"end\" | \"standalone\",\n): string {\n switch (position) {\n case \"start\":\n return \"rounded-l-[var(--border-radius-md)] rounded-r-none\";\n case \"middle\":\n return \"rounded-none\";\n case \"end\":\n return \"rounded-r-[var(--border-radius-md)] rounded-l-none\";\n default:\n return \"rounded-[var(--border-radius-md)]\";\n }\n}\n\nexport function InputAddon({ children, className }: InputAddonProps) {\n const { inGroup, position } = useInputGroup();\n\n const radiusClass = inGroup\n ? groupRadiusClass(position)\n : \"rounded-[var(--border-radius-md)]\";\n\n const marginClass =\n inGroup && position !== \"start\" && position !== \"standalone\"\n ? \"-ml-px\"\n : \"\";\n\n return (\n <div\n className={[\n \"flex items-center self-stretch shrink-0 select-none\",\n \"px-3 py-2 text-base\",\n \"bg-[var(--color-surface-subtle)]\",\n \"text-[var(--color-text-secondary)]\",\n \"border border-[var(--color-border-default)]\",\n radiusClass,\n marginClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport type HeadingLevel = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\nexport type HeadingSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\nexport type HeadingWeight = \"semibold\" | \"bold\";\n\nexport interface HeadingProps {\n /** HTML heading element to render */\n as?: HeadingLevel;\n /** Visual size (defaults to match the `as` level) */\n size?: HeadingSize;\n /** Font weight (defaults to \"semibold\") */\n weight?: HeadingWeight;\n children: React.ReactNode;\n className?: string;\n}\n\nconst defaultSizeMap: Record<HeadingLevel, HeadingSize> = {\n h1: \"2xl\",\n h2: \"xl\",\n h3: \"lg\",\n h4: \"md\",\n h5: \"sm\",\n h6: \"xs\",\n};\n\nconst sizeStyles: Record<HeadingSize, string> = {\n xs: \"text-sm\",\n sm: \"text-base\",\n md: \"text-lg\",\n lg: \"text-xl\",\n xl: \"text-2xl\",\n \"2xl\": \"text-3xl\",\n \"3xl\": \"text-4xl\",\n};\n\nconst weightStyles: Record<HeadingWeight, string> = {\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n};\n\nexport function Heading({\n as: Tag = \"h2\",\n size,\n weight = \"semibold\",\n className,\n children,\n}: HeadingProps) {\n const resolvedSize = size ?? defaultSizeMap[Tag];\n\n return (\n <Tag\n className={twMerge(\n weightStyles[weight],\n \"text-[var(--color-text-primary)]\",\n sizeStyles[resolvedSize],\n className,\n )}\n >\n {children}\n </Tag>\n );\n}\n\n/** Convenience: renders `<h1>` at 2xl size with bold weight */\nexport function H1(props: Omit<HeadingProps, \"as\">) {\n return (\n <Heading\n {...props}\n as=\"h1\"\n size={props.size ?? \"2xl\"}\n weight={props.weight ?? \"bold\"}\n />\n );\n}\n\n/** Convenience: renders `<h2>` at xl size */\nexport function H2(props: Omit<HeadingProps, \"as\">) {\n return <Heading {...props} as=\"h2\" size={props.size ?? \"xl\"} />;\n}\n\n/** Convenience: renders `<h3>` at lg size */\nexport function H3(props: Omit<HeadingProps, \"as\">) {\n return <Heading {...props} as=\"h3\" size={props.size ?? \"lg\"} />;\n}\n","import {\n Link as AriaLink,\n type LinkProps as AriaLinkProps,\n} from \"react-aria-components\";\n\nexport type LinkVariant = \"default\" | \"subtle\";\n\nexport interface LinkProps extends Omit<AriaLinkProps, \"className\"> {\n /** Visual style variant */\n variant?: LinkVariant;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst variantStyles: Record<LinkVariant, string> = {\n default: [\n \"text-[var(--color-teal-700)] underline\",\n \"hover:text-[var(--color-teal-800)]\",\n ].join(\" \"),\n subtle: [\n \"text-[var(--color-text-secondary)] no-underline\",\n \"hover:underline hover:text-[var(--color-text-primary)]\",\n ].join(\" \"),\n};\n\nexport function Link({\n variant = \"default\",\n className,\n ...props\n}: LinkProps) {\n return (\n <AriaLink\n {...props}\n className={[\n \"outline-none transition-colors\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2 focus-visible:rounded-sm\",\n variantStyles[variant],\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n />\n );\n}\n","import {\n Breadcrumbs as AriaBreadcrumbs,\n Breadcrumb as AriaBreadcrumb,\n Link,\n} from \"react-aria-components\";\nimport { ChevronRight } from \"lucide-react\";\n\nexport interface BreadcrumbItem {\n id: string;\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbsProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport function Breadcrumbs({ items, className }: BreadcrumbsProps) {\n return (\n <nav\n aria-label=\"Breadcrumb\"\n className={className}\n >\n <AriaBreadcrumbs\n className=\"flex items-center gap-1 text-sm min-w-0\"\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <AriaBreadcrumb\n key={item.id}\n id={item.id}\n className={[\n \"flex items-center gap-1\",\n isLast ? \"min-w-0\" : \"shrink-0\",\n ].join(\" \")}\n >\n {isLast ? (\n <span className=\"font-medium text-[var(--color-text-primary)] truncate\">\n {item.label}\n </span>\n ) : (\n <>\n <Link\n href={item.href}\n className=\"whitespace-nowrap text-[var(--color-text-secondary)] outline-none transition-colors hover:text-[var(--color-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2 focus-visible:rounded-sm\"\n >\n {item.label}\n </Link>\n <ChevronRight\n className=\"shrink-0 text-[var(--color-neutral-400)]\"\n size={16}\n aria-hidden=\"true\"\n />\n </>\n )}\n </AriaBreadcrumb>\n );\n })}\n </AriaBreadcrumbs>\n </nav>\n );\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport {\n Link as AriaLink,\n type LinkProps as AriaLinkProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n type ButtonVariant,\n type ButtonSize,\n variantStyles,\n sizeStyles,\n} from \"../_shared/styles\";\nimport { Icon } from \"../Icon\";\nimport { Tooltip } from \"../Tooltip\";\n\nexport type { ButtonVariant, ButtonSize };\n\nexport interface ButtonLinkProps extends Omit<AriaLinkProps, \"className\"> {\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: ButtonSize;\n /** Lucide icon rendered before children */\n iconLeft?: LucideIcon;\n /** Lucide icon rendered after children */\n iconRight?: LucideIcon;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst iconSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\",\n} as const;\n\nexport function ButtonLink({\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n className,\n children,\n ...props\n}: ButtonLinkProps) {\n return (\n <AriaLink\n {...props}\n className={twMerge(\n \"inline-flex items-center justify-center gap-2\",\n \"rounded-[var(--border-radius-md)]\",\n \"font-[var(--font-weight-medium)]\",\n \"leading-[var(--line-height-tight)]\",\n \"outline-none transition-colors no-underline\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n variantStyles[variant],\n sizeStyles[size],\n className,\n )}\n >\n {iconLeft && <Icon icon={iconLeft} size={iconSizeMap[size]} />}\n {children as React.ReactNode}\n {iconRight && <Icon icon={iconRight} size={iconSizeMap[size]} />}\n </AriaLink>\n );\n}\n\n// --- IconButtonLink ---\n\nexport interface IconButtonLinkProps extends Omit<AriaLinkProps, \"className\"> {\n /** Lucide icon to render */\n icon: LucideIcon;\n /** Required for accessibility — also used as tooltip content */\n \"aria-label\": string;\n /** Visual style variant */\n variant?: ButtonVariant;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show tooltip on hover (default true) */\n showTooltip?: boolean;\n /** Tooltip placement */\n tooltipPlacement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Additional CSS classes */\n className?: string;\n}\n\nconst squareSizeStyles = {\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n} as const;\n\nexport function IconButtonLink({\n icon,\n \"aria-label\": ariaLabel,\n variant = \"ghost\",\n size = \"md\",\n showTooltip = true,\n tooltipPlacement = \"top\",\n className,\n ...props\n}: IconButtonLinkProps) {\n const link = (\n <AriaLink\n {...props}\n aria-label={ariaLabel}\n className={twMerge(\n \"inline-flex items-center justify-center\",\n \"rounded-[var(--border-radius-md)]\",\n \"outline-none transition-colors no-underline\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n variantStyles[variant],\n squareSizeStyles[size],\n className,\n )}\n >\n <Icon icon={icon} size={iconSizeMap[size]} />\n </AriaLink>\n );\n\n if (showTooltip) {\n return (\n <Tooltip content={ariaLabel} placement={tooltipPlacement}>\n {link}\n </Tooltip>\n );\n }\n\n return link;\n}\n","import {\n ToggleButton as AriaToggleButton,\n type ToggleButtonProps as AriaToggleButtonProps,\n} from \"react-aria-components\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport type ToggleButtonVariant = \"default\" | \"primary\" | \"outlined\";\nexport type ToggleButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ToggleButtonProps\n extends Omit<AriaToggleButtonProps, \"className\"> {\n /** Visual style variant */\n variant?: ToggleButtonVariant;\n /** Size preset */\n size?: ToggleButtonSize;\n /** Use fixed square dimensions instead of padding-based sizing */\n isSquare?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst sizeStyles: Record<ToggleButtonSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n\nconst squareSizeStyles: Record<ToggleButtonSize, string> = {\n sm: \"h-7 w-7 text-sm\",\n md: \"h-8 w-8 text-base\",\n lg: \"h-10 w-10 text-lg\",\n};\n\nconst variantStyles: Record<ToggleButtonVariant, { base: string; selected: string }> = {\n default: {\n base: [\n \"bg-transparent text-[var(--color-text-primary)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"pressed:bg-[var(--color-neutral-200)]\",\n ].join(\" \"),\n selected: \"bg-[var(--color-neutral-200)] text-[var(--color-text-primary)]\",\n },\n primary: {\n base: [\n \"bg-transparent text-[var(--color-text-primary)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"pressed:bg-[var(--color-neutral-200)]\",\n ].join(\" \"),\n selected: \"bg-[var(--color-teal-500)] text-[var(--color-text-inverse)]\",\n },\n outlined: {\n base: [\n \"bg-[var(--color-surface-default)] text-[var(--color-text-primary)]\",\n \"border border-[var(--color-border-default)]\",\n \"hover:bg-[var(--color-surface-subtle)]\",\n \"pressed:bg-[var(--color-surface-muted)]\",\n ].join(\" \"),\n selected: [\n \"bg-[var(--color-neutral-800)] text-[var(--color-text-inverse)]\",\n \"border border-[var(--color-neutral-800)]\",\n ].join(\" \"),\n },\n};\n\nexport function ToggleButton({\n variant = \"default\",\n size = \"md\",\n isSquare = false,\n className,\n ...props\n}: ToggleButtonProps) {\n const styles = variantStyles[variant];\n\n return (\n <AriaToggleButton\n {...props}\n className={({ isSelected }) =>\n twMerge(\n \"inline-flex items-center justify-center gap-2\",\n isSquare ? \"rounded-none\" : \"rounded-[var(--border-radius-md)]\",\n \"font-[var(--font-weight-medium)]\",\n \"leading-[var(--line-height-tight)]\",\n \"outline-none transition-colors\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n isSquare ? squareSizeStyles[size] : sizeStyles[size],\n isSelected ? styles.selected : styles.base,\n className,\n )\n }\n />\n );\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport {\n MenuTrigger,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n Popover,\n} from \"react-aria-components\";\nimport { Icon } from \"../Icon\";\n\nexport interface MenuItemData {\n id: string;\n label: string;\n icon?: LucideIcon;\n onAction?: () => void;\n /** When set, renders the menu item as a navigational link */\n href?: string;\n /** Link target, e.g. \"_blank\" for external links */\n target?: string;\n isDisabled?: boolean;\n isDanger?: boolean;\n}\n\nexport interface MenuProps {\n /** Items to render in the menu */\n items: MenuItemData[];\n /** Trigger element (typically a Button or IconButton) */\n children: React.ReactNode;\n /** Additional CSS classes for the menu popover */\n className?: string;\n}\n\nexport function Menu({ items, children, className }: MenuProps) {\n return (\n <MenuTrigger>\n {children}\n <Popover\n className={[\n \"bg-[var(--color-surface-primary)] rounded-[var(--border-radius-md)]\",\n \"shadow-lg border border-[var(--color-border-default)]\",\n \"py-1 min-w-48\",\n \"entering:animate-in entering:fade-in entering:zoom-in-95\",\n \"exiting:animate-out exiting:fade-out exiting:zoom-out-95\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <AriaMenu\n items={items}\n onAction={(key) => {\n const item = items.find((i) => i.id === key);\n item?.onAction?.();\n }}\n className=\"outline-none\"\n >\n {(item) => (\n <AriaMenuItem\n id={item.id}\n href={item.href}\n target={item.target}\n isDisabled={item.isDisabled}\n className={[\n \"flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default\",\n \"transition-colors\",\n \"focus:bg-[var(--color-neutral-100)]\",\n \"hover:bg-[var(--color-neutral-100)]\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n item.isDanger\n ? \"text-[var(--color-text-danger)]\"\n : \"text-[var(--color-text-primary)]\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {item.icon && <Icon icon={item.icon} size=\"sm\" />}\n {item.label}\n </AriaMenuItem>\n )}\n </AriaMenu>\n </Popover>\n </MenuTrigger>\n );\n}\n","import type React from \"react\";\nimport {\n DialogTrigger,\n Popover as AriaPopover,\n Dialog as AriaDialog,\n Button as AriaButton,\n type PopoverProps as AriaPopoverProps,\n} from \"react-aria-components\";\n\nexport interface PopoverProps {\n /** Controls open state (uncontrolled by default via DialogTrigger) */\n isOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n children: React.ReactNode;\n}\n\nexport interface PopoverTriggerProps {\n children: React.ReactNode;\n /** Additional CSS classes for the trigger wrapper */\n className?: string;\n}\n\nexport interface PopoverContentProps {\n /** Placement relative to the trigger element */\n placement?: AriaPopoverProps[\"placement\"];\n /** Offset from the trigger in pixels */\n offset?: number;\n /** Additional CSS classes */\n className?: string;\n /** Content to render inside the popover. Can be a render function receiving { close }. */\n children:\n | React.ReactNode\n | ((opts: { close: () => void }) => React.ReactNode);\n}\n\n/**\n * Popover root -- wraps React Aria's DialogTrigger.\n */\nexport function Popover({ children, isOpen, onOpenChange }: PopoverProps) {\n return (\n <DialogTrigger isOpen={isOpen} onOpenChange={onOpenChange}>\n {children}\n </DialogTrigger>\n );\n}\n\n/**\n * PopoverTrigger -- wraps the child in a React Aria Button so it\n * participates in DialogTrigger's open/close handling.\n *\n * Renders as an unstyled inline element. Pass your visual trigger\n * (text, icon, swatch) as children.\n */\nexport function PopoverTrigger({ children, className }: PopoverTriggerProps) {\n return (\n <AriaButton\n className={[\n \"inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:rounded-[var(--border-radius-sm)]\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </AriaButton>\n );\n}\n\n/**\n * PopoverContent -- the floating panel anchored to the trigger.\n * Built on React Aria's Popover + Dialog for accessible focus management.\n */\nexport function PopoverContent({\n placement = \"bottom\",\n offset: offsetPx = 8,\n className,\n children,\n}: PopoverContentProps) {\n return (\n <AriaPopover\n placement={placement}\n offset={offsetPx}\n className={[\n \"z-50\",\n \"bg-[var(--color-surface-default)] border border-[var(--color-border-default)]\",\n \"rounded-[var(--border-radius-md)] shadow-lg\",\n \"entering:animate-in entering:fade-in entering:duration-150\",\n \"exiting:animate-out exiting:fade-out exiting:duration-100\",\n \"entering:placement-top:slide-in-from-bottom-1\",\n \"entering:placement-bottom:slide-in-from-top-1\",\n \"entering:placement-left:slide-in-from-right-1\",\n \"entering:placement-right:slide-in-from-left-1\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <AriaDialog className=\"outline-none\">\n {({ close }) => (\n <>\n {typeof children === \"function\"\n ? children({ close })\n : children}\n </>\n )}\n </AriaDialog>\n </AriaPopover>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n Tabs as AriaTabs,\n TabList as AriaTabList,\n Tab as AriaTab,\n TabPanel as AriaTabPanel,\n type TabsProps as AriaTabsProps,\n type TabListProps as AriaTabListProps,\n type TabProps as AriaTabProps,\n type TabPanelProps as AriaTabPanelProps,\n type Key,\n} from \"react-aria-components\";\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nexport type TabsVariant = \"underline\" | \"pills\" | \"unstyled\";\nexport type TabsSize = \"sm\" | \"md\" | \"lg\";\n\ninterface TabsContextValue {\n variant: TabsVariant;\n size: TabsSize;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n variant: \"underline\",\n size: \"md\",\n});\n\n// ---------------------------------------------------------------------------\n// Style maps\n// ---------------------------------------------------------------------------\n\nconst sizeStyles: Record<TabsSize, string> = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n\n// ---------------------------------------------------------------------------\n// Tabs (root)\n// ---------------------------------------------------------------------------\n\nexport interface TabsProps\n extends Omit<AriaTabsProps, \"className\" | \"orientation\"> {\n /** Visual style variant */\n variant?: TabsVariant;\n /** Size preset */\n size?: TabsSize;\n /** Layout orientation */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional CSS classes */\n className?: string;\n children: ReactNode;\n}\n\nexport function Tabs({\n variant = \"underline\",\n size = \"md\",\n orientation = \"horizontal\",\n className,\n children,\n ...props\n}: TabsProps) {\n return (\n <TabsContext.Provider value={{ variant, size }}>\n <AriaTabs\n {...props}\n orientation={orientation}\n className={twMerge(\n orientation === \"vertical\" ? \"flex\" : \"\",\n className,\n )}\n >\n {children}\n </AriaTabs>\n </TabsContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TabList\n// ---------------------------------------------------------------------------\n\nexport interface TabListProps<T extends object>\n extends Omit<AriaTabListProps<T>, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function TabList<T extends object>({\n className,\n ...props\n}: TabListProps<T>) {\n const { variant } = useContext(TabsContext);\n\n const baseStyles =\n variant === \"unstyled\"\n ? \"flex items-center\"\n : variant === \"underline\"\n ? \"flex items-center border-b border-[var(--color-border-default)]\"\n : \"inline-flex items-center bg-[var(--color-surface-muted)] rounded-[var(--border-radius-lg)] p-1 gap-1\";\n\n // Vertical orientation overrides\n const verticalStyles =\n variant === \"unstyled\"\n ? \"flex-col\"\n : variant === \"underline\"\n ? \"flex-col border-b-0 border-r border-[var(--color-border-default)]\"\n : \"flex-col\";\n\n return (\n <AriaTabList\n {...props}\n className={({ orientation }) =>\n twMerge(\n baseStyles,\n orientation === \"vertical\" ? verticalStyles : \"\",\n className,\n )\n }\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tab\n// ---------------------------------------------------------------------------\n\nexport interface TabProps extends Omit<AriaTabProps, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function Tab({ className, ...props }: TabProps) {\n const { variant, size } = useContext(TabsContext);\n\n return (\n <AriaTab\n {...props}\n className={({ isSelected, isDisabled, isHovered, isPressed }) => {\n if (variant === \"unstyled\") {\n return twMerge(\n \"cursor-pointer outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n isDisabled ? \"opacity-50 pointer-events-none\" : \"\",\n className,\n );\n }\n\n return twMerge(\n // Base\n \"cursor-pointer outline-none transition-colors\",\n \"font-[var(--font-weight-medium)]\",\n\n // Focus ring\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2\",\n\n // Disabled\n isDisabled ? \"opacity-50 pointer-events-none\" : \"\",\n\n // Size\n sizeStyles[size],\n\n // Variant-specific styles\n ...getTabVariantStyles(variant, {\n isSelected,\n isHovered,\n isPressed,\n isDisabled,\n }),\n\n className,\n );\n }}\n />\n );\n}\n\nfunction getTabVariantStyles(\n variant: TabsVariant,\n state: {\n isSelected: boolean;\n isHovered: boolean;\n isPressed: boolean;\n isDisabled: boolean;\n },\n): string[] {\n if (variant === \"underline\") {\n return [\n // Shape\n \"relative rounded-t-[var(--border-radius-sm)]\",\n\n // Color states\n state.isSelected\n ? [\n \"text-[var(--color-teal-700)] font-[var(--font-weight-semibold)]\",\n // Bottom indicator via pseudo-element\n \"after:absolute after:bottom-[-1px] after:left-0 after:right-0 after:h-0.5 after:bg-[var(--color-teal-600)]\",\n ].join(\" \")\n : state.isPressed\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-100)]\"\n : state.isHovered\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-50)]\"\n : \"text-[var(--color-text-secondary)] bg-transparent\",\n ];\n }\n\n // Pills variant\n return [\n // Shape\n \"rounded-[var(--border-radius-md)]\",\n\n // Color states\n state.isSelected\n ? \"text-[var(--color-text-primary)] font-[var(--font-weight-semibold)] bg-[var(--color-surface-default)] shadow-sm\"\n : state.isPressed\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-50)] shadow-none\"\n : state.isHovered\n ? \"text-[var(--color-text-primary)] bg-[var(--color-neutral-200)]\"\n : \"text-[var(--color-text-secondary)] bg-transparent\",\n ];\n}\n\n// ---------------------------------------------------------------------------\n// TabPanel\n// ---------------------------------------------------------------------------\n\nexport interface TabPanelProps extends Omit<AriaTabPanelProps, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function TabPanel({ className, ...props }: TabPanelProps) {\n const { variant } = useContext(TabsContext);\n\n return (\n <AriaTabPanel\n {...props}\n className={twMerge(\n variant === \"unstyled\" ? \"outline-none\" : \"mt-4 outline-none\",\n className,\n )}\n />\n );\n}\n","import { useCallback, useImperativeHandle, useRef, useState } from \"react\";\nimport { Tree as ArboristTree } from \"react-arborist\";\nimport type { TreeApi, NodeApi, NodeRendererProps } from \"react-arborist\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { ChevronRight, Folder, File } from \"lucide-react\";\nimport { Check } from \"lucide-react\";\n\nexport type { TreeApi } from \"react-arborist\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface TreeNode {\n id: string;\n name: string;\n icon?: LucideIcon;\n children?: TreeNode[];\n}\n\nexport interface TreeProps<T extends TreeNode = TreeNode> {\n data: readonly T[];\n \"aria-label\": string;\n size?: \"compact\" | \"comfortable\";\n selectionMode?: \"none\" | \"single\" | \"multi\" | \"checkbox\";\n selectedIds?: Set<string>;\n onSelectionChange?: (ids: Set<string>) => void;\n onActivate?: (node: T) => void;\n /** Called when the pointer enters a tree node row. */\n onHover?: (node: T) => void;\n /** Called when the pointer leaves a tree node row. */\n onHoverEnd?: (node: T) => void;\n openByDefault?: boolean;\n searchTerm?: string;\n searchMatch?: (node: T, term: string) => boolean;\n height?: number;\n indent?: number;\n disableDrag?: boolean;\n disableDrop?: boolean;\n treeRef?: React.Ref<TreeApi<T>>;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Row heights */\n/* ------------------------------------------------------------------ */\n\nconst rowHeightMap = {\n compact: 32,\n comfortable: 40,\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Node renderer */\n/* ------------------------------------------------------------------ */\n\nfunction NodeRenderer<T extends TreeNode>({\n node,\n style,\n tree,\n dragHandle,\n checkedIds,\n onCheckToggle,\n selectionMode,\n onHover,\n onHoverEnd,\n}: NodeRendererProps<T> & {\n checkedIds: Set<string>;\n onCheckToggle: (id: string) => void;\n selectionMode: string;\n onHover?: (node: T) => void;\n onHoverEnd?: (node: T) => void;\n}) {\n const data = node.data;\n const isCheckbox = selectionMode === \"checkbox\";\n const isChecked = isCheckbox && checkedIds.has(node.id);\n\n const IconComponent: LucideIcon = data.icon\n ? data.icon\n : node.isInternal\n ? Folder\n : File;\n\n return (\n <div\n ref={dragHandle}\n style={style}\n className={[\n \"flex items-center gap-1 px-2 cursor-default select-none\",\n \"text-[length:var(--font-size-sm)] text-[var(--color-text-primary)]\",\n \"outline-none\",\n \"transition-colors\",\n node.isSelected && !isCheckbox\n ? \"bg-[var(--color-teal-50)]\"\n : \"hover:bg-[var(--color-teal-50)]\",\n node.isFocused\n ? \"ring-2 ring-inset ring-[var(--color-border-focus)]\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n role=\"treeitem\"\n aria-selected={isCheckbox ? isChecked : node.isSelected}\n aria-expanded={node.isInternal ? node.isOpen : undefined}\n onPointerEnter={() => onHover?.(node.data)}\n onPointerLeave={() => onHoverEnd?.(node.data)}\n onClick={(e) => {\n if (isCheckbox) {\n // In checkbox mode, clicking toggles the checkbox\n onCheckToggle(node.id);\n } else {\n node.handleClick(e);\n }\n }}\n onKeyDown={(e) => {\n if (isCheckbox && (e.key === \" \" || e.key === \"Enter\")) {\n e.preventDefault();\n onCheckToggle(node.id);\n }\n }}\n >\n {/* Chevron toggle */}\n <button\n type=\"button\"\n className={[\n \"flex items-center justify-center w-5 h-5 shrink-0\",\n \"rounded-[var(--border-radius-sm)]\",\n \"text-[var(--color-text-secondary)]\",\n \"hover:text-[var(--color-text-primary)] hover:bg-[var(--color-neutral-100)]\",\n \"transition-transform\",\n node.isInternal ? \"visible\" : \"invisible\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={(e) => {\n e.stopPropagation();\n node.toggle();\n }}\n tabIndex={-1}\n aria-label={node.isOpen ? \"Collapse\" : \"Expand\"}\n >\n <ChevronRight\n size={14}\n className={[\n \"transition-transform\",\n node.isOpen ? \"rotate-90\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n />\n </button>\n\n {/* Checkbox (only in checkbox mode) */}\n {isCheckbox && (\n <div\n className={[\n \"flex items-center justify-center w-5 h-5 shrink-0\",\n \"rounded-[var(--border-radius-sm)] border transition-colors\",\n isChecked\n ? \"bg-[var(--color-action-primary)] border-[var(--color-action-primary)]\"\n : \"bg-[var(--color-surface-default)] border-[var(--color-border-default)] hover:border-[var(--color-border-strong)]\",\n ].join(\" \")}\n role=\"checkbox\"\n aria-checked={isChecked}\n aria-label={`Select ${data.name}`}\n >\n {isChecked && (\n <Check\n className=\"w-3 h-3 text-[var(--color-text-inverse)]\"\n strokeWidth={3}\n />\n )}\n </div>\n )}\n\n {/* Icon */}\n <IconComponent\n size={16}\n className=\"shrink-0 text-[var(--color-text-secondary)]\"\n aria-hidden=\"true\"\n />\n\n {/* Name */}\n <span className=\"truncate\">{data.name}</span>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Tree component */\n/* ------------------------------------------------------------------ */\n\nexport function Tree<T extends TreeNode = TreeNode>({\n data,\n \"aria-label\": ariaLabel,\n size = \"comfortable\",\n selectionMode = \"single\",\n selectedIds,\n onSelectionChange,\n onActivate,\n onHover,\n onHoverEnd,\n openByDefault = false,\n searchTerm,\n searchMatch,\n height = 400,\n indent = 24,\n disableDrag = true,\n disableDrop = true,\n treeRef,\n className,\n}: TreeProps<T>) {\n const internalRef = useRef<TreeApi<T>>(null);\n\n // Expose tree API via treeRef\n useImperativeHandle(treeRef, () => internalRef.current!, []);\n\n // Checkbox state (managed separately from react-arborist selection)\n const [internalChecked, setInternalChecked] = useState<Set<string>>(\n () => new Set(),\n );\n const checkedIds = selectedIds ?? internalChecked;\n\n const handleCheckToggle = useCallback(\n (id: string) => {\n const next = new Set(checkedIds);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n if (onSelectionChange) {\n onSelectionChange(next);\n } else {\n setInternalChecked(next);\n }\n },\n [checkedIds, onSelectionChange],\n );\n\n // Selection handling for non-checkbox modes\n const handleSelect = useCallback(\n (nodes: NodeApi<T>[]) => {\n if (selectionMode === \"checkbox\" || selectionMode === \"none\") return;\n if (onSelectionChange) {\n onSelectionChange(new Set(nodes.map((n) => n.id)));\n }\n },\n [selectionMode, onSelectionChange],\n );\n\n // Activation handling\n const handleActivate = useCallback(\n (node: NodeApi<T>) => {\n if (onActivate) {\n onActivate(node.data);\n }\n },\n [onActivate],\n );\n\n // Search match adapter: react-arborist passes NodeApi, our prop passes T\n const arboristSearchMatch = searchMatch\n ? (node: NodeApi<T>, term: string) => searchMatch(node.data, term)\n : undefined;\n\n // Selection prop for react-arborist (controls selected node by id)\n // In single mode, pass the first selectedId. In multi, arborist handles it via onSelect.\n const selectionProp =\n selectionMode === \"single\" && selectedIds && selectedIds.size > 0\n ? [...selectedIds][0]\n : undefined;\n\n return (\n <div\n role=\"tree\"\n aria-label={ariaLabel}\n className={[\"outline-none\", className].filter(Boolean).join(\" \")}\n >\n <ArboristTree<T>\n ref={internalRef}\n data={data as T[]}\n width=\"100%\"\n height={height}\n rowHeight={rowHeightMap[size]}\n indent={indent}\n openByDefault={openByDefault}\n searchTerm={searchTerm}\n searchMatch={arboristSearchMatch}\n disableDrag={disableDrag}\n disableDrop={disableDrop}\n disableMultiSelection={selectionMode === \"single\" || selectionMode === \"none\"}\n selection={selectionProp}\n onSelect={handleSelect}\n onActivate={handleActivate}\n disableEdit={true}\n >\n {(props) => (\n <NodeRenderer<T>\n {...props}\n checkedIds={checkedIds}\n onCheckToggle={handleCheckToggle}\n selectionMode={selectionMode}\n onHover={onHover}\n onHoverEnd={onHoverEnd}\n />\n )}\n </ArboristTree>\n </div>\n );\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n ToggleButtonGroup as AriaToggleButtonGroup,\n ToggleButton as AriaToggleButton,\n type ToggleButtonGroupProps as AriaToggleButtonGroupProps,\n type ToggleButtonProps as AriaToggleButtonProps,\n type Key,\n} from \"react-aria-components\";\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nexport type SegmentedControlSize = \"sm\" | \"md\" | \"lg\";\nexport type SegmentedControlSelectionMode = \"single\" | \"none\";\n\ninterface SegmentedControlContextValue {\n size: SegmentedControlSize;\n}\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n size: \"md\",\n});\n\n// ---------------------------------------------------------------------------\n// Size maps\n// ---------------------------------------------------------------------------\n\nconst sizeStyles: Record<SegmentedControlSize, string> = {\n sm: \"px-2.5 py-1 text-xs\",\n md: \"px-3 py-1.5 text-sm\",\n lg: \"px-4 py-2 text-base\",\n};\n\n// ---------------------------------------------------------------------------\n// SegmentedControl (group)\n// ---------------------------------------------------------------------------\n\nexport interface SegmentedControlProps\n extends Omit<\n AriaToggleButtonGroupProps,\n \"className\" | \"selectionMode\" | \"selectedKeys\" | \"defaultSelectedKeys\" | \"onSelectionChange\"\n > {\n /** Size preset for all items */\n size?: SegmentedControlSize;\n /** Selection behavior: \"single\" keeps one item selected, \"none\" means buttons fire actions without staying selected */\n selectionMode?: SegmentedControlSelectionMode;\n /** The currently selected keys (controlled, only for selectionMode=\"single\") */\n selectedKeys?: Iterable<Key>;\n /** The initial selected keys (uncontrolled, only for selectionMode=\"single\") */\n defaultSelectedKeys?: Iterable<Key>;\n /** Called when selection changes (only for selectionMode=\"single\") */\n onSelectionChange?: (keys: Set<Key>) => void;\n /** Additional CSS classes */\n className?: string;\n children: ReactNode;\n}\n\nexport function SegmentedControl({\n size = \"md\",\n selectionMode = \"single\",\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n className,\n children,\n ...props\n}: SegmentedControlProps) {\n // For \"none\" mode: pass selectionMode=\"single\" to RAC but force selection to empty\n const isNoneMode = selectionMode === \"none\";\n\n return (\n <SegmentedControlContext.Provider value={{ size }}>\n <AriaToggleButtonGroup\n {...props}\n selectionMode=\"single\"\n selectedKeys={isNoneMode ? new Set<Key>() : selectedKeys}\n defaultSelectedKeys={isNoneMode ? undefined : defaultSelectedKeys}\n onSelectionChange={isNoneMode ? undefined : onSelectionChange}\n className={twMerge(\n \"inline-flex items-center rounded-[var(--border-radius-lg)] border border-[var(--color-border-default)] bg-[var(--color-surface-muted)] p-0.5 gap-0.5\",\n className,\n )}\n >\n {children}\n </AriaToggleButtonGroup>\n </SegmentedControlContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// SegmentedControlItem (button)\n// ---------------------------------------------------------------------------\n\nexport interface SegmentedControlItemProps\n extends Omit<AriaToggleButtonProps, \"className\"> {\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function SegmentedControlItem({\n className,\n ...props\n}: SegmentedControlItemProps) {\n const { size } = useContext(SegmentedControlContext);\n\n return (\n <AriaToggleButton\n {...props}\n className={({ isSelected, isHovered, isPressed, isDisabled }) =>\n twMerge(\n // Base layout\n \"inline-flex items-center justify-center\",\n \"rounded-[var(--border-radius-md)]\",\n \"font-[var(--font-weight-medium)]\",\n \"outline-none transition-colors cursor-pointer\",\n\n // Focus ring\n \"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-1\",\n\n // Disabled\n isDisabled && \"opacity-50 pointer-events-none\",\n\n // Size\n sizeStyles[size],\n\n // Selected state\n isSelected\n ? \"bg-[var(--color-surface-default)] text-[var(--color-text-primary)] shadow-sm font-[var(--font-weight-semibold)]\"\n : isPressed\n ? \"bg-[var(--color-surface-subtle)] text-[var(--color-text-primary)]\"\n : isHovered\n ? \"bg-[var(--color-surface-subtle)] text-[var(--color-text-primary)]\"\n : \"bg-transparent text-[var(--color-text-secondary)]\",\n\n className,\n )\n }\n />\n );\n}\n","import type React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { AlertCircle, Database, Info } from \"lucide-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../Icon\";\nimport { IconButton } from \"../IconButton\";\nimport { Spinner } from \"../Spinner\";\n\nexport interface StorageConnectionCardProps {\n /** Display name for the connection */\n name: string;\n /** Cloud provider identifier (e.g., \"aws\", \"minio\", \"azure\", \"gcp\") */\n provider: string;\n /** AWS region or equivalent */\n region?: string;\n /** Connection health status */\n status: \"connected\" | \"error\" | \"loading\";\n /** Human-readable error message when status is \"error\" */\n errorMessage?: string;\n /** Number of viewable images in the bucket */\n imageCount?: number;\n /** Children rendered in the preview area (e.g., an actual tile viewer, or an img) */\n children?: React.ReactNode;\n /** Navigation target — clicking the card navigates here */\n href?: string;\n /** Info button handler */\n onInfo?: () => void;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport const statusDotStyles = {\n connected: \"bg-emerald-500\",\n error: \"bg-red-500\",\n loading: \"bg-amber-500 animate-pulse\",\n} as const;\n\nconst providerConfig: Record<string, { label: string; color: string }> = {\n aws: { label: \"AWS\", color: \"bg-orange-100 text-orange-700\" },\n azure: { label: \"Azure\", color: \"bg-blue-100 text-blue-700\" },\n gcp: { label: \"GCP\", color: \"bg-sky-100 text-sky-700\" },\n minio: { label: \"MinIO\", color: \"bg-red-100 text-red-700\" },\n};\n\nexport function ProviderBadge({ provider }: { provider: string }) {\n const config = providerConfig[provider.toLowerCase()];\n const label = config?.label ?? provider;\n const colorClass = config?.color ?? \"bg-neutral-100 text-neutral-700\";\n\n return (\n <span\n className={twMerge(\n \"inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium\",\n colorClass,\n )}\n >\n {label}\n </span>\n );\n}\n\nfunction PreviewArea({\n status,\n errorMessage,\n children,\n}: Pick<StorageConnectionCardProps, \"status\" | \"errorMessage\" | \"children\">) {\n if (status === \"loading\") {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <Spinner size=\"lg\" aria-label=\"Loading connection\" />\n </div>\n );\n }\n\n if (status === \"error\") {\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-2 bg-red-950/20 px-4\">\n <Icon\n icon={AlertCircle}\n size=\"lg\"\n className=\"text-red-400\"\n />\n {errorMessage && (\n <p className=\"text-center text-xs text-red-300\">{errorMessage}</p>\n )}\n </div>\n );\n }\n\n if (children) {\n return <div className=\"h-full w-full overflow-hidden\">{children}</div>;\n }\n\n return (\n <div className=\"flex h-full items-center justify-center\">\n <Icon\n icon={Database}\n size=\"xl\"\n className=\"text-[var(--color-neutral-600)]\"\n />\n </div>\n );\n}\n\nexport function StorageConnectionCard({\n name,\n provider,\n region,\n status,\n errorMessage,\n imageCount,\n children,\n href,\n onInfo,\n className,\n}: StorageConnectionCardProps) {\n const cardContent = (\n <>\n {/* Preview area */}\n <div className=\"aspect-[4/3] bg-[var(--color-neutral-900)] overflow-hidden rounded-t-[var(--border-radius-lg)]\">\n <PreviewArea status={status} errorMessage={errorMessage}>\n {children}\n </PreviewArea>\n </div>\n\n {/* Info bar */}\n <div className=\"flex flex-col gap-1.5 border-t border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-2.5 rounded-b-[var(--border-radius-lg)]\">\n {/* Top row: status dot + name + info button */}\n <div className=\"flex items-start gap-2\">\n <span\n className={twMerge(\n \"mt-1.5 h-2 w-2 shrink-0 rounded-full\",\n statusDotStyles[status],\n )}\n aria-label={`Status: ${status}`}\n />\n <span className=\"min-w-0 flex-1 line-clamp-2 text-sm font-medium text-[var(--color-text-primary)]\">\n {name}\n </span>\n {onInfo && (\n <IconButton\n icon={Info}\n aria-label=\"Connection info\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"shrink-0 -mt-1 -mr-1\"\n onPress={() => {\n onInfo();\n }}\n />\n )}\n </div>\n\n {/* Bottom row: provider badge + region + image count */}\n <div className=\"flex items-center gap-2 pl-4\">\n <ProviderBadge provider={provider} />\n {region && (\n <span className=\"shrink-0 text-xs text-[var(--color-text-secondary)]\">\n {region}\n </span>\n )}\n {imageCount != null && status === \"connected\" && (\n <span className=\"ml-auto shrink-0 text-xs tabular-nums text-[var(--color-text-tertiary)]\">\n {imageCount} {imageCount === 1 ? \"image\" : \"images\"}\n </span>\n )}\n </div>\n </div>\n </>\n );\n\n const baseStyles = twMerge(\n \"flex flex-col overflow-hidden rounded-[var(--border-radius-lg)]\",\n \"border border-[var(--color-border-default)]\",\n \"shadow-sm transition-all\",\n href && \"hover:border-[var(--color-border-focus)] hover:shadow-md cursor-pointer\",\n className,\n );\n\n if (href) {\n return (\n <a href={href} className={twMerge(baseStyles, \"no-underline\")}>\n {cardContent}\n </a>\n );\n }\n\n return <div className={baseStyles}>{cardContent}</div>;\n}\n","/**\n * Do not edit directly, this file was auto-generated.\n */\n\nexport const ColorPurple50 = \"#f5f0fa\";\nexport const ColorPurple100 = \"#ead9f5\";\nexport const ColorPurple200 = \"#d4b3eb\";\nexport const ColorPurple300 = \"#b87ddb\";\nexport const ColorPurple400 = \"#9b4fcb\";\nexport const ColorPurple500 = \"#7a2ea8\";\nexport const ColorPurple600 = \"#6b2695\";\nexport const ColorPurple700 = \"#5c2483\";\nexport const ColorPurple800 = \"#4a1d6a\";\nexport const ColorPurple900 = \"#3a1754\";\nexport const ColorTeal50 = \"#edf9f9\";\nexport const ColorTeal100 = \"#d0f0f0\";\nexport const ColorTeal200 = \"#a1e1e2\";\nexport const ColorTeal300 = \"#6dd0d1\";\nexport const ColorTeal400 = \"#44c4c5\";\nexport const ColorTeal500 = \"#35b7b8\";\nexport const ColorTeal600 = \"#2a9b9c\";\nexport const ColorTeal700 = \"#217d7e\";\nexport const ColorTeal800 = \"#1a6364\";\nexport const ColorTeal900 = \"#144d4e\";\nexport const ColorGreen50 = \"#f0fdf4\";\nexport const ColorGreen100 = \"#dcfce7\";\nexport const ColorGreen200 = \"#bbf7d0\";\nexport const ColorGreen300 = \"#86efac\";\nexport const ColorGreen400 = \"#4ade80\";\nexport const ColorGreen500 = \"#22c55e\";\nexport const ColorGreen600 = \"#16a34a\";\nexport const ColorGreen700 = \"#15803d\";\nexport const ColorGreen800 = \"#166534\";\nexport const ColorGreen900 = \"#14532d\";\nexport const ColorRose50 = \"#fff1f2\";\nexport const ColorRose100 = \"#ffe4e6\";\nexport const ColorRose200 = \"#fecdd3\";\nexport const ColorRose300 = \"#fda4af\";\nexport const ColorRose400 = \"#fb7185\";\nexport const ColorRose500 = \"#f43f5e\";\nexport const ColorRose600 = \"#e11d48\";\nexport const ColorRose700 = \"#be123c\";\nexport const ColorRose800 = \"#9f1239\";\nexport const ColorRose900 = \"#881337\";\nexport const ColorSlate50 = \"#f8fafc\";\nexport const ColorSlate100 = \"#f1f5f9\";\nexport const ColorSlate200 = \"#e2e8f0\";\nexport const ColorSlate300 = \"#cbd5e1\";\nexport const ColorSlate400 = \"#94a3b8\";\nexport const ColorSlate500 = \"#64748b\";\nexport const ColorSlate600 = \"#475569\";\nexport const ColorSlate700 = \"#334155\";\nexport const ColorSlate800 = \"#1e293b\";\nexport const ColorSlate900 = \"#0f172a\";\nexport const ColorNeutral0 = \"#ffffff\";\nexport const ColorNeutral50 = \"#f9fafb\";\nexport const ColorNeutral100 = \"#f3f4f6\";\nexport const ColorNeutral200 = \"#e5e7eb\";\nexport const ColorNeutral300 = \"#d1d5db\";\nexport const ColorNeutral400 = \"#9ca3af\";\nexport const ColorNeutral500 = \"#6b7280\";\nexport const ColorNeutral600 = \"#4b5563\";\nexport const ColorNeutral700 = \"#374151\";\nexport const ColorNeutral800 = \"#1f2937\";\nexport const ColorNeutral900 = \"#111827\";\nexport const ColorNeutral950 = \"#030712\";\nexport const ColorNeutral1000 = \"#000000\";\nexport const ColorBrandPrimary = \"#5c2483\";\nexport const ColorBrandAccent = \"#35b7b8\";\nexport const ColorActionPrimary = \"#35b7b8\";\nexport const ColorActionPrimaryHover = \"#2a9b9c\";\nexport const ColorActionPrimaryActive = \"#217d7e\";\nexport const ColorActionSecondary = \"#5c2483\";\nexport const ColorActionSecondaryHover = \"#6b2695\";\nexport const ColorActionDanger = \"#e11d48\";\nexport const ColorActionDangerHover = \"#be123c\";\nexport const ColorActionSuccess = \"#16a34a\";\nexport const ColorActionSuccessHover = \"#15803d\";\nexport const ColorActionInfo = \"#475569\";\nexport const ColorActionInfoHover = \"#334155\";\nexport const ColorActionDefault = \"#1e293b\";\nexport const ColorActionDefaultHover = \"#334155\";\nexport const ColorTextPrimary = \"#111827\";\nexport const ColorTextSecondary = \"#4b5563\";\nexport const ColorTextTertiary = \"#9ca3af\";\nexport const ColorTextInverse = \"#ffffff\";\nexport const ColorTextBrand = \"#5c2483\";\nexport const ColorTextAccent = \"#35b7b8\";\nexport const ColorTextDanger = \"#e11d48\";\nexport const ColorTextSuccess = \"#16a34a\";\nexport const ColorTextInfo = \"#475569\";\nexport const ColorTextWarning = \"#d97706\";\nexport const ColorSurfaceDefault = \"#ffffff\";\nexport const ColorSurfaceSubtle = \"#f9fafb\";\nexport const ColorSurfaceMuted = \"#f3f4f6\";\nexport const ColorSurfaceBrand = \"#5c2483\";\nexport const ColorSurfaceAccent = \"#35b7b8\";\nexport const ColorSurfaceDanger = \"#fff1f2\";\nexport const ColorSurfaceSuccess = \"#f0fdf4\";\nexport const ColorSurfaceWarning = \"#fffbeb\";\nexport const ColorSurfaceInfo = \"#f8fafc\";\nexport const ColorSurfaceOverlay = \"#000000cc\";\nexport const ColorBorderDefault = \"#e5e7eb\";\nexport const ColorBorderStrong = \"#d1d5db\";\nexport const ColorBorderBrand = \"#5c2483\";\nexport const ColorBorderAccent = \"#35b7b8\";\nexport const ColorBorderFocus = \"#35b7b8\";\nexport const ColorBorderDanger = \"#e11d48\";\nexport const ColorBorderSuccess = \"#16a34a\";\nexport const ColorBorderInfo = \"#94a3b8\";\nexport const ColorBorderWarning = \"#d97706\";\nexport const ColorOverlayBackdrop = \"#00000066\";\nexport const Spacing1 = \"4px\";\nexport const Spacing2 = \"8px\";\nexport const Spacing3 = \"12px\";\nexport const Spacing4 = \"16px\";\nexport const Spacing6 = \"24px\";\nexport const Spacing8 = \"32px\";\nexport const Spacing12 = \"48px\";\nexport const Spacing16 = \"64px\";\nexport const BorderRadiusNone = \"0px\";\nexport const BorderRadiusSm = \"4px\";\nexport const BorderRadiusMd = \"8px\";\nexport const BorderRadiusLg = \"12px\";\nexport const BorderRadiusXl = \"16px\";\nexport const BorderRadiusFull = \"9999px\";\nexport const FontSizeXs = \"12px\";\nexport const FontSizeSm = \"14px\";\nexport const FontSizeBase = \"16px\";\nexport const FontSizeLg = \"18px\";\nexport const FontSizeXl = \"20px\";\nexport const FontSize2xl = \"24px\";\nexport const FontSize3xl = \"30px\";\nexport const FontSize4xl = \"36px\";\nexport const FontSize5xl = \"48px\";\nexport const FontWeightLight = 300;\nexport const FontWeightRegular = 400;\nexport const FontWeightMedium = 500;\nexport const FontWeightSemibold = 600;\nexport const FontWeightBold = 700;\nexport const FontWeightExtrabold = 800;\nexport const LineHeightTight = 1.25;\nexport const LineHeightNormal = 1.5;\nexport const LineHeightRelaxed = 1.625;\n"],"mappings":";;;AAGA,SAAS,sBAAsB;;;ACD/B;AAAA,EACE,UAAU;AAAA,OAEL;AACP,SAAS,eAAe;;;ACMjB,IAAM,gBAA+C;AAAA,EAC1D,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACZ;AAEO,IAAM,aAAyC;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;;;AC7BI;AAjBJ,IAAM,UAAU;AAAA,EACd,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,KAAK;AAAA,EACnB,MAAM;AAAA,EACN,OAAO;AAAA,EACP;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAAc;AACZ,QAAM,eAAe,CAAC;AAEtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,QAAQ,IAAI;AAAA,MAClB;AAAA,MACA,MAAM,eAAe,SAAY;AAAA,MACjC,cAAY;AAAA,MACZ,eAAa,eAAe,SAAS;AAAA,MACrC;AAAA;AAAA,EACF;AAEJ;;;AClBI,SAUE,OAAAA,MAVF;AAdJ,IAAMC,WAAU;AAAA,EACd,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AACF,GAAiB;AACf,QAAM,eAAe,CAAC;AAEtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,eAAe,SAAY;AAAA,MACjC,cAAY;AAAA,MACZ,eAAa,eAAe,SAAS;AAAA,MACrC,WAAW,CAACA,SAAQ,IAAI,GAAG,gBAAgB,SAAS,EACjD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,SAAQ;AAAA,MACR,MAAK;AAAA,MAEL;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA;AAAA,QACd;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,GAAE;AAAA;AAAA,QACJ;AAAA;AAAA;AAAA,EACF;AAEJ;;;AChDA,SAAS,eAAe,kBAAkB;AASnC,IAAM,oBAAoB,cAAsC;AAAA,EACrE,SAAS;AAAA,EACT,UAAU;AACZ,CAAC;AAEM,SAAS,gBAAgB;AAC9B,SAAO,WAAW,iBAAiB;AACrC;;;AJgEI,SAkBgB,OAAAE,MAlBhB,QAAAC,aAAA;AAhDJ,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAS,iBACP,UACQ;AACR,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,OAAO;AAAA,EACrB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgB;AACd,QAAM,EAAE,SAAS,SAAS,IAAI,cAAc;AAE5C,QAAM,cAAc,UAChB,iBAAiB,QAAQ,IACzB;AAEJ,QAAM,cACJ,WAAW,aAAa,WAAW,aAAa,eAC5C,WACA;AAEN,QAAM,YAAY,UACd,uHACA;AAEJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,YAAY,cAAc;AAAA,MAC1B,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,wBAAwB;AAAA,QACpC,cAAc,OAAO;AAAA,QACrB,WAAW,IAAI;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA,qBAAa,gBAAAD,KAAC,WAAQ,MAAM,YAAY,IAAI,GAAG;AAAA,QAC/C,CAAC,aAAa,YACb,gBAAAA,KAAC,QAAK,MAAM,UAAU,MAAM,YAAY,IAAI,GAAG;AAAA,QAEhD;AAAA,QACA,CAAC,aAAa,aACb,gBAAAA,KAAC,QAAK,MAAM,WAAW,MAAM,YAAY,IAAI,GAAG;AAAA;AAAA;AAAA,EAEpD;AAEJ;;;AK3GA;AAAA,EACE,WAAW;AAAA,EACX;AAAA,OAEK;AAuBH,SAEE,OAAAE,MAFF,QAAAC,aAAA;AARG,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR;AACF,GAAiB;AACf,SACE,gBAAAA,MAAC,kBAAe,OACb;AAAA;AAAA,IACD,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QAEV;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;;;ACpDA;AAAA,EACE,UAAUE;AAAA,OAEL;AAqGC,gBAAAC,YAAA;AA3ER,IAAM,mBAAmB;AAAA,EACvB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAMC,eAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAASC,kBACP,UACQ;AACR,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,EAAE,SAAS,SAAS,IAAI,cAAc;AAE5C,QAAM,cAAc,UAChBA,kBAAiB,QAAQ,IACzB;AAEJ,QAAM,cACJ,WAAW,aAAa,WAAW,aAAa,eAC5C,WACA;AAEN,QAAM,YAAY,UACd,uHACA;AAEJ,QAAM,SACJ,gBAAAF;AAAA,IAACG;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,cAAY;AAAA,MACZ,YAAY,cAAc;AAAA,MAC1B,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,wBAAwB;AAAA,QACpC,cAAc,OAAO;AAAA,QACrB,iBAAiB,IAAI;AAAA,QACrB;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,sBACC,gBAAAH,KAAC,WAAQ,MAAMC,aAAY,IAAI,GAAG,IAElC,gBAAAD,KAAC,QAAK,MAAY,MAAMC,aAAY,IAAI,GAAG;AAAA;AAAA,EAE/C;AAGF,MAAI,aAAa;AACf,WACE,gBAAAD,KAAC,WAAQ,SAAS,WAAW,WAAW,kBACrC,kBACH;AAAA,EAEJ;AAEA,SAAO;AACT;;;ACzHA;AAAA,EACE;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,OAEK;AA2GC,SASI,OAAAI,MATJ,QAAAC,aAAA;AAxGR,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,oBAAoB;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT;AA4BA,SAAS,mBACP,UACQ;AACR,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,QAAM,YAAY,CAAC,CAAC;AACpB,QAAM,EAAE,SAAS,SAAS,IAAI,cAAc;AAE5C,QAAM,cAAc,YAChB,wCACA;AAEJ,QAAM,cAAc,UAChB,mBAAmB,QAAQ,IAC3B;AAGJ,QAAM,cAAc,WAAW,aAAa,WAAW,aAAa,eAAe,WAAW;AAE9F,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,UAAU,mBAAmB;AAAA,QAC7B;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA,iBACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YACF,EAAE,KAAK,GAAG;AAAA,YAET;AAAA;AAAA,cACA,cACC,gBAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAY;AAAA,kBACZ,WAAU;AAAA,kBACX;AAAA;AAAA,cAED;AAAA;AAAA;AAAA,QAEJ;AAAA,QAGD,SACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,UAAU,sBAAsB;AAAA,cAChC,aAAa,mCAAmC;AAAA,YAClD,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YAEX;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,kBAAkB,IAAI;AAAA,kBACxB,EAAE,KAAK,GAAG;AAAA,kBAET;AAAA;AAAA,cACH;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,WAAW;AAAA,oBACT;AAAA,oBACA,YAAY,IAAI;AAAA,oBAChB,aAAa,KAAK;AAAA,oBAClB;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,EAAE,KAAK,GAAG;AAAA;AAAA,cACZ;AAAA;AAAA;AAAA,QACF,IAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAW;AAAA,cACT;AAAA,cACA,YAAY,IAAI;AAAA,cAChB,aAAa,KAAK;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,UAAU,eAAe;AAAA,cACzB;AAAA,YACF,EAAE,KAAK,GAAG;AAAA;AAAA,QACZ;AAAA,QAGD,eAAe,CAAC,aACf,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA,QAGD,aACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;ACnNA;AAAA,EACE,UAAAE;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,OAGK;AA+BD,SAgHU,UAhHV,OAAAC,MA0CA,QAAAC,aA1CA;AAZN,SAAS,cAAc;AACrB,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MAEf,0BAAAA,KAAC,UAAK,GAAE,gBAAe;AAAA;AAAA,EACzB;AAEJ;AAEA,SAAS,YAAY;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MAEf,0BAAAA,KAAC,UAAK,GAAE,wBAAuB;AAAA;AAAA,EACjC;AAEJ;AAEO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgB;AACd,QAAM,WAAW,QAAQ,YAAY;AAErC,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,WAAW,CAAC,uBAAuB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAEtE;AAAA,wBAAAA;AAAA,UAACF;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,YACF,EAAE,KAAK,GAAG;AAAA,YAET;AAAA;AAAA,cACA,cACC,gBAAAC;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAY;AAAA,kBACZ,WAAU;AAAA,kBACX;AAAA;AAAA,cAED;AAAA;AAAA;AAAA,QAEJ;AAAA,QAEA,gBAAAC;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,WACI,wCACA;AAAA,cACJ;AAAA,cACA;AAAA,cACA;AAAA,YACF,EAAE,KAAK,GAAG;AAAA,YAEV;AAAA,8BAAAE,KAAC,eAAY,WAAU,iEACpB,WAAC,EAAE,aAAa,MAAM,gBAAgB,aACzC;AAAA,cACA,gBAAAA,KAAC,eAAY;AAAA;AAAA;AAAA,QACf;AAAA,QAEC,YACC,gBAAAA,KAAC,UAAK,WAAU,2CACb,wBACH;AAAA,QAGF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,EAAE,KAAK,GAAG;AAAA,YAEV,0BAAAA,KAAC,WAAQ,WAAU,oBAAmB,OACnC,WAAC,SACA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI,KAAK;AAAA,gBACT,WAAW,KAAK;AAAA,gBAChB,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF,EAAE,KAAK,GAAG;AAAA,gBAET,WAAC,EAAE,WAAW,MACb,gBAAAC,MAAA,YACE;AAAA,kCAAAD,KAAC,UAAK,WAAU,YAAY,eAAK,MAAK;AAAA,kBACrC,cAAc,gBAAAA,KAAC,aAAU;AAAA,mBAC5B;AAAA;AAAA,YAEJ,GAEJ;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACpKA;AAAA,EACE,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,eAAe;AAAA,OAOV;AAoBH,gBAAAE,MAqCI,QAAAC,aArCJ;AAPJ,IAAM,iBAA4C;AAAA,EAChD,SAAS;AAAA,EACT,aAAa;AACf;AAEO,SAAS,MAAM,EAAE,OAAO,eAAe,WAAW,GAAG,MAAM,GAAmB;AACnF,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA,eAAe,IAAI;AAAA,QACnB;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA;AAAA,EACb;AAEJ;AAMO,SAAS,YAA8B,OAA4B;AACxE,SAAO,gBAAAA,KAAC,mBAAiB,GAAG,OAAO;AACrC;AAMO,SAAS,OAAO,OAAoB;AACzC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,GAAG;AAAA,MAET,WAAC,EAAE,eAAe,cAAc,MAC/B,gBAAAC,MAAC,UAAK,WAAU,kCACb;AAAA,cAAM;AAAA,QACN,iBACC,gBAAAD,KAAC,UAAK,eAAY,QAAO,WAAU,qCAChC,4BAAkB,cAAc,WAAW,kBAAkB,eAAe,WAAW,UAC1F;AAAA,SAEJ;AAAA;AAAA,EAEJ;AAEJ;AAMO,SAAS,UAA4B,OAA0B;AACpE,SAAO,gBAAAA,KAAC,iBAAe,GAAG,OAAO;AACnC;AAMO,SAAS,IAAsB,OAAoB;AACxD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,GAAG;AAAA;AAAA,EACZ;AAEJ;AAMO,SAAS,KAAK,OAAkB;AACrC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,GAAG;AAAA;AAAA,EACZ;AAEJ;;;AC9HA;AAAA,EACE;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,OAEK;AACP,SAAS,SAAS;AAuDN,qBAAAE,WAEI,OAAAC,MADF,QAAAC,aADF;AA1CZ,IAAMC,cAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB;AAAA,EACA;AACF,GAAgB;AACd,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,GAAG;AAAA,MAEV,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACAE,YAAW,IAAI;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UAEX,0BAAAF,KAAC,cAAW,WAAU,2CACnB,WAAC,EAAE,MAAM,MACR,gBAAAC,MAAAF,WAAA,EACE;AAAA,4BAAAE,MAAC,SAAI,WAAU,6FACb;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBAET;AAAA;AAAA,cACH;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,EAAE,KAAK,GAAG;AAAA,kBACV,cAAW;AAAA,kBAEX,0BAAAA,KAAC,KAAE,MAAM,IAAI,eAAY,QAAO;AAAA;AAAA,cAClC;AAAA,eACF;AAAA,YACA,gBAAAA,KAAC,SAAI,WAAU,6BAA6B,UAAS;AAAA,aACvD,GAEJ;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AC5FA;AAAA,EACE,iBAAAG;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,oBAAoB;AAC7B,SAAS,aAAa,SAAS,MAAM,KAAAC,UAAS;AA2E1C,SAaE,OAAAC,OAbF,QAAAC,aAAA;AAzDJ,IAAM,eAAeJ,eAAwC,IAAI;AAEjE,IAAI,eAAe;AAEnB,IAAM,kBAAgD;AAAA,EACpD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AACT;AAEA,IAAM,gBAGF;AAAA,EACF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,WAAW;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,WAAW;AAAA,EACb;AACF;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,WAAW,OAA6C,IAAI;AAClE,QAAM,SAAS,cAAc,MAAM,OAAO;AAC1C,QAAM,gBAAgB,OAAO;AAE7B,QAAM,UAAU,YAAY,MAAM;AAChC,iBAAa,IAAI;AACjB,eAAW,MAAM,SAAS,MAAM,EAAE,GAAG,GAAG;AAAA,EAC1C,GAAG,CAAC,UAAU,MAAM,EAAE,CAAC;AAEvB,YAAU,MAAM;AACd,UAAM,WAAW,MAAM,YAAY,gBAAgB,MAAM,OAAO;AAChE,aAAS,UAAU,WAAW,SAAS,QAAQ;AAC/C,WAAO,MAAM;AACX,UAAI,SAAS,QAAS,cAAa,SAAS,OAAO;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,MAAM,SAAS,OAAO,CAAC;AAE3C,SACE,gBAAAI;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,YACI,+BACA;AAAA,QACJ,OAAO;AAAA,MACT,EAAE,KAAK,GAAG;AAAA,MAEV;AAAA,wBAAAD,MAAC,iBAAc,MAAM,IAAI,WAAW,CAAC,mBAAmB,OAAO,SAAS,EAAE,KAAK,GAAG,GAAG,eAAY,QAAO;AAAA,QACxG,gBAAAA,MAAC,OAAE,WAAU,8BAA8B,gBAAM,SAAQ;AAAA,QACzD,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,cAAW;AAAA,YAEX,0BAAAA,MAACD,IAAA,EAAE,MAAM,IAAI,eAAY,QAAO;AAAA;AAAA,QAClC;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,eAAe,EAAE,QAAQ,YAAY,GAA+D;AAC3G,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,SAAO;AAAA,IACL,gBAAAC,MAAC,SAAI,WAAU,mDACZ,iBAAO,IAAI,CAAC,UACX,gBAAAA,MAAC,aAAyB,OAAc,UAAU,eAAlC,MAAM,EAAyC,CAChE,GACH;AAAA,IACA,SAAS;AAAA,EACX;AACF;AAaO,SAAS,oBAAiC;AAC/C,QAAM,YAAY,oBAAI,IAA4C;AAClE,SAAO;AAAA,IACL,MAAM,CAAC,UAAU;AACf,gBAAU,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;AAAA,IACrC;AAAA,IACA,WAAW,CAAC,OAAO;AACjB,gBAAU,IAAI,EAAE;AAChB,aAAO,MAAM;AACX,kBAAU,OAAO,EAAE;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAYO,SAAS,cAAc,EAAE,UAAU,OAAO,GAAuB;AACtE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAsB,CAAC,CAAC;AAEpD,QAAM,WAAW,YAAY,CAAC,UAAiC;AAC7D,UAAM,KAAK,SAAS,EAAE,YAAY;AAClC,cAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC;AAAA,EACjD,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,CAAC,OAAe;AAC9C,cAAU,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,EACrD,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,WAAO,OAAO,UAAU,QAAQ;AAAA,EAClC,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,SACE,gBAAAC,MAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,QAAQ,UAAU,YAAY,GAC3D;AAAA;AAAA,IACD,gBAAAD,MAAC,kBAAe,QAAgB,aAA0B;AAAA,KAC5D;AAEJ;AAEO,SAAS,WAAW;AACzB,QAAM,UAAUF,YAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,aAAa,QAAQ;AAAA,EACvB;AACF;;;ACjLI,SASI,OAAAI,OATJ,QAAAC,aAAA;AARG,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA,gBACC,gBAAAD,MAAC,QAAK,MAAY,MAAK,MAAK,WAAU,qCAAoC;AAAA,QAE5E,gBAAAA,MAAC,QAAG,WAAU,+DACX,iBACH;AAAA,QACC,eACC,gBAAAA,MAAC,OAAE,WAAU,4DACV,uBACH;AAAA,QAED,UAAU,gBAAAA,MAAC,SAAI,WAAU,QAAQ,kBAAO;AAAA;AAAA;AAAA,EAC3C;AAEJ;;;ACzCA;AAAA,EACE,YAAY;AAAA,OAEP;AACP,SAAS,aAAa;AAqBd,qBAAAE,WAYM,OAAAC,OAXJ,QAAAC,cADF;AAbD,SAAS,SAAS,EAAE,UAAU,WAAW,GAAG,MAAM,GAAkB;AACzE,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,WAAC,EAAE,YAAY,gBAAgB,MAC9B,gBAAAC,OAAAF,WAAA,EACE;AAAA,wBAAAE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA,cAAc,kBACV,0EACA;AAAA,YACN,EAAE,KAAK,GAAG;AAAA,YAET;AAAA,4BACC,gBAAAD,MAAC,SAAM,WAAU,4CAA2C,aAAa,GAAG;AAAA,cAE7E,mBACC,gBAAAA,MAAC,SAAI,WAAU,yDAAwD;AAAA;AAAA;AAAA,QAE3E;AAAA,QACC,YAAY,gBAAAA,MAAC,UAAM,UAAS;AAAA,SAC/B;AAAA;AAAA,EAEJ;AAEJ;;;AChDA;AAAA,EACE,UAAU;AAAA,OAEL;AA4CC,qBAAAE,WAiBI,OAAAC,OAjBJ,QAAAC,cAAA;AAhCR,IAAM,gBAA6C;AAAA,EACjD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AACf;AAEA,IAAM,eAAe,IAAI,IAAY,OAAO,KAAK,aAAa,CAAC;AAE/D,SAAS,cAAc,OAAqC;AAC1D,SAAO,aAAa,IAAI,KAAK;AAC/B;AAEO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAgB;AACd,QAAM,WAAW,cAAc,KAAK;AAEpC,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,WAAC,EAAE,WAAW,MACb,gBAAAC,OAAAF,WAAA,EACE;AAAA,wBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,cAAc,WACV,cAAc,KAAK,IACnB,CAAC,aACC,oCACA;AAAA,YACR,EAAE,KAAK,GAAG;AAAA,YACV,OACE,cAAc,CAAC,WACX,EAAE,iBAAiB,MAAM,IACzB;AAAA,YAGN,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,aAAa,kBAAkB;AAAA,gBACjC,EAAE,KAAK,GAAG;AAAA;AAAA,YACZ;AAAA;AAAA,QACF;AAAA,QACC,YAAY,gBAAAA,MAAC,UAAM,UAAS;AAAA,SAC/B;AAAA;AAAA,EAEJ;AAEJ;;;AC5EA;AAAA,EACE,cAAc;AAAA,EACd,SAAS;AAAA,OAGJ;AAsBH,SA4BI,YAAAE,WA5BJ,OAAAC,OA4BI,QAAAC,cA5BJ;AAFG,SAAS,WAAW,EAAE,UAAU,WAAW,GAAG,MAAM,GAAoB;AAC7E,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,MAAM,EAAE,UAAU,WAAW,GAAG,MAAM,GAAe;AACnE,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,WAAC,EAAE,WAAW,MACb,gBAAAC,OAAAF,WAAA,EACE;AAAA,wBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA,aACI,yCACA;AAAA,YACN,EAAE,KAAK,GAAG;AAAA,YAET,wBACC,gBAAAA,MAAC,SAAI,WAAU,6DAA4D;AAAA;AAAA,QAE/E;AAAA,QACC,YAAY,gBAAAA,MAAC,UAAM,UAAS;AAAA,SAC/B;AAAA;AAAA,EAEJ;AAEJ;AAEO,SAAS,YAAY,EAAE,UAAU,WAAW,GAAG,MAAM,GAAqB;AAC/E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV,WAAC,EAAE,WAAW,MACb,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA,aACI,2GACA;AAAA,UACN,EAAE,KAAK,GAAG;AAAA,UAET;AAAA;AAAA,MACH;AAAA;AAAA,EAEJ;AAEJ;;;AC1GA;AAAA,EACE,SAAS;AAAA,OAEJ;AASH,SAaI,OAAAE,OAbJ,QAAAC,cAAA;AAFG,SAASC,OAAM,EAAE,YAAY,UAAU,WAAW,GAAG,MAAM,GAAe;AAC/E,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA;AAAA,QACA,cACC,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;ACLI,SAKY,OAAAG,OALZ,QAAAC,cAAA;AAjBJ,SAAS,gBAAgB,OAAgD;AACvE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,MAAM;AACf;AAEO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAe;AACb,QAAM,eAAe,gBAAgB,KAAK;AAE1C,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,CAAC,wCAAwC,SAAS,EAC1D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA,iBAAS,gBAAAD,MAACE,QAAA,EAAM,YAAyB,iBAAM;AAAA,QAC/C;AAAA,QACA,eAAe,CAAC,gBACf,gBAAAF,MAAC,OAAE,WAAU,wEACV,uBACH;AAAA,QAED,gBACC,gBAAAA,MAAC,OAAE,WAAU,qEACV,wBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;ACtCI,SAUI,OAAAG,OAVJ,QAAAC,cAAA;AAFG,SAAS,SAAS,EAAE,QAAQ,UAAU,UAAU,GAAkB;AACvE,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA,kBACC,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,EAAE,KAAK,GAAG;AAAA,YAET;AAAA;AAAA,QACH;AAAA,QAED;AAAA;AAAA;AAAA,EACH;AAEJ;;;AClCA,OAAO,WAAW;AA4BR,gBAAAE,aAAA;AApBH,SAAS,WAAW,EAAE,UAAU,UAAU,GAAoB;AACnE,QAAM,aAAa,MAAM,SAAS,QAAQ,QAAQ,EAAE;AAAA,IAClD,MAAM;AAAA,EACR;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,CAAC,sBAAsB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAEpE,qBAAW,IAAI,CAAC,OAAO,UAAU;AAChC,cAAM,WACJ,WAAW,WAAW,IAClB,eACA,UAAU,IACR,UACA,UAAU,WAAW,SAAS,IAC5B,QACA;AAEV,eACE,gBAAAA;AAAA,UAAC,kBAAkB;AAAA,UAAlB;AAAA,YAEC,OAAO,EAAE,SAAS,MAAM,SAAS;AAAA,YAEhC;AAAA;AAAA,UAHI;AAAA,QAIP;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;;;ACFI,gBAAAC,aAAA;AA5BJ,SAASC,kBACP,UACQ;AACR,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,WAAW,EAAE,UAAU,UAAU,GAAoB;AACnE,QAAM,EAAE,SAAS,SAAS,IAAI,cAAc;AAE5C,QAAM,cAAc,UAChBA,kBAAiB,QAAQ,IACzB;AAEJ,QAAM,cACJ,WAAW,aAAa,WAAW,aAAa,eAC5C,WACA;AAEN,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA;AAAA,EACH;AAEJ;;;ACpDA,SAAS,WAAAE,gBAAe;AAmDpB,gBAAAC,aAAA;AAlCJ,IAAM,iBAAoD;AAAA,EACxD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAMC,cAA0C;AAAA,EAC9C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,eAA8C;AAAA,EAClD,UAAU;AAAA,EACV,MAAM;AACR;AAEO,SAASC,SAAQ;AAAA,EACtB,IAAI,MAAM;AAAA,EACV;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAAiB;AACf,QAAM,eAAe,QAAQ,eAAe,GAAG;AAE/C,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAWD;AAAA,QACT,aAAa,MAAM;AAAA,QACnB;AAAA,QACAE,YAAW,YAAY;AAAA,QACvB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAGO,SAAS,GAAG,OAAiC;AAClD,SACE,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,IAAG;AAAA,MACH,MAAM,MAAM,QAAQ;AAAA,MACpB,QAAQ,MAAM,UAAU;AAAA;AAAA,EAC1B;AAEJ;AAGO,SAAS,GAAG,OAAiC;AAClD,SAAO,gBAAAF,MAACE,UAAA,EAAS,GAAG,OAAO,IAAG,MAAK,MAAM,MAAM,QAAQ,MAAM;AAC/D;AAGO,SAAS,GAAG,OAAiC;AAClD,SAAO,gBAAAF,MAACE,UAAA,EAAS,GAAG,OAAO,IAAG,MAAK,MAAM,MAAM,QAAQ,MAAM;AAC/D;;;ACrFA;AAAA,EACE,QAAQ;AAAA,OAEH;AA4BH,gBAAAC,aAAA;AAjBJ,IAAMC,iBAA6C;AAAA,EACjD,SAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACZ;AAEO,SAAS,KAAK;AAAA,EACnB,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,GAAc;AACZ,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACAC,eAAc,OAAO;AAAA,QACrB;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA;AAAA,EACb;AAEJ;;;AC3CA;AAAA,EACE,eAAe;AAAA,EACf,cAAc;AAAA,EACd,QAAAC;AAAA,OACK;AACP,SAAS,oBAAoB;AAmCf,SAIA,YAAAC,WAJA,OAAAC,OAIA,QAAAC,cAJA;AAtBP,SAAS,YAAY,EAAE,OAAO,UAAU,GAAqB;AAClE,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX;AAAA,MAEF,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UAET,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,kBAAM,SAAS,UAAU,MAAM,SAAS;AAExC,mBACE,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,IAAI,KAAK;AAAA,gBACT,WAAW;AAAA,kBACT;AAAA,kBACA,SAAS,YAAY;AAAA,gBACvB,EAAE,KAAK,GAAG;AAAA,gBAET,mBACC,gBAAAA,MAAC,UAAK,WAAU,yDACb,eAAK,OACR,IAEA,gBAAAC,OAAAF,WAAA,EACE;AAAA,kCAAAC;AAAA,oBAACF;AAAA,oBAAA;AAAA,sBACC,MAAM,KAAK;AAAA,sBACX,WAAU;AAAA,sBAET,eAAK;AAAA;AAAA,kBACR;AAAA,kBACA,gBAAAE;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,MAAM;AAAA,sBACN,eAAY;AAAA;AAAA,kBACd;AAAA,mBACF;AAAA;AAAA,cAxBG,KAAK;AAAA,YA0BZ;AAAA,UAEJ,CAAC;AAAA;AAAA,MACH;AAAA;AAAA,EACA;AAEJ;;;AC9DA;AAAA,EACE,QAAQE;AAAA,OAEH;AACP,SAAS,WAAAC,gBAAe;AAyCpB,SAce,OAAAC,OAdf,QAAAC,cAAA;AAhBJ,IAAMC,eAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,WAAW;AAAA,EACzB,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,SACE,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAWC;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,OAAO;AAAA,QACrB,WAAW,IAAI;AAAA,QACf;AAAA,MACF;AAAA,MAEC;AAAA,oBAAY,gBAAAJ,MAAC,QAAK,MAAM,UAAU,MAAME,aAAY,IAAI,GAAG;AAAA,QAC3D;AAAA,QACA,aAAa,gBAAAF,MAAC,QAAK,MAAM,WAAW,MAAME,aAAY,IAAI,GAAG;AAAA;AAAA;AAAA,EAChE;AAEJ;AAqBA,IAAMG,oBAAmB;AAAA,EACvB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,OACJ,gBAAAL;AAAA,IAACG;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,cAAY;AAAA,MACZ,WAAWC;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,OAAO;AAAA,QACrBC,kBAAiB,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,MAEA,0BAAAL,MAAC,QAAK,MAAY,MAAME,aAAY,IAAI,GAAG;AAAA;AAAA,EAC7C;AAGF,MAAI,aAAa;AACf,WACE,gBAAAF,MAAC,WAAQ,SAAS,WAAW,WAAW,kBACrC,gBACH;AAAA,EAEJ;AAEA,SAAO;AACT;;;AClIA;AAAA,EACE,gBAAgB;AAAA,OAEX;AACP,SAAS,WAAAM,gBAAe;AAsEpB,gBAAAC,aAAA;AArDJ,IAAMC,cAA+C;AAAA,EACnD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAMC,oBAAqD;AAAA,EACzD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAMC,iBAAiF;AAAA,EACrF,SAAS;AAAA,IACP,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG;AAAA,IACV,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG;AAAA,EACZ;AACF;AAEO,SAAS,aAAa;AAAA,EAC3B,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,SAASA,eAAc,OAAO;AAEpC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,CAAC,EAAE,WAAW,MACvBD;AAAA,QACE;AAAA,QACA,WAAW,iBAAiB;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAWG,kBAAiB,IAAI,IAAID,YAAW,IAAI;AAAA,QACnD,aAAa,OAAO,WAAW,OAAO;AAAA,QACtC;AAAA,MACF;AAAA;AAAA,EAEJ;AAEJ;;;AC1FA;AAAA,EACE;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,WAAAG;AAAA,OACK;AAkDK,SAkBgB,OAAAC,OAlBhB,QAAAC,cAAA;AAzBL,SAAS,KAAK,EAAE,OAAO,UAAU,UAAU,GAAc;AAC9D,SACE,gBAAAA,OAAC,eACE;AAAA;AAAA,IACD,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QAEX,0BAAAF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU,CAAC,QAAQ;AACjB,oBAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG;AAC3C,oBAAM,WAAW;AAAA,YACnB;AAAA,YACA,WAAU;AAAA,YAET,WAAC,SACA,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI,KAAK;AAAA,gBACT,MAAM,KAAK;AAAA,gBACX,QAAQ,KAAK;AAAA,gBACb,YAAY,KAAK;AAAA,gBACjB,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,KAAK,WACD,oCACA;AAAA,gBACN,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,gBAEV;AAAA,uBAAK,QAAQ,gBAAAD,MAAC,QAAK,MAAM,KAAK,MAAM,MAAK,MAAK;AAAA,kBAC9C,KAAK;AAAA;AAAA;AAAA,YACR;AAAA;AAAA,QAEJ;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AClFA;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,UAAUG;AAAA,EACV,UAAUC;AAAA,OAEL;AAkCH,SA4DM,YAAAC,WA5DN,OAAAC,aAAA;AAFG,SAASC,SAAQ,EAAE,UAAU,QAAQ,aAAa,GAAiB;AACxE,SACE,gBAAAD,MAAC,iBAAc,QAAgB,cAC5B,UACH;AAEJ;AASO,SAAS,eAAe,EAAE,UAAU,UAAU,GAAwB;AAC3E,SACE,gBAAAA;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEV;AAAA;AAAA,EACH;AAEJ;AAMO,SAAS,eAAe;AAAA,EAC7B,YAAY;AAAA,EACZ,QAAQ,WAAW;AAAA,EACnB;AAAA,EACA;AACF,GAAwB;AACtB,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEX,0BAAAA,MAACH,aAAA,EAAW,WAAU,gBACnB,WAAC,EAAE,MAAM,MACR,gBAAAG,MAAAD,WAAA,EACG,iBAAO,aAAa,aACjB,SAAS,EAAE,MAAM,CAAC,IAClB,UACN,GAEJ;AAAA;AAAA,EACF;AAEJ;;;AC9GA,SAAS,iBAAAG,gBAAe,cAAAC,mBAAkC;AAC1D,SAAS,WAAAC,gBAAe;AACxB;AAAA,EACE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA,OAMP;AAwDD,gBAAAC,aAAA;AA1CN,IAAM,cAAcH,eAAgC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AACR,CAAC;AAMD,IAAMI,cAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAmBO,SAAS,KAAK;AAAA,EACnB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,SACE,gBAAAD,MAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,SAAS,KAAK,GAC3C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,WAAWD;AAAA,QACT,gBAAgB,aAAa,SAAS;AAAA,QACtC;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH,GACF;AAEJ;AAYO,SAAS,QAA0B;AAAA,EACxC;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,EAAE,QAAQ,IAAID,YAAW,WAAW;AAE1C,QAAM,aACJ,YAAY,aACR,sBACA,YAAY,cACV,oEACA;AAGR,QAAM,iBACJ,YAAY,aACR,aACA,YAAY,cACV,sEACA;AAER,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,CAAC,EAAE,YAAY,MACxBD;AAAA,QACE;AAAA,QACA,gBAAgB,aAAa,iBAAiB;AAAA,QAC9C;AAAA,MACF;AAAA;AAAA,EAEJ;AAEJ;AAWO,SAAS,IAAI,EAAE,WAAW,GAAG,MAAM,GAAa;AACrD,QAAM,EAAE,SAAS,KAAK,IAAID,YAAW,WAAW;AAEhD,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,CAAC,EAAE,YAAY,YAAY,WAAW,UAAU,MAAM;AAC/D,YAAI,YAAY,YAAY;AAC1B,iBAAOD;AAAA,YACL;AAAA,YACA;AAAA,YACA,aAAa,mCAAmC;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAEA,eAAOA;AAAA;AAAA,UAEL;AAAA,UACA;AAAA;AAAA,UAGA;AAAA;AAAA,UAGA,aAAa,mCAAmC;AAAA;AAAA,UAGhDE,YAAW,IAAI;AAAA,UAGf,GAAG,oBAAoB,SAAS;AAAA,YAC9B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UAED;AAAA,QACF;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,oBACP,SACA,OAMU;AACV,MAAI,YAAY,aAAa;AAC3B,WAAO;AAAA;AAAA,MAEL;AAAA;AAAA,MAGA,MAAM,aACF;AAAA,QACE;AAAA;AAAA,QAEA;AAAA,MACF,EAAE,KAAK,GAAG,IACV,MAAM,YACJ,mEACA,MAAM,YACJ,kEACA;AAAA,IACV;AAAA,EACF;AAGA,SAAO;AAAA;AAAA,IAEL;AAAA;AAAA,IAGA,MAAM,aACF,oHACA,MAAM,YACJ,8EACA,MAAM,YACJ,mEACA;AAAA,EACV;AACF;AAWO,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAkB;AAC/D,QAAM,EAAE,QAAQ,IAAIH,YAAW,WAAW;AAE1C,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAWD;AAAA,QACT,YAAY,aAAa,iBAAiB;AAAA,QAC1C;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;A7B9JA;AAAA,EACU,QAARG;AAAA,EACW,WAAXC;AAAA,EACO,OAAPC;AAAA,EACY,YAAZC;AAAA,OACK;;;A8B9FP,SAAS,eAAAC,cAAa,qBAAqB,UAAAC,SAAQ,YAAAC,iBAAgB;AACnE,SAAS,QAAQ,oBAAoB;AAGrC,SAAS,gBAAAC,eAAc,QAAQ,YAAY;AAC3C,SAAS,SAAAC,cAAa;AA+ElB,SAyDI,OAAAC,OAzDJ,QAAAC,cAAA;AArCJ,IAAM,eAAe;AAAA,EACnB,SAAS;AAAA,EACT,aAAa;AACf;AAMA,SAAS,aAAiC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,OAAO,KAAK;AAClB,QAAM,aAAa,kBAAkB;AACrC,QAAM,YAAY,cAAc,WAAW,IAAI,KAAK,EAAE;AAEtD,QAAM,gBAA4B,KAAK,OACnC,KAAK,OACL,KAAK,aACH,SACA;AAEN,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,cAAc,CAAC,aAChB,8BACA;AAAA,QACJ,KAAK,YACD,uDACA;AAAA,MACN,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,MAAK;AAAA,MACL,iBAAe,aAAa,YAAY,KAAK;AAAA,MAC7C,iBAAe,KAAK,aAAa,KAAK,SAAS;AAAA,MAC/C,gBAAgB,MAAM,UAAU,KAAK,IAAI;AAAA,MACzC,gBAAgB,MAAM,aAAa,KAAK,IAAI;AAAA,MAC5C,SAAS,CAAC,MAAM;AACd,YAAI,YAAY;AAEd,wBAAc,KAAK,EAAE;AAAA,QACvB,OAAO;AACL,eAAK,YAAY,CAAC;AAAA,QACpB;AAAA,MACF;AAAA,MACA,WAAW,CAAC,MAAM;AAChB,YAAI,eAAe,EAAE,QAAQ,OAAO,EAAE,QAAQ,UAAU;AACtD,YAAE,eAAe;AACjB,wBAAc,KAAK,EAAE;AAAA,QACvB;AAAA,MACF;AAAA,MAGA;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,KAAK,aAAa,YAAY;AAAA,YAChC,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,SAAS,CAAC,MAAM;AACd,gBAAE,gBAAgB;AAClB,mBAAK,OAAO;AAAA,YACd;AAAA,YACA,UAAU;AAAA,YACV,cAAY,KAAK,SAAS,aAAa;AAAA,YAEvC,0BAAAA;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,kBACA,KAAK,SAAS,cAAc;AAAA,gBAC9B,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA;AAAA,YACb;AAAA;AAAA,QACF;AAAA,QAGC,cACC,gBAAAE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,YACI,0EACA;AAAA,YACN,EAAE,KAAK,GAAG;AAAA,YACV,MAAK;AAAA,YACL,gBAAc;AAAA,YACd,cAAY,UAAU,KAAK,IAAI;AAAA,YAE9B,uBACC,gBAAAA;AAAA,cAACD;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,aAAa;AAAA;AAAA,YACf;AAAA;AAAA,QAEJ;AAAA,QAIF,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAU;AAAA,YACV,eAAY;AAAA;AAAA,QACd;AAAA,QAGA,gBAAAA,MAAC,UAAK,WAAU,YAAY,eAAK,MAAK;AAAA;AAAA;AAAA,EACxC;AAEJ;AAMO,SAAS,KAAoC;AAAA,EAClD;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AAAA,EACA;AACF,GAAiB;AACf,QAAM,cAAcJ,QAAmB,IAAI;AAG3C,sBAAoB,SAAS,MAAM,YAAY,SAAU,CAAC,CAAC;AAG3D,QAAM,CAAC,iBAAiB,kBAAkB,IAAIC;AAAA,IAC5C,MAAM,oBAAI,IAAI;AAAA,EAChB;AACA,QAAM,aAAa,eAAe;AAElC,QAAM,oBAAoBF;AAAA,IACxB,CAAC,OAAe;AACd,YAAM,OAAO,IAAI,IAAI,UAAU;AAC/B,UAAI,KAAK,IAAI,EAAE,GAAG;AAChB,aAAK,OAAO,EAAE;AAAA,MAChB,OAAO;AACL,aAAK,IAAI,EAAE;AAAA,MACb;AACA,UAAI,mBAAmB;AACrB,0BAAkB,IAAI;AAAA,MACxB,OAAO;AACL,2BAAmB,IAAI;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC,YAAY,iBAAiB;AAAA,EAChC;AAGA,QAAM,eAAeA;AAAA,IACnB,CAAC,UAAwB;AACvB,UAAI,kBAAkB,cAAc,kBAAkB,OAAQ;AAC9D,UAAI,mBAAmB;AACrB,0BAAkB,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAAA,MACnD;AAAA,IACF;AAAA,IACA,CAAC,eAAe,iBAAiB;AAAA,EACnC;AAGA,QAAM,iBAAiBA;AAAA,IACrB,CAAC,SAAqB;AACpB,UAAI,YAAY;AACd,mBAAW,KAAK,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAGA,QAAM,sBAAsB,cACxB,CAAC,MAAkB,SAAiB,YAAY,KAAK,MAAM,IAAI,IAC/D;AAIJ,QAAM,gBACJ,kBAAkB,YAAY,eAAe,YAAY,OAAO,IAC5D,CAAC,GAAG,WAAW,EAAE,CAAC,IAClB;AAEN,SACE,gBAAAK;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,WAAW,CAAC,gBAAgB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAE/D,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL;AAAA,UACA,OAAM;AAAA,UACN;AAAA,UACA,WAAW,aAAa,IAAI;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA,uBAAuB,kBAAkB,YAAY,kBAAkB;AAAA,UACvE,WAAW;AAAA,UACX,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,aAAa;AAAA,UAEZ,WAAC,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,cACJ;AAAA,cACA,eAAe;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;ACtTA,SAAS,iBAAAE,gBAAe,cAAAC,mBAAkC;AAC1D,SAAS,WAAAC,gBAAe;AACxB;AAAA,EACE,qBAAqB;AAAA,EACrB,gBAAgBC;AAAA,OAIX;AAkED,gBAAAC,aAAA;AArDN,IAAM,0BAA0BJ,eAA4C;AAAA,EAC1E,MAAM;AACR,CAAC;AAMD,IAAMK,cAAmD;AAAA,EACvD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AA0BO,SAAS,iBAAiB;AAAA,EAC/B,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA0B;AAExB,QAAM,aAAa,kBAAkB;AAErC,SACE,gBAAAD,MAAC,wBAAwB,UAAxB,EAAiC,OAAO,EAAE,KAAK,GAC9C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAc;AAAA,MACd,cAAc,aAAa,oBAAI,IAAS,IAAI;AAAA,MAC5C,qBAAqB,aAAa,SAAY;AAAA,MAC9C,mBAAmB,aAAa,SAAY;AAAA,MAC5C,WAAWF;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH,GACF;AAEJ;AAYO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA,GAAG;AACL,GAA8B;AAC5B,QAAM,EAAE,KAAK,IAAID,YAAW,uBAAuB;AAEnD,SACE,gBAAAG;AAAA,IAACD;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,CAAC,EAAE,YAAY,WAAW,WAAW,WAAW,MACzDD;AAAA;AAAA,QAEE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAGA;AAAA;AAAA,QAGA,cAAc;AAAA;AAAA,QAGdG,YAAW,IAAI;AAAA;AAAA,QAGf,aACI,oHACA,YACE,sEACA,YACE,sEACA;AAAA,QAER;AAAA,MACF;AAAA;AAAA,EAEJ;AAEJ;;;AC3IA,SAAS,aAAa,UAAU,QAAAC,aAAY;AAC5C,SAAS,WAAAC,gBAAe;AA+CpB,SAmEA,YAAAC,WAnEA,OAAAC,OA0BE,QAAAC,cA1BF;AAnBG,IAAM,kBAAkB;AAAA,EAC7B,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,iBAAmE;AAAA,EACvE,KAAK,EAAE,OAAO,OAAO,OAAO,gCAAgC;AAAA,EAC5D,OAAO,EAAE,OAAO,SAAS,OAAO,4BAA4B;AAAA,EAC5D,KAAK,EAAE,OAAO,OAAO,OAAO,0BAA0B;AAAA,EACtD,OAAO,EAAE,OAAO,SAAS,OAAO,0BAA0B;AAC5D;AAEO,SAAS,cAAc,EAAE,SAAS,GAAyB;AAChE,QAAM,SAAS,eAAe,SAAS,YAAY,CAAC;AACpD,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,aAAa,QAAQ,SAAS;AAEpC,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAWE;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,GAA6E;AAC3E,MAAI,WAAW,WAAW;AACxB,WACE,gBAAAF,MAAC,SAAI,WAAU,2CACb,0BAAAA,MAAC,WAAQ,MAAK,MAAK,cAAW,sBAAqB,GACrD;AAAA,EAEJ;AAEA,MAAI,WAAW,SAAS;AACtB,WACE,gBAAAC,OAAC,SAAI,WAAU,6EACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,MAAK;AAAA,UACL,WAAU;AAAA;AAAA,MACZ;AAAA,MACC,gBACC,gBAAAA,MAAC,OAAE,WAAU,oCAAoC,wBAAa;AAAA,OAElE;AAAA,EAEJ;AAEA,MAAI,UAAU;AACZ,WAAO,gBAAAA,MAAC,SAAI,WAAU,iCAAiC,UAAS;AAAA,EAClE;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAU,2CACb,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,MAAK;AAAA,MACL,WAAU;AAAA;AAAA,EACZ,GACF;AAEJ;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,cACJ,gBAAAC,OAAAF,WAAA,EAEE;AAAA,oBAAAC,MAAC,SAAI,WAAU,kGACb,0BAAAA,MAAC,eAAY,QAAgB,cAC1B,UACH,GACF;AAAA,IAGA,gBAAAC,OAAC,SAAI,WAAU,yJAEb;AAAA,sBAAAA,OAAC,SAAI,WAAU,0BACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAWE;AAAA,cACT;AAAA,cACA,gBAAgB,MAAM;AAAA,YACxB;AAAA,YACA,cAAY,WAAW,MAAM;AAAA;AAAA,QAC/B;AAAA,QACA,gBAAAF,MAAC,UAAK,WAAU,oFACb,gBACH;AAAA,QACC,UACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAMG;AAAA,YACN,cAAW;AAAA,YACX,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS,MAAM;AACb,qBAAO;AAAA,YACT;AAAA;AAAA,QACF;AAAA,SAEJ;AAAA,MAGA,gBAAAF,OAAC,SAAI,WAAU,gCACb;AAAA,wBAAAD,MAAC,iBAAc,UAAoB;AAAA,QAClC,UACC,gBAAAA,MAAC,UAAK,WAAU,uDACb,kBACH;AAAA,QAED,cAAc,QAAQ,WAAW,eAChC,gBAAAC,OAAC,UAAK,WAAU,2EACb;AAAA;AAAA,UAAW;AAAA,UAAE,eAAe,IAAI,UAAU;AAAA,WAC7C;AAAA,SAEJ;AAAA,OACF;AAAA,KACF;AAGF,QAAM,aAAaC;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,MAAI,MAAM;AACR,WACE,gBAAAF,MAAC,OAAE,MAAY,WAAWE,SAAQ,YAAY,cAAc,GACzD,uBACH;AAAA,EAEJ;AAEA,SAAO,gBAAAF,MAAC,SAAI,WAAW,YAAa,uBAAY;AAClD;;;ACxLO,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,2BAA2B;AACjC,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAClC,IAAM,oBAAoB;AAC1B,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,kBAAkB;AACxB,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAC1B,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,eAAe;AACrB,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;","names":["jsx","sizeMap","jsx","jsxs","jsx","jsxs","AriaButton","jsx","iconSizeMap","groupRadiusClass","AriaButton","jsx","jsxs","Button","Label","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","sizeStyles","createContext","useContext","X","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","Label","jsx","jsxs","Label","jsx","jsxs","jsx","jsx","groupRadiusClass","twMerge","jsx","sizeStyles","Heading","jsx","variantStyles","Link","Fragment","jsx","jsxs","AriaLink","twMerge","jsx","jsxs","iconSizeMap","AriaLink","twMerge","squareSizeStyles","twMerge","jsx","sizeStyles","squareSizeStyles","variantStyles","Popover","jsx","jsxs","Popover","AriaDialog","AriaButton","Fragment","jsx","Popover","createContext","useContext","twMerge","jsx","sizeStyles","Tabs","TabList","Tab","TabPanel","useCallback","useRef","useState","ChevronRight","Check","jsx","jsxs","createContext","useContext","twMerge","AriaToggleButton","jsx","sizeStyles","Info","twMerge","Fragment","jsx","jsxs","twMerge","Info"]}
|