@snow-labs/brutal-ui 0.3.1 → 0.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/dist/components/brutal/comparison-table.d.ts +23 -0
- package/dist/components/brutal/comparison-table.js +117 -0
- package/dist/components/brutal/comparison-table.js.map +1 -0
- package/dist/components/brutal/cta-section.js +8 -4
- package/dist/components/brutal/cta-section.js.map +1 -1
- package/dist/components/brutal/feature-grid.d.ts +1 -1
- package/dist/components/brutal/feature-grid.js +8 -0
- package/dist/components/brutal/feature-grid.js.map +1 -1
- package/dist/components/brutal/feature-showcase.d.ts +20 -0
- package/dist/components/brutal/feature-showcase.js +158 -0
- package/dist/components/brutal/feature-showcase.js.map +1 -0
- package/dist/components/brutal/hero.js +4 -4
- package/dist/components/brutal/hero.js.map +1 -1
- package/dist/components/brutal/index.d.ts +4 -0
- package/dist/components/brutal/index.js +277 -51
- package/dist/components/brutal/index.js.map +1 -1
- package/dist/components/brutal/marquee.d.ts +17 -0
- package/dist/components/brutal/marquee.js +66 -0
- package/dist/components/brutal/marquee.js.map +1 -0
- package/dist/components/brutal/mockup-window.d.ts +11 -0
- package/dist/components/brutal/mockup-window.js +80 -0
- package/dist/components/brutal/mockup-window.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +235 -9
- package/dist/index.js.map +1 -1
- package/dist/templates/index.js +20 -8
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/saas-launch.js +20 -8
- package/dist/templates/saas-launch.js.map +1 -1
- package/dist/templates/studio.js +20 -8
- package/dist/templates/studio.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface MarqueeProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
speed?: "slow" | "normal" | "fast";
|
|
6
|
+
direction?: "left" | "right";
|
|
7
|
+
pauseOnHover?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function Marquee({ children, speed, direction, pauseOnHover, className, }: MarqueeProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
interface MarqueeItemProps {
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
declare function MarqueeItem({ children, className }: MarqueeItemProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
|
|
17
|
+
export { Marquee, MarqueeItem };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/lib/utils.ts
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
var speedMap = {
|
|
11
|
+
slow: "60s",
|
|
12
|
+
normal: "30s",
|
|
13
|
+
fast: "15s"
|
|
14
|
+
};
|
|
15
|
+
function Marquee({
|
|
16
|
+
children,
|
|
17
|
+
speed = "normal",
|
|
18
|
+
direction = "left",
|
|
19
|
+
pauseOnHover = true,
|
|
20
|
+
className
|
|
21
|
+
}) {
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
className: cn(
|
|
26
|
+
"group flex overflow-hidden border-y-brutal border-foreground bg-foreground py-3",
|
|
27
|
+
className
|
|
28
|
+
),
|
|
29
|
+
children: [0, 1].map((copy) => /* @__PURE__ */ jsxs(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
"aria-hidden": copy === 1,
|
|
33
|
+
className: cn(
|
|
34
|
+
"flex shrink-0 items-center gap-8",
|
|
35
|
+
pauseOnHover && "group-hover:[animation-play-state:paused]"
|
|
36
|
+
),
|
|
37
|
+
style: {
|
|
38
|
+
animation: `marquee ${speedMap[speed]} linear infinite`,
|
|
39
|
+
animationDirection: direction === "right" ? "reverse" : "normal"
|
|
40
|
+
},
|
|
41
|
+
children: [
|
|
42
|
+
children,
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "mx-4 text-background/30 select-none", children: "\u2022" })
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
copy
|
|
47
|
+
))
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
function MarqueeItem({ children, className }) {
|
|
52
|
+
return /* @__PURE__ */ jsx(
|
|
53
|
+
"span",
|
|
54
|
+
{
|
|
55
|
+
className: cn(
|
|
56
|
+
"inline-flex shrink-0 items-center gap-2 whitespace-nowrap font-bold text-background",
|
|
57
|
+
className
|
|
58
|
+
),
|
|
59
|
+
children
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { Marquee, MarqueeItem };
|
|
65
|
+
//# sourceMappingURL=marquee.js.map
|
|
66
|
+
//# sourceMappingURL=marquee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/brutal/marquee.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACKA,IAAM,QAAA,GAAW;AAAA,EACf,IAAA,EAAM,KAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,QAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,SAAA,GAAY,MAAA;AAAA,EACZ,YAAA,GAAe,IAAA;AAAA,EACf;AACF,CAAA,EAAiB;AACf,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iFAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,WAAC,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,qBACX,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,eAAa,IAAA,KAAS,CAAA;AAAA,UACtB,SAAA,EAAW,EAAA;AAAA,YACT,kCAAA;AAAA,YACA,YAAA,IAAgB;AAAA,WAClB;AAAA,UACA,KAAA,EAAO;AAAA,YACL,SAAA,EAAW,CAAA,QAAA,EAAW,QAAA,CAAS,KAAK,CAAC,CAAA,gBAAA,CAAA;AAAA,YACrC,kBAAA,EAAoB,SAAA,KAAc,OAAA,GAAU,SAAA,GAAY;AAAA,WAC1D;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,4BAED,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA,SAAA;AAAA,QAblD;AAAA,OAeR;AAAA;AAAA,GACH;AAEJ;AAOO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,SAAA,EAAU,EAAqB;AACrE,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qFAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"marquee.js","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","import { cn } from \"../../lib/utils\";\n\ninterface MarqueeProps {\n children: React.ReactNode;\n speed?: \"slow\" | \"normal\" | \"fast\";\n direction?: \"left\" | \"right\";\n pauseOnHover?: boolean;\n className?: string;\n}\n\nconst speedMap = {\n slow: \"60s\",\n normal: \"30s\",\n fast: \"15s\",\n};\n\nexport function Marquee({\n children,\n speed = \"normal\",\n direction = \"left\",\n pauseOnHover = true,\n className,\n}: MarqueeProps) {\n return (\n <div\n className={cn(\n \"group flex overflow-hidden border-y-brutal border-foreground bg-foreground py-3\",\n className\n )}\n >\n {[0, 1].map((copy) => (\n <div\n key={copy}\n aria-hidden={copy === 1}\n className={cn(\n \"flex shrink-0 items-center gap-8\",\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\n )}\n style={{\n animation: `marquee ${speedMap[speed]} linear infinite`,\n animationDirection: direction === \"right\" ? \"reverse\" : \"normal\",\n }}\n >\n {children}\n {/* Separator */}\n <span className=\"mx-4 text-background/30 select-none\">•</span>\n </div>\n ))}\n </div>\n );\n}\n\ninterface MarqueeItemProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MarqueeItem({ children, className }: MarqueeItemProps) {\n return (\n <span\n className={cn(\n \"inline-flex shrink-0 items-center gap-2 whitespace-nowrap font-bold text-background\",\n className\n )}\n >\n {children}\n </span>\n );\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface MockupWindowProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
title?: string;
|
|
6
|
+
variant?: "browser" | "terminal" | "phone";
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
declare function MockupWindow({ children, title, variant, className, }: MockupWindowProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { MockupWindow };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/lib/utils.ts
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
function MockupWindow({
|
|
11
|
+
children,
|
|
12
|
+
title = "app.example.com",
|
|
13
|
+
variant = "browser",
|
|
14
|
+
className
|
|
15
|
+
}) {
|
|
16
|
+
if (variant === "phone") {
|
|
17
|
+
return /* @__PURE__ */ jsxs(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
className: cn(
|
|
21
|
+
"mx-auto w-[280px] overflow-hidden rounded-[2rem] border-brutal border-foreground bg-background shadow-brutal-lg",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center bg-foreground py-2", children: /* @__PURE__ */ jsx("div", { className: "h-5 w-28 rounded-full bg-background/20" }) }),
|
|
26
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-hidden", children }),
|
|
27
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center bg-foreground py-3", children: /* @__PURE__ */ jsx("div", { className: "h-1 w-24 rounded-full bg-background/30" }) })
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
if (variant === "terminal") {
|
|
33
|
+
return /* @__PURE__ */ jsxs(
|
|
34
|
+
"div",
|
|
35
|
+
{
|
|
36
|
+
className: cn(
|
|
37
|
+
"overflow-hidden rounded-lg border-brutal border-foreground shadow-brutal-lg",
|
|
38
|
+
className
|
|
39
|
+
),
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b-brutal border-foreground bg-foreground px-4 py-2.5", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full bg-red-500" }),
|
|
44
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full bg-yellow-500" }),
|
|
45
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full bg-green-500" })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "ml-2 font-mono text-xs text-background/60", children: title })
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsx("div", { className: "bg-foreground text-background", children })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
return /* @__PURE__ */ jsxs(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
className: cn(
|
|
58
|
+
"overflow-hidden rounded-lg border-brutal border-foreground shadow-brutal-lg",
|
|
59
|
+
className
|
|
60
|
+
),
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b-brutal border-foreground bg-muted px-4 py-2.5", children: [
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
64
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full border border-foreground/20 bg-red-400" }),
|
|
65
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full border border-foreground/20 bg-yellow-400" }),
|
|
66
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full border border-foreground/20 bg-green-400" })
|
|
67
|
+
] }),
|
|
68
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-sm rounded-md border border-foreground/10 bg-background px-3 py-1 text-center font-mono text-xs text-muted-foreground", children: title }) }),
|
|
69
|
+
/* @__PURE__ */ jsx("div", { className: "w-[54px]" }),
|
|
70
|
+
" "
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ jsx("div", { className: "bg-background", children })
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { MockupWindow };
|
|
79
|
+
//# sourceMappingURL=mockup-window.js.map
|
|
80
|
+
//# sourceMappingURL=mockup-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/brutal/mockup-window.tsx"],"names":[],"mappings":"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","file":"mockup-window.js","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","import { cn } from \"../../lib/utils\";\n\ninterface MockupWindowProps {\n children: React.ReactNode;\n title?: string;\n variant?: \"browser\" | \"terminal\" | \"phone\";\n className?: string;\n}\n\nexport function MockupWindow({\n children,\n title = \"app.example.com\",\n variant = \"browser\",\n className,\n}: MockupWindowProps) {\n if (variant === \"phone\") {\n return (\n <div\n className={cn(\n \"mx-auto w-[280px] overflow-hidden rounded-[2rem] border-brutal border-foreground bg-background shadow-brutal-lg\",\n className\n )}\n >\n {/* Notch */}\n <div className=\"flex justify-center bg-foreground py-2\">\n <div className=\"h-5 w-28 rounded-full bg-background/20\" />\n </div>\n {/* Screen */}\n <div className=\"overflow-hidden\">{children}</div>\n {/* Home indicator */}\n <div className=\"flex justify-center bg-foreground py-3\">\n <div className=\"h-1 w-24 rounded-full bg-background/30\" />\n </div>\n </div>\n );\n }\n\n if (variant === \"terminal\") {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-lg border-brutal border-foreground shadow-brutal-lg\",\n className\n )}\n >\n {/* Title bar */}\n <div className=\"flex items-center gap-2 border-b-brutal border-foreground bg-foreground px-4 py-2.5\">\n <div className=\"flex gap-1.5\">\n <div className=\"size-3 rounded-full bg-red-500\" />\n <div className=\"size-3 rounded-full bg-yellow-500\" />\n <div className=\"size-3 rounded-full bg-green-500\" />\n </div>\n <span className=\"ml-2 font-mono text-xs text-background/60\">\n {title}\n </span>\n </div>\n {/* Content */}\n <div className=\"bg-foreground text-background\">{children}</div>\n </div>\n );\n }\n\n // Browser variant (default)\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-lg border-brutal border-foreground shadow-brutal-lg\",\n className\n )}\n >\n {/* Title bar */}\n <div className=\"flex items-center gap-3 border-b-brutal border-foreground bg-muted px-4 py-2.5\">\n <div className=\"flex gap-1.5\">\n <div className=\"size-3 rounded-full border border-foreground/20 bg-red-400\" />\n <div className=\"size-3 rounded-full border border-foreground/20 bg-yellow-400\" />\n <div className=\"size-3 rounded-full border border-foreground/20 bg-green-400\" />\n </div>\n {/* URL bar */}\n <div className=\"flex-1\">\n <div className=\"mx-auto max-w-sm rounded-md border border-foreground/10 bg-background px-3 py-1 text-center font-mono text-xs text-muted-foreground\">\n {title}\n </div>\n </div>\n <div className=\"w-[54px]\" /> {/* Spacer for centering */}\n </div>\n {/* Content */}\n <div className=\"bg-background\">{children}</div>\n </div>\n );\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -40,9 +40,11 @@ export { BrutalSection, SectionColor, SectionPattern } from './components/brutal
|
|
|
40
40
|
export { SectionDivider, SectionDivider as WaveDivider } from './components/brutal/section-divider.js';
|
|
41
41
|
export { BrutalHero } from './components/brutal/hero.js';
|
|
42
42
|
export { BrutalFeatureGrid } from './components/brutal/feature-grid.js';
|
|
43
|
+
export { BrutalFeatureShowcase } from './components/brutal/feature-showcase.js';
|
|
43
44
|
export { BrutalTestimonials, Testimonial } from './components/brutal/testimonials.js';
|
|
44
45
|
export { BrutalIntegrationGrid } from './components/brutal/integration-grid.js';
|
|
45
46
|
export { BrutalCTA } from './components/brutal/cta-section.js';
|
|
47
|
+
export { BrutalComparisonTable } from './components/brutal/comparison-table.js';
|
|
46
48
|
export { BrutalNav } from './components/brutal/nav.js';
|
|
47
49
|
export { BrutalFooter } from './components/brutal/footer.js';
|
|
48
50
|
export { PricingTable } from './components/brutal/pricing-table.js';
|
|
@@ -50,6 +52,8 @@ export { LogoCloud } from './components/brutal/logo-cloud.js';
|
|
|
50
52
|
export { StatsBar } from './components/brutal/stats-bar.js';
|
|
51
53
|
export { FAQ } from './components/brutal/faq.js';
|
|
52
54
|
export { Newsletter } from './components/brutal/newsletter.js';
|
|
55
|
+
export { MockupWindow } from './components/brutal/mockup-window.js';
|
|
56
|
+
export { Marquee, MarqueeItem } from './components/brutal/marquee.js';
|
|
53
57
|
export { AppShell, useAppShell } from './components/dashboard/app-shell.js';
|
|
54
58
|
export { Sidebar } from './components/dashboard/sidebar.js';
|
|
55
59
|
export { StatCard } from './components/dashboard/stat-card.js';
|
package/dist/index.js
CHANGED
|
@@ -3053,11 +3053,11 @@ function BrutalHero({
|
|
|
3053
3053
|
variant === "centered" && "mx-auto"
|
|
3054
3054
|
), children: description }),
|
|
3055
3055
|
/* @__PURE__ */ jsxs("div", { className: cn(
|
|
3056
|
-
"flex flex-
|
|
3057
|
-
variant === "centered" && "justify-center"
|
|
3056
|
+
"flex flex-col gap-3 sm:flex-row sm:gap-4",
|
|
3057
|
+
variant === "centered" && "sm:justify-center"
|
|
3058
3058
|
), children: [
|
|
3059
|
-
/* @__PURE__ */ jsx(Button, { variant: ctaVariant, size: "xl", render: /* @__PURE__ */ jsx("a", { href: ctaHref }), children: ctaText }),
|
|
3060
|
-
secondaryText && /* @__PURE__ */ jsx(Button, { variant: "outline", size: "xl", render: /* @__PURE__ */ jsx("a", { href: secondaryHref || "#" }), children: secondaryText })
|
|
3059
|
+
/* @__PURE__ */ jsx(Button, { variant: ctaVariant, size: "xl", className: "w-full sm:w-auto", render: /* @__PURE__ */ jsx("a", { href: ctaHref }), children: ctaText }),
|
|
3060
|
+
secondaryText && /* @__PURE__ */ jsx(Button, { variant: "outline", size: "xl", className: "w-full sm:w-auto", render: /* @__PURE__ */ jsx("a", { href: secondaryHref || "#" }), children: secondaryText })
|
|
3061
3061
|
] }),
|
|
3062
3062
|
proof && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-2 text-sm font-medium opacity-70", children: [
|
|
3063
3063
|
/* @__PURE__ */ jsx("span", { className: "inline-flex size-5 items-center justify-center border border-current text-xs", children: "\u2713" }),
|
|
@@ -3128,6 +3128,14 @@ function FeatureCard({
|
|
|
3128
3128
|
index
|
|
3129
3129
|
}) {
|
|
3130
3130
|
const isBentoFeatured = variant === "bento" && feature.featured;
|
|
3131
|
+
if (variant === "minimal") {
|
|
3132
|
+
return /* @__PURE__ */ jsxs("div", { className: "group flex flex-col gap-3 border-l-4 border-l-brand py-1 pl-5", children: [
|
|
3133
|
+
feature.icon && /* @__PURE__ */ jsx("div", { className: "text-2xl", children: feature.icon }),
|
|
3134
|
+
feature.stat && /* @__PURE__ */ jsx("p", { className: "brutal-label text-brand", children: feature.stat }),
|
|
3135
|
+
/* @__PURE__ */ jsx("h3", { className: "text-lg font-bold", children: feature.title }),
|
|
3136
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: feature.description })
|
|
3137
|
+
] });
|
|
3138
|
+
}
|
|
3131
3139
|
if (variant === "icon-left") {
|
|
3132
3140
|
return /* @__PURE__ */ jsxs("div", { className: "flex gap-4 border-brutal border-foreground border-l-4 border-l-brand bg-background p-5 shadow-brutal transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-brutal-lg", children: [
|
|
3133
3141
|
feature.icon && /* @__PURE__ */ jsx("div", { className: "flex size-12 shrink-0 items-center justify-center border-brutal border-foreground bg-brand-muted text-2xl shadow-brutal-sm", children: feature.icon }),
|
|
@@ -3165,6 +3173,52 @@ function FeatureCard({
|
|
|
3165
3173
|
}
|
|
3166
3174
|
);
|
|
3167
3175
|
}
|
|
3176
|
+
function BrutalFeatureShowcase({
|
|
3177
|
+
badge,
|
|
3178
|
+
headline,
|
|
3179
|
+
description,
|
|
3180
|
+
visual,
|
|
3181
|
+
features,
|
|
3182
|
+
reversed = false,
|
|
3183
|
+
color = "white",
|
|
3184
|
+
pattern,
|
|
3185
|
+
className
|
|
3186
|
+
}) {
|
|
3187
|
+
return /* @__PURE__ */ jsx(BrutalSection, { color, pattern, className, children: /* @__PURE__ */ jsxs(
|
|
3188
|
+
"div",
|
|
3189
|
+
{
|
|
3190
|
+
className: cn(
|
|
3191
|
+
"grid items-center gap-12 lg:grid-cols-2 lg:gap-20",
|
|
3192
|
+
reversed && "lg:[&>*:first-child]:order-2"
|
|
3193
|
+
),
|
|
3194
|
+
children: [
|
|
3195
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
|
|
3196
|
+
badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "w-fit font-mono text-xs uppercase tracking-widest", children: badge }),
|
|
3197
|
+
/* @__PURE__ */ jsx("h2", { className: "brutal-h2", children: headline }),
|
|
3198
|
+
/* @__PURE__ */ jsx("p", { className: "brutal-body text-muted-foreground", children: description }),
|
|
3199
|
+
features && features.length > 0 && /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-3 pt-2", children: features.map((f, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-3", children: [
|
|
3200
|
+
f.icon ? /* @__PURE__ */ jsx("span", { className: "mt-0.5 flex size-6 shrink-0 items-center justify-center border-brutal border-foreground bg-brand-muted text-sm", children: f.icon }) : /* @__PURE__ */ jsx("span", { className: "mt-0.5 flex size-6 shrink-0 items-center justify-center border-brutal border-foreground bg-brand text-sm text-brand-foreground font-bold", children: "\u2713" }),
|
|
3201
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: f.text })
|
|
3202
|
+
] }, i)) })
|
|
3203
|
+
] }),
|
|
3204
|
+
/* @__PURE__ */ jsxs(
|
|
3205
|
+
"div",
|
|
3206
|
+
{
|
|
3207
|
+
className: cn(
|
|
3208
|
+
"relative",
|
|
3209
|
+
reversed ? "-rotate-1" : "rotate-1",
|
|
3210
|
+
"transform transition-transform duration-300 hover:rotate-0"
|
|
3211
|
+
),
|
|
3212
|
+
children: [
|
|
3213
|
+
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 translate-x-3 translate-y-3 border-brutal border-foreground bg-brand opacity-20" }),
|
|
3214
|
+
/* @__PURE__ */ jsx("div", { className: "relative border-brutal border-foreground bg-background shadow-brutal-lg", children: visual })
|
|
3215
|
+
]
|
|
3216
|
+
}
|
|
3217
|
+
)
|
|
3218
|
+
]
|
|
3219
|
+
}
|
|
3220
|
+
) });
|
|
3221
|
+
}
|
|
3168
3222
|
function StarRating({ rating }) {
|
|
3169
3223
|
return /* @__PURE__ */ jsx("div", { className: "flex gap-0.5", children: Array.from({ length: 5 }, (_, i) => /* @__PURE__ */ jsx(
|
|
3170
3224
|
"span",
|
|
@@ -3335,12 +3389,13 @@ function CTAButtons({
|
|
|
3335
3389
|
secondaryText,
|
|
3336
3390
|
secondaryHref
|
|
3337
3391
|
}) {
|
|
3338
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-
|
|
3392
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:justify-center sm:gap-4", children: [
|
|
3339
3393
|
/* @__PURE__ */ jsx(
|
|
3340
3394
|
Button,
|
|
3341
3395
|
{
|
|
3342
3396
|
variant: ctaVariant,
|
|
3343
3397
|
size: "xl",
|
|
3398
|
+
className: "w-full sm:w-auto",
|
|
3344
3399
|
render: /* @__PURE__ */ jsx("a", { href: ctaHref }),
|
|
3345
3400
|
children: ctaText
|
|
3346
3401
|
}
|
|
@@ -3349,7 +3404,8 @@ function CTAButtons({
|
|
|
3349
3404
|
Button,
|
|
3350
3405
|
{
|
|
3351
3406
|
variant: "outline",
|
|
3352
|
-
size: "
|
|
3407
|
+
size: "xl",
|
|
3408
|
+
className: "w-full sm:w-auto",
|
|
3353
3409
|
render: /* @__PURE__ */ jsx("a", { href: secondaryHref || "#" }),
|
|
3354
3410
|
children: secondaryText
|
|
3355
3411
|
}
|
|
@@ -3379,12 +3435,13 @@ function SplitCTA(props) {
|
|
|
3379
3435
|
/* @__PURE__ */ jsx("h2", { className: "brutal-h1 mb-6", children: props.headline }),
|
|
3380
3436
|
props.description && /* @__PURE__ */ jsx("p", { className: "brutal-body mb-4 opacity-80", children: props.description }),
|
|
3381
3437
|
props.stats && /* @__PURE__ */ jsx("p", { className: "brutal-label mb-8 opacity-60", children: props.stats }),
|
|
3382
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-
|
|
3438
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:gap-4", children: [
|
|
3383
3439
|
/* @__PURE__ */ jsx(
|
|
3384
3440
|
Button,
|
|
3385
3441
|
{
|
|
3386
3442
|
variant: props.ctaVariant || "cta",
|
|
3387
3443
|
size: "xl",
|
|
3444
|
+
className: "w-full sm:w-auto",
|
|
3388
3445
|
render: /* @__PURE__ */ jsx("a", { href: props.ctaHref || "#" }),
|
|
3389
3446
|
children: props.ctaText
|
|
3390
3447
|
}
|
|
@@ -3393,7 +3450,8 @@ function SplitCTA(props) {
|
|
|
3393
3450
|
Button,
|
|
3394
3451
|
{
|
|
3395
3452
|
variant: "outline",
|
|
3396
|
-
size: "
|
|
3453
|
+
size: "xl",
|
|
3454
|
+
className: "w-full sm:w-auto",
|
|
3397
3455
|
render: /* @__PURE__ */ jsx("a", { href: props.secondaryHref || "#" }),
|
|
3398
3456
|
children: props.secondaryText
|
|
3399
3457
|
}
|
|
@@ -3456,6 +3514,54 @@ function BrutalCTA({
|
|
|
3456
3514
|
variant === "with-visual" && /* @__PURE__ */ jsx(WithVisualCTA, { ...props, variant, color })
|
|
3457
3515
|
] });
|
|
3458
3516
|
}
|
|
3517
|
+
function CellValue({ value }) {
|
|
3518
|
+
if (typeof value === "boolean") {
|
|
3519
|
+
return value ? /* @__PURE__ */ jsx("span", { className: "inline-flex size-7 items-center justify-center border-brutal border-foreground bg-brand font-bold text-brand-foreground text-sm", children: "\u2713" }) : /* @__PURE__ */ jsx("span", { className: "inline-flex size-7 items-center justify-center border-brutal border-foreground/20 text-sm text-muted-foreground", children: "\u2014" });
|
|
3520
|
+
}
|
|
3521
|
+
return /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: value });
|
|
3522
|
+
}
|
|
3523
|
+
function BrutalComparisonTable({
|
|
3524
|
+
badge,
|
|
3525
|
+
headline,
|
|
3526
|
+
description,
|
|
3527
|
+
usName,
|
|
3528
|
+
themName,
|
|
3529
|
+
features,
|
|
3530
|
+
color = "white",
|
|
3531
|
+
pattern,
|
|
3532
|
+
className
|
|
3533
|
+
}) {
|
|
3534
|
+
return /* @__PURE__ */ jsxs(BrutalSection, { color, pattern, className, children: [
|
|
3535
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-12 max-w-2xl", children: [
|
|
3536
|
+
badge && /* @__PURE__ */ jsx("p", { className: "brutal-label mb-4 text-brand", children: badge }),
|
|
3537
|
+
/* @__PURE__ */ jsx("h2", { className: "brutal-h2 mb-4", children: headline }),
|
|
3538
|
+
description && /* @__PURE__ */ jsx("p", { className: "brutal-body text-muted-foreground", children: description })
|
|
3539
|
+
] }),
|
|
3540
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxs("table", { className: "w-full border-collapse", children: [
|
|
3541
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
3542
|
+
/* @__PURE__ */ jsx("th", { className: "border-b-brutal border-foreground px-4 py-3 text-left text-sm font-medium text-muted-foreground", children: "Feature" }),
|
|
3543
|
+
/* @__PURE__ */ jsx("th", { className: "border-b-brutal border-foreground bg-brand-muted px-4 py-3 text-center", children: /* @__PURE__ */ jsx("span", { className: "brutal-label text-brand", children: usName }) }),
|
|
3544
|
+
/* @__PURE__ */ jsx("th", { className: "border-b-brutal border-foreground px-4 py-3 text-center", children: /* @__PURE__ */ jsx("span", { className: "brutal-label text-muted-foreground", children: themName }) })
|
|
3545
|
+
] }) }),
|
|
3546
|
+
/* @__PURE__ */ jsx("tbody", { children: features.map((f, i) => /* @__PURE__ */ jsxs(
|
|
3547
|
+
"tr",
|
|
3548
|
+
{
|
|
3549
|
+
className: cn(
|
|
3550
|
+
"transition-colors",
|
|
3551
|
+
f.highlight && "bg-brand-muted/50",
|
|
3552
|
+
i % 2 === 0 && !f.highlight && "bg-muted/30"
|
|
3553
|
+
),
|
|
3554
|
+
children: [
|
|
3555
|
+
/* @__PURE__ */ jsx("td", { className: "border-b border-foreground/10 px-4 py-3 text-sm font-medium", children: f.name }),
|
|
3556
|
+
/* @__PURE__ */ jsx("td", { className: "border-b border-foreground/10 bg-brand-muted/30 px-4 py-3 text-center", children: /* @__PURE__ */ jsx(CellValue, { value: f.us }) }),
|
|
3557
|
+
/* @__PURE__ */ jsx("td", { className: "border-b border-foreground/10 px-4 py-3 text-center", children: /* @__PURE__ */ jsx(CellValue, { value: f.them }) })
|
|
3558
|
+
]
|
|
3559
|
+
},
|
|
3560
|
+
i
|
|
3561
|
+
)) })
|
|
3562
|
+
] }) })
|
|
3563
|
+
] });
|
|
3564
|
+
}
|
|
3459
3565
|
function BrutalNav({
|
|
3460
3566
|
logo,
|
|
3461
3567
|
links,
|
|
@@ -3927,6 +4033,126 @@ function Newsletter({
|
|
|
3927
4033
|
)
|
|
3928
4034
|
] }) });
|
|
3929
4035
|
}
|
|
4036
|
+
function MockupWindow({
|
|
4037
|
+
children,
|
|
4038
|
+
title = "app.example.com",
|
|
4039
|
+
variant = "browser",
|
|
4040
|
+
className
|
|
4041
|
+
}) {
|
|
4042
|
+
if (variant === "phone") {
|
|
4043
|
+
return /* @__PURE__ */ jsxs(
|
|
4044
|
+
"div",
|
|
4045
|
+
{
|
|
4046
|
+
className: cn(
|
|
4047
|
+
"mx-auto w-[280px] overflow-hidden rounded-[2rem] border-brutal border-foreground bg-background shadow-brutal-lg",
|
|
4048
|
+
className
|
|
4049
|
+
),
|
|
4050
|
+
children: [
|
|
4051
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center bg-foreground py-2", children: /* @__PURE__ */ jsx("div", { className: "h-5 w-28 rounded-full bg-background/20" }) }),
|
|
4052
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-hidden", children }),
|
|
4053
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center bg-foreground py-3", children: /* @__PURE__ */ jsx("div", { className: "h-1 w-24 rounded-full bg-background/30" }) })
|
|
4054
|
+
]
|
|
4055
|
+
}
|
|
4056
|
+
);
|
|
4057
|
+
}
|
|
4058
|
+
if (variant === "terminal") {
|
|
4059
|
+
return /* @__PURE__ */ jsxs(
|
|
4060
|
+
"div",
|
|
4061
|
+
{
|
|
4062
|
+
className: cn(
|
|
4063
|
+
"overflow-hidden rounded-lg border-brutal border-foreground shadow-brutal-lg",
|
|
4064
|
+
className
|
|
4065
|
+
),
|
|
4066
|
+
children: [
|
|
4067
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b-brutal border-foreground bg-foreground px-4 py-2.5", children: [
|
|
4068
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
4069
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full bg-red-500" }),
|
|
4070
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full bg-yellow-500" }),
|
|
4071
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full bg-green-500" })
|
|
4072
|
+
] }),
|
|
4073
|
+
/* @__PURE__ */ jsx("span", { className: "ml-2 font-mono text-xs text-background/60", children: title })
|
|
4074
|
+
] }),
|
|
4075
|
+
/* @__PURE__ */ jsx("div", { className: "bg-foreground text-background", children })
|
|
4076
|
+
]
|
|
4077
|
+
}
|
|
4078
|
+
);
|
|
4079
|
+
}
|
|
4080
|
+
return /* @__PURE__ */ jsxs(
|
|
4081
|
+
"div",
|
|
4082
|
+
{
|
|
4083
|
+
className: cn(
|
|
4084
|
+
"overflow-hidden rounded-lg border-brutal border-foreground shadow-brutal-lg",
|
|
4085
|
+
className
|
|
4086
|
+
),
|
|
4087
|
+
children: [
|
|
4088
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b-brutal border-foreground bg-muted px-4 py-2.5", children: [
|
|
4089
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
4090
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full border border-foreground/20 bg-red-400" }),
|
|
4091
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full border border-foreground/20 bg-yellow-400" }),
|
|
4092
|
+
/* @__PURE__ */ jsx("div", { className: "size-3 rounded-full border border-foreground/20 bg-green-400" })
|
|
4093
|
+
] }),
|
|
4094
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-sm rounded-md border border-foreground/10 bg-background px-3 py-1 text-center font-mono text-xs text-muted-foreground", children: title }) }),
|
|
4095
|
+
/* @__PURE__ */ jsx("div", { className: "w-[54px]" }),
|
|
4096
|
+
" "
|
|
4097
|
+
] }),
|
|
4098
|
+
/* @__PURE__ */ jsx("div", { className: "bg-background", children })
|
|
4099
|
+
]
|
|
4100
|
+
}
|
|
4101
|
+
);
|
|
4102
|
+
}
|
|
4103
|
+
var speedMap = {
|
|
4104
|
+
slow: "60s",
|
|
4105
|
+
normal: "30s",
|
|
4106
|
+
fast: "15s"
|
|
4107
|
+
};
|
|
4108
|
+
function Marquee({
|
|
4109
|
+
children,
|
|
4110
|
+
speed = "normal",
|
|
4111
|
+
direction = "left",
|
|
4112
|
+
pauseOnHover = true,
|
|
4113
|
+
className
|
|
4114
|
+
}) {
|
|
4115
|
+
return /* @__PURE__ */ jsx(
|
|
4116
|
+
"div",
|
|
4117
|
+
{
|
|
4118
|
+
className: cn(
|
|
4119
|
+
"group flex overflow-hidden border-y-brutal border-foreground bg-foreground py-3",
|
|
4120
|
+
className
|
|
4121
|
+
),
|
|
4122
|
+
children: [0, 1].map((copy) => /* @__PURE__ */ jsxs(
|
|
4123
|
+
"div",
|
|
4124
|
+
{
|
|
4125
|
+
"aria-hidden": copy === 1,
|
|
4126
|
+
className: cn(
|
|
4127
|
+
"flex shrink-0 items-center gap-8",
|
|
4128
|
+
pauseOnHover && "group-hover:[animation-play-state:paused]"
|
|
4129
|
+
),
|
|
4130
|
+
style: {
|
|
4131
|
+
animation: `marquee ${speedMap[speed]} linear infinite`,
|
|
4132
|
+
animationDirection: direction === "right" ? "reverse" : "normal"
|
|
4133
|
+
},
|
|
4134
|
+
children: [
|
|
4135
|
+
children,
|
|
4136
|
+
/* @__PURE__ */ jsx("span", { className: "mx-4 text-background/30 select-none", children: "\u2022" })
|
|
4137
|
+
]
|
|
4138
|
+
},
|
|
4139
|
+
copy
|
|
4140
|
+
))
|
|
4141
|
+
}
|
|
4142
|
+
);
|
|
4143
|
+
}
|
|
4144
|
+
function MarqueeItem({ children, className }) {
|
|
4145
|
+
return /* @__PURE__ */ jsx(
|
|
4146
|
+
"span",
|
|
4147
|
+
{
|
|
4148
|
+
className: cn(
|
|
4149
|
+
"inline-flex shrink-0 items-center gap-2 whitespace-nowrap font-bold text-background",
|
|
4150
|
+
className
|
|
4151
|
+
),
|
|
4152
|
+
children
|
|
4153
|
+
}
|
|
4154
|
+
);
|
|
4155
|
+
}
|
|
3930
4156
|
var AppShellContext = createContext({
|
|
3931
4157
|
collapsed: false,
|
|
3932
4158
|
setCollapsed: () => {
|
|
@@ -4923,6 +5149,6 @@ function DashboardTemplate({
|
|
|
4923
5149
|
);
|
|
4924
5150
|
}
|
|
4925
5151
|
|
|
4926
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityFeed, Alert, AlertDescription, AlertTitle, AppShell, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BrutalCTA, BrutalFeatureGrid, BrutalFooter, BrutalHero, BrutalIntegrationGrid, BrutalNav, BrutalSection, BrutalTestimonials, Button, CalendarView, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DashboardTemplate, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FAQ, FileUpload, GridView, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupTextarea, KanbanBoard, Label, ListView, LogoCloud, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Newsletter, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, PricingTable, Progress, RadioGroup, RadioGroupItem, SaaSLaunchTemplate, ScrollArea, ScrollBar, SearchBar, SectionDivider, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, Skeleton, Slider, StatCard, StatsBar, StudioTemplate, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, ViewSwitcher, SectionDivider as WaveDivider, badgeVariants, buttonVariants, cn, defaultTransition, fadeIn, fadeInUp, navigationMenuTriggerStyle, scaleIn, slideInLeft, slideInRight, springTransition, staggerContainer, tabsListVariants, toggleVariants, useAppShell };
|
|
5152
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityFeed, Alert, AlertDescription, AlertTitle, AppShell, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BrutalCTA, BrutalComparisonTable, BrutalFeatureGrid, BrutalFeatureShowcase, BrutalFooter, BrutalHero, BrutalIntegrationGrid, BrutalNav, BrutalSection, BrutalTestimonials, Button, CalendarView, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DashboardTemplate, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FAQ, FileUpload, GridView, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupTextarea, KanbanBoard, Label, ListView, LogoCloud, Marquee, MarqueeItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MockupWindow, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Newsletter, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, PricingTable, Progress, RadioGroup, RadioGroupItem, SaaSLaunchTemplate, ScrollArea, ScrollBar, SearchBar, SectionDivider, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, Skeleton, Slider, StatCard, StatsBar, StudioTemplate, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, ViewSwitcher, SectionDivider as WaveDivider, badgeVariants, buttonVariants, cn, defaultTransition, fadeIn, fadeInUp, navigationMenuTriggerStyle, scaleIn, slideInLeft, slideInRight, springTransition, staggerContainer, tabsListVariants, toggleVariants, useAppShell };
|
|
4927
5153
|
//# sourceMappingURL=index.js.map
|
|
4928
5154
|
//# sourceMappingURL=index.js.map
|