@igorao79/uivix 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Input/Input.tsx","../src/components/Input/PasswordInput.tsx","../src/components/Input/SearchInput.tsx","../src/components/Input/OTPInput.tsx","../src/components/Label/Label.tsx","../src/components/Text/TypewriterText.tsx","../src/components/Text/GradientText.tsx","../src/components/Text/GlitchText.tsx","../src/components/Text/ShimmerText.tsx","../src/components/Text/WaveText.tsx","../src/components/Text/BlurText.tsx","../src/components/Text/CounterText.tsx","../src/components/Text/MediaText.tsx","../src/components/Text/SparklesText.tsx","../src/components/Text/HighlightText.tsx","../src/components/Card/Card.tsx","../src/components/Background/ParticleBackground.tsx","../src/components/Background/AuroraBackground.tsx","../src/components/Background/GridBackground.tsx","../src/components/Background/StarfieldBackground.tsx","../src/components/Background/WaveBackground.tsx","../src/components/Background/GradientMeshBackground.tsx","../src/components/Background/MatrixRainBackground.tsx","../src/components/Background/BokehBackground.tsx","../src/components/Background/PixelBackground.tsx","../src/components/Background/RippleBackground.tsx","../src/components/Background/DotPatternBackground.tsx","../src/components/Background/RetroGridBackground.tsx","../src/components/Background/MeteorBackground.tsx","../src/components/Background/BeamsBackground.tsx","../src/components/Other/Badge.tsx","../src/components/Other/Tooltip.tsx","../src/components/Other/Toggle.tsx","../src/components/Other/Separator.tsx","../src/components/Other/Skeleton.tsx","../src/components/Other/Progress.tsx","../src/components/Other/Avatar.tsx","../src/components/Other/Marquee.tsx"],"sourcesContent":["export { Button } from \"./components/Button\";\nexport type { ButtonProps } from \"./components/Button\";\n\nexport { Input } from \"./components/Input\";\nexport type { InputProps } from \"./components/Input\";\n\nexport { PasswordInput } from \"./components/Input\";\nexport type { PasswordInputProps } from \"./components/Input\";\n\nexport { SearchInput } from \"./components/Input\";\nexport type { SearchInputProps } from \"./components/Input\";\n\nexport { OTPInput } from \"./components/Input\";\nexport type { OTPInputProps } from \"./components/Input\";\n\nexport { Label } from \"./components/Label\";\nexport type { LabelProps } from \"./components/Label\";\n\nexport { TypewriterText } from \"./components/Text\";\nexport type { TypewriterTextProps } from \"./components/Text\";\n\nexport { GradientText } from \"./components/Text\";\nexport type { GradientTextProps } from \"./components/Text\";\n\nexport { GlitchText } from \"./components/Text\";\nexport type { GlitchTextProps } from \"./components/Text\";\n\nexport { ShimmerText } from \"./components/Text\";\nexport type { ShimmerTextProps } from \"./components/Text\";\n\nexport { WaveText } from \"./components/Text\";\nexport type { WaveTextProps } from \"./components/Text\";\n\nexport { BlurText } from \"./components/Text\";\nexport type { BlurTextProps } from \"./components/Text\";\n\nexport { CounterText } from \"./components/Text\";\nexport type { CounterTextProps } from \"./components/Text\";\n\nexport { MediaText } from \"./components/Text\";\nexport type { MediaTextProps } from \"./components/Text\";\n\nexport { SparklesText } from \"./components/Text\";\nexport type { SparklesTextProps } from \"./components/Text\";\n\nexport { HighlightText } from \"./components/Text\";\nexport type { HighlightTextProps } from \"./components/Text\";\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"./components/Card\";\nexport type { CardProps, CardHeaderProps, CardTitleProps, CardDescriptionProps, CardContentProps, CardFooterProps } from \"./components/Card\";\n\nexport { ParticleBackground } from \"./components/Background\";\nexport type { ParticleBackgroundProps, ParticleNode } from \"./components/Background\";\n\nexport { AuroraBackground } from \"./components/Background\";\nexport type { AuroraBackgroundProps } from \"./components/Background\";\n\nexport { GridBackground } from \"./components/Background\";\nexport type { GridBackgroundProps } from \"./components/Background\";\n\nexport { StarfieldBackground } from \"./components/Background\";\nexport type { StarfieldBackgroundProps } from \"./components/Background\";\n\nexport { WaveBackground } from \"./components/Background\";\nexport type { WaveBackgroundProps } from \"./components/Background\";\n\nexport { GradientMeshBackground } from \"./components/Background\";\nexport type { GradientMeshBackgroundProps } from \"./components/Background\";\n\nexport { MatrixRainBackground } from \"./components/Background\";\nexport type { MatrixRainBackgroundProps } from \"./components/Background\";\n\nexport { BokehBackground } from \"./components/Background\";\nexport type { BokehBackgroundProps, BokehShape } from \"./components/Background\";\n\nexport { PixelBackground } from \"./components/Background\";\nexport type { PixelBackgroundProps, PixelVariant } from \"./components/Background\";\n\nexport { RippleBackground } from \"./components/Background\";\nexport type { RippleBackgroundProps } from \"./components/Background\";\n\nexport { DotPatternBackground } from \"./components/Background\";\nexport type { DotPatternBackgroundProps } from \"./components/Background\";\n\nexport { RetroGridBackground } from \"./components/Background\";\nexport type { RetroGridBackgroundProps } from \"./components/Background\";\n\nexport { MeteorBackground } from \"./components/Background\";\nexport type { MeteorBackgroundProps } from \"./components/Background\";\n\nexport { BeamsBackground } from \"./components/Background\";\nexport type { BeamsBackgroundProps } from \"./components/Background\";\n\nexport { Badge } from \"./components/Other\";\nexport type { BadgeProps } from \"./components/Other\";\n\nexport { Tooltip } from \"./components/Other\";\nexport type { TooltipProps } from \"./components/Other\";\n\nexport { Toggle } from \"./components/Other\";\nexport type { ToggleProps } from \"./components/Other\";\n\nexport { Separator } from \"./components/Other\";\nexport type { SeparatorProps } from \"./components/Other\";\n\nexport { Skeleton } from \"./components/Other\";\nexport type { SkeletonProps } from \"./components/Other\";\n\nexport { Progress } from \"./components/Other\";\nexport type { ProgressProps } from \"./components/Other\";\n\nexport { Avatar } from \"./components/Other\";\nexport type { AvatarProps } from \"./components/Other\";\n\nexport { Marquee } from \"./components/Other\";\nexport type { MarqueeProps } from \"./components/Other\";\n\nexport { cn } from \"./utils/cn\";\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?:\n | \"default\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"destructive\"\n | \"link\"\n | \"gradient\"\n | \"glow\"\n | \"soft\";\n size?: \"sm\" | \"md\" | \"lg\" | \"icon\";\n /** Pill-shaped rounded button */\n pill?: boolean;\n /** Show a loading spinner and disable the button */\n loading?: boolean;\n /** Icon element shown before the children */\n leftIcon?: React.ReactNode;\n /** Icon element shown after the children */\n rightIcon?: React.ReactNode;\n}\n\nconst variantStyles: Record<NonNullable<ButtonProps[\"variant\"]>, string> = {\n default:\n \"bg-zinc-900 text-white hover:bg-zinc-800 dark:bg-white dark:text-zinc-900 dark:hover:bg-zinc-200\",\n secondary:\n \"bg-zinc-100 text-zinc-900 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700\",\n outline:\n \"border border-zinc-300 bg-transparent text-zinc-900 hover:bg-zinc-100 dark:border-zinc-700 dark:text-zinc-100 dark:hover:bg-zinc-800\",\n ghost:\n \"bg-transparent text-zinc-900 hover:bg-zinc-100 dark:text-zinc-100 dark:hover:bg-zinc-800\",\n destructive:\n \"bg-red-600 text-white hover:bg-red-700 dark:bg-red-700 dark:hover:bg-red-800\",\n link: \"bg-transparent text-zinc-900 underline-offset-4 hover:underline dark:text-zinc-100 p-0 h-auto\",\n gradient:\n \"bg-gradient-to-r from-violet-600 to-indigo-600 text-white hover:from-violet-700 hover:to-indigo-700 shadow-md hover:shadow-lg\",\n glow:\n \"bg-violet-600 text-white hover:bg-violet-700 shadow-[0_0_15px_rgba(139,92,246,0.4)] hover:shadow-[0_0_25px_rgba(139,92,246,0.6)] dark:shadow-[0_0_15px_rgba(167,139,250,0.4)] dark:hover:shadow-[0_0_25px_rgba(167,139,250,0.6)]\",\n soft:\n \"bg-violet-100 text-violet-700 hover:bg-violet-200 dark:bg-violet-900/30 dark:text-violet-300 dark:hover:bg-violet-900/50\",\n};\n\nconst sizeStyles: Record<NonNullable<ButtonProps[\"size\"]>, string> = {\n sm: \"h-8 px-3 text-xs gap-1.5\",\n md: \"h-10 px-4 text-sm gap-2\",\n lg: \"h-12 px-6 text-base gap-2.5\",\n icon: \"h-10 w-10\",\n};\n\nconst Spinner = ({ className }: { className?: string }) => (\n <svg\n className={cn(\"animate-spin\", className)}\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\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"md\",\n pill = false,\n loading = false,\n leftIcon,\n rightIcon,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const spinnerSize = size === \"sm\" ? \"h-3 w-3\" : size === \"lg\" ? \"h-5 w-5\" : \"h-4 w-4\";\n\n return (\n <button\n ref={ref}\n disabled={disabled || loading}\n className={cn(\n \"inline-flex items-center justify-center font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n variantStyles[variant],\n sizeStyles[size],\n pill ? \"rounded-full\" : \"rounded-md\",\n className\n )}\n {...props}\n >\n {loading && <Spinner className={spinnerSize} />}\n {!loading && leftIcon && <span className=\"shrink-0\">{leftIcon}</span>}\n {children}\n {!loading && rightIcon && <span className=\"shrink-0\">{rightIcon}</span>}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { useState, useId } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n variant?: \"default\" | \"filled\" | \"underline\" | \"floating\" | \"ghost\" | \"glow\";\n inputSize?: \"sm\" | \"md\" | \"lg\";\n error?: boolean;\n /** Label text for the floating variant (required when variant=\"floating\") */\n label?: string;\n /** Custom class for the floating label */\n labelClassName?: string;\n /** Custom class for the floating wrapper */\n wrapperClassName?: string;\n /** Icon element to show on the left side */\n leftIcon?: React.ReactNode;\n /** Icon element to show on the right side */\n rightIcon?: React.ReactNode;\n}\n\nconst variantStyles: Record<string, string> = {\n default:\n \"border border-zinc-300 bg-transparent dark:border-zinc-700 dark:bg-transparent\",\n filled:\n \"border border-transparent bg-zinc-100 dark:bg-zinc-800\",\n underline:\n \"border-b border-zinc-300 bg-transparent rounded-none px-0 dark:border-zinc-700\",\n floating:\n \"peer border border-zinc-300 bg-transparent dark:border-zinc-700 dark:bg-transparent\",\n ghost:\n \"border border-transparent bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800 focus-visible:bg-zinc-100 dark:focus-visible:bg-zinc-800\",\n glow:\n \"border border-zinc-300 bg-transparent dark:border-zinc-700 dark:bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:border-violet-500 focus-visible:shadow-[0_0_10px_rgba(139,92,246,0.5),0_0_20px_rgba(139,92,246,0.2)] dark:focus-visible:border-violet-400 dark:focus-visible:shadow-[0_0_10px_rgba(167,139,250,0.5),0_0_20px_rgba(167,139,250,0.2)]\",\n};\n\nconst sizeStyles: Record<NonNullable<InputProps[\"inputSize\"]>, string> = {\n sm: \"h-8 px-2 text-xs\",\n md: \"h-10 px-3 text-sm\",\n lg: \"h-12 px-4 text-base\",\n};\n\nconst iconSizeStyles: Record<NonNullable<InputProps[\"inputSize\"]>, { left: string; right: string; inputLeft: string; inputRight: string }> = {\n sm: { left: \"left-2\", right: \"right-2\", inputLeft: \"pl-7\", inputRight: \"pr-7\" },\n md: { left: \"left-3\", right: \"right-3\", inputLeft: \"pl-9\", inputRight: \"pr-9\" },\n lg: { left: \"left-4\", right: \"right-4\", inputLeft: \"pl-11\", inputRight: \"pr-11\" },\n};\n\nconst floatingSizeStyles: Record<NonNullable<InputProps[\"inputSize\"]>, {\n input: string;\n label: string;\n floated: string;\n resting: string;\n}> = {\n sm: {\n input: \"h-10 pt-4 pb-1 px-3 text-xs\",\n label: \"text-xs left-3\",\n floated: \"top-1 text-[10px]\",\n resting: \"top-1/2 -translate-y-1/2 text-xs\",\n },\n md: {\n input: \"h-12 pt-5 pb-2 px-3 text-sm\",\n label: \"text-sm left-3\",\n floated: \"top-1.5 text-[11px]\",\n resting: \"top-1/2 -translate-y-1/2 text-sm\",\n },\n lg: {\n input: \"h-14 pt-6 pb-2 px-4 text-base\",\n label: \"text-base left-4\",\n floated: \"top-2 text-xs\",\n resting: \"top-1/2 -translate-y-1/2 text-base\",\n },\n};\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n variant = \"default\",\n inputSize = \"md\",\n error,\n label,\n labelClassName,\n wrapperClassName,\n leftIcon,\n rightIcon,\n id,\n onChange,\n onFocus,\n onBlur,\n defaultValue,\n value: controlledValue,\n ...props\n },\n ref\n ) => {\n // Floating variant\n if (variant === \"floating\") {\n return (\n <FloatingInputInternal\n ref={ref}\n className={className}\n inputSize={inputSize}\n error={error}\n label={label || \"\"}\n labelClassName={labelClassName}\n wrapperClassName={wrapperClassName}\n id={id}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n defaultValue={defaultValue}\n value={controlledValue}\n {...props}\n />\n );\n }\n\n // With icons — needs a wrapper\n if (leftIcon || rightIcon) {\n const iconSizes = iconSizeStyles[inputSize];\n return (\n <div className={cn(\"relative w-full\", wrapperClassName)}>\n {leftIcon && (\n <span className={cn(\"pointer-events-none absolute top-1/2 -translate-y-1/2 text-zinc-400 dark:text-zinc-500\", iconSizes.left)}>\n {leftIcon}\n </span>\n )}\n <input\n ref={ref}\n id={id}\n className={cn(\n \"w-full rounded-md text-zinc-900 placeholder:text-zinc-400 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-zinc-100 dark:placeholder:text-zinc-500\",\n variantStyles[variant],\n sizeStyles[inputSize],\n leftIcon && iconSizes.inputLeft,\n rightIcon && iconSizes.inputRight,\n error && \"border-red-500 focus-visible:ring-red-500 dark:border-red-500\",\n className\n )}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n defaultValue={defaultValue}\n value={controlledValue}\n {...props}\n />\n {rightIcon && (\n <span className={cn(\"pointer-events-none absolute top-1/2 -translate-y-1/2 text-zinc-400 dark:text-zinc-500\", iconSizes.right)}>\n {rightIcon}\n </span>\n )}\n </div>\n );\n }\n\n // Standard input\n return (\n <input\n ref={ref}\n id={id}\n className={cn(\n \"w-full rounded-md text-zinc-900 placeholder:text-zinc-400 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:text-zinc-100 dark:placeholder:text-zinc-500\",\n variantStyles[variant],\n sizeStyles[inputSize],\n error && \"border-red-500 focus-visible:ring-red-500 dark:border-red-500\",\n className\n )}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n defaultValue={defaultValue}\n value={controlledValue}\n {...props}\n />\n );\n }\n);\n\nInput.displayName = \"Input\";\n\n// ── Internal FloatingInput ──\ninterface FloatingInternalProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"placeholder\"> {\n inputSize: NonNullable<InputProps[\"inputSize\"]>;\n error?: boolean;\n label: string;\n labelClassName?: string;\n wrapperClassName?: string;\n}\n\nconst FloatingInputInternal = React.forwardRef<HTMLInputElement, FloatingInternalProps>(\n (\n {\n className, inputSize, error, label, labelClassName, wrapperClassName,\n id, onChange, onFocus, onBlur, defaultValue, value: controlledValue, ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const inputId = id || generatedId;\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() || \"\");\n\n const value = controlledValue !== undefined ? controlledValue.toString() : internalValue;\n const isFloated = focused || value.length > 0;\n const sizes = floatingSizeStyles[inputSize];\n\n return (\n <div className={cn(\"relative w-full\", wrapperClassName)}>\n <input\n ref={ref}\n id={inputId}\n className={cn(\n \"peer w-full rounded-md border border-zinc-300 bg-transparent text-zinc-900 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-transparent dark:text-zinc-100\",\n sizes.input,\n error && \"border-red-500 focus-visible:ring-red-500 dark:border-red-500\",\n className\n )}\n value={controlledValue !== undefined ? controlledValue : undefined}\n defaultValue={controlledValue !== undefined ? undefined : defaultValue}\n onChange={(e) => {\n if (controlledValue === undefined) setInternalValue(e.target.value);\n onChange?.(e);\n }}\n onFocus={(e) => { setFocused(true); onFocus?.(e); }}\n onBlur={(e) => { setFocused(false); onBlur?.(e); }}\n placeholder=\" \"\n {...props}\n />\n <label\n htmlFor={inputId}\n className={cn(\n \"pointer-events-none absolute transition-all duration-200 ease-out\",\n sizes.label,\n isFloated\n ? cn(sizes.floated, focused ? (error ? \"text-red-500\" : \"text-zinc-500 dark:text-zinc-400\") : \"text-zinc-400 dark:text-zinc-500\")\n : cn(sizes.resting, \"text-zinc-400 dark:text-zinc-500\"),\n labelClassName\n )}\n >\n {label}\n </label>\n </div>\n );\n }\n);\n\nFloatingInputInternal.displayName = \"FloatingInputInternal\";\n","import React, { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface PasswordInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n inputSize?: \"sm\" | \"md\" | \"lg\";\n error?: boolean;\n /** Custom class for the wrapper */\n wrapperClassName?: string;\n}\n\nconst sizeStyles = {\n sm: { input: \"h-8 px-2 pr-8 text-xs\", btn: \"right-1.5 h-5 w-5\" },\n md: { input: \"h-10 px-3 pr-10 text-sm\", btn: \"right-2.5 h-5 w-5\" },\n lg: { input: \"h-12 px-4 pr-12 text-base\", btn: \"right-3.5 h-6 w-6\" },\n};\n\nconst EyeIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"h-full w-full\">\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n);\n\nconst EyeOffIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"h-full w-full\">\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n);\n\nexport const PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, inputSize = \"md\", error, wrapperClassName, ...props }, ref) => {\n const [visible, setVisible] = useState(false);\n const sizes = sizeStyles[inputSize];\n\n return (\n <div className={cn(\"relative w-full\", wrapperClassName)}>\n <input\n ref={ref}\n type={visible ? \"text\" : \"password\"}\n className={cn(\n \"w-full rounded-md border border-zinc-300 bg-transparent text-zinc-900 placeholder:text-zinc-400 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-transparent dark:text-zinc-100 dark:placeholder:text-zinc-500\",\n sizes.input,\n error && \"border-red-500 focus-visible:ring-red-500 dark:border-red-500\",\n className\n )}\n {...props}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => setVisible((v) => !v)}\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 text-zinc-400 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300 transition-colors\",\n sizes.btn\n )}\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n >\n {visible ? <EyeOffIcon /> : <EyeIcon />}\n </button>\n </div>\n );\n }\n);\n\nPasswordInput.displayName = \"PasswordInput\";\n","import React, { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SearchInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n inputSize?: \"sm\" | \"md\" | \"lg\";\n /** Callback when clear button is clicked */\n onClear?: () => void;\n /** Custom class for the wrapper */\n wrapperClassName?: string;\n}\n\nconst sizeStyles = {\n sm: { input: \"h-8 pl-7 pr-7 text-xs\", iconL: \"left-2 h-3.5 w-3.5\", iconR: \"right-1.5 h-3.5 w-3.5\" },\n md: { input: \"h-10 pl-9 pr-9 text-sm\", iconL: \"left-3 h-4 w-4\", iconR: \"right-2.5 h-4 w-4\" },\n lg: { input: \"h-12 pl-11 pr-11 text-base\", iconL: \"left-4 h-5 w-5\", iconR: \"right-3.5 h-5 w-5\" },\n};\n\nconst SearchIcon = ({ className }: { className?: string }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n);\n\nconst XIcon = ({ className }: { className?: string }) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n);\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n ({ className, inputSize = \"md\", onClear, wrapperClassName, onChange, value: controlledValue, defaultValue, ...props }, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() || \"\");\n const value = controlledValue !== undefined ? controlledValue.toString() : internalValue;\n const sizes = sizeStyles[inputSize];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (controlledValue === undefined) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleClear = () => {\n if (controlledValue === undefined) setInternalValue(\"\");\n onClear?.();\n };\n\n return (\n <div className={cn(\"relative w-full\", wrapperClassName)}>\n <span className={cn(\"pointer-events-none absolute top-1/2 -translate-y-1/2 text-zinc-400 dark:text-zinc-500\", sizes.iconL)}>\n <SearchIcon className=\"h-full w-full\" />\n </span>\n <input\n ref={ref}\n type=\"search\"\n className={cn(\n \"w-full rounded-md border border-zinc-300 bg-transparent text-zinc-900 placeholder:text-zinc-400 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-transparent dark:text-zinc-100 dark:placeholder:text-zinc-500 [&::-webkit-search-cancel-button]:hidden\",\n sizes.input,\n className\n )}\n value={controlledValue !== undefined ? controlledValue : undefined}\n defaultValue={controlledValue !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n {...props}\n />\n {value.length > 0 && (\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={handleClear}\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 text-zinc-400 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300 transition-colors\",\n sizes.iconR\n )}\n aria-label=\"Clear search\"\n >\n <XIcon className=\"h-full w-full\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nSearchInput.displayName = \"SearchInput\";\n","import React, { useRef, useState, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface OTPInputProps {\n /** Number of OTP digits */\n length?: number;\n /** Callback with the full OTP string */\n onComplete?: (otp: string) => void;\n /** Callback on value change */\n onChange?: (otp: string) => void;\n /** Size of each digit box */\n inputSize?: \"sm\" | \"md\" | \"lg\";\n /** Show error state */\n error?: boolean;\n /** Disable all inputs */\n disabled?: boolean;\n /** Custom class for each digit input */\n className?: string;\n /** Custom class for the wrapper */\n wrapperClassName?: string;\n /** Separator between groups (e.g. show dash after 3rd digit for 6-digit OTP) */\n separatorAfter?: number[];\n}\n\nconst sizeStyles = {\n sm: \"h-8 w-8 text-sm\",\n md: \"h-10 w-10 text-lg\",\n lg: \"h-12 w-12 text-xl\",\n};\n\nexport const OTPInput: React.FC<OTPInputProps> = ({\n length = 6,\n onComplete,\n onChange,\n inputSize = \"md\",\n error = false,\n disabled = false,\n className,\n wrapperClassName,\n separatorAfter,\n}) => {\n const [values, setValues] = useState<string[]>(Array(length).fill(\"\"));\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n const focusInput = useCallback((index: number) => {\n if (index >= 0 && index < length) {\n inputRefs.current[index]?.focus();\n }\n }, [length]);\n\n const updateValues = useCallback(\n (newValues: string[]) => {\n setValues(newValues);\n const otp = newValues.join(\"\");\n onChange?.(otp);\n if (otp.length === length && newValues.every((v) => v !== \"\")) {\n onComplete?.(otp);\n }\n },\n [length, onChange, onComplete]\n );\n\n const handleChange = (index: number, e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n if (!/^\\d*$/.test(val)) return;\n\n const digit = val.slice(-1);\n const newValues = [...values];\n newValues[index] = digit;\n updateValues(newValues);\n\n if (digit && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Backspace\") {\n e.preventDefault();\n const newValues = [...values];\n if (values[index]) {\n newValues[index] = \"\";\n updateValues(newValues);\n } else if (index > 0) {\n newValues[index - 1] = \"\";\n updateValues(newValues);\n focusInput(index - 1);\n }\n } else if (e.key === \"ArrowLeft\") {\n focusInput(index - 1);\n } else if (e.key === \"ArrowRight\") {\n focusInput(index + 1);\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, length);\n if (!pasted) return;\n\n const newValues = [...values];\n for (let i = 0; i < pasted.length; i++) {\n newValues[i] = pasted[i];\n }\n updateValues(newValues);\n focusInput(Math.min(pasted.length, length - 1));\n };\n\n const separatorSet = new Set(separatorAfter || []);\n\n return (\n <div className={cn(\"flex items-center gap-2\", wrapperClassName)}>\n {values.map((val, i) => (\n <React.Fragment key={i}>\n <input\n ref={(el) => { inputRefs.current[i] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n value={val}\n disabled={disabled}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={i === 0 ? handlePaste : undefined}\n onFocus={(e) => e.target.select()}\n className={cn(\n \"rounded-md border border-zinc-300 bg-transparent text-center font-mono text-zinc-900 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-transparent dark:text-zinc-100\",\n sizeStyles[inputSize],\n error && \"border-red-500 focus-visible:ring-red-500 dark:border-red-500\",\n className\n )}\n aria-label={`Digit ${i + 1}`}\n />\n {separatorSet.has(i) && (\n <span className=\"text-zinc-400 dark:text-zinc-500 text-lg font-bold select-none\">-</span>\n )}\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nOTPInput.displayName = \"OTPInput\";\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n required?: boolean;\n}\n\nconst sizeStyles: Record<NonNullable<LabelProps[\"size\"]>, string> = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n};\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, size = \"md\", required, children, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={cn(\n \"font-medium text-zinc-900 dark:text-zinc-100 leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n sizeStyles[size],\n className\n )}\n {...props}\n >\n {children}\n {required && (\n <span className=\"ml-1 text-red-500\">*</span>\n )}\n </label>\n );\n }\n);\n\nLabel.displayName = \"Label\";\n","import React, { useState, useEffect, useCallback, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TypewriterTextProps {\n /** Array of strings to type through */\n words: string[];\n /** Typing speed in ms per character */\n typeSpeed?: number;\n /** Deleting speed in ms per character */\n deleteSpeed?: number;\n /** Pause before deleting in ms */\n pauseDuration?: number;\n /** Loop the animation */\n loop?: boolean;\n /** Show blinking cursor */\n cursor?: boolean;\n /** Cursor character */\n cursorChar?: string;\n /** Custom class for the text */\n className?: string;\n /** Custom class for the cursor */\n cursorClassName?: string;\n /** HTML tag to render */\n as?: React.ElementType;\n}\n\nexport const TypewriterText: React.FC<TypewriterTextProps> = ({\n words,\n typeSpeed = 80,\n deleteSpeed = 50,\n pauseDuration = 1500,\n loop = true,\n cursor = true,\n cursorChar = \"|\",\n className,\n cursorClassName,\n as: Tag = \"span\",\n}) => {\n const [text, setText] = useState(\"\");\n const [wordIndex, setWordIndex] = useState(0);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Find the longest word to reserve space and prevent layout shifts\n const longestWord = useMemo(\n () => words.reduce((a, b) => (a.length >= b.length ? a : b), \"\"),\n [words]\n );\n\n const tick = useCallback(() => {\n const currentWord = words[wordIndex] || \"\";\n\n if (isDeleting) {\n setText(currentWord.substring(0, text.length - 1));\n } else {\n setText(currentWord.substring(0, text.length + 1));\n }\n }, [text, wordIndex, isDeleting, words]);\n\n useEffect(() => {\n const currentWord = words[wordIndex] || \"\";\n\n if (!isDeleting && text === currentWord) {\n if (!loop && wordIndex === words.length - 1) return;\n const timeout = setTimeout(() => setIsDeleting(true), pauseDuration);\n return () => clearTimeout(timeout);\n }\n\n if (isDeleting && text === \"\") {\n setIsDeleting(false);\n setWordIndex((prev) => (prev + 1) % words.length);\n return;\n }\n\n const speed = isDeleting ? deleteSpeed : typeSpeed;\n const timeout = setTimeout(tick, speed);\n return () => clearTimeout(timeout);\n }, [text, isDeleting, wordIndex, words, typeSpeed, deleteSpeed, pauseDuration, loop, tick]);\n\n return (\n <Tag className={cn(\"inline-grid\", className)}>\n {/* Invisible longest word to hold the width */}\n <span className=\"invisible col-start-1 row-start-1 whitespace-pre\" aria-hidden=\"true\">\n {longestWord}\n </span>\n {/* Visible typed text on top */}\n <span className=\"col-start-1 row-start-1 whitespace-pre\">\n {text}\n {cursor && (\n <span\n className={cn(\n \"inline-block w-[2px] h-[1em] align-middle ml-0.5 animate-[uixy-blink_1s_step-end_infinite] bg-current\",\n cursorClassName\n )}\n />\n )}\n </span>\n <style>{`\n @keyframes uixy-blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n }\n `}</style>\n </Tag>\n );\n};\n\nTypewriterText.displayName = \"TypewriterText\";\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface GradientTextProps {\n children: React.ReactNode;\n /** Animate the gradient */\n animate?: boolean;\n /** Animation speed in seconds */\n speed?: number;\n /** Gradient colors — Tailwind from/via/to classes or custom style */\n colors?: string;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const GradientText: React.FC<GradientTextProps> = ({\n children,\n animate = true,\n speed = 3,\n colors = \"from-violet-500 via-pink-500 to-indigo-500\",\n as: Tag = \"span\",\n className,\n}) => {\n return (\n <Tag\n className={cn(\n \"inline-block bg-clip-text text-transparent bg-gradient-to-r\",\n colors,\n animate && \"bg-[length:200%_auto]\",\n className\n )}\n style={\n animate\n ? {\n animation: `uixy-gradient ${speed}s linear infinite`,\n }\n : undefined\n }\n >\n <style>{`\n @keyframes uixy-gradient {\n 0% { background-position: 0% center; }\n 100% { background-position: 200% center; }\n }\n `}</style>\n {children}\n </Tag>\n );\n};\n\nGradientText.displayName = \"GradientText\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface GlitchTextProps {\n children: string;\n /** Animation speed in seconds */\n speed?: number;\n /** Glitch intensity (1-10) */\n intensity?: number;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nlet glitchCounter = 0;\n\nexport const GlitchText: React.FC<GlitchTextProps> = ({\n children,\n speed = 3,\n intensity = 5,\n as: Tag = \"span\",\n className,\n}) => {\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const idRef = useRef(`uixy-g-${++glitchCounter}`);\n const id = idRef.current;\n const offset = Math.max(1, Math.min(intensity, 10));\n\n useEffect(() => {\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = `\n .${id} { position: relative; display: inline-block; }\n .${id}::before, .${id}::after {\n content: \"${children.replace(/\"/g, '\\\\\"')}\";\n position: absolute; inset: 0; opacity: 0.8;\n }\n .${id}::before {\n color: #0ff; z-index: -1;\n animation: ${id}-a ${speed}s infinite;\n }\n .${id}::after {\n color: #f0f; z-index: -1;\n animation: ${id}-b ${speed}s infinite;\n }\n @keyframes ${id}-a {\n 0%, 15%, 40%, 46%, 80%, 86%, 100% { transform: translate(0); clip-path: inset(0 0 100% 0); }\n 5% { transform: translate(${offset}px, 0); clip-path: inset(10% 0 70% 0); }\n 10% { transform: translate(-${offset}px, 0); clip-path: inset(50% 0 10% 0); }\n 42% { transform: translate(${offset * 0.6}px, 0); clip-path: inset(20% 0 50% 0); }\n 44% { transform: translate(-${offset * 0.8}px, 0); clip-path: inset(60% 0 5% 0); }\n 82% { transform: translate(-${offset * 0.5}px, 0); clip-path: inset(5% 0 80% 0); }\n 84% { transform: translate(${offset}px, 0); clip-path: inset(40% 0 20% 0); }\n }\n @keyframes ${id}-b {\n 0%, 15%, 50%, 56%, 85%, 91%, 100% { transform: translate(0); clip-path: inset(0 0 100% 0); }\n 5% { transform: translate(-${offset}px, 0); clip-path: inset(30% 0 40% 0); }\n 10% { transform: translate(${offset}px, 0); clip-path: inset(70% 0 0% 0); }\n 52% { transform: translate(-${offset * 0.7}px, 0); clip-path: inset(15% 0 60% 0); }\n 54% { transform: translate(${offset * 0.5}px, 0); clip-path: inset(75% 0 0% 0); }\n 87% { transform: translate(${offset * 0.8}px, 0); clip-path: inset(0% 0 85% 0); }\n 89% { transform: translate(-${offset * 0.6}px, 0); clip-path: inset(55% 0 15% 0); }\n }\n `;\n document.head.appendChild(styleEl);\n return () => { document.head.removeChild(styleEl); };\n }, [children, speed, offset, id]);\n\n return (\n <Tag ref={wrapperRef} className={cn(\"relative inline-block\", className)}>\n <span className={id}>{children}</span>\n </Tag>\n );\n};\n\nGlitchText.displayName = \"GlitchText\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet shimmerStyleInjected = false;\n\nexport interface ShimmerTextProps {\n children: React.ReactNode;\n /** Animation speed in seconds */\n speed?: number;\n /** Shimmer color */\n shimmerColor?: string;\n /** Base text color */\n baseColor?: string;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const ShimmerText: React.FC<ShimmerTextProps> = ({\n children,\n speed = 2,\n shimmerColor = \"rgba(255,255,255,0.8)\",\n baseColor = \"rgba(255,255,255,0.4)\",\n as: Tag = \"span\",\n className,\n}) => {\n const ref = useRef<HTMLElement>(null);\n\n useEffect(() => {\n if (!shimmerStyleInjected) {\n shimmerStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-shimmer {\n 0% { background-position: 200% center; }\n 100% { background-position: -200% center; }\n }\n .uixy-shimmer-text {\n -webkit-background-clip: text !important;\n background-clip: text !important;\n -webkit-text-fill-color: transparent !important;\n color: transparent !important;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n return (\n <Tag\n ref={ref}\n className={cn(\"uixy-shimmer-text inline-block\", className)}\n style={{\n backgroundImage: `linear-gradient(90deg, ${baseColor} 0%, ${baseColor} 35%, ${shimmerColor} 50%, ${baseColor} 65%, ${baseColor} 100%)`,\n backgroundSize: \"200% 100%\",\n animation: `uixy-shimmer ${speed}s linear infinite`,\n }}\n >\n {children}\n </Tag>\n );\n};\n\nShimmerText.displayName = \"ShimmerText\";\n","import React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface WaveTextProps {\n children: string;\n /** Delay between each letter in ms */\n delay?: number;\n /** Animation duration in seconds */\n duration?: number;\n /** Wave height in px */\n height?: number;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const WaveText: React.FC<WaveTextProps> = ({\n children,\n delay = 80,\n duration = 1,\n height = 12,\n as: Tag = \"span\",\n className,\n}) => {\n const letters = children.split(\"\");\n\n return (\n <Tag className={cn(\"inline-flex\", className)}>\n <style>{`\n @keyframes uixy-wave {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-${height}px); }\n }\n `}</style>\n {letters.map((letter, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n animation: `uixy-wave ${duration}s ease-in-out infinite`,\n animationDelay: `${i * delay}ms`,\n whiteSpace: letter === \" \" ? \"pre\" : undefined,\n }}\n >\n {letter === \" \" ? \"\\u00A0\" : letter}\n </span>\n ))}\n </Tag>\n );\n};\n\nWaveText.displayName = \"WaveText\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BlurTextProps {\n children: string;\n /** Animate per word or per letter */\n mode?: \"word\" | \"letter\";\n /** Delay between each unit in ms */\n delay?: number;\n /** Animation duration in ms */\n duration?: number;\n /** Trigger on scroll into view */\n triggerOnView?: boolean;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const BlurText: React.FC<BlurTextProps> = ({\n children,\n mode = \"word\",\n delay = 100,\n duration = 500,\n triggerOnView = true,\n as: Tag = \"span\",\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(!triggerOnView);\n\n useEffect(() => {\n if (!triggerOnView) {\n // Small delay so the initial hidden state renders first\n const t = setTimeout(() => setVisible(true), 50);\n return () => clearTimeout(t);\n }\n\n const el = containerRef.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n observer.disconnect();\n }\n },\n { threshold: 0.1 }\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [triggerOnView]);\n\n const units =\n mode === \"word\"\n ? children.split(\" \").map((w, i, arr) => (i < arr.length - 1 ? w + \" \" : w))\n : children.split(\"\");\n\n return (\n <div ref={containerRef} className=\"inline\">\n <Tag className={cn(\"inline\", className)}>\n {units.map((unit, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n transition: `opacity ${duration}ms ease, filter ${duration}ms ease, transform ${duration}ms ease`,\n transitionDelay: visible ? `${i * delay}ms` : \"0ms\",\n opacity: visible ? 1 : 0,\n filter: visible ? \"blur(0px)\" : \"blur(10px)\",\n transform: visible ? \"translateY(0)\" : \"translateY(12px)\",\n whiteSpace: \"pre\",\n }}\n >\n {unit}\n </span>\n ))}\n </Tag>\n </div>\n );\n};\n\nBlurText.displayName = \"BlurText\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CounterTextProps {\n /** Target number to count to */\n target: number;\n /** Starting number */\n from?: number;\n /** Duration of animation in ms */\n duration?: number;\n /** Decimal places */\n decimals?: number;\n /** Prefix (e.g. \"$\") */\n prefix?: string;\n /** Suffix (e.g. \"%\", \"+\") */\n suffix?: string;\n /** Separator for thousands */\n separator?: string;\n /** Trigger on scroll into view */\n triggerOnView?: boolean;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nfunction easeOutQuart(t: number): number {\n return 1 - Math.pow(1 - t, 4);\n}\n\nexport const CounterText: React.FC<CounterTextProps> = ({\n target,\n from = 0,\n duration = 2000,\n decimals = 0,\n prefix = \"\",\n suffix = \"\",\n separator = \",\",\n triggerOnView = true,\n as: Tag = \"span\",\n className,\n}) => {\n const ref = useRef<HTMLElement>(null);\n const [value, setValue] = useState(from);\n const [started, setStarted] = useState(!triggerOnView);\n\n useEffect(() => {\n if (!triggerOnView) return;\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setStarted(true);\n observer.disconnect();\n }\n },\n { threshold: 0.2 }\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [triggerOnView]);\n\n useEffect(() => {\n if (!started) return;\n\n const startTime = performance.now();\n let rafId: number;\n\n const animate = (now: number) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutQuart(progress);\n const current = from + (target - from) * eased;\n\n setValue(current);\n\n if (progress < 1) {\n rafId = requestAnimationFrame(animate);\n }\n };\n\n rafId = requestAnimationFrame(animate);\n return () => cancelAnimationFrame(rafId);\n }, [started, from, target, duration]);\n\n const formatNumber = (num: number): string => {\n const fixed = num.toFixed(decimals);\n if (!separator) return fixed;\n\n const [int, dec] = fixed.split(\".\");\n const formatted = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n return dec !== undefined ? `${formatted}.${dec}` : formatted;\n };\n\n return (\n <Tag ref={ref} className={cn(\"tabular-nums\", className)}>\n {prefix}\n {formatNumber(value)}\n {suffix}\n </Tag>\n );\n};\n\nCounterText.displayName = \"CounterText\";\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet mediaTextStyleInjected = false;\n\nexport interface MediaTextProps {\n /** Text content */\n children: string;\n /** Image URL to fill the text */\n src?: string;\n /** Video URL to fill the text */\n videoSrc?: string;\n /** Background size for image mode */\n backgroundSize?: string;\n /** Background position for image mode */\n backgroundPosition?: string;\n /** Whether video should loop */\n loop?: boolean;\n /** Whether video should be muted */\n muted?: boolean;\n /** HTML tag for text */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const MediaText: React.FC<MediaTextProps> = ({\n children,\n src,\n videoSrc,\n backgroundSize = \"cover\",\n backgroundPosition = \"center\",\n loop = true,\n muted = true,\n as: Tag = \"h1\",\n className,\n}) => {\n useEffect(() => {\n if (mediaTextStyleInjected) return;\n mediaTextStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n .uixy-media-text-clip {\n -webkit-background-clip: text !important;\n background-clip: text !important;\n -webkit-text-fill-color: transparent !important;\n color: transparent !important;\n }\n .uixy-media-text-video-container {\n position: relative;\n display: inline-block;\n overflow: hidden;\n }\n .uixy-media-text-video-container video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n .uixy-media-text-video-overlay {\n position: relative;\n z-index: 1;\n mix-blend-mode: screen;\n background: #000;\n }\n `;\n document.head.appendChild(style);\n }, []);\n\n // Image mode — use background-clip: text\n if (src && !videoSrc) {\n return (\n <Tag\n className={cn(\"uixy-media-text-clip inline-block\", className)}\n style={{\n backgroundImage: `url(${src})`,\n backgroundSize,\n backgroundPosition,\n backgroundRepeat: \"no-repeat\",\n }}\n >\n {children}\n </Tag>\n );\n }\n\n // Video mode — use mix-blend-mode trick\n if (videoSrc) {\n return (\n <span className=\"uixy-media-text-video-container\">\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n <video\n src={videoSrc}\n autoPlay\n loop={loop}\n muted={muted}\n playsInline\n preload=\"auto\"\n />\n <Tag\n className={cn(\"uixy-media-text-video-overlay whitespace-nowrap\", className)}\n >\n {children}\n </Tag>\n </span>\n );\n }\n\n // Fallback — no media\n return (\n <Tag className={cn(\"inline-block\", className)}>\n {children}\n </Tag>\n );\n};\n\nMediaText.displayName = \"MediaText\";\n","\"use client\";\n\nimport React, { useEffect, useRef, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet sparklesStyleInjected = false;\n\nexport interface SparklesTextProps {\n children: string;\n /** Color of sparkles */\n sparkleColor?: string;\n /** Number of sparkles visible at once */\n count?: number;\n /** Min size of sparkles in px */\n minSize?: number;\n /** Max size of sparkles in px */\n maxSize?: number;\n /** Speed — lower = faster new sparkles (ms) */\n speed?: number;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const SparklesText: React.FC<SparklesTextProps> = ({\n children,\n sparkleColor = \"#FFC700\",\n count = 12,\n minSize = 4,\n maxSize = 14,\n speed = 450,\n as: Tag = \"span\",\n className,\n}) => {\n const containerRef = useRef<HTMLSpanElement>(null);\n\n const injectStyles = useCallback(() => {\n if (sparklesStyleInjected) return;\n sparklesStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-sparkle-life {\n 0% { transform: scale(0) rotate(0deg); opacity: 0; }\n 20% { transform: scale(0.6) rotate(60deg); opacity: 0.8; }\n 50% { transform: scale(1) rotate(140deg); opacity: 1; }\n 80% { transform: scale(0.6) rotate(240deg); opacity: 0.8; }\n 100% { transform: scale(0) rotate(360deg); opacity: 0; }\n }\n `;\n document.head.appendChild(style);\n }, []);\n\n useEffect(() => {\n injectStyles();\n const container = containerRef.current;\n if (!container) return;\n\n const createSparkleSVG = () => {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n const size = minSize + Math.random() * (maxSize - minSize);\n const duration = 1.2 + Math.random() * 1.2;\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", sparkleColor);\n svg.innerHTML = `<path d=\"M12 0L14.59 8.41L23 12L14.59 15.59L12 24L9.41 15.59L1 12L9.41 8.41Z\"/>`;\n Object.assign(svg.style, {\n position: \"absolute\",\n left: `${Math.random() * 100}%`,\n top: `${Math.random() * 100}%`,\n width: `${size}px`,\n height: `${size}px`,\n pointerEvents: \"none\",\n animation: `uixy-sparkle-life ${duration}s ease-in-out forwards`,\n zIndex: \"1\",\n });\n container.appendChild(svg);\n // Remove after animation finishes\n setTimeout(() => {\n if (svg.parentNode === container) {\n container.removeChild(svg);\n }\n }, duration * 1000);\n };\n\n // Stagger initial burst\n for (let i = 0; i < count; i++) {\n setTimeout(() => createSparkleSVG(), Math.random() * speed * 2);\n }\n\n // Continuously spawn new sparkles\n const interval = setInterval(() => {\n createSparkleSVG();\n }, speed);\n\n return () => {\n clearInterval(interval);\n // Clean up any remaining SVGs\n const svgs = container.querySelectorAll(\"svg\");\n svgs.forEach((s) => s.remove());\n };\n }, [sparkleColor, count, minSize, maxSize, speed, injectStyles]);\n\n return (\n <Tag ref={containerRef} className={cn(\"relative inline-block\", className)}>\n <span className=\"relative z-[2]\">{children}</span>\n </Tag>\n );\n};\n\nSparklesText.displayName = \"SparklesText\";\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet highlightStyleInjected = false;\n\nexport type HighlightVariant =\n | \"marker\"\n | \"underline\"\n | \"box\"\n | \"strikethrough\"\n | \"gradient\"\n | \"glow\"\n | \"bracket\";\n\nexport interface HighlightTextProps {\n children: string;\n /** Highlight style variant */\n variant?: HighlightVariant;\n /** Primary highlight color */\n color?: string;\n /** Second color (for gradient variant) */\n colorTo?: string;\n /** Animation duration in ms */\n duration?: number;\n /** Delay before animation starts in ms */\n delay?: number;\n /** Whether to trigger when scrolled into view */\n triggerOnView?: boolean;\n /** HTML tag */\n as?: React.ElementType;\n className?: string;\n}\n\nexport const HighlightText: React.FC<HighlightTextProps> = ({\n children,\n variant = \"marker\",\n color = \"rgba(139, 92, 246, 0.35)\",\n colorTo,\n duration = 800,\n delay = 0,\n triggerOnView = true,\n as: Tag = \"span\",\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n if (!highlightStyleInjected) {\n highlightStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n /* ── marker ── */\n .uixy-hl-marker {\n background-size: 0% 100%;\n background-repeat: no-repeat;\n background-position: left center;\n padding: 0.05em 0.15em;\n margin: -0.05em -0.15em;\n border-radius: 0.15em;\n }\n .uixy-hl-marker.uixy-hl-on { background-size: 100% 100%; }\n\n /* ── underline ── */\n .uixy-hl-underline {\n background-size: 0% 3px;\n background-repeat: no-repeat;\n background-position: left bottom;\n padding-bottom: 4px;\n }\n .uixy-hl-underline.uixy-hl-on { background-size: 100% 3px; }\n\n /* ── box ── */\n .uixy-hl-box {\n border: 2px solid transparent;\n border-radius: 4px;\n padding: 0.05em 0.25em;\n margin: -0.05em -0.25em;\n }\n .uixy-hl-box.uixy-hl-on { border-color: var(--uixy-hl-c); }\n\n /* ── strikethrough ── */\n .uixy-hl-strikethrough {\n position: relative;\n }\n .uixy-hl-strikethrough::after {\n content: '';\n position: absolute;\n left: 0;\n top: 50%;\n height: 2.5px;\n background: var(--uixy-hl-c);\n width: 0%;\n transition: width var(--uixy-hl-dur) cubic-bezier(0.25, 0.1, 0.25, 1);\n border-radius: 2px;\n }\n .uixy-hl-strikethrough.uixy-hl-on::after { width: 100%; }\n\n /* ── gradient ── */\n .uixy-hl-gradient {\n background-size: 0% 100%;\n background-repeat: no-repeat;\n background-position: left center;\n padding: 0.05em 0.15em;\n margin: -0.05em -0.15em;\n border-radius: 0.15em;\n }\n .uixy-hl-gradient.uixy-hl-on { background-size: 100% 100%; }\n\n /* ── glow ── */\n .uixy-hl-glow {\n text-shadow: none;\n transition: text-shadow var(--uixy-hl-dur) ease;\n }\n .uixy-hl-glow.uixy-hl-on {\n text-shadow:\n 0 0 8px var(--uixy-hl-c),\n 0 0 20px var(--uixy-hl-c),\n 0 0 40px var(--uixy-hl-c);\n }\n\n /* ── bracket ── */\n .uixy-hl-bracket {\n position: relative;\n padding: 0 0.3em;\n margin: 0 -0.3em;\n }\n .uixy-hl-bracket::before,\n .uixy-hl-bracket::after {\n position: absolute;\n top: -2px;\n bottom: -2px;\n width: 6px;\n border: 2px solid transparent;\n transition: border-color var(--uixy-hl-dur) ease;\n content: '';\n }\n .uixy-hl-bracket::before {\n left: 0;\n border-right: none;\n border-radius: 3px 0 0 3px;\n }\n .uixy-hl-bracket::after {\n right: 0;\n border-left: none;\n border-radius: 0 3px 3px 0;\n }\n .uixy-hl-bracket.uixy-hl-on::before,\n .uixy-hl-bracket.uixy-hl-on::after {\n border-color: var(--uixy-hl-c);\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n useEffect(() => {\n if (!triggerOnView) {\n const timer = setTimeout(() => setActive(true), Math.max(delay, 50));\n return () => clearTimeout(timer);\n }\n\n const el = containerRef.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setTimeout(() => setActive(true), delay);\n observer.disconnect();\n }\n },\n { threshold: 0.5 }\n );\n observer.observe(el);\n return () => observer.disconnect();\n }, [triggerOnView, delay]);\n\n // Build the background-image for marker/underline/gradient\n const gradientBg =\n variant === \"gradient\" && colorTo\n ? `linear-gradient(120deg, ${color}, ${colorTo})`\n : `linear-gradient(${color}, ${color})`;\n\n const transitionProp =\n variant === \"box\"\n ? `border-color ${duration}ms cubic-bezier(0.25,0.1,0.25,1)`\n : variant === \"glow\" || variant === \"bracket\"\n ? undefined\n : `background-size ${duration}ms cubic-bezier(0.25,0.1,0.25,1)`;\n\n return (\n <div ref={containerRef} className=\"inline\">\n <Tag\n className={cn(\n `uixy-hl-${variant}`,\n active && \"uixy-hl-on\",\n className\n )}\n style={{\n ...([\"marker\", \"underline\", \"gradient\"].includes(variant)\n ? { backgroundImage: gradientBg }\n : {}),\n \"--uixy-hl-c\": color,\n \"--uixy-hl-dur\": `${duration}ms`,\n ...(transitionProp ? { transition: transitionProp } : {}),\n } as React.CSSProperties}\n >\n {children}\n </Tag>\n </div>\n );\n};\n\nHighlightText.displayName = \"HighlightText\";\n","\"use client\";\n\nimport React, { forwardRef, useEffect, useRef, useState, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet cardStyleInjected = false;\n\nfunction injectCardStyles() {\n if (cardStyleInjected) return;\n cardStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n /* ── spotlight ── */\n .uixy-card-spotlight {\n --uixy-mx: 50%; --uixy-my: 50%;\n position: relative; overflow: hidden;\n }\n .uixy-card-spotlight::before {\n content:''; position:absolute; inset:0;\n background: radial-gradient(600px circle at var(--uixy-mx) var(--uixy-my), rgba(139,92,246,0.15), transparent 40%);\n opacity:0; transition:opacity .3s; pointer-events:none; z-index:0;\n }\n .uixy-card-spotlight:hover::before { opacity:1; }\n\n /* ── neon ── */\n .uixy-card-neon {\n box-shadow: 0 0 5px var(--uixy-neon, rgba(139,92,246,0.4)),\n 0 0 20px var(--uixy-neon, rgba(139,92,246,0.2)),\n inset 0 0 20px var(--uixy-neon, rgba(139,92,246,0.05));\n transition: box-shadow 0.3s ease;\n }\n .uixy-card-neon:hover {\n box-shadow: 0 0 10px var(--uixy-neon, rgba(139,92,246,0.6)),\n 0 0 40px var(--uixy-neon, rgba(139,92,246,0.3)),\n 0 0 80px var(--uixy-neon, rgba(139,92,246,0.15)),\n inset 0 0 30px var(--uixy-neon, rgba(139,92,246,0.08));\n }\n\n /* ── tilt ── */\n .uixy-card-tilt {\n transition: transform 0.15s ease;\n transform-style: preserve-3d;\n perspective: 1000px;\n }\n\n /* ── animated border ── */\n @keyframes uixy-border-spin {\n to { --uixy-angle: 360deg; }\n }\n @property --uixy-angle { syntax:'<angle>'; initial-value:0deg; inherits:false; }\n .uixy-card-animated-border {\n position:relative; overflow:hidden;\n }\n .uixy-card-animated-border::before {\n content:''; position:absolute; inset:-2px;\n background: conic-gradient(from var(--uixy-angle,0deg), #8b5cf6, #3b82f6, #06b6d4, #8b5cf6);\n animation: uixy-border-spin 3s linear infinite;\n border-radius: inherit;\n z-index: -1;\n }\n .uixy-card-animated-border::after {\n content:''; position:absolute; inset:2px;\n background: rgb(24 24 27);\n border-radius: inherit;\n z-index: -1;\n }\n\n /* ── noise ── */\n .uixy-card-noise { position:relative; overflow:hidden; }\n .uixy-card-noise::before {\n content:''; position:absolute; inset:-50%;\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\");\n background-size: 128px;\n opacity: 0.04;\n pointer-events: none;\n z-index:0;\n }\n\n /* ── lifted ── */\n .uixy-card-lifted {\n transition: transform 0.3s ease, box-shadow 0.3s ease;\n }\n .uixy-card-lifted:hover {\n transform: translateY(-6px);\n box-shadow: 0 20px 40px rgba(0,0,0,0.3), 0 8px 16px rgba(0,0,0,0.2);\n }\n `;\n document.head.appendChild(style);\n}\n\n/* ─────────────── Base Card ─────────────── */\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?:\n | \"default\"\n | \"bordered\"\n | \"elevated\"\n | \"ghost\"\n | \"gradient\"\n | \"glass\"\n | \"spotlight\"\n | \"neon\"\n | \"tilt\"\n | \"animated-border\"\n | \"noise\"\n | \"lifted\";\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ variant = \"default\", className, children, onMouseMove, onMouseLeave, ...props }, ref) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const cardRef = (ref as React.RefObject<HTMLDivElement>) || innerRef;\n\n useEffect(() => { injectCardStyles(); }, []);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const el = (cardRef as React.RefObject<HTMLDivElement>).current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n if (variant === \"spotlight\") {\n el.style.setProperty(\"--uixy-mx\", `${x}px`);\n el.style.setProperty(\"--uixy-my\", `${y}px`);\n }\n\n if (variant === \"tilt\") {\n const cx = rect.width / 2;\n const cy = rect.height / 2;\n const rotateX = ((y - cy) / cy) * -8;\n const rotateY = ((x - cx) / cx) * 8;\n el.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(1.02)`;\n }\n\n onMouseMove?.(e);\n },\n [variant, onMouseMove, cardRef]\n );\n\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (variant === \"tilt\") {\n const el = (cardRef as React.RefObject<HTMLDivElement>).current;\n if (el) el.style.transform = \"perspective(1000px) rotateX(0) rotateY(0) scale(1)\";\n }\n onMouseLeave?.(e);\n },\n [variant, onMouseLeave, cardRef]\n );\n\n const base = \"rounded-xl p-6\";\n const variants: Record<string, string> = {\n default: `${base} border border-zinc-800 bg-zinc-900`,\n bordered: `${base} border-2 border-zinc-600 bg-zinc-900/50`,\n elevated: `${base} bg-zinc-900 shadow-xl shadow-black/30`,\n ghost: `${base} hover:bg-zinc-900/50 transition-colors`,\n gradient: `${base} border border-zinc-800 bg-gradient-to-br from-violet-950/40 via-zinc-900 to-cyan-950/30`,\n glass: `${base} border border-white/10 bg-white/5 backdrop-blur-lg`,\n spotlight: `${base} border border-zinc-800 bg-zinc-900 uixy-card-spotlight`,\n neon: `${base} border border-violet-500/30 bg-zinc-900 uixy-card-neon`,\n tilt: `${base} border border-zinc-800 bg-zinc-900 uixy-card-tilt cursor-pointer`,\n \"animated-border\": `${base} bg-zinc-900 uixy-card-animated-border`,\n noise: `${base} border border-zinc-800 bg-zinc-900 uixy-card-noise`,\n lifted: `${base} border border-zinc-800 bg-zinc-900 uixy-card-lifted cursor-pointer`,\n };\n\n const needsZWrap = variant === \"spotlight\" || variant === \"noise\" || variant === \"animated-border\";\n\n return (\n <div\n ref={cardRef}\n className={cn(variants[variant], className)}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {needsZWrap ? (\n <div className=\"relative z-10\">{children}</div>\n ) : (\n children\n )}\n </div>\n );\n }\n);\nCard.displayName = \"Card\";\n\n/* ─────────────── Card Header ─────────────── */\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"mb-4\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\n/* ─────────────── Card Title ─────────────── */\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-lg font-semibold text-zinc-100\", className)} {...props} />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\n/* ─────────────── Card Description ─────────────── */\n\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nexport const CardDescription = forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-zinc-400 mt-1\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\n/* ─────────────── Card Content ─────────────── */\n\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\n/* ─────────────── Card Footer ─────────────── */\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"mt-4 flex items-center gap-2\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","\"use client\";\n\nimport React, { useEffect, useRef, useCallback } from \"react\";\n\nexport interface ParticleNode {\n /** Text label, emoji, or image URL */\n content: string;\n /** Type of content */\n type?: \"text\" | \"emoji\" | \"image\";\n}\n\nexport interface ParticleBackgroundProps {\n /** Array of items to display as floating particles */\n items: (string | ParticleNode)[];\n /** Max number of particles (auto-limited by screen size) */\n count?: number;\n /** Connection line distance threshold in px */\n connectionDistance?: number;\n /** Show arrowheads on connection lines */\n arrows?: boolean;\n /** Mouse interaction distance */\n mouseDistance?: number;\n /** Base color for text/lines as [r, g, b] */\n color?: [number, number, number];\n /** Particle movement speed multiplier */\n speed?: number;\n /** Base font size range [min, max] in px */\n fontSize?: [number, number];\n /** Image size in px (for image type nodes) */\n imageSize?: number;\n /** Line width */\n lineWidth?: number;\n /** Max particle opacity */\n maxOpacity?: number;\n /** CSS class for the canvas wrapper */\n className?: string;\n}\n\ninterface InternalNode {\n x: number;\n y: number;\n vx: number;\n vy: number;\n content: string;\n type: \"text\" | \"emoji\" | \"image\";\n opacity: number;\n shade: number;\n fontSize: number;\n img?: HTMLImageElement;\n imgLoaded?: boolean;\n}\n\nexport const ParticleBackground: React.FC<ParticleBackgroundProps> = ({\n items,\n count,\n connectionDistance = 180,\n arrows = false,\n mouseDistance = 200,\n color = [110, 120, 220],\n speed = 1,\n fontSize = [13, 18],\n imageSize = 28,\n lineWidth = 0.6,\n maxOpacity = 0.25,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const nodesRef = useRef<InternalNode[]>([]);\n const mouseRef = useRef({ x: -9999, y: -9999 });\n const rafRef = useRef<number>(0);\n\n const normalize = useCallback(\n (item: string | ParticleNode): { content: string; type: \"text\" | \"emoji\" | \"image\" } => {\n if (typeof item === \"string\") {\n // Auto-detect: if it looks like a URL or path to image\n if (/^(https?:\\/\\/|data:image|\\/|\\.\\.?\\/)/.test(item)) {\n return { content: item, type: \"image\" };\n }\n // Auto-detect emoji: single emoji or short emoji sequence\n const emojiRegex = /^[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\u200d\\ufe0f]{1,8}$/u;\n if (emojiRegex.test(item.trim())) {\n return { content: item.trim(), type: \"emoji\" };\n }\n return { content: item, type: \"text\" };\n }\n return { content: item.content, type: item.type || \"text\" };\n },\n []\n );\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const [baseR, baseG, baseB] = color;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n const nodeCount =\n count ?? Math.min(Math.floor((canvas.width * canvas.height) / 22000), 60);\n\n // Create nodes\n const nodes: InternalNode[] = Array.from({ length: nodeCount }, (_, i) => {\n const item = normalize(items[i % items.length]);\n const node: InternalNode = {\n x: Math.random() * canvas.width,\n y: Math.random() * canvas.height,\n vx: (Math.random() - 0.5) * 0.3 * speed,\n vy: (Math.random() - 0.5) * 0.3 * speed,\n content: item.content,\n type: item.type,\n opacity: Math.random() * (maxOpacity - 0.05) + 0.05,\n shade: Math.random(),\n fontSize: fontSize[0] + Math.random() * (fontSize[1] - fontSize[0]),\n };\n\n // Preload images\n if (item.type === \"image\") {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.src = item.content;\n node.img = img;\n node.imgLoaded = false;\n img.onload = () => {\n node.imgLoaded = true;\n };\n }\n\n return node;\n });\n nodesRef.current = nodes;\n\n const onMouse = (e: MouseEvent) => {\n const rect = canvas.getBoundingClientRect();\n mouseRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };\n };\n const onMouseLeave = () => {\n mouseRef.current = { x: -9999, y: -9999 };\n };\n canvas.addEventListener(\"mousemove\", onMouse);\n canvas.addEventListener(\"mouseleave\", onMouseLeave);\n\n const getColor = (shade: number, alpha: number) => {\n const v = 40;\n const r = Math.round(baseR + (shade - 0.5) * v);\n const g = Math.round(baseG + (shade - 0.5) * v);\n const b = Math.round(baseB + (shade - 0.5) * (v * 0.3));\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n };\n\n const drawArrow = (\n fromX: number,\n fromY: number,\n toX: number,\n toY: number,\n color: string\n ) => {\n const headLen = 6;\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n // Draw midpoint arrow\n const mx = (fromX + toX) / 2;\n const my = (fromY + toY) / 2;\n ctx.beginPath();\n ctx.moveTo(\n mx - headLen * Math.cos(angle - Math.PI / 6),\n my - headLen * Math.sin(angle - Math.PI / 6)\n );\n ctx.lineTo(mx, my);\n ctx.lineTo(\n mx - headLen * Math.cos(angle + Math.PI / 6),\n my - headLen * Math.sin(angle + Math.PI / 6)\n );\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.stroke();\n };\n\n const draw = () => {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n const mouse = mouseRef.current;\n\n // Move nodes\n for (const n of nodes) {\n n.x += n.vx;\n n.y += n.vy;\n if (n.x < -50) n.x = canvas.width + 50;\n if (n.x > canvas.width + 50) n.x = -50;\n if (n.y < -30) n.y = canvas.height + 30;\n if (n.y > canvas.height + 30) n.y = -30;\n }\n\n // Lines between nearby nodes\n for (let i = 0; i < nodes.length; i++) {\n for (let j = i + 1; j < nodes.length; j++) {\n const dx = nodes[i].x - nodes[j].x;\n const dy = nodes[i].y - nodes[j].y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < connectionDistance) {\n const avgShade = (nodes[i].shade + nodes[j].shade) / 2;\n const alpha = (1 - dist / connectionDistance) * 0.1;\n const c = getColor(avgShade, alpha);\n ctx.beginPath();\n ctx.moveTo(nodes[i].x, nodes[i].y);\n ctx.lineTo(nodes[j].x, nodes[j].y);\n ctx.strokeStyle = c;\n ctx.lineWidth = lineWidth;\n ctx.stroke();\n\n if (arrows) {\n drawArrow(nodes[i].x, nodes[i].y, nodes[j].x, nodes[j].y, c);\n }\n }\n }\n }\n\n // Mouse interaction lines\n for (const n of nodes) {\n const dx = mouse.x - n.x;\n const dy = mouse.y - n.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < mouseDistance) {\n const alpha = (1 - dist / mouseDistance) * 0.25;\n const c = getColor(n.shade, alpha);\n ctx.beginPath();\n ctx.moveTo(n.x, n.y);\n ctx.lineTo(mouse.x, mouse.y);\n ctx.strokeStyle = c;\n ctx.lineWidth = lineWidth * 1.2;\n ctx.stroke();\n\n if (arrows) {\n drawArrow(n.x, n.y, mouse.x, mouse.y, c);\n }\n }\n }\n\n // Draw nodes\n for (const n of nodes) {\n const dx = mouse.x - n.x;\n const dy = mouse.y - n.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const hoverBoost = dist < mouseDistance ? (1 - dist / mouseDistance) * 0.35 : 0;\n const alpha = Math.min(n.opacity + hoverBoost, 1);\n\n if (n.type === \"image\" && n.img && n.imgLoaded) {\n ctx.globalAlpha = alpha;\n const s = imageSize;\n ctx.drawImage(n.img, n.x - s / 2, n.y - s / 2, s, s);\n ctx.globalAlpha = 1;\n } else if (n.type === \"emoji\") {\n ctx.globalAlpha = alpha;\n ctx.font = `${n.fontSize + 4}px serif`;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(n.content, n.x, n.y);\n ctx.globalAlpha = 1;\n } else {\n // text\n ctx.font = `600 ${n.fontSize}px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillStyle = getColor(n.shade, alpha);\n ctx.fillText(n.content, n.x, n.y);\n }\n }\n\n rafRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n canvas.removeEventListener(\"mousemove\", onMouse);\n canvas.removeEventListener(\"mouseleave\", onMouseLeave);\n };\n }, [items, count, connectionDistance, arrows, mouseDistance, color, speed, fontSize, imageSize, lineWidth, maxOpacity, normalize]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\" }}\n />\n );\n};\n\nParticleBackground.displayName = \"ParticleBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface AuroraBackgroundProps {\n /** Colors as CSS color strings */\n colors?: string[];\n /** Animation speed multiplier */\n speed?: number;\n /** Blur intensity in px */\n blur?: number;\n /** Opacity of the aurora layer (0-1) */\n opacity?: number;\n className?: string;\n}\n\nexport const AuroraBackground: React.FC<AuroraBackgroundProps> = ({\n colors = [\"#8b5cf6\", \"#3b82f6\", \"#06b6d4\", \"#8b5cf6\"],\n speed = 1,\n blur = 120,\n opacity = 0.3,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n let t = 0;\n\n // Parse colors to RGB\n const parseColor = (c: string): [number, number, number] => {\n const tmp = document.createElement(\"div\");\n tmp.style.color = c;\n document.body.appendChild(tmp);\n const computed = getComputedStyle(tmp).color;\n document.body.removeChild(tmp);\n const m = computed.match(/\\d+/g);\n return m ? [+m[0], +m[1], +m[2]] : [139, 92, 246];\n };\n\n const rgbColors = colors.map(parseColor);\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n ctx.clearRect(0, 0, w, h);\n\n const blobCount = rgbColors.length;\n\n for (let i = 0; i < blobCount; i++) {\n const phase = (i / blobCount) * Math.PI * 2;\n const x = w * 0.5 + Math.sin(t * 0.3 * speed + phase) * w * 0.35;\n const y = h * 0.4 + Math.cos(t * 0.2 * speed + phase * 1.3) * h * 0.25;\n const radius = Math.max(w, h) * (0.3 + Math.sin(t * 0.15 * speed + i) * 0.1);\n\n const [r, g, b] = rgbColors[i % rgbColors.length];\n const grad = ctx.createRadialGradient(x, y, 0, x, y, radius);\n grad.addColorStop(0, `rgba(${r}, ${g}, ${b}, ${opacity})`);\n grad.addColorStop(1, `rgba(${r}, ${g}, ${b}, 0)`);\n\n ctx.fillStyle = grad;\n ctx.fillRect(0, 0, w, h);\n }\n\n t += 0.016;\n rafRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [colors, speed, blur, opacity]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\", filter: `blur(${blur}px)` }}\n />\n );\n};\n\nAuroraBackground.displayName = \"AuroraBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nlet gridStyleInjected = false;\n\nexport interface GridBackgroundProps {\n /** Grid variant */\n variant?: \"grid\" | \"dots\" | \"cross\";\n /** Grid cell size in px */\n size?: number;\n /** Grid line/dot color */\n color?: string;\n /** Grid line/dot opacity */\n opacity?: number;\n /** Animated radial mask that follows the mouse */\n followMouse?: boolean;\n /** Radial mask radius in px */\n maskRadius?: number;\n className?: string;\n}\n\nexport const GridBackground: React.FC<GridBackgroundProps> = ({\n variant = \"grid\",\n size = 40,\n color = \"rgba(255,255,255,0.08)\",\n opacity = 1,\n followMouse = false,\n maskRadius = 300,\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!gridStyleInjected) {\n gridStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n .uixy-grid-bg {\n --uixy-grid-mx: 50%;\n --uixy-grid-my: 50%;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n useEffect(() => {\n if (!followMouse) return;\n const el = containerRef.current;\n if (!el) return;\n\n const onMove = (e: MouseEvent) => {\n const rect = el.getBoundingClientRect();\n el.style.setProperty(\"--uixy-grid-mx\", `${e.clientX - rect.left}px`);\n el.style.setProperty(\"--uixy-grid-my\", `${e.clientY - rect.top}px`);\n };\n el.addEventListener(\"mousemove\", onMove);\n return () => el.removeEventListener(\"mousemove\", onMove);\n }, [followMouse]);\n\n let bgImage: string;\n if (variant === \"dots\") {\n bgImage = `radial-gradient(circle, ${color} 1px, transparent 1px)`;\n } else if (variant === \"cross\") {\n bgImage = `\n linear-gradient(${color} 1px, transparent 1px),\n linear-gradient(90deg, ${color} 1px, transparent 1px),\n radial-gradient(circle, ${color} 1.5px, transparent 1.5px)\n `;\n } else {\n bgImage = `\n linear-gradient(${color} 1px, transparent 1px),\n linear-gradient(90deg, ${color} 1px, transparent 1px)\n `;\n }\n\n const bgSize =\n variant === \"cross\"\n ? `${size}px ${size}px, ${size}px ${size}px, ${size}px ${size}px`\n : `${size}px ${size}px`;\n\n const maskImage = followMouse\n ? `radial-gradient(circle ${maskRadius}px at var(--uixy-grid-mx) var(--uixy-grid-my), black, transparent)`\n : undefined;\n\n return (\n <div\n ref={containerRef}\n className={`uixy-grid-bg ${className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}`}\n style={{\n backgroundImage: bgImage,\n backgroundSize: bgSize,\n opacity,\n WebkitMaskImage: maskImage,\n maskImage,\n }}\n />\n );\n};\n\nGridBackground.displayName = \"GridBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface StarfieldBackgroundProps {\n /** Number of stars */\n count?: number;\n /** Star speed multiplier */\n speed?: number;\n /** Star color */\n color?: [number, number, number];\n /** Max star size */\n maxSize?: number;\n /** Enable warp speed effect */\n warp?: boolean;\n className?: string;\n}\n\ninterface Star {\n x: number;\n y: number;\n z: number;\n prevX: number;\n prevY: number;\n}\n\nexport const StarfieldBackground: React.FC<StarfieldBackgroundProps> = ({\n count = 300,\n speed = 1,\n color = [200, 200, 255],\n maxSize = 2.5,\n warp = false,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n const stars: Star[] = Array.from({ length: count }, () => ({\n x: (Math.random() - 0.5) * 2000,\n y: (Math.random() - 0.5) * 2000,\n z: Math.random() * 1000,\n prevX: 0,\n prevY: 0,\n }));\n\n const baseSpeed = warp ? 8 : 1.5;\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n const cx = w / 2;\n const cy = h / 2;\n const [r, g, b] = color;\n\n // Fade trail for warp, clear for normal\n if (warp) {\n ctx.fillStyle = \"rgba(0, 0, 0, 0.15)\";\n ctx.fillRect(0, 0, w, h);\n } else {\n ctx.clearRect(0, 0, w, h);\n }\n\n for (const star of stars) {\n // Store previous projected position\n const prevZ = star.z + baseSpeed * speed;\n star.prevX = (star.x / prevZ) * 500 + cx;\n star.prevY = (star.y / prevZ) * 500 + cy;\n\n // Move star closer\n star.z -= baseSpeed * speed;\n\n // Reset if too close\n if (star.z <= 1) {\n star.x = (Math.random() - 0.5) * 2000;\n star.y = (Math.random() - 0.5) * 2000;\n star.z = 1000;\n star.prevX = (star.x / star.z) * 500 + cx;\n star.prevY = (star.y / star.z) * 500 + cy;\n continue;\n }\n\n const sx = (star.x / star.z) * 500 + cx;\n const sy = (star.y / star.z) * 500 + cy;\n\n // Skip offscreen\n if (sx < -10 || sx > w + 10 || sy < -10 || sy > h + 10) continue;\n\n const size = Math.max(0.3, (1 - star.z / 1000) * maxSize);\n const alpha = Math.min(1, (1 - star.z / 1000) * 1.5);\n\n if (warp) {\n // Draw streak line\n ctx.beginPath();\n ctx.moveTo(star.prevX, star.prevY);\n ctx.lineTo(sx, sy);\n ctx.strokeStyle = `rgba(${r}, ${g}, ${b}, ${alpha * 0.6})`;\n ctx.lineWidth = size * 0.8;\n ctx.stroke();\n }\n\n // Draw star dot\n ctx.beginPath();\n ctx.arc(sx, sy, size, 0, Math.PI * 2);\n ctx.fillStyle = `rgba(${r}, ${g}, ${b}, ${alpha})`;\n ctx.fill();\n }\n\n rafRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [count, speed, color, maxSize, warp]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\", background: \"black\" }}\n />\n );\n};\n\nStarfieldBackground.displayName = \"StarfieldBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface WaveBackgroundProps {\n /** Wave colors from top to bottom */\n colors?: string[];\n /** Number of wave layers */\n layers?: number;\n /** Animation speed multiplier */\n speed?: number;\n /** Wave amplitude in px */\n amplitude?: number;\n /** Wave frequency */\n frequency?: number;\n className?: string;\n}\n\nexport const WaveBackground: React.FC<WaveBackgroundProps> = ({\n colors = [\"rgba(139,92,246,0.15)\", \"rgba(59,130,246,0.12)\", \"rgba(6,182,212,0.1)\"],\n layers = 3,\n speed = 1,\n amplitude = 40,\n frequency = 0.008,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n let t = 0;\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n ctx.clearRect(0, 0, w, h);\n\n for (let l = 0; l < layers; l++) {\n const color = colors[l % colors.length];\n const yBase = h * (0.5 + l * 0.12);\n const amp = amplitude * (1 - l * 0.15);\n const freq = frequency * (1 + l * 0.3);\n const phaseOffset = l * 1.2;\n\n ctx.beginPath();\n ctx.moveTo(0, h);\n\n for (let x = 0; x <= w; x += 3) {\n const y =\n yBase +\n Math.sin(x * freq + t * speed + phaseOffset) * amp +\n Math.sin(x * freq * 0.5 + t * speed * 0.7 + phaseOffset * 2) * amp * 0.5;\n ctx.lineTo(x, y);\n }\n\n ctx.lineTo(w, h);\n ctx.closePath();\n ctx.fillStyle = color;\n ctx.fill();\n }\n\n t += 0.02;\n rafRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [colors, layers, speed, amplitude, frequency]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\" }}\n />\n );\n};\n\nWaveBackground.displayName = \"WaveBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nlet meshStyleInjected = false;\n\nexport interface GradientMeshBackgroundProps {\n /** Array of 4 color stops */\n colors?: string[];\n /** Animation speed multiplier */\n speed?: number;\n /** Mesh intensity / contrast */\n intensity?: number;\n className?: string;\n}\n\nexport const GradientMeshBackground: React.FC<GradientMeshBackgroundProps> = ({\n colors = [\"#8b5cf6\", \"#3b82f6\", \"#06b6d4\", \"#ec4899\"],\n speed = 1,\n intensity = 1,\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!meshStyleInjected) {\n meshStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-mesh-1 {\n 0%, 100% { transform: translate(0%, 0%) scale(1); }\n 25% { transform: translate(30%, -20%) scale(1.1); }\n 50% { transform: translate(-10%, 30%) scale(0.95); }\n 75% { transform: translate(20%, 10%) scale(1.05); }\n }\n @keyframes uixy-mesh-2 {\n 0%, 100% { transform: translate(0%, 0%) scale(1); }\n 25% { transform: translate(-25%, 15%) scale(1.05); }\n 50% { transform: translate(20%, -25%) scale(1.1); }\n 75% { transform: translate(-15%, -10%) scale(0.9); }\n }\n @keyframes uixy-mesh-3 {\n 0%, 100% { transform: translate(0%, 0%) scale(1.05); }\n 33% { transform: translate(15%, 25%) scale(0.95); }\n 66% { transform: translate(-20%, -15%) scale(1.1); }\n }\n @keyframes uixy-mesh-4 {\n 0%, 100% { transform: translate(0%, 0%) scale(0.95); }\n 33% { transform: translate(-30%, 10%) scale(1.1); }\n 66% { transform: translate(10%, -30%) scale(1); }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const animations = [\n `uixy-mesh-1 ${12 / speed}s ease-in-out infinite`,\n `uixy-mesh-2 ${15 / speed}s ease-in-out infinite`,\n `uixy-mesh-3 ${18 / speed}s ease-in-out infinite`,\n `uixy-mesh-4 ${14 / speed}s ease-in-out infinite`,\n ];\n\n const positions = [\n { top: \"10%\", left: \"15%\" },\n { top: \"60%\", right: \"10%\" },\n { bottom: \"15%\", left: \"25%\" },\n { top: \"30%\", right: \"30%\" },\n ];\n\n return (\n <div\n ref={containerRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ overflow: \"hidden\", position: \"relative\" }}\n >\n {colors.slice(0, 4).map((color, i) => (\n <div\n key={i}\n style={{\n position: \"absolute\",\n width: \"60%\",\n height: \"60%\",\n borderRadius: \"50%\",\n background: `radial-gradient(circle, ${color} 0%, transparent 70%)`,\n opacity: 0.25 * intensity,\n filter: \"blur(80px)\",\n animation: animations[i],\n ...positions[i],\n }}\n />\n ))}\n </div>\n );\n};\n\nGradientMeshBackground.displayName = \"GradientMeshBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface MatrixRainBackgroundProps {\n /** Characters to use */\n charset?: string;\n /** Column width in px */\n columnWidth?: number;\n /** Fall speed multiplier */\n speed?: number;\n /** Text color */\n color?: string;\n /** Font size in px */\n fontSize?: number;\n className?: string;\n}\n\nexport const MatrixRainBackground: React.FC<MatrixRainBackgroundProps> = ({\n charset = \"abcdefghijklmnopqrstuvwxyz0123456789@#$%&*<>{}[]\",\n columnWidth = 20,\n speed = 1,\n color = \"#22c55e\",\n fontSize = 14,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n const chars = charset.split(\"\");\n let columns = Math.floor(canvas.width / columnWidth);\n let drops: number[] = Array.from({ length: columns }, () => Math.random() * -100);\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n\n // Recalculate if resized\n const newCols = Math.floor(w / columnWidth);\n if (newCols !== columns) {\n columns = newCols;\n drops = Array.from({ length: columns }, () => Math.random() * -100);\n }\n\n ctx.fillStyle = \"rgba(0, 0, 0, 0.06)\";\n ctx.fillRect(0, 0, w, h);\n\n ctx.font = `${fontSize}px monospace`;\n\n for (let i = 0; i < columns; i++) {\n const char = chars[Math.floor(Math.random() * chars.length)];\n const x = i * columnWidth;\n const y = drops[i] * fontSize;\n\n // Head character — brighter\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.9;\n ctx.fillText(char, x, y);\n\n // Trail characters — dimmer\n ctx.globalAlpha = 0.3;\n const trailChar = chars[Math.floor(Math.random() * chars.length)];\n ctx.fillText(trailChar, x, y - fontSize);\n\n ctx.globalAlpha = 1;\n\n if (y > h && Math.random() > 0.98) {\n drops[i] = 0;\n }\n\n drops[i] += speed * 0.5;\n }\n\n rafRef.current = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [charset, columnWidth, speed, color, fontSize]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\", background: \"black\" }}\n />\n );\n};\n\nMatrixRainBackground.displayName = \"MatrixRainBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nlet bokehStyleInjected = false;\n\nexport type BokehShape = \"circle\" | \"hexagon\" | \"diamond\" | \"triangle\" | \"star\" | \"ring\" | \"mixed\";\n\nexport interface BokehBackgroundProps {\n /** Number of bokeh shapes */\n count?: number;\n /** Base colors */\n colors?: string[];\n /** Shape of bokeh elements */\n shape?: BokehShape;\n /** Animation speed multiplier */\n speed?: number;\n /** Min/max size in px */\n sizeRange?: [number, number];\n className?: string;\n}\n\nconst clipPaths: Record<string, string> = {\n circle: \"\",\n hexagon: \"polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)\",\n diamond: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n triangle: \"polygon(50% 0%, 100% 100%, 0% 100%)\",\n star: \"polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)\",\n ring: \"\",\n};\n\nconst shapeKeys: (keyof typeof clipPaths)[] = [\"circle\", \"hexagon\", \"diamond\", \"triangle\", \"star\", \"ring\"];\n\nexport const BokehBackground: React.FC<BokehBackgroundProps> = ({\n count = 15,\n colors = [\"#8b5cf6\", \"#3b82f6\", \"#06b6d4\", \"#ec4899\", \"#f97316\"],\n shape = \"circle\",\n speed = 1,\n sizeRange = [40, 200],\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!bokehStyleInjected) {\n bokehStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-bokeh-float {\n 0%, 100% { transform: translate(0, 0) scale(1) rotate(0deg); }\n 25% { transform: translate(var(--uixy-bk-dx1), var(--uixy-bk-dy1)) scale(var(--uixy-bk-s1)) rotate(var(--uixy-bk-r1)); }\n 50% { transform: translate(var(--uixy-bk-dx2), var(--uixy-bk-dy2)) scale(var(--uixy-bk-s2)) rotate(var(--uixy-bk-r2)); }\n 75% { transform: translate(var(--uixy-bk-dx3), var(--uixy-bk-dy3)) scale(var(--uixy-bk-s3)) rotate(var(--uixy-bk-r3)); }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const elements = Array.from({ length: count }, (_, i) => {\n const size = sizeRange[0] + Math.random() * (sizeRange[1] - sizeRange[0]);\n const color = colors[i % colors.length];\n const duration = (15 + Math.random() * 20) / speed;\n const rp = () => `${(Math.random() - 0.5) * 60}px`;\n const rs = () => `${0.8 + Math.random() * 0.4}`;\n const rr = () => `${(Math.random() - 0.5) * 40}deg`;\n\n // Determine shape for this element\n const s = shape === \"mixed\" ? shapeKeys[i % shapeKeys.length] : shape;\n const isRing = s === \"ring\";\n const isCircle = s === \"circle\";\n const clip = clipPaths[s];\n\n const baseStyle: React.CSSProperties = {\n position: \"absolute\",\n left: `${Math.random() * 100}%`,\n top: `${Math.random() * 100}%`,\n width: size,\n height: size,\n opacity: 0.35 + Math.random() * 0.3,\n filter: `blur(${1.5 + Math.random() * 3}px)`,\n animation: `uixy-bokeh-float ${duration}s ease-in-out infinite`,\n animationDelay: `${-Math.random() * duration}s`,\n \"--uixy-bk-dx1\": rp(),\n \"--uixy-bk-dy1\": rp(),\n \"--uixy-bk-s1\": rs(),\n \"--uixy-bk-r1\": rr(),\n \"--uixy-bk-dx2\": rp(),\n \"--uixy-bk-dy2\": rp(),\n \"--uixy-bk-s2\": rs(),\n \"--uixy-bk-r2\": rr(),\n \"--uixy-bk-dx3\": rp(),\n \"--uixy-bk-dy3\": rp(),\n \"--uixy-bk-s3\": rs(),\n \"--uixy-bk-r3\": rr(),\n } as React.CSSProperties;\n\n if (isRing) {\n return {\n key: i,\n style: {\n ...baseStyle,\n borderRadius: \"50%\",\n border: `${2 + Math.random() * 3}px solid ${color}50`,\n background: \"transparent\",\n },\n };\n }\n\n return {\n key: i,\n style: {\n ...baseStyle,\n borderRadius: isCircle ? \"50%\" : \"0\",\n background: isCircle\n ? `radial-gradient(circle at 35% 35%, ${color}45, ${color}18, transparent)`\n : `linear-gradient(135deg, ${color}40, ${color}15, transparent)`,\n border: `1px solid ${color}20`,\n clipPath: clip || undefined,\n },\n };\n });\n\n return (\n <div\n ref={containerRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ overflow: \"hidden\", position: \"relative\" }}\n >\n {elements.map((c) => (\n <div key={c.key} style={c.style} />\n ))}\n </div>\n );\n};\n\nBokehBackground.displayName = \"BokehBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport type PixelVariant = \"rain\" | \"life\" | \"terrain\" | \"noise\";\n\nexport interface PixelBackgroundProps {\n /** Pixel art style */\n variant?: PixelVariant;\n /** Pixel size in px */\n pixelSize?: number;\n /** Base colors */\n colors?: string[];\n /** Animation speed multiplier */\n speed?: number;\n /** Pixel opacity */\n opacity?: number;\n className?: string;\n}\n\n/* ── helpers ── */\nfunction hexToRgb(hex: string): [number, number, number] {\n const h = hex.replace(\"#\", \"\");\n return [\n parseInt(h.substring(0, 2), 16),\n parseInt(h.substring(2, 4), 16),\n parseInt(h.substring(4, 6), 16),\n ];\n}\n\n/* Simple value noise for terrain/noise */\nfunction makeNoise(cols: number, rows: number): Float32Array {\n const arr = new Float32Array(cols * rows);\n for (let i = 0; i < arr.length; i++) arr[i] = Math.random();\n return arr;\n}\n\nfunction smoothNoise(\n noise: Float32Array,\n cols: number,\n rows: number,\n x: number,\n y: number\n): number {\n const x0 = Math.floor(x) % cols;\n const y0 = Math.floor(y) % rows;\n const x1 = (x0 + 1) % cols;\n const y1 = (y0 + 1) % rows;\n const fx = x - Math.floor(x);\n const fy = y - Math.floor(y);\n const sx = fx * fx * (3 - 2 * fx);\n const sy = fy * fy * (3 - 2 * fy);\n const n00 = noise[y0 * cols + x0];\n const n10 = noise[y0 * cols + x1];\n const n01 = noise[y1 * cols + x0];\n const n11 = noise[y1 * cols + x1];\n return (n00 * (1 - sx) + n10 * sx) * (1 - sy) + (n01 * (1 - sx) + n11 * sx) * sy;\n}\n\nexport const PixelBackground: React.FC<PixelBackgroundProps> = ({\n variant = \"rain\",\n pixelSize = 8,\n colors,\n speed = 1,\n opacity = 0.6,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n const ps = pixelSize;\n\n /* ════════════════════════════════════════════\n RAIN — neon streaks falling like Matrix\n but with pixel-art feel, colored streams\n ════════════════════════════════════════════ */\n if (variant === \"rain\") {\n const palette = (colors || [\"#8b5cf6\", \"#6366f1\", \"#3b82f6\", \"#06b6d4\"]).map(hexToRgb);\n\n interface Drop {\n x: number;\n y: number;\n len: number;\n speed: number;\n color: [number, number, number];\n }\n\n let cols = Math.ceil(canvas.width / ps);\n const makeDrop = (col: number, startY?: number): Drop => ({\n x: col,\n y: startY ?? -(Math.random() * 30),\n len: 4 + Math.floor(Math.random() * 12),\n speed: 0.15 + Math.random() * 0.25,\n color: palette[Math.floor(Math.random() * palette.length)],\n });\n\n let drops: Drop[] = [];\n // One drop per ~3 columns\n cols = Math.ceil(canvas.width / ps);\n for (let c = 0; c < cols; c++) {\n if (Math.random() < 0.35) {\n drops.push(makeDrop(c));\n }\n }\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n const rows = Math.ceil(h / ps);\n cols = Math.ceil(w / ps);\n\n // Fade previous frame\n ctx.fillStyle = \"rgba(0, 0, 0, 0.12)\";\n ctx.fillRect(0, 0, w, h);\n\n for (const d of drops) {\n const headRow = Math.floor(d.y);\n for (let i = 0; i < d.len; i++) {\n const row = headRow - i;\n if (row < 0 || row >= rows) continue;\n // Head is brightest, tail fades\n const brightness = 1 - i / d.len;\n const a = brightness * brightness * opacity;\n const [r, g, b] = d.color;\n ctx.fillStyle = `rgba(${r}, ${g}, ${b}, ${a})`;\n ctx.fillRect(d.x * ps, row * ps, ps - 1, ps - 1);\n }\n\n // Glow on head pixel\n const hr = Math.floor(d.y);\n if (hr >= 0 && hr < rows) {\n const [r, g, b] = d.color;\n ctx.fillStyle = `rgba(${r}, ${g}, ${b}, ${opacity * 0.3})`;\n ctx.fillRect(d.x * ps - 1, hr * ps - 1, ps + 2, ps + 2);\n }\n\n d.y += d.speed * speed;\n }\n\n // Respawn drops that fell off screen\n drops = drops.filter((d) => {\n if ((d.y - d.len) * ps > h) {\n return false;\n }\n return true;\n });\n\n // Spawn new drops\n if (Math.random() < 0.3 * speed) {\n const col = Math.floor(Math.random() * cols);\n drops.push(makeDrop(col, -2));\n }\n\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n }\n\n /* ════════════════════════════════════════════\n LIFE — Conway's Game of Life\n ════════════════════════════════════════════ */\n else if (variant === \"life\") {\n const palette = colors || [\"#22c55e\", \"#16a34a\", \"#15803d\"];\n const cols = Math.ceil(canvas.width / ps);\n const rows = Math.ceil(canvas.height / ps);\n let grid = Array.from({ length: rows }, () =>\n Array.from({ length: cols }, () => (Math.random() > 0.82 ? 1 : 0))\n );\n\n // Age tracking for fade-in/out effect\n let ages = Array.from({ length: rows }, () =>\n new Float32Array(cols)\n );\n\n let frame = 0;\n const draw = () => {\n ctx.fillStyle = \"rgba(0, 0, 0, 0.15)\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (grid[r][c]) {\n ages[r][c] = Math.min(ages[r][c] + 0.08, 1);\n } else {\n ages[r][c] = Math.max(ages[r][c] - 0.05, 0);\n }\n if (ages[r][c] > 0.01) {\n ctx.globalAlpha = ages[r][c] * opacity;\n ctx.fillStyle = palette[(r + c) % palette.length];\n ctx.fillRect(c * ps, r * ps, ps - 1, ps - 1);\n }\n }\n }\n ctx.globalAlpha = 1;\n\n frame++;\n if (frame % Math.max(1, Math.round(6 / speed)) === 0) {\n const next = grid.map((row) => [...row]);\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n let n = 0;\n for (let dr = -1; dr <= 1; dr++) {\n for (let dc = -1; dc <= 1; dc++) {\n if (dr === 0 && dc === 0) continue;\n const nr = (r + dr + rows) % rows;\n const nc = (c + dc + cols) % cols;\n n += grid[nr][nc];\n }\n }\n if (grid[r][c]) {\n next[r][c] = n === 2 || n === 3 ? 1 : 0;\n } else {\n next[r][c] = n === 3 ? 1 : 0;\n }\n }\n }\n grid = next;\n\n // Re-seed if too dead\n let alive = 0;\n for (let r = 0; r < rows; r++) for (let c = 0; c < cols; c++) alive += grid[r][c];\n if (alive < rows * cols * 0.03) {\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (Math.random() > 0.85) grid[r][c] = 1;\n }\n }\n }\n }\n\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n }\n\n /* ════════════════════════════════════════════\n TERRAIN — smooth animated elevation map\n ════════════════════════════════════════════ */\n else if (variant === \"terrain\") {\n const palette = colors || [\"#0f172a\", \"#1e3a5f\", \"#1a4731\", \"#365314\", \"#4d7c0f\", \"#65a30d\", \"#84cc16\", \"#a3e635\"];\n const cols = Math.ceil(canvas.width / ps);\n const rows = Math.ceil(canvas.height / ps);\n\n const noise = (x: number, y: number, t: number) => {\n return (\n Math.sin(x * 0.04 + t * 0.7) * 0.35 +\n Math.sin(y * 0.06 - t * 0.5) * 0.25 +\n Math.sin((x + y) * 0.025 + t * 0.3) * 0.2 +\n Math.sin(x * 0.1 - y * 0.08 + t * 0.4) * 0.2\n );\n };\n\n let t = 0;\n const draw = () => {\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const n = (noise(c, r, t) + 1) / 2;\n const idx = Math.min(palette.length - 1, Math.floor(n * palette.length));\n ctx.globalAlpha = opacity;\n ctx.fillStyle = palette[idx];\n ctx.fillRect(c * ps, r * ps, ps, ps);\n }\n }\n ctx.globalAlpha = 1;\n t += 0.006 * speed;\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n }\n\n /* ════════════════════════════════════════════\n NOISE — smooth flowing plasma / lava lamp\n ════════════════════════════════════════════ */\n else {\n const palette = (colors || [\"#8b5cf6\", \"#6366f1\", \"#3b82f6\", \"#06b6d4\", \"#14b8a6\"]).map(hexToRgb);\n const cols = Math.ceil(canvas.width / ps);\n const rows = Math.ceil(canvas.height / ps);\n\n // Pre-generate noise grids for smooth animation\n const noiseSize = 64;\n const noise1 = makeNoise(noiseSize, noiseSize);\n const noise2 = makeNoise(noiseSize, noiseSize);\n const noise3 = makeNoise(noiseSize, noiseSize);\n\n let t = 0;\n const draw = () => {\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n // Layer multiple noise octaves scrolling in different directions\n const n1 = smoothNoise(noise1, noiseSize, noiseSize, c * 0.08 + t * 0.5, r * 0.08 + t * 0.3);\n const n2 = smoothNoise(noise2, noiseSize, noiseSize, c * 0.12 - t * 0.4, r * 0.12 + t * 0.2);\n const n3 = smoothNoise(noise3, noiseSize, noiseSize, c * 0.05 + t * 0.2, r * 0.05 - t * 0.35);\n\n const combined = (n1 * 0.5 + n2 * 0.3 + n3 * 0.2);\n\n // Map to color palette with smooth interpolation\n const pi = combined * (palette.length - 1);\n const idx0 = Math.floor(pi);\n const idx1 = Math.min(idx0 + 1, palette.length - 1);\n const frac = pi - idx0;\n\n const [r0, g0, b0] = palette[idx0];\n const [r1, g1, b1] = palette[idx1];\n const fr = Math.round(r0 + (r1 - r0) * frac);\n const fg = Math.round(g0 + (g1 - g0) * frac);\n const fb = Math.round(b0 + (b1 - b0) * frac);\n\n ctx.globalAlpha = opacity * (0.5 + combined * 0.5);\n ctx.fillStyle = `rgb(${fr}, ${fg}, ${fb})`;\n ctx.fillRect(c * ps, r * ps, ps, ps);\n }\n }\n ctx.globalAlpha = 1;\n t += 0.015 * speed;\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n }\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [variant, pixelSize, colors, speed, opacity]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\", background: \"#09090b\", imageRendering: \"pixelated\" }}\n />\n );\n};\n\nPixelBackground.displayName = \"PixelBackground\";\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\n\nlet rippleStyleInjected = false;\n\nexport interface RippleBackgroundProps {\n /** Number of ripple rings */\n count?: number;\n /** Base color */\n color?: string;\n /** Animation duration per ring in seconds */\n duration?: number;\n className?: string;\n}\n\nexport const RippleBackground: React.FC<RippleBackgroundProps> = ({\n count = 6,\n color = \"rgba(139, 92, 246, 0.15)\",\n duration = 4,\n className,\n}) => {\n useEffect(() => {\n if (rippleStyleInjected) return;\n rippleStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-ripple {\n 0% { transform: translate(-50%, -50%) scale(0.5); opacity: 1; }\n 100% { transform: translate(-50%, -50%) scale(4); opacity: 0; }\n }\n `;\n document.head.appendChild(style);\n }, []);\n\n const rings = Array.from({ length: count }, (_, i) => ({\n key: i,\n style: {\n position: \"absolute\" as const,\n left: \"50%\",\n top: \"50%\",\n width: \"200px\",\n height: \"200px\",\n borderRadius: \"50%\",\n border: `1.5px solid ${color}`,\n boxShadow: `0 0 30px 2px ${color}`,\n animation: `uixy-ripple ${duration}s ease-out infinite`,\n animationDelay: `${(i * duration) / count}s`,\n pointerEvents: \"none\" as const,\n },\n }));\n\n return (\n <div\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none\"}\n style={{ overflow: \"hidden\", position: \"relative\" }}\n >\n {rings.map((r) => (\n <div key={r.key} style={r.style} />\n ))}\n </div>\n );\n};\n\nRippleBackground.displayName = \"RippleBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface DotPatternBackgroundProps {\n /** Spacing between dots */\n spacing?: number;\n /** Dot radius */\n radius?: number;\n /** Dot color */\n color?: string;\n /** Enable glow animation — dots pulse randomly */\n glow?: boolean;\n /** Glow color (defaults to color) */\n glowColor?: string;\n /** Mouse proximity — dots grow near cursor */\n mouseReactive?: boolean;\n /** Mouse influence radius */\n mouseRadius?: number;\n className?: string;\n}\n\nexport const DotPatternBackground: React.FC<DotPatternBackgroundProps> = ({\n spacing = 24,\n radius = 1.2,\n color = \"rgba(161, 161, 170, 0.25)\",\n glow = false,\n glowColor,\n mouseReactive = true,\n mouseRadius = 120,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const mouseRef = useRef({ x: -9999, y: -9999 });\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n const onMouse = (e: MouseEvent) => {\n const rect = canvas.getBoundingClientRect();\n mouseRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };\n };\n if (mouseReactive) window.addEventListener(\"mousemove\", onMouse);\n\n // Generate random glow phases per dot\n const cols = Math.ceil(3000 / spacing);\n const rows = Math.ceil(2000 / spacing);\n const phases = glow\n ? Array.from({ length: cols * rows }, () => ({\n offset: Math.random() * Math.PI * 2,\n speed: 0.5 + Math.random() * 2,\n }))\n : [];\n\n let t = 0;\n const gc = glowColor || color;\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n ctx.clearRect(0, 0, w, h);\n\n const curCols = Math.ceil(w / spacing) + 1;\n const curRows = Math.ceil(h / spacing) + 1;\n const mx = mouseRef.current.x;\n const my = mouseRef.current.y;\n\n for (let r = 0; r < curRows; r++) {\n for (let c = 0; c < curCols; c++) {\n const x = c * spacing;\n const y = r * spacing;\n\n let dotRadius = radius;\n let dotAlpha = 1;\n\n // Mouse proximity effect\n if (mouseReactive) {\n const dx = mx - x;\n const dy = my - y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < mouseRadius) {\n const factor = 1 - dist / mouseRadius;\n dotRadius = radius + factor * radius * 2.5;\n dotAlpha = 1;\n }\n }\n\n // Glow pulse\n if (glow) {\n const idx = (r * cols + c) % phases.length;\n if (idx < phases.length) {\n const p = phases[idx];\n const pulse = (Math.sin(t * p.speed + p.offset) + 1) / 2;\n dotRadius += pulse * radius * 1.5;\n dotAlpha *= 0.4 + pulse * 0.6;\n }\n }\n\n ctx.beginPath();\n ctx.arc(x, y, dotRadius, 0, Math.PI * 2);\n\n if (glow && dotRadius > radius * 1.5) {\n ctx.fillStyle = gc;\n ctx.shadowBlur = 8;\n ctx.shadowColor = gc;\n } else {\n ctx.fillStyle = color;\n ctx.shadowBlur = 0;\n }\n\n ctx.globalAlpha = dotAlpha;\n ctx.fill();\n }\n }\n\n ctx.globalAlpha = 1;\n ctx.shadowBlur = 0;\n t += 0.016;\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n window.removeEventListener(\"mousemove\", onMouse);\n };\n }, [spacing, radius, color, glow, glowColor, mouseReactive, mouseRadius]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\" }}\n />\n );\n};\n\nDotPatternBackground.displayName = \"DotPatternBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface RetroGridBackgroundProps {\n /** Grid cell size in px */\n cellSize?: number;\n /** Line color */\n lineColor?: string;\n /** Scroll speed multiplier */\n speed?: number;\n /** Show horizon glow */\n glow?: boolean;\n /** Number of vertical lines */\n verticalLines?: number;\n /** Number of horizontal lines */\n horizontalLines?: number;\n className?: string;\n}\n\nfunction hexToRgba(hex: string, a: number): string {\n const h = hex.replace(\"#\", \"\");\n return `rgba(${parseInt(h.slice(0, 2), 16)},${parseInt(h.slice(2, 4), 16)},${parseInt(h.slice(4, 6), 16)},${a})`;\n}\n\nexport const RetroGridBackground: React.FC<RetroGridBackgroundProps> = ({\n cellSize = 50,\n lineColor = \"#8b5cf6\",\n speed = 1,\n glow = true,\n verticalLines = 25,\n horizontalLines = 16,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n let scrollY = 0;\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n ctx.clearRect(0, 0, w, h);\n\n const horizon = h * 0.35;\n const groundH = h - horizon;\n const cx = w / 2;\n\n // ── Vertical lines ── converge to vanishing point\n ctx.lineWidth = 1;\n const half = Math.floor(verticalLines / 2);\n for (let i = -half; i <= half; i++) {\n const spread = (i / half); // -1 to 1\n const bottomX = cx + spread * w * 1.2;\n\n // Fade edges\n const edgeFade = 1 - Math.abs(spread) * 0.5;\n ctx.strokeStyle = hexToRgba(lineColor, 0.25 * edgeFade);\n ctx.beginPath();\n ctx.moveTo(cx, horizon);\n ctx.lineTo(bottomX, h);\n ctx.stroke();\n }\n\n // ── Horizontal lines ── perspective-spaced, scrolling\n const scrollPhase = (scrollY % 1);\n\n for (let i = 0; i < horizontalLines + 2; i++) {\n // Normalized position 0..1 with scroll offset\n const rawT = (i - scrollPhase) / horizontalLines;\n if (rawT < 0 || rawT > 1) continue;\n\n // Apply perspective curve — square for natural depth feel\n const perspT = rawT * rawT;\n const y = horizon + perspT * groundH;\n\n // Lines closer to horizon are thinner & more transparent\n const alpha = 0.08 + rawT * 0.3;\n const thickness = 0.5 + rawT * 1;\n\n // Calc X span at this depth — wider near bottom\n const spanFactor = rawT * 1.2;\n const leftX = cx - w * spanFactor;\n const rightX = cx + w * spanFactor;\n\n ctx.strokeStyle = hexToRgba(lineColor, alpha);\n ctx.lineWidth = thickness;\n ctx.beginPath();\n ctx.moveTo(leftX, y);\n ctx.lineTo(rightX, y);\n ctx.stroke();\n }\n\n // ── Horizon glow ──\n if (glow) {\n // Main glow line\n const grad = ctx.createLinearGradient(0, 0, w, 0);\n grad.addColorStop(0, \"transparent\");\n grad.addColorStop(0.2, hexToRgba(lineColor, 0.4));\n grad.addColorStop(0.5, hexToRgba(lineColor, 0.9));\n grad.addColorStop(0.8, hexToRgba(lineColor, 0.4));\n grad.addColorStop(1, \"transparent\");\n\n ctx.strokeStyle = grad;\n ctx.lineWidth = 1.5;\n ctx.shadowBlur = 25;\n ctx.shadowColor = lineColor;\n ctx.beginPath();\n ctx.moveTo(0, horizon);\n ctx.lineTo(w, horizon);\n ctx.stroke();\n ctx.shadowBlur = 0;\n\n // Vertical glow from vanishing point\n const vGrad = ctx.createLinearGradient(cx, horizon - 80, cx, horizon + 30);\n vGrad.addColorStop(0, \"transparent\");\n vGrad.addColorStop(0.5, hexToRgba(lineColor, 0.15));\n vGrad.addColorStop(1, \"transparent\");\n ctx.fillStyle = vGrad;\n ctx.fillRect(cx - 60, horizon - 80, 120, 110);\n\n // Wide ambient glow on horizon\n const ambGrad = ctx.createRadialGradient(cx, horizon, 10, cx, horizon, w * 0.5);\n ambGrad.addColorStop(0, hexToRgba(lineColor, 0.06));\n ambGrad.addColorStop(1, \"transparent\");\n ctx.fillStyle = ambGrad;\n ctx.fillRect(0, horizon - 100, w, 200);\n\n // Stars above horizon\n ctx.fillStyle = hexToRgba(lineColor, 0.15);\n for (let i = 0; i < 30; i++) {\n const sx = ((i * 137.5) % w);\n const sy = ((i * 97.3) % (horizon - 10));\n const sr = 0.5 + (i % 3) * 0.4;\n ctx.beginPath();\n ctx.arc(sx, sy, sr, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n\n scrollY += 0.02 * speed;\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [cellSize, lineColor, speed, glow, verticalLines, horizontalLines]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\" }}\n />\n );\n};\n\nRetroGridBackground.displayName = \"RetroGridBackground\";\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface MeteorBackgroundProps {\n /** Number of meteors */\n count?: number;\n /** Meteor angle in degrees (215 = top-right to bottom-left) */\n angle?: number;\n /** Meteor color */\n color?: string;\n /** Tail length in px */\n tailLength?: number;\n /** Speed multiplier */\n speed?: number;\n className?: string;\n}\n\nexport const MeteorBackground: React.FC<MeteorBackgroundProps> = ({\n count = 20,\n angle = 215,\n color = \"#a1a1aa\",\n tailLength = 80,\n speed = 1,\n className,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const rafRef = useRef<number>(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n };\n resize();\n window.addEventListener(\"resize\", resize);\n\n const rad = (angle * Math.PI) / 180;\n const dx = Math.cos(rad);\n const dy = Math.sin(rad);\n\n interface Meteor {\n x: number;\n y: number;\n speed: number;\n length: number;\n opacity: number;\n width: number;\n }\n\n const spawnMeteor = (): Meteor => {\n const w = canvas.width;\n const h = canvas.height;\n // Spawn above and to the right\n return {\n x: Math.random() * (w + 400) - 200,\n y: -Math.random() * h * 0.5 - 50,\n speed: (2 + Math.random() * 4) * speed,\n length: tailLength * (0.5 + Math.random() * 1),\n opacity: 0.3 + Math.random() * 0.7,\n width: 0.5 + Math.random() * 1.5,\n };\n };\n\n let meteors: Meteor[] = Array.from({ length: count }, () => {\n const m = spawnMeteor();\n // Randomize initial position so they don't all start at top\n m.x += dx * Math.random() * canvas.height * 2;\n m.y += dy * Math.random() * canvas.height * 2;\n return m;\n });\n\n const draw = () => {\n const w = canvas.width;\n const h = canvas.height;\n ctx.clearRect(0, 0, w, h);\n\n for (const m of meteors) {\n const headX = m.x;\n const headY = m.y;\n const tailX = headX - dx * m.length;\n const tailY = headY - dy * m.length;\n\n // Gradient tail\n const grad = ctx.createLinearGradient(tailX, tailY, headX, headY);\n grad.addColorStop(0, \"transparent\");\n grad.addColorStop(0.6, `${color}${Math.round(m.opacity * 100).toString(16).padStart(2, \"0\")}`);\n grad.addColorStop(1, color);\n\n ctx.beginPath();\n ctx.moveTo(tailX, tailY);\n ctx.lineTo(headX, headY);\n ctx.strokeStyle = grad;\n ctx.lineWidth = m.width;\n ctx.lineCap = \"round\";\n ctx.globalAlpha = m.opacity;\n ctx.stroke();\n\n // Head glow\n ctx.beginPath();\n ctx.arc(headX, headY, m.width + 0.5, 0, Math.PI * 2);\n ctx.fillStyle = color;\n ctx.globalAlpha = m.opacity * 0.8;\n ctx.shadowBlur = 6;\n ctx.shadowColor = color;\n ctx.fill();\n ctx.shadowBlur = 0;\n\n // Move\n m.x += dx * m.speed;\n m.y += dy * m.speed;\n\n // Reset when off screen\n if (m.x < -200 || m.x > w + 200 || m.y > h + 200) {\n Object.assign(m, spawnMeteor());\n }\n }\n\n ctx.globalAlpha = 1;\n rafRef.current = requestAnimationFrame(draw);\n };\n draw();\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", resize);\n };\n }, [count, angle, color, tailLength, speed]);\n\n return (\n <canvas\n ref={canvasRef}\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none w-full h-full\"}\n style={{ display: \"block\" }}\n />\n );\n};\n\nMeteorBackground.displayName = \"MeteorBackground\";\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\n\nlet beamsStyleInjected = false;\n\nexport interface BeamsBackgroundProps {\n /** Number of beams */\n count?: number;\n /** Beam colors */\n colors?: string[];\n /** Animation speed multiplier */\n speed?: number;\n /** Beam max opacity */\n opacity?: number;\n /** Beam width in px */\n beamWidth?: number;\n className?: string;\n}\n\nexport const BeamsBackground: React.FC<BeamsBackgroundProps> = ({\n count = 8,\n colors = [\"#8b5cf6\", \"#3b82f6\", \"#06b6d4\", \"#ec4899\"],\n speed = 1,\n opacity = 0.12,\n beamWidth = 300,\n className,\n}) => {\n useEffect(() => {\n if (beamsStyleInjected) return;\n beamsStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-beam-sway {\n 0%, 100% { transform: rotate(var(--uixy-beam-r0)) scaleY(1); opacity: var(--uixy-beam-o); }\n 25% { transform: rotate(var(--uixy-beam-r1)) scaleY(1.1); opacity: calc(var(--uixy-beam-o) * 1.3); }\n 50% { transform: rotate(var(--uixy-beam-r2)) scaleY(0.9); opacity: var(--uixy-beam-o); }\n 75% { transform: rotate(var(--uixy-beam-r3)) scaleY(1.05); opacity: calc(var(--uixy-beam-o) * 0.8); }\n }\n `;\n document.head.appendChild(style);\n }, []);\n\n const beams = Array.from({ length: count }, (_, i) => {\n const angle = -30 + (i / (count - 1)) * 60; // spread -30 to +30 degrees\n const color = colors[i % colors.length];\n const duration = (12 + Math.random() * 10) / speed;\n const jitter = (Math.random() - 0.5) * 15;\n\n return {\n key: i,\n style: {\n position: \"absolute\" as const,\n bottom: \"-20%\",\n left: \"50%\",\n width: `${beamWidth}px`,\n height: \"160%\",\n marginLeft: `${-beamWidth / 2}px`,\n transformOrigin: \"center bottom\",\n background: `linear-gradient(to top, ${color}00 0%, ${color} 30%, ${color}80 60%, transparent 100%)`,\n filter: `blur(${40 + Math.random() * 30}px)`,\n animation: `uixy-beam-sway ${duration}s ease-in-out infinite`,\n animationDelay: `${-Math.random() * duration}s`,\n \"--uixy-beam-r0\": `${angle + jitter}deg`,\n \"--uixy-beam-r1\": `${angle + jitter + 5}deg`,\n \"--uixy-beam-r2\": `${angle + jitter - 4}deg`,\n \"--uixy-beam-r3\": `${angle + jitter + 3}deg`,\n \"--uixy-beam-o\": String(opacity),\n pointerEvents: \"none\" as const,\n mixBlendMode: \"screen\" as const,\n } as React.CSSProperties,\n };\n });\n\n return (\n <div\n className={className ?? \"fixed inset-0 -z-10 pointer-events-none\"}\n style={{ overflow: \"hidden\", position: \"relative\" }}\n >\n {beams.map((b) => (\n <div key={b.key} style={b.style} />\n ))}\n </div>\n );\n};\n\nBeamsBackground.displayName = \"BeamsBackground\";\n","\"use client\";\n\nimport React, { forwardRef, useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet badgeStyleInjected = false;\n\nexport type BadgeVariant =\n | \"default\" | \"secondary\" | \"outline\" | \"success\" | \"warning\" | \"destructive\"\n | \"glow\" | \"gradient\" | \"glass\" | \"neon\" | \"shimmer\" | \"soft\"\n | \"info\" | \"premium\" | \"new\" | \"beta\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: \"sm\" | \"md\" | \"lg\";\n dot?: boolean;\n dotColor?: string;\n /** Pill shape (more rounded) */\n pill?: boolean;\n /** Icon before text */\n icon?: React.ReactNode;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = \"default\", size = \"md\", dot, dotColor, pill = true, icon, className, children, ...props }, ref) => {\n useEffect(() => {\n if (!badgeStyleInjected) {\n badgeStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-badge-shimmer {\n 0% { background-position: -200% center; }\n 100% { background-position: 200% center; }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const variants: Record<string, string> = {\n default: \"bg-violet-500/15 text-violet-400 border-violet-500/20\",\n secondary: \"bg-zinc-500/15 text-zinc-400 border-zinc-500/20\",\n outline: \"bg-transparent text-zinc-300 border-zinc-600\",\n success: \"bg-emerald-500/15 text-emerald-400 border-emerald-500/20\",\n warning: \"bg-amber-500/15 text-amber-400 border-amber-500/20\",\n destructive: \"bg-red-500/15 text-red-400 border-red-500/20\",\n glow: \"bg-violet-500/15 text-violet-400 border-violet-500/30 shadow-[0_0_8px_rgba(139,92,246,0.3)]\",\n gradient: \"bg-gradient-to-r from-violet-500/20 to-indigo-500/20 text-violet-300 border-violet-500/20\",\n glass: \"bg-white/5 backdrop-blur-md text-zinc-200 border-white/10\",\n neon: \"bg-transparent text-cyan-400 border-cyan-400/50 shadow-[0_0_6px_rgba(34,211,238,0.4),inset_0_0_6px_rgba(34,211,238,0.1)]\",\n shimmer: \"text-zinc-200 border-zinc-700\",\n soft: \"bg-violet-500/8 text-violet-300 border-transparent\",\n info: \"bg-blue-500/15 text-blue-400 border-blue-500/20\",\n premium: \"bg-gradient-to-r from-amber-500/20 via-yellow-400/20 to-amber-500/20 text-amber-300 border-amber-500/25\",\n new: \"bg-gradient-to-r from-emerald-500/20 to-teal-500/20 text-emerald-300 border-emerald-500/20\",\n beta: \"bg-gradient-to-r from-indigo-500/20 to-purple-500/20 text-indigo-300 border-indigo-500/20\",\n };\n\n const sizes: Record<string, string> = {\n sm: \"text-[10px] px-1.5 py-0.5 gap-1\",\n md: \"text-xs px-2.5 py-0.5 gap-1.5\",\n lg: \"text-sm px-3 py-1 gap-1.5\",\n };\n\n const dotColors: Record<string, string> = {\n default: \"bg-violet-400\", secondary: \"bg-zinc-400\", outline: \"bg-zinc-400\",\n success: \"bg-emerald-400\", warning: \"bg-amber-400\", destructive: \"bg-red-400\",\n glow: \"bg-violet-400\", gradient: \"bg-violet-400\", glass: \"bg-zinc-300\",\n neon: \"bg-cyan-400\", shimmer: \"bg-zinc-400\", soft: \"bg-violet-400\",\n info: \"bg-blue-400\", premium: \"bg-amber-400\", new: \"bg-emerald-400\", beta: \"bg-indigo-400\",\n };\n\n const shimmerStyle: React.CSSProperties = variant === \"shimmer\" ? {\n backgroundImage: \"linear-gradient(90deg, transparent 25%, rgba(255,255,255,0.08) 50%, transparent 75%)\",\n backgroundSize: \"200% 100%\",\n animation: \"uixy-badge-shimmer 2s ease-in-out infinite\",\n } : {};\n\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center font-medium border whitespace-nowrap transition-colors\",\n pill ? \"rounded-full\" : \"rounded-md\",\n variants[variant],\n sizes[size],\n className\n )}\n style={shimmerStyle}\n {...props}\n >\n {dot && (\n <span\n className={cn(\"w-1.5 h-1.5 rounded-full animate-pulse shrink-0\", dotColor ? \"\" : dotColors[variant])}\n style={dotColor ? { backgroundColor: dotColor } : undefined}\n />\n )}\n {icon && <span className=\"shrink-0 [&>svg]:w-3 [&>svg]:h-3\">{icon}</span>}\n {children}\n </span>\n );\n }\n);\nBadge.displayName = \"Badge\";\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet tooltipStyleInjected = false;\n\nexport type TooltipVariant = \"default\" | \"dark\" | \"light\" | \"gradient\" | \"glass\" | \"outlined\" | \"neon\" | \"success\" | \"warning\" | \"error\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n variant?: TooltipVariant;\n delay?: number;\n arrow?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n side = \"top\",\n variant = \"default\",\n delay = 300,\n arrow = true,\n children,\n className,\n}) => {\n const [state, setState] = useState<\"hidden\" | \"entering\" | \"visible\" | \"leaving\">(\"hidden\");\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n if (!tooltipStyleInjected) {\n tooltipStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n .uixy-tt { pointer-events: none; }\n .uixy-tt[data-state=\"entering\"] { opacity: 0; transform: translateY(var(--uixy-tt-dy,0)) translateX(var(--uixy-tt-dx,0)) scale(0.95); }\n .uixy-tt[data-state=\"visible\"] { opacity: 1; transform: translateY(0) translateX(0) scale(1); transition: opacity .15s ease-out, transform .15s ease-out; }\n .uixy-tt[data-state=\"leaving\"] { opacity: 0; transform: scale(0.97); transition: opacity .1s ease-in, transform .1s ease-in; }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const show = useCallback(() => {\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n setState(\"entering\");\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setState(\"visible\"));\n });\n }, delay);\n }, [delay]);\n\n const hide = useCallback(() => {\n clearTimeout(timerRef.current);\n setState(\"leaving\");\n timerRef.current = setTimeout(() => setState(\"hidden\"), 120);\n }, []);\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n const variants: Record<string, string> = {\n default: \"bg-zinc-800 text-zinc-100 border border-zinc-700\",\n dark: \"bg-zinc-950 text-zinc-100 border border-zinc-800\",\n light: \"bg-zinc-100 text-zinc-900 border border-zinc-200\",\n gradient: \"bg-gradient-to-r from-violet-600 to-indigo-600 text-white\",\n glass: \"bg-white/10 backdrop-blur-md text-zinc-100 border border-white/20\",\n outlined: \"bg-transparent text-zinc-300 border-2 border-zinc-500\",\n neon: \"bg-zinc-950 text-violet-300 border border-violet-500/50 shadow-[0_0_12px_rgba(139,92,246,0.3)]\",\n success: \"bg-emerald-950 text-emerald-200 border border-emerald-700/50\",\n warning: \"bg-amber-950 text-amber-200 border border-amber-700/50\",\n error: \"bg-red-950 text-red-200 border border-red-700/50\",\n };\n\n const arrowBg: Record<string, string> = {\n default: \"bg-zinc-800 border-zinc-700\",\n dark: \"bg-zinc-950 border-zinc-800\",\n light: \"bg-zinc-100 border-zinc-200\",\n gradient: \"bg-violet-600 border-violet-600\",\n glass: \"bg-white/10 border-white/20\",\n outlined: \"bg-zinc-950 border-zinc-500\",\n neon: \"bg-zinc-950 border-violet-500/50\",\n success: \"bg-emerald-950 border-emerald-700/50\",\n warning: \"bg-amber-950 border-amber-700/50\",\n error: \"bg-red-950 border-red-700/50\",\n };\n\n // Animation offsets per side\n const slideVars: Record<string, React.CSSProperties> = {\n top: { \"--uixy-tt-dy\": \"4px\", \"--uixy-tt-dx\": \"0\" } as React.CSSProperties,\n bottom: { \"--uixy-tt-dy\": \"-4px\", \"--uixy-tt-dx\": \"0\" } as React.CSSProperties,\n left: { \"--uixy-tt-dx\": \"4px\", \"--uixy-tt-dy\": \"0\" } as React.CSSProperties,\n right: { \"--uixy-tt-dx\": \"-4px\", \"--uixy-tt-dy\": \"0\" } as React.CSSProperties,\n };\n\n // Position classes — use separate position + centering\n const positionStyle: Record<string, React.CSSProperties> = {\n top: { bottom: \"100%\", left: \"50%\", transform: \"translateX(-50%)\", marginBottom: 8 },\n bottom: { top: \"100%\", left: \"50%\", transform: \"translateX(-50%)\", marginTop: 8 },\n left: { right: \"100%\", top: \"50%\", transform: \"translateY(-50%)\", marginRight: 8 },\n right: { left: \"100%\", top: \"50%\", transform: \"translateY(-50%)\", marginLeft: 8 },\n };\n\n // Arrow side positioning\n const arrowSide: Record<string, React.CSSProperties> = {\n top: { bottom: -4, left: \"50%\", marginLeft: -4 },\n bottom: { top: -4, left: \"50%\", marginLeft: -4 },\n left: { right: -4, top: \"50%\", marginTop: -4 },\n right: { left: -4, top: \"50%\", marginTop: -4 },\n };\n\n // Arrow border sides to show\n const arrowBorderSide: Record<string, string> = {\n top: \"border-b border-r\",\n bottom: \"border-t border-l\",\n left: \"border-t border-r\",\n right: \"border-b border-l\",\n };\n\n if (state === \"hidden\") {\n return (\n <div className=\"relative inline-flex\" onMouseEnter={show} onMouseLeave={hide} onFocus={show} onBlur={hide}>\n {children}\n </div>\n );\n }\n\n return (\n <div className=\"relative inline-flex\" onMouseEnter={show} onMouseLeave={hide} onFocus={show} onBlur={hide}>\n {children}\n <div\n className={cn(\n \"uixy-tt absolute z-50 px-3 py-1.5 text-xs font-medium rounded-lg whitespace-nowrap shadow-lg\",\n variants[variant],\n className\n )}\n style={{ ...positionStyle[side], ...slideVars[side] }}\n data-state={state}\n role=\"tooltip\"\n >\n {content}\n {arrow && (\n <span\n className={cn(\"absolute w-2 h-2 rotate-45\", arrowBorderSide[side], arrowBg[variant])}\n style={arrowSide[side]}\n />\n )}\n </div>\n </div>\n );\n};\n\nTooltip.displayName = \"Tooltip\";\n","\"use client\";\n\nimport React, { forwardRef, useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet toggleStyleInjected = false;\n\nexport type ToggleVariant = \"default\" | \"ios\" | \"material\" | \"outline\" | \"glow\" | \"pill\" | \"slim\" | \"labeled\";\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: ToggleVariant;\n color?: string;\n label?: string;\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n ({ size = \"md\", variant = \"default\", color, label, className, checked, disabled, ...props }, ref) => {\n useEffect(() => {\n if (!toggleStyleInjected) {\n toggleStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n .uixy-toggle-thumb {\n transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.2s ease;\n }\n .uixy-toggle-track {\n transition: background-color 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const sizes = {\n sm: { trackW: 32, trackH: 18, thumb: 14, pad: 2 },\n md: { trackW: 44, trackH: 24, thumb: 18, pad: 3 },\n lg: { trackW: 56, trackH: 30, thumb: 24, pad: 3 },\n };\n const s = sizes[size];\n const translatePx = s.trackW - s.thumb - s.pad * 2;\n const activeColor = color || \"#8b5cf6\";\n\n // Variant-specific track styles\n const trackStyles: React.CSSProperties = { width: s.trackW, height: s.trackH };\n const thumbStyles: React.CSSProperties = {\n width: s.thumb,\n height: s.thumb,\n transform: checked ? `translateX(${translatePx}px)` : \"translateX(0px)\",\n };\n let trackClasses = \"uixy-toggle-track rounded-full relative cursor-pointer\";\n let thumbClasses = \"uixy-toggle-thumb absolute rounded-full shadow-sm\";\n\n if (variant === \"default\" || variant === \"ios\") {\n trackStyles.backgroundColor = checked ? activeColor : \"rgb(63, 63, 70)\";\n thumbStyles.backgroundColor = \"white\";\n thumbStyles.top = s.pad;\n thumbStyles.left = s.pad;\n if (variant === \"ios\" && checked) {\n thumbStyles.boxShadow = \"0 2px 8px rgba(0,0,0,0.2)\";\n }\n } else if (variant === \"material\") {\n trackStyles.backgroundColor = checked ? `${activeColor}60` : \"rgb(82, 82, 91)\";\n thumbStyles.backgroundColor = checked ? activeColor : \"rgb(161, 161, 170)\";\n thumbStyles.top = s.pad - 1;\n thumbStyles.left = s.pad;\n thumbStyles.width = s.thumb + 2;\n thumbStyles.height = s.thumb + 2;\n thumbStyles.boxShadow = \"0 2px 6px rgba(0,0,0,0.3)\";\n } else if (variant === \"outline\") {\n trackStyles.backgroundColor = \"transparent\";\n trackStyles.border = `2px solid ${checked ? activeColor : \"rgb(113, 113, 122)\"}`;\n thumbStyles.backgroundColor = checked ? activeColor : \"rgb(161, 161, 170)\";\n thumbStyles.top = s.pad;\n thumbStyles.left = s.pad;\n } else if (variant === \"glow\") {\n trackStyles.backgroundColor = checked ? activeColor : \"rgb(63, 63, 70)\";\n if (checked) {\n trackStyles.boxShadow = `0 0 12px ${activeColor}60, 0 0 24px ${activeColor}30`;\n }\n thumbStyles.backgroundColor = \"white\";\n thumbStyles.top = s.pad;\n thumbStyles.left = s.pad;\n } else if (variant === \"pill\") {\n trackStyles.backgroundColor = checked ? activeColor : \"rgb(63, 63, 70)\";\n trackClasses += \" \" + (size === \"sm\" ? \"!rounded-sm\" : size === \"md\" ? \"!rounded-md\" : \"!rounded-lg\");\n thumbClasses = thumbClasses.replace(\"rounded-full\", size === \"sm\" ? \"rounded-[2px]\" : size === \"md\" ? \"rounded-[4px]\" : \"rounded-[6px]\");\n thumbStyles.backgroundColor = \"white\";\n thumbStyles.top = s.pad;\n thumbStyles.left = s.pad;\n } else if (variant === \"slim\") {\n trackStyles.height = Math.round(s.trackH * 0.55);\n trackStyles.backgroundColor = checked ? `${activeColor}60` : \"rgb(63, 63, 70)\";\n trackStyles.borderRadius = s.trackH;\n thumbStyles.backgroundColor = checked ? activeColor : \"rgb(161, 161, 170)\";\n thumbStyles.top = -Math.round((s.thumb - Math.round(s.trackH * 0.55)) / 2);\n thumbStyles.left = s.pad;\n thumbStyles.boxShadow = \"0 1px 4px rgba(0,0,0,0.3)\";\n } else if (variant === \"labeled\") {\n trackStyles.backgroundColor = checked ? activeColor : \"rgb(63, 63, 70)\";\n thumbStyles.backgroundColor = \"white\";\n thumbStyles.top = s.pad;\n thumbStyles.left = s.pad;\n }\n\n return (\n <label className={cn(\"inline-flex items-center gap-2.5 cursor-pointer select-none\", disabled && \"opacity-50 cursor-not-allowed\", className)}>\n <div className=\"relative\">\n <input ref={ref} type=\"checkbox\" className=\"sr-only peer\" checked={checked} disabled={disabled} {...props} />\n <div className={trackClasses} style={trackStyles}>\n {variant === \"labeled\" && (\n <span\n className=\"absolute inset-0 flex items-center text-white font-bold select-none\"\n style={{ fontSize: Math.round(s.thumb * 0.45), paddingLeft: s.pad + 3, paddingRight: s.pad + 3, justifyContent: checked ? \"flex-start\" : \"flex-end\" }}\n >\n {checked ? \"ON\" : \"OFF\"}\n </span>\n )}\n </div>\n <div className={thumbClasses} style={thumbStyles} />\n </div>\n {label && <span className=\"text-sm text-zinc-300\">{label}</span>}\n </label>\n );\n }\n);\nToggle.displayName = \"Toggle\";\n","\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Orientation */\n orientation?: \"horizontal\" | \"vertical\";\n /** Visual style */\n variant?: \"default\" | \"dashed\" | \"dotted\" | \"gradient\";\n /** Label in the middle */\n label?: string;\n}\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n ({ orientation = \"horizontal\", variant = \"default\", label, className, ...props }, ref) => {\n const isH = orientation === \"horizontal\";\n\n if (variant === \"gradient\") {\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cn(\n isH ? \"w-full h-px\" : \"h-full w-px\",\n className\n )}\n style={{\n background: isH\n ? \"linear-gradient(to right, transparent, rgba(113,113,122,0.5), transparent)\"\n : \"linear-gradient(to bottom, transparent, rgba(113,113,122,0.5), transparent)\",\n }}\n {...props}\n />\n );\n }\n\n const styles: Record<string, string> = {\n default: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n };\n\n if (label && isH) {\n return (\n <div ref={ref} role=\"separator\" className={cn(\"flex items-center gap-3\", className)} {...props}>\n <div className={cn(\"flex-1 border-t border-zinc-800\", styles[variant])} />\n <span className=\"text-xs text-zinc-500 whitespace-nowrap\">{label}</span>\n <div className={cn(\"flex-1 border-t border-zinc-800\", styles[variant])} />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cn(\n isH\n ? cn(\"w-full border-t border-zinc-800\", styles[variant])\n : cn(\"h-full border-l border-zinc-800\", styles[variant]),\n className\n )}\n {...props}\n />\n );\n }\n);\nSeparator.displayName = \"Separator\";\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet skeletonStyleInjected = false;\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape variant */\n variant?: \"rectangle\" | \"circle\" | \"text\";\n /** Width (CSS value) */\n width?: string | number;\n /** Height (CSS value) */\n height?: string | number;\n /** Animation style */\n animation?: \"pulse\" | \"shimmer\" | \"none\";\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n variant = \"rectangle\",\n width,\n height,\n animation = \"shimmer\",\n className,\n ...props\n}) => {\n useEffect(() => {\n if (!skeletonStyleInjected) {\n skeletonStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-skeleton-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const shapes: Record<string, string> = {\n rectangle: \"rounded-md\",\n circle: \"rounded-full\",\n text: \"rounded h-4\",\n };\n\n const animStyles: Record<string, React.CSSProperties> = {\n pulse: {},\n shimmer: {\n background: \"linear-gradient(90deg, rgba(63,63,70,0.4) 25%, rgba(82,82,91,0.6) 50%, rgba(63,63,70,0.4) 75%)\",\n backgroundSize: \"400% 100%\",\n animation: \"uixy-skeleton-shimmer 1.5s ease-in-out infinite\",\n },\n none: {},\n };\n\n return (\n <div\n className={cn(\n shapes[variant],\n animation === \"pulse\" && \"animate-pulse bg-zinc-800\",\n animation === \"none\" && \"bg-zinc-800\",\n className\n )}\n style={{\n width: width ?? (variant === \"circle\" ? 40 : \"100%\"),\n height: height ?? (variant === \"circle\" ? 40 : variant === \"text\" ? 16 : 20),\n ...(animation === \"shimmer\" ? animStyles.shimmer : {}),\n }}\n {...props}\n />\n );\n};\n\nSkeleton.displayName = \"Skeleton\";\n","\"use client\";\n\nimport React, { forwardRef, useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet progressStyleInjected = false;\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Progress value 0-100 */\n value?: number;\n /** Visual style */\n variant?: \"default\" | \"gradient\" | \"striped\" | \"glow\";\n /** Bar size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show percentage label */\n showValue?: boolean;\n /** Bar color */\n color?: string;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n ({ value = 0, variant = \"default\", size = \"md\", showValue, color, className, ...props }, ref) => {\n useEffect(() => {\n if (!progressStyleInjected) {\n progressStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-progress-stripes {\n 0% { background-position: 1rem 0; }\n 100% { background-position: 0 0; }\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const clamped = Math.min(100, Math.max(0, value));\n\n const sizes: Record<string, string> = {\n sm: \"h-1.5\",\n md: \"h-2.5\",\n lg: \"h-4\",\n };\n\n const barBase = \"h-full rounded-full transition-all duration-500 ease-out\";\n\n const barStyles: Record<string, string | React.CSSProperties> = {\n default: color || \"#8b5cf6\",\n gradient: \"\",\n striped: color || \"#8b5cf6\",\n glow: color || \"#8b5cf6\",\n };\n\n const barCss: React.CSSProperties = {\n width: `${clamped}%`,\n };\n\n if (variant === \"gradient\") {\n barCss.background = \"linear-gradient(90deg, #8b5cf6, #3b82f6, #06b6d4)\";\n } else if (variant === \"striped\") {\n barCss.backgroundColor = (barStyles.striped as string);\n barCss.backgroundImage = \"linear-gradient(45deg, rgba(255,255,255,0.1) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.1) 75%, transparent 75%, transparent)\";\n barCss.backgroundSize = \"1rem 1rem\";\n barCss.animation = \"uixy-progress-stripes 0.6s linear infinite\";\n } else if (variant === \"glow\") {\n barCss.backgroundColor = (barStyles.glow as string);\n barCss.boxShadow = `0 0 8px ${color || \"#8b5cf6\"}80, 0 0 20px ${color || \"#8b5cf6\"}40`;\n } else {\n barCss.backgroundColor = (barStyles.default as string);\n }\n\n return (\n <div ref={ref} className={cn(\"relative w-full\", className)} {...props}>\n <div className={cn(\"w-full rounded-full bg-zinc-800 overflow-hidden\", sizes[size])}>\n <div className={barBase} style={barCss} />\n </div>\n {showValue && size === \"lg\" && (\n <span className=\"absolute right-2 top-1/2 -translate-y-1/2 text-[10px] font-medium text-white\">\n {Math.round(clamped)}%\n </span>\n )}\n {showValue && size !== \"lg\" && (\n <span className=\"text-[10px] text-zinc-400 mt-1 block text-right\">{Math.round(clamped)}%</span>\n )}\n </div>\n );\n }\n);\nProgress.displayName = \"Progress\";\n","\"use client\";\n\nimport React, { forwardRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n fallback?: string;\n size?: number;\n shape?: \"circle\" | \"square\";\n status?: \"online\" | \"offline\" | \"busy\" | \"away\";\n ring?: boolean;\n ringColor?: string;\n}\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ src, alt, fallback, size = 40, shape = \"circle\", status, ring, ringColor, className, ...props }, ref) => {\n const [imgError, setImgError] = useState(false);\n\n const statusColors: Record<string, string> = {\n online: \"bg-emerald-500\",\n offline: \"bg-zinc-500\",\n busy: \"bg-red-500\",\n away: \"bg-amber-500\",\n };\n\n const showFallback = !src || imgError;\n const dotSize = Math.max(10, Math.round(size * 0.28));\n const borderW = Math.max(2, Math.round(size * 0.06));\n\n // For circle, position dot at bottom-right on the circle edge using trig\n const angle = 45 * (Math.PI / 180); // 45 degrees from bottom-right\n const radius = size / 2;\n const dotX = radius + radius * Math.cos(angle) - dotSize / 2;\n const dotY = radius + radius * Math.sin(angle) - dotSize / 2;\n\n return (\n <div\n ref={ref}\n className={cn(\"relative inline-flex shrink-0\", className)}\n style={{ width: size, height: size }}\n {...props}\n >\n <div\n className={cn(\n \"flex items-center justify-center bg-zinc-800 overflow-hidden\",\n shape === \"circle\" ? \"rounded-full\" : \"rounded-lg\",\n ring && \"ring-2 ring-offset-2 ring-offset-zinc-950\"\n )}\n style={{\n width: size,\n height: size,\n ...(ring ? { \"--tw-ring-color\": ringColor || \"#8b5cf6\" } as React.CSSProperties : {}),\n }}\n >\n {!showFallback ? (\n <img\n src={src}\n alt={alt || \"\"}\n onError={() => setImgError(true)}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <span className=\"font-medium text-zinc-300 select-none\" style={{ fontSize: size * 0.38 }}>\n {fallback || \"?\"}\n </span>\n )}\n </div>\n\n {status && (\n <span\n className={cn(\"absolute rounded-full\", statusColors[status])}\n style={{\n width: dotSize,\n height: dotSize,\n left: shape === \"circle\" ? dotX : undefined,\n top: shape === \"circle\" ? dotY : undefined,\n bottom: shape !== \"circle\" ? -dotSize / 4 : undefined,\n right: shape !== \"circle\" ? -dotSize / 4 : undefined,\n border: `${borderW}px solid #09090b`,\n zIndex: 1,\n }}\n />\n )}\n </div>\n );\n }\n);\nAvatar.displayName = \"Avatar\";\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nlet marqueeStyleInjected = false;\n\nexport interface MarqueeProps {\n children: React.ReactNode;\n /** Speed in seconds for one full cycle */\n speed?: number;\n /** Direction */\n direction?: \"left\" | \"right\" | \"up\" | \"down\";\n /** Pause on hover */\n pauseOnHover?: boolean;\n /** Fade edges */\n fade?: boolean;\n /** Number of copies (higher = smoother for short content) */\n repeat?: number;\n className?: string;\n}\n\nexport const Marquee: React.FC<MarqueeProps> = ({\n children,\n speed = 30,\n direction = \"left\",\n pauseOnHover = true,\n fade = true,\n repeat = 4,\n className,\n}) => {\n useEffect(() => {\n if (!marqueeStyleInjected) {\n marqueeStyleInjected = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes uixy-marquee-h { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }\n @keyframes uixy-marquee-v { 0% { transform: translateY(0); } 100% { transform: translateY(-50%); } }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const isVertical = direction === \"up\" || direction === \"down\";\n const isReverse = direction === \"right\" || direction === \"down\";\n\n const animName = isVertical ? \"uixy-marquee-v\" : \"uixy-marquee-h\";\n const animDir = isReverse ? \"reverse\" : \"normal\";\n const fadeDir = isVertical ? \"to bottom\" : \"to right\";\n\n return (\n <div\n className={cn(\"overflow-hidden relative\", className)}\n style={fade ? {\n maskImage: `linear-gradient(${fadeDir}, transparent 0%, black 10%, black 90%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(${fadeDir}, transparent 0%, black 10%, black 90%, transparent 100%)`,\n } : undefined}\n >\n <div\n className={cn(\n isVertical ? \"flex flex-col\" : \"flex\",\n pauseOnHover && \"hover:[animation-play-state:paused]\"\n )}\n style={{\n animation: `${animName} ${speed}s linear infinite`,\n animationDirection: animDir,\n }}\n >\n {Array.from({ length: repeat }, (_, i) => (\n <div key={i} className={cn(isVertical ? \"flex flex-col\" : \"flex\", \"shrink-0\")}>\n {children}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nMarquee.displayName = \"Marquee\";\n"],"mappings":"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","names":["React","import_react","import_jsx_runtime","variantStyles","sizeStyles","React","import_react","import_jsx_runtime","sizeStyles","React","import_react","import_jsx_runtime","sizeStyles","React","import_react","import_jsx_runtime","sizeStyles","React","import_react","import_jsx_runtime","sizeStyles","React","import_react","import_jsx_runtime","timeout","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","color","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","t","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}