@ekoru/ui 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/components/Button/Button.tsx"],"names":["cn","inputs","twMerge","clsx","buttonVariants","cva","Button","e","className","variant","size","fullWidth","isLoading","leftIcon","rightIcon","children","disabled","props","ref","MotionButton","motion","jsxs","AnimatePresence","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes\n * Combines clsx for conditional classes and twMerge for proper Tailwind merging\n * \n * @example\n * cn('px-2 py-1', condition && 'bg-blue-500', 'hover:bg-blue-600')\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion, AnimatePresence } from 'motion/react';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-lg font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n primary:\n 'border-2 border-primary bg-primary text-white hover:bg-primary/90 active:bg-primary/80 shadow-md',\n secondary:\n 'border-2 border-secondary bg-secondary text-white hover:bg-secondary/90 active:bg-secondary/80',\n outline:\n 'border-2 border-primary text-primary hover:bg-primary/5 hover:text-accent-foreground active:bg-primary/10',\n ghost: 'hover:bg-muted active:bg-muted/80 text-foreground',\n success:\n 'border-2 border-success bg-success text-white hover:bg-success/90 active:bg-success/80 shadow-md',\n warning:\n 'border-2 border-warning bg-warning text-white hover:bg-warning/90 active:bg-warning/80 shadow-md',\n error:\n 'border-2 border-error bg-error text-white hover:bg-error/90 active:bg-error/80 shadow-md',\n },\n size: {\n sm: 'min-h-9 px-3 py-2 text-sm',\n md: 'min-h-11 px-6 py-2.5 text-base',\n lg: 'min-h-14 px-8 py-3 text-lg',\n },\n fullWidth: {\n true: 'w-full',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n | 'onDrag'\n | 'onDragEnd'\n | 'onDragStart'\n | 'onAnimationStart'\n | 'onAnimationEnd'\n >,\n VariantProps<typeof buttonVariants> {\n /**\n * If true, the button will show a loading spinner\n */\n isLoading?: boolean;\n /**\n * Icon to display before the button text (can be a lucide-react component or JSX element)\n */\n leftIcon?: React.ElementType | React.ReactElement;\n /**\n * Icon to display after the button text (can be a lucide-react component or JSX element)\n */\n rightIcon?: React.ElementType | React.ReactElement;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n fullWidth,\n isLoading,\n leftIcon,\n rightIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const MotionButton = motion.button;\n\n return (\n <MotionButton\n className={cn(buttonVariants({ variant, size, fullWidth, className }))}\n ref={ref}\n disabled={disabled || isLoading}\n whileHover={{ scale: 1.02, y: -2 }}\n whileTap={{ scale: 0.96, y: 0 }}\n transition={{ type: 'spring', stiffness: 400, damping: 17 }}\n {...props}\n >\n <AnimatePresence mode=\"wait\">\n {isLoading && (\n <motion.svg\n key=\"spinner\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.2 }}\n className=\"mr-2 h-4 w-4 animate-spin\"\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 </motion.svg>\n )}\n {!isLoading && leftIcon && (\n <motion.span\n key=\"leftIcon\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.2 }}\n className=\"mr-2 inline-flex items-center justify-center flex-shrink-0\"\n >\n {React.isValidElement(leftIcon)\n ? leftIcon\n : React.createElement(leftIcon as React.ElementType, {\n size: 18,\n className: 'flex-shrink-0',\n })}\n </motion.span>\n )}\n </AnimatePresence>\n {children}\n {!isLoading && rightIcon && (\n <span className=\"ml-2 inline-flex items-center justify-center flex-shrink-0\">\n {React.isValidElement(rightIcon)\n ? rightIcon\n : React.createElement(rightIcon as React.ElementType, {\n size: 18,\n className: 'flex-shrink-0',\n })}\n </span>\n )}\n </MotionButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"]}
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/components/AdBanner/AdBanner.tsx","../src/components/Banner/Banner.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Carousel/Carousel.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Modal/Modal.tsx","../src/components/EnvironmentalImpactModal/EnvironmentalImpactModal.tsx","../src/components/Footer/Footer.tsx","../src/components/HeroCarousel/HeroCarousel.tsx","../src/components/Navigation/Navigation.tsx","../src/components/Select/Select.tsx","../src/components/Pagination/Pagination.tsx","../src/components/ProductCard/FrontSide.tsx","../src/components/ProductCard/BackSide.tsx","../src/components/ProductCard/ProductCard.tsx","../src/components/StatsCard/StatsCard.tsx","../src/components/Table/Table.tsx","../src/components/Text/Text.tsx","../src/components/Textarea/Textarea.tsx","../src/components/TextInput/TextInput.tsx","../src/components/Title/Title.tsx"],"names":["cn","inputs","twMerge","clsx","adBannerVariants","cva","AdBanner","Ke","icon","title","description","cta","variant","animated","className","props","ref","MotionDiv","motion","Icon","jsx","jsxs","AdBanner_default","bannerVariants","dotVariants","Banner","We","showDots","buttonVariants","Button","Q","size","fullWidth","isLoading","leftIcon","rightIcon","children","disabled","loadingText","MotionButton","AnimatePresence","Loader2","Card","image","hasBadge","badgeText","badgeColor","textColor","Image","containerVariants","Carousel","header","link","items","containerRef","useRef","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","checkScroll","useCallback","el","useEffect","scrollBy","distance","scrollLeft","scrollRight","hasItems","ArrowLeft","ArrowRight","node","idx","React","checkboxVariants","Checkbox","xe","label","errorMessage","checked","onCheckedChange","onChange","id","name","iconSizes","handleChange","e","newChecked","reactId","generatedId","Check","modalVariants","Modal","isOpen","onClose","showCloseButton","closeOnOverlayClick","closeOnEscape","handleEscape","originalOverflow","createPortal","X","EnvironmentalImpactModal","environmentalImpact","co2SavingsTitle","waterSavingsTitle","weightLabel","co2SavingsLabel","waterSavingsLabel","materialBreakdownLabel","carDistanceLabel","showerCountLabel","co2EquivalenceLabel","waterEquivalenceLabel","infoText","formatNumber","num","Leaf","Droplets","Info","material","index","Footer","brand","socialLinks","exploreItems","exploreLabel","communityItems","communityLabel","legalItems","legalLabel","copyRightText","item","HeroCarousel","banners","ImageComponent","autoScrollInterval","currentBanner","setCurrentBanner","isHovered","setIsHovered","interval","prev","nextBanner","prevBanner","goToBanner","ImageEl","banner","isActive","isPrev","Fragment","ChevronLeft","ChevronRight","_","Navbar","navigationIcons","navigationLinks","searchPlaceholder","onSearch","mobileMenuContent","searchEnabled","sideMenuTitle","navbarAriaLabel","userActionsAriaLabel","toggleMobileMenuAriaLabel","closeMobileMenuAriaLabel","mobileMenuTitleAriaLabel","isMobileMenuOpen","setIsMobileMenuOpen","searchQuery","setSearchQuery","closeMobileMenu","handleSearchChange","handleSearchSubmit","handleKeyDown","event","Search","Menu","selectVariants","Select","L","LeftIcon","value","options","width","readOnly","showColorIcon","renderOption","dropdownDirection","placeholder","noResultsText","isFocused","setIsFocused","setIsOpen","search","setSearch","highlightedIndex","setHighlightedIndex","dropdownPosition","setDropdownPosition","mounted","setMounted","buttonRef","dropdownRef","listboxId","selectedOption","o","filteredOptions","widthClass","computedHasError","updateDropdownPosition","rect","handleClickOutside","handleFocus","handleBlur","renderLabel","option","Circle","i","dropdownContent","ChevronDown","paginationButtonVariants","Pagination","ct","currentPage","totalPages","onPageChange","itemsPerPage","onItemsPerPageChange","previousLabel","nextLabel","rowsLabel","previousAriaLabel","nextAriaLabel","showItemsPerPage","itemsPerPageOptions","showPageInfo","pageInfoTemplate","showIcons","rowsOptions","pageInfo","handlePrevious","handleNext","CardFrontSide","isFlipped","setIsFlipped","onCardClick","productImage","fallbackImage","productCondition","price","color","isExchangeable","isStoreProduct","hasOffer","offerPrice","onAddToCart","onExchange","addToCartAriaLabel","exchangeAriaLabel","offerLabel","localeString","addToCartLabel","exchangeLabel","interests","conditionColorMap","getConditionColor","condition","RotateCcw","interest","ShoppingCart","IterationCw","CardBackSide","setShowImpactModal","sellerName","sellerPhone","sellerAddress","impactLabel","materialsLabel","viewMoreLabel","sellerLabel","co2Label","waterLabel","calculateImpactLevel","co2","normalizedImpact","materialBreakdown","m","mm","materialType","percentage","weightKG","co2SavingsKG","waterSavingsLT","totalCo2SavingsKG","s","totalWaterSavingsLT","impactLevel","UserRound","Phone","MapPin","ProductCard","product","showImpactModal","images","seller","storeHasOffer","storeOfferPrice","envImpactModal","backImpact","StatsCard","mainText","tableVariants","Table","vt","columns","data","rowKey","striped","hover","emptyMessage","col","row","key","Table_default","textVariants","Text","wt","weight","align","as","htmlFor","textareaVariants","Textarea","le","textSize","showCharCount","maxLength","currentLength","inputVariants","TextInput","pe","hasError","type","onFocus","onBlur","showPassword","setShowPassword","isPassword","inputType","togglePasswordVisibility","EyeOff","Eye","titleVariants","Title","Rt","level"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes\n * Combines clsx for conditional classes and twMerge for proper Tailwind merging\n * \n * @example\n * cn('px-2 py-1', condition && 'bg-blue-500', 'hover:bg-blue-600')\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { type LucideIcon } from 'lucide-react';\nimport { cn } from '@/utils/cn';\nimport { motion } from 'motion/react';\n\nconst adBannerVariants = cva(\n 'w-full border-t border-b overflow-hidden rounded-none',\n {\n variants: {\n variant: {\n primary:\n 'bg-gradient-to-r from-primary-dark via-primary to-primary-dark text-white',\n secondary:\n 'bg-gradient-to-r from-secondary-dark via-secondary to-secondary-dark text-white',\n outlined: 'bg-background border border-primary text-foreground',\n ghost: 'bg-white/50 text-foreground',\n },\n animated: {\n true: '',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'primary',\n animated: true,\n },\n }\n);\n\nexport interface AdBannerProps\n extends\n Omit<\n React.HTMLAttributes<HTMLElement>,\n | 'onDrag'\n | 'onDragEnd'\n | 'onDragStart'\n | 'onAnimationStart'\n | 'onAnimationEnd'\n >,\n VariantProps<typeof adBannerVariants> {\n icon?: LucideIcon;\n title?: string;\n description?: string;\n cta: React.ReactNode;\n}\n\nconst AdBanner = React.forwardRef<HTMLDivElement, AdBannerProps>(\n (\n { icon, title, description, cta, variant, animated, className, ...props },\n ref\n ) => {\n const MotionDiv = motion.div;\n const Icon = icon as LucideIcon | undefined;\n\n return (\n <MotionDiv\n ref={ref}\n initial={{ opacity: 0, y: -8 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true }}\n transition={{ duration: 0.45 }}\n className={cn(\n adBannerVariants({ variant, animated }),\n 'p-4 md:p-5',\n className\n )}\n {...props}\n >\n <motion.div\n className={cn(\n 'flex flex-col sm:flex-row',\n 'items-center',\n 'gap-4 py-2 px-2',\n 'justify-between'\n )}\n >\n <motion.div\n className={cn(\n 'flex flex-col',\n 'items-center sm:items-start',\n 'justify-center'\n )}\n >\n {Icon && (\n <motion.div\n className={cn(\n 'w-20 h-20',\n 'flex items-center justify-center',\n 'rounded-lg',\n 'mb-2',\n {\n 'bg-white/10':\n variant === 'primary' || variant === 'secondary',\n 'bg-primary/10':\n variant === 'outlined' || variant === 'ghost',\n }\n )}\n >\n <Icon\n className={cn('w-10 h-10', {\n 'text-white':\n variant === 'primary' || variant === 'secondary',\n 'text-primary':\n variant === 'outlined' || variant === 'ghost',\n })}\n />\n </motion.div>\n )}\n\n {title && (\n <motion.h3\n className={cn(\n 'text-lg font-bold',\n 'text-center sm:text-left',\n 'mb-1'\n )}\n >\n {title}\n </motion.h3>\n )}\n\n {description && (\n <motion.p\n className={cn(\n 'text-sm text-center sm:text-left',\n 'text-muted',\n 'mb-0'\n )}\n >\n {description}\n </motion.p>\n )}\n </motion.div>\n\n <motion.div className={cn('flex items-center justify-center')}>\n {cta}\n </motion.div>\n </motion.div>\n </MotionDiv>\n );\n }\n);\n\nAdBanner.displayName = 'AdBanner';\n\nexport default AdBanner;\nexport { adBannerVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion } from 'motion/react';\n\nconst bannerVariants = cva(\n 'p-4 md:p-5 rounded-xl w-[95%] mx-auto overflow-hidden relative',\n {\n variants: {\n variant: {\n primary:\n 'border-2 border-transparent bg-gradient-to-r from-primary-dark via-primary to-primary-dark text-white shadow-lg',\n secondary:\n 'border-2 border-transparent bg-gradient-to-r from-secondary-dark via-secondary to-secondary-dark text-white shadow-lg',\n outlined:\n 'border-2 border-primary shadow-lg bg-background backdrop-blur',\n ghost: 'border-2 border-transparent bg-white/50 backdrop-blur',\n },\n animated: {\n true: '',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'primary',\n animated: true,\n },\n }\n);\n\nconst dotVariants = cva('w-3 h-3 rounded-full inline-block', {\n variants: {\n variant: {\n primary: 'bg-white shadow-lg shadow-white/50',\n secondary: 'bg-white',\n outlined: 'bg-primary',\n ghost: 'bg-gray-600',\n },\n },\n defaultVariants: {\n variant: 'primary',\n },\n});\n\nexport interface BannerProps\n extends\n Omit<\n React.HTMLAttributes<HTMLDivElement>,\n | 'onDrag'\n | 'onDragEnd'\n | 'onDragStart'\n | 'onAnimationStart'\n | 'onAnimationEnd'\n >,\n VariantProps<typeof bannerVariants> {\n /**\n * The main title text of the banner\n */\n title: string;\n /**\n * The description text of the banner\n */\n description: string;\n /**\n * Whether to show decorative dots around the title\n */\n showDots?: boolean;\n}\n\nconst Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n (\n {\n className,\n variant,\n animated,\n title,\n description,\n showDots = true,\n ...props\n },\n ref\n ) => {\n const MotionDiv = motion.div;\n\n return (\n <MotionDiv\n ref={ref}\n initial={{ opacity: 0, y: -20 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true }}\n transition={{ duration: 0.6 }}\n className={cn(bannerVariants({ variant, animated, className }))}\n {...props}\n >\n {/* Subtle animated background for primary variant */}\n {animated && variant === 'primary' && (\n <motion.div\n animate={{\n x: ['-100%', '100%'],\n }}\n transition={{\n duration: 15,\n repeat: Infinity,\n ease: 'linear',\n }}\n className={cn(\n 'absolute inset-0',\n 'bg-gradient-to-r from-transparent via-white/10 to-transparent'\n )}\n />\n )}\n\n <motion.div className=\"relative z-10\">\n <motion.div\n className={cn(\n 'flex flex-1 justify-center items-center',\n 'gap-2 md:gap-3',\n 'mb-3'\n )}\n >\n {showDots && (\n <motion.span\n initial={{ scale: 0 }}\n whileInView={{ scale: 1 }}\n viewport={{ once: true }}\n transition={{ delay: 0.2, type: 'spring' }}\n className={cn(dotVariants({ variant }))}\n />\n )}\n <motion.h2\n initial={{ opacity: 0 }}\n whileInView={{ opacity: 1 }}\n viewport={{ once: true }}\n transition={{ delay: 0.3 }}\n className={cn(\n 'text-base sm:text-lg md:text-2xl',\n 'font-bold',\n 'text-center',\n 'tracking-tight'\n )}\n >\n {title}\n </motion.h2>\n {showDots && (\n <motion.span\n initial={{ scale: 0 }}\n whileInView={{ scale: 1 }}\n viewport={{ once: true }}\n transition={{ delay: 0.4, type: 'spring' }}\n className={cn(dotVariants({ variant }))}\n />\n )}\n </motion.div>\n <motion.p\n initial={{ opacity: 0, y: 10 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true }}\n transition={{ delay: 0.5 }}\n className={cn(\n 'text-sm sm:text-base md:text-lg',\n 'text-center',\n 'leading-snug md:leading-normal',\n 'font-light'\n )}\n >\n {description}\n </motion.p>\n </motion.div>\n </MotionDiv>\n );\n }\n);\n\nBanner.displayName = 'Banner';\n\nexport { Banner, bannerVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Loader2 } from 'lucide-react';\n\nconst buttonVariants = cva(\n 'btn disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n primary:\n 'border-2 border-primary bg-primary text-white hover:bg-primary/90 active:bg-primary/80 shadow-md',\n secondary:\n 'border-2 border-secondary bg-secondary text-white hover:bg-secondary/90 active:bg-secondary/80',\n secondary_outline:\n 'border-2 border-secondary bg-white text-secondary hover:bg-white/90 active:bg-white/80',\n outline:\n 'border-2 border-primary text-primary hover:bg-primary/5 hover:text-accent-foreground active:bg-primary/10',\n ghost: 'hover:bg-muted active:bg-muted/80 text-foreground',\n success:\n 'border-2 border-success bg-success text-white hover:bg-success/90 active:bg-success/80 shadow-md',\n warning:\n 'border-2 border-warning bg-warning text-white hover:bg-warning/90 active:bg-warning/80 shadow-md',\n error:\n 'border-2 border-error bg-error text-white hover:bg-error/90 active:bg-error/80 shadow-md',\n },\n size: {\n sm: 'min-h-[36px] px-2 py-2 text-sm',\n md: 'min-h-[44px] px-6 py-2.5 text-base',\n lg: 'min-h-[56px] px-8 py-3 text-lg',\n },\n fullWidth: {\n true: 'w-full',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n | 'onDrag'\n | 'onDragEnd'\n | 'onDragStart'\n | 'onAnimationStart'\n | 'onAnimationEnd'\n >,\n VariantProps<typeof buttonVariants> {\n /**\n * If true, the button will show a loading spinner\n */\n isLoading?: boolean;\n loadingText?: string;\n /**\n * Icon to display before the button text (can be a lucide-react component or JSX element)\n */\n leftIcon?: React.ElementType | React.ReactElement;\n /**\n * Icon to display after the button text (can be a lucide-react component or JSX element)\n */\n rightIcon?: React.ElementType | React.ReactElement;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n fullWidth,\n isLoading,\n leftIcon,\n rightIcon,\n children,\n disabled,\n loadingText = 'Loading...',\n ...props\n },\n ref\n ) => {\n const MotionButton = motion.button;\n\n return (\n <MotionButton\n className={cn(buttonVariants({ variant, size, fullWidth, className }))}\n ref={ref}\n disabled={disabled || isLoading}\n whileHover={{ scale: 1.02, y: -2 }}\n whileTap={{ scale: 0.96, y: 0 }}\n transition={{ type: 'spring', stiffness: 400, damping: 17 }}\n {...props}\n >\n <AnimatePresence mode=\"wait\">\n {isLoading && (\n <motion.div\n key=\"loading\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"flex items-center space-x-2\"\n >\n <Loader2 className=\"w-5 h-5 animate-spin mr-2\" />\n </motion.div>\n )}\n {!isLoading && leftIcon && (\n <motion.span\n key=\"leftIcon\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.2 }}\n className=\"mr-2 inline-flex items-center justify-center flex-shrink-0\"\n >\n {React.isValidElement(leftIcon)\n ? leftIcon\n : React.createElement(leftIcon as React.ElementType, {\n size: 18,\n className: 'flex-shrink-0',\n })}\n </motion.span>\n )}\n </AnimatePresence>\n {isLoading ? loadingText : children}\n {!isLoading && rightIcon && (\n <span className=\"ml-2 inline-flex items-center justify-center flex-shrink-0\">\n {React.isValidElement(rightIcon)\n ? rightIcon\n : React.createElement(rightIcon as React.ElementType, {\n size: 18,\n className: 'flex-shrink-0',\n })}\n </span>\n )}\n </MotionButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import { cn } from '@/utils';\nimport { Image } from 'lucide-react';\nimport { motion } from 'motion/react';\nexport interface CardProps {\n title: string;\n description?: string;\n cta?: React.ReactNode;\n image?: React.ReactNode;\n hasBadge?: boolean;\n badgeText?: string;\n badgeColor?: string;\n textColor?: string;\n}\n\nexport default function Card({\n image,\n title,\n description,\n cta,\n hasBadge,\n badgeText,\n badgeColor = 'bg-primary',\n textColor = 'text-white',\n}: CardProps) {\n return (\n <motion.article\n className={cn(\n 'w-64',\n 'bg-white',\n 'rounded-lg',\n 'overflow-hidden',\n 'shadow-md',\n 'relative'\n )}\n >\n <motion.div className=\"h-40 w-full overflow-hidden\">\n {image ? (\n image\n ) : (\n <motion.div\n className={cn(\n 'h-40 w-full',\n 'bg-gray-200',\n 'flex items-center justify-center'\n )}\n >\n <motion.span className=\"text-gray-500\">\n <Image />\n </motion.span>\n </motion.div>\n )}\n </motion.div>\n {hasBadge && badgeText && (\n <motion.div\n className={cn(\n 'absolute top-2 left-2',\n 'text-xs',\n 'font-semibold',\n 'px-4 py-1',\n 'rounded-lg',\n 'shadow-md',\n badgeColor,\n textColor\n )}\n >\n {badgeText}\n </motion.div>\n )}\n <motion.div className=\"p-4\">\n <motion.h3\n className={cn(\n 'text-lg',\n 'font-semibold',\n 'text-gray-900',\n 'dark:text-stone-100'\n )}\n >\n {title}\n </motion.h3>\n {description && (\n <motion.p\n className={cn(\n 'text-sm',\n 'text-gray-600',\n 'dark:text-stone-400',\n 'mt-2'\n )}\n >\n {description}\n </motion.p>\n )}\n {cta && <motion.div className=\"mt-2\">{cta}</motion.div>}\n </motion.div>\n </motion.article>\n );\n}\n","import { ArrowLeft, ArrowRight } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nconst containerVariants = cva('py-8', {\n variants: {\n variant: {\n default: '',\n compact: 'py-4',\n centered: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CarouselProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,\n VariantProps<typeof containerVariants> {\n header?: React.ReactNode;\n description?: React.ReactNode;\n link?: React.ReactNode;\n items?: React.ReactNode[];\n children?: React.ReactNode; // fallback to custom children\n}\n\nexport default function Carousel({\n header,\n description,\n link,\n items,\n children,\n variant,\n className,\n ...props\n}: CarouselProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const checkScroll = useCallback(() => {\n const el = containerRef.current;\n if (!el) return;\n setCanScrollLeft(el.scrollLeft > 0);\n setCanScrollRight(el.scrollLeft < el.scrollWidth - el.clientWidth - 1);\n }, []);\n\n useEffect(() => {\n checkScroll();\n const el = containerRef.current;\n if (!el) return;\n el.addEventListener('scroll', checkScroll);\n window.addEventListener('resize', checkScroll);\n return () => {\n el.removeEventListener('scroll', checkScroll);\n window.removeEventListener('resize', checkScroll);\n };\n }, [checkScroll, items, children]);\n\n const scrollBy = (distance: number) => {\n const el = containerRef.current;\n if (!el) return;\n // Smooth scroll; in tests this can be stubbed\n el.scrollTo({ left: el.scrollLeft + distance, behavior: 'smooth' });\n };\n\n const scrollLeft = () =>\n scrollBy(-(containerRef.current?.clientWidth ?? 300) * 0.8);\n const scrollRight = () =>\n scrollBy((containerRef.current?.clientWidth ?? 300) * 0.8);\n\n const hasItems = Array.isArray(items) && items.length > 0;\n\n return (\n <section\n className={cn(containerVariants({ variant }), className)}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex flex-col sm:flex-row sm:justify-between mb-4 items-start gap-2\">\n <div className=\"flex flex-col items-start gap-1\">\n {header && <h2 className=\"font-bold\">{header}</h2>}\n {description && (\n <p className=\"text-sm text-text-muted\">{description}</p>\n )}\n </div>\n {link && <div>{link}</div>}\n </div>\n\n <div className=\"relative\">\n {/* left control */}\n {canScrollLeft && (\n <button\n aria-label=\"Scroll left\"\n onClick={scrollLeft}\n className=\"absolute left-0 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-background/70 backdrop-blur hover:scale-105 transition-transform\"\n >\n <ArrowLeft className=\"w-5 h-5\" />\n </button>\n )}\n\n {/* right control */}\n {canScrollRight && (\n <button\n aria-label=\"Scroll right\"\n onClick={scrollRight}\n className=\"absolute right-0 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-background/70 backdrop-blur hover:scale-105 transition-transform\"\n >\n <ArrowRight className=\"w-5 h-5\" />\n </button>\n )}\n\n <div\n ref={containerRef}\n className=\"flex gap-4 overflow-x-auto pb-4 scrollbar-hide scroll-smooth\"\n role=\"list\"\n >\n {hasItems\n ? // items is an array of React nodes supplied by the consumer; render them directly\n (items as React.ReactNode[]).map((node, idx) => (\n // ensure each child has a stable key when rendering nodes\n <div\n key={React.isValidElement(node) ? node.key ?? idx : idx}\n className=\"flex-shrink-0\"\n >\n {node}\n </div>\n ))\n : children}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion } from 'motion/react';\nimport { Check } from 'lucide-react';\n\nconst checkboxVariants = cva(\n 'relative rounded-md border-2 flex items-center justify-center transition-all duration-200 cursor-pointer',\n {\n variants: {\n variant: {\n default: 'border-input-border hover:border-primary/50',\n filled: 'border-transparent bg-background-secondary',\n outline: 'border-primary bg-transparent',\n },\n size: {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n },\n checked: {\n true: 'bg-primary border-primary',\n false: '',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n checked: false,\n disabled: false,\n },\n }\n);\n\ntype CheckboxVariantProps = VariantProps<typeof checkboxVariants>;\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n Omit<CheckboxVariantProps, 'checked' | 'disabled'> {\n /**\n * Checkbox label text\n */\n label?: string;\n /**\n * Optional description text below the label\n */\n description?: string;\n /**\n * Error message to display\n */\n errorMessage?: string;\n /**\n * Whether the checkbox is checked\n */\n checked?: boolean;\n /**\n * Callback when checkbox state changes\n */\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n variant,\n size = 'md',\n label,\n description,\n errorMessage,\n checked = false,\n disabled = false,\n onCheckedChange,\n onChange,\n id,\n name,\n ...props\n },\n ref\n ) => {\n const iconSizes = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newChecked = e.target.checked;\n onCheckedChange?.(newChecked);\n onChange?.(e);\n };\n\n const reactId = React.useId();\n const generatedId = id || name || `checkbox-${reactId}`;\n\n return (\n <motion.div className=\"space-y-1\">\n <motion.div className=\"flex items-start space-x-3\">\n <motion.div className=\"relative\">\n <motion.button\n type=\"button\"\n onClick={() => !disabled && onCheckedChange?.(!checked)}\n disabled={disabled}\n className={cn(\n checkboxVariants({\n variant,\n size,\n checked,\n disabled,\n className,\n })\n )}\n whileTap={!disabled ? { scale: 0.95 } : {}}\n >\n <motion.div\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{\n opacity: checked ? 1 : 0,\n scale: checked ? 1 : 0.5,\n }}\n transition={{ duration: 0.2 }}\n >\n <Check size={iconSizes[size || 'md']} className=\"text-white\" />\n </motion.div>\n </motion.button>\n <input\n ref={ref}\n id={generatedId}\n name={name}\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n {...props}\n />\n </motion.div>\n {label && (\n <motion.div className=\"flex-1\">\n <motion.label\n htmlFor={generatedId}\n className={cn(\n 'text-sm font-medium cursor-pointer',\n disabled\n ? 'text-foreground-tertiary cursor-not-allowed'\n : 'text-foreground',\n errorMessage && 'text-error'\n )}\n >\n {label}\n </motion.label>\n {description && (\n <motion.p className=\"text-sm text-foreground-tertiary mt-1\">\n {description}\n </motion.p>\n )}\n </motion.div>\n )}\n </motion.div>\n {errorMessage && (\n <motion.p\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className=\"text-xs text-error ml-8\"\n >\n {errorMessage}\n </motion.p>\n )}\n </motion.div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox, checkboxVariants };\n","import { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils';\n\nconst modalVariants = cva(\n 'relative w-full max-h-[90vh] rounded-lg shadow-2xl overflow-hidden z-10',\n {\n variants: {\n size: {\n sm: 'max-w-md',\n md: 'max-w-lg',\n lg: 'max-w-2xl',\n xl: 'max-w-4xl',\n full: 'max-w-7xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface ModalProps extends VariantProps<typeof modalVariants> {\n isOpen?: boolean;\n onClose?: () => void;\n children: React.ReactNode;\n title?: string;\n showCloseButton?: boolean;\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n className?: string;\n}\n\nexport default function Modal({\n isOpen,\n onClose,\n children,\n title,\n size = 'md',\n showCloseButton = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className,\n}: ModalProps) {\n // Close modal on escape key and handle body scroll\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose?.();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n // Store original overflow\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = originalOverflow || 'unset';\n };\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen, onClose, closeOnEscape]);\n\n // Don't render anything if not open\n if (!isOpen) return null;\n\n // Create portal to render modal at document body level\n return createPortal(\n <AnimatePresence mode=\"wait\" initial={false}>\n {isOpen && (\n <motion.div\n key=\"modal\"\n transition={{ duration: 0.2 }}\n className={cn(\n 'fixed inset-0 z-[9999]',\n 'flex items-center justify-center',\n 'p-4'\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n >\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={cn(\n 'absolute inset-0',\n 'bg-black/60',\n 'backdrop-blur-sm'\n )}\n onClick={closeOnOverlayClick ? onClose : undefined}\n aria-label=\"Close modal\"\n />\n\n {/* Modal Content */}\n <motion.div\n initial={{ scale: 0.9, opacity: 0, y: 30 }}\n animate={{ scale: 1, opacity: 1, y: 0 }}\n exit={{ scale: 0.9, opacity: 0, y: 30 }}\n transition={{\n type: 'spring',\n damping: 25,\n stiffness: 300,\n }}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n modalVariants({ size }),\n 'bg-surface border border-border',\n className\n )}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div\n className={cn(\n 'flex items-center justify-between',\n 'p-6',\n 'border-b border-border'\n )}\n >\n {title && (\n <h3\n id=\"modal-title\"\n className=\"font-semibold text-lg text-foreground\"\n >\n {title}\n </h3>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n className={cn(\n 'p-1 rounded-lg text-foreground-secondary',\n 'hover:text-foreground hover:bg-background-secondary',\n 'transition-colors'\n )}\n aria-label=\"Close modal\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n )}\n\n {/* Body */}\n <div\n className={cn(\n 'p-6',\n 'overflow-y-auto',\n 'max-h-[calc(90vh-8rem)]',\n 'scrollbar-hide',\n 'text-foreground'\n )}\n >\n {children}\n </div>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>,\n document.body\n );\n}\n","import { Droplets, Leaf, Info } from 'lucide-react';\nimport { Modal } from '../Modal';\nimport { cn } from '@/utils';\n\nexport interface EnvironmentalImpactModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n environmentalImpact: {\n totalCo2SavingsKG: number;\n totalWaterSavingsLT: number;\n materialBreakdown: Array<{\n materialType: string;\n percentage: number;\n weightKG: number;\n co2SavingsKG: number;\n waterSavingsLT: number;\n }>;\n };\n\n // Labels\n co2SavingsTitle?: string;\n waterSavingsTitle?: string;\n weightLabel?: string;\n co2SavingsLabel?: string;\n waterSavingsLabel?: string;\n materialBreakdownLabel?: string;\n co2EquivalenceLabel?: string;\n waterEquivalenceLabel?: string;\n infoText?: string;\n carDistanceLabel?: string;\n showerCountLabel?: string;\n}\n\nexport default function EnvironmentalImpactModal({\n isOpen,\n onClose,\n environmentalImpact,\n\n // Labels\n co2SavingsTitle = 'CO₂ Savings',\n waterSavingsTitle = 'Water Savings',\n weightLabel = 'Weight',\n co2SavingsLabel = 'CO₂ Saved',\n waterSavingsLabel = 'Water Saved',\n materialBreakdownLabel = 'Material Breakdown',\n carDistanceLabel = ' by car',\n showerCountLabel = ' showers',\n co2EquivalenceLabel = 'Equivalent to',\n waterEquivalenceLabel = 'Equivalent to',\n infoText = 'These values are estimates based on the savings generated by reusing products instead of manufacturing new ones. The calculations consider the average impact of producing each material.',\n}: EnvironmentalImpactModalProps) {\n const formatNumber = (num: number) => {\n return new Intl.NumberFormat('es-CL', {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }).format(num);\n };\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title=\"Impacto Ambiental Detallado\"\n size=\"md\"\n >\n <div className=\"space-y-6\">\n {/* Environmental Savings Summary */}\n <div className={cn('flex flex-col md:flex-row', 'gap-4 md:gap-6')}>\n <div\n className={cn(\n 'bg-success/10 dark:bg-success/20',\n 'rounded-lg',\n 'p-4',\n 'flex-1'\n )}\n >\n <div className={cn('flex items-center', 'gap-2', 'mb-2')}>\n <Leaf className=\"w-5 h-5 text-success\" />\n <span\n className={cn(\n 'text-sm font-medium text-text-muted',\n 'dark:text-stone-400'\n )}\n >\n {co2SavingsTitle}\n </span>\n </div>\n <p className={cn('text-2xl font-bold text-success')}>\n {formatNumber(environmentalImpact.totalCo2SavingsKG)} kg\n </p>\n <p\n className={cn(\n 'text-xs text-text-muted',\n 'dark:text-stone-400',\n 'mt-1'\n )}\n >\n {co2EquivalenceLabel}{' '}\n {formatNumber(environmentalImpact.totalCo2SavingsKG * 4.5)} km\n {carDistanceLabel}\n </p>\n </div>\n\n <div\n className={cn(\n 'bg-info/10',\n 'dark:bg-info/20',\n 'rounded-lg',\n 'p-4',\n 'flex-1'\n )}\n >\n <div className={cn('flex', 'items-center', 'gap-2', 'mb-2')}>\n <Droplets className=\"w-5 h-5 text-info\" />\n <span\n className={cn(\n 'text-sm',\n 'font-medium',\n 'text-text-muted',\n 'dark:text-stone-400'\n )}\n >\n {waterSavingsTitle}\n </span>\n </div>\n <p className={cn('text-2xl', 'font-bold', 'text-info')}>\n {formatNumber(environmentalImpact.totalWaterSavingsLT)} L\n </p>\n <p\n className={cn(\n 'text-xs',\n 'text-text-muted',\n 'dark:text-stone-400',\n 'mt-1'\n )}\n >\n {waterEquivalenceLabel}{' '}\n {formatNumber(environmentalImpact.totalWaterSavingsLT / 8)}{' '}\n {showerCountLabel}\n </p>\n </div>\n </div>\n\n {/* Material Breakdown */}\n {environmentalImpact.materialBreakdown.length > 0 && (\n <div>\n <h3\n className={cn(\n 'text-lg',\n 'font-bold',\n 'text-text-primary',\n 'dark:text-stone-100',\n 'mb-4',\n 'flex',\n 'items-center',\n 'gap-2'\n )}\n >\n <Info className=\"w-5 h-5\" />\n {materialBreakdownLabel}\n </h3>\n\n <div className={cn('space-y-3')}>\n {environmentalImpact.materialBreakdown.map((material, index) => (\n <div\n key={index}\n className={cn(\n 'border',\n 'border-neutral/20',\n 'dark:border-stone-700',\n 'rounded-lg',\n 'p-4',\n 'hover:bg-neutral/5',\n 'dark:hover:bg-stone-800/50',\n 'transition-colors'\n )}\n >\n <div\n className={cn(\n 'flex',\n 'items-center',\n 'justify-between',\n 'mb-3'\n )}\n >\n <h4\n className={cn(\n 'font-semibold',\n 'text-text-primary',\n 'dark:text-stone-100'\n )}\n >\n {material.materialType}\n </h4>\n <span\n className={cn('text-lg', 'font-bold', 'text-primary')}\n >\n {material.percentage.toFixed(1)}%\n </span>\n </div>\n\n <div\n className={cn('grid', 'grid-cols-3', 'gap-3', 'text-sm')}\n >\n <div>\n <p\n className={cn(\n 'text-xs',\n 'text-text-muted',\n 'dark:text-stone-400',\n 'mb-1'\n )}\n >\n {weightLabel}\n </p>\n <p\n className={cn(\n 'font-semibold',\n 'text-text-secondary',\n 'dark:text-stone-300'\n )}\n >\n {formatNumber(material.weightKG)} kg\n </p>\n </div>\n <div>\n <p\n className={cn(\n 'text-xs',\n 'text-text-muted',\n 'dark:text-stone-400',\n 'mb-1'\n )}\n >\n {co2SavingsLabel}\n </p>\n <p className={cn('font-semibold', 'text-success')}>\n {formatNumber(material.co2SavingsKG)} kg\n </p>\n </div>\n <div>\n <p\n className={cn(\n 'text-xs',\n 'text-text-muted',\n 'dark:text-stone-400',\n 'mb-1'\n )}\n >\n {waterSavingsLabel}\n </p>\n <p className={cn('font-semibold', 'text-info')}>\n {formatNumber(material.waterSavingsLT)} L\n </p>\n </div>\n </div>\n\n {/* Progress bar for percentage */}\n <div\n className={cn(\n 'mt-3',\n 'h-2',\n 'bg-neutral/10',\n 'dark:bg-stone-700',\n 'rounded-full',\n 'overflow-hidden'\n )}\n >\n <div\n className=\"h-full bg-primary rounded-full transition-all duration-500\"\n style={{ width: `${material.percentage}%` }}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Info Footer */}\n <div\n className={cn(\n 'bg-primary/5',\n 'dark:bg-primary/10',\n 'rounded-lg',\n 'p-4',\n 'text-sm',\n 'text-text-secondary',\n 'dark:text-stone-300'\n )}\n >\n <p className={cn('flex', 'items-start', 'gap-2')}>\n <Info\n className={cn(\n 'w-4',\n 'h-4',\n 'mt-0.5',\n 'text-primary',\n 'flex-shrink-0'\n )}\n />\n <span>{infoText}</span>\n </p>\n </div>\n </div>\n </Modal>\n );\n}\n","import { cn } from '@/utils';\nimport { motion } from 'motion/react';\nexport interface FooterProps {\n brand?: React.ReactNode;\n socialLinks?: Array<React.ReactNode>;\n description?: string;\n exploreLabel?: string;\n communityLabel?: string;\n legalLabel?: string;\n exploreItems?: Array<React.ReactNode>;\n communityItems?: Array<React.ReactNode>;\n legalItems?: Array<React.ReactNode>;\n copyRightText?: string;\n}\n\nexport default function Footer({\n brand,\n socialLinks,\n description,\n exploreItems,\n exploreLabel = 'Explore',\n communityItems,\n communityLabel = 'Community',\n legalItems,\n legalLabel = 'Legal',\n copyRightText = `All rights reserved.`,\n}: FooterProps) {\n return (\n <motion.footer\n className={cn(\n 'bg-gradient-to-r from-primary-dark via-primary to-primary-dark'\n )}\n >\n <motion.div className=\"max-w-7xl mx-auto px-6 py-12\">\n <motion.div className=\"grid grid-cols-1 md:grid-cols-4 gap-8\">\n {/* Brand Section */}\n <motion.div className=\"space-y-4 flex flex-col\">\n {brand}\n <motion.p className=\"text-sm text-white leading-relaxed\">\n {description}\n </motion.p>\n {/* Social Icons */}\n {socialLinks && (\n <motion.div className={cn('flex items-center gap-3')}>\n {socialLinks}\n </motion.div>\n )}\n </motion.div>\n\n {/* Explorar */}\n {exploreItems && (\n <motion.div>\n <motion.h3 className=\"font-semibold text-white mb-4\">\n {exploreLabel}\n </motion.h3>\n <motion.ul className=\"space-y-3\">\n {exploreItems &&\n exploreItems.map((item, index) => (\n <motion.li key={index}>{item}</motion.li>\n ))}\n </motion.ul>\n </motion.div>\n )}\n\n {/* Comunidad */}\n {communityItems && (\n <motion.div>\n <motion.h3 className=\"font-semibold text-white mb-4\">\n {communityLabel}\n </motion.h3>\n <motion.ul className=\"space-y-3\">\n {communityItems &&\n communityItems.map((item, index) => (\n <motion.li key={index}>{item}</motion.li>\n ))}\n </motion.ul>\n </motion.div>\n )}\n\n {/* Legal */}\n {legalItems && (\n <motion.div>\n <motion.h3 className=\"font-semibold text-white mb-4\">\n {legalLabel}\n </motion.h3>\n <motion.ul className=\"space-y-3\">\n {legalItems &&\n legalItems.map((item, index) => (\n <motion.li key={index}>{item}</motion.li>\n ))}\n </motion.ul>\n </motion.div>\n )}\n </motion.div>\n\n {/* Copyright */}\n <motion.div className=\"mt-12 pt-8 border-t border-gray-200 dark:border-stone-800\">\n <motion.p className=\"text-sm text-center text-white\">\n © {new Date().getFullYear()} EKORU. {copyRightText}\n </motion.p>\n </motion.div>\n </motion.div>\n </motion.footer>\n );\n}\n","import { useEffect, useState, type ComponentType } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nexport interface HeroCarouselProps {\n banners: {\n id: string;\n title: string;\n subtitle: string;\n description: string;\n image: string;\n bgColor: string;\n }[];\n ImageComponent?: ComponentType<{\n src: string;\n alt: string;\n width?: number;\n height?: number;\n priority?: boolean;\n className?: string;\n }>;\n autoScrollInterval?: number;\n}\n\nexport default function HeroCarousel({\n banners,\n ImageComponent,\n autoScrollInterval = 5000,\n}: HeroCarouselProps) {\n const [currentBanner, setCurrentBanner] = useState(0);\n const [isHovered, setIsHovered] = useState(false);\n\n // Auto-scroll carousel (pauses on hover)\n useEffect(() => {\n if (isHovered) return;\n\n const interval = setInterval(() => {\n setCurrentBanner((prev) => (prev + 1) % banners.length);\n }, autoScrollInterval);\n\n return () => clearInterval(interval);\n }, [banners.length, autoScrollInterval, isHovered]);\n\n const nextBanner = () => {\n setCurrentBanner((prev) => (prev + 1) % banners.length);\n };\n\n const prevBanner = () => {\n setCurrentBanner((prev) => (prev - 1 + banners.length) % banners.length);\n };\n\n const goToBanner = (index: number) => {\n setCurrentBanner(index);\n };\n\n // Use custom Image component if provided, otherwise fallback to img\n const ImageEl = ImageComponent || 'img';\n\n return (\n <section\n className=\"relative overflow-hidden\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div className=\"relative h-[300px] sm:h-[350px] md:h-[400px] lg:h-[500px] xl:h-[600px]\">\n {banners.map((banner, index) => {\n const isActive = index === currentBanner;\n const isPrev = index < currentBanner;\n\n return (\n <div\n key={banner.id}\n className={`absolute inset-0 transition-transform duration-700 ease-in-out ${\n isActive\n ? 'translate-x-0 opacity-100'\n : isPrev\n ? '-translate-x-full opacity-0'\n : 'translate-x-full opacity-0'\n }`}\n aria-hidden={!isActive}\n >\n <div className={`${banner.bgColor} h-full flex items-center`}>\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-20 py-4 sm:py-6 md:py-6 lg:py-12 w-full\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-4 sm:gap-6 md:gap-6 lg:gap-8 items-center h-full\">\n {/* Text Content */}\n <div className=\"text-white text-center lg:text-left space-y-2 sm:space-y-3 lg:space-y-4\">\n <h1 className=\"text-xl sm:text-2xl md:text-3xl lg:text-5xl xl:text-6xl font-bold leading-tight animate-fade-in\">\n {banner.title}\n </h1>\n <h2 className=\"text-base sm:text-lg md:text-xl lg:text-2xl text-white/90 animate-fade-in-delay-100\">\n {banner.subtitle}\n </h2>\n <p className=\"text-xs sm:text-sm md:text-base lg:text-lg text-white/80 max-w-lg mx-auto lg:mx-0 line-clamp-3 animate-fade-in-delay-200\">\n {banner.description}\n </p>\n <div className=\"text-xs sm:text-sm text-white/60 italic pt-2 animate-fade-in-delay-300\">\n Pronto...\n </div>\n </div>\n\n {/* Image */}\n <div className=\"flex justify-center lg:justify-end mt-2 lg:mt-0\">\n <div className=\"relative w-24 h-24 sm:w-32 sm:h-32 md:w-48 md:h-48 lg:w-72 lg:h-72 xl:w-80 xl:h-80 bg-white/20 backdrop-blur-sm rounded-full flex items-center justify-center overflow-hidden transition-transform duration-300 hover:scale-105\">\n <ImageEl\n src={banner.image}\n alt={banner.title}\n width={320}\n height={320}\n className=\"w-12 h-12 sm:w-16 sm:h-16 md:w-24 md:h-24 lg:w-36 lg:h-36 xl:w-40 xl:h-40 object-contain\"\n {...(ImageComponent && index === 0\n ? { priority: true }\n : {})}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Navigation Buttons */}\n {banners.length > 1 && (\n <>\n <button\n onClick={prevBanner}\n className=\"absolute left-2 sm:left-4 top-1/2 transform -translate-y-1/2 bg-black/30 hover:bg-black/50 text-white p-2 sm:p-3 rounded-full backdrop-blur-sm transition-all duration-200 hover:scale-110 focus:outline-none focus:ring-2 focus:ring-white/50\"\n aria-label=\"Previous banner\"\n >\n <ChevronLeft className=\"w-4 h-4 sm:w-6 sm:h-6\" />\n </button>\n <button\n onClick={nextBanner}\n className=\"absolute right-2 sm:right-4 top-1/2 transform -translate-y-1/2 bg-black/30 hover:bg-black/50 text-white p-2 sm:p-3 rounded-full backdrop-blur-sm transition-all duration-200 hover:scale-110 focus:outline-none focus:ring-2 focus:ring-white/50\"\n aria-label=\"Next banner\"\n >\n <ChevronRight className=\"w-4 h-4 sm:w-6 sm:h-6\" />\n </button>\n </>\n )}\n\n {/* Indicators */}\n {banners.length > 1 && (\n <div className=\"absolute bottom-3 sm:bottom-6 left-1/2 transform -translate-x-1/2 flex space-x-2\">\n {banners.map((_, index) => (\n <button\n key={index}\n onClick={() => goToBanner(index)}\n className={`w-2 h-2 sm:w-3 sm:h-3 rounded-full transition-all duration-300 focus:outline-none focus:ring-2 focus:ring-white/50 ${\n index === currentBanner\n ? 'bg-white w-6 sm:w-8'\n : 'bg-white/50 hover:bg-white/70'\n }`}\n aria-label={`Go to banner ${index + 1}`}\n aria-current={index === currentBanner ? 'true' : 'false'}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n","import React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Menu, Search, X } from 'lucide-react';\nimport { cn } from '@/utils';\n\nexport interface NavbarProps {\n brand?: React.ReactNode;\n navigationIcons?: Array<React.ReactNode>;\n navigationLinks?: Array<React.ReactNode>;\n searchPlaceholder?: string;\n onSearch?: (query: string) => void;\n mobileMenuContent?: React.ReactNode;\n className?: string;\n searchEnabled?: boolean;\n sideMenuTitle?: string;\n\n // Aria labels and other accessibility props can be added as needed\n navbarAriaLabel?: string;\n userActionsAriaLabel?: string;\n toggleMobileMenuAriaLabel?: string;\n closeMobileMenuAriaLabel?: string;\n mobileMenuTitleAriaLabel?: string;\n}\n\nexport default function Navbar({\n navigationIcons,\n navigationLinks,\n brand,\n searchPlaceholder = 'Search...',\n onSearch,\n mobileMenuContent,\n className = '',\n searchEnabled = true,\n sideMenuTitle = 'Menu',\n\n // aria labels and other accessibility props can be added as needed\n navbarAriaLabel = 'Main navigation',\n userActionsAriaLabel = 'User actions',\n toggleMobileMenuAriaLabel = 'Toggle mobile menu',\n closeMobileMenuAriaLabel = 'Close mobile menu',\n mobileMenuTitleAriaLabel = 'Mobile menu',\n}: NavbarProps) {\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState<boolean>(false);\n const [searchQuery, setSearchQuery] = useState<string>('');\n\n const closeMobileMenu = () => setIsMobileMenuOpen(false);\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value);\n };\n\n const handleSearchSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSearch?.(searchQuery);\n };\n\n // Handle escape key to close mobile menu\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Escape' && isMobileMenuOpen) {\n setIsMobileMenuOpen(false);\n }\n };\n\n return (\n <>\n <header\n className={`navbar-container ${className}`}\n onKeyDown={handleKeyDown}\n >\n <nav\n className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\"\n role=\"navigation\"\n aria-label={navbarAriaLabel}\n >\n {/* Main Navigation */}\n <div className=\"flex justify-between items-center h-16\">\n {/* Logo */}\n <div className=\"flex-shrink-0\">\n {brand ? (\n brand\n ) : (\n <span className=\"text-xl font-bold text-white\">EKORU</span>\n )}\n </div>\n\n {/* Search Bar - Desktop */}\n {searchEnabled && (\n <div\n className=\"hidden md:flex flex-1 max-w-2xl mx-8\"\n role=\"search\"\n >\n <form\n onSubmit={handleSearchSubmit}\n className=\"w-full flex items-center relative\"\n >\n <input\n id=\"search-desktop\"\n name=\"search-desktop\"\n type=\"search\"\n value={searchQuery}\n onChange={handleSearchChange}\n placeholder={searchPlaceholder}\n className={cn(\n 'w-full px-4 py-2',\n 'rounded-lg',\n 'border border-input-border',\n 'bg-input-bg',\n 'text-foreground',\n 'placeholder:text-foreground-tertiary',\n 'focus:outline-none',\n 'focus:ring-2',\n 'focus:ring-primary',\n 'focus:border-transparent'\n )}\n />\n <Search className=\"h-5 w-5 text-primary absolute right-4\" />\n </form>\n </div>\n )}\n\n {/* User Actions */}\n <div\n className=\"flex items-center space-x-2\"\n role=\"toolbar\"\n aria-label={userActionsAriaLabel}\n >\n {/* Navigation Icons */}\n {navigationIcons}\n\n {/* Navigation Links - Desktop */}\n <div className=\"hidden lg:flex items-center space-x-2\">\n {navigationLinks}\n </div>\n\n {/* Mobile Menu Button */}\n <button\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n className={cn(\n 'p-2',\n 'rounded-lg',\n 'text-white',\n 'hover:bg-primary/30',\n 'transition-colors',\n 'lg:hidden'\n )}\n aria-label={toggleMobileMenuAriaLabel}\n aria-expanded={isMobileMenuOpen}\n >\n <Menu className=\"h-6 w-6\" />\n </button>\n </div>\n </div>\n\n {/* Mobile Search Bar */}\n {searchEnabled && (\n <div className=\"md:hidden pb-4\" role=\"search\">\n <form\n onSubmit={handleSearchSubmit}\n className=\"w-full flex items-center relative\"\n >\n <input\n id=\"search-mobile\"\n name=\"search-mobile\"\n type=\"search\"\n value={searchQuery}\n onChange={handleSearchChange}\n placeholder={searchPlaceholder}\n className={cn(\n 'w-full',\n 'px-4 py-2',\n 'rounded-lg',\n 'border border-input-border',\n 'bg-input-bg',\n 'text-foreground',\n 'placeholder:text-foreground-tertiary',\n 'focus:outline-none',\n 'focus:ring-2',\n 'focus:ring-primary',\n 'focus:border-transparent'\n )}\n />\n <Search className=\"h-5 w-5 text-primary absolute right-4\" />\n </form>\n </div>\n )}\n </nav>\n </header>\n\n {/* Mobile Navigation Overlay */}\n <AnimatePresence>\n {isMobileMenuOpen && (\n <div\n className=\"lg:hidden fixed inset-0 z-50 flex justify-end\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={mobileMenuTitleAriaLabel}\n >\n {/* Overlay Background */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={() => setIsMobileMenuOpen(false)}\n aria-label={closeMobileMenuAriaLabel}\n />\n\n {/* Slide-in Menu */}\n <motion.div\n initial={{ x: '100%' }}\n animate={{ x: 0 }}\n exit={{ x: '100%' }}\n transition={{ type: 'tween', duration: 0.3 }}\n className={cn(\n 'relative',\n 'w-full',\n 'max-w-sm',\n 'bg-background',\n 'shadow-xl',\n 'h-full',\n 'overflow-y-auto'\n )}\n >\n <div className=\"p-6\">\n {/* Menu Header */}\n <div className=\"flex items-center justify-between mb-6\">\n <h2\n id=\"mobile-menu-title\"\n className=\"text-xl font-semibold text-foreground\"\n >\n {sideMenuTitle}\n </h2>\n <button\n onClick={closeMobileMenu}\n className={cn(\n 'p-2',\n 'rounded-lg',\n 'text-foreground',\n 'hover:bg-background-secondary',\n 'transition-colors'\n )}\n aria-label=\"Close mobile menu\"\n >\n <X className=\"h-6 w-6\" />\n </button>\n </div>\n\n {/* Navigation Links */}\n <nav className=\"space-y-2\">{navigationLinks}</nav>\n\n {/* Custom Mobile Menu Content */}\n {mobileMenuContent && (\n <div className=\"mt-6 pt-6 border-t border-surface-active\">\n {mobileMenuContent}\n </div>\n )}\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n </>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronDown, Circle, type LucideIcon } from 'lucide-react';\nimport { createPortal } from 'react-dom';\n\nconst selectVariants = cva(\n 'w-full rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 placeholder:text-input-placeholder text-left',\n {\n variants: {\n variant: {\n default:\n 'bg-input-bg border-2 border-input-border hover:border-input-border-hover focus:border-input-border-focus focus:ring-primary/20',\n filled:\n 'bg-background border-2 border-transparent hover:bg-background focus:bg-input-bg focus:border-input-border-focus focus:ring-primary/20',\n outline:\n 'bg-transparent border-2 border-primary text-foreground hover:bg-primary/5 focus:bg-primary/5 focus:border-primary-active focus:ring-primary/20',\n },\n size: {\n sm: 'h-9 text-sm',\n md: 'h-11 text-base',\n lg: 'h-14 text-lg',\n },\n hasError: {\n true: 'border-error focus:border-error focus:ring-error/20',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n hasError: false,\n },\n }\n);\n\ntype SelectVariantProps = VariantProps<typeof selectVariants>;\n\nexport type Option = {\n label: string;\n value: string | number;\n iconColor?: string;\n};\n\nexport interface SelectProps extends Omit<SelectVariantProps, 'hasError'> {\n /**\n * Array of options to display in the dropdown\n */\n options?: Option[];\n /**\n * Label text displayed above the select\n */\n label?: string;\n /**\n * Icon component to display on the left side\n */\n leftIcon?: LucideIcon;\n /**\n * Error message to display below the select\n */\n errorMessage?: string;\n /**\n * Selected value\n */\n value?: string | number;\n /**\n * Name attribute for form handling\n */\n name?: string;\n /**\n * Placeholder text when no value is selected\n */\n placeholder?: string;\n /**\n * Callback when selection changes\n */\n onChange?: (value: string | number) => void;\n /**\n * Width variant of the select container\n */\n width?: 'sm' | 'md' | 'lg' | 'full';\n /**\n * Whether the select is disabled\n */\n disabled?: boolean;\n /**\n * Whether the select is read-only\n */\n readOnly?: boolean;\n /**\n * Whether to show color circles for options\n */\n showColorIcon?: boolean;\n /**\n * Custom render function for options\n */\n renderOption?: (option: Option, selected: boolean) => React.ReactNode;\n /**\n * Whether to enable search/filter functionality\n */\n searchEnabled?: boolean;\n /**\n * Direction for dropdown expansion\n */\n dropdownDirection?: 'up' | 'down';\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * No results text\n */\n noResultsText?: string;\n}\n\nconst Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n variant,\n size,\n label,\n leftIcon: LeftIcon,\n errorMessage,\n value,\n onChange,\n options = [],\n width = 'full',\n disabled = false,\n readOnly = false,\n showColorIcon = false,\n renderOption,\n searchEnabled = true,\n dropdownDirection = 'down',\n placeholder = 'Select...',\n name,\n noResultsText = 'No results found',\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [isOpen, setIsOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState<number>(-1);\n const [dropdownPosition, setDropdownPosition] = React.useState({\n top: 0,\n left: 0,\n width: 0,\n });\n const [mounted, setMounted] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const listboxId = `${name}-listbox`;\n\n const selectedOption = options.find((o) => o.value === value);\n const filteredOptions = options.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase())\n );\n\n const widthClass = {\n sm: 'w-1/3',\n md: 'w-1/2',\n lg: 'w-2/3',\n full: 'w-full',\n }[width];\n\n const computedHasError = !!errorMessage;\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n // Calcula la posición del dropdown\n const updateDropdownPosition = React.useCallback(() => {\n if (buttonRef.current) {\n const rect = buttonRef.current.getBoundingClientRect();\n setDropdownPosition({\n top: dropdownDirection === 'down' ? rect.bottom + 4 : rect.top - 4,\n left: rect.left,\n width: rect.width,\n });\n }\n }, [dropdownDirection]);\n\n React.useEffect(() => {\n if (isOpen) {\n updateDropdownPosition();\n window.addEventListener('scroll', updateDropdownPosition, true);\n window.addEventListener('resize', updateDropdownPosition);\n }\n return () => {\n window.removeEventListener('scroll', updateDropdownPosition, true);\n window.removeEventListener('resize', updateDropdownPosition);\n };\n }, [isOpen, updateDropdownPosition]);\n\n React.useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setSearch('');\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (isOpen) setHighlightedIndex(0);\n }, [isOpen, search]);\n\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n const renderLabel = (option?: Option) => (\n <span className=\"flex items-center gap-2\">\n {showColorIcon && option?.iconColor && (\n <Circle\n size={18}\n style={{\n color: option.iconColor,\n fill: option.iconColor,\n }}\n className={cn('rounded-full', {\n 'border border-gray-400': option.iconColor === '#FFFFFF',\n })}\n />\n )}\n {option?.label || placeholder}\n </span>\n );\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n setIsOpen(true);\n e.preventDefault();\n }\n return;\n }\n if (e.key === 'ArrowDown') {\n setHighlightedIndex((i) => Math.min(i + 1, filteredOptions.length - 1));\n e.preventDefault();\n } else if (e.key === 'ArrowUp') {\n setHighlightedIndex((i) => Math.max(i - 1, 0));\n e.preventDefault();\n } else if (e.key === 'Enter') {\n if (filteredOptions[highlightedIndex]) {\n onChange?.(filteredOptions[highlightedIndex].value);\n setIsOpen(false);\n setSearch('');\n }\n e.preventDefault();\n } else if (e.key === 'Escape') {\n setIsOpen(false);\n setSearch('');\n e.preventDefault();\n }\n };\n\n const dropdownContent = (\n <AnimatePresence>\n {isOpen && (\n <motion.div\n ref={dropdownRef}\n key=\"dropdown\"\n initial={{\n opacity: 0,\n y: dropdownDirection === 'down' ? -10 : 10,\n }}\n animate={{ opacity: 1, y: 0 }}\n exit={{\n opacity: 0,\n y: dropdownDirection === 'down' ? -10 : 10,\n }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n id={listboxId}\n role=\"listbox\"\n aria-activedescendant={\n highlightedIndex >= 0 && filteredOptions[highlightedIndex]\n ? `${name}-option-${filteredOptions[highlightedIndex].value}`\n : undefined\n }\n tabIndex={-1}\n style={{\n position: 'fixed',\n top:\n dropdownDirection === 'down'\n ? `${dropdownPosition.top}px`\n : 'auto',\n bottom:\n dropdownDirection === 'up'\n ? `${window.innerHeight - dropdownPosition.top}px`\n : 'auto',\n left: `${dropdownPosition.left}px`,\n width: `${dropdownPosition.width}px`,\n zIndex: 9999,\n }}\n className={cn(\n 'bg-surface-elevated',\n 'border-2 border-primary rounded-lg shadow-2xl overflow-hidden'\n )}\n >\n {searchEnabled && (\n <input\n type=\"text\"\n placeholder=\"Search...\"\n className=\"w-full px-4 py-2 border-b border-input-border outline-none bg-surface-elevated text-foreground\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n aria-label=\"Search options\"\n onClick={(e) => e.stopPropagation()}\n />\n )}\n <ul className=\"max-h-60 overflow-y-auto w-full bg-surface-elevated\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, idx) => (\n <li\n key={option.value}\n id={`${name}-option-${option.value}`}\n role=\"option\"\n aria-selected={option.value === value}\n tabIndex={0}\n onClick={() => {\n onChange?.(option.value);\n setIsOpen(false);\n setSearch('');\n }}\n onMouseEnter={() => setHighlightedIndex(idx)}\n className={cn(\n 'px-4 py-2 w-full cursor-pointer hover:bg-primary/10 flex items-center gap-2 transition-colors',\n option.value === value && 'bg-primary/10 font-semibold',\n highlightedIndex === idx && 'bg-primary/20'\n )}\n >\n {renderOption\n ? renderOption(option, option.value === value)\n : renderLabel(option)}\n </li>\n ))\n ) : (\n <li className=\"px-4 py-2 text-sm text-foreground-tertiary italic\">\n {noResultsText}\n </li>\n )}\n </ul>\n </motion.div>\n )}\n </AnimatePresence>\n );\n\n return (\n <>\n <div className={cn('space-y-2', widthClass)} ref={containerRef}>\n {label && (\n <label\n htmlFor={name}\n className=\"block text-sm font-medium text-foreground\"\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <motion.div\n initial={false}\n animate={{ scale: isFocused ? 1.002 : 1 }}\n transition={{ type: 'spring', stiffness: 400, damping: 17 }}\n className=\"relative\"\n >\n {LeftIcon && (\n <LeftIcon\n className={cn(\n 'absolute left-3 top-1/2 transform -translate-y-1/2 w-5 h-5 transition-colors duration-200 pointer-events-none',\n isFocused ? 'text-primary' : 'text-foreground-tertiary',\n computedHasError && 'text-error'\n )}\n />\n )}\n <button\n type=\"button\"\n ref={(node) => {\n buttonRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n id={name}\n name={name}\n disabled={disabled || readOnly}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n onClick={() => !readOnly && setIsOpen(!isOpen)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={cn(\n selectVariants({\n variant,\n size,\n hasError: computedHasError,\n className,\n }),\n {\n 'pl-3': !LeftIcon,\n 'pl-10': LeftIcon,\n 'pr-10': true,\n }\n )}\n >\n {renderLabel(selectedOption)}\n <ChevronDown\n size={18}\n className={cn(\n 'absolute right-3 top-1/2 transform -translate-y-1/2 transition-all duration-200 pointer-events-none',\n isOpen && 'rotate-180',\n isFocused ? 'text-primary' : 'text-foreground-tertiary',\n computedHasError && 'text-error'\n )}\n />\n </button>\n </motion.div>\n {errorMessage && (\n <motion.p\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className=\"mt-1 text-xs text-error\"\n >\n {errorMessage}\n </motion.p>\n )}\n </div>\n </div>\n\n {/* Portal para el dropdown */}\n {mounted && createPortal(dropdownContent, document.body)}\n </>\n );\n }\n);\n\nSelect.displayName = 'Select';\n\nexport { Select, selectVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { Select } from '../Select';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nconst paginationButtonVariants = cva(\n 'flex items-center justify-center min-w-[120px] rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default:\n 'bg-background-secondary text-foreground hover:bg-background border-2 border-transparent focus:border-primary focus:ring-primary/20',\n primary:\n 'bg-primary text-white hover:bg-primary-hover focus:ring-primary/20',\n outline:\n 'bg-transparent border-2 border-primary text-foreground hover:bg-primary/5 focus:ring-primary/20',\n },\n size: {\n sm: 'h-8 px-2 text-sm gap-1',\n md: 'h-10 px-2.5 text-base gap-2',\n lg: 'h-12 px-3 text-lg gap-2',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n);\n\ntype PaginationVariantProps = VariantProps<typeof paginationButtonVariants>;\n\nexport interface PaginationProps extends PaginationVariantProps {\n /**\n * Current active page (1-indexed)\n */\n currentPage: number;\n /**\n * Total number of pages\n */\n totalPages: number;\n /**\n * Callback when page changes\n */\n onPageChange: (page: number) => void;\n /**\n * Items per page value\n */\n itemsPerPage?: number;\n /**\n * Callback when items per page changes\n */\n onItemsPerPageChange?: (pageSize: number) => void;\n /**\n * Label for the previous button\n */\n previousLabel?: string;\n /**\n * Label for the next button\n */\n nextLabel?: string;\n /**\n * Show items per page selector\n */\n showItemsPerPage?: boolean;\n /**\n * Available items per page options\n */\n itemsPerPageOptions?: number[];\n /**\n * Show page info text\n */\n showPageInfo?: boolean;\n /**\n * Custom page info text template\n */\n pageInfoTemplate?: string;\n /**\n * Show icons in buttons\n */\n showIcons?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n rowsLabel?: string;\n previousAriaLabel?: string;\n nextAriaLabel?: string;\n}\n\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n currentPage,\n totalPages,\n onPageChange,\n itemsPerPage = 10,\n onItemsPerPageChange,\n previousLabel = 'Previous',\n nextLabel = 'Next',\n rowsLabel = 'Rows:',\n previousAriaLabel = 'Go to previous page',\n nextAriaLabel = 'Go to next page',\n showItemsPerPage = true,\n itemsPerPageOptions = [10, 25, 50, 100],\n showPageInfo = true,\n pageInfoTemplate = 'Page {current} of {total}',\n showIcons = true,\n variant,\n size,\n className,\n },\n ref\n ) => {\n const rowsOptions = itemsPerPageOptions.map((num) => ({\n label: num.toString(),\n value: num,\n }));\n\n const pageInfo = pageInfoTemplate\n .replace('{current}', currentPage.toString())\n .replace('{total}', totalPages.toString());\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-between gap-4 md:flex-row',\n className\n )}\n >\n {showPageInfo && (\n <span className=\"text-sm font-medium text-foreground\">\n {pageInfo}\n </span>\n )}\n <div className=\"flex items-center gap-4\">\n {showItemsPerPage && onItemsPerPageChange && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-foreground\">\n {rowsLabel}\n </span>\n <Select\n value={itemsPerPage}\n onChange={(value) => onItemsPerPageChange(value as number)}\n options={rowsOptions}\n size={size}\n variant={\n variant === 'primary' || variant === null\n ? 'default'\n : variant\n }\n dropdownDirection=\"up\"\n searchEnabled={false}\n width=\"lg\"\n />\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={handlePrevious}\n disabled={currentPage === 1}\n className={cn(paginationButtonVariants({ variant, size }))}\n aria-label={previousAriaLabel}\n >\n {showIcons && <ChevronLeft size={16} />}\n {previousLabel}\n </button>\n <button\n onClick={handleNext}\n disabled={currentPage === totalPages}\n className={cn(paginationButtonVariants({ variant, size }))}\n aria-label={nextAriaLabel}\n >\n {nextLabel}\n {showIcons && <ChevronRight size={16} />}\n </button>\n </div>\n </div>\n </div>\n );\n }\n);\n\nPagination.displayName = 'Pagination';\n\nexport { Pagination, paginationButtonVariants };\n","import { IterationCw, RotateCcw, ShoppingCart } from 'lucide-react';\nimport { ProductCondition } from '@/types/enums';\nimport { Button } from '../Button';\nimport { cn } from '@/utils';\n\nexport interface FrontSideProps {\n isFlipped: boolean;\n setIsFlipped: (flipped: boolean) => void;\n onCardClick: () => void;\n productImage?: React.ReactNode;\n fallbackImage?: React.ReactNode;\n productCondition?: string;\n brand?: string;\n name?: string;\n description?: string;\n price?: number;\n color?: string;\n isExchangeable?: boolean;\n isStoreProduct?: boolean;\n interests?: string[];\n hasOffer?: boolean;\n offerLabel?: string;\n offerPrice?: number;\n localeString?: string;\n onAddToCart?: () => void;\n onExchange?: () => void;\n addToCartAriaLabel?: string;\n exchangeAriaLabel?: string;\n addToCartLabel?: string;\n exchangeLabel?: string;\n}\n\nexport default function CardFrontSide({\n isFlipped,\n setIsFlipped,\n onCardClick,\n productImage,\n fallbackImage,\n productCondition,\n brand,\n name,\n description,\n price,\n color,\n isExchangeable,\n isStoreProduct,\n hasOffer,\n offerPrice,\n onAddToCart,\n onExchange,\n addToCartAriaLabel = 'Add to cart',\n exchangeAriaLabel = 'Exchange product',\n offerLabel = 'Price Drop',\n localeString = 'es-CL',\n addToCartLabel = 'Agregar al carrito',\n exchangeLabel = 'Intercambiar',\n interests = [\n 'exchange interest1',\n 'exchange interest2',\n 'exchange interest3',\n ],\n}: FrontSideProps) {\n // Color mapping for product conditions\n const conditionColorMap: Record<ProductCondition, string> = {\n [ProductCondition.NEW]: 'bg-green-500 text-white',\n [ProductCondition.OPEN_BOX]: 'bg-blue-400 text-white',\n [ProductCondition.LIKE_NEW]: 'bg-emerald-400 text-white',\n [ProductCondition.FAIR]: 'bg-yellow-400 text-gray-900',\n [ProductCondition.POOR]: 'bg-red-500 text-white',\n [ProductCondition.FOR_PARTS]: 'bg-gray-500 text-white',\n [ProductCondition.REFURBISHED]: 'bg-purple-500 text-white',\n };\n\n // Get color for condition\n const getConditionColor = (condition?: string) => {\n if (!condition) return 'bg-gray-300 text-gray-700';\n const key = condition as ProductCondition;\n return conditionColorMap[key] || 'bg-gray-300 text-gray-700';\n };\n\n return (\n <div\n className={cn(\n // CSS Global Classes\n 'card-flip-front',\n // Colors and Styles\n 'bg-white dark:bg-stone-800',\n 'rounded-xl shadow-md',\n 'border border-gray-200/60 dark:border-stone-700/60',\n 'overflow-hidden',\n // Hover Effects\n 'hover:shadow-xl',\n 'hover:border-primary/40',\n 'dark:hover:border-primary/50',\n // Transitions\n 'transition-all duration-300',\n 'group'\n )}\n >\n {/* Image Container */}\n <figure\n className={cn(\n 'relative',\n 'aspect-[4/3]',\n 'bg-gradient-to-br from-gray-100 to-gray-50',\n 'dark:from-stone-700 dark:to-stone-800',\n 'overflow-hidden'\n )}\n >\n <div\n className={cn(\n 'absolute inset-0',\n 'opacity-0',\n 'group-hover:opacity-100',\n 'bg-gradient-to-t from-black/20 to-transparent',\n 'transition-opacity',\n 'duration-300',\n 'pointer-events-none',\n 'z-[1]'\n )}\n />\n\n <div\n className={cn(\n 'relative',\n 'w-full',\n 'h-full',\n 'group-hover:scale-105',\n 'transition-transform',\n 'duration-500'\n )}\n >\n {productImage ? productImage : fallbackImage}\n </div>\n\n {/* Condition / Offer Badge */}\n {isStoreProduct ? (\n hasOffer ? (\n <span\n className={cn(\n 'absolute',\n 'bottom-2',\n 'left-2',\n 'bg-red-500',\n 'text-white',\n 'backdrop-blur-md',\n 'text-[10px]',\n 'font-semibold',\n 'px-2.5',\n 'py-1',\n 'rounded-lg',\n 'shadow-md',\n 'border',\n 'border-white/50',\n 'dark:border-stone-700/50'\n )}\n >\n {offerLabel}\n </span>\n ) : null\n ) : (\n <span\n className={cn(\n 'absolute',\n 'bottom-2',\n 'left-2',\n getConditionColor(productCondition),\n 'backdrop-blur-md',\n 'text-[10px]',\n 'font-semibold',\n 'px-2.5',\n 'py-1',\n 'rounded-lg',\n 'capitalize',\n 'shadow-md',\n 'border',\n 'border-white/50',\n 'dark:border-stone-700/50'\n )}\n >\n {productCondition}\n </span>\n )}\n\n {/* Flip Button - Compacto */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setIsFlipped(!isFlipped);\n }}\n className={cn(\n 'absolute',\n 'top-2',\n 'right-2',\n 'bg-white/90',\n 'dark:bg-stone-800/90',\n 'hover:bg-primary',\n 'dark:hover:bg-primary',\n 'text-gray-700',\n 'dark:text-stone-200',\n 'hover:text-white',\n 'p-1.5',\n 'rounded-lg',\n 'shadow-lg',\n 'transition-all',\n 'duration-200',\n 'hover:scale-110',\n 'backdrop-blur-sm',\n 'border',\n 'border-gray-200/50',\n 'dark:border-stone-600/50',\n 'z-[2]'\n )}\n aria-label=\"Ver impacto ambiental\"\n >\n <RotateCcw className=\"w-3.5 h-3.5\" />\n </button>\n </figure>\n\n {/* Content - Compacto y limpio */}\n <div className=\"p-3.5\" onClick={onCardClick}>\n {/* Header */}\n <header\n className={cn(\n 'flex',\n 'items-center',\n 'justify-between',\n 'gap-2',\n 'mb-2'\n )}\n >\n <span\n className={cn(\n 'text-gray-500',\n 'dark:text-stone-400',\n 'text-[10px]',\n 'font-medium',\n 'uppercase',\n 'tracking-wide',\n 'truncate'\n )}\n >\n {brand}\n </span>\n {color && (\n <span\n className={cn(\n 'text-gray-400',\n 'dark:text-stone-500',\n 'text-[10px]',\n 'font-medium',\n 'truncate',\n 'max-w-[60px]'\n )}\n >\n {color}\n </span>\n )}\n </header>\n\n {/* Product Name */}\n <h3\n className={cn(\n 'font-semibold',\n 'text-sm',\n 'text-gray-900',\n 'dark:text-stone-50',\n 'line-clamp-1',\n 'mb-1.5',\n 'group-hover:text-primary',\n 'dark:group-hover:text-primary-hover',\n 'transition-colors',\n 'duration-200'\n )}\n >\n {name}\n </h3>\n\n {/* Description */}\n <p\n className={cn(\n 'text-gray-600',\n 'dark:text-stone-400',\n 'text-xs',\n 'line-clamp-1',\n 'mb-3',\n 'leading-relaxed'\n )}\n >\n {description}\n </p>\n\n {/* Footer */}\n <footer\n className={cn(\n 'flex',\n 'flex-col',\n 'items-start',\n 'justify-between',\n 'gap-2'\n )}\n >\n {isStoreProduct && hasOffer && !isExchangeable && (\n <div className=\"flex items-center justify-center gap-1\">\n <span className=\"text-primary dark:text-primary-hover font-bold text-xl\">\n ${offerPrice?.toLocaleString(localeString)}\n </span>\n <span className=\"text-sm text-gray-500 line-through\">\n ${price?.toLocaleString(localeString)}\n </span>\n </div>\n )}{' '}\n {(!isStoreProduct || !hasOffer) && !isExchangeable && (\n <p className=\"text-primary dark:text-primary-hover font-bold text-xl\">\n ${price?.toLocaleString(localeString)}\n </p>\n )}\n {isExchangeable && interests && (\n <div\n className={cn(\n 'flex',\n 'items-center',\n 'gap-2',\n 'mb-2',\n 'overflow-x-auto',\n 'scroll-smooth',\n 'snap-x',\n 'snap-mandatory',\n 'px-3',\n 'flex-nowrap',\n 'w-full',\n 'scrollbar-hide'\n )}\n style={{ WebkitOverflowScrolling: 'touch' }}\n tabIndex={0}\n role=\"list\"\n aria-label=\"Interests\"\n >\n {interests.map((interest, index) => (\n <span\n key={index}\n role=\"listitem\"\n className={cn(\n 'inline-flex',\n 'items-center',\n 'flex-shrink-0',\n 'snap-start',\n 'text-[10px]',\n 'whitespace-nowrap',\n 'px-2',\n 'py-1',\n 'rounded-full',\n 'bg-gray-100',\n 'dark:bg-stone-700',\n 'text-gray-800',\n 'dark:text-stone-100',\n 'font-medium'\n )}\n >\n {interest}\n </span>\n ))}\n </div>\n )}\n {/* If store product: only show add-to-cart. Marketplace: show exchange if exchangeable, otherwise add-to-cart */}\n {isStoreProduct && !isExchangeable && (\n <Button\n variant=\"primary\"\n size=\"sm\"\n fullWidth\n aria-label={addToCartAriaLabel}\n rightIcon={ShoppingCart}\n onClick={(e) => {\n e.stopPropagation();\n onAddToCart?.();\n }}\n >\n {addToCartLabel}\n </Button>\n )}\n {isExchangeable && (\n <Button\n variant=\"primary\"\n size=\"sm\"\n fullWidth\n aria-label={exchangeAriaLabel}\n rightIcon={IterationCw}\n onClick={(e) => {\n e.stopPropagation();\n onExchange?.();\n }}\n >\n {exchangeLabel}\n </Button>\n )}{' '}\n {!isExchangeable && !isStoreProduct && (\n <Button\n variant=\"primary\"\n size=\"sm\"\n fullWidth\n aria-label={addToCartAriaLabel}\n rightIcon={ShoppingCart}\n onClick={(e) => {\n e.stopPropagation();\n onAddToCart?.();\n }}\n >\n {addToCartLabel}\n </Button>\n )}\n </footer>\n </div>\n </div>\n );\n}\n","import type {\n ProductCategoryMaterial,\n StoreProductMaterial,\n} from '@/types/product';\nimport type { EnvironmentalImpactModalProps } from '../EnvironmentalImpactModal';\nimport {\n Droplets,\n Leaf,\n MapPin,\n Phone,\n RotateCcw,\n UserRound,\n ChevronRight,\n} from 'lucide-react';\nimport { cn } from '@/utils';\n\nexport interface BackSideProps {\n isFlipped: boolean;\n setIsFlipped: (flipped: boolean) => void;\n setShowImpactModal: (show: boolean) => void;\n sellerName?: string;\n sellerPhone?: string;\n sellerAddress?: string;\n environmentalImpact?:\n | ProductCategoryMaterial[]\n | StoreProductMaterial[]\n | EnvironmentalImpactModalProps['environmentalImpact'];\n impactLabel?: string;\n materialsLabel?: string;\n viewMoreLabel?: string;\n sellerLabel?: string;\n co2Label?: string;\n waterLabel?: string;\n}\n\nexport default function CardBackSide({\n isFlipped,\n setIsFlipped,\n setShowImpactModal,\n environmentalImpact,\n sellerName,\n sellerPhone,\n sellerAddress,\n impactLabel = 'Environmental Impact',\n materialsLabel = 'Materials:',\n viewMoreLabel = 'View Full Impact',\n sellerLabel = 'Seller Information',\n co2Label = 'CO₂ Saved',\n waterLabel = 'Water Saved',\n}: BackSideProps) {\n const calculateImpactLevel = (co2: number) => {\n if (co2 > 50) return { level: 'High', color: 'success', width: '100%' };\n if (co2 > 20) return { level: 'Medium', color: 'warning', width: '66%' };\n return { level: 'Low', color: 'info', width: '33%' };\n };\n // Normalize environmentalImpact to the modal shape { totalCo2SavingsKG, totalWaterSavingsLT, materialBreakdown }\n const normalizedImpact = (() => {\n if (!environmentalImpact) return undefined;\n if (Array.isArray(environmentalImpact)) {\n type MaterialCandidate = {\n material?: {\n materialType?: string;\n percentage?: number;\n estimatedCo2SavingsKG?: number;\n estimatedWaterSavingsLT?: number;\n };\n materialType?: string;\n percentage?: number;\n quantity?: number;\n weightKG?: number;\n co2SavingsKG?: number;\n waterSavingsLT?: number;\n };\n\n const materialBreakdown = environmentalImpact.map(\n (m: MaterialCandidate) => {\n const mm = m as MaterialCandidate;\n const materialType =\n mm.material?.materialType ?? mm.materialType ?? 'Material';\n const percentage = mm.material?.percentage ?? mm.percentage ?? 0;\n const weightKG = mm.quantity ?? mm.weightKG ?? 0;\n const co2SavingsKG =\n mm.material?.estimatedCo2SavingsKG ?? mm.co2SavingsKG ?? 0;\n const waterSavingsLT =\n mm.material?.estimatedWaterSavingsLT ?? mm.waterSavingsLT ?? 0;\n return {\n materialType,\n percentage,\n weightKG,\n co2SavingsKG,\n waterSavingsLT,\n };\n }\n );\n\n const totalCo2SavingsKG = materialBreakdown.reduce(\n (s, m) => s + (m.co2SavingsKG || 0),\n 0\n );\n const totalWaterSavingsLT = materialBreakdown.reduce(\n (s, m) => s + (m.waterSavingsLT || 0),\n 0\n );\n\n return { totalCo2SavingsKG, totalWaterSavingsLT, materialBreakdown };\n }\n return environmentalImpact as EnvironmentalImpactModalProps['environmentalImpact'];\n })();\n\n const impactLevel = normalizedImpact\n ? calculateImpactLevel(normalizedImpact.totalCo2SavingsKG)\n : null;\n\n return (\n <div\n className={cn(\n 'card-flip-back',\n 'bg-gradient-to-br from-white via-emerald-50/20 to-white',\n 'dark:from-stone-800 dark:via-stone-850 dark:to-stone-900',\n 'border-2 border-gray-200/60',\n 'dark:border-stone-700/50'\n )}\n >\n <div\n className={cn(\n 'py-4',\n 'px-4',\n 'w-full',\n 'h-full',\n 'flex',\n 'flex-col',\n 'overflow-y-auto',\n 'scrollbar-hide',\n 'relative'\n )}\n >\n {/* Flip Button */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setIsFlipped(!isFlipped);\n }}\n className={cn(\n 'absolute top-2 right-2',\n 'bg-white/90',\n 'dark:bg-stone-800/90',\n 'hover:bg-primary',\n 'dark:hover:bg-primary',\n 'backdrop-blur-md',\n 'text-gray-700',\n 'dark:text-stone-200',\n 'hover:text-white',\n 'p-1.5',\n 'rounded-lg',\n 'shadow-lg',\n 'transition-all',\n 'duration-200',\n 'hover:scale-110',\n 'z-10',\n 'border',\n 'border-gray-200/50',\n 'dark:border-stone-600/50'\n )}\n aria-label=\"Ver producto\"\n >\n <RotateCcw className=\"w-3.5 h-3.5\" />\n </button>\n\n {/* Environmental Impact Section */}\n {environmentalImpact && (\n <div className=\"mb-4\">\n <div className=\"flex items-center justify-between mb-0.5\">\n <h4\n className={cn(\n 'font-bold',\n 'text-gray-900',\n 'dark:text-stone-100',\n 'text-xs',\n 'flex',\n 'items-center',\n 'gap-1.5'\n )}\n >\n <Leaf className=\"w-3.5 h-3.5 text-success\" />\n {impactLabel}\n </h4>\n </div>\n <div className=\"mb-3\">\n {impactLevel && (\n <span\n className={cn(\n 'text-[9px]',\n 'font-semibold',\n 'px-2',\n 'py-0.5',\n 'rounded-full',\n `bg-${impactLevel.color}/15`,\n `text-${impactLevel.color}`,\n `border`,\n `border-${impactLevel.color}/30`\n )}\n >\n {impactLevel.level}\n </span>\n )}\n </div>\n\n {/* Impact Progress Bar - Delgado */}\n <div\n className={cn(\n 'mb-2.5',\n 'bg-gray-200/60',\n 'dark:bg-stone-700/50',\n 'rounded-full',\n 'h-1',\n 'overflow-hidden'\n )}\n >\n <div\n className={cn(\n 'h-full',\n 'bg-gradient-to-r from-success to-success/70',\n 'rounded-full',\n 'transition-all',\n 'duration-1000'\n )}\n style={{ width: impactLevel?.width || '0%' }}\n />\n </div>\n\n {/* Impact Stats - Grid compacto */}\n <div className=\"grid grid-cols-2 gap-2 mb-2.5\">\n <div\n className={cn(\n 'bg-gradient-to-br from-success/8 to-transparent',\n 'dark:from-success/15 dark:to-transparent',\n 'rounded-lg',\n 'p-1.5',\n 'border',\n 'border-success/20',\n 'dark:border-success/30'\n )}\n >\n <div className=\"flex items-center gap-1 mb-0.5\">\n <Leaf className=\"w-3 h-3 text-success\" />\n <span className=\"text-[9px] text-gray-600 dark:text-stone-400 font-medium\">\n {co2Label}\n </span>\n </div>\n <p className=\"text-sm font-bold text-success\">\n {normalizedImpact?.totalCo2SavingsKG} kg\n </p>\n </div>\n\n <div\n className={cn(\n 'bg-gradient-to-br from-info/8 to-transparent',\n 'dark:from-info/15 dark:to-transparent',\n 'rounded-lg',\n 'p-1.5',\n 'border',\n 'border-info/20',\n 'dark:border-info/30'\n )}\n >\n <div className=\"flex items-center gap-1 mb-0.5\">\n <Droplets className=\"w-3 h-3 text-info\" />\n <span className=\"text-[9px] text-gray-600 dark:text-stone-400 font-medium\">\n {waterLabel}\n </span>\n </div>\n <p className=\"text-sm font-bold text-info\">\n {normalizedImpact?.totalWaterSavingsLT} L\n </p>\n </div>\n </div>\n\n {/* Material Breakdown - Compacto */}\n {normalizedImpact &&\n normalizedImpact.materialBreakdown.length > 0 && (\n <div\n className={cn(\n 'bg-gray-50/80',\n 'dark:bg-stone-800/50',\n 'rounded-lg',\n 'p-2.5',\n 'border',\n 'border-gray-200/50',\n 'dark:border-stone-700/50'\n )}\n >\n <p className=\"text-[9px] font-semibold text-gray-700 dark:text-stone-300 mb-2\">\n {materialsLabel}\n </p>\n <div className=\"space-y-2\">\n {normalizedImpact.materialBreakdown\n .slice(0, 2)\n .map((material, index) => (\n <div key={index} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-[9px]\">\n <span className=\"text-gray-700 dark:text-stone-300 font-medium truncate\">\n {material.materialType}\n </span>\n <span className=\"font-bold text-primary dark:text-primary ml-1\">\n {material.percentage.toFixed(1)}%\n </span>\n </div>\n <div className=\"bg-gray-200 dark:bg-stone-700 rounded-full h-1 overflow-hidden\">\n <div\n className={cn(\n 'h-full',\n 'bg-gradient-to-r from-primary to-primary-hover',\n 'rounded-full',\n 'transition-all',\n 'duration-500'\n )}\n style={{ width: `${material.percentage}%` }}\n />\n </div>\n </div>\n ))}\n </div>\n\n {/* View More Button - Compacto */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowImpactModal(true);\n }}\n className={cn(\n 'w-full',\n 'mt-2.5',\n 'py-1.5',\n 'px-3',\n 'bg-primary/5',\n 'hover:bg-primary/10',\n 'dark:bg-primary/10',\n 'dark:hover:bg-primary/15',\n 'text-primary',\n 'dark:text-primary-hover',\n 'rounded-lg',\n 'text-[9px]',\n 'font-semibold',\n 'transition-all',\n 'duration-200',\n 'flex',\n 'items-center',\n 'justify-center',\n 'gap-1',\n 'border',\n 'border-primary/20',\n 'hover:border-primary/30',\n 'group/viewmore'\n )}\n >\n {viewMoreLabel}\n <ChevronRight className=\"w-3 h-3 group-hover/viewmore:translate-x-0.5 transition-transform duration-200\" />\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Seller Information - Compacto */}\n <div className=\"mt-auto pt-3 border-t border-gray-200/60 dark:border-stone-700/50\">\n <div className=\"flex items-center gap-1.5 mb-2\">\n <UserRound className=\"w-3.5 h-3.5 text-primary\" />\n <h4 className=\"font-bold text-gray-900 dark:text-stone-100 text-xs\">\n {sellerLabel}\n </h4>\n </div>\n <div\n className={cn(\n 'space-y-1.5',\n 'bg-gray-50/80',\n 'dark:bg-stone-800/50',\n 'rounded-lg',\n 'p-2.5',\n 'border',\n 'border-gray-200/50',\n 'dark:border-stone-700/50'\n )}\n >\n {sellerName && (\n <div className=\"flex items-center gap-2 text-gray-700 dark:text-stone-300 text-[9px] font-medium\">\n <UserRound className=\"w-3 h-3 flex-shrink-0 text-gray-400 dark:text-stone-500\" />\n <span className=\"truncate\">{sellerName}</span>\n </div>\n )}\n {sellerPhone && (\n <div className=\"flex items-center gap-2 text-gray-700 dark:text-stone-300 text-[9px] font-medium\">\n <Phone className=\"w-3 h-3 flex-shrink-0 text-gray-400 dark:text-stone-500\" />\n <span className=\"truncate\">{sellerPhone}</span>\n </div>\n )}\n {sellerAddress && (\n <div className=\"flex items-center gap-2 text-gray-700 dark:text-stone-300 text-[9px] font-medium\">\n <MapPin className=\"w-3 h-3 flex-shrink-0 text-gray-400 dark:text-stone-500\" />\n <span className=\"truncate\">{sellerAddress}</span>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport CardFrontSide from './FrontSide';\nimport CardBackSide from './BackSide';\nimport { EnvironmentalImpactModal } from '../EnvironmentalImpactModal';\nimport type { EnvironmentalImpactModalProps } from '../EnvironmentalImpactModal';\nimport {\n type StoreProduct,\n type MarketplaceProduct,\n type ProductCategoryMaterial,\n type StoreProductMaterial,\n} from '@/types/product';\nimport { type PersonProfile } from '@/types/seller';\nimport { cn } from '@/utils';\n\nexport interface ProductCardProps {\n product: Partial<MarketplaceProduct> | Partial<StoreProduct>;\n}\n\nexport default function ProductCard({ product }: ProductCardProps) {\n const [isFlipped, setIsFlipped] = useState(false);\n const [showImpactModal, setShowImpactModal] = useState(false);\n\n const { images, price, name, brand, color, description, seller } = product;\n\n // Determine if this is a store product (hasOffer is specific to StoreProduct)\n const isStoreProduct = 'hasOffer' in product;\n const storeHasOffer = Boolean((product as Partial<StoreProduct>).hasOffer);\n const storeOfferPrice = (product as Partial<StoreProduct>).offerPrice;\n\n // prepare environmental impact sources\n const envImpactModal = (\n product as unknown as {\n environmentalImpact?: EnvironmentalImpactModalProps['environmentalImpact'];\n }\n ).environmentalImpact;\n const backImpact = (product as Partial<MarketplaceProduct>).productCategory\n ?.materials as\n | ProductCategoryMaterial[]\n | StoreProductMaterial[]\n | undefined;\n\n return (\n <article\n className={cn(\n 'flex-shrink-0',\n 'w-[220px]',\n 'h-[350px]',\n 'card-flip-perspective'\n )}\n >\n <div\n className={cn('card-flip-inner', isFlipped ? 'card-flip-flipped' : '')}\n >\n {/* Front Side - Product Info */}\n <CardFrontSide\n isFlipped={isFlipped}\n setIsFlipped={setIsFlipped}\n productImage={\n images && images.length > 0 ? (\n <img src={images[0]} alt={name} />\n ) : null\n }\n price={price}\n name={name}\n brand={brand}\n productCondition={(product as Partial<MarketplaceProduct>).condition}\n color={color}\n description={description}\n isExchangeable={\n // only marketplace products support exchange\n !isStoreProduct &&\n (product as Partial<MarketplaceProduct>).isExchangeable\n }\n // store-specific\n isStoreProduct={isStoreProduct}\n hasOffer={storeHasOffer}\n offerPrice={storeOfferPrice}\n fallbackImage=\"https://images.unsplash.com/photo-1503023345310-bd7c1de61c7d?w=800&q=60&auto=format&fit=crop\"\n onCardClick={() => {}}\n onAddToCart={() => {}}\n onExchange={() => {}}\n />\n\n {/* Back Side - Environmental Impact & Seller Info */}\n <CardBackSide\n isFlipped={isFlipped}\n setIsFlipped={setIsFlipped}\n setShowImpactModal={setShowImpactModal}\n environmentalImpact={envImpactModal ?? backImpact}\n sellerName={(seller?.profile as PersonProfile)?.firstName}\n sellerPhone={seller?.phone}\n sellerAddress={seller?.address}\n />\n </div>\n\n {/* Environmental Impact Modal - Rendered outside card */}\n {envImpactModal && (\n <EnvironmentalImpactModal\n isOpen={showImpactModal}\n onClose={() => setShowImpactModal(false)}\n environmentalImpact={envImpactModal}\n />\n )}\n </article>\n );\n}\n","import { type LucideIcon } from 'lucide-react';\n\nexport interface StatsCardProps {\n icon: LucideIcon;\n mainText: string | number;\n description: string;\n}\n\nexport default function StatsCard({\n icon: Icon,\n mainText,\n description,\n}: StatsCardProps) {\n return (\n <article className=\"inline-flex p-4 shadow-md flex-col items-center justify-center min-w-40 rounded-lg bg-white dark:bg-stone-900\">\n <div className=\"flex flex-col items-center\">\n <div className=\"flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10 text-primary mb-4\">\n <Icon className=\"w-5 h-5\" />\n </div>\n <h3 className=\"text-2xl font-bold text-gray-900 dark:text-stone-100 mb-1\">\n {mainText}\n </h3>\n <p className=\"text-sm text-gray-600 dark:text-stone-400 text-center\">\n {description}\n </p>\n </div>\n </article>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion } from 'motion/react';\n\nconst tableVariants = cva('w-full table-auto border-collapse', {\n variants: {\n variant: {\n default: '',\n outlined: 'border border-border rounded-lg overflow-hidden',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n striped: {\n true: '',\n },\n hover: {\n true: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nexport type Column<T> = {\n key: string;\n header: React.ReactNode;\n /** optional custom cell renderer (value, row) */\n render?: (value: unknown, row: T) => React.ReactNode;\n className?: string;\n};\n\nexport interface TableProps<T>\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,\n VariantProps<typeof tableVariants> {\n columns: Column<T>[];\n data: T[];\n rowKey?: (row: T) => string | number;\n emptyMessage?: React.ReactNode;\n}\n\nconst Table = React.forwardRef<\n HTMLDivElement,\n TableProps<Record<string, unknown>>\n>(\n (\n {\n columns,\n data,\n rowKey,\n className,\n variant,\n size,\n striped,\n hover,\n emptyMessage = 'No data',\n ...props\n },\n ref\n ) => {\n // motion.div props types can conflict with standard HTML props in some setups;\n // cast to `any` to avoid excessive type incompatibilities when spreading HTML attributes.\n const MotionDiv: React.ElementType = motion.div;\n\n return (\n <MotionDiv\n ref={ref}\n className={cn('w-full overflow-auto', className)}\n initial={{ opacity: 0, y: -6 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true }}\n transition={{ duration: 0.35 }}\n {...props}\n >\n <table className={cn(tableVariants({ variant, size }))} role=\"table\">\n <thead className=\"bg-primary text-white\">\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n 'text-left px-4 py-2 font-medium text-white',\n col.className\n )}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {data.length === 0 ? (\n <tr>\n <td\n className=\"px-4 py-6 text-center text-text-muted\"\n colSpan={columns.length}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n data.map((row, idx) => {\n const key = rowKey\n ? rowKey(row)\n : ((row as Record<string, unknown>).id ?? idx);\n return (\n <tr\n key={String(key)}\n className={cn(\n striped && idx % 2 === 1\n ? 'bg-neutral/5 dark:bg-stone-800/40'\n : '',\n hover\n ? 'hover:bg-neutral/5 dark:hover:bg-stone-800/50'\n : ''\n )}\n >\n {columns.map((col) => {\n const value = (row as Record<string, unknown>)[col.key];\n return (\n <td key={col.key} className=\"px-4 py-3 align-top\">\n {col.render\n ? col.render(value, row)\n : String(value ?? '')}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </MotionDiv>\n );\n }\n);\n\nTable.displayName = 'Table';\n\nexport { Table, tableVariants };\n\nexport default Table;\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\n\nconst textVariants = cva('transition-colors', {\n variants: {\n variant: {\n p: 'block',\n span: 'inline',\n label: 'block font-medium cursor-pointer',\n blockquote: 'block border-l-4 border-primary pl-4 italic',\n small: 'block text-sm',\n code: 'inline-block font-mono bg-background-secondary px-1.5 py-0.5 rounded text-sm',\n },\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n color: {\n default: 'text-foreground',\n primary: 'text-primary',\n secondary: 'text-foreground-secondary',\n tertiary: 'text-foreground-tertiary',\n error: 'text-error',\n success: 'text-success',\n warning: 'text-warning',\n muted: 'text-muted',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n },\n },\n defaultVariants: {\n variant: 'p',\n size: 'base',\n weight: 'normal',\n color: 'default',\n align: 'left',\n },\n});\n\ntype TextVariantProps = VariantProps<typeof textVariants>;\n\nexport interface TextProps\n extends Omit<React.HTMLAttributes<HTMLElement>, 'color'>, TextVariantProps {\n /**\n * The HTML element to render\n */\n variant?: 'p' | 'span' | 'label' | 'blockquote' | 'small' | 'code';\n /**\n * Content to display\n */\n children: React.ReactNode;\n /**\n * For label variant - associates label with input\n */\n htmlFor?: string;\n /**\n * Render as a different element while maintaining variant styling\n */\n as?: 'p' | 'span' | 'label' | 'blockquote' | 'small' | 'div' | 'code';\n}\n\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n className,\n variant = 'p',\n size,\n weight,\n color,\n align,\n as,\n htmlFor,\n children,\n ...props\n },\n ref\n ) => {\n const Component = (as || variant) as React.ElementType;\n\n return (\n <Component\n ref={ref}\n htmlFor={variant === 'label' || as === 'label' ? htmlFor : undefined}\n className={cn(\n textVariants({ variant, size, weight, color, align, className })\n )}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = 'Text';\n\nexport { Text, textVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion } from 'motion/react';\n\nconst textareaVariants = cva(\n 'w-full rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 placeholder:text-input-placeholder resize-none',\n {\n variants: {\n variant: {\n default:\n 'bg-input-bg border-2 border-input-border hover:border-input-border-hover focus:border-input-border-focus focus:ring-primary/20',\n filled:\n 'bg-background-secondary border-2 border-transparent hover:bg-background focus:bg-input-bg focus:border-input-border-focus focus:ring-primary/20',\n outline:\n 'bg-transparent border-2 border-primary text-foreground hover:bg-primary/5 focus:bg-primary/5 focus:border-primary-active focus:ring-primary/20',\n },\n textSize: {\n sm: 'text-sm py-2 px-3 min-h-[80px]',\n md: 'text-base py-3 px-3 min-h-[120px]',\n lg: 'text-lg py-4 px-4 min-h-[160px]',\n },\n hasError: {\n true: 'border-error focus:border-error focus:ring-error/20',\n },\n },\n defaultVariants: {\n variant: 'default',\n textSize: 'md',\n hasError: false,\n },\n }\n);\n\ntype TextareaVariantProps = VariantProps<typeof textareaVariants>;\n\nexport interface TextareaProps\n extends\n Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>,\n Omit<TextareaVariantProps, 'hasError'> {\n /**\n * Label text displayed above the textarea\n */\n label?: string;\n /**\n * Error message to display below the textarea\n */\n errorMessage?: string;\n /**\n * Whether to show character count\n */\n showCharCount?: boolean;\n /**\n * Width variant of the textarea container\n */\n width?: 'sm' | 'md' | 'lg' | 'full';\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n variant,\n textSize,\n label,\n errorMessage,\n showCharCount = false,\n width = 'full',\n disabled = false,\n readOnly = false,\n maxLength,\n value = '',\n name,\n id,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const computedHasError = !!errorMessage;\n const currentLength = String(value).length;\n\n const widthClass = {\n sm: 'w-1/3',\n md: 'w-1/2',\n lg: 'w-2/3',\n full: 'w-full',\n }[width];\n\n const reactId = React.useId();\n const generatedId = id || name || `textarea-${reactId}`;\n\n return (\n <div className={cn('space-y-2', widthClass)}>\n {label && (\n <label\n htmlFor={generatedId}\n className=\"block text-sm font-medium text-foreground\"\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <motion.div\n initial={false}\n animate={{ scale: isFocused ? 1.002 : 1 }}\n transition={{ type: 'spring', stiffness: 400, damping: 17 }}\n className=\"relative\"\n >\n <textarea\n ref={ref}\n id={generatedId}\n name={name}\n value={value}\n disabled={disabled}\n readOnly={readOnly}\n maxLength={maxLength}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n className={cn(\n textareaVariants({\n variant,\n textSize,\n hasError: computedHasError,\n className,\n })\n )}\n {...props}\n />\n </motion.div>\n {showCharCount && maxLength && (\n <div className=\"mt-1 text-xs text-foreground-tertiary text-right\">\n {currentLength} / {maxLength}\n </div>\n )}\n </div>\n {errorMessage && (\n <motion.p\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className=\"text-xs text-error\"\n >\n {errorMessage}\n </motion.p>\n )}\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n\nexport { Textarea, textareaVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { type LucideIcon, Eye, EyeOff } from 'lucide-react';\n\nconst inputVariants = cva(\n 'w-full rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 placeholder:text-input-placeholder',\n {\n variants: {\n variant: {\n default:\n 'bg-input-bg border-2 border-input-border hover:border-input-border-hover focus:border-input-border-focus focus:ring-primary/20',\n filled:\n 'bg-background-secondary border-2 border-transparent hover:bg-background-tertiary focus:bg-input-bg focus:border-input-border-focus focus:ring-primary/20',\n outline:\n 'bg-transparent border-2 border-primary text-foreground hover:bg-primary/5 focus:bg-primary/5 focus:border-primary-active focus:ring-primary/20',\n },\n size: {\n sm: 'h-9 text-sm',\n md: 'h-11 text-base',\n lg: 'h-14 text-lg',\n },\n hasError: {\n true: 'border-error focus:border-error focus:ring-error/20',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n hasError: false,\n },\n }\n);\n\nexport interface TextInputProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'>,\n VariantProps<typeof inputVariants> {\n /**\n * Label text displayed above the input\n */\n label?: string;\n /**\n * Icon component to display on the left side\n */\n leftIcon?: LucideIcon;\n /**\n * Error message to display below the input\n */\n errorMessage?: string;\n /**\n * Callback function when input value changes\n */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Width variant of the input container\n */\n width?: 'sm' | 'md' | 'lg' | 'full';\n}\n\nconst TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n className,\n variant,\n size,\n hasError,\n label,\n leftIcon: LeftIcon,\n errorMessage,\n type = 'text',\n width = 'full',\n id,\n name,\n disabled,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [showPassword, setShowPassword] = React.useState(false);\n\n const widthClass = {\n sm: 'w-1/3',\n md: 'w-1/2',\n lg: 'w-2/3',\n full: 'w-full',\n }[width];\n\n const isPassword = type === 'password';\n const inputType = isPassword && showPassword ? 'text' : type;\n const computedHasError = hasError || !!errorMessage;\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const togglePasswordVisibility = () => {\n setShowPassword((prev) => !prev);\n };\n\n return (\n <div className={cn('space-y-2', widthClass)}>\n {label && (\n <label\n htmlFor={id || name}\n className=\"block text-sm font-medium text-foreground\"\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <motion.div\n initial={false}\n animate={{ scale: isFocused ? 1.002 : 1 }}\n transition={{ type: 'spring', stiffness: 400, damping: 17 }}\n className=\"relative\"\n >\n {LeftIcon && (\n <LeftIcon\n className={cn(\n 'absolute left-3 top-1/2 transform -translate-y-1/2 w-5 h-5 transition-colors duration-200',\n isFocused ? 'text-primary' : 'text-foreground-tertiary',\n computedHasError && 'text-error'\n )}\n />\n )}\n <input\n ref={ref}\n id={id || name}\n name={name}\n type={inputType}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={cn(\n inputVariants({\n variant,\n size,\n hasError: computedHasError,\n className,\n }),\n {\n 'pl-3': !LeftIcon,\n 'pl-10': LeftIcon,\n 'pr-10': isPassword,\n 'pr-3': !isPassword,\n }\n )}\n {...props}\n />\n {isPassword && (\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n disabled={disabled}\n className={cn(\n 'absolute right-3 top-1/2',\n 'transform',\n '-translate-y-1/2',\n 'text-foreground-tertiary',\n 'hover:text-foreground-secondary',\n 'transition-colors',\n 'duration-200',\n 'disabled:opacity-50',\n 'disabled:cursor-not-allowed'\n )}\n tabIndex={-1}\n >\n <AnimatePresence mode=\"wait\">\n {showPassword ? (\n <motion.div\n key=\"eye-off\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n >\n <EyeOff className=\"w-5 h-5\" />\n </motion.div>\n ) : (\n <motion.div\n key=\"eye\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n >\n <Eye className=\"w-5 h-5\" />\n </motion.div>\n )}\n </AnimatePresence>\n </button>\n )}\n </motion.div>\n {errorMessage && (\n <motion.p\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className=\"mt-1 text-xs text-error\"\n >\n {errorMessage}\n </motion.p>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextInput.displayName = 'TextInput';\n\nexport { TextInput, inputVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/utils/cn';\n\nconst titleVariants = cva('font-bold tracking-tight transition-colors', {\n variants: {\n level: {\n h1: 'text-5xl md:text-6xl lg:text-7xl',\n h2: 'text-4xl md:text-5xl lg:text-6xl',\n h3: 'text-3xl md:text-4xl lg:text-5xl',\n h4: 'text-2xl md:text-3xl lg:text-4xl',\n h5: 'text-xl md:text-2xl lg:text-3xl',\n h6: 'text-lg md:text-xl lg:text-2xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold',\n },\n color: {\n default: 'text-foreground',\n primary: 'text-primary',\n secondary: 'text-foreground-secondary',\n tertiary: 'text-foreground-tertiary',\n error: 'text-error',\n success: 'text-success',\n warning: 'text-warning',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n },\n },\n defaultVariants: {\n level: 'h1',\n weight: 'bold',\n color: 'default',\n align: 'left',\n },\n});\n\ntype TitleVariantProps = VariantProps<typeof titleVariants>;\n\nexport interface TitleProps\n extends\n Omit<React.HTMLAttributes<HTMLHeadingElement>, 'color'>,\n TitleVariantProps {\n /**\n * The semantic heading level to render\n */\n level?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n /**\n * Content to display\n */\n children: React.ReactNode;\n /**\n * Whether to render as a different heading level for styling while maintaining semantic meaning\n */\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst Title = React.forwardRef<HTMLHeadingElement, TitleProps>(\n (\n { className, level = 'h1', weight, color, align, as, children, ...props },\n ref\n ) => {\n const Component = as || level;\n\n return (\n <Component\n ref={ref}\n className={cn(\n titleVariants({ level, weight, color, align, className })\n )}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nTitle.displayName = 'Title';\n\nexport { Title, titleVariants };\n"]}