xlibs-components
Version:
Modern React component library with Aceternity, MagicUI, and ShadCN components for building beautiful web applications
65 lines (64 loc) • 4.39 kB
JavaScript
"use client";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import * as React from "react";
import { cva } from "class-variance-authority";
import { cn } from '../../lib/utils.js';
const magicCardVariants = cva("rounded-lg border bg-card text-card-foreground shadow-sm transition-all duration-300 relative overflow-hidden group", {
variants: {
variant: {
default: "hover:shadow-lg hover:shadow-xl transform hover:-translate-y-1",
glass: "backdrop-blur-sm border-border/50 bg-card/50 hover:bg-card/80 hover:shadow-lg hover:shadow-xl transform hover:-translate-y-1",
gradient: "bg-gradient-to-br from-card via-card/80 to-card/60 hover:shadow-lg hover:shadow-xl transform hover:-translate-y-1 hover:scale-[1.02]",
neon: "border-primary/30 shadow-lg hover:shadow-xl transform hover:-translate-y-1 shadow-[0_0_20px_rgba(var(--primary),0.1)] hover:shadow-[0_0_30px_rgba(var(--primary),0.2)]",
magic: "bg-gradient-to-br from-primary/5 via-chart-2/5 to-chart-3/5 border-primary/20 hover:shadow-lg hover:shadow-xl transform hover:-translate-y-1 hover:scale-[1.02]",
floating: "hover:shadow-2xl transform hover:-translate-y-2 hover:scale-[1.02] animate-float",
},
size: {
default: "p-6",
sm: "p-4",
lg: "p-8",
compact: "p-3",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
});
const MagicCard = React.forwardRef(({ className, variant, size, hover = true, glow = false, borderGradient = false, children, ...props }, ref) => {
return (_jsxs("div", { className: cn(magicCardVariants({ variant, size, className }), !hover && "hover:transform-none hover:shadow-sm", glow && "shadow-[0_0_30px_rgba(var(--primary),0.1)]", borderGradient && "border-gradient-to-r from-primary via-chart-2 to-chart-3"), ref: ref, ...props, children: [borderGradient && (_jsx("div", { className: "absolute inset-0 rounded-lg bg-gradient-to-r from-primary via-chart-2 to-chart-3 opacity-20 group-hover:opacity-30 transition-opacity duration-300" })), _jsx("div", { className: "relative z-10", children: children }), variant === "magic" && (_jsx("div", { className: "absolute inset-0 rounded-lg bg-gradient-to-br from-primary/10 via-chart-2/10 to-chart-3/10 opacity-0 group-hover:opacity-100 transition-opacity duration-300" }))] }));
});
MagicCard.displayName = "MagicCard";
const MagicCardHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })));
MagicCardHeader.displayName = "MagicCardHeader";
const MagicCardTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx("h3", { ref: ref, className: cn("text-h5 font-semibold leading-none tracking-tight", className), ...props })));
MagicCardTitle.displayName = "MagicCardTitle";
const MagicCardDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx("p", { ref: ref, className: cn("text-small text-muted-foreground", className), ...props })));
MagicCardDescription.displayName = "MagicCardDescription";
const MagicCardContent = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, className: cn("p-6 pt-0", className), ...props })));
MagicCardContent.displayName = "MagicCardContent";
const MagicCardFooter = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, className: cn("flex items-center p-6 pt-0", className), ...props })));
MagicCardFooter.displayName = "MagicCardFooter";
export { MagicCard, MagicCardHeader, MagicCardFooter, MagicCardTitle, MagicCardDescription, MagicCardContent, magicCardVariants };
// Static metadata exports
export const magicCardMetadata = {
displayName: "MagicCard",
aspectRatio: "16/9",
preferredWidth: 320,
preferredHeight: 180,
minWidth: 200,
minHeight: 120,
layoutHints: ["responsive", "animated", "interactive", "content-container"]
};
export const magicCardHeaderMetadata = {
displayName: "MagicCardHeader",
preferredWidth: "100%",
preferredHeight: "auto",
layoutHints: ["header", "content-start", "animated"]
};
export const magicCardContentMetadata = {
displayName: "MagicCardContent",
preferredWidth: "100%",
preferredHeight: "auto",
layoutHints: ["content", "flexible", "animated"]
};