@bison-lab/ui 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["SlotPrimitive","LabelPrimitive","SelectPrimitive","CheckboxPrimitive","RadioGroupPrimitive","SwitchPrimitives","SliderPrimitive","AvatarPrimitive","SeparatorPrimitive","DialogPrimitive","AlertDialogPrimitive","SheetPrimitive","PopoverPrimitive","DropdownMenuPrimitive","TooltipPrimitive","SonnerToaster","TabsPrimitive","AccordionPrimitive","ProgressPrimitive","ScrollAreaPrimitive","ContextMenuPrimitive","NavigationMenuPrimitive","SlotPrimitive","CommandPrimitive","AspectRatioPrimitive"],"sources":["../src/lib/utils.ts","../src/providers/theme-provider.tsx","../src/providers/density-provider.tsx","../src/providers/bison-provider.tsx","../src/form/form.tsx","../src/form/form-field.tsx","../src/form/form-error.tsx","../src/components/button.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/label.tsx","../src/components/select.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/switch.tsx","../src/components/slider.tsx","../src/components/card.tsx","../src/components/badge.tsx","../src/components/avatar.tsx","../src/components/separator.tsx","../src/components/dialog.tsx","../src/components/alert-dialog.tsx","../src/components/sheet.tsx","../src/components/popover.tsx","../src/components/dropdown-menu.tsx","../src/components/tooltip.tsx","../src/components/toast.tsx","../src/components/tabs.tsx","../src/components/accordion.tsx","../src/components/table.tsx","../src/components/progress.tsx","../src/components/scroll-area.tsx","../src/components/skeleton.tsx","../src/components/spinner.tsx","../src/components/context-menu.tsx","../src/components/navigation-menu.tsx","../src/components/breadcrumb.tsx","../src/components/pagination.tsx","../src/components/command.tsx","../src/components/aspect-ratio.tsx","../src/blocks/auth/social-providers.tsx","../src/blocks/auth/sign-in-block.tsx","../src/blocks/auth/sign-up-block.tsx","../src/blocks/auth/forgot-password-block.tsx","../src/blocks/auth/reset-password-block.tsx","../src/blocks/auth/verify-block.tsx","../src/blocks/error/not-found-block.tsx","../src/blocks/error/server-error-block.tsx","../src/blocks/error/maintenance-block.tsx","../src/blocks/error/empty-state-block.tsx","../src/blocks/layout/page-shell.tsx","../src/blocks/layout/header-block.tsx","../src/blocks/layout/sidebar-block.tsx","../src/blocks/layout/footer-block.tsx","../src/blocks/settings/profile-settings-block.tsx","../src/blocks/settings/account-settings-block.tsx","../src/blocks/settings/notification-settings-block.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\ntype Theme = \"light\" | \"dark\" | \"system\";\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n attribute?: string;\n}\n\ninterface ThemeProviderState {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeProviderContext = React.createContext<ThemeProviderState | undefined>(undefined);\n\nexport function ThemeProvider({\n children,\n defaultTheme = \"system\",\n storageKey = \"bison-theme\",\n attribute = \"class\",\n ...props\n}: ThemeProviderProps) {\n const [theme, setTheme] = React.useState<Theme>(defaultTheme);\n\n React.useEffect(() => {\n const stored = localStorage.getItem(storageKey) as Theme | null;\n if (stored) setTheme(stored);\n }, [storageKey]);\n\n React.useEffect(() => {\n const root = window.document.documentElement;\n\n root.classList.remove(\"light\", \"dark\");\n\n if (theme === \"system\") {\n const systemTheme = window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n root.classList.add(systemTheme);\n } else {\n root.classList.add(theme);\n }\n }, [theme, attribute]);\n\n const value = React.useMemo(\n () => ({\n theme,\n setTheme: (newTheme: Theme) => {\n localStorage.setItem(storageKey, newTheme);\n setTheme(newTheme);\n },\n }),\n [theme, storageKey]\n );\n\n return (\n <ThemeProviderContext.Provider {...props} value={value}>\n {children}\n </ThemeProviderContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = React.useContext(ThemeProviderContext);\n if (!context) throw new Error(\"useTheme must be used within a ThemeProvider\");\n return context;\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\ntype Density = \"compact\" | \"default\" | \"spacious\";\n\ninterface DensityProviderProps {\n children: React.ReactNode;\n density?: Density;\n}\n\nconst DensityContext = React.createContext<Density>(\"default\");\n\nconst densityClasses: Record<Density, string> = {\n compact: \"bison-density-compact\",\n default: \"bison-density-default\",\n spacious: \"bison-density-spacious\",\n};\n\nexport function DensityProvider({ children, density = \"default\" }: DensityProviderProps) {\n return (\n <DensityContext.Provider value={density}>\n <div className={densityClasses[density]}>{children}</div>\n </DensityContext.Provider>\n );\n}\n\nexport function useDensity() {\n return React.useContext(DensityContext);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n deriveLightPalette,\n deriveDarkPalette,\n radiusPresets,\n shadowPresets,\n motionPresets,\n densityPresets,\n defaultFontWeights,\n} from \"@bison-lab/tokens\";\nimport type {\n BrandColors,\n RadiusPreset,\n ShadowPreset,\n MotionPreset,\n DensityPreset,\n FontWeightMap,\n} from \"@bison-lab/tokens\";\nimport { ThemeProvider } from \"./theme-provider\";\nimport { DensityProvider } from \"./density-provider\";\n\ntype Theme = \"light\" | \"dark\" | \"system\";\n\ninterface GoogleFontConfig {\n /** Google Font family name, e.g. \"Inter\", \"Roboto\", \"Playfair Display\" */\n family: string;\n /** Font weights to load. Defaults to [400, 500, 600, 700] */\n weights?: number[];\n /** Whether to load italic variants. Defaults to false */\n italic?: boolean;\n}\n\nexport interface BisonProviderProps {\n children: React.ReactNode;\n\n /** Brand colors used to derive the full semantic palette */\n brandColors: BrandColors;\n\n /** Border radius preset. Defaults to \"rounded\" */\n radius?: RadiusPreset;\n /** Shadow preset. Defaults to \"subtle\" */\n shadow?: ShadowPreset;\n /** Motion preset. Defaults to \"smooth\" */\n motion?: MotionPreset;\n /** Density preset. Defaults to \"default\" */\n density?: DensityPreset;\n\n /** Default theme mode. Defaults to \"system\" */\n defaultTheme?: Theme;\n /** localStorage key for theme persistence. Defaults to \"bison-theme\" */\n storageKey?: string;\n\n /** Google Font for body/UI text. Defaults to Inter */\n bodyFont?: GoogleFontConfig;\n /** Google Font for headings. Falls back to bodyFont if not provided */\n headingFont?: GoogleFontConfig;\n /** Google Font for monospace/code. Defaults to JetBrains Mono */\n monoFont?: GoogleFontConfig;\n\n /** Custom font weight map. Defaults to 400/500/600/700 */\n fontWeights?: FontWeightMap;\n}\n\nfunction buildGoogleFontsUrl(fonts: GoogleFontConfig[]): string {\n const families = fonts.map((font) => {\n const weights = font.weights ?? [400, 500, 600, 700];\n const sortedWeights = [...weights].sort((a, b) => a - b);\n\n if (font.italic) {\n const ital = sortedWeights\n .flatMap((w) => [`0,${w}`, `1,${w}`])\n .join(\";\");\n return `family=${font.family.replace(/ /g, \"+\")}:ital,wght@${ital}`;\n }\n\n return `family=${font.family.replace(/ /g, \"+\")}:wght@${sortedWeights.join(\";\")}`;\n });\n\n return `https://fonts.googleapis.com/css2?${families.join(\"&\")}&display=swap`;\n}\n\nfunction fontFamilyValue(font: GoogleFontConfig, fallback: string): string {\n return `\"${font.family}\", ${fallback}`;\n}\n\nexport function BisonProvider({\n children,\n brandColors,\n radius = \"rounded\",\n shadow = \"subtle\",\n motion = \"smooth\",\n density = \"default\",\n defaultTheme = \"system\",\n storageKey = \"bison-theme\",\n bodyFont = { family: \"Inter\", weights: [400, 500, 600, 700] },\n headingFont,\n monoFont = { family: \"JetBrains Mono\", weights: [400, 500, 600, 700] },\n fontWeights = defaultFontWeights,\n}: BisonProviderProps) {\n const resolvedHeadingFont = headingFont ?? bodyFont;\n\n // Derive color palettes\n const lightPalette = React.useMemo(() => deriveLightPalette(brandColors), [brandColors]);\n const darkPalette = React.useMemo(() => deriveDarkPalette(brandColors), [brandColors]);\n\n // Build Google Fonts URL\n const fontsUrl = React.useMemo(() => {\n const fonts: GoogleFontConfig[] = [bodyFont];\n if (headingFont && headingFont.family !== bodyFont.family) {\n fonts.push(headingFont);\n }\n if (monoFont.family !== bodyFont.family) {\n fonts.push(monoFont);\n }\n return buildGoogleFontsUrl(fonts);\n }, [bodyFont, headingFont, monoFont]);\n\n // Build CSS custom properties style string\n const styleContent = React.useMemo(() => {\n const radiusVars = radiusPresets[radius];\n const shadowVars = shadowPresets[shadow];\n const motionVars = motionPresets[motion];\n const densityVars = densityPresets[density];\n\n const fontVars = {\n \"--font-body\": fontFamilyValue(bodyFont, \"ui-sans-serif, system-ui, sans-serif\"),\n \"--font-heading\": fontFamilyValue(resolvedHeadingFont, \"ui-sans-serif, system-ui, sans-serif\"),\n \"--font-mono\": fontFamilyValue(monoFont, \"ui-monospace, monospace\"),\n \"--font-weight-normal\": String(fontWeights.normal),\n \"--font-weight-medium\": String(fontWeights.medium),\n \"--font-weight-semibold\": String(fontWeights.semibold),\n \"--font-weight-bold\": String(fontWeights.bold),\n };\n\n const lightColorVars = Object.entries(lightPalette)\n .map(([key, value]) => ` --${key}: ${value};`)\n .join(\"\\n\");\n\n const darkColorVars = Object.entries(darkPalette)\n .map(([key, value]) => ` --${key}: ${value};`)\n .join(\"\\n\");\n\n const presetVars = [\n ...Object.entries(radiusVars),\n ...Object.entries(shadowVars),\n ...Object.entries(motionVars),\n ...Object.entries(densityVars),\n ...Object.entries(fontVars),\n ]\n .map(([key, value]) => ` ${key}: ${value};`)\n .join(\"\\n\");\n\n return `:root {\\n${lightColorVars}\\n${presetVars}\\n font-family: var(--font-body);\\n}\\n\\n.dark {\\n${darkColorVars}\\n}`;\n }, [\n radius,\n shadow,\n motion,\n density,\n bodyFont,\n resolvedHeadingFont,\n monoFont,\n fontWeights,\n lightPalette,\n darkPalette,\n ]);\n\n return (\n <>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossOrigin=\"anonymous\" />\n <link rel=\"stylesheet\" href={fontsUrl} />\n <style dangerouslySetInnerHTML={{ __html: styleContent }} />\n <ThemeProvider defaultTheme={defaultTheme} storageKey={storageKey}>\n <DensityProvider density={density}>\n {children}\n </DensityProvider>\n </ThemeProvider>\n </>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { ZodSchema, ZodError } from \"zod\";\n\nexport type FormMode = \"native\" | \"rhf\";\n\ninterface FormContextValue {\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n setFieldError: (name: string, error: string) => void;\n clearFieldError: (name: string) => void;\n setFieldTouched: (name: string) => void;\n isSubmitting: boolean;\n formMode: FormMode;\n}\n\nconst FormContext = React.createContext<FormContextValue | undefined>(undefined);\n\nexport function useFormContext() {\n return React.useContext(FormContext);\n}\n\nexport interface FormProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n onSubmit?: (data: Record<string, FormDataEntryValue>) => void | Promise<void>;\n schema?: ZodSchema;\n formMode?: FormMode;\n children: React.ReactNode;\n}\n\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ onSubmit, schema, formMode = \"native\", children, className, ...props }, ref) => {\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [touched, setTouched] = React.useState<Record<string, boolean>>({});\n const [isSubmitting, setIsSubmitting] = React.useState(false);\n\n const setFieldError = React.useCallback((name: string, error: string) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n }, []);\n\n const clearFieldError = React.useCallback((name: string) => {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const setFieldTouched = React.useCallback((name: string) => {\n setTouched((prev) => ({ ...prev, [name]: true }));\n }, []);\n\n const handleSubmit = React.useCallback(\n async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setIsSubmitting(true);\n setErrors({});\n\n const formData = new FormData(e.currentTarget);\n const data = Object.fromEntries(formData.entries());\n\n if (schema) {\n try {\n schema.parse(data);\n } catch (err) {\n const zodError = err as ZodError;\n const fieldErrors: Record<string, string> = {};\n for (const issue of zodError.issues) {\n const path = issue.path.join(\".\");\n if (!fieldErrors[path]) {\n fieldErrors[path] = issue.message;\n }\n }\n setErrors(fieldErrors);\n setIsSubmitting(false);\n return;\n }\n }\n\n try {\n await onSubmit?.(data);\n } finally {\n setIsSubmitting(false);\n }\n },\n [onSubmit, schema]\n );\n\n const contextValue = React.useMemo(\n () => ({ errors, touched, setFieldError, clearFieldError, setFieldTouched, isSubmitting, formMode }),\n [errors, touched, setFieldError, clearFieldError, setFieldTouched, isSubmitting, formMode]\n );\n\n return (\n <FormContext.Provider value={contextValue}>\n <form ref={ref} onSubmit={handleSubmit} className={className} {...props}>\n {children}\n </form>\n </FormContext.Provider>\n );\n }\n);\nForm.displayName = \"Form\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useFormContext } from \"./form\";\n\nexport interface FormFieldProps {\n name: string;\n label?: string;\n description?: string;\n required?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport function FormField({ name, label, description, required, className, children }: FormFieldProps) {\n const formCtx = useFormContext();\n const error = formCtx?.errors[name];\n\n return (\n <div className={cn(\"space-y-2\", className)}>\n {label && (\n <label\n htmlFor={name}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n )}\n {children}\n {description && !error && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n {error && (\n <p className=\"text-sm text-destructive\">{error}</p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface FormErrorProps {\n message?: string;\n className?: string;\n}\n\nexport function FormError({ message, className }: FormErrorProps) {\n if (!message) return null;\n\n return (\n <div\n className={cn(\n \"rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive\",\n className\n )}\n role=\"alert\"\n >\n {message}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors duration-fast ease-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n sm: \"h-[var(--density-height-sm)] px-3 text-xs rounded-sm\",\n md: \"h-[var(--density-height-md)] px-4 py-2\",\n lg: \"h-[var(--density-height-lg)] px-8 text-base rounded-lg\",\n icon: \"h-[var(--density-height-md)] w-[var(--density-height-md)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-[var(--density-height-md)] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Label as LabelPrimitive } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\nconst Label = React.forwardRef<\n React.ComponentRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Select as SelectPrimitive } from \"radix-ui\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-[var(--density-height-md)] w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton ref={ref} className={cn(\"flex cursor-default items-center justify-center py-1\", className)} {...props}>\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton ref={ref} className={cn(\"flex cursor-default items-center justify-center py-1\", className)} {...props}>\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-[var(--z-popover)] max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" && \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\"p-1\", position === \"popper\" && \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\")}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label ref={ref} className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)} {...props} />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator ref={ref} className={cn(\"-mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ComponentRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn(\"flex items-center justify-center text-current\")}>\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\";\nimport { Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root className={cn(\"grid gap-2\", className)} {...props} ref={ref} />\n));\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Switch as SwitchPrimitives } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-fast ease-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform duration-fast ease-default data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slider as SliderPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Slider = React.forwardRef<\n React.ComponentRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\"relative flex w-full touch-none select-none items-center\", className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n));\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-[var(--density-padding-xl)]\", className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-[var(--density-padding-xl)] pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-[var(--density-padding-xl)] pt-0\", className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return <div className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n\nexport { Badge, badgeVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Avatar as AvatarPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\", className)}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image ref={ref} className={cn(\"aspect-square h-full w-full\", className)} {...props} />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\"flex h-full w-full items-center justify-center rounded-full bg-muted\", className)}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ComponentRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Dialog as DialogPrimitive } from \"radix-ui\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-[var(--z-modal-backdrop)] bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[var(--z-modal)] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-normal data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-[var(--z-modal-backdrop)] bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[var(--z-modal)] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-normal data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\n\nconst AlertDialogTitle = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold\", className)} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel ref={ref} className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)} {...props} />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Dialog as SheetPrimitive } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Sheet = SheetPrimitive.Root;\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ComponentRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-[var(--z-modal-backdrop)] bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n \"fixed z-[var(--z-modal)] gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-slow data-[state=open]:duration-normal\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom: \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right: \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n);\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<React.ComponentRef<typeof SheetPrimitive.Content>, SheetContentProps>(\n ({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content ref={ref} className={cn(sheetVariants({ side }), className)} {...props}>\n {children}\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n);\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\n\nconst SheetTitle = React.forwardRef<\n React.ComponentRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold text-foreground\", className)} {...props} />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ComponentRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport { Sheet, SheetPortal, SheetOverlay, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover as PopoverPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[var(--z-popover)] w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\", inset && \"pl-8\", className)}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\"z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className)}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\"z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\", className)}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\", className)}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label ref={ref} className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)} {...props} />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator ref={ref} className={cn(\"-mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)} {...props} />\n);\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-[var(--z-tooltip)] overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport { Toaster as SonnerToaster, toast } from \"sonner\";\n\nexport interface ToasterProps {\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"top-center\" | \"bottom-center\";\n richColors?: boolean;\n closeButton?: boolean;\n className?: string;\n}\n\nfunction Toaster({ position = \"bottom-right\", richColors = true, closeButton = true, ...props }: ToasterProps) {\n return (\n <SonnerToaster\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n toastOptions={{\n classNames: {\n toast: \"group border-border bg-background text-foreground shadow-lg\",\n description: \"text-muted-foreground\",\n actionButton: \"bg-primary text-primary-foreground\",\n cancelButton: \"bg-muted text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster, toast };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-[var(--density-height-md)] items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Accordion as AccordionPrimitive } from \"radix-ui\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ComponentRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn(\"border-b\", className)} {...props} />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ComponentRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-normal\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ComponentRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn(\"w-full caption-bottom text-sm\", className)} {...props} />\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n);\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n);\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <tfoot ref={ref} className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)} {...props} />\n);\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\", className)} {...props} />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th ref={ref} className={cn(\"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\", className)} {...props} />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)} {...props} />\n )\n);\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => <caption ref={ref} className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />\n);\nTableCaption.displayName = \"TableCaption\";\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Progress as ProgressPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\"relative h-4 w-full overflow-hidden rounded-full bg-secondary\", className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all duration-normal ease-default\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst ScrollArea = React.forwardRef<\n React.ComponentRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root ref={ref} className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ComponentRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","import { cn } from \"../lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />;\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nconst spinnerVariants = cva(\"animate-spin text-muted-foreground\", {\n variants: {\n size: {\n sm: \"h-4 w-4\",\n md: \"h-6 w-6\",\n lg: \"h-8 w-8\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<SVGSVGElement>,\n VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, ...props }: SpinnerProps) {\n return <Loader2 className={cn(spinnerVariants({ size }), className)} {...props} />;\n}\n\nexport { Spinner, spinnerVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ContextMenu as ContextMenuPrimitive } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst ContextMenu = ContextMenuPrimitive.Root;\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nconst ContextMenuGroup = ContextMenuPrimitive.Group;\nconst ContextMenuPortal = ContextMenuPrimitive.Portal;\nconst ContextMenuSub = ContextMenuPrimitive.Sub;\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </ContextMenuPrimitive.SubTrigger>\n));\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;\n\nconst ContextMenuContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;\n\nconst ContextMenuItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n));\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;\n\nconst ContextMenuLabel = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold text-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator ref={ref} className={cn(\"-mx-1 my-1 h-px bg-border\", className)} {...props} />\n));\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;\n\nconst ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)} {...props} />\n);\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { NavigationMenu as NavigationMenuPrimitive } from \"radix-ui\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst NavigationMenu = React.forwardRef<\n React.ComponentRef<typeof NavigationMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Root\n ref={ref}\n className={cn(\"relative z-10 flex max-w-max flex-1 items-center justify-center\", className)}\n {...props}\n >\n {children}\n <NavigationMenuViewport />\n </NavigationMenuPrimitive.Root>\n));\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;\n\nconst NavigationMenuList = React.forwardRef<\n React.ComponentRef<typeof NavigationMenuPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn(\"group flex flex-1 list-none items-center justify-center space-x-1\", className)}\n {...props}\n />\n));\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item;\n\nconst navigationMenuTriggerStyle = cva(\n \"group inline-flex h-[var(--density-height-md)] w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50\"\n);\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ComponentRef<typeof NavigationMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDown\n className=\"relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n));\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;\n\nconst NavigationMenuContent = React.forwardRef<\n React.ComponentRef<typeof NavigationMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto\",\n className\n )}\n {...props}\n />\n));\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link;\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ComponentRef<typeof NavigationMenuPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div className={cn(\"absolute left-0 top-full flex justify-center\")}>\n <NavigationMenuPrimitive.Viewport\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n));\nNavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ComponentRef<typeof NavigationMenuPrimitive.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n));\nNavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & { separator?: React.ReactNode }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<\"ol\">>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<\"li\">>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"inline-flex items-center gap-1.5\", className)} {...props} />\n )\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & { asChild?: boolean }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"a\";\n return (\n <Comp\n ref={ref}\n className={cn(\"transition-colors hover:text-foreground\", className)}\n {...props}\n />\n );\n});\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<\"span\">>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"font-normal text-foreground\", className)}\n {...props}\n />\n )\n);\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<\"li\">) => (\n <li role=\"presentation\" aria-hidden=\"true\" className={cn(\"[&>svg]:h-3.5 [&>svg]:w-3.5\", className)} {...props}>\n {children ?? <ChevronRight />}\n </li>\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { type ButtonProps, buttonVariants } from \"./button\";\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n);\nPagination.displayName = \"Pagination\";\n\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentPropsWithoutRef<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn(\"flex flex-row items-center gap-1\", className)} {...props} />\n )\n);\nPaginationContent.displayName = \"PaginationContent\";\n\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<\"li\">>(\n ({ className, ...props }, ref) => <li ref={ref} className={cn(\"\", className)} {...props} />\n);\nPaginationItem.displayName = \"PaginationItem\";\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<ButtonProps, \"size\"> &\n React.ComponentProps<\"a\">;\n\nconst PaginationLink = ({ className, isActive, size = \"icon\", ...props }: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n);\nPaginationLink.displayName = \"PaginationLink\";\n\nconst PaginationPrevious = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink aria-label=\"Go to previous page\" size=\"md\" className={cn(\"gap-1 pl-2.5\", className)} {...props}>\n <ChevronLeft className=\"h-4 w-4\" />\n <span>Previous</span>\n </PaginationLink>\n);\nPaginationPrevious.displayName = \"PaginationPrevious\";\n\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink aria-label=\"Go to next page\" size=\"md\" className={cn(\"gap-1 pr-2.5\", className)} {...props}>\n <span>Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </PaginationLink>\n);\nPaginationNext.displayName = \"PaginationNext\";\n\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span aria-hidden className={cn(\"flex h-9 w-9 items-center justify-center\", className)} {...props}>\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n);\nPaginationEllipsis.displayName = \"PaginationEllipsis\";\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Dialog, DialogContent } from \"./dialog\";\n\nconst Command = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\ninterface CommandDialogProps extends React.ComponentPropsWithoutRef<typeof Dialog> {}\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n);\n\nconst CommandInput = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandList = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List ref={ref} className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)} {...props} />\n));\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => <CommandPrimitive.Empty ref={ref} className=\"py-6 text-center text-sm\" {...props} />);\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator ref={ref} className={cn(\"-mx-1 h-px bg-border\", className)} {...props} />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ComponentRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50\",\n className\n )}\n {...props}\n />\n));\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)} {...props} />\n);\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AspectRatio as AspectRatioPrimitive } from \"radix-ui\";\n\nconst AspectRatio = AspectRatioPrimitive.Root;\n\nexport { AspectRatio };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\n\nexport type SocialProvider = \"google\" | \"github\" | \"apple\";\n\ninterface SocialProvidersProps {\n providers: SocialProvider[];\n onSocialLogin: (provider: SocialProvider) => void;\n loading?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\nconst providerConfig: Record<SocialProvider, { label: string; icon: React.ReactNode }> = {\n google: {\n label: \"Google\",\n icon: (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\n </svg>\n ),\n },\n github: {\n label: \"GitHub\",\n icon: (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n </svg>\n ),\n },\n apple: {\n label: \"Apple\",\n icon: (\n <svg className=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\" />\n </svg>\n ),\n },\n};\n\nexport function SocialProviders({ providers, onSocialLogin, loading, disabled, className }: SocialProvidersProps) {\n return (\n <div className={cn(\"grid gap-2\", className)}>\n {providers.map((provider) => {\n const config = providerConfig[provider];\n return (\n <Button\n key={provider}\n variant=\"outline\"\n type=\"button\"\n disabled={loading || disabled}\n onClick={() => onSocialLogin(provider)}\n className=\"w-full\"\n >\n {config.icon}\n <span className=\"ml-2\">Continue with {config.label}</span>\n </Button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Label } from \"../../components/label\";\nimport { Checkbox } from \"../../components/checkbox\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\nimport { SocialProviders, type SocialProvider } from \"./social-providers\";\nimport { Separator } from \"../../components/separator\";\n\nexport interface SignInBlockProps {\n onSubmit: (data: { email: string; password: string; rememberMe: boolean }) => void | Promise<void>;\n onForgotPassword?: () => void;\n onSocialLogin?: (provider: SocialProvider) => void;\n socialProviders?: SocialProvider[];\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n title?: string;\n description?: string;\n signUpHref?: string;\n onSignUp?: () => void;\n className?: string;\n}\n\nexport function SignInBlock({\n onSubmit,\n onForgotPassword,\n onSocialLogin,\n socialProviders = [],\n loading = false,\n error,\n disabled = false,\n title = \"Sign in\",\n description = \"Enter your credentials to access your account\",\n signUpHref,\n onSignUp,\n className,\n}: SignInBlockProps) {\n const [rememberMe, setRememberMe] = React.useState(false);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n await onSubmit({\n email: formData.get(\"email\") as string,\n password: formData.get(\"password\") as string,\n rememberMe,\n });\n };\n\n return (\n <Card className={cn(\"w-full max-w-md mx-auto\", className)}>\n <CardHeader className=\"text-center\">\n <CardTitle>{title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {socialProviders.length > 0 && onSocialLogin && (\n <>\n <SocialProviders\n providers={socialProviders}\n onSocialLogin={onSocialLogin}\n loading={loading}\n disabled={disabled}\n />\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <Separator className=\"w-full\" />\n </div>\n <div className=\"relative flex justify-center text-xs uppercase\">\n <span className=\"bg-card px-2 text-muted-foreground\">Or continue with</span>\n </div>\n </div>\n </>\n )}\n\n <FormError message={error} />\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n name=\"email\"\n type=\"email\"\n placeholder=\"name@example.com\"\n required\n disabled={loading || disabled}\n autoComplete=\"email\"\n />\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"password\">Password</Label>\n {onForgotPassword && (\n <button\n type=\"button\"\n onClick={onForgotPassword}\n className=\"text-sm text-primary hover:underline\"\n >\n Forgot password?\n </button>\n )}\n </div>\n <Input\n id=\"password\"\n name=\"password\"\n type=\"password\"\n required\n disabled={loading || disabled}\n autoComplete=\"current-password\"\n />\n </div>\n\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id=\"remember\"\n checked={rememberMe}\n onCheckedChange={(checked) => setRememberMe(checked === true)}\n disabled={loading || disabled}\n />\n <label htmlFor=\"remember\" className=\"text-sm text-muted-foreground cursor-pointer\">\n Remember me\n </label>\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={loading || disabled}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Sign in\n </Button>\n </form>\n\n {(signUpHref || onSignUp) && (\n <p className=\"text-center text-sm text-muted-foreground\">\n Don&apos;t have an account?{\" \"}\n {onSignUp ? (\n <button type=\"button\" onClick={onSignUp} className=\"text-primary hover:underline font-medium\">\n Sign up\n </button>\n ) : (\n <a href={signUpHref} className=\"text-primary hover:underline font-medium\">\n Sign up\n </a>\n )}\n </p>\n )}\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Label } from \"../../components/label\";\nimport { Checkbox } from \"../../components/checkbox\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\nimport { SocialProviders, type SocialProvider } from \"./social-providers\";\nimport { Separator } from \"../../components/separator\";\n\nexport interface SignUpBlockProps {\n onSubmit: (data: { name: string; email: string; password: string; confirmPassword: string; termsAccepted: boolean }) => void | Promise<void>;\n onSocialLogin?: (provider: SocialProvider) => void;\n socialProviders?: SocialProvider[];\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n title?: string;\n description?: string;\n signInHref?: string;\n onSignIn?: () => void;\n termsHref?: string;\n privacyHref?: string;\n className?: string;\n}\n\nexport function SignUpBlock({\n onSubmit,\n onSocialLogin,\n socialProviders = [],\n loading = false,\n error,\n disabled = false,\n title = \"Create an account\",\n description = \"Enter your details to get started\",\n signInHref,\n onSignIn,\n termsHref = \"#\",\n privacyHref = \"#\",\n className,\n}: SignUpBlockProps) {\n const [termsAccepted, setTermsAccepted] = React.useState(false);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n await onSubmit({\n name: formData.get(\"name\") as string,\n email: formData.get(\"email\") as string,\n password: formData.get(\"password\") as string,\n confirmPassword: formData.get(\"confirmPassword\") as string,\n termsAccepted,\n });\n };\n\n return (\n <Card className={cn(\"w-full max-w-md mx-auto\", className)}>\n <CardHeader className=\"text-center\">\n <CardTitle>{title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {socialProviders.length > 0 && onSocialLogin && (\n <>\n <SocialProviders\n providers={socialProviders}\n onSocialLogin={onSocialLogin}\n loading={loading}\n disabled={disabled}\n />\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <Separator className=\"w-full\" />\n </div>\n <div className=\"relative flex justify-center text-xs uppercase\">\n <span className=\"bg-card px-2 text-muted-foreground\">Or continue with</span>\n </div>\n </div>\n </>\n )}\n\n <FormError message={error} />\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">Full name</Label>\n <Input id=\"name\" name=\"name\" placeholder=\"John Doe\" required disabled={loading || disabled} autoComplete=\"name\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input id=\"email\" name=\"email\" type=\"email\" placeholder=\"name@example.com\" required disabled={loading || disabled} autoComplete=\"email\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"password\">Password</Label>\n <Input id=\"password\" name=\"password\" type=\"password\" required disabled={loading || disabled} autoComplete=\"new-password\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"confirmPassword\">Confirm password</Label>\n <Input id=\"confirmPassword\" name=\"confirmPassword\" type=\"password\" required disabled={loading || disabled} autoComplete=\"new-password\" />\n </div>\n\n <div className=\"flex items-start space-x-2\">\n <Checkbox\n id=\"terms\"\n checked={termsAccepted}\n onCheckedChange={(checked) => setTermsAccepted(checked === true)}\n disabled={loading || disabled}\n className=\"mt-0.5\"\n />\n <label htmlFor=\"terms\" className=\"text-sm text-muted-foreground cursor-pointer\">\n I agree to the{\" \"}\n <a href={termsHref} className=\"text-primary hover:underline\">terms of service</a>\n {\" \"}and{\" \"}\n <a href={privacyHref} className=\"text-primary hover:underline\">privacy policy</a>\n </label>\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={loading || disabled || !termsAccepted}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Create account\n </Button>\n </form>\n\n {(signInHref || onSignIn) && (\n <p className=\"text-center text-sm text-muted-foreground\">\n Already have an account?{\" \"}\n {onSignIn ? (\n <button type=\"button\" onClick={onSignIn} className=\"text-primary hover:underline font-medium\">\n Sign in\n </button>\n ) : (\n <a href={signInHref} className=\"text-primary hover:underline font-medium\">\n Sign in\n </a>\n )}\n </p>\n )}\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Label } from \"../../components/label\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\nimport { ArrowLeft, Mail } from \"lucide-react\";\n\nexport interface ForgotPasswordBlockProps {\n onSubmit: (data: { email: string }) => void | Promise<void>;\n onBack?: () => void;\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n success?: boolean;\n title?: string;\n description?: string;\n className?: string;\n}\n\nexport function ForgotPasswordBlock({\n onSubmit,\n onBack,\n loading = false,\n error,\n disabled = false,\n success = false,\n title = \"Forgot password\",\n description = \"Enter your email and we'll send you a reset link\",\n className,\n}: ForgotPasswordBlockProps) {\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n await onSubmit({ email: formData.get(\"email\") as string });\n };\n\n return (\n <Card className={cn(\"w-full max-w-md mx-auto\", className)}>\n <CardHeader className=\"text-center\">\n {success ? (\n <>\n <div className=\"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-primary/10\">\n <Mail className=\"h-6 w-6 text-primary\" />\n </div>\n <CardTitle>Check your email</CardTitle>\n <CardDescription>We&apos;ve sent a password reset link to your email address.</CardDescription>\n </>\n ) : (\n <>\n <CardTitle>{title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </>\n )}\n </CardHeader>\n {!success && (\n <CardContent>\n <div className=\"space-y-4\">\n <FormError message={error} />\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input id=\"email\" name=\"email\" type=\"email\" placeholder=\"name@example.com\" required disabled={loading || disabled} autoComplete=\"email\" />\n </div>\n <Button type=\"submit\" className=\"w-full\" disabled={loading || disabled}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Send reset link\n </Button>\n </form>\n {onBack && (\n <button type=\"button\" onClick={onBack} className=\"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mx-auto\">\n <ArrowLeft className=\"h-4 w-4\" /> Back to sign in\n </button>\n )}\n </div>\n </CardContent>\n )}\n </Card>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Label } from \"../../components/label\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\n\nexport interface ResetPasswordBlockProps {\n onSubmit: (data: { password: string; confirmPassword: string }) => void | Promise<void>;\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n title?: string;\n description?: string;\n className?: string;\n}\n\nexport function ResetPasswordBlock({\n onSubmit,\n loading = false,\n error,\n disabled = false,\n title = \"Reset password\",\n description = \"Enter your new password below\",\n className,\n}: ResetPasswordBlockProps) {\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n await onSubmit({\n password: formData.get(\"password\") as string,\n confirmPassword: formData.get(\"confirmPassword\") as string,\n });\n };\n\n return (\n <Card className={cn(\"w-full max-w-md mx-auto\", className)}>\n <CardHeader className=\"text-center\">\n <CardTitle>{title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <FormError message={error} />\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"password\">New password</Label>\n <Input id=\"password\" name=\"password\" type=\"password\" required disabled={loading || disabled} autoComplete=\"new-password\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"confirmPassword\">Confirm new password</Label>\n <Input id=\"confirmPassword\" name=\"confirmPassword\" type=\"password\" required disabled={loading || disabled} autoComplete=\"new-password\" />\n </div>\n <Button type=\"submit\" className=\"w-full\" disabled={loading || disabled}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Reset password\n </Button>\n </form>\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\n\nexport interface VerifyBlockProps {\n onVerify: (code: string) => void | Promise<void>;\n onResend?: () => void | Promise<void>;\n codeLength?: number;\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n title?: string;\n description?: string;\n resendCooldown?: number;\n className?: string;\n}\n\nexport function VerifyBlock({\n onVerify,\n onResend,\n codeLength = 6,\n loading = false,\n error,\n disabled = false,\n title = \"Verify your account\",\n description = \"Enter the verification code sent to your email\",\n resendCooldown = 60,\n className,\n}: VerifyBlockProps) {\n const [code, setCode] = React.useState<string[]>(Array(codeLength).fill(\"\"));\n const [countdown, setCountdown] = React.useState(0);\n const inputRefs = React.useRef<(HTMLInputElement | null)[]>([]);\n\n React.useEffect(() => {\n if (countdown > 0) {\n const timer = setTimeout(() => setCountdown(countdown - 1), 1000);\n return () => clearTimeout(timer);\n }\n }, [countdown]);\n\n const handleChange = (index: number, value: string) => {\n if (!/^\\d*$/.test(value)) return;\n const newCode = [...code];\n newCode[index] = value.slice(-1);\n setCode(newCode);\n\n if (value && index < codeLength - 1) {\n inputRefs.current[index + 1]?.focus();\n }\n\n const fullCode = newCode.join(\"\");\n if (fullCode.length === codeLength && newCode.every(Boolean)) {\n onVerify(fullCode);\n }\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent) => {\n if (e.key === \"Backspace\" && !code[index] && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, codeLength);\n const newCode = [...code];\n for (let i = 0; i < pasted.length; i++) {\n newCode[i] = pasted[i];\n }\n setCode(newCode);\n if (pasted.length === codeLength) {\n onVerify(pasted);\n } else {\n inputRefs.current[pasted.length]?.focus();\n }\n };\n\n const handleResend = async () => {\n setCountdown(resendCooldown);\n await onResend?.();\n };\n\n return (\n <Card className={cn(\"w-full max-w-md mx-auto\", className)}>\n <CardHeader className=\"text-center\">\n <CardTitle>{title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <FormError message={error} />\n <div className=\"flex justify-center gap-2\" onPaste={handlePaste}>\n {code.map((digit, index) => (\n <Input\n key={index}\n ref={(el) => { inputRefs.current[index] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n disabled={loading || disabled}\n className=\"h-12 w-12 text-center text-lg font-semibold\"\n autoFocus={index === 0}\n />\n ))}\n </div>\n\n {loading && (\n <div className=\"flex justify-center\">\n <Spinner size=\"sm\" />\n </div>\n )}\n\n {onResend && (\n <div className=\"text-center\">\n {countdown > 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n Resend code in {countdown}s\n </p>\n ) : (\n <Button variant=\"ghost\" size=\"sm\" onClick={handleResend} disabled={loading || disabled}>\n Resend code\n </Button>\n )}\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { FileQuestion } from \"lucide-react\";\n\nexport interface NotFoundBlockProps {\n title?: string;\n message?: string;\n homeHref?: string;\n onGoHome?: () => void;\n className?: string;\n}\n\nexport function NotFoundBlock({\n title = \"Page not found\",\n message = \"Sorry, we couldn't find the page you're looking for. It may have been moved or deleted.\",\n homeHref = \"/\",\n onGoHome,\n className,\n}: NotFoundBlockProps) {\n return (\n <div className={cn(\"flex min-h-[60vh] flex-col items-center justify-center text-center px-4\", className)}>\n <div className=\"mb-8 flex h-24 w-24 items-center justify-center rounded-full bg-muted\">\n <FileQuestion className=\"h-12 w-12 text-muted-foreground\" />\n </div>\n <h1 className=\"text-4xl font-bold tracking-tight mb-2\">404</h1>\n <h2 className=\"text-xl font-semibold mb-2\">{title}</h2>\n <p className=\"text-muted-foreground max-w-md mb-8\">{message}</p>\n {onGoHome ? (\n <Button onClick={onGoHome}>Go back home</Button>\n ) : (\n <Button asChild>\n <a href={homeHref}>Go back home</a>\n </Button>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { ServerCrash } from \"lucide-react\";\n\nexport interface ServerErrorBlockProps {\n title?: string;\n message?: string;\n onRetry?: () => void;\n homeHref?: string;\n onGoHome?: () => void;\n className?: string;\n}\n\nexport function ServerErrorBlock({\n title = \"Something went wrong\",\n message = \"An unexpected error occurred. Our team has been notified and is working on a fix.\",\n onRetry,\n homeHref = \"/\",\n onGoHome,\n className,\n}: ServerErrorBlockProps) {\n return (\n <div className={cn(\"flex min-h-[60vh] flex-col items-center justify-center text-center px-4\", className)}>\n <div className=\"mb-8 flex h-24 w-24 items-center justify-center rounded-full bg-destructive/10\">\n <ServerCrash className=\"h-12 w-12 text-destructive\" />\n </div>\n <h1 className=\"text-4xl font-bold tracking-tight mb-2\">500</h1>\n <h2 className=\"text-xl font-semibold mb-2\">{title}</h2>\n <p className=\"text-muted-foreground max-w-md mb-8\">{message}</p>\n <div className=\"flex gap-3\">\n {onRetry && (\n <Button onClick={onRetry}>Try again</Button>\n )}\n {onGoHome ? (\n <Button variant=\"outline\" onClick={onGoHome}>Go home</Button>\n ) : (\n <Button variant=\"outline\" asChild>\n <a href={homeHref}>Go home</a>\n </Button>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Wrench } from \"lucide-react\";\n\nexport interface MaintenanceBlockProps {\n title?: string;\n message?: string;\n estimatedReturn?: string;\n className?: string;\n}\n\nexport function MaintenanceBlock({\n title = \"Under maintenance\",\n message = \"We're performing scheduled maintenance to improve your experience. We'll be back shortly.\",\n estimatedReturn,\n className,\n}: MaintenanceBlockProps) {\n return (\n <div className={cn(\"flex min-h-[60vh] flex-col items-center justify-center text-center px-4\", className)}>\n <div className=\"mb-8 flex h-24 w-24 items-center justify-center rounded-full bg-muted\">\n <Wrench className=\"h-12 w-12 text-muted-foreground\" />\n </div>\n <h2 className=\"text-xl font-semibold mb-2\">{title}</h2>\n <p className=\"text-muted-foreground max-w-md mb-4\">{message}</p>\n {estimatedReturn && (\n <p className=\"text-sm text-muted-foreground\">\n Estimated return: <span className=\"font-medium text-foreground\">{estimatedReturn}</span>\n </p>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Inbox, type LucideIcon } from \"lucide-react\";\n\nexport interface EmptyStateBlockProps {\n icon?: LucideIcon;\n title?: string;\n description?: string;\n actionLabel?: string;\n onAction?: () => void;\n className?: string;\n}\n\nexport function EmptyStateBlock({\n icon: Icon = Inbox,\n title = \"No results found\",\n description = \"There's nothing here yet. Get started by creating your first item.\",\n actionLabel,\n onAction,\n className,\n}: EmptyStateBlockProps) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center text-center py-16 px-4\", className)}>\n <div className=\"mb-6 flex h-16 w-16 items-center justify-center rounded-full bg-muted\">\n <Icon className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-1\">{title}</h3>\n <p className=\"text-sm text-muted-foreground max-w-sm mb-6\">{description}</p>\n {actionLabel && onAction && (\n <Button onClick={onAction}>{actionLabel}</Button>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PageShellProps {\n children: React.ReactNode;\n sidebar?: React.ReactNode;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n sidebarWidth?: string;\n sidebarCollapsed?: boolean;\n className?: string;\n}\n\nexport function PageShell({\n children,\n sidebar,\n header,\n footer,\n sidebarWidth = \"16rem\",\n sidebarCollapsed = false,\n className,\n}: PageShellProps) {\n return (\n <div className={cn(\"flex min-h-screen flex-col\", className)}>\n {header}\n <div className=\"flex flex-1\">\n {sidebar && (\n <aside\n className={cn(\n \"hidden border-r bg-card transition-all duration-normal ease-default md:block\",\n sidebarCollapsed && \"w-16\"\n )}\n style={sidebarCollapsed ? undefined : { width: sidebarWidth }}\n >\n {sidebar}\n </aside>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </div>\n {footer}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Menu } from \"lucide-react\";\n\nexport interface HeaderBlockProps {\n logo?: React.ReactNode;\n nav?: React.ReactNode;\n actions?: React.ReactNode;\n onMenuToggle?: () => void;\n sticky?: boolean;\n className?: string;\n}\n\nexport function HeaderBlock({\n logo,\n nav,\n actions,\n onMenuToggle,\n sticky = true,\n className,\n}: HeaderBlockProps) {\n return (\n <header\n className={cn(\n \"flex h-16 items-center gap-4 border-b bg-background px-4 md:px-6\",\n sticky && \"sticky top-0 z-[var(--z-sticky)]\",\n className\n )}\n >\n {onMenuToggle && (\n <Button variant=\"ghost\" size=\"icon\" className=\"md:hidden\" onClick={onMenuToggle}>\n <Menu className=\"h-5 w-5\" />\n <span className=\"sr-only\">Toggle menu</span>\n </Button>\n )}\n {logo && <div className=\"flex items-center gap-2 font-semibold\">{logo}</div>}\n {nav && <nav className=\"hidden md:flex items-center gap-6 text-sm font-medium flex-1\">{nav}</nav>}\n {actions && <div className=\"ml-auto flex items-center gap-2\">{actions}</div>}\n </header>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SidebarItem {\n label: string;\n href?: string;\n icon?: React.ReactNode;\n active?: boolean;\n onClick?: () => void;\n children?: SidebarItem[];\n}\n\nexport interface SidebarSection {\n title?: string;\n items: SidebarItem[];\n}\n\nexport interface SidebarBlockProps {\n sections: SidebarSection[];\n header?: React.ReactNode;\n footer?: React.ReactNode;\n collapsed?: boolean;\n className?: string;\n}\n\nfunction SidebarItemComponent({ item, collapsed }: { item: SidebarItem; collapsed?: boolean }) {\n const Comp = item.href ? \"a\" : \"button\";\n return (\n <Comp\n href={item.href}\n onClick={item.onClick}\n className={cn(\n \"flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground\",\n item.active && \"bg-accent text-accent-foreground\",\n collapsed && \"justify-center px-2\"\n )}\n >\n {item.icon && <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{item.icon}</span>}\n {!collapsed && <span>{item.label}</span>}\n </Comp>\n );\n}\n\nexport function SidebarBlock({\n sections,\n header,\n footer,\n collapsed = false,\n className,\n}: SidebarBlockProps) {\n return (\n <div className={cn(\"flex h-full flex-col\", className)}>\n {header && (\n <div className={cn(\"border-b p-4\", collapsed && \"p-2\")}>{header}</div>\n )}\n <nav className=\"flex-1 space-y-4 overflow-y-auto p-4\">\n {sections.map((section, sIdx) => (\n <div key={sIdx} className=\"space-y-1\">\n {section.title && !collapsed && (\n <p className=\"px-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {section.title}\n </p>\n )}\n {section.items.map((item, iIdx) => (\n <SidebarItemComponent key={iIdx} item={item} collapsed={collapsed} />\n ))}\n </div>\n ))}\n </nav>\n {footer && (\n <div className={cn(\"border-t p-4\", collapsed && \"p-2\")}>{footer}</div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\nexport interface FooterBlockProps {\n copyright?: string;\n links?: FooterLink[];\n logo?: React.ReactNode;\n className?: string;\n}\n\nexport function FooterBlock({\n copyright,\n links = [],\n logo,\n className,\n}: FooterBlockProps) {\n return (\n <footer className={cn(\"border-t bg-background\", className)}>\n <div className=\"flex flex-col items-center gap-4 px-4 py-6 md:flex-row md:justify-between md:px-6\">\n <div className=\"flex items-center gap-2\">\n {logo}\n {copyright && (\n <p className=\"text-sm text-muted-foreground\">{copyright}</p>\n )}\n </div>\n {links.length > 0 && (\n <nav className=\"flex gap-4\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n {link.label}\n </a>\n ))}\n </nav>\n )}\n </div>\n </footer>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Label } from \"../../components/label\";\nimport { Textarea } from \"../../components/textarea\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../../components/avatar\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\nimport { Camera } from \"lucide-react\";\n\nexport interface ProfileSettingsData {\n name: string;\n email: string;\n bio?: string;\n avatarUrl?: string;\n}\n\nexport interface ProfileSettingsBlockProps {\n initialData: ProfileSettingsData;\n onSave: (data: ProfileSettingsData) => void | Promise<void>;\n onAvatarChange?: (file: File) => void | Promise<void>;\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function ProfileSettingsBlock({\n initialData,\n onSave,\n onAvatarChange,\n loading = false,\n error,\n disabled = false,\n className,\n}: ProfileSettingsBlockProps) {\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n await onSave({\n name: formData.get(\"name\") as string,\n email: formData.get(\"email\") as string,\n bio: formData.get(\"bio\") as string,\n avatarUrl: initialData.avatarUrl,\n });\n };\n\n const handleAvatarClick = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file && onAvatarChange) {\n onAvatarChange(file);\n }\n };\n\n const initials = initialData.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n\n return (\n <Card className={cn(\"w-full max-w-2xl\", className)}>\n <CardHeader>\n <CardTitle>Profile</CardTitle>\n <CardDescription>Manage your personal information</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-6\">\n <FormError message={error} />\n\n <div className=\"flex items-center gap-4\">\n <div className=\"relative group\">\n <Avatar className=\"h-20 w-20\">\n {initialData.avatarUrl && <AvatarImage src={initialData.avatarUrl} alt={initialData.name} />}\n <AvatarFallback className=\"text-lg\">{initials}</AvatarFallback>\n </Avatar>\n {onAvatarChange && (\n <button\n type=\"button\"\n onClick={handleAvatarClick}\n disabled={loading || disabled}\n className=\"absolute inset-0 flex items-center justify-center rounded-full bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <Camera className=\"h-5 w-5 text-white\" />\n </button>\n )}\n <input ref={fileInputRef} type=\"file\" accept=\"image/*\" className=\"hidden\" onChange={handleFileChange} />\n </div>\n <div>\n <p className=\"font-medium\">{initialData.name}</p>\n <p className=\"text-sm text-muted-foreground\">{initialData.email}</p>\n </div>\n </div>\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">Name</Label>\n <Input id=\"name\" name=\"name\" defaultValue={initialData.name} required disabled={loading || disabled} />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\">Email</Label>\n <Input id=\"email\" name=\"email\" type=\"email\" defaultValue={initialData.email} required disabled={loading || disabled} />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"bio\">Bio</Label>\n <Textarea id=\"bio\" name=\"bio\" defaultValue={initialData.bio} placeholder=\"Tell us about yourself...\" disabled={loading || disabled} rows={3} />\n </div>\n <div className=\"flex justify-end\">\n <Button type=\"submit\" disabled={loading || disabled}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Save changes\n </Button>\n </div>\n </form>\n </div>\n </CardContent>\n </Card>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Input } from \"../../components/input\";\nimport { Label } from \"../../components/label\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Separator } from \"../../components/separator\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"../../components/alert-dialog\";\n\nexport interface AccountSettingsBlockProps {\n onChangePassword: (data: { currentPassword: string; newPassword: string; confirmPassword: string }) => void | Promise<void>;\n onDeleteAccount?: () => void | Promise<void>;\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function AccountSettingsBlock({\n onChangePassword,\n onDeleteAccount,\n loading = false,\n error,\n disabled = false,\n className,\n}: AccountSettingsBlockProps) {\n const handlePasswordSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n await onChangePassword({\n currentPassword: formData.get(\"currentPassword\") as string,\n newPassword: formData.get(\"newPassword\") as string,\n confirmPassword: formData.get(\"confirmPassword\") as string,\n });\n e.currentTarget.reset();\n };\n\n return (\n <div className={cn(\"w-full max-w-2xl space-y-6\", className)}>\n <Card>\n <CardHeader>\n <CardTitle>Change password</CardTitle>\n <CardDescription>Update your password to keep your account secure</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <FormError message={error} />\n <form onSubmit={handlePasswordSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"currentPassword\">Current password</Label>\n <Input id=\"currentPassword\" name=\"currentPassword\" type=\"password\" required disabled={loading || disabled} autoComplete=\"current-password\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"newPassword\">New password</Label>\n <Input id=\"newPassword\" name=\"newPassword\" type=\"password\" required disabled={loading || disabled} autoComplete=\"new-password\" />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"confirmPassword\">Confirm new password</Label>\n <Input id=\"confirmPassword\" name=\"confirmPassword\" type=\"password\" required disabled={loading || disabled} autoComplete=\"new-password\" />\n </div>\n <div className=\"flex justify-end\">\n <Button type=\"submit\" disabled={loading || disabled}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Update password\n </Button>\n </div>\n </form>\n </div>\n </CardContent>\n </Card>\n\n {onDeleteAccount && (\n <Card className=\"border-destructive/50\">\n <CardHeader>\n <CardTitle className=\"text-destructive\">Danger zone</CardTitle>\n <CardDescription>Permanently delete your account and all associated data</CardDescription>\n </CardHeader>\n <CardContent>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"destructive\" disabled={loading || disabled}>\n Delete account\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you absolutely sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This action cannot be undone. This will permanently delete your account and remove all your data from our servers.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction onClick={onDeleteAccount} className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\">\n Delete account\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Switch } from \"../../components/switch\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"../../components/card\";\nimport { Spinner } from \"../../components/spinner\";\nimport { FormError } from \"../../form/form-error\";\n\nexport interface NotificationSetting {\n id: string;\n label: string;\n description: string;\n enabled: boolean;\n}\n\nexport interface NotificationGroup {\n title: string;\n description?: string;\n settings: NotificationSetting[];\n}\n\nexport interface NotificationSettingsBlockProps {\n groups: NotificationGroup[];\n onSave: (settings: Record<string, boolean>) => void | Promise<void>;\n loading?: boolean;\n error?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function NotificationSettingsBlock({\n groups,\n onSave,\n loading = false,\n error,\n disabled = false,\n className,\n}: NotificationSettingsBlockProps) {\n const [values, setValues] = React.useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const group of groups) {\n for (const setting of group.settings) {\n initial[setting.id] = setting.enabled;\n }\n }\n return initial;\n });\n\n const handleToggle = (id: string, checked: boolean) => {\n setValues((prev) => ({ ...prev, [id]: checked }));\n };\n\n const handleSave = async () => {\n await onSave(values);\n };\n\n return (\n <div className={cn(\"w-full max-w-2xl space-y-6\", className)}>\n <FormError message={error} />\n\n {groups.map((group, gIdx) => (\n <Card key={gIdx}>\n <CardHeader>\n <CardTitle className=\"text-lg\">{group.title}</CardTitle>\n {group.description && <CardDescription>{group.description}</CardDescription>}\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {group.settings.map((setting) => (\n <div key={setting.id} className=\"flex items-center justify-between gap-4\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{setting.label}</p>\n <p className=\"text-sm text-muted-foreground\">{setting.description}</p>\n </div>\n <Switch\n checked={values[setting.id]}\n onCheckedChange={(checked) => handleToggle(setting.id, checked)}\n disabled={loading || disabled}\n />\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n ))}\n\n <div className=\"flex justify-end\">\n <Button onClick={handleSave} disabled={loading || disabled}>\n {loading ? <Spinner size=\"sm\" className=\"mr-2\" /> : null}\n Save preferences\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@bison-lab/ui",
3
+ "version": "0.1.0",
4
+ "description": "React components, form system, and blocks for Bison Lab component library",
5
+ "type": "module",
6
+ "main": "./dist/index.mjs",
7
+ "types": "./dist/index.d.mts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "types": "./dist/index.d.mts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "radix-ui": "^1.4.3",
19
+ "class-variance-authority": "^0.7.1",
20
+ "clsx": "^2.1.1",
21
+ "cmdk": "^1.1.1",
22
+ "lucide-react": "^0.577.0",
23
+ "sonner": "^2.0.7",
24
+ "tailwind-merge": "^3.5.0",
25
+ "zod": "^3.24.0",
26
+ "@bison-lab/tokens": "0.1.0"
27
+ },
28
+ "peerDependencies": {
29
+ "react": "^18.0.0 || ^19.0.0",
30
+ "react-dom": "^18.0.0 || ^19.0.0",
31
+ "react-hook-form": "^7.0.0"
32
+ },
33
+ "peerDependenciesMeta": {
34
+ "react-hook-form": {
35
+ "optional": true
36
+ }
37
+ },
38
+ "devDependencies": {
39
+ "@types/react": "^19.2.14",
40
+ "@types/react-dom": "^19.2.3",
41
+ "react": "^19.2.4",
42
+ "react-dom": "^19.2.4",
43
+ "tsdown": "^0.21.0",
44
+ "typescript": "^5.9.3"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "scripts": {
50
+ "build": "tsdown",
51
+ "dev": "tsdown --watch",
52
+ "clean": "rm -rf dist",
53
+ "typecheck": "tsc --noEmit"
54
+ }
55
+ }