dune-react 0.0.11 → 0.0.12

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 (77) hide show
  1. package/dist/components/puck-base/core/fields.d.ts +25 -96
  2. package/dist/components/puck-base/core/fields.js +4 -10
  3. package/dist/components/puck-base/core/icon-catalog.d.ts +14 -0
  4. package/dist/components/puck-base/core/icon-catalog.js +193 -0
  5. package/dist/components/puck-base/fields/action-field.d.ts +23 -1
  6. package/dist/components/puck-base/fields/action-field.js +174 -130
  7. package/dist/components/puck-base/gradient-text.js +1 -1
  8. package/dist/components/puck-base/icon-picker-field.d.ts +8 -0
  9. package/dist/components/puck-base/icon-picker-field.js +153 -0
  10. package/dist/components/puck-base/index.d.ts +1 -1
  11. package/dist/components/puck-block/banner-sections/announcement-banner-1/index.js +1 -1
  12. package/dist/components/puck-block/banner-sections/marquee-1/index.js +6 -4
  13. package/dist/components/puck-block/contact-sections/contact-us-1/index.js +18 -8
  14. package/dist/components/puck-block/contact-sections/contact-us-2/contact-us-2.js +1 -1
  15. package/dist/components/puck-block/contact-sections/contact-us-2/index.js +7 -7
  16. package/dist/components/puck-block/contact-sections/contact-us-3/index.js +2 -2
  17. package/dist/components/puck-block/cta-sections/banner-cta-1/index.js +4 -4
  18. package/dist/components/puck-block/cta-sections/cta-1/index.js +9 -9
  19. package/dist/components/puck-block/cta-sections/gradient-cta-1/index.js +3 -3
  20. package/dist/components/puck-block/cta-sections/newsletter-signup-1/index.js +1 -1
  21. package/dist/components/puck-block/cta-sections/promo-section-1/index.js +5 -5
  22. package/dist/components/puck-block/faq-sections/accordion-1/index.js +7 -3
  23. package/dist/components/puck-block/faq-sections/faq-1/index.js +16 -4
  24. package/dist/components/puck-block/faq-sections/faq-2/index.js +11 -11
  25. package/dist/components/puck-block/feature-sections/bento-1/bento.js +16 -7
  26. package/dist/components/puck-block/feature-sections/bento-1/index.js +19 -6
  27. package/dist/components/puck-block/feature-sections/feature-cards-1/index.js +11 -10
  28. package/dist/components/puck-block/feature-sections/feature-showcase-1/index.js +10 -10
  29. package/dist/components/puck-block/feature-sections/icon-grid-1/index.js +13 -18
  30. package/dist/components/puck-block/feature-sections/product-features-1/index.js +18 -23
  31. package/dist/components/puck-block/footer-sections/footer-1/index.js +17 -22
  32. package/dist/components/puck-block/gallery-sections/gallery-1/index.js +12 -8
  33. package/dist/components/puck-block/gallery-sections/gallery-2/index.js +10 -9
  34. package/dist/components/puck-block/gallery-sections/gallery-3/index.js +17 -14
  35. package/dist/components/puck-block/header-sections/header-1/index.js +56 -40
  36. package/dist/components/puck-block/header-sections/sticky-nav-1/index.js +4 -3
  37. package/dist/components/puck-block/hero-sections/fullscreen-hero-1/index.js +4 -3
  38. package/dist/components/puck-block/hero-sections/gradient-hero-1/index.js +4 -4
  39. package/dist/components/puck-block/hero-sections/grid-hero-1/index.js +8 -8
  40. package/dist/components/puck-block/hero-sections/hero-1/index.js +16 -12
  41. package/dist/components/puck-block/hero-sections/image-hero-1/index.js +2 -2
  42. package/dist/components/puck-block/hero-sections/split-hero-1/index.js +7 -7
  43. package/dist/components/puck-block/hero-sections/video-hero-1/index.js +5 -5
  44. package/dist/components/puck-block/location-sections/location-1/index.js +4 -4
  45. package/dist/components/puck-block/location-sections/location-1/location.js +1 -1
  46. package/dist/components/puck-block/location-sections/location-2/index.js +4 -4
  47. package/dist/components/puck-block/location-sections/location-2/location.js +1 -1
  48. package/dist/components/puck-block/location-sections/location-3/index.js +15 -14
  49. package/dist/components/puck-block/location-sections/location-3/location.d.ts +1 -0
  50. package/dist/components/puck-block/location-sections/location-3/location.js +2 -2
  51. package/dist/components/puck-block/metrics-sections/stats-1/index.js +13 -13
  52. package/dist/components/puck-block/metrics-sections/stats-2/index.js +8 -8
  53. package/dist/components/puck-block/metrics-sections/stats-3/index.js +13 -13
  54. package/dist/components/puck-block/pricing-sections/comparison-1/index.js +2 -2
  55. package/dist/components/puck-block/pricing-sections/pricing-1/index.js +39 -19
  56. package/dist/components/puck-block/pricing-sections/pricing-2/index.js +30 -30
  57. package/dist/components/puck-block/showcase-sections/before-after-1/index.js +12 -12
  58. package/dist/components/puck-block/showcase-sections/case-study-1/index.js +7 -7
  59. package/dist/components/puck-block/showcase-sections/step-by-step-1/index.js +8 -8
  60. package/dist/components/puck-block/team-sections/team-grid-1/index.js +9 -9
  61. package/dist/components/puck-block/team-sections/team-grid-2/index.js +12 -12
  62. package/dist/components/puck-block/team-sections/team-profiles-1/index.js +11 -9
  63. package/dist/components/puck-block/testimonial-sections/customers-1/index.js +18 -7
  64. package/dist/components/puck-block/testimonial-sections/logo-marquee-1/index.js +1 -1
  65. package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.js +7 -7
  66. package/dist/components/puck-block/testimonial-sections/review-section-1/index.js +27 -12
  67. package/dist/components/puck-block/testimonial-sections/testimonials-1/index.js +17 -7
  68. package/dist/components/puck-block/text-sections/articles-1/index.js +11 -6
  69. package/dist/components/puck-block/text-sections/content-section-1/index.js +6 -6
  70. package/dist/components/puck-block/text-sections/rich-text-1/index.js +1 -1
  71. package/dist/components/puck-block/text-sections/rich-text-1/rich-text.js +6 -1
  72. package/dist/components/puck-block/text-sections/tab-section-1/index.js +12 -12
  73. package/dist/components/puck-block/text-sections/timeline-1/index.js +17 -7
  74. package/dist/components/puck-block/text-sections/two-column-1/index.js +10 -10
  75. package/dist/index.js +9 -1
  76. package/dist/node_modules/.pnpm/lucide-react@0.540.0_react@19.2.4/node_modules/lucide-react/dist/esm/DynamicIcon.js +1 -3
  77. package/package.json +2 -1
