dune-react 0.0.8 → 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.
Files changed (107) hide show
  1. package/dist/components/puck-base/article-card.js +1 -1
  2. package/dist/components/puck-base/container.d.ts +7 -1
  3. package/dist/components/puck-base/container.js +2 -1
  4. package/dist/components/puck-base/content.d.ts +1 -4
  5. package/dist/components/puck-base/content.js +15 -17
  6. package/dist/components/puck-base/core/types.d.ts +2 -2
  7. package/dist/components/puck-base/editor-context.d.ts +8 -0
  8. package/dist/components/puck-base/fields/auto-field.d.ts +1 -0
  9. package/dist/components/puck-base/fields/auto-field.js +131 -49
  10. package/dist/components/puck-base/gradient-text.js +12 -3
  11. package/dist/components/puck-block/banner-sections/announcement-banner-1/announcement-banner.js +1 -1
  12. package/dist/components/puck-block/contact-sections/api/form-leads.d.ts +16 -0
  13. package/dist/components/puck-block/contact-sections/api/form-leads.js +25 -0
  14. package/dist/components/puck-block/contact-sections/contact-us-1/contact-us.js +8 -16
  15. package/dist/components/puck-block/contact-sections/contact-us-2/contact-us-2.d.ts +26 -0
  16. package/dist/components/puck-block/contact-sections/contact-us-2/contact-us-2.js +229 -0
  17. package/dist/components/puck-block/contact-sections/contact-us-2/index.d.ts +5 -0
  18. package/dist/components/puck-block/contact-sections/contact-us-2/index.js +72 -0
  19. package/dist/components/puck-block/contact-sections/contact-us-3/contact-us-3.d.ts +29 -0
  20. package/dist/components/puck-block/contact-sections/contact-us-3/contact-us-3.js +245 -0
  21. package/dist/components/puck-block/contact-sections/contact-us-3/index.d.ts +5 -0
  22. package/dist/components/puck-block/contact-sections/contact-us-3/index.js +101 -0
  23. package/dist/components/puck-block/cta-sections/banner-cta-1/banner-cta.js +9 -8
  24. package/dist/components/puck-block/cta-sections/gradient-cta-1/gradient-cta.js +3 -3
  25. package/dist/components/puck-block/cta-sections/gradient-cta-1/index.js +4 -4
  26. package/dist/components/puck-block/cta-sections/newsletter-signup-1/newsletter-signup.js +5 -4
  27. package/dist/components/puck-block/cta-sections/promo-section-1/promo-section.js +6 -5
  28. package/dist/components/puck-block/faq-sections/faq-2/faq-2.d.ts +16 -0
  29. package/dist/components/puck-block/faq-sections/faq-2/faq-2.js +56 -0
  30. package/dist/components/puck-block/faq-sections/faq-2/index.d.ts +5 -0
  31. package/dist/components/puck-block/faq-sections/faq-2/index.js +62 -0
  32. package/dist/components/puck-block/feature-sections/feature-cards-1/feature-cards.d.ts +3 -4
  33. package/dist/components/puck-block/feature-sections/feature-cards-1/feature-cards.js +13 -3
  34. package/dist/components/puck-block/feature-sections/feature-cards-1/index.js +34 -14
  35. package/dist/components/puck-block/feature-sections/feature-showcase-1/feature-showcase.js +2 -8
  36. package/dist/components/puck-block/feature-sections/product-features-1/product-features.js +5 -25
  37. package/dist/components/puck-block/gallery-sections/gallery-1/gallery.js +3 -2
  38. package/dist/components/puck-block/gallery-sections/gallery-2/gallery-2.d.ts +14 -0
  39. package/dist/components/puck-block/gallery-sections/gallery-2/gallery-2.js +88 -0
  40. package/dist/components/puck-block/gallery-sections/gallery-2/index.d.ts +5 -0
  41. package/dist/components/puck-block/gallery-sections/gallery-2/index.js +44 -0
  42. package/dist/components/puck-block/gallery-sections/gallery-3/gallery-3.d.ts +17 -0
  43. package/dist/components/puck-block/gallery-sections/gallery-3/gallery-3.js +121 -0
  44. package/dist/components/puck-block/gallery-sections/gallery-3/index.d.ts +5 -0
  45. package/dist/components/puck-block/gallery-sections/gallery-3/index.js +60 -0
  46. package/dist/components/puck-block/hero-sections/fullscreen-hero-1/fullscreen-hero.d.ts +6 -1
  47. package/dist/components/puck-block/hero-sections/fullscreen-hero-1/fullscreen-hero.js +56 -20
  48. package/dist/components/puck-block/hero-sections/fullscreen-hero-1/index.js +12 -1
  49. package/dist/components/puck-block/hero-sections/gradient-hero-1/gradient-hero.d.ts +1 -1
  50. package/dist/components/puck-block/hero-sections/gradient-hero-1/gradient-hero.js +9 -6
  51. package/dist/components/puck-block/hero-sections/gradient-hero-1/index.js +4 -4
  52. package/dist/components/puck-block/hero-sections/image-hero-1/image-hero.d.ts +4 -1
  53. package/dist/components/puck-block/hero-sections/image-hero-1/image-hero.js +60 -62
  54. package/dist/components/puck-block/index.d.ts +15 -0
  55. package/dist/components/puck-block/location-sections/location-1/index.d.ts +5 -0
  56. package/dist/components/puck-block/location-sections/location-1/index.js +103 -0
  57. package/dist/components/puck-block/location-sections/location-1/location.d.ts +27 -0
  58. package/dist/components/puck-block/location-sections/location-1/location.js +143 -0
  59. package/dist/components/puck-block/location-sections/location-2/index.d.ts +5 -0
  60. package/dist/components/puck-block/location-sections/location-2/index.js +111 -0
  61. package/dist/components/puck-block/location-sections/location-2/location.d.ts +25 -0
  62. package/dist/components/puck-block/location-sections/location-2/location.js +136 -0
  63. package/dist/components/puck-block/location-sections/location-3/index.d.ts +5 -0
  64. package/dist/components/puck-block/location-sections/location-3/index.js +83 -0
  65. package/dist/components/puck-block/location-sections/location-3/location.d.ts +22 -0
  66. package/dist/components/puck-block/location-sections/location-3/location.js +129 -0
  67. package/dist/components/puck-block/metrics-sections/stats-2/index.d.ts +5 -0
  68. package/dist/components/puck-block/metrics-sections/stats-2/index.js +77 -0
  69. package/dist/components/puck-block/metrics-sections/stats-2/stats-2.d.ts +16 -0
  70. package/dist/components/puck-block/metrics-sections/stats-2/stats-2.js +59 -0
  71. package/dist/components/puck-block/metrics-sections/stats-3/index.d.ts +5 -0
  72. package/dist/components/puck-block/metrics-sections/stats-3/index.js +94 -0
  73. package/dist/components/puck-block/metrics-sections/stats-3/stats-3.d.ts +17 -0
  74. package/dist/components/puck-block/metrics-sections/stats-3/stats-3.js +60 -0
  75. package/dist/components/puck-block/pricing-sections/pricing-2/index.d.ts +5 -0
  76. package/dist/components/puck-block/pricing-sections/pricing-2/index.js +152 -0
  77. package/dist/components/puck-block/pricing-sections/pricing-2/pricing-2.d.ts +24 -0
  78. package/dist/components/puck-block/pricing-sections/pricing-2/pricing-2.js +68 -0
  79. package/dist/components/puck-block/showcase-sections/before-after-1/before-after.d.ts +20 -0
  80. package/dist/components/puck-block/showcase-sections/before-after-1/before-after.js +73 -0
  81. package/dist/components/puck-block/showcase-sections/before-after-1/index.d.ts +5 -0
  82. package/dist/components/puck-block/showcase-sections/before-after-1/index.js +74 -0
  83. package/dist/components/puck-block/showcase-sections/case-study-1/case-study.js +2 -8
  84. package/dist/components/puck-block/team-sections/team-grid-1/team-grid.js +4 -24
  85. package/dist/components/puck-block/team-sections/team-grid-2/index.d.ts +5 -0
  86. package/dist/components/puck-block/team-sections/team-grid-2/index.js +63 -0
  87. package/dist/components/puck-block/team-sections/team-grid-2/team-grid-2.d.ts +21 -0
  88. package/dist/components/puck-block/team-sections/team-grid-2/team-grid-2.js +46 -0
  89. package/dist/components/puck-block/team-sections/team-profiles-1/index.d.ts +5 -0
  90. package/dist/components/puck-block/team-sections/team-profiles-1/index.js +54 -0
  91. package/dist/components/puck-block/team-sections/team-profiles-1/team-profiles.d.ts +21 -0
  92. package/dist/components/puck-block/team-sections/team-profiles-1/team-profiles.js +107 -0
  93. package/dist/components/puck-block/testimonial-sections/logo-marquee-1/logo-marquee.js +2 -1
  94. package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.d.ts +5 -0
  95. package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.js +50 -0
  96. package/dist/components/puck-block/testimonial-sections/logo-wall-1/logo-wall.d.ts +15 -0
  97. package/dist/components/puck-block/testimonial-sections/logo-wall-1/logo-wall.js +57 -0
  98. package/dist/components/puck-block/testimonial-sections/review-section-1/review-section.js +3 -2
  99. package/dist/components/puck-block/text-sections/articles-1/articles.d.ts +1 -0
  100. package/dist/components/puck-block/text-sections/articles-1/articles.js +19 -6
  101. package/dist/components/puck-block/text-sections/articles-1/index.js +16 -4
  102. package/dist/components/puck-block/text-sections/content-section-1/content-section.js +5 -4
  103. package/dist/components/puck-block/text-sections/tab-section-1/tab-section.js +3 -2
  104. package/dist/components/shadcn/navigation-menu.d.ts +1 -1
  105. package/dist/components/shadcn/navigation-menu.js +33 -0
  106. package/dist/index.js +104 -74
  107. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ import { paddingDefaults, backgroundColor, sectionStyle, padding } from "../../../puck-base/core/fields.js";
