@ugurdemirel/landcraft 0.1.16 → 0.1.18
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/README.md +2 -3
- package/dist/cjs/components/Badge.cjs +1 -1
- package/dist/cjs/components/Badge.cjs.map +1 -1
- package/dist/cjs/components/Button.cjs +1 -1
- package/dist/cjs/components/Button.cjs.map +1 -1
- package/dist/cjs/components/CTA/variants/Inverse.cjs +1 -2
- package/dist/cjs/components/CTA/variants/Inverse.cjs.map +1 -1
- package/dist/cjs/components/CTA/variants/Panel.cjs +1 -2
- package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -1
- package/dist/cjs/components/Features/FeatureCard.cjs +1 -1
- package/dist/cjs/components/Features/FeatureCard.cjs.map +1 -1
- package/dist/cjs/components/Hero/variants/Statement.cjs +1 -2
- package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -1
- package/dist/cjs/components/MegaMenu/MegaMenu.cjs +1 -1
- package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -1
- package/dist/cjs/components/Navbar/Navbar.cjs +1 -1
- package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -1
- package/dist/cjs/components/Pricing/parts.cjs +1 -2
- package/dist/cjs/components/Pricing/parts.cjs.map +1 -1
- package/dist/cjs/components/Pricing/variants/Bento.cjs +1 -1
- package/dist/cjs/components/Pricing/variants/Bento.cjs.map +1 -1
- package/dist/cjs/components/Pricing/variants/Cards.cjs +1 -1
- package/dist/cjs/components/Pricing/variants/Cards.cjs.map +1 -1
- package/dist/cjs/components/Testimonials/TestimonialCard.cjs +1 -1
- package/dist/cjs/components/Testimonials/TestimonialCard.cjs.map +1 -1
- package/dist/cjs/components/Testimonials/variants/Carousel.cjs +1 -1
- package/dist/cjs/components/Testimonials/variants/Carousel.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/es/components/Badge.js +21 -17
- package/dist/es/components/Badge.js.map +1 -1
- package/dist/es/components/Button.js +29 -29
- package/dist/es/components/Button.js.map +1 -1
- package/dist/es/components/CTA/variants/Inverse.js +37 -42
- package/dist/es/components/CTA/variants/Inverse.js.map +1 -1
- package/dist/es/components/CTA/variants/Panel.js +51 -56
- package/dist/es/components/CTA/variants/Panel.js.map +1 -1
- package/dist/es/components/Features/FeatureCard.js +13 -14
- package/dist/es/components/Features/FeatureCard.js.map +1 -1
- package/dist/es/components/Hero/variants/Statement.js +37 -42
- package/dist/es/components/Hero/variants/Statement.js.map +1 -1
- package/dist/es/components/MegaMenu/MegaMenu.js +93 -88
- package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -1
- package/dist/es/components/Navbar/Navbar.js +30 -26
- package/dist/es/components/Navbar/Navbar.js.map +1 -1
- package/dist/es/components/Pricing/parts.js +33 -34
- package/dist/es/components/Pricing/parts.js.map +1 -1
- package/dist/es/components/Pricing/variants/Bento.js +16 -17
- package/dist/es/components/Pricing/variants/Bento.js.map +1 -1
- package/dist/es/components/Pricing/variants/Cards.js +10 -11
- package/dist/es/components/Pricing/variants/Cards.js.map +1 -1
- package/dist/es/components/Testimonials/TestimonialCard.js +10 -11
- package/dist/es/components/Testimonials/TestimonialCard.js.map +1 -1
- package/dist/es/components/Testimonials/variants/Carousel.js +10 -11
- package/dist/es/components/Testimonials/variants/Carousel.js.map +1 -1
- package/dist/es/index.js +89 -93
- package/dist/es/index.js.map +1 -1
- package/dist/index.d.ts +8 -33
- package/dist/styles.css +0 -3
- package/package.json +1 -1
- package/dist/cjs/utils/contrast.cjs +0 -2
- package/dist/cjs/utils/contrast.cjs.map +0 -1
- package/dist/cjs/utils/useTokenForeground.cjs +0 -3
- package/dist/cjs/utils/useTokenForeground.cjs.map +0 -1
- package/dist/es/utils/contrast.js +0 -48
- package/dist/es/utils/contrast.js.map +0 -1
- package/dist/es/utils/useTokenForeground.js +0 -28
- package/dist/es/utils/useTokenForeground.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
3
3
|
import { useState as D } from "react";
|
|
4
|
-
import { cn as
|
|
4
|
+
import { cn as n } from "../../utils/cn.js";
|
|
5
5
|
import { X as P, Menu as T } from "../../icons.js";
|
|
6
6
|
const f = "text-on-secondary", d = "text-foreground", C = {
|
|
7
7
|
classic: {
|
|
@@ -49,7 +49,7 @@ const f = "text-on-secondary", d = "text-foreground", C = {
|
|
|
49
49
|
logoAlt: N,
|
|
50
50
|
logoClassName: k,
|
|
51
51
|
brandHref: w = "#",
|
|
52
|
-
links:
|
|
52
|
+
links: x,
|
|
53
53
|
actions: l,
|
|
54
54
|
cta: i,
|
|
55
55
|
languageSwitcher: c,
|
|
@@ -57,28 +57,30 @@ const f = "text-on-secondary", d = "text-foreground", C = {
|
|
|
57
57
|
LinkComponent: L,
|
|
58
58
|
...j
|
|
59
59
|
}) => {
|
|
60
|
-
const [a,
|
|
60
|
+
const [a, h] = D(!1), m = L ?? "a", o = C[b], p = v ?? (u ? /* @__PURE__ */ e(
|
|
61
61
|
"img",
|
|
62
62
|
{
|
|
63
63
|
src: u,
|
|
64
64
|
alt: N ?? (typeof s == "string" ? s : "Logo"),
|
|
65
|
-
className:
|
|
65
|
+
className: n("h-7 w-auto", k)
|
|
66
66
|
}
|
|
67
|
-
) : null), B = p ? /* @__PURE__ */ e("span", { className: "flex items-center", children: p }) : /* @__PURE__ */ t("span", { className:
|
|
68
|
-
/* @__PURE__ */ e("span", { "aria-hidden": !0, className:
|
|
67
|
+
) : null), B = p ? /* @__PURE__ */ e("span", { className: "flex items-center", children: p }) : /* @__PURE__ */ t("span", { className: n("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight", o.brandText), children: [
|
|
68
|
+
/* @__PURE__ */ e("span", { "aria-hidden": !0, className: n("inline-block h-2.5 w-2.5 rounded-sm", o.brandDot) }),
|
|
69
69
|
s
|
|
70
70
|
] });
|
|
71
|
-
return /* @__PURE__ */ t("header", { className:
|
|
72
|
-
/* @__PURE__ */ t("nav", { className:
|
|
71
|
+
return /* @__PURE__ */ t("header", { className: n("w-full transition-colors duration-200", y && "sticky top-0 z-50", o.shell, o.header, g), ...j, children: [
|
|
72
|
+
/* @__PURE__ */ t("nav", { className: n("flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200", o.bar), "aria-label": "Main navigation", children: [
|
|
73
73
|
/* @__PURE__ */ e(m, { href: w, className: "shrink-0", children: B }),
|
|
74
|
-
/* @__PURE__ */ e("ul", { className:
|
|
74
|
+
/* @__PURE__ */ e("ul", { className: o.desktopList, children: x.map((r) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
|
|
75
75
|
m,
|
|
76
76
|
{
|
|
77
|
-
href:
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
href: r.href,
|
|
78
|
+
target: r.external ? "_blank" : void 0,
|
|
79
|
+
rel: r.external ? "noopener noreferrer" : void 0,
|
|
80
|
+
className: n("text-sm font-medium transition-colors duration-150", o.link),
|
|
81
|
+
children: r.label
|
|
80
82
|
}
|
|
81
|
-
) },
|
|
83
|
+
) }, r.href)) }),
|
|
82
84
|
/* @__PURE__ */ t("div", { className: "hidden items-center gap-3 md:flex", children: [
|
|
83
85
|
c,
|
|
84
86
|
l,
|
|
@@ -90,11 +92,11 @@ const f = "text-on-secondary", d = "text-foreground", C = {
|
|
|
90
92
|
type: "button",
|
|
91
93
|
"aria-label": a ? "Close menu" : "Open menu",
|
|
92
94
|
"aria-expanded": a,
|
|
93
|
-
onClick: () =>
|
|
94
|
-
className:
|
|
95
|
+
onClick: () => h((r) => !r),
|
|
96
|
+
className: n(
|
|
95
97
|
"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden",
|
|
96
98
|
"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
97
|
-
|
|
99
|
+
o.menuButton
|
|
98
100
|
),
|
|
99
101
|
children: a ? /* @__PURE__ */ e(P, { className: "h-5 w-5" }) : /* @__PURE__ */ e(T, { className: "h-5 w-5" })
|
|
100
102
|
}
|
|
@@ -103,25 +105,27 @@ const f = "text-on-secondary", d = "text-foreground", C = {
|
|
|
103
105
|
/* @__PURE__ */ e(
|
|
104
106
|
"div",
|
|
105
107
|
{
|
|
106
|
-
className:
|
|
108
|
+
className: n(
|
|
107
109
|
"grid transition-[grid-template-rows,opacity] duration-200 md:hidden",
|
|
108
110
|
a ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0",
|
|
109
|
-
|
|
111
|
+
o.mobilePanel
|
|
110
112
|
),
|
|
111
|
-
children: /* @__PURE__ */ e("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ t("ul", { className:
|
|
113
|
+
children: /* @__PURE__ */ e("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ t("ul", { className: n("flex flex-col py-4", b !== "floating" && "px-5"), children: [
|
|
112
114
|
c ? /* @__PURE__ */ e("li", { className: "px-2 pb-4", children: c }) : null,
|
|
113
|
-
|
|
115
|
+
x.map((r) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
|
|
114
116
|
m,
|
|
115
117
|
{
|
|
116
|
-
href:
|
|
117
|
-
|
|
118
|
-
|
|
118
|
+
href: r.href,
|
|
119
|
+
target: r.external ? "_blank" : void 0,
|
|
120
|
+
rel: r.external ? "noopener noreferrer" : void 0,
|
|
121
|
+
onClick: () => h(!1),
|
|
122
|
+
className: n(
|
|
119
123
|
"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",
|
|
120
|
-
|
|
124
|
+
o.mobileLink
|
|
121
125
|
),
|
|
122
|
-
children:
|
|
126
|
+
children: r.label
|
|
123
127
|
}
|
|
124
|
-
) },
|
|
128
|
+
) }, r.href)),
|
|
125
129
|
i ? /* @__PURE__ */ e("li", { className: "mt-3 px-2 pb-2", children: i }) : l ? /* @__PURE__ */ e("li", { className: "mt-3 flex flex-wrap gap-3 px-2 pb-2", children: l }) : null
|
|
126
130
|
] }) })
|
|
127
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.js","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-on-secondary/60 hover:text-on-secondary\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileLink:\n \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n menuButton: `${inverse} hover:bg-white/10`,\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = styles[variant];\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header className={cn(\"w-full transition-colors duration-200\", sticky && \"sticky top-0 z-50\", s.shell, s.header, className)} {...props}>\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", variant !== \"floating\" && \"px-5\")}>\n {languageSwitcher ? (\n <li className=\"px-2 pb-4\">{languageSwitcher}</li>\n ) : null}\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";"],"names":["inverse","light","styles","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","LinkComponent","props","open","setOpen","useState","Link","s","logoNode","jsx","cn","brandNode","jsxs","link","o","X","Menu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Navbar.js","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-on-secondary/60 hover:text-on-secondary\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileLink:\n \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n menuButton: `${inverse} hover:bg-white/10`,\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = styles[variant];\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header className={cn(\"w-full transition-colors duration-200\", sticky && \"sticky top-0 z-50\", s.shell, s.header, className)} {...props}>\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", variant !== \"floating\" && \"px-5\")}>\n {languageSwitcher ? (\n <li className=\"px-2 pb-4\">{languageSwitcher}</li>\n ) : null}\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n target={link.external ? \"_blank\" : undefined}\n rel={link.external ? \"noopener noreferrer\" : undefined}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";"],"names":["inverse","light","styles","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","LinkComponent","props","open","setOpen","useState","Link","s","logoNode","jsx","cn","brandNode","jsxs","link","o","X","Menu"],"mappings":"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"}
|
|
@@ -1,39 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsxs as n, jsx as t, Fragment as a } from "react/jsx-runtime";
|
|
1
|
+
import { jsxs as n, jsx as t, Fragment as c } from "react/jsx-runtime";
|
|
3
2
|
import { cn as e } from "../../utils/cn.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
function y({
|
|
8
|
-
value: o,
|
|
3
|
+
import { ArrowRight as a } from "../../icons.js";
|
|
4
|
+
function f({
|
|
5
|
+
value: r,
|
|
9
6
|
billing: i,
|
|
10
|
-
dim:
|
|
7
|
+
dim: o
|
|
11
8
|
}) {
|
|
12
|
-
return
|
|
9
|
+
return r === null ? /* @__PURE__ */ t("span", { children: "Custom" }) : /* @__PURE__ */ n(c, { children: [
|
|
13
10
|
/* @__PURE__ */ n("span", { className: "text-[2.6rem] font-semibold tracking-tight sm:text-[3rem]", children: [
|
|
14
11
|
"$",
|
|
15
|
-
|
|
12
|
+
r
|
|
16
13
|
] }),
|
|
17
|
-
/* @__PURE__ */ n("span", { className: e("text-sm font-normal",
|
|
14
|
+
/* @__PURE__ */ n("span", { className: e("text-sm font-normal", o && "opacity-60"), children: [
|
|
18
15
|
"/",
|
|
19
16
|
i === "monthly" ? "mo" : "yr"
|
|
20
17
|
] })
|
|
21
18
|
] });
|
|
22
19
|
}
|
|
23
|
-
function
|
|
24
|
-
billing:
|
|
20
|
+
function h({
|
|
21
|
+
billing: r,
|
|
25
22
|
onChange: i,
|
|
26
|
-
dark:
|
|
23
|
+
dark: o,
|
|
27
24
|
yearlyBadge: s
|
|
28
25
|
}) {
|
|
29
|
-
const l = m("--color-accent", "#0f172a");
|
|
30
26
|
return /* @__PURE__ */ n("div", { className: "mb-10 flex items-center justify-center gap-4", children: [
|
|
31
27
|
/* @__PURE__ */ t(
|
|
32
28
|
"span",
|
|
33
29
|
{
|
|
34
30
|
className: e(
|
|
35
31
|
"text-sm font-medium transition-colors",
|
|
36
|
-
|
|
32
|
+
r === "monthly" ? o ? "text-white" : "text-foreground" : "text-muted-foreground"
|
|
37
33
|
),
|
|
38
34
|
children: "Monthly"
|
|
39
35
|
}
|
|
@@ -43,20 +39,20 @@ function p({
|
|
|
43
39
|
{
|
|
44
40
|
type: "button",
|
|
45
41
|
role: "switch",
|
|
46
|
-
"aria-checked":
|
|
42
|
+
"aria-checked": r === "yearly",
|
|
47
43
|
"aria-label": "Billing period",
|
|
48
|
-
onClick: () => i(
|
|
44
|
+
onClick: () => i(r === "monthly" ? "yearly" : "monthly"),
|
|
49
45
|
className: e(
|
|
50
46
|
"relative inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full transition-colors duration-200",
|
|
51
47
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
52
|
-
|
|
48
|
+
r === "yearly" ? "bg-primary" : "bg-border"
|
|
53
49
|
),
|
|
54
50
|
children: /* @__PURE__ */ t(
|
|
55
51
|
"span",
|
|
56
52
|
{
|
|
57
53
|
className: e(
|
|
58
54
|
"inline-block h-4 w-4 transform rounded-full bg-white shadow transition-transform duration-200",
|
|
59
|
-
|
|
55
|
+
r === "yearly" ? "translate-x-6" : "translate-x-1"
|
|
60
56
|
)
|
|
61
57
|
}
|
|
62
58
|
)
|
|
@@ -67,7 +63,7 @@ function p({
|
|
|
67
63
|
{
|
|
68
64
|
className: e(
|
|
69
65
|
"flex items-center gap-2 text-sm font-medium transition-colors",
|
|
70
|
-
|
|
66
|
+
r === "yearly" ? o ? "text-white" : "text-foreground" : "text-muted-foreground"
|
|
71
67
|
),
|
|
72
68
|
children: [
|
|
73
69
|
"Yearly",
|
|
@@ -75,7 +71,7 @@ function p({
|
|
|
75
71
|
"span",
|
|
76
72
|
{
|
|
77
73
|
className: "rounded-full bg-accent px-2 py-0.5 text-xs font-semibold",
|
|
78
|
-
style: { color:
|
|
74
|
+
style: { color: "contrast-color(rgb(var(--color-accent)))" },
|
|
79
75
|
children: s
|
|
80
76
|
}
|
|
81
77
|
) : null
|
|
@@ -84,37 +80,40 @@ function p({
|
|
|
84
80
|
)
|
|
85
81
|
] });
|
|
86
82
|
}
|
|
87
|
-
function
|
|
88
|
-
plan:
|
|
83
|
+
function g({
|
|
84
|
+
plan: r,
|
|
89
85
|
billing: i,
|
|
90
|
-
onSelect:
|
|
86
|
+
onSelect: o,
|
|
91
87
|
dark: s
|
|
92
88
|
}) {
|
|
93
|
-
const l =
|
|
89
|
+
const l = r.highlighted && !r.customColor;
|
|
94
90
|
return /* @__PURE__ */ n(
|
|
95
91
|
"button",
|
|
96
92
|
{
|
|
97
93
|
type: "button",
|
|
98
|
-
onClick: () =>
|
|
94
|
+
onClick: () => o == null ? void 0 : o(r, i),
|
|
99
95
|
className: e(
|
|
100
96
|
"inline-flex h-11 cursor-pointer items-center justify-center gap-2 rounded-lg px-5 text-sm font-semibold transition-colors duration-200",
|
|
101
97
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
102
|
-
l ||
|
|
98
|
+
l || r.customColor ? "hover:brightness-95" : s ? "bg-white text-black hover:bg-white/90" : "border border-border text-foreground hover:bg-surface"
|
|
103
99
|
),
|
|
104
|
-
style:
|
|
100
|
+
style: r.customColor ? {
|
|
101
|
+
backgroundColor: r.customColor,
|
|
102
|
+
color: `contrast-color(${r.customColor})`
|
|
103
|
+
} : l ? {
|
|
105
104
|
backgroundColor: "rgb(var(--color-primary))",
|
|
106
105
|
color: "rgb(var(--color-on-primary))"
|
|
107
106
|
} : void 0,
|
|
108
107
|
children: [
|
|
109
|
-
|
|
110
|
-
/* @__PURE__ */ t(
|
|
108
|
+
r.cta || "Start",
|
|
109
|
+
/* @__PURE__ */ t(a, { className: "h-4 w-4 opacity-60" })
|
|
111
110
|
]
|
|
112
111
|
}
|
|
113
112
|
);
|
|
114
113
|
}
|
|
115
114
|
export {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
h as BillingToggle,
|
|
116
|
+
g as PlanButton,
|
|
117
|
+
f as PriceValue
|
|
119
118
|
};
|
|
120
119
|
//# sourceMappingURL=parts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.js","sources":["../../../../src/components/Pricing/parts.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"parts.js","sources":["../../../../src/components/Pricing/parts.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn\";\nimport { ArrowRight } from \"../../icons\";\nimport type { Plan } from \"./types\";\n\nexport function PriceValue({\n value,\n billing,\n dim,\n}: {\n value: number | null;\n billing: \"monthly\" | \"yearly\";\n /** False when rendered on a colored background where opacity would kill contrast. */\n dim?: boolean;\n}) {\n if (value === null) {\n return <span>Custom</span>;\n }\n return (\n <>\n <span className=\"text-[2.6rem] font-semibold tracking-tight sm:text-[3rem]\">${value}</span>\n <span className={cn(\"text-sm font-normal\", dim && \"opacity-60\")}>\n /{billing === \"monthly\" ? \"mo\" : \"yr\"}\n </span>\n </>\n );\n}\n\nexport function BillingToggle({\n billing,\n onChange,\n dark,\n yearlyBadge,\n}: {\n billing: \"monthly\" | \"yearly\";\n onChange: (b: \"monthly\" | \"yearly\") => void;\n dark?: boolean;\n yearlyBadge?: string;\n}) {\n // The accent token is a background color, but its shipped \"on-accent\"\n // pairing isn't guaranteed to be contrast-safe (e.g. white on amber).\n // Let CSS pick the readable text color from the actual accent value via\n // contrast-color(); it re-evaluates automatically when the token changes.\n return (\n <div className=\"mb-10 flex items-center justify-center gap-4\">\n <span\n className={cn(\n \"text-sm font-medium transition-colors\",\n billing === \"monthly\" ? (dark ? \"text-white\" : \"text-foreground\") : \"text-muted-foreground\",\n )}\n >\n Monthly\n </span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={billing === \"yearly\"}\n aria-label=\"Billing period\"\n onClick={() => onChange(billing === \"monthly\" ? \"yearly\" : \"monthly\")}\n className={cn(\n \"relative inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n billing === \"yearly\" ? \"bg-primary\" : \"bg-border\",\n )}\n >\n <span\n className={cn(\n \"inline-block h-4 w-4 transform rounded-full bg-white shadow transition-transform duration-200\",\n billing === \"yearly\" ? \"translate-x-6\" : \"translate-x-1\",\n )}\n />\n </button>\n <span\n className={cn(\n \"flex items-center gap-2 text-sm font-medium transition-colors\",\n billing === \"yearly\" ? (dark ? \"text-white\" : \"text-foreground\") : \"text-muted-foreground\",\n )}\n >\n Yearly\n {yearlyBadge ? (\n <span\n className=\"rounded-full bg-accent px-2 py-0.5 text-xs font-semibold\"\n style={{ color: \"contrast-color(rgb(var(--color-accent)))\" }}\n >\n {yearlyBadge}\n </span>\n ) : null}\n </span>\n </div>\n );\n}\n\nexport function PlanButton({\n plan,\n billing,\n onSelect,\n dark,\n}: {\n plan: Plan;\n billing: \"monthly\" | \"yearly\";\n onSelect?: (plan: Plan, billing: \"monthly\" | \"yearly\") => void;\n dark?: boolean;\n}) {\n const isHighlighted = plan.highlighted && !plan.customColor;\n return (\n <button\n type=\"button\"\n onClick={() => onSelect?.(plan, billing)}\n className={cn(\n \"inline-flex h-11 cursor-pointer items-center justify-center gap-2 rounded-lg px-5 text-sm font-semibold transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n isHighlighted || plan.customColor\n ? \"hover:brightness-95\"\n : dark\n ? \"bg-white text-black hover:bg-white/90\"\n : \"border border-border text-foreground hover:bg-surface\",\n )}\n style={\n plan.customColor\n ? {\n backgroundColor: plan.customColor,\n color: `contrast-color(${plan.customColor})`,\n }\n : isHighlighted\n ? {\n backgroundColor: \"rgb(var(--color-primary))\",\n color: \"rgb(var(--color-on-primary))\",\n }\n : undefined\n }\n >\n {plan.cta || \"Start\"}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n );\n}"],"names":["PriceValue","value","billing","dim","jsx","jsxs","Fragment","cn","BillingToggle","onChange","dark","yearlyBadge","PlanButton","plan","onSelect","isHighlighted","ArrowRight"],"mappings":";;;AAIO,SAASA,EAAW;AAAA,EACzB,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,KAAAC;AACF,GAKG;AACD,SAAIF,MAAU,OACL,gBAAAG,EAAC,UAAK,UAAA,SAAA,CAAM,IAGnB,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,6DAA4D,UAAA;AAAA,MAAA;AAAA,MAAEJ;AAAA,IAAA,GAAM;AAAA,sBACnF,QAAA,EAAK,WAAWM,EAAG,uBAAuBJ,KAAO,YAAY,GAAG,UAAA;AAAA,MAAA;AAAA,MAC7DD,MAAY,YAAY,OAAO;AAAA,IAAA,EAAA,CACnC;AAAA,EAAA,GACF;AAEJ;AAEO,SAASM,EAAc;AAAA,EAC5B,SAAAN;AAAA,EACA,UAAAO;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC;AACF,GAKG;AAKD,SACE,gBAAAN,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWG;AAAA,UACT;AAAA,UACAL,MAAY,YAAaQ,IAAO,eAAe,oBAAqB;AAAA,QAAA;AAAA,QAEvE,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,gBAAAN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,MAAK;AAAA,QACL,gBAAcF,MAAY;AAAA,QAC1B,cAAW;AAAA,QACX,SAAS,MAAMO,EAASP,MAAY,YAAY,WAAW,SAAS;AAAA,QACpE,WAAWK;AAAA,UACT;AAAA,UACA;AAAA,UACAL,MAAY,WAAW,eAAe;AAAA,QAAA;AAAA,QAGxC,UAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWG;AAAA,cACT;AAAA,cACAL,MAAY,WAAW,kBAAkB;AAAA,YAAA;AAAA,UAC3C;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAEF,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWE;AAAA,UACT;AAAA,UACAL,MAAY,WAAYQ,IAAO,eAAe,oBAAqB;AAAA,QAAA;AAAA,QAEtE,UAAA;AAAA,UAAA;AAAA,UAEEC,IACC,gBAAAP;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,OAAO,2CAAA;AAAA,cAEf,UAAAO;AAAA,YAAA;AAAA,UAAA,IAED;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACN,GACF;AAEJ;AAEO,SAASC,EAAW;AAAA,EACzB,MAAAC;AAAA,EACA,SAAAX;AAAA,EACA,UAAAY;AAAA,EACA,MAAAJ;AACF,GAKG;AACD,QAAMK,IAAgBF,EAAK,eAAe,CAACA,EAAK;AAChD,SACE,gBAAAR;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,MAAMS,KAAA,gBAAAA,EAAWD,GAAMX;AAAA,MAChC,WAAWK;AAAA,QACT;AAAA,QACA;AAAA,QACAQ,KAAiBF,EAAK,cAClB,wBACAH,IACE,0CACA;AAAA,MAAA;AAAA,MAER,OACEG,EAAK,cACD;AAAA,QACE,iBAAiBA,EAAK;AAAA,QACtB,OAAO,kBAAkBA,EAAK,WAAW;AAAA,MAAA,IAE3CE,IACE;AAAA,QACE,iBAAiB;AAAA,QACjB,OAAO;AAAA,MAAA,IAET;AAAA,MAGP,UAAA;AAAA,QAAAF,EAAK,OAAO;AAAA,QACb,gBAAAT,EAACY,GAAA,EAAW,WAAU,qBAAA,CAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGjD;"}
|
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as s, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { cn as o } from "../../../utils/cn.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/* @__PURE__ */ t(x, { billing: s, onChange: a, yearlyBadge: g }),
|
|
3
|
+
import { BillingToggle as x, PriceValue as f, PlanButton as v } from "../parts.js";
|
|
4
|
+
import { Check as y } from "../../../icons.js";
|
|
5
|
+
const N = ({ className: d, plans: m, billing: i, onBillingChange: a, onSelect: n, yearlyBadge: g, ...u }) => /* @__PURE__ */ s("div", { className: o("w-full", d), ...u, children: [
|
|
6
|
+
/* @__PURE__ */ t(x, { billing: i, onChange: a, yearlyBadge: g }),
|
|
8
7
|
/* @__PURE__ */ t("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: m.map((r) => {
|
|
9
|
-
const c = r.highlighted && !r.customColor, e = r.customColor || (c ? "rgb(var(--color-primary))" : void 0),
|
|
10
|
-
return /* @__PURE__ */
|
|
8
|
+
const c = r.highlighted && !r.customColor, e = r.customColor || (c ? "rgb(var(--color-primary))" : void 0), h = r.customColor ? `contrast-color(${r.customColor})` : c ? "rgb(var(--color-on-primary))" : void 0;
|
|
9
|
+
return /* @__PURE__ */ s(
|
|
11
10
|
"div",
|
|
12
11
|
{
|
|
13
12
|
className: o(
|
|
14
13
|
"flex h-full flex-col rounded-xl p-8",
|
|
15
14
|
e ? "lg:col-span-2" : "border border-border bg-surface"
|
|
16
15
|
),
|
|
17
|
-
style: e ? { backgroundColor: e, color:
|
|
16
|
+
style: e ? { backgroundColor: e, color: h } : void 0,
|
|
18
17
|
children: [
|
|
19
|
-
/* @__PURE__ */
|
|
20
|
-
/* @__PURE__ */
|
|
18
|
+
/* @__PURE__ */ s("div", { className: "flex items-start justify-between gap-4", children: [
|
|
19
|
+
/* @__PURE__ */ s("div", { className: "min-w-0", children: [
|
|
21
20
|
/* @__PURE__ */ t("h3", { className: o("font-display text-xl font-semibold tracking-tight", e ? "text-current" : "text-foreground"), children: r.name }),
|
|
22
21
|
r.description ? /* @__PURE__ */ t("p", { className: o("mt-1.5 text-sm", e ? void 0 : "text-muted-foreground"), children: r.description }) : null
|
|
23
22
|
] }),
|
|
24
|
-
/* @__PURE__ */ t("div", { className: o("shrink-0 font-display", e ? "text-current" : "text-foreground"), children: /* @__PURE__ */ t(
|
|
23
|
+
/* @__PURE__ */ t("div", { className: o("shrink-0 font-display", e ? "text-current" : "text-foreground"), children: /* @__PURE__ */ t(f, { value: i === "monthly" ? r.monthly : r.yearly, billing: i, dim: !e }) })
|
|
25
24
|
] }),
|
|
26
25
|
/* @__PURE__ */ t(
|
|
27
26
|
"ul",
|
|
@@ -30,21 +29,21 @@ const p = ({ className: d, plans: m, billing: s, onBillingChange: a, onSelect: n
|
|
|
30
29
|
"mt-7 grid grid-cols-1 gap-x-8 gap-y-2.5 text-sm sm:grid-cols-2",
|
|
31
30
|
e ? "lg:max-w-2xl" : void 0
|
|
32
31
|
),
|
|
33
|
-
children: r.features.map((l) => /* @__PURE__ */
|
|
34
|
-
/* @__PURE__ */ t(
|
|
32
|
+
children: r.features.map((l) => /* @__PURE__ */ s("li", { className: o("flex items-start gap-2.5", e ? "text-current" : "text-muted-foreground"), children: [
|
|
33
|
+
/* @__PURE__ */ t(y, { className: o("mt-0.5 h-4 w-4 shrink-0", e ? "text-current" : "text-primary") }),
|
|
35
34
|
l
|
|
36
35
|
] }, l))
|
|
37
36
|
}
|
|
38
37
|
),
|
|
39
|
-
/* @__PURE__ */ t("div", { className: "mt-8", children: /* @__PURE__ */ t(
|
|
38
|
+
/* @__PURE__ */ t("div", { className: "mt-8", children: /* @__PURE__ */ t(v, { plan: r, billing: i, onSelect: n, dark: !e }) })
|
|
40
39
|
]
|
|
41
40
|
},
|
|
42
41
|
r.name
|
|
43
42
|
);
|
|
44
43
|
}) })
|
|
45
44
|
] });
|
|
46
|
-
|
|
45
|
+
N.displayName = "PricingBento";
|
|
47
46
|
export {
|
|
48
|
-
|
|
47
|
+
N as PricingBento
|
|
49
48
|
};
|
|
50
49
|
//# sourceMappingURL=Bento.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bento.js","sources":["../../../../../src/components/Pricing/variants/Bento.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport {
|
|
1
|
+
{"version":3,"file":"Bento.js","sources":["../../../../../src/components/Pricing/variants/Bento.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { PriceValue, BillingToggle, PlanButton } from \"../parts\";\nimport { Check } from \"../../../icons\";\nimport type { PricingVariantProps } from \"../types\";\n\ninterface BentoProps extends PricingVariantProps {\n className?: string;\n}\n\nexport const PricingBento = ({ className, plans, billing, onBillingChange, onSelect, yearlyBadge, ...props }: BentoProps) => {\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <BillingToggle billing={billing} onChange={onBillingChange} yearlyBadge={yearlyBadge} />\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {plans.map((plan) => {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const bg = plan.customColor || (isHighlighted ? \"rgb(var(--color-primary))\" : undefined);\n const fg = plan.customColor\n ? `contrast-color(${plan.customColor})`\n : isHighlighted\n ? \"rgb(var(--color-on-primary))\"\n : undefined;\n return (\n <div\n key={plan.name}\n className={cn(\n \"flex h-full flex-col rounded-xl p-8\",\n bg\n ? \"lg:col-span-2\"\n : \"border border-border bg-surface\",\n )}\n style={bg ? { backgroundColor: bg, color: fg } : undefined}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <h3 className={cn(\"font-display text-xl font-semibold tracking-tight\", bg ? \"text-current\" : \"text-foreground\")}>\n {plan.name}\n </h3>\n {plan.description ? (\n <p className={cn(\"mt-1.5 text-sm\", bg ? undefined : \"text-muted-foreground\")}>\n {plan.description}\n </p>\n ) : null}\n </div>\n <div className={cn(\"shrink-0 font-display\", bg ? \"text-current\" : \"text-foreground\")}>\n <PriceValue value={billing === \"monthly\" ? plan.monthly : plan.yearly} billing={billing} dim={!bg} />\n </div>\n </div>\n <ul\n className={cn(\n \"mt-7 grid grid-cols-1 gap-x-8 gap-y-2.5 text-sm sm:grid-cols-2\",\n bg ? \"lg:max-w-2xl\" : undefined,\n )}\n >\n {plan.features.map((feature) => (\n <li key={feature} className={cn(\"flex items-start gap-2.5\", bg ? \"text-current\" : \"text-muted-foreground\")}>\n <Check className={cn(\"mt-0.5 h-4 w-4 shrink-0\", bg ? \"text-current\" : \"text-primary\")} />\n {feature}\n </li>\n ))}\n </ul>\n <div className=\"mt-8\">\n <PlanButton plan={plan} billing={billing} onSelect={onSelect} dark={!bg} />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n};\nPricingBento.displayName = \"PricingBento\";"],"names":["PricingBento","className","plans","billing","onBillingChange","onSelect","yearlyBadge","props","jsxs","cn","jsx","BillingToggle","plan","isHighlighted","bg","fg","PriceValue","feature","Check","PlanButton"],"mappings":";;;;AASO,MAAMA,IAAe,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,GAAS,iBAAAC,GAAiB,UAAAC,GAAU,aAAAC,GAAa,GAAGC,QAEjG,gBAAAC,EAAC,SAAI,WAAWC,EAAG,UAAUR,CAAS,GAAI,GAAGM,GAC3C,UAAA;AAAA,EAAA,gBAAAG,EAACC,GAAA,EAAc,SAAAR,GAAkB,UAAUC,GAAiB,aAAAE,GAA0B;AAAA,oBACrF,OAAA,EAAI,WAAU,yCACZ,UAAAJ,EAAM,IAAI,CAACU,MAAS;AACnB,UAAMC,IAAgBD,EAAK,eAAe,CAACA,EAAK,aAC1CE,IAAKF,EAAK,gBAAgBC,IAAgB,8BAA8B,SACxEE,IAAKH,EAAK,cACZ,kBAAkBA,EAAK,WAAW,MAClCC,IACE,iCACA;AACN,WACE,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWC;AAAA,UACT;AAAA,UACAK,IACI,kBACA;AAAA,QAAA;AAAA,QAEN,OAAOA,IAAK,EAAE,iBAAiBA,GAAI,OAAOC,MAAO;AAAA,QAEjD,UAAA;AAAA,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAWD,EAAG,qDAAqDK,IAAK,iBAAiB,iBAAiB,GAC3G,UAAAF,EAAK,KAAA,CACR;AAAA,cACCA,EAAK,cACJ,gBAAAF,EAAC,KAAA,EAAE,WAAWD,EAAG,kBAAkBK,IAAK,SAAY,uBAAuB,GACxE,UAAAF,EAAK,aACR,IACE;AAAA,YAAA,GACN;AAAA,YACA,gBAAAF,EAAC,SAAI,WAAWD,EAAG,yBAAyBK,IAAK,iBAAiB,iBAAiB,GACjF,UAAA,gBAAAJ,EAACM,GAAA,EAAW,OAAOb,MAAY,YAAYS,EAAK,UAAUA,EAAK,QAAQ,SAAAT,GAAkB,KAAK,CAACW,EAAA,CAAI,EAAA,CACrG;AAAA,UAAA,GACF;AAAA,UACA,gBAAAJ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD;AAAA,gBACT;AAAA,gBACAK,IAAK,iBAAiB;AAAA,cAAA;AAAA,cAGvB,UAAAF,EAAK,SAAS,IAAI,CAACK,MAClB,gBAAAT,EAAC,MAAA,EAAiB,WAAWC,EAAG,4BAA4BK,IAAK,iBAAiB,uBAAuB,GACvG,UAAA;AAAA,gBAAA,gBAAAJ,EAACQ,KAAM,WAAWT,EAAG,2BAA2BK,IAAK,iBAAiB,cAAc,GAAG;AAAA,gBACtFG;AAAA,cAAA,EAAA,GAFMA,CAGT,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,UAEH,gBAAAP,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA,EAACS,GAAA,EAAW,MAAAP,GAAY,SAAAT,GAAkB,UAAAE,GAAoB,MAAM,CAACS,EAAA,CAAI,EAAA,CAC3E;AAAA,QAAA;AAAA,MAAA;AAAA,MAvCKF,EAAK;AAAA,IAAA;AAAA,EA0ChB,CAAC,EAAA,CACH;AAAA,GACF;AAGJZ,EAAa,cAAc;"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsxs as l, jsx as o } from "react/jsx-runtime";
|
|
2
2
|
import { cn as t } from "../../../utils/cn.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const b = ({ className: d, plans: a, billing: s, onBillingChange: m, onSelect: n, yearlyBadge: g, ...u }) => /* @__PURE__ */ l("div", { className: t("w-full", d), ...u, children: [
|
|
3
|
+
import { BillingToggle as h, PriceValue as f, PlanButton as p } from "../parts.js";
|
|
4
|
+
import { Check as y } from "../../../icons.js";
|
|
5
|
+
const v = ({ className: d, plans: a, billing: s, onBillingChange: m, onSelect: n, yearlyBadge: g, ...u }) => /* @__PURE__ */ l("div", { className: t("w-full", d), ...u, children: [
|
|
7
6
|
/* @__PURE__ */ o(h, { billing: s, onChange: m, yearlyBadge: g }),
|
|
8
7
|
/* @__PURE__ */ o("div", { className: "grid grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-3", children: a.map((r) => {
|
|
9
|
-
const i = r.highlighted && !r.customColor, e = r.customColor || (i ? "rgb(var(--color-primary))" : void 0),
|
|
8
|
+
const i = r.highlighted && !r.customColor, e = r.customColor || (i ? "rgb(var(--color-primary))" : void 0), x = r.customColor ? `contrast-color(${r.customColor})` : i ? "rgb(var(--color-on-primary))" : void 0;
|
|
10
9
|
return /* @__PURE__ */ l(
|
|
11
10
|
"div",
|
|
12
11
|
{
|
|
@@ -15,7 +14,7 @@ const b = ({ className: d, plans: a, billing: s, onBillingChange: m, onSelect: n
|
|
|
15
14
|
e ? "shadow-raised" : "border border-border bg-surface",
|
|
16
15
|
!e && i && "border-primary"
|
|
17
16
|
),
|
|
18
|
-
style: e ? { backgroundColor: e, color:
|
|
17
|
+
style: e ? { backgroundColor: e, color: x } : void 0,
|
|
19
18
|
children: [
|
|
20
19
|
i ? /* @__PURE__ */ o(
|
|
21
20
|
"span",
|
|
@@ -30,20 +29,20 @@ const b = ({ className: d, plans: a, billing: s, onBillingChange: m, onSelect: n
|
|
|
30
29
|
) : null,
|
|
31
30
|
/* @__PURE__ */ o("h3", { className: t("font-display text-lg font-semibold tracking-tight", e ? "text-current" : "text-foreground"), children: r.name }),
|
|
32
31
|
r.description ? /* @__PURE__ */ o("p", { className: t("mt-1.5 text-sm", e ? void 0 : "text-muted-foreground"), children: r.description }) : null,
|
|
33
|
-
/* @__PURE__ */ o("div", { className: t("mt-6 flex items-baseline font-display", e ? "text-current" : "text-foreground"), children: /* @__PURE__ */ o(
|
|
32
|
+
/* @__PURE__ */ o("div", { className: t("mt-6 flex items-baseline font-display", e ? "text-current" : "text-foreground"), children: /* @__PURE__ */ o(f, { value: s === "monthly" ? r.monthly : r.yearly, billing: s, dim: !e }) }),
|
|
34
33
|
/* @__PURE__ */ o("ul", { className: t("mt-7 flex-1 space-y-2.5 text-sm", e ? "text-current" : "text-muted-foreground"), children: r.features.map((c) => /* @__PURE__ */ l("li", { className: "flex items-start gap-2.5", children: [
|
|
35
|
-
/* @__PURE__ */ o(
|
|
34
|
+
/* @__PURE__ */ o(y, { className: t("mt-0.5 h-4 w-4 shrink-0", e ? "text-current" : "text-primary") }),
|
|
36
35
|
c
|
|
37
36
|
] }, c)) }),
|
|
38
|
-
/* @__PURE__ */ o("div", { className: "mt-8", children: /* @__PURE__ */ o(
|
|
37
|
+
/* @__PURE__ */ o("div", { className: "mt-8", children: /* @__PURE__ */ o(p, { plan: r, billing: s, onSelect: n, dark: !e }) })
|
|
39
38
|
]
|
|
40
39
|
},
|
|
41
40
|
r.name
|
|
42
41
|
);
|
|
43
42
|
}) })
|
|
44
43
|
] });
|
|
45
|
-
|
|
44
|
+
v.displayName = "PricingCards";
|
|
46
45
|
export {
|
|
47
|
-
|
|
46
|
+
v as PricingCards
|
|
48
47
|
};
|
|
49
48
|
//# sourceMappingURL=Cards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cards.js","sources":["../../../../../src/components/Pricing/variants/Cards.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport {
|
|
1
|
+
{"version":3,"file":"Cards.js","sources":["../../../../../src/components/Pricing/variants/Cards.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { PriceValue, BillingToggle, PlanButton } from \"../parts\";\nimport { Check } from \"../../../icons\";\nimport type { PricingVariantProps } from \"../types\";\n\ninterface CardsProps extends PricingVariantProps {\n className?: string;\n}\n\nexport const PricingCards = ({ className, plans, billing, onBillingChange, onSelect, yearlyBadge, ...props }: CardsProps) => {\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <BillingToggle billing={billing} onChange={onBillingChange} yearlyBadge={yearlyBadge} />\n <div className=\"grid grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-3\">\n {plans.map((plan) => {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const bg = plan.customColor || (isHighlighted ? \"rgb(var(--color-primary))\" : undefined);\n const fg = plan.customColor\n ? `contrast-color(${plan.customColor})`\n : isHighlighted\n ? \"rgb(var(--color-on-primary))\"\n : undefined;\n return (\n <div\n key={plan.name}\n className={cn(\n \"relative flex flex-col rounded-xl p-7\",\n bg ? \"shadow-raised\" : \"border border-border bg-surface\",\n !bg && isHighlighted && \"border-primary\",\n )}\n style={bg ? { backgroundColor: bg, color: fg } : undefined}\n >\n {isHighlighted ? (\n <span\n className={cn(\n \"absolute -top-3 left-7 rounded-full px-2.5 py-1 text-[11px] font-semibold uppercase tracking-wider\",\n !bg && \"bg-primary text-on-primary\",\n )}\n style={\n bg\n ? { backgroundColor: \"rgb(var(--color-on-primary))\", color: \"rgb(var(--color-primary))\" }\n : undefined\n }\n >\n Most popular\n </span>\n ) : null}\n <h3 className={cn(\"font-display text-lg font-semibold tracking-tight\", bg ? \"text-current\" : \"text-foreground\")}>\n {plan.name}\n </h3>\n {plan.description ? (\n <p className={cn(\"mt-1.5 text-sm\", bg ? undefined : \"text-muted-foreground\")}>\n {plan.description}\n </p>\n ) : null}\n <div className={cn(\"mt-6 flex items-baseline font-display\", bg ? \"text-current\" : \"text-foreground\")}>\n <PriceValue value={billing === \"monthly\" ? plan.monthly : plan.yearly} billing={billing} dim={!bg} />\n </div>\n <ul className={cn(\"mt-7 flex-1 space-y-2.5 text-sm\", bg ? \"text-current\" : \"text-muted-foreground\")}>\n {plan.features.map((feature) => (\n <li key={feature} className=\"flex items-start gap-2.5\">\n <Check className={cn(\"mt-0.5 h-4 w-4 shrink-0\", bg ? \"text-current\" : \"text-primary\")} />\n {feature}\n </li>\n ))}\n </ul>\n <div className=\"mt-8\">\n <PlanButton plan={plan} billing={billing} onSelect={onSelect} dark={!bg} />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n};\nPricingCards.displayName = \"PricingCards\";"],"names":["PricingCards","className","plans","billing","onBillingChange","onSelect","yearlyBadge","props","jsxs","cn","jsx","BillingToggle","plan","isHighlighted","bg","fg","PriceValue","feature","Check","PlanButton"],"mappings":";;;;AASO,MAAMA,IAAe,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,GAAS,iBAAAC,GAAiB,UAAAC,GAAU,aAAAC,GAAa,GAAGC,QAEjG,gBAAAC,EAAC,SAAI,WAAWC,EAAG,UAAUR,CAAS,GAAI,GAAGM,GAC3C,UAAA;AAAA,EAAA,gBAAAG,EAACC,GAAA,EAAc,SAAAR,GAAkB,UAAUC,GAAiB,aAAAE,GAA0B;AAAA,oBACrF,OAAA,EAAI,WAAU,wDACZ,UAAAJ,EAAM,IAAI,CAACU,MAAS;AACnB,UAAMC,IAAgBD,EAAK,eAAe,CAACA,EAAK,aAC1CE,IAAKF,EAAK,gBAAgBC,IAAgB,8BAA8B,SACxEE,IAAKH,EAAK,cACZ,kBAAkBA,EAAK,WAAW,MAClCC,IACE,iCACA;AACN,WACE,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWC;AAAA,UACT;AAAA,UACAK,IAAK,kBAAkB;AAAA,UACvB,CAACA,KAAMD,KAAiB;AAAA,QAAA;AAAA,QAE1B,OAAOC,IAAK,EAAE,iBAAiBA,GAAI,OAAOC,MAAO;AAAA,QAEhD,UAAA;AAAA,UAAAF,IACC,gBAAAH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD;AAAA,gBACT;AAAA,gBACA,CAACK,KAAM;AAAA,cAAA;AAAA,cAET,OACEA,IACI,EAAE,iBAAiB,gCAAgC,OAAO,gCAC1D;AAAA,cAEP,UAAA;AAAA,YAAA;AAAA,UAAA,IAGC;AAAA,UACJ,gBAAAJ,EAAC,MAAA,EAAG,WAAWD,EAAG,qDAAqDK,IAAK,iBAAiB,iBAAiB,GAC3G,UAAAF,EAAK,KAAA,CACR;AAAA,UACCA,EAAK,cACJ,gBAAAF,EAAC,KAAA,EAAE,WAAWD,EAAG,kBAAkBK,IAAK,SAAY,uBAAuB,GACxE,UAAAF,EAAK,aACR,IACE;AAAA,UACJ,gBAAAF,EAAC,SAAI,WAAWD,EAAG,yCAAyCK,IAAK,iBAAiB,iBAAiB,GACjG,UAAA,gBAAAJ,EAACM,GAAA,EAAW,OAAOb,MAAY,YAAYS,EAAK,UAAUA,EAAK,QAAQ,SAAAT,GAAkB,KAAK,CAACW,EAAA,CAAI,EAAA,CACrG;AAAA,4BACC,MAAA,EAAG,WAAWL,EAAG,mCAAmCK,IAAK,iBAAiB,uBAAuB,GAC/F,UAAAF,EAAK,SAAS,IAAI,CAACK,MAClB,gBAAAT,EAAC,MAAA,EAAiB,WAAU,4BAC1B,UAAA;AAAA,YAAA,gBAAAE,EAACQ,KAAM,WAAWT,EAAG,2BAA2BK,IAAK,iBAAiB,cAAc,GAAG;AAAA,YACtFG;AAAA,UAAA,KAFMA,CAGT,CACD,GACH;AAAA,UACA,gBAAAP,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA,EAACS,GAAA,EAAW,MAAAP,GAAY,SAAAT,GAAkB,UAAAE,GAAoB,MAAM,CAACS,EAAA,CAAI,EAAA,CAC3E;AAAA,QAAA;AAAA,MAAA;AAAA,MA5CKF,EAAK;AAAA,IAAA;AAAA,EA+ChB,CAAC,EAAA,CACH;AAAA,GACF;AAGJZ,EAAa,cAAc;"}
|
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
import { jsxs as t, jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as b } from "react";
|
|
3
3
|
import { cn as o } from "../../utils/cn.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const { quote: x, author: a, role: i, company: l, avatar: n, accent: e, rating: s } = c, p = e ? { backgroundColor: e, color: g(e, "#111111", "#ffffff") } : void 0;
|
|
4
|
+
import { Quote as h, Star as g } from "../../icons.js";
|
|
5
|
+
import { initials as y } from "./parts.js";
|
|
6
|
+
const S = b(
|
|
7
|
+
function({ className: c, testimonial: m, ...d }, f) {
|
|
8
|
+
const { quote: x, author: a, role: i, company: l, avatar: n, accent: e, rating: s } = m, u = e ? { backgroundColor: e, color: `contrast-color(${e})` } : void 0;
|
|
10
9
|
return /* @__PURE__ */ t(
|
|
11
10
|
"figure",
|
|
12
11
|
{
|
|
13
12
|
ref: f,
|
|
14
13
|
className: o(
|
|
15
14
|
"mb-4 flex flex-col break-inside-avoid rounded-2xl border border-border bg-surface p-7",
|
|
16
|
-
|
|
15
|
+
c
|
|
17
16
|
),
|
|
18
17
|
...d,
|
|
19
18
|
children: [
|
|
20
19
|
/* @__PURE__ */ t("div", { className: "mb-5 flex items-center justify-between", children: [
|
|
21
20
|
/* @__PURE__ */ r(h, { className: o("h-6 w-6", e ? void 0 : "text-primary/30"), style: e ? { color: e } : void 0 }),
|
|
22
|
-
s ? /* @__PURE__ */ r("span", { className: "flex items-center gap-0.5 text-amber-500", "aria-label": `${s} / 5`, children: Array.from({ length: 5 }).map((
|
|
21
|
+
s ? /* @__PURE__ */ r("span", { className: "flex items-center gap-0.5 text-amber-500", "aria-label": `${s} / 5`, children: Array.from({ length: 5 }).map((v, p) => /* @__PURE__ */ r(g, { className: "h-3.5 w-3.5" }, p)) }) : null
|
|
23
22
|
] }),
|
|
24
23
|
/* @__PURE__ */ r("blockquote", { className: "flex-1 text-[15px] leading-7 text-foreground/85", children: x }),
|
|
25
24
|
/* @__PURE__ */ t("figcaption", { className: "mt-6 flex items-center gap-3", children: [
|
|
26
25
|
n || /* @__PURE__ */ r(
|
|
27
26
|
"span",
|
|
28
27
|
{
|
|
29
|
-
style:
|
|
28
|
+
style: u,
|
|
30
29
|
className: o(
|
|
31
30
|
"inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-full text-xs font-bold",
|
|
32
31
|
!e && "bg-primary-soft text-primary"
|
|
33
32
|
),
|
|
34
|
-
children:
|
|
33
|
+
children: y(a)
|
|
35
34
|
}
|
|
36
35
|
),
|
|
37
36
|
/* @__PURE__ */ t("div", { children: [
|
|
@@ -45,6 +44,6 @@ const A = b(
|
|
|
45
44
|
}
|
|
46
45
|
);
|
|
47
46
|
export {
|
|
48
|
-
|
|
47
|
+
S as TestimonialCard
|
|
49
48
|
};
|
|
50
49
|
//# sourceMappingURL=TestimonialCard.js.map
|