veloria-ui 0.1.2

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/LICENSE +21 -0
  3. package/README.md +253 -0
  4. package/dist/cli/index.js +511 -0
  5. package/dist/index.d.mts +1317 -0
  6. package/dist/index.d.ts +1317 -0
  7. package/dist/index.js +5373 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/index.mjs +5130 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/dist/provider.d.mts +15 -0
  12. package/dist/provider.d.ts +15 -0
  13. package/dist/provider.js +1197 -0
  14. package/dist/provider.js.map +1 -0
  15. package/dist/provider.mjs +1161 -0
  16. package/dist/provider.mjs.map +1 -0
  17. package/dist/tailwind.d.ts +25 -0
  18. package/dist/tailwind.js +129 -0
  19. package/package.json +138 -0
  20. package/src/cli/index.ts +303 -0
  21. package/src/cli/registry.ts +139 -0
  22. package/src/components/advanced-forms/index.tsx +975 -0
  23. package/src/components/basic/Button.tsx +135 -0
  24. package/src/components/basic/IconButton.tsx +69 -0
  25. package/src/components/basic/index.tsx +446 -0
  26. package/src/components/data-display/index.tsx +1158 -0
  27. package/src/components/feedback/index.tsx +1051 -0
  28. package/src/components/forms/index.tsx +476 -0
  29. package/src/components/layout/index.tsx +296 -0
  30. package/src/components/media/index.tsx +437 -0
  31. package/src/components/navigation/index.tsx +484 -0
  32. package/src/components/overlay/index.tsx +473 -0
  33. package/src/components/utility/index.tsx +566 -0
  34. package/src/hooks/index.ts +602 -0
  35. package/src/hooks/use-toast.tsx +74 -0
  36. package/src/index.ts +396 -0
  37. package/src/provider.tsx +54 -0
  38. package/src/styles/atlas.css +252 -0
  39. package/src/tailwind.ts +124 -0
  40. package/src/types/index.ts +95 -0
  41. package/src/utils/cn.ts +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider.tsx","../src/components/feedback/index.tsx","../src/utils/cn.ts","../src/components/basic/index.tsx"],"sourcesContent":["/**\n * AtlasProvider — wrap your app with this once.\n *\n * Covers Toast (needed for useToast) and TooltipProvider (so you don't\n * have to wrap every single Tooltip yourself).\n *\n * Usage in app/layout.tsx:\n *\n * import { AtlasProvider } from \"veloria-ui/provider\";\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html lang=\"en\">\n * <body>\n * <AtlasProvider>{children}</AtlasProvider>\n * </body>\n * </html>\n * );\n * }\n *\n * — JohnDev19, Veloria UI\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { ToastProvider, ToastViewport } from \"./components/feedback\";\nimport { TooltipProvider } from \"./components/basic\";\n\nexport interface AtlasProviderProps {\n children: React.ReactNode;\n /** How long toasts stay on screen in ms. Default: 5000 */\n toastDuration?: number;\n /** Swipe direction to dismiss toasts. Default: \"right\" */\n toastSwipeDirection?: \"up\" | \"down\" | \"left\" | \"right\";\n /** Delay before tooltips open in ms. Default: 300 */\n tooltipDelay?: number;\n}\n\nexport function AtlasProvider({\n children,\n toastDuration = 5000,\n toastSwipeDirection = \"right\",\n tooltipDelay = 300,\n}: AtlasProviderProps) {\n return (\n <ToastProvider duration={toastDuration} swipeDirection={toastSwipeDirection}>\n <TooltipProvider delayDuration={tooltipDelay}>\n {children}\n <ToastViewport />\n </TooltipProvider>\n </ToastProvider>\n );\n}\n","import * as React from \"react\";\nimport * as ToastPrimitive from \"@radix-ui/react-toast\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\n// ─── Alert ─────────────────────────────────────────────────────────────────\n\nconst alertVariants = cva(\n \"atlas-alert relative w-full rounded-lg border p-4 [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg+div]:pl-7\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n info: \"border-info/30 bg-info/10 text-info-foreground [&>svg]:text-info\",\n success: \"border-success/30 bg-success/10 text-success-foreground [&>svg]:text-success\",\n warning: \"border-warning/30 bg-warning/10 text-warning-foreground [&>svg]:text-warning\",\n danger: \"border-destructive/30 bg-destructive/10 text-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n);\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {\n icon?: React.ReactNode;\n closable?: boolean;\n onClose?: () => void;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant, icon, closable, onClose, children, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props}>\n {icon}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1\">{children}</div>\n {closable && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"shrink-0 rounded-md p-0.5 text-current/50 hover:text-current transition-colors\"\n aria-label=\"Dismiss alert\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n )\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5 ref={ref} className={cn(\"mb-1 font-semibold leading-tight tracking-tight\", className)} {...props} />\n )\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm leading-relaxed\", className)} {...props} />\n )\n);\nAlertDescription.displayName = \"AlertDescription\";\n\n// ─── Toast ─────────────────────────────────────────────────────────────────\n\nconst ToastProvider = ToastPrimitive.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Viewport\n ref={ref}\n className={cn(\n \"atlas-toast-viewport fixed bottom-4 right-4 z-[100] flex flex-col gap-2 w-full max-w-sm p-4\",\n className\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitive.Viewport.displayName;\n\nconst toastVariants = cva(\n [\n \"group pointer-events-auto relative flex w-full items-start gap-3 overflow-hidden\",\n \"rounded-lg border p-4 shadow-lg transition-all\",\n \"data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)]\",\n \"data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none\",\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-bottom-full data-[state=open]:fade-in\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=closed]:slide-out-to-right-full\",\n ],\n {\n variants: {\n variant: {\n default: \"bg-background border-border\",\n success: \"bg-success/10 border-success/20 text-success\",\n warning: \"bg-warning/10 border-warning/20 text-warning\",\n danger: \"bg-destructive/10 border-destructive/20 text-destructive\",\n info: \"bg-info/10 border-info/20 text-info\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Root> & VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => (\n <ToastPrimitive.Root ref={ref} className={cn(toastVariants({ variant }), className)} {...props} />\n));\nToast.displayName = ToastPrimitive.Root.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Title ref={ref} className={cn(\"text-sm font-semibold\", className)} {...props} />\n));\nToastTitle.displayName = ToastPrimitive.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Description ref={ref} className={cn(\"text-sm opacity-80\", className)} {...props} />\n));\nToastDescription.displayName = ToastPrimitive.Description.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitive.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Close\n ref={ref}\n toast-close=\"\"\n className={cn(\n \"ml-auto shrink-0 rounded-md p-0.5 opacity-50 hover:opacity-100 transition-opacity\",\n className\n )}\n aria-label=\"Close\"\n {...props}\n >\n <svg className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </ToastPrimitive.Close>\n));\nToastClose.displayName = ToastPrimitive.Close.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium\",\n \"transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitive.Action.displayName;\n\n// ─── Snackbar ─────────────────────────────────────────────────────────────\n\nexport interface SnackbarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\"> {\n open?: boolean;\n message: React.ReactNode;\n action?: React.ReactNode;\n variant?: \"default\" | \"success\" | \"warning\" | \"danger\";\n position?: \"bottom-center\" | \"bottom-left\" | \"bottom-right\" | \"top-center\";\n}\n\nconst Snackbar = React.forwardRef<HTMLDivElement, SnackbarProps>(\n ({ className, open, message, action, variant = \"default\", position = \"bottom-center\", ...props }, ref) => {\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"atlas-snackbar fixed z-50 flex items-center gap-4 rounded-lg px-4 py-3 shadow-lg\",\n \"min-w-[280px] max-w-[480px]\",\n position === \"bottom-center\" && \"bottom-4 left-1/2 -translate-x-1/2\",\n position === \"bottom-left\" && \"bottom-4 left-4\",\n position === \"bottom-right\" && \"bottom-4 right-4\",\n position === \"top-center\" && \"top-4 left-1/2 -translate-x-1/2\",\n variant === \"default\" && \"bg-foreground text-background\",\n variant === \"success\" && \"bg-success text-success-foreground\",\n variant === \"warning\" && \"bg-warning text-warning-foreground\",\n variant === \"danger\" && \"bg-destructive text-destructive-foreground\",\n className\n )}\n {...props}\n >\n <p className=\"flex-1 text-sm font-medium\">{message}</p>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n );\n }\n);\nSnackbar.displayName = \"Snackbar\";\n\n// ─── Progress ─────────────────────────────────────────────────────────────\n\nexport interface ProgressProps extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {\n label?: string;\n showValue?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n color?: \"default\" | \"success\" | \"warning\" | \"danger\";\n}\n\nconst Progress = React.forwardRef<React.ElementRef<typeof ProgressPrimitive.Root>, ProgressProps>(\n ({ className, value, label, showValue, size = \"md\", color = \"default\", ...props }, ref) => (\n <div className=\"atlas-progress w-full\">\n {(label || showValue) && (\n <div className=\"flex justify-between items-center mb-1.5\">\n {label && <span className=\"text-sm font-medium\">{label}</span>}\n {showValue && <span className=\"text-sm text-muted-foreground\">{value ?? 0}%</span>}\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative overflow-hidden rounded-full bg-secondary\",\n size === \"sm\" && \"h-1.5\",\n size === \"md\" && \"h-2.5\",\n size === \"lg\" && \"h-4\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n \"h-full w-full flex-1 transition-all duration-500 ease-in-out\",\n color === \"default\" && \"bg-primary\",\n color === \"success\" && \"bg-success\",\n color === \"warning\" && \"bg-warning\",\n color === \"danger\" && \"bg-destructive\",\n )}\n style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n </div>\n )\n);\nProgress.displayName = \"Progress\";\n\n// ─── CircularProgress ─────────────────────────────────────────────────────\n\nexport interface CircularProgressProps extends React.SVGAttributes<SVGElement> {\n value?: number;\n size?: number;\n thickness?: number;\n showValue?: boolean;\n label?: string;\n color?: \"default\" | \"success\" | \"warning\" | \"danger\";\n indeterminate?: boolean;\n}\n\nconst CircularProgress = ({\n value = 0,\n size = 48,\n thickness = 4,\n showValue,\n label,\n color = \"default\",\n indeterminate,\n className,\n ...props\n}: CircularProgressProps) => {\n const radius = (size - thickness) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (value / 100) * circumference;\n\n const colorMap = {\n default: \"stroke-primary\",\n success: \"stroke-success\",\n warning: \"stroke-warning\",\n danger: \"stroke-destructive\",\n };\n\n return (\n <div className={cn(\"atlas-circular-progress relative inline-flex items-center justify-center\", className)}>\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n className={indeterminate ? \"animate-spin\" : \"\"}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n {...props}\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={thickness}\n className=\"stroke-secondary\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={thickness}\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : offset}\n strokeLinecap=\"round\"\n className={cn(\"transition-all duration-500\", colorMap[color])}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n />\n </svg>\n {showValue && !indeterminate && (\n <span className=\"absolute text-xs font-semibold\">{value}%</span>\n )}\n </div>\n );\n};\nCircularProgress.displayName = \"CircularProgress\";\n\n// ─── Skeleton ─────────────────────────────────────────────────────────────\n\nexport interface SkeletonProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\"> {\n variant?: \"text\" | \"rect\" | \"circle\";\n width?: string | number;\n height?: string | number;\n lines?: number;\n}\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant = \"rect\", width, height, lines = 1, style, ...props }, ref) => {\n if (variant === \"text\" && lines > 1) {\n return (\n <div className={cn(\"atlas-skeleton space-y-2\", className)} ref={ref} {...props}>\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n className=\"h-4 animate-pulse rounded bg-muted\"\n style={{ width: i === lines - 1 ? \"75%\" : \"100%\" }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"atlas-skeleton animate-pulse bg-muted\",\n variant === \"circle\" ? \"rounded-full\" : \"rounded-md\",\n variant === \"text\" && \"h-4\",\n className\n )}\n style={{ width, height, ...style }}\n aria-hidden=\"true\"\n {...props}\n />\n );\n }\n);\nSkeleton.displayName = \"Skeleton\";\n\n// ─── LoadingSpinner ───────────────────────────────────────────────────────\n\nexport interface LoadingSpinnerProps extends React.SVGAttributes<SVGElement> {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n label?: string;\n}\n\nconst spinnerSizes = { xs: 12, sm: 16, md: 24, lg: 32, xl: 48 };\n\nconst LoadingSpinner = ({ size = \"md\", label = \"Loading\", className, ...props }: LoadingSpinnerProps) => (\n <svg\n width={spinnerSizes[size]}\n height={spinnerSizes[size]}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className={cn(\"atlas-loading-spinner animate-spin text-primary\", className)}\n role=\"status\"\n aria-label={label}\n {...props}\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n);\nLoadingSpinner.displayName = \"LoadingSpinner\";\n\n// ─── EmptyState ───────────────────────────────────────────────────────────\n\nexport interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nconst EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ className, icon, title, description, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"atlas-empty-state flex flex-col items-center justify-center gap-3 text-center py-16 px-6\",\n className\n )}\n {...props}\n >\n {icon && (\n <div className=\"rounded-full bg-muted p-4 text-muted-foreground [&>svg]:h-8 [&>svg]:w-8\">\n {icon}\n </div>\n )}\n <div className=\"max-w-xs\">\n <h3 className=\"text-base font-semibold\">{title}</h3>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n {action && <div className=\"mt-2\">{action}</div>}\n </div>\n )\n);\nEmptyState.displayName = \"EmptyState\";\n\n// ─── StatusIndicator ──────────────────────────────────────────────────────\n\nexport interface StatusIndicatorProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\" | \"size\"> {\n status: \"online\" | \"offline\" | \"busy\" | \"away\" | \"idle\";\n label?: string;\n pulse?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst statusColors = {\n online: \"bg-success\",\n offline: \"bg-muted-foreground\",\n busy: \"bg-destructive\",\n away: \"bg-warning\",\n idle: \"bg-warning/60\",\n};\n\nconst StatusIndicator = React.forwardRef<HTMLSpanElement, StatusIndicatorProps>(\n ({ className, status, label, pulse, size = \"md\", ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"atlas-status-indicator inline-flex items-center gap-1.5\", className)}\n {...props}\n >\n <span className=\"relative inline-flex\">\n <span className={cn(\n \"rounded-full\",\n statusColors[status],\n size === \"sm\" && \"h-1.5 w-1.5\",\n size === \"md\" && \"h-2.5 w-2.5\",\n size === \"lg\" && \"h-3.5 w-3.5\",\n )} />\n {pulse && status === \"online\" && (\n <span className={cn(\n \"absolute inline-flex rounded-full animate-ping opacity-75\",\n statusColors[status],\n size === \"sm\" && \"h-1.5 w-1.5\",\n size === \"md\" && \"h-2.5 w-2.5\",\n size === \"lg\" && \"h-3.5 w-3.5\",\n )} />\n )}\n </span>\n {label && <span className=\"text-sm capitalize\">{label ?? status}</span>}\n </span>\n )\n);\nStatusIndicator.displayName = \"StatusIndicator\";\n\n// ─── Notification ─────────────────────────────────────────────────────────\n\nexport interface NotificationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: React.ReactNode;\n description?: React.ReactNode;\n avatar?: React.ReactNode;\n icon?: React.ReactNode;\n time?: React.ReactNode;\n unread?: boolean;\n onClose?: () => void;\n}\n\nconst Notification = React.forwardRef<HTMLDivElement, NotificationProps>(\n ({ className, title, description, avatar, icon, time, unread, onClose, ...props }, ref) => (\n <div\n ref={ref}\n role=\"listitem\"\n className={cn(\n \"atlas-notification flex gap-3 p-4 transition-colors\",\n unread && \"bg-primary/5\",\n className\n )}\n {...props}\n >\n <div className=\"shrink-0\">\n {avatar ?? (\n <div className=\"flex h-9 w-9 items-center justify-center rounded-full bg-muted text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </div>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <p className={cn(\"text-sm font-medium leading-snug\", unread && \"font-semibold\")}>{title}</p>\n {unread && <span className=\"mt-1 h-2 w-2 shrink-0 rounded-full bg-primary\" aria-label=\"Unread\" />}\n </div>\n {description && <p className=\"mt-0.5 text-sm text-muted-foreground line-clamp-2\">{description}</p>}\n {time && <p className=\"mt-1 text-xs text-muted-foreground\">{time}</p>}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"shrink-0 self-start rounded p-0.5 text-muted-foreground hover:text-foreground transition-colors\"\n aria-label=\"Dismiss notification\"\n >\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )\n);\nNotification.displayName = \"Notification\";\n\n\n// ═══════════════════════════════════════════════════════════════\n// New in v0.1.2\n// ═══════════════════════════════════════════════════════════════\n\n\n// ─── BannerAlert ──────────────────────────────────────────────────────────\n\nexport interface BannerAlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: \"info\" | \"success\" | \"warning\" | \"danger\";\n dismissible?: boolean;\n onDismiss?: () => void;\n action?: React.ReactNode;\n icon?: React.ReactNode;\n}\n\nconst bannerVariants = {\n info: \"bg-info/10 border-info/30 text-info-foreground [&_.atlas-banner-icon]:text-info\",\n success: \"bg-success/10 border-success/30 text-success-foreground [&_.atlas-banner-icon]:text-success\",\n warning: \"bg-warning/10 border-warning/30 text-warning-foreground [&_.atlas-banner-icon]:text-warning\",\n danger: \"bg-destructive/10 border-destructive/30 text-destructive [&_.atlas-banner-icon]:text-destructive\",\n};\n\nconst defaultBannerIcons: Record<string, React.ReactNode> = {\n info: (\n <svg className=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ),\n success: (\n <svg className=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ),\n warning: (\n <svg className=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n ),\n danger: (\n <svg className=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ),\n};\n\nconst BannerAlert = React.forwardRef<HTMLDivElement, BannerAlertProps>(\n ({ className, title, description, variant = \"info\", dismissible, onDismiss, action, icon, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n \"atlas-banner-alert w-full border-y px-4 py-3\",\n bannerVariants[variant],\n className\n )}\n {...props}\n >\n <div className=\"flex items-start gap-3 max-w-screen-xl mx-auto\">\n <span className=\"atlas-banner-icon shrink-0 mt-0.5\">\n {icon ?? defaultBannerIcons[variant]}\n </span>\n <div className=\"flex-1 min-w-0\">\n {title && <p className=\"font-semibold text-sm\">{title}</p>}\n {description && <p className=\"text-sm mt-0.5 opacity-90\">{description}</p>}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {action}\n {dismissible && (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"rounded-md p-1 opacity-60 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-current\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n </div>\n )\n);\nBannerAlert.displayName = \"BannerAlert\";\n\n// ─── ConfirmDialog ────────────────────────────────────────────────────────\n\nexport interface ConfirmDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: \"default\" | \"danger\";\n onConfirm?: () => void | Promise<void>;\n onCancel?: () => void;\n loading?: boolean;\n}\n\nconst ConfirmDialog = ({\n open,\n onOpenChange,\n title = \"Are you sure?\",\n description = \"This action cannot be undone.\",\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n variant = \"default\",\n onConfirm,\n onCancel,\n loading,\n}: ConfirmDialogProps) => {\n const [pending, setPending] = React.useState(false);\n\n if (!open) return null;\n\n const handleConfirm = async () => {\n setPending(true);\n try {\n await onConfirm?.();\n onOpenChange?.(false);\n } finally {\n setPending(false);\n }\n };\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange?.(false);\n };\n\n const isBusy = pending || loading;\n\n return (\n <div className=\"atlas-confirm-dialog fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div\n className=\"fixed inset-0 bg-black/50 animate-in fade-in-0\"\n onClick={handleCancel}\n aria-hidden=\"true\"\n />\n <div\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby=\"confirm-title\"\n aria-describedby=\"confirm-description\"\n className={cn(\n \"relative z-10 w-full max-w-sm rounded-xl border border-border bg-background p-6 shadow-xl\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n >\n <div className=\"flex items-start gap-4\">\n <div className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-full\",\n variant === \"danger\" ? \"bg-destructive/10\" : \"bg-primary/10\"\n )}>\n {variant === \"danger\" ? (\n <svg className=\"h-5 w-5 text-destructive\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n ) : (\n <svg className=\"h-5 w-5 text-primary\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )}\n </div>\n <div>\n <h2 id=\"confirm-title\" className=\"text-base font-semibold\">{title}</h2>\n <p id=\"confirm-description\" className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n </div>\n </div>\n <div className=\"mt-6 flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={handleCancel}\n disabled={isBusy}\n className=\"inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium hover:bg-accent transition-colors disabled:opacity-50\"\n >\n {cancelLabel}\n </button>\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={isBusy}\n className={cn(\n \"inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 text-sm font-medium transition-colors disabled:opacity-50\",\n variant === \"danger\"\n ? \"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n : \"bg-primary text-primary-foreground hover:bg-primary/90\"\n )}\n >\n {isBusy && (\n <svg className=\"h-3.5 w-3.5 animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n )}\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>\n );\n};\nConfirmDialog.displayName = \"ConfirmDialog\";\n\n// ─── FloatingActionButton ─────────────────────────────────────────────────\n\nexport interface FABAction {\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n}\n\nexport interface FloatingActionButtonProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onClick\" | \"size\"> {\n icon?: React.ReactNode;\n label?: string;\n actions?: FABAction[];\n position?: \"bottom-right\" | \"bottom-left\" | \"bottom-center\";\n size?: \"sm\" | \"md\" | \"lg\";\n onClick?: () => void;\n}\n\nconst positionMap = {\n \"bottom-right\": \"fixed bottom-6 right-6 z-40\",\n \"bottom-left\": \"fixed bottom-6 left-6 z-40\",\n \"bottom-center\": \"fixed bottom-6 left-1/2 -translate-x-1/2 z-40\",\n};\n\nconst fabSizes = {\n sm: \"h-12 w-12 [&>svg]:h-5 [&>svg]:w-5\",\n md: \"h-14 w-14 [&>svg]:h-6 [&>svg]:w-6\",\n lg: \"h-16 w-16 [&>svg]:h-7 [&>svg]:w-7\",\n};\n\nconst FloatingActionButton = React.forwardRef<HTMLDivElement, FloatingActionButtonProps>(\n ({ className, icon, label = \"Open actions\", actions = [], position = \"bottom-right\", size = \"md\", onClick, ...props }, ref) => {\n const [open, setOpen] = React.useState(false);\n const hasActions = actions.length > 0;\n\n return (\n <div\n ref={ref}\n className={cn(positionMap[position], \"flex flex-col-reverse items-center gap-3\", className)}\n {...props}\n >\n {hasActions && open && (\n <div className=\"flex flex-col-reverse gap-2\">\n {actions.map((action, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <span className=\"rounded-md bg-foreground/90 px-2 py-1 text-xs text-background font-medium shadow whitespace-nowrap\">\n {action.label}\n </span>\n <button\n type=\"button\"\n disabled={action.disabled}\n onClick={() => { action.onClick(); setOpen(false); }}\n aria-label={action.label}\n className={cn(\n \"flex h-10 w-10 items-center justify-center rounded-full bg-background border border-border\",\n \"shadow-md text-foreground hover:bg-accent transition-all\",\n \"[&>svg]:h-4 [&>svg]:w-4\",\n \"disabled:opacity-50 disabled:pointer-events-none\"\n )}\n >\n {action.icon}\n </button>\n </div>\n ))}\n </div>\n )}\n <button\n type=\"button\"\n aria-label={label}\n aria-expanded={hasActions ? open : undefined}\n onClick={hasActions ? () => setOpen(!open) : onClick}\n className={cn(\n \"flex items-center justify-center rounded-full\",\n \"bg-primary text-primary-foreground shadow-lg\",\n \"hover:bg-primary/90 active:scale-95 transition-all\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n fabSizes[size]\n )}\n >\n {icon ?? (\n <svg\n className={cn(\"transition-transform duration-200\", hasActions && open && \"rotate-45\")}\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n style={{ width: \"1.5rem\", height: \"1.5rem\" }}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n )}\n </button>\n </div>\n );\n }\n);\nFloatingActionButton.displayName = \"FloatingActionButton\";\n\n// ─── RichTooltip ──────────────────────────────────────────────────────────\n\nexport interface RichTooltipProps {\n children: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n open?: boolean;\n defaultOpen?: boolean;\n delayDuration?: number;\n}\n\nconst RichTooltip = ({\n children,\n title,\n description,\n action,\n side = \"top\",\n open: controlledOpen,\n defaultOpen = false,\n delayDuration = 400,\n}: RichTooltipProps) => {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = controlledOpen ?? internalOpen;\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const show = () => {\n timeoutRef.current = setTimeout(() => setInternalOpen(true), delayDuration);\n };\n const hide = () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setInternalOpen(false);\n };\n\n const positionClasses: Record<string, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n };\n\n return (\n <div\n className=\"atlas-rich-tooltip relative inline-flex\"\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {children}\n {isOpen && (\n <div\n role=\"tooltip\"\n className={cn(\n \"absolute z-50 w-64 rounded-lg border border-border bg-popover p-3 shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n positionClasses[side]\n )}\n >\n {title && <p className=\"text-sm font-semibold mb-1\">{title}</p>}\n {description && <p className=\"text-xs text-muted-foreground leading-relaxed\">{description}</p>}\n {action && <div className=\"mt-2 pt-2 border-t border-border\">{action}</div>}\n </div>\n )}\n </div>\n );\n};\nRichTooltip.displayName = \"RichTooltip\";\n\n// ─── Tour ─────────────────────────────────────────────────────────────────\n\nexport interface TourStep {\n target?: string;\n title: string;\n description: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\nexport interface TourProps {\n steps: TourStep[];\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onComplete?: () => void;\n currentStep?: number;\n onStepChange?: (step: number) => void;\n}\n\nconst Tour = ({\n steps,\n open,\n onOpenChange,\n onComplete,\n currentStep: controlledStep,\n onStepChange,\n}: TourProps) => {\n const [internalStep, setInternalStep] = React.useState(0);\n const step = controlledStep ?? internalStep;\n const current = steps[step];\n\n if (!open || !current) return null;\n\n const goNext = () => {\n if (step < steps.length - 1) {\n const next = step + 1;\n onStepChange?.(next);\n setInternalStep(next);\n } else {\n onComplete?.();\n onOpenChange?.(false);\n }\n };\n\n const goPrev = () => {\n if (step > 0) {\n const prev = step - 1;\n onStepChange?.(prev);\n setInternalStep(prev);\n }\n };\n\n return (\n <div className=\"atlas-tour fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div\n className=\"fixed inset-0 bg-black/40 animate-in fade-in-0\"\n onClick={() => onOpenChange?.(false)}\n aria-hidden=\"true\"\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={`Tour step ${step + 1} of ${steps.length}: ${current.title}`}\n className=\"relative z-10 w-full max-w-sm rounded-xl border border-border bg-background p-5 shadow-xl animate-in fade-in-0 zoom-in-95\"\n >\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Step {step + 1} of {steps.length}\n </span>\n <button\n type=\"button\"\n onClick={() => onOpenChange?.(false)}\n aria-label=\"Close tour\"\n className=\"rounded p-0.5 text-muted-foreground hover:text-foreground transition-colors\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <h3 className=\"text-base font-semibold mb-1\">{current.title}</h3>\n <div className=\"text-sm text-muted-foreground\">{current.description}</div>\n\n <div className=\"mt-5 flex items-center justify-between gap-3\">\n <div className=\"flex gap-1\">\n {steps.map((_, i) => (\n <span\n key={i}\n className={cn(\n \"h-1.5 rounded-full transition-all\",\n i === step ? \"w-4 bg-primary\" : \"w-1.5 bg-muted\"\n )}\n />\n ))}\n </div>\n <div className=\"flex gap-2\">\n {step > 0 && (\n <button\n type=\"button\"\n onClick={goPrev}\n className=\"h-8 px-3 rounded-md border border-border text-sm hover:bg-accent transition-colors\"\n >\n Back\n </button>\n )}\n <button\n type=\"button\"\n onClick={goNext}\n className=\"h-8 px-4 rounded-md bg-primary text-primary-foreground text-sm font-medium hover:bg-primary/90 transition-colors\"\n >\n {step === steps.length - 1 ? \"Done\" : \"Next\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\nTour.displayName = \"Tour\";\n\n\nexport {\n\n Alert, AlertTitle, AlertDescription,\n ToastProvider, ToastViewport, Toast, ToastTitle, ToastDescription, ToastClose, ToastAction,\n Snackbar,\n Progress,\n CircularProgress,\n Skeleton,\n LoadingSpinner,\n EmptyState,\n StatusIndicator,\n Notification,\n BannerAlert, ConfirmDialog, FloatingActionButton, RichTooltip, Tour\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges Tailwind classes without conflicts.\n * Wrapper around clsx + tailwind-merge — use this everywhere in Veloria UI\n * instead of raw string concatenation.\n *\n * @example\n * cn(\"px-4 py-2\", isLarge && \"px-8\", className)\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Chains two event handlers so both fire, but respects defaultPrevented\n * on the original handler before calling ours.\n */\nexport function composeEventHandlers<E>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n if (\n !checkForDefaultPrevented ||\n !(event as unknown as Event).defaultPrevented\n ) {\n return ourEventHandler?.(event);\n }\n };\n}\n\n/**\n * Quick incrementing ID generator — used for linking labels to inputs\n * when no explicit id prop is passed.\n */\nlet idCounter = 0;\nexport function generateId(prefix = \"atlas\"): string {\n return `${prefix}-${++idCounter}`;\n}\n\n/** True only in browser environments. Guards SSR code paths. */\nexport const isBrowser = typeof window !== \"undefined\";\n\n/** A do-nothing function. Handy as a default prop value. */\nexport const noop = () => undefined;\n\n/** Narrows out null and undefined from a value. */\nexport function isDefined<T>(value: T | undefined | null): value is T {\n return value !== undefined && value !== null;\n}\n\n/**\n * Filters React.Children down to only valid elements.\n * Useful when mapping children and you need to skip strings/nulls.\n */\nexport function getValidChildren(children: React.ReactNode) {\n return React.Children.toArray(children).filter((child) =>\n React.isValidElement(child)\n ) as React.ReactElement[];\n}\n\nimport React from \"react\";\n","// ─── Link ─────────────────────────────────────────────────────────────────\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\n// ─── Link ─────────────────────────────────────────────────────────────────\n\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n asChild?: boolean;\n external?: boolean;\n underline?: \"always\" | \"hover\" | \"none\";\n}\n\nconst Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, asChild, external, underline = \"hover\", children, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\";\n const externalProps = external\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {};\n\n return (\n <Comp\n ref={ref}\n className={cn(\n \"atlas-link text-primary transition-colors\",\n underline === \"always\" && \"underline underline-offset-4\",\n underline === \"hover\" && \"hover:underline underline-offset-4\",\n underline === \"none\" && \"no-underline\",\n className\n )}\n {...externalProps}\n {...props}\n >\n {children}\n {external && (\n <svg\n className=\"inline-block ml-0.5 h-3 w-3 align-super\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n )}\n </Comp>\n );\n }\n);\nLink.displayName = \"Link\";\n\n// ─── Badge ─────────────────────────────────────────────────────────────────\n\nconst badgeVariants = cva(\n \"atlas-badge inline-flex items-center gap-1 rounded-full font-medium transition-colors\",\n {\n variants: {\n variant: {\n solid: \"bg-primary text-primary-foreground\",\n outline: \"border border-current bg-transparent\",\n soft: \"bg-primary/10 text-primary\",\n neutral: \"bg-muted text-muted-foreground\",\n },\n size: {\n sm: \"px-1.5 py-0.5 text-[10px]\",\n md: \"px-2 py-0.5 text-xs\",\n lg: \"px-2.5 py-1 text-sm\",\n },\n color: {\n primary: \"\",\n success: \"\",\n warning: \"\",\n danger: \"\",\n info: \"\",\n neutral: \"\",\n },\n },\n compoundVariants: [\n { variant: \"solid\", color: \"success\", className: \"bg-success text-success-foreground\" },\n { variant: \"solid\", color: \"warning\", className: \"bg-warning text-warning-foreground\" },\n { variant: \"solid\", color: \"danger\", className: \"bg-destructive text-destructive-foreground\" },\n { variant: \"solid\", color: \"info\", className: \"bg-info text-info-foreground\" },\n { variant: \"soft\", color: \"success\", className: \"bg-success/10 text-success\" },\n { variant: \"soft\", color: \"warning\", className: \"bg-warning/10 text-warning\" },\n { variant: \"soft\", color: \"danger\", className: \"bg-destructive/10 text-destructive\" },\n { variant: \"soft\", color: \"info\", className: \"bg-info/10 text-info\" },\n ],\n defaultVariants: {\n variant: \"soft\",\n size: \"md\",\n color: \"primary\",\n },\n }\n);\n\nexport interface BadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n VariantProps<typeof badgeVariants> {\n dot?: boolean;\n}\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, color, dot, children, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size, color, className }))} {...props}>\n {dot && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-current\" aria-hidden=\"true\" />\n )}\n {children}\n </span>\n )\n);\nBadge.displayName = \"Badge\";\n\n// ─── Avatar ────────────────────────────────────────────────────────────────\n\nconst avatarSizes = {\n xs: \"h-6 w-6 text-[10px]\",\n sm: \"h-8 w-8 text-xs\",\n md: \"h-10 w-10 text-sm\",\n lg: \"h-12 w-12 text-base\",\n xl: \"h-16 w-16 text-lg\",\n \"2xl\": \"h-20 w-20 text-xl\",\n};\n\nexport interface AvatarProps\n extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> {\n src?: string;\n alt?: string;\n fallback?: string;\n size?: keyof typeof avatarSizes;\n shape?: \"circle\" | \"square\";\n status?: \"online\" | \"offline\" | \"busy\" | \"away\";\n}\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n AvatarProps\n>(({ className, src, alt, fallback, size = \"md\", shape = \"circle\", status, ...props }, ref) => (\n <div className=\"atlas-avatar relative inline-flex shrink-0\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex shrink-0 overflow-hidden\",\n avatarSizes[size],\n shape === \"circle\" ? \"rounded-full\" : \"rounded-md\",\n className\n )}\n {...props}\n >\n <AvatarPrimitive.Image\n src={src}\n alt={alt}\n className=\"aspect-square h-full w-full object-cover\"\n />\n <AvatarPrimitive.Fallback\n className={cn(\n \"flex h-full w-full items-center justify-center\",\n \"bg-muted font-medium text-muted-foreground uppercase\"\n )}\n >\n {fallback ?? (alt ? alt.slice(0, 2) : \"?\")}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n {status && (\n <span\n aria-label={`Status: ${status}`}\n className={cn(\n \"absolute bottom-0 right-0 block rounded-full ring-2 ring-background\",\n size === \"xs\" || size === \"sm\" ? \"h-2 w-2\" : \"h-2.5 w-2.5\",\n status === \"online\" && \"bg-success\",\n status === \"offline\" && \"bg-muted-foreground\",\n status === \"busy\" && \"bg-destructive\",\n status === \"away\" && \"bg-warning\"\n )}\n />\n )}\n </div>\n));\nAvatar.displayName = \"Avatar\";\n\n// ─── AvatarGroup ──────────────────────────────────────────────────────────\n\nexport interface AvatarGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"size\"> {\n max?: number;\n size?: AvatarProps[\"size\"];\n spacing?: \"tight\" | \"normal\" | \"loose\";\n}\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, children, max, size = \"md\", spacing = \"tight\", ...props }, ref) => {\n const validChildren = React.Children.toArray(children).filter(React.isValidElement);\n const visible = max ? validChildren.slice(0, max) : validChildren;\n const overflow = max ? validChildren.length - max : 0;\n\n const spacingMap = { tight: \"-space-x-2\", normal: \"-space-x-1\", loose: \"space-x-1\" };\n\n return (\n <div\n ref={ref}\n className={cn(\"atlas-avatar-group flex items-center\", spacingMap[spacing], className)}\n {...props}\n >\n {visible.map((child, i) =>\n React.cloneElement(child as React.ReactElement<AvatarProps>, {\n key: i,\n size,\n className: cn(\n \"ring-2 ring-background\",\n (child as React.ReactElement<AvatarProps>).props.className\n ),\n })\n )}\n {overflow > 0 && (\n <span\n className={cn(\n \"atlas-avatar relative flex shrink-0 items-center justify-center rounded-full\",\n \"bg-muted text-muted-foreground font-medium ring-2 ring-background\",\n avatarSizes[size]\n )}\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n }\n);\nAvatarGroup.displayName = \"AvatarGroup\";\n\n// ─── Divider ──────────────────────────────────────────────────────────────\n\nexport interface DividerProps\n extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {\n label?: React.ReactNode;\n labelPosition?: \"left\" | \"center\" | \"right\";\n}\n\nconst Divider = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n DividerProps\n>(\n ({ className, orientation = \"horizontal\", label, labelPosition = \"center\", ...props }, ref) => {\n if (!label) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n orientation={orientation}\n className={cn(\n \"atlas-divider shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className\n )}\n {...props}\n />\n );\n }\n\n return (\n <div\n className={cn(\n \"atlas-divider relative flex items-center gap-3 w-full\",\n className\n )}\n role=\"separator\"\n >\n {labelPosition !== \"left\" && <span className=\"flex-1 bg-border h-px\" />}\n <span className=\"text-xs text-muted-foreground whitespace-nowrap\">{label}</span>\n {labelPosition !== \"right\" && <span className=\"flex-1 bg-border h-px\" />}\n </div>\n );\n }\n);\nDivider.displayName = \"Divider\";\n\n// ─── Tag ──────────────────────────────────────────────────────────────────\n\nexport interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\" | \"size\"> {\n closable?: boolean;\n onClose?: () => void;\n icon?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"solid\" | \"outline\" | \"soft\";\n color?: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"neutral\";\n}\n\nconst Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ className, closable, onClose, icon, size = \"md\", variant = \"soft\", color = \"neutral\", children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n \"atlas-tag inline-flex items-center gap-1 rounded font-medium\",\n size === \"sm\" && \"px-1.5 py-0.5 text-[10px]\",\n size === \"md\" && \"px-2 py-1 text-xs\",\n size === \"lg\" && \"px-3 py-1.5 text-sm\",\n variant === \"soft\" && color === \"neutral\" && \"bg-muted text-muted-foreground\",\n variant === \"soft\" && color === \"primary\" && \"bg-primary/10 text-primary\",\n variant === \"soft\" && color === \"success\" && \"bg-success/10 text-success\",\n variant === \"soft\" && color === \"warning\" && \"bg-warning/10 text-warning\",\n variant === \"soft\" && color === \"danger\" && \"bg-destructive/10 text-destructive\",\n variant === \"outline\" && \"border border-current bg-transparent\",\n variant === \"solid\" && color === \"neutral\" && \"bg-muted-foreground text-background\",\n className\n )}\n {...props}\n >\n {icon && <span className=\"shrink-0\" aria-hidden=\"true\">{icon}</span>}\n {children}\n {closable && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"ml-0.5 rounded-full hover:bg-black/10 dark:hover:bg-white/10 p-0.5 transition-colors\"\n aria-label=\"Remove tag\"\n >\n <svg className=\"h-2.5 w-2.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2.5} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </span>\n )\n);\nTag.displayName = \"Tag\";\n\n// ─── Chip ──────────────────────────────────────────────────────────────────\n\nexport interface ChipProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n avatar?: React.ReactNode;\n icon?: React.ReactNode;\n closable?: boolean;\n onClose?: (e: React.MouseEvent) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(\n ({ className, selected, avatar, icon, closable, onClose, size = \"md\", children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"atlas-chip inline-flex items-center gap-1.5 rounded-full font-medium\",\n \"border transition-all duration-150 cursor-pointer\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n size === \"sm\" && \"h-6 px-2 text-xs\",\n size === \"md\" && \"h-8 px-3 text-sm\",\n size === \"lg\" && \"h-9 px-4 text-sm\",\n selected\n ? \"bg-primary text-primary-foreground border-primary\"\n : \"bg-background text-foreground border-border hover:bg-accent\",\n className\n )}\n aria-pressed={selected}\n {...props}\n >\n {avatar && <span className=\"shrink-0 -ml-0.5\">{avatar}</span>}\n {icon && !avatar && <span className=\"shrink-0 [&>svg]:h-3.5 [&>svg]:w-3.5\" aria-hidden=\"true\">{icon}</span>}\n {children}\n {closable && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onClose?.(e); }}\n className=\"shrink-0 -mr-0.5 rounded-full hover:bg-black/10 dark:hover:bg-white/10 p-0.5\"\n aria-label=\"Remove\"\n >\n <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2.5} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </span>\n )}\n </button>\n )\n);\nChip.displayName = \"Chip\";\n\n// ─── Tooltip ──────────────────────────────────────────────────────────────\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst TooltipRoot = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"atlas-tooltip z-50 overflow-hidden rounded-md\",\n \"bg-foreground px-3 py-1.5 text-xs text-background shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n delayDuration?: number;\n className?: string;\n}\n\nconst Tooltip = ({ content, children, side = \"top\", delayDuration = 300, className }: TooltipProps) => (\n <TooltipProvider>\n <TooltipRoot delayDuration={delayDuration}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className={className}>{content}</TooltipContent>\n </TooltipRoot>\n </TooltipProvider>\n);\nTooltip.displayName = \"Tooltip\";\n\nexport {\n Link,\n Badge, badgeVariants,\n Avatar,\n AvatarGroup,\n Divider,\n Tag,\n Chip,\n Tooltip, TooltipProvider, TooltipRoot, TooltipTrigger, TooltipContent,\n};\n"],"mappings":"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","names":["React","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime"]}