@lerpa/mcp-server 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/registry/registry.json +25 -25
package/package.json
CHANGED
package/registry/registry.json
CHANGED
|
@@ -596,17 +596,17 @@
|
|
|
596
596
|
{
|
|
597
597
|
"path": "components/blocks/button.tsx",
|
|
598
598
|
"type": "registry:block",
|
|
599
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
599
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\nimport { Spinner } from './spinner';\n\nconst buttonVariants = cva(\n 'relative inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.98] motion-reduce:active:scale-100 motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 shadow-sm hover:shadow',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 shadow-sm hover:shadow',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent active:bg-accent/80',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground active:bg-accent/80',\n link: 'text-primary underline-offset-4 hover:underline active:text-primary/80',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild: _asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === 'lg' ? 'default' : 'sm'}\n label={loadingLabel ?? 'Loading'}\n aria-hidden={!loadingLabel || undefined}\n />\n )}\n {loading && loadingLabel ? <span>{loadingLabel}</span> : children}\n </button>\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"
|
|
600
600
|
},
|
|
601
601
|
{
|
|
602
602
|
"path": "components/blocks/container.tsx",
|
|
603
603
|
"type": "registry:block",
|
|
604
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
604
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType;\n clean?: boolean;\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Component = 'div', clean = false, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(\n !clean && 'mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8',\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n"
|
|
605
605
|
},
|
|
606
606
|
{
|
|
607
607
|
"path": "components/blocks/spinner.tsx",
|
|
608
608
|
"type": "registry:block",
|
|
609
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
609
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\n\nconst spinnerVariants = cva(\n 'inline-block animate-spin rounded-full border-current border-solid border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n {\n variants: {\n size: {\n xs: 'h-3 w-3 border',\n sm: 'h-4 w-4 border-2',\n default: 'h-5 w-5 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'>,\n VariantProps<typeof spinnerVariants> {\n label?: string;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label = 'Loading', ...props }, ref) => {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n }\n);\nSpinner.displayName = 'Spinner';\n\nexport { Spinner, spinnerVariants };\n"
|
|
610
610
|
}
|
|
611
611
|
]
|
|
612
612
|
},
|
|
@@ -7007,27 +7007,27 @@
|
|
|
7007
7007
|
{
|
|
7008
7008
|
"path": "components/blocks/card.tsx",
|
|
7009
7009
|
"type": "registry:block",
|
|
7010
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
7010
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const isInteractive =\n typeof props.onClick === 'function' || props.tabIndex !== undefined || props.role === 'button';\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-sm transition-all duration-150 ease-out',\n isInteractive &&\n 'cursor-pointer hover:shadow-md hover:border-border/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.99] motion-reduce:active:scale-100 motion-reduce:transition-none',\n className\n )}\n {...props}\n />\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-6', className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) =>\n children == null || children === '' ? null : (\n <h3\n ref={ref}\n className={cn('text-2xl font-semibold leading-none tracking-tight', className)}\n {...props}\n >\n {children}\n </h3>\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 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-6 pt-0 border-t border-border mt-6', className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"
|
|
7011
7011
|
},
|
|
7012
7012
|
{
|
|
7013
7013
|
"path": "components/blocks/stat-card.tsx",
|
|
7014
7014
|
"type": "registry:block",
|
|
7015
|
-
"content": "import React from 'react';\nimport { Card, CardContent } from './card';\nimport { cn } from \"@/lib/
|
|
7015
|
+
"content": "import React from 'react';\nimport { Card, CardContent } from './card';\nimport { cn } from \"@/lib/utils\";\nimport { ArrowUpRight, ArrowDownRight } from 'lucide-react';\n\nexport interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n value: string | number;\n change?: number;\n changeType?: 'positive' | 'negative' | 'neutral';\n timeframe?: string;\n icon?: React.ReactNode;\n trendLabel?: string;\n}\n\nconst StatCard = React.forwardRef<HTMLDivElement, StatCardProps>(\n ({ className, title, value, change, changeType, timeframe, icon, trendLabel, ...props }, ref) => {\n const defaultChangeType = change !== undefined\n ? change > 0 ? 'positive' : change < 0 ? 'negative' : 'neutral'\n : changeType;\n\n const isPositive = defaultChangeType === 'positive';\n const isNegative = defaultChangeType === 'negative';\n\n return (\n <Card ref={ref} className={cn('overflow-hidden relative', className)} {...props}>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium text-muted-foreground truncate\">{title}</p>\n {icon && (\n <div className=\"p-2 bg-muted rounded-md text-muted-foreground\">\n {icon}\n </div>\n )}\n </div>\n <div className=\"mt-2 flex items-baseline justify-between\">\n <div>\n {value != null && value !== '' && (\n <h4 className=\"text-3xl font-bold tracking-tight text-foreground\">{value}</h4>\n )}\n </div>\n </div>\n {(change !== undefined || timeframe || trendLabel) && (\n <div className=\"mt-4 flex items-center gap-2 text-xs\">\n {change !== undefined && (\n <span\n className={cn(\n 'flex items-center gap-0.5 font-semibold px-1.5 py-0.5 rounded-full',\n isPositive && 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n isNegative && 'bg-rose-500/10 text-rose-600 dark:text-rose-400',\n !isPositive && !isNegative && 'bg-muted text-muted-foreground'\n )}\n >\n {isPositive && <ArrowUpRight className=\"h-3 w-3 shrink-0\" />}\n {isNegative && <ArrowDownRight className=\"h-3 w-3 shrink-0\" />}\n {Math.abs(change)}%\n </span>\n )}\n {trendLabel && <span className=\"text-muted-foreground font-medium\">{trendLabel}</span>}\n {timeframe && <span className=\"text-muted-foreground/80\">{timeframe}</span>}\n </div>\n )}\n </CardContent>\n </Card>\n );\n }\n);\nStatCard.displayName = 'StatCard';\n\nexport { StatCard };\n"
|
|
7016
7016
|
},
|
|
7017
7017
|
{
|
|
7018
7018
|
"path": "components/blocks/container.tsx",
|
|
7019
7019
|
"type": "registry:block",
|
|
7020
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
7020
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType;\n clean?: boolean;\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Component = 'div', clean = false, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(\n !clean && 'mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8',\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n"
|
|
7021
7021
|
},
|
|
7022
7022
|
{
|
|
7023
7023
|
"path": "components/blocks/button.tsx",
|
|
7024
7024
|
"type": "registry:block",
|
|
7025
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
7025
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\nimport { Spinner } from './spinner';\n\nconst buttonVariants = cva(\n 'relative inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.98] motion-reduce:active:scale-100 motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 shadow-sm hover:shadow',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 shadow-sm hover:shadow',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent active:bg-accent/80',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground active:bg-accent/80',\n link: 'text-primary underline-offset-4 hover:underline active:text-primary/80',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild: _asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === 'lg' ? 'default' : 'sm'}\n label={loadingLabel ?? 'Loading'}\n aria-hidden={!loadingLabel || undefined}\n />\n )}\n {loading && loadingLabel ? <span>{loadingLabel}</span> : children}\n </button>\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"
|
|
7026
7026
|
},
|
|
7027
7027
|
{
|
|
7028
7028
|
"path": "components/blocks/spinner.tsx",
|
|
7029
7029
|
"type": "registry:block",
|
|
7030
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
7030
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\n\nconst spinnerVariants = cva(\n 'inline-block animate-spin rounded-full border-current border-solid border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n {\n variants: {\n size: {\n xs: 'h-3 w-3 border',\n sm: 'h-4 w-4 border-2',\n default: 'h-5 w-5 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'>,\n VariantProps<typeof spinnerVariants> {\n label?: string;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label = 'Loading', ...props }, ref) => {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n }\n);\nSpinner.displayName = 'Spinner';\n\nexport { Spinner, spinnerVariants };\n"
|
|
7031
7031
|
}
|
|
7032
7032
|
]
|
|
7033
7033
|
},
|
|
@@ -9940,17 +9940,17 @@
|
|
|
9940
9940
|
{
|
|
9941
9941
|
"path": "components/blocks/card.tsx",
|
|
9942
9942
|
"type": "registry:block",
|
|
9943
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
9943
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const isInteractive =\n typeof props.onClick === 'function' || props.tabIndex !== undefined || props.role === 'button';\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-sm transition-all duration-150 ease-out',\n isInteractive &&\n 'cursor-pointer hover:shadow-md hover:border-border/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.99] motion-reduce:active:scale-100 motion-reduce:transition-none',\n className\n )}\n {...props}\n />\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-6', className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) =>\n children == null || children === '' ? null : (\n <h3\n ref={ref}\n className={cn('text-2xl font-semibold leading-none tracking-tight', className)}\n {...props}\n >\n {children}\n </h3>\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 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-6 pt-0 border-t border-border mt-6', className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"
|
|
9944
9944
|
},
|
|
9945
9945
|
{
|
|
9946
9946
|
"path": "components/blocks/section-header.tsx",
|
|
9947
9947
|
"type": "registry:block",
|
|
9948
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cn } from \"@/lib/
|
|
9948
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface SectionHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n tag?: string;\n title: string;\n description?: string;\n align?: 'left' | 'center' | 'right';\n actions?: React.ReactNode;\n}\n\nconst SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ className, tag, title, description, align = 'left', actions, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col md:flex-row md:items-end justify-between gap-6 mb-8 md:mb-12',\n align === 'center' && 'text-center md:flex-col md:items-center',\n align === 'right' && 'text-right md:flex-row-reverse',\n className\n )}\n {...props}\n >\n <div className={cn('flex-1 max-w-3xl', align === 'center' && 'mx-auto')}>\n {tag && (\n <span className=\"inline-block text-sm font-semibold tracking-wider uppercase text-primary mb-2\">\n {tag}\n </span>\n )}\n {title && (\n <h2 className=\"text-3xl font-bold tracking-tight sm:text-4xl text-foreground\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"mt-4 text-lg text-muted-foreground leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div\n className={cn(\n 'flex flex-wrap gap-3 shrink-0',\n align === 'center' && 'justify-center'\n )}\n >\n {actions}\n </div>\n )}\n </div>\n );\n }\n);\nSectionHeader.displayName = 'SectionHeader';\n\nexport { SectionHeader };\n"
|
|
9949
9949
|
},
|
|
9950
9950
|
{
|
|
9951
9951
|
"path": "components/blocks/container.tsx",
|
|
9952
9952
|
"type": "registry:block",
|
|
9953
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
9953
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType;\n clean?: boolean;\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Component = 'div', clean = false, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(\n !clean && 'mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8',\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n"
|
|
9954
9954
|
}
|
|
9955
9955
|
]
|
|
9956
9956
|
},
|
|
@@ -15680,17 +15680,17 @@
|
|
|
15680
15680
|
{
|
|
15681
15681
|
"path": "components/blocks/card.tsx",
|
|
15682
15682
|
"type": "registry:block",
|
|
15683
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
15683
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const isInteractive =\n typeof props.onClick === 'function' || props.tabIndex !== undefined || props.role === 'button';\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-sm transition-all duration-150 ease-out',\n isInteractive &&\n 'cursor-pointer hover:shadow-md hover:border-border/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.99] motion-reduce:active:scale-100 motion-reduce:transition-none',\n className\n )}\n {...props}\n />\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-6', className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) =>\n children == null || children === '' ? null : (\n <h3\n ref={ref}\n className={cn('text-2xl font-semibold leading-none tracking-tight', className)}\n {...props}\n >\n {children}\n </h3>\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 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-6 pt-0 border-t border-border mt-6', className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"
|
|
15684
15684
|
},
|
|
15685
15685
|
{
|
|
15686
15686
|
"path": "components/blocks/button.tsx",
|
|
15687
15687
|
"type": "registry:block",
|
|
15688
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
15688
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\nimport { Spinner } from './spinner';\n\nconst buttonVariants = cva(\n 'relative inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.98] motion-reduce:active:scale-100 motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 shadow-sm hover:shadow',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 shadow-sm hover:shadow',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent active:bg-accent/80',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground active:bg-accent/80',\n link: 'text-primary underline-offset-4 hover:underline active:text-primary/80',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild: _asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === 'lg' ? 'default' : 'sm'}\n label={loadingLabel ?? 'Loading'}\n aria-hidden={!loadingLabel || undefined}\n />\n )}\n {loading && loadingLabel ? <span>{loadingLabel}</span> : children}\n </button>\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"
|
|
15689
15689
|
},
|
|
15690
15690
|
{
|
|
15691
15691
|
"path": "components/blocks/spinner.tsx",
|
|
15692
15692
|
"type": "registry:block",
|
|
15693
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
15693
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\n\nconst spinnerVariants = cva(\n 'inline-block animate-spin rounded-full border-current border-solid border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n {\n variants: {\n size: {\n xs: 'h-3 w-3 border',\n sm: 'h-4 w-4 border-2',\n default: 'h-5 w-5 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'>,\n VariantProps<typeof spinnerVariants> {\n label?: string;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label = 'Loading', ...props }, ref) => {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n }\n);\nSpinner.displayName = 'Spinner';\n\nexport { Spinner, spinnerVariants };\n"
|
|
15694
15694
|
}
|
|
15695
15695
|
]
|
|
15696
15696
|
},
|
|
@@ -15791,17 +15791,17 @@
|
|
|
15791
15791
|
{
|
|
15792
15792
|
"path": "components/blocks/section-header.tsx",
|
|
15793
15793
|
"type": "registry:block",
|
|
15794
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cn } from \"@/lib/
|
|
15794
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface SectionHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n tag?: string;\n title: string;\n description?: string;\n align?: 'left' | 'center' | 'right';\n actions?: React.ReactNode;\n}\n\nconst SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ className, tag, title, description, align = 'left', actions, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col md:flex-row md:items-end justify-between gap-6 mb-8 md:mb-12',\n align === 'center' && 'text-center md:flex-col md:items-center',\n align === 'right' && 'text-right md:flex-row-reverse',\n className\n )}\n {...props}\n >\n <div className={cn('flex-1 max-w-3xl', align === 'center' && 'mx-auto')}>\n {tag && (\n <span className=\"inline-block text-sm font-semibold tracking-wider uppercase text-primary mb-2\">\n {tag}\n </span>\n )}\n {title && (\n <h2 className=\"text-3xl font-bold tracking-tight sm:text-4xl text-foreground\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"mt-4 text-lg text-muted-foreground leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div\n className={cn(\n 'flex flex-wrap gap-3 shrink-0',\n align === 'center' && 'justify-center'\n )}\n >\n {actions}\n </div>\n )}\n </div>\n );\n }\n);\nSectionHeader.displayName = 'SectionHeader';\n\nexport { SectionHeader };\n"
|
|
15795
15795
|
},
|
|
15796
15796
|
{
|
|
15797
15797
|
"path": "components/blocks/container.tsx",
|
|
15798
15798
|
"type": "registry:block",
|
|
15799
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
15799
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType;\n clean?: boolean;\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Component = 'div', clean = false, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(\n !clean && 'mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8',\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n"
|
|
15800
15800
|
},
|
|
15801
15801
|
{
|
|
15802
15802
|
"path": "components/blocks/input.tsx",
|
|
15803
15803
|
"type": "registry:block",
|
|
15804
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
15804
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean | string;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type = 'text', error, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, id, ...props }, ref) => {\n const hasError = Boolean(error) || ariaInvalid === true || ariaInvalid === 'true';\n const errorId = typeof error === 'string' && id ? `${id}-error` : undefined;\n return (\n <>\n <input\n id={id}\n type={type}\n aria-invalid={hasError || undefined}\n aria-describedby={cn(ariaDescribedBy, errorId) || undefined}\n data-state={hasError ? 'error' : undefined}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background transition-colors duration-150 ease-out file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground hover:border-input/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:pointer-events-none',\n hasError &&\n 'border-destructive text-destructive placeholder:text-destructive/60 focus-visible:ring-destructive',\n className\n )}\n ref={ref}\n {...props}\n />\n {typeof error === 'string' && error.length > 0 && (\n <p id={errorId} className=\"mt-1 text-xs text-destructive\" role=\"alert\">\n {error}\n </p>\n )}\n </>\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n"
|
|
15805
15805
|
}
|
|
15806
15806
|
],
|
|
15807
15807
|
"registryDependencies": [
|
|
@@ -16236,12 +16236,12 @@
|
|
|
16236
16236
|
{
|
|
16237
16237
|
"path": "components/blocks/button.tsx",
|
|
16238
16238
|
"type": "registry:block",
|
|
16239
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
16239
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\nimport { Spinner } from './spinner';\n\nconst buttonVariants = cva(\n 'relative inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.98] motion-reduce:active:scale-100 motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 shadow-sm hover:shadow',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 shadow-sm hover:shadow',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent active:bg-accent/80',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground active:bg-accent/80',\n link: 'text-primary underline-offset-4 hover:underline active:text-primary/80',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild: _asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === 'lg' ? 'default' : 'sm'}\n label={loadingLabel ?? 'Loading'}\n aria-hidden={!loadingLabel || undefined}\n />\n )}\n {loading && loadingLabel ? <span>{loadingLabel}</span> : children}\n </button>\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"
|
|
16240
16240
|
},
|
|
16241
16241
|
{
|
|
16242
16242
|
"path": "components/blocks/spinner.tsx",
|
|
16243
16243
|
"type": "registry:block",
|
|
16244
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
16244
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\n\nconst spinnerVariants = cva(\n 'inline-block animate-spin rounded-full border-current border-solid border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n {\n variants: {\n size: {\n xs: 'h-3 w-3 border',\n sm: 'h-4 w-4 border-2',\n default: 'h-5 w-5 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'>,\n VariantProps<typeof spinnerVariants> {\n label?: string;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label = 'Loading', ...props }, ref) => {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n }\n);\nSpinner.displayName = 'Spinner';\n\nexport { Spinner, spinnerVariants };\n"
|
|
16245
16245
|
}
|
|
16246
16246
|
]
|
|
16247
16247
|
},
|
|
@@ -16976,17 +16976,17 @@
|
|
|
16976
16976
|
{
|
|
16977
16977
|
"path": "components/blocks/button.tsx",
|
|
16978
16978
|
"type": "registry:block",
|
|
16979
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
16979
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\nimport { Spinner } from './spinner';\n\nconst buttonVariants = cva(\n 'relative inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.98] motion-reduce:active:scale-100 motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 shadow-sm hover:shadow',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 shadow-sm hover:shadow',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground hover:border-accent active:bg-accent/80',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70',\n ghost: 'hover:bg-accent hover:text-accent-foreground active:bg-accent/80',\n link: 'text-primary underline-offset-4 hover:underline active:text-primary/80',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n loadingLabel?: string;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild: _asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n {...props}\n >\n {loading && (\n <Spinner\n size={size === 'lg' ? 'default' : 'sm'}\n label={loadingLabel ?? 'Loading'}\n aria-hidden={!loadingLabel || undefined}\n />\n )}\n {loading && loadingLabel ? <span>{loadingLabel}</span> : children}\n </button>\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n"
|
|
16980
16980
|
},
|
|
16981
16981
|
{
|
|
16982
16982
|
"path": "components/blocks/container.tsx",
|
|
16983
16983
|
"type": "registry:block",
|
|
16984
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
16984
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType;\n clean?: boolean;\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Component = 'div', clean = false, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(\n !clean && 'mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8',\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n"
|
|
16985
16985
|
},
|
|
16986
16986
|
{
|
|
16987
16987
|
"path": "components/blocks/spinner.tsx",
|
|
16988
16988
|
"type": "registry:block",
|
|
16989
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/
|
|
16989
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from \"@/lib/utils\";\n\nconst spinnerVariants = cva(\n 'inline-block animate-spin rounded-full border-current border-solid border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n {\n variants: {\n size: {\n xs: 'h-3 w-3 border',\n sm: 'h-4 w-4 border-2',\n default: 'h-5 w-5 border-2',\n lg: 'h-8 w-8 border-[3px]',\n xl: 'h-12 w-12 border-4',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'role'>,\n VariantProps<typeof spinnerVariants> {\n label?: string;\n}\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size, label = 'Loading', ...props }, ref) => {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </span>\n );\n }\n);\nSpinner.displayName = 'Spinner';\n\nexport { Spinner, spinnerVariants };\n"
|
|
16990
16990
|
}
|
|
16991
16991
|
]
|
|
16992
16992
|
},
|
|
@@ -17431,17 +17431,17 @@
|
|
|
17431
17431
|
{
|
|
17432
17432
|
"path": "components/blocks/card.tsx",
|
|
17433
17433
|
"type": "registry:block",
|
|
17434
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
17434
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const isInteractive =\n typeof props.onClick === 'function' || props.tabIndex !== undefined || props.role === 'button';\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-sm transition-all duration-150 ease-out',\n isInteractive &&\n 'cursor-pointer hover:shadow-md hover:border-border/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:scale-[0.99] motion-reduce:active:scale-100 motion-reduce:transition-none',\n className\n )}\n {...props}\n />\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-6', className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) =>\n children == null || children === '' ? null : (\n <h3\n ref={ref}\n className={cn('text-2xl font-semibold leading-none tracking-tight', className)}\n {...props}\n >\n {children}\n </h3>\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 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-6 pt-0 border-t border-border mt-6', className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n"
|
|
17435
17435
|
},
|
|
17436
17436
|
{
|
|
17437
17437
|
"path": "components/blocks/section-header.tsx",
|
|
17438
17438
|
"type": "registry:block",
|
|
17439
|
-
"content": "\"use client\";\n\nimport React from 'react';\nimport { cn } from \"@/lib/
|
|
17439
|
+
"content": "\"use client\";\n\nimport React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface SectionHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n tag?: string;\n title: string;\n description?: string;\n align?: 'left' | 'center' | 'right';\n actions?: React.ReactNode;\n}\n\nconst SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ className, tag, title, description, align = 'left', actions, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col md:flex-row md:items-end justify-between gap-6 mb-8 md:mb-12',\n align === 'center' && 'text-center md:flex-col md:items-center',\n align === 'right' && 'text-right md:flex-row-reverse',\n className\n )}\n {...props}\n >\n <div className={cn('flex-1 max-w-3xl', align === 'center' && 'mx-auto')}>\n {tag && (\n <span className=\"inline-block text-sm font-semibold tracking-wider uppercase text-primary mb-2\">\n {tag}\n </span>\n )}\n {title && (\n <h2 className=\"text-3xl font-bold tracking-tight sm:text-4xl text-foreground\">\n {title}\n </h2>\n )}\n {description && (\n <p className=\"mt-4 text-lg text-muted-foreground leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div\n className={cn(\n 'flex flex-wrap gap-3 shrink-0',\n align === 'center' && 'justify-center'\n )}\n >\n {actions}\n </div>\n )}\n </div>\n );\n }\n);\nSectionHeader.displayName = 'SectionHeader';\n\nexport { SectionHeader };\n"
|
|
17440
17440
|
},
|
|
17441
17441
|
{
|
|
17442
17442
|
"path": "components/blocks/container.tsx",
|
|
17443
17443
|
"type": "registry:block",
|
|
17444
|
-
"content": "import React from 'react';\nimport { cn } from \"@/lib/
|
|
17444
|
+
"content": "import React from 'react';\nimport { cn } from \"@/lib/utils\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType;\n clean?: boolean;\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Component = 'div', clean = false, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(\n !clean && 'mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8',\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n"
|
|
17445
17445
|
}
|
|
17446
17446
|
]
|
|
17447
17447
|
},
|