@proyecto-viviana/ui 0.1.3 → 0.1.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/alert/index.d.ts +12 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/avatar/index.d.ts +17 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/badge/index.d.ts +12 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/button/Button.d.ts +19 -0
- package/dist/button/Button.d.ts.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/types.d.ts +23 -0
- package/dist/button/types.d.ts.map +1 -0
- package/dist/checkbox/index.d.ts +43 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/custom/calendar-card/index.d.ts +12 -0
- package/dist/custom/calendar-card/index.d.ts.map +1 -0
- package/dist/custom/chip/index.d.ts +11 -0
- package/dist/custom/chip/index.d.ts.map +1 -0
- package/dist/custom/conversation/index.d.ts +32 -0
- package/dist/custom/conversation/index.d.ts.map +1 -0
- package/dist/custom/event-card/index.d.ts +26 -0
- package/dist/custom/event-card/index.d.ts.map +1 -0
- package/dist/custom/lateral-nav/index.d.ts +32 -0
- package/dist/custom/lateral-nav/index.d.ts.map +1 -0
- package/dist/custom/logo/index.d.ts +26 -0
- package/dist/custom/logo/index.d.ts.map +1 -0
- package/dist/custom/nav-header/index.d.ts +12 -0
- package/dist/custom/nav-header/index.d.ts.map +1 -0
- package/dist/custom/page-layout/index.d.ts +11 -0
- package/dist/custom/page-layout/index.d.ts.map +1 -0
- package/dist/custom/profile-card/index.d.ts +12 -0
- package/dist/custom/profile-card/index.d.ts.map +1 -0
- package/dist/custom/project-card/index.d.ts +24 -0
- package/dist/custom/project-card/index.d.ts.map +1 -0
- package/dist/custom/timeline-item/index.d.ts +18 -0
- package/dist/custom/timeline-item/index.d.ts.map +1 -0
- package/dist/dialog/index.d.ts +18 -0
- package/dist/dialog/index.d.ts.map +1 -0
- package/dist/icon/icons/GitHubIcon.d.ts +7 -0
- package/dist/icon/icons/GitHubIcon.d.ts.map +1 -0
- package/dist/icon/index.d.ts +28 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/index.d.ts +51 -649
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +924 -578
- package/dist/index.js.map +1 -0
- package/dist/index.ssr.js +1657 -0
- package/dist/index.ssr.js.map +1 -0
- package/dist/link/index.d.ts +39 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/progress-bar/index.d.ts +49 -0
- package/dist/progress-bar/index.d.ts.map +1 -0
- package/dist/radio/index.d.ts +43 -0
- package/dist/radio/index.d.ts.map +1 -0
- package/dist/separator/index.d.ts +42 -0
- package/dist/separator/index.d.ts.map +1 -0
- package/dist/switch/ToggleSwitch.d.ts +28 -0
- package/dist/switch/ToggleSwitch.d.ts.map +1 -0
- package/dist/switch/index.d.ts +26 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/test-utils/index.d.ts +44 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/textfield/index.d.ts +31 -0
- package/dist/textfield/index.d.ts.map +1 -0
- package/dist/tooltip/index.d.ts +17 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/package.json +57 -58
- package/dist/index.jsx +0 -1533
|
@@ -0,0 +1 @@
|
|
|
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/index.tsx","../src/custom/chip/index.tsx","../src/icon/icons/GitHubIcon.tsx","../src/icon/index.tsx","../src/tooltip/index.tsx","../src/textfield/index.tsx","../../solid-stately/src/utils/reactivity.ts","../../solid-stately/src/toggle/createToggleState.ts","../../solid-stately/src/textfield/createTextFieldState.ts","../../solid-stately/src/checkbox/createCheckboxGroupState.ts","../../solid-stately/src/ssr/index.ts","../../solid-stately/src/radio/createRadioGroupState.ts","../src/link/index.tsx","../src/progress-bar/index.tsx","../src/separator/index.tsx","../src/custom/nav-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/logo/index.tsx","../src/custom/project-card/index.tsx","../src/custom/page-layout/index.tsx"],"sourcesContent":["/**\r\n * Button component for proyecto-viviana-ui\r\n *\r\n * A styled button component built on top of solidaria-components.\r\n * This component only handles styling - all behavior and accessibility\r\n * is provided by the headless Button from solidaria-components.\r\n */\r\n\r\nimport { type JSX, splitProps, mergeProps as solidMergeProps } from 'solid-js';\r\nimport { Button as HeadlessButton, type ButtonRenderProps } from '@proyecto-viviana/solidaria-components';\r\nimport type { ButtonProps } from './types';\r\n\r\n/**\r\n * Buttons allow users to perform an action or to navigate to another page.\r\n * They have multiple styles for various needs, and are ideal for calling attention to\r\n * where a user needs to do something in order to move forward in a flow.\r\n *\r\n * Built on solidaria-components Button for full accessibility support.\r\n * Styles are defined in components.css using the vui-button class system.\r\n */\r\nexport function Button(props: ButtonProps): JSX.Element {\r\n const defaultProps: Partial<ButtonProps> = {\r\n variant: 'primary',\r\n buttonStyle: 'fill',\r\n size: 'md',\r\n };\r\n\r\n const merged = solidMergeProps(defaultProps, props);\r\n\r\n const [local, headlessProps] = splitProps(merged, [\r\n 'children',\r\n 'variant',\r\n 'buttonStyle',\r\n 'size',\r\n 'fullWidth',\r\n 'staticColor',\r\n 'class',\r\n ]);\r\n\r\n // Generate class based on render props\r\n const getClassName = (renderProps: ButtonRenderProps): string => {\r\n const classList = [\r\n 'vui-button',\r\n `vui-button--${local.buttonStyle}`,\r\n `vui-button--${local.variant}`,\r\n `vui-button--${local.size}`,\r\n ];\r\n\r\n if (renderProps.isPressed) {\r\n classList.push('is-pressed');\r\n }\r\n\r\n if (local.fullWidth) {\r\n classList.push('vui-button--full-width');\r\n }\r\n\r\n if (local.class) {\r\n classList.push(local.class);\r\n }\r\n\r\n return classList.join(' ');\r\n };\r\n\r\n return (\r\n <HeadlessButton\r\n {...headlessProps}\r\n class={getClassName}\r\n data-variant={local.variant}\r\n data-style={local.buttonStyle}\r\n data-static-color={local.staticColor || undefined}\r\n >\r\n {local.children}\r\n </HeadlessButton>\r\n );\r\n}\r\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 'children',\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 {local.children && <span class=\"text-primary-200\">{local.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={local.children}>\n <span class={labelClasses()}>{local.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 'children',\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 {local.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 *\n * IMPORTANT: Due to SolidJS's JSX evaluation order, we cannot wrap the headless\n * components in a traditional way. Instead, we re-export them and provide\n * styling through the class prop functions.\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 'children',\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 // Create render children function\n const renderChildren = (renderProps: RadioGroupRenderProps) => (\n <>\n <Show when={local.label}>\n <span class=\"text-primary-200 font-medium mb-1\">{local.label}</span>\n </Show>\n {typeof local.children === 'function' ? local.children(renderProps) : local.children}\n <Show when={local.description && !renderProps.isInvalid}>\n <span class=\"text-primary-400 text-sm\">{local.description}</span>\n </Show>\n <Show when={local.errorMessage && renderProps.isInvalid}>\n <span class=\"text-danger-400 text-sm\">{local.errorMessage}</span>\n </Show>\n </>\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 children={renderChildren as any}\n />\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 *\n * Built on solidaria-components Radio for full accessibility support.\n */\nexport function Radio(props: RadioProps): JSX.Element {\n const sizeFromContext = useContext(RadioSizeContext)\n const size = () => sizeStyles[sizeFromContext]\n const customClass = props.class ?? ''\n\n // Generate class based on render props\n const getClassName = (renderProps: RadioRenderProps): string => {\n const base = 'inline-flex items-center gap-2 cursor-pointer'\n const disabledClass = renderProps.isDisabled ? 'cursor-not-allowed opacity-50' : ''\n return [base, disabledClass, customClass].filter(Boolean).join(' ')\n }\n\n // Extract props to pass to headless\n const { class: _, children, ...headlessProps } = props\n\n return (\n <HeadlessRadio\n {...headlessProps}\n class={getClassName}\n >\n {(renderProps: RadioRenderProps) => {\n const circleClasses = () => {\n const base = 'relative flex items-center justify-center rounded-full border-2 transition-all duration-200'\n const sizeClass = size().circle\n\n let colorClass: string\n if (renderProps.isDisabled) {\n colorClass = 'border-bg-300 bg-bg-200'\n } else if (renderProps.isSelected) {\n colorClass = 'border-accent bg-transparent'\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 dotClasses = () => {\n const base = 'rounded-full bg-accent transition-all duration-200'\n const sizeClass = size().dot\n const visibilityClass = renderProps.isSelected ? 'scale-100 opacity-100' : 'scale-0 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 // Resolve children - could be a function or JSX element\n const resolvedChildren = typeof children === 'function' ? children(renderProps) : children\n\n return (\n <>\n <span class={circleClasses()}>\n <span class={dotClasses()} />\n </span>\n <Show when={resolvedChildren}>\n <span class={labelClasses()}>{resolvedChildren}</span>\n </Show>\n </>\n )\n }}\n </HeadlessRadio>\n )\n}\n","import type { JSX } from 'solid-js'\nimport { Show } from 'solid-js'\nimport { Button } from '../button'\nimport { Chip } from '../custom/chip'\n\nexport interface DialogProps {\n title: string\n subtitle?: string\n children: JSX.Element\n tags?: string[]\n primaryAction?: {\n label: string\n onClick: () => void\n }\n secondaryAction?: {\n label: string\n onClick: () => void\n }\n class?: string\n}\n\nexport function Dialog(props: DialogProps) {\n return (\n <div class={`flex flex-col w-full max-w-[540px] ${props.class ?? ''}`}>\n <span class=\"relative left-8 top-4 bg-gradient-to-b from-primary-100 to-primary-500 bg-clip-text text-4xl font-extrabold text-transparent\">\n {props.title}\n </span>\n <div class=\"flex h-[50px] flex-col justify-end rounded-t-[26px] bg-primary-800\">\n <div class=\"flex h-[40px] flex-col justify-end rounded-t-[30px] bg-primary-600\">\n <div class=\"flex h-[20px] items-center justify-end rounded-t-[100px] bg-primary-700 pr-4\">\n <Show when={props.subtitle}>\n <span class=\"text-base font-normal text-primary-300\">\n {props.subtitle}\n </span>\n </Show>\n </div>\n </div>\n </div>\n <div class=\"mt-1 flex min-h-[200px] flex-col rounded-b-[26px] rounded-t-lg border-b border-accent-500 bg-bg-300\">\n <div class=\"flex flex-1 flex-col p-4\">\n <div class=\"text-lg text-gray-100\">{props.children}</div>\n <Show when={props.primaryAction || props.secondaryAction}>\n <div class=\"flex flex-1 flex-row items-end justify-center gap-5 py-5\">\n <Show when={props.secondaryAction}>\n <Button variant=\"primary\" buttonStyle=\"outline\" onPress={props.secondaryAction!.onClick}>\n {props.secondaryAction!.label}\n </Button>\n </Show>\n <Show when={props.primaryAction}>\n <Button variant=\"primary\" onPress={props.primaryAction!.onClick}>\n {props.primaryAction!.label}\n </Button>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n <Show when={props.tags && props.tags.length > 0}>\n <div class=\"relative bottom-4 right-4 w-full\">\n <div class=\"flex flex-row justify-end gap-2 pr-4\">\n {props.tags!.map((tag) => (\n <Chip variant=\"primary\" text={tag} />\n ))}\n </div>\n </div>\n </Show>\n </div>\n )\n}\n","import type { JSX } 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 icon?: 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 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 {props.icon && <span class=\"mr-1.5\">{props.icon}</span>}\n <span>{props.text}</span>\n </button>\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","import type { JSX } from 'solid-js'\n\nexport interface TooltipProps {\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 * Tooltip component that shows a label on hover.\n * Uses CSS-only hover effect for performance.\n */\nexport function Tooltip(props: TooltipProps): 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 * 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 * Toggle state for Solid Stately\n *\n * Provides state management for toggle components like checkboxes and switches.\n *\n * This is a 1:1 port of @react-stately/toggle's useToggleState.\n */\n\nimport { createSignal, Accessor } from 'solid-js';\nimport { type MaybeAccessor, access } from '../utils';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface ToggleStateOptions {\n /** Whether the element should be selected (controlled). */\n isSelected?: boolean;\n /** Whether the element should be selected by default (uncontrolled). */\n defaultSelected?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange?: (isSelected: boolean) => void;\n /** Whether the element is read only. */\n isReadOnly?: boolean;\n}\n\nexport interface ToggleState {\n /** Whether the toggle is selected. */\n readonly isSelected: Accessor<boolean>;\n /** Whether the toggle is selected by default. */\n readonly defaultSelected: boolean;\n /** Updates selection state. */\n setSelected(isSelected: boolean): void;\n /** Toggle the selection state. */\n toggle(): void;\n}\n\n// ============================================\n// IMPLEMENTATION\n// ============================================\n\n/**\n * Provides state management for toggle components like checkboxes and switches.\n */\nexport function createToggleState(props: MaybeAccessor<ToggleStateOptions> = {}): ToggleState {\n const getProps = () => access(props);\n\n // Get initial values\n const initialProps = getProps();\n const initialSelected = initialProps.isSelected ?? initialProps.defaultSelected ?? false;\n\n // Create internal signal for uncontrolled mode\n const [internalSelected, setInternalSelected] = createSignal(initialSelected);\n\n // Determine if controlled\n const isControlled = () => getProps().isSelected !== undefined;\n\n // Get current selection state\n const isSelected: Accessor<boolean> = () => {\n const p = getProps();\n return isControlled() ? (p.isSelected ?? false) : internalSelected();\n };\n\n // Update selection state\n function setSelected(value: boolean): void {\n const p = getProps();\n if (p.isReadOnly) {\n return;\n }\n\n if (!isControlled()) {\n setInternalSelected(value);\n }\n\n p.onChange?.(value);\n }\n\n // Toggle selection state\n function toggle(): void {\n const p = getProps();\n if (p.isReadOnly) {\n return;\n }\n\n setSelected(!isSelected());\n }\n\n return {\n isSelected,\n defaultSelected: initialProps.defaultSelected ?? initialSelected,\n setSelected,\n toggle,\n };\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 * Checkbox group state for Solid Stately\n *\n * Provides state management for a checkbox group component.\n * Provides a name for the group, and manages selection and focus state.\n *\n * This is a 1:1 port of @react-stately/checkbox's useCheckboxGroupState.\n */\n\nimport { createSignal, Accessor } from 'solid-js';\nimport { type MaybeAccessor, access } from '../utils';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface CheckboxGroupProps {\n /** The current selected values (controlled). */\n value?: string[];\n /** The default selected values (uncontrolled). */\n defaultValue?: string[];\n /** Handler that is called when the value changes. */\n onChange?: (value: string[]) => void;\n /** Whether the checkbox group is disabled. */\n isDisabled?: boolean;\n /** Whether the checkbox group is read only. */\n isReadOnly?: boolean;\n /** Whether the checkbox group is required. */\n isRequired?: boolean;\n /** Whether the checkbox group is invalid. */\n isInvalid?: boolean;\n /** The name of the checkbox group, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the checkbox group with. */\n form?: string;\n /** The label for the checkbox group. */\n label?: string;\n /** Handler that is called when the checkbox group receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the checkbox group loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the checkbox group's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n}\n\nexport interface CheckboxGroupState {\n /** Current selected values. */\n readonly value: Accessor<readonly string[]>;\n /** Default selected values. */\n readonly defaultValue: readonly string[];\n /** Whether the checkbox group is disabled. */\n readonly isDisabled: boolean;\n /** Whether the checkbox group is read only. */\n readonly isReadOnly: boolean;\n /** Whether the checkbox group is invalid. */\n readonly isInvalid: boolean;\n /**\n * Whether the checkboxes in the group are required.\n * This changes to false once at least one item is selected.\n */\n readonly isRequired: Accessor<boolean>;\n /** Returns whether the given value is selected. */\n isSelected(value: string): boolean;\n /** Sets the selected values. */\n setValue(value: string[]): void;\n /** Adds a value to the set of selected values. */\n addValue(value: string): void;\n /** Removes a value from the set of selected values. */\n removeValue(value: string): void;\n /** Toggles a value in the set of selected values. */\n toggleValue(value: string): void;\n}\n\n// ============================================\n// IMPLEMENTATION\n// ============================================\n\n/**\n * Provides state management for a checkbox group component.\n * Provides a name for the group, and manages selection and focus state.\n */\nexport function createCheckboxGroupState(\n props: MaybeAccessor<CheckboxGroupProps> = {}\n): CheckboxGroupState {\n const getProps = () => access(props);\n\n // Get initial values\n const initialProps = getProps();\n const initialValue = initialProps.value ?? initialProps.defaultValue ?? [];\n\n // Create internal signal for uncontrolled mode\n const [internalValue, setInternalValue] = createSignal<readonly string[]>(initialValue);\n\n // Determine if controlled\n const isControlled = () => getProps().value !== undefined;\n\n // Get current value\n const value: Accessor<readonly string[]> = () => {\n const p = getProps();\n return isControlled() ? (p.value ?? []) : internalValue();\n };\n\n // Check if required (true if isRequired and no items selected)\n const isRequired: Accessor<boolean> = () => {\n const p = getProps();\n return !!p.isRequired && value().length === 0;\n };\n\n // Check if invalid\n const isInvalid = () => {\n return getProps().isInvalid ?? false;\n };\n\n // Set value\n function setValue(newValue: string[]): void {\n const p = getProps();\n if (p.isReadOnly || p.isDisabled) {\n return;\n }\n\n if (!isControlled()) {\n setInternalValue(newValue);\n }\n\n p.onChange?.(newValue);\n }\n\n // Check if value is selected\n function isSelected(checkValue: string): boolean {\n return value().includes(checkValue);\n }\n\n // Add value\n function addValue(addVal: string): void {\n const p = getProps();\n if (p.isReadOnly || p.isDisabled) {\n return;\n }\n\n const current = value();\n if (!current.includes(addVal)) {\n setValue([...current, addVal]);\n }\n }\n\n // Remove value\n function removeValue(removeVal: string): void {\n const p = getProps();\n if (p.isReadOnly || p.isDisabled) {\n return;\n }\n\n const current = value();\n if (current.includes(removeVal)) {\n setValue(current.filter((v) => v !== removeVal));\n }\n }\n\n // Toggle value\n function toggleValue(toggleVal: string): void {\n const p = getProps();\n if (p.isReadOnly || p.isDisabled) {\n return;\n }\n\n const current = value();\n if (current.includes(toggleVal)) {\n setValue(current.filter((v) => v !== toggleVal));\n } else {\n setValue([...current, toggleVal]);\n }\n }\n\n return {\n value,\n defaultValue: initialProps.defaultValue ?? initialValue,\n get isDisabled() {\n return getProps().isDisabled ?? false;\n },\n get isReadOnly() {\n return getProps().isReadOnly ?? false;\n },\n get isInvalid() {\n return isInvalid();\n },\n isRequired,\n isSelected,\n setValue,\n addValue,\n removeValue,\n toggleValue,\n };\n}\n","/**\n * SSR utilities for Solid Stately\n *\n * SolidJS has built-in SSR support with `isServer` and `createUniqueId()`.\n * These utilities provide a consistent API matching React-Stately's patterns.\n */\n\nimport { createUniqueId } from 'solid-js';\nimport { isServer } from 'solid-js/web';\n\n/**\n * Returns whether the component is currently being server side rendered.\n * Can be used to delay browser-specific rendering until after hydration.\n */\nexport function createIsSSR(): boolean {\n return isServer;\n}\n\n/**\n * Generate a unique ID that is stable across server and client.\n * Uses SolidJS's built-in createUniqueId which handles SSR correctly.\n *\n * @param defaultId - Optional default ID to use instead of generating one.\n */\nexport function createId(defaultId?: string): string {\n if (defaultId) {\n return defaultId;\n }\n return `solid-stately-${createUniqueId()}`;\n}\n\n/**\n * Check if we can use DOM APIs.\n * This is useful for code that needs to run only in the browser.\n */\nexport const canUseDOM = !isServer;\n","/**\n * Radio group state for Solid Stately\n *\n * Provides state management for a radio group component.\n * Provides a name for the group, and manages selection and focus state.\n *\n * This is a 1:1 port of @react-stately/radio's useRadioGroupState.\n */\n\nimport { createSignal, Accessor, untrack } from 'solid-js';\nimport { type MaybeAccessor, access } from '../utils';\nimport { createId } from '../ssr';\n\n// ============================================\n// TYPES\n// ============================================\n\nexport interface RadioGroupProps {\n /** The current selected value (controlled). */\n value?: string | null;\n /** The default selected value (uncontrolled). */\n defaultValue?: string | null;\n /** Handler that is called when the value changes. */\n onChange?: (value: string) => void;\n /** Whether the radio group is disabled. */\n isDisabled?: boolean;\n /** Whether the radio group is read only. */\n isReadOnly?: boolean;\n /** Whether the radio group is required. */\n isRequired?: boolean;\n /** Whether the radio group is invalid. */\n isInvalid?: boolean;\n /** The name of the radio group, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the radio group with. */\n form?: string;\n /** The label for the radio group. */\n label?: string;\n /** Orientation of the radio group. */\n orientation?: 'horizontal' | 'vertical';\n /** Handler that is called when the radio group receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n}\n\nexport interface RadioGroupState {\n /** The name for the group, used for native form submission. */\n readonly name: string;\n\n /** Whether the radio group is disabled. */\n readonly isDisabled: boolean;\n\n /** Whether the radio group is read only. */\n readonly isReadOnly: boolean;\n\n /** Whether the radio group is required. */\n readonly isRequired: boolean;\n\n /** Whether the radio group is invalid. */\n readonly isInvalid: boolean;\n\n /** The currently selected value. */\n readonly selectedValue: Accessor<string | null>;\n\n /** The default selected value. */\n readonly defaultSelectedValue: string | null;\n\n /** Sets the selected value. */\n setSelectedValue(value: string | null): void;\n\n /** The value of the last focused radio. */\n readonly lastFocusedValue: Accessor<string | null>;\n\n /** Sets the last focused value. */\n setLastFocusedValue(value: string | null): void;\n}\n\n// ============================================\n// INTERNAL: SolidJS-specific sync mechanism\n// ============================================\n\n/**\n * Internal WeakMap to store sync version accessors for each radio group state.\n * This is used by createRadio to trigger DOM sync when native radio behavior\n * causes the DOM checked state to desync from our reactive state.\n *\n * This is kept separate from RadioGroupState to maintain API parity with React-Stately.\n * @internal\n */\nexport const radioGroupSyncVersion: WeakMap<RadioGroupState, Accessor<number>> = new WeakMap();\n\n// ============================================\n// IMPLEMENTATION\n// ============================================\n\n/**\n * Provides state management for a radio group component.\n * Provides a name for the group, and manages selection and focus state.\n */\nexport function createRadioGroupState(\n props: MaybeAccessor<RadioGroupProps> = {}\n): RadioGroupState {\n const getProps = () => access(props);\n\n // Get initial props using untrack to avoid setting up dependencies\n // This ensures we capture the initial defaultValue without reactivity issues\n const initialProps = untrack(() => getProps());\n\n // Generate name - preserved for backward compatibility\n // React Aria now generates the name instead of stately\n const name = initialProps.name || `radio-group-${createId()}`;\n\n // Create internal signal for uncontrolled mode\n // Initialize with defaultValue only (not value, which is for controlled mode)\n const [internalValue, setInternalValue] = createSignal<string | null>(\n initialProps.defaultValue ?? null\n );\n const [lastFocusedValue, setLastFocusedValueInternal] = createSignal<string | null>(null);\n\n // SolidJS-specific: Version counter for triggering DOM sync across all radios\n // This handles the case where native radio behavior causes DOM state to desync\n // from our reactive state (e.g., clicking a radio unchecks siblings in the DOM)\n const [syncVersion, setSyncVersion] = createSignal(0);\n\n // Determine if controlled - must be reactive to handle dynamic props\n const isControlled = () => getProps().value !== undefined;\n\n // Get current value - reactive for both controlled and uncontrolled modes\n const selectedValue: Accessor<string | null> = () => {\n const p = getProps();\n // In controlled mode, always read from props.value reactively\n // In uncontrolled mode, read from internal signal\n if (p.value !== undefined) {\n return p.value ?? null;\n }\n return internalValue();\n };\n\n // Check if invalid\n const isInvalid = () => {\n return getProps().isInvalid ?? false;\n };\n\n // Set value\n function setSelectedValue(value: string | null): void {\n const p = getProps();\n if (p.isReadOnly || p.isDisabled) {\n return;\n }\n\n // Always increment syncVersion to trigger DOM sync across all radios\n // This is crucial for SolidJS because:\n // 1. Native radio behavior unchecks siblings when one is checked\n // 2. In controlled mode, isSelected() may not change even though DOM changed\n // 3. We need ALL radios to re-sync their checked state after any click\n setSyncVersion((v) => v + 1);\n\n if (!isControlled()) {\n setInternalValue(value);\n }\n\n if (value != null) {\n p.onChange?.(value);\n }\n }\n\n // Set last focused value\n function setLastFocusedValue(value: string | null): void {\n setLastFocusedValueInternal(value);\n }\n\n const state: RadioGroupState = {\n name,\n selectedValue,\n defaultSelectedValue: initialProps.defaultValue ?? null,\n setSelectedValue,\n lastFocusedValue,\n setLastFocusedValue,\n get isDisabled() {\n return getProps().isDisabled ?? false;\n },\n get isReadOnly() {\n return getProps().isReadOnly ?? false;\n },\n get isRequired() {\n return getProps().isRequired ?? false;\n },\n get isInvalid() {\n return isInvalid();\n },\n };\n\n // Store syncVersion in internal WeakMap (not part of public API)\n // This maintains API parity with React-Stately while supporting SolidJS's reactivity needs\n radioGroupSyncVersion.set(state, syncVersion);\n\n return state;\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 'children',\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 {local.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","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 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 icon?: JSX.Element\n leftUser?: {\n name: string\n avatar?: string\n }\n rightUser?: {\n name: string\n avatar?: string\n }\n message?: 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 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 {props.icon}\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 {props.message}\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 actions?: 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\">{props.actions}</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 actions?: 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\">{props.actions}</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 { 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 /** 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.class ?? \"\"}`}>\n <span class=\"vui-logo__first\">{firstWord()}</span>\n <span class=\"vui-logo__second\" data-text={secondWord()}>\n {secondWord()}\n </span>\n </span>\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}\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, ['children', 'class'])\n\n return (\n <div class={`vui-page ${local.class ?? ''}`} {...rest}>\n {local.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","renderChildren","_$createComponent","when","children","_$ssr","_tmpl$","_$escape","description","isInvalid","_tmpl$2","errorMessage","_tmpl$3","Provider","value","_$mergeProps","sizeFromContext","_","circleClasses","sizeClass","colorClass","isSelected","focusClass","isFocusVisible","cursorClass","dotClasses","visibilityClass","labelClasses","resolvedChildren","_tmpl$4","_$ssrAttribute","_tmpl$5","Show","variantStyles","primary","secondary","accent","outline","Chip","props","variant","_$ssr","_tmpl$","_$escape","class","icon","_tmpl$2","text","Dialog","props","_$ssr","_tmpl$4","_$escape","class","title","_$createComponent","Show","when","subtitle","children","_tmpl$","primaryAction","secondaryAction","_tmpl$2","Button","variant","buttonStyle","onPress","onClick","label","tags","length","_tmpl$3","map","tag","Chip","text","GitHubIcon","props","_$ssr","_tmpl$","_$ssrAttribute","_$escape","size","color","Icon","props","size","color","IconComponent","icon","_$ssr","_tmpl$","withShadow","_$escape","class","_tmpl$2","_$createComponent","Tooltip","props","position","_$ssr","_tmpl$","_$escape","class","children","label","splitProps","mergeProps","solidMergeProps","Show","createTextField","createFocusRing","createSignal","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","Show","NavHeader","props","_$ssr","_tmpl$3","_$escape","class","_$createComponent","when","logo","fallback","logoText","children","_tmpl$4","_tmpl$","_$ssrAttribute","logoAlt","menuIcon","_tmpl$2","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","_tmpl$2","class","_$createComponent","Show","when","children","Avatar","src","avatar","alt","icon","message","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","Logo","props","sizeClass","size","firstWord","secondWord","_$ssr","_tmpl$","_$escape","class","_$ssrAttribute","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","_$ssrElement","_$mergeProps","class","_$escape","children"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Link component for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* Styled link component built on top of solidaria-components.
|
|
5
|
+
*/
|
|
6
|
+
import { type JSX } from 'solid-js';
|
|
7
|
+
import { type LinkProps as HeadlessLinkProps } from '@proyecto-viviana/solidaria-components';
|
|
8
|
+
export type LinkVariant = 'primary' | 'secondary' | 'subtle';
|
|
9
|
+
export interface LinkProps extends Omit<HeadlessLinkProps, 'class' | 'style' | 'children'> {
|
|
10
|
+
/** The visual style of the link. @default 'primary' */
|
|
11
|
+
variant?: LinkVariant;
|
|
12
|
+
/** Whether the link is on its own vs inside a longer string of text. */
|
|
13
|
+
isStandalone?: boolean;
|
|
14
|
+
/** Whether the link should be displayed with a quiet style (no underline by default). */
|
|
15
|
+
isQuiet?: boolean;
|
|
16
|
+
/** Additional CSS class name. */
|
|
17
|
+
class?: string;
|
|
18
|
+
/** The content of the link. */
|
|
19
|
+
children?: JSX.Element;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Links allow users to navigate to a different location.
|
|
23
|
+
* They can be presented inline inside a paragraph or as standalone text.
|
|
24
|
+
*
|
|
25
|
+
* Built on solidaria-components Link for full accessibility support.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <Link href="/about">About Us</Link>
|
|
30
|
+
*
|
|
31
|
+
* // Secondary variant
|
|
32
|
+
* <Link href="/help" variant="secondary">Help</Link>
|
|
33
|
+
*
|
|
34
|
+
* // Standalone (bold, no underline until hover)
|
|
35
|
+
* <Link href="/home" isStandalone isQuiet>Home</Link>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function Link(props: LinkProps): JSX.Element;
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/link/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAc,MAAM,UAAU,CAAC;AAChD,OAAO,EAEL,KAAK,SAAS,IAAI,iBAAiB,EAEpC,MAAM,wCAAwC,CAAC;AAMhD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IACxF,uDAAuD;IACvD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yFAAyF;IACzF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAmElD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProgressBar component for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* Styled progress bar component built on top of the solidaria hook directly.
|
|
5
|
+
*/
|
|
6
|
+
import { type JSX } from 'solid-js';
|
|
7
|
+
export type ProgressBarSize = 'sm' | 'md' | 'lg';
|
|
8
|
+
export type ProgressBarVariant = 'primary' | 'accent' | 'success' | 'warning' | 'danger';
|
|
9
|
+
export interface ProgressBarProps {
|
|
10
|
+
/** The current value (controlled). @default 0 */
|
|
11
|
+
value?: number;
|
|
12
|
+
/** The smallest value allowed. @default 0 */
|
|
13
|
+
minValue?: number;
|
|
14
|
+
/** The largest value allowed. @default 100 */
|
|
15
|
+
maxValue?: number;
|
|
16
|
+
/** The content to display as the value's label (e.g. "1 of 4"). */
|
|
17
|
+
valueLabel?: string;
|
|
18
|
+
/** Whether presentation is indeterminate when progress isn't known. */
|
|
19
|
+
isIndeterminate?: boolean;
|
|
20
|
+
/** The size of the progress bar. @default 'md' */
|
|
21
|
+
size?: ProgressBarSize;
|
|
22
|
+
/** The visual style variant. @default 'primary' */
|
|
23
|
+
variant?: ProgressBarVariant;
|
|
24
|
+
/** The label to display above the progress bar. */
|
|
25
|
+
label?: string;
|
|
26
|
+
/** Whether to show the value text. @default true for determinate progress */
|
|
27
|
+
showValueLabel?: boolean;
|
|
28
|
+
/** Additional CSS class name. */
|
|
29
|
+
class?: string;
|
|
30
|
+
/** An accessibility label. */
|
|
31
|
+
'aria-label'?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Progress bars show either determinate or indeterminate progress of an operation
|
|
35
|
+
* over time.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <ProgressBar value={50} label="Loading..." />
|
|
40
|
+
*
|
|
41
|
+
* // Indeterminate
|
|
42
|
+
* <ProgressBar isIndeterminate label="Processing..." />
|
|
43
|
+
*
|
|
44
|
+
* // Different variants
|
|
45
|
+
* <ProgressBar value={75} variant="success" />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function ProgressBar(props: ProgressBarProps): JSX.Element;
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/progress-bar/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAgC,MAAM,UAAU,CAAC;AAOlE,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzF,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,mDAAmD;IACnD,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAyCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAyEhE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RadioGroup and Radio components for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* Styled radio components built on top of solidaria-components.
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: Due to SolidJS's JSX evaluation order, we cannot wrap the headless
|
|
7
|
+
* components in a traditional way. Instead, we re-export them and provide
|
|
8
|
+
* styling through the class prop functions.
|
|
9
|
+
*/
|
|
10
|
+
import { type JSX } from 'solid-js';
|
|
11
|
+
import { type RadioGroupProps as HeadlessRadioGroupProps, type RadioProps as HeadlessRadioProps } from '@proyecto-viviana/solidaria-components';
|
|
12
|
+
export type RadioGroupOrientation = 'horizontal' | 'vertical';
|
|
13
|
+
export type RadioGroupSize = 'sm' | 'md' | 'lg';
|
|
14
|
+
export interface RadioGroupProps extends Omit<HeadlessRadioGroupProps, 'class' | 'style'> {
|
|
15
|
+
/** The size of the radio buttons. */
|
|
16
|
+
size?: RadioGroupSize;
|
|
17
|
+
/** Additional CSS class name. */
|
|
18
|
+
class?: string;
|
|
19
|
+
/** Label for the group. */
|
|
20
|
+
label?: string;
|
|
21
|
+
/** Description for the group. */
|
|
22
|
+
description?: string;
|
|
23
|
+
/** Error message when invalid. */
|
|
24
|
+
errorMessage?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface RadioProps extends Omit<HeadlessRadioProps, 'class' | 'style'> {
|
|
27
|
+
/** Additional CSS class name. */
|
|
28
|
+
class?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A radio group allows users to select a single option from a list of mutually exclusive options.
|
|
32
|
+
*
|
|
33
|
+
* Built on solidaria-components RadioGroup for full accessibility support.
|
|
34
|
+
*/
|
|
35
|
+
export declare function RadioGroup(props: RadioGroupProps): JSX.Element;
|
|
36
|
+
/**
|
|
37
|
+
* A radio button allows users to select a single option from a list.
|
|
38
|
+
* Must be used within a RadioGroup.
|
|
39
|
+
*
|
|
40
|
+
* Built on solidaria-components Radio for full accessibility support.
|
|
41
|
+
*/
|
|
42
|
+
export declare function Radio(props: RadioProps): JSX.Element;
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/radio/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA+C,MAAM,UAAU,CAAA;AAChF,OAAO,EAGL,KAAK,eAAe,IAAI,uBAAuB,EAC/C,KAAK,UAAU,IAAI,kBAAkB,EAGtC,MAAM,wCAAwC,CAAA;AAM/C,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,UAAU,CAAA;AAC7D,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAQ/C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,OAAO,GAAG,OAAO,CAAC;IACvF,qCAAqC;IACrC,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7E,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA4BD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAkD9D;AAMD;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,CA0EpD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Separator component for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* Styled separator component built on top of solidaria hook directly.
|
|
5
|
+
*/
|
|
6
|
+
import { type JSX } from 'solid-js';
|
|
7
|
+
import { type Orientation } from '@proyecto-viviana/solidaria';
|
|
8
|
+
export type SeparatorVariant = 'default' | 'subtle' | 'strong';
|
|
9
|
+
export type SeparatorSize = 'sm' | 'md' | 'lg';
|
|
10
|
+
export interface SeparatorProps {
|
|
11
|
+
/** The orientation of the separator. @default 'horizontal' */
|
|
12
|
+
orientation?: Orientation;
|
|
13
|
+
/** The visual style variant. @default 'default' */
|
|
14
|
+
variant?: SeparatorVariant;
|
|
15
|
+
/** The size/thickness of the separator. @default 'md' */
|
|
16
|
+
size?: SeparatorSize;
|
|
17
|
+
/** Additional CSS class name. */
|
|
18
|
+
class?: string;
|
|
19
|
+
/** An accessibility label for the separator. */
|
|
20
|
+
'aria-label'?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A separator is a visual divider between two groups of content,
|
|
24
|
+
* e.g. groups of menu items or sections of a page.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <Separator />
|
|
29
|
+
*
|
|
30
|
+
* // Vertical separator
|
|
31
|
+
* <div class="flex items-center gap-4">
|
|
32
|
+
* <span>Item 1</span>
|
|
33
|
+
* <Separator orientation="vertical" />
|
|
34
|
+
* <span>Item 2</span>
|
|
35
|
+
* </div>
|
|
36
|
+
*
|
|
37
|
+
* // Different variants
|
|
38
|
+
* <Separator variant="strong" />
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function Separator(props: SeparatorProps): JSX.Element;
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/separator/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAgC,MAAM,UAAU,CAAC;AAClE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAMhF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mDAAmD;IACnD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,yDAAyD;IACzD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA4BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAkE5D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToggleSwitch component for proyecto-viviana-ui
|
|
3
|
+
*
|
|
4
|
+
* A styled switch component built on top of solidaria-components.
|
|
5
|
+
* This component only handles styling - all behavior and accessibility
|
|
6
|
+
* is provided by the headless Switch from solidaria-components.
|
|
7
|
+
*
|
|
8
|
+
* Named "ToggleSwitch" to avoid conflict with SolidJS's built-in Switch component.
|
|
9
|
+
*/
|
|
10
|
+
import { type JSX } from 'solid-js';
|
|
11
|
+
import { type ToggleSwitchProps as HeadlessToggleSwitchProps } from '@proyecto-viviana/solidaria-components';
|
|
12
|
+
export type SwitchSize = 'sm' | 'md' | 'lg';
|
|
13
|
+
export interface ToggleSwitchProps extends Omit<HeadlessToggleSwitchProps, 'class' | 'children'> {
|
|
14
|
+
/** The size of the switch. */
|
|
15
|
+
size?: SwitchSize;
|
|
16
|
+
/** Additional CSS class name. */
|
|
17
|
+
class?: string;
|
|
18
|
+
/** Label text for the switch. */
|
|
19
|
+
children?: JSX.Element;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A switch allows users to toggle between two mutually exclusive states.
|
|
23
|
+
*
|
|
24
|
+
* Built on solidaria-components Switch for full accessibility support.
|
|
25
|
+
* Named "ToggleSwitch" to avoid conflict with SolidJS's built-in Switch component.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ToggleSwitch(props: ToggleSwitchProps): JSX.Element;
|
|
28
|
+
//# sourceMappingURL=ToggleSwitch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleSwitch.d.ts","sourceRoot":"","sources":["../../src/switch/ToggleSwitch.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA6C,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAwC,KAAK,iBAAiB,IAAI,yBAAyB,EAAgC,MAAM,wCAAwC,CAAC;AAMjL,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,UAAU,CAAC;IAC9F,8BAA8B;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AA4BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAoDlE"}
|