@jameskabz/nextcraft-ui 0.6.2 → 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.
- package/dist/craft/components.cjs +64 -1779
- package/dist/craft/components.cjs.map +1 -1
- package/dist/craft/components.js +31 -42
- package/dist/craft/components.js.map +1 -1
- package/dist/craft/forms.cjs +6 -1347
- package/dist/craft/forms.cjs.map +1 -1
- package/dist/craft/forms.js +3 -8
- package/dist/craft/forms.js.map +1 -1
- package/dist/craft/layout.cjs +20 -374
- package/dist/craft/layout.cjs.map +1 -1
- package/dist/craft/layout.js +10 -14
- package/dist/craft/layout.js.map +1 -1
- package/dist/craft/table.cjs +8 -632
- package/dist/craft/table.cjs.map +1 -1
- package/dist/craft/table.js +4 -8
- package/dist/craft/table.js.map +1 -1
- package/dist/craft/theme.cjs +5 -137
- package/dist/craft/theme.cjs.map +1 -1
- package/dist/craft/theme.js +2 -6
- package/dist/craft/theme.js.map +1 -1
- package/dist/index.cjs +103 -3426
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +50 -70
- package/dist/index.js.map +1 -1
- package/dist/styles.css +0 -31
- package/package.json +8 -4
- package/dist/chunk-6F7FN2ZF.js +0 -671
- package/dist/chunk-6F7FN2ZF.js.map +0 -1
- package/dist/chunk-7Q4Z47HT.js +0 -657
- package/dist/chunk-7Q4Z47HT.js.map +0 -1
- package/dist/chunk-7SKDTIEK.js +0 -49
- package/dist/chunk-7SKDTIEK.js.map +0 -1
- package/dist/chunk-FEFH5O5K.js +0 -49
- package/dist/chunk-FEFH5O5K.js.map +0 -1
- package/dist/chunk-M2EKVXB6.js +0 -127
- package/dist/chunk-M2EKVXB6.js.map +0 -1
- package/dist/chunk-SBLIF6UU.js +0 -1029
- package/dist/chunk-SBLIF6UU.js.map +0 -1
- package/dist/chunk-VQ6T3HIX.js +0 -9
- package/dist/chunk-VQ6T3HIX.js.map +0 -1
- package/dist/chunk-YVZL4GET.js +0 -328
- package/dist/chunk-YVZL4GET.js.map +0 -1
- package/dist/chunk-ZRV4Y374.js +0 -582
- 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"]}
|
package/dist/chunk-VQ6T3HIX.js
DELETED
|
@@ -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":[]}
|
package/dist/chunk-YVZL4GET.js
DELETED
|
@@ -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"]}
|