@codecrib/ui 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Card/Card.tsx","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Icon/Icon.tsx","../src/components/Countdown/Countdown.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { IconWeight } from '@codecrib/ui/icons';\nimport { cn } from \"../../utils/cn\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n /** Icon element to render inside the button */\n icon?: React.ReactNode;\n /** Position for the icon when `icon` is provided */\n iconPosition?: \"left\" | \"right\";\n}\n\nconst variantStyles = {\n primary:\n \"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500\",\n secondary:\n \"bg-secondary-600 text-white hover:bg-secondary-700 focus:ring-secondary-500\",\n outline:\n \"border-2 border-primary-600 text-primary-600 hover:bg-primary-50 focus:ring-primary-500\",\n ghost: \"text-gray-700 hover:bg-gray-100 focus:ring-gray-500\",\n};\n\nconst sizeStyles = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n disabled,\n children,\n icon,\n iconPosition = 'left',\n ...props\n },\n ref\n ) => {\n const iconSizeMap: Record<NonNullable<ButtonProps['size']>, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n } as const;\n\n const iconWeightMap: Record<NonNullable<ButtonProps['size']>, IconWeight> = {\n sm: 'regular',\n md: 'regular',\n lg: 'bold',\n } as const;\n\n const renderIcon = () => {\n if (!icon) return null;\n if (React.isValidElement(icon)) {\n const sizeProp = (icon.props as { size?: number | string })?.size;\n const weightProp = (icon.props as { weight?: IconWeight })?.weight;\n const key = size as NonNullable<ButtonProps['size']>;\n const desired = {\n size: (sizeProp as number | undefined) ?? iconSizeMap[key],\n weight: weightProp ?? iconWeightMap[key],\n };\n try {\n return React.cloneElement(icon as React.ReactElement, desired);\n } catch {\n return icon;\n }\n }\n return icon;\n };\n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\",\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg\n className=\"animate-spin -ml-1 mr-2 h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {icon && iconPosition === 'left' && (\n <span className=\"mr-2 inline-flex items-center\">{renderIcon()}</span>\n )}\n <span className=\"inline-flex items-center\">{children}</span>\n {icon && iconPosition === 'right' && (\n <span className=\"ml-2 inline-flex items-center\">{renderIcon()}</span>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","/**\n * Utility function to merge class names\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"bordered\" | \"elevated\";\n}\n\nconst variantStyles = {\n default: \"bg-white\",\n bordered: \"bg-white border border-gray-200\",\n elevated: \"bg-white shadow-lg\",\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"bordered\", children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"rounded-xl p-6\", variantStyles[variant], className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 pb-4\", className)}\n {...props}\n />\n );\n }\n);\n\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps\n extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => {\n return (\n <h3\n ref={ref}\n className={cn(\"text-xl font-semibold text-gray-900\", className)}\n {...props}\n />\n );\n }\n);\n\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => {\n return <div ref={ref} className={cn(\"text-gray-600\", className)} {...props} />;\n }\n);\n\nCardContent.displayName = \"CardContent\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n helperText?: string;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, helperText, id, ...props }, ref) => {\n const inputId = id || React.useId();\n\n return (\n <div className=\"w-full\">\n {label && (\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium text-gray-700 mb-1\"\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n ref={ref}\n className={cn(\n \"block w-full rounded-lg border px-4 py-2 text-gray-900 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-0 transition-colors\",\n error\n ? \"border-red-500 focus:border-red-500 focus:ring-red-500\"\n : \"border-gray-300 focus:border-primary-500 focus:ring-primary-500\",\n className\n )}\n {...props}\n />\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500\">{helperText}</p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n size?: \"sm\" | \"md\";\n}\n\nconst variantStyles = {\n default: \"bg-gray-100 text-gray-800\",\n success: \"bg-green-100 text-green-800\",\n warning: \"bg-yellow-100 text-yellow-800\",\n error: \"bg-red-100 text-red-800\",\n info: \"bg-blue-100 text-blue-800\",\n};\n\nconst sizeStyles = {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = \"default\", size = \"md\", ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium rounded-full\",\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n {...props}\n />\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as React from 'react';\nimport type { IconProps as PhosphorIconProps } from 'phosphor-react';\nimport { cn } from '../../utils/cn';\n\nexport interface IconProps extends Omit<PhosphorIconProps, 'weight'> {\n icon: React.ForwardRefExoticComponent<PhosphorIconProps & React.RefAttributes<SVGSVGElement>>;\n weight?: PhosphorIconProps['weight'];\n className?: string;\n color?: string;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ icon: IconComponent, size = 24, weight = 'regular', className, color, ...props }, ref) => {\n return (\n <IconComponent\n ref={ref}\n size={size}\n weight={weight}\n color={color}\n data-color={color}\n className={cn('inline-block', className)}\n aria-hidden\n {...(props as PhosphorIconProps)}\n />\n );\n }\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CountdownProps extends React.HTMLAttributes<HTMLDivElement> {\n /** deadline as Date | timestamp | ISO string */\n deadline: string | number | Date;\n /** optional callback when countdown reaches zero */\n onComplete?: () => void;\n /** visual variant to match Button */\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost';\n /** size to align with Button sizes */\n size?: 'sm' | 'md' | 'lg';\n}\n\nfunction parseDeadline(value: string | number | Date) {\n if (value instanceof Date) return value.getTime();\n const n = Number(value);\n if (!Number.isNaN(n)) return n;\n const d = Date.parse(String(value));\n return Number.isNaN(d) ? NaN : d;\n}\n\nfunction formatRemaining(ms: number) {\n if (ms <= 0) return { expired: true, text: '00:00:00' };\n const total = Math.floor(ms / 1000);\n const days = Math.floor(total / 86400);\n const hours = Math.floor((total % 86400) / 3600);\n const minutes = Math.floor((total % 3600) / 60);\n const seconds = total % 60;\n\n const pad = (n: number) => String(n).padStart(2, '0');\n const h = pad(hours + days * 24);\n const m = pad(minutes);\n const s = pad(seconds);\n const text = days > 0 ? `${days}d ${h}:${m}:${s}` : `${h}:${m}:${s}`;\n return { expired: false, text };\n}\n\nexport const Countdown = React.forwardRef<HTMLDivElement, CountdownProps>(\n ({ deadline, onComplete, className, variant = 'primary', size = 'md', ...props }, ref) => {\n const target = React.useMemo(() => parseDeadline(deadline), [deadline]);\n const variantStyles: Record<string, string> = {\n primary: 'bg-primary-600 text-white',\n secondary: 'bg-secondary-600 text-white',\n outline: 'border-2 border-primary-600 text-primary-600 bg-transparent',\n ghost: 'text-gray-700 bg-transparent',\n };\n\n const sizeTextStyles: Record<NonNullable<CountdownProps['size']>, string> = {\n sm: 'text-sm px-2 py-0.5 rounded',\n md: 'text-base px-3 py-1 rounded',\n lg: 'text-lg px-4 py-1.5 rounded',\n };\n const [now, setNow] = React.useState(() => Date.now());\n const [expired, setExpired] = React.useState(false);\n\n React.useEffect(() => {\n if (Number.isNaN(target)) return undefined;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, [target]);\n\n React.useEffect(() => {\n if (Number.isNaN(target)) return;\n if (now >= target && !expired) {\n setExpired(true);\n onComplete?.();\n }\n }, [now, target, expired, onComplete]);\n\n const remaining = formatRemaining(target - now);\n const appliedVariant = expired ? 'expired' : variant;\n const expiredClass =\n variant === 'ghost'\n ? 'text-red-600 bg-transparent'\n : variant === 'outline'\n ? 'border-2 border-red-600 text-red-600 bg-transparent'\n : 'bg-red-600 text-white';\n const variantClass = expired ? expiredClass : variantStyles[variant];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'inline-flex items-center font-mono',\n variantClass,\n sizeTextStyles[size],\n className\n )}\n {...props}\n >\n {Number.isNaN(target) ? 'Invalid date' : remaining.text}\n </div>\n );\n }\n);\n\nCountdown.displayName = 'Countdown';\n\nexport default Countdown;\n"],"mappings":"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","names":["React","jsx","variantStyles","React","jsx","jsxs","React","jsx","variantStyles","sizeStyles","React","jsx","React","jsx","variantStyles"]}
1
+ {"version":3,"sources":["../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Card/Card.tsx","../src/styles/borders.ts","../src/components/Input/Input.tsx","../src/components/Badge/Badge.tsx","../src/components/Icon/Icon.tsx","../src/components/Countdown/Countdown.tsx","../src/components/Tag/Tag.tsx","../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { IconWeight } from '@codecrib/ui/icons';\nimport { cn } from \"../../utils/cn\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n /** Icon element to render inside the button */\n icon?: React.ReactNode;\n /** Position for the icon when `icon` is provided */\n iconPosition?: \"left\" | \"right\";\n}\n\nconst variantStyles = {\n primary:\n \"bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500\",\n secondary:\n \"bg-secondary-600 text-white hover:bg-secondary-700 focus:ring-secondary-500\",\n outline:\n \"border-2 border-primary-600 text-primary-600 hover:bg-primary-50 focus:ring-primary-500\",\n ghost: \"text-gray-700 hover:bg-gray-100 focus:ring-gray-500\",\n};\n\nconst sizeStyles = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n disabled,\n children,\n icon,\n iconPosition = 'left',\n ...props\n },\n ref\n ) => {\n const iconSizeMap: Record<NonNullable<ButtonProps['size']>, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n } as const;\n\n const iconWeightMap: Record<NonNullable<ButtonProps['size']>, IconWeight> = {\n sm: 'regular',\n md: 'regular',\n lg: 'bold',\n } as const;\n\n const renderIcon = () => {\n if (!icon) return null;\n if (React.isValidElement(icon)) {\n const sizeProp = (icon.props as { size?: number | string })?.size;\n const weightProp = (icon.props as { weight?: IconWeight })?.weight;\n const key = size as NonNullable<ButtonProps['size']>;\n const desired = {\n size: (sizeProp as number | undefined) ?? iconSizeMap[key],\n weight: weightProp ?? iconWeightMap[key],\n };\n try {\n return React.cloneElement(icon as React.ReactElement, desired);\n } catch {\n return icon;\n }\n }\n return icon;\n };\n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\",\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg\n className=\"animate-spin -ml-1 mr-2 h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {icon && iconPosition === 'left' && (\n <span className=\"mr-2 inline-flex items-center\">{renderIcon()}</span>\n )}\n <span className=\"inline-flex items-center\">{children}</span>\n {icon && iconPosition === 'right' && (\n <span className=\"ml-2 inline-flex items-center\">{renderIcon()}</span>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","/**\n * Utility function to merge class names\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { radius, border } from \"../../styles/borders\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"bordered\" | \"elevated\";\n}\n\nconst variantStyles = {\n default: \"bg-white\",\n bordered: \"bg-white border border-gray-200\",\n elevated: \"bg-white shadow-lg\",\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"bordered\", children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(radius.default, \"p-6\", variantStyles[variant], className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 pb-4\", className)}\n {...props}\n />\n );\n }\n);\n\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps\n extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => {\n return (\n <h3\n ref={ref}\n className={cn(\"text-xl font-semibold text-gray-900\", className)}\n {...props}\n />\n );\n }\n);\n\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => {\n return <div ref={ref} className={cn(\"text-gray-600\", className)} {...props} />;\n }\n);\n\nCardContent.displayName = \"CardContent\";\n","export const radius = {\n default: \"rounded-lg\",\n pill: \"rounded-full\",\n};\n\nexport const border = {\n base: \"border\",\n color: \"border-gray-300\",\n focus: \"focus:border-primary-500 focus:ring-primary-500\",\n ring: \"focus:outline-none focus:ring-2 focus:ring-offset-0\",\n};\n\nexport const input = `${border.base} ${border.color}`;\n\nexport default {\n radius,\n border,\n input,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { radius, border } from \"../../styles/borders\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n helperText?: string;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, helperText, id, ...props }, ref) => {\n const inputId = id || React.useId();\n\n return (\n <div className=\"w-full\">\n {label && (\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium text-gray-700 mb-1\"\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n ref={ref}\n className={cn(\n \"block w-full px-4 py-2 text-gray-900 placeholder:text-gray-400 transition-colors\",\n radius.default,\n border.base,\n error\n ? \"border-red-500 focus:border-red-500 focus:ring-red-500\"\n : `${border.color} ${border.focus} ${border.ring}`,\n className\n )}\n {...props}\n />\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-gray-500\">{helperText}</p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n size?: \"sm\" | \"md\";\n}\n\nconst variantStyles = {\n default: \"bg-gray-100 text-gray-800\",\n success: \"bg-green-100 text-green-800\",\n warning: \"bg-yellow-100 text-yellow-800\",\n error: \"bg-red-100 text-red-800\",\n info: \"bg-blue-100 text-blue-800\",\n};\n\nconst sizeStyles = {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = \"default\", size = \"md\", ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium rounded-full\",\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n {...props}\n />\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as React from 'react';\nimport type { IconProps as PhosphorIconProps } from 'phosphor-react';\nimport { cn } from '../../utils/cn';\n\nexport interface IconProps extends Omit<PhosphorIconProps, 'weight'> {\n icon: React.ForwardRefExoticComponent<PhosphorIconProps & React.RefAttributes<SVGSVGElement>>;\n weight?: PhosphorIconProps['weight'];\n className?: string;\n color?: string;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ icon: IconComponent, size = 24, weight = 'regular', className, color, ...props }, ref) => {\n return (\n <IconComponent\n ref={ref}\n size={size}\n weight={weight}\n color={color}\n data-color={color}\n className={cn('inline-block', className)}\n aria-hidden\n {...(props as PhosphorIconProps)}\n />\n );\n }\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CountdownProps extends React.HTMLAttributes<HTMLDivElement> {\n /** deadline as Date | timestamp | ISO string */\n deadline: string | number | Date;\n /** optional callback when countdown reaches zero */\n onComplete?: () => void;\n /** visual variant to match Button */\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost';\n /** size to align with Button sizes */\n size?: 'sm' | 'md' | 'lg';\n}\n\nfunction parseDeadline(value: string | number | Date) {\n if (value instanceof Date) return value.getTime();\n const n = Number(value);\n if (!Number.isNaN(n)) return n;\n const d = Date.parse(String(value));\n return Number.isNaN(d) ? NaN : d;\n}\n\nfunction formatRemaining(ms: number) {\n if (ms <= 0) return { expired: true, text: '00:00:00' };\n const total = Math.floor(ms / 1000);\n const days = Math.floor(total / 86400);\n const hours = Math.floor((total % 86400) / 3600);\n const minutes = Math.floor((total % 3600) / 60);\n const seconds = total % 60;\n\n const pad = (n: number) => String(n).padStart(2, '0');\n const h = pad(hours + days * 24);\n const m = pad(minutes);\n const s = pad(seconds);\n const text = days > 0 ? `${days}d ${h}:${m}:${s}` : `${h}:${m}:${s}`;\n return { expired: false, text };\n}\n\nexport const Countdown = React.forwardRef<HTMLDivElement, CountdownProps>(\n ({ deadline, onComplete, className, variant = 'primary', size = 'md', ...props }, ref) => {\n const target = React.useMemo(() => parseDeadline(deadline), [deadline]);\n const variantStyles: Record<string, string> = {\n primary: 'bg-primary-600 text-white',\n secondary: 'bg-secondary-600 text-white',\n outline: 'border-2 border-primary-600 text-primary-600 bg-transparent',\n ghost: 'text-gray-700 bg-transparent',\n };\n\n const sizeTextStyles: Record<NonNullable<CountdownProps['size']>, string> = {\n sm: 'text-sm px-2 py-0.5 rounded',\n md: 'text-base px-3 py-1 rounded',\n lg: 'text-lg px-4 py-1.5 rounded',\n };\n const [now, setNow] = React.useState(() => Date.now());\n const [expired, setExpired] = React.useState(false);\n\n React.useEffect(() => {\n if (Number.isNaN(target)) return undefined;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, [target]);\n\n React.useEffect(() => {\n if (Number.isNaN(target)) return;\n if (now >= target && !expired) {\n setExpired(true);\n onComplete?.();\n }\n }, [now, target, expired, onComplete]);\n\n const remaining = formatRemaining(target - now);\n const appliedVariant = expired ? 'expired' : variant;\n const expiredClass =\n variant === 'ghost'\n ? 'text-red-600 bg-transparent'\n : variant === 'outline'\n ? 'border-2 border-red-600 text-red-600 bg-transparent'\n : 'bg-red-600 text-white';\n const variantClass = expired ? expiredClass : variantStyles[variant];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'inline-flex items-center font-mono',\n variantClass,\n sizeTextStyles[size],\n className\n )}\n {...props}\n >\n {Number.isNaN(target) ? 'Invalid date' : remaining.text}\n </div>\n );\n }\n);\n\nCountdown.displayName = 'Countdown';\n\nexport default Countdown;\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { radius, border } from \"../../styles/borders\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n size?: \"sm\" | \"md\" | \"lg\";\n removable?: boolean;\n onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n removeLabel?: string;\n}\n\nconst variantStyles = {\n default: \"bg-gray-100 text-gray-800\",\n success: \"bg-green-100 text-green-800\",\n warning: \"bg-yellow-100 text-yellow-800\",\n error: \"bg-red-100 text-red-800\",\n info: \"bg-blue-100 text-blue-800\",\n};\n\nconst sizeStyles = {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n lg: \"px-3 py-1.5 text-base\",\n};\n\nexport const Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"md\",\n removable = false,\n onRemove,\n removeLabel = \"Remove\",\n children,\n ...props\n },\n ref\n ) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium\",\n radius.pill,\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n {...props}\n >\n <span>{children}</span>\n {removable && (\n <button\n type=\"button\"\n aria-label={removeLabel}\n onClick={onRemove}\n className={cn(\n \"ml-2 inline-flex items-center justify-center\",\n radius.pill,\n border.ring,\n size === \"sm\" ? \"h-4 w-4\" : size === \"md\" ? \"h-5 w-5\" : \"h-6 w-6\"\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n className={cn(size === \"sm\" ? \"h-3 w-3\" : size === \"md\" ? \"h-4 w-4\" : \"h-5 w-5\")}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </span>\n );\n }\n);\n\nTag.displayName = \"Tag\";\n\nexport default Tag;\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Tag } from \"../Tag/Tag\";\nimport { Badge } from \"../Badge/Badge\";\n\nexport type SelectItem = {\n value: string;\n label: React.ReactNode;\n icon?: string; // optional URL to an icon image\n disabled?: boolean;\n};\n\nexport type SelectGroup = {\n label: string;\n items: SelectItem[];\n};\n\nexport type SelectSource = SelectItem | SelectGroup;\n\nexport interface SelectProps {\n items: SelectSource[];\n placeholder?: string;\n multiselect?: boolean;\n multiline?: boolean;\n value?: string | string[];\n onChange?: (value: string | string[]) => void;\n className?: string;\n}\n\nexport const Select: React.FC<SelectProps> = ({\n items,\n placeholder = \"Select...\",\n multiselect = false,\n multiline = false,\n value,\n onChange,\n className,\n}) => {\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<string[]>(\n Array.isArray(value) ? value : value ? [value] : []\n );\n\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(Array.isArray(value) ? value : value ? [value] : []);\n }\n }, [value]);\n\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n const onDoc = (e: MouseEvent) => {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, []);\n\n const isSelected = (v: string) => internalValue.includes(v);\n\n const toggleSelect = (v: string) => {\n let next: string[];\n if (multiselect) {\n next = isSelected(v)\n ? internalValue.filter((x) => x !== v)\n : [...internalValue, v];\n } else {\n next = isSelected(v) ? [] : [v];\n setOpen(false);\n }\n\n if (onChange) onChange(multiselect ? next : next[0] || \"\");\n if (value === undefined) setInternalValue(next);\n };\n\n const removeValue = (v: string) => {\n const next = internalValue.filter((x) => x !== v);\n if (onChange) onChange(multiselect ? next : next[0] || \"\");\n if (value === undefined) setInternalValue(next);\n };\n\n const selectedItemsMap = React.useMemo(() => {\n const map = new Map<string, SelectItem>();\n const collect = (src: SelectSource[]) => {\n src.forEach((s) => {\n if (\"items\" in s) s.items.forEach((it) => map.set(it.value, it));\n else map.set(s.value, s);\n });\n };\n collect(items);\n return map;\n }, [items]);\n\n const tagsContainerRef = React.useRef<HTMLSpanElement | null>(null);\n const [visibleCount, setVisibleCount] = React.useState<number | null>(null);\n\n React.useEffect(() => {\n if (multiline) {\n setVisibleCount(null);\n return;\n }\n\n let raf: number | undefined;\n let timeout: number | undefined;\n\n const measure = () => {\n if (raf) cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n const container = tagsContainerRef.current;\n if (!container) {\n setVisibleCount(null);\n return;\n }\n\n const containerWidth = container.clientWidth;\n if (containerWidth === 0) {\n setVisibleCount(null);\n return;\n }\n\n // Get all tag elements (they're always rendered, some may be hidden)\n const tagEls = Array.from(\n container.querySelectorAll('[data-role=\"select-tag\"]')\n ) as HTMLElement[];\n \n if (!tagEls.length) {\n setVisibleCount(null);\n return;\n }\n\n // Get badge element if present\n const badgeEl = container.querySelector('[data-role=\"count-badge\"]') as HTMLElement | null;\n\n // Compute gap from container\n const containerStyle = window.getComputedStyle(container);\n const gap = parseFloat(containerStyle.gap || containerStyle.columnGap || \"0\") || 0;\n\n // Measure each tag's width\n const tagWidths: number[] = tagEls.map((el) => el.offsetWidth);\n\n // First check: do all tags fit without any badge?\n let totalWidthAllTags = 0;\n for (const [i, w] of tagWidths.entries()) {\n totalWidthAllTags += w + (i > 0 ? gap : 0);\n }\n\n if (totalWidthAllTags <= containerWidth) {\n // All tags fit, no badge needed\n setVisibleCount(tagEls.length);\n return;\n }\n\n // Not all tags fit, so we need a badge. Measure or estimate badge width.\n let badgeWidth = badgeEl ? badgeEl.offsetWidth : 40;\n\n // Calculate how many tags fit WITH space reserved for the badge\n let usedWidth = 0;\n let fitCount = 0;\n\n for (const [i, tagWidth] of tagWidths.entries()) {\n const gapBeforeTag = i > 0 ? gap : 0;\n const gapBeforeBadge = gap;\n const effectiveTagWidth = tagWidth ?? 0;\n\n // Space needed: current tag + gap before badge + badge\n const spaceNeeded = usedWidth + gapBeforeTag + effectiveTagWidth + gapBeforeBadge + badgeWidth;\n\n if (spaceNeeded <= containerWidth) {\n usedWidth += gapBeforeTag + effectiveTagWidth;\n fitCount = i + 1;\n } else {\n break;\n }\n }\n\n // Ensure at least 1 tag is shown\n fitCount = Math.max(1, fitCount);\n\n setVisibleCount(fitCount);\n });\n };\n\n measure();\n\n const onResize = () => {\n if (timeout) clearTimeout(timeout);\n timeout = window.setTimeout(measure, 50);\n };\n window.addEventListener(\"resize\", onResize);\n\n let ro: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\" && tagsContainerRef.current) {\n ro = new ResizeObserver(onResize);\n ro.observe(tagsContainerRef.current);\n }\n\n return () => {\n if (raf) cancelAnimationFrame(raf);\n if (timeout) clearTimeout(timeout);\n window.removeEventListener(\"resize\", onResize);\n ro?.disconnect();\n };\n }, [internalValue, multiline]);\n\n return (\n <div ref={containerRef} className={cn(\"relative inline-block w-full\", className)}>\n <div className=\"flex items-center\">\n <div\n role=\"combobox\"\n tabIndex={0}\n aria-expanded={open}\n onClick={() => setOpen((s) => !s)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen((s) => !s);\n }\n if (e.key === \"Escape\") setOpen(false);\n }}\n className={cn(\n \"w-full inline-flex items-center justify-between rounded-lg border bg-white px-4 py-2 text-gray-900 text-left cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary-500\",\n multiselect ? \"\" : \"\",\n open ? \"ring-1 ring-gray-300\" : \"\"\n )}\n >\n <div className=\"flex-1\">\n {multiselect && internalValue.length > 0 ? (\n <span\n ref={tagsContainerRef}\n className={cn(\n \"relative flex gap-1 items-center\",\n multiline ? \"flex-wrap\" : \"overflow-hidden whitespace-nowrap\",\n )}\n >\n {/* Always render all tags for measurement; hide overflowed ones via CSS */}\n {internalValue.map((v, index) => {\n const isHidden = !multiline && visibleCount !== null && index >= visibleCount;\n return (\n <span\n key={v}\n data-role=\"select-tag\"\n className={cn(\n \"flex-shrink-0 inline-block\",\n isHidden && \"invisible absolute pointer-events-none\"\n )}\n >\n <Tag\n size=\"sm\"\n removable\n removeLabel={`Remove ${selectedItemsMap.get(v)?.label ?? v}`}\n onRemove={(e) => {\n e.stopPropagation();\n removeValue(v);\n }}\n >\n {selectedItemsMap.get(v)?.label ?? v}\n </Tag>\n </span>\n );\n })}\n {/* Show badge when there are hidden tags */}\n {!multiline && visibleCount !== null && visibleCount < internalValue.length && (\n <span data-role=\"count-badge\" className=\"flex-shrink-0 inline-block\">\n <Badge size=\"sm\" variant=\"info\">+{internalValue.length - visibleCount}</Badge>\n </span>\n )}\n </span>\n ) : internalValue.length > 0 ? (\n <span className=\"text-sm text-gray-900\">\n {selectedItemsMap.get(internalValue[0]!)?.label ?? placeholder}\n </span>\n ) : (\n <span className=\"text-sm text-gray-400\">{placeholder}</span>\n )}\n </div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" className=\"ml-2 h-4 w-4 text-gray-600\">\n <path d=\"M5.5 7.5L10 12l4.5-4.5\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\n </svg>\n </div>\n </div>\n\n {open && (\n <div className=\"absolute z-40 mt-2 w-56 bg-white border rounded shadow-lg\">\n <div className=\"p-1\">\n {items.map((groupOrItem, gi) => {\n if (\"items\" in groupOrItem) {\n return (\n <div key={gi} className=\"mb-2\">\n <div className=\"flex items-center justify-between px-2 py-1 text-xs text-gray-500 font-medium\">\n <div>{groupOrItem.label}</div>\n <div>\n {multiselect && (\n <input\n type=\"checkbox\"\n aria-label={`Select all ${groupOrItem.label}`}\n checked={groupOrItem.items.every((it) => isSelected(it.value))}\n onChange={() => {\n // toggle all in group\n const all = groupOrItem.items.map((it) => it.value);\n const allSelected = all.every((v) => isSelected(v));\n let next: string[];\n if (multiselect) {\n if (allSelected) {\n next = internalValue.filter((v) => !all.includes(v));\n } else {\n next = [...internalValue, ...all.filter((v) => !internalValue.includes(v))];\n }\n } else {\n // single select: select first item or clear\n next = allSelected ? [] : (all[0] ? [all[0]] : []);\n setOpen(false);\n }\n if (onChange) onChange(multiselect ? next : next[0] || \"\");\n if (value === undefined) setInternalValue(next);\n }}\n />\n )}\n </div>\n </div>\n {groupOrItem.items.map((it) => (\n <button\n key={it.value}\n type=\"button\"\n disabled={it.disabled}\n onClick={() => toggleSelect(it.value)}\n className={cn(\n \"w-full text-left px-2 py-2 rounded hover:bg-gray-50 flex items-center gap-2\",\n isSelected(it.value) ? \"bg-gray-100\" : \"\"\n )}\n >\n {it.icon && (\n <img src={it.icon} alt=\"\" className=\"h-4 w-4 rounded\" />\n )}\n <span className=\"flex-1\">{it.label}</span>\n <span className=\"w-6 flex items-center justify-end\">\n {isSelected(it.value) && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n className=\"h-4 w-4\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </span>\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <button\n key={groupOrItem.value}\n type=\"button\"\n disabled={groupOrItem.disabled}\n onClick={() => toggleSelect(groupOrItem.value)}\n className={cn(\n \"w-full text-left px-2 py-2 rounded hover:bg-gray-50 flex items-center gap-2\",\n isSelected(groupOrItem.value) ? \"bg-gray-100\" : \"\"\n )}\n >\n {groupOrItem.icon && (\n <img src={groupOrItem.icon} alt=\"\" className=\"h-4 w-4 rounded\" />\n )}\n <span className=\"flex-1\">{groupOrItem.label}</span>\n <span className=\"w-6 flex items-center justify-end\">\n {isSelected(groupOrItem.value) && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n className=\"h-4 w-4\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default Select;\n"],"mappings":"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","names":["React","jsx","variantStyles","React","jsx","jsxs","React","jsx","variantStyles","sizeStyles","React","jsx","React","jsx","variantStyles","React","jsx","jsxs","variantStyles","sizeStyles","React","jsx","jsxs"]}
package/dist/styles.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:"Inter",system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-100:oklch(96.2% .044 156.743);--color-green-800:oklch(44.8% .119 151.328);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-800:oklch(42.4% .199 265.638);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-50:#eff6ff;--color-primary-500:#3b82f6;--color-primary-600:#2563eb;--color-primary-700:#1d4ed8;--color-secondary-500:#22c55e;--color-secondary-600:#16a34a;--color-secondary-700:#15803d}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-4{height:calc(var(--spacing)*4)}.w-4{width:calc(var(--spacing)*4)}.w-full{width:100%}.animate-spin{animation:var(--animate-spin)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-primary-600{border-color:var(--color-primary-600)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-100{background-color:var(--color-green-100)}.bg-primary-600{background-color:var(--color-primary-600)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-secondary-600{background-color:var(--color-secondary-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-blue-800{color:var(--color-blue-800)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-800{color:var(--color-green-800)}.text-primary-600{color:var(--color-primary-600)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}@media (hover:hover){.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-primary-50:hover{background-color:var(--color-primary-50)}.hover\:bg-primary-700:hover{background-color:var(--color-primary-700)}.hover\:bg-secondary-700:hover{background-color:var(--color-secondary-700)}}.focus\:border-primary-500:focus{border-color:var(--color-primary-500)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-secondary-500:focus{--tw-ring-color:var(--color-secondary-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes spin{to{transform:rotate(360deg)}}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:"Inter",system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-100:oklch(96.2% .044 156.743);--color-green-800:oklch(44.8% .119 151.328);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-800:oklch(42.4% .199 265.638);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-50:#eff6ff;--color-primary-500:#3b82f6;--color-primary-600:#2563eb;--color-primary-700:#1d4ed8;--color-secondary-500:#22c55e;--color-secondary-600:#16a34a;--color-secondary-700:#15803d}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.absolute{position:absolute}.relative{position:relative}.z-40{z-index:40}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-56{width:calc(var(--spacing)*56)}.w-full{width:100%}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-primary-600{border-color:var(--color-primary-600)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-100{background-color:var(--color-green-100)}.bg-primary-600{background-color:var(--color-primary-600)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-secondary-600{background-color:var(--color-secondary-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.p-1{padding:calc(var(--spacing)*1)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-blue-800{color:var(--color-blue-800)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-800{color:var(--color-green-800)}.text-primary-600{color:var(--color-primary-600)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}@media (hover:hover){.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-primary-50:hover{background-color:var(--color-primary-50)}.hover\:bg-primary-700:hover{background-color:var(--color-primary-700)}.hover\:bg-secondary-700:hover{background-color:var(--color-secondary-700)}}.focus\:border-primary-500:focus{border-color:var(--color-primary-500)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-secondary-500:focus{--tw-ring-color:var(--color-secondary-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes spin{to{transform:rotate(360deg)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codecrib/ui",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "React UI component library with TailwindCSS",
5
5
  "license": "MIT",
6
6
  "repository": {