@jameskabz/nextcraft-ui 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/craft/components.cjs +64 -1779
  2. package/dist/craft/components.cjs.map +1 -1
  3. package/dist/craft/components.js +31 -42
  4. package/dist/craft/components.js.map +1 -1
  5. package/dist/craft/forms.cjs +6 -1347
  6. package/dist/craft/forms.cjs.map +1 -1
  7. package/dist/craft/forms.js +3 -8
  8. package/dist/craft/forms.js.map +1 -1
  9. package/dist/craft/layout.cjs +20 -374
  10. package/dist/craft/layout.cjs.map +1 -1
  11. package/dist/craft/layout.js +10 -14
  12. package/dist/craft/layout.js.map +1 -1
  13. package/dist/craft/table.cjs +8 -632
  14. package/dist/craft/table.cjs.map +1 -1
  15. package/dist/craft/table.js +4 -8
  16. package/dist/craft/table.js.map +1 -1
  17. package/dist/craft/theme.cjs +5 -137
  18. package/dist/craft/theme.cjs.map +1 -1
  19. package/dist/craft/theme.js +2 -6
  20. package/dist/craft/theme.js.map +1 -1
  21. package/dist/index.cjs +103 -3426
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.js +50 -70
  24. package/dist/index.js.map +1 -1
  25. package/dist/styles.css +0 -31
  26. package/package.json +6 -1
  27. package/dist/chunk-6F7FN2ZF.js +0 -671
  28. package/dist/chunk-6F7FN2ZF.js.map +0 -1
  29. package/dist/chunk-7Q4Z47HT.js +0 -657
  30. package/dist/chunk-7Q4Z47HT.js.map +0 -1
  31. package/dist/chunk-7SKDTIEK.js +0 -49
  32. package/dist/chunk-7SKDTIEK.js.map +0 -1
  33. package/dist/chunk-FEFH5O5K.js +0 -49
  34. package/dist/chunk-FEFH5O5K.js.map +0 -1
  35. package/dist/chunk-M2EKVXB6.js +0 -127
  36. package/dist/chunk-M2EKVXB6.js.map +0 -1
  37. package/dist/chunk-SBLIF6UU.js +0 -1029
  38. package/dist/chunk-SBLIF6UU.js.map +0 -1
  39. package/dist/chunk-VQ6T3HIX.js +0 -9
  40. package/dist/chunk-VQ6T3HIX.js.map +0 -1
  41. package/dist/chunk-YVZL4GET.js +0 -328
  42. package/dist/chunk-YVZL4GET.js.map +0 -1
  43. package/dist/chunk-ZRV4Y374.js +0 -582
  44. package/dist/chunk-ZRV4Y374.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/glass-card.tsx","../src/components/craft-badge.tsx","../src/components/craft-alert.tsx","../src/components/craft-error-state.tsx","../src/components/craft-loading-state.tsx","../src/components/craft-card.tsx","../src/components/craft-drawer.tsx","../src/components/craft-tabs.tsx","../src/components/craft-tooltip.tsx","../src/components/craft-toast.tsx","../src/components/craft-skeleton.tsx","../src/components/craft-empty-state.tsx","../src/components/craft-popover.tsx","../src/components/craft-dropdown-menu.tsx","../src/components/craft-command-palette.tsx","../src/components/craft-link.tsx","../src/components/craft-stat-card.tsx","../src/components/craft-confirm-dialog.tsx","../src/components/craft-create-edit-drawer.tsx"],"sourcesContent":["import { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type GlassCardProps = React.HTMLAttributes<HTMLDivElement> & {\n tone?: ThemeName;\n intensity?: \"subtle\" | \"medium\" | \"strong\";\n bordered?: boolean;\n};\n\nconst intensityClasses: Record<NonNullable<GlassCardProps[\"intensity\"]>, string> = {\n subtle: \"backdrop-blur-md bg-opacity-50\",\n medium: \"backdrop-blur-xl bg-opacity-70\",\n strong: \"backdrop-blur-2xl bg-opacity-90\",\n};\n\nexport function GlassCard({\n className,\n tone,\n intensity = \"medium\",\n bordered = true,\n children,\n ...props\n}: GlassCardProps) {\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-3xl p-6 text-[rgb(var(--nc-fg))]\",\n \"shadow-[0_8px_32px_rgba(0,0,0,0.3)]\",\n \"transition-all duration-300\",\n \"hover:shadow-[0_8px_40px_rgba(0,0,0,0.4)]\",\n intensityClasses[intensity],\n \"bg-linear-to-br from-[rgb(var(--nc-accent-1)/0.15)] via-[rgb(var(--nc-accent-2)/0.10)] to-[rgb(var(--nc-accent-3)/0.15)]\",\n \"border-[rgb(var(--nc-accent-1)/0.3)]\",\n bordered ? \"border-2\" : \"border-0\",\n \"before:absolute before:inset-0 before:bg-linear-to-br before:from-white/10 before:to-transparent before:opacity-0 hover:before:opacity-100 before:transition-opacity before:duration-300\",\n className\n )}\n data-nc-theme={tone}\n {...props}\n >\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftBadgeVariant = \"solid\" | \"soft\" | \"outline\";\n\nexport type CraftBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n variant?: CraftBadgeVariant;\n tone?: ThemeName;\n};\n\nconst variantClasses: Record<CraftBadgeVariant, string> = {\n solid:\n \"bg-[color:rgb(var(--nc-accent-1))] text-white shadow-[0_10px_20px_rgb(var(--nc-accent-1)/0.35)]\",\n soft:\n \"bg-[color:rgb(var(--nc-accent-1)/0.2)] text-[rgb(var(--nc-fg))]\",\n outline:\n \"border border-[color:rgb(var(--nc-accent-1)/0.6)] text-[rgb(var(--nc-fg))]\",\n};\n\nexport function CraftBadge({\n className,\n variant = \"soft\",\n tone,\n ...props\n}: CraftBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide\",\n variantClasses[variant],\n className\n )}\n data-nc-theme={tone}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\ntype CraftAlertVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport type CraftAlertProps = React.HTMLAttributes<HTMLDivElement> & {\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: CraftAlertVariant;\n icon?: React.ReactNode;\n actions?: React.ReactNode;\n tone?: ThemeName;\n};\n\nconst variantClasses: Record<CraftAlertVariant, string> = {\n info: \"border-[rgb(var(--nc-accent-1)/0.45)] bg-[rgb(var(--nc-accent-1)/0.12)]\",\n success: \"border-[rgb(var(--nc-accent-2)/0.45)] bg-[rgb(var(--nc-accent-2)/0.12)]\",\n warning: \"border-[rgb(var(--nc-accent-3)/0.45)] bg-[rgb(var(--nc-accent-3)/0.12)]\",\n error: \"border-[rgb(var(--nc-accent-3)/0.65)] bg-[rgb(var(--nc-accent-3)/0.18)]\",\n};\n\nexport function CraftAlert({\n title,\n description,\n variant = \"info\",\n icon,\n actions,\n tone,\n className,\n ...props\n}: CraftAlertProps) {\n return (\n <div\n className={cn(\n \"rounded-2xl border p-4 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n variantClasses[variant],\n className\n )}\n data-nc-theme={tone}\n {...props}\n >\n <div className=\"flex items-start gap-3\">\n {icon && <div className=\"mt-1 text-[rgb(var(--nc-fg))]\">{icon}</div>}\n <div className=\"space-y-1\">\n {title && <p className=\"text-sm font-semibold\">{title}</p>}\n {description && (\n <p className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">\n {description}\n </p>\n )}\n </div>\n </div>\n {actions && <div className=\"mt-3 flex flex-wrap gap-2\">{actions}</div>}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\nimport { CraftButton } from \"@/components/craft-button\";\n\nexport type CraftErrorStateProps = React.HTMLAttributes<HTMLDivElement> & {\n title?: React.ReactNode;\n description?: React.ReactNode;\n actionLabel?: React.ReactNode;\n onAction?: () => void;\n action?: React.ReactNode;\n tone?: ThemeName;\n};\n\nexport function CraftErrorState({\n title = \"Something went wrong\",\n description = \"Try again or check your connection.\",\n actionLabel = \"Retry\",\n onAction,\n action,\n tone,\n className,\n ...props\n}: CraftErrorStateProps) {\n return (\n <div\n className={cn(\n \"rounded-3xl border border-[rgb(var(--nc-border)/0.35)] bg-[rgb(var(--nc-surface)/0.12)] p-6 text-[rgb(var(--nc-fg))] shadow-[0_12px_30px_rgba(0,0,0,0.25)] backdrop-blur-xl\",\n className\n )}\n data-nc-theme={tone}\n {...props}\n >\n <div className=\"space-y-2\">\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n <p className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">{description}</p>\n </div>\n <div className=\"mt-4\">\n {action ??\n (onAction && (\n <CraftButton size=\"sm\" onClick={onAction}>\n {actionLabel}\n </CraftButton>\n ))}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\ntype CraftLoadingSize = \"sm\" | \"md\" | \"lg\";\n\nexport type CraftLoadingStateProps = React.HTMLAttributes<HTMLDivElement> & {\n label?: React.ReactNode;\n size?: CraftLoadingSize;\n tone?: ThemeName;\n};\n\nconst sizeClasses: Record<CraftLoadingSize, string> = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-[3px]\",\n};\n\nexport function CraftLoadingState({\n label = \"Loading...\",\n size = \"md\",\n tone,\n className,\n ...props\n}: CraftLoadingStateProps) {\n return (\n <div\n className={cn(\"flex items-center gap-3 text-[rgb(var(--nc-fg))]\", className)}\n data-nc-theme={tone}\n {...props}\n >\n <span\n className={cn(\n \"inline-block animate-spin rounded-full border-[rgb(var(--nc-accent-1)/0.25)] border-t-[rgb(var(--nc-accent-1))]\",\n sizeClasses[size]\n )}\n aria-hidden=\"true\"\n />\n {label && <span className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">{label}</span>}\n </div>\n );\n}\n","import { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftCardProps = React.HTMLAttributes<HTMLDivElement> & {\n tone?: ThemeName;\n elevated?: boolean;\n intensity?: \"subtle\" | \"medium\" | \"strong\";\n bordered?: boolean;\n};\n\nconst intensityClasses: Record<NonNullable<CraftCardProps[\"intensity\"]>, string> = {\n subtle: \"backdrop-blur-md bg-opacity-50\",\n medium: \"backdrop-blur-xl bg-opacity-70\",\n strong: \"backdrop-blur-2xl bg-opacity-90\",\n};\n\nexport function CraftCard({\n className,\n tone,\n elevated = true,\n intensity = \"medium\",\n bordered = true,\n children,\n ...props\n}: CraftCardProps) {\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-3xl p-6 text-[rgb(var(--nc-fg))]\",\n intensityClasses[intensity],\n \"bg-linear-to-br from-[rgb(var(--nc-accent-1)/0.15)] via-[rgb(var(--nc-accent-2)/0.10)] to-[rgb(var(--nc-accent-3)/0.15)]\",\n bordered ? \"border-2 border-[rgb(var(--nc-accent-1)/0.3)]\" : \"border-0\",\n elevated\n ? \"shadow-[0_8px_32px_rgba(0,0,0,0.3)] hover:shadow-[0_8px_40px_rgba(0,0,0,0.4)]\"\n : \"shadow-none\",\n \"before:absolute before:inset-0 before:bg-linear-to-br before:from-white/10 before:to-transparent before:opacity-0 hover:before:opacity-100 before:transition-opacity before:duration-300\",\n \"transition-all duration-300\",\n className\n )}\n data-nc-theme={tone}\n {...props}\n >\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftDrawerProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n tone?: ThemeName;\n side?: \"right\" | \"left\";\n title?: React.ReactNode;\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n};\n\nexport function CraftDrawer({\n open,\n defaultOpen = false,\n onOpenChange,\n tone,\n side = \"left\",\n title,\n children,\n trigger,\n footer,\n className,\n}: CraftDrawerProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = typeof open === \"boolean\";\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n React.useEffect(() => {\n if (!isOpen) return;\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [isOpen, setOpen]);\n\n const content = isOpen ? (\n <div className=\"fixed inset-0 z-50 overflow-hidden\">\n <div\n className=\"absolute inset-0 backdrop-blur-sm\"\n onClick={() => setOpen(false)}\n />\n <div\n className={cn(\n \"absolute top-0 h-full w-full max-w-md border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.12)] text-[rgb(var(--nc-fg))] shadow-[0_20px_60px_rgba(0,0,0,0.45)] backdrop-blur-2xl\",\n side === \"right\" ? \"right-0\" : \"left-0\",\n className\n )}\n data-nc-theme={tone}\n >\n <div className=\"flex items-center justify-between border-b border-[rgb(var(--nc-border)/0.3)] p-6\">\n {title && <h3 className=\"text-xl font-semibold\">{title}</h3>}\n <button\n className=\"rounded-full border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.12)] p-2 text-[rgb(var(--nc-fg-soft))] transition hover:text-[rgb(var(--nc-fg))]\"\n onClick={() => setOpen(false)}\n aria-label=\"Close\"\n >\n <svg viewBox=\"0 0 20 20\" className=\"h-4 w-4\" fill=\"currentColor\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n <div className=\"p-6 space-y-4 overflow-y-auto h-[calc(100%-5.5rem)]\">\n {children}\n </div>\n {footer && <div className=\"border-t border-[rgb(var(--nc-border)/0.3)] p-6\">{footer}</div>}\n </div>\n </div>\n ) : null;\n\n return (\n <>\n {trigger && (\n <span\n onClick={() => setOpen(true)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") setOpen(true);\n }}\n role=\"button\"\n tabIndex={0}\n className=\"inline-flex\"\n >\n {trigger}\n </span>\n )}\n {typeof document !== \"undefined\" && content\n ? createPortal(content, document.body)\n : content}\n </>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftTabsProps = {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n tone?: ThemeName;\n tabs: Array<{ value: string; label: React.ReactNode }>\n panels: Record<string, React.ReactNode>;\n className?: string;\n};\n\nexport function CraftTabs({\n value,\n defaultValue,\n onValueChange,\n tone,\n tabs,\n panels,\n className,\n}: CraftTabsProps) {\n const fallback = tabs[0]?.value ?? \"\";\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue ?? fallback\n );\n const isControlled = value !== undefined;\n const activeValue = isControlled ? value : uncontrolledValue;\n\n const setValue = React.useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange]\n );\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!tabs.length) return;\n const currentIndex = tabs.findIndex((tab) => tab.value === activeValue);\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n const next = tabs[(currentIndex + 1) % tabs.length];\n setValue(next.value);\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n const next = tabs[(currentIndex - 1 + tabs.length) % tabs.length];\n setValue(next.value);\n }\n };\n\n return (\n <div className={cn(\"space-y-4\", className)} data-nc-theme={tone}>\n <div\n className=\"inline-flex flex-wrap items-center gap-2 rounded-full border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-2\"\n role=\"tablist\"\n onKeyDown={onKeyDown}\n >\n {tabs.map((tab) => (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={activeValue === tab.value}\n onClick={() => setValue(tab.value)}\n className={cn(\n \"rounded-full px-4 py-2 text-sm font-semibold transition-all\",\n activeValue === tab.value\n ? \"bg-[rgb(var(--nc-accent-1)/0.65)] text-white shadow-[0_7px_5px_rgb(var(--nc-accent-1)/0.35)]\"\n : \"text-[rgb(var(--nc-fg-muted))] hover:text-[rgb(var(--nc-fg))]\"\n )}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div className=\"rounded-2xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-4 text-[rgb(var(--nc-fg))]\">\n {panels[activeValue]}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftTooltipProps = {\n content: React.ReactNode;\n tone?: ThemeName;\n children: React.ReactElement;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport function CraftTooltip({ content, tone, children, side = \"top\" }: CraftTooltipProps) {\n const [open, setOpen] = React.useState(false);\n\n return (\n <span\n className=\"relative inline-flex\"\n onMouseEnter={() => setOpen(true)}\n onMouseLeave={() => setOpen(false)}\n onFocus={() => setOpen(true)}\n onBlur={() => setOpen(false)}\n >\n {children}\n <span\n className={cn(\n \"pointer-events-none absolute z-20 whitespace-nowrap rounded-lg border border-white/10 bg-black/80 px-3 py-2 text-xs text-white shadow-lg transition-all\",\n \"backdrop-blur-xl\",\n open ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-1\",\n side === \"top\" && \"bottom-full left-1/2 -translate-x-1/2 -translate-y-2\",\n side === \"bottom\" && \"top-full left-1/2 -translate-x-1/2 translate-y-2\",\n side === \"left\" && \"right-full top-1/2 -translate-y-1/2 -translate-x-2\",\n side === \"right\" && \"left-full top-1/2 -translate-y-1/2 translate-x-2\"\n )}\n data-nc-theme={tone}\n role=\"tooltip\"\n >\n {content}\n </span>\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftToastVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport type CraftToast = {\n id: string;\n title: string;\n description?: string;\n variant?: CraftToastVariant;\n};\n\nconst variantClasses: Record<CraftToastVariant, string> = {\n info: \"border-[color:rgb(var(--nc-accent-1)/0.4)]\",\n success: \"border-emerald-400/40\",\n warning: \"border-amber-400/40\",\n error: \"border-rose-400/40\",\n};\n\nexport function useCraftToast() {\n const [toasts, setToasts] = React.useState<CraftToast[]>([]);\n\n const push = React.useCallback((toast: Omit<CraftToast, \"id\">) => {\n const id = `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n setToasts((prev) => [...prev, { ...toast, id }]);\n return id;\n }, []);\n\n const remove = React.useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n return { toasts, push, remove };\n}\n\nexport type CraftToastHostProps = {\n toasts: CraftToast[];\n onDismiss: (id: string) => void;\n tone?: ThemeName;\n};\n\nexport function CraftToastHost({ toasts, onDismiss, tone }: CraftToastHostProps) {\n return (\n <div\n className=\"fixed right-6 top-6 z-50 flex w-full max-w-sm flex-col gap-3\"\n data-nc-theme={tone}\n >\n {toasts.map((toast) => (\n <div\n key={toast.id}\n className={cn(\n \"rounded-2xl border bg-[rgb(var(--nc-surface)/0.12)] p-4 text-[rgb(var(--nc-fg))] shadow-[0_15px_35px_rgba(0,0,0,0.35)] backdrop-blur-xl\",\n variantClasses[toast.variant ?? \"info\"]\n )}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n <p className=\"text-sm font-semibold\">{toast.title}</p>\n {toast.description && (\n <p className=\"text-xs text-[rgb(var(--nc-fg-muted))]\">{toast.description}</p>\n )}\n </div>\n <button\n className=\"text-[rgb(var(--nc-fg-soft))] hover:text-[rgb(var(--nc-fg))]\"\n onClick={() => onDismiss(toast.id)}\n >\n ✕\n </button>\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftSkeletonProps = React.HTMLAttributes<HTMLDivElement> & {\n tone?: ThemeName;\n};\n\nexport function CraftSkeleton({ className, tone, ...props }: CraftSkeletonProps) {\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-2xl bg-[rgb(var(--nc-surface)/0.12)]\",\n \"after:absolute after:inset-0 after:-translate-x-full after:bg-linear-to-r after:from-transparent after:via-white/20 after:to-transparent\",\n \"after:animate-[shimmer_1.6s_infinite]\",\n className\n )}\n data-nc-theme={tone}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\nexport type CraftEmptyStateProps = React.HTMLAttributes<HTMLDivElement> & {\n tone?: ThemeName;\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n};\n\nexport function CraftEmptyState({\n className,\n tone,\n title,\n description,\n icon,\n action,\n ...props\n}: CraftEmptyStateProps) {\n return (\n <div\n className={cn(\n \"rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-8 text-center text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n \"shadow-[0_18px_40px_rgba(0,0,0,0.25)]\",\n className\n )}\n data-nc-theme={tone}\n {...props}\n >\n {icon && (\n <div className=\"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-2xl bg-[rgb(var(--nc-accent-1)/0.2)] text-[rgb(var(--nc-accent-1))]\">\n {icon}\n </div>\n )}\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n {description && <p className=\"mt-2 text-sm text-[rgb(var(--nc-fg-muted))]\">{description}</p>}\n {action && <div className=\"mt-6 flex justify-center\">{action}</div>}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\ntype PopoverAlign = \"start\" | \"center\" | \"end\";\n\nexport type CraftPopoverProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger: React.ReactNode;\n content: React.ReactNode;\n align?: PopoverAlign;\n sideOffset?: number;\n tone?: ThemeName;\n className?: string;\n contentClassName?: string;\n};\n\nconst alignClasses: Record<PopoverAlign, string> = {\n start: \"left-0\",\n center: \"left-1/2 -translate-x-1/2\",\n end: \"right-0\",\n};\n\nexport function CraftPopover({\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n content,\n align = \"start\",\n sideOffset = 10,\n tone,\n className,\n contentClassName,\n}: CraftPopoverProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = typeof open === \"boolean\";\n const isOpen = isControlled ? open : uncontrolledOpen;\n const rootRef = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n React.useEffect(() => {\n if (!isOpen) return;\n const handleClick = (event: MouseEvent) => {\n if (!rootRef.current) return;\n if (!rootRef.current.contains(event.target as Node)) setOpen(false);\n };\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [isOpen, setOpen]);\n\n type TriggerProps = { onClick?: (event: React.MouseEvent) => void; \"aria-expanded\"?: boolean; \"aria-haspopup\"?: string };\n const triggerNode = React.isValidElement(trigger)\n ? React.cloneElement(trigger as React.ReactElement<TriggerProps>, {\n onClick: (event: React.MouseEvent) => {\n const handler = (trigger.props as TriggerProps).onClick;\n handler?.(event);\n if (!event.defaultPrevented) setOpen(!isOpen);\n },\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"dialog\",\n })\n : (\n <button\n type=\"button\"\n onClick={() => setOpen(!isOpen)}\n className=\"inline-flex\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n >\n {trigger}\n </button>\n );\n\n return (\n <div className={cn(\"relative inline-flex\", className)} ref={rootRef}>\n {triggerNode}\n {isOpen && (\n <div\n className={cn(\n \"absolute z-40 w-max min-w-48 rounded-2xl border border-[rgb(var(--nc-border)/0.35)] bg-[rgb(var(--nc-surface)/0.08)] p-3 text-[rgb(var(--nc-fg))] shadow-[0_18px_40px_rgba(0,0,0,0.35)] backdrop-blur-2xl\",\n alignClasses[align],\n contentClassName\n )}\n style={{ marginTop: sideOffset }}\n role=\"dialog\"\n data-nc-theme={tone}\n >\n {content}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\nimport { CraftPopover } from \"@/components/craft-popover\";\n\nexport type CraftDropdownItem = {\n id?: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n href?: string;\n onSelect?: () => void;\n disabled?: boolean;\n};\n\nexport type CraftDropdownMenuProps = {\n trigger: React.ReactNode;\n items?: CraftDropdownItem[];\n content?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n align?: \"start\" | \"center\" | \"end\";\n tone?: ThemeName;\n className?: string;\n menuClassName?: string;\n};\n\nexport function CraftDropdownMenu({\n trigger,\n items = [],\n content,\n open,\n defaultOpen = false,\n onOpenChange,\n align = \"end\",\n tone,\n className,\n menuClassName,\n}: CraftDropdownMenuProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = typeof open === \"boolean\";\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const menuContent =\n content ??\n (items.length ? (\n <div className={cn(\"space-y-1\", menuClassName)} role=\"menu\">\n {items.map((item, index) => {\n const key = item.id ?? `${index}-${String(item.label)}`;\n const itemClasses = cn(\n \"flex w-full items-start gap-3 rounded-xl px-3 py-2 text-left text-sm transition\",\n item.disabled\n ? \"cursor-not-allowed text-[rgb(var(--nc-fg-soft))] opacity-60\"\n : \"text-[rgb(var(--nc-fg))] hover:bg-[rgb(var(--nc-surface)/0.12)]\"\n );\n const contentNode = (\n <>\n {item.icon && <span className=\"mt-0.5\">{item.icon}</span>}\n <span className=\"flex-1\">\n <span className=\"block font-medium\">{item.label}</span>\n {item.description && (\n <span className=\"block text-xs text-[rgb(var(--nc-fg-muted))]\">\n {item.description}\n </span>\n )}\n </span>\n </>\n );\n\n if (item.href) {\n return (\n <a\n key={key}\n href={item.href}\n className={itemClasses}\n role=\"menuitem\"\n onClick={() => {\n if (item.disabled) return;\n item.onSelect?.();\n setOpen(false);\n }}\n >\n {contentNode}\n </a>\n );\n }\n\n return (\n <button\n key={key}\n type=\"button\"\n className={itemClasses}\n role=\"menuitem\"\n onClick={() => {\n if (item.disabled) return;\n item.onSelect?.();\n setOpen(false);\n }}\n >\n {contentNode}\n </button>\n );\n })}\n </div>\n ) : null);\n\n return (\n <CraftPopover\n trigger={trigger}\n content={menuContent}\n open={isOpen}\n onOpenChange={setOpen}\n align={align}\n tone={tone}\n className={className}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\nimport { CraftInput } from \"@/components/craft-input\";\nimport { CraftModal } from \"@/components/craft-modal\";\n\nexport type CraftCommandItem = {\n id: string;\n label: string;\n description?: string;\n keywords?: string[];\n icon?: React.ReactNode;\n onSelect?: () => void;\n disabled?: boolean;\n};\n\nexport type CraftCommandPaletteProps = {\n items: CraftCommandItem[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n title?: React.ReactNode;\n placeholder?: string;\n emptyText?: React.ReactNode;\n tone?: ThemeName;\n className?: string;\n};\n\nexport function CraftCommandPalette({\n items,\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n title = \"Command Palette\",\n placeholder = \"Search commands...\",\n emptyText = \"No results found.\",\n tone,\n className,\n}: CraftCommandPaletteProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = typeof open === \"boolean\";\n const isOpen = isControlled ? open : uncontrolledOpen;\n const [query, setQuery] = React.useState(\"\");\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter((item) => {\n const haystack = [\n item.label,\n item.description ?? \"\",\n ...(item.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n });\n }, [items, query]);\n\n React.useEffect(() => {\n if (!isOpen) setQuery(\"\");\n }, [isOpen]);\n\n return (\n <CraftModal\n open={isOpen}\n onOpenChange={setOpen}\n trigger={trigger}\n title={title}\n tone={tone}\n className={cn(\"max-w-xl\", className)}\n >\n <div className=\"space-y-4\">\n <CraftInput\n type=\"search\"\n placeholder={placeholder}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n <div className=\"space-y-2\">\n {filtered.length === 0 && (\n <div className=\"rounded-2xl border border-[rgb(var(--nc-border)/0.35)] bg-[rgb(var(--nc-surface)/0.12)] p-4 text-sm text-[rgb(var(--nc-fg-muted))]\">\n {emptyText}\n </div>\n )}\n {filtered.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n onClick={() => {\n if (item.disabled) return;\n item.onSelect?.();\n setOpen(false);\n }}\n className={cn(\n \"flex w-full items-start gap-3 rounded-2xl border border-[rgb(var(--nc-border)/0.35)] bg-[rgb(var(--nc-surface)/0.08)] px-4 py-3 text-left transition\",\n item.disabled\n ? \"cursor-not-allowed opacity-60\"\n : \"hover:bg-[rgb(var(--nc-surface)/0.16)]\"\n )}\n >\n {item.icon && <span className=\"mt-1\">{item.icon}</span>}\n <span>\n <span className=\"block text-sm font-semibold\">{item.label}</span>\n {item.description && (\n <span className=\"block text-xs text-[rgb(var(--nc-fg-muted))]\">\n {item.description}\n </span>\n )}\n </span>\n </button>\n ))}\n </div>\n </div>\n </CraftModal>\n );\n}\n","import * as React from \"react\";\nimport Link, { type LinkProps } from \"next/link\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\n\ntype CraftLinkVariant = \"default\" | \"muted\" | \"button\" | \"ghost\";\n\nexport type CraftLinkProps = LinkProps &\n React.AnchorHTMLAttributes<HTMLAnchorElement> & {\n variant?: CraftLinkVariant;\n underline?: boolean;\n tone?: ThemeName;\n };\n\nconst variantClasses: Record<CraftLinkVariant, string> = {\n default:\n \"text-[rgb(var(--nc-accent-1))] hover:text-[rgb(var(--nc-accent-1))]\",\n muted: \"text-[rgb(var(--nc-fg-muted))] hover:text-[rgb(var(--nc-fg))]\",\n button:\n \"inline-flex items-center rounded-xl border border-[rgb(var(--nc-border)/0.35)] bg-[rgb(var(--nc-surface)/0.12)] px-4 py-2 text-sm font-semibold text-[rgb(var(--nc-fg))] transition hover:bg-[rgb(var(--nc-surface)/0.2)]\",\n ghost:\n \"inline-flex items-center rounded-xl px-4 py-2 text-sm font-semibold text-[rgb(var(--nc-fg))] transition hover:bg-[rgb(var(--nc-surface)/0.18)]\",\n};\n\nexport function CraftLink({\n variant = \"default\",\n underline = false,\n tone,\n className,\n children,\n ...props\n}: CraftLinkProps) {\n return (\n <Link\n className={cn(\n \"transition-colors\",\n variantClasses[variant],\n underline && \"underline underline-offset-4\",\n className\n )}\n data-nc-theme={tone}\n {...props}\n >\n {children}\n </Link>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\nimport { CraftCard } from \"@/components/craft-card\";\n\ntype CraftStatTrend = \"up\" | \"down\" | \"neutral\";\n\nexport type CraftStatCardProps = React.HTMLAttributes<HTMLDivElement> & {\n label: React.ReactNode;\n value: React.ReactNode;\n delta?: React.ReactNode;\n trend?: CraftStatTrend;\n icon?: React.ReactNode;\n footer?: React.ReactNode;\n tone?: ThemeName;\n};\n\nconst trendClasses: Record<CraftStatTrend, string> = {\n up: \"text-emerald-300\",\n down: \"text-rose-300\",\n neutral: \"text-[rgb(var(--nc-fg-muted))]\",\n};\n\nexport function CraftStatCard({\n label,\n value,\n delta,\n trend = \"neutral\",\n icon,\n footer,\n tone,\n className,\n ...props\n}: CraftStatCardProps) {\n return (\n <CraftCard\n className={cn(\"space-y-3\", className)}\n tone={tone}\n {...props}\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">{label}</p>\n {icon && <div className=\"text-[rgb(var(--nc-fg-soft))]\">{icon}</div>}\n </div>\n <p className=\"text-3xl font-semibold\">{value}</p>\n <div className=\"flex items-center justify-between text-xs\">\n {delta && <span className={trendClasses[trend]}>{delta}</span>}\n {footer && <span className=\"text-[rgb(var(--nc-fg-muted))]\">{footer}</span>}\n </div>\n </CraftCard>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\nimport { CraftModal } from \"@/components/craft-modal\";\nimport { CraftButton } from \"@/components/craft-button\";\n\nexport type CraftConfirmDialogProps = {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n tone?: ThemeName;\n title?: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n onConfirm?: () => void | Promise<void>;\n trigger?: React.ReactNode;\n className?: string;\n confirmVariant?: \"solid\" | \"gradient\" | \"outline\";\n};\n\nexport function CraftConfirmDialog({\n open,\n defaultOpen = false,\n onOpenChange,\n tone,\n title = \"Confirm action\",\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n trigger,\n className,\n confirmVariant = \"solid\",\n}: CraftConfirmDialogProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = typeof open === \"boolean\";\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const [isLoading, setIsLoading] = React.useState(false);\n\n const handleConfirm = async () => {\n if (!onConfirm) {\n setOpen(false);\n return;\n }\n setIsLoading(true);\n await onConfirm();\n setIsLoading(false);\n setOpen(false);\n };\n\n return (\n <CraftModal\n open={isOpen}\n onOpenChange={setOpen}\n trigger={trigger}\n title={title}\n description={description}\n tone={tone}\n className={cn(\"max-w-md\", className)}\n footer={\n <div className=\"flex flex-wrap items-center justify-end gap-3\">\n <CraftButton\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setOpen(false)}\n >\n {cancelLabel}\n </CraftButton>\n <CraftButton\n type=\"button\"\n variant={confirmVariant}\n disabled={isLoading}\n onClick={handleConfirm}\n >\n {isLoading ? \"Working...\" : confirmLabel}\n </CraftButton>\n </div>\n }\n >\n <div className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">\n {description}\n </div>\n </CraftModal>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { FormProvider, type FieldValues, type UseFormReturn } from \"react-hook-form\";\n\nimport { cn } from \"@/utils/cn\";\nimport type { ThemeName } from \"@/theme/theme-context\";\nimport { CraftDrawer } from \"@/components/craft-drawer\";\nimport { CraftButton } from \"@/components/craft-button\";\nimport { CraftSubmitButton } from \"@/components/craft-submit-button\";\n\nexport type CraftCreateEditDrawerProps<TValues extends FieldValues> = {\n mode?: \"create\" | \"edit\";\n form: UseFormReturn<TValues>;\n onSubmit: (values: TValues) => void | Promise<void>;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n submitLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n tone?: ThemeName;\n className?: string;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n disableSubmitWhenInvalid?: boolean;\n closeOnSubmit?: boolean;\n side?: \"left\" | \"right\";\n};\n\nexport function CraftCreateEditDrawer<TValues extends FieldValues>({\n mode = \"create\",\n form,\n onSubmit,\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n title,\n description,\n submitLabel,\n cancelLabel = \"Cancel\",\n tone,\n className,\n children,\n footer,\n disableSubmitWhenInvalid = true,\n closeOnSubmit = true,\n side = \"right\",\n}: CraftCreateEditDrawerProps<TValues>) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = typeof open === \"boolean\";\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const formId = React.useId();\n\n const handleSubmit = form.handleSubmit(async (values) => {\n await onSubmit(values);\n if (closeOnSubmit) setOpen(false);\n });\n\n const resolvedTitle = title ?? (mode === \"create\" ? \"Create item\" : \"Edit item\");\n const resolvedSubmitLabel =\n submitLabel ?? (mode === \"create\" ? \"Create\" : \"Save changes\");\n\n const footerContent = footer ?? (\n <div className=\"flex flex-wrap items-center justify-end gap-3\">\n <CraftButton type=\"button\" variant=\"ghost\" onClick={() => setOpen(false)}>\n {cancelLabel}\n </CraftButton>\n <CraftSubmitButton\n form={formId}\n disableWhenInvalid={disableSubmitWhenInvalid}\n >\n {resolvedSubmitLabel}\n </CraftSubmitButton>\n </div>\n );\n\n return (\n <FormProvider {...form}>\n <CraftDrawer\n open={isOpen}\n onOpenChange={setOpen}\n trigger={trigger}\n title={resolvedTitle}\n tone={tone}\n side={side}\n className={cn(\"flex flex-col\", className)}\n footer={footerContent}\n >\n <form id={formId} onSubmit={handleSubmit} className=\"space-y-5\">\n {description && (\n <p className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">\n {description}\n </p>\n )}\n {children}\n </form>\n </CraftDrawer>\n </FormProvider>\n );\n}\n"],"mappings":"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","names":["jsx","jsx","variantClasses","jsx","jsxs","jsx","jsxs","jsx","intensityClasses","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","variantClasses","jsx","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","_a","React","jsx","jsxs","jsx","variantClasses","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs"]}
