cyberui-2045 2.3.0 → 2.4.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.
- package/AGENT.md +25 -23
- package/README.md +31 -28
- package/bin/init.js +11 -5
- package/bin/markers.js +18 -0
- package/bin/usage-content.js +136 -210
- package/dist/component-manifest.json +1454 -0
- package/dist/components/Badge.js +49 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Button.js +62 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.js +31 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Carousel.js +585 -0
- package/dist/components/Carousel.js.map +1 -0
- package/dist/components/Checkbox.js +92 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/CircularProgress.js +87 -0
- package/dist/components/CircularProgress.js.map +1 -0
- package/dist/components/Divider.js +24 -0
- package/dist/components/Divider.js.map +1 -0
- package/dist/components/GradientText.js +27 -0
- package/dist/components/GradientText.js.map +1 -0
- package/dist/components/Image.js +369 -0
- package/dist/components/Image.js.map +1 -0
- package/dist/components/Input.js +70 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/LinearProgress.js +39 -0
- package/dist/components/LinearProgress.js.map +1 -0
- package/dist/components/Modal.d.ts +19 -0
- package/dist/components/Modal.js +211 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/Notification.js +88 -0
- package/dist/components/Notification.js.map +1 -0
- package/dist/components/SectionTitle.js +33 -0
- package/dist/components/SectionTitle.js.map +1 -0
- package/dist/components/SegmentedProgress.js +82 -0
- package/dist/components/SegmentedProgress.js.map +1 -0
- package/dist/components/Select.js +93 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/Skeleton.js +106 -0
- package/dist/components/Skeleton.js.map +1 -0
- package/dist/components/Steps.js +88 -0
- package/dist/components/Steps.js.map +1 -0
- package/dist/components/TabNavigation.js +153 -0
- package/dist/components/TabNavigation.js.map +1 -0
- package/dist/components/Timeline.js +99 -0
- package/dist/components/Timeline.js.map +1 -0
- package/dist/components/Toggle.js +73 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/contexts/NotificationContext.js +100 -0
- package/dist/contexts/NotificationContext.js.map +1 -0
- package/dist/contexts/NotificationContextBase.js +6 -0
- package/dist/contexts/NotificationContextBase.js.map +1 -0
- package/dist/hooks/useAnimatedProgress.js +17 -0
- package/dist/hooks/useAnimatedProgress.js.map +1 -0
- package/dist/hooks/useCyberNotifications.js +14 -0
- package/dist/hooks/useCyberNotifications.js.map +1 -0
- package/dist/hooks/useCyberScrollbar.js +254 -0
- package/dist/hooks/useCyberScrollbar.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.es.js +63 -5954
- package/dist/index.js +13 -13
- package/dist/utils/cn.js +9 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/devWarn.d.ts +5 -0
- package/dist/utils/devWarn.js +8 -0
- package/dist/utils/devWarn.js.map +1 -0
- package/dist/utils/responsive.js +120 -0
- package/dist/utils/responsive.js.map +1 -0
- package/package.json +158 -125
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { j as e } from "../_virtual/jsx-runtime.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { getResponsiveClasses as u, RESPONSIVE_SIZE_MAPS as m } from "../utils/responsive.js";
|
|
4
|
+
import { cn as v } from "../utils/cn.js";
|
|
5
|
+
const y = ({
|
|
6
|
+
variant: o = "primary",
|
|
7
|
+
size: n = "md",
|
|
8
|
+
children: t,
|
|
9
|
+
className: i = "",
|
|
10
|
+
leftIcon: c,
|
|
11
|
+
rightIcon: d,
|
|
12
|
+
clickable: h = !1,
|
|
13
|
+
onClick: s,
|
|
14
|
+
...g
|
|
15
|
+
}) => {
|
|
16
|
+
const w = (r) => u(r, m.badge), p = (r) => ({
|
|
17
|
+
primary: "bg-primary shadow-lg",
|
|
18
|
+
secondary: "bg-secondary shadow-lg",
|
|
19
|
+
accent: "bg-accent shadow-lg",
|
|
20
|
+
success: "bg-success shadow-lg",
|
|
21
|
+
error: "bg-error shadow-lg",
|
|
22
|
+
warning: "bg-warning shadow-lg"
|
|
23
|
+
})[r], l = (r, a) => !a && !s ? "transition-shadow" : {
|
|
24
|
+
primary: "hover:shadow-primary transition-shadow cursor-pointer",
|
|
25
|
+
secondary: "hover:shadow-secondary transition-shadow cursor-pointer",
|
|
26
|
+
accent: "hover:shadow-lg-accent transition-shadow cursor-pointer",
|
|
27
|
+
success: "hover:shadow-success transition-shadow cursor-pointer",
|
|
28
|
+
error: "hover:shadow-error transition-shadow cursor-pointer",
|
|
29
|
+
warning: "hover:shadow-warning transition-shadow cursor-pointer"
|
|
30
|
+
}[r];
|
|
31
|
+
return /* @__PURE__ */ e.jsxs(
|
|
32
|
+
"span",
|
|
33
|
+
{
|
|
34
|
+
className: v("inline-flex items-center rounded-full font-semibold", w(n), p(o), l(o, h || !!s), i),
|
|
35
|
+
onClick: s,
|
|
36
|
+
...g,
|
|
37
|
+
children: [
|
|
38
|
+
c,
|
|
39
|
+
/* @__PURE__ */ e.jsx("span", { children: t }),
|
|
40
|
+
d
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
y.displayName = "CyberUI.Badge";
|
|
46
|
+
export {
|
|
47
|
+
y as default
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","sources":["../../src/components/Badge.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { ResponsiveValue } from '../utils/responsive';\r\nimport { getResponsiveClasses, RESPONSIVE_SIZE_MAPS } from '../utils/responsive';\r\nimport { cn } from '../utils/cn';\r\n\r\n/**\r\n * A status indicator badge with various semantic variants.\r\n *\r\n * @example\r\n * // Success badge\r\n * <Badge variant=\"success\">ONLINE</Badge>\r\n *\r\n * @example\r\n * // Clickable badge with icon\r\n * <Badge\r\n * variant=\"primary\"\r\n * clickable\r\n * onClick={handleClick}\r\n * leftIcon={<Icon name=\"user\" />}\r\n * >\r\n * Profile\r\n * </Badge>\r\n */\r\nexport interface BadgeProps {\r\n /**\r\n * Semantic style of the badge.\r\n * @default 'primary'\r\n */\r\n variant?: 'primary' | 'secondary' | 'accent' | 'success' | 'error' | 'warning';\r\n /**\r\n * Size of the badge.\r\n * @default 'md'\r\n */\r\n size?: ResponsiveValue<'sm' | 'md' | 'lg'>;\r\n /** The label or content of the badge */\r\n children: React.ReactNode;\r\n /** Optional custom class name */\r\n className?: string;\r\n /** Icon to render on the left side of the label */\r\n leftIcon?: React.ReactNode;\r\n /** Icon to render on the right side of the label */\r\n rightIcon?: React.ReactNode;\r\n /** Whether the badge should show hover effects and a pointer cursor */\r\n clickable?: boolean;\r\n /** Optional click handler */\r\n onClick?: () => void;\r\n}\r\n\r\n/**\r\n * A compact Cyberpunk-style tag or indicator used for status, categories, or metrics.\r\n * \r\n * @example\r\n * <Badge variant=\"success\">Online</Badge>\r\n * \r\n * @example\r\n * <Badge variant=\"accent\" size=\"sm\" leftIcon={<ShieldIcon />}>\r\n * Protected\r\n * </Badge>\r\n */\r\nconst Badge: React.FC<BadgeProps> = ({\r\n variant = 'primary',\r\n size = 'md',\r\n children,\r\n className = '',\r\n leftIcon,\r\n rightIcon,\r\n clickable = false,\r\n onClick,\r\n ...props\r\n}) => {\r\n const getSizeClasses = (size: ResponsiveValue<'sm' | 'md' | 'lg'>): string => {\r\n return getResponsiveClasses(size, RESPONSIVE_SIZE_MAPS.badge);\r\n };\r\n\r\n const getVariantClasses = (variant: string): string => {\r\n const variants = {\r\n primary: 'bg-primary shadow-lg',\r\n secondary: 'bg-secondary shadow-lg',\r\n accent: 'bg-accent shadow-lg',\r\n success: 'bg-success shadow-lg',\r\n error: 'bg-error shadow-lg',\r\n warning: 'bg-warning shadow-lg'\r\n };\r\n return variants[variant as keyof typeof variants];\r\n };\r\n\r\n const getHoverClasses = (variant: string, clickable: boolean): string => {\r\n if (!clickable && !onClick) {\r\n return 'transition-shadow';\r\n }\r\n\r\n const hoverVariants = {\r\n primary: 'hover:shadow-primary transition-shadow cursor-pointer',\r\n secondary: 'hover:shadow-secondary transition-shadow cursor-pointer',\r\n accent: 'hover:shadow-lg-accent transition-shadow cursor-pointer',\r\n success: 'hover:shadow-success transition-shadow cursor-pointer',\r\n error: 'hover:shadow-error transition-shadow cursor-pointer',\r\n warning: 'hover:shadow-warning transition-shadow cursor-pointer'\r\n };\r\n return hoverVariants[variant as keyof typeof hoverVariants];\r\n };\r\n\r\n return (\r\n <span\r\n className={cn('inline-flex items-center rounded-full font-semibold', getSizeClasses(size), getVariantClasses(variant), getHoverClasses(variant, clickable || !!onClick), className)}\r\n onClick={onClick}\r\n {...props}\r\n >\r\n {leftIcon}\r\n <span>{children}</span>\r\n {rightIcon}\r\n </span>\r\n );\r\n};\r\n\r\nBadge.displayName = \"CyberUI.Badge\";\r\n\r\nexport default Badge;\r\n"],"names":["Badge","variant","size","children","className","leftIcon","rightIcon","clickable","onClick","props","getSizeClasses","getResponsiveClasses","RESPONSIVE_SIZE_MAPS","getVariantClasses","getHoverClasses","jsxs","cn","jsx"],"mappings":";;;;AA2DA,MAAMA,IAA8B,CAAC;AAAA,EACnC,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,SAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAiB,CAACR,MACfS,EAAqBT,GAAMU,EAAqB,KAAK,GAGxDC,IAAoB,CAACZ,OACR;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EAAA,GAEKA,CAAgC,GAG5Ca,IAAkB,CAACb,GAAiBM,MACpC,CAACA,KAAa,CAACC,IACV,sBAGa;AAAA,IACpB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EAAA,EAEUP,CAAqC;AAG5D,SACEc,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,uDAAuDN,EAAeR,CAAI,GAAGW,EAAkBZ,CAAO,GAAGa,EAAgBb,GAASM,KAAa,CAAC,CAACC,CAAO,GAAGJ,CAAS;AAAA,MAClL,SAAAI;AAAA,MACC,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAJ;AAAA,QACDY,gBAAAA,MAAC,UAAM,UAAAd,GAAS;AAAA,QACfG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAN,EAAM,cAAc;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { j as r } from "../_virtual/jsx-runtime.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { getResponsiveClasses as v, RESPONSIVE_SIZE_MAPS as h } from "../utils/responsive.js";
|
|
4
|
+
import { cn as p } from "../utils/cn.js";
|
|
5
|
+
const f = ({
|
|
6
|
+
variant: a = "primary",
|
|
7
|
+
size: s = "md",
|
|
8
|
+
className: t = "",
|
|
9
|
+
disabled: e = !1,
|
|
10
|
+
children: n,
|
|
11
|
+
...i
|
|
12
|
+
}) => {
|
|
13
|
+
const c = [
|
|
14
|
+
"group",
|
|
15
|
+
"relative",
|
|
16
|
+
"overflow-hidden",
|
|
17
|
+
"rounded-lg",
|
|
18
|
+
"font-bold",
|
|
19
|
+
"uppercase",
|
|
20
|
+
"tracking-wider",
|
|
21
|
+
"transition-all",
|
|
22
|
+
"duration-300",
|
|
23
|
+
"ease-in-out",
|
|
24
|
+
"focus:outline-none",
|
|
25
|
+
e ? "cursor-not-allowed" : "cursor-pointer"
|
|
26
|
+
].join(" "), d = (o) => v(o, h.button), b = (o, g) => ({
|
|
27
|
+
primary: {
|
|
28
|
+
enabled: "bg-linear-(--gradient-accent) text-base shadow-primary border-none hover:shadow-lg-accent hover:brightness-110 focus-visible:ring-2 focus-visible:ring-accent/50 active:scale-95",
|
|
29
|
+
disabled: "bg-base border-2 border-accent/20 text-accent/40 shadow-none opacity-50"
|
|
30
|
+
},
|
|
31
|
+
secondary: {
|
|
32
|
+
enabled: "bg-surface border-2 border-secondary text-secondary shadow-secondary/30 hover:bg-secondary hover:text-base hover:shadow-secondary focus-visible:ring-2 focus-visible:ring-secondary/50 active:scale-95",
|
|
33
|
+
disabled: "bg-base border-2 border-secondary/20 text-secondary/40 shadow-none opacity-50"
|
|
34
|
+
},
|
|
35
|
+
danger: {
|
|
36
|
+
enabled: "bg-surface border-2 border-error text-error shadow-error/30 hover:bg-error hover:text-base hover:shadow-error focus-visible:ring-2 focus-visible:ring-error/50 active:scale-95",
|
|
37
|
+
disabled: "bg-base border-2 border-error/20 text-error/40 shadow-none opacity-50"
|
|
38
|
+
},
|
|
39
|
+
ghost: {
|
|
40
|
+
enabled: "bg-surface border-2 border-accent text-accent shadow-secondary hover:bg-accent hover:text-base hover:shadow-lg-accent focus-visible:ring-2 focus-visible:ring-accent/50 active:scale-95",
|
|
41
|
+
disabled: "bg-base border-2 border-accent/10 text-muted/60 shadow-none opacity-40"
|
|
42
|
+
}
|
|
43
|
+
})[o][g ? "disabled" : "enabled"], l = p(c, d(s), b(a, e), t), u = a === "primary" && !e;
|
|
44
|
+
return /* @__PURE__ */ r.jsxs(
|
|
45
|
+
"button",
|
|
46
|
+
{
|
|
47
|
+
className: l,
|
|
48
|
+
disabled: e,
|
|
49
|
+
...i,
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ r.jsx("span", { className: "relative z-10", children: n }),
|
|
52
|
+
u && /* @__PURE__ */ r.jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-700" }),
|
|
53
|
+
e && /* @__PURE__ */ r.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-transparent via-base/10 to-transparent pointer-events-none" })
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
f.displayName = "CyberUI.Button";
|
|
59
|
+
export {
|
|
60
|
+
f as default
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { ResponsiveValue } from '../utils/responsive';\r\nimport { getResponsiveClasses, RESPONSIVE_SIZE_MAPS } from '../utils/responsive';\r\nimport { cn } from '../utils/cn';\r\n\r\n/**\r\n * A neon-styled cyberpunk button component.\r\n *\r\n * Supports multiple variants and responsive sizing.\r\n *\r\n * @example\r\n * // Primary button\r\n * <Button variant=\"primary\" onClick={handleClick}>\r\n * INITIATE\r\n * </Button>\r\n *\r\n * @example\r\n * // Responsive size (Small on mobile, Large on desktop)\r\n * <Button size={{ base: 'sm', lg: 'lg' }}>\r\n * RESPONSIVE\r\n * </Button>\r\n *\r\n * @example\r\n * // Ghost variant for secondary actions\r\n * <Button variant=\"ghost\">\r\n * CANCEL\r\n * </Button>\r\n */\r\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n /**\r\n * Visual style of the button.\r\n * - `primary`: Main action, neon glow.\r\n * - `secondary`: Alternative action, bordered.\r\n * - `danger`: Destructive action, red glow.\r\n * - `ghost`: Subtle action, transparent background.\r\n * @default 'primary'\r\n */\r\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost';\r\n /**\r\n * Size of the button. Can be a static value or a responsive object.\r\n * @default 'md'\r\n */\r\n size?: ResponsiveValue<'sm' | 'md' | 'lg'>;\r\n /** The content to be rendered inside the button */\r\n children: React.ReactNode;\r\n}\r\n\r\n/**\r\n * A highly customizable Cyberpunk-themed button with neon effects and animations.\r\n * \r\n * @example\r\n * <Button variant=\"primary\" size={{ base: 'sm', md: 'md' }}>\r\n * Initialize System\r\n * </Button>\r\n * \r\n * @example\r\n * <Button variant=\"secondary\" disabled>\r\n * Access Denied\r\n * </Button>\r\n */\r\nconst Button: React.FC<ButtonProps> = ({\r\n variant = 'primary',\r\n size = 'md',\r\n className = '',\r\n disabled = false,\r\n children,\r\n ...props\r\n}) => {\r\n // Base classes that apply to all buttons\r\n const baseClasses = [\r\n 'group',\r\n 'relative',\r\n 'overflow-hidden',\r\n 'rounded-lg',\r\n 'font-bold',\r\n 'uppercase',\r\n 'tracking-wider',\r\n 'transition-all',\r\n 'duration-300',\r\n 'ease-in-out',\r\n 'focus:outline-none',\r\n disabled ? 'cursor-not-allowed' : 'cursor-pointer'\r\n ].join(' ');\r\n\r\n const getSizeClasses = (size: ResponsiveValue<'sm' | 'md' | 'lg'>): string => {\r\n return getResponsiveClasses(size, RESPONSIVE_SIZE_MAPS.button);\r\n };\r\n\r\n const getVariantClasses = (variant: string, disabled: boolean): string => {\r\n const variants = {\r\n primary: {\r\n enabled: 'bg-linear-(--gradient-accent) text-base shadow-primary border-none hover:shadow-lg-accent hover:brightness-110 focus-visible:ring-2 focus-visible:ring-accent/50 active:scale-95',\r\n disabled: 'bg-base border-2 border-accent/20 text-accent/40 shadow-none opacity-50'\r\n },\r\n secondary: {\r\n enabled: 'bg-surface border-2 border-secondary text-secondary shadow-secondary/30 hover:bg-secondary hover:text-base hover:shadow-secondary focus-visible:ring-2 focus-visible:ring-secondary/50 active:scale-95',\r\n disabled: 'bg-base border-2 border-secondary/20 text-secondary/40 shadow-none opacity-50'\r\n },\r\n danger: {\r\n enabled: 'bg-surface border-2 border-error text-error shadow-error/30 hover:bg-error hover:text-base hover:shadow-error focus-visible:ring-2 focus-visible:ring-error/50 active:scale-95',\r\n disabled: 'bg-base border-2 border-error/20 text-error/40 shadow-none opacity-50'\r\n },\r\n ghost: {\r\n enabled: 'bg-surface border-2 border-accent text-accent shadow-secondary hover:bg-accent hover:text-base hover:shadow-lg-accent focus-visible:ring-2 focus-visible:ring-accent/50 active:scale-95',\r\n disabled: 'bg-base border-2 border-accent/10 text-muted/60 shadow-none opacity-40'\r\n }\r\n };\r\n\r\n return variants[variant as keyof typeof variants][disabled ? 'disabled' : 'enabled'];\r\n };\r\n\r\n const buttonClasses = cn(baseClasses, getSizeClasses(size), getVariantClasses(variant, disabled), className);\r\n\r\n // Show gradient animation only for primary variant when enabled\r\n const showGradientAnimation = variant === 'primary' && !disabled;\r\n\r\n return (\r\n <button\r\n className={buttonClasses}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <span className=\"relative z-10\">{children}</span>\r\n {showGradientAnimation && (\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-700\" />\r\n )}\r\n {disabled && (\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-transparent via-base/10 to-transparent pointer-events-none\" />\r\n )}\r\n </button>\r\n );\r\n};\r\n\r\nButton.displayName = \"CyberUI.Button\";\r\n\r\nexport default Button;\r\n"],"names":["Button","variant","size","className","disabled","children","props","baseClasses","getSizeClasses","getResponsiveClasses","RESPONSIVE_SIZE_MAPS","getVariantClasses","buttonClasses","cn","showGradientAnimation","jsxs","jsx"],"mappings":";;;;AA4DA,MAAMA,IAAgC,CAAC;AAAA,EACrC,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AAEJ,QAAMC,IAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAH,IAAW,uBAAuB;AAAA,EAAA,EAClC,KAAK,GAAG,GAEJI,IAAiB,CAACN,MACfO,EAAqBP,GAAMQ,EAAqB,MAAM,GAGzDC,IAAoB,CAACV,GAAiBG,OACzB;AAAA,IACf,SAAS;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,IAEZ,WAAW;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,IAEZ,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,IAEZ,OAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,EACZ,GAGcH,CAAgC,EAAEG,IAAW,aAAa,SAAS,GAG/EQ,IAAgBC,EAAGN,GAAaC,EAAeN,CAAI,GAAGS,EAAkBV,GAASG,CAAQ,GAAGD,CAAS,GAGrGW,IAAwBb,MAAY,aAAa,CAACG;AAExD,SACEW,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH;AAAA,MACX,UAAAR;AAAA,MACC,GAAGE;AAAA,MAEJ,UAAA;AAAA,QAAAU,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,iBAAiB,UAAAX,EAAA,CAAS;AAAA,QACzCS,KACCE,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,kKAAA,CAAkK;AAAA,QAElLZ,KACCY,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,qGAAA,CAAqG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAI5H;AAEAhB,EAAO,cAAc;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { j as a } from "../_virtual/jsx-runtime.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { getResponsiveClasses as u, RESPONSIVE_SIZE_MAPS as x } from "../utils/responsive.js";
|
|
4
|
+
import { cn as p } from "../utils/cn.js";
|
|
5
|
+
const f = ({
|
|
6
|
+
variant: s = "default",
|
|
7
|
+
size: o = "md",
|
|
8
|
+
title: t,
|
|
9
|
+
titleBorder: d = !0,
|
|
10
|
+
children: n,
|
|
11
|
+
className: l = "",
|
|
12
|
+
...c
|
|
13
|
+
}) => {
|
|
14
|
+
const i = (e) => u(e, x.card), b = (e) => {
|
|
15
|
+
const r = i(o);
|
|
16
|
+
return {
|
|
17
|
+
default: `bg-base border border-border-default rounded-xl text-primary ${r}`,
|
|
18
|
+
accent: `bg-surface border-2 border-accent rounded-xl shadow-input-accent/50 hover:shadow-lg-accent transition-all duration-300 transform text-primary ${r}`,
|
|
19
|
+
small: `bg-base rounded-lg border border-border-default text-primary ${r}`
|
|
20
|
+
}[e];
|
|
21
|
+
}, m = (e) => e ? "text-xl font-semibold text-secondary mb-4 border-b border-accent pb-2" : "text-xl font-semibold text-secondary mb-4";
|
|
22
|
+
return /* @__PURE__ */ a.jsxs("div", { className: p(b(s), l), ...c, children: [
|
|
23
|
+
t && /* @__PURE__ */ a.jsx("h3", { className: m(d), children: t }),
|
|
24
|
+
n
|
|
25
|
+
] });
|
|
26
|
+
};
|
|
27
|
+
f.displayName = "CyberUI.Card";
|
|
28
|
+
export {
|
|
29
|
+
f as default
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../src/components/Card.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { ResponsiveValue } from '../utils/responsive';\r\nimport { getResponsiveClasses, RESPONSIVE_SIZE_MAPS } from '../utils/responsive';\r\nimport { cn } from '../utils/cn';\r\n\r\n/**\r\n * A glassmorphism container for grouping content.\r\n *\r\n * @example\r\n * // Basic card with title\r\n * <Card title=\"System Status\">\r\n * <p>All systems operational.</p>\r\n * </Card>\r\n *\r\n * @example\r\n * // Accent variant with hover effect\r\n * <Card variant=\"accent\" title=\"High Priority\">\r\n * <Button>Action Required</Button>\r\n * </Card>\r\n */\r\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\r\n /**\r\n * Visual style of the card.\r\n * - `default`: Standard glassmorphism.\r\n * - `accent`: Glowing border and hover effects.\r\n * - `small`: Compact padding for tight spaces.\r\n * @default 'default'\r\n */\r\n variant?: 'default' | 'accent' | 'small';\r\n /**\r\n * Padding size of the card content.\r\n * @default 'md'\r\n */\r\n size?: ResponsiveValue<'sm' | 'md' | 'lg'>;\r\n /** Optional title for the card */\r\n title?: string;\r\n /**\r\n * Whether to show a border under the title.\r\n * @default true\r\n */\r\n titleBorder?: boolean;\r\n /** The content to be rendered inside the card */\r\n children: React.ReactNode;\r\n}\r\n\r\n/**\r\n * A cyberpunk-themed container with glassmorphism, neon borders, and responsive spacing.\r\n * \r\n * @example\r\n * <Card title=\"Security Log\" variant=\"accent\">\r\n * <p>Unauthorized access detected.</p>\r\n * </Card>\r\n * \r\n * @example\r\n * <Card size={{ base: 'sm', lg: 'lg' }}>\r\n * Compact on mobile, spacious on desktop.\r\n * </Card>\r\n */\r\nconst Card: React.FC<CardProps> = ({\r\n variant = 'default',\r\n size = 'md',\r\n title,\r\n titleBorder = true,\r\n children,\r\n className = '',\r\n ...props\r\n}) => {\r\n const getSizeClasses = (size: ResponsiveValue<'sm' | 'md' | 'lg'>): string => {\r\n return getResponsiveClasses(size, RESPONSIVE_SIZE_MAPS.card);\r\n };\r\n\r\n const getVariantClasses = (variant: string): string => {\r\n const baseSize = getSizeClasses(size);\r\n const variants = {\r\n default: `bg-base border border-border-default rounded-xl text-primary ${baseSize}`,\r\n accent: `bg-surface border-2 border-accent rounded-xl shadow-input-accent/50 hover:shadow-lg-accent transition-all duration-300 transform text-primary ${baseSize}`,\r\n small: `bg-base rounded-lg border border-border-default text-primary ${baseSize}`\r\n };\r\n return variants[variant as keyof typeof variants];\r\n };\r\n\r\n const getTitleClasses = (titleBorder: boolean): string => {\r\n return titleBorder\r\n ? 'text-xl font-semibold text-secondary mb-4 border-b border-accent pb-2'\r\n : 'text-xl font-semibold text-secondary mb-4';\r\n };\r\n\r\n return (\r\n <div className={cn(getVariantClasses(variant), className)} {...props}>\r\n {title && (\r\n <h3 className={getTitleClasses(titleBorder)}>\r\n {title}\r\n </h3>\r\n )}\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nCard.displayName = \"CyberUI.Card\";\r\n\r\nexport default Card;\r\n"],"names":["Card","variant","size","title","titleBorder","children","className","props","getSizeClasses","getResponsiveClasses","RESPONSIVE_SIZE_MAPS","getVariantClasses","baseSize","getTitleClasses","jsxs","cn"],"mappings":";;;;AA0DA,MAAMA,IAA4B,CAAC;AAAA,EACjC,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAiB,CAACN,MACfO,EAAqBP,GAAMQ,EAAqB,IAAI,GAGvDC,IAAoB,CAACV,MAA4B;AACrD,UAAMW,IAAWJ,EAAeN,CAAI;AAMpC,WALiB;AAAA,MACf,SAAS,gEAAgEU,CAAQ;AAAA,MACjF,QAAQ,iJAAiJA,CAAQ;AAAA,MACjK,OAAO,gEAAgEA,CAAQ;AAAA,IAAA,EAEjEX,CAAgC;AAAA,EAClD,GAEMY,IAAkB,CAACT,MAChBA,IACH,0EACA;AAGN,SACEU,gBAAAA,OAAC,OAAA,EAAI,WAAWC,EAAGJ,EAAkBV,CAAO,GAAGK,CAAS,GAAI,GAAGC,GAC5D,UAAA;AAAA,IAAAJ,2BACE,MAAA,EAAG,WAAWU,EAAgBT,CAAW,GACvC,UAAAD,GACH;AAAA,IAEDE;AAAA,EAAA,GACH;AAEJ;AAEAL,EAAK,cAAc;"}
|