@@ -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: "New: Check out our latest update" }],
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: "Innovation" },
35
- { text: "Design" },
36
- { text: "Performance" },
37
- { text: "Quality" }
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: "Something new",
88
- description: "Managing a small business today is already tough. Avoid further complications by ditching outdated, tedious trade methods.",
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: ["Easy to use", "Fast and reliable", "Beautiful and modern"].map(
91
- (feature) => ({
90
+ features: [
91
+ {
92
92
  icon: "check",
93
- name: feature,
94
- description: "We've made it easy to use and understand."
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 fitness goals"
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 { image1x1Placeholder, image, icon } from "../../../puck-base/core/fields.js";
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: "Ready to transform your fitness?",
52
- description: "Tell us about your goals and we'll reach out within 24 hours to schedule your first session.",
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: "Your Name", name: "name" },
55
- { label: "Email Address", name: "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 fitness goals", name: "message" }
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: image1x1Placeholder,
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: "Let's start a\nconversation",
91
- description: "Have a question or ready to get started? Fill out the form and we'll get back to you within 24 hours.",
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: "Ready to transform your workflow?",
22
- description: "Join thousands of teams already using our platform to ship faster and smarter.",
21
+ heading: "Start building for free today",
22
+ description: "No credit card required. Free plan includes unlimited projects.",
23
23
  buttons: [
24
- { label: "Get started free", variant: "secondary" },
25
- { label: "Talk to sales", variant: "outline" }
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: "Try our platform today!",
19
- description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
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: "FAQ",
22
- url: "/faq",
21
+ label: "Get Started",
22
+ url: "",
23
23
  variant: "default"
24
24
  },
25
25
  buttons: [
26
26
  {
27
- label: "Jump on a call",
28
- icon: "phone-call",
29
- variant: "outline"
27
+ label: "Start Free Trial",
28
+ icon: "move-right",
29
+ variant: "default"
30
30
  },
31
31
  {
32
- label: "Sign up here",
32
+ label: "Talk to Sales",
33
33
  icon: "move-right",
34
- variant: "default"
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: "Ready to get started?",
39
- description: "Join thousands of teams already using our platform.",
38
+ heading: "Ship your next project faster",
39
+ description: "Everything you need to go from idea to production.",
40
40
  buttons: [
41
- { label: "Start Free Trial", icon: "move-right", variant: "default" }
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 the latest updates delivered to your inbox.",
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: "Summer SaleUp to 50% Off",
24
- description: "Don't miss our biggest sale of the year. Shop now and save on your favorite items.",
23
+ heading: "Limited Time3 Months Free on Pro",
24
+ description: "Upgrade to Pro and unlock advanced features, priority support, and unlimited collaborators.",
25
25
  image: {
26
- src: "https://picsum.photos/seed/Promo%20Image/800/600",
27
- alt: "Promotional image"
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: "Shop Now",
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: "Yes, you can cancel your subscription at any time."
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: "Heading",
57
- description: "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: "Question",
70
- answer: "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 { image1x1Placeholder, image } from "../../../puck-base/core/fields.js";
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: "What's included in a session?",
7
- answer: "Each session includes a personalized warm-up, structured training tailored to your goals, form coaching, and a cool-down. You'll also receive guidance on next steps to keep progressing."
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: "How do I know if this is right for me?",
11
- answer: "If you have a goal whether it's losing weight, building strength, improving mobility, or just feeling better we can help. We offer a free consultation to assess your needs and build a plan."
10
+ question: "Do you integrate with my existing tools?",
11
+ answer: "Yeswe integrate with GitHub, GitLab, Slack, Jira, Linear, and 50+ other tools out of the box."
12
12
  },
13
13
  {
14
- question: "How often should I train to see results?",
15
- answer: "Most clients see meaningful results training 2–3 times per week. We'll work with your schedule and lifestyle to find the right frequency for your goals."
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: "Do you offer programs for specific goals?",
19
- answer: "Yes we tailor every program to your specific objectives, whether that's weight loss, muscle gain, athletic performance, or general wellness."
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: "Questions about getting started",
51
+ heading: "Common questions about getting started",
52
52
  items: defaultItems,
53
- image: image1x1Placeholder,
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: "grid grid-cols-1 grid-rows-2 gap-8 sm:grid-cols-2 lg:grid-cols-3", children: cards == null ? void 0 : cards.map((card, index) => /* @__PURE__ */ jsx(
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
- "[grid-area:1/1/2/3]": index === 0,
36
- "aspect-square [grid-area:1/3/2/4]": index === 1,
37
- "aspect-square [grid-area:2/1/3/2]": index === 2,
38
- "[grid-area:2/2/3/4]": index === 3
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: "Something new!",
21
- description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
20
+ heading: "Everything you need to ship faster",
21
+ description: "Powerful features designed for modern teams.",
22
22
  buttons: [],
23
- cards: Array.from({ length: 1 }).map((_, index) => ({
24
- ...cards.defaultItemProps,
25
- heading: `Card ${index + 1}`
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 { image16x9Placeholder, button, image, contentFields } from "../../../puck-base/core/fields.js";
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: image16x9Placeholder,
35
- heading: "Card heading",
36
- description: "Card description goes here.",
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: "Something new!",
49
- description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
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: "Platform",
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: image16x9Placeholder,
61
- heading: "Card 1",
62
- description: "Card description goes here.",
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",