@proyecto-viviana/ui 0.2.2 → 0.2.5
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.js +378 -18
- package/dist/index.js.map +1 -7
- package/dist/index.ssr.js +378 -18
- package/dist/index.ssr.js.map +1 -7
- package/package.json +6 -5
package/dist/index.ssr.js.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/button/Button.tsx", "../src/badge/index.tsx", "../src/alert/index.tsx", "../src/avatar/index.tsx", "../src/switch/index.tsx", "../src/switch/ToggleSwitch.tsx", "../src/checkbox/index.tsx", "../src/radio/index.tsx", "../src/dialog/Dialog.tsx", "../src/icon/icons/GitHubIcon.tsx", "../src/icon/index.tsx", "../src/tooltip/index.tsx", "../src/popover/index.tsx", "../src/textfield/index.tsx", "../src/link/index.tsx", "../src/progress-bar/index.tsx", "../src/separator/index.tsx", "../src/toolbar/index.tsx", "../src/autocomplete/index.tsx", "../src/select/index.tsx", "../src/menu/index.tsx", "../src/listbox/index.tsx", "../src/tabs/index.tsx", "../src/breadcrumbs/index.tsx", "../src/numberfield/index.tsx", "../src/searchfield/index.tsx", "../src/slider/index.tsx", "../src/combobox/index.tsx", "../src/toast/index.tsx", "../src/disclosure/index.tsx", "../src/meter/index.tsx", "../src/tag-group/index.tsx", "../src/calendar/index.tsx", "../src/calendar/RangeCalendar.tsx", "../src/calendar/DateField.tsx", "../src/calendar/TimeField.tsx", "../src/calendar/DatePicker.tsx", "../src/table/index.tsx", "../src/gridlist/index.tsx", "../src/tree/index.tsx", "../src/color/index.tsx", "../src/landmark/index.tsx", "../src/custom/chip/index.tsx", "../src/custom/nav-header/index.tsx", "../src/custom/logo/index.tsx", "../src/custom/header/index.tsx", "../src/custom/lateral-nav/index.tsx", "../src/custom/timeline-item/index.tsx", "../src/custom/conversation/index.tsx", "../src/custom/profile-card/index.tsx", "../src/custom/event-card/index.tsx", "../src/custom/calendar-card/index.tsx", "../src/custom/project-card/index.tsx", "../src/custom/page-layout/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Button component for proyecto-viviana-ui\n *\n * A styled button component built on top of solidaria-components.\n * This component only handles styling - all behavior and accessibility\n * is provided by the headless Button from solidaria-components.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps } from 'solid-js';\nimport { Button as HeadlessButton, type ButtonRenderProps } from '@proyecto-viviana/solidaria-components';\nimport type { ButtonProps } from './types';\n\n/**\n * Buttons allow users to perform an action or to navigate to another page.\n * They have multiple styles for various needs, and are ideal for calling attention to\n * where a user needs to do something in order to move forward in a flow.\n *\n * Built on solidaria-components Button for full accessibility support.\n * Styles are defined in components.css using the vui-button class system.\n */\nexport function Button(props: ButtonProps): JSX.Element {\n const defaultProps: Partial<ButtonProps> = {\n variant: 'primary',\n buttonStyle: 'fill',\n size: 'md',\n };\n\n const merged = solidMergeProps(defaultProps, props);\n\n const [local, headlessProps] = splitProps(merged, [\n 'variant',\n 'buttonStyle',\n 'size',\n 'fullWidth',\n 'staticColor',\n 'class',\n ]);\n\n // Generate class based on render props\n const getClassName = (renderProps: ButtonRenderProps): string => {\n const classList = [\n 'vui-button',\n `vui-button--${local.buttonStyle}`,\n `vui-button--${local.variant}`,\n `vui-button--${local.size}`,\n ];\n\n if (renderProps.isPressed) {\n classList.push('is-pressed');\n }\n\n if (local.fullWidth) {\n classList.push('vui-button--full-width');\n }\n\n if (local.class) {\n classList.push(local.class);\n }\n\n return classList.join(' ');\n };\n\n return (\n <HeadlessButton\n {...headlessProps}\n class={getClassName}\n data-variant={local.variant}\n data-style={local.buttonStyle}\n data-static-color={local.staticColor || undefined}\n >\n {props.children}\n </HeadlessButton>\n );\n}\n", "import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'danger'\nexport type BadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BadgeProps {\n children?: JSX.Element\n count?: number\n variant?: BadgeVariant\n size?: BadgeSize\n class?: string\n}\n\nconst variantStyles: Record<BadgeVariant, string> = {\n primary: 'bg-primary-500 text-white',\n secondary: 'bg-bg-300 text-primary-300',\n accent: 'bg-accent-300 text-black',\n success: 'bg-success-400 text-white',\n warning: 'bg-warning-400 text-black',\n danger: 'bg-danger-400 text-white',\n}\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: 'w-5 h-5 text-xs',\n md: 'w-7 h-7 text-xs',\n lg: 'w-9 h-9 text-sm',\n}\n\nexport function Badge(props: BadgeProps) {\n const variant = () => props.variant ?? 'accent'\n const size = () => props.size ?? 'md'\n\n return (\n <div\n class={`flex items-center justify-center rounded-full border-b border-white font-semibold ${variantStyles[variant()]} ${sizeStyles[size()]} ${props.class ?? ''}`}\n >\n <Show when={props.count !== undefined} fallback={props.children}>\n <span>{props.count}</span>\n </Show>\n </div>\n )\n}\n", "import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps {\n children: JSX.Element\n variant?: AlertVariant\n title?: string\n dismissible?: boolean\n onDismiss?: () => void\n class?: string\n}\n\nconst variantStyles: Record<AlertVariant, string> = {\n info: 'bg-primary-700 text-primary-200 border border-primary-500',\n success: 'bg-success-600 text-success-100 border border-success-400',\n warning: 'bg-warning-600 text-warning-100 border border-warning-400',\n error: 'bg-danger-600 text-danger-100 border border-danger-400',\n}\n\nexport function Alert(props: AlertProps) {\n const variant = () => props.variant ?? 'info'\n\n return (\n <div\n class={`flex items-center min-h-[50px] font-normal rounded-lg px-4 py-2 ${variantStyles[variant()]} ${props.class ?? ''}`}\n role=\"alert\"\n >\n <div class=\"flex items-center gap-3 flex-1\">\n <Show when={props.title}>\n <span class=\"font-semibold font-jost\">{props.title}</span>\n <span class=\"opacity-50\">|</span>\n </Show>\n <div class=\"flex-1\">{props.children}</div>\n <Show when={props.dismissible}>\n <button\n class=\"hover:opacity-70 transition-opacity ml-2\"\n onClick={props.onDismiss}\n aria-label=\"Dismiss\"\n >\n ✕\n </button>\n </Show>\n </div>\n </div>\n )\n}\n", "import { Show } from 'solid-js'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n size?: AvatarSize\n fallback?: string\n online?: boolean\n class?: string\n}\n\nconst sizeStyles: Record<AvatarSize, { container: string; text: string; indicator: string }> = {\n xs: { container: 'w-6 h-6', text: 'text-xs', indicator: 'w-1.5 h-1.5' },\n sm: { container: 'w-8 h-8', text: 'text-sm', indicator: 'w-2 h-2' },\n md: { container: 'w-10 h-10', text: 'text-base', indicator: 'w-2.5 h-2.5' },\n lg: { container: 'w-14 h-14', text: 'text-lg', indicator: 'w-3 h-3' },\n xl: { container: 'w-20 h-20', text: 'text-xl', indicator: 'w-4 h-4' },\n}\n\nexport function Avatar(props: AvatarProps) {\n const size = () => props.size ?? 'md'\n const styles = () => sizeStyles[size()]\n\n const initials = () => {\n if (props.fallback) return props.fallback.slice(0, 2).toUpperCase()\n if (props.alt) return props.alt.slice(0, 2).toUpperCase()\n return '?'\n }\n\n return (\n <div class={`relative inline-block ${props.class ?? ''}`}>\n <div\n class={`${styles().container} rounded-full overflow-hidden bg-bg-200 flex items-center justify-center ring-2 ring-accent/50`}\n >\n <Show\n when={props.src}\n fallback={\n <span class={`${styles().text} font-medium text-primary-300`}>\n {initials()}\n </span>\n }\n >\n <img\n src={props.src}\n alt={props.alt ?? 'Avatar'}\n class=\"w-full h-full object-cover\"\n />\n </Show>\n </div>\n <Show when={props.online !== undefined}>\n <span\n class={`absolute bottom-0 right-0 ${styles().indicator} rounded-full ring-2 ring-bg-400 ${\n props.online ? 'bg-success-400' : 'bg-bg-light'\n }`}\n />\n </Show>\n </div>\n )\n}\n\nexport interface AvatarGroupProps {\n children: any\n max?: number\n size?: AvatarSize\n}\n\nexport function AvatarGroup(props: AvatarGroupProps) {\n return (\n <div class=\"flex -space-x-2\">\n {props.children}\n </div>\n )\n}\n", "/**\n * Switch components for proyecto-viviana-ui\n *\n * This file exports:\n * - ToggleSwitch: The primary switch component built on solidaria-components\n * (named to avoid conflict with SolidJS's built-in Switch)\n * - TabSwitch: A custom two-option tab selector\n */\n\nimport { type JSX, createSignal, createEffect } from 'solid-js'\n\n// Re-export ToggleSwitch (the solidaria-components based switch)\nexport { ToggleSwitch, type ToggleSwitchProps, type SwitchSize } from './ToggleSwitch'\n\n// ============================================\n// TAB SWITCH (Two-option selector)\n// ============================================\n\ninterface SwitchOption {\n label: string\n value: string\n}\n\nexport interface TabSwitchProps {\n options: SwitchOption[]\n value?: string\n onChange?: (value: string) => void\n class?: string\n}\n\n/**\n * A tab-style switch that allows users to select between two options.\n * This is a custom component, not based on solidaria/react-aria.\n */\nexport function TabSwitch(props: TabSwitchProps): JSX.Element {\n const [leftSelected, setLeftSelected] = createSignal(\n props.value ? props.value === props.options[0]?.value : true\n )\n\n createEffect(() => {\n if (props.value !== undefined) {\n setLeftSelected(props.value === props.options[0]?.value)\n }\n })\n\n const toggle = () => {\n const newLeftSelected = !leftSelected()\n setLeftSelected(newLeftSelected)\n const newValue = newLeftSelected ? props.options[0]?.value : props.options[1]?.value\n if (newValue) {\n props.onChange?.(newValue)\n }\n }\n\n const leftSelectedStyle = 'left-0 w-[142px] border-l-2'\n const rightSelectedStyle = 'left-[142px] w-[108px] border-r-2'\n const textSelected = 'font-extrabold text-primary-300'\n const textUnselected = 'font-medium text-primary-600 tracking-wider'\n\n return (\n <div\n onClick={toggle}\n class={`relative bg-bg-400 rounded-full w-[250px] cursor-pointer ${props.class ?? ''}`}\n >\n <div\n class={`${\n leftSelected() ? leftSelectedStyle : rightSelectedStyle\n } transition-all duration-500 ease-in-out z-0 absolute bg-primary-600 rounded-full h-8 border-accent-300`}\n />\n <div class=\"flex z-10 h-8 justify-around\">\n <button\n type=\"button\"\n class={`${\n leftSelected() ? textSelected : textUnselected\n } transition-all ease-in-out duration-500 z-10 text-lg flex justify-center items-center pointer-events-none`}\n >\n <span>{props.options[0]?.label ?? 'TENDENCIAS'}</span>\n </button>\n <button\n type=\"button\"\n class={`${\n leftSelected() ? textUnselected : textSelected\n } transition-all ease-in-out duration-500 z-10 text-lg flex justify-center items-center pointer-events-none`}\n >\n <span>{props.options[1]?.label ?? 'ÚLTIMOS'}</span>\n </button>\n </div>\n </div>\n )\n}\n", "/**\n * ToggleSwitch component for proyecto-viviana-ui\n *\n * A styled switch component built on top of solidaria-components.\n * This component only handles styling - all behavior and accessibility\n * is provided by the headless Switch from solidaria-components.\n *\n * Named \"ToggleSwitch\" to avoid conflict with SolidJS's built-in Switch component.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps } from 'solid-js';\nimport { ToggleSwitch as HeadlessToggleSwitch, type ToggleSwitchProps as HeadlessToggleSwitchProps, type ToggleSwitchRenderProps } from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\nexport interface ToggleSwitchProps extends Omit<HeadlessToggleSwitchProps, 'class' | 'children'> {\n /** The size of the switch. */\n size?: SwitchSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label text for the switch. */\n children?: JSX.Element;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-5 w-9',\n thumb: 'h-4 w-4',\n translate: 'translate-x-4',\n },\n md: {\n track: 'h-6 w-11',\n thumb: 'h-5 w-5',\n translate: 'translate-x-5',\n },\n lg: {\n track: 'h-7 w-14',\n thumb: 'h-6 w-6',\n translate: 'translate-x-7',\n },\n};\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A switch allows users to toggle between two mutually exclusive states.\n *\n * Built on solidaria-components Switch for full accessibility support.\n * Named \"ToggleSwitch\" to avoid conflict with SolidJS's built-in Switch component.\n */\nexport function ToggleSwitch(props: ToggleSwitchProps): JSX.Element {\n const defaultProps: Partial<ToggleSwitchProps> = {\n size: 'md',\n };\n\n const merged = solidMergeProps(defaultProps, props);\n\n const [local, headlessProps] = splitProps(merged, [\n 'size',\n 'class',\n ]);\n\n const size = () => sizeStyles[local.size!];\n\n // Generate class based on render props\n const getClassName = (renderProps: ToggleSwitchRenderProps): string => {\n const base = 'inline-flex items-center gap-2 cursor-pointer';\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed opacity-50' : '';\n const custom = local.class || '';\n return [base, disabledClass, custom].filter(Boolean).join(' ');\n };\n\n return (\n <HeadlessToggleSwitch\n {...headlessProps}\n class={getClassName}\n >\n {(renderProps: ToggleSwitchRenderProps) => (\n <>\n <span\n class={[\n 'relative rounded-full transition-colors duration-200',\n 'focus-within:ring-2 focus-within:ring-accent-300 focus-within:ring-offset-2 focus-within:ring-offset-bg-400',\n size().track,\n renderProps.isSelected ? 'bg-accent' : 'bg-bg-300',\n renderProps.isDisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n ].join(' ')}\n >\n <span\n class={[\n 'absolute top-0.5 left-0.5 rounded-full bg-white shadow transition-transform duration-200',\n size().thumb,\n renderProps.isSelected ? size().translate : 'translate-x-0',\n ].join(' ')}\n />\n </span>\n {props.children && <span class=\"text-primary-200\">{props.children}</span>}\n </>\n )}\n </HeadlessToggleSwitch>\n );\n}\n", "/**\n * Checkbox component for proyecto-viviana-ui\n *\n * A styled checkbox component built on top of solidaria-components.\n * This component only handles styling - all behavior and accessibility\n * is provided by the headless Checkbox from solidaria-components.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n Checkbox as HeadlessCheckbox,\n CheckboxGroup as HeadlessCheckboxGroup,\n type CheckboxProps as HeadlessCheckboxProps,\n type CheckboxGroupProps as HeadlessCheckboxGroupProps,\n type CheckboxRenderProps,\n type CheckboxGroupRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg'\n\nexport interface CheckboxProps extends Omit<HeadlessCheckboxProps, 'class' | 'children' | 'style'> {\n /** The size of the checkbox. */\n size?: CheckboxSize\n /** Additional CSS class name. */\n class?: string\n /** Label text for the checkbox. */\n children?: JSX.Element\n}\n\nexport interface CheckboxGroupProps extends Omit<HeadlessCheckboxGroupProps, 'class' | 'children' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Children checkboxes. */\n children?: JSX.Element\n /** Label for the group. */\n label?: string\n /** Description for the group. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n box: 'h-4 w-4',\n icon: 'h-3 w-3',\n label: 'text-sm',\n },\n md: {\n box: 'h-5 w-5',\n icon: 'h-3.5 w-3.5',\n label: 'text-base',\n },\n lg: {\n box: 'h-6 w-6',\n icon: 'h-4 w-4',\n label: 'text-lg',\n },\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction CheckIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 12 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 5L4.5 8.5L11 1\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction IndeterminateIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 12 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1H11\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n )\n}\n\n// ============================================\n// CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A checkbox allows users to select one or more items from a set.\n *\n * Built on solidaria-components Checkbox for full accessibility support.\n */\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n const defaultProps: Partial<CheckboxProps> = {\n size: 'md',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, headlessProps] = splitProps(merged, [\n 'size',\n 'class',\n 'children',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Generate class based on render props\n const getClassName = (renderProps: CheckboxRenderProps): string => {\n const base = 'inline-flex items-center gap-2 cursor-pointer'\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed opacity-50' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessCheckbox\n {...headlessProps}\n class={getClassName}\n >\n {(renderProps: CheckboxRenderProps) => {\n const boxClasses = () => {\n const base = 'relative flex items-center justify-center rounded border-2 transition-all duration-200'\n const sizeClass = size().box\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200'\n } else if (renderProps.isSelected || renderProps.isIndeterminate) {\n colorClass = 'border-accent bg-accent'\n } else {\n colorClass = 'border-primary-600 bg-transparent hover:border-accent-300'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n const cursorClass = renderProps.isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\n\n return [base, sizeClass, colorClass, focusClass, cursorClass].filter(Boolean).join(' ')\n }\n\n const iconClasses = () => {\n const base = 'text-white transition-opacity duration-200'\n const sizeClass = size().icon\n const visibilityClass = (renderProps.isSelected || renderProps.isIndeterminate)\n ? 'opacity-100'\n : 'opacity-0'\n\n return [base, sizeClass, visibilityClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'text-primary-200'\n const sizeClass = size().label\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n\n return [base, sizeClass, disabledClass].filter(Boolean).join(' ')\n }\n\n return (\n <>\n <span class={boxClasses()}>\n <Show\n when={!renderProps.isIndeterminate}\n fallback={<IndeterminateIcon class={iconClasses()} />}\n >\n <CheckIcon class={iconClasses()} />\n </Show>\n </span>\n <Show when={props.children}>\n <span class={labelClasses()}>{props.children}</span>\n </Show>\n </>\n )\n }}\n </HeadlessCheckbox>\n )\n}\n\n// ============================================\n// CHECKBOX GROUP COMPONENT\n// ============================================\n\n/**\n * A checkbox group allows users to select multiple items from a list.\n *\n * Built on solidaria-components CheckboxGroup for full accessibility support.\n */\nexport function CheckboxGroup(props: CheckboxGroupProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n ])\n\n // Generate class based on render props\n const getClassName = (renderProps: CheckboxGroupRenderProps): string => {\n const base = 'flex flex-col gap-2'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n // Render children function for the headless component\n const renderChildren = (renderProps: CheckboxGroupRenderProps) => (\n <>\n <Show when={local.label}>\n <span class=\"text-sm font-medium text-primary-200\">{local.label}</span>\n </Show>\n <div class=\"flex flex-col gap-2\">\n {props.children}\n </div>\n <Show when={local.description && !renderProps.isInvalid}>\n <span class=\"text-sm text-primary-400\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && renderProps.isInvalid}>\n <span class=\"text-sm text-danger-400\">{local.errorMessage}</span>\n </Show>\n </>\n )\n\n return (\n <HeadlessCheckboxGroup\n {...headlessProps}\n class={getClassName}\n children={renderChildren as any}\n />\n )\n}\n", "/**\n * RadioGroup and Radio components for proyecto-viviana-ui\n *\n * Styled radio components built on top of solidaria-components.\n * SSR-compatible - renders children and UI elements directly without render props.\n */\n\nimport { type JSX, Show, createContext, useContext, splitProps } from 'solid-js'\nimport {\n RadioGroup as HeadlessRadioGroup,\n Radio as HeadlessRadio,\n type RadioGroupProps as HeadlessRadioGroupProps,\n type RadioProps as HeadlessRadioProps,\n type RadioGroupRenderProps,\n type RadioRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type RadioGroupOrientation = 'horizontal' | 'vertical'\nexport type RadioGroupSize = 'sm' | 'md' | 'lg'\n\nconst RadioSizeContext = createContext<RadioGroupSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface RadioGroupProps extends Omit<HeadlessRadioGroupProps, 'class' | 'style'> {\n /** The size of the radio buttons. */\n size?: RadioGroupSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the group. */\n label?: string\n /** Description for the group. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n}\n\nexport interface RadioProps extends Omit<HeadlessRadioProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n circle: 'h-4 w-4',\n dot: 'h-2 w-2',\n label: 'text-sm',\n },\n md: {\n circle: 'h-5 w-5',\n dot: 'h-2.5 w-2.5',\n label: 'text-base',\n },\n lg: {\n circle: 'h-6 w-6',\n dot: 'h-3 w-3',\n label: 'text-lg',\n },\n}\n\n// ============================================\n// RADIO GROUP COMPONENT\n// ============================================\n\n/**\n * A radio group allows users to select a single option from a list of mutually exclusive options.\n *\n * Built on solidaria-components RadioGroup for full accessibility support.\n */\nexport function RadioGroup(props: RadioGroupProps): JSX.Element {\n // Split out our custom styling props from the rest\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n\n // Generate class based on render props\n const getClassName = (renderProps: RadioGroupRenderProps): string => {\n const base = 'flex gap-2'\n const orientationClass = renderProps.orientation === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, orientationClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n // Pass remaining props through to headless component\n // headlessProps maintains reactivity for controlled values like value/onChange\n return (\n <RadioSizeContext.Provider value={size}>\n <HeadlessRadioGroup\n {...headlessProps}\n class={getClassName}\n data-size={size}\n >\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium mb-1\">{local.label}</span>\n </Show>\n {props.children as JSX.Element}\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm [&:has(~[data-invalid])]:hidden\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage}>\n <span class=\"text-danger-400 text-sm hidden [[data-invalid]_&]:block\">{local.errorMessage}</span>\n </Show>\n </HeadlessRadioGroup>\n </RadioSizeContext.Provider>\n )\n}\n\n// ============================================\n// RADIO COMPONENT\n// ============================================\n\n/**\n * A radio button allows users to select a single option from a list.\n * Must be used within a RadioGroup.\n * SSR-compatible - renders static JSX without render prop children.\n *\n * Note: Unlike other styled components, Radio does not use render props for children.\n * Instead, it relies on data attributes set by the headless Radio component for styling.\n * However, since we need dynamic styling based on state, we accept that this component\n * has some limitations compared to the render-props-based original implementation.\n *\n * Built on solidaria-components Radio for full accessibility support.\n */\nexport function Radio(props: RadioProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const sizeFromContext = useContext(RadioSizeContext)\n const sizeStyle = sizeStyles[sizeFromContext]\n const customClass = local.class ?? ''\n\n // Generate class based on render props\n const getClassName = (renderProps: RadioRenderProps): string => {\n const base = 'inline-flex items-center gap-2'\n const cursorClass = renderProps.isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, cursorClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n // Static classes - will use a simplified visual style since we can't dynamically style based on state without render props\n const circleClass = `relative flex items-center justify-center rounded-full border-2 transition-all duration-200 ${sizeStyle.circle} border-primary-600 bg-transparent hover:border-accent-300`\n const dotClass = `rounded-full bg-accent transition-all duration-200 ${sizeStyle.dot}`\n const labelClass = `text-primary-200 ${sizeStyle.label}`\n\n return (\n <HeadlessRadio\n {...headlessProps}\n class={getClassName}\n >\n <span class={circleClass}>\n <span class={dotClass} />\n </span>\n <Show when={props.children}>\n <span class={labelClass}>{props.children as JSX.Element}</span>\n </Show>\n </HeadlessRadio>\n )\n}\n", "/**\n * Dialog component for proyecto-viviana-ui\n *\n * Styled dialog component with overlay and backdrop.\n * Follows Spectrum 2 design patterns.\n */\n\nimport { type JSX, splitProps, Show, createSignal, createContext, useContext, createUniqueId, onMount, onCleanup, createEffect } from 'solid-js'\nimport { Portal } from 'solid-js/web'\nimport { createInteractOutside } from '@proyecto-viviana/solidaria'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type DialogSize = 'sm' | 'md' | 'lg' | 'fullscreen'\n\nexport interface DialogProps {\n /** The size of the dialog. */\n size?: DialogSize\n /** Whether the dialog can be dismissed by clicking the X button. */\n isDismissable?: boolean\n /** Additional CSS class name. */\n class?: string\n /** The title of the dialog. */\n title?: string\n /** The children content. */\n children: JSX.Element\n /** Callback when dialog should close */\n onClose?: () => void\n /** ARIA role - defaults to 'dialog' */\n role?: 'dialog' | 'alertdialog'\n /** ARIA label */\n 'aria-label'?: string\n /** ARIA labelledby */\n 'aria-labelledby'?: string\n}\n\nexport interface DialogTriggerProps {\n /** Button to trigger the dialog. */\n trigger: JSX.Element\n /** The dialog content - receives close function. */\n content: (close: () => void) => JSX.Element\n /** Whether the dialog is controlled. */\n isOpen?: boolean\n /** Callback when open state changes. */\n onOpenChange?: (isOpen: boolean) => void\n /** Whether clicking outside the dialog closes it. Defaults to true. */\n isDismissable?: boolean\n /** Whether pressing Escape closes the dialog. Defaults to true. */\n isKeyboardDismissDisabled?: boolean\n}\n\n// ============================================\n// CONTEXT\n// ============================================\n\ninterface DialogContextValue {\n close: () => void\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nexport function useDialogContext(): DialogContextValue | null {\n return useContext(DialogContext)\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles: Record<DialogSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-2xl',\n fullscreen: 'max-w-full w-full h-full',\n}\n\n// ============================================\n// DIALOG COMPONENT\n// ============================================\n\n/**\n * A dialog is an overlay shown above other content in an application.\n */\nexport function Dialog(props: DialogProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'isDismissable',\n 'class',\n 'title',\n 'onClose',\n 'role',\n 'aria-label',\n 'aria-labelledby',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n const role = local.role ?? 'dialog'\n\n // Generate a unique ID for the title if one is present\n const titleId = createUniqueId()\n const ariaLabelledBy = local['aria-labelledby'] ?? (local.title ? titleId : undefined)\n\n const close = () => local.onClose?.()\n\n const baseClass = 'bg-bg-300 rounded-lg shadow-xl border border-primary-700'\n const sizeClass = sizeStyles[size]\n const padding = 'p-6'\n const className = [baseClass, sizeClass, padding, customClass].filter(Boolean).join(' ')\n\n return (\n <DialogContext.Provider value={{ close }}>\n <div\n role={role}\n tabIndex={-1}\n aria-label={local['aria-label']}\n aria-labelledby={ariaLabelledBy}\n class={className}\n {...rest}\n >\n <Show when={local.title}>\n <div class=\"flex items-center justify-between mb-4\">\n <h2 id={titleId} class=\"text-xl font-semibold text-primary-100\">\n {local.title}\n </h2>\n <Show when={local.isDismissable}>\n <button\n onClick={close}\n class=\"text-primary-400 hover:text-primary-200 transition-colors\"\n aria-label=\"Close dialog\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </Show>\n </div>\n </Show>\n <div class=\"text-primary-200\">\n {props.children}\n </div>\n </div>\n </DialogContext.Provider>\n )\n}\n\n// ============================================\n// DIALOG TRIGGER COMPONENT\n// ============================================\n\n/**\n * DialogTrigger wraps a trigger button and dialog content.\n * Handles opening/closing the dialog with overlay and backdrop.\n */\nexport function DialogTrigger(props: DialogTriggerProps): JSX.Element {\n const [isOpen, setIsOpen] = createSignal(props.isOpen ?? false)\n let dialogRef: HTMLDivElement | undefined\n\n const open = () => {\n setIsOpen(true)\n props.onOpenChange?.(true)\n }\n\n const close = () => {\n setIsOpen(false)\n props.onOpenChange?.(false)\n }\n\n // Handle controlled state\n const isOpenControlled = () => props.isOpen !== undefined ? props.isOpen : isOpen()\n\n // Whether dismissable (defaults to true)\n const isDismissable = () => props.isDismissable !== false\n\n // Click outside to close\n createInteractOutside({\n ref: () => dialogRef ?? null,\n onInteractOutside: () => {\n if (isOpenControlled() && isDismissable()) {\n close()\n }\n },\n isDisabled: !isOpenControlled() || !isDismissable(),\n })\n\n // Escape key to close\n onMount(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpenControlled() && !props.isKeyboardDismissDisabled) {\n e.preventDefault()\n e.stopPropagation()\n close()\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n onCleanup(() => document.removeEventListener('keydown', handleKeyDown))\n })\n\n // Prevent background scroll when dialog is open\n createEffect(() => {\n if (!isOpenControlled()) return\n\n const prevOverflow = document.documentElement.style.overflow\n document.documentElement.style.overflow = 'hidden'\n\n onCleanup(() => {\n document.documentElement.style.overflow = prevOverflow\n })\n })\n\n return (\n <>\n <div onClick={open}>\n {props.trigger}\n </div>\n\n <Show when={isOpenControlled()}>\n <Portal>\n {/* Backdrop */}\n <div\n class=\"fixed inset-0 bg-black/50 backdrop-blur-sm z-40\"\n aria-hidden=\"true\"\n />\n\n {/* Dialog container - pointer-events-none so clicks pass through to backdrop detection */}\n <div class=\"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none\">\n {/* Dialog wrapper - pointer-events-auto to capture clicks on the dialog itself */}\n <div ref={dialogRef} class=\"pointer-events-auto\">\n {props.content(close)}\n </div>\n </div>\n </Portal>\n </Show>\n </>\n )\n}\n\n// ============================================\n// DIALOG FOOTER COMPONENT\n// ============================================\n\nexport interface DialogFooterProps {\n /** Footer content, typically buttons. */\n children: JSX.Element\n /** Additional CSS class. */\n class?: string\n}\n\n/**\n * Footer section for dialog actions.\n */\nexport function DialogFooter(props: DialogFooterProps): JSX.Element {\n return (\n <div class={`flex gap-3 justify-end mt-6 pt-4 border-t border-primary-700 ${props.class ?? ''}`}>\n {props.children}\n </div>\n )\n}\n", "import type { JSX } from 'solid-js';\n\nexport interface GitHubIconProps {\n size?: number;\n color?: string;\n}\n\nexport function GitHubIcon(props: GitHubIconProps): JSX.Element {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={props.size}\n height={props.size}\n fill={props.color}\n aria-hidden=\"true\"\n >\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n </svg>\n );\n}\n", "import type { Component, JSX } from 'solid-js'\n\nexport interface IconProps {\n /** The icon component to render (should accept size and color props) */\n icon: Component<{ size?: string | number; color?: string }>\n /** Size of the icon (e.g., '24px' or 24) */\n size?: string | number\n /** Color of the icon */\n color?: string\n /** Whether to show the accent shadow effect (4px offset to bottom) */\n withShadow?: boolean\n /** Additional CSS class */\n class?: string\n /** Click handler */\n onClick?: () => void\n}\n\n/**\n * Icon wrapper component with optional accent shadow effect.\n *\n * The shadow effect creates a 4px offset accent-colored duplicate\n * of the icon behind it for a stylized look.\n */\nexport function Icon(props: IconProps): JSX.Element {\n const size = () => props.size ?? 24\n const color = () => props.color ?? 'var(--color-primary-500)'\n const IconComponent = props.icon\n\n return (\n <div\n class={`vui-icon ${props.withShadow ? 'vui-icon--with-shadow' : ''} ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n {props.withShadow && (\n <div class=\"vui-icon__shadow\">\n <IconComponent size={size()} color=\"var(--color-accent)\" />\n </div>\n )}\n <div class=\"vui-icon__main\">\n <IconComponent size={size()} color={color()} />\n </div>\n </div>\n )\n}\n\n// Re-export common icons\nexport { GitHubIcon } from './icons/GitHubIcon'\nexport type { GitHubIconProps } from './icons/GitHubIcon'\n", "/**\n * Tooltip component for proyecto-viviana-ui\n *\n * A tooltip displays a description of an element on hover or focus.\n * Built on top of solidaria-components for accessibility.\n */\n\nimport { type JSX, Show, splitProps } from 'solid-js'\nimport {\n Tooltip as HeadlessTooltip,\n TooltipTrigger as HeadlessTooltipTrigger,\n type TooltipProps as HeadlessTooltipProps,\n type TooltipTriggerComponentProps as HeadlessTooltipTriggerProps,\n type TooltipRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right'\nexport type TooltipVariant = 'default' | 'neutral' | 'info'\n\nexport interface TooltipTriggerProps extends HeadlessTooltipTriggerProps {\n /** The children of the tooltip trigger (trigger element and tooltip). */\n children: JSX.Element\n}\n\nexport interface TooltipProps extends Omit<HeadlessTooltipProps, 'class' | 'style' | 'children'> {\n /** The content of the tooltip. */\n children: JSX.Element\n /** The position of the tooltip relative to the trigger. */\n placement?: TooltipPlacement\n /** Visual variant of the tooltip. */\n variant?: TooltipVariant\n /** Additional CSS class name. */\n class?: string\n /** Whether to show an arrow pointing to the trigger. */\n showArrow?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\n// Note: Position is now calculated by the headless layer (solidaria-components)\n// so we don't need CSS positioning classes here\nconst baseStyles = [\n 'px-3 py-2 rounded-lg',\n 'text-sm font-medium',\n 'shadow-lg',\n 'pointer-events-auto',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95',\n].join(' ')\n\nconst variantStyles: Record<TooltipVariant, string> = {\n default: 'bg-neutral-900 text-white dark:bg-neutral-100 dark:text-neutral-900',\n neutral: 'bg-neutral-800 text-neutral-100 dark:bg-neutral-200 dark:text-neutral-900',\n info: 'bg-blue-600 text-white dark:bg-blue-500',\n}\n\nconst arrowStyles: Record<TooltipPlacement, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-l-transparent border-r-transparent border-b-transparent',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-l-transparent border-r-transparent border-t-transparent',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-full border-t-transparent border-b-transparent border-r-transparent',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-full border-t-transparent border-b-transparent border-l-transparent',\n}\n\nconst getArrowBorderColor = (variant: TooltipVariant): string => {\n const colors: Record<TooltipVariant, string> = {\n default: 'border-neutral-900 dark:border-neutral-100',\n neutral: 'border-neutral-800 dark:border-neutral-200',\n info: 'border-blue-600 dark:border-blue-500',\n }\n return colors[variant]\n}\n\n// ============================================\n// COMPONENTS\n// ============================================\n\n/**\n * TooltipTrigger wraps around a trigger element and a Tooltip.\n * It handles opening and closing the Tooltip when the user hovers\n * over or focuses the trigger.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Hover me</Button>\n * <Tooltip>This is helpful information</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport function TooltipTrigger(props: TooltipTriggerProps): JSX.Element {\n return <HeadlessTooltipTrigger {...props} />\n}\n\n/**\n * Styled tooltip component that displays a description on hover or focus.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Save</Button>\n * <Tooltip placement=\"top\">Save your changes</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport function Tooltip(props: TooltipProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'placement',\n 'variant',\n 'class',\n 'showArrow',\n ])\n\n const placement = () => local.placement ?? 'top'\n const variant = () => local.variant ?? 'default'\n\n return (\n <HeadlessTooltip\n {...rest}\n placement={placement()}\n class={(_renderProps: TooltipRenderProps) => {\n const classes = [\n baseStyles,\n variantStyles[variant()],\n local.class ?? '',\n ].filter(Boolean).join(' ')\n return classes\n }}\n >\n {(renderProps: TooltipRenderProps) => (\n <>\n {props.children}\n <Show when={local.showArrow}>\n <div\n class={[\n 'absolute w-0 h-0 border-4',\n arrowStyles[renderProps.placement ?? placement()],\n getArrowBorderColor(variant()),\n ].join(' ')}\n />\n </Show>\n </>\n )}\n </HeadlessTooltip>\n )\n}\n\n// ============================================\n// SIMPLE CSS-ONLY TOOLTIP (Legacy)\n// ============================================\n\nexport interface SimpleTooltipProps {\n /** The content to show in the tooltip */\n label: string\n /** The trigger element */\n children: JSX.Element\n /** Position of the tooltip */\n position?: 'top' | 'bottom'\n /** Additional CSS class */\n class?: string\n}\n\n/**\n * Simple CSS-only tooltip component.\n * Uses CSS hover effect for performance. No JS state management.\n *\n * @deprecated Use the accessible Tooltip + TooltipTrigger components instead.\n *\n * @example\n * ```tsx\n * <SimpleTooltip label=\"Save your changes\">\n * <button>Save</button>\n * </SimpleTooltip>\n * ```\n */\nexport function SimpleTooltip(props: SimpleTooltipProps): JSX.Element {\n const position = () => props.position ?? 'bottom'\n\n return (\n <div class={`vui-tooltip ${props.class ?? ''}`}>\n <div class=\"vui-tooltip__trigger\">\n {props.children}\n </div>\n <div class={`vui-tooltip__content vui-tooltip__content--${position()}`}>\n <span>{props.label}</span>\n </div>\n </div>\n )\n}\n\n// Re-export types\nexport type { TooltipRenderProps }\n", "/**\n * Popover component for proyecto-viviana-ui\n *\n * A popover displays content in an overlay positioned relative to a trigger.\n * Built on top of solidaria-components for accessibility.\n * Follows Spectrum 2 design patterns.\n */\n\nimport { type JSX, Show, splitProps } from 'solid-js'\nimport {\n Popover as HeadlessPopover,\n PopoverTrigger as HeadlessPopoverTrigger,\n OverlayArrow as HeadlessOverlayArrow,\n type PopoverProps as HeadlessPopoverProps,\n type PopoverTriggerProps as HeadlessPopoverTriggerProps,\n type PopoverRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Placement, PlacementAxis } from '@proyecto-viviana/solidaria'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type PopoverPlacement = Placement\nexport type PopoverSize = 'sm' | 'md' | 'lg'\n\nexport interface PopoverTriggerProps extends HeadlessPopoverTriggerProps {\n /** The children of the popover trigger (trigger element and popover). */\n children: JSX.Element\n}\n\nexport interface PopoverProps extends Omit<HeadlessPopoverProps, 'class' | 'style' | 'children'> {\n /** The content of the popover. */\n children: JSX.Element\n /** The position of the popover relative to the trigger. */\n placement?: PopoverPlacement\n /** Size variant of the popover. */\n size?: PopoverSize\n /** Additional CSS class name. */\n class?: string\n /** Whether to show an arrow pointing to the trigger. */\n showArrow?: boolean\n /** Custom padding inside the popover. */\n padding?: 'none' | 'sm' | 'md' | 'lg'\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst baseStyles = [\n 'bg-bg-300',\n 'rounded-lg',\n 'shadow-xl',\n 'border border-primary-700',\n 'text-primary-200',\n 'outline-none',\n // Animation\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[placement=top]:slide-in-from-bottom-2',\n 'data-[placement=bottom]:slide-in-from-top-2',\n 'data-[placement=left]:slide-in-from-right-2',\n 'data-[placement=right]:slide-in-from-left-2',\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95',\n].join(' ')\n\nconst sizeStyles: Record<PopoverSize, string> = {\n sm: 'max-w-xs',\n md: 'max-w-sm',\n lg: 'max-w-lg',\n}\n\nconst paddingStyles: Record<string, string> = {\n none: '',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n}\n\n// Arrow styles based on placement\nconst arrowBaseStyles = [\n 'fill-bg-300',\n 'stroke-primary-700',\n 'stroke-1',\n].join(' ')\n\n// Arrow positioning for each placement axis\nconst getArrowRotation = (placement: PlacementAxis | null): string => {\n switch (placement) {\n case 'top':\n return 'rotate-180'\n case 'bottom':\n return ''\n case 'left':\n return 'rotate-90'\n case 'right':\n return '-rotate-90'\n default:\n return ''\n }\n}\n\n// ============================================\n// COMPONENTS\n// ============================================\n\n/**\n * PopoverTrigger wraps around a trigger element and a Popover.\n * It handles opening and closing the Popover when the user interacts\n * with the trigger.\n *\n * @example\n * ```tsx\n * <PopoverTrigger>\n * <Button>Open Popover</Button>\n * <Popover>\n * <p>Popover content here!</p>\n * </Popover>\n * </PopoverTrigger>\n * ```\n */\nexport function PopoverTrigger(props: PopoverTriggerProps): JSX.Element {\n return <HeadlessPopoverTrigger {...props} />\n}\n\n/**\n * Styled popover component that displays content in an overlay.\n *\n * @example\n * ```tsx\n * <PopoverTrigger>\n * <Button>Settings</Button>\n * <Popover placement=\"bottom\" size=\"md\">\n * <h3>Settings</h3>\n * <p>Configure your preferences here.</p>\n * </Popover>\n * </PopoverTrigger>\n * ```\n */\nexport function Popover(props: PopoverProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'placement',\n 'size',\n 'class',\n 'showArrow',\n 'padding',\n ])\n\n const placement = () => local.placement ?? 'bottom'\n const size = () => local.size ?? 'md'\n const padding = () => local.padding ?? 'md'\n\n return (\n <HeadlessPopover\n {...rest}\n placement={placement()}\n class={(_renderProps: PopoverRenderProps) => {\n const classes = [\n baseStyles,\n sizeStyles[size()],\n paddingStyles[padding()],\n local.class ?? '',\n ].filter(Boolean).join(' ')\n return classes\n }}\n >\n {(renderProps: PopoverRenderProps) => (\n <>\n <Show when={local.showArrow}>\n <PopoverArrow placement={renderProps.placement} />\n </Show>\n {props.children}\n </>\n )}\n </HeadlessPopover>\n )\n}\n\n/**\n * Arrow component for the popover.\n * Automatically positions itself based on the popover placement.\n */\ninterface PopoverArrowProps {\n /** The current placement axis. */\n placement: PlacementAxis | null\n /** Additional CSS class. */\n class?: string\n}\n\nfunction PopoverArrow(props: PopoverArrowProps): JSX.Element {\n return (\n <HeadlessOverlayArrow\n class=\"absolute block\"\n style={{\n // Position based on placement\n ...(props.placement === 'top' && { bottom: '100%', left: '50%', transform: 'translateX(-50%)' }),\n ...(props.placement === 'bottom' && { top: '-8px', left: '50%', transform: 'translateX(-50%)' }),\n ...(props.placement === 'left' && { right: '100%', top: '50%', transform: 'translateY(-50%)' }),\n ...(props.placement === 'right' && { left: '-8px', top: '50%', transform: 'translateY(-50%)' }),\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n class={`${arrowBaseStyles} ${getArrowRotation(props.placement)} ${props.class ?? ''}`}\n >\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </HeadlessOverlayArrow>\n )\n}\n\n// ============================================\n// POPOVER CONTENT SECTIONS\n// ============================================\n\nexport interface PopoverHeaderProps {\n /** The title of the popover. */\n title: string\n /** Optional description text. */\n description?: string\n /** Additional CSS class. */\n class?: string\n}\n\n/**\n * Header section for popover with title and optional description.\n */\nexport function PopoverHeader(props: PopoverHeaderProps): JSX.Element {\n return (\n <div class={`mb-3 ${props.class ?? ''}`}>\n <h3 class=\"text-lg font-semibold text-primary-100\">{props.title}</h3>\n <Show when={props.description}>\n <p class=\"text-sm text-primary-400 mt-1\">{props.description}</p>\n </Show>\n </div>\n )\n}\n\nexport interface PopoverFooterProps {\n /** Footer content, typically buttons. */\n children: JSX.Element\n /** Additional CSS class. */\n class?: string\n}\n\n/**\n * Footer section for popover actions.\n */\nexport function PopoverFooter(props: PopoverFooterProps): JSX.Element {\n return (\n <div class={`flex gap-2 justify-end mt-4 pt-3 border-t border-primary-700 ${props.class ?? ''}`}>\n {props.children}\n </div>\n )\n}\n\n// Re-export types\nexport type { PopoverRenderProps, Placement, PlacementAxis }\n", "/**\n * TextField component for proyecto-viviana-ui\n *\n * A styled text field component built on solidaria hooks directly.\n * This bypasses solidaria-components for now due to context timing issues.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createTextField,\n createFocusRing,\n type AriaTextFieldProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createTextFieldState,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TextFieldSize = 'sm' | 'md' | 'lg'\nexport type TextFieldVariant = 'outline' | 'filled'\n\nexport interface TextFieldProps extends Omit<AriaTextFieldProps, 'children'> {\n /** The size of the text field. */\n size?: TextFieldSize\n /** The visual variant of the text field. */\n variant?: TextFieldVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** Error message shown when invalid. */\n errorMessage?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n input: 'h-8 px-2 text-sm',\n label: 'text-sm',\n description: 'text-xs',\n },\n md: {\n input: 'h-10 px-3 text-base',\n label: 'text-sm',\n description: 'text-sm',\n },\n lg: {\n input: 'h-12 px-4 text-lg',\n label: 'text-base',\n description: 'text-sm',\n },\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A text field allows users to enter a plain text value with a keyboard.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function TextField(props: TextFieldProps): JSX.Element {\n const defaultProps: Partial<TextFieldProps> = {\n size: 'md',\n variant: 'outline',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Create text field state\n const state = createTextFieldState(() => ({\n value: ariaProps.value,\n defaultValue: ariaProps.defaultValue,\n onChange: ariaProps.onChange,\n }))\n\n // Create text field aria props\n const textFieldAria = createTextField(() => ({\n ...ariaProps,\n value: state.value(),\n onChange: state.setValue,\n }))\n\n // Create focus ring\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const inputClasses = () => {\n const base = 'w-full rounded-md transition-all duration-200 outline-none'\n const sizeClass = size().input\n\n let variantClass: string\n if (local.variant === 'filled') {\n variantClass = 'bg-bg-200 border border-transparent'\n } else {\n variantClass = 'bg-transparent border border-bg-400'\n }\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (textFieldAria.isInvalid) {\n stateClass = 'border-danger-500 focus:border-danger-400 focus:ring-2 focus:ring-danger-400/20'\n } else {\n stateClass = 'text-primary-100 placeholder:text-primary-500 focus:border-accent focus:ring-2 focus:ring-accent/20'\n }\n\n const hoverClass = ariaProps.isDisabled ? '' : 'hover:border-accent-300'\n\n return [base, sizeClass, variantClass, stateClass, hoverClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'block font-medium text-primary-200 mb-1'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const descriptionClasses = () => {\n const base = 'mt-1 text-primary-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const errorClasses = () => {\n const base = 'mt-1 text-danger-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n // Clean props - remove ref to avoid type conflicts\n const cleanLabelProps = () => {\n const { ref: _ref, ...rest } = textFieldAria.labelProps as Record<string, unknown>\n return rest\n }\n const cleanInputProps = () => {\n const { ref: _ref1, ...rest } = textFieldAria.inputProps as Record<string, unknown>\n const { ref: _ref2, ...focusRest } = focusProps as Record<string, unknown>\n return { ...rest, ...focusRest }\n }\n const cleanDescriptionProps = () => {\n const { ref: _ref, ...rest } = textFieldAria.descriptionProps as Record<string, unknown>\n return rest\n }\n const cleanErrorMessageProps = () => {\n const { ref: _ref, ...rest } = textFieldAria.errorMessageProps as Record<string, unknown>\n return rest\n }\n\n return (\n <div\n class={containerClasses()}\n data-disabled={ariaProps.isDisabled || undefined}\n data-invalid={textFieldAria.isInvalid || undefined}\n data-readonly={ariaProps.isReadOnly || undefined}\n data-required={ariaProps.isRequired || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n >\n <Show when={local.label}>\n <label {...cleanLabelProps()} class={labelClasses()}>\n {local.label}\n <Show when={ariaProps.isRequired}>\n <span class=\"text-danger-400 ml-0.5\">*</span>\n </Show>\n </label>\n </Show>\n\n <input {...cleanInputProps()} class={inputClasses()} />\n\n <Show when={local.description && !textFieldAria.isInvalid}>\n <p {...cleanDescriptionProps()} class={descriptionClasses()}>\n {local.description}\n </p>\n </Show>\n\n <Show when={local.errorMessage && textFieldAria.isInvalid}>\n <p {...cleanErrorMessageProps()} class={errorClasses()}>\n {local.errorMessage}\n </p>\n </Show>\n </div>\n )\n}\n", "/**\n * Link component for proyecto-viviana-ui\n *\n * Styled link component built on top of solidaria-components.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n Link as HeadlessLink,\n type LinkProps as HeadlessLinkProps,\n type LinkRenderProps,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type LinkVariant = 'primary' | 'secondary' | 'subtle';\n\nexport interface LinkProps extends Omit<HeadlessLinkProps, 'class' | 'style' | 'children'> {\n /** The visual style of the link. @default 'primary' */\n variant?: LinkVariant;\n /** Whether the link is on its own vs inside a longer string of text. */\n isStandalone?: boolean;\n /** Whether the link should be displayed with a quiet style (no underline by default). */\n isQuiet?: boolean;\n /** Additional CSS class name. */\n class?: string;\n /** The content of the link. */\n children?: JSX.Element;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst variantStyles = {\n primary: 'text-accent hover:text-accent-300',\n secondary: 'text-primary-300 hover:text-primary-200',\n subtle: 'text-primary-400 hover:text-primary-300',\n};\n\n// ============================================\n// LINK COMPONENT\n// ============================================\n\n/**\n * Links allow users to navigate to a different location.\n * They can be presented inline inside a paragraph or as standalone text.\n *\n * Built on solidaria-components Link for full accessibility support.\n *\n * @example\n * ```tsx\n * <Link href=\"/about\">About Us</Link>\n *\n * // Secondary variant\n * <Link href=\"/help\" variant=\"secondary\">Help</Link>\n *\n * // Standalone (bold, no underline until hover)\n * <Link href=\"/home\" isStandalone isQuiet>Home</Link>\n * ```\n */\nexport function Link(props: LinkProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'variant',\n 'isStandalone',\n 'isQuiet',\n 'class',\n ]);\n\n const variant = local.variant ?? 'primary';\n const customClass = local.class ?? '';\n\n // Generate class based on render props\n const getClassName = (renderProps: LinkRenderProps): string => {\n const base = 'transition-colors duration-200 cursor-pointer rounded-sm outline-none';\n\n // Variant colors\n const variantClass = variantStyles[variant];\n\n // Underline behavior\n let underlineClass: string;\n if (local.isStandalone && local.isQuiet) {\n // Quiet standalone: no underline by default, underline on hover/focus\n underlineClass = renderProps.isHovered || renderProps.isFocusVisible\n ? 'underline'\n : 'no-underline';\n } else {\n // Inline links always have underline for accessibility\n underlineClass = 'underline';\n }\n\n // Font weight for standalone\n const weightClass = local.isStandalone ? 'font-medium' : '';\n\n // Focus ring\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : '';\n\n // Disabled state\n const disabledClass = renderProps.isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n // Pressed state\n const pressedClass = renderProps.isPressed ? 'opacity-80' : '';\n\n return [\n base,\n variantClass,\n underlineClass,\n weightClass,\n focusClass,\n disabledClass,\n pressedClass,\n customClass,\n ].filter(Boolean).join(' ');\n };\n\n return (\n <HeadlessLink\n {...headlessProps}\n class={getClassName}\n >\n {props.children}\n </HeadlessLink>\n );\n}\n", "/**\n * ProgressBar component for proyecto-viviana-ui\n *\n * Styled progress bar component built on top of the solidaria hook directly.\n */\n\nimport { type JSX, splitProps, Show, createMemo } from 'solid-js';\nimport { createProgressBar } from '@proyecto-viviana/solidaria';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\nexport type ProgressBarVariant = 'primary' | 'accent' | 'success' | 'warning' | 'danger';\n\nexport interface ProgressBarProps {\n /** The current value (controlled). @default 0 */\n value?: number;\n /** The smallest value allowed. @default 0 */\n minValue?: number;\n /** The largest value allowed. @default 100 */\n maxValue?: number;\n /** The content to display as the value's label (e.g. \"1 of 4\"). */\n valueLabel?: string;\n /** Whether presentation is indeterminate when progress isn't known. */\n isIndeterminate?: boolean;\n /** The size of the progress bar. @default 'md' */\n size?: ProgressBarSize;\n /** The visual style variant. @default 'primary' */\n variant?: ProgressBarVariant;\n /** The label to display above the progress bar. */\n label?: string;\n /** Whether to show the value text. @default true for determinate progress */\n showValueLabel?: boolean;\n /** Additional CSS class name. */\n class?: string;\n /** An accessibility label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-1',\n text: 'text-xs',\n },\n md: {\n track: 'h-2',\n text: 'text-sm',\n },\n lg: {\n track: 'h-3',\n text: 'text-base',\n },\n};\n\nconst variantStyles = {\n primary: 'bg-primary-500',\n accent: 'bg-accent',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n};\n\n// ============================================\n// UTILITIES\n// ============================================\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n// ============================================\n// PROGRESSBAR COMPONENT\n// ============================================\n\n/**\n * Progress bars show either determinate or indeterminate progress of an operation\n * over time.\n *\n * @example\n * ```tsx\n * <ProgressBar value={50} label=\"Loading...\" />\n *\n * // Indeterminate\n * <ProgressBar isIndeterminate label=\"Processing...\" />\n *\n * // Different variants\n * <ProgressBar value={75} variant=\"success\" />\n * ```\n */\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n 'size',\n 'variant',\n 'label',\n 'showValueLabel',\n 'class',\n ]);\n\n const size = () => local.size ?? 'md';\n const variant = () => local.variant ?? 'primary';\n const isIndeterminate = () => ariaProps.isIndeterminate ?? false;\n const showValueLabel = () => local.showValueLabel ?? !isIndeterminate();\n\n // Create progress bar aria props\n const progressAria = createProgressBar({\n get value() { return ariaProps.value; },\n get minValue() { return ariaProps.minValue; },\n get maxValue() { return ariaProps.maxValue; },\n get valueLabel() { return ariaProps.valueLabel; },\n get isIndeterminate() { return ariaProps.isIndeterminate; },\n get label() { return local.label; },\n get 'aria-label'() { return ariaProps['aria-label']; },\n });\n\n // Calculate percentage\n const percentage = createMemo(() => {\n if (isIndeterminate()) {\n return undefined;\n }\n const value = ariaProps.value ?? 0;\n const minValue = ariaProps.minValue ?? 0;\n const maxValue = ariaProps.maxValue ?? 100;\n const clampedValue = clamp(value, minValue, maxValue);\n return ((clampedValue - minValue) / (maxValue - minValue)) * 100;\n });\n\n // Get value text from aria props\n const valueText = () => progressAria.progressBarProps['aria-valuetext'] as string | undefined;\n\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <div\n {...progressAria.progressBarProps}\n class={`w-full ${local.class ?? ''}`}\n >\n {/* Label and value row */}\n <Show when={local.label || showValueLabel()}>\n <div class={`flex justify-between items-center mb-1 ${sizeConfig().text}`}>\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium\">{local.label}</span>\n </Show>\n <Show when={showValueLabel() && !isIndeterminate()}>\n <span class=\"text-primary-300\">{valueText()}</span>\n </Show>\n </div>\n </Show>\n\n {/* Track */}\n <div class={`w-full ${sizeConfig().track} bg-bg-300 rounded-full overflow-hidden`}>\n {/* Fill */}\n <div\n class={`h-full rounded-full transition-all duration-300 ${variantStyles[variant()]} ${\n isIndeterminate() ? 'animate-progress-indeterminate' : ''\n }`}\n style={{\n width: isIndeterminate() ? '30%' : `${percentage()}%`,\n }}\n />\n </div>\n </div>\n );\n}\n", "/**\n * Separator component for proyecto-viviana-ui\n *\n * Styled separator component built on top of solidaria hook directly.\n */\n\nimport { type JSX, splitProps, createMemo, Show } from 'solid-js';\nimport { createSeparator, type Orientation } from '@proyecto-viviana/solidaria';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SeparatorVariant = 'default' | 'subtle' | 'strong';\nexport type SeparatorSize = 'sm' | 'md' | 'lg';\n\nexport interface SeparatorProps {\n /** The orientation of the separator. @default 'horizontal' */\n orientation?: Orientation;\n /** The visual style variant. @default 'default' */\n variant?: SeparatorVariant;\n /** The size/thickness of the separator. @default 'md' */\n size?: SeparatorSize;\n /** Additional CSS class name. */\n class?: string;\n /** An accessibility label for the separator. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst variantStyles = {\n default: 'bg-bg-100',\n subtle: 'bg-bg-200',\n strong: 'bg-primary-600',\n};\n\nconst horizontalSizeStyles = {\n sm: 'h-px',\n md: 'h-0.5',\n lg: 'h-1',\n};\n\nconst verticalSizeStyles = {\n sm: 'w-px',\n md: 'w-0.5',\n lg: 'w-1',\n};\n\n// ============================================\n// SEPARATOR COMPONENT\n// ============================================\n\n/**\n * A separator is a visual divider between two groups of content,\n * e.g. groups of menu items or sections of a page.\n *\n * @example\n * ```tsx\n * <Separator />\n *\n * // Vertical separator\n * <div class=\"flex items-center gap-4\">\n * <span>Item 1</span>\n * <Separator orientation=\"vertical\" />\n * <span>Item 2</span>\n * </div>\n *\n * // Different variants\n * <Separator variant=\"strong\" />\n * ```\n */\nexport function Separator(props: SeparatorProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n 'orientation',\n 'variant',\n 'size',\n 'class',\n ]);\n\n const orientation = () => local.orientation ?? 'horizontal';\n const variant = () => local.variant ?? 'default';\n const size = () => local.size ?? 'md';\n\n // Determine the element type\n const elementType = createMemo(() => {\n // If vertical, use div since hr is inherently horizontal\n if (orientation() === 'vertical') {\n return 'div';\n }\n return 'hr';\n });\n\n // Create separator aria props\n const separatorAria = createSeparator({\n get orientation() { return orientation(); },\n get elementType() { return elementType(); },\n get 'aria-label'() { return ariaProps['aria-label']; },\n });\n\n // Build class string\n const className = createMemo(() => {\n const isVertical = orientation() === 'vertical';\n const sizeStyles = isVertical ? verticalSizeStyles : horizontalSizeStyles;\n\n const base = [\n variantStyles[variant()],\n sizeStyles[size()],\n isVertical ? 'h-full self-stretch' : 'w-full',\n 'border-0', // Reset hr default border\n local.class ?? '',\n ];\n\n return base.filter(Boolean).join(' ');\n });\n\n // Extract props without ref to avoid type issues with specific element types\n const getAriaProps = () => {\n const { ref: _, ...props } = separatorAria.separatorProps as Record<string, unknown>;\n return props;\n };\n\n return (\n <Show\n when={orientation() === 'vertical'}\n fallback={\n <hr\n {...getAriaProps()}\n class={className()}\n />\n }\n >\n <div\n {...getAriaProps()}\n class={className()}\n />\n </Show>\n );\n}\n", "/**\n * Toolbar component for proyecto-viviana-ui\n *\n * Styled toolbar component built on top of solidaria-components Toolbar.\n */\n\nimport { type JSX, splitProps, createMemo } from 'solid-js'\nimport {\n Toolbar as HeadlessToolbar,\n type ToolbarProps as HeadlessToolbarProps,\n type ToolbarRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type ToolbarSize = 'sm' | 'md' | 'lg'\nexport type ToolbarVariant = 'default' | 'bordered' | 'ghost'\n\nexport interface ToolbarProps extends Omit<HeadlessToolbarProps, 'class' | 'style'> {\n /** The visual variant of the toolbar. @default 'default' */\n variant?: ToolbarVariant\n /** The size of the toolbar. @default 'md' */\n size?: ToolbarSize\n /** Additional CSS class name. */\n class?: string\n /** Inline styles. */\n style?: JSX.CSSProperties\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst baseStyles = 'vui-toolbar inline-flex items-center'\n\nconst variantStyles: Record<ToolbarVariant, string> = {\n default: 'bg-bg-50 rounded-md',\n bordered: 'border border-bg-200 rounded-md',\n ghost: '',\n}\n\nconst sizeStyles: Record<ToolbarSize, string> = {\n sm: 'gap-1 p-1',\n md: 'gap-2 p-2',\n lg: 'gap-3 p-3',\n}\n\nconst orientationStyles = {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n}\n\n// ============================================\n// TOOLBAR COMPONENT\n// ============================================\n\n/**\n * A styled toolbar for grouping interactive controls with keyboard navigation.\n *\n * @example\n * ```tsx\n * <Toolbar aria-label=\"Text formatting\">\n * <Button>Bold</Button>\n * <Button>Italic</Button>\n * <Separator orientation=\"vertical\" />\n * <Button>Align Left</Button>\n * <Button>Align Center</Button>\n * </Toolbar>\n *\n * // Vertical toolbar\n * <Toolbar orientation=\"vertical\" variant=\"bordered\">\n * <Button>Cut</Button>\n * <Button>Copy</Button>\n * <Button>Paste</Button>\n * </Toolbar>\n * ```\n */\nexport function Toolbar(props: ToolbarProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'variant',\n 'size',\n 'class',\n 'style',\n ])\n\n const variant = () => local.variant ?? 'default'\n const size = () => local.size ?? 'md'\n\n const getClassName = (renderProps: ToolbarRenderProps): string => {\n return [\n baseStyles,\n variantStyles[variant()],\n sizeStyles[size()],\n orientationStyles[renderProps.orientation],\n local.class ?? '',\n ].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessToolbar\n {...headlessProps}\n class={getClassName}\n style={local.style}\n />\n )\n}\n", "/**\n * SearchAutocomplete component for proyecto-viviana-ui\n *\n * A styled autocomplete component combining a search input with a\n * filterable dropdown list of options.\n */\n\nimport { type JSX, splitProps, createMemo, Show, For, createSignal } from 'solid-js'\nimport {\n Autocomplete,\n useAutocompleteInput,\n useAutocompleteCollection,\n useAutocompleteState,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SearchAutocompleteSize = 'sm' | 'md' | 'lg'\n\nexport interface SearchAutocompleteItem {\n id: string\n name: string\n [key: string]: unknown\n}\n\nexport interface SearchAutocompleteProps<T extends SearchAutocompleteItem = SearchAutocompleteItem> {\n /** The items to display in the dropdown. */\n items: T[]\n /** The size of the autocomplete. @default 'md' */\n size?: SearchAutocompleteSize\n /** Placeholder text for the input. */\n placeholder?: string\n /** Accessible label for the input. */\n 'aria-label'?: string\n /** Label text shown above the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** The current input value (controlled). */\n inputValue?: string\n /** The default input value (uncontrolled). */\n defaultInputValue?: string\n /** Handler called when the input value changes. */\n onInputChange?: (value: string) => void\n /** Handler called when an item is selected. */\n onSelect?: (item: T) => void\n /** Additional CSS class name. */\n class?: string\n /** Whether the input is disabled. */\n isDisabled?: boolean\n /**\n * Custom filter function. By default, filters by case-insensitive name match.\n */\n filter?: (textValue: string, inputValue: string) => boolean\n /**\n * Custom render function for items.\n */\n renderItem?: (item: T) => JSX.Element\n /**\n * Key to use for the display text. @default 'name'\n */\n textKey?: keyof T\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'h-8 px-3 text-sm',\n label: 'text-xs mb-1',\n list: 'max-h-48',\n item: 'px-3 py-1.5 text-sm',\n },\n md: {\n container: 'text-base',\n input: 'h-10 px-4 text-base',\n label: 'text-sm mb-1.5',\n list: 'max-h-64',\n item: 'px-4 py-2 text-base',\n },\n lg: {\n container: 'text-lg',\n input: 'h-12 px-5 text-lg',\n label: 'text-base mb-2',\n list: 'max-h-80',\n item: 'px-5 py-2.5 text-lg',\n },\n}\n\n// ============================================\n// INNER COMPONENTS\n// ============================================\n\nfunction AutocompleteInput(props: {\n placeholder?: string\n 'aria-label'?: string\n isDisabled?: boolean\n size: SearchAutocompleteSize\n}) {\n const ctx = useAutocompleteInput()\n if (!ctx) return null\n\n const styles = () => sizeStyles[props.size]\n\n return (\n <input\n ref={ctx.inputRef}\n type=\"text\"\n placeholder={props.placeholder}\n aria-label={props['aria-label']}\n disabled={props.isDisabled}\n value={ctx.inputProps.value()}\n onInput={(e) => ctx.inputProps.onChange(e.currentTarget.value)}\n onKeyDown={ctx.inputProps.onKeyDown}\n onFocus={ctx.inputProps.onFocus}\n onBlur={ctx.inputProps.onBlur}\n aria-activedescendant={ctx.inputProps['aria-activedescendant']()}\n aria-controls={ctx.inputProps['aria-controls']}\n aria-autocomplete={ctx.inputProps['aria-autocomplete']}\n autocomplete={ctx.inputProps.autoComplete}\n autocorrect={ctx.inputProps.autoCorrect}\n spellcheck={ctx.inputProps.spellCheck !== 'false'}\n class={[\n 'w-full rounded-md border border-bg-200 bg-bg-50',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500',\n 'placeholder:text-text-400',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n styles().input,\n ].join(' ')}\n />\n )\n}\n\nfunction AutocompleteList<T extends SearchAutocompleteItem>(props: {\n items: T[]\n size: SearchAutocompleteSize\n onSelect?: (item: T) => void\n renderItem?: (item: T) => JSX.Element\n textKey: keyof T\n}) {\n const ctx = useAutocompleteCollection()\n const state = useAutocompleteState()\n if (!ctx) return null\n\n const styles = () => sizeStyles[props.size]\n\n // Filter items based on input\n const filteredItems = createMemo(() => {\n if (!ctx.filter) return props.items\n return props.items.filter((item) => {\n const textValue = String(item[props.textKey] ?? item.name ?? '')\n return ctx.filter!(textValue)\n })\n })\n\n const handleSelect = (item: T) => {\n props.onSelect?.(item)\n state?.setInputValue(String(item[props.textKey] ?? item.name ?? ''))\n }\n\n return (\n <Show when={filteredItems().length > 0}>\n <ul\n ref={ctx.collectionRef}\n id={ctx.collectionProps.id}\n role=\"listbox\"\n aria-label={ctx.collectionProps['aria-label']}\n class={[\n 'mt-1 w-full rounded-md border border-bg-200 bg-bg-50 shadow-lg',\n 'overflow-auto',\n styles().list,\n ].join(' ')}\n >\n <For each={filteredItems()}>\n {(item) => {\n const itemId = `autocomplete-item-${item.id}`\n const isFocused = () => state?.focusedNodeId() === itemId\n\n return (\n <li\n id={itemId}\n role=\"option\"\n aria-selected={isFocused()}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => state?.setFocusedNodeId(itemId)}\n onMouseLeave={() => {\n if (state?.focusedNodeId() === itemId) {\n state?.setFocusedNodeId(null)\n }\n }}\n class={[\n 'cursor-pointer transition-colors',\n isFocused()\n ? 'bg-primary-100 text-primary-900'\n : 'hover:bg-bg-100',\n styles().item,\n ].join(' ')}\n >\n {props.renderItem ? props.renderItem(item) : String(item[props.textKey] ?? item.name)}\n </li>\n )\n }}\n </For>\n </ul>\n </Show>\n )\n}\n\n// ============================================\n// SEARCH AUTOCOMPLETE COMPONENT\n// ============================================\n\n/**\n * A styled autocomplete component for searching and selecting from a list.\n *\n * @example\n * ```tsx\n * const items = [\n * { id: '1', name: 'Apple' },\n * { id: '2', name: 'Banana' },\n * { id: '3', name: 'Cherry' },\n * ];\n *\n * <SearchAutocomplete\n * items={items}\n * placeholder=\"Search fruits...\"\n * aria-label=\"Fruit search\"\n * onSelect={(item) => console.log('Selected:', item)}\n * />\n *\n * // With custom filter\n * <SearchAutocomplete\n * items={items}\n * filter={(textValue, inputValue) =>\n * textValue.toLowerCase().startsWith(inputValue.toLowerCase())\n * }\n * onSelect={(item) => console.log('Selected:', item)}\n * />\n *\n * // With label and description\n * <SearchAutocomplete\n * items={items}\n * label=\"Search\"\n * description=\"Type to filter the list\"\n * placeholder=\"Start typing...\"\n * />\n * ```\n */\nexport function SearchAutocomplete<T extends SearchAutocompleteItem = SearchAutocompleteItem>(\n props: SearchAutocompleteProps<T>\n): JSX.Element {\n const [local, autocompleteProps] = splitProps(props, [\n 'items',\n 'size',\n 'placeholder',\n 'aria-label',\n 'label',\n 'description',\n 'onSelect',\n 'class',\n 'isDisabled',\n 'renderItem',\n 'textKey',\n ])\n\n const size = () => local.size ?? 'md'\n const textKey = () => local.textKey ?? 'name'\n const styles = () => sizeStyles[size()]\n\n // Default filter: case-insensitive contains\n const defaultFilter = (textValue: string, inputValue: string) => {\n if (!inputValue) return true\n return textValue.toLowerCase().includes(inputValue.toLowerCase())\n }\n\n return (\n <div class={['vui-search-autocomplete relative', styles().container, local.class].filter(Boolean).join(' ')}>\n <Show when={local.label}>\n <label class={['block font-medium text-text-700', styles().label].join(' ')}>\n {local.label}\n </label>\n </Show>\n\n <Autocomplete\n {...autocompleteProps}\n filter={autocompleteProps.filter ?? defaultFilter}\n >\n <AutocompleteInput\n placeholder={local.placeholder}\n aria-label={local['aria-label']}\n isDisabled={local.isDisabled}\n size={size()}\n />\n <AutocompleteList\n items={local.items}\n size={size()}\n onSelect={local.onSelect}\n renderItem={local.renderItem}\n textKey={textKey() as keyof T}\n />\n </Autocomplete>\n\n <Show when={local.description}>\n <p class=\"mt-1 text-sm text-text-500\">{local.description}</p>\n </Show>\n </div>\n )\n}\n", "/**\n * Select component for proyecto-viviana-ui\n *\n * Styled select component built on top of solidaria-components.\n * Inspired by Spectrum 2's Picker component patterns.\n */\n\nimport { type JSX, Show, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Select as HeadlessSelect,\n SelectTrigger as HeadlessSelectTrigger,\n SelectValue as HeadlessSelectValue,\n SelectListBox as HeadlessSelectListBox,\n SelectOption as HeadlessSelectOption,\n type SelectProps as HeadlessSelectProps,\n type SelectTriggerProps as HeadlessSelectTriggerProps,\n type SelectValueProps as HeadlessSelectValueProps,\n type SelectListBoxProps as HeadlessSelectListBoxProps,\n type SelectOptionProps as HeadlessSelectOptionProps,\n type SelectRenderProps,\n type SelectTriggerRenderProps,\n type SelectValueRenderProps,\n type SelectListBoxRenderProps,\n type SelectOptionRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\nconst SelectSizeContext = createContext<SelectSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface SelectProps<T> extends Omit<HeadlessSelectProps<T>, 'class' | 'style'> {\n /** The size of the select. */\n size?: SelectSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the select. */\n label?: string\n /** Description for the select. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n /** Whether the select is invalid. */\n isInvalid?: boolean\n}\n\nexport interface SelectTriggerProps extends Omit<HeadlessSelectTriggerProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface SelectValueProps<T> extends Omit<HeadlessSelectValueProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface SelectListBoxProps<T> extends Omit<HeadlessSelectListBoxProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface SelectOptionProps<T> extends Omit<HeadlessSelectOptionProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n trigger: 'h-8 text-sm px-3 gap-2',\n label: 'text-sm',\n option: 'text-sm py-1.5 px-3',\n icon: 'h-4 w-4',\n },\n md: {\n trigger: 'h-10 text-base px-4 gap-2',\n label: 'text-base',\n option: 'text-base py-2 px-4',\n icon: 'h-5 w-5',\n },\n lg: {\n trigger: 'h-12 text-lg px-5 gap-3',\n label: 'text-lg',\n option: 'text-lg py-2.5 px-5',\n icon: 'h-6 w-6',\n },\n}\n\n// ============================================\n// SELECT COMPONENT\n// ============================================\n\n/**\n * A select displays a collapsible list of options and allows a user to select one of them.\n *\n * Built on solidaria-components Select for full accessibility support.\n */\nexport function Select<T>(props: SelectProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectRenderProps): string => {\n const base = 'relative inline-flex flex-col gap-1.5'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <SelectSizeContext.Provider value={size}>\n <HeadlessSelect\n {...headlessProps}\n class={getClassName}\n >\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${sizeStyles[size].label}`}>\n {local.label}\n </label>\n </Show>\n {props.children}\n <Show when={local.description && !local.isInvalid}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && local.isInvalid}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </HeadlessSelect>\n </SelectSizeContext.Provider>\n )\n}\n\n// ============================================\n// SELECT TRIGGER COMPONENT\n// ============================================\n\n/**\n * The trigger button for a select.\n * SSR-compatible - renders children and chevron icon directly without render props.\n */\nexport function SelectTrigger(props: SelectTriggerProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(SelectSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectTriggerRenderProps): string => {\n const base = 'inline-flex items-center justify-between rounded-lg border-2 transition-all duration-200 w-full'\n const sizeClass = sizeStyle.trigger\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (renderProps.isOpen) {\n colorClass = 'border-accent bg-bg-300 text-primary-100'\n } else if (renderProps.isHovered) {\n colorClass = 'border-accent-300 bg-bg-300 text-primary-100 cursor-pointer'\n } else {\n colorClass = 'border-primary-600 bg-bg-400 text-primary-200 cursor-pointer'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessSelectTrigger\n {...headlessProps}\n class={getClassName}\n >\n {props.children as JSX.Element}\n {/* Chevron rotates via CSS based on data-open attribute from headless component */}\n <ChevronIcon class={`${sizeStyle.icon} transition-transform duration-200 data-open:rotate-180`} />\n </HeadlessSelectTrigger>\n )\n}\n\n// ============================================\n// SELECT VALUE COMPONENT\n// ============================================\n\n/**\n * Displays the selected value in a select.\n */\nexport function SelectValue<T>(props: SelectValueProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectValueRenderProps<T>): string => {\n const base = 'truncate flex-1 text-left'\n const placeholderClass = !renderProps.isSelected ? 'text-primary-500' : ''\n return [base, placeholderClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessSelectValue\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// SELECT LISTBOX COMPONENT\n// ============================================\n\n/**\n * The listbox popup for a select.\n */\nexport function SelectListBox<T>(props: SelectListBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: SelectListBoxRenderProps): string => {\n const base = 'absolute z-50 mt-1 w-full rounded-lg border-2 border-primary-600 bg-bg-400 py-1 shadow-lg max-h-60 overflow-auto'\n return [base, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessSelectListBox\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// SELECT OPTION COMPONENT\n// ============================================\n\n// Padding classes for when no check icon is shown (to maintain alignment)\nconst paddingStyles = {\n sm: 'pl-6', // h-4 (1rem) + gap-2 (0.5rem) = 1.5rem = pl-6\n md: 'pl-7', // h-5 (1.25rem) + gap-2 (0.5rem) = 1.75rem ≈ pl-7\n lg: 'pl-9', // h-6 (1.5rem) + gap-3 (0.75rem) = 2.25rem = pl-9\n}\n\n/**\n * An option in a select listbox.\n * SSR-compatible - renders check icon and content directly without render props.\n */\nexport function SelectOption<T>(props: SelectOptionProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(SelectSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectOptionRenderProps): string => {\n const base = 'flex items-center gap-2 cursor-pointer transition-colors duration-150'\n const sizeClass = sizeStyle.option\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n colorClass = 'bg-accent/20 text-accent'\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const iconClass = `${sizeStyle.icon} text-accent shrink-0 hidden data-selected:block`\n const paddingClass = paddingStyles[size]\n\n return (\n <HeadlessSelectOption\n {...headlessProps}\n class={getClassName}\n >\n {/* Check icon shows only when selected via data-selected attribute */}\n <CheckIcon class={iconClass} />\n <span class={`flex-1 data-selected:pl-0 ${paddingClass}`}>\n {props.children as JSX.Element}\n </span>\n </HeadlessSelectOption>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nSelect.Trigger = SelectTrigger\nSelect.Value = SelectValue\nSelect.ListBox = SelectListBox\nSelect.Option = SelectOption\n\n// Re-export Key type for convenience\nexport type { Key }\n", "/**\n * Menu component for proyecto-viviana-ui\n *\n * Styled menu component built on top of solidaria-components.\n * Inspired by Spectrum 2's Menu component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Menu as HeadlessMenu,\n MenuItem as HeadlessMenuItem,\n MenuTrigger as HeadlessMenuTrigger,\n MenuButton as HeadlessMenuButton,\n type MenuProps as HeadlessMenuProps,\n type MenuItemProps as HeadlessMenuItemProps,\n type MenuTriggerProps as HeadlessMenuTriggerProps,\n type MenuButtonProps as HeadlessMenuButtonProps,\n type MenuRenderProps,\n type MenuItemRenderProps,\n type MenuTriggerRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type MenuSize = 'sm' | 'md' | 'lg'\n\nconst MenuSizeContext = createContext<MenuSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface MenuTriggerProps extends Omit<HeadlessMenuTriggerProps, 'class' | 'style'> {\n /** The size of the menu. */\n size?: MenuSize\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface MenuButtonProps extends Omit<HeadlessMenuButtonProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Visual variant of the button. */\n variant?: 'primary' | 'secondary' | 'quiet'\n}\n\nexport interface MenuProps<T> extends Omit<HeadlessMenuProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface MenuItemProps<T> extends Omit<HeadlessMenuItemProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /**\n * Optional icon to display before the label.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n */\n icon?: () => JSX.Element\n /** Optional keyboard shortcut to display. */\n shortcut?: string\n /** Whether this is a destructive action. */\n isDestructive?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n button: 'h-8 text-sm px-3 gap-2',\n menu: 'py-1',\n item: 'text-sm py-1.5 px-3 gap-2',\n icon: 'h-4 w-4',\n },\n md: {\n button: 'h-10 text-base px-4 gap-2',\n menu: 'py-1.5',\n item: 'text-base py-2 px-4 gap-3',\n icon: 'h-5 w-5',\n },\n lg: {\n button: 'h-12 text-lg px-5 gap-3',\n menu: 'py-2',\n item: 'text-lg py-2.5 px-5 gap-3',\n icon: 'h-6 w-6',\n },\n}\n\nconst buttonVariants = {\n primary: 'bg-accent text-bg-500 border-accent hover:bg-accent-300 hover:border-accent-300',\n secondary: 'bg-bg-400 text-primary-200 border-primary-600 hover:bg-bg-300 hover:border-accent-300',\n quiet: 'bg-transparent text-primary-200 border-transparent hover:bg-bg-300',\n}\n\n// ============================================\n// MENU TRIGGER COMPONENT\n// ============================================\n\n/**\n * A menu trigger wraps a button and menu, handling the open/close state.\n */\nexport function MenuTrigger(props: MenuTriggerProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class'])\n const size = local.size ?? 'md'\n\n return (\n <MenuSizeContext.Provider value={size}>\n <div class={`relative inline-block ${local.class ?? ''}`}>\n <HeadlessMenuTrigger {...headlessProps}>\n {props.children}\n </HeadlessMenuTrigger>\n </div>\n </MenuSizeContext.Provider>\n )\n}\n\n// ============================================\n// MENU BUTTON COMPONENT\n// ============================================\n\n/**\n * A button that opens a menu.\n * SSR-compatible - renders children and chevron icon directly without render props.\n */\nexport function MenuButton(props: MenuButtonProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'variant'])\n const size = useContext(MenuSizeContext)\n const sizeStyle = sizeStyles[size]\n const variant = local.variant ?? 'secondary'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: MenuTriggerRenderProps): string => {\n const base = 'inline-flex items-center justify-center rounded-lg border-2 font-medium transition-all duration-200'\n const sizeClass = sizeStyle.button\n const variantClass = buttonVariants[variant]\n\n let stateClass: string\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isPressed) {\n stateClass = 'scale-95'\n } else {\n stateClass = 'cursor-pointer'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, variantClass, stateClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessMenuButton\n {...headlessProps}\n class={getClassName}\n >\n {props.children as JSX.Element}\n {/* Chevron rotates via CSS based on data-open attribute */}\n <ChevronIcon class={`${sizeStyle.icon} transition-transform duration-200 data-open:rotate-180`} />\n </HeadlessMenuButton>\n )\n}\n\n// ============================================\n// MENU COMPONENT\n// ============================================\n\n/**\n * A menu displays a list of actions or options for the user to choose from.\n */\nexport function Menu<T>(props: MenuProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(MenuSizeContext)\n const styles = () => sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: MenuRenderProps): string => {\n const base = 'absolute z-50 mt-1 min-w-[12rem] rounded-lg border-2 border-primary-600 bg-bg-400 shadow-lg overflow-hidden'\n const sizeClass = styles().menu\n return [base, sizeClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessMenu\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// MENU ITEM COMPONENT\n// ============================================\n\n/**\n * An item in a menu.\n * SSR-compatible - renders icon, content, and shortcut directly without render props.\n */\nexport function MenuItem<T>(props: MenuItemProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'icon', 'shortcut', 'isDestructive'])\n const size = useContext(MenuSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: MenuItemRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-colors duration-150 outline-none'\n const sizeClass = sizeStyle.item\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (local.isDestructive) {\n if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-danger-400/20 text-danger-400'\n } else {\n colorClass = 'text-danger-400'\n }\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const pressedClass = renderProps.isPressed ? 'bg-bg-200' : ''\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, pressedClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessMenuItem\n {...headlessProps}\n class={getClassName}\n >\n {local.icon && <span class={`shrink-0 ${sizeStyle.icon}`}>{local.icon()}</span>}\n <span class=\"flex-1\">{props.children as JSX.Element}</span>\n {local.shortcut && <span class=\"text-primary-500 text-sm ml-auto\">{local.shortcut}</span>}\n </HeadlessMenuItem>\n )\n}\n\n// ============================================\n// MENU SEPARATOR COMPONENT\n// ============================================\n\nexport interface MenuSeparatorProps {\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A visual separator between menu items.\n */\nexport function MenuSeparator(props: MenuSeparatorProps): JSX.Element {\n return (\n <li\n role=\"separator\"\n class={`my-1 border-t border-primary-600 ${props.class ?? ''}`}\n />\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nMenu.Item = MenuItem\nMenu.Separator = MenuSeparator\nMenuTrigger.Button = MenuButton\n\n// Re-export Key type for convenience\nexport type { Key }\n", "/**\n * ListBox component for proyecto-viviana-ui\n *\n * Styled listbox component built on top of solidaria-components.\n * Inspired by Spectrum 2's ListBox component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n ListBox as HeadlessListBox,\n ListBoxOption as HeadlessListBoxOption,\n type ListBoxProps as HeadlessListBoxProps,\n type ListBoxOptionProps as HeadlessListBoxOptionProps,\n type ListBoxRenderProps,\n type ListBoxOptionRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type ListBoxSize = 'sm' | 'md' | 'lg'\n\nconst ListBoxSizeContext = createContext<ListBoxSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface ListBoxProps<T> extends Omit<HeadlessListBoxProps<T>, 'class' | 'style'> {\n /** The size of the listbox. */\n size?: ListBoxSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the listbox. */\n label?: string\n /** Description for the listbox. */\n description?: string\n}\n\nexport interface ListBoxOptionProps<T> extends Omit<HeadlessListBoxOptionProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Optional description text. */\n description?: string\n /**\n * Optional icon to display before the label.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n */\n icon?: () => JSX.Element\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n list: 'py-1',\n option: 'text-sm py-1.5 px-3 gap-2',\n icon: 'h-4 w-4',\n label: 'text-sm',\n description: 'text-xs',\n },\n md: {\n list: 'py-1.5',\n option: 'text-base py-2 px-4 gap-3',\n icon: 'h-5 w-5',\n label: 'text-base',\n description: 'text-sm',\n },\n lg: {\n list: 'py-2',\n option: 'text-lg py-2.5 px-5 gap-3',\n icon: 'h-6 w-6',\n label: 'text-lg',\n description: 'text-base',\n },\n}\n\n// ============================================\n// LISTBOX COMPONENT\n// ============================================\n\n/**\n * A listbox displays a list of options and allows a user to select one or more of them.\n *\n * Built on solidaria-components ListBox for full accessibility support.\n */\nexport function ListBox<T>(props: ListBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'renderEmptyState',\n ])\n\n const size = local.size ?? 'md'\n const styles = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ListBoxRenderProps): string => {\n const base = 'rounded-lg border-2 border-primary-600 bg-bg-400 overflow-auto focus:outline-none'\n const sizeClass = styles.list\n\n let stateClass: string\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n } else {\n stateClass = ''\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, stateClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const defaultEmptyState = () => (\n <li class=\"py-4 px-4 text-center text-primary-500\">\n No items\n </li>\n )\n\n return (\n <ListBoxSizeContext.Provider value={size}>\n <div class=\"flex flex-col gap-1.5\">\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${styles.label}`}>\n {local.label}\n </label>\n </Show>\n <HeadlessListBox\n {...headlessProps}\n class={getClassName}\n renderEmptyState={local.renderEmptyState ?? defaultEmptyState}\n children={props.children}\n />\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n </div>\n </ListBoxSizeContext.Provider>\n )\n}\n\n// ============================================\n// LISTBOX OPTION COMPONENT\n// ============================================\n\n/**\n * An option in a listbox.\n * SSR-compatible - renders icon, check, content, and description directly without render props.\n */\nexport function ListBoxOption<T>(props: ListBoxOptionProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'description', 'icon'])\n const size = useContext(ListBoxSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ListBoxOptionRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-colors duration-150 outline-none'\n const sizeClass = sizeStyle.option\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-accent/30 text-accent'\n } else {\n colorClass = 'bg-accent/20 text-accent'\n }\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessListBoxOption\n {...headlessProps}\n class={getClassName}\n >\n {local.icon && <span class={`shrink-0 ${sizeStyle.icon}`}>{local.icon()}</span>}\n <CheckIcon class={`shrink-0 ${sizeStyle.icon} text-accent hidden data-selected:block`} />\n <div class=\"flex flex-col flex-1 min-w-0\">\n <span class=\"truncate\">{props.children as JSX.Element}</span>\n {local.description && (\n <span class={`text-primary-400 truncate ${sizeStyle.description}`}>\n {local.description}\n </span>\n )}\n </div>\n </HeadlessListBoxOption>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nListBox.Option = ListBoxOption\n\n// Re-export Key type for convenience\nexport type { Key }\n", "/**\n * Tabs component for proyecto-viviana-ui\n *\n * Styled tabs component built on top of solidaria-components.\n * Inspired by Spectrum 2's Tabs component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Tabs as HeadlessTabs,\n TabList as HeadlessTabList,\n Tab as HeadlessTab,\n TabPanel as HeadlessTabPanel,\n type TabsProps as HeadlessTabsProps,\n type TabListProps as HeadlessTabListProps,\n type TabProps as HeadlessTabProps,\n type TabPanelProps as HeadlessTabPanelProps,\n type TabsRenderProps,\n type TabListRenderProps,\n type TabRenderProps,\n type TabPanelRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, TabOrientation } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type TabsSize = 'sm' | 'md' | 'lg'\nexport type TabsVariant = 'underline' | 'pill' | 'boxed'\n\ninterface TabsContextValue {\n size: TabsSize\n variant: TabsVariant\n}\n\nconst TabsSizeContext = createContext<TabsContextValue>({ size: 'md', variant: 'underline' })\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TabsProps<T> extends Omit<HeadlessTabsProps<T>, 'class' | 'style'> {\n /** The size of the tabs. */\n size?: TabsSize\n /** The visual variant of the tabs. */\n variant?: TabsVariant\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TabListProps<T> extends Omit<HeadlessTabListProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TabProps extends Omit<HeadlessTabProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TabPanelProps extends Omit<HeadlessTabPanelProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n tab: 'text-sm px-3 py-1.5',\n tabList: 'gap-1',\n panel: 'text-sm p-3',\n },\n md: {\n tab: 'text-base px-4 py-2',\n tabList: 'gap-2',\n panel: 'text-base p-4',\n },\n lg: {\n tab: 'text-lg px-5 py-2.5',\n tabList: 'gap-3',\n panel: 'text-lg p-5',\n },\n}\n\nconst variantStyles = {\n underline: {\n tabList: 'border-b-2 border-primary-600',\n tab: {\n base: 'relative border-b-2 -mb-0.5 transition-colors duration-200',\n default: 'border-transparent text-primary-400 hover:text-primary-200 hover:border-primary-400',\n selected: 'border-accent text-accent',\n disabled: 'border-transparent text-primary-600 cursor-not-allowed',\n },\n },\n pill: {\n tabList: 'bg-bg-300 rounded-lg p-1',\n tab: {\n base: 'rounded-md transition-all duration-200',\n default: 'text-primary-400 hover:text-primary-200 hover:bg-bg-400',\n selected: 'bg-accent text-primary-100 shadow-sm',\n disabled: 'text-primary-600 cursor-not-allowed',\n },\n },\n boxed: {\n tabList: 'border-2 border-primary-600 rounded-lg overflow-hidden',\n tab: {\n base: 'border-r-2 border-primary-600 last:border-r-0 transition-colors duration-200',\n default: 'text-primary-400 bg-bg-400 hover:text-primary-200 hover:bg-bg-300',\n selected: 'bg-accent/20 text-accent',\n disabled: 'text-primary-600 bg-bg-300 cursor-not-allowed',\n },\n },\n}\n\n// ============================================\n// TABS COMPONENT\n// ============================================\n\n/**\n * Tabs organize content into multiple sections and allow users to navigate between them.\n *\n * Built on solidaria-components Tabs for full accessibility support.\n */\nexport function Tabs<T>(props: TabsProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n ])\n\n const size = local.size ?? 'md'\n const variant = local.variant ?? 'underline'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabsRenderProps): string => {\n const base = 'flex flex-col'\n const orientationClass = renderProps.orientation === 'vertical' ? 'flex-row' : 'flex-col'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, orientationClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <TabsSizeContext.Provider value={{ size, variant }}>\n <HeadlessTabs\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n </TabsSizeContext.Provider>\n )\n}\n\n// ============================================\n// TAB LIST COMPONENT\n// ============================================\n\n/**\n * A TabList contains Tab elements that represent the available tabs.\n */\nexport function TabList<T>(props: TabListProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(TabsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabListRenderProps): string => {\n const base = 'flex'\n const orientationClass = renderProps.orientation === 'vertical' ? 'flex-col' : 'flex-row'\n const sizeClass = sizeStyles[ctx.size].tabList\n const variantClass = variantStyles[ctx.variant].tabList\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, orientationClass, sizeClass, variantClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTabList\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// TAB COMPONENT\n// ============================================\n\n/**\n * A Tab represents an individual tab in a TabList.\n */\nexport function Tab(props: TabProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(TabsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabRenderProps): string => {\n const sizeClass = sizeStyles[ctx.size].tab\n const variantBase = variantStyles[ctx.variant].tab.base\n\n let stateClass: string\n if (renderProps.isDisabled) {\n stateClass = variantStyles[ctx.variant].tab.disabled\n } else if (renderProps.isSelected) {\n stateClass = variantStyles[ctx.variant].tab.selected\n } else {\n stateClass = variantStyles[ctx.variant].tab.default\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-1 ring-offset-bg-400 outline-none'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'scale-95' : ''\n const cursorClass = renderProps.isDisabled ? '' : 'cursor-pointer'\n\n return [variantBase, sizeClass, stateClass, focusClass, pressedClass, cursorClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTab\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// TAB PANEL COMPONENT\n// ============================================\n\n/**\n * A TabPanel displays the content for a selected Tab.\n */\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(TabsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabPanelRenderProps): string => {\n const base = 'outline-none'\n const sizeClass = sizeStyles[ctx.size].panel\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTabPanel\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// Attach sub-components for convenience\nTabs.List = TabList\nTabs.Tab = Tab\nTabs.Panel = TabPanel\n\n// Re-export types for convenience\nexport type { Key, TabOrientation }\n", "/**\n * Breadcrumbs component for proyecto-viviana-ui\n *\n * Styled breadcrumbs component built on top of solidaria-components.\n * Inspired by Spectrum 2's Breadcrumbs component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Breadcrumbs as HeadlessBreadcrumbs,\n BreadcrumbItem as HeadlessBreadcrumbItem,\n type BreadcrumbsProps as HeadlessBreadcrumbsProps,\n type BreadcrumbItemProps as HeadlessBreadcrumbItemProps,\n type BreadcrumbsRenderProps,\n type BreadcrumbItemRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type BreadcrumbsSize = 'sm' | 'md' | 'lg'\nexport type BreadcrumbsVariant = 'default' | 'subtle'\n\ninterface BreadcrumbsContextValue {\n size: BreadcrumbsSize\n variant: BreadcrumbsVariant\n showSeparator: boolean\n}\n\nconst BreadcrumbsSizeContext = createContext<BreadcrumbsContextValue>({\n size: 'md',\n variant: 'default',\n showSeparator: true,\n})\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface BreadcrumbsProps<T> extends Omit<HeadlessBreadcrumbsProps<T>, 'class' | 'style'> {\n /** The size of the breadcrumbs. */\n size?: BreadcrumbsSize\n /** The visual variant. */\n variant?: BreadcrumbsVariant\n /** Whether to show separators between items. */\n showSeparator?: boolean\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface BreadcrumbItemProps extends Omit<HeadlessBreadcrumbItemProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n text: 'text-sm',\n icon: 'h-3 w-3',\n gap: 'gap-1',\n },\n md: {\n text: 'text-base',\n icon: 'h-4 w-4',\n gap: 'gap-1.5',\n },\n lg: {\n text: 'text-lg',\n icon: 'h-5 w-5',\n gap: 'gap-2',\n },\n}\n\nconst variantStyles = {\n default: {\n item: 'text-primary-400 hover:text-primary-200',\n current: 'text-primary-100 font-medium',\n separator: 'text-primary-500',\n },\n subtle: {\n item: 'text-primary-500 hover:text-primary-300',\n current: 'text-primary-200',\n separator: 'text-primary-600',\n },\n}\n\n// ============================================\n// BREADCRUMBS COMPONENT\n// ============================================\n\n/**\n * Breadcrumbs show hierarchy and navigational context for a user's location within an application.\n *\n * Built on solidaria-components Breadcrumbs for full accessibility support.\n */\nexport function Breadcrumbs<T>(props: BreadcrumbsProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'showSeparator',\n 'class',\n ])\n\n const size = local.size ?? 'md'\n const variant = local.variant ?? 'default'\n const showSeparator = local.showSeparator ?? true\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: BreadcrumbsRenderProps): string => {\n const base = 'flex items-center'\n const sizeClass = sizeStyles[size].gap\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, sizeClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <BreadcrumbsSizeContext.Provider value={{ size, variant, showSeparator }}>\n <HeadlessBreadcrumbs\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n </BreadcrumbsSizeContext.Provider>\n )\n}\n\n// ============================================\n// BREADCRUMB ITEM COMPONENT\n// ============================================\n\n/**\n * A BreadcrumbItem represents an individual breadcrumb in the navigation trail.\n */\nexport function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(BreadcrumbsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: BreadcrumbItemRenderProps): string => {\n const sizeClass = sizeStyles[ctx.size].text\n const vStyles = variantStyles[ctx.variant]\n\n let stateClass: string\n if (renderProps.isCurrent) {\n stateClass = vStyles.current\n } else if (renderProps.isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed'\n } else {\n stateClass = vStyles.item\n }\n\n const cursorClass = renderProps.isCurrent || renderProps.isDisabled ? '' : 'cursor-pointer'\n const transitionClass = 'transition-colors duration-150'\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-1 ring-offset-bg-400 outline-none rounded'\n : ''\n\n return [sizeClass, stateClass, cursorClass, transitionClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const vStyles = variantStyles[ctx.variant]\n // Hide separator on first item, and on current (last) item\n const separatorClass = `${sizeStyles[ctx.size].icon} ${vStyles.separator} mx-1 shrink-0 hidden data-current:hidden [&:not([data-current])]:block [li:first-child_&]:!hidden`\n\n // Wrap children with separator icon\n const renderChildren = () => (\n <>\n {/* Separator shows before items except first and current */}\n {ctx.showSeparator && <ChevronIcon class={separatorClass} />}\n {props.children as JSX.Element}\n </>\n )\n\n return (\n <HeadlessBreadcrumbItem\n {...headlessProps}\n class={getClassName}\n children={renderChildren()}\n />\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nBreadcrumbs.Item = BreadcrumbItem\n", "/**\n * NumberField component for proyecto-viviana-ui\n *\n * A styled number field component with increment/decrement buttons.\n * Built directly on solidaria hooks for full accessibility support.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createNumberField,\n createFocusRing,\n createPress,\n createHover,\n type AriaNumberFieldProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createNumberFieldState,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type NumberFieldSize = 'sm' | 'md' | 'lg'\nexport type NumberFieldVariant = 'outline' | 'filled'\n\nexport interface NumberFieldProps extends Omit<AriaNumberFieldProps, 'label'> {\n /** The size of the number field. */\n size?: NumberFieldSize\n /** The visual variant of the number field. */\n variant?: NumberFieldVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** Error message shown when invalid. */\n errorMessage?: string\n /** The current value (controlled). */\n value?: number\n /** The default value (uncontrolled). */\n defaultValue?: number\n /** Handler called when the value changes. */\n onChange?: (value: number) => void\n /** The minimum value. */\n minValue?: number\n /** The maximum value. */\n maxValue?: number\n /** The step value for increment/decrement. */\n step?: number\n /** The locale for number formatting. */\n locale?: string\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions\n /** Whether to hide the stepper buttons. */\n hideStepper?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n input: 'h-8 px-2 text-sm',\n label: 'text-sm',\n description: 'text-xs',\n button: 'w-6 h-6 text-sm',\n buttonGap: 'gap-0.5',\n },\n md: {\n input: 'h-10 px-3 text-base',\n label: 'text-sm',\n description: 'text-sm',\n button: 'w-8 h-8 text-base',\n buttonGap: 'gap-1',\n },\n lg: {\n input: 'h-12 px-4 text-lg',\n label: 'text-base',\n description: 'text-sm',\n button: 'w-10 h-10 text-lg',\n buttonGap: 'gap-1',\n },\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction PlusIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M8 3v10M3 8h10\" />\n </svg>\n )\n}\n\nfunction MinusIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M3 8h10\" />\n </svg>\n )\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A number field allows users to enter a numeric value with increment/decrement controls.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function NumberField(props: NumberFieldProps): JSX.Element {\n const defaultProps: Partial<NumberFieldProps> = {\n size: 'md',\n variant: 'outline',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, stateProps, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'hideStepper',\n ], [\n 'value',\n 'defaultValue',\n 'onChange',\n 'minValue',\n 'maxValue',\n 'step',\n 'locale',\n 'formatOptions',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Ref for input element\n let inputRef: HTMLInputElement | undefined\n\n // Create number field state\n const state = createNumberFieldState({\n get value() {\n return stateProps.value\n },\n get defaultValue() {\n return stateProps.defaultValue\n },\n get onChange() {\n return stateProps.onChange\n },\n get minValue() {\n return stateProps.minValue\n },\n get maxValue() {\n return stateProps.maxValue\n },\n get step() {\n return stateProps.step\n },\n get locale() {\n return stateProps.locale\n },\n get formatOptions() {\n return stateProps.formatOptions\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get isReadOnly() {\n return ariaProps.isReadOnly\n },\n })\n\n // Create number field aria props\n const numberFieldAria = createNumberField(\n {\n get label() {\n return local.label\n },\n get 'aria-label'() {\n return ariaProps['aria-label']\n },\n get 'aria-labelledby'() {\n return ariaProps['aria-labelledby']\n },\n get 'aria-describedby'() {\n return ariaProps['aria-describedby']\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get isReadOnly() {\n return ariaProps.isReadOnly\n },\n get isRequired() {\n return ariaProps.isRequired\n },\n get isInvalid() {\n return ariaProps.isInvalid\n },\n get description() {\n return local.description\n },\n get errorMessage() {\n return local.errorMessage\n },\n get id() {\n return ariaProps.id\n },\n get autoFocus() {\n return ariaProps.autoFocus\n },\n get name() {\n return ariaProps.name\n },\n },\n state,\n () => inputRef ?? null\n )\n\n // Create focus ring for input\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Increment button interactions\n const { isPressed: incrementPressed, pressProps: incrementPressProps } = createPress({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canIncrement()\n },\n onPress: () => {\n state.increment()\n inputRef?.focus()\n },\n })\n\n const { isHovered: incrementHovered, hoverProps: incrementHoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canIncrement()\n },\n })\n\n // Decrement button interactions\n const { isPressed: decrementPressed, pressProps: decrementPressProps } = createPress({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canDecrement()\n },\n onPress: () => {\n state.decrement()\n inputRef?.focus()\n },\n })\n\n const { isHovered: decrementHovered, hoverProps: decrementHoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canDecrement()\n },\n })\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const groupClasses = () => {\n const base = 'flex items-center'\n const gapClass = size().buttonGap\n return [base, gapClass].filter(Boolean).join(' ')\n }\n\n const inputClasses = () => {\n const base = 'flex-1 rounded-md transition-all duration-200 outline-none text-center'\n const sizeClass = size().input\n\n let variantClass: string\n if (local.variant === 'filled') {\n variantClass = 'bg-bg-200 border border-transparent'\n } else {\n variantClass = 'bg-transparent border border-bg-400'\n }\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (ariaProps.isInvalid) {\n stateClass = 'border-danger-500 focus:border-danger-400 focus:ring-2 focus:ring-danger-400/20'\n } else {\n stateClass = 'text-primary-100 placeholder:text-primary-500 focus:border-accent focus:ring-2 focus:ring-accent/20'\n }\n\n const hoverClass = ariaProps.isDisabled ? '' : 'hover:border-accent-300'\n\n return [base, sizeClass, variantClass, stateClass, hoverClass].filter(Boolean).join(' ')\n }\n\n const buttonClasses = (isIncrement: boolean) => {\n const base = 'flex items-center justify-center rounded-md transition-all duration-150 select-none'\n const sizeClass = size().button\n\n const isDisabled = ariaProps.isDisabled || (isIncrement ? !state.canIncrement() : !state.canDecrement())\n const isPressed = isIncrement ? incrementPressed() : decrementPressed()\n const isHovered = isIncrement ? incrementHovered() : decrementHovered()\n\n let stateClass: string\n if (isDisabled) {\n stateClass = 'bg-bg-300 text-primary-600 cursor-not-allowed'\n } else if (isPressed) {\n stateClass = 'bg-accent-600 text-white scale-95'\n } else if (isHovered) {\n stateClass = 'bg-accent-500 text-white'\n } else {\n stateClass = 'bg-bg-300 text-primary-200 hover:bg-accent-500 hover:text-white'\n }\n\n return [base, sizeClass, stateClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'block font-medium text-primary-200 mb-1'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const descriptionClasses = () => {\n const base = 'mt-1 text-primary-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const errorClasses = () => {\n const base = 'mt-1 text-danger-500'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n // Clean props helpers\n const cleanInputProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.inputProps as Record<string, unknown>\n return rest\n }\n\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>\n return rest\n }\n\n const cleanGroupProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.groupProps as Record<string, unknown>\n return rest\n }\n\n const cleanDecrementProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.decrementButtonProps as Record<string, unknown>\n return rest\n }\n\n const cleanIncrementProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.incrementButtonProps as Record<string, unknown>\n return rest\n }\n\n const cleanDecrementPressProps = () => {\n const { ref: _ref, ...rest } = decrementPressProps as Record<string, unknown>\n return rest\n }\n\n const cleanDecrementHoverProps = () => {\n const { ref: _ref, ...rest } = decrementHoverProps as Record<string, unknown>\n return rest\n }\n\n const cleanIncrementPressProps = () => {\n const { ref: _ref, ...rest } = incrementPressProps as Record<string, unknown>\n return rest\n }\n\n const cleanIncrementHoverProps = () => {\n const { ref: _ref, ...rest } = incrementHoverProps as Record<string, unknown>\n return rest\n }\n\n return (\n <div\n {...cleanGroupProps()}\n class={containerClasses()}\n data-disabled={ariaProps.isDisabled || undefined}\n data-invalid={ariaProps.isInvalid || undefined}\n >\n {/* Label */}\n <Show when={local.label}>\n <span {...numberFieldAria.labelProps} class={labelClasses()}>\n {local.label}\n <Show when={ariaProps.isRequired}>\n <span class=\"text-danger-500 ml-1\">*</span>\n </Show>\n </span>\n </Show>\n\n {/* Input Group */}\n <div class={groupClasses()}>\n {/* Decrement Button */}\n <Show when={!local.hideStepper}>\n <button\n {...cleanDecrementProps()}\n {...cleanDecrementPressProps()}\n {...cleanDecrementHoverProps()}\n class={buttonClasses(false)}\n data-pressed={decrementPressed() || undefined}\n data-hovered={decrementHovered() || undefined}\n data-disabled={ariaProps.isDisabled || !state.canDecrement() || undefined}\n >\n <MinusIcon class=\"w-4 h-4\" />\n </button>\n </Show>\n\n {/* Input */}\n <input\n ref={inputRef}\n {...cleanInputProps()}\n {...cleanFocusProps()}\n class={inputClasses()}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n />\n\n {/* Increment Button */}\n <Show when={!local.hideStepper}>\n <button\n {...cleanIncrementProps()}\n {...cleanIncrementPressProps()}\n {...cleanIncrementHoverProps()}\n class={buttonClasses(true)}\n data-pressed={incrementPressed() || undefined}\n data-hovered={incrementHovered() || undefined}\n data-disabled={ariaProps.isDisabled || !state.canIncrement() || undefined}\n >\n <PlusIcon class=\"w-4 h-4\" />\n </button>\n </Show>\n </div>\n\n {/* Description */}\n <Show when={local.description && !ariaProps.isInvalid}>\n <span {...numberFieldAria.descriptionProps} class={descriptionClasses()}>\n {local.description}\n </span>\n </Show>\n\n {/* Error Message */}\n <Show when={ariaProps.isInvalid && local.errorMessage}>\n <span {...numberFieldAria.errorMessageProps} class={errorClasses()}>\n {local.errorMessage}\n </span>\n </Show>\n </div>\n )\n}\n\n// Re-export types\nexport type { NumberFieldState } from '@proyecto-viviana/solid-stately'\n", "/**\n * SearchField component for proyecto-viviana-ui\n *\n * A styled search field component with clear button and search icon.\n * Built directly on solidaria hooks for full accessibility support.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createSearchField,\n createFocusRing,\n createPress,\n createHover,\n type AriaSearchFieldProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createSearchFieldState,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SearchFieldSize = 'sm' | 'md' | 'lg'\nexport type SearchFieldVariant = 'outline' | 'filled'\n\nexport interface SearchFieldProps extends Omit<AriaSearchFieldProps, 'label'> {\n /** The size of the search field. */\n size?: SearchFieldSize\n /** The visual variant of the search field. */\n variant?: SearchFieldVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** Error message shown when invalid. */\n errorMessage?: string\n /** The current value (controlled). */\n value?: string\n /** The default value (uncontrolled). */\n defaultValue?: string\n /** Handler called when the value changes. */\n onChange?: (value: string) => void\n /** Handler called when the user submits the search. */\n onSubmit?: (value: string) => void\n /** Handler called when the field is cleared. */\n onClear?: () => void\n /** Whether to hide the search icon. */\n hideSearchIcon?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'h-8',\n input: 'text-sm pl-8 pr-8',\n label: 'text-sm',\n description: 'text-xs',\n icon: 'w-4 h-4 left-2',\n clearButton: 'w-5 h-5 right-1.5',\n },\n md: {\n container: 'h-10',\n input: 'text-base pl-10 pr-10',\n label: 'text-sm',\n description: 'text-sm',\n icon: 'w-5 h-5 left-2.5',\n clearButton: 'w-6 h-6 right-2',\n },\n lg: {\n container: 'h-12',\n input: 'text-lg pl-12 pr-12',\n label: 'text-base',\n description: 'text-sm',\n icon: 'w-6 h-6 left-3',\n clearButton: 'w-7 h-7 right-2.5',\n },\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction SearchIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"5\" />\n <path d=\"M12 12L17 17\" stroke-linecap=\"round\" />\n </svg>\n )\n}\n\nfunction ClearIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M4 4L12 12M12 4L4 12\" stroke-linecap=\"round\" />\n </svg>\n )\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A search field allows users to enter and clear a search query.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function SearchField(props: SearchFieldProps): JSX.Element {\n const defaultProps: Partial<SearchFieldProps> = {\n size: 'md',\n variant: 'outline',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, stateProps, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'hideSearchIcon',\n ], [\n 'value',\n 'defaultValue',\n 'onChange',\n 'onSubmit',\n 'onClear',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Ref for input element\n let inputRef: HTMLInputElement | undefined\n\n // Create search field state\n const state = createSearchFieldState({\n get value() {\n return stateProps.value\n },\n get defaultValue() {\n return stateProps.defaultValue\n },\n get onChange() {\n return stateProps.onChange\n },\n })\n\n // Create search field aria props\n const searchFieldAria = createSearchField(\n {\n get label() {\n return local.label\n },\n get 'aria-label'() {\n return ariaProps['aria-label']\n },\n get 'aria-labelledby'() {\n return ariaProps['aria-labelledby']\n },\n get 'aria-describedby'() {\n return ariaProps['aria-describedby']\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get isReadOnly() {\n return ariaProps.isReadOnly\n },\n get isRequired() {\n return ariaProps.isRequired\n },\n get isInvalid() {\n return ariaProps.isInvalid\n },\n get description() {\n return local.description\n },\n get errorMessage() {\n return local.errorMessage\n },\n get placeholder() {\n return ariaProps.placeholder\n },\n get name() {\n return ariaProps.name\n },\n get autoFocus() {\n return ariaProps.autoFocus\n },\n get autoComplete() {\n return ariaProps.autoComplete\n },\n get maxLength() {\n return ariaProps.maxLength\n },\n get minLength() {\n return ariaProps.minLength\n },\n get pattern() {\n return ariaProps.pattern\n },\n get onSubmit() {\n return stateProps.onSubmit\n },\n get onClear() {\n return stateProps.onClear\n },\n },\n state,\n () => inputRef ?? null\n )\n\n // Create focus ring for input\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Create hover for input\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled\n },\n })\n\n // Clear button interactions\n const { isPressed: clearPressed, pressProps: clearPressProps } = createPress({\n get isDisabled() {\n return ariaProps.isDisabled || ariaProps.isReadOnly\n },\n onPress: () => {\n searchFieldAria.clearButtonProps.onClick()\n },\n })\n\n const { isHovered: clearHovered, hoverProps: clearHoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled || ariaProps.isReadOnly\n },\n })\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const inputWrapperClasses = () => {\n const base = 'relative flex items-center'\n const sizeClass = size().container\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const inputClasses = () => {\n const base = 'w-full h-full rounded-md transition-all duration-200 outline-none'\n const sizeClass = size().input\n\n // Adjust padding based on search icon visibility\n const paddingClass = local.hideSearchIcon ? 'pl-3' : ''\n\n let variantClass: string\n if (local.variant === 'filled') {\n variantClass = 'bg-bg-200 border border-transparent'\n } else {\n variantClass = 'bg-transparent border border-bg-400'\n }\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (ariaProps.isInvalid) {\n stateClass = 'border-danger-500 focus:border-danger-400 focus:ring-2 focus:ring-danger-400/20'\n } else {\n stateClass = 'text-primary-100 placeholder:text-primary-500 focus:border-accent focus:ring-2 focus:ring-accent/20'\n }\n\n const hoverClass = ariaProps.isDisabled ? '' : 'hover:border-accent-300'\n\n return [base, sizeClass, paddingClass, variantClass, stateClass, hoverClass].filter(Boolean).join(' ')\n }\n\n const searchIconClasses = () => {\n const base = 'absolute pointer-events-none text-primary-400'\n const sizeClass = size().icon\n const focusedClass = isFocused() ? 'text-accent' : ''\n return [base, sizeClass, focusedClass].filter(Boolean).join(' ')\n }\n\n const clearButtonClasses = () => {\n const base = 'absolute flex items-center justify-center rounded-md transition-all duration-150 select-none'\n const sizeClass = size().clearButton\n\n const isDisabled = ariaProps.isDisabled || ariaProps.isReadOnly\n\n let stateClass: string\n if (isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed'\n } else if (clearPressed()) {\n stateClass = 'bg-bg-400 text-primary-100 scale-90'\n } else if (clearHovered()) {\n stateClass = 'bg-bg-300 text-primary-100'\n } else {\n stateClass = 'text-primary-400 hover:bg-bg-300 hover:text-primary-100'\n }\n\n return [base, sizeClass, stateClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'block font-medium text-primary-200 mb-1'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const descriptionClasses = () => {\n const base = 'mt-1 text-primary-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const errorClasses = () => {\n const base = 'mt-1 text-danger-500'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n // Clean props helpers\n const cleanInputProps = () => {\n const { ref: _ref, ...rest } = searchFieldAria.inputProps as Record<string, unknown>\n return rest\n }\n\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>\n return rest\n }\n\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>\n return rest\n }\n\n const cleanLabelProps = () => {\n const { ref: _ref, ...rest } = searchFieldAria.labelProps as Record<string, unknown>\n return rest\n }\n\n const cleanClearPressProps = () => {\n const { ref: _ref, ...rest } = clearPressProps as Record<string, unknown>\n return rest\n }\n\n const cleanClearHoverProps = () => {\n const { ref: _ref, ...rest } = clearHoverProps as Record<string, unknown>\n return rest\n }\n\n const isEmpty = () => state.value() === ''\n\n return (\n <div\n class={containerClasses()}\n data-empty={isEmpty() || undefined}\n data-disabled={ariaProps.isDisabled || undefined}\n data-invalid={ariaProps.isInvalid || undefined}\n >\n {/* Label */}\n <Show when={local.label}>\n <span {...cleanLabelProps()} class={labelClasses()}>\n {local.label}\n <Show when={ariaProps.isRequired}>\n <span class=\"text-danger-500 ml-1\">*</span>\n </Show>\n </span>\n </Show>\n\n {/* Input Wrapper */}\n <div class={inputWrapperClasses()}>\n {/* Search Icon */}\n <Show when={!local.hideSearchIcon}>\n <SearchIcon class={searchIconClasses()} />\n </Show>\n\n {/* Input */}\n <input\n ref={inputRef}\n {...cleanInputProps()}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n class={inputClasses()}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-hovered={isHovered() || undefined}\n />\n\n {/* Clear Button */}\n <Show when={!isEmpty()}>\n <button\n type=\"button\"\n aria-label={searchFieldAria.clearButtonProps['aria-label']}\n tabIndex={searchFieldAria.clearButtonProps.tabIndex}\n disabled={searchFieldAria.clearButtonProps.disabled}\n onMouseDown={searchFieldAria.clearButtonProps.onMouseDown}\n {...cleanClearPressProps()}\n {...cleanClearHoverProps()}\n class={clearButtonClasses()}\n data-pressed={clearPressed() || undefined}\n data-hovered={clearHovered() || undefined}\n >\n <ClearIcon class=\"w-3 h-3\" />\n </button>\n </Show>\n </div>\n\n {/* Description */}\n <Show when={local.description && !ariaProps.isInvalid}>\n <span {...searchFieldAria.descriptionProps} class={descriptionClasses()}>\n {local.description}\n </span>\n </Show>\n\n {/* Error Message */}\n <Show when={ariaProps.isInvalid && local.errorMessage}>\n <span {...searchFieldAria.errorMessageProps} class={errorClasses()}>\n {local.errorMessage}\n </span>\n </Show>\n </div>\n )\n}\n\n// Re-export types\nexport type { SearchFieldState } from '@proyecto-viviana/solid-stately'\n", "/**\n * Slider component for proyecto-viviana-ui\n *\n * A styled slider component with track, thumb, and value display.\n * Built directly on solidaria hooks for full accessibility support.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createSlider,\n createFocusRing,\n createHover,\n type AriaSliderProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createSliderState,\n type SliderOrientation,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SliderSize = 'sm' | 'md' | 'lg'\nexport type SliderVariant = 'default' | 'accent'\n\nexport interface SliderProps extends Omit<AriaSliderProps, 'label'> {\n /** The size of the slider. */\n size?: SliderSize\n /** The visual variant of the slider. */\n variant?: SliderVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the slider. */\n label?: string\n /** The current value (controlled). */\n value?: number\n /** The default value (uncontrolled). */\n defaultValue?: number\n /** Handler called when the value changes. */\n onChange?: (value: number) => void\n /** Handler called when dragging ends. */\n onChangeEnd?: (value: number) => void\n /** The minimum value. */\n minValue?: number\n /** The maximum value. */\n maxValue?: number\n /** The step value. */\n step?: number\n /** The orientation of the slider. */\n orientation?: SliderOrientation\n /** The locale for number formatting. */\n locale?: string\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions\n /** Whether to show the value output. */\n showOutput?: boolean\n /** Whether to show min/max labels. */\n showMinMax?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-1',\n thumb: 'w-3 h-3 -mt-1',\n label: 'text-sm',\n output: 'text-xs',\n },\n md: {\n track: 'h-2',\n thumb: 'w-4 h-4 -mt-1',\n label: 'text-sm',\n output: 'text-sm',\n },\n lg: {\n track: 'h-3',\n thumb: 'w-5 h-5 -mt-1',\n label: 'text-base',\n output: 'text-base',\n },\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A slider allows users to select a value from a range.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function Slider(props: SliderProps): JSX.Element {\n const defaultProps: Partial<SliderProps> = {\n size: 'md',\n variant: 'default',\n minValue: 0,\n maxValue: 100,\n step: 1,\n orientation: 'horizontal',\n showOutput: true,\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, stateProps, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'showOutput',\n 'showMinMax',\n ], [\n 'value',\n 'defaultValue',\n 'onChange',\n 'onChangeEnd',\n 'minValue',\n 'maxValue',\n 'step',\n 'orientation',\n 'locale',\n 'formatOptions',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Track ref for pointer handling\n let trackRef: HTMLDivElement | undefined\n\n // Create slider state\n const state = createSliderState({\n get value() {\n return stateProps.value\n },\n get defaultValue() {\n return stateProps.defaultValue\n },\n get onChange() {\n return stateProps.onChange\n },\n get onChangeEnd() {\n return stateProps.onChangeEnd\n },\n get minValue() {\n return stateProps.minValue\n },\n get maxValue() {\n return stateProps.maxValue\n },\n get step() {\n return stateProps.step\n },\n get orientation() {\n return stateProps.orientation\n },\n get locale() {\n return stateProps.locale\n },\n get formatOptions() {\n return stateProps.formatOptions\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n })\n\n // Create slider aria props\n const sliderAria = createSlider(\n {\n get label() {\n return local.label\n },\n get 'aria-label'() {\n return ariaProps['aria-label']\n },\n get 'aria-labelledby'() {\n return ariaProps['aria-labelledby']\n },\n get 'aria-describedby'() {\n return ariaProps['aria-describedby']\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get orientation() {\n return stateProps.orientation\n },\n },\n state,\n () => trackRef ?? null\n )\n\n // Create focus ring\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Create hover\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled\n },\n })\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col w-full'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const labelRowClasses = () => {\n return 'flex justify-between items-center mb-2'\n }\n\n const trackContainerClasses = () => {\n const base = 'relative w-full cursor-pointer'\n const disabledClass = ariaProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, disabledClass].filter(Boolean).join(' ')\n }\n\n const trackClasses = () => {\n const base = 'w-full rounded-full bg-bg-300'\n const sizeClass = size().track\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const fillClasses = () => {\n const base = 'absolute top-0 left-0 h-full rounded-full transition-all'\n const variantClass = local.variant === 'accent' ? 'bg-accent' : 'bg-primary-400'\n return [base, variantClass].filter(Boolean).join(' ')\n }\n\n const thumbClasses = () => {\n const base = 'absolute top-1/2 rounded-full shadow-md transition-all cursor-grab'\n const sizeClass = size().thumb\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-primary-400 cursor-not-allowed'\n } else if (state.isDragging()) {\n stateClass = local.variant === 'accent' ? 'bg-accent-400 scale-110 cursor-grabbing' : 'bg-primary-200 scale-110 cursor-grabbing'\n } else if (isHovered()) {\n stateClass = local.variant === 'accent' ? 'bg-accent-400 scale-105' : 'bg-primary-200 scale-105'\n } else {\n stateClass = local.variant === 'accent' ? 'bg-accent' : 'bg-primary-100'\n }\n\n const focusClass = isFocusVisible() ? 'ring-2 ring-accent ring-offset-2 ring-offset-bg-100' : ''\n\n return [base, sizeClass, stateClass, focusClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'font-medium text-primary-200'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const outputClasses = () => {\n const base = 'font-medium text-primary-100'\n const sizeClass = size().output\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const minMaxClasses = () => {\n const base = 'text-xs text-primary-400'\n return base\n }\n\n // Clean props helpers\n const cleanGroupProps = () => {\n const { ref: _ref, ...rest } = sliderAria.groupProps as Record<string, unknown>\n return rest\n }\n\n const cleanTrackProps = () => {\n const { ref: _ref, style: _style, ...rest } = sliderAria.trackProps as Record<string, unknown>\n return rest\n }\n\n const cleanThumbProps = () => {\n const { ref: _ref, style: thumbStyle, ...rest } = sliderAria.thumbProps as Record<string, unknown>\n // Extract positioning from thumbStyle\n const style = thumbStyle as Record<string, string> | undefined\n return { rest, style }\n }\n\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>\n return rest\n }\n\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>\n return rest\n }\n\n const cleanOutputProps = () => {\n const { ref: _ref, ...rest } = sliderAria.outputProps as Record<string, unknown>\n return rest\n }\n\n const thumbData = () => cleanThumbProps()\n const percent = () => state.getValuePercent() * 100\n\n return (\n <div\n {...cleanGroupProps()}\n class={containerClasses()}\n data-disabled={ariaProps.isDisabled || undefined}\n data-orientation={state.orientation}\n >\n {/* Label and Output Row */}\n <Show when={local.label || local.showOutput}>\n <div class={labelRowClasses()}>\n <Show when={local.label}>\n <span {...sliderAria.labelProps} class={labelClasses()}>\n {local.label}\n </span>\n </Show>\n <Show when={local.showOutput}>\n <output {...cleanOutputProps()} class={outputClasses()}>\n {state.getFormattedValue()}\n </output>\n </Show>\n </div>\n </Show>\n\n {/* Track Container */}\n <div class={trackContainerClasses()}>\n {/* Track */}\n <div\n ref={(el) => (trackRef = el)}\n {...cleanTrackProps()}\n class={trackClasses()}\n style={{ 'touch-action': 'none' }}\n >\n {/* Fill */}\n <div\n class={fillClasses()}\n style={{ width: `${percent()}%` }}\n />\n </div>\n\n {/* Thumb */}\n <div\n {...thumbData().rest}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n class={thumbClasses()}\n style={{\n left: `${percent()}%`,\n transform: 'translateX(-50%)',\n ...(thumbData().style || {}),\n }}\n data-dragging={state.isDragging() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-hovered={isHovered() || undefined}\n />\n </div>\n\n {/* Min/Max Labels */}\n <Show when={local.showMinMax}>\n <div class=\"flex justify-between mt-1\">\n <span class={minMaxClasses()}>{state.minValue}</span>\n <span class={minMaxClasses()}>{state.maxValue}</span>\n </div>\n </Show>\n\n {/* Hidden input for form submission */}\n <input {...sliderAria.inputProps} />\n </div>\n )\n}\n\n// Re-export types\nexport type { SliderState, SliderOrientation } from '@proyecto-viviana/solid-stately'\n", "/**\n * ComboBox component for proyecto-viviana-ui\n *\n * Styled combobox component built on top of solidaria-components.\n * Inspired by Spectrum 2's ComboBox component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n ComboBox as HeadlessComboBox,\n ComboBoxInput as HeadlessComboBoxInput,\n ComboBoxButton as HeadlessComboBoxButton,\n ComboBoxListBox as HeadlessComboBoxListBox,\n ComboBoxOption as HeadlessComboBoxOption,\n defaultContainsFilter,\n type ComboBoxProps as HeadlessComboBoxProps,\n type ComboBoxInputProps as HeadlessComboBoxInputProps,\n type ComboBoxButtonProps as HeadlessComboBoxButtonProps,\n type ComboBoxListBoxProps as HeadlessComboBoxListBoxProps,\n type ComboBoxOptionProps as HeadlessComboBoxOptionProps,\n type ComboBoxRenderProps,\n type ComboBoxInputRenderProps,\n type ComboBoxButtonRenderProps,\n type ComboBoxListBoxRenderProps,\n type ComboBoxOptionRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, FilterFn, MenuTriggerAction } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type ComboBoxSize = 'sm' | 'md' | 'lg'\n\nconst ComboBoxSizeContext = createContext<ComboBoxSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface ComboBoxProps<T> extends Omit<HeadlessComboBoxProps<T>, 'class' | 'style'> {\n /** The size of the combobox. */\n size?: ComboBoxSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the combobox. */\n label?: string\n /** Description for the combobox. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n /** Whether the combobox is invalid. */\n isInvalid?: boolean\n}\n\nexport interface ComboBoxInputProps extends Omit<HeadlessComboBoxInputProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface ComboBoxButtonProps extends Omit<HeadlessComboBoxButtonProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface ComboBoxListBoxProps<T> extends Omit<HeadlessComboBoxListBoxProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface ComboBoxOptionProps<T> extends Omit<HeadlessComboBoxOptionProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n wrapper: 'h-8',\n input: 'h-8 text-sm pl-3 pr-8',\n button: 'h-8 w-8',\n label: 'text-sm',\n option: 'text-sm py-1.5 px-3',\n icon: 'h-4 w-4',\n },\n md: {\n wrapper: 'h-10',\n input: 'h-10 text-base pl-4 pr-10',\n button: 'h-10 w-10',\n label: 'text-base',\n option: 'text-base py-2 px-4',\n icon: 'h-5 w-5',\n },\n lg: {\n wrapper: 'h-12',\n input: 'h-12 text-lg pl-5 pr-12',\n button: 'h-12 w-12',\n label: 'text-lg',\n option: 'text-lg py-2.5 px-5',\n icon: 'h-6 w-6',\n },\n}\n\n// ============================================\n// COMBOBOX COMPONENT\n// ============================================\n\n/**\n * A combobox combines a text input with a listbox, allowing users to filter a list of options.\n *\n * Built on solidaria-components ComboBox for full accessibility support.\n */\nexport function ComboBox<T>(props: ComboBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxRenderProps): string => {\n const base = 'relative inline-flex flex-col gap-1.5'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <ComboBoxSizeContext.Provider value={size}>\n <HeadlessComboBox\n {...headlessProps}\n class={getClassName}\n >\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${sizeStyles[size].label}`}>\n {local.label}\n </label>\n </Show>\n {props.children}\n <Show when={local.description && !local.isInvalid}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && local.isInvalid}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </HeadlessComboBox>\n </ComboBoxSizeContext.Provider>\n )\n}\n\n// ============================================\n// COMBOBOX INPUT GROUP COMPONENT\n// ============================================\n\n/**\n * A wrapper for the input and button that provides proper styling.\n */\nexport function ComboBoxInputGroup(props: { children: JSX.Element; class?: string }): JSX.Element {\n const size = useContext(ComboBoxSizeContext)\n const styles = () => sizeStyles[size]\n\n return (\n <div class={`relative flex items-center ${styles().wrapper} ${props.class ?? ''}`}>\n {props.children}\n </div>\n )\n}\n\n// ============================================\n// COMBOBOX INPUT COMPONENT\n// ============================================\n\n/**\n * The text input for a combobox.\n */\nexport function ComboBoxInput(props: ComboBoxInputProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(ComboBoxSizeContext)\n const styles = () => sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxInputRenderProps): string => {\n const base = 'w-full rounded-lg border-2 transition-all duration-200 outline-none'\n const sizeClass = styles().input\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (renderProps.isOpen) {\n colorClass = 'border-accent bg-bg-300 text-primary-100'\n } else if (renderProps.isHovered) {\n colorClass = 'border-accent-300 bg-bg-300 text-primary-100'\n } else {\n colorClass = 'border-primary-600 bg-bg-400 text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessComboBoxInput\n {...headlessProps}\n class={getClassName}\n />\n )\n}\n\n// ============================================\n// COMBOBOX BUTTON COMPONENT\n// ============================================\n\n/**\n * The trigger button for a combobox.\n * SSR-compatible - renders children or chevron icon directly without render props.\n */\nexport function ComboBoxButton(props: ComboBoxButtonProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(ComboBoxSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxButtonRenderProps): string => {\n const base = 'absolute right-0 top-0 flex items-center justify-center transition-all duration-200 rounded-r-lg'\n const sizeClass = sizeStyle.button\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isOpen) {\n colorClass = 'text-accent'\n } else if (renderProps.isHovered) {\n colorClass = 'text-accent-300 cursor-pointer'\n } else {\n colorClass = 'text-primary-400 cursor-pointer hover:text-primary-200'\n }\n\n return [base, sizeClass, colorClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessComboBoxButton\n {...headlessProps}\n class={getClassName}\n >\n {props.children || <ChevronIcon class={`${sizeStyle.icon} transition-transform duration-200 data-open:rotate-180`} />}\n </HeadlessComboBoxButton>\n )\n}\n\n// ============================================\n// COMBOBOX LISTBOX COMPONENT\n// ============================================\n\n/**\n * The listbox popup for a combobox.\n */\nexport function ComboBoxListBox<T>(props: ComboBoxListBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: ComboBoxListBoxRenderProps): string => {\n const base = 'absolute z-50 mt-1 w-full rounded-lg border-2 border-primary-600 bg-bg-400 py-1 shadow-lg max-h-60 overflow-auto'\n return [base, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessComboBoxListBox\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// COMBOBOX OPTION COMPONENT\n// ============================================\n\n/**\n * An option in a combobox listbox.\n * SSR-compatible - renders check icon and content directly without render props.\n */\nexport function ComboBoxOption<T>(props: ComboBoxOptionProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(ComboBoxSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxOptionRenderProps): string => {\n const base = 'flex items-center gap-2 cursor-pointer transition-colors duration-150'\n const sizeClass = sizeStyle.option\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n colorClass = 'bg-accent/20 text-accent'\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n // Compute padding for non-selected items to align with check icon\n const iconPadding: Record<ComboBoxSize, string> = {\n sm: 'pl-6', // h-4 icon + gap\n md: 'pl-7', // h-5 icon + gap\n lg: 'pl-8', // h-6 icon + gap\n }\n\n return (\n <HeadlessComboBoxOption\n {...headlessProps}\n class={getClassName}\n >\n <CheckIcon class={`${sizeStyle.icon} text-accent shrink-0 hidden data-selected:block`} />\n <span class={`flex-1 data-selected:pl-0 ${iconPadding[size]}`}>\n {props.children as JSX.Element}\n </span>\n </HeadlessComboBoxOption>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nComboBox.InputGroup = ComboBoxInputGroup\nComboBox.Input = ComboBoxInput\nComboBox.Button = ComboBoxButton\nComboBox.ListBox = ComboBoxListBox\nComboBox.Option = ComboBoxOption\n\n// Re-export types and utilities for convenience\nexport type { Key, FilterFn, MenuTriggerAction }\nexport { defaultContainsFilter }\n", "/**\n * Toast components for proyecto-viviana-ui\n *\n * Toast notifications with auto-dismiss, animations, and variants.\n * Built on top of solidaria-components for accessibility.\n */\n\nimport { type JSX, splitProps, For, Show } from 'solid-js';\nimport {\n Toast as HeadlessToast,\n ToastRegion as HeadlessToastRegion,\n ToastProvider as HeadlessToastProvider,\n ToastContext,\n ToastCloseButton as HeadlessToastCloseButton,\n globalToastQueue,\n addToast as headlessAddToast,\n useToastContext,\n type ToastContent,\n type ToastProps as HeadlessToastProps,\n type ToastRegionProps as HeadlessToastRegionProps,\n type ToastProviderProps as HeadlessToastProviderProps,\n type ToastRenderProps,\n type ToastRegionRenderProps,\n} from '@proyecto-viviana/solidaria-components';\nimport { type QueuedToast, type ToastOptions } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type ToastPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end';\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error' | 'neutral';\n\nexport interface ToastProviderProps extends HeadlessToastProviderProps {}\n\nexport interface ToastRegionProps extends Omit<HeadlessToastRegionProps, 'class' | 'style' | 'children'> {\n /** The placement of the toast region. */\n placement?: ToastPlacement;\n /** Additional CSS class name. */\n class?: string;\n}\n\nexport interface ToastProps extends Omit<HeadlessToastProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst regionStyles = [\n 'flex flex-col gap-3',\n 'p-4',\n].join(' ');\n\nconst toastBaseStyles = [\n 'flex items-start gap-3',\n 'px-4 py-3',\n 'rounded-lg shadow-lg',\n 'min-w-[300px] max-w-[400px]',\n 'border',\n // Animations\n 'data-[animation=entering]:animate-in data-[animation=entering]:fade-in-0 data-[animation=entering]:slide-in-from-right-5',\n 'data-[animation=exiting]:animate-out data-[animation=exiting]:fade-out-0 data-[animation=exiting]:slide-out-to-right-5',\n].join(' ');\n\nconst variantStyles: Record<ToastVariant, string> = {\n info: 'bg-blue-50 border-blue-200 text-blue-800 dark:bg-blue-950 dark:border-blue-800 dark:text-blue-200',\n success: 'bg-green-50 border-green-200 text-green-800 dark:bg-green-950 dark:border-green-800 dark:text-green-200',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-800 dark:bg-yellow-950 dark:border-yellow-800 dark:text-yellow-200',\n error: 'bg-red-50 border-red-200 text-red-800 dark:bg-red-950 dark:border-red-800 dark:text-red-200',\n neutral: 'bg-neutral-50 border-neutral-200 text-neutral-800 dark:bg-neutral-900 dark:border-neutral-700 dark:text-neutral-200',\n};\n\nconst iconStyles: Record<ToastVariant, string> = {\n info: 'text-blue-500 dark:text-blue-400',\n success: 'text-green-500 dark:text-green-400',\n warning: 'text-yellow-500 dark:text-yellow-400',\n error: 'text-red-500 dark:text-red-400',\n neutral: 'text-neutral-500 dark:text-neutral-400',\n};\n\nconst closeButtonStyles = [\n 'ml-auto -mr-1 -mt-1',\n 'p-1 rounded-md',\n 'text-current opacity-60 hover:opacity-100',\n 'transition-opacity',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2',\n].join(' ');\n\n// ============================================\n// ICONS\n// ============================================\n\nconst InfoIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst SuccessIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n);\n\nconst ErrorIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nconst getVariantIcon = (variant: ToastVariant) => {\n switch (variant) {\n case 'success': return <SuccessIcon />;\n case 'warning': return <WarningIcon />;\n case 'error': return <ErrorIcon />;\n case 'info':\n case 'neutral':\n default: return <InfoIcon />;\n }\n};\n\n// ============================================\n// COMPONENTS\n// ============================================\n\n/**\n * ToastProvider creates a toast queue context for descendant components.\n * Wrap your app or a section that needs toast notifications.\n *\n * @example\n * ```tsx\n * <ToastProvider>\n * <App />\n * <ToastRegion placement=\"bottom-end\" />\n * </ToastProvider>\n * ```\n */\nexport function ToastProvider(props: ToastProviderProps): JSX.Element {\n return <HeadlessToastProvider {...props} />;\n}\n\n/**\n * ToastRegion displays all visible toasts in a fixed position.\n *\n * @example\n * ```tsx\n * <ToastRegion placement=\"bottom-end\" />\n * ```\n */\nexport function ToastRegion(props: ToastRegionProps): JSX.Element {\n const [local, rest] = splitProps(props, ['placement', 'class']);\n\n return (\n <HeadlessToastRegion\n {...rest}\n placement={local.placement ?? 'bottom-end'}\n class={(_renderProps: ToastRegionRenderProps) => {\n return [regionStyles, local.class ?? ''].filter(Boolean).join(' ');\n }}\n >\n {(regionProps: ToastRegionRenderProps) => (\n <For each={regionProps.visibleToasts}>\n {(toast) => <Toast toast={toast} />}\n </For>\n )}\n </HeadlessToastRegion>\n );\n}\n\n/**\n * Toast displays an individual notification with icon, content, and close button.\n *\n * Usually you don't need to use this directly - ToastRegion renders toasts automatically.\n */\nexport function Toast(props: ToastProps): JSX.Element {\n const [local, rest] = splitProps(props, ['toast', 'class']);\n\n const content = () => local.toast.content;\n const variant = (): ToastVariant => content().type ?? 'neutral';\n\n return (\n <HeadlessToast\n {...rest}\n toast={local.toast}\n class={(_renderProps: ToastRenderProps) => {\n return [\n toastBaseStyles,\n variantStyles[variant()],\n local.class ?? '',\n ].filter(Boolean).join(' ');\n }}\n >\n {/* Icon */}\n <div class={`flex-shrink-0 ${iconStyles[variant()]}`}>\n {getVariantIcon(variant())}\n </div>\n\n {/* Content */}\n <div class=\"flex-1 min-w-0\">\n <Show when={content().title}>\n <p class=\"font-semibold text-sm\">{content().title}</p>\n </Show>\n <Show when={content().description}>\n <p class=\"text-sm opacity-90 mt-1\">{content().description}</p>\n </Show>\n <Show when={content().action}>\n <button\n type=\"button\"\n class=\"mt-2 text-sm font-medium underline hover:no-underline\"\n onClick={content().action?.onAction}\n >\n {content().action?.label}\n </button>\n </Show>\n </div>\n\n {/* Close Button */}\n <HeadlessToastCloseButton\n toast={local.toast}\n class={closeButtonStyles}\n aria-label=\"Dismiss\"\n >\n <CloseIcon />\n </HeadlessToastCloseButton>\n </HeadlessToast>\n );\n}\n\n// ============================================\n// GLOBAL TOAST API\n// ============================================\n\n/**\n * Add a toast to the global queue.\n * Use this to show toasts from anywhere in your app.\n *\n * @example\n * ```tsx\n * // Show a success toast\n * addToast({\n * title: 'Success!',\n * description: 'Your changes have been saved.',\n * type: 'success',\n * });\n *\n * // Show an error toast with auto-dismiss\n * addToast({\n * title: 'Error',\n * description: 'Something went wrong.',\n * type: 'error',\n * }, { timeout: 5000 });\n *\n * // Show a toast with action\n * addToast({\n * title: 'File deleted',\n * type: 'info',\n * action: {\n * label: 'Undo',\n * onAction: () => restoreFile(),\n * },\n * }, { timeout: 10000 });\n * ```\n */\nexport function addToast(\n content: ToastContent,\n options?: ToastOptions\n): string {\n return headlessAddToast(content, options);\n}\n\n/**\n * Convenience function to show a success toast.\n */\nexport function toastSuccess(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'success' }, { timeout: 5000, ...options });\n}\n\n/**\n * Convenience function to show an error toast.\n */\nexport function toastError(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'error' }, { timeout: 8000, ...options });\n}\n\n/**\n * Convenience function to show a warning toast.\n */\nexport function toastWarning(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'warning' }, { timeout: 6000, ...options });\n}\n\n/**\n * Convenience function to show an info toast.\n */\nexport function toastInfo(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'info' }, { timeout: 5000, ...options });\n}\n\n// Re-exports\nexport {\n ToastContext,\n globalToastQueue,\n useToastContext,\n type ToastContent,\n type ToastRenderProps,\n type ToastRegionRenderProps,\n type QueuedToast,\n type ToastOptions,\n};\n", "/**\n * Disclosure and Accordion components for proyecto-viviana-ui\n *\n * Styled disclosure/accordion components built on top of solidaria-components.\n * Inspired by Spectrum 2's disclosure patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js';\nimport {\n Disclosure as HeadlessDisclosure,\n DisclosureGroup as HeadlessDisclosureGroup,\n DisclosureTrigger as HeadlessDisclosureTrigger,\n DisclosurePanel as HeadlessDisclosurePanel,\n type DisclosureProps as HeadlessDisclosureProps,\n type DisclosureGroupProps as HeadlessDisclosureGroupProps,\n type DisclosureTriggerProps as HeadlessDisclosureTriggerProps,\n type DisclosurePanelProps as HeadlessDisclosurePanelProps,\n type DisclosureRenderProps,\n type DisclosureGroupRenderProps,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// SIZE AND VARIANT CONTEXT\n// ============================================\n\nexport type DisclosureSize = 'sm' | 'md' | 'lg';\nexport type DisclosureVariant = 'default' | 'bordered' | 'filled' | 'ghost';\n\ninterface DisclosureContextValue {\n size: DisclosureSize;\n variant: DisclosureVariant;\n}\n\nconst DisclosureSizeContext = createContext<DisclosureContextValue>({\n size: 'md',\n variant: 'default',\n});\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface DisclosureGroupProps extends Omit<HeadlessDisclosureGroupProps, 'class' | 'style'> {\n /** The size of all disclosures in the group. */\n size?: DisclosureSize;\n /** The visual variant of all disclosures in the group. */\n variant?: DisclosureVariant;\n /** Additional CSS class name. */\n class?: string;\n}\n\nexport interface DisclosureProps extends Omit<HeadlessDisclosureProps, 'class' | 'style'> {\n /** The size of the disclosure. Overrides group size if set. */\n size?: DisclosureSize;\n /** The visual variant. Overrides group variant if set. */\n variant?: DisclosureVariant;\n /** Additional CSS class name. */\n class?: string;\n}\n\nexport interface DisclosureTriggerProps extends Omit<HeadlessDisclosureTriggerProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string;\n /** Optional icon to show (defaults to chevron). */\n hideIcon?: boolean;\n}\n\nexport interface DisclosurePanelProps extends Omit<HeadlessDisclosurePanelProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n trigger: 'px-3 py-2 text-sm',\n panel: 'px-3 py-2 text-sm',\n icon: 'w-4 h-4',\n gap: 'gap-1',\n },\n md: {\n trigger: 'px-4 py-3 text-base',\n panel: 'px-4 py-3 text-base',\n icon: 'w-5 h-5',\n gap: 'gap-2',\n },\n lg: {\n trigger: 'px-5 py-4 text-lg',\n panel: 'px-5 py-4 text-lg',\n icon: 'w-6 h-6',\n gap: 'gap-3',\n },\n};\n\nconst variantStyles = {\n default: {\n container: 'border-b border-primary-700',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200',\n default: 'text-primary-200 hover:text-primary-100 hover:bg-bg-400/50',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300',\n },\n bordered: {\n container: 'border border-primary-600 rounded-lg mb-2 overflow-hidden',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200',\n default: 'text-primary-200 hover:bg-bg-400/50',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300 border-t border-primary-600',\n },\n filled: {\n container: 'bg-bg-400 rounded-lg mb-2 overflow-hidden',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200',\n default: 'text-primary-200 hover:bg-bg-300',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300 bg-bg-300/50',\n },\n ghost: {\n container: '',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200 rounded-md',\n default: 'text-primary-200 hover:bg-bg-400/50',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300',\n },\n};\n\n// ============================================\n// DISCLOSURE GROUP COMPONENT\n// ============================================\n\n/**\n * DisclosureGroup manages a group of Disclosure components.\n * Use this to create an accordion where only one item can be expanded at a time.\n *\n * @example\n * ```tsx\n * <DisclosureGroup>\n * <Disclosure id=\"item1\">\n * <DisclosureTrigger>Section 1</DisclosureTrigger>\n * <DisclosurePanel>Content 1</DisclosurePanel>\n * </Disclosure>\n * <Disclosure id=\"item2\">\n * <DisclosureTrigger>Section 2</DisclosureTrigger>\n * <DisclosurePanel>Content 2</DisclosurePanel>\n * </Disclosure>\n * </DisclosureGroup>\n * ```\n */\nexport function DisclosureGroup(props: DisclosureGroupProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n ]);\n\n const size = local.size ?? 'md';\n const variant = local.variant ?? 'default';\n const customClass = local.class ?? '';\n\n const getClassName = (_renderProps: DisclosureGroupRenderProps): string => {\n const base = 'flex flex-col';\n const gapClass = sizeStyles[size].gap;\n return [base, gapClass, customClass].filter(Boolean).join(' ');\n };\n\n return (\n <DisclosureSizeContext.Provider value={{ size, variant }}>\n <HeadlessDisclosureGroup\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n </DisclosureSizeContext.Provider>\n );\n}\n\n// ============================================\n// DISCLOSURE COMPONENT\n// ============================================\n\n/**\n * Disclosure is a widget that can be toggled to show or hide content.\n *\n * @example\n * ```tsx\n * <Disclosure>\n * <DisclosureTrigger>Show more</DisclosureTrigger>\n * <DisclosurePanel>Hidden content here...</DisclosurePanel>\n * </Disclosure>\n * ```\n */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n ]);\n\n const parentCtx = useContext(DisclosureSizeContext);\n const size = local.size ?? parentCtx.size;\n const variant = local.variant ?? parentCtx.variant;\n const customClass = local.class ?? '';\n\n const getClassName = (_renderProps: DisclosureRenderProps): string => {\n const variantClass = variantStyles[variant].container;\n return [variantClass, customClass].filter(Boolean).join(' ');\n };\n\n return (\n <DisclosureSizeContext.Provider value={{ size, variant }}>\n <HeadlessDisclosure\n {...headlessProps}\n class={getClassName}\n >\n {props.children}\n </HeadlessDisclosure>\n </DisclosureSizeContext.Provider>\n );\n}\n\n// ============================================\n// DISCLOSURE TRIGGER COMPONENT\n// ============================================\n\n/**\n * DisclosureTrigger is the button that toggles the disclosure.\n * The chevron rotates based on the data-expanded attribute using Tailwind's group class.\n */\nexport function DisclosureTrigger(props: DisclosureTriggerProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'hideIcon']);\n const ctx = useContext(DisclosureSizeContext);\n const customClass = local.class ?? '';\n\n return (\n <HeadlessDisclosureTrigger\n {...headlessProps}\n class={[\n 'group', // Enable Tailwind group selector for chevron rotation\n variantStyles[ctx.variant].trigger.base,\n sizeStyles[ctx.size].trigger,\n customClass,\n ].filter(Boolean).join(' ')}\n >\n {props.children}\n <Show when={!local.hideIcon}>\n <svg\n class={[\n sizeStyles[ctx.size].icon,\n 'transition-transform duration-200',\n 'group-data-[expanded=true]:rotate-180', // Rotate when expanded\n ].filter(Boolean).join(' ')}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n style={{ \"flex-shrink\": 0 }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </Show>\n </HeadlessDisclosureTrigger>\n );\n}\n\n// ============================================\n// DISCLOSURE PANEL COMPONENT\n// ============================================\n\n/**\n * DisclosurePanel contains the content that is shown/hidden.\n */\nexport function DisclosurePanel(props: DisclosurePanelProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class']);\n const ctx = useContext(DisclosureSizeContext);\n const customClass = local.class ?? '';\n\n const getClassName = (_renderProps: DisclosureRenderProps): string => {\n const base = variantStyles[ctx.variant].panel;\n const sizeClass = sizeStyles[ctx.size].panel;\n return [base, sizeClass, customClass].filter(Boolean).join(' ');\n };\n\n return (\n <HeadlessDisclosurePanel\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n );\n}\n\n// Attach sub-components for convenience\nDisclosure.Trigger = DisclosureTrigger;\nDisclosure.Panel = DisclosurePanel;\nDisclosureGroup.Item = Disclosure;\n", "/**\n * Meter component for proyecto-viviana-ui\n *\n * Styled meter component built on top of the solidaria hook directly.\n * Meters represent a quantity within a known range (unlike progress bars which show progress toward a goal).\n */\n\nimport { type JSX, splitProps, Show, createMemo } from 'solid-js';\nimport { createMeter } from '@proyecto-viviana/solidaria';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type MeterSize = 'sm' | 'md' | 'lg';\nexport type MeterVariant = 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface MeterProps {\n /** The current value (controlled). @default 0 */\n value?: number;\n /** The smallest value allowed. @default 0 */\n minValue?: number;\n /** The largest value allowed. @default 100 */\n maxValue?: number;\n /** The content to display as the value's label (e.g. \"75 GB\"). */\n valueLabel?: string;\n /** The size of the meter. @default 'md' */\n size?: MeterSize;\n /** The visual style variant. @default 'primary' */\n variant?: MeterVariant;\n /** The label to display above the meter. */\n label?: string;\n /** Whether to show the value text. @default true */\n showValueLabel?: boolean;\n /** Additional CSS class name. */\n class?: string;\n /** An accessibility label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-1',\n text: 'text-xs',\n },\n md: {\n track: 'h-2',\n text: 'text-sm',\n },\n lg: {\n track: 'h-3',\n text: 'text-base',\n },\n};\n\nconst variantStyles = {\n primary: 'bg-primary-500',\n accent: 'bg-accent',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n info: 'bg-blue-500',\n};\n\n// ============================================\n// UTILITIES\n// ============================================\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n// ============================================\n// METER COMPONENT\n// ============================================\n\n/**\n * Meters represent a quantity within a known range, or a fractional value.\n * Unlike progress bars, meters represent a current value rather than progress toward a goal.\n *\n * @example\n * ```tsx\n * // Storage usage meter\n * <Meter value={75} label=\"Storage space\" valueLabel=\"75 GB of 100 GB\" />\n *\n * // Battery level\n * <Meter value={25} variant=\"warning\" label=\"Battery\" />\n *\n * // CPU usage with dynamic color\n * <Meter value={cpuUsage} variant={cpuUsage > 80 ? 'danger' : 'success'} label=\"CPU\" />\n * ```\n */\nexport function Meter(props: MeterProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n 'size',\n 'variant',\n 'label',\n 'showValueLabel',\n 'class',\n ]);\n\n const size = () => local.size ?? 'md';\n const variant = () => local.variant ?? 'primary';\n const showValueLabel = () => local.showValueLabel ?? true;\n\n // Create meter aria props\n const meterAria = createMeter({\n get value() { return ariaProps.value; },\n get minValue() { return ariaProps.minValue; },\n get maxValue() { return ariaProps.maxValue; },\n get valueLabel() { return ariaProps.valueLabel; },\n get label() { return local.label; },\n get 'aria-label'() { return ariaProps['aria-label']; },\n });\n\n // Calculate percentage\n const percentage = createMemo(() => {\n const value = ariaProps.value ?? 0;\n const minValue = ariaProps.minValue ?? 0;\n const maxValue = ariaProps.maxValue ?? 100;\n const clampedValue = clamp(value, minValue, maxValue);\n return ((clampedValue - minValue) / (maxValue - minValue)) * 100;\n });\n\n // Get value text from aria props\n const valueText = () => meterAria.meterProps['aria-valuetext'] as string | undefined;\n\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <div\n {...meterAria.meterProps}\n class={`w-full ${local.class ?? ''}`}\n >\n {/* Label and value row */}\n <Show when={local.label || showValueLabel()}>\n <div class={`flex justify-between items-center mb-1 ${sizeConfig().text}`}>\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium\">{local.label}</span>\n </Show>\n <Show when={showValueLabel()}>\n <span class=\"text-primary-300\">{valueText()}</span>\n </Show>\n </div>\n </Show>\n\n {/* Track */}\n <div class={`w-full ${sizeConfig().track} bg-bg-300 rounded-full overflow-hidden`}>\n {/* Fill */}\n <div\n class={`h-full rounded-full transition-all duration-300 ${variantStyles[variant()]}`}\n style={{\n width: `${percentage()}%`,\n }}\n />\n </div>\n </div>\n );\n}\n", "/**\n * TagGroup component for proyecto-viviana-ui\n *\n * Styled tag group component built on top of solidaria-components.\n * A tag group displays a collection of tags that can be selected and/or removed.\n */\n\nimport { type JSX, splitProps, Show } from 'solid-js';\nimport {\n TagList as HeadlessTagList,\n Tag as HeadlessTag,\n} from '@proyecto-viviana/solidaria-components';\nimport type { Key, SelectionMode } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TagGroupSize = 'sm' | 'md' | 'lg';\nexport type TagGroupVariant = 'default' | 'outline' | 'solid';\n\nexport interface TagGroupProps<T> {\n /** The label for the tag group. */\n label?: string;\n /** The items to display as tags. */\n items: T[];\n /** Function to render the content of each tag. */\n children: (item: T) => JSX.Element;\n /** Function to get a unique key from an item. */\n getKey?: (item: T) => Key;\n /** Handler called when tags are removed. */\n onRemove?: (keys: Set<Key>) => void;\n /** The size of the tags. @default 'md' */\n size?: TagGroupSize;\n /** The visual variant of the tags. @default 'default' */\n variant?: TagGroupVariant;\n /** The selection mode. @default 'none' */\n selectionMode?: SelectionMode;\n /** The currently selected keys (controlled). */\n selectedKeys?: Iterable<Key>;\n /** Handler called when selection changes. */\n onSelectionChange?: (keys: 'all' | Set<Key>) => void;\n /** Keys that are disabled. */\n disabledKeys?: Iterable<Key>;\n /** Additional CSS class name. */\n class?: string;\n /** Content to render when empty. */\n renderEmptyState?: () => JSX.Element;\n}\n\nexport interface TagProps {\n /** A unique key for this tag. */\n id: Key;\n /** The content of the tag. */\n children: JSX.Element;\n /** Whether the tag is disabled. */\n isDisabled?: boolean;\n /** Additional CSS class name. */\n class?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n tag: 'text-xs px-2 py-0.5 gap-1',\n removeButton: 'w-3 h-3',\n label: 'text-xs',\n },\n md: {\n tag: 'text-sm px-2.5 py-1 gap-1.5',\n removeButton: 'w-4 h-4',\n label: 'text-sm',\n },\n lg: {\n tag: 'text-base px-3 py-1.5 gap-2',\n removeButton: 'w-5 h-5',\n label: 'text-base',\n },\n};\n\nconst variantStyles = {\n default: {\n tag: 'bg-bg-400 text-primary-200 hover:bg-bg-300',\n selected: 'bg-accent text-white',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n outline: {\n tag: 'border border-primary-600 text-primary-200 hover:border-primary-500 hover:bg-bg-400/50',\n selected: 'border-accent bg-accent/10 text-accent',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n solid: {\n tag: 'bg-primary-600 text-primary-100 hover:bg-primary-500',\n selected: 'bg-accent text-white',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n};\n\n// ============================================\n// TAG GROUP COMPONENT\n// ============================================\n\n/**\n * A tag group displays a collection of tags that can be selected and/or removed.\n *\n * @example\n * ```tsx\n * // Simple tag group\n * <TagGroup\n * label=\"Categories\"\n * items={categories}\n * onRemove={(keys) => removeCategories(keys)}\n * >\n * {(item) => item.name}\n * </TagGroup>\n *\n * // With selection\n * <TagGroup\n * label=\"Filters\"\n * items={filters}\n * selectionMode=\"multiple\"\n * selectedKeys={selectedFilters}\n * onSelectionChange={setSelectedFilters}\n * >\n * {(item) => item.label}\n * </TagGroup>\n * ```\n */\nexport function TagGroup<T extends { id?: Key; key?: Key }>(props: TagGroupProps<T>): JSX.Element {\n const [local] = splitProps(props, [\n 'label',\n 'items',\n 'getKey',\n 'onRemove',\n 'size',\n 'variant',\n 'selectionMode',\n 'selectedKeys',\n 'onSelectionChange',\n 'disabledKeys',\n 'class',\n 'renderEmptyState',\n ]);\n\n const size = () => local.size ?? 'md';\n const variant = () => local.variant ?? 'default';\n const sizeConfig = () => sizeStyles[size()];\n const variantConfig = () => variantStyles[variant()];\n\n // Default getKey function\n const getKey = (item: T): Key => {\n if (local.getKey) return local.getKey(item);\n if (item.id !== undefined) return item.id;\n if (item.key !== undefined) return item.key;\n return String(item);\n };\n\n return (\n <div class={`flex flex-col gap-2 ${local.class ?? ''}`}>\n <Show when={local.label}>\n <span class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n </span>\n </Show>\n <HeadlessTagList\n items={local.items}\n getKey={getKey}\n onRemove={local.onRemove}\n selectionMode={local.selectionMode}\n selectedKeys={local.selectedKeys}\n onSelectionChange={local.onSelectionChange}\n disabledKeys={local.disabledKeys}\n class=\"flex flex-wrap gap-2\"\n renderEmptyState={local.renderEmptyState ?? (() => (\n <span class=\"text-primary-400 text-sm italic\">No items</span>\n ))}\n >\n {(item) => (\n <HeadlessTag\n id={getKey(item)}\n class={({ isSelected, isDisabled }) => {\n const base = `\n inline-flex items-center rounded-full\n transition-colors duration-150 cursor-pointer\n focus:outline-none focus:ring-2 focus:ring-accent/50\n ${sizeConfig().tag}\n `;\n const variantClass = isSelected\n ? variantConfig().selected\n : variantConfig().tag;\n const disabledClass = isDisabled ? variantConfig().disabled : '';\n return `${base} ${variantClass} ${disabledClass}`.trim();\n }}\n >\n {(renderProps) => (\n <>\n <span>{props.children(item)}</span>\n <Show when={renderProps.allowsRemoving}>\n <button\n type=\"button\"\n class={`\n ${sizeConfig().removeButton}\n rounded-full flex items-center justify-center\n hover:bg-black/20 transition-colors\n focus:outline-none\n `}\n onClick={(e) => {\n e.stopPropagation();\n local.onRemove?.(new Set([getKey(item)]));\n }}\n aria-label=\"Remove\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-full h-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </Show>\n </>\n )}\n </HeadlessTag>\n )}\n </HeadlessTagList>\n </div>\n );\n}\n\n// Re-export types\nexport type { Key, SelectionMode };\n", "/**\n * Calendar component for proyecto-viviana-ui\n *\n * Styled calendar component built on top of solidaria-components.\n * A calendar displays a grid of days and allows users to select dates.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n Calendar as HeadlessCalendar,\n CalendarHeading,\n CalendarButton,\n CalendarGrid,\n CalendarCell,\n type CalendarDate,\n type DateValue,\n} from '@proyecto-viviana/solidaria-components';\nimport type { CalendarStateProps } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type CalendarSize = 'sm' | 'md' | 'lg';\n\nexport interface CalendarProps<T extends DateValue = DateValue>\n extends Omit<CalendarStateProps<T>, 'locale'> {\n /** The size of the calendar. @default 'md' */\n size?: CalendarSize;\n /** Additional CSS class name. */\n class?: string;\n /** Whether to show week numbers. */\n showWeekNumbers?: boolean;\n /** The locale to use for formatting. */\n locale?: string;\n /** Custom aria label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'w-64',\n header: 'text-sm',\n cell: 'w-8 h-8 text-xs',\n button: 'w-6 h-6',\n },\n md: {\n container: 'w-80',\n header: 'text-base',\n cell: 'w-10 h-10 text-sm',\n button: 'w-8 h-8',\n },\n lg: {\n container: 'w-96',\n header: 'text-lg',\n cell: 'w-12 h-12 text-base',\n button: 'w-10 h-10',\n },\n};\n\n// ============================================\n// CALENDAR COMPONENT\n// ============================================\n\n/**\n * A calendar displays a grid of days and allows users to select a date.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Calendar\n * aria-label=\"Event date\"\n * onChange={(date) => console.log(date)}\n * />\n *\n * // Controlled\n * const [date, setDate] = createSignal<CalendarDate | null>(null);\n * <Calendar\n * value={date()}\n * onChange={setDate}\n * />\n *\n * // With min/max dates\n * <Calendar\n * minValue={today(getLocalTimeZone())}\n * maxValue={today(getLocalTimeZone()).add({ months: 3 })}\n * />\n * ```\n */\nexport function Calendar<T extends DateValue = CalendarDate>(\n props: CalendarProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'showWeekNumbers',\n 'aria-label',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <HeadlessCalendar\n {...rest}\n aria-label={local['aria-label']}\n class={`\n ${sizeConfig().container}\n bg-bg-500 rounded-lg border border-primary-700 p-4\n ${local.class ?? ''}\n `}\n >\n {/* Header with navigation */}\n <header class=\"flex items-center justify-between mb-4\">\n <CalendarButton\n slot=\"previous\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </CalendarButton>\n\n <CalendarHeading\n class={`\n font-semibold text-primary-100\n ${sizeConfig().header}\n `}\n />\n\n <CalendarButton\n slot=\"next\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </CalendarButton>\n </header>\n\n {/* Calendar grid */}\n <CalendarGrid\n class=\"w-full border-collapse\"\n >\n {(date) => (\n <CalendarCell\n date={date}\n class={({ isSelected, isFocused, isDisabled, isOutsideMonth, isToday, isPressed }) => {\n const base = `\n ${sizeConfig().cell}\n flex items-center justify-center\n rounded-md cursor-pointer\n transition-colors duration-150\n focus:outline-none\n `;\n\n let stateClass = '';\n\n if (isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed';\n } else if (isSelected) {\n stateClass = 'bg-accent text-white font-medium';\n } else if (isOutsideMonth) {\n stateClass = 'text-primary-600';\n } else if (isToday) {\n stateClass = 'ring-1 ring-accent text-primary-100';\n } else {\n stateClass = 'text-primary-200 hover:bg-bg-400';\n }\n\n const focusClass = isFocused && !isSelected\n ? 'ring-2 ring-accent/50'\n : '';\n\n const pressedClass = isPressed && !isDisabled\n ? 'scale-95'\n : '';\n\n return `${base} ${stateClass} ${focusClass} ${pressedClass}`.trim();\n }}\n />\n )}\n </CalendarGrid>\n </HeadlessCalendar>\n );\n}\n\n// Re-export types\nexport type { CalendarDate, DateValue };\n", "/**\n * RangeCalendar component for proyecto-viviana-ui\n *\n * Styled range calendar component built on top of solidaria-components.\n * A range calendar displays a grid of days and allows users to select a date range.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n RangeCalendar as HeadlessRangeCalendar,\n RangeCalendarHeading,\n RangeCalendarButton,\n RangeCalendarGrid,\n RangeCalendarCell,\n type CalendarDate,\n type DateValue,\n type RangeValue,\n} from '@proyecto-viviana/solidaria-components';\nimport type { RangeCalendarStateProps } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type RangeCalendarSize = 'sm' | 'md' | 'lg';\n\nexport interface RangeCalendarProps<T extends DateValue = DateValue>\n extends Omit<RangeCalendarStateProps<T>, 'locale'> {\n /** The size of the calendar. @default 'md' */\n size?: RangeCalendarSize;\n /** Additional CSS class name. */\n class?: string;\n /** The locale to use for formatting. */\n locale?: string;\n /** Custom aria label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'w-64',\n header: 'text-sm',\n cell: 'w-8 h-8 text-xs',\n button: 'w-6 h-6',\n },\n md: {\n container: 'w-80',\n header: 'text-base',\n cell: 'w-10 h-10 text-sm',\n button: 'w-8 h-8',\n },\n lg: {\n container: 'w-96',\n header: 'text-lg',\n cell: 'w-12 h-12 text-base',\n button: 'w-10 h-10',\n },\n};\n\n// ============================================\n// RANGE CALENDAR COMPONENT\n// ============================================\n\n/**\n * A range calendar displays a grid of days and allows users to select a date range.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <RangeCalendar\n * aria-label=\"Trip dates\"\n * onChange={(range) => console.log(range)}\n * />\n *\n * // Controlled\n * const [range, setRange] = createSignal<RangeValue<CalendarDate> | null>(null);\n * <RangeCalendar\n * value={range()}\n * onChange={setRange}\n * />\n * ```\n */\nexport function RangeCalendar<T extends DateValue = CalendarDate>(\n props: RangeCalendarProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'aria-label',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <HeadlessRangeCalendar\n {...rest}\n aria-label={local['aria-label']}\n class={`\n ${sizeConfig().container}\n bg-bg-500 rounded-lg border border-primary-700 p-4\n ${local.class ?? ''}\n `}\n >\n {/* Header with navigation */}\n <header class=\"flex items-center justify-between mb-4\">\n <RangeCalendarButton\n slot=\"previous\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </RangeCalendarButton>\n\n <RangeCalendarHeading\n class={`\n font-semibold text-primary-100\n ${sizeConfig().header}\n `}\n />\n\n <RangeCalendarButton\n slot=\"next\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </RangeCalendarButton>\n </header>\n\n {/* Calendar grid */}\n <RangeCalendarGrid\n class=\"w-full border-collapse\"\n >\n {(date) => (\n <RangeCalendarCell\n date={date}\n class={({\n isSelected,\n isSelectionStart,\n isSelectionEnd,\n isFocused,\n isDisabled,\n isOutsideMonth,\n isToday,\n isPressed,\n }) => {\n const base = `\n ${sizeConfig().cell}\n flex items-center justify-center\n cursor-pointer\n transition-colors duration-150\n focus:outline-none\n `;\n\n let stateClass = '';\n let roundedClass = 'rounded-md';\n\n if (isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed';\n } else if (isSelectionStart && isSelectionEnd) {\n // Single day selection\n stateClass = 'bg-accent text-white font-medium';\n roundedClass = 'rounded-md';\n } else if (isSelectionStart) {\n stateClass = 'bg-accent text-white font-medium';\n roundedClass = 'rounded-l-md rounded-r-none';\n } else if (isSelectionEnd) {\n stateClass = 'bg-accent text-white font-medium';\n roundedClass = 'rounded-r-md rounded-l-none';\n } else if (isSelected) {\n stateClass = 'bg-accent/20 text-primary-100';\n roundedClass = 'rounded-none';\n } else if (isOutsideMonth) {\n stateClass = 'text-primary-600';\n } else if (isToday) {\n stateClass = 'ring-1 ring-accent text-primary-100';\n } else {\n stateClass = 'text-primary-200 hover:bg-bg-400';\n }\n\n const focusClass = isFocused && !isSelected\n ? 'ring-2 ring-accent/50'\n : '';\n\n const pressedClass = isPressed && !isDisabled\n ? 'scale-95'\n : '';\n\n return `${base} ${stateClass} ${roundedClass} ${focusClass} ${pressedClass}`.trim();\n }}\n />\n )}\n </RangeCalendarGrid>\n </HeadlessRangeCalendar>\n );\n}\n\n// Re-export types\nexport type { RangeValue };\n", "/**\n * DateField component for proyecto-viviana-ui\n *\n * Styled date field component with segment-based editing.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n DateField as HeadlessDateField,\n DateInput,\n DateSegment,\n type DateFieldProps as HeadlessDateFieldProps,\n type CalendarDate,\n type DateValue,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type DateFieldSize = 'sm' | 'md' | 'lg';\n\nexport interface DateFieldProps<T extends DateValue = DateValue>\n extends Omit<HeadlessDateFieldProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the field. @default 'md' */\n size?: DateFieldSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label for the field. */\n label?: string;\n /** Description text. */\n description?: string;\n /** Error message. */\n errorMessage?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'px-2 py-1 gap-0.5',\n segment: 'px-0.5',\n label: 'text-xs',\n },\n md: {\n container: 'text-base',\n input: 'px-3 py-2 gap-1',\n segment: 'px-1',\n label: 'text-sm',\n },\n lg: {\n container: 'text-lg',\n input: 'px-4 py-3 gap-1.5',\n segment: 'px-1.5',\n label: 'text-base',\n },\n};\n\n// ============================================\n// DATE FIELD COMPONENT\n// ============================================\n\n/**\n * A date field allows users to enter and edit date values using a keyboard.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <DateField label=\"Birth date\" />\n *\n * // Controlled\n * const [date, setDate] = createSignal<CalendarDate | null>(null);\n * <DateField\n * label=\"Event date\"\n * value={date()}\n * onChange={setDate}\n * />\n *\n * // With validation\n * <DateField\n * label=\"Future date\"\n * minValue={today(getLocalTimeZone())}\n * errorMessage=\"Date must be in the future\"\n * />\n * ```\n */\nexport function DateField<T extends DateValue = CalendarDate>(\n props: DateFieldProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n const isInvalid = () => local.isInvalid || !!local.errorMessage;\n\n return (\n <HeadlessDateField\n {...rest}\n isInvalid={isInvalid()}\n class={`\n flex flex-col gap-1\n ${sizeConfig().container}\n ${local.class ?? ''}\n `}\n >\n {/* Label */}\n {local.label && (\n <label class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n {rest.isRequired && <span class=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n\n {/* Input container */}\n <DateInput\n class={({ isFocused, isDisabled }) => {\n const base = `\n inline-flex items-center\n ${sizeConfig().input}\n bg-bg-400 rounded-md border\n transition-colors duration-150\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isFocused) {\n borderClass = 'border-accent';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n const focusClass = isFocused\n ? 'ring-2 ring-accent/30'\n : '';\n\n return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();\n }}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n class={({ isFocused, isPlaceholder, isEditable }) => {\n const base = `\n ${sizeConfig().segment}\n rounded\n outline-none\n tabular-nums\n `;\n\n let stateClass = '';\n if (segment.type === 'literal') {\n stateClass = 'text-primary-400';\n } else if (isPlaceholder) {\n stateClass = 'text-primary-500 italic';\n } else {\n stateClass = 'text-primary-100';\n }\n\n const focusClass = isFocused && isEditable\n ? 'bg-accent text-white'\n : '';\n\n return `${base} ${stateClass} ${focusClass}`.trim();\n }}\n />\n )}\n </DateInput>\n\n {/* Description */}\n {local.description && !isInvalid() && (\n <p class={`text-primary-400 ${sizeConfig().label}`}>\n {local.description}\n </p>\n )}\n\n {/* Error message */}\n {isInvalid() && local.errorMessage && (\n <p class={`text-red-500 ${sizeConfig().label}`}>\n {local.errorMessage}\n </p>\n )}\n </HeadlessDateField>\n );\n}\n\n// Re-export types\nexport type { CalendarDate, DateValue };\n", "/**\n * TimeField component for proyecto-viviana-ui\n *\n * Styled time field component with segment-based editing.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n TimeField as HeadlessTimeField,\n TimeInput,\n TimeSegment,\n type TimeFieldProps as HeadlessTimeFieldProps,\n type TimeValue,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TimeFieldSize = 'sm' | 'md' | 'lg';\n\nexport interface TimeFieldProps<T extends TimeValue = TimeValue>\n extends Omit<HeadlessTimeFieldProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the field. @default 'md' */\n size?: TimeFieldSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label for the field. */\n label?: string;\n /** Description text. */\n description?: string;\n /** Error message. */\n errorMessage?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'px-2 py-1 gap-0.5',\n segment: 'px-0.5',\n label: 'text-xs',\n },\n md: {\n container: 'text-base',\n input: 'px-3 py-2 gap-1',\n segment: 'px-1',\n label: 'text-sm',\n },\n lg: {\n container: 'text-lg',\n input: 'px-4 py-3 gap-1.5',\n segment: 'px-1.5',\n label: 'text-base',\n },\n};\n\n// ============================================\n// TIME FIELD COMPONENT\n// ============================================\n\n/**\n * A time field allows users to enter and edit time values using a keyboard.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <TimeField label=\"Start time\" />\n *\n * // With 24-hour format\n * <TimeField\n * label=\"Meeting time\"\n * hourCycle={24}\n * />\n *\n * // With seconds\n * <TimeField\n * label=\"Precise time\"\n * granularity=\"second\"\n * />\n * ```\n */\nexport function TimeField<T extends TimeValue = TimeValue>(\n props: TimeFieldProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n const isInvalid = () => local.isInvalid || !!local.errorMessage;\n\n return (\n <HeadlessTimeField\n {...rest}\n isInvalid={isInvalid()}\n class={`\n flex flex-col gap-1\n ${sizeConfig().container}\n ${local.class ?? ''}\n `}\n >\n {/* Label */}\n {local.label && (\n <label class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n {rest.isRequired && <span class=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n\n {/* Input container */}\n <TimeInput\n class={({ isFocused, isDisabled }) => {\n const base = `\n inline-flex items-center\n ${sizeConfig().input}\n bg-bg-400 rounded-md border\n transition-colors duration-150\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isFocused) {\n borderClass = 'border-accent';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n const focusClass = isFocused\n ? 'ring-2 ring-accent/30'\n : '';\n\n return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();\n }}\n >\n {(segment) => (\n <TimeSegment\n segment={segment}\n class={({ isFocused, isPlaceholder, isEditable }) => {\n const base = `\n ${sizeConfig().segment}\n rounded\n outline-none\n tabular-nums\n `;\n\n let stateClass = '';\n if (segment.type === 'literal') {\n stateClass = 'text-primary-400';\n } else if (isPlaceholder) {\n stateClass = 'text-primary-500 italic';\n } else {\n stateClass = 'text-primary-100';\n }\n\n const focusClass = isFocused && isEditable\n ? 'bg-accent text-white'\n : '';\n\n return `${base} ${stateClass} ${focusClass}`.trim();\n }}\n />\n )}\n </TimeInput>\n\n {/* Description */}\n {local.description && !isInvalid() && (\n <p class={`text-primary-400 ${sizeConfig().label}`}>\n {local.description}\n </p>\n )}\n\n {/* Error message */}\n {isInvalid() && local.errorMessage && (\n <p class={`text-red-500 ${sizeConfig().label}`}>\n {local.errorMessage}\n </p>\n )}\n </HeadlessTimeField>\n );\n}\n\n// Re-export types\nexport type { TimeValue };\n", "/**\n * DatePicker component for proyecto-viviana-ui\n *\n * Styled date picker component that combines a date field with a calendar popup.\n */\n\nimport { type JSX, splitProps, Show } from 'solid-js';\nimport {\n DatePicker as HeadlessDatePicker,\n DatePickerButton,\n DateInput,\n DateSegment,\n useDatePickerContext,\n type DatePickerProps as HeadlessDatePickerProps,\n type CalendarDate,\n type DateValue,\n} from '@proyecto-viviana/solidaria-components';\nimport { Calendar } from './index';\n\n// Calendar icon component - use function to ensure consistent hydration\nfunction CalendarIcon(): JSX.Element {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-5 h-5\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n );\n}\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\n\nexport interface DatePickerProps<T extends DateValue = DateValue>\n extends Omit<HeadlessDatePickerProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the picker. @default 'md' */\n size?: DatePickerSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label for the field. */\n label?: string;\n /** Description text. */\n description?: string;\n /** Error message. */\n errorMessage?: string;\n /** Placeholder text. */\n placeholder?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'px-2 py-1 gap-0.5',\n segment: 'px-0.5',\n label: 'text-xs',\n button: 'w-7 h-7',\n },\n md: {\n container: 'text-base',\n input: 'px-3 py-2 gap-1',\n segment: 'px-1',\n label: 'text-sm',\n button: 'w-9 h-9',\n },\n lg: {\n container: 'text-lg',\n input: 'px-4 py-3 gap-1.5',\n segment: 'px-1.5',\n label: 'text-base',\n button: 'w-11 h-11',\n },\n};\n\n// ============================================\n// DATE PICKER COMPONENT\n// ============================================\n\n/**\n * A date picker combines a date field and a calendar popup.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <DatePicker label=\"Event date\" />\n *\n * // Controlled\n * const [date, setDate] = createSignal<CalendarDate | null>(null);\n * <DatePicker\n * label=\"Appointment\"\n * value={date()}\n * onChange={setDate}\n * />\n *\n * // With constraints\n * <DatePicker\n * label=\"Future booking\"\n * minValue={today(getLocalTimeZone())}\n * />\n * ```\n */\nexport function DatePicker<T extends DateValue = CalendarDate>(\n props: DatePickerProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n 'placeholder',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n const isInvalid = () => local.isInvalid || !!local.errorMessage;\n\n return (\n <HeadlessDatePicker\n {...rest}\n isInvalid={isInvalid()}\n class={`\n flex flex-col gap-1 relative\n ${sizeConfig().container}\n ${local.class ?? ''}\n `}\n >\n {/* Label */}\n {local.label && (\n <label class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n {rest.isRequired && <span class=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n\n {/* Input group */}\n <div class=\"relative flex items-center\">\n {/* Date input */}\n <DateInput\n class={({ isFocused, isDisabled }) => {\n const base = `\n inline-flex items-center flex-1\n ${sizeConfig().input}\n bg-bg-400 rounded-l-md border-y border-l\n transition-colors duration-150\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isFocused) {\n borderClass = 'border-accent';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n const focusClass = isFocused\n ? 'ring-2 ring-accent/30'\n : '';\n\n return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();\n }}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n class={({ isFocused, isPlaceholder, isEditable }) => {\n const base = `\n ${sizeConfig().segment}\n rounded\n outline-none\n tabular-nums\n `;\n\n let stateClass = '';\n if (segment.type === 'literal') {\n stateClass = 'text-primary-400';\n } else if (isPlaceholder) {\n stateClass = 'text-primary-500 italic';\n } else {\n stateClass = 'text-primary-100';\n }\n\n const focusClass = isFocused && isEditable\n ? 'bg-accent text-white'\n : '';\n\n return `${base} ${stateClass} ${focusClass}`.trim();\n }}\n />\n )}\n </DateInput>\n\n {/* Calendar button */}\n <DatePickerButton\n class={({ isDisabled, isOpen }) => {\n const base = `\n ${sizeConfig().button}\n flex items-center justify-center\n bg-bg-400 border-y border-r rounded-r-md\n text-primary-200\n transition-colors duration-150\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isOpen) {\n borderClass = 'border-accent bg-bg-300';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-bg-300 cursor-pointer';\n\n return `${base} ${borderClass} ${disabledClass}`.trim();\n }}\n >\n <CalendarIcon />\n </DatePickerButton>\n\n {/* Calendar popup */}\n <DatePickerPopup size={size()} />\n </div>\n\n {/* Description */}\n {local.description && !isInvalid() && (\n <p class={`text-primary-400 ${sizeConfig().label}`}>\n {local.description}\n </p>\n )}\n\n {/* Error message */}\n {isInvalid() && local.errorMessage && (\n <p class={`text-red-500 ${sizeConfig().label}`}>\n {local.errorMessage}\n </p>\n )}\n </HeadlessDatePicker>\n );\n}\n\n// ============================================\n// POPUP COMPONENT (uses context)\n// ============================================\n\nfunction DatePickerPopup(props: { size: DatePickerSize }): JSX.Element {\n const context = useDatePickerContext();\n\n return (\n <Show when={context.overlayState.isOpen}>\n <div\n class={`\n absolute top-full left-0 z-50 mt-1\n shadow-lg rounded-lg\n `}\n >\n <Calendar\n value={context.calendarState.value()}\n onChange={(date) => {\n context.fieldState.setValue(date as any);\n context.overlayState.close();\n }}\n minValue={context.calendarState.visibleRange().start}\n size={props.size}\n />\n </div>\n {/* Backdrop */}\n <div\n class=\"fixed inset-0 z-40\"\n onClick={() => context.overlayState.close()}\n />\n </Show>\n );\n}\n\n// Re-export types\nexport type { CalendarDate, DateValue };\n", "/**\n * Table component for proyecto-viviana-ui\n *\n * Styled table component built on top of solidaria-components.\n * Inspired by Spectrum 2's Table component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n Table as HeadlessTable,\n TableHeader as HeadlessTableHeader,\n TableColumn as HeadlessTableColumn,\n TableBody as HeadlessTableBody,\n TableRow as HeadlessTableRow,\n TableCell as HeadlessTableCell,\n TableSelectionCheckbox as HeadlessTableSelectionCheckbox,\n TableSelectAllCheckbox as HeadlessTableSelectAllCheckbox,\n type TableProps as HeadlessTableProps,\n type TableHeaderProps as HeadlessTableHeaderProps,\n type TableColumnProps as HeadlessTableColumnProps,\n type TableBodyProps as HeadlessTableBodyProps,\n type TableRowProps as HeadlessTableRowProps,\n type TableCellProps as HeadlessTableCellProps,\n type TableRenderProps,\n type TableColumnRenderProps,\n type TableRowRenderProps,\n type TableCellRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, SortDescriptor, ColumnDefinition } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n}\n\nconst TableSizeContext = createContext<TableContextValue>({ size: 'md', variant: 'default' })\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TableProps<T extends object>\n extends Omit<HeadlessTableProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the table. */\n size?: TableSize\n /** The visual variant of the table. */\n variant?: TableVariant\n /** Additional CSS class name. */\n class?: string\n /** Title for the table. */\n title?: string\n /** Description for the table. */\n description?: string\n /** Children components (TableHeader, TableBody). */\n children?: JSX.Element | (() => JSX.Element)\n}\n\nexport interface TableHeaderProps extends Omit<HeadlessTableHeaderProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TableColumnProps extends Omit<HeadlessTableColumnProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Text alignment for the column. */\n align?: 'left' | 'center' | 'right'\n /** Width of the column (CSS value). */\n width?: string\n}\n\nexport interface TableBodyProps<T> extends Omit<HeadlessTableBodyProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TableRowProps<T> extends Omit<HeadlessTableRowProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TableCellProps extends Omit<HeadlessTableCellProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Text alignment for the cell. */\n align?: 'left' | 'center' | 'right'\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n table: 'text-sm',\n headerCell: 'px-3 py-2',\n cell: 'px-3 py-2',\n checkbox: 'w-4 h-4',\n },\n md: {\n table: 'text-base',\n headerCell: 'px-4 py-3',\n cell: 'px-4 py-3',\n checkbox: 'w-5 h-5',\n },\n lg: {\n table: 'text-lg',\n headerCell: 'px-5 py-4',\n cell: 'px-5 py-4',\n checkbox: 'w-6 h-6',\n },\n}\n\nconst variantStyles = {\n default: {\n wrapper: 'rounded-lg border border-bg-300 overflow-hidden',\n header: 'bg-bg-300 border-b border-bg-400',\n row: '',\n rowHover: 'hover:bg-bg-200/50',\n rowSelected: 'bg-accent/10',\n },\n striped: {\n wrapper: 'rounded-lg border border-bg-300 overflow-hidden',\n header: 'bg-bg-300 border-b border-bg-400',\n row: 'even:bg-bg-200/30',\n rowHover: 'hover:bg-bg-200/50',\n rowSelected: 'bg-accent/10',\n },\n bordered: {\n wrapper: 'rounded-lg border-2 border-bg-400 overflow-hidden',\n header: 'bg-bg-300 border-b-2 border-bg-400',\n row: 'border-b border-bg-300 last:border-b-0',\n rowHover: 'hover:bg-bg-200/50',\n rowSelected: 'bg-accent/10',\n },\n}\n\nconst alignStyles = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\n// ============================================\n// TABLE COMPONENT\n// ============================================\n\n/**\n * A table displays data in rows and columns and enables a user to navigate its contents\n * via directional navigation keys, and optionally supports row selection and sorting.\n *\n * Built on solidaria-components Table for full accessibility support.\n *\n * @example\n * ```tsx\n * const columns = [\n * { key: 'name', name: 'Name' },\n * { key: 'role', name: 'Role' },\n * { key: 'status', name: 'Status' },\n * ]\n *\n * const rows = [\n * { id: '1', name: 'John', role: 'Developer', status: 'Active' },\n * { id: '2', name: 'Jane', role: 'Designer', status: 'Active' },\n * ]\n *\n * <Table items={rows} columns={columns} selectionMode=\"multiple\">\n * {() => (\n * <>\n * <TableHeader>\n * {() => (\n * <For each={columns}>\n * {(col) => <TableColumn id={col.key}>{col.name}</TableColumn>}\n * </For>\n * )}\n * </TableHeader>\n * <TableBody>\n * {(row) => (\n * <TableRow id={row.id}>\n * {() => (\n * <>\n * <TableCell>{row.name}</TableCell>\n * <TableCell>{row.role}</TableCell>\n * <TableCell>{row.status}</TableCell>\n * </>\n * )}\n * </TableRow>\n * )}\n * </TableBody>\n * </>\n * )}\n * </Table>\n * ```\n */\nexport function Table<T extends object>(props: TableProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n 'title',\n 'description',\n ])\n\n const size = () => local.size ?? 'md'\n const variant = () => local.variant ?? 'default'\n const styles = () => sizeStyles[size()]\n const variantStyle = () => variantStyles[variant()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableRenderProps): string => {\n const base = 'w-full bg-bg-400'\n const sizeClass = styles().table\n\n let stateClass = ''\n if (renderProps.isEmpty) {\n stateClass = ''\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, stateClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size(), variant: variant() })\n\n return (\n <TableSizeContext.Provider value={contextValue()}>\n <div class=\"flex flex-col gap-2\">\n <Show when={local.title}>\n <h3 class=\"text-lg font-semibold text-primary-100\">{local.title}</h3>\n </Show>\n <Show when={local.description}>\n <p class=\"text-sm text-primary-400\">{local.description}</p>\n </Show>\n <div class={variantStyle().wrapper}>\n <HeadlessTable {...headlessProps} class={getClassName}>\n {props.children}\n </HeadlessTable>\n </div>\n </div>\n </TableSizeContext.Provider>\n )\n}\n\n// ============================================\n// TABLE HEADER COMPONENT\n// ============================================\n\n/**\n * A header row in a table containing column headers.\n */\nexport function TableHeader(props: TableHeaderProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const context = useContext(TableSizeContext)\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const className = [variantStyle.header, customClass].filter(Boolean).join(' ')\n\n return (\n <HeadlessTableHeader {...headlessProps} class={className}>\n {props.children}\n </HeadlessTableHeader>\n )\n}\n\n// ============================================\n// TABLE COLUMN COMPONENT\n// ============================================\n\n/**\n * A column header in a table.\n */\nexport function TableColumn(props: TableColumnProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'align', 'width'])\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableColumnRenderProps): string => {\n const base = 'font-semibold text-primary-200 select-none'\n const sizeClass = sizeStyle.headerCell\n const alignClass = alignStyles[local.align ?? 'left']\n\n let sortClass = ''\n if (renderProps.isSortable) {\n sortClass = 'cursor-pointer'\n if (renderProps.isHovered) {\n sortClass += ' text-primary-100'\n }\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, alignClass, sortClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const getStyle = (): JSX.CSSProperties | undefined => {\n if (local.width) {\n return { width: local.width }\n }\n return undefined\n }\n\n return (\n <HeadlessTableColumn {...headlessProps} class={getClassName} style={getStyle()}>\n {(renderProps: TableColumnRenderProps) => (\n <div class=\"flex items-center gap-2\">\n <span class=\"flex-1\">\n {typeof props.children === 'function'\n ? props.children(renderProps)\n : props.children}\n </span>\n <Show when={renderProps.isSortable && renderProps.sortDirection}>\n <SortIcon direction={renderProps.sortDirection!} class=\"w-4 h-4\" />\n </Show>\n </div>\n )}\n </HeadlessTableColumn>\n )\n}\n\n// ============================================\n// TABLE BODY COMPONENT\n// ============================================\n\n/**\n * The body of a table containing data rows.\n */\nexport function TableBody<T extends object>(props: TableBodyProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'renderEmptyState'])\n const customClass = local.class ?? ''\n\n const defaultEmptyState = () => (\n <tr>\n <td colSpan={100} class=\"py-8 text-center text-primary-400\">\n <div class=\"flex flex-col items-center gap-2\">\n <EmptyIcon class=\"w-12 h-12 text-primary-500\" />\n <span>No data available</span>\n </div>\n </td>\n </tr>\n )\n\n return (\n <HeadlessTableBody\n {...headlessProps}\n class={customClass}\n renderEmptyState={local.renderEmptyState ?? defaultEmptyState}\n >\n {props.children}\n </HeadlessTableBody>\n )\n}\n\n// ============================================\n// TABLE ROW COMPONENT\n// ============================================\n\n/**\n * A row in a table.\n */\nexport function TableRow<T extends object>(props: TableRowProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const context = useContext(TableSizeContext)\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableRowRenderProps): string => {\n const base = 'transition-colors duration-150 outline-none'\n const variantClass = variantStyle.row\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n stateClass = variantStyle.rowSelected\n } else if (renderProps.isHovered) {\n stateClass = variantStyle.rowHover\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'bg-bg-200/70' : ''\n\n return [base, variantClass, stateClass, focusClass, pressedClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n return (\n <HeadlessTableRow {...headlessProps} class={getClassName}>\n {props.children}\n </HeadlessTableRow>\n )\n}\n\n// ============================================\n// TABLE CELL COMPONENT\n// ============================================\n\n/**\n * A cell in a table row.\n */\nexport function TableCell(props: TableCellProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'align'])\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableCellRenderProps): string => {\n const base = 'text-primary-200'\n const sizeClass = sizeStyle.cell\n const alignClass = alignStyles[local.align ?? 'left']\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, alignClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTableCell {...headlessProps} class={getClassName}>\n {props.children}\n </HeadlessTableCell>\n )\n}\n\n// ============================================\n// TABLE SELECTION CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A styled checkbox cell for row selection.\n */\nexport function TableSelectionCheckbox(props: { rowKey: Key }): JSX.Element {\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const checkboxClass = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400`\n\n return (\n <td class={`${sizeStyle.cell} w-px`}>\n <span class={checkboxClass}>\n <HeadlessTableSelectionCheckbox rowKey={props.rowKey} />\n </span>\n </td>\n )\n}\n\n/**\n * A styled checkbox for select-all functionality.\n */\nexport function TableSelectAllCheckbox(): JSX.Element {\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const checkboxClass = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400`\n\n return (\n <th class={`${sizeStyle.headerCell} w-px`}>\n <span class={checkboxClass}>\n <HeadlessTableSelectAllCheckbox />\n </span>\n </th>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction SortIcon(props: { direction: 'ascending' | 'descending'; class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n {props.direction === 'ascending' ? (\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 15l7-7 7 7\" />\n ) : (\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n )}\n </svg>\n )\n}\n\nfunction EmptyIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nTable.Header = TableHeader\nTable.Column = TableColumn\nTable.Body = TableBody\nTable.Row = TableRow\nTable.Cell = TableCell\nTable.SelectionCheckbox = TableSelectionCheckbox\nTable.SelectAllCheckbox = TableSelectAllCheckbox\n\n// Re-export types for convenience\nexport type { Key, SortDescriptor, ColumnDefinition }\n", "/**\n * GridList component for proyecto-viviana-ui\n *\n * Styled grid list component built on top of solidaria-components.\n * Inspired by Spectrum 2's GridList component patterns.\n *\n * GridList is similar to ListBox but supports interactive elements within items\n * and uses grid keyboard navigation.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n GridList as HeadlessGridList,\n GridListItem as HeadlessGridListItem,\n GridListSelectionCheckbox as HeadlessGridListSelectionCheckbox,\n type GridListProps as HeadlessGridListProps,\n type GridListItemProps as HeadlessGridListItemProps,\n type GridListRenderProps,\n type GridListItemRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type GridListSize = 'sm' | 'md' | 'lg'\nexport type GridListVariant = 'default' | 'cards' | 'bordered'\nexport type GridListLayout = 'list' | 'grid'\n\ninterface GridListContextValue {\n size: GridListSize\n variant: GridListVariant\n layout: GridListLayout\n}\n\nconst GridListSizeContext = createContext<GridListContextValue>({\n size: 'md',\n variant: 'default',\n layout: 'list',\n})\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface GridListProps<T extends object>\n extends Omit<HeadlessGridListProps<T>, 'class' | 'style'> {\n /** The size of the grid list. */\n size?: GridListSize\n /** The visual variant of the grid list. */\n variant?: GridListVariant\n /** The layout of the grid list. */\n layout?: GridListLayout\n /** Number of columns for grid layout (default: auto-fit). */\n columns?: number | 'auto'\n /** Additional CSS class name. */\n class?: string\n /** Label for the grid list. */\n label?: string\n /** Description for the grid list. */\n description?: string\n}\n\nexport interface GridListItemProps<T extends object>\n extends Omit<HeadlessGridListItemProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Optional description text. */\n description?: string\n /**\n * Optional icon to display before the content.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n */\n icon?: () => JSX.Element\n /**\n * Optional image to display in the item.\n */\n image?: string\n /** Alt text for the image. */\n imageAlt?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n list: 'gap-1 p-1',\n item: 'text-sm py-2 px-3 gap-2',\n icon: 'h-4 w-4',\n image: 'h-10 w-10',\n label: 'text-sm',\n description: 'text-xs',\n checkbox: 'w-4 h-4',\n },\n md: {\n list: 'gap-2 p-2',\n item: 'text-base py-3 px-4 gap-3',\n icon: 'h-5 w-5',\n image: 'h-12 w-12',\n label: 'text-base',\n description: 'text-sm',\n checkbox: 'w-5 h-5',\n },\n lg: {\n list: 'gap-3 p-3',\n item: 'text-lg py-4 px-5 gap-4',\n icon: 'h-6 w-6',\n image: 'h-16 w-16',\n label: 'text-lg',\n description: 'text-base',\n checkbox: 'w-6 h-6',\n },\n}\n\nconst variantStyles = {\n default: {\n list: 'bg-bg-400 rounded-lg border border-bg-300',\n item: 'rounded-md',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n cards: {\n list: 'bg-transparent',\n item: 'bg-bg-400 rounded-lg border border-bg-300 shadow-sm',\n itemHover: 'hover:shadow-md hover:border-bg-200',\n itemSelected: 'border-accent bg-accent/5 shadow-accent/20',\n },\n bordered: {\n list: 'bg-bg-400 rounded-lg border-2 border-bg-400',\n item: 'border-b border-bg-300 last:border-b-0 rounded-none',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10',\n },\n}\n\n// ============================================\n// GRID LIST COMPONENT\n// ============================================\n\n/**\n * A grid list displays a list of interactive items, with support for\n * keyboard navigation, single or multiple selection, and row actions.\n *\n * Built on solidaria-components GridList for full accessibility support.\n *\n * @example\n * ```tsx\n * const items = [\n * { id: '1', name: 'Item 1', description: 'Description 1' },\n * { id: '2', name: 'Item 2', description: 'Description 2' },\n * ]\n *\n * <GridList\n * items={items}\n * getKey={(item) => item.id}\n * selectionMode=\"multiple\"\n * >\n * {(item) => (\n * <GridListItem id={item.id} description={item.description}>\n * {item.name}\n * </GridListItem>\n * )}\n * </GridList>\n * ```\n */\nexport function GridList<T extends object>(props: GridListProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'layout',\n 'columns',\n 'class',\n 'label',\n 'description',\n ])\n\n const size = () => local.size ?? 'md'\n const variant = () => local.variant ?? 'default'\n const layout = () => local.layout ?? 'list'\n const styles = () => sizeStyles[size()]\n const variantStyle = () => variantStyles[variant()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: GridListRenderProps): string => {\n const base = 'overflow-auto focus:outline-none'\n const sizeClass = styles().list\n const variantClass = variantStyle().list\n\n // Layout classes\n let layoutClass = ''\n if (layout() === 'grid') {\n if (local.columns === 'auto' || local.columns === undefined) {\n layoutClass = 'grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))]'\n } else {\n layoutClass = `grid grid-cols-${local.columns}`\n }\n } else {\n layoutClass = 'flex flex-col'\n }\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, variantClass, layoutClass, stateClass, focusClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n const defaultEmptyState = () => (\n <li class=\"py-8 text-center text-primary-400\">\n <div class=\"flex flex-col items-center gap-2\">\n <EmptyIcon class=\"w-12 h-12 text-primary-500\" />\n <span>No items</span>\n </div>\n </li>\n )\n\n const contextValue = () => ({ size: size(), variant: variant(), layout: layout() })\n\n return (\n <GridListSizeContext.Provider value={contextValue()}>\n <div class=\"flex flex-col gap-2\">\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${styles().label}`}>\n {local.label}\n </label>\n </Show>\n <HeadlessGridList\n {...headlessProps}\n class={getClassName}\n renderEmptyState={headlessProps.renderEmptyState ?? defaultEmptyState}\n />\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n </div>\n </GridListSizeContext.Provider>\n )\n}\n\n// ============================================\n// GRID LIST ITEM COMPONENT\n// ============================================\n\n/**\n * An item in a grid list.\n */\nexport function GridListItem<T extends object>(props: GridListItemProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'class',\n 'description',\n 'icon',\n 'image',\n 'imageAlt',\n ])\n\n const context = useContext(GridListSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: GridListItemRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-all duration-150 outline-none'\n const sizeClass = sizeStyle.item\n const variantClass = variantStyle.item\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n stateClass = variantStyle.itemSelected\n } else if (renderProps.isHovered) {\n stateClass = variantStyle.itemHover\n }\n\n let textClass = ''\n if (!renderProps.isDisabled && !renderProps.isSelected) {\n textClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'scale-[0.98]' : ''\n\n return [base, sizeClass, variantClass, stateClass, textClass, focusClass, pressedClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n return (\n <HeadlessGridListItem {...headlessProps} class={getClassName}>\n {(renderProps: GridListItemRenderProps) => (\n <>\n {/* Image */}\n <Show when={local.image}>\n <img\n src={local.image}\n alt={local.imageAlt ?? ''}\n class={`${sizeStyle.image} rounded object-cover shrink-0`}\n />\n </Show>\n\n {/* Icon */}\n <Show when={local.icon}>\n <span class={`shrink-0 ${sizeStyle.icon}`}>{local.icon!()}</span>\n </Show>\n\n {/* Selection indicator */}\n <Show when={renderProps.isSelected}>\n <CheckIcon class={`shrink-0 ${sizeStyle.icon} text-accent`} />\n </Show>\n\n {/* Content */}\n <div class=\"flex flex-col flex-1 min-w-0\">\n <span class=\"truncate\">\n {typeof props.children === 'function'\n ? props.children(renderProps)\n : props.children}\n </span>\n <Show when={local.description}>\n <span class={`text-primary-400 truncate ${sizeStyle.description}`}>\n {local.description}\n </span>\n </Show>\n </div>\n </>\n )}\n </HeadlessGridListItem>\n )\n}\n\n// ============================================\n// GRID LIST SELECTION CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A styled checkbox for item selection in a grid list.\n */\nexport function GridListSelectionCheckbox(props: { itemKey: Key; class?: string }): JSX.Element {\n const context = useContext(GridListSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const className = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400 ${props.class ?? ''}`\n\n return (\n <span class={className}>\n <HeadlessGridListSelectionCheckbox itemKey={props.itemKey} />\n </span>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nfunction EmptyIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nGridList.Item = GridListItem\nGridList.SelectionCheckbox = GridListSelectionCheckbox\n\n// Re-export Key type for convenience\nexport type { Key }\n", "/**\n * Tree component for proyecto-viviana-ui\n *\n * Styled tree component built on top of solidaria-components.\n * Inspired by Spectrum 2's Tree component patterns.\n *\n * Tree displays hierarchical data with expandable/collapsible nodes,\n * supporting keyboard navigation and selection.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n Tree as HeadlessTree,\n TreeItem as HeadlessTreeItem,\n TreeExpandButton as HeadlessTreeExpandButton,\n TreeSelectionCheckbox as HeadlessTreeSelectionCheckbox,\n type TreeProps as HeadlessTreeProps,\n type TreeItemProps as HeadlessTreeItemProps,\n type TreeExpandButtonProps as HeadlessTreeExpandButtonProps,\n type TreeRenderProps,\n type TreeItemRenderProps,\n type TreeRenderItemState,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, TreeItemData } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type TreeSize = 'sm' | 'md' | 'lg'\nexport type TreeVariant = 'default' | 'bordered' | 'quiet'\n\ninterface TreeContextValue {\n size: TreeSize\n variant: TreeVariant\n}\n\nconst TreeSizeContext = createContext<TreeContextValue>({ size: 'md', variant: 'default' })\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TreeProps<T extends object>\n extends Omit<HeadlessTreeProps<T>, 'class' | 'style'> {\n /** The size of the tree. */\n size?: TreeSize\n /** The visual variant of the tree. */\n variant?: TreeVariant\n /** Additional CSS class name. */\n class?: string\n /** Label for the tree. */\n label?: string\n /** Description for the tree. */\n description?: string\n}\n\nexport interface TreeItemProps<T extends object>\n extends Omit<HeadlessTreeItemProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Optional description text. */\n description?: string\n /**\n * Optional icon to display before the content.\n * Use a function returning JSX for SSR compatibility: `icon={() => <FolderIcon />}`\n */\n icon?: () => JSX.Element\n}\n\nexport interface TreeExpandButtonProps extends Omit<HeadlessTreeExpandButtonProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n tree: 'text-sm',\n item: 'py-1 px-2 gap-1',\n indent: 16,\n icon: 'h-4 w-4',\n expandButton: 'h-4 w-4',\n label: 'text-sm',\n description: 'text-xs',\n checkbox: 'w-4 h-4',\n },\n md: {\n tree: 'text-base',\n item: 'py-1.5 px-3 gap-2',\n indent: 20,\n icon: 'h-5 w-5',\n expandButton: 'h-5 w-5',\n label: 'text-base',\n description: 'text-sm',\n checkbox: 'w-5 h-5',\n },\n lg: {\n tree: 'text-lg',\n item: 'py-2 px-4 gap-2',\n indent: 24,\n icon: 'h-6 w-6',\n expandButton: 'h-6 w-6',\n label: 'text-lg',\n description: 'text-base',\n checkbox: 'w-6 h-6',\n },\n}\n\nconst variantStyles = {\n default: {\n tree: 'bg-bg-400 rounded-lg border border-bg-300 p-2',\n item: 'rounded-md',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n bordered: {\n tree: 'bg-bg-400 rounded-lg border-2 border-bg-400 p-2',\n item: 'border-b border-bg-300/30 last:border-b-0',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n quiet: {\n tree: 'bg-transparent',\n item: 'rounded-md',\n itemHover: 'hover:bg-bg-300/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n}\n\n// ============================================\n// TREE COMPONENT\n// ============================================\n\n/**\n * A tree displays hierarchical data with expandable/collapsible nodes,\n * supporting keyboard navigation and selection.\n *\n * Built on solidaria-components Tree for full accessibility support.\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * key: 'documents',\n * value: { name: 'Documents' },\n * children: [\n * { key: 'doc1', value: { name: 'Report.pdf' } },\n * { key: 'doc2', value: { name: 'Notes.txt' } },\n * ],\n * },\n * {\n * key: 'images',\n * value: { name: 'Images' },\n * children: [\n * { key: 'img1', value: { name: 'Photo.jpg' } },\n * ],\n * },\n * ]\n *\n * <Tree items={items} defaultExpandedKeys={['documents']}>\n * {(item, state) => (\n * <TreeItem id={item.key} icon={() => <FolderIcon />}>\n * {item.value.name}\n * </TreeItem>\n * )}\n * </Tree>\n * ```\n */\nexport function Tree<T extends object>(props: TreeProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n ])\n\n const size = () => local.size ?? 'md'\n const variant = () => local.variant ?? 'default'\n const styles = () => sizeStyles[size()]\n const variantStyle = () => variantStyles[variant()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TreeRenderProps): string => {\n const base = 'overflow-auto focus:outline-none'\n const sizeClass = styles().tree\n const variantClass = variantStyle().tree\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, variantClass, stateClass, focusClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n const defaultEmptyState = () => (\n <div class=\"py-8 text-center text-primary-400\">\n <div class=\"flex flex-col items-center gap-2\">\n <EmptyTreeIcon class=\"w-12 h-12 text-primary-500\" />\n <span>No items</span>\n </div>\n </div>\n )\n\n const contextValue = () => ({ size: size(), variant: variant() })\n\n return (\n <TreeSizeContext.Provider value={contextValue()}>\n <div class=\"flex flex-col gap-2\">\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${styles().label}`}>\n {local.label}\n </label>\n </Show>\n <HeadlessTree\n {...headlessProps}\n class={getClassName}\n renderEmptyState={headlessProps.renderEmptyState ?? defaultEmptyState}\n />\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n </div>\n </TreeSizeContext.Provider>\n )\n}\n\n// ============================================\n// TREE ITEM COMPONENT\n// ============================================\n\n/**\n * An item in a tree.\n */\nexport function TreeItem<T extends object>(props: TreeItemProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'class',\n 'description',\n 'icon',\n ])\n\n const context = useContext(TreeSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TreeItemRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-all duration-150 outline-none'\n const sizeClass = sizeStyle.item\n const variantClass = variantStyle.item\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n stateClass = variantStyle.itemSelected\n } else if (renderProps.isHovered) {\n stateClass = variantStyle.itemHover\n }\n\n let textClass = ''\n if (!renderProps.isDisabled && !renderProps.isSelected) {\n textClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'scale-[0.99]' : ''\n\n return [base, sizeClass, variantClass, stateClass, textClass, focusClass, pressedClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n const getStyle = (renderProps: TreeItemRenderProps): JSX.CSSProperties => ({\n 'padding-left': `${renderProps.level * sizeStyle.indent + 8}px`,\n })\n\n return (\n <HeadlessTreeItem {...headlessProps} class={getClassName} style={getStyle}>\n {(renderProps: TreeItemRenderProps) => (\n <>\n {/* Expand button */}\n <TreeExpandButton class={`${sizeStyle.expandButton} shrink-0`} />\n\n {/* Icon */}\n <Show when={local.icon}>\n <span class={`shrink-0 ${sizeStyle.icon}`}>\n {local.icon!()}\n </span>\n </Show>\n\n {/* Default folder/file icon if no custom icon */}\n <Show when={!local.icon}>\n {renderProps.isExpandable ? (\n <FolderIcon class={`shrink-0 ${sizeStyle.icon} text-accent-300`} isOpen={renderProps.isExpanded} />\n ) : (\n <FileIcon class={`shrink-0 ${sizeStyle.icon} text-primary-400`} />\n )}\n </Show>\n\n {/* Content */}\n <div class=\"flex flex-col flex-1 min-w-0\">\n <span class=\"truncate\">\n {typeof props.children === 'function'\n ? props.children(renderProps)\n : props.children}\n </span>\n <Show when={local.description}>\n <span class={`text-primary-400 truncate ${sizeStyle.description}`}>\n {local.description}\n </span>\n </Show>\n </div>\n\n {/* Selection indicator */}\n <Show when={renderProps.isSelected}>\n <CheckIcon class={`shrink-0 ${sizeStyle.icon} text-accent`} />\n </Show>\n </>\n )}\n </HeadlessTreeItem>\n )\n}\n\n// ============================================\n// TREE EXPAND BUTTON COMPONENT\n// ============================================\n\n/**\n * A button to expand/collapse a tree item.\n */\nexport function TreeExpandButton(props: TreeExpandButtonProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const context = useContext(TreeSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const customClass = local.class ?? ''\n\n const className = [\n 'flex items-center justify-center transition-transform duration-150 text-primary-400 hover:text-primary-200',\n customClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <HeadlessTreeExpandButton\n {...headlessProps}\n class={className}\n >\n {props.children ?? (({ isExpanded }: { isExpanded: boolean }) => (\n <ChevronIcon\n class={`${sizeStyle.expandButton} transition-transform duration-150 ${\n isExpanded ? 'rotate-90' : ''\n }`}\n />\n ))}\n </HeadlessTreeExpandButton>\n )\n}\n\n// ============================================\n// TREE SELECTION CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A styled checkbox for item selection in a tree.\n */\nexport function TreeSelectionCheckbox(props: { itemKey: Key; class?: string }): JSX.Element {\n const context = useContext(TreeSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const className = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400 ${props.class ?? ''}`\n\n return (\n <span class={className}>\n <HeadlessTreeSelectionCheckbox itemKey={props.itemKey} />\n </span>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\nfunction FolderIcon(props: { class?: string; isOpen?: boolean }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n {props.isOpen ? (\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776\"\n />\n ) : (\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z\"\n />\n )}\n </svg>\n )\n}\n\nfunction FileIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\"\n />\n </svg>\n )\n}\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nfunction EmptyTreeIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6z\"\n />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nTree.Item = TreeItem\nTree.ExpandButton = TreeExpandButton\nTree.SelectionCheckbox = TreeSelectionCheckbox\n\n// Re-export types for convenience\nexport type { Key, TreeItemData, TreeRenderItemState }\n", "/**\n * Color components for proyecto-viviana-ui\n *\n * Styled color picker components built on top of solidaria-components.\n * Inspired by Spectrum 2's color picker patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n ColorSlider as HeadlessColorSlider,\n ColorSliderTrack as HeadlessColorSliderTrack,\n ColorSliderThumb as HeadlessColorSliderThumb,\n ColorArea as HeadlessColorArea,\n ColorAreaGradient as HeadlessColorAreaGradient,\n ColorAreaThumb as HeadlessColorAreaThumb,\n ColorWheel as HeadlessColorWheel,\n ColorWheelTrack as HeadlessColorWheelTrack,\n ColorWheelThumb as HeadlessColorWheelThumb,\n ColorField as HeadlessColorField,\n ColorFieldInput as HeadlessColorFieldInput,\n ColorSwatch as HeadlessColorSwatch,\n type ColorSliderProps as HeadlessColorSliderProps,\n type ColorAreaProps as HeadlessColorAreaProps,\n type ColorWheelProps as HeadlessColorWheelProps,\n type ColorFieldProps as HeadlessColorFieldProps,\n type ColorSwatchProps as HeadlessColorSwatchProps,\n type ColorSliderRenderProps,\n type ColorSliderTrackRenderProps,\n type ColorSliderThumbRenderProps,\n type ColorAreaRenderProps,\n type ColorAreaThumbRenderProps,\n type ColorWheelRenderProps,\n type ColorWheelThumbRenderProps,\n type ColorFieldRenderProps,\n type ColorSwatchRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Color, ColorChannel, ColorFormat } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type ColorSize = 'sm' | 'md' | 'lg'\n\ninterface ColorContextValue {\n size: ColorSize\n}\n\nconst ColorSizeContext = createContext<ColorContextValue>({ size: 'md' })\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n slider: {\n track: 'h-4 rounded',\n thumb: 'w-4 h-4',\n label: 'text-sm',\n },\n area: {\n container: 'w-48 h-48',\n thumb: 'w-4 h-4',\n },\n wheel: {\n container: 'w-48 h-48',\n track: 'stroke-[16px]',\n thumb: 'w-4 h-4',\n },\n field: {\n input: 'h-8 text-sm px-2',\n label: 'text-sm',\n },\n swatch: 'w-8 h-8',\n },\n md: {\n slider: {\n track: 'h-6 rounded-md',\n thumb: 'w-5 h-5',\n label: 'text-base',\n },\n area: {\n container: 'w-64 h-64',\n thumb: 'w-5 h-5',\n },\n wheel: {\n container: 'w-64 h-64',\n track: 'stroke-[20px]',\n thumb: 'w-5 h-5',\n },\n field: {\n input: 'h-10 text-base px-3',\n label: 'text-base',\n },\n swatch: 'w-10 h-10',\n },\n lg: {\n slider: {\n track: 'h-8 rounded-lg',\n thumb: 'w-6 h-6',\n label: 'text-lg',\n },\n area: {\n container: 'w-80 h-80',\n thumb: 'w-6 h-6',\n },\n wheel: {\n container: 'w-80 h-80',\n track: 'stroke-[24px]',\n thumb: 'w-6 h-6',\n },\n field: {\n input: 'h-12 text-lg px-4',\n label: 'text-lg',\n },\n swatch: 'w-12 h-12',\n },\n}\n\n// ============================================\n// COLOR SLIDER\n// ============================================\n\nexport interface ColorSliderProps extends Omit<HeadlessColorSliderProps, 'class' | 'style' | 'children'> {\n /** The size of the color slider. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Show the current value. */\n showValue?: boolean\n}\n\n/**\n * A color slider allows users to adjust a single color channel.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorSlider\n * channel=\"hue\"\n * value={color()}\n * onChange={setColor}\n * label=\"Hue\"\n * />\n * ```\n */\nexport function ColorSlider(props: ColorSliderProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class', 'showValue'])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorSliderRenderProps): string => {\n const base = 'flex flex-col gap-1.5'\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorSlider {...headlessProps} class={getClassName}>\n {(renderProps: ColorSliderRenderProps) => (\n <>\n <div class=\"flex items-center justify-between\">\n <Show when={headlessProps.label}>\n <span class={`text-primary-200 font-medium ${styles().slider.label}`}>\n {headlessProps.label}\n </span>\n </Show>\n <Show when={local.showValue}>\n <span class={`text-primary-400 ${styles().slider.label}`}>\n {Math.round(renderProps.value)}\n </span>\n </Show>\n </div>\n <ColorSliderTrack>\n {() => <ColorSliderThumb />}\n </ColorSliderTrack>\n </>\n )}\n </HeadlessColorSlider>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The track component for a color slider.\n */\nexport function ColorSliderTrack(props: { children?: JSX.Element | (() => JSX.Element); class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorSliderTrackRenderProps): string => {\n const base = `relative ${styles.slider.track} shadow-inner border border-bg-300`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing' : 'cursor-pointer'\n return [base, dragClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessColorSliderTrack class={getClassName}>\n {props.children}\n </HeadlessColorSliderTrack>\n )\n}\n\n/**\n * The thumb component for a color slider.\n */\nexport function ColorSliderThumb(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorSliderThumbRenderProps): string => {\n const base = `${styles.slider.thumb} rounded-full border-2 border-white shadow-md cursor-grab`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing scale-110' : ''\n const focusClass = renderProps.isFocusVisible ? 'ring-2 ring-accent-300 ring-offset-2' : ''\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, dragClass, focusClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return <HeadlessColorSliderThumb class={getClassName} />\n}\n\n// ============================================\n// COLOR AREA\n// ============================================\n\nexport interface ColorAreaProps extends Omit<HeadlessColorAreaProps, 'class' | 'style' | 'children'> {\n /** The size of the color area. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A color area allows users to select a color by dragging in a 2D gradient.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorArea\n * value={color()}\n * onChange={setColor}\n * xChannel=\"saturation\"\n * yChannel=\"lightness\"\n * />\n * ```\n */\nexport function ColorArea(props: ColorAreaProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class'])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorAreaRenderProps): string => {\n const base = `relative ${styles().area.container} rounded-lg overflow-hidden border border-bg-300 shadow-inner`\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorArea {...headlessProps} class={getClassName}>\n {() => (\n <>\n <ColorAreaGradient />\n <ColorAreaThumb />\n </>\n )}\n </HeadlessColorArea>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The gradient background for a color area.\n */\nexport function ColorAreaGradient(props: { class?: string }): JSX.Element {\n const customClass = props.class ?? ''\n const className = `absolute inset-0 ${customClass}`\n\n return <HeadlessColorAreaGradient class={className} />\n}\n\n/**\n * The thumb component for a color area.\n */\nexport function ColorAreaThumb(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorAreaThumbRenderProps): string => {\n const base = `${styles.area.thumb} rounded-full border-2 border-white shadow-md cursor-grab`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing scale-110' : ''\n const focusClass = renderProps.isFocusVisible ? 'ring-2 ring-accent-300 ring-offset-2' : ''\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, dragClass, focusClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return <HeadlessColorAreaThumb class={getClassName} />\n}\n\n// ============================================\n// COLOR WHEEL\n// ============================================\n\nexport interface ColorWheelProps extends Omit<HeadlessColorWheelProps, 'class' | 'style' | 'children'> {\n /** The size of the color wheel. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A color wheel allows users to select a hue by dragging around a circular track.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorWheel\n * value={color()}\n * onChange={setColor}\n * />\n * ```\n */\nexport function ColorWheel(props: ColorWheelProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class'])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorWheelRenderProps): string => {\n const base = `relative ${styles().wheel.container}`\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorWheel {...headlessProps} class={getClassName}>\n {() => (\n <>\n <ColorWheelTrack />\n <ColorWheelThumb />\n </>\n )}\n </HeadlessColorWheel>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The circular track for a color wheel.\n */\nexport function ColorWheelTrack(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const className = `${styles.wheel.track} ${customClass}`\n\n return <HeadlessColorWheelTrack class={className} />\n}\n\n/**\n * The thumb component for a color wheel.\n */\nexport function ColorWheelThumb(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorWheelThumbRenderProps): string => {\n const base = `${styles.wheel.thumb} rounded-full border-2 border-white shadow-md cursor-grab`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing scale-110' : ''\n const focusClass = renderProps.isFocusVisible ? 'ring-2 ring-accent-300 ring-offset-2' : ''\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, dragClass, focusClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return <HeadlessColorWheelThumb class={getClassName} />\n}\n\n// ============================================\n// COLOR FIELD\n// ============================================\n\nexport interface ColorFieldProps extends Omit<HeadlessColorFieldProps, 'class' | 'style' | 'children'> {\n /** The size of the color field. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Description text below the input. */\n description?: string\n /** Error message to display. */\n errorMessage?: string\n}\n\n/**\n * A color field allows users to enter a color value as text.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('#ff0000'))\n *\n * <ColorField\n * value={color()}\n * onChange={setColor}\n * label=\"Color\"\n * />\n * ```\n */\nexport function ColorField(props: ColorFieldProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'description',\n 'errorMessage',\n ])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorFieldRenderProps): string => {\n const base = 'flex flex-col gap-1.5'\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorField {...headlessProps} class={getClassName}>\n {() => (\n <>\n <Show when={headlessProps.label}>\n <span class={`text-primary-200 font-medium ${styles().field.label}`}>\n {headlessProps.label}\n </span>\n </Show>\n <ColorFieldInput isInvalid={!!local.errorMessage} />\n <Show when={local.description && !local.errorMessage}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </>\n )}\n </HeadlessColorField>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The input component for a color field.\n */\nexport function ColorFieldInput(props: { class?: string; isInvalid?: boolean }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const base = `${styles.field.input} w-full rounded-md border bg-bg-400 text-primary-200 placeholder:text-primary-500 focus:outline-none focus:ring-2 focus:ring-accent-300`\n const borderClass = props.isInvalid\n ? 'border-danger-400'\n : 'border-bg-300 focus:border-accent-300'\n const className = [base, borderClass, customClass].filter(Boolean).join(' ')\n\n return <HeadlessColorFieldInput class={className} />\n}\n\n// ============================================\n// COLOR SWATCH\n// ============================================\n\nexport interface ColorSwatchProps extends Omit<HeadlessColorSwatchProps, 'class' | 'style'> {\n /** The size of the color swatch. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Whether the swatch is selectable. */\n isSelectable?: boolean\n /** Whether the swatch is selected. */\n isSelected?: boolean\n /** Handler called when the swatch is clicked. */\n onClick?: () => void\n}\n\n/**\n * A color swatch displays a color sample.\n *\n * @example\n * ```tsx\n * <ColorSwatch color={parseColor('#ff0000')} />\n *\n * // Selectable swatch\n * <ColorSwatch\n * color={parseColor('#00ff00')}\n * isSelectable\n * isSelected={selectedColor === '#00ff00'}\n * onClick={() => setSelectedColor('#00ff00')}\n * />\n * ```\n */\nexport function ColorSwatch(props: ColorSwatchProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'isSelectable',\n 'isSelected',\n 'onClick',\n ])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: ColorSwatchRenderProps): string => {\n const base = `${styles().swatch} rounded-md border border-bg-300 shadow-sm`\n const selectableClass = local.isSelectable\n ? 'cursor-pointer hover:scale-105 transition-transform'\n : ''\n const selectedClass = local.isSelected\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n return [base, selectableClass, selectedClass, customClass].filter(Boolean).join(' ')\n }\n\n const handleClick = () => {\n if (local.isSelectable && local.onClick) {\n local.onClick()\n }\n }\n\n return (\n <div onClick={handleClick}>\n <HeadlessColorSwatch {...headlessProps} class={getClassName} />\n </div>\n )\n}\n\n// ============================================\n// COLOR PICKER (Composite Component)\n// ============================================\n\nexport interface ColorPickerProps {\n /** The current color value (controlled). */\n value?: Color | string\n /** The default color value (uncontrolled). */\n defaultValue?: Color | string\n /** Handler called when the color changes. */\n onChange?: (color: Color) => void\n /** The size of the picker. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Whether the picker is disabled. */\n isDisabled?: boolean\n /** A label for the picker. */\n label?: string\n /** Whether to show the hex input field. */\n showInput?: boolean\n /** Whether to show channel sliders. */\n showSliders?: boolean\n}\n\n/**\n * A complete color picker component with area, sliders, and input.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorPicker\n * value={color()}\n * onChange={setColor}\n * label=\"Pick a color\"\n * showInput\n * showSliders\n * />\n * ```\n */\nexport function ColorPicker(props: ColorPickerProps): JSX.Element {\n const size = () => props.size ?? 'md'\n const styles = () => sizeStyles[size()]\n\n return (\n <div class={`flex flex-col gap-4 ${props.class ?? ''}`}>\n <Show when={props.label}>\n <span class={`text-primary-200 font-medium ${styles().field.label}`}>\n {props.label}\n </span>\n </Show>\n\n <ColorArea\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={props.onChange}\n xChannel=\"saturation\"\n yChannel=\"lightness\"\n size={size()}\n isDisabled={props.isDisabled}\n />\n\n <Show when={props.showSliders !== false}>\n <ColorSlider\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={props.onChange}\n channel=\"hue\"\n label=\"Hue\"\n size={size()}\n showValue\n isDisabled={props.isDisabled}\n />\n\n <ColorSlider\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={props.onChange}\n channel=\"alpha\"\n label=\"Alpha\"\n size={size()}\n showValue\n isDisabled={props.isDisabled}\n />\n </Show>\n\n <Show when={props.showInput}>\n <ColorField\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={(color) => {\n if (color && props.onChange) {\n props.onChange(color)\n }\n }}\n label=\"Hex\"\n size={size()}\n isDisabled={props.isDisabled}\n />\n </Show>\n </div>\n )\n}\n\n// Attach sub-components for convenience\nColorSlider.Track = ColorSliderTrack\nColorSlider.Thumb = ColorSliderThumb\nColorArea.Gradient = ColorAreaGradient\nColorArea.Thumb = ColorAreaThumb\nColorWheel.Track = ColorWheelTrack\nColorWheel.Thumb = ColorWheelThumb\nColorField.Input = ColorFieldInput\n\n// Re-export types for convenience\nexport type { Color, ColorChannel, ColorFormat }\n", "/**\n * Landmark component for proyecto-viviana-ui\n *\n * Styled landmark component built on top of solidaria-components.\n * Landmarks help screen reader users navigate between major sections of a page.\n * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.\n */\n\nimport { type JSX, splitProps, Show } from 'solid-js'\nimport {\n Landmark as HeadlessLandmark,\n useLandmarkController,\n type LandmarkProps as HeadlessLandmarkProps,\n type AriaLandmarkRole,\n type LandmarkController,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface LandmarkProps extends Omit<HeadlessLandmarkProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Whether to show a visual indicator (for development). */\n showLabel?: boolean\n}\n\nexport type { AriaLandmarkRole, LandmarkController }\n\n// ============================================\n// STYLES\n// ============================================\n\nconst roleLabels: Record<AriaLandmarkRole, string> = {\n main: 'Main',\n navigation: 'Navigation',\n search: 'Search',\n banner: 'Banner',\n contentinfo: 'Footer',\n complementary: 'Aside',\n form: 'Form',\n region: 'Region',\n}\n\nconst roleColors: Record<AriaLandmarkRole, string> = {\n main: 'bg-accent/10 border-accent-300',\n navigation: 'bg-primary-500/10 border-primary-400',\n search: 'bg-warning-400/10 border-warning-400',\n banner: 'bg-success-400/10 border-success-400',\n contentinfo: 'bg-danger-400/10 border-danger-400',\n complementary: 'bg-primary-300/10 border-primary-300',\n form: 'bg-accent-200/10 border-accent-200',\n region: 'bg-bg-200/50 border-bg-300',\n}\n\n// ============================================\n// LANDMARK COMPONENT\n// ============================================\n\n/**\n * A landmark is a region of the page that helps screen reader users navigate.\n * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.\n *\n * @example\n * ```tsx\n * // Main content area\n * <Landmark role=\"main\" aria-label=\"Main content\">\n * <h1>Welcome</h1>\n * <p>Page content here...</p>\n * </Landmark>\n *\n * // Navigation\n * <Landmark role=\"navigation\" aria-label=\"Primary navigation\">\n * <nav>...</nav>\n * </Landmark>\n *\n * // With development label visible\n * <Landmark role=\"main\" aria-label=\"Main content\" showLabel>\n * ...\n * </Landmark>\n * ```\n */\nexport function Landmark(props: LandmarkProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'showLabel'])\n const customClass = local.class ?? ''\n\n const role = () => headlessProps.role\n\n const getClassName = (): string => {\n const base = 'relative'\n const debugClass = local.showLabel\n ? `border-2 border-dashed ${roleColors[role()]}`\n : ''\n return [base, debugClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessLandmark {...headlessProps} class={getClassName()}>\n <Show when={local.showLabel}>\n <div\n class={`absolute -top-3 left-2 px-2 py-0.5 text-xs font-medium rounded ${roleColors[role()]} text-primary-200`}\n >\n {roleLabels[role()]}\n <Show when={headlessProps['aria-label']}>\n <span class=\"text-primary-400\"> - {headlessProps['aria-label']}</span>\n </Show>\n </div>\n </Show>\n {props.children}\n </HeadlessLandmark>\n )\n}\n\n// ============================================\n// SKIP LINK COMPONENT\n// ============================================\n\nexport interface SkipLinkProps {\n /** The ID of the element to skip to (usually the main landmark). */\n href: string\n /** The text to display in the skip link. */\n children?: JSX.Element\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A skip link allows keyboard users to bypass repetitive navigation and jump directly to main content.\n * The link is visually hidden until focused.\n *\n * @example\n * ```tsx\n * <SkipLink href=\"#main-content\">Skip to main content</SkipLink>\n *\n * <Landmark role=\"navigation\">...</Landmark>\n *\n * <Landmark role=\"main\" id=\"main-content\">\n * ...\n * </Landmark>\n * ```\n */\nexport function SkipLink(props: SkipLinkProps): JSX.Element {\n const customClass = props.class ?? ''\n\n const className = [\n // Visually hidden by default\n 'absolute left-0 top-0 -translate-y-full',\n // Show when focused\n 'focus:translate-y-0',\n // Styling\n 'z-50 px-4 py-2 bg-accent text-white font-medium rounded-br-lg',\n 'transition-transform duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-accent-300 focus:ring-offset-2',\n customClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <a href={props.href} class={className}>\n {props.children ?? 'Skip to main content'}\n </a>\n )\n}\n\n// ============================================\n// LANDMARK NAVIGATOR COMPONENT\n// ============================================\n\nexport interface LandmarkNavigatorProps {\n /** Additional CSS class name. */\n class?: string\n /** Whether to show the navigator (for development/accessibility testing). */\n isVisible?: boolean\n}\n\n/**\n * A floating navigator for landmarks, useful for development and accessibility testing.\n * Provides buttons to navigate between landmarks programmatically.\n *\n * @example\n * ```tsx\n * // Show in development only\n * <LandmarkNavigator isVisible={import.meta.env.DEV} />\n * ```\n */\nexport function LandmarkNavigator(props: LandmarkNavigatorProps): JSX.Element {\n const controller = useLandmarkController()\n\n return (\n <Show when={props.isVisible}>\n <div\n class={`fixed bottom-4 right-4 z-50 flex flex-col gap-2 p-3 bg-bg-400 border border-bg-300 rounded-lg shadow-lg ${props.class ?? ''}`}\n >\n <span class=\"text-xs font-medium text-primary-400 uppercase tracking-wider\">\n Landmarks (F6)\n </span>\n <div class=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => controller.focusPrevious()}\n class=\"px-2 py-1 text-sm bg-bg-300 hover:bg-bg-200 text-primary-200 rounded transition-colors\"\n title=\"Previous landmark (Shift+F6)\"\n >\n ←\n </button>\n <button\n type=\"button\"\n onClick={() => controller.focusMain()}\n class=\"px-3 py-1 text-sm bg-accent hover:bg-accent-200 text-white rounded transition-colors\"\n title=\"Go to main content\"\n >\n Main\n </button>\n <button\n type=\"button\"\n onClick={() => controller.focusNext()}\n class=\"px-2 py-1 text-sm bg-bg-300 hover:bg-bg-200 text-primary-200 rounded transition-colors\"\n title=\"Next landmark (F6)\"\n >\n →\n </button>\n </div>\n </div>\n </Show>\n )\n}\n\n// Export controller hook for convenience\nexport { useLandmarkController }\n", "import { type JSX, Show } from 'solid-js'\n\nexport type ChipVariant = 'primary' | 'secondary' | 'accent' | 'outline'\n\nexport interface ChipProps {\n text: string\n variant?: ChipVariant\n onClick?: () => void\n /**\n * Icon to display before the text.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n * Or pass a simple string for text-based icons: `icon=\"★\"`\n */\n icon?: string | (() => JSX.Element)\n class?: string\n}\n\nconst variantStyles: Record<ChipVariant, string> = {\n primary: 'bg-primary-700 text-primary-200 shadow-primary-chip',\n secondary: 'bg-primary-600 text-primary-100 hover:bg-primary-500',\n accent: 'bg-accent text-white',\n outline: 'bg-transparent border border-primary-500 text-primary-300',\n}\n\nexport function Chip(props: ChipProps) {\n const variant = () => props.variant ?? 'primary'\n\n const renderIcon = () => {\n const icon = props.icon\n if (!icon) return null\n if (typeof icon === 'string') return icon\n return icon()\n }\n\n return (\n <button\n class={`flex justify-center items-center h-6 w-auto rounded-full px-4 py-1 font-medium text-sm tracking-wide transition-colors ${variantStyles[variant()]} ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n <Show when={props.icon}>\n <span class=\"mr-1.5\">{renderIcon()}</span>\n </Show>\n <span>{props.text}</span>\n </button>\n )\n}\n", "import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\n\nexport interface NavHeaderProps {\n logo?: string\n logoAlt?: string\n logoText?: string\n children?: JSX.Element\n menuIcon?: JSX.Element\n onMenuClick?: () => void\n class?: string\n}\n\nexport function NavHeader(props: NavHeaderProps) {\n return (\n <nav class={`flex items-center bg-bg-400 h-[70px] border-b-4 border-accent-500 ${props.class ?? ''}`}>\n <div class=\"pl-1 md:pl-8 flex items-center\">\n <Show when={props.logo} fallback={\n <Show when={props.logoText}>\n <span class=\"text-[34px] font-light text-primary-700 flex items-center\">\n {props.logoText}\n </span>\n </Show>\n }>\n <img src={props.logo} alt={props.logoAlt ?? 'Logo'} class=\"h-[42px] w-auto\" />\n </Show>\n </div>\n\n <div class=\"flex-1 flex justify-end items-center pr-1 md:pr-8\">\n {props.children}\n <Show when={props.menuIcon}>\n <button\n class=\"md:hidden flex items-center justify-center\"\n onClick={props.onMenuClick}\n >\n {props.menuIcon}\n </button>\n </Show>\n </div>\n </nav>\n )\n}\n", "import { JSX } from \"solid-js\";\n\nexport type LogoSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface LogoProps {\n /** First word (light weight, muted color) */\n firstWord?: string;\n /** Second word (bold, with 3D effect) */\n secondWord?: string;\n /** Size variant of the logo */\n size?: LogoSize;\n /** Invert the styles (first word gets 3D effect, second word is muted) */\n inverted?: boolean;\n /** Additional CSS classes */\n class?: string;\n}\n\n/**\n * Two-word logo with retro synthwave 3D effect.\n * First word is light/muted, second word has bold styling with pink 3D shadow.\n *\n * @example\n * // Default usage\n * <Logo />\n *\n * @example\n * // Custom text\n * <Logo firstWord=\"My\" secondWord=\"Brand\" size=\"lg\" />\n */\nexport function Logo(props: LogoProps): JSX.Element {\n const sizeClass = () => {\n switch (props.size) {\n case \"sm\":\n return \"vui-logo--sm\";\n case \"lg\":\n return \"vui-logo--lg\";\n case \"xl\":\n return \"vui-logo--xl\";\n case \"md\":\n default:\n return \"vui-logo--md\";\n }\n };\n\n const firstWord = () => props.firstWord ?? \"Proyecto\";\n const secondWord = () => props.secondWord ?? \"Viviana\";\n\n return (\n <span class={`vui-logo ${sizeClass()} ${props.inverted ? \"vui-logo--inverted\" : \"\"} ${props.class ?? \"\"}`}>\n <span class=\"vui-logo__first\" data-text={props.inverted ? firstWord() : undefined}>\n {firstWord()}\n </span>\n <span class=\"vui-logo__second\" data-text={props.inverted ? undefined : secondWord()}>\n {secondWord()}\n </span>\n </span>\n );\n}\n", "import type { JSX } from 'solid-js'\nimport { Logo, type LogoProps } from '../logo'\n\nexport interface HeaderProps {\n /** Image element to show to the left of the text logo */\n logoImage?: JSX.Element\n /** Props to pass to the Logo component (firstWord, secondWord, size, inverted). Pass null to hide the text logo. */\n logoProps?: LogoProps | null\n /** Custom logo element - replaces the default Logo component entirely */\n logo?: JSX.Element\n /** Navigation items to display on the right side */\n children?: JSX.Element\n /** Additional CSS classes */\n class?: string\n}\n\nexport function Header(props: HeaderProps) {\n const showTextLogo = () => props.logo !== undefined || props.logoProps !== null\n\n return (\n <header class={`vui-header ${props.class ?? ''}`}>\n <div class=\"vui-header__container\">\n <div class=\"flex items-center gap-3\">\n {props.logoImage}\n {showTextLogo() && (props.logo ?? <Logo size=\"lg\" {...(props.logoProps ?? {})} />)}\n </div>\n <nav class=\"vui-header__nav\">\n {props.children}\n </nav>\n </div>\n </header>\n )\n}\n", "import type { JSX } from 'solid-js'\nimport { Show, For } from 'solid-js'\n\nexport interface NavItemProps {\n title: string\n children?: JSX.Element\n class?: string\n}\n\nexport function NavItem(props: NavItemProps) {\n return (\n <li class={`flex items-center ${props.class ?? ''}`}>\n <span class=\"text-lg font-bold text-primary-200\">{props.title}</span>\n {props.children}\n </li>\n )\n}\n\nexport interface NavLinkProps {\n href: string\n children: JSX.Element\n active?: boolean\n class?: string\n}\n\nexport function NavLink(props: NavLinkProps) {\n const activeStyles = 'font-medium text-primary-300 underline underline-offset-4'\n const inactiveStyles = 'font-normal text-gray-200 underline-offset-4 hover:text-gray-100 hover:underline'\n\n return (\n <a\n href={props.href}\n class={`${props.active ? activeStyles : inactiveStyles} ${props.class ?? ''}`}\n >\n {props.children}\n </a>\n )\n}\n\nexport interface NavSectionProps {\n title: string\n links?: { href: string; label: string; active?: boolean }[]\n children?: JSX.Element\n class?: string\n}\n\nexport function NavSection(props: NavSectionProps) {\n return (\n <div class={props.class ?? ''}>\n <NavItem title={props.title} />\n <div class=\"flex h-full\">\n <div class=\"h-5 w-1 bg-accent-300\" />\n <ul class=\"flex h-full flex-1 flex-col gap-1 pl-4\">\n <Show when={props.links}>\n <For each={props.links}>\n {(link) => (\n <li>\n <NavLink href={link.href} active={link.active}>\n {link.label}\n </NavLink>\n </li>\n )}\n </For>\n </Show>\n {props.children}\n </ul>\n </div>\n </div>\n )\n}\n\nexport interface LateralNavProps {\n transparent?: boolean\n children?: JSX.Element\n class?: string\n}\n\nexport function LateralNav(props: LateralNavProps) {\n const bgColor = () => (props.transparent ? '' : 'bg-bg-200')\n\n return (\n <div\n class={`hidden w-[300px] md:block ${bgColor()} m-0 border-r border-primary-600 p-3 ${props.class ?? ''}`}\n >\n {props.children}\n </div>\n )\n}\n", "import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport type TimelineEventType = 'follow' | 'like' | 'comment' | 'event' | 'custom'\n\nexport interface TimelineItemProps {\n type?: TimelineEventType\n /**\n * Icon to display between the two avatars.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n * Or pass a simple string for text-based icons: `icon=\"👋\"`\n */\n icon?: string | (() => JSX.Element)\n leftUser?: {\n name: string\n avatar?: string\n }\n rightUser?: {\n name: string\n avatar?: string\n }\n /**\n * Custom message content.\n * Use a function returning JSX for SSR compatibility: `message={() => <span>...</span>}`\n * Or pass a simple string.\n */\n message?: string | (() => JSX.Element)\n class?: string\n}\n\nconst eventMessages: Record<TimelineEventType, (left: string, right: string) => JSX.Element> = {\n follow: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' ha empezado a seguir a '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n like: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' le ha dado like a '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n comment: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' ha comentado en '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n event: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' asistirá al evento de '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n custom: () => null,\n}\n\nexport function TimelineItem(props: TimelineItemProps) {\n const type = () => props.type ?? 'follow'\n const leftName = () => props.leftUser?.name ?? ''\n const rightName = () => props.rightUser?.name ?? ''\n\n const renderIcon = () => {\n const icon = props.icon\n if (!icon) return null\n if (typeof icon === 'string') return icon\n return icon()\n }\n\n const renderMessage = () => {\n const message = props.message\n if (!message) return null\n if (typeof message === 'string') return message\n return message()\n }\n\n return (\n <div class={`inline-flex w-auto flex-col gap-5 rounded-2xl border border-primary-700 bg-bg-200 p-5 hover:bg-bg-300 transition-colors ${props.class ?? ''}`}>\n <div class=\"flex items-center justify-around gap-3\">\n <Show when={props.leftUser}>\n <Avatar src={props.leftUser!.avatar} alt={props.leftUser!.name} />\n </Show>\n <Show when={props.icon}>\n {renderIcon()}\n </Show>\n <Show when={props.rightUser}>\n <Avatar src={props.rightUser!.avatar} alt={props.rightUser!.name} />\n </Show>\n </div>\n <div class=\"flex items-center justify-center gap-3 text-center\">\n <span class=\"font-light text-primary-300\">\n <Show when={props.message} fallback={eventMessages[type()](leftName(), rightName())}>\n {renderMessage()}\n </Show>\n </span>\n </div>\n </div>\n )\n}\n", "import { Show, For } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport interface Message {\n id: string\n content: string\n sender: 'user' | 'other'\n timestamp?: string\n}\n\nexport interface ConversationPreviewProps {\n user: {\n name: string\n avatar?: string\n online?: boolean\n }\n lastMessage?: string\n unreadCount?: number\n timestamp?: string\n onClick?: () => void\n class?: string\n}\n\nexport function ConversationPreview(props: ConversationPreviewProps) {\n return (\n <button\n class={`flex w-full items-center gap-3 rounded-xl p-3 hover:bg-bg-300 transition-colors text-left ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n <Avatar\n src={props.user.avatar}\n alt={props.user.name}\n online={props.user.online}\n size=\"md\"\n />\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center justify-between\">\n <span class=\"font-semibold text-primary-100 truncate\">{props.user.name}</span>\n <Show when={props.timestamp}>\n <span class=\"text-xs text-primary-500\">{props.timestamp}</span>\n </Show>\n </div>\n <Show when={props.lastMessage}>\n <p class=\"text-sm text-primary-400 truncate\">{props.lastMessage}</p>\n </Show>\n </div>\n <Show when={props.unreadCount && props.unreadCount > 0}>\n <span class=\"flex h-5 w-5 items-center justify-center rounded-full bg-accent text-xs font-bold text-white\">\n {props.unreadCount}\n </span>\n </Show>\n </button>\n )\n}\n\nexport interface ConversationBubbleProps {\n content: string\n sender: 'user' | 'other'\n timestamp?: string\n class?: string\n}\n\nexport function ConversationBubble(props: ConversationBubbleProps) {\n const isUser = () => props.sender === 'user'\n\n return (\n <div class={`flex ${isUser() ? 'justify-end' : 'justify-start'} ${props.class ?? ''}`}>\n <div\n class={`max-w-[70%] rounded-2xl px-4 py-2 ${\n isUser()\n ? 'bg-accent text-white rounded-br-sm'\n : 'bg-bg-300 text-primary-100 rounded-bl-sm'\n }`}\n >\n <p>{props.content}</p>\n <Show when={props.timestamp}>\n <span class={`text-xs ${isUser() ? 'text-white/70' : 'text-primary-500'}`}>\n {props.timestamp}\n </span>\n </Show>\n </div>\n </div>\n )\n}\n\nexport interface ConversationProps {\n messages: Message[]\n class?: string\n}\n\nexport function Conversation(props: ConversationProps) {\n return (\n <div class={`flex flex-col gap-2 p-4 ${props.class ?? ''}`}>\n <For each={props.messages}>\n {(message) => (\n <ConversationBubble\n content={message.content}\n sender={message.sender}\n timestamp={message.timestamp}\n />\n )}\n </For>\n </div>\n )\n}\n", "import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport interface ProfileCardProps {\n username: string\n avatar?: string\n bio?: string\n followers?: number\n following?: number\n /**\n * Actions to display below the profile.\n * Use a function returning JSX for SSR compatibility: `actions={() => <Button>...</Button>}`\n */\n actions?: JSX.Element | (() => JSX.Element)\n class?: string\n}\n\nexport function ProfileCard(props: ProfileCardProps) {\n const formatNumber = (num: number) => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`\n return num.toString()\n }\n\n return (\n <div class={`bg-bg-200 rounded-xl p-4 ${props.class ?? ''}`}>\n <div class=\"flex items-start gap-4\">\n <Avatar src={props.avatar} alt={props.username} size=\"lg\" />\n <div class=\"flex-1 min-w-0\">\n <h3 class=\"font-semibold text-primary-100 text-lg truncate\">\n {props.username}\n </h3>\n <Show when={props.bio}>\n <p class=\"text-primary-300 text-sm mt-1 line-clamp-2\">{props.bio}</p>\n </Show>\n <div class=\"flex gap-4 mt-2 text-sm\">\n <Show when={props.followers !== undefined}>\n <span class=\"text-primary-300\">\n <span class=\"font-semibold text-primary-100\">\n {formatNumber(props.followers!)}\n </span>{' '}\n seguidores\n </span>\n </Show>\n <Show when={props.following !== undefined}>\n <span class=\"text-primary-300\">\n <span class=\"font-semibold text-primary-100\">\n {formatNumber(props.following!)}\n </span>{' '}\n siguiendo\n </span>\n </Show>\n </div>\n </div>\n </div>\n <Show when={props.actions}>\n <div class=\"mt-4 flex gap-2\">\n {typeof props.actions === 'function' ? props.actions() : props.actions}\n </div>\n </Show>\n </div>\n )\n}\n", "import type { JSX } from 'solid-js'\nimport { Show, For } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport interface EventCardProps {\n title: string\n image?: string\n date?: string\n author?: string\n authorAvatar?: string\n attendees?: { avatar?: string; name: string }[]\n attendeeCount?: number\n decorationImage?: string\n /**\n * Actions to display below the event.\n * Use a function returning JSX for SSR compatibility: `actions={() => <Button>...</Button>}`\n */\n actions?: JSX.Element | (() => JSX.Element)\n class?: string\n}\n\nexport function EventCard(props: EventCardProps) {\n const displayedAttendees = () => props.attendees?.slice(0, 3) ?? []\n const remainingCount = () => {\n const total = props.attendeeCount ?? props.attendees?.length ?? 0\n const displayed = displayedAttendees().length\n return total - displayed\n }\n\n return (\n <div class={`relative bg-bg-200 rounded-3xl overflow-hidden ${props.class ?? ''}`}>\n {/* Decoration image (fire gif, etc) */}\n <Show when={props.decorationImage}>\n <div class=\"absolute -top-2 -right-2 z-10 flex flex-col gap-1\">\n <img src={props.decorationImage} alt=\"\" class=\"w-8 h-8 object-contain\" />\n <img src={props.decorationImage} alt=\"\" class=\"w-6 h-6 object-contain ml-2\" />\n <img src={props.decorationImage} alt=\"\" class=\"w-5 h-5 object-contain\" />\n </div>\n </Show>\n\n <Show when={props.image}>\n <div class=\"relative h-32 w-full\">\n <img\n src={props.image}\n alt={props.title}\n class=\"w-full h-full object-cover\"\n />\n <div class=\"absolute inset-0 bg-gradient-to-t from-bg-200 via-transparent to-transparent\" />\n </div>\n </Show>\n\n <div class=\"p-4 pt-2\">\n <h3 class=\"font-bold text-xl leading-tight bg-gradient-to-r from-accent to-accent-300 bg-clip-text text-transparent\">\n {props.title}\n </h3>\n\n <Show when={props.date || props.author}>\n <div class=\"flex items-center gap-4 mt-3 text-sm text-primary-300\">\n <Show when={props.author}>\n <div class=\"flex items-center gap-1.5\">\n <span class=\"text-accent\">@</span>\n <span>{props.author}</span>\n </div>\n </Show>\n <Show when={props.date}>\n <div class=\"flex items-center gap-1.5\">\n <span class=\"text-accent\">⏱</span>\n <span>{props.date}</span>\n </div>\n </Show>\n </div>\n </Show>\n\n <Show when={displayedAttendees().length > 0}>\n <div class=\"flex items-center mt-3\">\n <div class=\"flex -space-x-2\">\n <For each={displayedAttendees()}>\n {(attendee) => (\n <Avatar src={attendee.avatar} alt={attendee.name} size=\"sm\" />\n )}\n </For>\n </div>\n <Show when={remainingCount() > 0}>\n <span class=\"ml-2 text-sm text-primary-300\">\n +{remainingCount()} más\n </span>\n </Show>\n </div>\n </Show>\n\n <Show when={props.actions}>\n <div class=\"mt-4 flex gap-2\">\n {typeof props.actions === 'function' ? props.actions() : props.actions}\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\nexport interface EventListItemProps {\n title: string\n image?: string\n subtitle?: string\n onClick?: () => void\n class?: string\n}\n\nexport function EventListItem(props: EventListItemProps) {\n return (\n <button\n class={`flex items-center gap-3 w-full p-2 rounded-lg hover:bg-bg-300 transition-colors text-left ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n <Show when={props.image}>\n <div class=\"w-12 h-12 rounded-lg overflow-hidden flex-shrink-0\">\n <img\n src={props.image}\n alt={props.title}\n class=\"w-full h-full object-cover\"\n />\n </div>\n </Show>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"font-medium text-primary-100 truncate\">{props.title}</h4>\n <Show when={props.subtitle}>\n <p class=\"text-sm text-primary-300 truncate\">{props.subtitle}</p>\n </Show>\n </div>\n </button>\n )\n}\n", "import { Show, For } from 'solid-js'\nimport { Chip } from '../chip'\n\nexport interface CalendarCardProps {\n title: string\n image?: string\n tags?: string[]\n followers?: { name: string }[]\n followerCount?: number\n class?: string\n}\n\nexport function CalendarCard(props: CalendarCardProps) {\n const displayedFollowers = () => props.followers?.slice(0, 2) ?? []\n const remainingCount = () => {\n const total = props.followerCount ?? props.followers?.length ?? 0\n const displayed = displayedFollowers().length\n return total - displayed\n }\n\n return (\n <div class={`flex h-[100px] w-full max-w-[500px] items-center rounded-xl border border-primary-600 border-b-accent-500 bg-bg-300 p-2 ${props.class ?? ''}`}>\n <Show when={props.image}>\n <div class=\"relative h-[80px] w-[80px] flex-shrink-0 overflow-hidden rounded-xl border-2 border-accent-200\">\n <img src={props.image} alt={props.title} class=\"h-full w-full object-cover\" />\n </div>\n </Show>\n <div class=\"relative h-full flex-1 flex-col pl-3\">\n <Show when={props.tags && props.tags.length > 0}>\n <div class=\"absolute bottom-[-20px] h-[30px] w-full\">\n <div class=\"flex h-full w-full flex-1 justify-end gap-1\">\n <For each={props.tags}>\n {(tag) => <Chip text={tag} variant=\"primary\" />}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"flex h-full flex-col items-end justify-center pb-3 pr-5 pt-2\">\n <div class=\"flex flex-1\">\n <span class=\"text-lg font-semibold text-white drop-shadow-sm\">\n {props.title}\n </span>\n </div>\n <Show when={displayedFollowers().length > 0}>\n <div class=\"flex flex-1\">\n <span class=\"text-base font-normal text-primary-500\">\n seguida por{' '}\n <For each={displayedFollowers()}>\n {(follower, index) => (\n <>\n <span class=\"font-semibold text-accent-200\">{follower.name}</span>\n {index() < displayedFollowers().length - 1 && ', '}\n </>\n )}\n </For>\n <Show when={remainingCount() > 0}>\n {' '}y <span class=\"font-semibold text-accent-200\">{remainingCount()} más</span>\n </Show>\n </span>\n </div>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n", "import type { JSX } from 'solid-js'\n\nexport type ProjectCardSize = 'sm' | 'md' | 'lg'\n\nexport interface ProjectCardProps {\n /** Project name shown in tooltip on hover */\n name: string\n /** Image source for the project logo */\n imageSrc: string\n /** Alt text for the image */\n imageAlt?: string\n /** Optional link to the project */\n href?: string\n /** Size of the card */\n size?: ProjectCardSize\n /** Whether the project is inactive/greyed out */\n inactive?: boolean\n /** Additional CSS class */\n class?: string\n}\n\n/**\n * Project card with logo and hover tooltip.\n * Used for showcasing ecosystem projects.\n */\nexport function ProjectCard(props: ProjectCardProps): JSX.Element {\n const size = () => props.size ?? 'sm'\n const inactive = () => props.inactive ?? false\n\n const cardContent = () => (\n <>\n <div class=\"vui-project-card__tooltip\">\n <span>{props.name}</span>\n </div>\n <img\n class=\"vui-project-card__image\"\n src={props.imageSrc}\n alt={props.imageAlt ?? props.name}\n />\n </>\n )\n\n const cardClasses = () =>\n `vui-project-card vui-project-card--${size()} ${inactive() ? 'vui-project-card--inactive' : ''} ${props.class ?? ''}`\n\n if (props.href) {\n return (\n <a href={props.href} target=\"_blank\" rel=\"noopener noreferrer\" class={cardClasses()}>\n {cardContent()}\n </a>\n )\n }\n\n return (\n <div class={cardClasses()}>\n {cardContent()}\n </div>\n )\n}\n", "import { JSX, splitProps } from 'solid-js'\n\nexport interface PageLayoutProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Content of the page */\n children: JSX.Element\n /** Add padding-top to account for fixed header (use for non-landing pages) */\n withHeader?: boolean\n}\n\n/**\n * PageLayout provides consistent page structure with proper background and font styling.\n * Use this as the root wrapper for all pages.\n */\nexport function PageLayout(props: PageLayoutProps) {\n const [local, rest] = splitProps(props, ['class', 'withHeader'])\n\n const classes = () => {\n const base = 'vui-page'\n const header = local.withHeader ? 'vui-page--with-header' : ''\n const custom = local.class ?? ''\n return [base, header, custom].filter(Boolean).join(' ')\n }\n\n return (\n <div class={classes()} {...rest}>\n {props.children}\n </div>\n )\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["splitProps", "mergeProps", "solidMergeProps", "Button", "HeadlessButton", "props", "defaultProps", "variant", "buttonStyle", "size", "merged", "local", "headlessProps", "getClassName", "renderProps", "classList", "isPressed", "push", "fullWidth", "class", "join", "_$createComponent", "_$mergeProps", "staticColor", "undefined", "children", "Show", "variantStyles", "primary", "secondary", "accent", "success", "warning", "danger", "sizeStyles", "sm", "md", "lg", "Badge", "props", "variant", "size", "_$ssr", "_tmpl$2", "_$escape", "class", "_$createComponent", "when", "count", "undefined", "fallback", "children", "_tmpl$", "Show", "variantStyles", "info", "success", "warning", "error", "Alert", "props", "variant", "_$ssr", "_tmpl$4", "_$escape", "class", "_$createComponent", "when", "title", "children", "_tmpl$", "_tmpl$2", "dismissible", "_tmpl$3", "Show", "sizeStyles", "xs", "container", "text", "indicator", "sm", "md", "lg", "xl", "Avatar", "props", "size", "styles", "initials", "fallback", "slice", "toUpperCase", "alt", "_$ssr", "_tmpl$3", "_$escape", "class", "_$createComponent", "when", "src", "_tmpl$4", "children", "_tmpl$", "_$ssrAttribute", "online", "undefined", "_tmpl$2", "AvatarGroup", "_tmpl$5", "createSignal", "createEffect", "splitProps", "mergeProps", "solidMergeProps", "ToggleSwitch", "HeadlessToggleSwitch", "sizeStyles", "sm", "track", "thumb", "translate", "md", "lg", "props", "defaultProps", "size", "merged", "local", "headlessProps", "getClassName", "renderProps", "base", "disabledClass", "isDisabled", "custom", "class", "filter", "Boolean", "join", "_$createComponent", "_$mergeProps", "children", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "isSelected", "_tmpl$2", "TabSwitch", "props", "leftSelected", "setLeftSelected", "createSignal", "value", "options", "createEffect", "undefined", "toggle", "newLeftSelected", "newValue", "onChange", "leftSelectedStyle", "rightSelectedStyle", "textSelected", "textUnselected", "_$ssr", "_tmpl$", "_$escape", "class", "label", "splitProps", "mergeProps", "solidMergeProps", "Show", "Checkbox", "HeadlessCheckbox", "CheckboxGroup", "HeadlessCheckboxGroup", "sizeStyles", "sm", "box", "icon", "label", "md", "lg", "CheckIcon", "props", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "class", "IndeterminateIcon", "_tmpl$2", "defaultProps", "size", "merged", "local", "headlessProps", "getClassName", "renderProps", "base", "disabledClass", "isDisabled", "custom", "filter", "Boolean", "join", "_$createComponent", "_$mergeProps", "children", "boxClasses", "sizeClass", "colorClass", "isSelected", "isIndeterminate", "focusClass", "isFocusVisible", "cursorClass", "iconClasses", "visibilityClass", "labelClasses", "_tmpl$3", "when", "fallback", "renderChildren", "_tmpl$4", "_tmpl$5", "description", "isInvalid", "_tmpl$6", "errorMessage", "_tmpl$7", "Show", "createContext", "useContext", "splitProps", "RadioGroup", "HeadlessRadioGroup", "Radio", "HeadlessRadio", "RadioSizeContext", "sizeStyles", "sm", "circle", "dot", "label", "md", "lg", "props", "local", "headlessProps", "size", "customClass", "class", "getClassName", "renderProps", "base", "orientationClass", "orientation", "disabledClass", "isDisabled", "filter", "Boolean", "join", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "when", "_$ssr", "_tmpl$", "_$escape", "description", "_tmpl$2", "errorMessage", "_tmpl$3", "sizeFromContext", "sizeStyle", "cursorClass", "circleClass", "dotClass", "labelClass", "_tmpl$4", "_$ssrAttribute", "_tmpl$5", "splitProps", "Show", "createSignal", "createContext", "useContext", "createUniqueId", "onMount", "onCleanup", "createEffect", "Portal", "createInteractOutside", "DialogContext", "sizeStyles", "sm", "md", "lg", "fullscreen", "Dialog", "props", "local", "rest", "splitProps", "size", "customClass", "class", "role", "titleId", "createUniqueId", "ariaLabelledBy", "title", "undefined", "close", "onClose", "baseClass", "sizeClass", "padding", "className", "filter", "Boolean", "join", "_$createComponent", "DialogContext", "Provider", "value", "children", "_$ssrElement", "_$mergeProps", "tabIndex", "_$escape", "Show", "when", "_$ssr", "_tmpl$2", "_$ssrAttribute", "isDismissable", "_tmpl$", "_tmpl$3", "DialogTrigger", "isOpen", "setIsOpen", "createSignal", "dialogRef", "open", "onOpenChange", "isOpenControlled", "createInteractOutside", "ref", "onInteractOutside", "isDisabled", "onMount", "handleKeyDown", "e", "key", "isKeyboardDismissDisabled", "preventDefault", "stopPropagation", "document", "addEventListener", "onCleanup", "removeEventListener", "createEffect", "prevOverflow", "documentElement", "style", "overflow", "_tmpl$4", "trigger", "Portal", "_tmpl$5", "_tmpl$6", "content", "DialogFooter", "_tmpl$7", "GitHubIcon", "props", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "size", "color", "Icon", "props", "size", "color", "IconComponent", "icon", "_$ssr", "_tmpl$", "withShadow", "_$escape", "class", "_tmpl$2", "_$createComponent", "Show", "splitProps", "Tooltip", "HeadlessTooltip", "TooltipTrigger", "HeadlessTooltipTrigger", "baseStyles", "join", "variantStyles", "default", "neutral", "info", "arrowStyles", "top", "bottom", "left", "right", "getArrowBorderColor", "variant", "colors", "props", "_$createComponent", "local", "rest", "placement", "_$mergeProps", "_renderProps", "classes", "class", "filter", "Boolean", "children", "renderProps", "when", "showArrow", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "SimpleTooltip", "position", "_tmpl$2", "label", "Show", "splitProps", "Popover", "HeadlessPopover", "PopoverTrigger", "HeadlessPopoverTrigger", "OverlayArrow", "HeadlessOverlayArrow", "baseStyles", "join", "sizeStyles", "sm", "md", "lg", "paddingStyles", "none", "arrowBaseStyles", "getArrowRotation", "placement", "props", "_$createComponent", "local", "rest", "size", "padding", "_$mergeProps", "_renderProps", "classes", "class", "filter", "Boolean", "children", "renderProps", "when", "showArrow", "PopoverArrow", "style", "bottom", "left", "transform", "top", "right", "_$ssr", "_tmpl$", "_$escape", "PopoverHeader", "_tmpl$3", "title", "description", "_tmpl$2", "PopoverFooter", "_tmpl$4", "splitProps", "mergeProps", "solidMergeProps", "Show", "createTextField", "createFocusRing", "createTextFieldState", "sizeStyles", "sm", "input", "label", "description", "md", "lg", "TextField", "props", "defaultProps", "size", "variant", "merged", "local", "ariaProps", "state", "value", "defaultValue", "onChange", "textFieldAria", "setValue", "isFocused", "isFocusVisible", "focusProps", "containerClasses", "base", "disabledClass", "isDisabled", "custom", "class", "filter", "Boolean", "join", "inputClasses", "sizeClass", "variantClass", "stateClass", "isInvalid", "hoverClass", "labelClasses", "descriptionClasses", "errorClasses", "cleanLabelProps", "ref", "_ref", "rest", "labelProps", "cleanInputProps", "_ref1", "inputProps", "_ref2", "focusRest", "cleanDescriptionProps", "descriptionProps", "cleanErrorMessageProps", "errorMessageProps", "_$ssr", "_tmpl$2", "_$ssrAttribute", "_$escape", "undefined", "isReadOnly", "isRequired", "_$createComponent", "when", "children", "_$ssrElement", "_$mergeProps", "_tmpl$", "errorMessage", "splitProps", "Link", "HeadlessLink", "variantStyles", "primary", "secondary", "subtle", "props", "local", "headlessProps", "variant", "customClass", "class", "getClassName", "renderProps", "base", "variantClass", "underlineClass", "isStandalone", "isQuiet", "isHovered", "isFocusVisible", "weightClass", "focusClass", "disabledClass", "isDisabled", "pressedClass", "isPressed", "filter", "Boolean", "join", "_$createComponent", "_$mergeProps", "children", "splitProps", "Show", "createMemo", "createProgressBar", "sizeStyles", "sm", "track", "text", "md", "lg", "variantStyles", "primary", "accent", "success", "warning", "danger", "clamp", "value", "min", "max", "Math", "ProgressBar", "props", "local", "ariaProps", "size", "variant", "isIndeterminate", "showValueLabel", "progressAria", "minValue", "maxValue", "valueLabel", "label", "percentage", "undefined", "clampedValue", "valueText", "progressBarProps", "sizeConfig", "_$ssrElement", "_$mergeProps", "class", "_$escape", "_$createComponent", "when", "children", "_$ssr", "_tmpl$3", "_tmpl$", "_tmpl$2", "_tmpl$4", "_$ssrStyleProperty", "splitProps", "createMemo", "Show", "createSeparator", "variantStyles", "default", "subtle", "strong", "horizontalSizeStyles", "sm", "md", "lg", "verticalSizeStyles", "Separator", "props", "local", "ariaProps", "orientation", "variant", "size", "elementType", "separatorAria", "className", "isVertical", "sizeStyles", "base", "class", "filter", "Boolean", "join", "getAriaProps", "ref", "_", "separatorProps", "_$createComponent", "when", "fallback", "_$ssrElement", "_$mergeProps", "undefined", "children", "splitProps", "Toolbar", "HeadlessToolbar", "baseStyles", "variantStyles", "default", "bordered", "ghost", "sizeStyles", "sm", "md", "lg", "orientationStyles", "horizontal", "vertical", "props", "local", "headlessProps", "variant", "size", "getClassName", "renderProps", "orientation", "class", "filter", "Boolean", "join", "_$createComponent", "_$mergeProps", "style", "splitProps", "createMemo", "Show", "For", "Autocomplete", "useAutocompleteInput", "useAutocompleteCollection", "useAutocompleteState", "sizeStyles", "sm", "container", "input", "label", "list", "item", "md", "lg", "AutocompleteInput", "props", "ctx", "styles", "size", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "placeholder", "isDisabled", "inputProps", "value", "autoComplete", "autoCorrect", "spellCheck", "join", "AutocompleteList", "state", "filteredItems", "filter", "items", "textValue", "String", "textKey", "name", "handleSelect", "onSelect", "setInputValue", "_$createComponent", "when", "length", "children", "_tmpl$2", "collectionProps", "id", "each", "itemId", "isFocused", "focusedNodeId", "_tmpl$3", "renderItem", "SearchAutocomplete", "local", "autocompleteProps", "defaultFilter", "inputValue", "toLowerCase", "includes", "_tmpl$6", "class", "Boolean", "_tmpl$4", "_$mergeProps", "description", "_tmpl$5", "Show", "splitProps", "createContext", "useContext", "Select", "HeadlessSelect", "SelectTrigger", "HeadlessSelectTrigger", "SelectValue", "HeadlessSelectValue", "SelectListBox", "HeadlessSelectListBox", "SelectOption", "HeadlessSelectOption", "SelectSizeContext", "sizeStyles", "sm", "trigger", "label", "option", "icon", "md", "lg", "props", "local", "headlessProps", "size", "customClass", "class", "getClassName", "renderProps", "base", "disabledClass", "isDisabled", "filter", "Boolean", "join", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "when", "_$ssr", "_tmpl$", "_$escape", "description", "isInvalid", "_tmpl$2", "errorMessage", "_tmpl$3", "sizeStyle", "sizeClass", "colorClass", "isOpen", "isHovered", "focusClass", "isFocusVisible", "ChevronIcon", "placeholderClass", "isSelected", "_renderProps", "paddingStyles", "isFocused", "iconClass", "paddingClass", "CheckIcon", "_tmpl$4", "_tmpl$5", "_$ssrAttribute", "_tmpl$6", "Trigger", "Value", "ListBox", "Option", "splitProps", "createContext", "useContext", "Menu", "HeadlessMenu", "MenuItem", "HeadlessMenuItem", "MenuTrigger", "HeadlessMenuTrigger", "MenuButton", "HeadlessMenuButton", "MenuSizeContext", "sizeStyles", "sm", "button", "menu", "item", "icon", "md", "lg", "buttonVariants", "primary", "secondary", "quiet", "props", "local", "headlessProps", "size", "_$createComponent", "Provider", "value", "children", "_$ssr", "_tmpl$", "_$escape", "class", "_$mergeProps", "sizeStyle", "variant", "customClass", "getClassName", "renderProps", "base", "sizeClass", "variantClass", "stateClass", "isDisabled", "isPressed", "focusClass", "isFocusVisible", "filter", "Boolean", "join", "ChevronIcon", "styles", "_renderProps", "colorClass", "isDestructive", "isFocused", "isHovered", "pressedClass", "_tmpl$3", "_tmpl$2", "shortcut", "_tmpl$4", "MenuSeparator", "_tmpl$5", "_tmpl$6", "_$ssrAttribute", "Item", "Separator", "Button", "splitProps", "createContext", "useContext", "Show", "ListBox", "HeadlessListBox", "ListBoxOption", "HeadlessListBoxOption", "ListBoxSizeContext", "sizeStyles", "sm", "list", "option", "icon", "label", "description", "md", "lg", "props", "local", "headlessProps", "size", "styles", "customClass", "class", "getClassName", "renderProps", "base", "sizeClass", "stateClass", "isDisabled", "focusClass", "isFocusVisible", "filter", "Boolean", "join", "defaultEmptyState", "_$ssr", "_tmpl$", "_$createComponent", "Provider", "value", "children", "_tmpl$4", "_$escape", "when", "_tmpl$2", "_$mergeProps", "renderEmptyState", "_tmpl$3", "sizeStyle", "colorClass", "isSelected", "isFocused", "isHovered", "_tmpl$6", "CheckIcon", "_tmpl$5", "_tmpl$7", "_$ssrAttribute", "Option", "splitProps", "createContext", "useContext", "Tabs", "HeadlessTabs", "TabList", "HeadlessTabList", "Tab", "HeadlessTab", "TabPanel", "HeadlessTabPanel", "TabsSizeContext", "size", "variant", "sizeStyles", "sm", "tab", "tabList", "panel", "md", "lg", "variantStyles", "underline", "base", "default", "selected", "disabled", "pill", "boxed", "props", "local", "headlessProps", "customClass", "class", "getClassName", "renderProps", "orientationClass", "orientation", "disabledClass", "isDisabled", "filter", "Boolean", "join", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "ctx", "sizeClass", "variantClass", "focusClass", "isFocusVisible", "variantBase", "stateClass", "isSelected", "pressedClass", "isPressed", "cursorClass", "List", "Panel", "splitProps", "createContext", "useContext", "Breadcrumbs", "HeadlessBreadcrumbs", "BreadcrumbItem", "HeadlessBreadcrumbItem", "BreadcrumbsSizeContext", "size", "variant", "showSeparator", "sizeStyles", "sm", "text", "icon", "gap", "md", "lg", "variantStyles", "default", "item", "current", "separator", "subtle", "props", "local", "headlessProps", "customClass", "class", "getClassName", "renderProps", "base", "sizeClass", "disabledClass", "isDisabled", "filter", "Boolean", "join", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "ctx", "vStyles", "stateClass", "isCurrent", "cursorClass", "transitionClass", "focusClass", "isFocusVisible", "separatorClass", "renderChildren", "ChevronIcon", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "Item", "splitProps", "mergeProps", "solidMergeProps", "Show", "createNumberField", "createFocusRing", "createPress", "createHover", "createNumberFieldState", "sizeStyles", "sm", "input", "label", "description", "button", "buttonGap", "md", "lg", "PlusIcon", "props", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "class", "MinusIcon", "_tmpl$2", "NumberField", "defaultProps", "size", "variant", "merged", "local", "stateProps", "ariaProps", "inputRef", "state", "value", "defaultValue", "onChange", "minValue", "maxValue", "step", "locale", "formatOptions", "isDisabled", "isReadOnly", "numberFieldAria", "isRequired", "isInvalid", "errorMessage", "id", "autoFocus", "name", "isFocused", "isFocusVisible", "focusProps", "isPressed", "incrementPressed", "pressProps", "incrementPressProps", "canIncrement", "onPress", "increment", "focus", "isHovered", "incrementHovered", "hoverProps", "incrementHoverProps", "decrementPressed", "decrementPressProps", "canDecrement", "decrement", "decrementHovered", "decrementHoverProps", "containerClasses", "base", "disabledClass", "custom", "filter", "Boolean", "join", "groupClasses", "gapClass", "inputClasses", "sizeClass", "variantClass", "stateClass", "hoverClass", "buttonClasses", "isIncrement", "labelClasses", "descriptionClasses", "errorClasses", "cleanInputProps", "ref", "_ref", "rest", "inputProps", "cleanFocusProps", "cleanGroupProps", "groupProps", "cleanDecrementProps", "decrementButtonProps", "cleanIncrementProps", "incrementButtonProps", "cleanDecrementPressProps", "cleanDecrementHoverProps", "cleanIncrementPressProps", "cleanIncrementHoverProps", "_$ssrElement", "_$mergeProps", "undefined", "_$createComponent", "when", "children", "labelProps", "_tmpl$3", "_tmpl$4", "hideStepper", "descriptionProps", "errorMessageProps", "splitProps", "mergeProps", "solidMergeProps", "Show", "createSearchField", "createFocusRing", "createPress", "createHover", "createSearchFieldState", "sizeStyles", "sm", "container", "input", "label", "description", "icon", "clearButton", "md", "lg", "SearchIcon", "props", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "class", "ClearIcon", "_tmpl$2", "SearchField", "defaultProps", "size", "variant", "merged", "local", "stateProps", "ariaProps", "inputRef", "state", "value", "defaultValue", "onChange", "searchFieldAria", "isDisabled", "isReadOnly", "isRequired", "isInvalid", "errorMessage", "placeholder", "name", "autoFocus", "autoComplete", "maxLength", "minLength", "pattern", "onSubmit", "onClear", "isFocused", "isFocusVisible", "focusProps", "isHovered", "hoverProps", "isPressed", "clearPressed", "pressProps", "clearPressProps", "onPress", "clearButtonProps", "onClick", "clearHovered", "clearHoverProps", "containerClasses", "base", "disabledClass", "custom", "filter", "Boolean", "join", "inputWrapperClasses", "sizeClass", "inputClasses", "paddingClass", "hideSearchIcon", "variantClass", "stateClass", "hoverClass", "searchIconClasses", "focusedClass", "clearButtonClasses", "labelClasses", "descriptionClasses", "errorClasses", "cleanInputProps", "ref", "_ref", "rest", "inputProps", "cleanFocusProps", "cleanHoverProps", "cleanLabelProps", "labelProps", "cleanClearPressProps", "cleanClearHoverProps", "isEmpty", "_tmpl$4", "undefined", "_$createComponent", "when", "children", "_$ssrElement", "_$mergeProps", "_tmpl$3", "type", "tabIndex", "disabled", "descriptionProps", "errorMessageProps", "splitProps", "mergeProps", "solidMergeProps", "Show", "createSlider", "createFocusRing", "createHover", "createSliderState", "sizeStyles", "sm", "track", "thumb", "label", "output", "md", "lg", "Slider", "props", "defaultProps", "size", "variant", "minValue", "maxValue", "step", "orientation", "showOutput", "merged", "local", "stateProps", "ariaProps", "trackRef", "state", "value", "defaultValue", "onChange", "onChangeEnd", "locale", "formatOptions", "isDisabled", "sliderAria", "isFocused", "isFocusVisible", "focusProps", "isHovered", "hoverProps", "containerClasses", "base", "disabledClass", "custom", "class", "filter", "Boolean", "join", "labelRowClasses", "trackContainerClasses", "trackClasses", "sizeClass", "fillClasses", "variantClass", "thumbClasses", "stateClass", "isDragging", "focusClass", "labelClasses", "outputClasses", "minMaxClasses", "cleanGroupProps", "ref", "_ref", "rest", "groupProps", "cleanTrackProps", "style", "_style", "trackProps", "cleanThumbProps", "thumbStyle", "thumbProps", "cleanFocusProps", "cleanHoverProps", "cleanOutputProps", "outputProps", "thumbData", "percent", "getValuePercent", "_$ssrElement", "_$mergeProps", "undefined", "_$escape", "_$createComponent", "when", "children", "_$ssr", "_tmpl$", "_$ssrAttribute", "labelProps", "getFormattedValue", "_tmpl$2", "_$ssrStyleProperty", "left", "transform", "showMinMax", "_tmpl$3", "inputProps", "splitProps", "createContext", "useContext", "Show", "ComboBox", "HeadlessComboBox", "ComboBoxInput", "HeadlessComboBoxInput", "ComboBoxButton", "HeadlessComboBoxButton", "ComboBoxListBox", "HeadlessComboBoxListBox", "ComboBoxOption", "HeadlessComboBoxOption", "defaultContainsFilter", "ComboBoxSizeContext", "sizeStyles", "sm", "wrapper", "input", "button", "label", "option", "icon", "md", "lg", "props", "local", "headlessProps", "size", "customClass", "class", "getClassName", "renderProps", "base", "disabledClass", "isDisabled", "filter", "Boolean", "join", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "when", "_$ssr", "_tmpl$", "_$escape", "description", "isInvalid", "_tmpl$2", "errorMessage", "_tmpl$3", "ComboBoxInputGroup", "styles", "_tmpl$4", "sizeClass", "colorClass", "isOpen", "isHovered", "focusClass", "isFocusVisible", "sizeStyle", "ChevronIcon", "_renderProps", "isSelected", "isFocused", "iconPadding", "CheckIcon", "_tmpl$5", "_tmpl$6", "_$ssrAttribute", "_tmpl$7", "InputGroup", "Input", "Button", "ListBox", "Option", "splitProps", "For", "Show", "Toast", "HeadlessToast", "ToastRegion", "HeadlessToastRegion", "ToastProvider", "HeadlessToastProvider", "ToastContext", "ToastCloseButton", "HeadlessToastCloseButton", "globalToastQueue", "addToast", "headlessAddToast", "useToastContext", "regionStyles", "join", "toastBaseStyles", "variantStyles", "info", "success", "warning", "error", "neutral", "iconStyles", "closeButtonStyles", "InfoIcon", "_$ssr", "_tmpl$", "SuccessIcon", "_tmpl$2", "WarningIcon", "_tmpl$3", "ErrorIcon", "_tmpl$4", "CloseIcon", "_tmpl$5", "getVariantIcon", "variant", "_$createComponent", "props", "local", "rest", "_$mergeProps", "placement", "_renderProps", "class", "filter", "Boolean", "children", "regionProps", "each", "visibleToasts", "toast", "content", "type", "_tmpl$6", "_$escape", "_tmpl$0", "when", "title", "_tmpl$7", "description", "_tmpl$8", "action", "_tmpl$9", "label", "options", "toastSuccess", "message", "timeout", "toastError", "toastWarning", "toastInfo", "splitProps", "createContext", "useContext", "Show", "Disclosure", "HeadlessDisclosure", "DisclosureGroup", "HeadlessDisclosureGroup", "DisclosureTrigger", "HeadlessDisclosureTrigger", "DisclosurePanel", "HeadlessDisclosurePanel", "DisclosureSizeContext", "size", "variant", "sizeStyles", "sm", "trigger", "panel", "icon", "gap", "md", "lg", "variantStyles", "default", "container", "base", "disabled", "bordered", "filled", "ghost", "props", "local", "headlessProps", "customClass", "class", "getClassName", "_renderProps", "gapClass", "filter", "Boolean", "join", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "parentCtx", "variantClass", "ctx", "when", "hideIcon", "_$ssr", "_tmpl$", "_$ssrAttribute", "_$escape", "_$ssrStyleProperty", "sizeClass", "Trigger", "Panel", "Item", "splitProps", "Show", "createMemo", "createMeter", "sizeStyles", "sm", "track", "text", "md", "lg", "variantStyles", "primary", "accent", "success", "warning", "danger", "info", "clamp", "value", "min", "max", "Math", "Meter", "props", "local", "ariaProps", "size", "variant", "showValueLabel", "meterAria", "minValue", "maxValue", "valueLabel", "label", "percentage", "clampedValue", "valueText", "meterProps", "sizeConfig", "_$ssrElement", "_$mergeProps", "class", "_$escape", "_$createComponent", "when", "children", "_$ssr", "_tmpl$3", "_tmpl$", "_tmpl$2", "_tmpl$4", "_$ssrStyleProperty", "splitProps", "Show", "TagList", "HeadlessTagList", "Tag", "HeadlessTag", "sizeStyles", "sm", "tag", "removeButton", "label", "md", "lg", "variantStyles", "default", "selected", "disabled", "outline", "solid", "TagGroup", "props", "local", "size", "variant", "sizeConfig", "variantConfig", "getKey", "item", "id", "undefined", "key", "String", "_$ssr", "_tmpl$2", "_$escape", "class", "_$createComponent", "when", "children", "_tmpl$", "items", "onRemove", "selectionMode", "selectedKeys", "onSelectionChange", "disabledKeys", "renderEmptyState", "_tmpl$3", "isSelected", "isDisabled", "base", "variantClass", "disabledClass", "trim", "renderProps", "_tmpl$4", "allowsRemoving", "_tmpl$5", "splitProps", "Calendar", "HeadlessCalendar", "CalendarHeading", "CalendarButton", "CalendarGrid", "CalendarCell", "sizeStyles", "sm", "container", "header", "cell", "button", "md", "lg", "props", "local", "rest", "size", "sizeConfig", "_$createComponent", "_$mergeProps", "class", "children", "_$ssr", "_tmpl$3", "_$escape", "slot", "_tmpl$", "_tmpl$2", "date", "isSelected", "isFocused", "isDisabled", "isOutsideMonth", "isToday", "isPressed", "base", "stateClass", "focusClass", "pressedClass", "trim", "splitProps", "RangeCalendar", "HeadlessRangeCalendar", "RangeCalendarHeading", "RangeCalendarButton", "RangeCalendarGrid", "RangeCalendarCell", "sizeStyles", "sm", "container", "header", "cell", "button", "md", "lg", "props", "local", "rest", "size", "sizeConfig", "_$createComponent", "_$mergeProps", "class", "children", "_$ssr", "_tmpl$3", "_$escape", "slot", "_tmpl$", "_tmpl$2", "date", "isSelected", "isSelectionStart", "isSelectionEnd", "isFocused", "isDisabled", "isOutsideMonth", "isToday", "isPressed", "base", "stateClass", "roundedClass", "focusClass", "pressedClass", "trim", "splitProps", "DateField", "HeadlessDateField", "DateInput", "DateSegment", "sizeStyles", "sm", "container", "input", "segment", "label", "md", "lg", "props", "local", "rest", "size", "sizeConfig", "isInvalid", "errorMessage", "_$createComponent", "_$mergeProps", "class", "children", "_$ssr", "_tmpl$", "_$escape", "isRequired", "_tmpl$2", "isFocused", "isDisabled", "base", "borderClass", "disabledClass", "focusClass", "trim", "isPlaceholder", "isEditable", "stateClass", "type", "description", "_tmpl$3", "splitProps", "TimeField", "HeadlessTimeField", "TimeInput", "TimeSegment", "sizeStyles", "sm", "container", "input", "segment", "label", "md", "lg", "props", "local", "rest", "size", "sizeConfig", "isInvalid", "errorMessage", "_$createComponent", "_$mergeProps", "class", "children", "_$ssr", "_tmpl$", "_$escape", "isRequired", "_tmpl$2", "isFocused", "isDisabled", "base", "borderClass", "disabledClass", "focusClass", "trim", "isPlaceholder", "isEditable", "stateClass", "type", "description", "_tmpl$3", "splitProps", "Show", "DatePicker", "HeadlessDatePicker", "DatePickerButton", "DateInput", "DateSegment", "useDatePickerContext", "CalendarIcon", "_$ssr", "_tmpl$", "sizeStyles", "sm", "container", "input", "segment", "label", "button", "md", "lg", "DatePicker", "props", "local", "rest", "splitProps", "size", "sizeConfig", "isInvalid", "errorMessage", "_$createComponent", "HeadlessDatePicker", "_$mergeProps", "class", "children", "_tmpl$3", "_$escape", "isRequired", "_tmpl$4", "_tmpl$2", "DateInput", "isFocused", "isDisabled", "base", "borderClass", "disabledClass", "focusClass", "trim", "DateSegment", "isPlaceholder", "isEditable", "stateClass", "type", "DatePickerButton", "isOpen", "DatePickerPopup", "description", "_tmpl$5", "context", "useDatePickerContext", "Show", "when", "overlayState", "_tmpl$6", "Calendar", "value", "calendarState", "onChange", "date", "fieldState", "setValue", "close", "minValue", "visibleRange", "start", "_tmpl$7", "splitProps", "createContext", "useContext", "Show", "Table", "HeadlessTable", "TableHeader", "HeadlessTableHeader", "TableColumn", "HeadlessTableColumn", "TableBody", "HeadlessTableBody", "TableRow", "HeadlessTableRow", "TableCell", "HeadlessTableCell", "TableSelectionCheckbox", "HeadlessTableSelectionCheckbox", "TableSelectAllCheckbox", "HeadlessTableSelectAllCheckbox", "TableSizeContext", "size", "variant", "sizeStyles", "sm", "table", "headerCell", "cell", "checkbox", "md", "lg", "variantStyles", "default", "wrapper", "header", "row", "rowHover", "rowSelected", "striped", "bordered", "alignStyles", "left", "center", "right", "props", "local", "headlessProps", "styles", "variantStyle", "customClass", "class", "getClassName", "renderProps", "base", "sizeClass", "stateClass", "isEmpty", "focusClass", "isFocusVisible", "filter", "Boolean", "join", "contextValue", "_$createComponent", "Provider", "value", "children", "_$ssr", "_tmpl$3", "_$escape", "when", "title", "_tmpl$", "description", "_tmpl$2", "_$ssrAttribute", "_$mergeProps", "context", "className", "sizeStyle", "alignClass", "align", "sortClass", "isSortable", "isHovered", "getStyle", "width", "undefined", "style", "_tmpl$4", "sortDirection", "SortIcon", "direction", "defaultEmptyState", "_tmpl$5", "EmptyIcon", "renderEmptyState", "variantClass", "isDisabled", "isSelected", "pressedClass", "isPressed", "checkboxClass", "_tmpl$6", "rowKey", "_tmpl$7", "_tmpl$8", "_tmpl$9", "_tmpl$0", "_tmpl$1", "Header", "Column", "Body", "Row", "Cell", "SelectionCheckbox", "SelectAllCheckbox", "splitProps", "createContext", "useContext", "Show", "GridList", "HeadlessGridList", "GridListItem", "HeadlessGridListItem", "GridListSelectionCheckbox", "HeadlessGridListSelectionCheckbox", "GridListSizeContext", "size", "variant", "layout", "sizeStyles", "sm", "list", "item", "icon", "image", "label", "description", "checkbox", "md", "lg", "variantStyles", "default", "itemHover", "itemSelected", "cards", "bordered", "props", "local", "headlessProps", "styles", "variantStyle", "customClass", "class", "getClassName", "renderProps", "base", "sizeClass", "variantClass", "layoutClass", "columns", "undefined", "stateClass", "isDisabled", "focusClass", "isFocusVisible", "filter", "Boolean", "join", "defaultEmptyState", "_$ssr", "_tmpl$", "_$escape", "_$createComponent", "EmptyIcon", "contextValue", "Provider", "value", "children", "_tmpl$4", "when", "_tmpl$2", "_$mergeProps", "renderEmptyState", "_tmpl$3", "context", "sizeStyle", "isSelected", "isHovered", "textClass", "pressedClass", "isPressed", "_tmpl$5", "_$ssrAttribute", "imageAlt", "_tmpl$6", "CheckIcon", "_tmpl$7", "className", "_tmpl$8", "itemKey", "_tmpl$9", "_tmpl$0", "Item", "SelectionCheckbox", "splitProps", "createContext", "useContext", "Show", "Tree", "HeadlessTree", "TreeItem", "HeadlessTreeItem", "TreeExpandButton", "HeadlessTreeExpandButton", "TreeSelectionCheckbox", "HeadlessTreeSelectionCheckbox", "TreeSizeContext", "size", "variant", "sizeStyles", "sm", "tree", "item", "indent", "icon", "expandButton", "label", "description", "checkbox", "md", "lg", "variantStyles", "default", "itemHover", "itemSelected", "bordered", "quiet", "props", "local", "headlessProps", "styles", "variantStyle", "customClass", "class", "getClassName", "renderProps", "base", "sizeClass", "variantClass", "stateClass", "isDisabled", "focusClass", "isFocusVisible", "filter", "Boolean", "join", "defaultEmptyState", "_$ssr", "_tmpl$", "_$escape", "_$createComponent", "EmptyTreeIcon", "contextValue", "Provider", "value", "children", "_tmpl$4", "when", "_tmpl$2", "_$mergeProps", "renderEmptyState", "_tmpl$3", "context", "sizeStyle", "isSelected", "isHovered", "textClass", "pressedClass", "isPressed", "getStyle", "level", "style", "_tmpl$5", "isExpandable", "FolderIcon", "isOpen", "isExpanded", "FileIcon", "_tmpl$6", "CheckIcon", "className", "ChevronIcon", "_tmpl$7", "_$ssrAttribute", "itemKey", "_tmpl$8", "_tmpl$9", "_tmpl$0", "_tmpl$1", "_tmpl$10", "_tmpl$11", "_tmpl$12", "Item", "ExpandButton", "SelectionCheckbox", "splitProps", "createContext", "useContext", "Show", "ColorSlider", "HeadlessColorSlider", "ColorSliderTrack", "HeadlessColorSliderTrack", "ColorSliderThumb", "HeadlessColorSliderThumb", "ColorArea", "HeadlessColorArea", "ColorAreaGradient", "HeadlessColorAreaGradient", "ColorAreaThumb", "HeadlessColorAreaThumb", "ColorWheel", "HeadlessColorWheel", "ColorWheelTrack", "HeadlessColorWheelTrack", "ColorWheelThumb", "HeadlessColorWheelThumb", "ColorField", "HeadlessColorField", "ColorFieldInput", "HeadlessColorFieldInput", "ColorSwatch", "HeadlessColorSwatch", "ColorSizeContext", "size", "sizeStyles", "sm", "slider", "track", "thumb", "label", "area", "container", "wheel", "field", "input", "swatch", "md", "lg", "props", "local", "headlessProps", "styles", "customClass", "class", "getClassName", "renderProps", "base", "stateClass", "isDisabled", "filter", "Boolean", "join", "contextValue", "_$createComponent", "Provider", "value", "children", "_$mergeProps", "_$ssr", "_tmpl$2", "_$escape", "when", "_tmpl$", "showValue", "Math", "round", "context", "dragClass", "isDragging", "focusClass", "isFocusVisible", "disabledClass", "className", "isInvalid", "errorMessage", "description", "_tmpl$3", "_tmpl$4", "borderClass", "_renderProps", "selectableClass", "isSelectable", "selectedClass", "isSelected", "handleClick", "onClick", "_tmpl$5", "ColorPicker", "_tmpl$6", "defaultValue", "onChange", "xChannel", "yChannel", "showSliders", "channel", "showInput", "color", "Track", "Thumb", "Gradient", "Input", "splitProps", "Show", "Landmark", "HeadlessLandmark", "useLandmarkController", "roleLabels", "main", "navigation", "search", "banner", "contentinfo", "complementary", "form", "region", "roleColors", "props", "local", "headlessProps", "customClass", "class", "role", "getClassName", "base", "debugClass", "showLabel", "filter", "Boolean", "join", "_$createComponent", "_$mergeProps", "children", "when", "_$ssr", "_tmpl$2", "_$escape", "_tmpl$", "SkipLink", "className", "_tmpl$3", "_$ssrAttribute", "href", "LandmarkNavigator", "controller", "isVisible", "_tmpl$4", "Show", "variantStyles", "primary", "secondary", "accent", "outline", "Chip", "props", "variant", "renderIcon", "icon", "_$ssr", "_tmpl$2", "_$escape", "class", "_$createComponent", "when", "children", "_tmpl$", "text", "Show", "NavHeader", "props", "_$ssr", "_tmpl$3", "_$escape", "class", "_$createComponent", "when", "logo", "fallback", "logoText", "children", "_tmpl$4", "_tmpl$", "_$ssrAttribute", "logoAlt", "menuIcon", "_tmpl$2", "Logo", "props", "sizeClass", "size", "firstWord", "secondWord", "_$ssr", "_tmpl$", "_$escape", "inverted", "class", "_$ssrAttribute", "undefined", "Header", "props", "showTextLogo", "logo", "undefined", "logoProps", "_$ssr", "_tmpl$", "_$escape", "class", "logoImage", "_$createComponent", "Logo", "_$mergeProps", "size", "children", "Show", "For", "NavItem", "props", "_$ssr", "_tmpl$", "_$escape", "class", "title", "children", "NavLink", "activeStyles", "inactiveStyles", "_tmpl$2", "_$ssrAttribute", "href", "active", "NavSection", "_tmpl$3", "_$createComponent", "when", "links", "each", "link", "_tmpl$4", "label", "LateralNav", "bgColor", "transparent", "_tmpl$5", "Show", "eventMessages", "follow", "left", "right", "_$ssr", "_tmpl$", "_$escape", "like", "comment", "event", "custom", "TimelineItem", "props", "type", "leftName", "leftUser", "name", "rightName", "rightUser", "renderIcon", "icon", "renderMessage", "message", "_tmpl$2", "class", "_$createComponent", "Show", "when", "children", "Avatar", "src", "avatar", "alt", "fallback", "Show", "For", "ConversationPreview", "props", "_$ssr", "_tmpl$4", "_$escape", "class", "_$createComponent", "Avatar", "src", "user", "avatar", "alt", "name", "online", "size", "Show", "when", "timestamp", "children", "_tmpl$", "lastMessage", "_tmpl$2", "unreadCount", "_tmpl$3", "ConversationBubble", "isUser", "sender", "_tmpl$6", "content", "_tmpl$5", "Conversation", "_tmpl$7", "For", "each", "messages", "message", "Show", "ProfileCard", "props", "formatNumber", "num", "toFixed", "toString", "_$ssr", "_tmpl$5", "_$escape", "class", "_$createComponent", "Avatar", "src", "avatar", "alt", "username", "size", "Show", "when", "bio", "children", "_tmpl$", "followers", "undefined", "_tmpl$2", "following", "_tmpl$3", "actions", "_tmpl$4", "Show", "For", "EventCard", "props", "displayedAttendees", "attendees", "slice", "remainingCount", "total", "attendeeCount", "length", "displayed", "_$ssr", "_tmpl$9", "_$escape", "class", "_$createComponent", "Show", "when", "decorationImage", "children", "_tmpl$", "_$ssrAttribute", "image", "_tmpl$2", "title", "date", "author", "_tmpl$5", "_tmpl$3", "_tmpl$4", "_tmpl$7", "For", "each", "attendee", "Avatar", "src", "avatar", "alt", "name", "size", "_tmpl$6", "actions", "_tmpl$8", "EventListItem", "_tmpl$10", "_tmpl$0", "subtitle", "_tmpl$1", "Show", "For", "CalendarCard", "props", "displayedFollowers", "followers", "slice", "remainingCount", "total", "followerCount", "length", "displayed", "_$ssr", "_tmpl$5", "_$escape", "class", "_$createComponent", "Show", "when", "image", "children", "_tmpl$", "_$ssrAttribute", "title", "tags", "_tmpl$2", "For", "each", "tag", "Chip", "text", "variant", "_tmpl$4", "follower", "index", "_tmpl$6", "name", "_tmpl$3", "ProjectCard", "props", "size", "inactive", "cardContent", "_$ssr", "_tmpl$", "_$escape", "name", "_tmpl$2", "_$ssrAttribute", "imageSrc", "imageAlt", "cardClasses", "class", "href", "_tmpl$3", "_tmpl$4", "splitProps", "PageLayout", "props", "local", "rest", "classes", "base", "header", "withHeader", "custom", "class", "filter", "Boolean", "join", "_$ssrElement", "_$mergeProps", "_$escape", "children"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"sources":["../src/button/Button.tsx","../src/badge/index.tsx","../src/alert/index.tsx","../src/avatar/index.tsx","../src/switch/index.tsx","../src/switch/ToggleSwitch.tsx","../src/checkbox/index.tsx","../src/radio/index.tsx","../src/dialog/Dialog.tsx","../src/icon/icons/GitHubIcon.tsx","../src/icon/index.tsx","../src/tooltip/index.tsx","../src/popover/index.tsx","../src/textfield/index.tsx","../../solid-stately/src/utils/reactivity.ts","../../solid-stately/src/textfield/createTextFieldState.ts","../../solid-stately/src/numberfield/createNumberFieldState.ts","../../solid-stately/src/searchfield/createSearchFieldState.ts","../../solid-stately/src/slider/createSliderState.ts","../src/link/index.tsx","../src/progress-bar/index.tsx","../src/separator/index.tsx","../src/toolbar/index.tsx","../src/autocomplete/index.tsx","../src/select/index.tsx","../src/menu/index.tsx","../src/listbox/index.tsx","../src/tabs/index.tsx","../src/breadcrumbs/index.tsx","../src/numberfield/index.tsx","../src/searchfield/index.tsx","../src/slider/index.tsx","../src/combobox/index.tsx","../src/toast/index.tsx","../src/disclosure/index.tsx","../src/meter/index.tsx","../src/tag-group/index.tsx","../src/calendar/index.tsx","../src/calendar/RangeCalendar.tsx","../src/calendar/DateField.tsx","../src/calendar/TimeField.tsx","../src/calendar/DatePicker.tsx","../src/table/index.tsx","../src/gridlist/index.tsx","../src/tree/index.tsx","../src/color/index.tsx","../src/landmark/index.tsx","../src/custom/chip/index.tsx","../src/custom/nav-header/index.tsx","../src/custom/logo/index.tsx","../src/custom/header/index.tsx","../src/custom/lateral-nav/index.tsx","../src/custom/timeline-item/index.tsx","../src/custom/conversation/index.tsx","../src/custom/profile-card/index.tsx","../src/custom/event-card/index.tsx","../src/custom/calendar-card/index.tsx","../src/custom/project-card/index.tsx","../src/custom/page-layout/index.tsx"],"sourcesContent":["/**\n * Button component for proyecto-viviana-ui\n *\n * A styled button component built on top of solidaria-components.\n * This component only handles styling - all behavior and accessibility\n * is provided by the headless Button from solidaria-components.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps } from 'solid-js';\nimport { Button as HeadlessButton, type ButtonRenderProps } from '@proyecto-viviana/solidaria-components';\nimport type { ButtonProps } from './types';\n\n/**\n * Buttons allow users to perform an action or to navigate to another page.\n * They have multiple styles for various needs, and are ideal for calling attention to\n * where a user needs to do something in order to move forward in a flow.\n *\n * Built on solidaria-components Button for full accessibility support.\n * Styles are defined in components.css using the vui-button class system.\n */\nexport function Button(props: ButtonProps): JSX.Element {\n const defaultProps: Partial<ButtonProps> = {\n variant: 'primary',\n buttonStyle: 'fill',\n size: 'md',\n };\n\n const merged = solidMergeProps(defaultProps, props);\n\n const [local, headlessProps] = splitProps(merged, [\n 'variant',\n 'buttonStyle',\n 'size',\n 'fullWidth',\n 'staticColor',\n 'class',\n ]);\n\n // Generate class based on render props\n const getClassName = (renderProps: ButtonRenderProps): string => {\n const classList = [\n 'vui-button',\n `vui-button--${local.buttonStyle}`,\n `vui-button--${local.variant}`,\n `vui-button--${local.size}`,\n ];\n\n if (renderProps.isPressed) {\n classList.push('is-pressed');\n }\n\n if (local.fullWidth) {\n classList.push('vui-button--full-width');\n }\n\n if (local.class) {\n classList.push(local.class);\n }\n\n return classList.join(' ');\n };\n\n return (\n <HeadlessButton\n {...headlessProps}\n class={getClassName}\n data-variant={local.variant}\n data-style={local.buttonStyle}\n data-static-color={local.staticColor || undefined}\n >\n {props.children}\n </HeadlessButton>\n );\n}\n","import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'danger'\nexport type BadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BadgeProps {\n children?: JSX.Element\n count?: number\n variant?: BadgeVariant\n size?: BadgeSize\n class?: string\n}\n\nconst variantStyles: Record<BadgeVariant, string> = {\n primary: 'bg-primary-500 text-white',\n secondary: 'bg-bg-300 text-primary-300',\n accent: 'bg-accent-300 text-black',\n success: 'bg-success-400 text-white',\n warning: 'bg-warning-400 text-black',\n danger: 'bg-danger-400 text-white',\n}\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: 'w-5 h-5 text-xs',\n md: 'w-7 h-7 text-xs',\n lg: 'w-9 h-9 text-sm',\n}\n\nexport function Badge(props: BadgeProps) {\n const variant = () => props.variant ?? 'accent'\n const size = () => props.size ?? 'md'\n\n return (\n <div\n class={`flex items-center justify-center rounded-full border-b border-white font-semibold ${variantStyles[variant()]} ${sizeStyles[size()]} ${props.class ?? ''}`}\n >\n <Show when={props.count !== undefined} fallback={props.children}>\n <span>{props.count}</span>\n </Show>\n </div>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps {\n children: JSX.Element\n variant?: AlertVariant\n title?: string\n dismissible?: boolean\n onDismiss?: () => void\n class?: string\n}\n\nconst variantStyles: Record<AlertVariant, string> = {\n info: 'bg-primary-700 text-primary-200 border border-primary-500',\n success: 'bg-success-600 text-success-100 border border-success-400',\n warning: 'bg-warning-600 text-warning-100 border border-warning-400',\n error: 'bg-danger-600 text-danger-100 border border-danger-400',\n}\n\nexport function Alert(props: AlertProps) {\n const variant = () => props.variant ?? 'info'\n\n return (\n <div\n class={`flex items-center min-h-[50px] font-normal rounded-lg px-4 py-2 ${variantStyles[variant()]} ${props.class ?? ''}`}\n role=\"alert\"\n >\n <div class=\"flex items-center gap-3 flex-1\">\n <Show when={props.title}>\n <span class=\"font-semibold font-jost\">{props.title}</span>\n <span class=\"opacity-50\">|</span>\n </Show>\n <div class=\"flex-1\">{props.children}</div>\n <Show when={props.dismissible}>\n <button\n class=\"hover:opacity-70 transition-opacity ml-2\"\n onClick={props.onDismiss}\n aria-label=\"Dismiss\"\n >\n ✕\n </button>\n </Show>\n </div>\n </div>\n )\n}\n","import { Show } from 'solid-js'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n size?: AvatarSize\n fallback?: string\n online?: boolean\n class?: string\n}\n\nconst sizeStyles: Record<AvatarSize, { container: string; text: string; indicator: string }> = {\n xs: { container: 'w-6 h-6', text: 'text-xs', indicator: 'w-1.5 h-1.5' },\n sm: { container: 'w-8 h-8', text: 'text-sm', indicator: 'w-2 h-2' },\n md: { container: 'w-10 h-10', text: 'text-base', indicator: 'w-2.5 h-2.5' },\n lg: { container: 'w-14 h-14', text: 'text-lg', indicator: 'w-3 h-3' },\n xl: { container: 'w-20 h-20', text: 'text-xl', indicator: 'w-4 h-4' },\n}\n\nexport function Avatar(props: AvatarProps) {\n const size = () => props.size ?? 'md'\n const styles = () => sizeStyles[size()]\n\n const initials = () => {\n if (props.fallback) return props.fallback.slice(0, 2).toUpperCase()\n if (props.alt) return props.alt.slice(0, 2).toUpperCase()\n return '?'\n }\n\n return (\n <div class={`relative inline-block ${props.class ?? ''}`}>\n <div\n class={`${styles().container} rounded-full overflow-hidden bg-bg-200 flex items-center justify-center ring-2 ring-accent/50`}\n >\n <Show\n when={props.src}\n fallback={\n <span class={`${styles().text} font-medium text-primary-300`}>\n {initials()}\n </span>\n }\n >\n <img\n src={props.src}\n alt={props.alt ?? 'Avatar'}\n class=\"w-full h-full object-cover\"\n />\n </Show>\n </div>\n <Show when={props.online !== undefined}>\n <span\n class={`absolute bottom-0 right-0 ${styles().indicator} rounded-full ring-2 ring-bg-400 ${\n props.online ? 'bg-success-400' : 'bg-bg-light'\n }`}\n />\n </Show>\n </div>\n )\n}\n\nexport interface AvatarGroupProps {\n children: any\n max?: number\n size?: AvatarSize\n}\n\nexport function AvatarGroup(props: AvatarGroupProps) {\n return (\n <div class=\"flex -space-x-2\">\n {props.children}\n </div>\n )\n}\n","/**\n * Switch components for proyecto-viviana-ui\n *\n * This file exports:\n * - ToggleSwitch: The primary switch component built on solidaria-components\n * (named to avoid conflict with SolidJS's built-in Switch)\n * - TabSwitch: A custom two-option tab selector\n */\n\nimport { type JSX, createSignal, createEffect } from 'solid-js'\n\n// Re-export ToggleSwitch (the solidaria-components based switch)\nexport { ToggleSwitch, type ToggleSwitchProps, type SwitchSize } from './ToggleSwitch'\n\n// ============================================\n// TAB SWITCH (Two-option selector)\n// ============================================\n\ninterface SwitchOption {\n label: string\n value: string\n}\n\nexport interface TabSwitchProps {\n options: SwitchOption[]\n value?: string\n onChange?: (value: string) => void\n class?: string\n}\n\n/**\n * A tab-style switch that allows users to select between two options.\n * This is a custom component, not based on solidaria/react-aria.\n */\nexport function TabSwitch(props: TabSwitchProps): JSX.Element {\n const [leftSelected, setLeftSelected] = createSignal(\n props.value ? props.value === props.options[0]?.value : true\n )\n\n createEffect(() => {\n if (props.value !== undefined) {\n setLeftSelected(props.value === props.options[0]?.value)\n }\n })\n\n const toggle = () => {\n const newLeftSelected = !leftSelected()\n setLeftSelected(newLeftSelected)\n const newValue = newLeftSelected ? props.options[0]?.value : props.options[1]?.value\n if (newValue) {\n props.onChange?.(newValue)\n }\n }\n\n const leftSelectedStyle = 'left-0 w-[142px] border-l-2'\n const rightSelectedStyle = 'left-[142px] w-[108px] border-r-2'\n const textSelected = 'font-extrabold text-primary-300'\n const textUnselected = 'font-medium text-primary-600 tracking-wider'\n\n return (\n <div\n onClick={toggle}\n class={`relative bg-bg-400 rounded-full w-[250px] cursor-pointer ${props.class ?? ''}`}\n >\n <div\n class={`${\n leftSelected() ? leftSelectedStyle : rightSelectedStyle\n } transition-all duration-500 ease-in-out z-0 absolute bg-primary-600 rounded-full h-8 border-accent-300`}\n />\n <div class=\"flex z-10 h-8 justify-around\">\n <button\n type=\"button\"\n class={`${\n leftSelected() ? textSelected : textUnselected\n } transition-all ease-in-out duration-500 z-10 text-lg flex justify-center items-center pointer-events-none`}\n >\n <span>{props.options[0]?.label ?? 'TENDENCIAS'}</span>\n </button>\n <button\n type=\"button\"\n class={`${\n leftSelected() ? textUnselected : textSelected\n } transition-all ease-in-out duration-500 z-10 text-lg flex justify-center items-center pointer-events-none`}\n >\n <span>{props.options[1]?.label ?? 'ÚLTIMOS'}</span>\n </button>\n </div>\n </div>\n )\n}\n","/**\n * ToggleSwitch component for proyecto-viviana-ui\n *\n * A styled switch component built on top of solidaria-components.\n * This component only handles styling - all behavior and accessibility\n * is provided by the headless Switch from solidaria-components.\n *\n * Named \"ToggleSwitch\" to avoid conflict with SolidJS's built-in Switch component.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps } from 'solid-js';\nimport { ToggleSwitch as HeadlessToggleSwitch, type ToggleSwitchProps as HeadlessToggleSwitchProps, type ToggleSwitchRenderProps } from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\nexport interface ToggleSwitchProps extends Omit<HeadlessToggleSwitchProps, 'class' | 'children'> {\n /** The size of the switch. */\n size?: SwitchSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label text for the switch. */\n children?: JSX.Element;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-5 w-9',\n thumb: 'h-4 w-4',\n translate: 'translate-x-4',\n },\n md: {\n track: 'h-6 w-11',\n thumb: 'h-5 w-5',\n translate: 'translate-x-5',\n },\n lg: {\n track: 'h-7 w-14',\n thumb: 'h-6 w-6',\n translate: 'translate-x-7',\n },\n};\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A switch allows users to toggle between two mutually exclusive states.\n *\n * Built on solidaria-components Switch for full accessibility support.\n * Named \"ToggleSwitch\" to avoid conflict with SolidJS's built-in Switch component.\n */\nexport function ToggleSwitch(props: ToggleSwitchProps): JSX.Element {\n const defaultProps: Partial<ToggleSwitchProps> = {\n size: 'md',\n };\n\n const merged = solidMergeProps(defaultProps, props);\n\n const [local, headlessProps] = splitProps(merged, [\n 'size',\n 'class',\n ]);\n\n const size = () => sizeStyles[local.size!];\n\n // Generate class based on render props\n const getClassName = (renderProps: ToggleSwitchRenderProps): string => {\n const base = 'inline-flex items-center gap-2 cursor-pointer';\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed opacity-50' : '';\n const custom = local.class || '';\n return [base, disabledClass, custom].filter(Boolean).join(' ');\n };\n\n return (\n <HeadlessToggleSwitch\n {...headlessProps}\n class={getClassName}\n >\n {(renderProps: ToggleSwitchRenderProps) => (\n <>\n <span\n class={[\n 'relative rounded-full transition-colors duration-200',\n 'focus-within:ring-2 focus-within:ring-accent-300 focus-within:ring-offset-2 focus-within:ring-offset-bg-400',\n size().track,\n renderProps.isSelected ? 'bg-accent' : 'bg-bg-300',\n renderProps.isDisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n ].join(' ')}\n >\n <span\n class={[\n 'absolute top-0.5 left-0.5 rounded-full bg-white shadow transition-transform duration-200',\n size().thumb,\n renderProps.isSelected ? size().translate : 'translate-x-0',\n ].join(' ')}\n />\n </span>\n {props.children && <span class=\"text-primary-200\">{props.children}</span>}\n </>\n )}\n </HeadlessToggleSwitch>\n );\n}\n","/**\n * Checkbox component for proyecto-viviana-ui\n *\n * A styled checkbox component built on top of solidaria-components.\n * This component only handles styling - all behavior and accessibility\n * is provided by the headless Checkbox from solidaria-components.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n Checkbox as HeadlessCheckbox,\n CheckboxGroup as HeadlessCheckboxGroup,\n type CheckboxProps as HeadlessCheckboxProps,\n type CheckboxGroupProps as HeadlessCheckboxGroupProps,\n type CheckboxRenderProps,\n type CheckboxGroupRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg'\n\nexport interface CheckboxProps extends Omit<HeadlessCheckboxProps, 'class' | 'children' | 'style'> {\n /** The size of the checkbox. */\n size?: CheckboxSize\n /** Additional CSS class name. */\n class?: string\n /** Label text for the checkbox. */\n children?: JSX.Element\n}\n\nexport interface CheckboxGroupProps extends Omit<HeadlessCheckboxGroupProps, 'class' | 'children' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Children checkboxes. */\n children?: JSX.Element\n /** Label for the group. */\n label?: string\n /** Description for the group. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n box: 'h-4 w-4',\n icon: 'h-3 w-3',\n label: 'text-sm',\n },\n md: {\n box: 'h-5 w-5',\n icon: 'h-3.5 w-3.5',\n label: 'text-base',\n },\n lg: {\n box: 'h-6 w-6',\n icon: 'h-4 w-4',\n label: 'text-lg',\n },\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction CheckIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 12 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 5L4.5 8.5L11 1\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction IndeterminateIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 12 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1H11\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n )\n}\n\n// ============================================\n// CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A checkbox allows users to select one or more items from a set.\n *\n * Built on solidaria-components Checkbox for full accessibility support.\n */\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n const defaultProps: Partial<CheckboxProps> = {\n size: 'md',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, headlessProps] = splitProps(merged, [\n 'size',\n 'class',\n 'children',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Generate class based on render props\n const getClassName = (renderProps: CheckboxRenderProps): string => {\n const base = 'inline-flex items-center gap-2 cursor-pointer'\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed opacity-50' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessCheckbox\n {...headlessProps}\n class={getClassName}\n >\n {(renderProps: CheckboxRenderProps) => {\n const boxClasses = () => {\n const base = 'relative flex items-center justify-center rounded border-2 transition-all duration-200'\n const sizeClass = size().box\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200'\n } else if (renderProps.isSelected || renderProps.isIndeterminate) {\n colorClass = 'border-accent bg-accent'\n } else {\n colorClass = 'border-primary-600 bg-transparent hover:border-accent-300'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n const cursorClass = renderProps.isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\n\n return [base, sizeClass, colorClass, focusClass, cursorClass].filter(Boolean).join(' ')\n }\n\n const iconClasses = () => {\n const base = 'text-white transition-opacity duration-200'\n const sizeClass = size().icon\n const visibilityClass = (renderProps.isSelected || renderProps.isIndeterminate)\n ? 'opacity-100'\n : 'opacity-0'\n\n return [base, sizeClass, visibilityClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'text-primary-200'\n const sizeClass = size().label\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n\n return [base, sizeClass, disabledClass].filter(Boolean).join(' ')\n }\n\n return (\n <>\n <span class={boxClasses()}>\n <Show\n when={!renderProps.isIndeterminate}\n fallback={<IndeterminateIcon class={iconClasses()} />}\n >\n <CheckIcon class={iconClasses()} />\n </Show>\n </span>\n <Show when={props.children}>\n <span class={labelClasses()}>{props.children}</span>\n </Show>\n </>\n )\n }}\n </HeadlessCheckbox>\n )\n}\n\n// ============================================\n// CHECKBOX GROUP COMPONENT\n// ============================================\n\n/**\n * A checkbox group allows users to select multiple items from a list.\n *\n * Built on solidaria-components CheckboxGroup for full accessibility support.\n */\nexport function CheckboxGroup(props: CheckboxGroupProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n ])\n\n // Generate class based on render props\n const getClassName = (renderProps: CheckboxGroupRenderProps): string => {\n const base = 'flex flex-col gap-2'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n // Render children function for the headless component\n const renderChildren = (renderProps: CheckboxGroupRenderProps) => (\n <>\n <Show when={local.label}>\n <span class=\"text-sm font-medium text-primary-200\">{local.label}</span>\n </Show>\n <div class=\"flex flex-col gap-2\">\n {props.children}\n </div>\n <Show when={local.description && !renderProps.isInvalid}>\n <span class=\"text-sm text-primary-400\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && renderProps.isInvalid}>\n <span class=\"text-sm text-danger-400\">{local.errorMessage}</span>\n </Show>\n </>\n )\n\n return (\n <HeadlessCheckboxGroup\n {...headlessProps}\n class={getClassName}\n children={renderChildren as any}\n />\n )\n}\n","/**\n * RadioGroup and Radio components for proyecto-viviana-ui\n *\n * Styled radio components built on top of solidaria-components.\n * SSR-compatible - renders children and UI elements directly without render props.\n */\n\nimport { type JSX, Show, createContext, useContext, splitProps } from 'solid-js'\nimport {\n RadioGroup as HeadlessRadioGroup,\n Radio as HeadlessRadio,\n type RadioGroupProps as HeadlessRadioGroupProps,\n type RadioProps as HeadlessRadioProps,\n type RadioGroupRenderProps,\n type RadioRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type RadioGroupOrientation = 'horizontal' | 'vertical'\nexport type RadioGroupSize = 'sm' | 'md' | 'lg'\n\nconst RadioSizeContext = createContext<RadioGroupSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface RadioGroupProps extends Omit<HeadlessRadioGroupProps, 'class' | 'style'> {\n /** The size of the radio buttons. */\n size?: RadioGroupSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the group. */\n label?: string\n /** Description for the group. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n}\n\nexport interface RadioProps extends Omit<HeadlessRadioProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n circle: 'h-4 w-4',\n dot: 'h-2 w-2',\n label: 'text-sm',\n },\n md: {\n circle: 'h-5 w-5',\n dot: 'h-2.5 w-2.5',\n label: 'text-base',\n },\n lg: {\n circle: 'h-6 w-6',\n dot: 'h-3 w-3',\n label: 'text-lg',\n },\n}\n\n// ============================================\n// RADIO GROUP COMPONENT\n// ============================================\n\n/**\n * A radio group allows users to select a single option from a list of mutually exclusive options.\n *\n * Built on solidaria-components RadioGroup for full accessibility support.\n */\nexport function RadioGroup(props: RadioGroupProps): JSX.Element {\n // Split out our custom styling props from the rest\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n\n // Generate class based on render props\n const getClassName = (renderProps: RadioGroupRenderProps): string => {\n const base = 'flex gap-2'\n const orientationClass = renderProps.orientation === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, orientationClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n // Pass remaining props through to headless component\n // headlessProps maintains reactivity for controlled values like value/onChange\n return (\n <RadioSizeContext.Provider value={size}>\n <HeadlessRadioGroup\n {...headlessProps}\n class={getClassName}\n data-size={size}\n >\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium mb-1\">{local.label}</span>\n </Show>\n {props.children as JSX.Element}\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm [&:has(~[data-invalid])]:hidden\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage}>\n <span class=\"text-danger-400 text-sm hidden [[data-invalid]_&]:block\">{local.errorMessage}</span>\n </Show>\n </HeadlessRadioGroup>\n </RadioSizeContext.Provider>\n )\n}\n\n// ============================================\n// RADIO COMPONENT\n// ============================================\n\n/**\n * A radio button allows users to select a single option from a list.\n * Must be used within a RadioGroup.\n * SSR-compatible - renders static JSX without render prop children.\n *\n * Note: Unlike other styled components, Radio does not use render props for children.\n * Instead, it relies on data attributes set by the headless Radio component for styling.\n * However, since we need dynamic styling based on state, we accept that this component\n * has some limitations compared to the render-props-based original implementation.\n *\n * Built on solidaria-components Radio for full accessibility support.\n */\nexport function Radio(props: RadioProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const sizeFromContext = useContext(RadioSizeContext)\n const sizeStyle = sizeStyles[sizeFromContext]\n const customClass = local.class ?? ''\n\n // Generate class based on render props\n const getClassName = (renderProps: RadioRenderProps): string => {\n const base = 'inline-flex items-center gap-2'\n const cursorClass = renderProps.isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, cursorClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n // Static classes - will use a simplified visual style since we can't dynamically style based on state without render props\n const circleClass = `relative flex items-center justify-center rounded-full border-2 transition-all duration-200 ${sizeStyle.circle} border-primary-600 bg-transparent hover:border-accent-300`\n const dotClass = `rounded-full bg-accent transition-all duration-200 ${sizeStyle.dot}`\n const labelClass = `text-primary-200 ${sizeStyle.label}`\n\n return (\n <HeadlessRadio\n {...headlessProps}\n class={getClassName}\n >\n <span class={circleClass}>\n <span class={dotClass} />\n </span>\n <Show when={props.children}>\n <span class={labelClass}>{props.children as JSX.Element}</span>\n </Show>\n </HeadlessRadio>\n )\n}\n","/**\n * Dialog component for proyecto-viviana-ui\n *\n * Styled dialog component with overlay and backdrop.\n * Follows Spectrum 2 design patterns.\n */\n\nimport { type JSX, splitProps, Show, createSignal, createContext, useContext, createUniqueId, onMount, onCleanup, createEffect } from 'solid-js'\nimport { Portal } from 'solid-js/web'\nimport { createInteractOutside } from '@proyecto-viviana/solidaria'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type DialogSize = 'sm' | 'md' | 'lg' | 'fullscreen'\n\nexport interface DialogProps {\n /** The size of the dialog. */\n size?: DialogSize\n /** Whether the dialog can be dismissed by clicking the X button. */\n isDismissable?: boolean\n /** Additional CSS class name. */\n class?: string\n /** The title of the dialog. */\n title?: string\n /** The children content. */\n children: JSX.Element\n /** Callback when dialog should close */\n onClose?: () => void\n /** ARIA role - defaults to 'dialog' */\n role?: 'dialog' | 'alertdialog'\n /** ARIA label */\n 'aria-label'?: string\n /** ARIA labelledby */\n 'aria-labelledby'?: string\n}\n\nexport interface DialogTriggerProps {\n /** Button to trigger the dialog. */\n trigger: JSX.Element\n /** The dialog content - receives close function. */\n content: (close: () => void) => JSX.Element\n /** Whether the dialog is controlled. */\n isOpen?: boolean\n /** Callback when open state changes. */\n onOpenChange?: (isOpen: boolean) => void\n /** Whether clicking outside the dialog closes it. Defaults to true. */\n isDismissable?: boolean\n /** Whether pressing Escape closes the dialog. Defaults to true. */\n isKeyboardDismissDisabled?: boolean\n}\n\n// ============================================\n// CONTEXT\n// ============================================\n\ninterface DialogContextValue {\n close: () => void\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nexport function useDialogContext(): DialogContextValue | null {\n return useContext(DialogContext)\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles: Record<DialogSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-2xl',\n fullscreen: 'max-w-full w-full h-full',\n}\n\n// ============================================\n// DIALOG COMPONENT\n// ============================================\n\n/**\n * A dialog is an overlay shown above other content in an application.\n */\nexport function Dialog(props: DialogProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'isDismissable',\n 'class',\n 'title',\n 'onClose',\n 'role',\n 'aria-label',\n 'aria-labelledby',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n const role = local.role ?? 'dialog'\n\n // Generate a unique ID for the title if one is present\n const titleId = createUniqueId()\n const ariaLabelledBy = local['aria-labelledby'] ?? (local.title ? titleId : undefined)\n\n const close = () => local.onClose?.()\n\n const baseClass = 'bg-bg-300 rounded-lg shadow-xl border border-primary-700'\n const sizeClass = sizeStyles[size]\n const padding = 'p-6'\n const className = [baseClass, sizeClass, padding, customClass].filter(Boolean).join(' ')\n\n return (\n <DialogContext.Provider value={{ close }}>\n <div\n role={role}\n tabIndex={-1}\n aria-label={local['aria-label']}\n aria-labelledby={ariaLabelledBy}\n class={className}\n {...rest}\n >\n <Show when={local.title}>\n <div class=\"flex items-center justify-between mb-4\">\n <h2 id={titleId} class=\"text-xl font-semibold text-primary-100\">\n {local.title}\n </h2>\n <Show when={local.isDismissable}>\n <button\n onClick={close}\n class=\"text-primary-400 hover:text-primary-200 transition-colors\"\n aria-label=\"Close dialog\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </Show>\n </div>\n </Show>\n <div class=\"text-primary-200\">\n {props.children}\n </div>\n </div>\n </DialogContext.Provider>\n )\n}\n\n// ============================================\n// DIALOG TRIGGER COMPONENT\n// ============================================\n\n/**\n * DialogTrigger wraps a trigger button and dialog content.\n * Handles opening/closing the dialog with overlay and backdrop.\n */\nexport function DialogTrigger(props: DialogTriggerProps): JSX.Element {\n const [isOpen, setIsOpen] = createSignal(props.isOpen ?? false)\n let dialogRef: HTMLDivElement | undefined\n\n const open = () => {\n setIsOpen(true)\n props.onOpenChange?.(true)\n }\n\n const close = () => {\n setIsOpen(false)\n props.onOpenChange?.(false)\n }\n\n // Handle controlled state\n const isOpenControlled = () => props.isOpen !== undefined ? props.isOpen : isOpen()\n\n // Whether dismissable (defaults to true)\n const isDismissable = () => props.isDismissable !== false\n\n // Click outside to close\n createInteractOutside({\n ref: () => dialogRef ?? null,\n onInteractOutside: () => {\n if (isOpenControlled() && isDismissable()) {\n close()\n }\n },\n isDisabled: !isOpenControlled() || !isDismissable(),\n })\n\n // Escape key to close\n onMount(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpenControlled() && !props.isKeyboardDismissDisabled) {\n e.preventDefault()\n e.stopPropagation()\n close()\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n onCleanup(() => document.removeEventListener('keydown', handleKeyDown))\n })\n\n // Prevent background scroll when dialog is open\n createEffect(() => {\n if (!isOpenControlled()) return\n\n const prevOverflow = document.documentElement.style.overflow\n document.documentElement.style.overflow = 'hidden'\n\n onCleanup(() => {\n document.documentElement.style.overflow = prevOverflow\n })\n })\n\n return (\n <>\n <div onClick={open}>\n {props.trigger}\n </div>\n\n <Show when={isOpenControlled()}>\n <Portal>\n {/* Backdrop */}\n <div\n class=\"fixed inset-0 bg-black/50 backdrop-blur-sm z-40\"\n aria-hidden=\"true\"\n />\n\n {/* Dialog container - pointer-events-none so clicks pass through to backdrop detection */}\n <div class=\"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none\">\n {/* Dialog wrapper - pointer-events-auto to capture clicks on the dialog itself */}\n <div ref={dialogRef} class=\"pointer-events-auto\">\n {props.content(close)}\n </div>\n </div>\n </Portal>\n </Show>\n </>\n )\n}\n\n// ============================================\n// DIALOG FOOTER COMPONENT\n// ============================================\n\nexport interface DialogFooterProps {\n /** Footer content, typically buttons. */\n children: JSX.Element\n /** Additional CSS class. */\n class?: string\n}\n\n/**\n * Footer section for dialog actions.\n */\nexport function DialogFooter(props: DialogFooterProps): JSX.Element {\n return (\n <div class={`flex gap-3 justify-end mt-6 pt-4 border-t border-primary-700 ${props.class ?? ''}`}>\n {props.children}\n </div>\n )\n}\n","import type { JSX } from 'solid-js';\n\nexport interface GitHubIconProps {\n size?: number;\n color?: string;\n}\n\nexport function GitHubIcon(props: GitHubIconProps): JSX.Element {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={props.size}\n height={props.size}\n fill={props.color}\n aria-hidden=\"true\"\n >\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n </svg>\n );\n}\n","import type { Component, JSX } from 'solid-js'\n\nexport interface IconProps {\n /** The icon component to render (should accept size and color props) */\n icon: Component<{ size?: string | number; color?: string }>\n /** Size of the icon (e.g., '24px' or 24) */\n size?: string | number\n /** Color of the icon */\n color?: string\n /** Whether to show the accent shadow effect (4px offset to bottom) */\n withShadow?: boolean\n /** Additional CSS class */\n class?: string\n /** Click handler */\n onClick?: () => void\n}\n\n/**\n * Icon wrapper component with optional accent shadow effect.\n *\n * The shadow effect creates a 4px offset accent-colored duplicate\n * of the icon behind it for a stylized look.\n */\nexport function Icon(props: IconProps): JSX.Element {\n const size = () => props.size ?? 24\n const color = () => props.color ?? 'var(--color-primary-500)'\n const IconComponent = props.icon\n\n return (\n <div\n class={`vui-icon ${props.withShadow ? 'vui-icon--with-shadow' : ''} ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n {props.withShadow && (\n <div class=\"vui-icon__shadow\">\n <IconComponent size={size()} color=\"var(--color-accent)\" />\n </div>\n )}\n <div class=\"vui-icon__main\">\n <IconComponent size={size()} color={color()} />\n </div>\n </div>\n )\n}\n\n// Re-export common icons\nexport { GitHubIcon } from './icons/GitHubIcon'\nexport type { GitHubIconProps } from './icons/GitHubIcon'\n","/**\n * Tooltip component for proyecto-viviana-ui\n *\n * A tooltip displays a description of an element on hover or focus.\n * Built on top of solidaria-components for accessibility.\n */\n\nimport { type JSX, Show, splitProps } from 'solid-js'\nimport {\n Tooltip as HeadlessTooltip,\n TooltipTrigger as HeadlessTooltipTrigger,\n type TooltipProps as HeadlessTooltipProps,\n type TooltipTriggerComponentProps as HeadlessTooltipTriggerProps,\n type TooltipRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right'\nexport type TooltipVariant = 'default' | 'neutral' | 'info'\n\nexport interface TooltipTriggerProps extends HeadlessTooltipTriggerProps {\n /** The children of the tooltip trigger (trigger element and tooltip). */\n children: JSX.Element\n}\n\nexport interface TooltipProps extends Omit<HeadlessTooltipProps, 'class' | 'style' | 'children'> {\n /** The content of the tooltip. */\n children: JSX.Element\n /** The position of the tooltip relative to the trigger. */\n placement?: TooltipPlacement\n /** Visual variant of the tooltip. */\n variant?: TooltipVariant\n /** Additional CSS class name. */\n class?: string\n /** Whether to show an arrow pointing to the trigger. */\n showArrow?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\n// Note: Position is now calculated by the headless layer (solidaria-components)\n// so we don't need CSS positioning classes here\nconst baseStyles = [\n 'px-3 py-2 rounded-lg',\n 'text-sm font-medium',\n 'shadow-lg',\n 'pointer-events-auto',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95',\n].join(' ')\n\nconst variantStyles: Record<TooltipVariant, string> = {\n default: 'bg-neutral-900 text-white dark:bg-neutral-100 dark:text-neutral-900',\n neutral: 'bg-neutral-800 text-neutral-100 dark:bg-neutral-200 dark:text-neutral-900',\n info: 'bg-blue-600 text-white dark:bg-blue-500',\n}\n\nconst arrowStyles: Record<TooltipPlacement, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-l-transparent border-r-transparent border-b-transparent',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-l-transparent border-r-transparent border-t-transparent',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-full border-t-transparent border-b-transparent border-r-transparent',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-full border-t-transparent border-b-transparent border-l-transparent',\n}\n\nconst getArrowBorderColor = (variant: TooltipVariant): string => {\n const colors: Record<TooltipVariant, string> = {\n default: 'border-neutral-900 dark:border-neutral-100',\n neutral: 'border-neutral-800 dark:border-neutral-200',\n info: 'border-blue-600 dark:border-blue-500',\n }\n return colors[variant]\n}\n\n// ============================================\n// COMPONENTS\n// ============================================\n\n/**\n * TooltipTrigger wraps around a trigger element and a Tooltip.\n * It handles opening and closing the Tooltip when the user hovers\n * over or focuses the trigger.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Hover me</Button>\n * <Tooltip>This is helpful information</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport function TooltipTrigger(props: TooltipTriggerProps): JSX.Element {\n return <HeadlessTooltipTrigger {...props} />\n}\n\n/**\n * Styled tooltip component that displays a description on hover or focus.\n *\n * @example\n * ```tsx\n * <TooltipTrigger>\n * <Button>Save</Button>\n * <Tooltip placement=\"top\">Save your changes</Tooltip>\n * </TooltipTrigger>\n * ```\n */\nexport function Tooltip(props: TooltipProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'placement',\n 'variant',\n 'class',\n 'showArrow',\n ])\n\n const placement = () => local.placement ?? 'top'\n const variant = () => local.variant ?? 'default'\n\n return (\n <HeadlessTooltip\n {...rest}\n placement={placement()}\n class={(_renderProps: TooltipRenderProps) => {\n const classes = [\n baseStyles,\n variantStyles[variant()],\n local.class ?? '',\n ].filter(Boolean).join(' ')\n return classes\n }}\n >\n {(renderProps: TooltipRenderProps) => (\n <>\n {props.children}\n <Show when={local.showArrow}>\n <div\n class={[\n 'absolute w-0 h-0 border-4',\n arrowStyles[renderProps.placement ?? placement()],\n getArrowBorderColor(variant()),\n ].join(' ')}\n />\n </Show>\n </>\n )}\n </HeadlessTooltip>\n )\n}\n\n// ============================================\n// SIMPLE CSS-ONLY TOOLTIP (Legacy)\n// ============================================\n\nexport interface SimpleTooltipProps {\n /** The content to show in the tooltip */\n label: string\n /** The trigger element */\n children: JSX.Element\n /** Position of the tooltip */\n position?: 'top' | 'bottom'\n /** Additional CSS class */\n class?: string\n}\n\n/**\n * Simple CSS-only tooltip component.\n * Uses CSS hover effect for performance. No JS state management.\n *\n * @deprecated Use the accessible Tooltip + TooltipTrigger components instead.\n *\n * @example\n * ```tsx\n * <SimpleTooltip label=\"Save your changes\">\n * <button>Save</button>\n * </SimpleTooltip>\n * ```\n */\nexport function SimpleTooltip(props: SimpleTooltipProps): JSX.Element {\n const position = () => props.position ?? 'bottom'\n\n return (\n <div class={`vui-tooltip ${props.class ?? ''}`}>\n <div class=\"vui-tooltip__trigger\">\n {props.children}\n </div>\n <div class={`vui-tooltip__content vui-tooltip__content--${position()}`}>\n <span>{props.label}</span>\n </div>\n </div>\n )\n}\n\n// Re-export types\nexport type { TooltipRenderProps }\n","/**\n * Popover component for proyecto-viviana-ui\n *\n * A popover displays content in an overlay positioned relative to a trigger.\n * Built on top of solidaria-components for accessibility.\n * Follows Spectrum 2 design patterns.\n */\n\nimport { type JSX, Show, splitProps } from 'solid-js'\nimport {\n Popover as HeadlessPopover,\n PopoverTrigger as HeadlessPopoverTrigger,\n OverlayArrow as HeadlessOverlayArrow,\n type PopoverProps as HeadlessPopoverProps,\n type PopoverTriggerProps as HeadlessPopoverTriggerProps,\n type PopoverRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Placement, PlacementAxis } from '@proyecto-viviana/solidaria'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type PopoverPlacement = Placement\nexport type PopoverSize = 'sm' | 'md' | 'lg'\n\nexport interface PopoverTriggerProps extends HeadlessPopoverTriggerProps {\n /** The children of the popover trigger (trigger element and popover). */\n children: JSX.Element\n}\n\nexport interface PopoverProps extends Omit<HeadlessPopoverProps, 'class' | 'style' | 'children'> {\n /** The content of the popover. */\n children: JSX.Element\n /** The position of the popover relative to the trigger. */\n placement?: PopoverPlacement\n /** Size variant of the popover. */\n size?: PopoverSize\n /** Additional CSS class name. */\n class?: string\n /** Whether to show an arrow pointing to the trigger. */\n showArrow?: boolean\n /** Custom padding inside the popover. */\n padding?: 'none' | 'sm' | 'md' | 'lg'\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst baseStyles = [\n 'bg-bg-300',\n 'rounded-lg',\n 'shadow-xl',\n 'border border-primary-700',\n 'text-primary-200',\n 'outline-none',\n // Animation\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[placement=top]:slide-in-from-bottom-2',\n 'data-[placement=bottom]:slide-in-from-top-2',\n 'data-[placement=left]:slide-in-from-right-2',\n 'data-[placement=right]:slide-in-from-left-2',\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95',\n].join(' ')\n\nconst sizeStyles: Record<PopoverSize, string> = {\n sm: 'max-w-xs',\n md: 'max-w-sm',\n lg: 'max-w-lg',\n}\n\nconst paddingStyles: Record<string, string> = {\n none: '',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n}\n\n// Arrow styles based on placement\nconst arrowBaseStyles = [\n 'fill-bg-300',\n 'stroke-primary-700',\n 'stroke-1',\n].join(' ')\n\n// Arrow positioning for each placement axis\nconst getArrowRotation = (placement: PlacementAxis | null): string => {\n switch (placement) {\n case 'top':\n return 'rotate-180'\n case 'bottom':\n return ''\n case 'left':\n return 'rotate-90'\n case 'right':\n return '-rotate-90'\n default:\n return ''\n }\n}\n\n// ============================================\n// COMPONENTS\n// ============================================\n\n/**\n * PopoverTrigger wraps around a trigger element and a Popover.\n * It handles opening and closing the Popover when the user interacts\n * with the trigger.\n *\n * @example\n * ```tsx\n * <PopoverTrigger>\n * <Button>Open Popover</Button>\n * <Popover>\n * <p>Popover content here!</p>\n * </Popover>\n * </PopoverTrigger>\n * ```\n */\nexport function PopoverTrigger(props: PopoverTriggerProps): JSX.Element {\n return <HeadlessPopoverTrigger {...props} />\n}\n\n/**\n * Styled popover component that displays content in an overlay.\n *\n * @example\n * ```tsx\n * <PopoverTrigger>\n * <Button>Settings</Button>\n * <Popover placement=\"bottom\" size=\"md\">\n * <h3>Settings</h3>\n * <p>Configure your preferences here.</p>\n * </Popover>\n * </PopoverTrigger>\n * ```\n */\nexport function Popover(props: PopoverProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'placement',\n 'size',\n 'class',\n 'showArrow',\n 'padding',\n ])\n\n const placement = () => local.placement ?? 'bottom'\n const size = () => local.size ?? 'md'\n const padding = () => local.padding ?? 'md'\n\n return (\n <HeadlessPopover\n {...rest}\n placement={placement()}\n class={(_renderProps: PopoverRenderProps) => {\n const classes = [\n baseStyles,\n sizeStyles[size()],\n paddingStyles[padding()],\n local.class ?? '',\n ].filter(Boolean).join(' ')\n return classes\n }}\n >\n {(renderProps: PopoverRenderProps) => (\n <>\n <Show when={local.showArrow}>\n <PopoverArrow placement={renderProps.placement} />\n </Show>\n {props.children}\n </>\n )}\n </HeadlessPopover>\n )\n}\n\n/**\n * Arrow component for the popover.\n * Automatically positions itself based on the popover placement.\n */\ninterface PopoverArrowProps {\n /** The current placement axis. */\n placement: PlacementAxis | null\n /** Additional CSS class. */\n class?: string\n}\n\nfunction PopoverArrow(props: PopoverArrowProps): JSX.Element {\n return (\n <HeadlessOverlayArrow\n class=\"absolute block\"\n style={{\n // Position based on placement\n ...(props.placement === 'top' && { bottom: '100%', left: '50%', transform: 'translateX(-50%)' }),\n ...(props.placement === 'bottom' && { top: '-8px', left: '50%', transform: 'translateX(-50%)' }),\n ...(props.placement === 'left' && { right: '100%', top: '50%', transform: 'translateY(-50%)' }),\n ...(props.placement === 'right' && { left: '-8px', top: '50%', transform: 'translateY(-50%)' }),\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n class={`${arrowBaseStyles} ${getArrowRotation(props.placement)} ${props.class ?? ''}`}\n >\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </HeadlessOverlayArrow>\n )\n}\n\n// ============================================\n// POPOVER CONTENT SECTIONS\n// ============================================\n\nexport interface PopoverHeaderProps {\n /** The title of the popover. */\n title: string\n /** Optional description text. */\n description?: string\n /** Additional CSS class. */\n class?: string\n}\n\n/**\n * Header section for popover with title and optional description.\n */\nexport function PopoverHeader(props: PopoverHeaderProps): JSX.Element {\n return (\n <div class={`mb-3 ${props.class ?? ''}`}>\n <h3 class=\"text-lg font-semibold text-primary-100\">{props.title}</h3>\n <Show when={props.description}>\n <p class=\"text-sm text-primary-400 mt-1\">{props.description}</p>\n </Show>\n </div>\n )\n}\n\nexport interface PopoverFooterProps {\n /** Footer content, typically buttons. */\n children: JSX.Element\n /** Additional CSS class. */\n class?: string\n}\n\n/**\n * Footer section for popover actions.\n */\nexport function PopoverFooter(props: PopoverFooterProps): JSX.Element {\n return (\n <div class={`flex gap-2 justify-end mt-4 pt-3 border-t border-primary-700 ${props.class ?? ''}`}>\n {props.children}\n </div>\n )\n}\n\n// Re-export types\nexport type { PopoverRenderProps, Placement, PlacementAxis }\n","/**\n * TextField component for proyecto-viviana-ui\n *\n * A styled text field component built on solidaria hooks directly.\n * This bypasses solidaria-components for now due to context timing issues.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createTextField,\n createFocusRing,\n type AriaTextFieldProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createTextFieldState,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TextFieldSize = 'sm' | 'md' | 'lg'\nexport type TextFieldVariant = 'outline' | 'filled'\n\nexport interface TextFieldProps extends Omit<AriaTextFieldProps, 'children'> {\n /** The size of the text field. */\n size?: TextFieldSize\n /** The visual variant of the text field. */\n variant?: TextFieldVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** Error message shown when invalid. */\n errorMessage?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n input: 'h-8 px-2 text-sm',\n label: 'text-sm',\n description: 'text-xs',\n },\n md: {\n input: 'h-10 px-3 text-base',\n label: 'text-sm',\n description: 'text-sm',\n },\n lg: {\n input: 'h-12 px-4 text-lg',\n label: 'text-base',\n description: 'text-sm',\n },\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A text field allows users to enter a plain text value with a keyboard.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function TextField(props: TextFieldProps): JSX.Element {\n const defaultProps: Partial<TextFieldProps> = {\n size: 'md',\n variant: 'outline',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Create text field state\n const state = createTextFieldState(() => ({\n value: ariaProps.value,\n defaultValue: ariaProps.defaultValue,\n onChange: ariaProps.onChange,\n }))\n\n // Create text field aria props\n const textFieldAria = createTextField(() => ({\n ...ariaProps,\n value: state.value(),\n onChange: state.setValue,\n }))\n\n // Create focus ring\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const inputClasses = () => {\n const base = 'w-full rounded-md transition-all duration-200 outline-none'\n const sizeClass = size().input\n\n let variantClass: string\n if (local.variant === 'filled') {\n variantClass = 'bg-bg-200 border border-transparent'\n } else {\n variantClass = 'bg-transparent border border-bg-400'\n }\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (textFieldAria.isInvalid) {\n stateClass = 'border-danger-500 focus:border-danger-400 focus:ring-2 focus:ring-danger-400/20'\n } else {\n stateClass = 'text-primary-100 placeholder:text-primary-500 focus:border-accent focus:ring-2 focus:ring-accent/20'\n }\n\n const hoverClass = ariaProps.isDisabled ? '' : 'hover:border-accent-300'\n\n return [base, sizeClass, variantClass, stateClass, hoverClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'block font-medium text-primary-200 mb-1'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const descriptionClasses = () => {\n const base = 'mt-1 text-primary-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const errorClasses = () => {\n const base = 'mt-1 text-danger-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n // Clean props - remove ref to avoid type conflicts\n const cleanLabelProps = () => {\n const { ref: _ref, ...rest } = textFieldAria.labelProps as Record<string, unknown>\n return rest\n }\n const cleanInputProps = () => {\n const { ref: _ref1, ...rest } = textFieldAria.inputProps as Record<string, unknown>\n const { ref: _ref2, ...focusRest } = focusProps as Record<string, unknown>\n return { ...rest, ...focusRest }\n }\n const cleanDescriptionProps = () => {\n const { ref: _ref, ...rest } = textFieldAria.descriptionProps as Record<string, unknown>\n return rest\n }\n const cleanErrorMessageProps = () => {\n const { ref: _ref, ...rest } = textFieldAria.errorMessageProps as Record<string, unknown>\n return rest\n }\n\n return (\n <div\n class={containerClasses()}\n data-disabled={ariaProps.isDisabled || undefined}\n data-invalid={textFieldAria.isInvalid || undefined}\n data-readonly={ariaProps.isReadOnly || undefined}\n data-required={ariaProps.isRequired || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n >\n <Show when={local.label}>\n <label {...cleanLabelProps()} class={labelClasses()}>\n {local.label}\n <Show when={ariaProps.isRequired}>\n <span class=\"text-danger-400 ml-0.5\">*</span>\n </Show>\n </label>\n </Show>\n\n <input {...cleanInputProps()} class={inputClasses()} />\n\n <Show when={local.description && !textFieldAria.isInvalid}>\n <p {...cleanDescriptionProps()} class={descriptionClasses()}>\n {local.description}\n </p>\n </Show>\n\n <Show when={local.errorMessage && textFieldAria.isInvalid}>\n <p {...cleanErrorMessageProps()} class={errorClasses()}>\n {local.errorMessage}\n </p>\n </Show>\n </div>\n )\n}\n","/**\n * Reactivity utilities for Solid Stately\n *\n * Provides type-safe utilities for working with SolidJS reactivity patterns.\n */\n\nimport { Accessor } from 'solid-js';\n\n/**\n * A value that may be either a raw value or an accessor function.\n * This is a common pattern in SolidJS for props that may be reactive.\n */\nexport type MaybeAccessor<T> = T | Accessor<T>;\n\n/**\n * Unwraps a MaybeAccessor to get the underlying value.\n * If the input is a function, it calls it to get the value.\n * Otherwise, it returns the value directly.\n *\n * @param value - The value or accessor to unwrap.\n */\nexport function access<T>(value: MaybeAccessor<T>): T {\n return typeof value === 'function' ? (value as Accessor<T>)() : value;\n}\n\n/**\n * A value that may be undefined or an accessor that returns the value or undefined.\n */\nexport type MaybeAccessorValue<T> = T | undefined | Accessor<T | undefined>;\n\n/**\n * Checks if a value is an accessor function.\n */\nexport function isAccessor<T>(value: MaybeAccessor<T>): value is Accessor<T> {\n return typeof value === 'function';\n}\n","/**\n * TextField state for Solid Stately\n *\n * Provides state management for text input components.\n *\n * This is a port of @react-stately/utils's useControlledState pattern\n * as used by @react-aria/textfield.\n */\n\nimport { createSignal, Accessor } from 'solid-js';\nimport { type MaybeAccessor, access } from '../utils';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TextFieldStateOptions {\n /** The current value (controlled). */\n value?: string;\n /** The default value (uncontrolled). */\n defaultValue?: string;\n /** Handler that is called when the value changes. */\n onChange?: (value: string) => void;\n}\n\nexport interface TextFieldState {\n /** The current value of the text field. */\n readonly value: Accessor<string>;\n /** Sets the value of the text field. */\n setValue(value: string): void;\n}\n\n// ============================================\n// IMPLEMENTATION\n// ============================================\n\n/**\n * Provides state management for text input components.\n * Supports both controlled and uncontrolled modes.\n */\nexport function createTextFieldState(props: MaybeAccessor<TextFieldStateOptions> = {}): TextFieldState {\n const getProps = () => access(props);\n\n // Get initial value\n const initialProps = getProps();\n const initialValue = initialProps.value ?? initialProps.defaultValue ?? '';\n\n // Create internal signal for uncontrolled mode\n const [internalValue, setInternalValue] = createSignal(initialValue);\n\n // Determine if controlled\n const isControlled = () => getProps().value !== undefined;\n\n // Get current value\n const value: Accessor<string> = () => {\n const p = getProps();\n return isControlled() ? (p.value ?? '') : internalValue();\n };\n\n // Update value\n function setValue(newValue: string): void {\n const p = getProps();\n\n if (!isControlled()) {\n setInternalValue(newValue);\n }\n\n p.onChange?.(newValue);\n }\n\n return {\n value,\n setValue,\n };\n}\n","/**\n * State management for NumberField.\n * Based on @react-stately/numberfield useNumberFieldState.\n */\n\nimport { createSignal, createMemo, type Accessor } from 'solid-js';\nimport { access, type MaybeAccessor } from '../utils';\n\nexport interface NumberFieldStateProps {\n /** The current value (controlled). */\n value?: number;\n /** The default value (uncontrolled). */\n defaultValue?: number;\n /** Handler called when the value changes. */\n onChange?: (value: number) => void;\n /** The minimum value. */\n minValue?: number;\n /** The maximum value. */\n maxValue?: number;\n /** The step value for increment/decrement. */\n step?: number;\n /** Whether the field is disabled. */\n isDisabled?: boolean;\n /** Whether the field is read-only. */\n isReadOnly?: boolean;\n /** The locale for number formatting. */\n locale?: string;\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions;\n}\n\nexport interface NumberFieldState {\n /** The current input value as a string. */\n inputValue: Accessor<string>;\n /** The current numeric value. */\n numberValue: Accessor<number>;\n /** Whether the value can be incremented. */\n canIncrement: Accessor<boolean>;\n /** Whether the value can be decremented. */\n canDecrement: Accessor<boolean>;\n /** Whether the field is disabled. */\n isDisabled: Accessor<boolean>;\n /** Whether the field is read-only. */\n isReadOnly: Accessor<boolean>;\n /** The minimum value. */\n minValue: Accessor<number | undefined>;\n /** The maximum value. */\n maxValue: Accessor<number | undefined>;\n /** Set the input value. */\n setInputValue: (value: string) => void;\n /** Validate a partial input value. */\n validate: (value: string) => boolean;\n /** Commit the current input value. */\n commit: () => void;\n /** Increment the value by step. */\n increment: () => void;\n /** Decrement the value by step. */\n decrement: () => void;\n /** Set to maximum value. */\n incrementToMax: () => void;\n /** Set to minimum value. */\n decrementToMin: () => void;\n}\n\n/**\n * Handles decimal operations to avoid floating point errors.\n */\nfunction handleDecimalOperation(\n operator: '+' | '-',\n value1: number,\n value2: number\n): number {\n // Find the number of decimal places\n const getDecimals = (n: number) => {\n const str = String(n);\n const idx = str.indexOf('.');\n return idx === -1 ? 0 : str.length - idx - 1;\n };\n\n const decimals = Math.max(getDecimals(value1), getDecimals(value2));\n const multiplier = Math.pow(10, decimals);\n\n const int1 = Math.round(value1 * multiplier);\n const int2 = Math.round(value2 * multiplier);\n\n const result = operator === '+' ? int1 + int2 : int1 - int2;\n return result / multiplier;\n}\n\n/**\n * Clamps a value between min and max.\n */\nfunction clamp(value: number, min?: number, max?: number): number {\n let result = value;\n if (min != null && result < min) result = min;\n if (max != null && result > max) result = max;\n return result;\n}\n\n/**\n * Snaps a value to the nearest step.\n */\nfunction snapToStep(value: number, step: number, min?: number): number {\n const base = min ?? 0;\n const diff = value - base;\n const steps = Math.round(diff / step);\n return handleDecimalOperation('+', base, steps * step);\n}\n\n/**\n * Creates state for a number field.\n */\nexport function createNumberFieldState(\n props: MaybeAccessor<NumberFieldStateProps>\n): NumberFieldState {\n const getProps = () => access(props);\n\n // Get locale and formatter\n const locale = () => getProps().locale ?? 'en-US';\n const formatOptions = () => getProps().formatOptions ?? {};\n\n // Create number formatter\n const formatter = createMemo(() => {\n return new Intl.NumberFormat(locale(), formatOptions());\n });\n\n // Create number parser (simplified - real implementation would be more robust)\n const parseNumber = (value: string): number => {\n if (!value || value === '' || value === '-') return NaN;\n\n // Handle locale-specific decimal separators\n const opts = formatOptions();\n const testNumber = formatter().format(1.1);\n const decimalSeparator = testNumber.charAt(1);\n\n // Normalize the input\n let normalized = value;\n if (decimalSeparator !== '.') {\n normalized = normalized.replace(decimalSeparator, '.');\n }\n\n // Remove grouping separators and currency symbols\n normalized = normalized.replace(/[^\\d.\\-]/g, '');\n\n const parsed = parseFloat(normalized);\n return parsed;\n };\n\n // Format a number to string\n const formatNumber = (value: number): string => {\n if (isNaN(value)) return '';\n return formatter().format(value);\n };\n\n // Determine step value\n const step = createMemo(() => {\n const p = getProps();\n if (p.step != null) return p.step;\n // Default step for percent is 0.01\n if (p.formatOptions?.style === 'percent') return 0.01;\n return 1;\n });\n\n // Internal signals\n const [inputValue, setInputValueInternal] = createSignal<string>('');\n const [numberValue, setNumberValue] = createSignal<number>(NaN);\n\n // Initialize from props\n const initValue = () => {\n const p = getProps();\n const initial = p.value ?? p.defaultValue;\n if (initial != null) {\n setNumberValue(initial);\n setInputValueInternal(formatNumber(initial));\n }\n };\n\n // Call init on first access\n let initialized = false;\n const ensureInitialized = () => {\n if (!initialized) {\n initialized = true;\n initValue();\n }\n };\n\n // Controlled mode: sync with props.value\n const actualNumberValue = createMemo(() => {\n ensureInitialized();\n const p = getProps();\n if (p.value !== undefined) {\n return p.value;\n }\n return numberValue();\n });\n\n // Validate partial input\n const validate = (value: string): boolean => {\n if (value === '' || value === '-') return true;\n\n // Allow partial decimal input like \"1.\"\n const opts = formatOptions();\n const testNumber = formatter().format(1.1);\n const decimalSeparator = testNumber.charAt(1);\n\n // Check if it's a valid partial number\n const pattern = new RegExp(\n `^-?\\\\d*${decimalSeparator === '.' ? '\\\\.' : decimalSeparator}?\\\\d*$`\n );\n return pattern.test(value);\n };\n\n // Set input value with validation\n const setInputValue = (value: string) => {\n ensureInitialized();\n setInputValueInternal(value);\n };\n\n // Commit the current input value\n const commit = () => {\n ensureInitialized();\n const p = getProps();\n const input = inputValue();\n\n if (input === '' || input === '-') {\n // Clear value\n setNumberValue(NaN);\n setInputValueInternal('');\n return;\n }\n\n let parsed = parseNumber(input);\n\n if (isNaN(parsed)) {\n // Invalid input - revert to current value\n setInputValueInternal(formatNumber(actualNumberValue()));\n return;\n }\n\n // Clamp and snap\n parsed = clamp(parsed, p.minValue, p.maxValue);\n parsed = snapToStep(parsed, step(), p.minValue);\n\n // Update state\n setNumberValue(parsed);\n setInputValueInternal(formatNumber(parsed));\n\n // Notify change\n if (p.value === undefined) {\n p.onChange?.(parsed);\n } else {\n p.onChange?.(parsed);\n }\n };\n\n // Check if can increment\n const canIncrement = createMemo(() => {\n ensureInitialized();\n const p = getProps();\n if (p.isDisabled || p.isReadOnly) return false;\n\n const current = actualNumberValue();\n if (isNaN(current)) return true; // Can start from min\n\n if (p.maxValue == null) return true;\n return handleDecimalOperation('+', current, step()) <= p.maxValue;\n });\n\n // Check if can decrement\n const canDecrement = createMemo(() => {\n ensureInitialized();\n const p = getProps();\n if (p.isDisabled || p.isReadOnly) return false;\n\n const current = actualNumberValue();\n if (isNaN(current)) return true; // Can start from max\n\n if (p.minValue == null) return true;\n return handleDecimalOperation('-', current, step()) >= p.minValue;\n });\n\n // Increment by step\n const increment = () => {\n ensureInitialized();\n const p = getProps();\n if (p.isDisabled || p.isReadOnly) return;\n\n let current = actualNumberValue();\n\n if (isNaN(current)) {\n // Start from min or 0\n current = p.minValue ?? 0;\n } else {\n // Snap and increment\n current = snapToStep(current, step(), p.minValue);\n current = handleDecimalOperation('+', current, step());\n }\n\n // Clamp\n current = clamp(current, p.minValue, p.maxValue);\n\n // Update\n setNumberValue(current);\n setInputValueInternal(formatNumber(current));\n p.onChange?.(current);\n };\n\n // Decrement by step\n const decrement = () => {\n ensureInitialized();\n const p = getProps();\n if (p.isDisabled || p.isReadOnly) return;\n\n let current = actualNumberValue();\n\n if (isNaN(current)) {\n // Start from max or 0\n current = p.maxValue ?? 0;\n } else {\n // Snap and decrement\n current = snapToStep(current, step(), p.minValue);\n current = handleDecimalOperation('-', current, step());\n }\n\n // Clamp\n current = clamp(current, p.minValue, p.maxValue);\n\n // Update\n setNumberValue(current);\n setInputValueInternal(formatNumber(current));\n p.onChange?.(current);\n };\n\n // Set to max\n const incrementToMax = () => {\n ensureInitialized();\n const p = getProps();\n if (p.isDisabled || p.isReadOnly) return;\n\n if (p.maxValue == null) return;\n\n const snapped = snapToStep(p.maxValue, step(), p.minValue);\n setNumberValue(snapped);\n setInputValueInternal(formatNumber(snapped));\n p.onChange?.(snapped);\n };\n\n // Set to min\n const decrementToMin = () => {\n ensureInitialized();\n const p = getProps();\n if (p.isDisabled || p.isReadOnly) return;\n\n if (p.minValue == null) return;\n\n setNumberValue(p.minValue);\n setInputValueInternal(formatNumber(p.minValue));\n p.onChange?.(p.minValue);\n };\n\n return {\n get inputValue() {\n ensureInitialized();\n return inputValue;\n },\n get numberValue() {\n return actualNumberValue;\n },\n canIncrement,\n canDecrement,\n isDisabled: () => getProps().isDisabled ?? false,\n isReadOnly: () => getProps().isReadOnly ?? false,\n minValue: () => getProps().minValue,\n maxValue: () => getProps().maxValue,\n setInputValue,\n validate,\n commit,\n increment,\n decrement,\n incrementToMax,\n decrementToMin,\n };\n}\n","/**\n * Creates state for a search field component.\n * Based on @react-stately/searchfield useSearchFieldState.\n */\n\nimport { type Accessor, createSignal, createMemo } from 'solid-js';\nimport { access, type MaybeAccessor } from '../utils';\n\nexport interface SearchFieldStateProps {\n /** The current value (controlled). */\n value?: string;\n /** The default value (uncontrolled). */\n defaultValue?: string;\n /** Handler that is called when the value changes. */\n onChange?: (value: string) => void;\n}\n\nexport interface SearchFieldState {\n /** The current value of the search field. */\n value: Accessor<string>;\n /** Sets the value of the search field. */\n setValue: (value: string) => void;\n}\n\n/**\n * Provides state management for a search field.\n */\nexport function createSearchFieldState(\n props: MaybeAccessor<SearchFieldStateProps>\n): SearchFieldState {\n const getProps = () => access(props);\n\n // Controlled vs uncontrolled\n const isControlled = () => getProps().value !== undefined;\n\n // Internal signal for uncontrolled mode\n const [internalValue, setInternalValue] = createSignal(\n getProps().defaultValue ?? ''\n );\n\n // Current value accessor\n const value = createMemo(() => {\n const p = getProps();\n return isControlled() ? (p.value ?? '') : internalValue();\n });\n\n // Set value function\n const setValue = (newValue: string) => {\n const p = getProps();\n\n if (!isControlled()) {\n setInternalValue(newValue);\n }\n\n p.onChange?.(newValue);\n };\n\n return {\n value,\n setValue,\n };\n}\n","/**\n * Creates state for a slider component.\n * Based on @react-stately/slider useSliderState.\n */\n\nimport { type Accessor, createSignal, createMemo } from 'solid-js';\nimport { access, type MaybeAccessor } from '../utils';\n\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\nexport interface SliderStateProps {\n /** The current value (controlled). */\n value?: number;\n /** The default value (uncontrolled). */\n defaultValue?: number;\n /** Handler called when the value changes. */\n onChange?: (value: number) => void;\n /** Handler called when the user stops dragging. */\n onChangeEnd?: (value: number) => void;\n /** The minimum value. */\n minValue?: number;\n /** The maximum value. */\n maxValue?: number;\n /** The step value. */\n step?: number;\n /** The orientation of the slider. */\n orientation?: SliderOrientation;\n /** Whether the slider is disabled. */\n isDisabled?: boolean;\n /** The locale for number formatting. */\n locale?: string;\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions;\n}\n\nexport interface SliderState {\n /** The current value. */\n value: Accessor<number>;\n /** Sets the value. */\n setValue: (value: number) => void;\n /** Sets the value by percent (0-1). */\n setValuePercent: (percent: number) => void;\n /** Gets the value as a percent (0-1). */\n getValuePercent: Accessor<number>;\n /** Gets the formatted value string. */\n getFormattedValue: Accessor<string>;\n /** Whether the thumb is being dragged. */\n isDragging: Accessor<boolean>;\n /** Sets the dragging state. */\n setDragging: (dragging: boolean) => void;\n /** Whether the slider is focused. */\n isFocused: Accessor<boolean>;\n /** Sets the focused state. */\n setFocused: (focused: boolean) => void;\n /** Increments the value by step. */\n increment: (stepMultiplier?: number) => void;\n /** Decrements the value by step. */\n decrement: (stepMultiplier?: number) => void;\n /** The minimum value. */\n minValue: number;\n /** The maximum value. */\n maxValue: number;\n /** The step value. */\n step: number;\n /** The page step (larger step for Page Up/Down). */\n pageStep: number;\n /** The orientation. */\n orientation: SliderOrientation;\n /** Whether the slider is disabled. */\n isDisabled: boolean;\n}\n\nconst DEFAULT_MIN = 0;\nconst DEFAULT_MAX = 100;\nconst DEFAULT_STEP = 1;\n\n/**\n * Clamps a value between min and max.\n */\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Snaps a value to the nearest step.\n */\nfunction snapToStep(value: number, min: number, max: number, step: number): number {\n const snapped = Math.round((value - min) / step) * step + min;\n // Handle floating point precision issues\n const decimalPlaces = (step.toString().split('.')[1] || '').length;\n const rounded = parseFloat(snapped.toFixed(decimalPlaces));\n return clamp(rounded, min, max);\n}\n\n/**\n * Provides state management for a slider component.\n */\nexport function createSliderState(\n props: MaybeAccessor<SliderStateProps>\n): SliderState {\n const getProps = () => access(props);\n\n // Get static values with defaults\n const minValue = getProps().minValue ?? DEFAULT_MIN;\n const maxValue = getProps().maxValue ?? DEFAULT_MAX;\n const step = getProps().step ?? DEFAULT_STEP;\n const orientation = getProps().orientation ?? 'horizontal';\n const isDisabled = getProps().isDisabled ?? false;\n\n // Calculate page step (10% of range, snapped to step)\n const pageStep = Math.max(step, snapToStep((maxValue - minValue) / 10, 0, maxValue - minValue, step));\n\n // Controlled vs uncontrolled\n const isControlled = () => getProps().value !== undefined;\n\n // Internal signal for uncontrolled mode\n const [internalValue, setInternalValue] = createSignal(\n snapToStep(getProps().defaultValue ?? minValue, minValue, maxValue, step)\n );\n\n // Dragging and focus state\n const [isDragging, setIsDragging] = createSignal(false);\n const [isFocused, setIsFocused] = createSignal(false);\n\n // Current value accessor\n const value = createMemo(() => {\n const p = getProps();\n const rawValue = isControlled() ? (p.value ?? minValue) : internalValue();\n return snapToStep(rawValue, minValue, maxValue, step);\n });\n\n // Value as percent (0-1)\n const getValuePercent = createMemo(() => {\n return (value() - minValue) / (maxValue - minValue);\n });\n\n // Formatted value\n const getFormattedValue = createMemo(() => {\n const p = getProps();\n const formatter = new Intl.NumberFormat(p.locale, p.formatOptions);\n return formatter.format(value());\n });\n\n // Set value function\n const setValue = (newValue: number) => {\n if (isDisabled) return;\n\n const p = getProps();\n const snappedValue = snapToStep(newValue, minValue, maxValue, step);\n\n if (!isControlled()) {\n setInternalValue(snappedValue);\n }\n\n p.onChange?.(snappedValue);\n };\n\n // Set value by percent\n const setValuePercent = (percent: number) => {\n const clampedPercent = clamp(percent, 0, 1);\n const newValue = clampedPercent * (maxValue - minValue) + minValue;\n setValue(newValue);\n };\n\n // Dragging state management\n const setDragging = (dragging: boolean) => {\n const wasDragging = isDragging();\n setIsDragging(dragging);\n\n // Call onChangeEnd when dragging stops\n if (wasDragging && !dragging) {\n getProps().onChangeEnd?.(value());\n }\n };\n\n // Increment/decrement\n const increment = (stepMultiplier = 1) => {\n if (isDisabled) return;\n setValue(value() + step * stepMultiplier);\n };\n\n const decrement = (stepMultiplier = 1) => {\n if (isDisabled) return;\n setValue(value() - step * stepMultiplier);\n };\n\n // Set focused state\n const setFocused = (focused: boolean) => {\n setIsFocused(focused);\n };\n\n return {\n value,\n setValue,\n setValuePercent,\n getValuePercent,\n getFormattedValue,\n isDragging,\n setDragging,\n isFocused,\n setFocused,\n increment,\n decrement,\n minValue,\n maxValue,\n step,\n pageStep,\n orientation,\n isDisabled,\n };\n}\n","/**\n * Link component for proyecto-viviana-ui\n *\n * Styled link component built on top of solidaria-components.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n Link as HeadlessLink,\n type LinkProps as HeadlessLinkProps,\n type LinkRenderProps,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type LinkVariant = 'primary' | 'secondary' | 'subtle';\n\nexport interface LinkProps extends Omit<HeadlessLinkProps, 'class' | 'style' | 'children'> {\n /** The visual style of the link. @default 'primary' */\n variant?: LinkVariant;\n /** Whether the link is on its own vs inside a longer string of text. */\n isStandalone?: boolean;\n /** Whether the link should be displayed with a quiet style (no underline by default). */\n isQuiet?: boolean;\n /** Additional CSS class name. */\n class?: string;\n /** The content of the link. */\n children?: JSX.Element;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst variantStyles = {\n primary: 'text-accent hover:text-accent-300',\n secondary: 'text-primary-300 hover:text-primary-200',\n subtle: 'text-primary-400 hover:text-primary-300',\n};\n\n// ============================================\n// LINK COMPONENT\n// ============================================\n\n/**\n * Links allow users to navigate to a different location.\n * They can be presented inline inside a paragraph or as standalone text.\n *\n * Built on solidaria-components Link for full accessibility support.\n *\n * @example\n * ```tsx\n * <Link href=\"/about\">About Us</Link>\n *\n * // Secondary variant\n * <Link href=\"/help\" variant=\"secondary\">Help</Link>\n *\n * // Standalone (bold, no underline until hover)\n * <Link href=\"/home\" isStandalone isQuiet>Home</Link>\n * ```\n */\nexport function Link(props: LinkProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'variant',\n 'isStandalone',\n 'isQuiet',\n 'class',\n ]);\n\n const variant = local.variant ?? 'primary';\n const customClass = local.class ?? '';\n\n // Generate class based on render props\n const getClassName = (renderProps: LinkRenderProps): string => {\n const base = 'transition-colors duration-200 cursor-pointer rounded-sm outline-none';\n\n // Variant colors\n const variantClass = variantStyles[variant];\n\n // Underline behavior\n let underlineClass: string;\n if (local.isStandalone && local.isQuiet) {\n // Quiet standalone: no underline by default, underline on hover/focus\n underlineClass = renderProps.isHovered || renderProps.isFocusVisible\n ? 'underline'\n : 'no-underline';\n } else {\n // Inline links always have underline for accessibility\n underlineClass = 'underline';\n }\n\n // Font weight for standalone\n const weightClass = local.isStandalone ? 'font-medium' : '';\n\n // Focus ring\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : '';\n\n // Disabled state\n const disabledClass = renderProps.isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n // Pressed state\n const pressedClass = renderProps.isPressed ? 'opacity-80' : '';\n\n return [\n base,\n variantClass,\n underlineClass,\n weightClass,\n focusClass,\n disabledClass,\n pressedClass,\n customClass,\n ].filter(Boolean).join(' ');\n };\n\n return (\n <HeadlessLink\n {...headlessProps}\n class={getClassName}\n >\n {props.children}\n </HeadlessLink>\n );\n}\n","/**\n * ProgressBar component for proyecto-viviana-ui\n *\n * Styled progress bar component built on top of the solidaria hook directly.\n */\n\nimport { type JSX, splitProps, Show, createMemo } from 'solid-js';\nimport { createProgressBar } from '@proyecto-viviana/solidaria';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\nexport type ProgressBarVariant = 'primary' | 'accent' | 'success' | 'warning' | 'danger';\n\nexport interface ProgressBarProps {\n /** The current value (controlled). @default 0 */\n value?: number;\n /** The smallest value allowed. @default 0 */\n minValue?: number;\n /** The largest value allowed. @default 100 */\n maxValue?: number;\n /** The content to display as the value's label (e.g. \"1 of 4\"). */\n valueLabel?: string;\n /** Whether presentation is indeterminate when progress isn't known. */\n isIndeterminate?: boolean;\n /** The size of the progress bar. @default 'md' */\n size?: ProgressBarSize;\n /** The visual style variant. @default 'primary' */\n variant?: ProgressBarVariant;\n /** The label to display above the progress bar. */\n label?: string;\n /** Whether to show the value text. @default true for determinate progress */\n showValueLabel?: boolean;\n /** Additional CSS class name. */\n class?: string;\n /** An accessibility label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-1',\n text: 'text-xs',\n },\n md: {\n track: 'h-2',\n text: 'text-sm',\n },\n lg: {\n track: 'h-3',\n text: 'text-base',\n },\n};\n\nconst variantStyles = {\n primary: 'bg-primary-500',\n accent: 'bg-accent',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n};\n\n// ============================================\n// UTILITIES\n// ============================================\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n// ============================================\n// PROGRESSBAR COMPONENT\n// ============================================\n\n/**\n * Progress bars show either determinate or indeterminate progress of an operation\n * over time.\n *\n * @example\n * ```tsx\n * <ProgressBar value={50} label=\"Loading...\" />\n *\n * // Indeterminate\n * <ProgressBar isIndeterminate label=\"Processing...\" />\n *\n * // Different variants\n * <ProgressBar value={75} variant=\"success\" />\n * ```\n */\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n 'size',\n 'variant',\n 'label',\n 'showValueLabel',\n 'class',\n ]);\n\n const size = () => local.size ?? 'md';\n const variant = () => local.variant ?? 'primary';\n const isIndeterminate = () => ariaProps.isIndeterminate ?? false;\n const showValueLabel = () => local.showValueLabel ?? !isIndeterminate();\n\n // Create progress bar aria props\n const progressAria = createProgressBar({\n get value() { return ariaProps.value; },\n get minValue() { return ariaProps.minValue; },\n get maxValue() { return ariaProps.maxValue; },\n get valueLabel() { return ariaProps.valueLabel; },\n get isIndeterminate() { return ariaProps.isIndeterminate; },\n get label() { return local.label; },\n get 'aria-label'() { return ariaProps['aria-label']; },\n });\n\n // Calculate percentage\n const percentage = createMemo(() => {\n if (isIndeterminate()) {\n return undefined;\n }\n const value = ariaProps.value ?? 0;\n const minValue = ariaProps.minValue ?? 0;\n const maxValue = ariaProps.maxValue ?? 100;\n const clampedValue = clamp(value, minValue, maxValue);\n return ((clampedValue - minValue) / (maxValue - minValue)) * 100;\n });\n\n // Get value text from aria props\n const valueText = () => progressAria.progressBarProps['aria-valuetext'] as string | undefined;\n\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <div\n {...progressAria.progressBarProps}\n class={`w-full ${local.class ?? ''}`}\n >\n {/* Label and value row */}\n <Show when={local.label || showValueLabel()}>\n <div class={`flex justify-between items-center mb-1 ${sizeConfig().text}`}>\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium\">{local.label}</span>\n </Show>\n <Show when={showValueLabel() && !isIndeterminate()}>\n <span class=\"text-primary-300\">{valueText()}</span>\n </Show>\n </div>\n </Show>\n\n {/* Track */}\n <div class={`w-full ${sizeConfig().track} bg-bg-300 rounded-full overflow-hidden`}>\n {/* Fill */}\n <div\n class={`h-full rounded-full transition-all duration-300 ${variantStyles[variant()]} ${\n isIndeterminate() ? 'animate-progress-indeterminate' : ''\n }`}\n style={{\n width: isIndeterminate() ? '30%' : `${percentage()}%`,\n }}\n />\n </div>\n </div>\n );\n}\n","/**\n * Separator component for proyecto-viviana-ui\n *\n * Styled separator component built on top of solidaria hook directly.\n */\n\nimport { type JSX, splitProps, createMemo, Show } from 'solid-js';\nimport { createSeparator, type Orientation } from '@proyecto-viviana/solidaria';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SeparatorVariant = 'default' | 'subtle' | 'strong';\nexport type SeparatorSize = 'sm' | 'md' | 'lg';\n\nexport interface SeparatorProps {\n /** The orientation of the separator. @default 'horizontal' */\n orientation?: Orientation;\n /** The visual style variant. @default 'default' */\n variant?: SeparatorVariant;\n /** The size/thickness of the separator. @default 'md' */\n size?: SeparatorSize;\n /** Additional CSS class name. */\n class?: string;\n /** An accessibility label for the separator. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst variantStyles = {\n default: 'bg-bg-100',\n subtle: 'bg-bg-200',\n strong: 'bg-primary-600',\n};\n\nconst horizontalSizeStyles = {\n sm: 'h-px',\n md: 'h-0.5',\n lg: 'h-1',\n};\n\nconst verticalSizeStyles = {\n sm: 'w-px',\n md: 'w-0.5',\n lg: 'w-1',\n};\n\n// ============================================\n// SEPARATOR COMPONENT\n// ============================================\n\n/**\n * A separator is a visual divider between two groups of content,\n * e.g. groups of menu items or sections of a page.\n *\n * @example\n * ```tsx\n * <Separator />\n *\n * // Vertical separator\n * <div class=\"flex items-center gap-4\">\n * <span>Item 1</span>\n * <Separator orientation=\"vertical\" />\n * <span>Item 2</span>\n * </div>\n *\n * // Different variants\n * <Separator variant=\"strong\" />\n * ```\n */\nexport function Separator(props: SeparatorProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n 'orientation',\n 'variant',\n 'size',\n 'class',\n ]);\n\n const orientation = () => local.orientation ?? 'horizontal';\n const variant = () => local.variant ?? 'default';\n const size = () => local.size ?? 'md';\n\n // Determine the element type\n const elementType = createMemo(() => {\n // If vertical, use div since hr is inherently horizontal\n if (orientation() === 'vertical') {\n return 'div';\n }\n return 'hr';\n });\n\n // Create separator aria props\n const separatorAria = createSeparator({\n get orientation() { return orientation(); },\n get elementType() { return elementType(); },\n get 'aria-label'() { return ariaProps['aria-label']; },\n });\n\n // Build class string\n const className = createMemo(() => {\n const isVertical = orientation() === 'vertical';\n const sizeStyles = isVertical ? verticalSizeStyles : horizontalSizeStyles;\n\n const base = [\n variantStyles[variant()],\n sizeStyles[size()],\n isVertical ? 'h-full self-stretch' : 'w-full',\n 'border-0', // Reset hr default border\n local.class ?? '',\n ];\n\n return base.filter(Boolean).join(' ');\n });\n\n // Extract props without ref to avoid type issues with specific element types\n const getAriaProps = () => {\n const { ref: _, ...props } = separatorAria.separatorProps as Record<string, unknown>;\n return props;\n };\n\n return (\n <Show\n when={orientation() === 'vertical'}\n fallback={\n <hr\n {...getAriaProps()}\n class={className()}\n />\n }\n >\n <div\n {...getAriaProps()}\n class={className()}\n />\n </Show>\n );\n}\n","/**\n * Toolbar component for proyecto-viviana-ui\n *\n * Styled toolbar component built on top of solidaria-components Toolbar.\n */\n\nimport { type JSX, splitProps, createMemo } from 'solid-js'\nimport {\n Toolbar as HeadlessToolbar,\n type ToolbarProps as HeadlessToolbarProps,\n type ToolbarRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type ToolbarSize = 'sm' | 'md' | 'lg'\nexport type ToolbarVariant = 'default' | 'bordered' | 'ghost'\n\nexport interface ToolbarProps extends Omit<HeadlessToolbarProps, 'class' | 'style'> {\n /** The visual variant of the toolbar. @default 'default' */\n variant?: ToolbarVariant\n /** The size of the toolbar. @default 'md' */\n size?: ToolbarSize\n /** Additional CSS class name. */\n class?: string\n /** Inline styles. */\n style?: JSX.CSSProperties\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst baseStyles = 'vui-toolbar inline-flex items-center'\n\nconst variantStyles: Record<ToolbarVariant, string> = {\n default: 'bg-bg-50 rounded-md',\n bordered: 'border border-bg-200 rounded-md',\n ghost: '',\n}\n\nconst sizeStyles: Record<ToolbarSize, string> = {\n sm: 'gap-1 p-1',\n md: 'gap-2 p-2',\n lg: 'gap-3 p-3',\n}\n\nconst orientationStyles = {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n}\n\n// ============================================\n// TOOLBAR COMPONENT\n// ============================================\n\n/**\n * A styled toolbar for grouping interactive controls with keyboard navigation.\n *\n * @example\n * ```tsx\n * <Toolbar aria-label=\"Text formatting\">\n * <Button>Bold</Button>\n * <Button>Italic</Button>\n * <Separator orientation=\"vertical\" />\n * <Button>Align Left</Button>\n * <Button>Align Center</Button>\n * </Toolbar>\n *\n * // Vertical toolbar\n * <Toolbar orientation=\"vertical\" variant=\"bordered\">\n * <Button>Cut</Button>\n * <Button>Copy</Button>\n * <Button>Paste</Button>\n * </Toolbar>\n * ```\n */\nexport function Toolbar(props: ToolbarProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'variant',\n 'size',\n 'class',\n 'style',\n ])\n\n const variant = () => local.variant ?? 'default'\n const size = () => local.size ?? 'md'\n\n const getClassName = (renderProps: ToolbarRenderProps): string => {\n return [\n baseStyles,\n variantStyles[variant()],\n sizeStyles[size()],\n orientationStyles[renderProps.orientation],\n local.class ?? '',\n ].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessToolbar\n {...headlessProps}\n class={getClassName}\n style={local.style}\n />\n )\n}\n","/**\n * SearchAutocomplete component for proyecto-viviana-ui\n *\n * A styled autocomplete component combining a search input with a\n * filterable dropdown list of options.\n */\n\nimport { type JSX, splitProps, createMemo, Show, For, createSignal } from 'solid-js'\nimport {\n Autocomplete,\n useAutocompleteInput,\n useAutocompleteCollection,\n useAutocompleteState,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SearchAutocompleteSize = 'sm' | 'md' | 'lg'\n\nexport interface SearchAutocompleteItem {\n id: string\n name: string\n [key: string]: unknown\n}\n\nexport interface SearchAutocompleteProps<T extends SearchAutocompleteItem = SearchAutocompleteItem> {\n /** The items to display in the dropdown. */\n items: T[]\n /** The size of the autocomplete. @default 'md' */\n size?: SearchAutocompleteSize\n /** Placeholder text for the input. */\n placeholder?: string\n /** Accessible label for the input. */\n 'aria-label'?: string\n /** Label text shown above the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** The current input value (controlled). */\n inputValue?: string\n /** The default input value (uncontrolled). */\n defaultInputValue?: string\n /** Handler called when the input value changes. */\n onInputChange?: (value: string) => void\n /** Handler called when an item is selected. */\n onSelect?: (item: T) => void\n /** Additional CSS class name. */\n class?: string\n /** Whether the input is disabled. */\n isDisabled?: boolean\n /**\n * Custom filter function. By default, filters by case-insensitive name match.\n */\n filter?: (textValue: string, inputValue: string) => boolean\n /**\n * Custom render function for items.\n */\n renderItem?: (item: T) => JSX.Element\n /**\n * Key to use for the display text. @default 'name'\n */\n textKey?: keyof T\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'h-8 px-3 text-sm',\n label: 'text-xs mb-1',\n list: 'max-h-48',\n item: 'px-3 py-1.5 text-sm',\n },\n md: {\n container: 'text-base',\n input: 'h-10 px-4 text-base',\n label: 'text-sm mb-1.5',\n list: 'max-h-64',\n item: 'px-4 py-2 text-base',\n },\n lg: {\n container: 'text-lg',\n input: 'h-12 px-5 text-lg',\n label: 'text-base mb-2',\n list: 'max-h-80',\n item: 'px-5 py-2.5 text-lg',\n },\n}\n\n// ============================================\n// INNER COMPONENTS\n// ============================================\n\nfunction AutocompleteInput(props: {\n placeholder?: string\n 'aria-label'?: string\n isDisabled?: boolean\n size: SearchAutocompleteSize\n}) {\n const ctx = useAutocompleteInput()\n if (!ctx) return null\n\n const styles = () => sizeStyles[props.size]\n\n return (\n <input\n ref={ctx.inputRef}\n type=\"text\"\n placeholder={props.placeholder}\n aria-label={props['aria-label']}\n disabled={props.isDisabled}\n value={ctx.inputProps.value()}\n onInput={(e) => ctx.inputProps.onChange(e.currentTarget.value)}\n onKeyDown={ctx.inputProps.onKeyDown}\n onFocus={ctx.inputProps.onFocus}\n onBlur={ctx.inputProps.onBlur}\n aria-activedescendant={ctx.inputProps['aria-activedescendant']()}\n aria-controls={ctx.inputProps['aria-controls']}\n aria-autocomplete={ctx.inputProps['aria-autocomplete']}\n autocomplete={ctx.inputProps.autoComplete}\n autocorrect={ctx.inputProps.autoCorrect}\n spellcheck={ctx.inputProps.spellCheck !== 'false'}\n class={[\n 'w-full rounded-md border border-bg-200 bg-bg-50',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500',\n 'placeholder:text-text-400',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n styles().input,\n ].join(' ')}\n />\n )\n}\n\nfunction AutocompleteList<T extends SearchAutocompleteItem>(props: {\n items: T[]\n size: SearchAutocompleteSize\n onSelect?: (item: T) => void\n renderItem?: (item: T) => JSX.Element\n textKey: keyof T\n}) {\n const ctx = useAutocompleteCollection()\n const state = useAutocompleteState()\n if (!ctx) return null\n\n const styles = () => sizeStyles[props.size]\n\n // Filter items based on input\n const filteredItems = createMemo(() => {\n if (!ctx.filter) return props.items\n return props.items.filter((item) => {\n const textValue = String(item[props.textKey] ?? item.name ?? '')\n return ctx.filter!(textValue)\n })\n })\n\n const handleSelect = (item: T) => {\n props.onSelect?.(item)\n state?.setInputValue(String(item[props.textKey] ?? item.name ?? ''))\n }\n\n return (\n <Show when={filteredItems().length > 0}>\n <ul\n ref={ctx.collectionRef}\n id={ctx.collectionProps.id}\n role=\"listbox\"\n aria-label={ctx.collectionProps['aria-label']}\n class={[\n 'mt-1 w-full rounded-md border border-bg-200 bg-bg-50 shadow-lg',\n 'overflow-auto',\n styles().list,\n ].join(' ')}\n >\n <For each={filteredItems()}>\n {(item) => {\n const itemId = `autocomplete-item-${item.id}`\n const isFocused = () => state?.focusedNodeId() === itemId\n\n return (\n <li\n id={itemId}\n role=\"option\"\n aria-selected={isFocused()}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => state?.setFocusedNodeId(itemId)}\n onMouseLeave={() => {\n if (state?.focusedNodeId() === itemId) {\n state?.setFocusedNodeId(null)\n }\n }}\n class={[\n 'cursor-pointer transition-colors',\n isFocused()\n ? 'bg-primary-100 text-primary-900'\n : 'hover:bg-bg-100',\n styles().item,\n ].join(' ')}\n >\n {props.renderItem ? props.renderItem(item) : String(item[props.textKey] ?? item.name)}\n </li>\n )\n }}\n </For>\n </ul>\n </Show>\n )\n}\n\n// ============================================\n// SEARCH AUTOCOMPLETE COMPONENT\n// ============================================\n\n/**\n * A styled autocomplete component for searching and selecting from a list.\n *\n * @example\n * ```tsx\n * const items = [\n * { id: '1', name: 'Apple' },\n * { id: '2', name: 'Banana' },\n * { id: '3', name: 'Cherry' },\n * ];\n *\n * <SearchAutocomplete\n * items={items}\n * placeholder=\"Search fruits...\"\n * aria-label=\"Fruit search\"\n * onSelect={(item) => console.log('Selected:', item)}\n * />\n *\n * // With custom filter\n * <SearchAutocomplete\n * items={items}\n * filter={(textValue, inputValue) =>\n * textValue.toLowerCase().startsWith(inputValue.toLowerCase())\n * }\n * onSelect={(item) => console.log('Selected:', item)}\n * />\n *\n * // With label and description\n * <SearchAutocomplete\n * items={items}\n * label=\"Search\"\n * description=\"Type to filter the list\"\n * placeholder=\"Start typing...\"\n * />\n * ```\n */\nexport function SearchAutocomplete<T extends SearchAutocompleteItem = SearchAutocompleteItem>(\n props: SearchAutocompleteProps<T>\n): JSX.Element {\n const [local, autocompleteProps] = splitProps(props, [\n 'items',\n 'size',\n 'placeholder',\n 'aria-label',\n 'label',\n 'description',\n 'onSelect',\n 'class',\n 'isDisabled',\n 'renderItem',\n 'textKey',\n ])\n\n const size = () => local.size ?? 'md'\n const textKey = () => local.textKey ?? 'name'\n const styles = () => sizeStyles[size()]\n\n // Default filter: case-insensitive contains\n const defaultFilter = (textValue: string, inputValue: string) => {\n if (!inputValue) return true\n return textValue.toLowerCase().includes(inputValue.toLowerCase())\n }\n\n return (\n <div class={['vui-search-autocomplete relative', styles().container, local.class].filter(Boolean).join(' ')}>\n <Show when={local.label}>\n <label class={['block font-medium text-text-700', styles().label].join(' ')}>\n {local.label}\n </label>\n </Show>\n\n <Autocomplete\n {...autocompleteProps}\n filter={autocompleteProps.filter ?? defaultFilter}\n >\n <AutocompleteInput\n placeholder={local.placeholder}\n aria-label={local['aria-label']}\n isDisabled={local.isDisabled}\n size={size()}\n />\n <AutocompleteList\n items={local.items}\n size={size()}\n onSelect={local.onSelect}\n renderItem={local.renderItem}\n textKey={textKey() as keyof T}\n />\n </Autocomplete>\n\n <Show when={local.description}>\n <p class=\"mt-1 text-sm text-text-500\">{local.description}</p>\n </Show>\n </div>\n )\n}\n","/**\n * Select component for proyecto-viviana-ui\n *\n * Styled select component built on top of solidaria-components.\n * Inspired by Spectrum 2's Picker component patterns.\n */\n\nimport { type JSX, Show, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Select as HeadlessSelect,\n SelectTrigger as HeadlessSelectTrigger,\n SelectValue as HeadlessSelectValue,\n SelectListBox as HeadlessSelectListBox,\n SelectOption as HeadlessSelectOption,\n type SelectProps as HeadlessSelectProps,\n type SelectTriggerProps as HeadlessSelectTriggerProps,\n type SelectValueProps as HeadlessSelectValueProps,\n type SelectListBoxProps as HeadlessSelectListBoxProps,\n type SelectOptionProps as HeadlessSelectOptionProps,\n type SelectRenderProps,\n type SelectTriggerRenderProps,\n type SelectValueRenderProps,\n type SelectListBoxRenderProps,\n type SelectOptionRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\nconst SelectSizeContext = createContext<SelectSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface SelectProps<T> extends Omit<HeadlessSelectProps<T>, 'class' | 'style'> {\n /** The size of the select. */\n size?: SelectSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the select. */\n label?: string\n /** Description for the select. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n /** Whether the select is invalid. */\n isInvalid?: boolean\n}\n\nexport interface SelectTriggerProps extends Omit<HeadlessSelectTriggerProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface SelectValueProps<T> extends Omit<HeadlessSelectValueProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface SelectListBoxProps<T> extends Omit<HeadlessSelectListBoxProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface SelectOptionProps<T> extends Omit<HeadlessSelectOptionProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n trigger: 'h-8 text-sm px-3 gap-2',\n label: 'text-sm',\n option: 'text-sm py-1.5 px-3',\n icon: 'h-4 w-4',\n },\n md: {\n trigger: 'h-10 text-base px-4 gap-2',\n label: 'text-base',\n option: 'text-base py-2 px-4',\n icon: 'h-5 w-5',\n },\n lg: {\n trigger: 'h-12 text-lg px-5 gap-3',\n label: 'text-lg',\n option: 'text-lg py-2.5 px-5',\n icon: 'h-6 w-6',\n },\n}\n\n// ============================================\n// SELECT COMPONENT\n// ============================================\n\n/**\n * A select displays a collapsible list of options and allows a user to select one of them.\n *\n * Built on solidaria-components Select for full accessibility support.\n */\nexport function Select<T>(props: SelectProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectRenderProps): string => {\n const base = 'relative inline-flex flex-col gap-1.5'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <SelectSizeContext.Provider value={size}>\n <HeadlessSelect\n {...headlessProps}\n class={getClassName}\n >\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${sizeStyles[size].label}`}>\n {local.label}\n </label>\n </Show>\n {props.children}\n <Show when={local.description && !local.isInvalid}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && local.isInvalid}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </HeadlessSelect>\n </SelectSizeContext.Provider>\n )\n}\n\n// ============================================\n// SELECT TRIGGER COMPONENT\n// ============================================\n\n/**\n * The trigger button for a select.\n * SSR-compatible - renders children and chevron icon directly without render props.\n */\nexport function SelectTrigger(props: SelectTriggerProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(SelectSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectTriggerRenderProps): string => {\n const base = 'inline-flex items-center justify-between rounded-lg border-2 transition-all duration-200 w-full'\n const sizeClass = sizeStyle.trigger\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (renderProps.isOpen) {\n colorClass = 'border-accent bg-bg-300 text-primary-100'\n } else if (renderProps.isHovered) {\n colorClass = 'border-accent-300 bg-bg-300 text-primary-100 cursor-pointer'\n } else {\n colorClass = 'border-primary-600 bg-bg-400 text-primary-200 cursor-pointer'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessSelectTrigger\n {...headlessProps}\n class={getClassName}\n >\n {props.children as JSX.Element}\n {/* Chevron rotates via CSS based on data-open attribute from headless component */}\n <ChevronIcon class={`${sizeStyle.icon} transition-transform duration-200 data-open:rotate-180`} />\n </HeadlessSelectTrigger>\n )\n}\n\n// ============================================\n// SELECT VALUE COMPONENT\n// ============================================\n\n/**\n * Displays the selected value in a select.\n */\nexport function SelectValue<T>(props: SelectValueProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectValueRenderProps<T>): string => {\n const base = 'truncate flex-1 text-left'\n const placeholderClass = !renderProps.isSelected ? 'text-primary-500' : ''\n return [base, placeholderClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessSelectValue\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// SELECT LISTBOX COMPONENT\n// ============================================\n\n/**\n * The listbox popup for a select.\n */\nexport function SelectListBox<T>(props: SelectListBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: SelectListBoxRenderProps): string => {\n const base = 'absolute z-50 mt-1 w-full rounded-lg border-2 border-primary-600 bg-bg-400 py-1 shadow-lg max-h-60 overflow-auto'\n return [base, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessSelectListBox\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// SELECT OPTION COMPONENT\n// ============================================\n\n// Padding classes for when no check icon is shown (to maintain alignment)\nconst paddingStyles = {\n sm: 'pl-6', // h-4 (1rem) + gap-2 (0.5rem) = 1.5rem = pl-6\n md: 'pl-7', // h-5 (1.25rem) + gap-2 (0.5rem) = 1.75rem ≈ pl-7\n lg: 'pl-9', // h-6 (1.5rem) + gap-3 (0.75rem) = 2.25rem = pl-9\n}\n\n/**\n * An option in a select listbox.\n * SSR-compatible - renders check icon and content directly without render props.\n */\nexport function SelectOption<T>(props: SelectOptionProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(SelectSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: SelectOptionRenderProps): string => {\n const base = 'flex items-center gap-2 cursor-pointer transition-colors duration-150'\n const sizeClass = sizeStyle.option\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n colorClass = 'bg-accent/20 text-accent'\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const iconClass = `${sizeStyle.icon} text-accent shrink-0 hidden data-selected:block`\n const paddingClass = paddingStyles[size]\n\n return (\n <HeadlessSelectOption\n {...headlessProps}\n class={getClassName}\n >\n {/* Check icon shows only when selected via data-selected attribute */}\n <CheckIcon class={iconClass} />\n <span class={`flex-1 data-selected:pl-0 ${paddingClass}`}>\n {props.children as JSX.Element}\n </span>\n </HeadlessSelectOption>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nSelect.Trigger = SelectTrigger\nSelect.Value = SelectValue\nSelect.ListBox = SelectListBox\nSelect.Option = SelectOption\n\n// Re-export Key type for convenience\nexport type { Key }\n","/**\n * Menu component for proyecto-viviana-ui\n *\n * Styled menu component built on top of solidaria-components.\n * Inspired by Spectrum 2's Menu component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Menu as HeadlessMenu,\n MenuItem as HeadlessMenuItem,\n MenuTrigger as HeadlessMenuTrigger,\n MenuButton as HeadlessMenuButton,\n type MenuProps as HeadlessMenuProps,\n type MenuItemProps as HeadlessMenuItemProps,\n type MenuTriggerProps as HeadlessMenuTriggerProps,\n type MenuButtonProps as HeadlessMenuButtonProps,\n type MenuRenderProps,\n type MenuItemRenderProps,\n type MenuTriggerRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type MenuSize = 'sm' | 'md' | 'lg'\n\nconst MenuSizeContext = createContext<MenuSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface MenuTriggerProps extends Omit<HeadlessMenuTriggerProps, 'class' | 'style'> {\n /** The size of the menu. */\n size?: MenuSize\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface MenuButtonProps extends Omit<HeadlessMenuButtonProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Visual variant of the button. */\n variant?: 'primary' | 'secondary' | 'quiet'\n}\n\nexport interface MenuProps<T> extends Omit<HeadlessMenuProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface MenuItemProps<T> extends Omit<HeadlessMenuItemProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /**\n * Optional icon to display before the label.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n */\n icon?: () => JSX.Element\n /** Optional keyboard shortcut to display. */\n shortcut?: string\n /** Whether this is a destructive action. */\n isDestructive?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n button: 'h-8 text-sm px-3 gap-2',\n menu: 'py-1',\n item: 'text-sm py-1.5 px-3 gap-2',\n icon: 'h-4 w-4',\n },\n md: {\n button: 'h-10 text-base px-4 gap-2',\n menu: 'py-1.5',\n item: 'text-base py-2 px-4 gap-3',\n icon: 'h-5 w-5',\n },\n lg: {\n button: 'h-12 text-lg px-5 gap-3',\n menu: 'py-2',\n item: 'text-lg py-2.5 px-5 gap-3',\n icon: 'h-6 w-6',\n },\n}\n\nconst buttonVariants = {\n primary: 'bg-accent text-bg-500 border-accent hover:bg-accent-300 hover:border-accent-300',\n secondary: 'bg-bg-400 text-primary-200 border-primary-600 hover:bg-bg-300 hover:border-accent-300',\n quiet: 'bg-transparent text-primary-200 border-transparent hover:bg-bg-300',\n}\n\n// ============================================\n// MENU TRIGGER COMPONENT\n// ============================================\n\n/**\n * A menu trigger wraps a button and menu, handling the open/close state.\n */\nexport function MenuTrigger(props: MenuTriggerProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class'])\n const size = local.size ?? 'md'\n\n return (\n <MenuSizeContext.Provider value={size}>\n <div class={`relative inline-block ${local.class ?? ''}`}>\n <HeadlessMenuTrigger {...headlessProps}>\n {props.children}\n </HeadlessMenuTrigger>\n </div>\n </MenuSizeContext.Provider>\n )\n}\n\n// ============================================\n// MENU BUTTON COMPONENT\n// ============================================\n\n/**\n * A button that opens a menu.\n * SSR-compatible - renders children and chevron icon directly without render props.\n */\nexport function MenuButton(props: MenuButtonProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'variant'])\n const size = useContext(MenuSizeContext)\n const sizeStyle = sizeStyles[size]\n const variant = local.variant ?? 'secondary'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: MenuTriggerRenderProps): string => {\n const base = 'inline-flex items-center justify-center rounded-lg border-2 font-medium transition-all duration-200'\n const sizeClass = sizeStyle.button\n const variantClass = buttonVariants[variant]\n\n let stateClass: string\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isPressed) {\n stateClass = 'scale-95'\n } else {\n stateClass = 'cursor-pointer'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, variantClass, stateClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessMenuButton\n {...headlessProps}\n class={getClassName}\n >\n {props.children as JSX.Element}\n {/* Chevron rotates via CSS based on data-open attribute */}\n <ChevronIcon class={`${sizeStyle.icon} transition-transform duration-200 data-open:rotate-180`} />\n </HeadlessMenuButton>\n )\n}\n\n// ============================================\n// MENU COMPONENT\n// ============================================\n\n/**\n * A menu displays a list of actions or options for the user to choose from.\n */\nexport function Menu<T>(props: MenuProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(MenuSizeContext)\n const styles = () => sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: MenuRenderProps): string => {\n const base = 'absolute z-50 mt-1 min-w-[12rem] rounded-lg border-2 border-primary-600 bg-bg-400 shadow-lg overflow-hidden'\n const sizeClass = styles().menu\n return [base, sizeClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessMenu\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// MENU ITEM COMPONENT\n// ============================================\n\n/**\n * An item in a menu.\n * SSR-compatible - renders icon, content, and shortcut directly without render props.\n */\nexport function MenuItem<T>(props: MenuItemProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'icon', 'shortcut', 'isDestructive'])\n const size = useContext(MenuSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: MenuItemRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-colors duration-150 outline-none'\n const sizeClass = sizeStyle.item\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (local.isDestructive) {\n if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-danger-400/20 text-danger-400'\n } else {\n colorClass = 'text-danger-400'\n }\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const pressedClass = renderProps.isPressed ? 'bg-bg-200' : ''\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, pressedClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessMenuItem\n {...headlessProps}\n class={getClassName}\n >\n {local.icon && <span class={`shrink-0 ${sizeStyle.icon}`}>{local.icon()}</span>}\n <span class=\"flex-1\">{props.children as JSX.Element}</span>\n {local.shortcut && <span class=\"text-primary-500 text-sm ml-auto\">{local.shortcut}</span>}\n </HeadlessMenuItem>\n )\n}\n\n// ============================================\n// MENU SEPARATOR COMPONENT\n// ============================================\n\nexport interface MenuSeparatorProps {\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A visual separator between menu items.\n */\nexport function MenuSeparator(props: MenuSeparatorProps): JSX.Element {\n return (\n <li\n role=\"separator\"\n class={`my-1 border-t border-primary-600 ${props.class ?? ''}`}\n />\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nMenu.Item = MenuItem\nMenu.Separator = MenuSeparator\nMenuTrigger.Button = MenuButton\n\n// Re-export Key type for convenience\nexport type { Key }\n","/**\n * ListBox component for proyecto-viviana-ui\n *\n * Styled listbox component built on top of solidaria-components.\n * Inspired by Spectrum 2's ListBox component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n ListBox as HeadlessListBox,\n ListBoxOption as HeadlessListBoxOption,\n type ListBoxProps as HeadlessListBoxProps,\n type ListBoxOptionProps as HeadlessListBoxOptionProps,\n type ListBoxRenderProps,\n type ListBoxOptionRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type ListBoxSize = 'sm' | 'md' | 'lg'\n\nconst ListBoxSizeContext = createContext<ListBoxSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface ListBoxProps<T> extends Omit<HeadlessListBoxProps<T>, 'class' | 'style'> {\n /** The size of the listbox. */\n size?: ListBoxSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the listbox. */\n label?: string\n /** Description for the listbox. */\n description?: string\n}\n\nexport interface ListBoxOptionProps<T> extends Omit<HeadlessListBoxOptionProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Optional description text. */\n description?: string\n /**\n * Optional icon to display before the label.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n */\n icon?: () => JSX.Element\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n list: 'py-1',\n option: 'text-sm py-1.5 px-3 gap-2',\n icon: 'h-4 w-4',\n label: 'text-sm',\n description: 'text-xs',\n },\n md: {\n list: 'py-1.5',\n option: 'text-base py-2 px-4 gap-3',\n icon: 'h-5 w-5',\n label: 'text-base',\n description: 'text-sm',\n },\n lg: {\n list: 'py-2',\n option: 'text-lg py-2.5 px-5 gap-3',\n icon: 'h-6 w-6',\n label: 'text-lg',\n description: 'text-base',\n },\n}\n\n// ============================================\n// LISTBOX COMPONENT\n// ============================================\n\n/**\n * A listbox displays a list of options and allows a user to select one or more of them.\n *\n * Built on solidaria-components ListBox for full accessibility support.\n */\nexport function ListBox<T>(props: ListBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'renderEmptyState',\n ])\n\n const size = local.size ?? 'md'\n const styles = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ListBoxRenderProps): string => {\n const base = 'rounded-lg border-2 border-primary-600 bg-bg-400 overflow-auto focus:outline-none'\n const sizeClass = styles.list\n\n let stateClass: string\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n } else {\n stateClass = ''\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, stateClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const defaultEmptyState = () => (\n <li class=\"py-4 px-4 text-center text-primary-500\">\n No items\n </li>\n )\n\n return (\n <ListBoxSizeContext.Provider value={size}>\n <div class=\"flex flex-col gap-1.5\">\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${styles.label}`}>\n {local.label}\n </label>\n </Show>\n <HeadlessListBox\n {...headlessProps}\n class={getClassName}\n renderEmptyState={local.renderEmptyState ?? defaultEmptyState}\n children={props.children}\n />\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n </div>\n </ListBoxSizeContext.Provider>\n )\n}\n\n// ============================================\n// LISTBOX OPTION COMPONENT\n// ============================================\n\n/**\n * An option in a listbox.\n * SSR-compatible - renders icon, check, content, and description directly without render props.\n */\nexport function ListBoxOption<T>(props: ListBoxOptionProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'description', 'icon'])\n const size = useContext(ListBoxSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ListBoxOptionRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-colors duration-150 outline-none'\n const sizeClass = sizeStyle.option\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-accent/30 text-accent'\n } else {\n colorClass = 'bg-accent/20 text-accent'\n }\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessListBoxOption\n {...headlessProps}\n class={getClassName}\n >\n {local.icon && <span class={`shrink-0 ${sizeStyle.icon}`}>{local.icon()}</span>}\n <CheckIcon class={`shrink-0 ${sizeStyle.icon} text-accent hidden data-selected:block`} />\n <div class=\"flex flex-col flex-1 min-w-0\">\n <span class=\"truncate\">{props.children as JSX.Element}</span>\n {local.description && (\n <span class={`text-primary-400 truncate ${sizeStyle.description}`}>\n {local.description}\n </span>\n )}\n </div>\n </HeadlessListBoxOption>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nListBox.Option = ListBoxOption\n\n// Re-export Key type for convenience\nexport type { Key }\n","/**\n * Tabs component for proyecto-viviana-ui\n *\n * Styled tabs component built on top of solidaria-components.\n * Inspired by Spectrum 2's Tabs component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Tabs as HeadlessTabs,\n TabList as HeadlessTabList,\n Tab as HeadlessTab,\n TabPanel as HeadlessTabPanel,\n type TabsProps as HeadlessTabsProps,\n type TabListProps as HeadlessTabListProps,\n type TabProps as HeadlessTabProps,\n type TabPanelProps as HeadlessTabPanelProps,\n type TabsRenderProps,\n type TabListRenderProps,\n type TabRenderProps,\n type TabPanelRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, TabOrientation } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type TabsSize = 'sm' | 'md' | 'lg'\nexport type TabsVariant = 'underline' | 'pill' | 'boxed'\n\ninterface TabsContextValue {\n size: TabsSize\n variant: TabsVariant\n}\n\nconst TabsSizeContext = createContext<TabsContextValue>({ size: 'md', variant: 'underline' })\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TabsProps<T> extends Omit<HeadlessTabsProps<T>, 'class' | 'style'> {\n /** The size of the tabs. */\n size?: TabsSize\n /** The visual variant of the tabs. */\n variant?: TabsVariant\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TabListProps<T> extends Omit<HeadlessTabListProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TabProps extends Omit<HeadlessTabProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TabPanelProps extends Omit<HeadlessTabPanelProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n tab: 'text-sm px-3 py-1.5',\n tabList: 'gap-1',\n panel: 'text-sm p-3',\n },\n md: {\n tab: 'text-base px-4 py-2',\n tabList: 'gap-2',\n panel: 'text-base p-4',\n },\n lg: {\n tab: 'text-lg px-5 py-2.5',\n tabList: 'gap-3',\n panel: 'text-lg p-5',\n },\n}\n\nconst variantStyles = {\n underline: {\n tabList: 'border-b-2 border-primary-600',\n tab: {\n base: 'relative border-b-2 -mb-0.5 transition-colors duration-200',\n default: 'border-transparent text-primary-400 hover:text-primary-200 hover:border-primary-400',\n selected: 'border-accent text-accent',\n disabled: 'border-transparent text-primary-600 cursor-not-allowed',\n },\n },\n pill: {\n tabList: 'bg-bg-300 rounded-lg p-1',\n tab: {\n base: 'rounded-md transition-all duration-200',\n default: 'text-primary-400 hover:text-primary-200 hover:bg-bg-400',\n selected: 'bg-accent text-primary-100 shadow-sm',\n disabled: 'text-primary-600 cursor-not-allowed',\n },\n },\n boxed: {\n tabList: 'border-2 border-primary-600 rounded-lg overflow-hidden',\n tab: {\n base: 'border-r-2 border-primary-600 last:border-r-0 transition-colors duration-200',\n default: 'text-primary-400 bg-bg-400 hover:text-primary-200 hover:bg-bg-300',\n selected: 'bg-accent/20 text-accent',\n disabled: 'text-primary-600 bg-bg-300 cursor-not-allowed',\n },\n },\n}\n\n// ============================================\n// TABS COMPONENT\n// ============================================\n\n/**\n * Tabs organize content into multiple sections and allow users to navigate between them.\n *\n * Built on solidaria-components Tabs for full accessibility support.\n */\nexport function Tabs<T>(props: TabsProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n ])\n\n const size = local.size ?? 'md'\n const variant = local.variant ?? 'underline'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabsRenderProps): string => {\n const base = 'flex flex-col'\n const orientationClass = renderProps.orientation === 'vertical' ? 'flex-row' : 'flex-col'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, orientationClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <TabsSizeContext.Provider value={{ size, variant }}>\n <HeadlessTabs\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n </TabsSizeContext.Provider>\n )\n}\n\n// ============================================\n// TAB LIST COMPONENT\n// ============================================\n\n/**\n * A TabList contains Tab elements that represent the available tabs.\n */\nexport function TabList<T>(props: TabListProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(TabsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabListRenderProps): string => {\n const base = 'flex'\n const orientationClass = renderProps.orientation === 'vertical' ? 'flex-col' : 'flex-row'\n const sizeClass = sizeStyles[ctx.size].tabList\n const variantClass = variantStyles[ctx.variant].tabList\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, orientationClass, sizeClass, variantClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTabList\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// TAB COMPONENT\n// ============================================\n\n/**\n * A Tab represents an individual tab in a TabList.\n */\nexport function Tab(props: TabProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(TabsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabRenderProps): string => {\n const sizeClass = sizeStyles[ctx.size].tab\n const variantBase = variantStyles[ctx.variant].tab.base\n\n let stateClass: string\n if (renderProps.isDisabled) {\n stateClass = variantStyles[ctx.variant].tab.disabled\n } else if (renderProps.isSelected) {\n stateClass = variantStyles[ctx.variant].tab.selected\n } else {\n stateClass = variantStyles[ctx.variant].tab.default\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-1 ring-offset-bg-400 outline-none'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'scale-95' : ''\n const cursorClass = renderProps.isDisabled ? '' : 'cursor-pointer'\n\n return [variantBase, sizeClass, stateClass, focusClass, pressedClass, cursorClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTab\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// TAB PANEL COMPONENT\n// ============================================\n\n/**\n * A TabPanel displays the content for a selected Tab.\n */\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(TabsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TabPanelRenderProps): string => {\n const base = 'outline-none'\n const sizeClass = sizeStyles[ctx.size].panel\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTabPanel\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// Attach sub-components for convenience\nTabs.List = TabList\nTabs.Tab = Tab\nTabs.Panel = TabPanel\n\n// Re-export types for convenience\nexport type { Key, TabOrientation }\n","/**\n * Breadcrumbs component for proyecto-viviana-ui\n *\n * Styled breadcrumbs component built on top of solidaria-components.\n * Inspired by Spectrum 2's Breadcrumbs component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext } from 'solid-js'\nimport {\n Breadcrumbs as HeadlessBreadcrumbs,\n BreadcrumbItem as HeadlessBreadcrumbItem,\n type BreadcrumbsProps as HeadlessBreadcrumbsProps,\n type BreadcrumbItemProps as HeadlessBreadcrumbItemProps,\n type BreadcrumbsRenderProps,\n type BreadcrumbItemRenderProps,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type BreadcrumbsSize = 'sm' | 'md' | 'lg'\nexport type BreadcrumbsVariant = 'default' | 'subtle'\n\ninterface BreadcrumbsContextValue {\n size: BreadcrumbsSize\n variant: BreadcrumbsVariant\n showSeparator: boolean\n}\n\nconst BreadcrumbsSizeContext = createContext<BreadcrumbsContextValue>({\n size: 'md',\n variant: 'default',\n showSeparator: true,\n})\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface BreadcrumbsProps<T> extends Omit<HeadlessBreadcrumbsProps<T>, 'class' | 'style'> {\n /** The size of the breadcrumbs. */\n size?: BreadcrumbsSize\n /** The visual variant. */\n variant?: BreadcrumbsVariant\n /** Whether to show separators between items. */\n showSeparator?: boolean\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface BreadcrumbItemProps extends Omit<HeadlessBreadcrumbItemProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n text: 'text-sm',\n icon: 'h-3 w-3',\n gap: 'gap-1',\n },\n md: {\n text: 'text-base',\n icon: 'h-4 w-4',\n gap: 'gap-1.5',\n },\n lg: {\n text: 'text-lg',\n icon: 'h-5 w-5',\n gap: 'gap-2',\n },\n}\n\nconst variantStyles = {\n default: {\n item: 'text-primary-400 hover:text-primary-200',\n current: 'text-primary-100 font-medium',\n separator: 'text-primary-500',\n },\n subtle: {\n item: 'text-primary-500 hover:text-primary-300',\n current: 'text-primary-200',\n separator: 'text-primary-600',\n },\n}\n\n// ============================================\n// BREADCRUMBS COMPONENT\n// ============================================\n\n/**\n * Breadcrumbs show hierarchy and navigational context for a user's location within an application.\n *\n * Built on solidaria-components Breadcrumbs for full accessibility support.\n */\nexport function Breadcrumbs<T>(props: BreadcrumbsProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'showSeparator',\n 'class',\n ])\n\n const size = local.size ?? 'md'\n const variant = local.variant ?? 'default'\n const showSeparator = local.showSeparator ?? true\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: BreadcrumbsRenderProps): string => {\n const base = 'flex items-center'\n const sizeClass = sizeStyles[size].gap\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, sizeClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <BreadcrumbsSizeContext.Provider value={{ size, variant, showSeparator }}>\n <HeadlessBreadcrumbs\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n </BreadcrumbsSizeContext.Provider>\n )\n}\n\n// ============================================\n// BREADCRUMB ITEM COMPONENT\n// ============================================\n\n/**\n * A BreadcrumbItem represents an individual breadcrumb in the navigation trail.\n */\nexport function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const ctx = useContext(BreadcrumbsSizeContext)\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: BreadcrumbItemRenderProps): string => {\n const sizeClass = sizeStyles[ctx.size].text\n const vStyles = variantStyles[ctx.variant]\n\n let stateClass: string\n if (renderProps.isCurrent) {\n stateClass = vStyles.current\n } else if (renderProps.isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed'\n } else {\n stateClass = vStyles.item\n }\n\n const cursorClass = renderProps.isCurrent || renderProps.isDisabled ? '' : 'cursor-pointer'\n const transitionClass = 'transition-colors duration-150'\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-1 ring-offset-bg-400 outline-none rounded'\n : ''\n\n return [sizeClass, stateClass, cursorClass, transitionClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const vStyles = variantStyles[ctx.variant]\n // Hide separator on first item, and on current (last) item\n const separatorClass = `${sizeStyles[ctx.size].icon} ${vStyles.separator} mx-1 shrink-0 hidden data-current:hidden [&:not([data-current])]:block [li:first-child_&]:!hidden`\n\n // Wrap children with separator icon\n const renderChildren = () => (\n <>\n {/* Separator shows before items except first and current */}\n {ctx.showSeparator && <ChevronIcon class={separatorClass} />}\n {props.children as JSX.Element}\n </>\n )\n\n return (\n <HeadlessBreadcrumbItem\n {...headlessProps}\n class={getClassName}\n children={renderChildren()}\n />\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nBreadcrumbs.Item = BreadcrumbItem\n","/**\n * NumberField component for proyecto-viviana-ui\n *\n * A styled number field component with increment/decrement buttons.\n * Built directly on solidaria hooks for full accessibility support.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createNumberField,\n createFocusRing,\n createPress,\n createHover,\n type AriaNumberFieldProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createNumberFieldState,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type NumberFieldSize = 'sm' | 'md' | 'lg'\nexport type NumberFieldVariant = 'outline' | 'filled'\n\nexport interface NumberFieldProps extends Omit<AriaNumberFieldProps, 'label'> {\n /** The size of the number field. */\n size?: NumberFieldSize\n /** The visual variant of the number field. */\n variant?: NumberFieldVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** Error message shown when invalid. */\n errorMessage?: string\n /** The current value (controlled). */\n value?: number\n /** The default value (uncontrolled). */\n defaultValue?: number\n /** Handler called when the value changes. */\n onChange?: (value: number) => void\n /** The minimum value. */\n minValue?: number\n /** The maximum value. */\n maxValue?: number\n /** The step value for increment/decrement. */\n step?: number\n /** The locale for number formatting. */\n locale?: string\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions\n /** Whether to hide the stepper buttons. */\n hideStepper?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n input: 'h-8 px-2 text-sm',\n label: 'text-sm',\n description: 'text-xs',\n button: 'w-6 h-6 text-sm',\n buttonGap: 'gap-0.5',\n },\n md: {\n input: 'h-10 px-3 text-base',\n label: 'text-sm',\n description: 'text-sm',\n button: 'w-8 h-8 text-base',\n buttonGap: 'gap-1',\n },\n lg: {\n input: 'h-12 px-4 text-lg',\n label: 'text-base',\n description: 'text-sm',\n button: 'w-10 h-10 text-lg',\n buttonGap: 'gap-1',\n },\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction PlusIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M8 3v10M3 8h10\" />\n </svg>\n )\n}\n\nfunction MinusIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M3 8h10\" />\n </svg>\n )\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A number field allows users to enter a numeric value with increment/decrement controls.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function NumberField(props: NumberFieldProps): JSX.Element {\n const defaultProps: Partial<NumberFieldProps> = {\n size: 'md',\n variant: 'outline',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, stateProps, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'hideStepper',\n ], [\n 'value',\n 'defaultValue',\n 'onChange',\n 'minValue',\n 'maxValue',\n 'step',\n 'locale',\n 'formatOptions',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Ref for input element\n let inputRef: HTMLInputElement | undefined\n\n // Create number field state\n const state = createNumberFieldState({\n get value() {\n return stateProps.value\n },\n get defaultValue() {\n return stateProps.defaultValue\n },\n get onChange() {\n return stateProps.onChange\n },\n get minValue() {\n return stateProps.minValue\n },\n get maxValue() {\n return stateProps.maxValue\n },\n get step() {\n return stateProps.step\n },\n get locale() {\n return stateProps.locale\n },\n get formatOptions() {\n return stateProps.formatOptions\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get isReadOnly() {\n return ariaProps.isReadOnly\n },\n })\n\n // Create number field aria props\n const numberFieldAria = createNumberField(\n {\n get label() {\n return local.label\n },\n get 'aria-label'() {\n return ariaProps['aria-label']\n },\n get 'aria-labelledby'() {\n return ariaProps['aria-labelledby']\n },\n get 'aria-describedby'() {\n return ariaProps['aria-describedby']\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get isReadOnly() {\n return ariaProps.isReadOnly\n },\n get isRequired() {\n return ariaProps.isRequired\n },\n get isInvalid() {\n return ariaProps.isInvalid\n },\n get description() {\n return local.description\n },\n get errorMessage() {\n return local.errorMessage\n },\n get id() {\n return ariaProps.id\n },\n get autoFocus() {\n return ariaProps.autoFocus\n },\n get name() {\n return ariaProps.name\n },\n },\n state,\n () => inputRef ?? null\n )\n\n // Create focus ring for input\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Increment button interactions\n const { isPressed: incrementPressed, pressProps: incrementPressProps } = createPress({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canIncrement()\n },\n onPress: () => {\n state.increment()\n inputRef?.focus()\n },\n })\n\n const { isHovered: incrementHovered, hoverProps: incrementHoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canIncrement()\n },\n })\n\n // Decrement button interactions\n const { isPressed: decrementPressed, pressProps: decrementPressProps } = createPress({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canDecrement()\n },\n onPress: () => {\n state.decrement()\n inputRef?.focus()\n },\n })\n\n const { isHovered: decrementHovered, hoverProps: decrementHoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled || !state.canDecrement()\n },\n })\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const groupClasses = () => {\n const base = 'flex items-center'\n const gapClass = size().buttonGap\n return [base, gapClass].filter(Boolean).join(' ')\n }\n\n const inputClasses = () => {\n const base = 'flex-1 rounded-md transition-all duration-200 outline-none text-center'\n const sizeClass = size().input\n\n let variantClass: string\n if (local.variant === 'filled') {\n variantClass = 'bg-bg-200 border border-transparent'\n } else {\n variantClass = 'bg-transparent border border-bg-400'\n }\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (ariaProps.isInvalid) {\n stateClass = 'border-danger-500 focus:border-danger-400 focus:ring-2 focus:ring-danger-400/20'\n } else {\n stateClass = 'text-primary-100 placeholder:text-primary-500 focus:border-accent focus:ring-2 focus:ring-accent/20'\n }\n\n const hoverClass = ariaProps.isDisabled ? '' : 'hover:border-accent-300'\n\n return [base, sizeClass, variantClass, stateClass, hoverClass].filter(Boolean).join(' ')\n }\n\n const buttonClasses = (isIncrement: boolean) => {\n const base = 'flex items-center justify-center rounded-md transition-all duration-150 select-none'\n const sizeClass = size().button\n\n const isDisabled = ariaProps.isDisabled || (isIncrement ? !state.canIncrement() : !state.canDecrement())\n const isPressed = isIncrement ? incrementPressed() : decrementPressed()\n const isHovered = isIncrement ? incrementHovered() : decrementHovered()\n\n let stateClass: string\n if (isDisabled) {\n stateClass = 'bg-bg-300 text-primary-600 cursor-not-allowed'\n } else if (isPressed) {\n stateClass = 'bg-accent-600 text-white scale-95'\n } else if (isHovered) {\n stateClass = 'bg-accent-500 text-white'\n } else {\n stateClass = 'bg-bg-300 text-primary-200 hover:bg-accent-500 hover:text-white'\n }\n\n return [base, sizeClass, stateClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'block font-medium text-primary-200 mb-1'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const descriptionClasses = () => {\n const base = 'mt-1 text-primary-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const errorClasses = () => {\n const base = 'mt-1 text-danger-500'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n // Clean props helpers\n const cleanInputProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.inputProps as Record<string, unknown>\n return rest\n }\n\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>\n return rest\n }\n\n const cleanGroupProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.groupProps as Record<string, unknown>\n return rest\n }\n\n const cleanDecrementProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.decrementButtonProps as Record<string, unknown>\n return rest\n }\n\n const cleanIncrementProps = () => {\n const { ref: _ref, ...rest } = numberFieldAria.incrementButtonProps as Record<string, unknown>\n return rest\n }\n\n const cleanDecrementPressProps = () => {\n const { ref: _ref, ...rest } = decrementPressProps as Record<string, unknown>\n return rest\n }\n\n const cleanDecrementHoverProps = () => {\n const { ref: _ref, ...rest } = decrementHoverProps as Record<string, unknown>\n return rest\n }\n\n const cleanIncrementPressProps = () => {\n const { ref: _ref, ...rest } = incrementPressProps as Record<string, unknown>\n return rest\n }\n\n const cleanIncrementHoverProps = () => {\n const { ref: _ref, ...rest } = incrementHoverProps as Record<string, unknown>\n return rest\n }\n\n return (\n <div\n {...cleanGroupProps()}\n class={containerClasses()}\n data-disabled={ariaProps.isDisabled || undefined}\n data-invalid={ariaProps.isInvalid || undefined}\n >\n {/* Label */}\n <Show when={local.label}>\n <span {...numberFieldAria.labelProps} class={labelClasses()}>\n {local.label}\n <Show when={ariaProps.isRequired}>\n <span class=\"text-danger-500 ml-1\">*</span>\n </Show>\n </span>\n </Show>\n\n {/* Input Group */}\n <div class={groupClasses()}>\n {/* Decrement Button */}\n <Show when={!local.hideStepper}>\n <button\n {...cleanDecrementProps()}\n {...cleanDecrementPressProps()}\n {...cleanDecrementHoverProps()}\n class={buttonClasses(false)}\n data-pressed={decrementPressed() || undefined}\n data-hovered={decrementHovered() || undefined}\n data-disabled={ariaProps.isDisabled || !state.canDecrement() || undefined}\n >\n <MinusIcon class=\"w-4 h-4\" />\n </button>\n </Show>\n\n {/* Input */}\n <input\n ref={inputRef}\n {...cleanInputProps()}\n {...cleanFocusProps()}\n class={inputClasses()}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n />\n\n {/* Increment Button */}\n <Show when={!local.hideStepper}>\n <button\n {...cleanIncrementProps()}\n {...cleanIncrementPressProps()}\n {...cleanIncrementHoverProps()}\n class={buttonClasses(true)}\n data-pressed={incrementPressed() || undefined}\n data-hovered={incrementHovered() || undefined}\n data-disabled={ariaProps.isDisabled || !state.canIncrement() || undefined}\n >\n <PlusIcon class=\"w-4 h-4\" />\n </button>\n </Show>\n </div>\n\n {/* Description */}\n <Show when={local.description && !ariaProps.isInvalid}>\n <span {...numberFieldAria.descriptionProps} class={descriptionClasses()}>\n {local.description}\n </span>\n </Show>\n\n {/* Error Message */}\n <Show when={ariaProps.isInvalid && local.errorMessage}>\n <span {...numberFieldAria.errorMessageProps} class={errorClasses()}>\n {local.errorMessage}\n </span>\n </Show>\n </div>\n )\n}\n\n// Re-export types\nexport type { NumberFieldState } from '@proyecto-viviana/solid-stately'\n","/**\n * SearchField component for proyecto-viviana-ui\n *\n * A styled search field component with clear button and search icon.\n * Built directly on solidaria hooks for full accessibility support.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createSearchField,\n createFocusRing,\n createPress,\n createHover,\n type AriaSearchFieldProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createSearchFieldState,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SearchFieldSize = 'sm' | 'md' | 'lg'\nexport type SearchFieldVariant = 'outline' | 'filled'\n\nexport interface SearchFieldProps extends Omit<AriaSearchFieldProps, 'label'> {\n /** The size of the search field. */\n size?: SearchFieldSize\n /** The visual variant of the search field. */\n variant?: SearchFieldVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the input. */\n label?: string\n /** Description text shown below the input. */\n description?: string\n /** Error message shown when invalid. */\n errorMessage?: string\n /** The current value (controlled). */\n value?: string\n /** The default value (uncontrolled). */\n defaultValue?: string\n /** Handler called when the value changes. */\n onChange?: (value: string) => void\n /** Handler called when the user submits the search. */\n onSubmit?: (value: string) => void\n /** Handler called when the field is cleared. */\n onClear?: () => void\n /** Whether to hide the search icon. */\n hideSearchIcon?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'h-8',\n input: 'text-sm pl-8 pr-8',\n label: 'text-sm',\n description: 'text-xs',\n icon: 'w-4 h-4 left-2',\n clearButton: 'w-5 h-5 right-1.5',\n },\n md: {\n container: 'h-10',\n input: 'text-base pl-10 pr-10',\n label: 'text-sm',\n description: 'text-sm',\n icon: 'w-5 h-5 left-2.5',\n clearButton: 'w-6 h-6 right-2',\n },\n lg: {\n container: 'h-12',\n input: 'text-lg pl-12 pr-12',\n label: 'text-base',\n description: 'text-sm',\n icon: 'w-6 h-6 left-3',\n clearButton: 'w-7 h-7 right-2.5',\n },\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction SearchIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"5\" />\n <path d=\"M12 12L17 17\" stroke-linecap=\"round\" />\n </svg>\n )\n}\n\nfunction ClearIcon(props: { class?: string }) {\n return (\n <svg\n class={props.class}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path d=\"M4 4L12 12M12 4L4 12\" stroke-linecap=\"round\" />\n </svg>\n )\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A search field allows users to enter and clear a search query.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function SearchField(props: SearchFieldProps): JSX.Element {\n const defaultProps: Partial<SearchFieldProps> = {\n size: 'md',\n variant: 'outline',\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, stateProps, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'hideSearchIcon',\n ], [\n 'value',\n 'defaultValue',\n 'onChange',\n 'onSubmit',\n 'onClear',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Ref for input element\n let inputRef: HTMLInputElement | undefined\n\n // Create search field state\n const state = createSearchFieldState({\n get value() {\n return stateProps.value\n },\n get defaultValue() {\n return stateProps.defaultValue\n },\n get onChange() {\n return stateProps.onChange\n },\n })\n\n // Create search field aria props\n const searchFieldAria = createSearchField(\n {\n get label() {\n return local.label\n },\n get 'aria-label'() {\n return ariaProps['aria-label']\n },\n get 'aria-labelledby'() {\n return ariaProps['aria-labelledby']\n },\n get 'aria-describedby'() {\n return ariaProps['aria-describedby']\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get isReadOnly() {\n return ariaProps.isReadOnly\n },\n get isRequired() {\n return ariaProps.isRequired\n },\n get isInvalid() {\n return ariaProps.isInvalid\n },\n get description() {\n return local.description\n },\n get errorMessage() {\n return local.errorMessage\n },\n get placeholder() {\n return ariaProps.placeholder\n },\n get name() {\n return ariaProps.name\n },\n get autoFocus() {\n return ariaProps.autoFocus\n },\n get autoComplete() {\n return ariaProps.autoComplete\n },\n get maxLength() {\n return ariaProps.maxLength\n },\n get minLength() {\n return ariaProps.minLength\n },\n get pattern() {\n return ariaProps.pattern\n },\n get onSubmit() {\n return stateProps.onSubmit\n },\n get onClear() {\n return stateProps.onClear\n },\n },\n state,\n () => inputRef ?? null\n )\n\n // Create focus ring for input\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Create hover for input\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled\n },\n })\n\n // Clear button interactions\n const { isPressed: clearPressed, pressProps: clearPressProps } = createPress({\n get isDisabled() {\n return ariaProps.isDisabled || ariaProps.isReadOnly\n },\n onPress: () => {\n searchFieldAria.clearButtonProps.onClick()\n },\n })\n\n const { isHovered: clearHovered, hoverProps: clearHoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled || ariaProps.isReadOnly\n },\n })\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const inputWrapperClasses = () => {\n const base = 'relative flex items-center'\n const sizeClass = size().container\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const inputClasses = () => {\n const base = 'w-full h-full rounded-md transition-all duration-200 outline-none'\n const sizeClass = size().input\n\n // Adjust padding based on search icon visibility\n const paddingClass = local.hideSearchIcon ? 'pl-3' : ''\n\n let variantClass: string\n if (local.variant === 'filled') {\n variantClass = 'bg-bg-200 border border-transparent'\n } else {\n variantClass = 'bg-transparent border border-bg-400'\n }\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (ariaProps.isInvalid) {\n stateClass = 'border-danger-500 focus:border-danger-400 focus:ring-2 focus:ring-danger-400/20'\n } else {\n stateClass = 'text-primary-100 placeholder:text-primary-500 focus:border-accent focus:ring-2 focus:ring-accent/20'\n }\n\n const hoverClass = ariaProps.isDisabled ? '' : 'hover:border-accent-300'\n\n return [base, sizeClass, paddingClass, variantClass, stateClass, hoverClass].filter(Boolean).join(' ')\n }\n\n const searchIconClasses = () => {\n const base = 'absolute pointer-events-none text-primary-400'\n const sizeClass = size().icon\n const focusedClass = isFocused() ? 'text-accent' : ''\n return [base, sizeClass, focusedClass].filter(Boolean).join(' ')\n }\n\n const clearButtonClasses = () => {\n const base = 'absolute flex items-center justify-center rounded-md transition-all duration-150 select-none'\n const sizeClass = size().clearButton\n\n const isDisabled = ariaProps.isDisabled || ariaProps.isReadOnly\n\n let stateClass: string\n if (isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed'\n } else if (clearPressed()) {\n stateClass = 'bg-bg-400 text-primary-100 scale-90'\n } else if (clearHovered()) {\n stateClass = 'bg-bg-300 text-primary-100'\n } else {\n stateClass = 'text-primary-400 hover:bg-bg-300 hover:text-primary-100'\n }\n\n return [base, sizeClass, stateClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'block font-medium text-primary-200 mb-1'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const descriptionClasses = () => {\n const base = 'mt-1 text-primary-400'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const errorClasses = () => {\n const base = 'mt-1 text-danger-500'\n const sizeClass = size().description\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n // Clean props helpers\n const cleanInputProps = () => {\n const { ref: _ref, ...rest } = searchFieldAria.inputProps as Record<string, unknown>\n return rest\n }\n\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>\n return rest\n }\n\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>\n return rest\n }\n\n const cleanLabelProps = () => {\n const { ref: _ref, ...rest } = searchFieldAria.labelProps as Record<string, unknown>\n return rest\n }\n\n const cleanClearPressProps = () => {\n const { ref: _ref, ...rest } = clearPressProps as Record<string, unknown>\n return rest\n }\n\n const cleanClearHoverProps = () => {\n const { ref: _ref, ...rest } = clearHoverProps as Record<string, unknown>\n return rest\n }\n\n const isEmpty = () => state.value() === ''\n\n return (\n <div\n class={containerClasses()}\n data-empty={isEmpty() || undefined}\n data-disabled={ariaProps.isDisabled || undefined}\n data-invalid={ariaProps.isInvalid || undefined}\n >\n {/* Label */}\n <Show when={local.label}>\n <span {...cleanLabelProps()} class={labelClasses()}>\n {local.label}\n <Show when={ariaProps.isRequired}>\n <span class=\"text-danger-500 ml-1\">*</span>\n </Show>\n </span>\n </Show>\n\n {/* Input Wrapper */}\n <div class={inputWrapperClasses()}>\n {/* Search Icon */}\n <Show when={!local.hideSearchIcon}>\n <SearchIcon class={searchIconClasses()} />\n </Show>\n\n {/* Input */}\n <input\n ref={inputRef}\n {...cleanInputProps()}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n class={inputClasses()}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-hovered={isHovered() || undefined}\n />\n\n {/* Clear Button */}\n <Show when={!isEmpty()}>\n <button\n type=\"button\"\n aria-label={searchFieldAria.clearButtonProps['aria-label']}\n tabIndex={searchFieldAria.clearButtonProps.tabIndex}\n disabled={searchFieldAria.clearButtonProps.disabled}\n onMouseDown={searchFieldAria.clearButtonProps.onMouseDown}\n {...cleanClearPressProps()}\n {...cleanClearHoverProps()}\n class={clearButtonClasses()}\n data-pressed={clearPressed() || undefined}\n data-hovered={clearHovered() || undefined}\n >\n <ClearIcon class=\"w-3 h-3\" />\n </button>\n </Show>\n </div>\n\n {/* Description */}\n <Show when={local.description && !ariaProps.isInvalid}>\n <span {...searchFieldAria.descriptionProps} class={descriptionClasses()}>\n {local.description}\n </span>\n </Show>\n\n {/* Error Message */}\n <Show when={ariaProps.isInvalid && local.errorMessage}>\n <span {...searchFieldAria.errorMessageProps} class={errorClasses()}>\n {local.errorMessage}\n </span>\n </Show>\n </div>\n )\n}\n\n// Re-export types\nexport type { SearchFieldState } from '@proyecto-viviana/solid-stately'\n","/**\n * Slider component for proyecto-viviana-ui\n *\n * A styled slider component with track, thumb, and value display.\n * Built directly on solidaria hooks for full accessibility support.\n */\n\nimport { type JSX, splitProps, mergeProps as solidMergeProps, Show } from 'solid-js'\nimport {\n createSlider,\n createFocusRing,\n createHover,\n type AriaSliderProps,\n} from '@proyecto-viviana/solidaria'\nimport {\n createSliderState,\n type SliderOrientation,\n} from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type SliderSize = 'sm' | 'md' | 'lg'\nexport type SliderVariant = 'default' | 'accent'\n\nexport interface SliderProps extends Omit<AriaSliderProps, 'label'> {\n /** The size of the slider. */\n size?: SliderSize\n /** The visual variant of the slider. */\n variant?: SliderVariant\n /** Additional CSS class name. */\n class?: string\n /** Label text for the slider. */\n label?: string\n /** The current value (controlled). */\n value?: number\n /** The default value (uncontrolled). */\n defaultValue?: number\n /** Handler called when the value changes. */\n onChange?: (value: number) => void\n /** Handler called when dragging ends. */\n onChangeEnd?: (value: number) => void\n /** The minimum value. */\n minValue?: number\n /** The maximum value. */\n maxValue?: number\n /** The step value. */\n step?: number\n /** The orientation of the slider. */\n orientation?: SliderOrientation\n /** The locale for number formatting. */\n locale?: string\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions\n /** Whether to show the value output. */\n showOutput?: boolean\n /** Whether to show min/max labels. */\n showMinMax?: boolean\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-1',\n thumb: 'w-3 h-3 -mt-1',\n label: 'text-sm',\n output: 'text-xs',\n },\n md: {\n track: 'h-2',\n thumb: 'w-4 h-4 -mt-1',\n label: 'text-sm',\n output: 'text-sm',\n },\n lg: {\n track: 'h-3',\n thumb: 'w-5 h-5 -mt-1',\n label: 'text-base',\n output: 'text-base',\n },\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\n/**\n * A slider allows users to select a value from a range.\n *\n * Built directly on solidaria hooks for full accessibility support.\n */\nexport function Slider(props: SliderProps): JSX.Element {\n const defaultProps: Partial<SliderProps> = {\n size: 'md',\n variant: 'default',\n minValue: 0,\n maxValue: 100,\n step: 1,\n orientation: 'horizontal',\n showOutput: true,\n }\n\n const merged = solidMergeProps(defaultProps, props)\n\n const [local, stateProps, ariaProps] = splitProps(merged, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'showOutput',\n 'showMinMax',\n ], [\n 'value',\n 'defaultValue',\n 'onChange',\n 'onChangeEnd',\n 'minValue',\n 'maxValue',\n 'step',\n 'orientation',\n 'locale',\n 'formatOptions',\n ])\n\n const size = () => sizeStyles[local.size!]\n\n // Track ref for pointer handling\n let trackRef: HTMLDivElement | undefined\n\n // Create slider state\n const state = createSliderState({\n get value() {\n return stateProps.value\n },\n get defaultValue() {\n return stateProps.defaultValue\n },\n get onChange() {\n return stateProps.onChange\n },\n get onChangeEnd() {\n return stateProps.onChangeEnd\n },\n get minValue() {\n return stateProps.minValue\n },\n get maxValue() {\n return stateProps.maxValue\n },\n get step() {\n return stateProps.step\n },\n get orientation() {\n return stateProps.orientation\n },\n get locale() {\n return stateProps.locale\n },\n get formatOptions() {\n return stateProps.formatOptions\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n })\n\n // Create slider aria props\n const sliderAria = createSlider(\n {\n get label() {\n return local.label\n },\n get 'aria-label'() {\n return ariaProps['aria-label']\n },\n get 'aria-labelledby'() {\n return ariaProps['aria-labelledby']\n },\n get 'aria-describedby'() {\n return ariaProps['aria-describedby']\n },\n get isDisabled() {\n return ariaProps.isDisabled\n },\n get orientation() {\n return stateProps.orientation\n },\n },\n state,\n () => trackRef ?? null\n )\n\n // Create focus ring\n const { isFocused, isFocusVisible, focusProps } = createFocusRing()\n\n // Create hover\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return ariaProps.isDisabled\n },\n })\n\n // Compute classes\n const containerClasses = () => {\n const base = 'flex flex-col w-full'\n const disabledClass = ariaProps.isDisabled ? 'opacity-60' : ''\n const custom = local.class || ''\n return [base, disabledClass, custom].filter(Boolean).join(' ')\n }\n\n const labelRowClasses = () => {\n return 'flex justify-between items-center mb-2'\n }\n\n const trackContainerClasses = () => {\n const base = 'relative w-full cursor-pointer'\n const disabledClass = ariaProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, disabledClass].filter(Boolean).join(' ')\n }\n\n const trackClasses = () => {\n const base = 'w-full rounded-full bg-bg-300'\n const sizeClass = size().track\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const fillClasses = () => {\n const base = 'absolute top-0 left-0 h-full rounded-full transition-all'\n const variantClass = local.variant === 'accent' ? 'bg-accent' : 'bg-primary-400'\n return [base, variantClass].filter(Boolean).join(' ')\n }\n\n const thumbClasses = () => {\n const base = 'absolute top-1/2 rounded-full shadow-md transition-all cursor-grab'\n const sizeClass = size().thumb\n\n let stateClass: string\n if (ariaProps.isDisabled) {\n stateClass = 'bg-primary-400 cursor-not-allowed'\n } else if (state.isDragging()) {\n stateClass = local.variant === 'accent' ? 'bg-accent-400 scale-110 cursor-grabbing' : 'bg-primary-200 scale-110 cursor-grabbing'\n } else if (isHovered()) {\n stateClass = local.variant === 'accent' ? 'bg-accent-400 scale-105' : 'bg-primary-200 scale-105'\n } else {\n stateClass = local.variant === 'accent' ? 'bg-accent' : 'bg-primary-100'\n }\n\n const focusClass = isFocusVisible() ? 'ring-2 ring-accent ring-offset-2 ring-offset-bg-100' : ''\n\n return [base, sizeClass, stateClass, focusClass].filter(Boolean).join(' ')\n }\n\n const labelClasses = () => {\n const base = 'font-medium text-primary-200'\n const sizeClass = size().label\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const outputClasses = () => {\n const base = 'font-medium text-primary-100'\n const sizeClass = size().output\n return [base, sizeClass].filter(Boolean).join(' ')\n }\n\n const minMaxClasses = () => {\n const base = 'text-xs text-primary-400'\n return base\n }\n\n // Clean props helpers\n const cleanGroupProps = () => {\n const { ref: _ref, ...rest } = sliderAria.groupProps as Record<string, unknown>\n return rest\n }\n\n const cleanTrackProps = () => {\n const { ref: _ref, style: _style, ...rest } = sliderAria.trackProps as Record<string, unknown>\n return rest\n }\n\n const cleanThumbProps = () => {\n const { ref: _ref, style: thumbStyle, ...rest } = sliderAria.thumbProps as Record<string, unknown>\n // Extract positioning from thumbStyle\n const style = thumbStyle as Record<string, string> | undefined\n return { rest, style }\n }\n\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>\n return rest\n }\n\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>\n return rest\n }\n\n const cleanOutputProps = () => {\n const { ref: _ref, ...rest } = sliderAria.outputProps as Record<string, unknown>\n return rest\n }\n\n const thumbData = () => cleanThumbProps()\n const percent = () => state.getValuePercent() * 100\n\n return (\n <div\n {...cleanGroupProps()}\n class={containerClasses()}\n data-disabled={ariaProps.isDisabled || undefined}\n data-orientation={state.orientation}\n >\n {/* Label and Output Row */}\n <Show when={local.label || local.showOutput}>\n <div class={labelRowClasses()}>\n <Show when={local.label}>\n <span {...sliderAria.labelProps} class={labelClasses()}>\n {local.label}\n </span>\n </Show>\n <Show when={local.showOutput}>\n <output {...cleanOutputProps()} class={outputClasses()}>\n {state.getFormattedValue()}\n </output>\n </Show>\n </div>\n </Show>\n\n {/* Track Container */}\n <div class={trackContainerClasses()}>\n {/* Track */}\n <div\n ref={(el) => (trackRef = el)}\n {...cleanTrackProps()}\n class={trackClasses()}\n style={{ 'touch-action': 'none' }}\n >\n {/* Fill */}\n <div\n class={fillClasses()}\n style={{ width: `${percent()}%` }}\n />\n </div>\n\n {/* Thumb */}\n <div\n {...thumbData().rest}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n class={thumbClasses()}\n style={{\n left: `${percent()}%`,\n transform: 'translateX(-50%)',\n ...(thumbData().style || {}),\n }}\n data-dragging={state.isDragging() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-hovered={isHovered() || undefined}\n />\n </div>\n\n {/* Min/Max Labels */}\n <Show when={local.showMinMax}>\n <div class=\"flex justify-between mt-1\">\n <span class={minMaxClasses()}>{state.minValue}</span>\n <span class={minMaxClasses()}>{state.maxValue}</span>\n </div>\n </Show>\n\n {/* Hidden input for form submission */}\n <input {...sliderAria.inputProps} />\n </div>\n )\n}\n\n// Re-export types\nexport type { SliderState, SliderOrientation } from '@proyecto-viviana/solid-stately'\n","/**\n * ComboBox component for proyecto-viviana-ui\n *\n * Styled combobox component built on top of solidaria-components.\n * Inspired by Spectrum 2's ComboBox component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n ComboBox as HeadlessComboBox,\n ComboBoxInput as HeadlessComboBoxInput,\n ComboBoxButton as HeadlessComboBoxButton,\n ComboBoxListBox as HeadlessComboBoxListBox,\n ComboBoxOption as HeadlessComboBoxOption,\n defaultContainsFilter,\n type ComboBoxProps as HeadlessComboBoxProps,\n type ComboBoxInputProps as HeadlessComboBoxInputProps,\n type ComboBoxButtonProps as HeadlessComboBoxButtonProps,\n type ComboBoxListBoxProps as HeadlessComboBoxListBoxProps,\n type ComboBoxOptionProps as HeadlessComboBoxOptionProps,\n type ComboBoxRenderProps,\n type ComboBoxInputRenderProps,\n type ComboBoxButtonRenderProps,\n type ComboBoxListBoxRenderProps,\n type ComboBoxOptionRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, FilterFn, MenuTriggerAction } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type ComboBoxSize = 'sm' | 'md' | 'lg'\n\nconst ComboBoxSizeContext = createContext<ComboBoxSize>('md')\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface ComboBoxProps<T> extends Omit<HeadlessComboBoxProps<T>, 'class' | 'style'> {\n /** The size of the combobox. */\n size?: ComboBoxSize\n /** Additional CSS class name. */\n class?: string\n /** Label for the combobox. */\n label?: string\n /** Description for the combobox. */\n description?: string\n /** Error message when invalid. */\n errorMessage?: string\n /** Whether the combobox is invalid. */\n isInvalid?: boolean\n}\n\nexport interface ComboBoxInputProps extends Omit<HeadlessComboBoxInputProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface ComboBoxButtonProps extends Omit<HeadlessComboBoxButtonProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface ComboBoxListBoxProps<T> extends Omit<HeadlessComboBoxListBoxProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface ComboBoxOptionProps<T> extends Omit<HeadlessComboBoxOptionProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n wrapper: 'h-8',\n input: 'h-8 text-sm pl-3 pr-8',\n button: 'h-8 w-8',\n label: 'text-sm',\n option: 'text-sm py-1.5 px-3',\n icon: 'h-4 w-4',\n },\n md: {\n wrapper: 'h-10',\n input: 'h-10 text-base pl-4 pr-10',\n button: 'h-10 w-10',\n label: 'text-base',\n option: 'text-base py-2 px-4',\n icon: 'h-5 w-5',\n },\n lg: {\n wrapper: 'h-12',\n input: 'h-12 text-lg pl-5 pr-12',\n button: 'h-12 w-12',\n label: 'text-lg',\n option: 'text-lg py-2.5 px-5',\n icon: 'h-6 w-6',\n },\n}\n\n// ============================================\n// COMBOBOX COMPONENT\n// ============================================\n\n/**\n * A combobox combines a text input with a listbox, allowing users to filter a list of options.\n *\n * Built on solidaria-components ComboBox for full accessibility support.\n */\nexport function ComboBox<T>(props: ComboBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ])\n\n const size = local.size ?? 'md'\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxRenderProps): string => {\n const base = 'relative inline-flex flex-col gap-1.5'\n const disabledClass = renderProps.isDisabled ? 'opacity-50' : ''\n return [base, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <ComboBoxSizeContext.Provider value={size}>\n <HeadlessComboBox\n {...headlessProps}\n class={getClassName}\n >\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${sizeStyles[size].label}`}>\n {local.label}\n </label>\n </Show>\n {props.children}\n <Show when={local.description && !local.isInvalid}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && local.isInvalid}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </HeadlessComboBox>\n </ComboBoxSizeContext.Provider>\n )\n}\n\n// ============================================\n// COMBOBOX INPUT GROUP COMPONENT\n// ============================================\n\n/**\n * A wrapper for the input and button that provides proper styling.\n */\nexport function ComboBoxInputGroup(props: { children: JSX.Element; class?: string }): JSX.Element {\n const size = useContext(ComboBoxSizeContext)\n const styles = () => sizeStyles[size]\n\n return (\n <div class={`relative flex items-center ${styles().wrapper} ${props.class ?? ''}`}>\n {props.children}\n </div>\n )\n}\n\n// ============================================\n// COMBOBOX INPUT COMPONENT\n// ============================================\n\n/**\n * The text input for a combobox.\n */\nexport function ComboBoxInput(props: ComboBoxInputProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(ComboBoxSizeContext)\n const styles = () => sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxInputRenderProps): string => {\n const base = 'w-full rounded-lg border-2 transition-all duration-200 outline-none'\n const sizeClass = styles().input\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200 text-primary-500 cursor-not-allowed'\n } else if (renderProps.isOpen) {\n colorClass = 'border-accent bg-bg-300 text-primary-100'\n } else if (renderProps.isHovered) {\n colorClass = 'border-accent-300 bg-bg-300 text-primary-100'\n } else {\n colorClass = 'border-primary-600 bg-bg-400 text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessComboBoxInput\n {...headlessProps}\n class={getClassName}\n />\n )\n}\n\n// ============================================\n// COMBOBOX BUTTON COMPONENT\n// ============================================\n\n/**\n * The trigger button for a combobox.\n * SSR-compatible - renders children or chevron icon directly without render props.\n */\nexport function ComboBoxButton(props: ComboBoxButtonProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(ComboBoxSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxButtonRenderProps): string => {\n const base = 'absolute right-0 top-0 flex items-center justify-center transition-all duration-200 rounded-r-lg'\n const sizeClass = sizeStyle.button\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isOpen) {\n colorClass = 'text-accent'\n } else if (renderProps.isHovered) {\n colorClass = 'text-accent-300 cursor-pointer'\n } else {\n colorClass = 'text-primary-400 cursor-pointer hover:text-primary-200'\n }\n\n return [base, sizeClass, colorClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessComboBoxButton\n {...headlessProps}\n class={getClassName}\n >\n {props.children || <ChevronIcon class={`${sizeStyle.icon} transition-transform duration-200 data-open:rotate-180`} />}\n </HeadlessComboBoxButton>\n )\n}\n\n// ============================================\n// COMBOBOX LISTBOX COMPONENT\n// ============================================\n\n/**\n * The listbox popup for a combobox.\n */\nexport function ComboBoxListBox<T>(props: ComboBoxListBoxProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: ComboBoxListBoxRenderProps): string => {\n const base = 'absolute z-50 mt-1 w-full rounded-lg border-2 border-primary-600 bg-bg-400 py-1 shadow-lg max-h-60 overflow-auto'\n return [base, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessComboBoxListBox\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n )\n}\n\n// ============================================\n// COMBOBOX OPTION COMPONENT\n// ============================================\n\n/**\n * An option in a combobox listbox.\n * SSR-compatible - renders check icon and content directly without render props.\n */\nexport function ComboBoxOption<T>(props: ComboBoxOptionProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const size = useContext(ComboBoxSizeContext)\n const sizeStyle = sizeStyles[size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ComboBoxOptionRenderProps): string => {\n const base = 'flex items-center gap-2 cursor-pointer transition-colors duration-150'\n const sizeClass = sizeStyle.option\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'text-primary-500 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n colorClass = 'bg-accent/20 text-accent'\n } else if (renderProps.isFocused || renderProps.isHovered) {\n colorClass = 'bg-bg-300 text-primary-100'\n } else {\n colorClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, colorClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n // Compute padding for non-selected items to align with check icon\n const iconPadding: Record<ComboBoxSize, string> = {\n sm: 'pl-6', // h-4 icon + gap\n md: 'pl-7', // h-5 icon + gap\n lg: 'pl-8', // h-6 icon + gap\n }\n\n return (\n <HeadlessComboBoxOption\n {...headlessProps}\n class={getClassName}\n >\n <CheckIcon class={`${sizeStyle.icon} text-accent shrink-0 hidden data-selected:block`} />\n <span class={`flex-1 data-selected:pl-0 ${iconPadding[size]}`}>\n {props.children as JSX.Element}\n </span>\n </HeadlessComboBoxOption>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nComboBox.InputGroup = ComboBoxInputGroup\nComboBox.Input = ComboBoxInput\nComboBox.Button = ComboBoxButton\nComboBox.ListBox = ComboBoxListBox\nComboBox.Option = ComboBoxOption\n\n// Re-export types and utilities for convenience\nexport type { Key, FilterFn, MenuTriggerAction }\nexport { defaultContainsFilter }\n","/**\n * Toast components for proyecto-viviana-ui\n *\n * Toast notifications with auto-dismiss, animations, and variants.\n * Built on top of solidaria-components for accessibility.\n */\n\nimport { type JSX, splitProps, For, Show } from 'solid-js';\nimport {\n Toast as HeadlessToast,\n ToastRegion as HeadlessToastRegion,\n ToastProvider as HeadlessToastProvider,\n ToastContext,\n ToastCloseButton as HeadlessToastCloseButton,\n globalToastQueue,\n addToast as headlessAddToast,\n useToastContext,\n type ToastContent,\n type ToastProps as HeadlessToastProps,\n type ToastRegionProps as HeadlessToastRegionProps,\n type ToastProviderProps as HeadlessToastProviderProps,\n type ToastRenderProps,\n type ToastRegionRenderProps,\n} from '@proyecto-viviana/solidaria-components';\nimport { type QueuedToast, type ToastOptions } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type ToastPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end';\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error' | 'neutral';\n\nexport interface ToastProviderProps extends HeadlessToastProviderProps {}\n\nexport interface ToastRegionProps extends Omit<HeadlessToastRegionProps, 'class' | 'style' | 'children'> {\n /** The placement of the toast region. */\n placement?: ToastPlacement;\n /** Additional CSS class name. */\n class?: string;\n}\n\nexport interface ToastProps extends Omit<HeadlessToastProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst regionStyles = [\n 'flex flex-col gap-3',\n 'p-4',\n].join(' ');\n\nconst toastBaseStyles = [\n 'flex items-start gap-3',\n 'px-4 py-3',\n 'rounded-lg shadow-lg',\n 'min-w-[300px] max-w-[400px]',\n 'border',\n // Animations\n 'data-[animation=entering]:animate-in data-[animation=entering]:fade-in-0 data-[animation=entering]:slide-in-from-right-5',\n 'data-[animation=exiting]:animate-out data-[animation=exiting]:fade-out-0 data-[animation=exiting]:slide-out-to-right-5',\n].join(' ');\n\nconst variantStyles: Record<ToastVariant, string> = {\n info: 'bg-blue-50 border-blue-200 text-blue-800 dark:bg-blue-950 dark:border-blue-800 dark:text-blue-200',\n success: 'bg-green-50 border-green-200 text-green-800 dark:bg-green-950 dark:border-green-800 dark:text-green-200',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-800 dark:bg-yellow-950 dark:border-yellow-800 dark:text-yellow-200',\n error: 'bg-red-50 border-red-200 text-red-800 dark:bg-red-950 dark:border-red-800 dark:text-red-200',\n neutral: 'bg-neutral-50 border-neutral-200 text-neutral-800 dark:bg-neutral-900 dark:border-neutral-700 dark:text-neutral-200',\n};\n\nconst iconStyles: Record<ToastVariant, string> = {\n info: 'text-blue-500 dark:text-blue-400',\n success: 'text-green-500 dark:text-green-400',\n warning: 'text-yellow-500 dark:text-yellow-400',\n error: 'text-red-500 dark:text-red-400',\n neutral: 'text-neutral-500 dark:text-neutral-400',\n};\n\nconst closeButtonStyles = [\n 'ml-auto -mr-1 -mt-1',\n 'p-1 rounded-md',\n 'text-current opacity-60 hover:opacity-100',\n 'transition-opacity',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2',\n].join(' ');\n\n// ============================================\n// ICONS\n// ============================================\n\nconst InfoIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst SuccessIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n);\n\nconst ErrorIcon = () => (\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nconst getVariantIcon = (variant: ToastVariant) => {\n switch (variant) {\n case 'success': return <SuccessIcon />;\n case 'warning': return <WarningIcon />;\n case 'error': return <ErrorIcon />;\n case 'info':\n case 'neutral':\n default: return <InfoIcon />;\n }\n};\n\n// ============================================\n// COMPONENTS\n// ============================================\n\n/**\n * ToastProvider creates a toast queue context for descendant components.\n * Wrap your app or a section that needs toast notifications.\n *\n * @example\n * ```tsx\n * <ToastProvider>\n * <App />\n * <ToastRegion placement=\"bottom-end\" />\n * </ToastProvider>\n * ```\n */\nexport function ToastProvider(props: ToastProviderProps): JSX.Element {\n return <HeadlessToastProvider {...props} />;\n}\n\n/**\n * ToastRegion displays all visible toasts in a fixed position.\n *\n * @example\n * ```tsx\n * <ToastRegion placement=\"bottom-end\" />\n * ```\n */\nexport function ToastRegion(props: ToastRegionProps): JSX.Element {\n const [local, rest] = splitProps(props, ['placement', 'class']);\n\n return (\n <HeadlessToastRegion\n {...rest}\n placement={local.placement ?? 'bottom-end'}\n class={(_renderProps: ToastRegionRenderProps) => {\n return [regionStyles, local.class ?? ''].filter(Boolean).join(' ');\n }}\n >\n {(regionProps: ToastRegionRenderProps) => (\n <For each={regionProps.visibleToasts}>\n {(toast) => <Toast toast={toast} />}\n </For>\n )}\n </HeadlessToastRegion>\n );\n}\n\n/**\n * Toast displays an individual notification with icon, content, and close button.\n *\n * Usually you don't need to use this directly - ToastRegion renders toasts automatically.\n */\nexport function Toast(props: ToastProps): JSX.Element {\n const [local, rest] = splitProps(props, ['toast', 'class']);\n\n const content = () => local.toast.content;\n const variant = (): ToastVariant => content().type ?? 'neutral';\n\n return (\n <HeadlessToast\n {...rest}\n toast={local.toast}\n class={(_renderProps: ToastRenderProps) => {\n return [\n toastBaseStyles,\n variantStyles[variant()],\n local.class ?? '',\n ].filter(Boolean).join(' ');\n }}\n >\n {/* Icon */}\n <div class={`flex-shrink-0 ${iconStyles[variant()]}`}>\n {getVariantIcon(variant())}\n </div>\n\n {/* Content */}\n <div class=\"flex-1 min-w-0\">\n <Show when={content().title}>\n <p class=\"font-semibold text-sm\">{content().title}</p>\n </Show>\n <Show when={content().description}>\n <p class=\"text-sm opacity-90 mt-1\">{content().description}</p>\n </Show>\n <Show when={content().action}>\n <button\n type=\"button\"\n class=\"mt-2 text-sm font-medium underline hover:no-underline\"\n onClick={content().action?.onAction}\n >\n {content().action?.label}\n </button>\n </Show>\n </div>\n\n {/* Close Button */}\n <HeadlessToastCloseButton\n toast={local.toast}\n class={closeButtonStyles}\n aria-label=\"Dismiss\"\n >\n <CloseIcon />\n </HeadlessToastCloseButton>\n </HeadlessToast>\n );\n}\n\n// ============================================\n// GLOBAL TOAST API\n// ============================================\n\n/**\n * Add a toast to the global queue.\n * Use this to show toasts from anywhere in your app.\n *\n * @example\n * ```tsx\n * // Show a success toast\n * addToast({\n * title: 'Success!',\n * description: 'Your changes have been saved.',\n * type: 'success',\n * });\n *\n * // Show an error toast with auto-dismiss\n * addToast({\n * title: 'Error',\n * description: 'Something went wrong.',\n * type: 'error',\n * }, { timeout: 5000 });\n *\n * // Show a toast with action\n * addToast({\n * title: 'File deleted',\n * type: 'info',\n * action: {\n * label: 'Undo',\n * onAction: () => restoreFile(),\n * },\n * }, { timeout: 10000 });\n * ```\n */\nexport function addToast(\n content: ToastContent,\n options?: ToastOptions\n): string {\n return headlessAddToast(content, options);\n}\n\n/**\n * Convenience function to show a success toast.\n */\nexport function toastSuccess(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'success' }, { timeout: 5000, ...options });\n}\n\n/**\n * Convenience function to show an error toast.\n */\nexport function toastError(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'error' }, { timeout: 8000, ...options });\n}\n\n/**\n * Convenience function to show a warning toast.\n */\nexport function toastWarning(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'warning' }, { timeout: 6000, ...options });\n}\n\n/**\n * Convenience function to show an info toast.\n */\nexport function toastInfo(message: string, options?: Omit<ToastOptions, 'priority'>): string {\n return addToast({ title: message, type: 'info' }, { timeout: 5000, ...options });\n}\n\n// Re-exports\nexport {\n ToastContext,\n globalToastQueue,\n useToastContext,\n type ToastContent,\n type ToastRenderProps,\n type ToastRegionRenderProps,\n type QueuedToast,\n type ToastOptions,\n};\n","/**\n * Disclosure and Accordion components for proyecto-viviana-ui\n *\n * Styled disclosure/accordion components built on top of solidaria-components.\n * Inspired by Spectrum 2's disclosure patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js';\nimport {\n Disclosure as HeadlessDisclosure,\n DisclosureGroup as HeadlessDisclosureGroup,\n DisclosureTrigger as HeadlessDisclosureTrigger,\n DisclosurePanel as HeadlessDisclosurePanel,\n type DisclosureProps as HeadlessDisclosureProps,\n type DisclosureGroupProps as HeadlessDisclosureGroupProps,\n type DisclosureTriggerProps as HeadlessDisclosureTriggerProps,\n type DisclosurePanelProps as HeadlessDisclosurePanelProps,\n type DisclosureRenderProps,\n type DisclosureGroupRenderProps,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// SIZE AND VARIANT CONTEXT\n// ============================================\n\nexport type DisclosureSize = 'sm' | 'md' | 'lg';\nexport type DisclosureVariant = 'default' | 'bordered' | 'filled' | 'ghost';\n\ninterface DisclosureContextValue {\n size: DisclosureSize;\n variant: DisclosureVariant;\n}\n\nconst DisclosureSizeContext = createContext<DisclosureContextValue>({\n size: 'md',\n variant: 'default',\n});\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface DisclosureGroupProps extends Omit<HeadlessDisclosureGroupProps, 'class' | 'style'> {\n /** The size of all disclosures in the group. */\n size?: DisclosureSize;\n /** The visual variant of all disclosures in the group. */\n variant?: DisclosureVariant;\n /** Additional CSS class name. */\n class?: string;\n}\n\nexport interface DisclosureProps extends Omit<HeadlessDisclosureProps, 'class' | 'style'> {\n /** The size of the disclosure. Overrides group size if set. */\n size?: DisclosureSize;\n /** The visual variant. Overrides group variant if set. */\n variant?: DisclosureVariant;\n /** Additional CSS class name. */\n class?: string;\n}\n\nexport interface DisclosureTriggerProps extends Omit<HeadlessDisclosureTriggerProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string;\n /** Optional icon to show (defaults to chevron). */\n hideIcon?: boolean;\n}\n\nexport interface DisclosurePanelProps extends Omit<HeadlessDisclosurePanelProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n trigger: 'px-3 py-2 text-sm',\n panel: 'px-3 py-2 text-sm',\n icon: 'w-4 h-4',\n gap: 'gap-1',\n },\n md: {\n trigger: 'px-4 py-3 text-base',\n panel: 'px-4 py-3 text-base',\n icon: 'w-5 h-5',\n gap: 'gap-2',\n },\n lg: {\n trigger: 'px-5 py-4 text-lg',\n panel: 'px-5 py-4 text-lg',\n icon: 'w-6 h-6',\n gap: 'gap-3',\n },\n};\n\nconst variantStyles = {\n default: {\n container: 'border-b border-primary-700',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200',\n default: 'text-primary-200 hover:text-primary-100 hover:bg-bg-400/50',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300',\n },\n bordered: {\n container: 'border border-primary-600 rounded-lg mb-2 overflow-hidden',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200',\n default: 'text-primary-200 hover:bg-bg-400/50',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300 border-t border-primary-600',\n },\n filled: {\n container: 'bg-bg-400 rounded-lg mb-2 overflow-hidden',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200',\n default: 'text-primary-200 hover:bg-bg-300',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300 bg-bg-300/50',\n },\n ghost: {\n container: '',\n trigger: {\n base: 'w-full flex items-center justify-between text-left transition-colors duration-200 rounded-md',\n default: 'text-primary-200 hover:bg-bg-400/50',\n disabled: 'text-primary-500 cursor-not-allowed',\n },\n panel: 'text-primary-300',\n },\n};\n\n// ============================================\n// DISCLOSURE GROUP COMPONENT\n// ============================================\n\n/**\n * DisclosureGroup manages a group of Disclosure components.\n * Use this to create an accordion where only one item can be expanded at a time.\n *\n * @example\n * ```tsx\n * <DisclosureGroup>\n * <Disclosure id=\"item1\">\n * <DisclosureTrigger>Section 1</DisclosureTrigger>\n * <DisclosurePanel>Content 1</DisclosurePanel>\n * </Disclosure>\n * <Disclosure id=\"item2\">\n * <DisclosureTrigger>Section 2</DisclosureTrigger>\n * <DisclosurePanel>Content 2</DisclosurePanel>\n * </Disclosure>\n * </DisclosureGroup>\n * ```\n */\nexport function DisclosureGroup(props: DisclosureGroupProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n ]);\n\n const size = local.size ?? 'md';\n const variant = local.variant ?? 'default';\n const customClass = local.class ?? '';\n\n const getClassName = (_renderProps: DisclosureGroupRenderProps): string => {\n const base = 'flex flex-col';\n const gapClass = sizeStyles[size].gap;\n return [base, gapClass, customClass].filter(Boolean).join(' ');\n };\n\n return (\n <DisclosureSizeContext.Provider value={{ size, variant }}>\n <HeadlessDisclosureGroup\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n </DisclosureSizeContext.Provider>\n );\n}\n\n// ============================================\n// DISCLOSURE COMPONENT\n// ============================================\n\n/**\n * Disclosure is a widget that can be toggled to show or hide content.\n *\n * @example\n * ```tsx\n * <Disclosure>\n * <DisclosureTrigger>Show more</DisclosureTrigger>\n * <DisclosurePanel>Hidden content here...</DisclosurePanel>\n * </Disclosure>\n * ```\n */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n ]);\n\n const parentCtx = useContext(DisclosureSizeContext);\n const size = local.size ?? parentCtx.size;\n const variant = local.variant ?? parentCtx.variant;\n const customClass = local.class ?? '';\n\n const getClassName = (_renderProps: DisclosureRenderProps): string => {\n const variantClass = variantStyles[variant].container;\n return [variantClass, customClass].filter(Boolean).join(' ');\n };\n\n return (\n <DisclosureSizeContext.Provider value={{ size, variant }}>\n <HeadlessDisclosure\n {...headlessProps}\n class={getClassName}\n >\n {props.children}\n </HeadlessDisclosure>\n </DisclosureSizeContext.Provider>\n );\n}\n\n// ============================================\n// DISCLOSURE TRIGGER COMPONENT\n// ============================================\n\n/**\n * DisclosureTrigger is the button that toggles the disclosure.\n * The chevron rotates based on the data-expanded attribute using Tailwind's group class.\n */\nexport function DisclosureTrigger(props: DisclosureTriggerProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'hideIcon']);\n const ctx = useContext(DisclosureSizeContext);\n const customClass = local.class ?? '';\n\n return (\n <HeadlessDisclosureTrigger\n {...headlessProps}\n class={[\n 'group', // Enable Tailwind group selector for chevron rotation\n variantStyles[ctx.variant].trigger.base,\n sizeStyles[ctx.size].trigger,\n customClass,\n ].filter(Boolean).join(' ')}\n >\n {props.children}\n <Show when={!local.hideIcon}>\n <svg\n class={[\n sizeStyles[ctx.size].icon,\n 'transition-transform duration-200',\n 'group-data-[expanded=true]:rotate-180', // Rotate when expanded\n ].filter(Boolean).join(' ')}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n style={{ \"flex-shrink\": 0 }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </Show>\n </HeadlessDisclosureTrigger>\n );\n}\n\n// ============================================\n// DISCLOSURE PANEL COMPONENT\n// ============================================\n\n/**\n * DisclosurePanel contains the content that is shown/hidden.\n */\nexport function DisclosurePanel(props: DisclosurePanelProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class']);\n const ctx = useContext(DisclosureSizeContext);\n const customClass = local.class ?? '';\n\n const getClassName = (_renderProps: DisclosureRenderProps): string => {\n const base = variantStyles[ctx.variant].panel;\n const sizeClass = sizeStyles[ctx.size].panel;\n return [base, sizeClass, customClass].filter(Boolean).join(' ');\n };\n\n return (\n <HeadlessDisclosurePanel\n {...headlessProps}\n class={getClassName}\n children={props.children}\n />\n );\n}\n\n// Attach sub-components for convenience\nDisclosure.Trigger = DisclosureTrigger;\nDisclosure.Panel = DisclosurePanel;\nDisclosureGroup.Item = Disclosure;\n","/**\n * Meter component for proyecto-viviana-ui\n *\n * Styled meter component built on top of the solidaria hook directly.\n * Meters represent a quantity within a known range (unlike progress bars which show progress toward a goal).\n */\n\nimport { type JSX, splitProps, Show, createMemo } from 'solid-js';\nimport { createMeter } from '@proyecto-viviana/solidaria';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type MeterSize = 'sm' | 'md' | 'lg';\nexport type MeterVariant = 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface MeterProps {\n /** The current value (controlled). @default 0 */\n value?: number;\n /** The smallest value allowed. @default 0 */\n minValue?: number;\n /** The largest value allowed. @default 100 */\n maxValue?: number;\n /** The content to display as the value's label (e.g. \"75 GB\"). */\n valueLabel?: string;\n /** The size of the meter. @default 'md' */\n size?: MeterSize;\n /** The visual style variant. @default 'primary' */\n variant?: MeterVariant;\n /** The label to display above the meter. */\n label?: string;\n /** Whether to show the value text. @default true */\n showValueLabel?: boolean;\n /** Additional CSS class name. */\n class?: string;\n /** An accessibility label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n track: 'h-1',\n text: 'text-xs',\n },\n md: {\n track: 'h-2',\n text: 'text-sm',\n },\n lg: {\n track: 'h-3',\n text: 'text-base',\n },\n};\n\nconst variantStyles = {\n primary: 'bg-primary-500',\n accent: 'bg-accent',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n info: 'bg-blue-500',\n};\n\n// ============================================\n// UTILITIES\n// ============================================\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n// ============================================\n// METER COMPONENT\n// ============================================\n\n/**\n * Meters represent a quantity within a known range, or a fractional value.\n * Unlike progress bars, meters represent a current value rather than progress toward a goal.\n *\n * @example\n * ```tsx\n * // Storage usage meter\n * <Meter value={75} label=\"Storage space\" valueLabel=\"75 GB of 100 GB\" />\n *\n * // Battery level\n * <Meter value={25} variant=\"warning\" label=\"Battery\" />\n *\n * // CPU usage with dynamic color\n * <Meter value={cpuUsage} variant={cpuUsage > 80 ? 'danger' : 'success'} label=\"CPU\" />\n * ```\n */\nexport function Meter(props: MeterProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n 'size',\n 'variant',\n 'label',\n 'showValueLabel',\n 'class',\n ]);\n\n const size = () => local.size ?? 'md';\n const variant = () => local.variant ?? 'primary';\n const showValueLabel = () => local.showValueLabel ?? true;\n\n // Create meter aria props\n const meterAria = createMeter({\n get value() { return ariaProps.value; },\n get minValue() { return ariaProps.minValue; },\n get maxValue() { return ariaProps.maxValue; },\n get valueLabel() { return ariaProps.valueLabel; },\n get label() { return local.label; },\n get 'aria-label'() { return ariaProps['aria-label']; },\n });\n\n // Calculate percentage\n const percentage = createMemo(() => {\n const value = ariaProps.value ?? 0;\n const minValue = ariaProps.minValue ?? 0;\n const maxValue = ariaProps.maxValue ?? 100;\n const clampedValue = clamp(value, minValue, maxValue);\n return ((clampedValue - minValue) / (maxValue - minValue)) * 100;\n });\n\n // Get value text from aria props\n const valueText = () => meterAria.meterProps['aria-valuetext'] as string | undefined;\n\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <div\n {...meterAria.meterProps}\n class={`w-full ${local.class ?? ''}`}\n >\n {/* Label and value row */}\n <Show when={local.label || showValueLabel()}>\n <div class={`flex justify-between items-center mb-1 ${sizeConfig().text}`}>\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium\">{local.label}</span>\n </Show>\n <Show when={showValueLabel()}>\n <span class=\"text-primary-300\">{valueText()}</span>\n </Show>\n </div>\n </Show>\n\n {/* Track */}\n <div class={`w-full ${sizeConfig().track} bg-bg-300 rounded-full overflow-hidden`}>\n {/* Fill */}\n <div\n class={`h-full rounded-full transition-all duration-300 ${variantStyles[variant()]}`}\n style={{\n width: `${percentage()}%`,\n }}\n />\n </div>\n </div>\n );\n}\n","/**\n * TagGroup component for proyecto-viviana-ui\n *\n * Styled tag group component built on top of solidaria-components.\n * A tag group displays a collection of tags that can be selected and/or removed.\n */\n\nimport { type JSX, splitProps, Show } from 'solid-js';\nimport {\n TagList as HeadlessTagList,\n Tag as HeadlessTag,\n} from '@proyecto-viviana/solidaria-components';\nimport type { Key, SelectionMode } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TagGroupSize = 'sm' | 'md' | 'lg';\nexport type TagGroupVariant = 'default' | 'outline' | 'solid';\n\nexport interface TagGroupProps<T> {\n /** The label for the tag group. */\n label?: string;\n /** The items to display as tags. */\n items: T[];\n /** Function to render the content of each tag. */\n children: (item: T) => JSX.Element;\n /** Function to get a unique key from an item. */\n getKey?: (item: T) => Key;\n /** Handler called when tags are removed. */\n onRemove?: (keys: Set<Key>) => void;\n /** The size of the tags. @default 'md' */\n size?: TagGroupSize;\n /** The visual variant of the tags. @default 'default' */\n variant?: TagGroupVariant;\n /** The selection mode. @default 'none' */\n selectionMode?: SelectionMode;\n /** The currently selected keys (controlled). */\n selectedKeys?: Iterable<Key>;\n /** Handler called when selection changes. */\n onSelectionChange?: (keys: 'all' | Set<Key>) => void;\n /** Keys that are disabled. */\n disabledKeys?: Iterable<Key>;\n /** Additional CSS class name. */\n class?: string;\n /** Content to render when empty. */\n renderEmptyState?: () => JSX.Element;\n}\n\nexport interface TagProps {\n /** A unique key for this tag. */\n id: Key;\n /** The content of the tag. */\n children: JSX.Element;\n /** Whether the tag is disabled. */\n isDisabled?: boolean;\n /** Additional CSS class name. */\n class?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n tag: 'text-xs px-2 py-0.5 gap-1',\n removeButton: 'w-3 h-3',\n label: 'text-xs',\n },\n md: {\n tag: 'text-sm px-2.5 py-1 gap-1.5',\n removeButton: 'w-4 h-4',\n label: 'text-sm',\n },\n lg: {\n tag: 'text-base px-3 py-1.5 gap-2',\n removeButton: 'w-5 h-5',\n label: 'text-base',\n },\n};\n\nconst variantStyles = {\n default: {\n tag: 'bg-bg-400 text-primary-200 hover:bg-bg-300',\n selected: 'bg-accent text-white',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n outline: {\n tag: 'border border-primary-600 text-primary-200 hover:border-primary-500 hover:bg-bg-400/50',\n selected: 'border-accent bg-accent/10 text-accent',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n solid: {\n tag: 'bg-primary-600 text-primary-100 hover:bg-primary-500',\n selected: 'bg-accent text-white',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n};\n\n// ============================================\n// TAG GROUP COMPONENT\n// ============================================\n\n/**\n * A tag group displays a collection of tags that can be selected and/or removed.\n *\n * @example\n * ```tsx\n * // Simple tag group\n * <TagGroup\n * label=\"Categories\"\n * items={categories}\n * onRemove={(keys) => removeCategories(keys)}\n * >\n * {(item) => item.name}\n * </TagGroup>\n *\n * // With selection\n * <TagGroup\n * label=\"Filters\"\n * items={filters}\n * selectionMode=\"multiple\"\n * selectedKeys={selectedFilters}\n * onSelectionChange={setSelectedFilters}\n * >\n * {(item) => item.label}\n * </TagGroup>\n * ```\n */\nexport function TagGroup<T extends { id?: Key; key?: Key }>(props: TagGroupProps<T>): JSX.Element {\n const [local] = splitProps(props, [\n 'label',\n 'items',\n 'getKey',\n 'onRemove',\n 'size',\n 'variant',\n 'selectionMode',\n 'selectedKeys',\n 'onSelectionChange',\n 'disabledKeys',\n 'class',\n 'renderEmptyState',\n ]);\n\n const size = () => local.size ?? 'md';\n const variant = () => local.variant ?? 'default';\n const sizeConfig = () => sizeStyles[size()];\n const variantConfig = () => variantStyles[variant()];\n\n // Default getKey function\n const getKey = (item: T): Key => {\n if (local.getKey) return local.getKey(item);\n if (item.id !== undefined) return item.id;\n if (item.key !== undefined) return item.key;\n return String(item);\n };\n\n return (\n <div class={`flex flex-col gap-2 ${local.class ?? ''}`}>\n <Show when={local.label}>\n <span class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n </span>\n </Show>\n <HeadlessTagList\n items={local.items}\n getKey={getKey}\n onRemove={local.onRemove}\n selectionMode={local.selectionMode}\n selectedKeys={local.selectedKeys}\n onSelectionChange={local.onSelectionChange}\n disabledKeys={local.disabledKeys}\n class=\"flex flex-wrap gap-2\"\n renderEmptyState={local.renderEmptyState ?? (() => (\n <span class=\"text-primary-400 text-sm italic\">No items</span>\n ))}\n >\n {(item) => (\n <HeadlessTag\n id={getKey(item)}\n class={({ isSelected, isDisabled }) => {\n const base = `\n inline-flex items-center rounded-full\n transition-colors duration-150 cursor-pointer\n focus:outline-none focus:ring-2 focus:ring-accent/50\n ${sizeConfig().tag}\n `;\n const variantClass = isSelected\n ? variantConfig().selected\n : variantConfig().tag;\n const disabledClass = isDisabled ? variantConfig().disabled : '';\n return `${base} ${variantClass} ${disabledClass}`.trim();\n }}\n >\n {(renderProps) => (\n <>\n <span>{props.children(item)}</span>\n <Show when={renderProps.allowsRemoving}>\n <button\n type=\"button\"\n class={`\n ${sizeConfig().removeButton}\n rounded-full flex items-center justify-center\n hover:bg-black/20 transition-colors\n focus:outline-none\n `}\n onClick={(e) => {\n e.stopPropagation();\n local.onRemove?.(new Set([getKey(item)]));\n }}\n aria-label=\"Remove\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-full h-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </Show>\n </>\n )}\n </HeadlessTag>\n )}\n </HeadlessTagList>\n </div>\n );\n}\n\n// Re-export types\nexport type { Key, SelectionMode };\n","/**\n * Calendar component for proyecto-viviana-ui\n *\n * Styled calendar component built on top of solidaria-components.\n * A calendar displays a grid of days and allows users to select dates.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n Calendar as HeadlessCalendar,\n CalendarHeading,\n CalendarButton,\n CalendarGrid,\n CalendarCell,\n type CalendarDate,\n type DateValue,\n} from '@proyecto-viviana/solidaria-components';\nimport type { CalendarStateProps } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type CalendarSize = 'sm' | 'md' | 'lg';\n\nexport interface CalendarProps<T extends DateValue = DateValue>\n extends Omit<CalendarStateProps<T>, 'locale'> {\n /** The size of the calendar. @default 'md' */\n size?: CalendarSize;\n /** Additional CSS class name. */\n class?: string;\n /** Whether to show week numbers. */\n showWeekNumbers?: boolean;\n /** The locale to use for formatting. */\n locale?: string;\n /** Custom aria label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'w-64',\n header: 'text-sm',\n cell: 'w-8 h-8 text-xs',\n button: 'w-6 h-6',\n },\n md: {\n container: 'w-80',\n header: 'text-base',\n cell: 'w-10 h-10 text-sm',\n button: 'w-8 h-8',\n },\n lg: {\n container: 'w-96',\n header: 'text-lg',\n cell: 'w-12 h-12 text-base',\n button: 'w-10 h-10',\n },\n};\n\n// ============================================\n// CALENDAR COMPONENT\n// ============================================\n\n/**\n * A calendar displays a grid of days and allows users to select a date.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Calendar\n * aria-label=\"Event date\"\n * onChange={(date) => console.log(date)}\n * />\n *\n * // Controlled\n * const [date, setDate] = createSignal<CalendarDate | null>(null);\n * <Calendar\n * value={date()}\n * onChange={setDate}\n * />\n *\n * // With min/max dates\n * <Calendar\n * minValue={today(getLocalTimeZone())}\n * maxValue={today(getLocalTimeZone()).add({ months: 3 })}\n * />\n * ```\n */\nexport function Calendar<T extends DateValue = CalendarDate>(\n props: CalendarProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'showWeekNumbers',\n 'aria-label',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <HeadlessCalendar\n {...rest}\n aria-label={local['aria-label']}\n class={`\n ${sizeConfig().container}\n bg-bg-500 rounded-lg border border-primary-700 p-4\n ${local.class ?? ''}\n `}\n >\n {/* Header with navigation */}\n <header class=\"flex items-center justify-between mb-4\">\n <CalendarButton\n slot=\"previous\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </CalendarButton>\n\n <CalendarHeading\n class={`\n font-semibold text-primary-100\n ${sizeConfig().header}\n `}\n />\n\n <CalendarButton\n slot=\"next\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </CalendarButton>\n </header>\n\n {/* Calendar grid */}\n <CalendarGrid\n class=\"w-full border-collapse\"\n >\n {(date) => (\n <CalendarCell\n date={date}\n class={({ isSelected, isFocused, isDisabled, isOutsideMonth, isToday, isPressed }) => {\n const base = `\n ${sizeConfig().cell}\n flex items-center justify-center\n rounded-md cursor-pointer\n transition-colors duration-150\n focus:outline-none\n `;\n\n let stateClass = '';\n\n if (isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed';\n } else if (isSelected) {\n stateClass = 'bg-accent text-white font-medium';\n } else if (isOutsideMonth) {\n stateClass = 'text-primary-600';\n } else if (isToday) {\n stateClass = 'ring-1 ring-accent text-primary-100';\n } else {\n stateClass = 'text-primary-200 hover:bg-bg-400';\n }\n\n const focusClass = isFocused && !isSelected\n ? 'ring-2 ring-accent/50'\n : '';\n\n const pressedClass = isPressed && !isDisabled\n ? 'scale-95'\n : '';\n\n return `${base} ${stateClass} ${focusClass} ${pressedClass}`.trim();\n }}\n />\n )}\n </CalendarGrid>\n </HeadlessCalendar>\n );\n}\n\n// Re-export types\nexport type { CalendarDate, DateValue };\n","/**\n * RangeCalendar component for proyecto-viviana-ui\n *\n * Styled range calendar component built on top of solidaria-components.\n * A range calendar displays a grid of days and allows users to select a date range.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n RangeCalendar as HeadlessRangeCalendar,\n RangeCalendarHeading,\n RangeCalendarButton,\n RangeCalendarGrid,\n RangeCalendarCell,\n type CalendarDate,\n type DateValue,\n type RangeValue,\n} from '@proyecto-viviana/solidaria-components';\nimport type { RangeCalendarStateProps } from '@proyecto-viviana/solid-stately';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type RangeCalendarSize = 'sm' | 'md' | 'lg';\n\nexport interface RangeCalendarProps<T extends DateValue = DateValue>\n extends Omit<RangeCalendarStateProps<T>, 'locale'> {\n /** The size of the calendar. @default 'md' */\n size?: RangeCalendarSize;\n /** Additional CSS class name. */\n class?: string;\n /** The locale to use for formatting. */\n locale?: string;\n /** Custom aria label. */\n 'aria-label'?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'w-64',\n header: 'text-sm',\n cell: 'w-8 h-8 text-xs',\n button: 'w-6 h-6',\n },\n md: {\n container: 'w-80',\n header: 'text-base',\n cell: 'w-10 h-10 text-sm',\n button: 'w-8 h-8',\n },\n lg: {\n container: 'w-96',\n header: 'text-lg',\n cell: 'w-12 h-12 text-base',\n button: 'w-10 h-10',\n },\n};\n\n// ============================================\n// RANGE CALENDAR COMPONENT\n// ============================================\n\n/**\n * A range calendar displays a grid of days and allows users to select a date range.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <RangeCalendar\n * aria-label=\"Trip dates\"\n * onChange={(range) => console.log(range)}\n * />\n *\n * // Controlled\n * const [range, setRange] = createSignal<RangeValue<CalendarDate> | null>(null);\n * <RangeCalendar\n * value={range()}\n * onChange={setRange}\n * />\n * ```\n */\nexport function RangeCalendar<T extends DateValue = CalendarDate>(\n props: RangeCalendarProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'aria-label',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n\n return (\n <HeadlessRangeCalendar\n {...rest}\n aria-label={local['aria-label']}\n class={`\n ${sizeConfig().container}\n bg-bg-500 rounded-lg border border-primary-700 p-4\n ${local.class ?? ''}\n `}\n >\n {/* Header with navigation */}\n <header class=\"flex items-center justify-between mb-4\">\n <RangeCalendarButton\n slot=\"previous\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </RangeCalendarButton>\n\n <RangeCalendarHeading\n class={`\n font-semibold text-primary-100\n ${sizeConfig().header}\n `}\n />\n\n <RangeCalendarButton\n slot=\"next\"\n class={`\n ${sizeConfig().button}\n flex items-center justify-center\n rounded-md text-primary-200\n hover:bg-bg-400 transition-colors\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-4 h-4\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </RangeCalendarButton>\n </header>\n\n {/* Calendar grid */}\n <RangeCalendarGrid\n class=\"w-full border-collapse\"\n >\n {(date) => (\n <RangeCalendarCell\n date={date}\n class={({\n isSelected,\n isSelectionStart,\n isSelectionEnd,\n isFocused,\n isDisabled,\n isOutsideMonth,\n isToday,\n isPressed,\n }) => {\n const base = `\n ${sizeConfig().cell}\n flex items-center justify-center\n cursor-pointer\n transition-colors duration-150\n focus:outline-none\n `;\n\n let stateClass = '';\n let roundedClass = 'rounded-md';\n\n if (isDisabled) {\n stateClass = 'text-primary-600 cursor-not-allowed';\n } else if (isSelectionStart && isSelectionEnd) {\n // Single day selection\n stateClass = 'bg-accent text-white font-medium';\n roundedClass = 'rounded-md';\n } else if (isSelectionStart) {\n stateClass = 'bg-accent text-white font-medium';\n roundedClass = 'rounded-l-md rounded-r-none';\n } else if (isSelectionEnd) {\n stateClass = 'bg-accent text-white font-medium';\n roundedClass = 'rounded-r-md rounded-l-none';\n } else if (isSelected) {\n stateClass = 'bg-accent/20 text-primary-100';\n roundedClass = 'rounded-none';\n } else if (isOutsideMonth) {\n stateClass = 'text-primary-600';\n } else if (isToday) {\n stateClass = 'ring-1 ring-accent text-primary-100';\n } else {\n stateClass = 'text-primary-200 hover:bg-bg-400';\n }\n\n const focusClass = isFocused && !isSelected\n ? 'ring-2 ring-accent/50'\n : '';\n\n const pressedClass = isPressed && !isDisabled\n ? 'scale-95'\n : '';\n\n return `${base} ${stateClass} ${roundedClass} ${focusClass} ${pressedClass}`.trim();\n }}\n />\n )}\n </RangeCalendarGrid>\n </HeadlessRangeCalendar>\n );\n}\n\n// Re-export types\nexport type { RangeValue };\n","/**\n * DateField component for proyecto-viviana-ui\n *\n * Styled date field component with segment-based editing.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n DateField as HeadlessDateField,\n DateInput,\n DateSegment,\n type DateFieldProps as HeadlessDateFieldProps,\n type CalendarDate,\n type DateValue,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type DateFieldSize = 'sm' | 'md' | 'lg';\n\nexport interface DateFieldProps<T extends DateValue = DateValue>\n extends Omit<HeadlessDateFieldProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the field. @default 'md' */\n size?: DateFieldSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label for the field. */\n label?: string;\n /** Description text. */\n description?: string;\n /** Error message. */\n errorMessage?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'px-2 py-1 gap-0.5',\n segment: 'px-0.5',\n label: 'text-xs',\n },\n md: {\n container: 'text-base',\n input: 'px-3 py-2 gap-1',\n segment: 'px-1',\n label: 'text-sm',\n },\n lg: {\n container: 'text-lg',\n input: 'px-4 py-3 gap-1.5',\n segment: 'px-1.5',\n label: 'text-base',\n },\n};\n\n// ============================================\n// DATE FIELD COMPONENT\n// ============================================\n\n/**\n * A date field allows users to enter and edit date values using a keyboard.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <DateField label=\"Birth date\" />\n *\n * // Controlled\n * const [date, setDate] = createSignal<CalendarDate | null>(null);\n * <DateField\n * label=\"Event date\"\n * value={date()}\n * onChange={setDate}\n * />\n *\n * // With validation\n * <DateField\n * label=\"Future date\"\n * minValue={today(getLocalTimeZone())}\n * errorMessage=\"Date must be in the future\"\n * />\n * ```\n */\nexport function DateField<T extends DateValue = CalendarDate>(\n props: DateFieldProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n const isInvalid = () => local.isInvalid || !!local.errorMessage;\n\n return (\n <HeadlessDateField\n {...rest}\n isInvalid={isInvalid()}\n class={`\n flex flex-col gap-1\n ${sizeConfig().container}\n ${local.class ?? ''}\n `}\n >\n {/* Label */}\n {local.label && (\n <label class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n {rest.isRequired && <span class=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n\n {/* Input container */}\n <DateInput\n class={({ isFocused, isDisabled }) => {\n const base = `\n inline-flex items-center\n ${sizeConfig().input}\n bg-bg-400 rounded-md border\n transition-colors duration-150\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isFocused) {\n borderClass = 'border-accent';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n const focusClass = isFocused\n ? 'ring-2 ring-accent/30'\n : '';\n\n return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();\n }}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n class={({ isFocused, isPlaceholder, isEditable }) => {\n const base = `\n ${sizeConfig().segment}\n rounded\n outline-none\n tabular-nums\n `;\n\n let stateClass = '';\n if (segment.type === 'literal') {\n stateClass = 'text-primary-400';\n } else if (isPlaceholder) {\n stateClass = 'text-primary-500 italic';\n } else {\n stateClass = 'text-primary-100';\n }\n\n const focusClass = isFocused && isEditable\n ? 'bg-accent text-white'\n : '';\n\n return `${base} ${stateClass} ${focusClass}`.trim();\n }}\n />\n )}\n </DateInput>\n\n {/* Description */}\n {local.description && !isInvalid() && (\n <p class={`text-primary-400 ${sizeConfig().label}`}>\n {local.description}\n </p>\n )}\n\n {/* Error message */}\n {isInvalid() && local.errorMessage && (\n <p class={`text-red-500 ${sizeConfig().label}`}>\n {local.errorMessage}\n </p>\n )}\n </HeadlessDateField>\n );\n}\n\n// Re-export types\nexport type { CalendarDate, DateValue };\n","/**\n * TimeField component for proyecto-viviana-ui\n *\n * Styled time field component with segment-based editing.\n */\n\nimport { type JSX, splitProps } from 'solid-js';\nimport {\n TimeField as HeadlessTimeField,\n TimeInput,\n TimeSegment,\n type TimeFieldProps as HeadlessTimeFieldProps,\n type TimeValue,\n} from '@proyecto-viviana/solidaria-components';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type TimeFieldSize = 'sm' | 'md' | 'lg';\n\nexport interface TimeFieldProps<T extends TimeValue = TimeValue>\n extends Omit<HeadlessTimeFieldProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the field. @default 'md' */\n size?: TimeFieldSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label for the field. */\n label?: string;\n /** Description text. */\n description?: string;\n /** Error message. */\n errorMessage?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'px-2 py-1 gap-0.5',\n segment: 'px-0.5',\n label: 'text-xs',\n },\n md: {\n container: 'text-base',\n input: 'px-3 py-2 gap-1',\n segment: 'px-1',\n label: 'text-sm',\n },\n lg: {\n container: 'text-lg',\n input: 'px-4 py-3 gap-1.5',\n segment: 'px-1.5',\n label: 'text-base',\n },\n};\n\n// ============================================\n// TIME FIELD COMPONENT\n// ============================================\n\n/**\n * A time field allows users to enter and edit time values using a keyboard.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <TimeField label=\"Start time\" />\n *\n * // With 24-hour format\n * <TimeField\n * label=\"Meeting time\"\n * hourCycle={24}\n * />\n *\n * // With seconds\n * <TimeField\n * label=\"Precise time\"\n * granularity=\"second\"\n * />\n * ```\n */\nexport function TimeField<T extends TimeValue = TimeValue>(\n props: TimeFieldProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n const isInvalid = () => local.isInvalid || !!local.errorMessage;\n\n return (\n <HeadlessTimeField\n {...rest}\n isInvalid={isInvalid()}\n class={`\n flex flex-col gap-1\n ${sizeConfig().container}\n ${local.class ?? ''}\n `}\n >\n {/* Label */}\n {local.label && (\n <label class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n {rest.isRequired && <span class=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n\n {/* Input container */}\n <TimeInput\n class={({ isFocused, isDisabled }) => {\n const base = `\n inline-flex items-center\n ${sizeConfig().input}\n bg-bg-400 rounded-md border\n transition-colors duration-150\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isFocused) {\n borderClass = 'border-accent';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n const focusClass = isFocused\n ? 'ring-2 ring-accent/30'\n : '';\n\n return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();\n }}\n >\n {(segment) => (\n <TimeSegment\n segment={segment}\n class={({ isFocused, isPlaceholder, isEditable }) => {\n const base = `\n ${sizeConfig().segment}\n rounded\n outline-none\n tabular-nums\n `;\n\n let stateClass = '';\n if (segment.type === 'literal') {\n stateClass = 'text-primary-400';\n } else if (isPlaceholder) {\n stateClass = 'text-primary-500 italic';\n } else {\n stateClass = 'text-primary-100';\n }\n\n const focusClass = isFocused && isEditable\n ? 'bg-accent text-white'\n : '';\n\n return `${base} ${stateClass} ${focusClass}`.trim();\n }}\n />\n )}\n </TimeInput>\n\n {/* Description */}\n {local.description && !isInvalid() && (\n <p class={`text-primary-400 ${sizeConfig().label}`}>\n {local.description}\n </p>\n )}\n\n {/* Error message */}\n {isInvalid() && local.errorMessage && (\n <p class={`text-red-500 ${sizeConfig().label}`}>\n {local.errorMessage}\n </p>\n )}\n </HeadlessTimeField>\n );\n}\n\n// Re-export types\nexport type { TimeValue };\n","/**\n * DatePicker component for proyecto-viviana-ui\n *\n * Styled date picker component that combines a date field with a calendar popup.\n */\n\nimport { type JSX, splitProps, Show } from 'solid-js';\nimport {\n DatePicker as HeadlessDatePicker,\n DatePickerButton,\n DateInput,\n DateSegment,\n useDatePickerContext,\n type DatePickerProps as HeadlessDatePickerProps,\n type CalendarDate,\n type DateValue,\n} from '@proyecto-viviana/solidaria-components';\nimport { Calendar } from './index';\n\n// Calendar icon component - use function to ensure consistent hydration\nfunction CalendarIcon(): JSX.Element {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"w-5 h-5\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n );\n}\n\n// ============================================\n// TYPES\n// ============================================\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\n\nexport interface DatePickerProps<T extends DateValue = DateValue>\n extends Omit<HeadlessDatePickerProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the picker. @default 'md' */\n size?: DatePickerSize;\n /** Additional CSS class name. */\n class?: string;\n /** Label for the field. */\n label?: string;\n /** Description text. */\n description?: string;\n /** Error message. */\n errorMessage?: string;\n /** Placeholder text. */\n placeholder?: string;\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n container: 'text-sm',\n input: 'px-2 py-1 gap-0.5',\n segment: 'px-0.5',\n label: 'text-xs',\n button: 'w-7 h-7',\n },\n md: {\n container: 'text-base',\n input: 'px-3 py-2 gap-1',\n segment: 'px-1',\n label: 'text-sm',\n button: 'w-9 h-9',\n },\n lg: {\n container: 'text-lg',\n input: 'px-4 py-3 gap-1.5',\n segment: 'px-1.5',\n label: 'text-base',\n button: 'w-11 h-11',\n },\n};\n\n// ============================================\n// DATE PICKER COMPONENT\n// ============================================\n\n/**\n * A date picker combines a date field and a calendar popup.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <DatePicker label=\"Event date\" />\n *\n * // Controlled\n * const [date, setDate] = createSignal<CalendarDate | null>(null);\n * <DatePicker\n * label=\"Appointment\"\n * value={date()}\n * onChange={setDate}\n * />\n *\n * // With constraints\n * <DatePicker\n * label=\"Future booking\"\n * minValue={today(getLocalTimeZone())}\n * />\n * ```\n */\nexport function DatePicker<T extends DateValue = CalendarDate>(\n props: DatePickerProps<T>\n): JSX.Element {\n const [local, rest] = splitProps(props, [\n 'size',\n 'class',\n 'label',\n 'description',\n 'errorMessage',\n 'isInvalid',\n 'placeholder',\n ]);\n\n const size = () => local.size ?? 'md';\n const sizeConfig = () => sizeStyles[size()];\n const isInvalid = () => local.isInvalid || !!local.errorMessage;\n\n return (\n <HeadlessDatePicker\n {...rest}\n isInvalid={isInvalid()}\n class={`\n flex flex-col gap-1 relative\n ${sizeConfig().container}\n ${local.class ?? ''}\n `}\n >\n {/* Label */}\n {local.label && (\n <label class={`font-medium text-primary-200 ${sizeConfig().label}`}>\n {local.label}\n {rest.isRequired && <span class=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n\n {/* Input group */}\n <div class=\"relative flex items-center\">\n {/* Date input */}\n <DateInput\n class={({ isFocused, isDisabled }) => {\n const base = `\n inline-flex items-center flex-1\n ${sizeConfig().input}\n bg-bg-400 rounded-l-md border-y border-l\n transition-colors duration-150\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isFocused) {\n borderClass = 'border-accent';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : '';\n\n const focusClass = isFocused\n ? 'ring-2 ring-accent/30'\n : '';\n\n return `${base} ${borderClass} ${disabledClass} ${focusClass}`.trim();\n }}\n >\n {(segment) => (\n <DateSegment\n segment={segment}\n class={({ isFocused, isPlaceholder, isEditable }) => {\n const base = `\n ${sizeConfig().segment}\n rounded\n outline-none\n tabular-nums\n `;\n\n let stateClass = '';\n if (segment.type === 'literal') {\n stateClass = 'text-primary-400';\n } else if (isPlaceholder) {\n stateClass = 'text-primary-500 italic';\n } else {\n stateClass = 'text-primary-100';\n }\n\n const focusClass = isFocused && isEditable\n ? 'bg-accent text-white'\n : '';\n\n return `${base} ${stateClass} ${focusClass}`.trim();\n }}\n />\n )}\n </DateInput>\n\n {/* Calendar button */}\n <DatePickerButton\n class={({ isDisabled, isOpen }) => {\n const base = `\n ${sizeConfig().button}\n flex items-center justify-center\n bg-bg-400 border-y border-r rounded-r-md\n text-primary-200\n transition-colors duration-150\n focus:outline-none focus:ring-2 focus:ring-accent/50\n `;\n\n let borderClass = 'border-primary-600';\n if (isInvalid()) {\n borderClass = 'border-red-500';\n } else if (isOpen) {\n borderClass = 'border-accent bg-bg-300';\n }\n\n const disabledClass = isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-bg-300 cursor-pointer';\n\n return `${base} ${borderClass} ${disabledClass}`.trim();\n }}\n >\n <CalendarIcon />\n </DatePickerButton>\n\n {/* Calendar popup */}\n <DatePickerPopup size={size()} />\n </div>\n\n {/* Description */}\n {local.description && !isInvalid() && (\n <p class={`text-primary-400 ${sizeConfig().label}`}>\n {local.description}\n </p>\n )}\n\n {/* Error message */}\n {isInvalid() && local.errorMessage && (\n <p class={`text-red-500 ${sizeConfig().label}`}>\n {local.errorMessage}\n </p>\n )}\n </HeadlessDatePicker>\n );\n}\n\n// ============================================\n// POPUP COMPONENT (uses context)\n// ============================================\n\nfunction DatePickerPopup(props: { size: DatePickerSize }): JSX.Element {\n const context = useDatePickerContext();\n\n return (\n <Show when={context.overlayState.isOpen}>\n <div\n class={`\n absolute top-full left-0 z-50 mt-1\n shadow-lg rounded-lg\n `}\n >\n <Calendar\n value={context.calendarState.value()}\n onChange={(date) => {\n context.fieldState.setValue(date as any);\n context.overlayState.close();\n }}\n minValue={context.calendarState.visibleRange().start}\n size={props.size}\n />\n </div>\n {/* Backdrop */}\n <div\n class=\"fixed inset-0 z-40\"\n onClick={() => context.overlayState.close()}\n />\n </Show>\n );\n}\n\n// Re-export types\nexport type { CalendarDate, DateValue };\n","/**\n * Table component for proyecto-viviana-ui\n *\n * Styled table component built on top of solidaria-components.\n * Inspired by Spectrum 2's Table component patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n Table as HeadlessTable,\n TableHeader as HeadlessTableHeader,\n TableColumn as HeadlessTableColumn,\n TableBody as HeadlessTableBody,\n TableRow as HeadlessTableRow,\n TableCell as HeadlessTableCell,\n TableSelectionCheckbox as HeadlessTableSelectionCheckbox,\n TableSelectAllCheckbox as HeadlessTableSelectAllCheckbox,\n type TableProps as HeadlessTableProps,\n type TableHeaderProps as HeadlessTableHeaderProps,\n type TableColumnProps as HeadlessTableColumnProps,\n type TableBodyProps as HeadlessTableBodyProps,\n type TableRowProps as HeadlessTableRowProps,\n type TableCellProps as HeadlessTableCellProps,\n type TableRenderProps,\n type TableColumnRenderProps,\n type TableRowRenderProps,\n type TableCellRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, SortDescriptor, ColumnDefinition } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n}\n\nconst TableSizeContext = createContext<TableContextValue>({ size: 'md', variant: 'default' })\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TableProps<T extends object>\n extends Omit<HeadlessTableProps<T>, 'class' | 'style' | 'children'> {\n /** The size of the table. */\n size?: TableSize\n /** The visual variant of the table. */\n variant?: TableVariant\n /** Additional CSS class name. */\n class?: string\n /** Title for the table. */\n title?: string\n /** Description for the table. */\n description?: string\n /** Children components (TableHeader, TableBody). */\n children?: JSX.Element | (() => JSX.Element)\n}\n\nexport interface TableHeaderProps extends Omit<HeadlessTableHeaderProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TableColumnProps extends Omit<HeadlessTableColumnProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Text alignment for the column. */\n align?: 'left' | 'center' | 'right'\n /** Width of the column (CSS value). */\n width?: string\n}\n\nexport interface TableBodyProps<T> extends Omit<HeadlessTableBodyProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TableRowProps<T> extends Omit<HeadlessTableRowProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\nexport interface TableCellProps extends Omit<HeadlessTableCellProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Text alignment for the cell. */\n align?: 'left' | 'center' | 'right'\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n table: 'text-sm',\n headerCell: 'px-3 py-2',\n cell: 'px-3 py-2',\n checkbox: 'w-4 h-4',\n },\n md: {\n table: 'text-base',\n headerCell: 'px-4 py-3',\n cell: 'px-4 py-3',\n checkbox: 'w-5 h-5',\n },\n lg: {\n table: 'text-lg',\n headerCell: 'px-5 py-4',\n cell: 'px-5 py-4',\n checkbox: 'w-6 h-6',\n },\n}\n\nconst variantStyles = {\n default: {\n wrapper: 'rounded-lg border border-bg-300 overflow-hidden',\n header: 'bg-bg-300 border-b border-bg-400',\n row: '',\n rowHover: 'hover:bg-bg-200/50',\n rowSelected: 'bg-accent/10',\n },\n striped: {\n wrapper: 'rounded-lg border border-bg-300 overflow-hidden',\n header: 'bg-bg-300 border-b border-bg-400',\n row: 'even:bg-bg-200/30',\n rowHover: 'hover:bg-bg-200/50',\n rowSelected: 'bg-accent/10',\n },\n bordered: {\n wrapper: 'rounded-lg border-2 border-bg-400 overflow-hidden',\n header: 'bg-bg-300 border-b-2 border-bg-400',\n row: 'border-b border-bg-300 last:border-b-0',\n rowHover: 'hover:bg-bg-200/50',\n rowSelected: 'bg-accent/10',\n },\n}\n\nconst alignStyles = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\n// ============================================\n// TABLE COMPONENT\n// ============================================\n\n/**\n * A table displays data in rows and columns and enables a user to navigate its contents\n * via directional navigation keys, and optionally supports row selection and sorting.\n *\n * Built on solidaria-components Table for full accessibility support.\n *\n * @example\n * ```tsx\n * const columns = [\n * { key: 'name', name: 'Name' },\n * { key: 'role', name: 'Role' },\n * { key: 'status', name: 'Status' },\n * ]\n *\n * const rows = [\n * { id: '1', name: 'John', role: 'Developer', status: 'Active' },\n * { id: '2', name: 'Jane', role: 'Designer', status: 'Active' },\n * ]\n *\n * <Table items={rows} columns={columns} selectionMode=\"multiple\">\n * {() => (\n * <>\n * <TableHeader>\n * {() => (\n * <For each={columns}>\n * {(col) => <TableColumn id={col.key}>{col.name}</TableColumn>}\n * </For>\n * )}\n * </TableHeader>\n * <TableBody>\n * {(row) => (\n * <TableRow id={row.id}>\n * {() => (\n * <>\n * <TableCell>{row.name}</TableCell>\n * <TableCell>{row.role}</TableCell>\n * <TableCell>{row.status}</TableCell>\n * </>\n * )}\n * </TableRow>\n * )}\n * </TableBody>\n * </>\n * )}\n * </Table>\n * ```\n */\nexport function Table<T extends object>(props: TableProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n 'title',\n 'description',\n ])\n\n const size = () => local.size ?? 'md'\n const variant = () => local.variant ?? 'default'\n const styles = () => sizeStyles[size()]\n const variantStyle = () => variantStyles[variant()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableRenderProps): string => {\n const base = 'w-full bg-bg-400'\n const sizeClass = styles().table\n\n let stateClass = ''\n if (renderProps.isEmpty) {\n stateClass = ''\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, stateClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size(), variant: variant() })\n\n return (\n <TableSizeContext.Provider value={contextValue()}>\n <div class=\"flex flex-col gap-2\">\n <Show when={local.title}>\n <h3 class=\"text-lg font-semibold text-primary-100\">{local.title}</h3>\n </Show>\n <Show when={local.description}>\n <p class=\"text-sm text-primary-400\">{local.description}</p>\n </Show>\n <div class={variantStyle().wrapper}>\n <HeadlessTable {...headlessProps} class={getClassName}>\n {props.children}\n </HeadlessTable>\n </div>\n </div>\n </TableSizeContext.Provider>\n )\n}\n\n// ============================================\n// TABLE HEADER COMPONENT\n// ============================================\n\n/**\n * A header row in a table containing column headers.\n */\nexport function TableHeader(props: TableHeaderProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const context = useContext(TableSizeContext)\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const className = [variantStyle.header, customClass].filter(Boolean).join(' ')\n\n return (\n <HeadlessTableHeader {...headlessProps} class={className}>\n {props.children}\n </HeadlessTableHeader>\n )\n}\n\n// ============================================\n// TABLE COLUMN COMPONENT\n// ============================================\n\n/**\n * A column header in a table.\n */\nexport function TableColumn(props: TableColumnProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'align', 'width'])\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableColumnRenderProps): string => {\n const base = 'font-semibold text-primary-200 select-none'\n const sizeClass = sizeStyle.headerCell\n const alignClass = alignStyles[local.align ?? 'left']\n\n let sortClass = ''\n if (renderProps.isSortable) {\n sortClass = 'cursor-pointer'\n if (renderProps.isHovered) {\n sortClass += ' text-primary-100'\n }\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, alignClass, sortClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n const getStyle = (): JSX.CSSProperties | undefined => {\n if (local.width) {\n return { width: local.width }\n }\n return undefined\n }\n\n return (\n <HeadlessTableColumn {...headlessProps} class={getClassName} style={getStyle()}>\n {(renderProps: TableColumnRenderProps) => (\n <div class=\"flex items-center gap-2\">\n <span class=\"flex-1\">\n {typeof props.children === 'function'\n ? props.children(renderProps)\n : props.children}\n </span>\n <Show when={renderProps.isSortable && renderProps.sortDirection}>\n <SortIcon direction={renderProps.sortDirection!} class=\"w-4 h-4\" />\n </Show>\n </div>\n )}\n </HeadlessTableColumn>\n )\n}\n\n// ============================================\n// TABLE BODY COMPONENT\n// ============================================\n\n/**\n * The body of a table containing data rows.\n */\nexport function TableBody<T extends object>(props: TableBodyProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'renderEmptyState'])\n const customClass = local.class ?? ''\n\n const defaultEmptyState = () => (\n <tr>\n <td colSpan={100} class=\"py-8 text-center text-primary-400\">\n <div class=\"flex flex-col items-center gap-2\">\n <EmptyIcon class=\"w-12 h-12 text-primary-500\" />\n <span>No data available</span>\n </div>\n </td>\n </tr>\n )\n\n return (\n <HeadlessTableBody\n {...headlessProps}\n class={customClass}\n renderEmptyState={local.renderEmptyState ?? defaultEmptyState}\n >\n {props.children}\n </HeadlessTableBody>\n )\n}\n\n// ============================================\n// TABLE ROW COMPONENT\n// ============================================\n\n/**\n * A row in a table.\n */\nexport function TableRow<T extends object>(props: TableRowProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const context = useContext(TableSizeContext)\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableRowRenderProps): string => {\n const base = 'transition-colors duration-150 outline-none'\n const variantClass = variantStyle.row\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n stateClass = variantStyle.rowSelected\n } else if (renderProps.isHovered) {\n stateClass = variantStyle.rowHover\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'bg-bg-200/70' : ''\n\n return [base, variantClass, stateClass, focusClass, pressedClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n return (\n <HeadlessTableRow {...headlessProps} class={getClassName}>\n {props.children}\n </HeadlessTableRow>\n )\n}\n\n// ============================================\n// TABLE CELL COMPONENT\n// ============================================\n\n/**\n * A cell in a table row.\n */\nexport function TableCell(props: TableCellProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'align'])\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TableCellRenderProps): string => {\n const base = 'text-primary-200'\n const sizeClass = sizeStyle.cell\n const alignClass = alignStyles[local.align ?? 'left']\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n return [base, sizeClass, alignClass, focusClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessTableCell {...headlessProps} class={getClassName}>\n {props.children}\n </HeadlessTableCell>\n )\n}\n\n// ============================================\n// TABLE SELECTION CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A styled checkbox cell for row selection.\n */\nexport function TableSelectionCheckbox(props: { rowKey: Key }): JSX.Element {\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const checkboxClass = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400`\n\n return (\n <td class={`${sizeStyle.cell} w-px`}>\n <span class={checkboxClass}>\n <HeadlessTableSelectionCheckbox rowKey={props.rowKey} />\n </span>\n </td>\n )\n}\n\n/**\n * A styled checkbox for select-all functionality.\n */\nexport function TableSelectAllCheckbox(): JSX.Element {\n const context = useContext(TableSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const checkboxClass = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400`\n\n return (\n <th class={`${sizeStyle.headerCell} w-px`}>\n <span class={checkboxClass}>\n <HeadlessTableSelectAllCheckbox />\n </span>\n </th>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction SortIcon(props: { direction: 'ascending' | 'descending'; class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n {props.direction === 'ascending' ? (\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 15l7-7 7 7\" />\n ) : (\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n )}\n </svg>\n )\n}\n\nfunction EmptyIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nTable.Header = TableHeader\nTable.Column = TableColumn\nTable.Body = TableBody\nTable.Row = TableRow\nTable.Cell = TableCell\nTable.SelectionCheckbox = TableSelectionCheckbox\nTable.SelectAllCheckbox = TableSelectAllCheckbox\n\n// Re-export types for convenience\nexport type { Key, SortDescriptor, ColumnDefinition }\n","/**\n * GridList component for proyecto-viviana-ui\n *\n * Styled grid list component built on top of solidaria-components.\n * Inspired by Spectrum 2's GridList component patterns.\n *\n * GridList is similar to ListBox but supports interactive elements within items\n * and uses grid keyboard navigation.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n GridList as HeadlessGridList,\n GridListItem as HeadlessGridListItem,\n GridListSelectionCheckbox as HeadlessGridListSelectionCheckbox,\n type GridListProps as HeadlessGridListProps,\n type GridListItemProps as HeadlessGridListItemProps,\n type GridListRenderProps,\n type GridListItemRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type GridListSize = 'sm' | 'md' | 'lg'\nexport type GridListVariant = 'default' | 'cards' | 'bordered'\nexport type GridListLayout = 'list' | 'grid'\n\ninterface GridListContextValue {\n size: GridListSize\n variant: GridListVariant\n layout: GridListLayout\n}\n\nconst GridListSizeContext = createContext<GridListContextValue>({\n size: 'md',\n variant: 'default',\n layout: 'list',\n})\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface GridListProps<T extends object>\n extends Omit<HeadlessGridListProps<T>, 'class' | 'style'> {\n /** The size of the grid list. */\n size?: GridListSize\n /** The visual variant of the grid list. */\n variant?: GridListVariant\n /** The layout of the grid list. */\n layout?: GridListLayout\n /** Number of columns for grid layout (default: auto-fit). */\n columns?: number | 'auto'\n /** Additional CSS class name. */\n class?: string\n /** Label for the grid list. */\n label?: string\n /** Description for the grid list. */\n description?: string\n}\n\nexport interface GridListItemProps<T extends object>\n extends Omit<HeadlessGridListItemProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Optional description text. */\n description?: string\n /**\n * Optional icon to display before the content.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n */\n icon?: () => JSX.Element\n /**\n * Optional image to display in the item.\n */\n image?: string\n /** Alt text for the image. */\n imageAlt?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n list: 'gap-1 p-1',\n item: 'text-sm py-2 px-3 gap-2',\n icon: 'h-4 w-4',\n image: 'h-10 w-10',\n label: 'text-sm',\n description: 'text-xs',\n checkbox: 'w-4 h-4',\n },\n md: {\n list: 'gap-2 p-2',\n item: 'text-base py-3 px-4 gap-3',\n icon: 'h-5 w-5',\n image: 'h-12 w-12',\n label: 'text-base',\n description: 'text-sm',\n checkbox: 'w-5 h-5',\n },\n lg: {\n list: 'gap-3 p-3',\n item: 'text-lg py-4 px-5 gap-4',\n icon: 'h-6 w-6',\n image: 'h-16 w-16',\n label: 'text-lg',\n description: 'text-base',\n checkbox: 'w-6 h-6',\n },\n}\n\nconst variantStyles = {\n default: {\n list: 'bg-bg-400 rounded-lg border border-bg-300',\n item: 'rounded-md',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n cards: {\n list: 'bg-transparent',\n item: 'bg-bg-400 rounded-lg border border-bg-300 shadow-sm',\n itemHover: 'hover:shadow-md hover:border-bg-200',\n itemSelected: 'border-accent bg-accent/5 shadow-accent/20',\n },\n bordered: {\n list: 'bg-bg-400 rounded-lg border-2 border-bg-400',\n item: 'border-b border-bg-300 last:border-b-0 rounded-none',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10',\n },\n}\n\n// ============================================\n// GRID LIST COMPONENT\n// ============================================\n\n/**\n * A grid list displays a list of interactive items, with support for\n * keyboard navigation, single or multiple selection, and row actions.\n *\n * Built on solidaria-components GridList for full accessibility support.\n *\n * @example\n * ```tsx\n * const items = [\n * { id: '1', name: 'Item 1', description: 'Description 1' },\n * { id: '2', name: 'Item 2', description: 'Description 2' },\n * ]\n *\n * <GridList\n * items={items}\n * getKey={(item) => item.id}\n * selectionMode=\"multiple\"\n * >\n * {(item) => (\n * <GridListItem id={item.id} description={item.description}>\n * {item.name}\n * </GridListItem>\n * )}\n * </GridList>\n * ```\n */\nexport function GridList<T extends object>(props: GridListProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'layout',\n 'columns',\n 'class',\n 'label',\n 'description',\n ])\n\n const size = () => local.size ?? 'md'\n const variant = () => local.variant ?? 'default'\n const layout = () => local.layout ?? 'list'\n const styles = () => sizeStyles[size()]\n const variantStyle = () => variantStyles[variant()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: GridListRenderProps): string => {\n const base = 'overflow-auto focus:outline-none'\n const sizeClass = styles().list\n const variantClass = variantStyle().list\n\n // Layout classes\n let layoutClass = ''\n if (layout() === 'grid') {\n if (local.columns === 'auto' || local.columns === undefined) {\n layoutClass = 'grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))]'\n } else {\n layoutClass = `grid grid-cols-${local.columns}`\n }\n } else {\n layoutClass = 'flex flex-col'\n }\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, variantClass, layoutClass, stateClass, focusClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n const defaultEmptyState = () => (\n <li class=\"py-8 text-center text-primary-400\">\n <div class=\"flex flex-col items-center gap-2\">\n <EmptyIcon class=\"w-12 h-12 text-primary-500\" />\n <span>No items</span>\n </div>\n </li>\n )\n\n const contextValue = () => ({ size: size(), variant: variant(), layout: layout() })\n\n return (\n <GridListSizeContext.Provider value={contextValue()}>\n <div class=\"flex flex-col gap-2\">\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${styles().label}`}>\n {local.label}\n </label>\n </Show>\n <HeadlessGridList\n {...headlessProps}\n class={getClassName}\n renderEmptyState={headlessProps.renderEmptyState ?? defaultEmptyState}\n />\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n </div>\n </GridListSizeContext.Provider>\n )\n}\n\n// ============================================\n// GRID LIST ITEM COMPONENT\n// ============================================\n\n/**\n * An item in a grid list.\n */\nexport function GridListItem<T extends object>(props: GridListItemProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'class',\n 'description',\n 'icon',\n 'image',\n 'imageAlt',\n ])\n\n const context = useContext(GridListSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: GridListItemRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-all duration-150 outline-none'\n const sizeClass = sizeStyle.item\n const variantClass = variantStyle.item\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n stateClass = variantStyle.itemSelected\n } else if (renderProps.isHovered) {\n stateClass = variantStyle.itemHover\n }\n\n let textClass = ''\n if (!renderProps.isDisabled && !renderProps.isSelected) {\n textClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'scale-[0.98]' : ''\n\n return [base, sizeClass, variantClass, stateClass, textClass, focusClass, pressedClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n return (\n <HeadlessGridListItem {...headlessProps} class={getClassName}>\n {(renderProps: GridListItemRenderProps) => (\n <>\n {/* Image */}\n <Show when={local.image}>\n <img\n src={local.image}\n alt={local.imageAlt ?? ''}\n class={`${sizeStyle.image} rounded object-cover shrink-0`}\n />\n </Show>\n\n {/* Icon */}\n <Show when={local.icon}>\n <span class={`shrink-0 ${sizeStyle.icon}`}>{local.icon!()}</span>\n </Show>\n\n {/* Selection indicator */}\n <Show when={renderProps.isSelected}>\n <CheckIcon class={`shrink-0 ${sizeStyle.icon} text-accent`} />\n </Show>\n\n {/* Content */}\n <div class=\"flex flex-col flex-1 min-w-0\">\n <span class=\"truncate\">\n {typeof props.children === 'function'\n ? props.children(renderProps)\n : props.children}\n </span>\n <Show when={local.description}>\n <span class={`text-primary-400 truncate ${sizeStyle.description}`}>\n {local.description}\n </span>\n </Show>\n </div>\n </>\n )}\n </HeadlessGridListItem>\n )\n}\n\n// ============================================\n// GRID LIST SELECTION CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A styled checkbox for item selection in a grid list.\n */\nexport function GridListSelectionCheckbox(props: { itemKey: Key; class?: string }): JSX.Element {\n const context = useContext(GridListSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const className = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400 ${props.class ?? ''}`\n\n return (\n <span class={className}>\n <HeadlessGridListSelectionCheckbox itemKey={props.itemKey} />\n </span>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nfunction EmptyIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nGridList.Item = GridListItem\nGridList.SelectionCheckbox = GridListSelectionCheckbox\n\n// Re-export Key type for convenience\nexport type { Key }\n","/**\n * Tree component for proyecto-viviana-ui\n *\n * Styled tree component built on top of solidaria-components.\n * Inspired by Spectrum 2's Tree component patterns.\n *\n * Tree displays hierarchical data with expandable/collapsible nodes,\n * supporting keyboard navigation and selection.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n Tree as HeadlessTree,\n TreeItem as HeadlessTreeItem,\n TreeExpandButton as HeadlessTreeExpandButton,\n TreeSelectionCheckbox as HeadlessTreeSelectionCheckbox,\n type TreeProps as HeadlessTreeProps,\n type TreeItemProps as HeadlessTreeItemProps,\n type TreeExpandButtonProps as HeadlessTreeExpandButtonProps,\n type TreeRenderProps,\n type TreeItemRenderProps,\n type TreeRenderItemState,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Key, TreeItemData } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type TreeSize = 'sm' | 'md' | 'lg'\nexport type TreeVariant = 'default' | 'bordered' | 'quiet'\n\ninterface TreeContextValue {\n size: TreeSize\n variant: TreeVariant\n}\n\nconst TreeSizeContext = createContext<TreeContextValue>({ size: 'md', variant: 'default' })\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface TreeProps<T extends object>\n extends Omit<HeadlessTreeProps<T>, 'class' | 'style'> {\n /** The size of the tree. */\n size?: TreeSize\n /** The visual variant of the tree. */\n variant?: TreeVariant\n /** Additional CSS class name. */\n class?: string\n /** Label for the tree. */\n label?: string\n /** Description for the tree. */\n description?: string\n}\n\nexport interface TreeItemProps<T extends object>\n extends Omit<HeadlessTreeItemProps<T>, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Optional description text. */\n description?: string\n /**\n * Optional icon to display before the content.\n * Use a function returning JSX for SSR compatibility: `icon={() => <FolderIcon />}`\n */\n icon?: () => JSX.Element\n}\n\nexport interface TreeExpandButtonProps extends Omit<HeadlessTreeExpandButtonProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n}\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n tree: 'text-sm',\n item: 'py-1 px-2 gap-1',\n indent: 16,\n icon: 'h-4 w-4',\n expandButton: 'h-4 w-4',\n label: 'text-sm',\n description: 'text-xs',\n checkbox: 'w-4 h-4',\n },\n md: {\n tree: 'text-base',\n item: 'py-1.5 px-3 gap-2',\n indent: 20,\n icon: 'h-5 w-5',\n expandButton: 'h-5 w-5',\n label: 'text-base',\n description: 'text-sm',\n checkbox: 'w-5 h-5',\n },\n lg: {\n tree: 'text-lg',\n item: 'py-2 px-4 gap-2',\n indent: 24,\n icon: 'h-6 w-6',\n expandButton: 'h-6 w-6',\n label: 'text-lg',\n description: 'text-base',\n checkbox: 'w-6 h-6',\n },\n}\n\nconst variantStyles = {\n default: {\n tree: 'bg-bg-400 rounded-lg border border-bg-300 p-2',\n item: 'rounded-md',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n bordered: {\n tree: 'bg-bg-400 rounded-lg border-2 border-bg-400 p-2',\n item: 'border-b border-bg-300/30 last:border-b-0',\n itemHover: 'hover:bg-bg-200/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n quiet: {\n tree: 'bg-transparent',\n item: 'rounded-md',\n itemHover: 'hover:bg-bg-300/50',\n itemSelected: 'bg-accent/10 text-accent',\n },\n}\n\n// ============================================\n// TREE COMPONENT\n// ============================================\n\n/**\n * A tree displays hierarchical data with expandable/collapsible nodes,\n * supporting keyboard navigation and selection.\n *\n * Built on solidaria-components Tree for full accessibility support.\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * key: 'documents',\n * value: { name: 'Documents' },\n * children: [\n * { key: 'doc1', value: { name: 'Report.pdf' } },\n * { key: 'doc2', value: { name: 'Notes.txt' } },\n * ],\n * },\n * {\n * key: 'images',\n * value: { name: 'Images' },\n * children: [\n * { key: 'img1', value: { name: 'Photo.jpg' } },\n * ],\n * },\n * ]\n *\n * <Tree items={items} defaultExpandedKeys={['documents']}>\n * {(item, state) => (\n * <TreeItem id={item.key} icon={() => <FolderIcon />}>\n * {item.value.name}\n * </TreeItem>\n * )}\n * </Tree>\n * ```\n */\nexport function Tree<T extends object>(props: TreeProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'variant',\n 'class',\n 'label',\n 'description',\n ])\n\n const size = () => local.size ?? 'md'\n const variant = () => local.variant ?? 'default'\n const styles = () => sizeStyles[size()]\n const variantStyle = () => variantStyles[variant()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TreeRenderProps): string => {\n const base = 'overflow-auto focus:outline-none'\n const sizeClass = styles().tree\n const variantClass = variantStyle().tree\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n\n return [base, sizeClass, variantClass, stateClass, focusClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n const defaultEmptyState = () => (\n <div class=\"py-8 text-center text-primary-400\">\n <div class=\"flex flex-col items-center gap-2\">\n <EmptyTreeIcon class=\"w-12 h-12 text-primary-500\" />\n <span>No items</span>\n </div>\n </div>\n )\n\n const contextValue = () => ({ size: size(), variant: variant() })\n\n return (\n <TreeSizeContext.Provider value={contextValue()}>\n <div class=\"flex flex-col gap-2\">\n <Show when={local.label}>\n <label class={`text-primary-200 font-medium ${styles().label}`}>\n {local.label}\n </label>\n </Show>\n <HeadlessTree\n {...headlessProps}\n class={getClassName}\n renderEmptyState={headlessProps.renderEmptyState ?? defaultEmptyState}\n />\n <Show when={local.description}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n </div>\n </TreeSizeContext.Provider>\n )\n}\n\n// ============================================\n// TREE ITEM COMPONENT\n// ============================================\n\n/**\n * An item in a tree.\n */\nexport function TreeItem<T extends object>(props: TreeItemProps<T>): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'class',\n 'description',\n 'icon',\n ])\n\n const context = useContext(TreeSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const variantStyle = variantStyles[context.variant]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: TreeItemRenderProps): string => {\n const base = 'flex items-center cursor-pointer transition-all duration-150 outline-none'\n const sizeClass = sizeStyle.item\n const variantClass = variantStyle.item\n\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n } else if (renderProps.isSelected) {\n stateClass = variantStyle.itemSelected\n } else if (renderProps.isHovered) {\n stateClass = variantStyle.itemHover\n }\n\n let textClass = ''\n if (!renderProps.isDisabled && !renderProps.isSelected) {\n textClass = 'text-primary-200'\n }\n\n const focusClass = renderProps.isFocusVisible\n ? 'ring-2 ring-inset ring-accent-300'\n : ''\n\n const pressedClass = renderProps.isPressed ? 'scale-[0.99]' : ''\n\n return [base, sizeClass, variantClass, stateClass, textClass, focusClass, pressedClass, customClass]\n .filter(Boolean)\n .join(' ')\n }\n\n const getStyle = (renderProps: TreeItemRenderProps): JSX.CSSProperties => ({\n 'padding-left': `${renderProps.level * sizeStyle.indent + 8}px`,\n })\n\n return (\n <HeadlessTreeItem {...headlessProps} class={getClassName} style={getStyle}>\n {(renderProps: TreeItemRenderProps) => (\n <>\n {/* Expand button */}\n <TreeExpandButton class={`${sizeStyle.expandButton} shrink-0`} />\n\n {/* Icon */}\n <Show when={local.icon}>\n <span class={`shrink-0 ${sizeStyle.icon}`}>\n {local.icon!()}\n </span>\n </Show>\n\n {/* Default folder/file icon if no custom icon */}\n <Show when={!local.icon}>\n {renderProps.isExpandable ? (\n <FolderIcon class={`shrink-0 ${sizeStyle.icon} text-accent-300`} isOpen={renderProps.isExpanded} />\n ) : (\n <FileIcon class={`shrink-0 ${sizeStyle.icon} text-primary-400`} />\n )}\n </Show>\n\n {/* Content */}\n <div class=\"flex flex-col flex-1 min-w-0\">\n <span class=\"truncate\">\n {typeof props.children === 'function'\n ? props.children(renderProps)\n : props.children}\n </span>\n <Show when={local.description}>\n <span class={`text-primary-400 truncate ${sizeStyle.description}`}>\n {local.description}\n </span>\n </Show>\n </div>\n\n {/* Selection indicator */}\n <Show when={renderProps.isSelected}>\n <CheckIcon class={`shrink-0 ${sizeStyle.icon} text-accent`} />\n </Show>\n </>\n )}\n </HeadlessTreeItem>\n )\n}\n\n// ============================================\n// TREE EXPAND BUTTON COMPONENT\n// ============================================\n\n/**\n * A button to expand/collapse a tree item.\n */\nexport function TreeExpandButton(props: TreeExpandButtonProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class'])\n const context = useContext(TreeSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const customClass = local.class ?? ''\n\n const className = [\n 'flex items-center justify-center transition-transform duration-150 text-primary-400 hover:text-primary-200',\n customClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <HeadlessTreeExpandButton\n {...headlessProps}\n class={className}\n >\n {props.children ?? (({ isExpanded }: { isExpanded: boolean }) => (\n <ChevronIcon\n class={`${sizeStyle.expandButton} transition-transform duration-150 ${\n isExpanded ? 'rotate-90' : ''\n }`}\n />\n ))}\n </HeadlessTreeExpandButton>\n )\n}\n\n// ============================================\n// TREE SELECTION CHECKBOX COMPONENT\n// ============================================\n\n/**\n * A styled checkbox for item selection in a tree.\n */\nexport function TreeSelectionCheckbox(props: { itemKey: Key; class?: string }): JSX.Element {\n const context = useContext(TreeSizeContext)\n const sizeStyle = sizeStyles[context.size]\n const className = `${sizeStyle.checkbox} rounded border-2 border-primary-500 bg-bg-400 text-accent cursor-pointer checked:bg-accent checked:border-accent focus:ring-2 focus:ring-accent-300 focus:ring-offset-1 focus:ring-offset-bg-400 ${props.class ?? ''}`\n\n return (\n <span class={className}>\n <HeadlessTreeSelectionCheckbox itemKey={props.itemKey} />\n </span>\n )\n}\n\n// ============================================\n// ICONS\n// ============================================\n\nfunction ChevronIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\nfunction FolderIcon(props: { class?: string; isOpen?: boolean }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n {props.isOpen ? (\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776\"\n />\n ) : (\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z\"\n />\n )}\n </svg>\n )\n}\n\nfunction FileIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\"\n />\n </svg>\n )\n}\n\nfunction CheckIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nfunction EmptyTreeIcon(props: { class?: string }): JSX.Element {\n return (\n <svg\n class={props.class}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6z\"\n />\n </svg>\n )\n}\n\n// Attach sub-components for convenience\nTree.Item = TreeItem\nTree.ExpandButton = TreeExpandButton\nTree.SelectionCheckbox = TreeSelectionCheckbox\n\n// Re-export types for convenience\nexport type { Key, TreeItemData, TreeRenderItemState }\n","/**\n * Color components for proyecto-viviana-ui\n *\n * Styled color picker components built on top of solidaria-components.\n * Inspired by Spectrum 2's color picker patterns.\n */\n\nimport { type JSX, splitProps, createContext, useContext, Show } from 'solid-js'\nimport {\n ColorSlider as HeadlessColorSlider,\n ColorSliderTrack as HeadlessColorSliderTrack,\n ColorSliderThumb as HeadlessColorSliderThumb,\n ColorArea as HeadlessColorArea,\n ColorAreaGradient as HeadlessColorAreaGradient,\n ColorAreaThumb as HeadlessColorAreaThumb,\n ColorWheel as HeadlessColorWheel,\n ColorWheelTrack as HeadlessColorWheelTrack,\n ColorWheelThumb as HeadlessColorWheelThumb,\n ColorField as HeadlessColorField,\n ColorFieldInput as HeadlessColorFieldInput,\n ColorSwatch as HeadlessColorSwatch,\n type ColorSliderProps as HeadlessColorSliderProps,\n type ColorAreaProps as HeadlessColorAreaProps,\n type ColorWheelProps as HeadlessColorWheelProps,\n type ColorFieldProps as HeadlessColorFieldProps,\n type ColorSwatchProps as HeadlessColorSwatchProps,\n type ColorSliderRenderProps,\n type ColorSliderTrackRenderProps,\n type ColorSliderThumbRenderProps,\n type ColorAreaRenderProps,\n type ColorAreaThumbRenderProps,\n type ColorWheelRenderProps,\n type ColorWheelThumbRenderProps,\n type ColorFieldRenderProps,\n type ColorSwatchRenderProps,\n} from '@proyecto-viviana/solidaria-components'\nimport type { Color, ColorChannel, ColorFormat } from '@proyecto-viviana/solid-stately'\n\n// ============================================\n// SIZE CONTEXT\n// ============================================\n\nexport type ColorSize = 'sm' | 'md' | 'lg'\n\ninterface ColorContextValue {\n size: ColorSize\n}\n\nconst ColorSizeContext = createContext<ColorContextValue>({ size: 'md' })\n\n// ============================================\n// STYLES\n// ============================================\n\nconst sizeStyles = {\n sm: {\n slider: {\n track: 'h-4 rounded',\n thumb: 'w-4 h-4',\n label: 'text-sm',\n },\n area: {\n container: 'w-48 h-48',\n thumb: 'w-4 h-4',\n },\n wheel: {\n container: 'w-48 h-48',\n track: 'stroke-[16px]',\n thumb: 'w-4 h-4',\n },\n field: {\n input: 'h-8 text-sm px-2',\n label: 'text-sm',\n },\n swatch: 'w-8 h-8',\n },\n md: {\n slider: {\n track: 'h-6 rounded-md',\n thumb: 'w-5 h-5',\n label: 'text-base',\n },\n area: {\n container: 'w-64 h-64',\n thumb: 'w-5 h-5',\n },\n wheel: {\n container: 'w-64 h-64',\n track: 'stroke-[20px]',\n thumb: 'w-5 h-5',\n },\n field: {\n input: 'h-10 text-base px-3',\n label: 'text-base',\n },\n swatch: 'w-10 h-10',\n },\n lg: {\n slider: {\n track: 'h-8 rounded-lg',\n thumb: 'w-6 h-6',\n label: 'text-lg',\n },\n area: {\n container: 'w-80 h-80',\n thumb: 'w-6 h-6',\n },\n wheel: {\n container: 'w-80 h-80',\n track: 'stroke-[24px]',\n thumb: 'w-6 h-6',\n },\n field: {\n input: 'h-12 text-lg px-4',\n label: 'text-lg',\n },\n swatch: 'w-12 h-12',\n },\n}\n\n// ============================================\n// COLOR SLIDER\n// ============================================\n\nexport interface ColorSliderProps extends Omit<HeadlessColorSliderProps, 'class' | 'style' | 'children'> {\n /** The size of the color slider. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Show the current value. */\n showValue?: boolean\n}\n\n/**\n * A color slider allows users to adjust a single color channel.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorSlider\n * channel=\"hue\"\n * value={color()}\n * onChange={setColor}\n * label=\"Hue\"\n * />\n * ```\n */\nexport function ColorSlider(props: ColorSliderProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class', 'showValue'])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorSliderRenderProps): string => {\n const base = 'flex flex-col gap-1.5'\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorSlider {...headlessProps} class={getClassName}>\n {(renderProps: ColorSliderRenderProps) => (\n <>\n <div class=\"flex items-center justify-between\">\n <Show when={headlessProps.label}>\n <span class={`text-primary-200 font-medium ${styles().slider.label}`}>\n {headlessProps.label}\n </span>\n </Show>\n <Show when={local.showValue}>\n <span class={`text-primary-400 ${styles().slider.label}`}>\n {Math.round(renderProps.value)}\n </span>\n </Show>\n </div>\n <ColorSliderTrack>\n {() => <ColorSliderThumb />}\n </ColorSliderTrack>\n </>\n )}\n </HeadlessColorSlider>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The track component for a color slider.\n */\nexport function ColorSliderTrack(props: { children?: JSX.Element | (() => JSX.Element); class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorSliderTrackRenderProps): string => {\n const base = `relative ${styles.slider.track} shadow-inner border border-bg-300`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing' : 'cursor-pointer'\n return [base, dragClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessColorSliderTrack class={getClassName}>\n {props.children}\n </HeadlessColorSliderTrack>\n )\n}\n\n/**\n * The thumb component for a color slider.\n */\nexport function ColorSliderThumb(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorSliderThumbRenderProps): string => {\n const base = `${styles.slider.thumb} rounded-full border-2 border-white shadow-md cursor-grab`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing scale-110' : ''\n const focusClass = renderProps.isFocusVisible ? 'ring-2 ring-accent-300 ring-offset-2' : ''\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, dragClass, focusClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return <HeadlessColorSliderThumb class={getClassName} />\n}\n\n// ============================================\n// COLOR AREA\n// ============================================\n\nexport interface ColorAreaProps extends Omit<HeadlessColorAreaProps, 'class' | 'style' | 'children'> {\n /** The size of the color area. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A color area allows users to select a color by dragging in a 2D gradient.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorArea\n * value={color()}\n * onChange={setColor}\n * xChannel=\"saturation\"\n * yChannel=\"lightness\"\n * />\n * ```\n */\nexport function ColorArea(props: ColorAreaProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class'])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorAreaRenderProps): string => {\n const base = `relative ${styles().area.container} rounded-lg overflow-hidden border border-bg-300 shadow-inner`\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorArea {...headlessProps} class={getClassName}>\n {() => (\n <>\n <ColorAreaGradient />\n <ColorAreaThumb />\n </>\n )}\n </HeadlessColorArea>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The gradient background for a color area.\n */\nexport function ColorAreaGradient(props: { class?: string }): JSX.Element {\n const customClass = props.class ?? ''\n const className = `absolute inset-0 ${customClass}`\n\n return <HeadlessColorAreaGradient class={className} />\n}\n\n/**\n * The thumb component for a color area.\n */\nexport function ColorAreaThumb(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorAreaThumbRenderProps): string => {\n const base = `${styles.area.thumb} rounded-full border-2 border-white shadow-md cursor-grab`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing scale-110' : ''\n const focusClass = renderProps.isFocusVisible ? 'ring-2 ring-accent-300 ring-offset-2' : ''\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, dragClass, focusClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return <HeadlessColorAreaThumb class={getClassName} />\n}\n\n// ============================================\n// COLOR WHEEL\n// ============================================\n\nexport interface ColorWheelProps extends Omit<HeadlessColorWheelProps, 'class' | 'style' | 'children'> {\n /** The size of the color wheel. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A color wheel allows users to select a hue by dragging around a circular track.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorWheel\n * value={color()}\n * onChange={setColor}\n * />\n * ```\n */\nexport function ColorWheel(props: ColorWheelProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['size', 'class'])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorWheelRenderProps): string => {\n const base = `relative ${styles().wheel.container}`\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50 cursor-not-allowed'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorWheel {...headlessProps} class={getClassName}>\n {() => (\n <>\n <ColorWheelTrack />\n <ColorWheelThumb />\n </>\n )}\n </HeadlessColorWheel>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The circular track for a color wheel.\n */\nexport function ColorWheelTrack(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const className = `${styles.wheel.track} ${customClass}`\n\n return <HeadlessColorWheelTrack class={className} />\n}\n\n/**\n * The thumb component for a color wheel.\n */\nexport function ColorWheelThumb(props: { class?: string }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const getClassName = (renderProps: ColorWheelThumbRenderProps): string => {\n const base = `${styles.wheel.thumb} rounded-full border-2 border-white shadow-md cursor-grab`\n const dragClass = renderProps.isDragging ? 'cursor-grabbing scale-110' : ''\n const focusClass = renderProps.isFocusVisible ? 'ring-2 ring-accent-300 ring-offset-2' : ''\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed' : ''\n return [base, dragClass, focusClass, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n return <HeadlessColorWheelThumb class={getClassName} />\n}\n\n// ============================================\n// COLOR FIELD\n// ============================================\n\nexport interface ColorFieldProps extends Omit<HeadlessColorFieldProps, 'class' | 'style' | 'children'> {\n /** The size of the color field. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Description text below the input. */\n description?: string\n /** Error message to display. */\n errorMessage?: string\n}\n\n/**\n * A color field allows users to enter a color value as text.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('#ff0000'))\n *\n * <ColorField\n * value={color()}\n * onChange={setColor}\n * label=\"Color\"\n * />\n * ```\n */\nexport function ColorField(props: ColorFieldProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'description',\n 'errorMessage',\n ])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (renderProps: ColorFieldRenderProps): string => {\n const base = 'flex flex-col gap-1.5'\n let stateClass = ''\n if (renderProps.isDisabled) {\n stateClass = 'opacity-50'\n }\n return [base, stateClass, customClass].filter(Boolean).join(' ')\n }\n\n const contextValue = () => ({ size: size() })\n\n return (\n <ColorSizeContext.Provider value={contextValue()}>\n <HeadlessColorField {...headlessProps} class={getClassName}>\n {() => (\n <>\n <Show when={headlessProps.label}>\n <span class={`text-primary-200 font-medium ${styles().field.label}`}>\n {headlessProps.label}\n </span>\n </Show>\n <ColorFieldInput isInvalid={!!local.errorMessage} />\n <Show when={local.description && !local.errorMessage}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </>\n )}\n </HeadlessColorField>\n </ColorSizeContext.Provider>\n )\n}\n\n/**\n * The input component for a color field.\n */\nexport function ColorFieldInput(props: { class?: string; isInvalid?: boolean }): JSX.Element {\n const context = useContext(ColorSizeContext)\n const styles = sizeStyles[context.size]\n const customClass = props.class ?? ''\n\n const base = `${styles.field.input} w-full rounded-md border bg-bg-400 text-primary-200 placeholder:text-primary-500 focus:outline-none focus:ring-2 focus:ring-accent-300`\n const borderClass = props.isInvalid\n ? 'border-danger-400'\n : 'border-bg-300 focus:border-accent-300'\n const className = [base, borderClass, customClass].filter(Boolean).join(' ')\n\n return <HeadlessColorFieldInput class={className} />\n}\n\n// ============================================\n// COLOR SWATCH\n// ============================================\n\nexport interface ColorSwatchProps extends Omit<HeadlessColorSwatchProps, 'class' | 'style'> {\n /** The size of the color swatch. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Whether the swatch is selectable. */\n isSelectable?: boolean\n /** Whether the swatch is selected. */\n isSelected?: boolean\n /** Handler called when the swatch is clicked. */\n onClick?: () => void\n}\n\n/**\n * A color swatch displays a color sample.\n *\n * @example\n * ```tsx\n * <ColorSwatch color={parseColor('#ff0000')} />\n *\n * // Selectable swatch\n * <ColorSwatch\n * color={parseColor('#00ff00')}\n * isSelectable\n * isSelected={selectedColor === '#00ff00'}\n * onClick={() => setSelectedColor('#00ff00')}\n * />\n * ```\n */\nexport function ColorSwatch(props: ColorSwatchProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, [\n 'size',\n 'class',\n 'isSelectable',\n 'isSelected',\n 'onClick',\n ])\n\n const size = () => local.size ?? 'md'\n const styles = () => sizeStyles[size()]\n const customClass = local.class ?? ''\n\n const getClassName = (_renderProps: ColorSwatchRenderProps): string => {\n const base = `${styles().swatch} rounded-md border border-bg-300 shadow-sm`\n const selectableClass = local.isSelectable\n ? 'cursor-pointer hover:scale-105 transition-transform'\n : ''\n const selectedClass = local.isSelected\n ? 'ring-2 ring-accent-300 ring-offset-2 ring-offset-bg-400'\n : ''\n return [base, selectableClass, selectedClass, customClass].filter(Boolean).join(' ')\n }\n\n const handleClick = () => {\n if (local.isSelectable && local.onClick) {\n local.onClick()\n }\n }\n\n return (\n <div onClick={handleClick}>\n <HeadlessColorSwatch {...headlessProps} class={getClassName} />\n </div>\n )\n}\n\n// ============================================\n// COLOR PICKER (Composite Component)\n// ============================================\n\nexport interface ColorPickerProps {\n /** The current color value (controlled). */\n value?: Color | string\n /** The default color value (uncontrolled). */\n defaultValue?: Color | string\n /** Handler called when the color changes. */\n onChange?: (color: Color) => void\n /** The size of the picker. */\n size?: ColorSize\n /** Additional CSS class name. */\n class?: string\n /** Whether the picker is disabled. */\n isDisabled?: boolean\n /** A label for the picker. */\n label?: string\n /** Whether to show the hex input field. */\n showInput?: boolean\n /** Whether to show channel sliders. */\n showSliders?: boolean\n}\n\n/**\n * A complete color picker component with area, sliders, and input.\n *\n * @example\n * ```tsx\n * const [color, setColor] = createSignal(parseColor('hsl(0, 100%, 50%)'))\n *\n * <ColorPicker\n * value={color()}\n * onChange={setColor}\n * label=\"Pick a color\"\n * showInput\n * showSliders\n * />\n * ```\n */\nexport function ColorPicker(props: ColorPickerProps): JSX.Element {\n const size = () => props.size ?? 'md'\n const styles = () => sizeStyles[size()]\n\n return (\n <div class={`flex flex-col gap-4 ${props.class ?? ''}`}>\n <Show when={props.label}>\n <span class={`text-primary-200 font-medium ${styles().field.label}`}>\n {props.label}\n </span>\n </Show>\n\n <ColorArea\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={props.onChange}\n xChannel=\"saturation\"\n yChannel=\"lightness\"\n size={size()}\n isDisabled={props.isDisabled}\n />\n\n <Show when={props.showSliders !== false}>\n <ColorSlider\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={props.onChange}\n channel=\"hue\"\n label=\"Hue\"\n size={size()}\n showValue\n isDisabled={props.isDisabled}\n />\n\n <ColorSlider\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={props.onChange}\n channel=\"alpha\"\n label=\"Alpha\"\n size={size()}\n showValue\n isDisabled={props.isDisabled}\n />\n </Show>\n\n <Show when={props.showInput}>\n <ColorField\n value={props.value}\n defaultValue={props.defaultValue}\n onChange={(color) => {\n if (color && props.onChange) {\n props.onChange(color)\n }\n }}\n label=\"Hex\"\n size={size()}\n isDisabled={props.isDisabled}\n />\n </Show>\n </div>\n )\n}\n\n// Attach sub-components for convenience\nColorSlider.Track = ColorSliderTrack\nColorSlider.Thumb = ColorSliderThumb\nColorArea.Gradient = ColorAreaGradient\nColorArea.Thumb = ColorAreaThumb\nColorWheel.Track = ColorWheelTrack\nColorWheel.Thumb = ColorWheelThumb\nColorField.Input = ColorFieldInput\n\n// Re-export types for convenience\nexport type { Color, ColorChannel, ColorFormat }\n","/**\n * Landmark component for proyecto-viviana-ui\n *\n * Styled landmark component built on top of solidaria-components.\n * Landmarks help screen reader users navigate between major sections of a page.\n * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.\n */\n\nimport { type JSX, splitProps, Show } from 'solid-js'\nimport {\n Landmark as HeadlessLandmark,\n useLandmarkController,\n type LandmarkProps as HeadlessLandmarkProps,\n type AriaLandmarkRole,\n type LandmarkController,\n} from '@proyecto-viviana/solidaria-components'\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface LandmarkProps extends Omit<HeadlessLandmarkProps, 'class' | 'style'> {\n /** Additional CSS class name. */\n class?: string\n /** Whether to show a visual indicator (for development). */\n showLabel?: boolean\n}\n\nexport type { AriaLandmarkRole, LandmarkController }\n\n// ============================================\n// STYLES\n// ============================================\n\nconst roleLabels: Record<AriaLandmarkRole, string> = {\n main: 'Main',\n navigation: 'Navigation',\n search: 'Search',\n banner: 'Banner',\n contentinfo: 'Footer',\n complementary: 'Aside',\n form: 'Form',\n region: 'Region',\n}\n\nconst roleColors: Record<AriaLandmarkRole, string> = {\n main: 'bg-accent/10 border-accent-300',\n navigation: 'bg-primary-500/10 border-primary-400',\n search: 'bg-warning-400/10 border-warning-400',\n banner: 'bg-success-400/10 border-success-400',\n contentinfo: 'bg-danger-400/10 border-danger-400',\n complementary: 'bg-primary-300/10 border-primary-300',\n form: 'bg-accent-200/10 border-accent-200',\n region: 'bg-bg-200/50 border-bg-300',\n}\n\n// ============================================\n// LANDMARK COMPONENT\n// ============================================\n\n/**\n * A landmark is a region of the page that helps screen reader users navigate.\n * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.\n *\n * @example\n * ```tsx\n * // Main content area\n * <Landmark role=\"main\" aria-label=\"Main content\">\n * <h1>Welcome</h1>\n * <p>Page content here...</p>\n * </Landmark>\n *\n * // Navigation\n * <Landmark role=\"navigation\" aria-label=\"Primary navigation\">\n * <nav>...</nav>\n * </Landmark>\n *\n * // With development label visible\n * <Landmark role=\"main\" aria-label=\"Main content\" showLabel>\n * ...\n * </Landmark>\n * ```\n */\nexport function Landmark(props: LandmarkProps): JSX.Element {\n const [local, headlessProps] = splitProps(props, ['class', 'showLabel'])\n const customClass = local.class ?? ''\n\n const role = () => headlessProps.role\n\n const getClassName = (): string => {\n const base = 'relative'\n const debugClass = local.showLabel\n ? `border-2 border-dashed ${roleColors[role()]}`\n : ''\n return [base, debugClass, customClass].filter(Boolean).join(' ')\n }\n\n return (\n <HeadlessLandmark {...headlessProps} class={getClassName()}>\n <Show when={local.showLabel}>\n <div\n class={`absolute -top-3 left-2 px-2 py-0.5 text-xs font-medium rounded ${roleColors[role()]} text-primary-200`}\n >\n {roleLabels[role()]}\n <Show when={headlessProps['aria-label']}>\n <span class=\"text-primary-400\"> - {headlessProps['aria-label']}</span>\n </Show>\n </div>\n </Show>\n {props.children}\n </HeadlessLandmark>\n )\n}\n\n// ============================================\n// SKIP LINK COMPONENT\n// ============================================\n\nexport interface SkipLinkProps {\n /** The ID of the element to skip to (usually the main landmark). */\n href: string\n /** The text to display in the skip link. */\n children?: JSX.Element\n /** Additional CSS class name. */\n class?: string\n}\n\n/**\n * A skip link allows keyboard users to bypass repetitive navigation and jump directly to main content.\n * The link is visually hidden until focused.\n *\n * @example\n * ```tsx\n * <SkipLink href=\"#main-content\">Skip to main content</SkipLink>\n *\n * <Landmark role=\"navigation\">...</Landmark>\n *\n * <Landmark role=\"main\" id=\"main-content\">\n * ...\n * </Landmark>\n * ```\n */\nexport function SkipLink(props: SkipLinkProps): JSX.Element {\n const customClass = props.class ?? ''\n\n const className = [\n // Visually hidden by default\n 'absolute left-0 top-0 -translate-y-full',\n // Show when focused\n 'focus:translate-y-0',\n // Styling\n 'z-50 px-4 py-2 bg-accent text-white font-medium rounded-br-lg',\n 'transition-transform duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-accent-300 focus:ring-offset-2',\n customClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <a href={props.href} class={className}>\n {props.children ?? 'Skip to main content'}\n </a>\n )\n}\n\n// ============================================\n// LANDMARK NAVIGATOR COMPONENT\n// ============================================\n\nexport interface LandmarkNavigatorProps {\n /** Additional CSS class name. */\n class?: string\n /** Whether to show the navigator (for development/accessibility testing). */\n isVisible?: boolean\n}\n\n/**\n * A floating navigator for landmarks, useful for development and accessibility testing.\n * Provides buttons to navigate between landmarks programmatically.\n *\n * @example\n * ```tsx\n * // Show in development only\n * <LandmarkNavigator isVisible={import.meta.env.DEV} />\n * ```\n */\nexport function LandmarkNavigator(props: LandmarkNavigatorProps): JSX.Element {\n const controller = useLandmarkController()\n\n return (\n <Show when={props.isVisible}>\n <div\n class={`fixed bottom-4 right-4 z-50 flex flex-col gap-2 p-3 bg-bg-400 border border-bg-300 rounded-lg shadow-lg ${props.class ?? ''}`}\n >\n <span class=\"text-xs font-medium text-primary-400 uppercase tracking-wider\">\n Landmarks (F6)\n </span>\n <div class=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => controller.focusPrevious()}\n class=\"px-2 py-1 text-sm bg-bg-300 hover:bg-bg-200 text-primary-200 rounded transition-colors\"\n title=\"Previous landmark (Shift+F6)\"\n >\n ←\n </button>\n <button\n type=\"button\"\n onClick={() => controller.focusMain()}\n class=\"px-3 py-1 text-sm bg-accent hover:bg-accent-200 text-white rounded transition-colors\"\n title=\"Go to main content\"\n >\n Main\n </button>\n <button\n type=\"button\"\n onClick={() => controller.focusNext()}\n class=\"px-2 py-1 text-sm bg-bg-300 hover:bg-bg-200 text-primary-200 rounded transition-colors\"\n title=\"Next landmark (F6)\"\n >\n →\n </button>\n </div>\n </div>\n </Show>\n )\n}\n\n// Export controller hook for convenience\nexport { useLandmarkController }\n","import { type JSX, Show } from 'solid-js'\n\nexport type ChipVariant = 'primary' | 'secondary' | 'accent' | 'outline'\n\nexport interface ChipProps {\n text: string\n variant?: ChipVariant\n onClick?: () => void\n /**\n * Icon to display before the text.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n * Or pass a simple string for text-based icons: `icon=\"★\"`\n */\n icon?: string | (() => JSX.Element)\n class?: string\n}\n\nconst variantStyles: Record<ChipVariant, string> = {\n primary: 'bg-primary-700 text-primary-200 shadow-primary-chip',\n secondary: 'bg-primary-600 text-primary-100 hover:bg-primary-500',\n accent: 'bg-accent text-white',\n outline: 'bg-transparent border border-primary-500 text-primary-300',\n}\n\nexport function Chip(props: ChipProps) {\n const variant = () => props.variant ?? 'primary'\n\n const renderIcon = () => {\n const icon = props.icon\n if (!icon) return null\n if (typeof icon === 'string') return icon\n return icon()\n }\n\n return (\n <button\n class={`flex justify-center items-center h-6 w-auto rounded-full px-4 py-1 font-medium text-sm tracking-wide transition-colors ${variantStyles[variant()]} ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n <Show when={props.icon}>\n <span class=\"mr-1.5\">{renderIcon()}</span>\n </Show>\n <span>{props.text}</span>\n </button>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\n\nexport interface NavHeaderProps {\n logo?: string\n logoAlt?: string\n logoText?: string\n children?: JSX.Element\n menuIcon?: JSX.Element\n onMenuClick?: () => void\n class?: string\n}\n\nexport function NavHeader(props: NavHeaderProps) {\n return (\n <nav class={`flex items-center bg-bg-400 h-[70px] border-b-4 border-accent-500 ${props.class ?? ''}`}>\n <div class=\"pl-1 md:pl-8 flex items-center\">\n <Show when={props.logo} fallback={\n <Show when={props.logoText}>\n <span class=\"text-[34px] font-light text-primary-700 flex items-center\">\n {props.logoText}\n </span>\n </Show>\n }>\n <img src={props.logo} alt={props.logoAlt ?? 'Logo'} class=\"h-[42px] w-auto\" />\n </Show>\n </div>\n\n <div class=\"flex-1 flex justify-end items-center pr-1 md:pr-8\">\n {props.children}\n <Show when={props.menuIcon}>\n <button\n class=\"md:hidden flex items-center justify-center\"\n onClick={props.onMenuClick}\n >\n {props.menuIcon}\n </button>\n </Show>\n </div>\n </nav>\n )\n}\n","import { JSX } from \"solid-js\";\n\nexport type LogoSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface LogoProps {\n /** First word (light weight, muted color) */\n firstWord?: string;\n /** Second word (bold, with 3D effect) */\n secondWord?: string;\n /** Size variant of the logo */\n size?: LogoSize;\n /** Invert the styles (first word gets 3D effect, second word is muted) */\n inverted?: boolean;\n /** Additional CSS classes */\n class?: string;\n}\n\n/**\n * Two-word logo with retro synthwave 3D effect.\n * First word is light/muted, second word has bold styling with pink 3D shadow.\n *\n * @example\n * // Default usage\n * <Logo />\n *\n * @example\n * // Custom text\n * <Logo firstWord=\"My\" secondWord=\"Brand\" size=\"lg\" />\n */\nexport function Logo(props: LogoProps): JSX.Element {\n const sizeClass = () => {\n switch (props.size) {\n case \"sm\":\n return \"vui-logo--sm\";\n case \"lg\":\n return \"vui-logo--lg\";\n case \"xl\":\n return \"vui-logo--xl\";\n case \"md\":\n default:\n return \"vui-logo--md\";\n }\n };\n\n const firstWord = () => props.firstWord ?? \"Proyecto\";\n const secondWord = () => props.secondWord ?? \"Viviana\";\n\n return (\n <span class={`vui-logo ${sizeClass()} ${props.inverted ? \"vui-logo--inverted\" : \"\"} ${props.class ?? \"\"}`}>\n <span class=\"vui-logo__first\" data-text={props.inverted ? firstWord() : undefined}>\n {firstWord()}\n </span>\n <span class=\"vui-logo__second\" data-text={props.inverted ? undefined : secondWord()}>\n {secondWord()}\n </span>\n </span>\n );\n}\n","import type { JSX } from 'solid-js'\nimport { Logo, type LogoProps } from '../logo'\n\nexport interface HeaderProps {\n /** Image element to show to the left of the text logo */\n logoImage?: JSX.Element\n /** Props to pass to the Logo component (firstWord, secondWord, size, inverted). Pass null to hide the text logo. */\n logoProps?: LogoProps | null\n /** Custom logo element - replaces the default Logo component entirely */\n logo?: JSX.Element\n /** Navigation items to display on the right side */\n children?: JSX.Element\n /** Additional CSS classes */\n class?: string\n}\n\nexport function Header(props: HeaderProps) {\n const showTextLogo = () => props.logo !== undefined || props.logoProps !== null\n\n return (\n <header class={`vui-header ${props.class ?? ''}`}>\n <div class=\"vui-header__container\">\n <div class=\"flex items-center gap-3\">\n {props.logoImage}\n {showTextLogo() && (props.logo ?? <Logo size=\"lg\" {...(props.logoProps ?? {})} />)}\n </div>\n <nav class=\"vui-header__nav\">\n {props.children}\n </nav>\n </div>\n </header>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show, For } from 'solid-js'\n\nexport interface NavItemProps {\n title: string\n children?: JSX.Element\n class?: string\n}\n\nexport function NavItem(props: NavItemProps) {\n return (\n <li class={`flex items-center ${props.class ?? ''}`}>\n <span class=\"text-lg font-bold text-primary-200\">{props.title}</span>\n {props.children}\n </li>\n )\n}\n\nexport interface NavLinkProps {\n href: string\n children: JSX.Element\n active?: boolean\n class?: string\n}\n\nexport function NavLink(props: NavLinkProps) {\n const activeStyles = 'font-medium text-primary-300 underline underline-offset-4'\n const inactiveStyles = 'font-normal text-gray-200 underline-offset-4 hover:text-gray-100 hover:underline'\n\n return (\n <a\n href={props.href}\n class={`${props.active ? activeStyles : inactiveStyles} ${props.class ?? ''}`}\n >\n {props.children}\n </a>\n )\n}\n\nexport interface NavSectionProps {\n title: string\n links?: { href: string; label: string; active?: boolean }[]\n children?: JSX.Element\n class?: string\n}\n\nexport function NavSection(props: NavSectionProps) {\n return (\n <div class={props.class ?? ''}>\n <NavItem title={props.title} />\n <div class=\"flex h-full\">\n <div class=\"h-5 w-1 bg-accent-300\" />\n <ul class=\"flex h-full flex-1 flex-col gap-1 pl-4\">\n <Show when={props.links}>\n <For each={props.links}>\n {(link) => (\n <li>\n <NavLink href={link.href} active={link.active}>\n {link.label}\n </NavLink>\n </li>\n )}\n </For>\n </Show>\n {props.children}\n </ul>\n </div>\n </div>\n )\n}\n\nexport interface LateralNavProps {\n transparent?: boolean\n children?: JSX.Element\n class?: string\n}\n\nexport function LateralNav(props: LateralNavProps) {\n const bgColor = () => (props.transparent ? '' : 'bg-bg-200')\n\n return (\n <div\n class={`hidden w-[300px] md:block ${bgColor()} m-0 border-r border-primary-600 p-3 ${props.class ?? ''}`}\n >\n {props.children}\n </div>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport type TimelineEventType = 'follow' | 'like' | 'comment' | 'event' | 'custom'\n\nexport interface TimelineItemProps {\n type?: TimelineEventType\n /**\n * Icon to display between the two avatars.\n * Use a function returning JSX for SSR compatibility: `icon={() => <MyIcon />}`\n * Or pass a simple string for text-based icons: `icon=\"👋\"`\n */\n icon?: string | (() => JSX.Element)\n leftUser?: {\n name: string\n avatar?: string\n }\n rightUser?: {\n name: string\n avatar?: string\n }\n /**\n * Custom message content.\n * Use a function returning JSX for SSR compatibility: `message={() => <span>...</span>}`\n * Or pass a simple string.\n */\n message?: string | (() => JSX.Element)\n class?: string\n}\n\nconst eventMessages: Record<TimelineEventType, (left: string, right: string) => JSX.Element> = {\n follow: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' ha empezado a seguir a '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n like: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' le ha dado like a '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n comment: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' ha comentado en '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n event: (left, right) => (\n <>\n <span class=\"font-semibold text-accent-200\">{left}</span>\n {' asistirá al evento de '}\n <span class=\"font-semibold text-accent-200\">{right}</span>\n </>\n ),\n custom: () => null,\n}\n\nexport function TimelineItem(props: TimelineItemProps) {\n const type = () => props.type ?? 'follow'\n const leftName = () => props.leftUser?.name ?? ''\n const rightName = () => props.rightUser?.name ?? ''\n\n const renderIcon = () => {\n const icon = props.icon\n if (!icon) return null\n if (typeof icon === 'string') return icon\n return icon()\n }\n\n const renderMessage = () => {\n const message = props.message\n if (!message) return null\n if (typeof message === 'string') return message\n return message()\n }\n\n return (\n <div class={`inline-flex w-auto flex-col gap-5 rounded-2xl border border-primary-700 bg-bg-200 p-5 hover:bg-bg-300 transition-colors ${props.class ?? ''}`}>\n <div class=\"flex items-center justify-around gap-3\">\n <Show when={props.leftUser}>\n <Avatar src={props.leftUser!.avatar} alt={props.leftUser!.name} />\n </Show>\n <Show when={props.icon}>\n {renderIcon()}\n </Show>\n <Show when={props.rightUser}>\n <Avatar src={props.rightUser!.avatar} alt={props.rightUser!.name} />\n </Show>\n </div>\n <div class=\"flex items-center justify-center gap-3 text-center\">\n <span class=\"font-light text-primary-300\">\n <Show when={props.message} fallback={eventMessages[type()](leftName(), rightName())}>\n {renderMessage()}\n </Show>\n </span>\n </div>\n </div>\n )\n}\n","import { Show, For } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport interface Message {\n id: string\n content: string\n sender: 'user' | 'other'\n timestamp?: string\n}\n\nexport interface ConversationPreviewProps {\n user: {\n name: string\n avatar?: string\n online?: boolean\n }\n lastMessage?: string\n unreadCount?: number\n timestamp?: string\n onClick?: () => void\n class?: string\n}\n\nexport function ConversationPreview(props: ConversationPreviewProps) {\n return (\n <button\n class={`flex w-full items-center gap-3 rounded-xl p-3 hover:bg-bg-300 transition-colors text-left ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n <Avatar\n src={props.user.avatar}\n alt={props.user.name}\n online={props.user.online}\n size=\"md\"\n />\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center justify-between\">\n <span class=\"font-semibold text-primary-100 truncate\">{props.user.name}</span>\n <Show when={props.timestamp}>\n <span class=\"text-xs text-primary-500\">{props.timestamp}</span>\n </Show>\n </div>\n <Show when={props.lastMessage}>\n <p class=\"text-sm text-primary-400 truncate\">{props.lastMessage}</p>\n </Show>\n </div>\n <Show when={props.unreadCount && props.unreadCount > 0}>\n <span class=\"flex h-5 w-5 items-center justify-center rounded-full bg-accent text-xs font-bold text-white\">\n {props.unreadCount}\n </span>\n </Show>\n </button>\n )\n}\n\nexport interface ConversationBubbleProps {\n content: string\n sender: 'user' | 'other'\n timestamp?: string\n class?: string\n}\n\nexport function ConversationBubble(props: ConversationBubbleProps) {\n const isUser = () => props.sender === 'user'\n\n return (\n <div class={`flex ${isUser() ? 'justify-end' : 'justify-start'} ${props.class ?? ''}`}>\n <div\n class={`max-w-[70%] rounded-2xl px-4 py-2 ${\n isUser()\n ? 'bg-accent text-white rounded-br-sm'\n : 'bg-bg-300 text-primary-100 rounded-bl-sm'\n }`}\n >\n <p>{props.content}</p>\n <Show when={props.timestamp}>\n <span class={`text-xs ${isUser() ? 'text-white/70' : 'text-primary-500'}`}>\n {props.timestamp}\n </span>\n </Show>\n </div>\n </div>\n )\n}\n\nexport interface ConversationProps {\n messages: Message[]\n class?: string\n}\n\nexport function Conversation(props: ConversationProps) {\n return (\n <div class={`flex flex-col gap-2 p-4 ${props.class ?? ''}`}>\n <For each={props.messages}>\n {(message) => (\n <ConversationBubble\n content={message.content}\n sender={message.sender}\n timestamp={message.timestamp}\n />\n )}\n </For>\n </div>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport interface ProfileCardProps {\n username: string\n avatar?: string\n bio?: string\n followers?: number\n following?: number\n /**\n * Actions to display below the profile.\n * Use a function returning JSX for SSR compatibility: `actions={() => <Button>...</Button>}`\n */\n actions?: JSX.Element | (() => JSX.Element)\n class?: string\n}\n\nexport function ProfileCard(props: ProfileCardProps) {\n const formatNumber = (num: number) => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`\n return num.toString()\n }\n\n return (\n <div class={`bg-bg-200 rounded-xl p-4 ${props.class ?? ''}`}>\n <div class=\"flex items-start gap-4\">\n <Avatar src={props.avatar} alt={props.username} size=\"lg\" />\n <div class=\"flex-1 min-w-0\">\n <h3 class=\"font-semibold text-primary-100 text-lg truncate\">\n {props.username}\n </h3>\n <Show when={props.bio}>\n <p class=\"text-primary-300 text-sm mt-1 line-clamp-2\">{props.bio}</p>\n </Show>\n <div class=\"flex gap-4 mt-2 text-sm\">\n <Show when={props.followers !== undefined}>\n <span class=\"text-primary-300\">\n <span class=\"font-semibold text-primary-100\">\n {formatNumber(props.followers!)}\n </span>{' '}\n seguidores\n </span>\n </Show>\n <Show when={props.following !== undefined}>\n <span class=\"text-primary-300\">\n <span class=\"font-semibold text-primary-100\">\n {formatNumber(props.following!)}\n </span>{' '}\n siguiendo\n </span>\n </Show>\n </div>\n </div>\n </div>\n <Show when={props.actions}>\n <div class=\"mt-4 flex gap-2\">\n {typeof props.actions === 'function' ? props.actions() : props.actions}\n </div>\n </Show>\n </div>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show, For } from 'solid-js'\nimport { Avatar } from '../../avatar'\n\nexport interface EventCardProps {\n title: string\n image?: string\n date?: string\n author?: string\n authorAvatar?: string\n attendees?: { avatar?: string; name: string }[]\n attendeeCount?: number\n decorationImage?: string\n /**\n * Actions to display below the event.\n * Use a function returning JSX for SSR compatibility: `actions={() => <Button>...</Button>}`\n */\n actions?: JSX.Element | (() => JSX.Element)\n class?: string\n}\n\nexport function EventCard(props: EventCardProps) {\n const displayedAttendees = () => props.attendees?.slice(0, 3) ?? []\n const remainingCount = () => {\n const total = props.attendeeCount ?? props.attendees?.length ?? 0\n const displayed = displayedAttendees().length\n return total - displayed\n }\n\n return (\n <div class={`relative bg-bg-200 rounded-3xl overflow-hidden ${props.class ?? ''}`}>\n {/* Decoration image (fire gif, etc) */}\n <Show when={props.decorationImage}>\n <div class=\"absolute -top-2 -right-2 z-10 flex flex-col gap-1\">\n <img src={props.decorationImage} alt=\"\" class=\"w-8 h-8 object-contain\" />\n <img src={props.decorationImage} alt=\"\" class=\"w-6 h-6 object-contain ml-2\" />\n <img src={props.decorationImage} alt=\"\" class=\"w-5 h-5 object-contain\" />\n </div>\n </Show>\n\n <Show when={props.image}>\n <div class=\"relative h-32 w-full\">\n <img\n src={props.image}\n alt={props.title}\n class=\"w-full h-full object-cover\"\n />\n <div class=\"absolute inset-0 bg-gradient-to-t from-bg-200 via-transparent to-transparent\" />\n </div>\n </Show>\n\n <div class=\"p-4 pt-2\">\n <h3 class=\"font-bold text-xl leading-tight bg-gradient-to-r from-accent to-accent-300 bg-clip-text text-transparent\">\n {props.title}\n </h3>\n\n <Show when={props.date || props.author}>\n <div class=\"flex items-center gap-4 mt-3 text-sm text-primary-300\">\n <Show when={props.author}>\n <div class=\"flex items-center gap-1.5\">\n <span class=\"text-accent\">@</span>\n <span>{props.author}</span>\n </div>\n </Show>\n <Show when={props.date}>\n <div class=\"flex items-center gap-1.5\">\n <span class=\"text-accent\">⏱</span>\n <span>{props.date}</span>\n </div>\n </Show>\n </div>\n </Show>\n\n <Show when={displayedAttendees().length > 0}>\n <div class=\"flex items-center mt-3\">\n <div class=\"flex -space-x-2\">\n <For each={displayedAttendees()}>\n {(attendee) => (\n <Avatar src={attendee.avatar} alt={attendee.name} size=\"sm\" />\n )}\n </For>\n </div>\n <Show when={remainingCount() > 0}>\n <span class=\"ml-2 text-sm text-primary-300\">\n +{remainingCount()} más\n </span>\n </Show>\n </div>\n </Show>\n\n <Show when={props.actions}>\n <div class=\"mt-4 flex gap-2\">\n {typeof props.actions === 'function' ? props.actions() : props.actions}\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\nexport interface EventListItemProps {\n title: string\n image?: string\n subtitle?: string\n onClick?: () => void\n class?: string\n}\n\nexport function EventListItem(props: EventListItemProps) {\n return (\n <button\n class={`flex items-center gap-3 w-full p-2 rounded-lg hover:bg-bg-300 transition-colors text-left ${props.class ?? ''}`}\n onClick={props.onClick}\n >\n <Show when={props.image}>\n <div class=\"w-12 h-12 rounded-lg overflow-hidden flex-shrink-0\">\n <img\n src={props.image}\n alt={props.title}\n class=\"w-full h-full object-cover\"\n />\n </div>\n </Show>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"font-medium text-primary-100 truncate\">{props.title}</h4>\n <Show when={props.subtitle}>\n <p class=\"text-sm text-primary-300 truncate\">{props.subtitle}</p>\n </Show>\n </div>\n </button>\n )\n}\n","import { Show, For } from 'solid-js'\nimport { Chip } from '../chip'\n\nexport interface CalendarCardProps {\n title: string\n image?: string\n tags?: string[]\n followers?: { name: string }[]\n followerCount?: number\n class?: string\n}\n\nexport function CalendarCard(props: CalendarCardProps) {\n const displayedFollowers = () => props.followers?.slice(0, 2) ?? []\n const remainingCount = () => {\n const total = props.followerCount ?? props.followers?.length ?? 0\n const displayed = displayedFollowers().length\n return total - displayed\n }\n\n return (\n <div class={`flex h-[100px] w-full max-w-[500px] items-center rounded-xl border border-primary-600 border-b-accent-500 bg-bg-300 p-2 ${props.class ?? ''}`}>\n <Show when={props.image}>\n <div class=\"relative h-[80px] w-[80px] flex-shrink-0 overflow-hidden rounded-xl border-2 border-accent-200\">\n <img src={props.image} alt={props.title} class=\"h-full w-full object-cover\" />\n </div>\n </Show>\n <div class=\"relative h-full flex-1 flex-col pl-3\">\n <Show when={props.tags && props.tags.length > 0}>\n <div class=\"absolute bottom-[-20px] h-[30px] w-full\">\n <div class=\"flex h-full w-full flex-1 justify-end gap-1\">\n <For each={props.tags}>\n {(tag) => <Chip text={tag} variant=\"primary\" />}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"flex h-full flex-col items-end justify-center pb-3 pr-5 pt-2\">\n <div class=\"flex flex-1\">\n <span class=\"text-lg font-semibold text-white drop-shadow-sm\">\n {props.title}\n </span>\n </div>\n <Show when={displayedFollowers().length > 0}>\n <div class=\"flex flex-1\">\n <span class=\"text-base font-normal text-primary-500\">\n seguida por{' '}\n <For each={displayedFollowers()}>\n {(follower, index) => (\n <>\n <span class=\"font-semibold text-accent-200\">{follower.name}</span>\n {index() < displayedFollowers().length - 1 && ', '}\n </>\n )}\n </For>\n <Show when={remainingCount() > 0}>\n {' '}y <span class=\"font-semibold text-accent-200\">{remainingCount()} más</span>\n </Show>\n </span>\n </div>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n","import type { JSX } from 'solid-js'\n\nexport type ProjectCardSize = 'sm' | 'md' | 'lg'\n\nexport interface ProjectCardProps {\n /** Project name shown in tooltip on hover */\n name: string\n /** Image source for the project logo */\n imageSrc: string\n /** Alt text for the image */\n imageAlt?: string\n /** Optional link to the project */\n href?: string\n /** Size of the card */\n size?: ProjectCardSize\n /** Whether the project is inactive/greyed out */\n inactive?: boolean\n /** Additional CSS class */\n class?: string\n}\n\n/**\n * Project card with logo and hover tooltip.\n * Used for showcasing ecosystem projects.\n */\nexport function ProjectCard(props: ProjectCardProps): JSX.Element {\n const size = () => props.size ?? 'sm'\n const inactive = () => props.inactive ?? false\n\n const cardContent = () => (\n <>\n <div class=\"vui-project-card__tooltip\">\n <span>{props.name}</span>\n </div>\n <img\n class=\"vui-project-card__image\"\n src={props.imageSrc}\n alt={props.imageAlt ?? props.name}\n />\n </>\n )\n\n const cardClasses = () =>\n `vui-project-card vui-project-card--${size()} ${inactive() ? 'vui-project-card--inactive' : ''} ${props.class ?? ''}`\n\n if (props.href) {\n return (\n <a href={props.href} target=\"_blank\" rel=\"noopener noreferrer\" class={cardClasses()}>\n {cardContent()}\n </a>\n )\n }\n\n return (\n <div class={cardClasses()}>\n {cardContent()}\n </div>\n )\n}\n","import { JSX, splitProps } from 'solid-js'\n\nexport interface PageLayoutProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Content of the page */\n children: JSX.Element\n /** Add padding-top to account for fixed header (use for non-landing pages) */\n withHeader?: boolean\n}\n\n/**\n * PageLayout provides consistent page structure with proper background and font styling.\n * Use this as the root wrapper for all pages.\n */\nexport function PageLayout(props: PageLayoutProps) {\n const [local, rest] = splitProps(props, ['class', 'withHeader'])\n\n const classes = () => {\n const base = 'vui-page'\n const header = local.withHeader ? 'vui-page--with-header' : ''\n const custom = local.class ?? ''\n return [base, header, custom].filter(Boolean).join(' ')\n }\n\n return (\n <div class={classes()} {...rest}>\n {props.children}\n </div>\n )\n}\n"],"mappings":"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","names":["splitProps","mergeProps","solidMergeProps","Button","HeadlessButton","props","defaultProps","variant","buttonStyle","size","merged","local","headlessProps","getClassName","renderProps","classList","isPressed","push","fullWidth","class","join","_$createComponent","_$mergeProps","staticColor","undefined","children","Show","variantStyles","primary","secondary","accent","success","warning","danger","sizeStyles","sm","md","lg","Badge","props","variant","size","_$ssr","_tmpl$2","_$escape","class","_$createComponent","when","count","undefined","fallback","children","_tmpl$","Show","variantStyles","info","success","warning","error","Alert","props","variant","_$ssr","_tmpl$4","_$escape","class","_$createComponent","when","title","children","_tmpl$","_tmpl$2","dismissible","_tmpl$3","Show","sizeStyles","xs","container","text","indicator","sm","md","lg","xl","Avatar","props","size","styles","initials","fallback","slice","toUpperCase","alt","_$ssr","_tmpl$3","_$escape","class","_$createComponent","when","src","_tmpl$4","children","_tmpl$","_$ssrAttribute","online","undefined","_tmpl$2","AvatarGroup","_tmpl$5","createSignal","createEffect","splitProps","mergeProps","solidMergeProps","ToggleSwitch","HeadlessToggleSwitch","sizeStyles","sm","track","thumb","translate","md","lg","props","defaultProps","size","merged","local","headlessProps","getClassName","renderProps","base","disabledClass","isDisabled","custom","class","filter","Boolean","join","_$createComponent","_$mergeProps","children","_$ssr","_tmpl$","_$ssrAttribute","_$escape","isSelected","_tmpl$2","TabSwitch","props","leftSelected","setLeftSelected","createSignal","value","options","createEffect","undefined","toggle","newLeftSelected","newValue","onChange","leftSelectedStyle","rightSelectedStyle","textSelected","textUnselected","_$ssr","_tmpl$","_$escape","class","label","splitProps","mergeProps","solidMergeProps","Show","Checkbox","HeadlessCheckbox","CheckboxGroup","HeadlessCheckboxGroup","sizeStyles","sm","box","icon","label","md","lg","CheckIcon","props","_$ssr","_tmpl$","_$ssrAttribute","_$escape","class","IndeterminateIcon","_tmpl$2","defaultProps","size","merged","local","headlessProps","getClassName","renderProps","base","disabledClass","isDisabled","custom","filter","Boolean","join","_$createComponent","_$mergeProps","children","boxClasses","sizeClass","colorClass","isSelected","isIndeterminate","focusClass","isFocusVisible","cursorClass","iconClasses","visibilityClass","labelClasses","_tmpl$3","when","fallback","renderChildren","_tmpl$4","_tmpl$5","description","isInvalid","_tmpl$6","errorMessage","_tmpl$7","Show","createContext","useContext","splitProps","RadioGroup","HeadlessRadioGroup","Radio","HeadlessRadio","RadioSizeContext","sizeStyles","sm","circle","dot","label","md","lg","props","local","headlessProps","size","customClass","class","getClassName","renderProps","base","orientationClass","orientation","disabledClass","isDisabled","filter","Boolean","join","_$createComponent","Provider","value","children","_$mergeProps","when","_$ssr","_tmpl$","_$escape","description","_tmpl$2","errorMessage","_tmpl$3","sizeFromContext","sizeStyle","cursorClass","circleClass","dotClass","labelClass","_tmpl$4","_$ssrAttribute","_tmpl$5","splitProps","Show","createSignal","createContext","useContext","createUniqueId","onMount","onCleanup","createEffect","Portal","createInteractOutside","DialogContext","sizeStyles","sm","md","lg","fullscreen","Dialog","props","local","rest","splitProps","size","customClass","class","role","titleId","createUniqueId","ariaLabelledBy","title","undefined","close","onClose","baseClass","sizeClass","padding","className","filter","Boolean","join","_$createComponent","DialogContext","Provider","value","children","_$ssrElement","_$mergeProps","tabIndex","_$escape","Show","when","_$ssr","_tmpl$2","_$ssrAttribute","isDismissable","_tmpl$","_tmpl$3","DialogTrigger","isOpen","setIsOpen","createSignal","dialogRef","open","onOpenChange","isOpenControlled","createInteractOutside","ref","onInteractOutside","isDisabled","onMount","handleKeyDown","e","key","isKeyboardDismissDisabled","preventDefault","stopPropagation","document","addEventListener","onCleanup","removeEventListener","createEffect","prevOverflow","documentElement","style","overflow","_tmpl$4","trigger","Portal","_tmpl$5","_tmpl$6","content","DialogFooter","_tmpl$7","GitHubIcon","props","_$ssr","_tmpl$","_$ssrAttribute","_$escape","size","color","Icon","props","size","color","IconComponent","icon","_$ssr","_tmpl$","withShadow","_$escape","class","_tmpl$2","_$createComponent","Show","splitProps","Tooltip","HeadlessTooltip","TooltipTrigger","HeadlessTooltipTrigger","baseStyles","join","variantStyles","default","neutral","info","arrowStyles","top","bottom","left","right","getArrowBorderColor","variant","colors","props","_$createComponent","local","rest","placement","_$mergeProps","_renderProps","classes","class","filter","Boolean","children","renderProps","when","showArrow","_$ssr","_tmpl$","_$ssrAttribute","_$escape","SimpleTooltip","position","_tmpl$2","label","Show","splitProps","Popover","HeadlessPopover","PopoverTrigger","HeadlessPopoverTrigger","OverlayArrow","HeadlessOverlayArrow","baseStyles","join","sizeStyles","sm","md","lg","paddingStyles","none","arrowBaseStyles","getArrowRotation","placement","props","_$createComponent","local","rest","size","padding","_$mergeProps","_renderProps","classes","class","filter","Boolean","children","renderProps","when","showArrow","PopoverArrow","style","bottom","left","transform","top","right","_$ssr","_tmpl$","_$escape","PopoverHeader","_tmpl$3","title","description","_tmpl$2","PopoverFooter","_tmpl$4","splitProps","mergeProps","solidMergeProps","Show","createTextField","createFocusRing","createSignal","createSignal","createSignal","createSignal","createSignal","createMemo","createSignal","createMemo","createSignal","createMemo","clamp","snapToStep","createSignal","createMemo","sizeStyles","sm","input","label","description","md","lg","TextField","props","defaultProps","size","variant","merged","solidMergeProps","local","ariaProps","splitProps","state","createTextFieldState","value","defaultValue","onChange","textFieldAria","createTextField","setValue","isFocused","isFocusVisible","focusProps","createFocusRing","containerClasses","base","disabledClass","isDisabled","custom","class","filter","Boolean","join","inputClasses","sizeClass","variantClass","stateClass","isInvalid","hoverClass","labelClasses","descriptionClasses","errorClasses","cleanLabelProps","ref","_ref","rest","labelProps","cleanInputProps","_ref1","inputProps","_ref2","focusRest","cleanDescriptionProps","descriptionProps","cleanErrorMessageProps","errorMessageProps","_$ssr","_tmpl$2","_$ssrAttribute","_$escape","undefined","isReadOnly","isRequired","_$createComponent","Show","when","children","_$ssrElement","_$mergeProps","_tmpl$","errorMessage","splitProps","Link","HeadlessLink","variantStyles","primary","secondary","subtle","props","local","headlessProps","variant","customClass","class","getClassName","renderProps","base","variantClass","underlineClass","isStandalone","isQuiet","isHovered","isFocusVisible","weightClass","focusClass","disabledClass","isDisabled","pressedClass","isPressed","filter","Boolean","join","_$createComponent","_$mergeProps","children","splitProps","Show","createMemo","createProgressBar","sizeStyles","sm","track","text","md","lg","variantStyles","primary","accent","success","warning","danger","clamp","value","min","max","Math","ProgressBar","props","local","ariaProps","size","variant","isIndeterminate","showValueLabel","progressAria","minValue","maxValue","valueLabel","label","percentage","undefined","clampedValue","valueText","progressBarProps","sizeConfig","_$ssrElement","_$mergeProps","class","_$escape","_$createComponent","when","children","_$ssr","_tmpl$3","_tmpl$","_tmpl$2","_tmpl$4","_$ssrStyleProperty","splitProps","createMemo","Show","createSeparator","variantStyles","default","subtle","strong","horizontalSizeStyles","sm","md","lg","verticalSizeStyles","Separator","props","local","ariaProps","orientation","variant","size","elementType","separatorAria","className","isVertical","sizeStyles","base","class","filter","Boolean","join","getAriaProps","ref","_","separatorProps","_$createComponent","when","fallback","_$ssrElement","_$mergeProps","undefined","children","splitProps","Toolbar","HeadlessToolbar","baseStyles","variantStyles","default","bordered","ghost","sizeStyles","sm","md","lg","orientationStyles","horizontal","vertical","props","local","headlessProps","variant","size","getClassName","renderProps","orientation","class","filter","Boolean","join","_$createComponent","_$mergeProps","style","splitProps","createMemo","Show","For","Autocomplete","useAutocompleteInput","useAutocompleteCollection","useAutocompleteState","sizeStyles","sm","container","input","label","list","item","md","lg","AutocompleteInput","props","ctx","styles","size","_$ssr","_tmpl$","_$ssrAttribute","_$escape","placeholder","isDisabled","inputProps","value","autoComplete","autoCorrect","spellCheck","join","AutocompleteList","state","filteredItems","filter","items","textValue","String","textKey","name","handleSelect","onSelect","setInputValue","_$createComponent","when","length","children","_tmpl$2","collectionProps","id","each","itemId","isFocused","focusedNodeId","_tmpl$3","renderItem","SearchAutocomplete","local","autocompleteProps","defaultFilter","inputValue","toLowerCase","includes","_tmpl$6","class","Boolean","_tmpl$4","_$mergeProps","description","_tmpl$5","Show","splitProps","createContext","useContext","Select","HeadlessSelect","SelectTrigger","HeadlessSelectTrigger","SelectValue","HeadlessSelectValue","SelectListBox","HeadlessSelectListBox","SelectOption","HeadlessSelectOption","SelectSizeContext","sizeStyles","sm","trigger","label","option","icon","md","lg","props","local","headlessProps","size","customClass","class","getClassName","renderProps","base","disabledClass","isDisabled","filter","Boolean","join","_$createComponent","Provider","value","children","_$mergeProps","when","_$ssr","_tmpl$","_$escape","description","isInvalid","_tmpl$2","errorMessage","_tmpl$3","sizeStyle","sizeClass","colorClass","isOpen","isHovered","focusClass","isFocusVisible","ChevronIcon","placeholderClass","isSelected","_renderProps","paddingStyles","isFocused","iconClass","paddingClass","CheckIcon","_tmpl$4","_tmpl$5","_$ssrAttribute","_tmpl$6","Trigger","Value","ListBox","Option","splitProps","createContext","useContext","Menu","HeadlessMenu","MenuItem","HeadlessMenuItem","MenuTrigger","HeadlessMenuTrigger","MenuButton","HeadlessMenuButton","MenuSizeContext","sizeStyles","sm","button","menu","item","icon","md","lg","buttonVariants","primary","secondary","quiet","props","local","headlessProps","size","_$createComponent","Provider","value","children","_$ssr","_tmpl$","_$escape","class","_$mergeProps","sizeStyle","variant","customClass","getClassName","renderProps","base","sizeClass","variantClass","stateClass","isDisabled","isPressed","focusClass","isFocusVisible","filter","Boolean","join","ChevronIcon","styles","_renderProps","colorClass","isDestructive","isFocused","isHovered","pressedClass","_tmpl$3","_tmpl$2","shortcut","_tmpl$4","MenuSeparator","_tmpl$5","_tmpl$6","_$ssrAttribute","Item","Separator","Button","splitProps","createContext","useContext","Show","ListBox","HeadlessListBox","ListBoxOption","HeadlessListBoxOption","ListBoxSizeContext","sizeStyles","sm","list","option","icon","label","description","md","lg","props","local","headlessProps","size","styles","customClass","class","getClassName","renderProps","base","sizeClass","stateClass","isDisabled","focusClass","isFocusVisible","filter","Boolean","join","defaultEmptyState","_$ssr","_tmpl$","_$createComponent","Provider","value","children","_tmpl$4","_$escape","when","_tmpl$2","_$mergeProps","renderEmptyState","_tmpl$3","sizeStyle","colorClass","isSelected","isFocused","isHovered","_tmpl$6","CheckIcon","_tmpl$5","_tmpl$7","_$ssrAttribute","Option","splitProps","createContext","useContext","Tabs","HeadlessTabs","TabList","HeadlessTabList","Tab","HeadlessTab","TabPanel","HeadlessTabPanel","TabsSizeContext","size","variant","sizeStyles","sm","tab","tabList","panel","md","lg","variantStyles","underline","base","default","selected","disabled","pill","boxed","props","local","headlessProps","customClass","class","getClassName","renderProps","orientationClass","orientation","disabledClass","isDisabled","filter","Boolean","join","_$createComponent","Provider","value","children","_$mergeProps","ctx","sizeClass","variantClass","focusClass","isFocusVisible","variantBase","stateClass","isSelected","pressedClass","isPressed","cursorClass","List","Panel","splitProps","createContext","useContext","Breadcrumbs","HeadlessBreadcrumbs","BreadcrumbItem","HeadlessBreadcrumbItem","BreadcrumbsSizeContext","size","variant","showSeparator","sizeStyles","sm","text","icon","gap","md","lg","variantStyles","default","item","current","separator","subtle","props","local","headlessProps","customClass","class","getClassName","renderProps","base","sizeClass","disabledClass","isDisabled","filter","Boolean","join","_$createComponent","Provider","value","children","_$mergeProps","ctx","vStyles","stateClass","isCurrent","cursorClass","transitionClass","focusClass","isFocusVisible","separatorClass","renderChildren","ChevronIcon","_$ssr","_tmpl$","_$ssrAttribute","_$escape","Item","splitProps","mergeProps","solidMergeProps","Show","createNumberField","createFocusRing","createPress","createHover","sizeStyles","sm","input","label","description","button","buttonGap","md","lg","PlusIcon","props","_$ssr","_tmpl$","_$ssrAttribute","_$escape","class","MinusIcon","_tmpl$2","NumberField","defaultProps","size","variant","merged","solidMergeProps","local","stateProps","ariaProps","splitProps","inputRef","state","createNumberFieldState","value","defaultValue","onChange","minValue","maxValue","step","locale","formatOptions","isDisabled","isReadOnly","numberFieldAria","createNumberField","isRequired","isInvalid","errorMessage","id","autoFocus","name","isFocused","isFocusVisible","focusProps","createFocusRing","isPressed","incrementPressed","pressProps","incrementPressProps","createPress","canIncrement","onPress","increment","focus","isHovered","incrementHovered","hoverProps","incrementHoverProps","createHover","decrementPressed","decrementPressProps","canDecrement","decrement","decrementHovered","decrementHoverProps","containerClasses","base","disabledClass","custom","filter","Boolean","join","groupClasses","gapClass","inputClasses","sizeClass","variantClass","stateClass","hoverClass","buttonClasses","isIncrement","labelClasses","descriptionClasses","errorClasses","cleanInputProps","ref","_ref","rest","inputProps","cleanFocusProps","cleanGroupProps","groupProps","cleanDecrementProps","decrementButtonProps","cleanIncrementProps","incrementButtonProps","cleanDecrementPressProps","cleanDecrementHoverProps","cleanIncrementPressProps","cleanIncrementHoverProps","_$ssrElement","_$mergeProps","undefined","_$createComponent","Show","when","children","labelProps","_tmpl$3","_tmpl$4","hideStepper","descriptionProps","errorMessageProps","splitProps","mergeProps","solidMergeProps","Show","createSearchField","createFocusRing","createPress","createHover","sizeStyles","sm","container","input","label","description","icon","clearButton","md","lg","SearchIcon","props","_$ssr","_tmpl$","_$ssrAttribute","_$escape","class","ClearIcon","_tmpl$2","SearchField","defaultProps","size","variant","merged","solidMergeProps","local","stateProps","ariaProps","splitProps","inputRef","state","createSearchFieldState","value","defaultValue","onChange","searchFieldAria","createSearchField","isDisabled","isReadOnly","isRequired","isInvalid","errorMessage","placeholder","name","autoFocus","autoComplete","maxLength","minLength","pattern","onSubmit","onClear","isFocused","isFocusVisible","focusProps","createFocusRing","isHovered","hoverProps","createHover","isPressed","clearPressed","pressProps","clearPressProps","createPress","onPress","clearButtonProps","onClick","clearHovered","clearHoverProps","containerClasses","base","disabledClass","custom","filter","Boolean","join","inputWrapperClasses","sizeClass","inputClasses","paddingClass","hideSearchIcon","variantClass","stateClass","hoverClass","searchIconClasses","focusedClass","clearButtonClasses","labelClasses","descriptionClasses","errorClasses","cleanInputProps","ref","_ref","rest","inputProps","cleanFocusProps","cleanHoverProps","cleanLabelProps","labelProps","cleanClearPressProps","cleanClearHoverProps","isEmpty","_tmpl$4","undefined","_$createComponent","Show","when","children","_$ssrElement","_$mergeProps","_tmpl$3","type","tabIndex","disabled","descriptionProps","errorMessageProps","splitProps","mergeProps","solidMergeProps","Show","createSlider","createFocusRing","createHover","sizeStyles","sm","track","thumb","label","output","md","lg","Slider","props","defaultProps","size","variant","minValue","maxValue","step","orientation","showOutput","merged","solidMergeProps","local","stateProps","ariaProps","splitProps","trackRef","state","createSliderState","value","defaultValue","onChange","onChangeEnd","locale","formatOptions","isDisabled","sliderAria","createSlider","isFocused","isFocusVisible","focusProps","createFocusRing","isHovered","hoverProps","createHover","containerClasses","base","disabledClass","custom","class","filter","Boolean","join","labelRowClasses","trackContainerClasses","trackClasses","sizeClass","fillClasses","variantClass","thumbClasses","stateClass","isDragging","focusClass","labelClasses","outputClasses","minMaxClasses","cleanGroupProps","ref","_ref","rest","groupProps","cleanTrackProps","style","_style","trackProps","cleanThumbProps","thumbStyle","thumbProps","cleanFocusProps","cleanHoverProps","cleanOutputProps","outputProps","thumbData","percent","getValuePercent","_$ssrElement","_$mergeProps","undefined","_$escape","_$createComponent","Show","when","children","_$ssr","_tmpl$","_$ssrAttribute","labelProps","getFormattedValue","_tmpl$2","_$ssrStyleProperty","left","transform","showMinMax","_tmpl$3","inputProps","splitProps","createContext","useContext","Show","ComboBox","HeadlessComboBox","ComboBoxInput","HeadlessComboBoxInput","ComboBoxButton","HeadlessComboBoxButton","ComboBoxListBox","HeadlessComboBoxListBox","ComboBoxOption","HeadlessComboBoxOption","defaultContainsFilter","ComboBoxSizeContext","sizeStyles","sm","wrapper","input","button","label","option","icon","md","lg","props","local","headlessProps","size","customClass","class","getClassName","renderProps","base","disabledClass","isDisabled","filter","Boolean","join","_$createComponent","Provider","value","children","_$mergeProps","when","_$ssr","_tmpl$","_$escape","description","isInvalid","_tmpl$2","errorMessage","_tmpl$3","ComboBoxInputGroup","styles","_tmpl$4","sizeClass","colorClass","isOpen","isHovered","focusClass","isFocusVisible","sizeStyle","ChevronIcon","_renderProps","isSelected","isFocused","iconPadding","CheckIcon","_tmpl$5","_tmpl$6","_$ssrAttribute","_tmpl$7","InputGroup","Input","Button","ListBox","Option","splitProps","For","Show","Toast","HeadlessToast","ToastRegion","HeadlessToastRegion","ToastProvider","HeadlessToastProvider","ToastContext","ToastCloseButton","HeadlessToastCloseButton","globalToastQueue","addToast","headlessAddToast","useToastContext","regionStyles","join","toastBaseStyles","variantStyles","info","success","warning","error","neutral","iconStyles","closeButtonStyles","InfoIcon","_$ssr","_tmpl$","SuccessIcon","_tmpl$2","WarningIcon","_tmpl$3","ErrorIcon","_tmpl$4","CloseIcon","_tmpl$5","getVariantIcon","variant","_$createComponent","props","local","rest","_$mergeProps","placement","_renderProps","class","filter","Boolean","children","regionProps","each","visibleToasts","toast","content","type","_tmpl$6","_$escape","_tmpl$0","when","title","_tmpl$7","description","_tmpl$8","action","_tmpl$9","label","options","toastSuccess","message","timeout","toastError","toastWarning","toastInfo","splitProps","createContext","useContext","Show","Disclosure","HeadlessDisclosure","DisclosureGroup","HeadlessDisclosureGroup","DisclosureTrigger","HeadlessDisclosureTrigger","DisclosurePanel","HeadlessDisclosurePanel","DisclosureSizeContext","size","variant","sizeStyles","sm","trigger","panel","icon","gap","md","lg","variantStyles","default","container","base","disabled","bordered","filled","ghost","props","local","headlessProps","customClass","class","getClassName","_renderProps","gapClass","filter","Boolean","join","_$createComponent","Provider","value","children","_$mergeProps","parentCtx","variantClass","ctx","when","hideIcon","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_$ssrStyleProperty","sizeClass","Trigger","Panel","Item","splitProps","Show","createMemo","createMeter","sizeStyles","sm","track","text","md","lg","variantStyles","primary","accent","success","warning","danger","info","clamp","value","min","max","Math","Meter","props","local","ariaProps","size","variant","showValueLabel","meterAria","minValue","maxValue","valueLabel","label","percentage","clampedValue","valueText","meterProps","sizeConfig","_$ssrElement","_$mergeProps","class","_$escape","_$createComponent","when","children","_$ssr","_tmpl$3","_tmpl$","_tmpl$2","_tmpl$4","_$ssrStyleProperty","splitProps","Show","TagList","HeadlessTagList","Tag","HeadlessTag","sizeStyles","sm","tag","removeButton","label","md","lg","variantStyles","default","selected","disabled","outline","solid","TagGroup","props","local","size","variant","sizeConfig","variantConfig","getKey","item","id","undefined","key","String","_$ssr","_tmpl$2","_$escape","class","_$createComponent","when","children","_tmpl$","items","onRemove","selectionMode","selectedKeys","onSelectionChange","disabledKeys","renderEmptyState","_tmpl$3","isSelected","isDisabled","base","variantClass","disabledClass","trim","renderProps","_tmpl$4","allowsRemoving","_tmpl$5","splitProps","Calendar","HeadlessCalendar","CalendarHeading","CalendarButton","CalendarGrid","CalendarCell","sizeStyles","sm","container","header","cell","button","md","lg","props","local","rest","size","sizeConfig","_$createComponent","_$mergeProps","class","children","_$ssr","_tmpl$3","_$escape","slot","_tmpl$","_tmpl$2","date","isSelected","isFocused","isDisabled","isOutsideMonth","isToday","isPressed","base","stateClass","focusClass","pressedClass","trim","splitProps","RangeCalendar","HeadlessRangeCalendar","RangeCalendarHeading","RangeCalendarButton","RangeCalendarGrid","RangeCalendarCell","sizeStyles","sm","container","header","cell","button","md","lg","props","local","rest","size","sizeConfig","_$createComponent","_$mergeProps","class","children","_$ssr","_tmpl$3","_$escape","slot","_tmpl$","_tmpl$2","date","isSelected","isSelectionStart","isSelectionEnd","isFocused","isDisabled","isOutsideMonth","isToday","isPressed","base","stateClass","roundedClass","focusClass","pressedClass","trim","splitProps","DateField","HeadlessDateField","DateInput","DateSegment","sizeStyles","sm","container","input","segment","label","md","lg","props","local","rest","size","sizeConfig","isInvalid","errorMessage","_$createComponent","_$mergeProps","class","children","_$ssr","_tmpl$","_$escape","isRequired","_tmpl$2","isFocused","isDisabled","base","borderClass","disabledClass","focusClass","trim","isPlaceholder","isEditable","stateClass","type","description","_tmpl$3","splitProps","TimeField","HeadlessTimeField","TimeInput","TimeSegment","sizeStyles","sm","container","input","segment","label","md","lg","props","local","rest","size","sizeConfig","isInvalid","errorMessage","_$createComponent","_$mergeProps","class","children","_$ssr","_tmpl$","_$escape","isRequired","_tmpl$2","isFocused","isDisabled","base","borderClass","disabledClass","focusClass","trim","isPlaceholder","isEditable","stateClass","type","description","_tmpl$3","splitProps","Show","DatePicker","HeadlessDatePicker","DatePickerButton","DateInput","DateSegment","useDatePickerContext","CalendarIcon","_$ssr","_tmpl$","sizeStyles","sm","container","input","segment","label","button","md","lg","DatePicker","props","local","rest","splitProps","size","sizeConfig","isInvalid","errorMessage","_$createComponent","HeadlessDatePicker","_$mergeProps","class","children","_tmpl$3","_$escape","isRequired","_tmpl$4","_tmpl$2","DateInput","isFocused","isDisabled","base","borderClass","disabledClass","focusClass","trim","DateSegment","isPlaceholder","isEditable","stateClass","type","DatePickerButton","isOpen","DatePickerPopup","description","_tmpl$5","context","useDatePickerContext","Show","when","overlayState","_tmpl$6","Calendar","value","calendarState","onChange","date","fieldState","setValue","close","minValue","visibleRange","start","_tmpl$7","splitProps","createContext","useContext","Show","Table","HeadlessTable","TableHeader","HeadlessTableHeader","TableColumn","HeadlessTableColumn","TableBody","HeadlessTableBody","TableRow","HeadlessTableRow","TableCell","HeadlessTableCell","TableSelectionCheckbox","HeadlessTableSelectionCheckbox","TableSelectAllCheckbox","HeadlessTableSelectAllCheckbox","TableSizeContext","size","variant","sizeStyles","sm","table","headerCell","cell","checkbox","md","lg","variantStyles","default","wrapper","header","row","rowHover","rowSelected","striped","bordered","alignStyles","left","center","right","props","local","headlessProps","styles","variantStyle","customClass","class","getClassName","renderProps","base","sizeClass","stateClass","isEmpty","focusClass","isFocusVisible","filter","Boolean","join","contextValue","_$createComponent","Provider","value","children","_$ssr","_tmpl$3","_$escape","when","title","_tmpl$","description","_tmpl$2","_$ssrAttribute","_$mergeProps","context","className","sizeStyle","alignClass","align","sortClass","isSortable","isHovered","getStyle","width","undefined","style","_tmpl$4","sortDirection","SortIcon","direction","defaultEmptyState","_tmpl$5","EmptyIcon","renderEmptyState","variantClass","isDisabled","isSelected","pressedClass","isPressed","checkboxClass","_tmpl$6","rowKey","_tmpl$7","_tmpl$8","_tmpl$9","_tmpl$0","_tmpl$1","Header","Column","Body","Row","Cell","SelectionCheckbox","SelectAllCheckbox","splitProps","createContext","useContext","Show","GridList","HeadlessGridList","GridListItem","HeadlessGridListItem","GridListSelectionCheckbox","HeadlessGridListSelectionCheckbox","GridListSizeContext","size","variant","layout","sizeStyles","sm","list","item","icon","image","label","description","checkbox","md","lg","variantStyles","default","itemHover","itemSelected","cards","bordered","props","local","headlessProps","styles","variantStyle","customClass","class","getClassName","renderProps","base","sizeClass","variantClass","layoutClass","columns","undefined","stateClass","isDisabled","focusClass","isFocusVisible","filter","Boolean","join","defaultEmptyState","_$ssr","_tmpl$","_$escape","_$createComponent","EmptyIcon","contextValue","Provider","value","children","_tmpl$4","when","_tmpl$2","_$mergeProps","renderEmptyState","_tmpl$3","context","sizeStyle","isSelected","isHovered","textClass","pressedClass","isPressed","_tmpl$5","_$ssrAttribute","imageAlt","_tmpl$6","CheckIcon","_tmpl$7","className","_tmpl$8","itemKey","_tmpl$9","_tmpl$0","Item","SelectionCheckbox","splitProps","createContext","useContext","Show","Tree","HeadlessTree","TreeItem","HeadlessTreeItem","TreeExpandButton","HeadlessTreeExpandButton","TreeSelectionCheckbox","HeadlessTreeSelectionCheckbox","TreeSizeContext","size","variant","sizeStyles","sm","tree","item","indent","icon","expandButton","label","description","checkbox","md","lg","variantStyles","default","itemHover","itemSelected","bordered","quiet","props","local","headlessProps","styles","variantStyle","customClass","class","getClassName","renderProps","base","sizeClass","variantClass","stateClass","isDisabled","focusClass","isFocusVisible","filter","Boolean","join","defaultEmptyState","_$ssr","_tmpl$","_$escape","_$createComponent","EmptyTreeIcon","contextValue","Provider","value","children","_tmpl$4","when","_tmpl$2","_$mergeProps","renderEmptyState","_tmpl$3","context","sizeStyle","isSelected","isHovered","textClass","pressedClass","isPressed","getStyle","level","style","_tmpl$5","isExpandable","FolderIcon","isOpen","isExpanded","FileIcon","_tmpl$6","CheckIcon","className","ChevronIcon","_tmpl$7","_$ssrAttribute","itemKey","_tmpl$8","_tmpl$9","_tmpl$0","_tmpl$1","_tmpl$10","_tmpl$11","_tmpl$12","Item","ExpandButton","SelectionCheckbox","splitProps","createContext","useContext","Show","ColorSlider","HeadlessColorSlider","ColorSliderTrack","HeadlessColorSliderTrack","ColorSliderThumb","HeadlessColorSliderThumb","ColorArea","HeadlessColorArea","ColorAreaGradient","HeadlessColorAreaGradient","ColorAreaThumb","HeadlessColorAreaThumb","ColorWheel","HeadlessColorWheel","ColorWheelTrack","HeadlessColorWheelTrack","ColorWheelThumb","HeadlessColorWheelThumb","ColorField","HeadlessColorField","ColorFieldInput","HeadlessColorFieldInput","ColorSwatch","HeadlessColorSwatch","ColorSizeContext","size","sizeStyles","sm","slider","track","thumb","label","area","container","wheel","field","input","swatch","md","lg","props","local","headlessProps","styles","customClass","class","getClassName","renderProps","base","stateClass","isDisabled","filter","Boolean","join","contextValue","_$createComponent","Provider","value","children","_$mergeProps","_$ssr","_tmpl$2","_$escape","when","_tmpl$","showValue","Math","round","context","dragClass","isDragging","focusClass","isFocusVisible","disabledClass","className","isInvalid","errorMessage","description","_tmpl$3","_tmpl$4","borderClass","_renderProps","selectableClass","isSelectable","selectedClass","isSelected","handleClick","onClick","_tmpl$5","ColorPicker","_tmpl$6","defaultValue","onChange","xChannel","yChannel","showSliders","channel","showInput","color","Track","Thumb","Gradient","Input","splitProps","Show","Landmark","HeadlessLandmark","useLandmarkController","roleLabels","main","navigation","search","banner","contentinfo","complementary","form","region","roleColors","props","local","headlessProps","customClass","class","role","getClassName","base","debugClass","showLabel","filter","Boolean","join","_$createComponent","_$mergeProps","children","when","_$ssr","_tmpl$2","_$escape","_tmpl$","SkipLink","className","_tmpl$3","_$ssrAttribute","href","LandmarkNavigator","controller","isVisible","_tmpl$4","Show","variantStyles","primary","secondary","accent","outline","Chip","props","variant","renderIcon","icon","_$ssr","_tmpl$2","_$escape","class","_$createComponent","when","children","_tmpl$","text","Show","NavHeader","props","_$ssr","_tmpl$3","_$escape","class","_$createComponent","when","logo","fallback","logoText","children","_tmpl$4","_tmpl$","_$ssrAttribute","logoAlt","menuIcon","_tmpl$2","Logo","props","sizeClass","size","firstWord","secondWord","_$ssr","_tmpl$","_$escape","inverted","class","_$ssrAttribute","undefined","Header","props","showTextLogo","logo","undefined","logoProps","_$ssr","_tmpl$","_$escape","class","logoImage","_$createComponent","Logo","_$mergeProps","size","children","Show","For","NavItem","props","_$ssr","_tmpl$","_$escape","class","title","children","NavLink","activeStyles","inactiveStyles","_tmpl$2","_$ssrAttribute","href","active","NavSection","_tmpl$3","_$createComponent","when","links","each","link","_tmpl$4","label","LateralNav","bgColor","transparent","_tmpl$5","Show","eventMessages","follow","left","right","_$ssr","_tmpl$","_$escape","like","comment","event","custom","TimelineItem","props","type","leftName","leftUser","name","rightName","rightUser","renderIcon","icon","renderMessage","message","_tmpl$2","class","_$createComponent","Show","when","children","Avatar","src","avatar","alt","fallback","Show","For","ConversationPreview","props","_$ssr","_tmpl$4","_$escape","class","_$createComponent","Avatar","src","user","avatar","alt","name","online","size","Show","when","timestamp","children","_tmpl$","lastMessage","_tmpl$2","unreadCount","_tmpl$3","ConversationBubble","isUser","sender","_tmpl$6","content","_tmpl$5","Conversation","_tmpl$7","For","each","messages","message","Show","ProfileCard","props","formatNumber","num","toFixed","toString","_$ssr","_tmpl$5","_$escape","class","_$createComponent","Avatar","src","avatar","alt","username","size","Show","when","bio","children","_tmpl$","followers","undefined","_tmpl$2","following","_tmpl$3","actions","_tmpl$4","Show","For","EventCard","props","displayedAttendees","attendees","slice","remainingCount","total","attendeeCount","length","displayed","_$ssr","_tmpl$9","_$escape","class","_$createComponent","Show","when","decorationImage","children","_tmpl$","_$ssrAttribute","image","_tmpl$2","title","date","author","_tmpl$5","_tmpl$3","_tmpl$4","_tmpl$7","For","each","attendee","Avatar","src","avatar","alt","name","size","_tmpl$6","actions","_tmpl$8","EventListItem","_tmpl$10","_tmpl$0","subtitle","_tmpl$1","Show","For","CalendarCard","props","displayedFollowers","followers","slice","remainingCount","total","followerCount","length","displayed","_$ssr","_tmpl$5","_$escape","class","_$createComponent","Show","when","image","children","_tmpl$","_$ssrAttribute","title","tags","_tmpl$2","For","each","tag","Chip","text","variant","_tmpl$4","follower","index","_tmpl$6","name","_tmpl$3","ProjectCard","props","size","inactive","cardContent","_$ssr","_tmpl$","_$escape","name","_tmpl$2","_$ssrAttribute","imageSrc","imageAlt","cardClasses","class","href","_tmpl$3","_tmpl$4","splitProps","PageLayout","props","local","rest","classes","base","header","withHeader","custom","class","filter","Boolean","join","_$ssrElement","_$mergeProps","_$escape","children"]}
|