dune-react 0.0.11 → 0.0.13
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/core/fields.d.ts +25 -96
- package/dist/components/puck-base/core/fields.js +4 -10
- package/dist/components/puck-base/core/icon-catalog.d.ts +14 -0
- package/dist/components/puck-base/core/icon-catalog.js +193 -0
- package/dist/components/puck-base/fields/action-field.d.ts +23 -1
- package/dist/components/puck-base/fields/action-field.js +174 -130
- package/dist/components/puck-base/gradient-text.js +1 -1
- package/dist/components/puck-base/icon-picker-field.d.ts +8 -0
- package/dist/components/puck-base/icon-picker-field.js +153 -0
- package/dist/components/puck-base/index.d.ts +1 -1
- package/dist/components/puck-block/banner-sections/announcement-banner-1/index.js +1 -1
- package/dist/components/puck-block/banner-sections/marquee-1/index.js +6 -4
- package/dist/components/puck-block/contact-sections/contact-us-1/index.js +18 -8
- package/dist/components/puck-block/contact-sections/contact-us-2/contact-us-2.js +1 -1
- package/dist/components/puck-block/contact-sections/contact-us-2/index.js +7 -7
- package/dist/components/puck-block/contact-sections/contact-us-3/index.js +2 -2
- package/dist/components/puck-block/cta-sections/banner-cta-1/index.js +4 -4
- package/dist/components/puck-block/cta-sections/cta-1/index.js +9 -9
- package/dist/components/puck-block/cta-sections/gradient-cta-1/index.js +3 -3
- package/dist/components/puck-block/cta-sections/newsletter-signup-1/index.js +1 -1
- package/dist/components/puck-block/cta-sections/promo-section-1/index.js +5 -5
- package/dist/components/puck-block/faq-sections/accordion-1/index.js +7 -3
- package/dist/components/puck-block/faq-sections/faq-1/index.js +16 -4
- package/dist/components/puck-block/faq-sections/faq-2/index.js +11 -11
- package/dist/components/puck-block/feature-sections/bento-1/bento.js +16 -7
- package/dist/components/puck-block/feature-sections/bento-1/index.js +19 -6
- package/dist/components/puck-block/feature-sections/feature-cards-1/index.js +11 -10
- package/dist/components/puck-block/feature-sections/feature-showcase-1/index.js +10 -10
- package/dist/components/puck-block/feature-sections/icon-grid-1/index.js +13 -18
- package/dist/components/puck-block/feature-sections/product-features-1/index.js +18 -23
- package/dist/components/puck-block/footer-sections/footer-1/index.js +17 -22
- package/dist/components/puck-block/gallery-sections/gallery-1/index.js +12 -8
- package/dist/components/puck-block/gallery-sections/gallery-2/index.js +10 -9
- package/dist/components/puck-block/gallery-sections/gallery-3/index.js +17 -14
- package/dist/components/puck-block/header-sections/header-1/index.js +56 -40
- package/dist/components/puck-block/header-sections/sticky-nav-1/index.js +4 -3
- package/dist/components/puck-block/hero-sections/fullscreen-hero-1/index.js +4 -3
- package/dist/components/puck-block/hero-sections/gradient-hero-1/index.js +4 -4
- package/dist/components/puck-block/hero-sections/hero-1/index.js +16 -12
- package/dist/components/puck-block/hero-sections/image-hero-1/index.js +2 -2
- package/dist/components/puck-block/hero-sections/props.d.ts +1 -12
- package/dist/components/puck-block/hero-sections/split-hero-1/index.js +7 -7
- package/dist/components/puck-block/hero-sections/video-hero-1/index.js +5 -5
- package/dist/components/puck-block/index.d.ts +0 -1
- package/dist/components/puck-block/location-sections/location-1/index.js +4 -4
- package/dist/components/puck-block/location-sections/location-1/location.js +1 -1
- package/dist/components/puck-block/location-sections/location-2/index.js +4 -4
- package/dist/components/puck-block/location-sections/location-2/location.js +1 -1
- package/dist/components/puck-block/location-sections/location-3/index.js +15 -14
- package/dist/components/puck-block/location-sections/location-3/location.d.ts +1 -0
- package/dist/components/puck-block/location-sections/location-3/location.js +2 -2
- package/dist/components/puck-block/metrics-sections/stats-1/index.js +13 -13
- package/dist/components/puck-block/metrics-sections/stats-2/index.js +8 -8
- package/dist/components/puck-block/metrics-sections/stats-3/index.js +13 -13
- package/dist/components/puck-block/pricing-sections/comparison-1/index.js +2 -2
- package/dist/components/puck-block/pricing-sections/pricing-1/index.js +39 -19
- package/dist/components/puck-block/pricing-sections/pricing-2/index.js +30 -30
- package/dist/components/puck-block/showcase-sections/before-after-1/index.js +12 -12
- package/dist/components/puck-block/showcase-sections/case-study-1/index.js +7 -7
- package/dist/components/puck-block/showcase-sections/step-by-step-1/index.js +8 -8
- package/dist/components/puck-block/team-sections/team-grid-1/index.js +9 -9
- package/dist/components/puck-block/team-sections/team-grid-2/index.js +12 -12
- package/dist/components/puck-block/team-sections/team-profiles-1/index.js +11 -9
- package/dist/components/puck-block/testimonial-sections/customers-1/index.js +18 -7
- package/dist/components/puck-block/testimonial-sections/logo-marquee-1/index.js +1 -1
- package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.js +7 -7
- package/dist/components/puck-block/testimonial-sections/review-section-1/index.js +27 -12
- package/dist/components/puck-block/testimonial-sections/testimonials-1/index.js +17 -7
- package/dist/components/puck-block/text-sections/articles-1/articles.d.ts +3 -2
- package/dist/components/puck-block/text-sections/articles-1/articles.js +6 -4
- package/dist/components/puck-block/text-sections/articles-1/index.js +46 -18
- package/dist/components/puck-block/text-sections/content-section-1/index.js +6 -6
- package/dist/components/puck-block/text-sections/rich-text-1/index.js +1 -1
- package/dist/components/puck-block/text-sections/rich-text-1/rich-text.js +6 -1
- package/dist/components/puck-block/text-sections/tab-section-1/index.js +12 -12
- package/dist/components/puck-block/text-sections/timeline-1/index.js +17 -7
- package/dist/components/puck-block/text-sections/two-column-1/index.js +10 -10
- package/dist/index.js +69 -63
- package/dist/node_modules/.pnpm/lucide-react@0.540.0_react@19.2.4/node_modules/lucide-react/dist/esm/DynamicIcon.js +1 -3
- package/package.json +2 -1
- package/dist/components/puck-block/hero-sections/grid-hero-1/grid-hero.d.ts +0 -26
- package/dist/components/puck-block/hero-sections/grid-hero-1/grid-hero.js +0 -125
- package/dist/components/puck-block/hero-sections/grid-hero-1/index.d.ts +0 -5
- package/dist/components/puck-block/hero-sections/grid-hero-1/index.js +0 -71
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useMemo } from "react";
|
|
4
|
+
import { cn } from "../../utils/css-utils.js";
|
|
5
|
+
import { Popover, PopoverTrigger, PopoverContent } from "../shadcn/popover.js";
|
|
6
|
+
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from "../shadcn/command.js";
|
|
7
|
+
import { ScrollArea } from "../shadcn/scroll-area.js";
|
|
8
|
+
import { Input } from "../shadcn/input.js";
|
|
9
|
+
import { Label } from "../shadcn/label.js";
|
|
10
|
+
import { ICON_MAP, ICON_CATALOG } from "./core/icon-catalog.js";
|
|
11
|
+
import { ChevronDown } from "lucide-react";
|
|
12
|
+
function IconPickerField({
|
|
13
|
+
value,
|
|
14
|
+
onChange
|
|
15
|
+
}) {
|
|
16
|
+
const [open, setOpen] = useState(false);
|
|
17
|
+
const current = value ?? "none";
|
|
18
|
+
const [search, setSearch] = useState("");
|
|
19
|
+
const [manualInput, setManualInput] = useState("");
|
|
20
|
+
const CurrentIcon = ICON_MAP.get(current);
|
|
21
|
+
const filteredCatalog = useMemo(() => {
|
|
22
|
+
const q = search.trim().toLowerCase();
|
|
23
|
+
if (!q) return ICON_CATALOG;
|
|
24
|
+
return ICON_CATALOG.map((cat) => ({
|
|
25
|
+
...cat,
|
|
26
|
+
icons: cat.icons.filter((e) => e.name.toLowerCase().includes(q))
|
|
27
|
+
})).filter((cat) => cat.icons.length > 0);
|
|
28
|
+
}, [search]);
|
|
29
|
+
const handleSelect = (name) => {
|
|
30
|
+
onChange(name);
|
|
31
|
+
setSearch("");
|
|
32
|
+
setOpen(false);
|
|
33
|
+
};
|
|
34
|
+
const handleManualSubmit = () => {
|
|
35
|
+
const v = manualInput.trim();
|
|
36
|
+
if (v) {
|
|
37
|
+
onChange(v);
|
|
38
|
+
setManualInput("");
|
|
39
|
+
setOpen(false);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
43
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
44
|
+
"button",
|
|
45
|
+
{
|
|
46
|
+
type: "button",
|
|
47
|
+
className: cn(
|
|
48
|
+
"inline-flex h-8 w-full items-center gap-2 rounded-md border bg-background px-2.5 text-sm",
|
|
49
|
+
"text-foreground transition-colors hover:bg-accent/50",
|
|
50
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50"
|
|
51
|
+
),
|
|
52
|
+
children: [
|
|
53
|
+
CurrentIcon ? /* @__PURE__ */ jsx(CurrentIcon, { className: "size-4 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ jsx("span", { className: "size-4 shrink-0 rounded-sm border border-dashed" }),
|
|
54
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: current === "none" ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "None" }) : current }),
|
|
55
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: "size-3.5 shrink-0 text-muted-foreground" })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
) }),
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
PopoverContent,
|
|
61
|
+
{
|
|
62
|
+
className: "w-72 p-0",
|
|
63
|
+
align: "start",
|
|
64
|
+
side: "bottom",
|
|
65
|
+
sideOffset: 4,
|
|
66
|
+
children: /* @__PURE__ */ jsxs(Command, { shouldFilter: false, children: [
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
CommandInput,
|
|
69
|
+
{
|
|
70
|
+
placeholder: "Search icons...",
|
|
71
|
+
value: search,
|
|
72
|
+
onValueChange: setSearch
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
/* @__PURE__ */ jsxs(CommandList, { className: "max-h-none overflow-visible", children: [
|
|
76
|
+
/* @__PURE__ */ jsx(CommandEmpty, { children: "No icons found." }),
|
|
77
|
+
/* @__PURE__ */ jsxs(ScrollArea, { className: "h-72", children: [
|
|
78
|
+
/* @__PURE__ */ jsx(CommandGroup, { children: /* @__PURE__ */ jsxs(
|
|
79
|
+
CommandItem,
|
|
80
|
+
{
|
|
81
|
+
value: "none",
|
|
82
|
+
onSelect: () => handleSelect("none"),
|
|
83
|
+
"data-checked": current === "none" ? "true" : void 0,
|
|
84
|
+
className: "gap-2",
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ jsx("span", { className: "size-4 shrink-0 rounded-sm border border-dashed" }),
|
|
87
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "None" })
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
) }),
|
|
91
|
+
filteredCatalog.map((cat) => /* @__PURE__ */ jsx(CommandGroup, { heading: cat.label, children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-6 gap-0.5 px-1 py-0.5", children: cat.icons.map((entry) => {
|
|
92
|
+
const IconComp = entry.component;
|
|
93
|
+
const isSelected = current === entry.name;
|
|
94
|
+
return /* @__PURE__ */ jsx(
|
|
95
|
+
"button",
|
|
96
|
+
{
|
|
97
|
+
type: "button",
|
|
98
|
+
title: entry.name,
|
|
99
|
+
onClick: () => handleSelect(entry.name),
|
|
100
|
+
className: cn(
|
|
101
|
+
"flex size-8 items-center justify-center rounded-md transition-colors",
|
|
102
|
+
"hover:bg-accent hover:text-accent-foreground",
|
|
103
|
+
isSelected && "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
104
|
+
),
|
|
105
|
+
"aria-label": entry.name,
|
|
106
|
+
"aria-pressed": isSelected,
|
|
107
|
+
children: /* @__PURE__ */ jsx(IconComp, { className: "size-4" })
|
|
108
|
+
},
|
|
109
|
+
entry.name
|
|
110
|
+
);
|
|
111
|
+
}) }) }, cat.label))
|
|
112
|
+
] }),
|
|
113
|
+
/* @__PURE__ */ jsxs("div", { className: "border-t p-2", children: [
|
|
114
|
+
/* @__PURE__ */ jsx(Label, { className: "mb-1 block text-xs text-muted-foreground", children: "Or type any Lucide icon name" }),
|
|
115
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
Input,
|
|
118
|
+
{
|
|
119
|
+
className: "h-7 flex-1 text-xs",
|
|
120
|
+
placeholder: "e.g. arrow-right",
|
|
121
|
+
value: manualInput,
|
|
122
|
+
onChange: (e) => setManualInput(e.target.value),
|
|
123
|
+
onKeyDown: (e) => {
|
|
124
|
+
if (e.key === "Enter") {
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
handleManualSubmit();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
/* @__PURE__ */ jsx(
|
|
132
|
+
"button",
|
|
133
|
+
{
|
|
134
|
+
type: "button",
|
|
135
|
+
onClick: handleManualSubmit,
|
|
136
|
+
className: cn(
|
|
137
|
+
"inline-flex h-7 items-center rounded-md border bg-secondary px-2.5 text-xs font-medium",
|
|
138
|
+
"text-secondary-foreground transition-colors hover:bg-secondary/80"
|
|
139
|
+
),
|
|
140
|
+
children: "Set"
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] })
|
|
144
|
+
] })
|
|
145
|
+
] })
|
|
146
|
+
] })
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
] });
|
|
150
|
+
}
|
|
151
|
+
export {
|
|
152
|
+
IconPickerField
|
|
153
|
+
};
|
|
@@ -8,7 +8,7 @@ export { CompoundForm, type CompoundFormProps, formMethods, type FormMethods } f
|
|
|
8
8
|
export { CompoundImage, type CompoundImageProps } from "./image";
|
|
9
9
|
export { CompoundArticleCard, type CompoundArticleCardProps } from "./article-card";
|
|
10
10
|
export { ImageUploadField } from "./image-upload-field";
|
|
11
|
-
export { ActionField } from "./fields/action-field";
|
|
11
|
+
export { ActionField, ACTION_TYPE_FIELD_MAP, ACTION_TYPE_OPTIONS, PageActionFields, ExternalActionFields, EmailActionFields, PhoneActionFields, SectionActionFields, DownloadActionFields, type ActionTypeFieldProps, } from "./fields/action-field";
|
|
12
12
|
export { ErrorBoundary } from "./error-boundary";
|
|
13
13
|
export { GradientText, type GradientTextProps } from "./gradient-text";
|
|
14
14
|
export { InlineEditable } from "./inline-editable";
|
|
@@ -14,7 +14,7 @@ const conf = {
|
|
|
14
14
|
styles: bannerStylesField
|
|
15
15
|
},
|
|
16
16
|
defaultProps: {
|
|
17
|
-
items: [{ text: "
|
|
17
|
+
items: [{ text: "Introducing v2.0 — Faster builds, smarter deploys, and a brand new editor." }],
|
|
18
18
|
linkLabel: "Learn more",
|
|
19
19
|
linkUrl: "#",
|
|
20
20
|
styles: {
|
|
@@ -31,10 +31,12 @@ const conf = {
|
|
|
31
31
|
},
|
|
32
32
|
defaultProps: {
|
|
33
33
|
items: [
|
|
34
|
-
{ text: "
|
|
35
|
-
{ text: "
|
|
36
|
-
{ text: "
|
|
37
|
-
{ text: "
|
|
34
|
+
{ text: "10,000+ Teams" },
|
|
35
|
+
{ text: "99.99% Uptime" },
|
|
36
|
+
{ text: "50M+ Deploys" },
|
|
37
|
+
{ text: "4.9★ Rating" },
|
|
38
|
+
{ text: "SOC 2 Certified" },
|
|
39
|
+
{ text: "24/7 Support" }
|
|
38
40
|
],
|
|
39
41
|
styles: {
|
|
40
42
|
...createStylesDefaults(),
|
|
@@ -84,16 +84,26 @@ const conf = {
|
|
|
84
84
|
url: "",
|
|
85
85
|
variant: "default"
|
|
86
86
|
},
|
|
87
|
-
heading: "
|
|
88
|
-
description: "
|
|
87
|
+
heading: "Get in Touch",
|
|
88
|
+
description: "Have a question or need a demo? We'd love to hear from you.",
|
|
89
89
|
buttons: [],
|
|
90
|
-
features: [
|
|
91
|
-
|
|
90
|
+
features: [
|
|
91
|
+
{
|
|
92
92
|
icon: "check",
|
|
93
|
-
name:
|
|
94
|
-
description: "
|
|
95
|
-
}
|
|
96
|
-
|
|
93
|
+
name: "Easy to use",
|
|
94
|
+
description: "Intuitive interface that requires no training."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
icon: "check",
|
|
98
|
+
name: "Fast and reliable",
|
|
99
|
+
description: "99.9% uptime with sub-second response times."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
icon: "check",
|
|
103
|
+
name: "Beautiful and modern",
|
|
104
|
+
description: "Clean, developer-friendly design built with modern standards."
|
|
105
|
+
}
|
|
106
|
+
],
|
|
97
107
|
fields: [
|
|
98
108
|
{ label: "Name", name: "name", type: "text", required: true },
|
|
99
109
|
{ label: "Email", name: "email", type: "email", required: true },
|
|
@@ -28,7 +28,7 @@ const ContactUs2 = ({
|
|
|
28
28
|
email: ((_b = fields.find((field) => field.name === "email")) == null ? void 0 : _b.label) ?? "Email Address",
|
|
29
29
|
phone: ((_c = fields.find((field) => field.name === "phone")) == null ? void 0 : _c.label) ?? "Phone",
|
|
30
30
|
company: ((_d = fields.find((field) => field.name === "company")) == null ? void 0 : _d.label) ?? "Company",
|
|
31
|
-
message: ((_e = fields.find((field) => field.name === "message")) == null ? void 0 : _e.label) ?? "Tell us about your
|
|
31
|
+
message: ((_e = fields.find((field) => field.name === "message")) == null ? void 0 : _e.label) ?? "Tell us about your project"
|
|
32
32
|
};
|
|
33
33
|
const imagePosition = (styles == null ? void 0 : styles.imagePosition) ?? "end";
|
|
34
34
|
const { isEditor: isEditorMode, siteId, domain } = useEditorContext();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { image, icon } from "../../../puck-base/core/fields.js";
|
|
2
2
|
import { ContactUs2 } from "./contact-us-2.js";
|
|
3
3
|
import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
|
|
4
4
|
const contactUs2StylesField = createStylesField({
|
|
@@ -48,20 +48,20 @@ const conf = {
|
|
|
48
48
|
styles: contactUs2StylesField
|
|
49
49
|
},
|
|
50
50
|
defaultProps: {
|
|
51
|
-
heading: "
|
|
52
|
-
description: "Tell us about your
|
|
51
|
+
heading: "Let's talk about your project",
|
|
52
|
+
description: "Tell us about your needs and our team will get back to you within 24 hours.",
|
|
53
53
|
fields: [
|
|
54
|
-
{ label: "
|
|
55
|
-
{ label: "Email
|
|
54
|
+
{ label: "Name", name: "name" },
|
|
55
|
+
{ label: "Email", name: "email" },
|
|
56
56
|
{ label: "Phone", name: "phone" },
|
|
57
57
|
{ label: "Company", name: "company" },
|
|
58
|
-
{ label: "Tell us about your
|
|
58
|
+
{ label: "Tell us about your project", name: "message" }
|
|
59
59
|
],
|
|
60
60
|
submitLabel: "Send Message",
|
|
61
61
|
submitVariant: "default",
|
|
62
62
|
submitSize: "default",
|
|
63
63
|
submitIcon: "none",
|
|
64
|
-
image:
|
|
64
|
+
image: { src: "https://images.pexels.com/photos/3888151/pexels-photo-3888151.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Modern developer workspace with laptop displaying code" },
|
|
65
65
|
styles: {
|
|
66
66
|
...createStylesDefaults(),
|
|
67
67
|
imagePosition: "end"
|
|
@@ -87,8 +87,8 @@ const conf = {
|
|
|
87
87
|
styles: contactUs3StylesField
|
|
88
88
|
},
|
|
89
89
|
defaultProps: {
|
|
90
|
-
heading: "
|
|
91
|
-
description: "
|
|
90
|
+
heading: "Contact our team",
|
|
91
|
+
description: "We're here to help. Reach out and we'll respond as soon as we can.",
|
|
92
92
|
infoItems: defaultInfoItems,
|
|
93
93
|
fields: [
|
|
94
94
|
{ label: "Full Name", name: "name" },
|
|
@@ -18,11 +18,11 @@ const conf = {
|
|
|
18
18
|
styles: bannerCtaStylesField
|
|
19
19
|
},
|
|
20
20
|
defaultProps: {
|
|
21
|
-
heading: "
|
|
22
|
-
description: "
|
|
21
|
+
heading: "Start building for free today",
|
|
22
|
+
description: "No credit card required. Free plan includes unlimited projects.",
|
|
23
23
|
buttons: [
|
|
24
|
-
{ label: "
|
|
25
|
-
{ label: "
|
|
24
|
+
{ label: "Sign Up Free", variant: "secondary" },
|
|
25
|
+
{ label: "Contact Sales", variant: "outline" }
|
|
26
26
|
],
|
|
27
27
|
styles: {
|
|
28
28
|
...createStylesDefaults(),
|
|
@@ -15,23 +15,23 @@ const conf = {
|
|
|
15
15
|
styles: createStylesField()
|
|
16
16
|
},
|
|
17
17
|
defaultProps: {
|
|
18
|
-
heading: "
|
|
19
|
-
description: "
|
|
18
|
+
heading: "Ready to build something great?",
|
|
19
|
+
description: "Join thousands of teams already shipping faster. Start free — no credit card required.",
|
|
20
20
|
badge: {
|
|
21
|
-
label: "
|
|
22
|
-
url: "
|
|
21
|
+
label: "Get Started",
|
|
22
|
+
url: "",
|
|
23
23
|
variant: "default"
|
|
24
24
|
},
|
|
25
25
|
buttons: [
|
|
26
26
|
{
|
|
27
|
-
label: "
|
|
28
|
-
icon: "
|
|
29
|
-
variant: "
|
|
27
|
+
label: "Start Free Trial",
|
|
28
|
+
icon: "move-right",
|
|
29
|
+
variant: "default"
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
|
-
label: "
|
|
32
|
+
label: "Talk to Sales",
|
|
33
33
|
icon: "move-right",
|
|
34
|
-
variant: "
|
|
34
|
+
variant: "outline"
|
|
35
35
|
}
|
|
36
36
|
],
|
|
37
37
|
layout: "contained",
|
|
@@ -35,10 +35,10 @@ const conf = {
|
|
|
35
35
|
styles: gradientCtaStylesField
|
|
36
36
|
},
|
|
37
37
|
defaultProps: {
|
|
38
|
-
heading: "
|
|
39
|
-
description: "
|
|
38
|
+
heading: "Ship your next project faster",
|
|
39
|
+
description: "Everything you need to go from idea to production.",
|
|
40
40
|
buttons: [
|
|
41
|
-
{ label: "
|
|
41
|
+
{ label: "Get Started Free", icon: "move-right", variant: "default" }
|
|
42
42
|
],
|
|
43
43
|
styles: {
|
|
44
44
|
...createStylesDefaults(),
|
|
@@ -18,7 +18,7 @@ const conf = {
|
|
|
18
18
|
},
|
|
19
19
|
defaultProps: {
|
|
20
20
|
heading: "Stay in the loop",
|
|
21
|
-
description: "Get
|
|
21
|
+
description: "Get product updates, engineering insights, and tips delivered to your inbox.",
|
|
22
22
|
buttons: [{ label: "Subscribe" }],
|
|
23
23
|
placeholder: "Enter your email",
|
|
24
24
|
styles: createStylesDefaults()
|
|
@@ -20,16 +20,16 @@ const conf = {
|
|
|
20
20
|
styles: createStylesField()
|
|
21
21
|
},
|
|
22
22
|
defaultProps: {
|
|
23
|
-
heading: "
|
|
24
|
-
description: "
|
|
23
|
+
heading: "Limited Time — 3 Months Free on Pro",
|
|
24
|
+
description: "Upgrade to Pro and unlock advanced features, priority support, and unlimited collaborators.",
|
|
25
25
|
image: {
|
|
26
|
-
src: "https://
|
|
27
|
-
alt: "
|
|
26
|
+
src: "https://images.pexels.com/photos/4218883/pexels-photo-4218883.jpeg?auto=compress&cs=tinysrgb&w=1200",
|
|
27
|
+
alt: "Developer workspace with computer displaying code interface"
|
|
28
28
|
},
|
|
29
29
|
imagePosition: "right",
|
|
30
30
|
buttons: [
|
|
31
31
|
{
|
|
32
|
-
label: "
|
|
32
|
+
label: "Claim Offer",
|
|
33
33
|
variant: "default",
|
|
34
34
|
size: "lg",
|
|
35
35
|
icon: "none"
|
|
@@ -19,15 +19,19 @@ const conf = {
|
|
|
19
19
|
items: [
|
|
20
20
|
{
|
|
21
21
|
title: "How do I get started?",
|
|
22
|
-
content: "Sign up for a free account and follow the onboarding guide."
|
|
22
|
+
content: "Sign up for a free account, connect your repository, and follow the onboarding guide. Most teams are up and running in under 5 minutes."
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
title: "What pricing plans are available?",
|
|
26
|
-
content: "We offer Free, Pro, and Enterprise plans."
|
|
26
|
+
content: "We offer Free, Pro, and Enterprise plans. The free plan includes unlimited projects with basic features. Pro adds team collaboration, and Enterprise includes custom integrations and dedicated support."
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
title: "Can I cancel anytime?",
|
|
30
|
-
content: "
|
|
30
|
+
content: "Absolutely. No contracts, no cancellation fees. You can downgrade or cancel your subscription at any time from your account settings."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: "Do you offer integrations?",
|
|
34
|
+
content: "Yes — we integrate with GitHub, GitLab, Slack, Jira, Linear, and 50+ other tools out of the box. Enterprise plans also support custom integrations."
|
|
31
35
|
}
|
|
32
36
|
],
|
|
33
37
|
styles: createStylesDefaults()
|
|
@@ -53,8 +53,8 @@ const conf = {
|
|
|
53
53
|
url: "",
|
|
54
54
|
variant: "secondary"
|
|
55
55
|
},
|
|
56
|
-
heading: "
|
|
57
|
-
description: "
|
|
56
|
+
heading: "Frequently asked questions",
|
|
57
|
+
description: "Everything you need to know about getting started.",
|
|
58
58
|
buttons: [
|
|
59
59
|
{
|
|
60
60
|
label: "Find out more",
|
|
@@ -66,8 +66,20 @@ const conf = {
|
|
|
66
66
|
collapsible: true,
|
|
67
67
|
items: [
|
|
68
68
|
{
|
|
69
|
-
question: "
|
|
70
|
-
answer: "
|
|
69
|
+
question: "Is there a free plan?",
|
|
70
|
+
answer: "Yes! Our free plan includes unlimited projects and basic features. No credit card required."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: "Can I cancel anytime?",
|
|
74
|
+
answer: "Absolutely. No contracts, no cancellation fees. You can downgrade or cancel at any time."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
question: "Do you offer team plans?",
|
|
78
|
+
answer: "Yes, our Pro plan supports unlimited team members with role-based permissions and collaboration features."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
question: "Is my data secure?",
|
|
82
|
+
answer: "We use enterprise-grade encryption, SOC 2 compliance, and regular security audits to keep your data safe."
|
|
71
83
|
}
|
|
72
84
|
],
|
|
73
85
|
layout: "two-col",
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { image } from "../../../puck-base/core/fields.js";
|
|
2
2
|
import { Faq2 } from "./faq-2.js";
|
|
3
3
|
import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
|
|
4
4
|
const defaultItems = [
|
|
5
5
|
{
|
|
6
|
-
question: "
|
|
7
|
-
answer: "
|
|
6
|
+
question: "How long does setup take?",
|
|
7
|
+
answer: "Most teams are up and running in under 5 minutes. Just connect your repo and you're good to go."
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
|
-
question: "
|
|
11
|
-
answer: "
|
|
10
|
+
question: "Do you integrate with my existing tools?",
|
|
11
|
+
answer: "Yes — we integrate with GitHub, GitLab, Slack, Jira, Linear, and 50+ other tools out of the box."
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
question: "
|
|
15
|
-
answer: "
|
|
14
|
+
question: "What kind of support do you offer?",
|
|
15
|
+
answer: "Free plans get community support. Pro and Enterprise plans include priority email and live chat support."
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
|
-
question: "
|
|
19
|
-
answer: "
|
|
18
|
+
question: "Can I migrate from another platform?",
|
|
19
|
+
answer: "We offer free migration assistance for teams on Pro and Enterprise plans. Most migrations take less than a day."
|
|
20
20
|
}
|
|
21
21
|
];
|
|
22
22
|
const conf = {
|
|
@@ -48,9 +48,9 @@ const conf = {
|
|
|
48
48
|
styles: createStylesField()
|
|
49
49
|
},
|
|
50
50
|
defaultProps: {
|
|
51
|
-
heading: "
|
|
51
|
+
heading: "Common questions about getting started",
|
|
52
52
|
items: defaultItems,
|
|
53
|
-
image:
|
|
53
|
+
image: { src: "https://images.pexels.com/photos/3183150/pexels-photo-3183150.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Tech team collaborating at a modern office workspace" },
|
|
54
54
|
imagePosition: "right",
|
|
55
55
|
styles: createStylesDefaults()
|
|
56
56
|
},
|
|
@@ -23,7 +23,13 @@ const Bento = ({
|
|
|
23
23
|
spacing: "tight"
|
|
24
24
|
}
|
|
25
25
|
),
|
|
26
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
26
|
+
/* @__PURE__ */ jsx("div", { className: cn(
|
|
27
|
+
"grid gap-8",
|
|
28
|
+
cards.length === 1 && "grid-cols-1",
|
|
29
|
+
cards.length === 2 && "grid-cols-1 sm:grid-cols-2",
|
|
30
|
+
cards.length === 3 && "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
31
|
+
cards.length >= 4 && "grid-cols-1 grid-rows-2 sm:grid-cols-2 lg:grid-cols-3"
|
|
32
|
+
), children: cards == null ? void 0 : cards.map((card, index) => /* @__PURE__ */ jsx(
|
|
27
33
|
CompoundCard,
|
|
28
34
|
{
|
|
29
35
|
image: card.image,
|
|
@@ -31,12 +37,15 @@ const Bento = ({
|
|
|
31
37
|
heading: card.heading,
|
|
32
38
|
description: card.description,
|
|
33
39
|
button: card.button,
|
|
34
|
-
className: cn(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
className: cn(
|
|
41
|
+
cards.length >= 4 && {
|
|
42
|
+
"[grid-area:1/1/2/3]": index === 0,
|
|
43
|
+
"aspect-square [grid-area:1/3/2/4]": index === 1,
|
|
44
|
+
"aspect-square [grid-area:2/1/3/2]": index === 2,
|
|
45
|
+
"[grid-area:2/2/3/4]": index === 3
|
|
46
|
+
},
|
|
47
|
+
cards.length === 3 && index === 0 && "sm:col-span-2 lg:col-span-1"
|
|
48
|
+
)
|
|
40
49
|
},
|
|
41
50
|
index
|
|
42
51
|
)) })
|
|
@@ -17,13 +17,26 @@ const conf = {
|
|
|
17
17
|
url: "",
|
|
18
18
|
variant: "default"
|
|
19
19
|
},
|
|
20
|
-
heading: "
|
|
21
|
-
description: "
|
|
20
|
+
heading: "Everything you need to ship faster",
|
|
21
|
+
description: "Powerful features designed for modern teams.",
|
|
22
22
|
buttons: [],
|
|
23
|
-
cards:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
cards: [
|
|
24
|
+
{
|
|
25
|
+
...cards.defaultItemProps,
|
|
26
|
+
heading: "Real-time Collaboration",
|
|
27
|
+
description: "Edit together with your team — no conflicts, no waiting."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
...cards.defaultItemProps,
|
|
31
|
+
heading: "Smart Automation",
|
|
32
|
+
description: "Automate repetitive tasks and focus on what matters."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
...cards.defaultItemProps,
|
|
36
|
+
heading: "Built-in Analytics",
|
|
37
|
+
description: "Track performance with dashboards that update in real time."
|
|
38
|
+
}
|
|
39
|
+
],
|
|
27
40
|
styles: createStylesDefaults()
|
|
28
41
|
},
|
|
29
42
|
render: Bento
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { button, image, contentFields } from "../../../puck-base/core/fields.js";
|
|
2
2
|
import { FeatureCards } from "./feature-cards.js";
|
|
3
3
|
import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
|
|
4
4
|
const conf = {
|
|
@@ -23,6 +23,7 @@ const conf = {
|
|
|
23
23
|
},
|
|
24
24
|
cards: {
|
|
25
25
|
type: "array",
|
|
26
|
+
max: 9,
|
|
26
27
|
getItemSummary: (item, index = 0) => item.heading || `Card ${index + 1}`,
|
|
27
28
|
arrayFields: {
|
|
28
29
|
image,
|
|
@@ -31,9 +32,9 @@ const conf = {
|
|
|
31
32
|
button
|
|
32
33
|
},
|
|
33
34
|
defaultItemProps: {
|
|
34
|
-
image:
|
|
35
|
-
heading: "
|
|
36
|
-
description: "
|
|
35
|
+
image: { src: "https://images.pexels.com/photos/546819/pexels-photo-546819.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Developer screen showing lines of code with syntax highlighting" },
|
|
36
|
+
heading: "Feature highlight",
|
|
37
|
+
description: "A brief explanation of this feature and why it matters.",
|
|
37
38
|
button: {
|
|
38
39
|
label: "",
|
|
39
40
|
variant: "link",
|
|
@@ -45,10 +46,10 @@ const conf = {
|
|
|
45
46
|
styles: createStylesField()
|
|
46
47
|
},
|
|
47
48
|
defaultProps: {
|
|
48
|
-
heading: "
|
|
49
|
-
description: "
|
|
49
|
+
heading: "Why teams choose us",
|
|
50
|
+
description: "Simple tools that solve complex problems — so you can focus on building great products.",
|
|
50
51
|
badge: {
|
|
51
|
-
label: "
|
|
52
|
+
label: "Features",
|
|
52
53
|
url: "",
|
|
53
54
|
variant: "default"
|
|
54
55
|
},
|
|
@@ -57,9 +58,9 @@ const conf = {
|
|
|
57
58
|
columns: 3,
|
|
58
59
|
cards: [
|
|
59
60
|
{
|
|
60
|
-
image:
|
|
61
|
-
heading: "
|
|
62
|
-
description: "
|
|
61
|
+
image: { src: "https://images.pexels.com/photos/546819/pexels-photo-546819.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Developer screen showing lines of code with syntax highlighting" },
|
|
62
|
+
heading: "Lightning-fast deploys",
|
|
63
|
+
description: "Push to production in seconds with zero-downtime deployments.",
|
|
63
64
|
button: {
|
|
64
65
|
label: "",
|
|
65
66
|
variant: "link",
|