dune-react 0.0.7 → 0.0.9
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/puck-base/article-card.js +1 -1
- package/dist/components/puck-base/button.d.ts +1 -0
- package/dist/components/puck-base/button.js +1 -0
- package/dist/components/puck-base/container.d.ts +7 -1
- package/dist/components/puck-base/container.js +2 -1
- package/dist/components/puck-base/content.d.ts +1 -4
- package/dist/components/puck-base/content.js +15 -17
- package/dist/components/puck-base/core/types.d.ts +2 -2
- package/dist/components/puck-base/editor-context.d.ts +12 -0
- package/dist/components/puck-base/fields/auto-field.d.ts +1 -0
- package/dist/components/puck-base/fields/auto-field.js +131 -49
- package/dist/components/puck-base/gradient-text.js +12 -3
- package/dist/components/puck-block/banner-sections/announcement-banner-1/announcement-banner.js +1 -1
- package/dist/components/puck-block/contact-sections/api/form-leads.d.ts +16 -0
- package/dist/components/puck-block/contact-sections/api/form-leads.js +25 -0
- package/dist/components/puck-block/contact-sections/contact-us-1/contact-us.js +27 -11
- package/dist/components/puck-block/contact-sections/contact-us-2/contact-us-2.d.ts +26 -0
- package/dist/components/puck-block/contact-sections/contact-us-2/contact-us-2.js +229 -0
- package/dist/components/puck-block/contact-sections/contact-us-2/index.d.ts +5 -0
- package/dist/components/puck-block/contact-sections/contact-us-2/index.js +72 -0
- package/dist/components/puck-block/contact-sections/contact-us-3/contact-us-3.d.ts +29 -0
- package/dist/components/puck-block/contact-sections/contact-us-3/contact-us-3.js +245 -0
- package/dist/components/puck-block/contact-sections/contact-us-3/index.d.ts +5 -0
- package/dist/components/puck-block/contact-sections/contact-us-3/index.js +101 -0
- package/dist/components/puck-block/cta-sections/banner-cta-1/banner-cta.js +9 -8
- package/dist/components/puck-block/cta-sections/gradient-cta-1/gradient-cta.js +3 -3
- package/dist/components/puck-block/cta-sections/gradient-cta-1/index.js +4 -4
- package/dist/components/puck-block/cta-sections/newsletter-signup-1/newsletter-signup.js +5 -4
- package/dist/components/puck-block/cta-sections/promo-section-1/promo-section.js +6 -5
- package/dist/components/puck-block/faq-sections/faq-2/faq-2.d.ts +16 -0
- package/dist/components/puck-block/faq-sections/faq-2/faq-2.js +56 -0
- package/dist/components/puck-block/faq-sections/faq-2/index.d.ts +5 -0
- package/dist/components/puck-block/faq-sections/faq-2/index.js +62 -0
- package/dist/components/puck-block/feature-sections/feature-cards-1/feature-cards.d.ts +3 -4
- package/dist/components/puck-block/feature-sections/feature-cards-1/feature-cards.js +13 -3
- package/dist/components/puck-block/feature-sections/feature-cards-1/index.js +34 -14
- package/dist/components/puck-block/feature-sections/feature-showcase-1/feature-showcase.js +2 -8
- package/dist/components/puck-block/feature-sections/product-features-1/product-features.js +5 -25
- package/dist/components/puck-block/gallery-sections/gallery-1/gallery.js +3 -2
- package/dist/components/puck-block/gallery-sections/gallery-2/gallery-2.d.ts +14 -0
- package/dist/components/puck-block/gallery-sections/gallery-2/gallery-2.js +88 -0
- package/dist/components/puck-block/gallery-sections/gallery-2/index.d.ts +5 -0
- package/dist/components/puck-block/gallery-sections/gallery-2/index.js +44 -0
- package/dist/components/puck-block/gallery-sections/gallery-3/gallery-3.d.ts +17 -0
- package/dist/components/puck-block/gallery-sections/gallery-3/gallery-3.js +121 -0
- package/dist/components/puck-block/gallery-sections/gallery-3/index.d.ts +5 -0
- package/dist/components/puck-block/gallery-sections/gallery-3/index.js +60 -0
- package/dist/components/puck-block/hero-sections/fullscreen-hero-1/fullscreen-hero.d.ts +6 -1
- package/dist/components/puck-block/hero-sections/fullscreen-hero-1/fullscreen-hero.js +56 -20
- package/dist/components/puck-block/hero-sections/fullscreen-hero-1/index.js +12 -1
- package/dist/components/puck-block/hero-sections/gradient-hero-1/gradient-hero.d.ts +1 -1
- package/dist/components/puck-block/hero-sections/gradient-hero-1/gradient-hero.js +9 -6
- package/dist/components/puck-block/hero-sections/gradient-hero-1/index.js +4 -4
- package/dist/components/puck-block/hero-sections/image-hero-1/image-hero.d.ts +4 -1
- package/dist/components/puck-block/hero-sections/image-hero-1/image-hero.js +60 -62
- package/dist/components/puck-block/index.d.ts +15 -0
- package/dist/components/puck-block/location-sections/location-1/index.d.ts +5 -0
- package/dist/components/puck-block/location-sections/location-1/index.js +103 -0
- package/dist/components/puck-block/location-sections/location-1/location.d.ts +27 -0
- package/dist/components/puck-block/location-sections/location-1/location.js +143 -0
- package/dist/components/puck-block/location-sections/location-2/index.d.ts +5 -0
- package/dist/components/puck-block/location-sections/location-2/index.js +111 -0
- package/dist/components/puck-block/location-sections/location-2/location.d.ts +25 -0
- package/dist/components/puck-block/location-sections/location-2/location.js +136 -0
- package/dist/components/puck-block/location-sections/location-3/index.d.ts +5 -0
- package/dist/components/puck-block/location-sections/location-3/index.js +83 -0
- package/dist/components/puck-block/location-sections/location-3/location.d.ts +22 -0
- package/dist/components/puck-block/location-sections/location-3/location.js +129 -0
- package/dist/components/puck-block/metrics-sections/stats-2/index.d.ts +5 -0
- package/dist/components/puck-block/metrics-sections/stats-2/index.js +77 -0
- package/dist/components/puck-block/metrics-sections/stats-2/stats-2.d.ts +16 -0
- package/dist/components/puck-block/metrics-sections/stats-2/stats-2.js +59 -0
- package/dist/components/puck-block/metrics-sections/stats-3/index.d.ts +5 -0
- package/dist/components/puck-block/metrics-sections/stats-3/index.js +94 -0
- package/dist/components/puck-block/metrics-sections/stats-3/stats-3.d.ts +17 -0
- package/dist/components/puck-block/metrics-sections/stats-3/stats-3.js +60 -0
- package/dist/components/puck-block/pricing-sections/pricing-2/index.d.ts +5 -0
- package/dist/components/puck-block/pricing-sections/pricing-2/index.js +152 -0
- package/dist/components/puck-block/pricing-sections/pricing-2/pricing-2.d.ts +24 -0
- package/dist/components/puck-block/pricing-sections/pricing-2/pricing-2.js +68 -0
- package/dist/components/puck-block/showcase-sections/before-after-1/before-after.d.ts +20 -0
- package/dist/components/puck-block/showcase-sections/before-after-1/before-after.js +73 -0
- package/dist/components/puck-block/showcase-sections/before-after-1/index.d.ts +5 -0
- package/dist/components/puck-block/showcase-sections/before-after-1/index.js +74 -0
- package/dist/components/puck-block/showcase-sections/case-study-1/case-study.js +2 -8
- package/dist/components/puck-block/team-sections/team-grid-1/team-grid.js +4 -24
- package/dist/components/puck-block/team-sections/team-grid-2/index.d.ts +5 -0
- package/dist/components/puck-block/team-sections/team-grid-2/index.js +63 -0
- package/dist/components/puck-block/team-sections/team-grid-2/team-grid-2.d.ts +21 -0
- package/dist/components/puck-block/team-sections/team-grid-2/team-grid-2.js +46 -0
- package/dist/components/puck-block/team-sections/team-profiles-1/index.d.ts +5 -0
- package/dist/components/puck-block/team-sections/team-profiles-1/index.js +54 -0
- package/dist/components/puck-block/team-sections/team-profiles-1/team-profiles.d.ts +21 -0
- package/dist/components/puck-block/team-sections/team-profiles-1/team-profiles.js +107 -0
- package/dist/components/puck-block/testimonial-sections/logo-marquee-1/logo-marquee.js +2 -1
- package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.d.ts +5 -0
- package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.js +50 -0
- package/dist/components/puck-block/testimonial-sections/logo-wall-1/logo-wall.d.ts +15 -0
- package/dist/components/puck-block/testimonial-sections/logo-wall-1/logo-wall.js +57 -0
- package/dist/components/puck-block/testimonial-sections/review-section-1/review-section.js +3 -2
- package/dist/components/puck-block/text-sections/articles-1/articles.d.ts +1 -0
- package/dist/components/puck-block/text-sections/articles-1/articles.js +19 -6
- package/dist/components/puck-block/text-sections/articles-1/index.js +16 -4
- package/dist/components/puck-block/text-sections/content-section-1/content-section.js +5 -4
- package/dist/components/puck-block/text-sections/tab-section-1/tab-section.js +3 -2
- package/dist/components/shadcn/navigation-menu.d.ts +1 -1
- package/dist/components/shadcn/navigation-menu.js +33 -0
- package/dist/index.js +104 -74
- package/package.json +1 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Pricing2 } from "./pricing-2.js";
|
|
2
|
+
import { paddingDefaults, backgroundColor, sectionStyle, padding, button } from "../../../puck-base/core/fields.js";
|
|
3
|
+
const conf = {
|
|
4
|
+
fields: {
|
|
5
|
+
heading: { type: "text", contentEditable: true },
|
|
6
|
+
description: { type: "textarea", contentEditable: true },
|
|
7
|
+
tiers: {
|
|
8
|
+
type: "array",
|
|
9
|
+
getItemSummary: (item, index = 0) => item.title || `Tier ${index + 1}`,
|
|
10
|
+
arrayFields: {
|
|
11
|
+
badgeLabel: {
|
|
12
|
+
type: "text",
|
|
13
|
+
label: "Badge (optional)",
|
|
14
|
+
contentEditable: true
|
|
15
|
+
},
|
|
16
|
+
title: { type: "text", contentEditable: true },
|
|
17
|
+
description: { type: "textarea", contentEditable: true },
|
|
18
|
+
price: { type: "text", label: "Price", contentEditable: true },
|
|
19
|
+
period: { type: "text", label: "Period", contentEditable: true },
|
|
20
|
+
button,
|
|
21
|
+
featuresLabel: {
|
|
22
|
+
type: "text",
|
|
23
|
+
label: "Features heading",
|
|
24
|
+
contentEditable: true
|
|
25
|
+
},
|
|
26
|
+
features: {
|
|
27
|
+
type: "array",
|
|
28
|
+
max: 8,
|
|
29
|
+
getItemSummary: (item, index = 0) => item.title || `Feature ${index + 1}`,
|
|
30
|
+
arrayFields: {
|
|
31
|
+
title: { type: "text", contentEditable: true }
|
|
32
|
+
},
|
|
33
|
+
defaultItemProps: { title: "Feature item" }
|
|
34
|
+
},
|
|
35
|
+
isFeatured: {
|
|
36
|
+
type: "radio",
|
|
37
|
+
label: "Card style",
|
|
38
|
+
options: [
|
|
39
|
+
{ label: "Featured (elevated)", value: true },
|
|
40
|
+
{ label: "Standard", value: false }
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
defaultItemProps: {
|
|
45
|
+
badgeLabel: "",
|
|
46
|
+
title: "Plan Name",
|
|
47
|
+
description: "Brief description of this plan.",
|
|
48
|
+
price: "$50",
|
|
49
|
+
period: "per month",
|
|
50
|
+
button: {
|
|
51
|
+
label: "Get started",
|
|
52
|
+
url: "#",
|
|
53
|
+
variant: "outline",
|
|
54
|
+
size: "default",
|
|
55
|
+
icon: "none"
|
|
56
|
+
},
|
|
57
|
+
featuresLabel: "What's included:",
|
|
58
|
+
features: [
|
|
59
|
+
{ title: "Feature one" },
|
|
60
|
+
{ title: "Feature two" },
|
|
61
|
+
{ title: "Feature three" }
|
|
62
|
+
],
|
|
63
|
+
isFeatured: false
|
|
64
|
+
},
|
|
65
|
+
min: 1,
|
|
66
|
+
max: 4
|
|
67
|
+
},
|
|
68
|
+
padding,
|
|
69
|
+
sectionStyle,
|
|
70
|
+
backgroundColor
|
|
71
|
+
},
|
|
72
|
+
defaultProps: {
|
|
73
|
+
padding: paddingDefaults,
|
|
74
|
+
heading: "Training plans tailored to you",
|
|
75
|
+
description: "Choose the package that fits your goals. Start with one session or commit to a program.",
|
|
76
|
+
tiers: [
|
|
77
|
+
{
|
|
78
|
+
badgeLabel: "",
|
|
79
|
+
title: "Single Session",
|
|
80
|
+
description: "Try a one-on-one training session. Perfect for first-timers or testing your fit.",
|
|
81
|
+
price: "$75",
|
|
82
|
+
period: "per session",
|
|
83
|
+
button: {
|
|
84
|
+
label: "Schedule a session",
|
|
85
|
+
url: "#",
|
|
86
|
+
variant: "outline",
|
|
87
|
+
size: "default",
|
|
88
|
+
icon: "none"
|
|
89
|
+
},
|
|
90
|
+
featuresLabel: "What's included:",
|
|
91
|
+
features: [
|
|
92
|
+
{ title: "One 60-minute session" },
|
|
93
|
+
{ title: "Form and technique guidance" },
|
|
94
|
+
{ title: "Personalized exercise selection" },
|
|
95
|
+
{ title: "No commitment required" }
|
|
96
|
+
],
|
|
97
|
+
isFeatured: false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
badgeLabel: "Most popular",
|
|
101
|
+
title: "4-Week Program",
|
|
102
|
+
description: "Four weekly sessions designed around your goals. Build momentum and see real progress in a month.",
|
|
103
|
+
price: "$260",
|
|
104
|
+
period: "per month",
|
|
105
|
+
button: {
|
|
106
|
+
label: "Start your program",
|
|
107
|
+
url: "#",
|
|
108
|
+
variant: "default",
|
|
109
|
+
size: "default",
|
|
110
|
+
icon: "none"
|
|
111
|
+
},
|
|
112
|
+
featuresLabel: "What's included:",
|
|
113
|
+
features: [
|
|
114
|
+
{ title: "Four 60-minute sessions" },
|
|
115
|
+
{ title: "Custom workout plan" },
|
|
116
|
+
{ title: "Monthly progress check-in" },
|
|
117
|
+
{ title: "Email support between sessions" },
|
|
118
|
+
{ title: "Form videos and tips" }
|
|
119
|
+
],
|
|
120
|
+
isFeatured: true
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
badgeLabel: "",
|
|
124
|
+
title: "8-Week Intensive",
|
|
125
|
+
description: "Two sessions per week for eight weeks. Get serious results with consistent training and close coaching.",
|
|
126
|
+
price: "$480",
|
|
127
|
+
period: "per month",
|
|
128
|
+
button: {
|
|
129
|
+
label: "Join the intensive",
|
|
130
|
+
url: "#",
|
|
131
|
+
variant: "outline",
|
|
132
|
+
size: "default",
|
|
133
|
+
icon: "none"
|
|
134
|
+
},
|
|
135
|
+
featuresLabel: "What's included:",
|
|
136
|
+
features: [
|
|
137
|
+
{ title: "Eight 60-minute sessions" },
|
|
138
|
+
{ title: "Detailed fitness assessment" },
|
|
139
|
+
{ title: "Progressive training plan" },
|
|
140
|
+
{ title: "Bi-weekly progress reviews" },
|
|
141
|
+
{ title: "Priority scheduling" },
|
|
142
|
+
{ title: "Direct phone and email support" }
|
|
143
|
+
],
|
|
144
|
+
isFeatured: false
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
render: Pricing2
|
|
149
|
+
};
|
|
150
|
+
export {
|
|
151
|
+
conf
|
|
152
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CompoundButtonProps } from "@/components/puck-base/button";
|
|
2
|
+
import { CompoundContainerProps } from "@/components/puck-base/container";
|
|
3
|
+
export interface PricingTierItem {
|
|
4
|
+
badgeLabel: string;
|
|
5
|
+
title: string;
|
|
6
|
+
description: string;
|
|
7
|
+
price: string;
|
|
8
|
+
period: string;
|
|
9
|
+
button: CompoundButtonProps;
|
|
10
|
+
featuresLabel: string;
|
|
11
|
+
features: {
|
|
12
|
+
title: string;
|
|
13
|
+
}[];
|
|
14
|
+
isFeatured: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface Pricing2Props {
|
|
17
|
+
heading: string;
|
|
18
|
+
description: string;
|
|
19
|
+
tiers: PricingTierItem[];
|
|
20
|
+
padding?: CompoundContainerProps["padding"];
|
|
21
|
+
sectionStyle?: CompoundContainerProps["sectionStyle"];
|
|
22
|
+
backgroundColor?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const Pricing2: (props: Pricing2Props) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Check } from "lucide-react";
|
|
3
|
+
import { cn } from "../../../../utils/css-utils.js";
|
|
4
|
+
import { CompoundButton } from "../../../puck-base/button.js";
|
|
5
|
+
import { CompoundContainer } from "../../../puck-base/container.js";
|
|
6
|
+
const Pricing2 = (props) => /* @__PURE__ */ jsx(
|
|
7
|
+
CompoundContainer,
|
|
8
|
+
{
|
|
9
|
+
padding: props.padding,
|
|
10
|
+
sectionStyle: props.sectionStyle,
|
|
11
|
+
backgroundColor: props.backgroundColor,
|
|
12
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-14", children: [
|
|
13
|
+
/* @__PURE__ */ jsxs("div", { className: "flex max-w-2xl flex-col items-center gap-4 text-center", children: [
|
|
14
|
+
/* @__PURE__ */ jsx("h2", { className: "text-foreground text-balance text-4xl font-bold tracking-tight", children: props.heading }),
|
|
15
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-base leading-relaxed", children: props.description })
|
|
16
|
+
] }),
|
|
17
|
+
/* @__PURE__ */ jsx("div", { className: "grid w-full max-w-7xl grid-cols-1 gap-6 lg:grid-cols-3", children: (props.tiers ?? []).map((tier, index) => /* @__PURE__ */ jsx(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
className: cn("flex flex-col", tier.isFeatured && "lg:-mt-8"),
|
|
21
|
+
children: /* @__PURE__ */ jsxs("div", { className: "bg-foreground/5 flex h-full flex-col gap-6 overflow-hidden rounded-3xl px-1 pt-1 pb-8", children: [
|
|
22
|
+
/* @__PURE__ */ jsxs(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
className: cn(
|
|
26
|
+
"bg-foreground/5 flex w-full flex-col gap-2 rounded-3xl px-8 py-7",
|
|
27
|
+
tier.isFeatured ? "min-h-44" : "min-h-36"
|
|
28
|
+
),
|
|
29
|
+
children: [
|
|
30
|
+
tier.badgeLabel && /* @__PURE__ */ jsx("div", { className: "w-fit rounded-full bg-foreground px-2.5 py-1", children: /* @__PURE__ */ jsx("span", { className: "text-background text-xs font-medium", children: tier.badgeLabel }) }),
|
|
31
|
+
/* @__PURE__ */ jsx("h3", { className: "text-foreground text-xl font-semibold", children: tier.title }),
|
|
32
|
+
/* @__PURE__ */ jsx("p", { className: "text-foreground/70 text-sm", children: tier.description })
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6 px-8", children: [
|
|
37
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
38
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline gap-1", children: [
|
|
39
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground text-4xl font-bold", children: tier.price }),
|
|
40
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm", children: tier.period })
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsx(
|
|
43
|
+
CompoundButton,
|
|
44
|
+
{
|
|
45
|
+
...tier.button,
|
|
46
|
+
className: cn("w-full", tier.button.className)
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
] }),
|
|
50
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
51
|
+
/* @__PURE__ */ jsx("div", { className: "bg-border h-px w-full" }),
|
|
52
|
+
tier.featuresLabel && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs font-medium uppercase tracking-wider", children: tier.featuresLabel }),
|
|
53
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: (tier.features ?? []).map((feature, fi) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
54
|
+
/* @__PURE__ */ jsx(Check, { className: "text-foreground h-4 w-4 shrink-0" }),
|
|
55
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground text-sm", children: feature.title })
|
|
56
|
+
] }, fi)) })
|
|
57
|
+
] })
|
|
58
|
+
] })
|
|
59
|
+
] })
|
|
60
|
+
},
|
|
61
|
+
index
|
|
62
|
+
)) })
|
|
63
|
+
] })
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
export {
|
|
67
|
+
Pricing2
|
|
68
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CompoundContainerProps } from "@/components/puck-base/container";
|
|
2
|
+
import { CompoundButtonProps } from "@/components/puck-base/button";
|
|
3
|
+
export interface BeforeAfterItem {
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
export interface BeforeAfterProps {
|
|
7
|
+
padding?: CompoundContainerProps["padding"];
|
|
8
|
+
sectionStyle?: CompoundContainerProps["sectionStyle"];
|
|
9
|
+
backgroundColor?: string;
|
|
10
|
+
kicker?: string;
|
|
11
|
+
heading?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
beforeLabel?: string;
|
|
14
|
+
beforeItems?: BeforeAfterItem[];
|
|
15
|
+
afterLabel?: string;
|
|
16
|
+
afterItems?: BeforeAfterItem[];
|
|
17
|
+
button?: CompoundButtonProps;
|
|
18
|
+
layout?: "side-by-side" | "stacked";
|
|
19
|
+
}
|
|
20
|
+
export declare const BeforeAfter: ({ padding, sectionStyle, backgroundColor, kicker, heading, description, beforeLabel, beforeItems, afterLabel, afterItems, button, layout, }: BeforeAfterProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { CompoundContainer } from "../../../puck-base/container.js";
|
|
4
|
+
import { CompoundButton } from "../../../puck-base/button.js";
|
|
5
|
+
import { cn } from "../../../../utils/css-utils.js";
|
|
6
|
+
import { X, Check } from "lucide-react";
|
|
7
|
+
const BeforeAfter = ({
|
|
8
|
+
padding,
|
|
9
|
+
sectionStyle,
|
|
10
|
+
backgroundColor,
|
|
11
|
+
kicker,
|
|
12
|
+
heading,
|
|
13
|
+
description,
|
|
14
|
+
beforeLabel = "Before",
|
|
15
|
+
beforeItems = [],
|
|
16
|
+
afterLabel = "After",
|
|
17
|
+
afterItems = [],
|
|
18
|
+
button,
|
|
19
|
+
layout = "side-by-side"
|
|
20
|
+
}) => /* @__PURE__ */ jsxs(
|
|
21
|
+
CompoundContainer,
|
|
22
|
+
{
|
|
23
|
+
padding,
|
|
24
|
+
sectionStyle,
|
|
25
|
+
backgroundColor,
|
|
26
|
+
children: [
|
|
27
|
+
(kicker || heading || description) && /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center max-w-2xl mx-auto", children: [
|
|
28
|
+
kicker && /* @__PURE__ */ jsx("p", { className: "text-primary text-sm font-semibold uppercase tracking-widest mb-3", children: kicker }),
|
|
29
|
+
heading && /* @__PURE__ */ jsx("h2", { className: "text-foreground text-3xl font-bold tracking-tight md:text-4xl", children: heading }),
|
|
30
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-4 text-lg", children: description })
|
|
31
|
+
] }),
|
|
32
|
+
/* @__PURE__ */ jsxs(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
className: cn(
|
|
36
|
+
"relative mx-auto max-w-4xl",
|
|
37
|
+
layout === "side-by-side" ? "grid grid-cols-1 md:grid-cols-[1fr_auto_1fr] gap-0" : "flex flex-col gap-6"
|
|
38
|
+
),
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-muted/40 p-8 md:rounded-r-none md:border-r-0", children: [
|
|
41
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-6 flex items-center gap-3", children: [
|
|
42
|
+
/* @__PURE__ */ jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-destructive/10", children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4 text-destructive" }) }),
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm font-semibold uppercase tracking-wider", children: beforeLabel })
|
|
44
|
+
] }),
|
|
45
|
+
/* @__PURE__ */ jsx("ul", { className: "space-y-4", children: beforeItems.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-3", children: [
|
|
46
|
+
/* @__PURE__ */ jsx("span", { className: "mt-0.5 flex-shrink-0 flex h-5 w-5 items-center justify-center rounded-full bg-destructive/10", children: /* @__PURE__ */ jsx(X, { className: "h-3 w-3 text-destructive" }) }),
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm leading-relaxed", children: item.text })
|
|
48
|
+
] }, i)) })
|
|
49
|
+
] }),
|
|
50
|
+
layout === "side-by-side" && /* @__PURE__ */ jsxs("div", { className: "hidden md:flex flex-col items-center justify-center relative", children: [
|
|
51
|
+
/* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 left-1/2 -translate-x-1/2 w-px bg-border" }),
|
|
52
|
+
/* @__PURE__ */ jsx("div", { className: "relative z-10 flex h-10 w-10 items-center justify-center rounded-full bg-background border border-border shadow-sm", children: /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs font-bold", children: "VS" }) })
|
|
53
|
+
] }),
|
|
54
|
+
/* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-primary/20 bg-primary/5 p-8 md:rounded-l-none md:border-l-0", children: [
|
|
55
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-6 flex items-center gap-3", children: [
|
|
56
|
+
/* @__PURE__ */ jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4 text-primary" }) }),
|
|
57
|
+
/* @__PURE__ */ jsx("span", { className: "text-primary text-sm font-semibold uppercase tracking-wider", children: afterLabel })
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ jsx("ul", { className: "space-y-4", children: afterItems.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-3", children: [
|
|
60
|
+
/* @__PURE__ */ jsx("span", { className: "mt-0.5 flex-shrink-0 flex h-5 w-5 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsx(Check, { className: "h-3 w-3 text-primary" }) }),
|
|
61
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground text-sm leading-relaxed font-medium", children: item.text })
|
|
62
|
+
] }, i)) })
|
|
63
|
+
] })
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
(button == null ? void 0 : button.label) && /* @__PURE__ */ jsx("div", { className: "mt-10 flex justify-center", children: /* @__PURE__ */ jsx(CompoundButton, { ...button }) })
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
export {
|
|
72
|
+
BeforeAfter
|
|
73
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { paddingDefaults, actionDefaults, backgroundColor, sectionStyle, padding, button } from "../../../puck-base/core/fields.js";
|
|
2
|
+
import { BeforeAfter } from "./before-after.js";
|
|
3
|
+
const conf = {
|
|
4
|
+
fields: {
|
|
5
|
+
kicker: { type: "text", contentEditable: true },
|
|
6
|
+
heading: { type: "text", contentEditable: true },
|
|
7
|
+
description: { type: "textarea", contentEditable: true },
|
|
8
|
+
layout: {
|
|
9
|
+
type: "radio",
|
|
10
|
+
label: "Layout",
|
|
11
|
+
options: [
|
|
12
|
+
{ label: "Side by Side", value: "side-by-side" },
|
|
13
|
+
{ label: "Stacked", value: "stacked" }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
beforeLabel: { type: "text" },
|
|
17
|
+
beforeItems: {
|
|
18
|
+
type: "array",
|
|
19
|
+
max: 8,
|
|
20
|
+
getItemSummary: (item, i = 0) => item.text || `Item ${i + 1}`,
|
|
21
|
+
arrayFields: {
|
|
22
|
+
text: { type: "text", contentEditable: true }
|
|
23
|
+
},
|
|
24
|
+
defaultItemProps: { text: "Pain point or old way of doing things" }
|
|
25
|
+
},
|
|
26
|
+
afterLabel: { type: "text" },
|
|
27
|
+
afterItems: {
|
|
28
|
+
type: "array",
|
|
29
|
+
max: 8,
|
|
30
|
+
getItemSummary: (item, i = 0) => item.text || `Item ${i + 1}`,
|
|
31
|
+
arrayFields: {
|
|
32
|
+
text: { type: "text", contentEditable: true }
|
|
33
|
+
},
|
|
34
|
+
defaultItemProps: { text: "Benefit or new way of doing things" }
|
|
35
|
+
},
|
|
36
|
+
button,
|
|
37
|
+
padding,
|
|
38
|
+
sectionStyle,
|
|
39
|
+
backgroundColor
|
|
40
|
+
},
|
|
41
|
+
defaultProps: {
|
|
42
|
+
kicker: "Why choose us",
|
|
43
|
+
heading: "The old way vs. the better way",
|
|
44
|
+
description: "See exactly what changes when you switch to a smarter solution.",
|
|
45
|
+
layout: "side-by-side",
|
|
46
|
+
beforeLabel: "Without us",
|
|
47
|
+
beforeItems: [
|
|
48
|
+
{ text: "Hours wasted on manual data entry every week" },
|
|
49
|
+
{ text: "Siloed tools that don't talk to each other" },
|
|
50
|
+
{ text: "Guessing what your customers actually want" },
|
|
51
|
+
{ text: "Scaling requires hiring more people" }
|
|
52
|
+
],
|
|
53
|
+
afterLabel: "With us",
|
|
54
|
+
afterItems: [
|
|
55
|
+
{ text: "Data syncs automatically in real time" },
|
|
56
|
+
{ text: "All your tools connected in one place" },
|
|
57
|
+
{ text: "AI-powered insights at your fingertips" },
|
|
58
|
+
{ text: "Scale effortlessly with smart automation" }
|
|
59
|
+
],
|
|
60
|
+
button: {
|
|
61
|
+
label: "Get started free",
|
|
62
|
+
url: "#",
|
|
63
|
+
action: actionDefaults,
|
|
64
|
+
variant: "default",
|
|
65
|
+
size: "lg",
|
|
66
|
+
icon: "arrow-right"
|
|
67
|
+
},
|
|
68
|
+
padding: paddingDefaults
|
|
69
|
+
},
|
|
70
|
+
render: BeforeAfter
|
|
71
|
+
};
|
|
72
|
+
export {
|
|
73
|
+
conf
|
|
74
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { CompoundContainer } from "../../../puck-base/container.js";
|
|
3
|
+
import { CompoundImage } from "../../../puck-base/image.js";
|
|
3
4
|
const CaseStudy = ({
|
|
4
5
|
padding,
|
|
5
6
|
heading,
|
|
@@ -9,14 +10,7 @@ const CaseStudy = ({
|
|
|
9
10
|
author,
|
|
10
11
|
logo
|
|
11
12
|
}) => /* @__PURE__ */ jsx(CompoundContainer, { padding, sectionStyle: "muted", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-4xl", children: [
|
|
12
|
-
(logo == null ? void 0 : logo.src) && /* @__PURE__ */ jsx(
|
|
13
|
-
"img",
|
|
14
|
-
{
|
|
15
|
-
src: logo.src,
|
|
16
|
-
alt: logo.alt || "",
|
|
17
|
-
className: "mb-8 h-8 opacity-60"
|
|
18
|
-
}
|
|
19
|
-
),
|
|
13
|
+
(logo == null ? void 0 : logo.src) && /* @__PURE__ */ jsx("span", { className: "mb-8 inline-block opacity-60", children: /* @__PURE__ */ jsx(CompoundImage, { src: logo.src, alt: logo.alt || "", className: "h-8 w-auto" }) }),
|
|
20
14
|
heading && /* @__PURE__ */ jsx("h2", { className: "text-foreground mb-4 text-3xl font-bold tracking-tight md:text-4xl", children: heading }),
|
|
21
15
|
description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-8 text-lg", children: description }),
|
|
22
16
|
stats.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-10 grid grid-cols-2 gap-6 md:grid-cols-4", children: stats.map((s, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { CompoundContainer } from "../../../puck-base/container.js";
|
|
3
|
+
import { CompoundImage } from "../../../puck-base/image.js";
|
|
3
4
|
import { cn } from "../../../../utils/css-utils.js";
|
|
4
5
|
const columnClasses = {
|
|
5
6
|
2: "grid-cols-1 sm:grid-cols-2",
|
|
@@ -35,14 +36,7 @@ const MemberCard = ({
|
|
|
35
36
|
var _a, _b, _c;
|
|
36
37
|
if (layout === "round") {
|
|
37
38
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
38
|
-
/* @__PURE__ */ jsx("div", { className: "bg-muted w-full aspect-square overflow-hidden rounded-full", children: ((_a = member.image) == null ? void 0 : _a.src) && /* @__PURE__ */ jsx(
|
|
39
|
-
"img",
|
|
40
|
-
{
|
|
41
|
-
src: member.image.src,
|
|
42
|
-
alt: member.image.alt ?? member.name,
|
|
43
|
-
className: "h-full w-full object-cover"
|
|
44
|
-
}
|
|
45
|
-
) }),
|
|
39
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted w-full aspect-square overflow-hidden rounded-full [&>span]:h-full [&>span]:w-full", children: ((_a = member.image) == null ? void 0 : _a.src) && /* @__PURE__ */ jsx(CompoundImage, { src: member.image.src, alt: member.image.alt ?? member.name, className: "h-full w-full object-cover" }) }),
|
|
46
40
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
47
41
|
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold", children: member.name }),
|
|
48
42
|
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: member.role }),
|
|
@@ -52,14 +46,7 @@ const MemberCard = ({
|
|
|
52
46
|
}
|
|
53
47
|
if (layout === "simple") {
|
|
54
48
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
55
|
-
/* @__PURE__ */ jsx("div", { className: "bg-muted h-16 w-16 shrink-0 overflow-hidden rounded-full", children: ((_b = member.image) == null ? void 0 : _b.src) && /* @__PURE__ */ jsx(
|
|
56
|
-
"img",
|
|
57
|
-
{
|
|
58
|
-
src: member.image.src,
|
|
59
|
-
alt: member.image.alt ?? member.name,
|
|
60
|
-
className: "h-full w-full object-cover"
|
|
61
|
-
}
|
|
62
|
-
) }),
|
|
49
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted h-16 w-16 shrink-0 overflow-hidden rounded-full [&>span]:h-full [&>span]:w-full", children: ((_b = member.image) == null ? void 0 : _b.src) && /* @__PURE__ */ jsx(CompoundImage, { src: member.image.src, alt: member.image.alt ?? member.name, className: "h-full w-full object-cover" }) }),
|
|
63
50
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
64
51
|
/* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children: member.name }),
|
|
65
52
|
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: member.role }),
|
|
@@ -68,14 +55,7 @@ const MemberCard = ({
|
|
|
68
55
|
] });
|
|
69
56
|
}
|
|
70
57
|
return /* @__PURE__ */ jsxs("div", { className: "bg-card text-card-foreground border-border overflow-hidden rounded-xl border", children: [
|
|
71
|
-
/* @__PURE__ */ jsx("div", { className: "bg-muted aspect-[4/3]", children: ((_c = member.image) == null ? void 0 : _c.src) && /* @__PURE__ */ jsx(
|
|
72
|
-
"img",
|
|
73
|
-
{
|
|
74
|
-
src: member.image.src,
|
|
75
|
-
alt: member.image.alt ?? member.name,
|
|
76
|
-
className: "h-full w-full object-cover"
|
|
77
|
-
}
|
|
78
|
-
) }),
|
|
58
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted aspect-[4/3] [&>span]:h-full [&>span]:w-full", children: ((_c = member.image) == null ? void 0 : _c.src) && /* @__PURE__ */ jsx(CompoundImage, { src: member.image.src, alt: member.image.alt ?? member.name, className: "h-full w-full object-cover" }) }),
|
|
79
59
|
/* @__PURE__ */ jsxs("div", { className: "p-6", children: [
|
|
80
60
|
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold", children: member.name }),
|
|
81
61
|
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: member.role }),
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { paddingDefaults, image1x1Placeholder, backgroundColor, sectionStyle, padding, image, buttons } from "../../../puck-base/core/fields.js";
|
|
2
|
+
import { TeamGrid2 } from "./team-grid-2.js";
|
|
3
|
+
const defaultMember = {
|
|
4
|
+
name: "Jane Smith",
|
|
5
|
+
role: "Founder & Head Trainer",
|
|
6
|
+
image: image1x1Placeholder,
|
|
7
|
+
description: "Builds custom training programs tailored to your goals and fitness level. Direct feedback, real progress tracking, and support every step of the way."
|
|
8
|
+
};
|
|
9
|
+
const conf = {
|
|
10
|
+
fields: {
|
|
11
|
+
heading: { type: "text", contentEditable: true },
|
|
12
|
+
description: { type: "textarea", contentEditable: true },
|
|
13
|
+
buttons,
|
|
14
|
+
members: {
|
|
15
|
+
type: "array",
|
|
16
|
+
max: 8,
|
|
17
|
+
getItemSummary: (item, index = 0) => item.name || `Member ${index + 1}`,
|
|
18
|
+
arrayFields: {
|
|
19
|
+
name: { type: "text", contentEditable: true },
|
|
20
|
+
role: { type: "text", contentEditable: true },
|
|
21
|
+
image,
|
|
22
|
+
description: { type: "textarea", contentEditable: true }
|
|
23
|
+
},
|
|
24
|
+
defaultItemProps: defaultMember
|
|
25
|
+
},
|
|
26
|
+
padding,
|
|
27
|
+
sectionStyle,
|
|
28
|
+
backgroundColor
|
|
29
|
+
},
|
|
30
|
+
defaultProps: {
|
|
31
|
+
heading: "Your personal\nfitness partner",
|
|
32
|
+
description: "We're here to guide you toward your health goals with personalized training and real accountability. Every session is built around what works for you.",
|
|
33
|
+
buttons: [
|
|
34
|
+
{
|
|
35
|
+
label: "Get started",
|
|
36
|
+
url: "#",
|
|
37
|
+
action: { type: "external", pageUrl: "", externalUrl: "#", openInNewTab: "false", email: "", subject: "", phone: "", sectionId: "", downloadUrl: "" },
|
|
38
|
+
variant: "default",
|
|
39
|
+
size: "default",
|
|
40
|
+
icon: "none"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: "Schedule a consultation",
|
|
44
|
+
url: "#",
|
|
45
|
+
action: { type: "external", pageUrl: "", externalUrl: "#", openInNewTab: "false", email: "", subject: "", phone: "", sectionId: "", downloadUrl: "" },
|
|
46
|
+
variant: "secondary",
|
|
47
|
+
size: "default",
|
|
48
|
+
icon: "none"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
members: [
|
|
52
|
+
{ ...defaultMember, name: "Jane Smith", role: "Founder & Head Trainer" },
|
|
53
|
+
{ ...defaultMember, name: "Alex Johnson", role: "Fitness Specialist" },
|
|
54
|
+
{ ...defaultMember, name: "Sarah Williams", role: "Strength Coach" },
|
|
55
|
+
{ ...defaultMember, name: "Michael Chen", role: "Nutrition Coach" }
|
|
56
|
+
],
|
|
57
|
+
padding: paddingDefaults
|
|
58
|
+
},
|
|
59
|
+
render: TeamGrid2
|
|
60
|
+
};
|
|
61
|
+
export {
|
|
62
|
+
conf
|
|
63
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CompoundContainerProps } from "@/components/puck-base/container";
|
|
2
|
+
import { CompoundButtonProps } from "@/components/puck-base/button";
|
|
3
|
+
export interface TeamMember2 {
|
|
4
|
+
name: string;
|
|
5
|
+
role: string;
|
|
6
|
+
image?: {
|
|
7
|
+
src: string;
|
|
8
|
+
alt?: string;
|
|
9
|
+
};
|
|
10
|
+
description?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface TeamGrid2Props {
|
|
13
|
+
padding?: CompoundContainerProps["padding"];
|
|
14
|
+
sectionStyle?: CompoundContainerProps["sectionStyle"];
|
|
15
|
+
backgroundColor?: string;
|
|
16
|
+
heading?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
buttons?: CompoundButtonProps[];
|
|
19
|
+
members?: TeamMember2[];
|
|
20
|
+
}
|
|
21
|
+
export declare const TeamGrid2: ({ padding, sectionStyle, backgroundColor, heading, description, buttons, members, }: TeamGrid2Props) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CompoundContainer } from "../../../puck-base/container.js";
|
|
3
|
+
import { CompoundButton } from "../../../puck-base/button.js";
|
|
4
|
+
import { CompoundImage } from "../../../puck-base/image.js";
|
|
5
|
+
const TeamGrid2 = ({
|
|
6
|
+
padding,
|
|
7
|
+
sectionStyle,
|
|
8
|
+
backgroundColor,
|
|
9
|
+
heading,
|
|
10
|
+
description,
|
|
11
|
+
buttons = [],
|
|
12
|
+
members = []
|
|
13
|
+
}) => /* @__PURE__ */ jsx(
|
|
14
|
+
CompoundContainer,
|
|
15
|
+
{
|
|
16
|
+
padding,
|
|
17
|
+
sectionStyle,
|
|
18
|
+
backgroundColor,
|
|
19
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8 md:gap-16", children: [
|
|
20
|
+
(heading || description || buttons.length > 0) && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 md:gap-8 lg:flex-row lg:justify-between", children: [
|
|
21
|
+
heading && /* @__PURE__ */ jsx("div", { className: "w-full lg:basis-1/2", children: /* @__PURE__ */ jsx("h2", { className: "text-foreground max-w-xl text-4xl font-bold leading-tight tracking-tight md:text-5xl whitespace-pre-line", children: heading }) }),
|
|
22
|
+
(description || buttons.length > 0) && /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col gap-8 lg:basis-1/2", children: [
|
|
23
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-base leading-relaxed whitespace-pre-line", children: description }),
|
|
24
|
+
buttons.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3 sm:flex-row sm:flex-wrap", children: buttons.map((btn, i) => /* @__PURE__ */ jsx(CompoundButton, { ...btn }, i)) })
|
|
25
|
+
] })
|
|
26
|
+
] }) }),
|
|
27
|
+
members.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-10 md:grid-cols-2 md:gap-8 lg:grid-cols-4", children: members.map((member, index) => /* @__PURE__ */ jsx(MemberCard, { member }, index)) })
|
|
28
|
+
] })
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
const MemberCard = ({ member }) => {
|
|
32
|
+
var _a;
|
|
33
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
34
|
+
/* @__PURE__ */ jsx("div", { className: "bg-muted relative w-full overflow-hidden rounded-3xl [&>span]:h-full [&>span]:w-full", style: { aspectRatio: "3/4" }, children: ((_a = member.image) == null ? void 0 : _a.src) && /* @__PURE__ */ jsx(CompoundImage, { src: member.image.src, alt: member.image.alt ?? member.name, className: "h-full w-full object-cover" }) }),
|
|
35
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
|
|
36
|
+
/* @__PURE__ */ jsx("div", { className: "border-b border-border pb-3", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: member.role }) }),
|
|
37
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
38
|
+
/* @__PURE__ */ jsx("h3", { className: "text-foreground text-lg font-semibold leading-snug", children: member.name }),
|
|
39
|
+
member.description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-base leading-relaxed whitespace-pre-line", children: member.description })
|
|
40
|
+
] })
|
|
41
|
+
] })
|
|
42
|
+
] });
|
|
43
|
+
};
|
|
44
|
+
export {
|
|
45
|
+
TeamGrid2
|
|
46
|
+
};
|