@@ -1,9 +0,0 @@
1
- // src/utils/cn.ts
2
- function cn(...values) {
3
- return values.filter(Boolean).join(" ");
4
- }
5
-
6
- export {
7
- cn
8
- };
9
- //# sourceMappingURL=chunk-VQ6T3HIX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/cn.ts"],"sourcesContent":["export function cn(...values: Array<string | false | null | undefined>): string {\n return values.filter(Boolean).join(\" \");\n}\n"],"mappings":";AAAO,SAAS,MAAM,QAA0D;AAC9E,SAAO,OAAO,OAAO,OAAO,EAAE,KAAK,GAAG;AACxC;","names":[]}
@@ -1,328 +0,0 @@
1
- import {
2
- CraftIcon
3
- } from "./chunk-FEFH5O5K.js";
4
- import {
5
- cn
6
- } from "./chunk-VQ6T3HIX.js";
7
-
8
- // src/components/layout/app-shell.tsx
9
- import { jsx, jsxs } from "react/jsx-runtime";
10
- function AppShell({ className, sidebar, topNav, children, ...props }) {
11
- return /* @__PURE__ */ jsxs(
12
- "div",
13
- {
14
- className: cn(
15
- "grid min-h-screen grid-cols-1 gap-6 bg-background p-6 lg:grid-cols-[260px_1fr]",
16
- className
17
- ),
18
- ...props,
19
- children: [
20
- sidebar && /* @__PURE__ */ jsx("div", { className: "h-full lg:sticky lg:top-6 lg:self-start lg:max-h-[calc(100vh-3rem)] lg:overflow-y-auto", children: sidebar }),
21
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
22
- topNav && /* @__PURE__ */ jsx("div", { className: "lg:sticky lg:top-6 lg:z-20", children: topNav }),
23
- /* @__PURE__ */ jsx("main", { className: "flex-1", children })
24
- ] })
25
- ]
26
- }
27
- );
28
- }
29
-
30
- // src/components/layout/breadcrumbs.tsx
31
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
32
- function Breadcrumbs({ className, items, ...props }) {
33
- return /* @__PURE__ */ jsx2("nav", { className: cn("flex items-center text-sm text-[rgb(var(--nc-fg-muted))]", className), ...props, children: items.map((item, index) => {
34
- const content = item.href ? /* @__PURE__ */ jsx2("a", { href: item.href, className: "transition hover:text-[rgb(var(--nc-fg))]", children: item.label }) : /* @__PURE__ */ jsx2("span", { className: "text-[rgb(var(--nc-fg))]", children: item.label });
35
- return /* @__PURE__ */ jsxs2("span", { className: "flex items-center", children: [
36
- content,
37
- index < items.length - 1 && /* @__PURE__ */ jsx2("span", { className: "mx-2 text-[rgb(var(--nc-fg-soft))]", children: "/" })
38
- ] }, `${item.label}-${index}`);
39
- }) });
40
- }
41
-
42
- // src/components/layout/sidebar.tsx
43
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
44
- function Sidebar({ className, title, items, footer, ...props }) {
45
- return /* @__PURE__ */ jsxs3(
46
- "aside",
47
- {
48
- className: cn(
49
- "flex h-full w-full flex-col gap-6 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-6 text-[rgb(var(--nc-fg))] backdrop-blur-xl",
50
- className
51
- ),
52
- ...props,
53
- children: [
54
- title && /* @__PURE__ */ jsx3("div", { className: "text-lg font-semibold", children: title }),
55
- /* @__PURE__ */ jsx3("nav", { className: "flex flex-col gap-2", children: items.map((item, index) => {
56
- var _a;
57
- return /* @__PURE__ */ jsxs3(
58
- "a",
59
- {
60
- href: (_a = item.href) != null ? _a : "#",
61
- className: cn(
62
- "flex items-center gap-3 rounded-2xl px-3 py-2 text-sm transition",
63
- item.active ? "bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]" : "text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]"
64
- ),
65
- children: [
66
- item.icon,
67
- /* @__PURE__ */ jsx3("span", { children: item.label })
68
- ]
69
- },
70
- `${item.label}-${index}`
71
- );
72
- }) }),
73
- footer && /* @__PURE__ */ jsx3("div", { className: "mt-auto pt-4", children: footer })
74
- ]
75
- }
76
- );
77
- }
78
-
79
- // src/components/layout/top-nav.tsx
80
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
81
- function TopNav({ className, title, actions, breadcrumb, ...props }) {
82
- return /* @__PURE__ */ jsxs4(
83
- "header",
84
- {
85
- className: cn(
86
- "flex flex-wrap items-center justify-between gap-4 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] px-6 py-4 text-[rgb(var(--nc-fg))] backdrop-blur-xl",
87
- className
88
- ),
89
- ...props,
90
- children: [
91
- /* @__PURE__ */ jsxs4("div", { className: "space-y-1", children: [
92
- breadcrumb,
93
- title && /* @__PURE__ */ jsx4("div", { className: "text-xl font-semibold", children: title })
94
- ] }),
95
- actions && /* @__PURE__ */ jsx4("div", { className: "flex flex-wrap gap-3", children: actions })
96
- ]
97
- }
98
- );
99
- }
100
-
101
- // src/components/layout/app-template.tsx
102
- import * as React from "react";
103
- import { jsx as jsx5 } from "react/jsx-runtime";
104
- function AppTemplate({
105
- config,
106
- headerActions,
107
- headerBreadcrumb,
108
- sidebarFooter,
109
- resolveIcon,
110
- icons,
111
- activePath,
112
- getActivePath,
113
- lucideFallback = true,
114
- children
115
- }) {
116
- const sidebarConfig = config.sidebar;
117
- const headerConfig = config.header;
118
- const resolvedActivePath = activePath != null ? activePath : getActivePath == null ? void 0 : getActivePath();
119
- const buildIcon = React.useCallback(
120
- (name) => {
121
- if (!name) return void 0;
122
- if (resolveIcon) return resolveIcon(name);
123
- if (icons == null ? void 0 : icons[name]) return icons[name];
124
- return /* @__PURE__ */ jsx5(CraftIcon, { name, useLucide: lucideFallback });
125
- },
126
- [icons, lucideFallback, resolveIcon]
127
- );
128
- const sidebarItems = sidebarConfig ? sidebarConfig.items.map((item) => {
129
- var _a;
130
- return {
131
- label: item.label,
132
- href: item.href,
133
- active: (_a = item.active) != null ? _a : resolvedActivePath && item.href ? item.href === resolvedActivePath : false,
134
- icon: buildIcon(item.icon)
135
- };
136
- }) : null;
137
- const breadcrumbNode = headerBreadcrumb != null ? headerBreadcrumb : (headerConfig == null ? void 0 : headerConfig.breadcrumb) ? /* @__PURE__ */ jsx5(Breadcrumbs, { items: headerConfig.breadcrumb }) : null;
138
- const sidebarFooterNode = sidebarFooter != null ? sidebarFooter : (sidebarConfig == null ? void 0 : sidebarConfig.footerText) ? /* @__PURE__ */ jsx5("div", { className: "text-xs text-[rgb(var(--nc-fg-muted))]", children: sidebarConfig.footerText }) : null;
139
- return /* @__PURE__ */ jsx5(
140
- AppShell,
141
- {
142
- sidebar: sidebarConfig && sidebarItems ? /* @__PURE__ */ jsx5(
143
- Sidebar,
144
- {
145
- title: sidebarConfig.title,
146
- items: sidebarItems,
147
- footer: sidebarFooterNode
148
- }
149
- ) : void 0,
150
- topNav: headerConfig ? /* @__PURE__ */ jsx5(
151
- TopNav,
152
- {
153
- title: headerConfig.title,
154
- breadcrumb: breadcrumbNode,
155
- actions: headerActions
156
- }
157
- ) : void 0,
158
- children
159
- }
160
- );
161
- }
162
-
163
- // src/components/layout/layout-config.ts
164
- var layoutConfigSchema = {
165
- $schema: "https://json-schema.org/draft/2020-12/schema",
166
- title: "Nextcraft UI Layout Config",
167
- type: "object",
168
- additionalProperties: false,
169
- properties: {
170
- sidebar: {
171
- type: "object",
172
- additionalProperties: false,
173
- properties: {
174
- title: { type: "string" },
175
- footerText: { type: "string" },
176
- items: {
177
- type: "array",
178
- items: {
179
- type: "object",
180
- additionalProperties: false,
181
- properties: {
182
- label: { type: "string" },
183
- href: { type: "string" },
184
- icon: { type: "string" },
185
- active: { type: "boolean" }
186
- },
187
- required: ["label"]
188
- }
189
- }
190
- },
191
- required: ["items"]
192
- },
193
- header: {
194
- type: "object",
195
- additionalProperties: false,
196
- properties: {
197
- title: { type: "string" },
198
- breadcrumb: {
199
- type: "array",
200
- items: {
201
- type: "object",
202
- additionalProperties: false,
203
- properties: {
204
- label: { type: "string" },
205
- href: { type: "string" }
206
- },
207
- required: ["label"]
208
- }
209
- }
210
- }
211
- }
212
- }
213
- };
214
-
215
- // src/components/layout/page-header.tsx
216
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
217
- function PageHeader({
218
- className,
219
- title,
220
- description,
221
- actions,
222
- ...props
223
- }) {
224
- return /* @__PURE__ */ jsxs5(
225
- "div",
226
- {
227
- className: cn("flex flex-wrap items-start justify-between gap-6", className),
228
- ...props,
229
- children: [
230
- /* @__PURE__ */ jsxs5("div", { className: "space-y-2", children: [
231
- /* @__PURE__ */ jsx6("h1", { className: "text-3xl font-bold text-[rgb(var(--nc-fg))]", children: title }),
232
- description && /* @__PURE__ */ jsx6("p", { className: "text-[rgb(var(--nc-fg-muted))]", children: description })
233
- ] }),
234
- actions && /* @__PURE__ */ jsx6("div", { className: "flex flex-wrap gap-3", children: actions })
235
- ]
236
- }
237
- );
238
- }
239
-
240
- // src/components/layout/auth-layout.tsx
241
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
242
- function AuthLayout({
243
- className,
244
- title,
245
- description,
246
- footer,
247
- graphic,
248
- children,
249
- ...props
250
- }) {
251
- return /* @__PURE__ */ jsxs6(
252
- "div",
253
- {
254
- className: cn(
255
- "grid min-h-screen grid-cols-1 bg-background",
256
- "lg:grid-cols-[1.1fr_0.9fr]",
257
- className
258
- ),
259
- ...props,
260
- children: [
261
- /* @__PURE__ */ jsx7("div", { className: "flex flex-col justify-center px-6 py-16 sm:px-12", children: /* @__PURE__ */ jsxs6("div", { className: "mx-auto w-full max-w-md space-y-6", children: [
262
- (title || description) && /* @__PURE__ */ jsxs6("div", { className: "space-y-2", children: [
263
- title && /* @__PURE__ */ jsx7("h1", { className: "text-3xl font-bold text-[rgb(var(--nc-fg))]", children: title }),
264
- description && /* @__PURE__ */ jsx7("p", { className: "text-[rgb(var(--nc-fg-muted))]", children: description })
265
- ] }),
266
- children,
267
- footer && /* @__PURE__ */ jsx7("div", { className: "text-sm text-[rgb(var(--nc-fg-muted))]", children: footer })
268
- ] }) }),
269
- /* @__PURE__ */ jsx7("div", { className: "hidden items-center justify-center border-l border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-12 text-[rgb(var(--nc-fg))] lg:flex", children: graphic != null ? graphic : /* @__PURE__ */ jsxs6("div", { className: "max-w-sm space-y-4 text-center", children: [
270
- /* @__PURE__ */ jsx7("h2", { className: "text-2xl font-semibold", children: "Crafted experiences" }),
271
- /* @__PURE__ */ jsx7("p", { className: "text-[rgb(var(--nc-fg-muted))]", children: "Build authentication flows that feel premium and cohesive." })
272
- ] }) })
273
- ]
274
- }
275
- );
276
- }
277
-
278
- // src/components/layout/container.tsx
279
- import { jsx as jsx8 } from "react/jsx-runtime";
280
- var sizeClasses = {
281
- sm: "max-w-3xl",
282
- md: "max-w-5xl",
283
- lg: "max-w-6xl",
284
- xl: "max-w-7xl"
285
- };
286
- function Container({ className, size = "lg", ...props }) {
287
- return /* @__PURE__ */ jsx8(
288
- "div",
289
- {
290
- className: cn("mx-auto w-full px-4 sm:px-6 lg:px-8", sizeClasses[size], className),
291
- ...props
292
- }
293
- );
294
- }
295
-
296
- // src/components/layout/grid.tsx
297
- import { jsx as jsx9 } from "react/jsx-runtime";
298
- var colClasses = {
299
- 1: "grid-cols-1",
300
- 2: "grid-cols-1 md:grid-cols-2",
301
- 3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
302
- 4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
303
- 5: "grid-cols-1 md:grid-cols-2 lg:grid-cols-5",
304
- 6: "grid-cols-1 md:grid-cols-3 lg:grid-cols-6"
305
- };
306
- var gapClasses = {
307
- sm: "gap-4",
308
- md: "gap-6",
309
- lg: "gap-8",
310
- xl: "gap-10"
311
- };
312
- function Grid({ className, columns = 3, gap = "md", ...props }) {
313
- return /* @__PURE__ */ jsx9("div", { className: cn("grid", colClasses[columns], gapClasses[gap], className), ...props });
314
- }
315
-
316
- export {
317
- AppShell,
318
- Breadcrumbs,
319
- Sidebar,
320
- TopNav,
321
- AppTemplate,
322
- layoutConfigSchema,
323
- PageHeader,
324
- AuthLayout,
325
- Container,
326
- Grid
327
- };
328
- //# sourceMappingURL=chunk-YVZL4GET.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/app-shell.tsx","../src/components/layout/breadcrumbs.tsx","../src/components/layout/sidebar.tsx","../src/components/layout/top-nav.tsx","../src/components/layout/app-template.tsx","../src/components/layout/layout-config.ts","../src/components/layout/page-header.tsx","../src/components/layout/auth-layout.tsx","../src/components/layout/container.tsx","../src/components/layout/grid.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type AppShellProps = React.HTMLAttributes<HTMLDivElement> & {\n sidebar?: React.ReactNode;\n topNav?: React.ReactNode;\n};\n\nexport function AppShell({ className, sidebar, topNav, children, ...props }: AppShellProps) {\n return (\n <div\n className={cn(\n \"grid min-h-screen grid-cols-1 gap-6 bg-background p-6 lg:grid-cols-[260px_1fr]\",\n className\n )}\n {...props}\n >\n {sidebar && (\n <div className=\"h-full lg:sticky lg:top-6 lg:self-start lg:max-h-[calc(100vh-3rem)] lg:overflow-y-auto\">\n {sidebar}\n </div>\n )}\n <div className=\"flex flex-col gap-6\">\n {topNav && <div className=\"lg:sticky lg:top-6 lg:z-20\">{topNav}</div>}\n <main className=\"flex-1\">{children}</main>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type BreadcrumbItem = {\n label: React.ReactNode;\n href?: string;\n};\n\nexport type BreadcrumbsProps = React.HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[];\n};\n\nexport function Breadcrumbs({ className, items, ...props }: BreadcrumbsProps) {\n return (\n <nav className={cn(\"flex items-center text-sm text-[rgb(var(--nc-fg-muted))]\", className)} {...props}>\n {items.map((item, index) => {\n const content = item.href ? (\n <a href={item.href} className=\"transition hover:text-[rgb(var(--nc-fg))]\">\n {item.label}\n </a>\n ) : (\n <span className=\"text-[rgb(var(--nc-fg))]\">{item.label}</span>\n );\n\n return (\n <span key={`${item.label}-${index}`} className=\"flex items-center\">\n {content}\n {index < items.length - 1 && (\n <span className=\"mx-2 text-[rgb(var(--nc-fg-soft))]\">/</span>\n )}\n </span>\n );\n })}\n </nav>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type SidebarItem = {\n label: React.ReactNode;\n href?: string;\n icon?: React.ReactNode;\n active?: boolean;\n};\n\nexport type SidebarProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n items: SidebarItem[];\n footer?: React.ReactNode;\n};\n\nexport function Sidebar({ className, title, items, footer, ...props }: SidebarProps) {\n return (\n <aside\n className={cn(\n \"flex h-full w-full flex-col gap-6 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-6 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n {title && <div className=\"text-lg font-semibold\">{title}</div>}\n <nav className=\"flex flex-col gap-2\">\n {items.map((item, index) => (\n <a\n key={`${item.label}-${index}`}\n href={item.href ?? \"#\"}\n className={cn(\n \"flex items-center gap-3 rounded-2xl px-3 py-2 text-sm transition\",\n item.active\n ? \"bg-[rgb(var(--nc-accent-1)/0.25)] text-[rgb(var(--nc-fg))]\"\n : \"text-[rgb(var(--nc-fg-muted))] hover:bg-[rgb(var(--nc-surface)/0.12)] hover:text-[rgb(var(--nc-fg))]\"\n )}\n >\n {item.icon}\n <span>{item.label}</span>\n </a>\n ))}\n </nav>\n {footer && <div className=\"mt-auto pt-4\">{footer}</div>}\n </aside>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type TopNavProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n actions?: React.ReactNode;\n breadcrumb?: React.ReactNode;\n};\n\nexport function TopNav({ className, title, actions, breadcrumb, ...props }: TopNavProps) {\n return (\n <header\n className={cn(\n \"flex flex-wrap items-center justify-between gap-4 rounded-3xl border border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] px-6 py-4 text-[rgb(var(--nc-fg))] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n <div className=\"space-y-1\">\n {breadcrumb}\n {title && <div className=\"text-xl font-semibold\">{title}</div>}\n </div>\n {actions && <div className=\"flex flex-wrap gap-3\">{actions}</div>}\n </header>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { AppShell } from \"./app-shell\";\nimport { CraftIcon } from \"@/components/craft-icon\";\nimport { Breadcrumbs } from \"./breadcrumbs\";\nimport { Sidebar, type SidebarItem } from \"./sidebar\";\nimport { TopNav } from \"./top-nav\";\nimport type { LayoutConfig, LayoutSidebarItem } from \"./layout-config\";\n\nexport type AppTemplateProps = {\n config: LayoutConfig;\n headerActions?: React.ReactNode;\n headerBreadcrumb?: React.ReactNode;\n sidebarFooter?: React.ReactNode;\n resolveIcon?: (name: string) => React.ReactNode;\n icons?: Record<string, React.ReactNode>;\n activePath?: string;\n getActivePath?: () => string | undefined;\n lucideFallback?: boolean;\n children: React.ReactNode;\n};\n\nexport function AppTemplate({\n config,\n headerActions,\n headerBreadcrumb,\n sidebarFooter,\n resolveIcon,\n icons,\n activePath,\n getActivePath,\n lucideFallback = true,\n children,\n}: AppTemplateProps) {\n const sidebarConfig = config.sidebar;\n const headerConfig = config.header;\n\n const resolvedActivePath = activePath ?? getActivePath?.();\n\n const buildIcon = React.useCallback(\n (name?: string) => {\n if (!name) return undefined;\n if (resolveIcon) return resolveIcon(name);\n if (icons?.[name]) return icons[name];\n return <CraftIcon name={name} useLucide={lucideFallback} />;\n },\n [icons, lucideFallback, resolveIcon]\n );\n\n const sidebarItems: SidebarItem[] | null = sidebarConfig\n ? sidebarConfig.items.map((item: LayoutSidebarItem) => ({\n label: item.label,\n href: item.href,\n active:\n item.active ??\n (resolvedActivePath && item.href\n ? item.href === resolvedActivePath\n : false),\n icon: buildIcon(item.icon),\n }))\n : null;\n\n const breadcrumbNode =\n headerBreadcrumb ??\n (headerConfig?.breadcrumb ? (\n <Breadcrumbs items={headerConfig.breadcrumb} />\n ) : null);\n\n const sidebarFooterNode =\n sidebarFooter ??\n (sidebarConfig?.footerText ? (\n <div className=\"text-xs text-[rgb(var(--nc-fg-muted))]\">\n {sidebarConfig.footerText}\n </div>\n ) : null);\n\n return (\n <AppShell\n sidebar={\n sidebarConfig && sidebarItems ? (\n <Sidebar\n title={sidebarConfig.title}\n items={sidebarItems}\n footer={sidebarFooterNode}\n />\n ) : undefined\n }\n topNav={\n headerConfig ? (\n <TopNav\n title={headerConfig.title}\n breadcrumb={breadcrumbNode}\n actions={headerActions}\n />\n ) : undefined\n }\n >\n {children}\n </AppShell>\n );\n}\n","export type LayoutIconName = string;\n\nexport type LayoutBreadcrumbItem = {\n label: string;\n href?: string;\n};\n\nexport type LayoutSidebarItem = {\n label: string;\n href?: string;\n icon?: LayoutIconName;\n active?: boolean;\n};\n\nexport type LayoutConfig = {\n sidebar?: {\n title?: string;\n items: LayoutSidebarItem[];\n footerText?: string;\n };\n header?: {\n title?: string;\n breadcrumb?: LayoutBreadcrumbItem[];\n };\n};\n\nexport const layoutConfigSchema = {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n title: \"Nextcraft UI Layout Config\",\n type: \"object\",\n additionalProperties: false,\n properties: {\n sidebar: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n title: { type: \"string\" },\n footerText: { type: \"string\" },\n items: {\n type: \"array\",\n items: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n label: { type: \"string\" },\n href: { type: \"string\" },\n icon: { type: \"string\" },\n active: { type: \"boolean\" },\n },\n required: [\"label\"],\n },\n },\n },\n required: [\"items\"],\n },\n header: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n title: { type: \"string\" },\n breadcrumb: {\n type: \"array\",\n items: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n label: { type: \"string\" },\n href: { type: \"string\" },\n },\n required: [\"label\"],\n },\n },\n },\n },\n },\n} as const;\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type PageHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n title: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n};\n\nexport function PageHeader({\n className,\n title,\n description,\n actions,\n ...props\n}: PageHeaderProps) {\n return (\n <div\n className={cn(\"flex flex-wrap items-start justify-between gap-6\", className)}\n {...props}\n >\n <div className=\"space-y-2\">\n <h1 className=\"text-3xl font-bold text-[rgb(var(--nc-fg))]\">{title}</h1>\n {description && <p className=\"text-[rgb(var(--nc-fg-muted))]\">{description}</p>}\n </div>\n {actions && <div className=\"flex flex-wrap gap-3\">{actions}</div>}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type AuthLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n title?: React.ReactNode;\n description?: React.ReactNode;\n footer?: React.ReactNode;\n graphic?: React.ReactNode;\n};\n\nexport function AuthLayout({\n className,\n title,\n description,\n footer,\n graphic,\n children,\n ...props\n}: AuthLayoutProps) {\n return (\n <div\n className={cn(\n \"grid min-h-screen grid-cols-1 bg-background\",\n \"lg:grid-cols-[1.1fr_0.9fr]\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-col justify-center px-6 py-16 sm:px-12\">\n <div className=\"mx-auto w-full max-w-md space-y-6\">\n {(title || description) && (\n <div className=\"space-y-2\">\n {title && <h1 className=\"text-3xl font-bold text-[rgb(var(--nc-fg))]\">{title}</h1>}\n {description && <p className=\"text-[rgb(var(--nc-fg-muted))]\">{description}</p>}\n </div>\n )}\n {children}\n {footer && <div className=\"text-sm text-[rgb(var(--nc-fg-muted))]\">{footer}</div>}\n </div>\n </div>\n <div className=\"hidden items-center justify-center border-l border-[rgb(var(--nc-border)/0.3)] bg-[rgb(var(--nc-surface)/0.08)] p-12 text-[rgb(var(--nc-fg))] lg:flex\">\n {graphic ?? (\n <div className=\"max-w-sm space-y-4 text-center\">\n <h2 className=\"text-2xl font-semibold\">Crafted experiences</h2>\n <p className=\"text-[rgb(var(--nc-fg-muted))]\">\n Build authentication flows that feel premium and cohesive.\n </p>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type ContainerProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n};\n\nconst sizeClasses: Record<NonNullable<ContainerProps[\"size\"]>, string> = {\n sm: \"max-w-3xl\",\n md: \"max-w-5xl\",\n lg: \"max-w-6xl\",\n xl: \"max-w-7xl\",\n};\n\nexport function Container({ className, size = \"lg\", ...props }: ContainerProps) {\n return (\n <div\n className={cn(\"mx-auto w-full px-4 sm:px-6 lg:px-8\", sizeClasses[size], className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nexport type GridProps = React.HTMLAttributes<HTMLDivElement> & {\n columns?: 1 | 2 | 3 | 4 | 5 | 6;\n gap?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n};\n\nconst colClasses: Record<NonNullable<GridProps[\"columns\"]>, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 md:grid-cols-2\",\n 3: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n 4: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n 5: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-5\",\n 6: \"grid-cols-1 md:grid-cols-3 lg:grid-cols-6\",\n};\n\nconst gapClasses: Record<NonNullable<GridProps[\"gap\"]>, string> = {\n sm: \"gap-4\",\n md: \"gap-6\",\n lg: \"gap-8\",\n xl: \"gap-10\",\n};\n\nexport function Grid({ className, columns = 3, gap = \"md\", ...props }: GridProps) {\n return (\n <div className={cn(\"grid\", colClasses[columns], gapClasses[gap], className)} {...props} />\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx"]}