nexoreui-cli 0.1.0 → 0.1.1

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/commands/add.ts","../src/registry/button.ts","../src/registry/modal.ts","../src/registry/card.ts","../src/registry/alert.ts","../src/registry/badge.ts","../src/registry/index.ts","../src/utils/detect.ts","../src/utils/copy.ts","../src/commands/list.ts","../src/index.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport { registry } from '../registry/index.js';\nimport { detectProject } from '../utils/detect.js';\nimport { copyComponent } from '../utils/copy.js';\n\nexport async function addCommand(components: string[], options: { yes?: boolean }) {\n if (components.length === 0) {\n console.error('\\x1b[31mPlease specify at least one component to add.\\x1b[0m');\n console.log('Example: npx nexoreui add button modal card');\n console.log('Run \\x1b[32mnpx nexoreui list\\x1b[0m to see all available components.');\n process.exit(1);\n }\n\n // Validate all components exist before starting\n const invalid = components.filter((c) => !registry[c]);\n if (invalid.length > 0) {\n console.error(`\\x1b[31mUnknown component(s): ${invalid.join(', ')}\\x1b[0m`);\n console.log('Run \\x1b[32mnpx nexoreui list\\x1b[0m to see all available components.');\n process.exit(1);\n }\n\n const projectInfo = detectProject();\n const outputDir = path.resolve(process.cwd(), projectInfo.componentsDir);\n\n console.log(`\\n\\x1b[34m\\x1b[1mNexoreUI CLI\\x1b[0m`);\n console.log(`Detected: \\x1b[36m${projectInfo.framework}\\x1b[0m project`);\n console.log(`Output: \\x1b[36m${outputDir}\\x1b[0m\\n`);\n\n // Ensure output directory exists\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n let successCount = 0;\n\n for (const name of components) {\n const entry = registry[name];\n if (!entry) continue;\n\n try {\n copyComponent(name, entry, outputDir);\n console.log(` \\x1b[32m✓\\x1b[0m ${name} → ${entry.fileName}`);\n successCount++;\n } catch (err: any) {\n console.error(` \\x1b[31m✗\\x1b[0m ${name}: ${err.message}`);\n }\n }\n\n // Collect all dependencies\n const allDeps = new Set<string>();\n for (const name of components) {\n const entry = registry[name];\n if (entry?.dependencies) {\n entry.dependencies.forEach((d) => allDeps.add(d));\n }\n }\n\n console.log(`\\n\\x1b[32m${successCount} component(s) added successfully.\\x1b[0m`);\n if (allDeps.size > 0) {\n console.log(`\\nInstall peer dependencies:`);\n console.log(` \\x1b[36mpnpm add ${Array.from(allDeps).join(' ')}\\x1b[0m\\n`);\n }\n}\n","export const button = {\n name: \"button\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\"\n ],\n fileName: \"button.tsx\",\n content: `'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\nimport { motion, HTMLMotionProps, AnimatePresence } from 'framer-motion';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background 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 active:scale-95\",\n {\n variants: {\n variant: {\n default: \"bg-gradient-to-br from-primary to-primary/80 text-primary-foreground shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-border/50\",\n destructive: \"bg-gradient-to-br from-destructive to-destructive/80 text-destructive-foreground shadow-lg shadow-destructive/20 hover:shadow-xl hover:shadow-destructive/30\",\n outline: \"border-2 border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n // New WOW Variants\n premium: \"bg-gradient-to-r from-violet-600 via-pink-600 to-orange-500 text-white shadow-lg shadow-purple-500/20 hover:shadow-xl hover:shadow-purple-500/30\",\n neon: \"bg-background border-2 border-primary text-foreground shadow-[0_0_15px_rgba(var(--primary-rgb),0.5)] hover:shadow-[0_0_25px_rgba(var(--primary-rgb),0.7)]\",\n glass: \"backdrop-blur-md bg-white/10 dark:bg-black/20 border border-white/20 dark:border-white/10 text-foreground hover:bg-white/20 dark:hover:bg-black/30 shadow-lg\",\n shimmer: \"relative overflow-hidden bg-slate-900 text-white dark:bg-white dark:text-black\",\n },\n size: {\n default: \"h-10 px-5 py-2\",\n sm: \"h-9 rounded-md px-3 text-xs\",\n lg: \"h-11 rounded-xl px-8 text-base\",\n icon: \"h-10 w-10 rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Enable hover/tap motion animation @default true */\n animate?: boolean;\n /** Enable shimmer light effect across the button */\n shimmer?: boolean;\n /** Enable neon glow effect */\n glow?: boolean;\n children?: React.ReactNode;\n className?: string;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, animate = true, shimmer = false, glow = false, children, ...props }, ref) => {\n \n const isShimmer = variant === 'shimmer' || shimmer;\n\n const buttonContent = (\n <>\n {isShimmer && (\n <motion.div\n className=\"absolute inset-0 w-[200%] bg-gradient-to-r from-transparent via-white/20 to-transparent\"\n initial={{ x: '-100%' }}\n animate={{ x: '100%' }}\n transition={{\n repeat: Infinity,\n repeatType: 'loop',\n duration: 2,\n ease: 'linear',\n }}\n style={{ transform: 'skewX(-20deg)' }}\n />\n )}\n <span className=\"relative z-10 flex items-center gap-2\">{children}</span>\n </>\n );\n\n if (!animate) {\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }), isShimmer && \"relative overflow-hidden\")}\n ref={ref}\n {...props}\n >\n {buttonContent}\n </button>\n );\n }\n\n // Destructure HTML-only event handlers that shouldn't go to motion.button\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...motionSafeProps } = props;\n\n return (\n <motion.button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n whileHover={{ \n scale: 1.03,\n y: -1,\n }}\n whileTap={{ scale: 0.97 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 15 }}\n {...motionSafeProps as HTMLMotionProps<\"button\">}\n >\n {buttonContent}\n </motion.button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n`\n};\n","export const modal = {\n name: \"modal\",\n dependencies: [\n \"@radix-ui/react-dialog\",\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"lucide-react\",\n \"framer-motion\"\n ],\n componentsDependencies: [\"button\"],\n fileName: \"modal.tsx\",\n content: `\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X, AlertTriangle, CheckCircle } from \"lucide-react\"\nimport { cn } from \"../utils/cn\"\nimport { Button } from \"./button\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>((({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border/50 bg-background/95 backdrop-blur-md p-6 shadow-2xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:scale-95 data-[state=open]:scale-100 data-[state=closed]:translate-y-[-48%] data-[state=open]:translate-y-[-50%] rounded-2xl\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-full p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-xl font-semibold leading-none tracking-tight bg-gradient-to-br from-foreground to-foreground/70 bg-clip-text text-transparent\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n\nexport interface ModalProps {\n /**\n * The title of the modal\n */\n title?: React.ReactNode;\n /**\n * The description of the modal\n */\n description?: React.ReactNode;\n /**\n * The content of the modal\n */\n children?: React.ReactNode;\n /**\n * The trigger element to open the modal\n */\n trigger?: React.ReactNode;\n /**\n * Callback function called when the confirm button is clicked\n */\n onConfirm?: () => void;\n /**\n * Callback function called when the cancel button is clicked\n */\n onCancel?: () => void;\n /**\n * The text for the confirm button\n * @default \"Confirm\"\n */\n confirmText?: string;\n /**\n * The text for the cancel button\n * @default \"Cancel\"\n */\n cancelText?: string;\n /**\n * Whether the modal is open\n */\n isOpen?: boolean;\n /**\n * Callback function called when the open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The variant of the modal\n * @default \"default\"\n */\n variant?: \"default\" | \"glass\" | \"destructive\" | \"success\" | \"fullscreen\" | \"drawer\";\n /**\n * Whether the content is scrollable\n * @default false\n */\n scrollable?: boolean;\n /**\n * Additional className for the dialog content\n */\n className?: string;\n}\n\nexport function Modal({\n title,\n description,\n children,\n trigger,\n onConfirm,\n onCancel,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n isOpen,\n onOpenChange,\n variant = \"default\",\n scrollable = false,\n className,\n}: ModalProps) {\n const variantClasses = {\n default: \"\",\n glass: \"bg-white/10 backdrop-blur-xl border-white/20 shadow-2xl\",\n destructive: \"border-destructive/20\",\n success: \"border-green-500/20\",\n fullscreen: \"max-w-full h-screen rounded-none\",\n drawer: \"sm:max-w-full sm:h-[50vh] sm:rounded-b-none sm:rounded-t-[20px] fixed bottom-0 top-auto translate-y-0\",\n }\n\n const isDestructive = variant === \"destructive\";\n const isSuccess = variant === \"success\";\n\n return (\n <Dialog open={isOpen} onOpenChange={onOpenChange}>\n {trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}\n <DialogContent className={cn(variantClasses[variant], scrollable ? \"max-h-[80vh] overflow-y-auto\" : \"\", className)}>\n {(title || description || isDestructive || isSuccess) && (\n <DialogHeader className={cn((isDestructive || isSuccess) ? \"flex flex-col items-center text-center sm:text-center\" : \"\")}>\n {isDestructive && (\n <div className=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-destructive/10 mb-4\">\n <AlertTriangle className=\"h-6 w-6 text-destructive\" />\n </div>\n )}\n {isSuccess && (\n <div className=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-500/10 mb-4\">\n <CheckCircle className=\"h-6 w-6 text-green-500\" />\n </div>\n )}\n {title && <DialogTitle className={cn((isDestructive || isSuccess) ? \"text-xl\" : \"\")}>{title}</DialogTitle>}\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n )}\n <div className=\"py-4\">{children}</div>\n {(onConfirm || onCancel || isDestructive || isSuccess) && (\n <DialogFooter className={cn((isDestructive || isSuccess) ? \"sm:justify-center flex-col sm:flex-row gap-2\" : \"\")}>\n {onCancel && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\" className={cn((isDestructive || isSuccess) ? \"w-full sm:w-auto\" : \"\")} onClick={onCancel}>{cancelText}</Button>\n </DialogPrimitive.Close>\n )}\n {onConfirm && (\n <Button \n variant={isDestructive ? \"destructive\" : \"default\"} \n className={cn((isDestructive || isSuccess) ? \"w-full sm:w-auto\" : \"\", isSuccess ? \"bg-green-500 hover:bg-green-600\" : \"\")} \n onClick={onConfirm}\n >\n {confirmText}\n </Button>\n )}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n`\n};\n","export const card = {\n name: \"card\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\"\n ],\n fileName: \"card.tsx\",\n content: `'use client';\n\nimport * as React from \"react\"\nimport { cn } from \"../utils/cn\"\nimport { motion, HTMLMotionProps } from \"framer-motion\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nconst cardVariants = cva(\n \"rounded-2xl text-card-foreground transition-all duration-300\",\n {\n variants: {\n variant: {\n default: \"border bg-card text-card-foreground shadow-sm hover:shadow-md\",\n glass: \"backdrop-blur-md bg-white/10 dark:bg-black/20 border border-white/20 dark:border-white/10 shadow-lg\",\n gradient: \"bg-gradient-to-br from-violet-500/10 via-pink-500/10 to-orange-500/10 border border-purple-500/20 shadow-lg shadow-purple-500/5\",\n glow: \"bg-card border-2 border-primary/20 shadow-[0_0_15px_rgba(var(--primary-rgb),0.1)] hover:shadow-[0_0_25px_rgba(var(--primary-rgb),0.2)]\",\n },\n hover: {\n none: \"\",\n lift: \"hover:-translate-y-1 hover:shadow-lg\",\n glow: \"hover:border-primary/50 hover:shadow-[0_0_20px_rgba(var(--primary-rgb),0.15)]\",\n }\n },\n defaultVariants: {\n variant: \"default\",\n hover: \"lift\",\n }\n }\n)\n\nexport interface CardProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, keyof HTMLMotionProps<\"div\">>,\n VariantProps<typeof cardVariants> {\n /**\n * Whether to enable hover animations\n * @default true\n */\n animate?: boolean;\n /**\n * The title of the card\n */\n title?: React.ReactNode;\n /**\n * The description of the card\n */\n description?: React.ReactNode;\n /**\n * The footer content of the card\n */\n footer?: React.ReactNode;\n /**\n * An image URL to display at the top of the card\n */\n image?: string;\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps & HTMLMotionProps<\"div\">>(\n ({ className, variant, hover, animate = true, title, description, footer, image, children, ...props }, ref) => {\n const isCompound = !title && !description && !footer && !image;\n \n const content = isCompound ? (\n children\n ) : (\n <>\n {image && (\n <div className=\"relative w-full h-48 overflow-hidden rounded-t-2xl\">\n <img src={image} alt={typeof title === 'string' ? title : 'Card image'} className=\"object-cover w-full h-full\" />\n </div>\n )}\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n {children && <CardContent>{children as React.ReactNode}</CardContent>}\n {footer && <CardFooter>{footer}</CardFooter>}\n </>\n );\n\n if (animate) {\n return (\n <motion.div\n ref={ref}\n className={cn(cardVariants({ variant, hover, className }))}\n whileHover={{ scale: 1.01 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 20 }}\n {...props}\n >\n {content as React.ReactNode}\n </motion.div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, hover, className }))}\n {...(props as React.HTMLAttributes<HTMLDivElement>)}\n >\n {content as React.ReactNode}\n </div>\n );\n }\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className=\"font-semibold leading-none tracking-tight text-xl bg-gradient-to-br from-foreground to-foreground/70 bg-clip-text text-transparent\"\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n`\n};\n","export const alert = {\n name: \"alert\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\"\n ],\n fileName: \"alert.tsx\",\n content: `\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../utils/cn\"\nimport { motion, HTMLMotionProps } from \"framer-motion\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-xl border p-4 [&>svg~*]:pl-7 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 transition-all duration-300\",\n {\n variants: {\n variant: {\n default: \"bg-background/50 border-border text-foreground\",\n destructive: \"border-red-500/20 bg-red-500/10 text-red-600 dark:text-red-400 [&>svg]:text-red-600 dark:[&>svg]:text-red-400\",\n success: \"border-emerald-500/20 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-400\",\n warning: \"border-amber-500/20 bg-amber-500/10 text-amber-600 dark:text-amber-400 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-400\",\n info: \"border-blue-500/20 bg-blue-500/10 text-blue-600 dark:text-blue-400 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\n glass: \"backdrop-blur-md bg-white/5 dark:bg-black/20 border-white/10 dark:border-white/5 text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>,\n VariantProps<typeof alertVariants> {\n /**\n * Whether to enable entry animations\n * @default true\n */\n animate?: boolean;\n /**\n * The title of the alert\n */\n title?: React.ReactNode;\n /**\n * The description of the alert\n */\n description?: React.ReactNode;\n /**\n * An optional icon to display\n */\n icon?: React.ReactNode;\n /**\n * Whether the alert can be dismissed\n */\n dismissible?: boolean;\n /**\n * Callback function called when the alert is dismissed\n */\n onDismiss?: () => void;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant, animate = true, title, description, icon, dismissible, onDismiss, children, ...props }, ref) => {\n const isCompound = !title && !description && !icon;\n const [isOpen, setIsOpen] = React.useState(true);\n\n if (!isOpen) return null;\n\n const content = isCompound ? (\n children\n ) : (\n <>\n {icon && <div className=\"absolute left-4 top-4\">{icon}</div>}\n <div className={cn(icon ? \"pl-7\" : \"\")}>\n {title && <AlertTitle>{title}</AlertTitle>}\n {description && <AlertDescription>{description}</AlertDescription>}\n {!title && !description && children}\n </div>\n {dismissible && (\n <button\n onClick={() => {\n setIsOpen(false);\n onDismiss?.();\n }}\n className=\"absolute right-4 top-4 opacity-70 hover:opacity-100 transition-opacity\"\n aria-label=\"Dismiss\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n )}\n </>\n );\n\n if (animate) {\n return (\n <motion.div\n ref={ref}\n role=\"alert\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 10 }}\n transition={{ duration: 0.3 }}\n className={cn(alertVariants({ variant }), className)}\n {...(props as unknown as HTMLMotionProps<\"div\">)}\n >\n {content}\n </motion.div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n >\n {content}\n </div>\n );\n }\n)\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-semibold leading-none tracking-tight text-base\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm opacity-90 [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n`\n};\n","export const badge = {\n name: \"badge\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\"\n ],\n fileName: \"badge.tsx\",\n content: `'use client';\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../utils/cn\"\nimport { motion } from \"framer-motion\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1 rounded-full border font-semibold transition-all focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-default\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground border-border hover:bg-accent\",\n // New WOW Variants\n gradient: \"border-transparent bg-gradient-to-r from-violet-500 to-pink-500 text-white shadow-sm\",\n neon: \"border-primary/50 bg-primary/10 text-primary shadow-[0_0_10px_rgba(var(--primary-rgb),0.3)]\",\n success: \"border-transparent bg-emerald-500/20 text-emerald-600 dark:text-emerald-400\",\n },\n size: {\n default: \"px-2.5 py-0.5 text-xs\",\n sm: \"px-1.5 py-0.5 text-[10px]\",\n lg: \"px-3 py-1 text-sm\",\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n /**\n * Whether to show a pulse animation on the dot\n * @default false\n */\n pulse?: boolean;\n /**\n * Whether to show a dot indicator\n * @default false\n */\n dot?: boolean;\n}\n\nfunction Badge({ className, variant, size, pulse = false, dot = false, children, ...props }: BadgeProps) {\n const showDot = dot || pulse;\n \n return (\n <div className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {showDot && (\n <span className=\"relative flex h-2 w-2 mr-1\">\n {pulse && (\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-current opacity-75\"></span>\n )}\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-current\"></span>\n </span>\n )}\n {children}\n </div>\n )\n}\n\nexport { Badge, badgeVariants }\n`\n};\n","import { button } from './button';\nimport { modal } from './modal';\nimport { card } from './card';\nimport { alert } from './alert';\nimport { badge } from './badge';\n\nexport interface RegistryItem {\n name: string;\n dependencies: string[];\n componentsDependencies?: string[];\n fileName: string;\n content: string;\n}\n\nexport const registry: Record<string, RegistryItem> = {\n button,\n modal,\n card,\n alert,\n badge,\n};\n","import * as fs from 'fs';\nimport * as path from 'path';\n\ninterface ProjectInfo {\n framework: string;\n componentsDir: string;\n}\n\nexport function detectProject(): ProjectInfo {\n const cwd = process.cwd();\n\n // Check for Next.js (app router)\n if (fs.existsSync(path.join(cwd, 'next.config.ts')) || fs.existsSync(path.join(cwd, 'next.config.js')) || fs.existsSync(path.join(cwd, 'next.config.mjs'))) {\n // app/ directory = App Router\n if (fs.existsSync(path.join(cwd, 'app'))) {\n return { framework: 'Next.js (App Router)', componentsDir: 'app/components/ui' };\n }\n // src/app/ directory\n if (fs.existsSync(path.join(cwd, 'src', 'app'))) {\n return { framework: 'Next.js (App Router)', componentsDir: 'src/app/components/ui' };\n }\n // pages/ directory = Pages Router\n return { framework: 'Next.js (Pages Router)', componentsDir: 'components/ui' };\n }\n\n // Check for Vite\n if (fs.existsSync(path.join(cwd, 'vite.config.ts')) || fs.existsSync(path.join(cwd, 'vite.config.js'))) {\n if (fs.existsSync(path.join(cwd, 'src'))) {\n return { framework: 'Vite', componentsDir: 'src/components/ui' };\n }\n return { framework: 'Vite', componentsDir: 'components/ui' };\n }\n\n // Check for src directory (generic React)\n if (fs.existsSync(path.join(cwd, 'src'))) {\n return { framework: 'React', componentsDir: 'src/components/ui' };\n }\n\n // Fallback\n return { framework: 'Unknown', componentsDir: 'components/ui' };\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport type { RegistryItem } from '../registry/index.js';\n\nexport function copyComponent(name: string, entry: RegistryItem, outputDir: string) {\n const filePath = path.join(outputDir, entry.fileName);\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, entry.content, 'utf-8');\n}\n","import { registry } from '../registry/index.js';\n\nexport function listCommand() {\n const names = Object.keys(registry);\n console.log(`\\n\\x1b[34m\\x1b[1mNexoreUI — Available Components\\x1b[0m\\n`);\n names.forEach((name) => {\n const entry = registry[name];\n console.log(` \\x1b[32m${name.padEnd(15)}\\x1b[0m → ${entry.fileName}`);\n });\n console.log(`\\n\\x1b[90mTotal: ${names.length} components\\x1b[0m`);\n console.log(`Usage: \\x1b[36mnpx nexoreui add ${names[0]}\\x1b[0m\\n`);\n}\n","import { addCommand } from './commands/add.js';\nimport { listCommand } from './commands/list.js';\n\nasync function main() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command || command === '-h' || command === '--help') {\n printHelp();\n return;\n }\n\n if (command === 'list') {\n listCommand();\n } else if (command === 'add') {\n const components: string[] = [];\n let yes = false;\n\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n if (arg === '-y' || arg === '--yes') {\n yes = true;\n } else if (!arg.startsWith('-')) {\n components.push(arg);\n }\n }\n\n await addCommand(components, { yes });\n } else {\n console.error(`\\x1b[31mUnknown command: ${command}\\x1b[0m`);\n printHelp();\n }\n}\n\nfunction printHelp() {\n console.log(`\n\\x1b[34m\\x1b[1mNexoreUI CLI\\x1b[0m\nUsage:\n npx nexoreui [command] [options]\n\nCommands:\n \\x1b[32madd [components...]\\x1b[0m Add components to your project (e.g., button, modal, card, alert, badge)\n \\x1b[32mlist\\x1b[0m List all available components\n\nOptions:\n \\x1b[33m-y, --yes\\x1b[0m Skip prompts and use default paths\n \\x1b[33m-h, --help\\x1b[0m Show help information\n `);\n}\n\nmain().catch((err) => {\n console.error('\\x1b[31mAn unexpected error occurred:\\x1b[0m', err);\n process.exit(1);\n});\n"],"mappings":"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","names":["fs","path","fs","path"]}
1
+ {"version":3,"sources":["../src/commands/add.ts","../src/utils/detect.ts","../src/utils/copy.ts","../src/registry/button.ts","../src/registry/modal.ts","../src/registry/card.ts","../src/registry/alert.ts","../src/registry/badge.ts","../src/registry/index.ts","../src/commands/list.ts","../src/index.ts"],"sourcesContent":["import * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as readline from 'readline';\r\nimport { execSync } from 'child_process';\r\nimport { detectProject } from '../utils/detect.js';\r\nimport { ensureCnUtil, copyComponentFile, ensureDir } from '../utils/copy.js';\r\nimport { registry } from '../registry/index.js';\r\n\r\nfunction askQuestion(query: string): Promise<string> {\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n });\r\n return new Promise((resolve) =>\r\n rl.question(query, (ans) => {\r\n rl.close();\r\n resolve(ans);\r\n })\r\n );\r\n}\r\n\r\nexport async function addCommand(components: string[], options: { yes?: boolean }) {\r\n if (components.length === 0) {\r\n console.error('\\x1b[31mError: Please specify components to add.\\x1b[0m');\r\n console.log('Example: npx nexoreui add button modal');\r\n return;\r\n }\r\n\r\n // 1. Detect project structure\r\n const project = detectProject(process.cwd());\r\n console.log(`\\n\\x1b[34mDetected project type:\\x1b[0m ${project.projectType.toUpperCase()}`);\r\n console.log(`\\x1b[34mDetected package manager:\\x1b[0m ${project.packageManager}\\n`);\r\n\r\n // 2. Validate component names and determine all components to install (including internal dependencies)\r\n const componentsToInstall = new Set<string>();\r\n const invalidComponents: string[] = [];\r\n\r\n const queue = [...components];\r\n while (queue.length > 0) {\r\n const compName = queue.shift()!;\r\n const registryItem = registry[compName];\r\n if (!registryItem) {\r\n invalidComponents.push(compName);\r\n continue;\r\n }\r\n \r\n if (!componentsToInstall.has(compName)) {\r\n componentsToInstall.add(compName);\r\n // Queue up any sibling component dependencies (e.g. modal depends on button)\r\n if (registryItem.componentsDependencies) {\r\n for (const dep of registryItem.componentsDependencies) {\r\n queue.push(dep);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (invalidComponents.length > 0) {\r\n console.error(`\\x1b[31mError: Component(s) not found in registry: ${invalidComponents.join(', ')}\\x1b[0m`);\r\n console.log('Run \\x1b[32mnpx nexoreui list\\x1b[0m to see all available components.');\r\n return;\r\n }\r\n\r\n // 3. Determine defaults\r\n const defaultComponentsDir = project.hasSrcDir ? 'src/components/ui' : 'components/ui';\r\n const defaultUtilsFile = project.hasSrcDir ? 'src/lib/utils.ts' : 'lib/utils.ts';\r\n\r\n let componentsDirInput = '';\r\n let utilsFileInput = '';\r\n\r\n if (options.yes) {\r\n componentsDirInput = defaultComponentsDir;\r\n utilsFileInput = defaultUtilsFile;\r\n } else {\r\n // Prompt user\r\n const compPrompt = await askQuestion(`Where would you like to install the components? (default: ${defaultComponentsDir}): `);\r\n componentsDirInput = compPrompt.trim() || defaultComponentsDir;\r\n\r\n const utilsPrompt = await askQuestion(`Where should we create the utilities file (cn helper)? (default: ${defaultUtilsFile}): `);\r\n utilsFileInput = utilsPrompt.trim() || defaultUtilsFile;\r\n }\r\n\r\n const absoluteComponentsDir = path.resolve(project.baseDir, componentsDirInput);\r\n const absoluteUtilsFile = path.resolve(project.baseDir, utilsFileInput);\r\n\r\n console.log(`\\n\\x1b[33mInstalling components to:\\x1b[0m ${absoluteComponentsDir}`);\r\n console.log(`\\x1b[33mUsing cn helper from:\\x1b[0m ${absoluteUtilsFile}\\n`);\r\n\r\n // Ensure directories exist\r\n ensureDir(absoluteComponentsDir);\r\n\r\n // 4. Ensure cn helper exists\r\n const didCreateCn = ensureCnUtil(absoluteUtilsFile);\r\n if (didCreateCn) {\r\n console.log(`\\x1b[32mCreated utilities file (cn helper) at:\\x1b[0m ${utilsFileInput}`);\r\n } else {\r\n console.log(`\\x1b[90mUtilities file already exists at:\\x1b[0m ${utilsFileInput}`);\r\n }\r\n\r\n // 5. Copy component files\r\n const npmDependencies = new Set<string>();\r\n \r\n // Include standard clsx and tailwind-merge since cn helper is created\r\n npmDependencies.add('clsx');\r\n npmDependencies.add('tailwind-merge');\r\n\r\n for (const compName of componentsToInstall) {\r\n const registryItem = registry[compName];\r\n const targetPath = path.join(absoluteComponentsDir, registryItem.fileName);\r\n \r\n // Copy and rewrite relative imports\r\n copyComponentFile(registryItem.content, targetPath, absoluteUtilsFile);\r\n console.log(`\\x1b[32mAdded component:\\x1b[0m ${compName} -> ${path.join(componentsDirInput, registryItem.fileName)}`);\r\n\r\n // Collect external dependencies\r\n registryItem.dependencies.forEach(dep => npmDependencies.add(dep));\r\n }\r\n\r\n // 6. Install collected npm dependencies\r\n const depsArray = Array.from(npmDependencies);\r\n \r\n // Filter out dependencies that are already in package.json to avoid reinstalling unless needed\r\n let depsToInstall = [...depsArray];\r\n try {\r\n const packageJsonPath = path.join(project.baseDir, 'package.json');\r\n if (fs.existsSync(packageJsonPath)) {\r\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\r\n const existingDeps = { ...packageJson.dependencies, ...packageJson.devDependencies };\r\n depsToInstall = depsArray.filter(dep => !existingDeps[dep]);\r\n }\r\n } catch (e) {\r\n // Ignore and install all\r\n }\r\n\r\n if (depsToInstall.length > 0) {\r\n console.log(`\\n\\x1b[33mInstalling external dependencies:\\x1b[0m ${depsToInstall.join(', ')}...`);\r\n let installCmd = 'npm install';\r\n if (project.packageManager === 'pnpm') {\r\n installCmd = 'pnpm add';\r\n } else if (project.packageManager === 'yarn') {\r\n installCmd = 'yarn add';\r\n } else if (project.packageManager === 'bun') {\r\n installCmd = 'bun add';\r\n }\r\n\r\n try {\r\n execSync(`${installCmd} ${depsToInstall.join(' ')}`, {\r\n stdio: 'inherit',\r\n cwd: project.baseDir,\r\n });\r\n console.log('\\x1b[32mDependencies installed successfully!\\x1b[0m');\r\n } catch (err) {\r\n console.error('\\x1b[31mFailed to install dependencies. Please run the command manually:\\x1b[0m');\r\n console.log(` ${installCmd} ${depsToInstall.join(' ')}`);\r\n }\r\n } else {\r\n console.log('\\n\\x1b[90mAll external dependencies are already installed.\\x1b[0m');\r\n }\r\n\r\n console.log('\\n\\x1b[32m\\x1b[1mDone! NexoreUI components are ready to use.\\x1b[0m\\n');\r\n}\r\n","import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\r\nexport type ProjectType = 'next' | 'vite' | 'cra' | 'unknown';\r\n\r\nexport interface ProjectInfo {\r\n packageManager: PackageManager;\r\n projectType: ProjectType;\r\n hasSrcDir: boolean;\r\n baseDir: string;\r\n}\r\n\r\nexport function detectProject(cwd: string = process.cwd()): ProjectInfo {\r\n let packageManager: PackageManager = 'npm';\r\n let projectType: ProjectType = 'unknown';\r\n let hasSrcDir = false;\r\n\r\n // Determine base project directory (walk up to find package.json)\r\n let currentDir = cwd;\r\n let baseDir = cwd;\r\n while (currentDir !== path.parse(currentDir).root) {\r\n if (fs.existsSync(path.join(currentDir, 'package.json'))) {\r\n baseDir = currentDir;\r\n break;\r\n }\r\n currentDir = path.dirname(currentDir);\r\n }\r\n\r\n // Detect Package Manager\r\n if (fs.existsSync(path.join(baseDir, 'pnpm-lock.yaml'))) {\r\n packageManager = 'pnpm';\r\n } else if (fs.existsSync(path.join(baseDir, 'yarn.lock'))) {\r\n packageManager = 'yarn';\r\n } else if (fs.existsSync(path.join(baseDir, 'bun.lockb')) || fs.existsSync(path.join(baseDir, 'bun.lock'))) {\r\n packageManager = 'bun';\r\n }\r\n\r\n // Detect Source Directory\r\n if (fs.existsSync(path.join(baseDir, 'src'))) {\r\n hasSrcDir = true;\r\n }\r\n\r\n // Detect Project Type (Framework)\r\n try {\r\n const packageJsonPath = path.join(baseDir, 'package.json');\r\n if (fs.existsSync(packageJsonPath)) {\r\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\r\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\r\n\r\n if (deps['next']) {\r\n projectType = 'next';\r\n } else if (deps['vite'] || deps['@tailwindcss/vite']) {\r\n projectType = 'vite';\r\n } else if (deps['react-scripts']) {\r\n projectType = 'cra';\r\n }\r\n }\r\n } catch (err) {\r\n // Ignore and fallback to unknown\r\n }\r\n\r\n return {\r\n packageManager,\r\n projectType,\r\n hasSrcDir,\r\n baseDir,\r\n };\r\n}\r\n","import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nconst CN_TEMPLATE = `import { type ClassValue, clsx } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n`;\r\n\r\n/**\r\n * Ensures a directory exists.\r\n */\r\nexport function ensureDir(dirPath: string) {\r\n if (!fs.existsSync(dirPath)) {\r\n fs.mkdirSync(dirPath, { recursive: true });\r\n }\r\n}\r\n\r\n/**\r\n * Normalizes relative path for imports (using forward slashes, stripping extension).\r\n */\r\nexport function getRelativeImportPath(fromDir: string, toFile: string): string {\r\n let relativePath = path.relative(fromDir, toFile);\r\n \r\n // Replace Windows backslashes with forward slashes\r\n relativePath = relativePath.replace(/\\\\/g, '/');\r\n \r\n // Remove file extension\r\n relativePath = relativePath.replace(/\\.(ts|tsx|js|jsx)$/, '');\r\n \r\n // Ensure it starts with \"./\" or \"../\"\r\n if (!relativePath.startsWith('.')) {\r\n relativePath = './' + relativePath;\r\n }\r\n \r\n return relativePath;\r\n}\r\n\r\n/**\r\n * Checks if cn utility exists, writes it if it doesn't.\r\n */\r\nexport function ensureCnUtil(utilsPath: string): boolean {\r\n const dir = path.dirname(utilsPath);\r\n ensureDir(dir);\r\n \r\n if (!fs.existsSync(utilsPath)) {\r\n fs.writeFileSync(utilsPath, CN_TEMPLATE, 'utf8');\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Copies a component template file to target directory, rewriting its cn import.\r\n */\r\nexport function copyComponentFile(\r\n content: string,\r\n targetFilePath: string,\r\n utilsFilePath: string\r\n) {\r\n const targetDir = path.dirname(targetFilePath);\r\n ensureDir(targetDir);\r\n \r\n // Compute relative path from target component to utils\r\n const relativeImport = getRelativeImportPath(targetDir, utilsFilePath);\r\n \r\n // Rewrite the import path in the template code\r\n // Handles import { cn } from \"../utils/cn\" or import { cn } from '../utils/cn'\r\n const rewrittenContent = content.replace(\r\n /['\"]\\.\\.\\/utils\\/cn['\"]/g,\r\n `\"${relativeImport}\"`\r\n );\r\n \r\n fs.writeFileSync(targetFilePath, rewrittenContent, 'utf8');\r\n}\r\n","export const button = {\n name: \"button\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\",\n \"lucide-react\"\n],\n \n fileName: \"button.tsx\",\n content: `'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport { Loader2 } from 'lucide-react';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-medium ring-offset-background 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 active:scale-95\",\n {\n variants: {\n variant: {\n default: \"bg-gradient-to-br from-primary to-primary/80 text-primary-foreground shadow-lg shadow-primary/10 hover:shadow-xl hover:shadow-primary/20\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-border/50\",\n destructive: \"bg-gradient-to-br from-destructive to-destructive/80 text-destructive-foreground shadow-lg shadow-destructive/10 hover:shadow-xl hover:shadow-destructive/20\",\n outline: \"border-2 border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n // Premium variants\n premium: \"bg-gradient-to-r from-violet-600 via-pink-600 to-orange-500 text-white shadow-lg shadow-purple-500/20 hover:shadow-xl hover:shadow-purple-500/30\",\n neon: \"bg-background border-2 border-primary text-foreground shadow-[0_0_15px_rgba(var(--primary-rgb),0.3)] hover:shadow-[0_0_25px_rgba(var(--primary-rgb),0.5)]\",\n glass: \"backdrop-blur-md bg-white/10 dark:bg-black/20 border border-white/20 dark:border-white/10 text-foreground hover:bg-white/20 dark:hover:bg-black/30 shadow-lg\",\n shimmer: \"relative overflow-hidden bg-slate-900 text-white dark:bg-white dark:text-black\",\n // New requested variants\n gradient: \"bg-gradient-to-r from-indigo-500 via-purple-500 to-violet-600 text-white shadow-lg shadow-indigo-500/20 hover:shadow-xl hover:shadow-indigo-500/30 hover:opacity-95\",\n glow: \"bg-primary text-primary-foreground shadow-[0_0_12px_rgba(var(--primary-rgb),0.3)] hover:shadow-[0_0_24px_rgba(var(--primary-rgb),0.6)] border border-primary/20\",\n magnetic: \"bg-gradient-to-br from-violet-600 to-indigo-600 text-white shadow-md hover:shadow-lg\",\n loading: \"bg-primary/80 text-primary-foreground/80 pointer-events-none cursor-wait\",\n },\n size: {\n default: \"h-10 px-5 py-2\",\n sm: \"h-9 rounded-lg px-3 text-xs\",\n lg: \"h-11 rounded-xl px-8 text-base\",\n icon: \"h-10 w-10 rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n/**\n * Props for the Button component\n */\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** \n * Enable hover/tap spring motion animation\n * @default true \n */\n animate?: boolean;\n /** \n * Enable shimmer light animation effect\n * @default false\n */\n shimmer?: boolean;\n /** \n * Enable neon glow effect\n * @default false\n */\n glow?: boolean;\n /** \n * Display loading spinner icon and disable actions\n * @default false\n */\n isLoading?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n animate = true,\n shimmer = false,\n glow = false,\n isLoading = false,\n children,\n ...props\n },\n ref\n ) => {\n const isShimmer = variant === 'shimmer' || shimmer;\n const isMagnetic = variant === 'magnetic';\n const isGlow = variant === 'glow' || glow;\n\n // Track mouse coords for magnetic hover movement\n const [magneticPos, setMagneticPos] = React.useState({ x: 0, y: 0 });\n\n const handleMouseMove = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!isMagnetic) return;\n const { clientX, clientY, currentTarget } = e;\n const { left, top, width, height } = currentTarget.getBoundingClientRect();\n const x = clientX - (left + width / 2);\n const y = clientY - (top + height / 2);\n // spring weight multiplier\n setMagneticPos({ x: x * 0.35, y: y * 0.35 });\n };\n\n const handleMouseLeave = () => {\n if (!isMagnetic) return;\n setMagneticPos({ x: 0, y: 0 });\n };\n\n const buttonContent = (\n <>\n {isShimmer && (\n <motion.div\n className=\"absolute inset-0 w-[200%] bg-gradient-to-r from-transparent via-white/20 to-transparent\"\n initial={{ x: '-100%' }}\n animate={{ x: '100%' }}\n transition={{\n repeat: Infinity,\n repeatType: 'loop',\n duration: 2,\n ease: 'linear',\n }}\n style={{ transform: 'skewX(-20deg)' }}\n />\n )}\n <span className=\"relative z-10 flex items-center justify-center gap-2\">\n {isLoading && <Loader2 className=\"animate-spin h-4 w-4 shrink-0\" />}\n {children}\n </span>\n </>\n );\n\n const activeVariant = isLoading ? \"loading\" : variant;\n\n // Disable button if loading\n const disabledState = props.disabled || isLoading;\n\n // Destructure custom props to avoid passing invalid props down to HTML element\n const { ...htmlProps } = props;\n\n // Setup base styles\n const resolvedClassName = cn(\n buttonVariants({ variant: activeVariant, size, className }),\n isShimmer && \"relative overflow-hidden\",\n isGlow && \"shadow-[0_0_15px_rgba(var(--primary-rgb),0.4)]\"\n );\n\n if (!animate) {\n return (\n <button\n ref={ref}\n disabled={disabledState}\n className={resolvedClassName}\n {...(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {buttonContent}\n </button>\n );\n }\n\n return (\n <motion.button\n ref={ref}\n disabled={disabledState}\n className={resolvedClassName}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n animate={isMagnetic ? { x: magneticPos.x, y: magneticPos.y } : undefined}\n whileHover={{\n scale: isMagnetic ? 1.02 : 1.03,\n y: isMagnetic ? 0 : -1.5,\n shadow: isGlow ? \"0 0 25px rgba(var(--primary-rgb), 0.7)\" : undefined,\n }}\n whileTap={{ scale: 0.97 }}\n transition={{\n type: \"spring\",\n stiffness: 350,\n damping: 20,\n }}\n {...(htmlProps as any)}\n >\n {buttonContent}\n </motion.button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n\n// ----------------------------------------------------\n// Merged button components for backward compatibility\n// ----------------------------------------------------\n\nexport const NeonButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"neon\" glow={true} {...props}>\n {children}\n </Button>\n )\n);\nNeonButton.displayName = \"NeonButton\";\n\nexport const ThreeDButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, className, ...props }, ref) => (\n <Button\n ref={ref}\n className={cn(\n \"shadow-[0_5px_0_hsl(var(--primary-dark,240_5.9%_30%))] hover:shadow-[0_2px_0_hsl(var(--primary-dark,240_5.9%_30%))] active:translate-y-[3px] active:shadow-[0_0px_0_transparent] transition-all\",\n className\n )}\n {...props}\n >\n {children}\n </Button>\n )\n);\nThreeDButton.displayName = \"ThreeDButton\";\n\nexport const RippleButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, className, ...props }, ref) => (\n <Button\n ref={ref}\n className={cn(\n \"relative overflow-hidden group active:scale-95 transition-transform\",\n className\n )}\n {...props}\n >\n <span className=\"absolute inset-0 bg-white/20 scale-0 rounded-full group-active:scale-[2] transition-transform duration-500 origin-center\"></span>\n <span className=\"relative z-10\">{children}</span>\n </Button>\n )\n);\nRippleButton.displayName = \"RippleButton\";\n\nexport const CyberpunkButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, className, ...props }, ref) => (\n <Button\n ref={ref}\n className={cn(\n \"bg-yellow-400 text-black font-extrabold uppercase tracking-widest border-2 border-black hover:bg-black hover:text-yellow-400 hover:border-yellow-400 transition-colors shadow-[4px_4px_0_0_#000] rounded-none hover:shadow-[4px_4px_0_0_#fff]\",\n className\n )}\n {...props}\n >\n {children}\n </Button>\n )\n);\nCyberpunkButton.displayName = \"CyberpunkButton\";\n\nexport const MagneticButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"magnetic\" {...props}>\n {children}\n </Button>\n )\n);\nMagneticButton.displayName = \"MagneticButton\";\n\nexport const ShimmerButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"shimmer\" shimmer={true} {...props}>\n {children}\n </Button>\n )\n);\nShimmerButton.displayName = \"ShimmerButton\";\n\nexport const BorderBeamButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, className, ...props }, ref) => (\n <Button\n ref={ref}\n variant=\"outline\"\n className={cn(\n \"relative overflow-hidden border border-border group\",\n className\n )}\n {...props}\n >\n <div className=\"absolute inset-0 bg-gradient-to-r from-primary to-transparent opacity-0 group-hover:opacity-20 transition-opacity\"></div>\n <div className=\"absolute top-0 left-0 w-full h-[2px] bg-primary scale-x-0 group-hover:scale-x-100 transition-transform origin-left\"></div>\n <span className=\"relative z-10\">{children}</span>\n </Button>\n )\n);\nBorderBeamButton.displayName = \"BorderBeamButton\";\n\nexport const LoadingButton = React.forwardRef<HTMLButtonElement, ButtonProps & { isLoading?: boolean }>(\n ({ children, isLoading = true, ...props }, ref) => (\n <Button ref={ref} isLoading={isLoading} {...props}>\n {children}\n </Button>\n )\n);\nLoadingButton.displayName = \"LoadingButton\";\n\nexport const DestructiveGlowButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"destructive\" glow={true} {...props}>\n {children}\n </Button>\n )\n);\nDestructiveGlowButton.displayName = \"DestructiveGlowButton\";\n\nexport const GhostOutlineButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"outline\" {...props}>\n {children}\n </Button>\n )\n);\nGhostOutlineButton.displayName = \"GhostOutlineButton\";\n\nexport const GlowButton = React.forwardRef<HTMLButtonElement, ButtonProps & { glowColor?: string }>(\n ({ children, glowColor = \"rgba(139, 92, 246, 0.15)\", className, ...props }, ref) => (\n <div className=\"relative group inline-block\">\n <div\n className=\"absolute -inset-0.5 bg-gradient-to-r from-primary to-purple-600 rounded-lg blur opacity-75 group-hover:opacity-100 transition duration-1000 group-hover:duration-200\"\n style={{ backgroundColor: glowColor }}\n />\n <Button ref={ref} className={cn(\"relative bg-background\", className)} {...props}>\n {children}\n </Button>\n </div>\n )\n);\nGlowButton.displayName = \"GlowButton\";\n\nexport const ShinyButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} shimmer={true} {...props}>\n {children}\n </Button>\n )\n);\nShinyButton.displayName = \"ShinyButton\";\n\nexport const GradientButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"gradient\" {...props}>\n {children}\n </Button>\n )\n);\nGradientButton.displayName = \"GradientButton\";\n\nexport const GlassButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button ref={ref} variant=\"glass\" {...props}>\n {children}\n </Button>\n )\n);\nGlassButton.displayName = \"GlassButton\";\n\n`\n};\n","export const modal = {\n name: \"modal\",\n dependencies: [\n \"@radix-ui/react-dialog\",\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"lucide-react\",\n \"framer-motion\"\n],\n componentsDependencies: [\n \"button\"\n],\n fileName: \"modal.tsx\",\n content: `\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X, AlertTriangle, CheckCircle, Star } from \"lucide-react\"\nimport { cn } from \"../utils/cn\"\nimport { Button } from \"./button\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border/50 bg-background/95 backdrop-blur-md p-6 shadow-2xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:scale-95 data-[state=open]:scale-100 data-[state=closed]:translate-y-[-48%] data-[state=open]:translate-y-[-50%] rounded-2xl\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-full p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-xl font-semibold leading-none tracking-tight bg-gradient-to-br from-foreground to-foreground/70 bg-clip-text text-transparent\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n\nexport interface ModalProps {\n /**\n * The title of the modal\n */\n title?: React.ReactNode;\n /**\n * The description of the modal\n */\n description?: React.ReactNode;\n /**\n * The content of the modal\n */\n children?: React.ReactNode;\n /**\n * The trigger element to open the modal\n */\n trigger?: React.ReactNode;\n /**\n * Callback function called when the confirm button is clicked\n */\n onConfirm?: () => void;\n /**\n * Callback function called when the cancel button is clicked\n */\n onCancel?: () => void;\n /**\n * The text for the confirm button\n * @default \"Confirm\"\n */\n confirmText?: string;\n /**\n * The text for the cancel button\n * @default \"Cancel\"\n */\n cancelText?: string;\n /**\n * Whether the modal is open\n */\n isOpen?: boolean;\n /**\n * Callback function called when the open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The variant of the modal\n * @default \"default\"\n */\n variant?: \"default\" | \"glass\" | \"destructive\" | \"success\" | \"fullscreen\" | \"drawer\";\n /**\n * Whether the content is scrollable\n * @default false\n */\n scrollable?: boolean;\n /**\n * Additional className for the dialog content\n */\n className?: string;\n}\n\nexport function Modal({\n title,\n description,\n children,\n trigger,\n onConfirm,\n onCancel,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n isOpen,\n onOpenChange,\n variant = \"default\",\n scrollable = false,\n className,\n}: ModalProps) {\n const variantClasses = {\n default: \"\",\n glass: \"bg-white/10 backdrop-blur-xl border-white/20 shadow-2xl\",\n destructive: \"border-destructive/20\",\n success: \"border-green-500/20\",\n fullscreen: \"max-w-full h-screen rounded-none\",\n drawer: \"sm:max-w-full sm:h-[50vh] sm:rounded-b-none sm:rounded-t-[20px] fixed bottom-0 top-auto translate-y-0\",\n }\n\n const isDestructive = variant === \"destructive\";\n const isSuccess = variant === \"success\";\n\n return (\n <Dialog open={isOpen} onOpenChange={onOpenChange}>\n {trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}\n <DialogContent className={cn(variantClasses[variant], scrollable ? \"max-h-[80vh] overflow-y-auto\" : \"\", className)}>\n {(title || description || isDestructive || isSuccess) && (\n <DialogHeader className={cn((isDestructive || isSuccess) ? \"flex flex-col items-center text-center sm:text-center\" : \"\")}>\n {isDestructive && (\n <div className=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-destructive/10 mb-4\">\n <AlertTriangle className=\"h-6 w-6 text-destructive\" />\n </div>\n )}\n {isSuccess && (\n <div className=\"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-500/10 mb-4\">\n <CheckCircle className=\"h-6 w-6 text-green-500\" />\n </div>\n )}\n {title && <DialogTitle className={cn((isDestructive || isSuccess) ? \"text-xl\" : \"\")}>{title}</DialogTitle>}\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n )}\n <div className=\"py-4\">{children}</div>\n {(onConfirm || onCancel || isDestructive || isSuccess) && (\n <DialogFooter className={cn((isDestructive || isSuccess) ? \"sm:justify-center flex-col sm:flex-row gap-2\" : \"\")}>\n {onCancel && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\" className={cn((isDestructive || isSuccess) ? \"w-full sm:w-auto\" : \"\")} onClick={onCancel}>{cancelText}</Button>\n </DialogPrimitive.Close>\n )}\n {onConfirm && (\n <Button \n variant={isDestructive ? \"destructive\" : \"default\"} \n className={cn((isDestructive || isSuccess) ? \"w-full sm:w-auto\" : \"\", isSuccess ? \"bg-green-500 hover:bg-green-600\" : \"\")} \n onClick={onConfirm}\n >\n {confirmText}\n </Button>\n )}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\n// ============================================\n// Backward compatibility wrappers & variants\n// ============================================\n\nexport interface BasicModalProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n title?: string;\n description?: string;\n children?: React.ReactNode;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n className?: string;\n}\n\nexport const BasicModal = ({\n isOpen,\n onOpenChange,\n trigger,\n title = \"Basic Modal\",\n description = \"This is a simple modal dialog that can be used for various purposes.\",\n children,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n onConfirm,\n onCancel,\n className = \"\"\n}: BasicModalProps) => {\n return (\n <Modal\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n trigger={trigger}\n title={title}\n description={description}\n confirmText={confirmText}\n cancelText={cancelText}\n onConfirm={onConfirm}\n onCancel={onCancel}\n className={className}\n variant=\"default\"\n >\n {children}\n </Modal>\n )\n}\n\nexport interface InteractiveGlassModalProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n icon?: React.ReactNode;\n title?: string;\n description?: string;\n children?: React.ReactNode;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n className?: string;\n}\n\nexport const InteractiveGlassModal = ({\n isOpen,\n onOpenChange,\n trigger,\n icon = <Star className=\"w-6 h-6 text-yellow-300\" />,\n title = \"Premium Glass Effect\",\n description = \"This modal uses full glassmorphism for a stunning visual effect.\",\n children,\n confirmText = \"Upgrade Now\",\n cancelText = \"Maybe Later\",\n onConfirm,\n onCancel,\n className = \"\"\n}: InteractiveGlassModalProps) => {\n return (\n <Modal\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n trigger={trigger}\n title={<span className=\"flex items-center gap-2\">{icon} {title}</span>}\n description={description}\n confirmText={confirmText}\n cancelText={cancelText}\n onConfirm={onConfirm}\n onCancel={onCancel}\n className={className}\n variant=\"glass\"\n >\n {children}\n </Modal>\n )\n}\n\nexport interface DangerModalProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n icon?: React.ReactNode;\n title?: string;\n description?: string;\n children?: React.ReactNode;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n className?: string;\n}\n\nexport const DangerModal = ({\n isOpen,\n onOpenChange,\n trigger,\n icon = <X className=\"w-8 h-8\" />,\n title = \"Are you absolutely sure?\",\n description = \"This action cannot be undone. This will permanently delete your account and remove your data from our servers.\",\n children,\n confirmText = \"Delete\",\n cancelText = \"Cancel\",\n onConfirm,\n onCancel,\n className = \"\"\n}: DangerModalProps) => {\n return (\n <Modal\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n trigger={trigger}\n title={title}\n description={description}\n confirmText={confirmText}\n cancelText={cancelText}\n onConfirm={onConfirm}\n onCancel={onCancel}\n className={className}\n variant=\"destructive\"\n >\n {children}\n </Modal>\n )\n}\n\nexport interface GlassModalProps {\n trigger?: React.ReactNode\n title?: React.ReactNode\n description?: React.ReactNode\n children?: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport function GlassModal({ trigger, title = \"Glass Modal\", description, children, open, onOpenChange }: GlassModalProps) {\n return (\n <Modal\n isOpen={open}\n onOpenChange={onOpenChange}\n trigger={trigger}\n title={title}\n description={description}\n variant=\"glass\"\n >\n {children}\n </Modal>\n )\n}\n\nexport interface AlertModalProps {\n trigger?: React.ReactNode\n title?: string\n description?: string\n onConfirm?: () => void\n onCancel?: () => void\n confirmText?: string\n cancelText?: string\n children?: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport function AlertModal({ \n trigger, \n title = \"Are you absolutely sure?\", \n description, \n onConfirm, \n onCancel,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n children, \n open, \n onOpenChange \n}: AlertModalProps) {\n return (\n <Modal\n isOpen={open}\n onOpenChange={onOpenChange}\n trigger={trigger}\n title={title}\n description={description}\n confirmText={confirmText}\n cancelText={cancelText}\n onConfirm={onConfirm}\n onCancel={onCancel}\n variant=\"destructive\"\n >\n {children}\n </Modal>\n )\n}\n\nexport interface SuccessModalProps {\n trigger?: React.ReactNode\n title?: string\n description?: string\n children?: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n confirmText?: string\n onConfirm?: () => void\n}\n\nexport function SuccessModal({ \n trigger, \n title = \"Success!\", \n description, \n children, \n open, \n onOpenChange,\n confirmText = \"Awesome\",\n onConfirm\n}: SuccessModalProps) {\n return (\n <Modal\n isOpen={open}\n onOpenChange={onOpenChange}\n trigger={trigger}\n title={title}\n description={description}\n confirmText={confirmText}\n onConfirm={onConfirm}\n variant=\"success\"\n >\n {children}\n </Modal>\n )\n}\n\nexport interface CommandPaletteModalProps {\n trigger: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport function CommandPaletteModal({ trigger, open, onOpenChange }: CommandPaletteModalProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>{trigger}</DialogTrigger>\n <DialogContent className=\"p-0 overflow-hidden sm:max-w-[600px] gap-0\">\n <div className=\"flex items-center border-b px-3\">\n <svg className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line></svg>\n <input className=\"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\" placeholder=\"Type a command or search...\" />\n </div>\n <div className=\"max-h-[300px] overflow-y-auto p-2\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">Suggestions</div>\n <div className=\"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground hover:bg-accent/50\">\n Calendar\n </div>\n <div className=\"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground hover:bg-accent/50\">\n Search Emoji\n </div>\n <div className=\"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground hover:bg-accent/50\">\n Calculator\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nexport interface BottomSheetSimulatedProps {\n trigger: React.ReactNode\n children?: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport function BottomSheetSimulated({ trigger, children, open, onOpenChange }: BottomSheetSimulatedProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>{trigger}</DialogTrigger>\n <DialogContent className=\"sm:max-w-full sm:h-[50vh] sm:rounded-b-none sm:rounded-t-[10px] fixed bottom-0 top-auto translate-y-0 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\">\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n`\n};\n","export const card = {\n name: \"card\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\",\n \"lucide-react\"\n],\n \n fileName: \"card.tsx\",\n content: `'use client';\n\nimport * as React from \"react\"\nimport { cn } from \"../utils/cn\"\nimport { motion, useMotionValue, useSpring, useTransform, HTMLMotionProps } from \"framer-motion\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Heart, Share2, MapPin, Star } from \"lucide-react\"\n\nconst cardVariants = cva(\n \"rounded-2xl text-card-foreground transition-all duration-300 overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border bg-card text-card-foreground shadow-sm hover:shadow-md\",\n glass: \"backdrop-blur-md bg-white/10 dark:bg-black/20 border border-white/20 dark:border-white/10 shadow-lg\",\n gradient: \"bg-gradient-to-br from-violet-500/10 via-pink-500/10 to-orange-500/10 border border-purple-500/20 shadow-lg shadow-purple-500/5\",\n glow: \"bg-card border-2 border-primary/20 shadow-[0_0_15px_rgba(var(--primary-rgb),0.1)] hover:shadow-[0_0_25px_rgba(var(--primary-rgb),0.2)]\",\n // New variants\n bento: \"border border-border/60 bg-gradient-to-br from-card to-muted/20 text-card-foreground shadow-md hover:shadow-lg hover:border-primary/30 relative\",\n spotlight: \"border bg-card text-card-foreground relative hover:border-primary/20\",\n flip: \"bg-transparent border-0 shadow-none overflow-visible relative\",\n tilt: \"border bg-card text-card-foreground shadow-md\",\n },\n hover: {\n none: \"\",\n lift: \"hover:-translate-y-1.5 hover:shadow-lg\",\n glow: \"hover:border-primary/50 hover:shadow-[0_0_25px_rgba(var(--primary-rgb),0.25)]\",\n }\n },\n defaultVariants: {\n variant: \"default\",\n hover: \"lift\",\n }\n }\n)\n\n/**\n * Props for the Card component\n */\nexport interface CardProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>,\n VariantProps<typeof cardVariants> {\n /**\n * Whether to enable hover spring animations\n * @default true\n */\n animate?: boolean;\n /**\n * The main title of the card\n */\n title?: React.ReactNode;\n /**\n * The subtitle or description of the card\n */\n description?: React.ReactNode;\n /**\n * Content to render in the card footer area\n */\n footer?: React.ReactNode;\n /**\n * An optional image URL to display at the top of the card\n */\n image?: string;\n /**\n * HTML alternative text for the image\n */\n imageAlt?: string;\n /**\n * Back content displayed when using the \\`flip\\` variant on hover\n */\n backContent?: React.ReactNode;\n /**\n * Custom radial spotlight background color (e.g., rgba(168, 85, 247, 0.15))\n * @default \"rgba(139, 92, 246, 0.15)\"\n */\n spotlightColor?: string;\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n className,\n variant,\n hover,\n animate = true,\n title,\n description,\n footer,\n image,\n imageAlt,\n backContent,\n spotlightColor = \"rgba(139, 92, 246, 0.15)\",\n children,\n ...props\n },\n ref\n ) => {\n const isCompound = !title && !description && !footer && !image;\n \n // Feature toggles based on variants\n const isSpotlight = variant === \"spotlight\";\n const isFlip = variant === \"flip\";\n const isTilt = variant === \"tilt\";\n\n // Spotlight mouse tracking state\n const [mousePos, setMousePos] = React.useState({ x: 0, y: 0 });\n const handleMouseMoveSpotlight = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isSpotlight) return;\n const { currentTarget, clientX, clientY } = e;\n const { left, top } = currentTarget.getBoundingClientRect();\n setMousePos({ x: clientX - left, y: clientY - top });\n };\n\n // Tilt mouse tracking state\n const [tiltPos, setTiltPos] = React.useState({ rotateX: 0, rotateY: 0 });\n const handleMouseMoveTilt = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isTilt) return;\n const { currentTarget, clientX, clientY } = e;\n const { left, top, width, height } = currentTarget.getBoundingClientRect();\n const x = clientX - left;\n const y = clientY - top;\n const maxTilt = 12; // degrees max rotation\n const rotateX = ((y - height / 2) / (height / 2)) * -maxTilt;\n const rotateY = ((x - width / 2) / (width / 2)) * maxTilt;\n setTiltPos({ rotateX, rotateY });\n };\n\n const handleMouseLeaveTilt = () => {\n if (!isTilt) return;\n setTiltPos({ rotateX: 0, rotateY: 0 });\n };\n\n // Flip card hover state\n const [isFlipped, setIsFlipped] = React.useState(false);\n\n const baseContent = isCompound ? (\n children\n ) : (\n <>\n {image && (\n <div className=\"relative w-full h-48 overflow-hidden rounded-t-2xl\">\n <img src={image} alt={imageAlt || (typeof title === 'string' ? title : 'Card image')} className=\"object-cover w-full h-full transition-transform duration-300 hover:scale-105\" />\n </div>\n )}\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n {children && <CardContent>{children as React.ReactNode}</CardContent>}\n {footer && <CardFooter>{footer}</CardFooter>}\n </>\n );\n\n // Destructure custom props to avoid DOM validation warnings\n const { ...htmlProps } = props;\n\n // Flip Variant Render\n if (isFlip) {\n return (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, hover, className }), \"perspective-1000 w-full h-full\")}\n onMouseEnter={() => setIsFlipped(true)}\n onMouseLeave={() => setIsFlipped(false)}\n {...(htmlProps as React.HTMLAttributes<HTMLDivElement>)}\n >\n <motion.div\n className=\"relative w-full h-full transition-all duration-500 preserve-3d\"\n animate={{ rotateY: isFlipped ? 180 : 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 22 }}\n >\n {/* Front Face */}\n <div className=\"absolute inset-0 backface-hidden border bg-card text-card-foreground rounded-2xl shadow-sm flex flex-col justify-between overflow-hidden\">\n {baseContent}\n </div>\n\n {/* Back Face */}\n <div className=\"absolute inset-0 backface-hidden rotate-y-180 border bg-gradient-to-br from-primary/10 to-primary/5 text-card-foreground rounded-2xl shadow-sm flex flex-col p-6 items-center justify-center text-center overflow-hidden\">\n {backContent || (\n <div className=\"text-sm font-medium text-muted-foreground\">\n Flip side content placeholder\n </div>\n )}\n </div>\n </motion.div>\n </div>\n );\n }\n\n // Spotlight Variant Render Extra Element\n const spotlightEffect = isSpotlight && (\n <div\n className=\"pointer-events-none absolute -inset-px rounded-2xl opacity-0 hover:opacity-100 group-hover:opacity-100 transition-opacity duration-300\"\n style={{\n background: \\`radial-gradient(400px circle at \\${mousePos.x}px \\${mousePos.y}px, \\${spotlightColor}, transparent 80%)\\`,\n }}\n />\n );\n\n // Build the resolved element attributes\n const cardClass = cn(cardVariants({ variant, hover: isFlip || isTilt ? \"none\" : hover, className }), isSpotlight && \"group\");\n\n if (animate || isTilt) {\n return (\n <motion.div\n ref={ref}\n className={cardClass}\n onMouseMove={(e) => {\n if (isSpotlight) handleMouseMoveSpotlight(e);\n if (isTilt) handleMouseMoveTilt(e);\n }}\n onMouseLeave={() => {\n if (isTilt) handleMouseLeaveTilt();\n }}\n animate={\n isTilt\n ? { rotateX: tiltPos.rotateX, rotateY: tiltPos.rotateY }\n : undefined\n }\n whileHover={isTilt ? undefined : { scale: 1.015 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 20 }}\n {...(htmlProps as any)}\n >\n {spotlightEffect}\n {baseContent}\n </motion.div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cardClass}\n {...(htmlProps as React.HTMLAttributes<HTMLDivElement>)}\n >\n {baseContent}\n </div>\n );\n }\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight text-xl bg-gradient-to-br from-foreground to-foreground/75 bg-clip-text text-transparent\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed mt-1\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0 leading-relaxed text-sm text-foreground/90\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0 border-t border-border/10 mt-auto\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n\nexport const GlassCard = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => (\n <Card ref={ref} variant=\"glass\" {...props}>\n {children}\n </Card>\n )\n);\nGlassCard.displayName = \"GlassCard\";\n\nexport const GlowCard = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => (\n <Card ref={ref} variant=\"glow\" {...props}>\n {children}\n </Card>\n )\n);\nGlowCard.displayName = \"GlowCard\";\n\nexport const GradientCard = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => (\n <Card ref={ref} variant=\"gradient\" {...props}>\n {children}\n </Card>\n )\n);\nGradientCard.displayName = \"GradientCard\";\n\nexport const HoverCard = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => (\n <Card ref={ref} hover=\"lift\" {...props}>\n {children}\n </Card>\n )\n);\nHoverCard.displayName = \"HoverCard\";\n\nexport const SpotlightCard = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => (\n <Card ref={ref} variant=\"spotlight\" {...props}>\n {children}\n </Card>\n )\n);\nSpotlightCard.displayName = \"SpotlightCard\";\n\n// ============================================\n// Consolidated Legacy/Special Cards for Compatibility\n// ============================================\n\nexport const ImageCard = ({ src, title, subtitle, imageUrl, description }: any) => {\n const finalSrc = src || imageUrl;\n const finalTitle = title;\n const finalSubtitle = subtitle || description;\n return (\n <div className=\"group relative overflow-hidden rounded-xl border bg-card text-card-foreground\">\n <div className=\"aspect-[4/3] w-full bg-muted overflow-hidden\">\n {finalSrc ? (\n <img\n src={finalSrc}\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500\"\n alt={typeof finalTitle === \"string\" ? finalTitle : \"Image\"}\n />\n ) : (\n <div className=\"w-full h-full bg-muted-foreground/20\" />\n )}\n </div>\n <div className=\"p-4\">\n <h3 className=\"font-semibold text-lg\">{finalTitle}</h3>\n <p className=\"text-sm text-muted-foreground\">{finalSubtitle}</p>\n </div>\n </div>\n );\n};\n\nexport const ProfileCard = ({ name, role, avatar }: any) => (\n <div className=\"flex flex-col items-center p-6 text-center rounded-xl border bg-card shadow-sm\">\n <div className=\"w-24 h-24 rounded-full bg-muted mb-4 overflow-hidden border-4 border-background shadow-md\">\n {avatar && <img src={avatar} className=\"w-full h-full object-cover\" alt={name} />}\n </div>\n <h3 className=\"text-xl font-bold\">{name}</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">{role}</p>\n <button className=\"px-6 py-2 bg-primary text-primary-foreground rounded-full font-medium w-full hover:bg-primary/90 transition-colors\">Follow</button>\n </div>\n)\n\nexport const ProductCard = ({ title, price, category, src }: any) => (\n <div className=\"rounded-xl border bg-card p-4 flex flex-col gap-3 group\">\n <div className=\"aspect-square w-full rounded-lg bg-muted overflow-hidden relative\">\n {src && <img src={src} className=\"w-full h-full object-cover\" alt={title} />}\n <button className=\"absolute top-2 right-2 p-2 bg-background/50 backdrop-blur rounded-full hover:bg-background transition-colors\"><Heart className=\"w-4 h-4\" /></button>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground mb-1\">{category}</p>\n <h3 className=\"font-medium truncate\">{title}</h3>\n <p className=\"font-bold text-lg mt-1\">\\${price}</p>\n </div>\n </div>\n)\n\nexport const ArticleCard = ({ title, excerpt, date }: any) => (\n <div className=\"p-6 rounded-xl border bg-card flex flex-col gap-4 hover:shadow-md transition-shadow cursor-pointer\">\n <span className=\"text-xs font-medium text-primary\">{date}</span>\n <h3 className=\"text-xl font-bold leading-tight\">{title}</h3>\n <p className=\"text-muted-foreground line-clamp-3\">{excerpt}</p>\n <div className=\"mt-auto pt-4 border-t flex items-center justify-between text-sm\">\n <span className=\"font-medium\">Read more →</span>\n <button><Share2 className=\"w-4 h-4 text-muted-foreground hover:text-foreground\" /></button>\n </div>\n </div>\n)\n\nexport const StatCardSimple = ({ label, value, trend }: any) => (\n <div className=\"p-5 rounded-xl border bg-card\">\n <p className=\"text-sm font-medium text-muted-foreground mb-2\">{label}</p>\n <div className=\"flex items-end justify-between\">\n <h4 className=\"text-3xl font-bold\">{value}</h4>\n <span className={\\`text-sm font-medium \\${trend?.startsWith('+') ? 'text-green-500' : 'text-red-500'}\\`}>{trend}</span>\n </div>\n </div>\n)\n\nexport const PricingCardBasic = ({ name, price, features }: any) => (\n <div className=\"p-6 rounded-xl border bg-card flex flex-col items-center text-center\">\n <h3 className=\"text-xl font-medium mb-2\">{name}</h3>\n <div className=\"mb-6\"><span className=\"text-4xl font-bold\">\\${price}</span><span className=\"text-muted-foreground\">/mo</span></div>\n <ul className=\"space-y-3 w-full mb-8 text-sm\">\n {features?.map((f: string, i: number) => <li key={i} className=\"text-muted-foreground border-b pb-2 last:border-0\">{f}</li>)}\n </ul>\n <button className=\"w-full py-2 bg-primary text-primary-foreground rounded-lg font-medium mt-auto\">Subscribe</button>\n </div>\n)\n\nexport const WeatherCard = ({ city, temp, condition }: any) => (\n <div className=\"p-6 rounded-xl border bg-gradient-to-br from-blue-500 to-cyan-400 text-white shadow-lg\">\n <div className=\"flex justify-between items-start mb-8\">\n <div>\n <h3 className=\"text-2xl font-bold\">{city}</h3>\n <p className=\"opacity-80\">{condition}</p>\n </div>\n <div className=\"text-5xl font-light\">{temp}°</div>\n </div>\n <div className=\"flex gap-4 opacity-90 text-sm\">\n <span>H: {temp + 4}°</span>\n <span>L: {temp - 3}°</span>\n </div>\n </div>\n)\n\nexport const EventCard = ({ title, date, location }: any) => (\n <div className=\"flex p-4 rounded-xl border bg-card gap-4\">\n <div className=\"flex flex-col items-center justify-center bg-primary/10 text-primary rounded-lg px-4 py-2 min-w-[70px]\">\n <span className=\"text-xs uppercase font-bold\">{date?.split(' ')[0]}</span>\n <span className=\"text-2xl font-black\">{date?.split(' ')[1]}</span>\n </div>\n <div className=\"flex flex-col justify-center\">\n <h3 className=\"font-bold text-lg leading-tight mb-1\">{title}</h3>\n <div className=\"flex items-center text-sm text-muted-foreground gap-1\">\n <MapPin className=\"w-3 h-3\" /> {location}\n </div>\n </div>\n </div>\n)\n\nexport const TestimonialCardBasic = ({ text, author }: any) => (\n <div className=\"p-6 rounded-xl border bg-muted/30 italic relative\">\n <span className=\"absolute top-4 left-4 text-4xl text-primary/20 font-serif\">\"</span>\n <p className=\"relative z-10 text-muted-foreground mb-4 pt-4\">{text}</p>\n <div className=\"flex items-center gap-2\">\n <div className=\"w-8 h-8 rounded-full bg-primary/20\" />\n <span className=\"font-semibold text-sm not-italic\">{author}</span>\n </div>\n </div>\n)\n\nexport const InteractiveCard = ({ title, description }: any) => (\n <div className=\"group p-6 rounded-xl border bg-card hover:bg-primary hover:text-primary-foreground transition-all duration-300 cursor-pointer\">\n <div className=\"w-12 h-12 rounded-lg bg-primary/10 text-primary group-hover:bg-primary-foreground/20 group-hover:text-primary-foreground flex items-center justify-center mb-4 transition-colors\">\n <Star className=\"w-6 h-6\" />\n </div>\n <h3 className=\"text-xl font-bold mb-2\">{title}</h3>\n <p className=\"text-muted-foreground group-hover:text-primary-foreground/80 transition-colors\">{description}</p>\n </div>\n)\n\n\n`\n};\n","export const alert = {\n name: \"alert\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\",\n \"lucide-react\"\n],\n \n fileName: \"alert.tsx\",\n content: `\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../utils/cn\"\nimport { motion, AnimatePresence } from \"framer-motion\"\nimport { AlertCircle, Info, CheckCircle2, XCircle, Cookie, BellRing, WifiOff, AlertTriangle, X } from \"lucide-react\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-2xl border p-4 [&>svg~*]:pl-7 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 transition-all duration-300 shadow-sm\",\n {\n variants: {\n variant: {\n default: \"bg-background/50 border-border text-foreground\",\n destructive: \"border-red-500/20 bg-red-500/10 text-red-600 dark:text-red-400 [&>svg]:text-red-600 dark:[&>svg]:text-red-400\",\n success: \"border-emerald-500/20 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-400\",\n warning: \"border-amber-500/20 bg-amber-500/10 text-amber-600 dark:text-amber-400 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-400\",\n info: \"border-blue-500/20 bg-blue-500/10 text-blue-600 dark:text-blue-400 [&>svg]:text-blue-600 dark:[&>svg]:text-blue-400\",\n glass: \"backdrop-blur-md bg-white/5 dark:bg-black/20 border-white/10 dark:border-white/5 text-foreground\",\n floating: \"fixed bottom-5 right-5 z-50 max-w-sm bg-card/95 backdrop-blur-md border border-border/80 text-foreground shadow-[0_10px_30px_rgba(0,0,0,0.25)] animate-slide-up\",\n minimal: \"border-0 bg-muted/40 p-3 text-sm rounded-xl text-foreground hover:bg-muted/60 shadow-none [&>svg]:top-3.5\",\n neon: \"border-purple-500/50 bg-purple-500/10 text-purple-200 shadow-[0_0_15px_rgba(168,85,247,0.3)] [&>svg]:text-purple-400\",\n cyberpunk: \"border-l-4 border-yellow-400 bg-black text-yellow-400 shadow-[4px_4px_0_0_rgba(250,204,21,1)] rounded-none font-mono uppercase [&>svg]:text-yellow-400\",\n gradient: \"bg-gradient-to-r from-blue-500/10 to-indigo-500/10 border-blue-500/20 text-foreground [&>svg]:text-blue-500\",\n banner: \"w-full bg-indigo-600 text-white border-0 shadow-md rounded-none sm:rounded-xl [&>svg]:text-white\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>,\n VariantProps<typeof alertVariants> {\n animate?: boolean;\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n actionText?: string;\n onAction?: () => void;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n variant,\n animate = true,\n title,\n description,\n icon,\n dismissible = false,\n onDismiss,\n actionText,\n onAction,\n children,\n ...props\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = React.useState(true);\n\n if (!isOpen) return null;\n\n const isMinimal = variant === \"minimal\";\n const isBanner = variant === \"banner\";\n\n const content = (\n <>\n {icon && <div className={cn(\"absolute left-4\", isMinimal ? \"top-3\" : \"top-4\")}>{icon}</div>}\n <div className={cn(icon ? \"pl-7\" : \"\", \"pr-8\")}>\n {title && <AlertTitle>{title}</AlertTitle>}\n {description && <AlertDescription>{description}</AlertDescription>}\n {!title && !description && children}\n </div>\n {isBanner && actionText && (\n <button\n onClick={onAction}\n className=\"absolute right-12 top-1/2 -translate-y-1/2 text-xs font-bold bg-white text-indigo-600 px-3 py-1.5 rounded-md hover:bg-indigo-50 transition-colors\"\n >\n {actionText}\n </button>\n )}\n {dismissible && (\n <button\n onClick={() => {\n setIsOpen(false);\n onDismiss?.();\n }}\n className=\"absolute right-4 top-4 opacity-50 hover:opacity-100 transition-opacity p-0.5 rounded-md hover:bg-muted\"\n aria-label=\"Dismiss\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </>\n );\n\n const alertClass = cn(alertVariants({ variant }), className);\n\n if (animate) {\n return (\n <motion.div\n ref={ref}\n role=\"alert\"\n initial={{ opacity: 0, y: variant === \"floating\" ? 30 : 15, scale: variant === \"floating\" ? 0.95 : 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: variant === \"floating\" ? 20 : 10, scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 350, damping: 24 }}\n className={alertClass}\n {...(props as any)}\n >\n {content}\n </motion.div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={alertClass}\n {...(props as React.HTMLAttributes<HTMLDivElement>)}\n >\n {content}\n </div>\n );\n }\n)\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-semibold leading-none tracking-tight text-base text-foreground\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed mt-1 opacity-90 [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\n// ----------------------------------------------------\n// Merged subcomponents and wrappers\n// ----------------------------------------------------\n\n// 1. ToastAlertWrapper\nexport const ToastAlertWrapper = ({ children, className, title, description, time }: any) => (\n <div className={cn(\"max-w-sm w-full bg-background border border-border/80 shadow-xl rounded-2xl p-4 flex gap-4 items-start relative\", className)}>\n <CheckCircle2 className=\"h-5 w-5 text-green-500 shrink-0 mt-0.5\" />\n <div className=\"flex-1\">\n {title && <h4 className=\"font-semibold text-sm\">{title}</h4>}\n {description && <p className=\"text-sm text-muted-foreground mt-1\">{description}</p>}\n {children}\n </div>\n {time && <span className=\"text-xs text-muted-foreground/60\">{time}</span>}\n </div>\n)\n\n// 2. CookieAlert\nexport const CookieAlert = ({ onAccept, onDecline }: { onAccept?: () => void; onDecline?: () => void }) => {\n const [visible, setVisible] = React.useState(true)\n if (!visible) return null\n return (\n <div className=\"max-w-md bg-card border rounded-2xl p-6 shadow-2xl space-y-4\">\n <div className=\"flex items-center gap-3\">\n <Cookie className=\"h-6 w-6 text-orange-500 animate-bounce\" />\n <h4 className=\"font-bold text-lg\">Cookie Preferences</h4>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n We use cookies to improve your experience. By continuing to visit this site you agree to our use of cookies.\n </p>\n <div className=\"flex gap-3 pt-2\">\n <button \n onClick={() => { setVisible(false); onAccept?.(); }}\n className=\"flex-1 px-4 py-2 bg-primary text-primary-foreground hover:bg-primary/95 transition-colors rounded-xl text-sm font-semibold shadow-md shadow-primary/10\"\n >\n Accept All\n </button>\n <button \n onClick={() => { setVisible(false); onDecline?.(); }}\n className=\"flex-1 px-4 py-2 border rounded-xl text-sm font-semibold hover:bg-muted transition-colors\"\n >\n Decline\n </button>\n </div>\n </div>\n )\n}\n\n// 3. OfflineBanner\nexport const OfflineBanner = () => (\n <div className=\"w-full bg-red-600 text-white p-3.5 flex justify-center items-center gap-2 text-sm font-semibold shadow-md sm:rounded-xl\">\n <WifiOff className=\"w-4 h-4 animate-pulse\" /> You are currently offline. Some features may be unavailable.\n </div>\n)\n\n// 4. RateLimitAlert\nexport const RateLimitAlert = () => (\n <div className=\"border border-orange-500/30 bg-orange-500/10 p-5 rounded-2xl flex gap-3 items-start max-w-md shadow-sm\">\n <AlertTriangle className=\"w-5 h-5 text-orange-500 shrink-0 mt-0.5 animate-pulse\" />\n <div className=\"flex-1\">\n <h4 className=\"font-bold text-orange-600 dark:text-orange-400\">Rate Limit Exceeded</h4>\n <p className=\"text-sm text-orange-600/80 dark:text-orange-400/80 mt-1 mb-4\">\n You have made too many requests. Please wait 45 seconds before trying again.\n </p>\n <div className=\"w-full h-1.5 bg-orange-500/20 rounded-full overflow-hidden\">\n <motion.div animate={{ width: [\"100%\", \"0%\"] }} transition={{ duration: 45, ease: \"linear\" }} className=\"h-full bg-orange-500\" />\n </div>\n </div>\n </div>\n)\n\n// Re-export original/merged components\nexport { Alert, AlertTitle, AlertDescription }\nexport const CyberAlert = ({ title, description, variant, ...props }: any) => (\n <Alert variant=\"cyberpunk\" title={title} description={description} {...props} />\n)\nexport const SoftAlert = ({ title, description, variant, ...props }: any) => (\n <Alert variant={variant === \"success\" ? \"success\" : \"info\"} title={title} description={description} {...props} />\n)\nexport const MinimalAlert = ({ title, description, variant, ...props }: any) => (\n <Alert variant=\"minimal\" title={title} description={description} {...props} />\n)\nexport const LeftBorderAlert = ({ title, description, variant, ...props }: any) => (\n <Alert variant={variant === \"warning\" ? \"warning\" : \"default\"} className=\"border-l-4 border-l-primary\" title={title} description={description} {...props} />\n)\nexport const IconTopAlert = ({ title, description, variant, ...props }: any) => (\n <div className=\"flex flex-col items-center text-center p-6 bg-card border rounded-2xl\" {...props}>\n <div className=\"h-12 w-12 rounded-full bg-destructive/10 text-destructive flex items-center justify-center mb-4\">\n <AlertCircle className=\"h-6 w-6\" />\n </div>\n <h4 className=\"font-bold text-lg mb-2\">{title}</h4>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n)\nexport const SolidAlert = ({ title, description, variant, ...props }: any) => {\n const bgClasses: Record<string, string> = {\n error: \"bg-red-600 text-white border-0\",\n success: \"bg-emerald-600 text-white border-0\",\n warning: \"bg-amber-500 text-black border-0\",\n default: \"bg-primary text-primary-foreground border-0\",\n }\n const bgClass = bgClasses[variant] || bgClasses.default\n return (\n <div className={cn(\"p-4 rounded-xl shadow-lg flex gap-3 items-start\", bgClass)} {...props}>\n <Info className=\"h-5 w-5 shrink-0 mt-0.5\" />\n <div>\n <h4 className=\"font-bold\">{title}</h4>\n <p className=\"text-sm opacity-90 mt-1\">{description}</p>\n </div>\n </div>\n )\n}\nexport const BannerAlert = ({ message, variant, ...props }: any) => (\n <Alert variant=\"banner\" title={message} {...props} />\n)\nexport const NeonAlert = ({ title, description, variant, ...props }: any) => (\n <Alert variant=\"neon\" title={title} description={description} {...props} />\n)\nexport const GlassAlert = ({ title, description, variant, ...props }: any) => (\n <Alert variant=\"glass\" title={title} description={description} {...props} />\n)\nexport const DismissibleAlert = ({ variant, title, description, ...props }: any) => (\n <Alert variant={variant} title={title || \"Attention\"} description={description || \"Action required\"} dismissible={true} {...props} />\n)\n\n`\n};\n","export const badge = {\n name: \"badge\",\n dependencies: [\n \"class-variance-authority\",\n \"clsx\",\n \"tailwind-merge\",\n \"framer-motion\",\n \"lucide-react\"\n],\n \n fileName: \"badge.tsx\",\n content: `'use client';\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../utils/cn\"\nimport { Star } from \"lucide-react\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1 rounded-full border font-semibold transition-all focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-default\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground border-border hover:bg-accent\",\n gradient: \"border-transparent bg-gradient-to-r from-violet-500 to-pink-500 text-white shadow-sm\",\n neon: \"border-purple-500/50 bg-purple-500/10 text-purple-400 shadow-[0_0_10px_rgba(168,85,247,0.3)]\",\n success: \"border-transparent bg-emerald-500/20 text-emerald-600 dark:text-emerald-400\",\n },\n size: {\n default: \"px-2.5 py-0.5 text-xs\",\n sm: \"px-1.5 py-0.5 text-[10px]\",\n lg: \"px-3 py-1 text-sm\",\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n pulse?: boolean;\n dot?: boolean;\n text?: string;\n}\n\nfunction Badge({ className, variant, size, pulse = false, dot = false, children, text, ...props }: BadgeProps) {\n const showDot = dot || pulse;\n \n return (\n <div className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {showDot && (\n <span className=\"relative flex h-2 w-2 mr-1\">\n {pulse && (\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-current opacity-75\"></span>\n )}\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-current\"></span>\n </span>\n )}\n {children || text}\n </div>\n )\n}\n\nexport { Badge, badgeVariants }\n\n// ----------------------------------------------------\n// Consolidated Badge Components\n// ----------------------------------------------------\n\nexport const GlowBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge variant=\"neon\" className={className} {...props}>{children}</Badge>\n)\n\nexport const GlassBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge variant=\"outline\" className={cn(\"backdrop-blur-md bg-white/10 dark:bg-black/20 border-white/20 dark:border-white/10\", className)} {...props}>{children}</Badge>\n)\n\nexport const DotBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge dot={true} className={className} {...props}>{children}</Badge>\n)\n\nexport const GradientBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge variant=\"gradient\" className={className} {...props}>{children}</Badge>\n)\n\nexport const OutlineGlowBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge variant=\"neon\" className={cn(\"bg-transparent border border-purple-500/50\", className)} {...props}>{children}</Badge>\n)\n\nexport const PulseBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge pulse={true} className={className} {...props}>{children}</Badge>\n)\n\nexport const SoftBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge variant=\"secondary\" className={className} {...props}>{children}</Badge>\n)\n\nexport const TagBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge className={cn(\"rounded-md\", className)} {...props}>{children}</Badge>\n)\n\nexport const PremiumBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge variant=\"gradient\" className={cn(\"bg-gradient-to-r from-yellow-500 via-amber-500 to-orange-500\", className)} {...props}>{children}</Badge>\n)\n\nexport const MinimalBadge = ({ children, className, ...props }: BadgeProps) => (\n <Badge size=\"sm\" variant=\"outline\" className={className} {...props}>{children}</Badge>\n)\n\nexport const NotificationBadge = ({ count, className }: { count: number; className?: string }) => (\n <div className={cn(\"flex h-5 min-w-[20px] px-1 items-center justify-center rounded-full bg-destructive text-[10px] font-bold text-destructive-foreground shadow-sm\", className)}>\n {count}\n </div>\n)\n\nexport const RibbonBadge = ({ children, text, className }: { children?: React.ReactNode; text?: string; className?: string }) => (\n <div className={cn(\"absolute top-0 right-0 bg-primary text-primary-foreground text-[10px] font-bold px-3 py-1 rounded-bl-xl uppercase tracking-wider\", className)}>\n {children || text}\n </div>\n)\n\nexport interface OutlineDotBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n status?: string;\n text?: string;\n}\n\nexport const OutlineDotBadge = ({ children, className, status, text, ...props }: OutlineDotBadgeProps) => {\n const statusColors: Record<string, string> = {\n online: \"bg-emerald-500\",\n offline: \"bg-muted-foreground/50\",\n away: \"bg-amber-500\",\n busy: \"bg-red-500\",\n }\n const dotColor = status ? statusColors[status] || \"bg-emerald-500\" : \"bg-primary\"\n return (\n <Badge variant=\"outline\" className={className} {...props}>\n <span className={cn(\"h-1.5 w-1.5 rounded-full mr-1.5\", dotColor)} />\n {children || text}\n </Badge>\n )\n}\n\nexport interface GradientOutlineBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n text?: string;\n}\n\nexport const GradientOutlineBadge = ({ children, text, className, ...props }: GradientOutlineBadgeProps) => (\n <Badge className={cn(\"p-[1px] bg-gradient-to-r from-violet-500 to-pink-500 rounded-full border-0\", className)} {...props}>\n <div className=\"bg-background text-foreground rounded-full px-2.5 py-0.5 text-xs font-semibold\">\n {children || text}\n </div>\n </Badge>\n)\n\nexport interface IconBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n text?: string;\n}\n\nexport const IconBadge = ({ children, icon, text, className, ...props }: IconBadgeProps) => {\n const renderIcon = () => {\n if (!icon) return null;\n if (typeof icon === \"string\") {\n if (icon.toLowerCase() === \"star\") {\n return <Star className=\"h-3 w-3 mr-1\" />\n }\n return <span className=\"mr-1\">{icon}</span>\n }\n return <span className=\"mr-1\">{icon}</span>\n }\n\n return (\n <Badge className={cn(\"inline-flex items-center gap-1\", className)} {...props}>\n {renderIcon()}\n {children || text}\n </Badge>\n )\n}\n\nexport interface FloatingBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n text?: string;\n}\n\nexport const FloatingBadge = ({ children, text, className, ...props }: FloatingBadgeProps) => (\n <Badge className={cn(\"absolute -top-2 -right-2 z-10 animate-[bounce_3s_infinite]\", className)} {...props}>\n {children || text}\n </Badge>\n)\n\nexport interface ProgressBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n progress?: number;\n text?: string;\n}\n\nexport const ProgressBadge = ({ children, progress = 50, text, className, ...props }: ProgressBadgeProps) => (\n <Badge variant=\"outline\" className={cn(\"relative overflow-hidden\", className)} {...props}>\n <div className=\"absolute inset-y-0 left-0 bg-primary/10 transition-all duration-300\" style={{ width: \\`\\${progress}%\\` }} />\n <span className=\"relative z-10\">{children || (text ? \\`\\${text} (\\${progress}%)\\` : \\`\\${progress}%\\`)}</span>\n </Badge>\n)\n\nexport interface StatusRingBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n status?: \"success\" | \"error\" | \"warning\" | \"active\" | string;\n}\n\nexport const StatusRingBadge = ({ status = \"success\", children, className, ...props }: StatusRingBadgeProps) => {\n const ringColors: Record<string, string> = {\n success: \"border-emerald-500/30 ring-emerald-500/20 bg-emerald-500\",\n active: \"border-emerald-500/30 ring-emerald-500/20 bg-emerald-500\",\n error: \"border-red-500/30 ring-red-500/20 bg-red-500\",\n warning: \"border-amber-500/30 ring-amber-500/20 bg-amber-500\",\n }\n const colorClass = ringColors[status] || ringColors.success;\n return (\n <span className={cn(\"relative flex h-2.5 w-2.5 rounded-full ring-4 border-2 border-transparent\", colorClass, className)} {...props} />\n )\n}\n\nexport interface NeonOutlineBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n text?: string;\n}\n\nexport const NeonOutlineBadge = ({ children, text, className, ...props }: NeonOutlineBadgeProps) => (\n <Badge variant=\"outline\" className={cn(\"border-2 border-primary text-primary shadow-[0_0_10px_rgba(var(--primary-rgb),0.4)] bg-transparent\", className)} {...props}>\n {children || text}\n </Badge>\n)\n\nexport interface TagLabelProps extends React.HTMLAttributes<HTMLSpanElement> {\n text?: string;\n}\n\nexport const TagLabel = ({ children, text, className, ...props }: TagLabelProps) => (\n <span className={cn(\"px-2 py-1 bg-muted text-muted-foreground rounded-md text-xs font-medium text-muted-foreground hover:bg-muted/80 hover:text-foreground cursor-pointer transition-colors before:content-['#'] before:mr-0.5 before:opacity-50\", className)} {...props}>\n {children || text}\n </span>\n)\n`\n};\n","import { button } from './button';\nimport { modal } from './modal';\nimport { card } from './card';\nimport { alert } from './alert';\nimport { badge } from './badge';\n\nexport interface RegistryItem {\n name: string;\n dependencies: string[];\n componentsDependencies?: string[];\n fileName: string;\n content: string;\n}\n\nexport const registry: Record<string, RegistryItem> = {\n button,\n modal,\n card,\n alert,\n badge,\n};\n","import { registry } from '../registry/index.js';\r\n\r\nexport function listCommand() {\r\n console.log('\\n\\x1b[34m\\x1b[1m=== Available NexoreUI Components ===\\x1b[0m\\n');\r\n \r\n Object.keys(registry).forEach((name) => {\r\n const item = registry[name];\r\n console.log(`- \\x1b[32m\\x1b[1m${name}\\x1b[0m (${item.fileName})`);\r\n if (item.dependencies.length > 0) {\r\n console.log(` \\x1b[90mDependencies: ${item.dependencies.join(', ')}\\x1b[0m`);\r\n }\r\n if (item.componentsDependencies && item.componentsDependencies.length > 0) {\r\n console.log(` \\x1b[33mRequires component: ${item.componentsDependencies.join(', ')}\\x1b[0m`);\r\n }\r\n console.log('');\r\n });\r\n}\r\n","import { addCommand } from './commands/add.js';\nimport { listCommand } from './commands/list.js';\n\nasync function main() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command || command === '-h' || command === '--help') {\n printHelp();\n return;\n }\n\n if (command === 'list') {\n listCommand();\n } else if (command === 'add') {\n const components: string[] = [];\n let yes = false;\n\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n if (arg === '-y' || arg === '--yes') {\n yes = true;\n } else if (!arg.startsWith('-')) {\n components.push(arg);\n }\n }\n\n await addCommand(components, { yes });\n } else {\n console.error(`\\x1b[31mUnknown command: ${command}\\x1b[0m`);\n printHelp();\n }\n}\n\nfunction printHelp() {\n console.log(`\n\\x1b[34m\\x1b[1mNexoreUI CLI\\x1b[0m\nUsage:\n npx nexoreui [command] [options]\n\nCommands:\n \\x1b[32madd [components...]\\x1b[0m Add components to your project (e.g., button, modal, card, alert, badge)\n \\x1b[32mlist\\x1b[0m List all available components\n\nOptions:\n \\x1b[33m-y, --yes\\x1b[0m Skip prompts and use default paths\n \\x1b[33m-h, --help\\x1b[0m Show help information\n `);\n}\n\nmain().catch((err) => {\n console.error('\\x1b[31mAn unexpected error occurred:\\x1b[0m', err);\n process.exit(1);\n});\n"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwWX;;;ACnXO,IAAM,QAAQ;AAAA,EACnB,MAAM;AAAA,EACN,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACE,wBAAwB;AAAA,IACxB;AAAA,EACF;AAAA,EACE,UAAU;AAAA,EACV,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0iBX;;;ACxjBO,IAAM,OAAO;AAAA,EAClB,MAAM;AAAA,EACN,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEE,UAAU;AAAA,EACV,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAweX;;;ACnfO,IAAM,QAAQ;AAAA,EACnB,MAAM;AAAA,EACN,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEE,UAAU;AAAA,EACV,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6RX;;;ACxSO,IAAM,QAAQ;AAAA,EACnB,MAAM;AAAA,EACN,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEE,UAAU;AAAA,EACV,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0OX;;;ACvOO,IAAM,WAAyC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ARZA,SAAS,YAAY,OAAgC;AACnD,QAAM,KAAc,yBAAgB;AAAA,IAClC,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,EAClB,CAAC;AACD,SAAO,IAAI;AAAA,IAAQ,CAACC,aAClB,GAAG,SAAS,OAAO,CAAC,QAAQ;AAC1B,SAAG,MAAM;AACT,MAAAA,SAAQ,GAAG;AAAA,IACb,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,WAAW,YAAsB,SAA4B;AACjF,MAAI,WAAW,WAAW,GAAG;AAC3B,YAAQ,MAAM,yDAAyD;AACvE,YAAQ,IAAI,wCAAwC;AACpD;AAAA,EACF;AAGA,QAAM,UAAU,cAAc,QAAQ,IAAI,CAAC;AAC3C,UAAQ,IAAI;AAAA,wCAA2C,QAAQ,YAAY,YAAY,CAAC,EAAE;AAC1F,UAAQ,IAAI,4CAA4C,QAAQ,cAAc;AAAA,CAAI;AAGlF,QAAM,sBAAsB,oBAAI,IAAY;AAC5C,QAAM,oBAA8B,CAAC;AAErC,QAAM,QAAQ,CAAC,GAAG,UAAU;AAC5B,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,WAAW,MAAM,MAAM;AAC7B,UAAM,eAAe,SAAS,QAAQ;AACtC,QAAI,CAAC,cAAc;AACjB,wBAAkB,KAAK,QAAQ;AAC/B;AAAA,IACF;AAEA,QAAI,CAAC,oBAAoB,IAAI,QAAQ,GAAG;AACtC,0BAAoB,IAAI,QAAQ;AAEhC,UAAI,aAAa,wBAAwB;AACvC,mBAAW,OAAO,aAAa,wBAAwB;AACrD,gBAAM,KAAK,GAAG;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,kBAAkB,SAAS,GAAG;AAChC,YAAQ,MAAM,sDAAsD,kBAAkB,KAAK,IAAI,CAAC,SAAS;AACzG,YAAQ,IAAI,uEAAuE;AACnF;AAAA,EACF;AAGA,QAAM,uBAAuB,QAAQ,YAAY,sBAAsB;AACvE,QAAM,mBAAmB,QAAQ,YAAY,qBAAqB;AAElE,MAAI,qBAAqB;AACzB,MAAI,iBAAiB;AAErB,MAAI,QAAQ,KAAK;AACf,yBAAqB;AACrB,qBAAiB;AAAA,EACnB,OAAO;AAEL,UAAM,aAAa,MAAM,YAAY,6DAA6D,oBAAoB,KAAK;AAC3H,yBAAqB,WAAW,KAAK,KAAK;AAE1C,UAAM,cAAc,MAAM,YAAY,oEAAoE,gBAAgB,KAAK;AAC/H,qBAAiB,YAAY,KAAK,KAAK;AAAA,EACzC;AAEA,QAAM,wBAA6B,cAAQ,QAAQ,SAAS,kBAAkB;AAC9E,QAAM,oBAAyB,cAAQ,QAAQ,SAAS,cAAc;AAEtE,UAAQ,IAAI;AAAA,2CAA8C,qBAAqB,EAAE;AACjF,UAAQ,IAAI,wCAAwC,iBAAiB;AAAA,CAAI;AAGzE,YAAU,qBAAqB;AAG/B,QAAM,cAAc,aAAa,iBAAiB;AAClD,MAAI,aAAa;AACf,YAAQ,IAAI,yDAAyD,cAAc,EAAE;AAAA,EACvF,OAAO;AACL,YAAQ,IAAI,oDAAoD,cAAc,EAAE;AAAA,EAClF;AAGA,QAAM,kBAAkB,oBAAI,IAAY;AAGxC,kBAAgB,IAAI,MAAM;AAC1B,kBAAgB,IAAI,gBAAgB;AAEpC,aAAW,YAAY,qBAAqB;AAC1C,UAAM,eAAe,SAAS,QAAQ;AACtC,UAAM,aAAkB,WAAK,uBAAuB,aAAa,QAAQ;AAGzE,sBAAkB,aAAa,SAAS,YAAY,iBAAiB;AACrE,YAAQ,IAAI,mCAAmC,QAAQ,OAAY,WAAK,oBAAoB,aAAa,QAAQ,CAAC,EAAE;AAGpH,iBAAa,aAAa,QAAQ,SAAO,gBAAgB,IAAI,GAAG,CAAC;AAAA,EACnE;AAGA,QAAM,YAAY,MAAM,KAAK,eAAe;AAG5C,MAAI,gBAAgB,CAAC,GAAG,SAAS;AACjC,MAAI;AACF,UAAM,kBAAuB,WAAK,QAAQ,SAAS,cAAc;AACjE,QAAO,eAAW,eAAe,GAAG;AAClC,YAAM,cAAc,KAAK,MAAS,iBAAa,iBAAiB,MAAM,CAAC;AACvE,YAAM,eAAe,EAAE,GAAG,YAAY,cAAc,GAAG,YAAY,gBAAgB;AACnF,sBAAgB,UAAU,OAAO,SAAO,CAAC,aAAa,GAAG,CAAC;AAAA,IAC5D;AAAA,EACF,SAAS,GAAG;AAAA,EAEZ;AAEA,MAAI,cAAc,SAAS,GAAG;AAC5B,YAAQ,IAAI;AAAA,mDAAsD,cAAc,KAAK,IAAI,CAAC,KAAK;AAC/F,QAAI,aAAa;AACjB,QAAI,QAAQ,mBAAmB,QAAQ;AACrC,mBAAa;AAAA,IACf,WAAW,QAAQ,mBAAmB,QAAQ;AAC5C,mBAAa;AAAA,IACf,WAAW,QAAQ,mBAAmB,OAAO;AAC3C,mBAAa;AAAA,IACf;AAEA,QAAI;AACF,yCAAS,GAAG,UAAU,IAAI,cAAc,KAAK,GAAG,CAAC,IAAI;AAAA,QACnD,OAAO;AAAA,QACP,KAAK,QAAQ;AAAA,MACf,CAAC;AACD,cAAQ,IAAI,qDAAqD;AAAA,IACnE,SAAS,KAAK;AACZ,cAAQ,MAAM,iFAAiF;AAC/F,cAAQ,IAAI,KAAK,UAAU,IAAI,cAAc,KAAK,GAAG,CAAC,EAAE;AAAA,IAC1D;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,mEAAmE;AAAA,EACjF;AAEA,UAAQ,IAAI,uEAAuE;AACrF;;;AS9JO,SAAS,cAAc;AAC5B,UAAQ,IAAI,iEAAiE;AAE7E,SAAO,KAAK,QAAQ,EAAE,QAAQ,CAAC,SAAS;AACtC,UAAM,OAAO,SAAS,IAAI;AAC1B,YAAQ,IAAI,oBAAoB,IAAI,YAAY,KAAK,QAAQ,GAAG;AAChE,QAAI,KAAK,aAAa,SAAS,GAAG;AAChC,cAAQ,IAAI,2BAA2B,KAAK,aAAa,KAAK,IAAI,CAAC,SAAS;AAAA,IAC9E;AACA,QAAI,KAAK,0BAA0B,KAAK,uBAAuB,SAAS,GAAG;AACzE,cAAQ,IAAI,iCAAiC,KAAK,uBAAuB,KAAK,IAAI,CAAC,SAAS;AAAA,IAC9F;AACA,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AACH;;;ACbA,eAAe,OAAO;AACpB,QAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,QAAM,UAAU,KAAK,CAAC;AAEtB,MAAI,CAAC,WAAW,YAAY,QAAQ,YAAY,UAAU;AACxD,cAAU;AACV;AAAA,EACF;AAEA,MAAI,YAAY,QAAQ;AACtB,gBAAY;AAAA,EACd,WAAW,YAAY,OAAO;AAC5B,UAAM,aAAuB,CAAC;AAC9B,QAAI,MAAM;AAEV,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAClB,UAAI,QAAQ,QAAQ,QAAQ,SAAS;AACnC,cAAM;AAAA,MACR,WAAW,CAAC,IAAI,WAAW,GAAG,GAAG;AAC/B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,WAAW,YAAY,EAAE,IAAI,CAAC;AAAA,EACtC,OAAO;AACL,YAAQ,MAAM,4BAA4B,OAAO,SAAS;AAC1D,cAAU;AAAA,EACZ;AACF;AAEA,SAAS,YAAY;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYX;AACH;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,gDAAgD,GAAG;AACjE,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["fs","path","fs","path","resolve"]}
package/package.json CHANGED
@@ -1,21 +1,20 @@
1
1
  {
2
2
  "name": "nexoreui-cli",
3
- "version": "0.1.0",
4
- "description": "CLI to install NexoreUI components individually",
3
+ "version": "0.1.1",
4
+ "description": "CLI to install NexoreUI components",
5
5
  "bin": {
6
6
  "nexoreui": "./dist/index.js"
7
7
  },
8
8
  "files": [
9
9
  "dist"
10
10
  ],
11
- "main": "./dist/index.js",
12
- "scripts": {
13
- "build": "tsup",
14
- "dev": "tsup --watch"
15
- },
16
11
  "devDependencies": {
17
12
  "tsup": "^8.0.2",
18
13
  "typescript": "^5.4.5",
19
14
  "@types/node": "^20.17.6"
15
+ },
16
+ "scripts": {
17
+ "build": "tsup",
18
+ "dev": "tsup --watch"
20
19
  }
21
- }
20
+ }