2
+ import { Location3 } from "./location.js";
3
+ const defaultLocation = {
4
+ name: "Downtown",
5
+ address: "123 Main Street\nNew York, NY 10001",
6
+ phone: "+1 (555) 000-0001",
7
+ hours: "Mon–Fri: 9am–6pm\nSat: 10am–4pm",
8
+ directionsUrl: "https://maps.google.com"
9
+ };
10
+ const conf = {
11
+ fields: {
12
+ heading: { type: "textarea", contentEditable: true },
13
+ description: { type: "textarea", contentEditable: true },
14
+ mapEmbedUrl: { type: "text", label: "Google Map Embed URL" },
15
+ mapTitle: { type: "text", label: "Map Title" },
16
+ mapFilter: { type: "text", label: "Map Filter (CSS)" },
17
+ mapHeight: {
18
+ type: "radio",
19
+ label: "Map Height",
20
+ options: [
21
+ { label: "Compact", value: "sm" },
22
+ { label: "Medium", value: "md" },
23
+ { label: "Tall", value: "lg" }
24
+ ]
25
+ },
26
+ columns: {
27
+ type: "radio",
28
+ label: "Grid Columns",
29
+ options: [
30
+ { label: "2 Columns", value: "2" },
31
+ { label: "3 Columns", value: "3" }
32
+ ]
33
+ },
34
+ locations: {
35
+ type: "array",
36
+ min: 1,
37
+ max: 6,
38
+ getItemSummary: (item, index = 0) => item.name || `Location ${index + 1}`,
39
+ arrayFields: {
40
+ name: { type: "text", contentEditable: true },
41
+ address: { type: "textarea", contentEditable: true },
42
+ phone: { type: "text" },
43
+ hours: { type: "textarea", label: "Business Hours" },
44
+ directionsUrl: { type: "text", label: "Directions URL" }
45
+ },
46
+ defaultItemProps: defaultLocation
47
+ },
48
+ padding,
49
+ sectionStyle,
50
+ backgroundColor
51
+ },
52
+ defaultProps: {
53
+ heading: "Find us\nnear you",
54
+ description: "Multiple convenient locations across the city to serve you better.",
55
+ mapEmbedUrl: "https://maps.google.com/maps?q=New%20York%2C%20NY%2C%20United%20States&z=11&t=m&output=embed",
56
+ mapTitle: "Google Maps",
57
+ mapFilter: "grayscale(35%) contrast(1.05) brightness(1.0)",
58
+ mapHeight: "md",
59
+ columns: "3",
60
+ locations: [
61
+ defaultLocation,
62
+ {
63
+ name: "Midtown",
64
+ address: "456 Park Avenue\nNew York, NY 10022",
65
+ phone: "+1 (555) 000-0002",
66
+ hours: "Mon–Fri: 8am–7pm\nSat–Sun: 10am–5pm",
67
+ directionsUrl: "https://maps.google.com"
68
+ },
69
+ {
70
+ name: "Brooklyn",
71
+ address: "789 Atlantic Ave\nBrooklyn, NY 11217",
72
+ phone: "+1 (555) 000-0003",
73
+ hours: "Mon–Fri: 9am–6pm\nSat: 11am–4pm",
74
+ directionsUrl: "https://maps.google.com"
75
+ }
76
+ ],
77
+ padding: paddingDefaults
78
+ },
79
+ render: Location3
80
+ };
81
+ export {
82
+ conf
83
+ };
@@ -0,0 +1,22 @@
1
+ import { CompoundContainerProps } from "@/components/puck-base/container";
2
+ export interface LocationEntry {
3
+ name: string;
4
+ address?: string;
5
+ phone?: string;
6
+ hours?: string;
7
+ directionsUrl?: string;
8
+ }
9
+ export interface Location3Props {
10
+ padding?: CompoundContainerProps["padding"];
11
+ sectionStyle?: CompoundContainerProps["sectionStyle"];
12
+ backgroundColor?: string;
13
+ heading?: string;
14
+ description?: string;
15
+ mapEmbedUrl?: string;
16
+ mapTitle?: string;
17
+ mapFilter?: string;
18
+ mapHeight?: "sm" | "md" | "lg";
19
+ columns?: "2" | "3";
20
+ locations: LocationEntry[];
21
+ }
22
+ export declare const Location3: ({ padding, sectionStyle, backgroundColor, heading, description, mapEmbedUrl, mapTitle, mapFilter, mapHeight, columns, locations, }: Location3Props) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,129 @@
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 { cn } from "../../../../utils/css-utils.js";
5
+ const Location3 = ({
6
+ padding,
7
+ sectionStyle,
8
+ backgroundColor,
9
+ heading,
10
+ description,
11
+ mapEmbedUrl,
12
+ mapTitle = "Google Maps",
13
+ mapFilter,
14
+ mapHeight = "md",
15
+ columns = "3",
16
+ locations = []
17
+ }) => {
18
+ const mapHeightClass = mapHeight === "sm" ? "h-[220px] md:h-[260px]" : mapHeight === "lg" ? "h-[360px] md:h-[440px]" : "h-[280px] md:h-[340px]";
19
+ const colClass = columns === "2" ? "sm:grid-cols-2" : "sm:grid-cols-2 lg:grid-cols-3";
20
+ return /* @__PURE__ */ jsx(
21
+ CompoundContainer,
22
+ {
23
+ padding,
24
+ sectionStyle,
25
+ backgroundColor,
26
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-10", children: [
27
+ (heading || description) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4 text-center", children: [
28
+ heading && /* @__PURE__ */ jsx("h2", { className: "text-foreground whitespace-pre-line font-serif text-3xl leading-tight tracking-tighter md:text-5xl", children: heading }),
29
+ description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground max-w-xl text-base leading-relaxed", children: description })
30
+ ] }),
31
+ /* @__PURE__ */ jsx("div", { className: cn("w-full overflow-hidden rounded-2xl", mapHeightClass), children: mapEmbedUrl ? /* @__PURE__ */ jsx(
32
+ "iframe",
33
+ {
34
+ src: mapEmbedUrl,
35
+ title: mapTitle,
36
+ className: "h-full w-full border-0",
37
+ loading: "lazy",
38
+ referrerPolicy: "no-referrer-when-downgrade",
39
+ allowFullScreen: true,
40
+ style: { filter: mapFilter }
41
+ }
42
+ ) : /* @__PURE__ */ jsx("div", { className: "bg-muted text-muted-foreground flex h-full w-full items-center justify-center text-sm", children: "地图地址未配置" }) }),
43
+ locations.length > 0 && /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-1 gap-5", colClass), children: locations.map((loc, i) => /* @__PURE__ */ jsxs(
44
+ "div",
45
+ {
46
+ className: "bg-card border-border flex flex-col gap-3 rounded-xl border p-6",
47
+ children: [
48
+ /* @__PURE__ */ jsx("h3", { className: "text-foreground text-lg font-semibold", children: loc.name }),
49
+ loc.address && /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-start gap-2 text-sm", children: [
50
+ /* @__PURE__ */ jsxs(
51
+ "svg",
52
+ {
53
+ className: "text-primary mt-0.5 shrink-0",
54
+ width: "14",
55
+ height: "14",
56
+ viewBox: "0 0 24 24",
57
+ fill: "none",
58
+ stroke: "currentColor",
59
+ strokeWidth: "2",
60
+ strokeLinecap: "round",
61
+ strokeLinejoin: "round",
62
+ children: [
63
+ /* @__PURE__ */ jsx("path", { d: "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" }),
64
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "10", r: "3" })
65
+ ]
66
+ }
67
+ ),
68
+ /* @__PURE__ */ jsx("span", { className: "whitespace-pre-line", children: loc.address })
69
+ ] }),
70
+ loc.phone && /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-center gap-2 text-sm", children: [
71
+ /* @__PURE__ */ jsx(
72
+ "svg",
73
+ {
74
+ className: "text-primary shrink-0",
75
+ width: "14",
76
+ height: "14",
77
+ viewBox: "0 0 24 24",
78
+ fill: "none",
79
+ stroke: "currentColor",
80
+ strokeWidth: "2",
81
+ strokeLinecap: "round",
82
+ strokeLinejoin: "round",
83
+ children: /* @__PURE__ */ jsx("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 14a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.62 3h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 10.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 17.92Z" })
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsx("span", { children: loc.phone })
87
+ ] }),
88
+ loc.hours && /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex items-start gap-2 text-sm", children: [
89
+ /* @__PURE__ */ jsxs(
90
+ "svg",
91
+ {
92
+ className: "text-primary mt-0.5 shrink-0",
93
+ width: "14",
94
+ height: "14",
95
+ viewBox: "0 0 24 24",
96
+ fill: "none",
97
+ stroke: "currentColor",
98
+ strokeWidth: "2",
99
+ strokeLinecap: "round",
100
+ strokeLinejoin: "round",
101
+ children: [
102
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
103
+ /* @__PURE__ */ jsx("polyline", { points: "12 6 12 12 16 14" })
104
+ ]
105
+ }
106
+ ),
107
+ /* @__PURE__ */ jsx("span", { className: "whitespace-pre-line", children: loc.hours })
108
+ ] }),
109
+ loc.directionsUrl && /* @__PURE__ */ jsx("div", { className: "mt-auto pt-2", children: /* @__PURE__ */ jsx(
110
+ CompoundButton,
111
+ {
112
+ label: "Get Directions",
113
+ url: loc.directionsUrl,
114
+ variant: "outline",
115
+ size: "sm",
116
+ icon: "map-pin"
117
+ }
118
+ ) })
119
+ ]
120
+ },
121
+ i
122
+ )) })
123
+ ] })
124
+ }
125
+ );
126
+ };
127
+ export {
128
+ Location3
129
+ };
@@ -0,0 +1,5 @@
1
+ import { ComponentConfig } from "@puckeditor/core";
2
+ import { Stats2Props } from "./stats-2";
3
+ export type { Stats2Props };
4
+ export declare const conf: ComponentConfig<Stats2Props>;
5
+ export default conf;
@@ -0,0 +1,77 @@
1
+ import { paddingDefaults, backgroundColor, sectionStyle, padding, buttons } from "../../../puck-base/core/fields.js";
2
+ import { Stats2 } from "./stats-2.js";
3
+ const conf = {
4
+ fields: {
5
+ heading: {
6
+ type: "text",
7
+ contentEditable: true
8
+ },
9
+ description: {
10
+ type: "textarea",
11
+ contentEditable: true
12
+ },
13
+ buttons,
14
+ items: {
15
+ type: "array",
16
+ max: 8,
17
+ getItemSummary: (item, index = 0) => item.metric || `Stat ${index + 1}`,
18
+ arrayFields: {
19
+ metric: {
20
+ type: "text",
21
+ contentEditable: true,
22
+ ai: { instructions: "The metric value, e.g. '100%', '1:1', 'LA'" }
23
+ },
24
+ title: {
25
+ type: "text",
26
+ contentEditable: true,
27
+ ai: { instructions: "Short label describing this metric" }
28
+ },
29
+ variant: {
30
+ type: "radio",
31
+ options: [
32
+ { label: "Light", value: "light" },
33
+ { label: "Dark", value: "dark" }
34
+ ]
35
+ }
36
+ },
37
+ defaultItemProps: {
38
+ metric: "100%",
39
+ title: "Custom program design",
40
+ variant: "light"
41
+ }
42
+ },
43
+ padding,
44
+ sectionStyle,
45
+ backgroundColor
46
+ },
47
+ defaultProps: {
48
+ heading: "Real results from dedicated training",
49
+ description: "We focus on measurable progress and sustainable fitness habits. Every client gets customized programs built around their goals and current fitness level.",
50
+ buttons: [
51
+ {
52
+ label: "Explore our programs",
53
+ url: "/services",
54
+ variant: "outline",
55
+ size: "default",
56
+ icon: "none"
57
+ },
58
+ {
59
+ label: "Schedule your first session",
60
+ url: "#",
61
+ variant: "default",
62
+ size: "default",
63
+ icon: "none"
64
+ }
65
+ ],
66
+ items: [
67
+ { metric: "100%", title: "Custom program design", variant: "dark" },
68
+ { metric: "1:1", title: "Personalized attention", variant: "light" },
69
+ { metric: "LA", title: "Local Los Angeles training", variant: "light" }
70
+ ],
71
+ padding: paddingDefaults
72
+ },
73
+ render: Stats2
74
+ };
75
+ export {
76
+ conf
77
+ };
@@ -0,0 +1,16 @@
1
+ import { CompoundContainerProps } from "@/components/puck-base/container";
2
+ import { CompoundButtonProps } from "@/components/puck-base/button";
3
+ export interface Stats2Props {
4
+ heading?: string;
5
+ description?: string;
6
+ buttons?: CompoundButtonProps[];
7
+ items?: {
8
+ metric: string;
9
+ title: string;
10
+ variant: "dark" | "light";
11
+ }[];
12
+ padding?: CompoundContainerProps["padding"];
13
+ sectionStyle?: CompoundContainerProps["sectionStyle"];
14
+ backgroundColor?: string;
15
+ }
16
+ export declare const Stats2: ({ heading, description, buttons, items, padding, sectionStyle, backgroundColor, }: Stats2Props) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,59 @@
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 { cn } from "../../../../utils/css-utils.js";
5
+ const Stats2 = ({
6
+ heading,
7
+ description,
8
+ buttons,
9
+ items = [],
10
+ padding,
11
+ sectionStyle,
12
+ backgroundColor
13
+ }) => {
14
+ return /* @__PURE__ */ jsx(
15
+ CompoundContainer,
16
+ {
17
+ padding,
18
+ sectionStyle,
19
+ backgroundColor,
20
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8", children: [
21
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 md:flex-row md:justify-between", children: [
22
+ /* @__PURE__ */ jsx("div", { className: "w-full md:w-1/2", children: heading && /* @__PURE__ */ jsx("h2", { className: "max-w-xl text-4xl font-semibold tracking-tight text-foreground", children: heading }) }),
23
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col gap-6 md:w-1/2", children: [
24
+ description && /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-base leading-relaxed text-muted-foreground", children: description }),
25
+ buttons && buttons.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: buttons.map((btn, i) => /* @__PURE__ */ jsx(
26
+ CompoundButton,
27
+ {
28
+ label: btn.label,
29
+ url: btn.url,
30
+ action: btn.action,
31
+ variant: btn.variant,
32
+ size: btn.size,
33
+ icon: btn.icon
34
+ },
35
+ i
36
+ )) })
37
+ ] })
38
+ ] }) }),
39
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-4", children: items.map((item, i) => /* @__PURE__ */ jsxs(
40
+ "div",
41
+ {
42
+ className: cn(
43
+ "flex min-h-[180px] flex-col justify-between rounded-3xl border p-6",
44
+ item.variant === "dark" ? "border-foreground/20 bg-foreground text-background" : "border-border bg-transparent text-foreground"
45
+ ),
46
+ children: [
47
+ /* @__PURE__ */ jsx("p", { className: "text-3xl font-semibold", children: item.metric }),
48
+ /* @__PURE__ */ jsx("p", { className: "text-base", children: item.title })
49
+ ]
50
+ },
51
+ i
52
+ )) })
53
+ ] })
54
+ }
55
+ );
56
+ };
57
+ export {
58
+ Stats2
59
+ };
@@ -0,0 +1,5 @@
1
+ import { ComponentConfig } from "@puckeditor/core";
2
+ import { Stats3Props } from "./stats-3";
3
+ export type { Stats3Props };
4
+ export declare const conf: ComponentConfig<Stats3Props>;
5
+ export default conf;
@@ -0,0 +1,94 @@
1
+ import { paddingDefaults, actionDefaults, backgroundColor, sectionStyle, padding, button } from "../../../puck-base/core/fields.js";
2
+ import { Stats3 } from "./stats-3.js";
3
+ const conf = {
4
+ fields: {
5
+ heading: {
6
+ type: "text",
7
+ contentEditable: true
8
+ },
9
+ description: {
10
+ type: "textarea",
11
+ contentEditable: true
12
+ },
13
+ primaryButton: {
14
+ type: "object",
15
+ objectFields: { ...button.objectFields }
16
+ },
17
+ secondaryButton: {
18
+ type: "object",
19
+ objectFields: { ...button.objectFields }
20
+ },
21
+ items: {
22
+ type: "array",
23
+ max: 6,
24
+ getItemSummary: (item, index = 0) => item.metric || `Stat ${index + 1}`,
25
+ arrayFields: {
26
+ metric: {
27
+ type: "text",
28
+ contentEditable: true,
29
+ ai: { instructions: "The key value, e.g. '100%', '1-on-1', '4 weeks'" }
30
+ },
31
+ title: {
32
+ type: "text",
33
+ contentEditable: true,
34
+ ai: { instructions: "A short bold label for this statistic" }
35
+ },
36
+ description: {
37
+ type: "textarea",
38
+ contentEditable: true,
39
+ ai: { instructions: "A brief supporting description for this statistic" }
40
+ }
41
+ },
42
+ defaultItemProps: {
43
+ metric: "100%",
44
+ title: "Stat title",
45
+ description: "A brief description of what this statistic means."
46
+ }
47
+ },
48
+ padding,
49
+ sectionStyle,
50
+ backgroundColor
51
+ },
52
+ defaultProps: {
53
+ heading: "Real progress from personalized training",
54
+ description: "We focus on measurable improvements and sustainable habits that fit your life.",
55
+ primaryButton: {
56
+ label: "Get started",
57
+ url: "#",
58
+ action: actionDefaults,
59
+ variant: "default",
60
+ size: "default",
61
+ icon: "none"
62
+ },
63
+ secondaryButton: {
64
+ label: "Learn more",
65
+ url: "#",
66
+ action: actionDefaults,
67
+ variant: "outline",
68
+ size: "default",
69
+ icon: "none"
70
+ },
71
+ items: [
72
+ {
73
+ metric: "100%",
74
+ title: "Customized programs",
75
+ description: "Every plan is tailored to your goals, fitness level, and schedule."
76
+ },
77
+ {
78
+ metric: "1-on-1",
79
+ title: "Direct coaching",
80
+ description: "You work directly with your coach for focused attention and real-time feedback."
81
+ },
82
+ {
83
+ metric: "4 weeks",
84
+ title: "Visible results",
85
+ description: "Most clients see measurable strength and endurance improvements within the first month."
86
+ }
87
+ ],
88
+ padding: paddingDefaults
89
+ },
90
+ render: Stats3
91
+ };
92
+ export {
93
+ conf
94
+ };
@@ -0,0 +1,17 @@
1
+ import { CompoundContainerProps } from "@/components/puck-base/container";
2
+ import { CompoundButtonProps } from "@/components/puck-base/button";
3
+ export interface Stats3Props {
4
+ padding?: CompoundContainerProps["padding"];
5
+ sectionStyle?: CompoundContainerProps["sectionStyle"];
6
+ backgroundColor?: string;
7
+ heading?: string;
8
+ description?: string;
9
+ primaryButton?: CompoundButtonProps;
10
+ secondaryButton?: CompoundButtonProps;
11
+ items: {
12
+ metric: string;
13
+ title: string;
14
+ description: string;
15
+ }[];
16
+ }
17
+ export declare const Stats3: ({ padding, sectionStyle, backgroundColor, heading, description, primaryButton, secondaryButton, items, }: Stats3Props) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,60 @@
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 { cn } from "../../../../utils/css-utils.js";
5
+ const ITEM_STAGGER = {
6
+ 0: "lg:pt-24",
7
+ 1: "lg:pt-16",
8
+ 2: "lg:pt-8"
9
+ };
10
+ const Stats3 = ({
11
+ padding,
12
+ sectionStyle,
13
+ backgroundColor,
14
+ heading,
15
+ description,
16
+ primaryButton,
17
+ secondaryButton,
18
+ items = []
19
+ }) => {
20
+ return /* @__PURE__ */ jsx(
21
+ CompoundContainer,
22
+ {
23
+ padding,
24
+ sectionStyle,
25
+ backgroundColor,
26
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8", children: [
27
+ /* @__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: [
28
+ /* @__PURE__ */ jsx("div", { className: "w-full lg:basis-1/2", children: heading && /* @__PURE__ */ jsx("h2", { className: "max-w-xl text-4xl font-semibold tracking-tight text-foreground", children: heading }) }),
29
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col gap-8 lg:basis-1/2", children: [
30
+ description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: description }),
31
+ ((primaryButton == null ? void 0 : primaryButton.label) || (secondaryButton == null ? void 0 : secondaryButton.label)) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row", children: [
32
+ (primaryButton == null ? void 0 : primaryButton.label) && /* @__PURE__ */ jsx(CompoundButton, { ...primaryButton }),
33
+ (secondaryButton == null ? void 0 : secondaryButton.label) && /* @__PURE__ */ jsx(CompoundButton, { ...secondaryButton })
34
+ ] })
35
+ ] })
36
+ ] }) }),
37
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-y-6 sm:grid-cols-2 lg:grid-cols-3", children: items.map((item, index) => /* @__PURE__ */ jsx(
38
+ "div",
39
+ {
40
+ className: cn("flex h-full flex-col", ITEM_STAGGER[index]),
41
+ children: /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-row", children: [
42
+ /* @__PURE__ */ jsx("div", { className: "w-px self-stretch bg-border" }),
43
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8 px-6", children: [
44
+ /* @__PURE__ */ jsx("p", { className: "text-4xl font-bold tracking-tight text-foreground", children: item.metric }),
45
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
46
+ /* @__PURE__ */ jsx("p", { className: "font-semibold text-foreground", children: item.title }),
47
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: item.description })
48
+ ] })
49
+ ] })
50
+ ] })
51
+ },
52
+ index
53
+ )) })
54
+ ] })
55
+ }
56
+ );
57
+ };
58
+ export {
59
+ Stats3
60
+ };
@@ -0,0 +1,5 @@
1
+ import { ComponentConfig } from "@puckeditor/core";
2
+ import { Pricing2Props } from "./pricing-2";
3
+ export type { Pricing2Props };
4
+ export declare const conf: ComponentConfig<Pricing2Props>;
5
+ export default conf;