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.
Files changed (84) 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/hero-1/index.js +16 -12
  40. package/dist/components/puck-block/hero-sections/image-hero-1/index.js +2 -2
  41. package/dist/components/puck-block/hero-sections/props.d.ts +1 -12
  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/index.d.ts +0 -1
  45. package/dist/components/puck-block/location-sections/location-1/index.js +4 -4
  46. package/dist/components/puck-block/location-sections/location-1/location.js +1 -1
  47. package/dist/components/puck-block/location-sections/location-2/index.js +4 -4
  48. package/dist/components/puck-block/location-sections/location-2/location.js +1 -1
  49. package/dist/components/puck-block/location-sections/location-3/index.js +15 -14
  50. package/dist/components/puck-block/location-sections/location-3/location.d.ts +1 -0
  51. package/dist/components/puck-block/location-sections/location-3/location.js +2 -2
  52. package/dist/components/puck-block/metrics-sections/stats-1/index.js +13 -13
  53. package/dist/components/puck-block/metrics-sections/stats-2/index.js +8 -8
  54. package/dist/components/puck-block/metrics-sections/stats-3/index.js +13 -13
  55. package/dist/components/puck-block/pricing-sections/comparison-1/index.js +2 -2
  56. package/dist/components/puck-block/pricing-sections/pricing-1/index.js +39 -19
  57. package/dist/components/puck-block/pricing-sections/pricing-2/index.js +30 -30
  58. package/dist/components/puck-block/showcase-sections/before-after-1/index.js +12 -12
  59. package/dist/components/puck-block/showcase-sections/case-study-1/index.js +7 -7
  60. package/dist/components/puck-block/showcase-sections/step-by-step-1/index.js +8 -8
  61. package/dist/components/puck-block/team-sections/team-grid-1/index.js +9 -9
  62. package/dist/components/puck-block/team-sections/team-grid-2/index.js +12 -12
  63. package/dist/components/puck-block/team-sections/team-profiles-1/index.js +11 -9
  64. package/dist/components/puck-block/testimonial-sections/customers-1/index.js +18 -7
  65. package/dist/components/puck-block/testimonial-sections/logo-marquee-1/index.js +1 -1
  66. package/dist/components/puck-block/testimonial-sections/logo-wall-1/index.js +7 -7
  67. package/dist/components/puck-block/testimonial-sections/review-section-1/index.js +27 -12
  68. package/dist/components/puck-block/testimonial-sections/testimonials-1/index.js +17 -7
  69. package/dist/components/puck-block/text-sections/articles-1/articles.d.ts +3 -2
  70. package/dist/components/puck-block/text-sections/articles-1/articles.js +6 -4
  71. package/dist/components/puck-block/text-sections/articles-1/index.js +46 -18
  72. package/dist/components/puck-block/text-sections/content-section-1/index.js +6 -6
  73. package/dist/components/puck-block/text-sections/rich-text-1/index.js +1 -1
  74. package/dist/components/puck-block/text-sections/rich-text-1/rich-text.js +6 -1
  75. package/dist/components/puck-block/text-sections/tab-section-1/index.js +12 -12
  76. package/dist/components/puck-block/text-sections/timeline-1/index.js +17 -7
  77. package/dist/components/puck-block/text-sections/two-column-1/index.js +10 -10
  78. package/dist/index.js +69 -63
  79. package/dist/node_modules/.pnpm/lucide-react@0.540.0_react@19.2.4/node_modules/lucide-react/dist/esm/DynamicIcon.js +1 -3
  80. package/package.json +2 -1
  81. package/dist/components/puck-block/hero-sections/grid-hero-1/grid-hero.d.ts +0 -26
  82. package/dist/components/puck-block/hero-sections/grid-hero-1/grid-hero.js +0 -125
  83. package/dist/components/puck-block/hero-sections/grid-hero-1/index.d.ts +0 -5
  84. package/dist/components/puck-block/hero-sections/grid-hero-1/index.js +0 -71
@@ -39,22 +39,22 @@ const conf = {
39
39
  },
40
40
  defaultProps: {
41
41
  eyebrow: "Why choose us",
42
- heading: "The old way vs. the better way",
43
- description: "See exactly what changes when you switch to a smarter solution.",
42
+ heading: "Before & After",
43
+ description: "See the difference our platform makes for development teams.",
44
44
  layout: "side-by-side",
45
- beforeLabel: "Without us",
45
+ beforeLabel: "Without our platform",
46
46
  beforeItems: [
47
- { text: "Hours wasted on manual data entry every week" },
48
- { text: "Siloed tools that don't talk to each other" },
49
- { text: "Guessing what your customers actually want" },
50
- { text: "Scaling requires hiring more people" }
47
+ { text: "Deployments take hours and break frequently" },
48
+ { text: "Manual infrastructure management and config drift" },
49
+ { text: "No visibility into build failures or performance" },
50
+ { text: "Scaling requires re-architecting from scratch" }
51
51
  ],
52
- afterLabel: "With us",
52
+ afterLabel: "With our platform",
53
53
  afterItems: [
54
- { text: "Data syncs automatically in real time" },
55
- { text: "All your tools connected in one place" },
56
- { text: "AI-powered insights at your fingertips" },
57
- { text: "Scale effortlessly with smart automation" }
54
+ { text: "One-click deploys that finish in seconds" },
55
+ { text: "Infrastructure as code with automatic drift detection" },
56
+ { text: "Real-time logs, metrics, and error tracking built in" },
57
+ { text: "Auto-scaling that handles traffic spikes seamlessly" }
58
58
  ],
59
59
  button: {
60
60
  label: "Get started free",
@@ -18,15 +18,15 @@ const conf = {
18
18
  styles: createStylesField()
19
19
  },
20
20
  defaultProps: {
21
- heading: "How Acme Corp grew 3x in 6 months",
22
- description: "Discover how our platform helped Acme Corp scale their operations.",
21
+ heading: "How Acme reduced deploy time by 80%",
22
+ description: "Learn how a fast-growing startup transformed their development workflow.",
23
23
  stats: [
24
- { value: "3x", label: "Revenue Growth" },
25
- { value: "60%", label: "Less Churn" },
26
- { value: "2M+", label: "Users Reached" }
24
+ { value: "80%", label: "Faster Deploys" },
25
+ { value: "3x", label: "Developer Productivity" },
26
+ { value: "99.9%", label: "Uptime" }
27
27
  ],
28
- quote: "This product changed everything for our team. We can't imagine going back.",
29
- author: "Jane Doe, CEO at Acme",
28
+ quote: "We went from weekly releases to deploying multiple times a day. It completely changed how we ship software.",
29
+ author: "Sarah Chen, CTO at Acme",
30
30
  styles: createStylesDefaults({ sectionStyle: "muted" })
31
31
  },
32
32
  render: CaseStudy
@@ -31,24 +31,24 @@ const conf = {
31
31
  styles: createStylesField()
32
32
  },
33
33
  defaultProps: {
34
- heading: "How it works",
35
- description: "Get started in three simple steps.",
34
+ heading: "Get started in 3 easy steps",
35
+ description: "Go from zero to production in minutes.",
36
36
  layout: "horizontal",
37
37
  steps: [
38
38
  {
39
39
  stepNumber: "1",
40
- title: "Sign up",
41
- description: "Create your account in seconds. No credit card required."
40
+ title: "Create your account",
41
+ description: "Sign up in seconds no credit card required."
42
42
  },
43
43
  {
44
44
  stepNumber: "2",
45
- title: "Connect your tools",
46
- description: "Integrate with the tools you already use."
45
+ title: "Connect your project",
46
+ description: "Import from GitHub, GitLab, or start from a template."
47
47
  },
48
48
  {
49
49
  stepNumber: "3",
50
- title: "Start building",
51
- description: "Launch your first project and see results immediately."
50
+ title: "Deploy to production",
51
+ description: "Push your code and go live with one click."
52
52
  }
53
53
  ],
54
54
  styles: createStylesDefaults()
@@ -5,10 +5,10 @@ const defaultMember = {
5
5
  name: "Jane Smith",
6
6
  role: "CEO & Co-founder",
7
7
  image: {
8
- src: "https://picsum.photos/seed/Team%20Member/600/600",
9
- alt: "Team member"
8
+ src: "https://images.pexels.com/photos/11156392/pexels-photo-11156392.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop",
9
+ alt: "Professional team member headshot"
10
10
  },
11
- bio: "Leading the team with 10+ years of experience in the industry."
11
+ bio: "Passionate about building products that make a real difference."
12
12
  };
13
13
  const conf = {
14
14
  fields: {
@@ -46,15 +46,15 @@ const conf = {
46
46
  styles: createStylesField()
47
47
  },
48
48
  defaultProps: {
49
- heading: "Meet Our Team",
50
- description: "The talented people behind our product.",
49
+ heading: "Meet the team behind the product",
50
+ description: "A small, focused team building tools for modern developers.",
51
51
  columns: 3,
52
52
  layout: "card",
53
53
  members: [
54
- { ...defaultMember, name: "Jane Smith", role: "CEO & Co-founder" },
55
- { ...defaultMember, name: "Alex Johnson", role: "CTO" },
56
- { ...defaultMember, name: "Sarah Williams", role: "Head of Design" },
57
- { ...defaultMember, name: "Michael Chen", role: "Lead Engineer" }
54
+ { ...defaultMember, name: "Emily Chen", role: "CEO & Co-founder", image: { src: "https://images.pexels.com/photos/11156392/pexels-photo-11156392.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Emily Chen" } },
55
+ { ...defaultMember, name: "Marcus Johnson", role: "CTO", image: { src: "https://images.pexels.com/photos/6942776/pexels-photo-6942776.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Marcus Johnson" } },
56
+ { ...defaultMember, name: "Sarah Kim", role: "Head of Design", image: { src: "https://images.pexels.com/photos/14587417/pexels-photo-14587417.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Sarah Kim" } },
57
+ { ...defaultMember, name: "David Park", role: "Lead Engineer", image: { src: "https://images.pexels.com/photos/749091/pexels-photo-749091.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "David Park" } }
58
58
  ],
59
59
  styles: createStylesDefaults()
60
60
  },
@@ -1,11 +1,11 @@
1
- import { image1x1Placeholder, image, buttons } from "../../../puck-base/core/fields.js";
1
+ import { image, buttons } from "../../../puck-base/core/fields.js";
2
2
  import { TeamGrid2 } from "./team-grid-2.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
4
  const defaultMember = {
5
5
  name: "Jane Smith",
6
- role: "Founder & Head Trainer",
7
- image: image1x1Placeholder,
8
- description: "Builds custom training programs tailored to your goals and fitness level. Direct feedback, real progress tracking, and support every step of the way."
6
+ role: "VP of Engineering",
7
+ image: { src: "https://images.pexels.com/photos/26150470/pexels-photo-26150470.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Team member" },
8
+ description: "Focused on building intuitive tools that help teams ship faster and more confidently."
9
9
  };
10
10
  const conf = {
11
11
  fields: {
@@ -27,18 +27,18 @@ const conf = {
27
27
  styles: createStylesField()
28
28
  },
29
29
  defaultProps: {
30
- heading: "Your personal\nfitness partner",
31
- description: "We're here to guide you toward your health goals with personalized training and real accountability. Every session is built around what works for you.",
30
+ heading: "The people\nbehind the platform",
31
+ description: "We're a distributed team of builders, designers, and problem-solvers passionate about developer experience.",
32
32
  buttons: [
33
33
  {
34
- label: "Get started",
34
+ label: "Join Our Team",
35
35
  action: { type: "external", pageUrl: "", externalUrl: "#", openInNewTab: "false", email: "", subject: "", phone: "", sectionId: "", downloadUrl: "" },
36
36
  variant: "default",
37
37
  size: "default",
38
38
  icon: "none"
39
39
  },
40
40
  {
41
- label: "Schedule a consultation",
41
+ label: "Learn More",
42
42
  action: { type: "external", pageUrl: "", externalUrl: "#", openInNewTab: "false", email: "", subject: "", phone: "", sectionId: "", downloadUrl: "" },
43
43
  variant: "secondary",
44
44
  size: "default",
@@ -46,10 +46,10 @@ const conf = {
46
46
  }
47
47
  ],
48
48
  members: [
49
- { ...defaultMember, name: "Jane Smith", role: "Founder & Head Trainer" },
50
- { ...defaultMember, name: "Alex Johnson", role: "Fitness Specialist" },
51
- { ...defaultMember, name: "Sarah Williams", role: "Strength Coach" },
52
- { ...defaultMember, name: "Michael Chen", role: "Nutrition Coach" }
49
+ { ...defaultMember, name: "Emily Chen", role: "CEO & Co-founder", image: { src: "https://images.pexels.com/photos/26150470/pexels-photo-26150470.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Emily Chen" } },
50
+ { ...defaultMember, name: "Marcus Johnson", role: "CTO", image: { src: "https://images.pexels.com/photos/28442318/pexels-photo-28442318.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Marcus Johnson" } },
51
+ { ...defaultMember, name: "Sarah Kim", role: "Head of Design", image: { src: "https://images.pexels.com/photos/3613388/pexels-photo-3613388.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Sarah Kim" } },
52
+ { ...defaultMember, name: "David Park", role: "Lead Engineer", image: { src: "https://images.pexels.com/photos/25651531/pexels-photo-25651531.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "David Park" } }
53
53
  ],
54
54
  styles: createStylesDefaults()
55
55
  },
@@ -1,11 +1,11 @@
1
- import { image1x1Placeholder, image } from "../../../puck-base/core/fields.js";
1
+ import { image } from "../../../puck-base/core/fields.js";
2
2
  import { TeamProfiles } from "./team-profiles.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
4
  const defaultMember = {
5
5
  name: "Jane Smith",
6
6
  role: "CEO & Co-founder",
7
- image: image1x1Placeholder,
8
- description: "Leads the team with a passion for innovation and a commitment to excellence.",
7
+ image: { src: "https://images.pexels.com/photos/7640741/pexels-photo-7640741.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Team member" },
8
+ description: "Building the future of developer tooling with a focus on simplicity and performance.",
9
9
  instagramUrl: "",
10
10
  linkedinUrl: ""
11
11
  };
@@ -30,18 +30,20 @@ const conf = {
30
30
  styles: createStylesField()
31
31
  },
32
32
  defaultProps: {
33
- heading: "Your Personal\ntraining partner",
34
- description: "Our team brings focused expertise and personalized coaching to help you reach your goals.",
33
+ heading: "Our\nLeadership Team",
34
+ description: "Experienced leaders driving innovation and growth.",
35
35
  members: [
36
36
  {
37
37
  ...defaultMember,
38
- name: "Jane Smith",
39
- role: "Founder & Head Coach"
38
+ name: "Emily Chen",
39
+ role: "CEO & Co-founder",
40
+ image: { src: "https://images.pexels.com/photos/7640741/pexels-photo-7640741.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Emily Chen" }
40
41
  },
41
42
  {
42
43
  ...defaultMember,
43
- name: "Alex Johnson",
44
- role: "Strength & Conditioning Coach"
44
+ name: "Marcus Johnson",
45
+ role: "CTO",
46
+ image: { src: "https://images.pexels.com/photos/26150470/pexels-photo-26150470.jpeg?auto=compress&cs=tinysrgb&w=600&h=600&fit=crop", alt: "Marcus Johnson" }
45
47
  }
46
48
  ],
47
49
  styles: createStylesDefaults()
@@ -1,4 +1,4 @@
1
- import { image1x1Placeholder, image, heading, getPlaceholderImageUrl } from "../../../puck-base/core/fields.js";
1
+ import { image, heading, getPlaceholderImageUrl } from "../../../puck-base/core/fields.js";
2
2
  import { Customers } from "./customers.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
4
  const customersStylesField = createStylesField({
@@ -24,18 +24,29 @@ const conf = {
24
24
  },
25
25
  defaultItemProps: {
26
26
  name: "Customer",
27
- image: image1x1Placeholder
27
+ image: { src: getPlaceholderImageUrl("200x200", "Customer"), alt: "Customer" }
28
28
  }
29
29
  },
30
30
  styles: customersStylesField
31
31
  },
32
32
  defaultProps: {
33
- heading: "Trusted by hundreds of businesses worldwide",
34
- items: Array.from({ length: 10 }).map((_, index) => ({
35
- name: `Customer ${index + 1}`,
33
+ heading: "Trusted by innovative companies worldwide",
34
+ items: [
35
+ "Acme",
36
+ "TechCorp",
37
+ "DataFlow",
38
+ "CloudNet",
39
+ "NexusAI",
40
+ "Veritas",
41
+ "Quantum",
42
+ "Synapse",
43
+ "Axiom",
44
+ "Helios"
45
+ ].map((name) => ({
46
+ name,
36
47
  image: {
37
- src: getPlaceholderImageUrl("1000x1000", `Customer ${index + 1}`),
38
- alt: ""
48
+ src: getPlaceholderImageUrl("200x200", name),
49
+ alt: name
39
50
  }
40
51
  })),
41
52
  styles: createStylesDefaults({ layout: "section" })
@@ -32,7 +32,7 @@ const conf = {
32
32
  styles: marqueeStylesField
33
33
  },
34
34
  defaultProps: {
35
- heading: "Trusted by industry leaders",
35
+ heading: "Trusted by leading teams",
36
36
  logos: [
37
37
  logoPlaceholder("Acme"),
38
38
  logoPlaceholder("TechCorp"),
@@ -33,14 +33,14 @@ const conf = {
33
33
  styles: logoWallStylesField
34
34
  },
35
35
  defaultProps: {
36
- heading: "Brands and tools we use",
37
- description: "We partner with industry-leading platforms and manufacturers to deliver the best experience.",
36
+ heading: "Used by 10,000+ companies",
37
+ description: "We partner with industry-leading platforms and technology providers to deliver the best experience.",
38
38
  logos: [
39
- logoPlaceholder("Partner 1"),
40
- logoPlaceholder("Partner 2"),
41
- logoPlaceholder("Partner 3"),
42
- logoPlaceholder("Partner 4"),
43
- logoPlaceholder("Partner 5")
39
+ logoPlaceholder("Acme"),
40
+ logoPlaceholder("TechCorp"),
41
+ logoPlaceholder("DataFlow"),
42
+ logoPlaceholder("CloudNet"),
43
+ logoPlaceholder("NexusAI")
44
44
  ],
45
45
  styles: createStylesDefaults({ columns: 5 })
46
46
  },
@@ -3,13 +3,13 @@ import { ReviewSection } from "./review-section.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
4
  const defaultReview = {
5
5
  author: "Alex Johnson",
6
- role: "Verified Buyer",
6
+ role: "Engineering Manager",
7
7
  avatar: {
8
- src: "https://picsum.photos/seed/AJ/200/200",
9
- alt: "Reviewer avatar"
8
+ src: "https://images.pexels.com/photos/1239291/pexels-photo-1239291.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop",
9
+ alt: "Professional headshot"
10
10
  },
11
11
  rating: 5,
12
- content: "Absolutely love this product! The quality exceeded my expectations and the customer service was fantastic.",
12
+ content: "Incredible tool that transformed our development workflow.",
13
13
  date: "2 days ago"
14
14
  };
15
15
  const reviewStylesField = createStylesField({
@@ -42,25 +42,40 @@ const conf = {
42
42
  styles: reviewStylesField
43
43
  },
44
44
  defaultProps: {
45
- heading: "What Our Customers Say",
45
+ heading: "What our customers say",
46
46
  items: [
47
47
  {
48
48
  ...defaultReview,
49
- author: "Alex Johnson",
49
+ author: "Alex Rivera",
50
+ role: "Engineering Lead",
51
+ avatar: {
52
+ src: "https://images.pexels.com/photos/2379004/pexels-photo-2379004.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop",
53
+ alt: "Alex Rivera"
54
+ },
50
55
  rating: 5,
51
- content: "Absolutely love this product! The quality exceeded my expectations."
56
+ content: "Incredible tool. Deployment time went from hours to minutes."
52
57
  },
53
58
  {
54
59
  ...defaultReview,
55
- author: "Sarah Miller",
56
- rating: 4,
57
- content: "Great product overall. Shipping was fast and packaging was excellent."
60
+ author: "Priya Sharma",
61
+ role: "Product Manager",
62
+ avatar: {
63
+ src: "https://images.pexels.com/photos/614810/pexels-photo-614810.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop",
64
+ alt: "Priya Sharma"
65
+ },
66
+ rating: 5,
67
+ content: "Finally a platform that developers and PMs both love. Clean UI, powerful features."
58
68
  },
59
69
  {
60
70
  ...defaultReview,
61
- author: "David Park",
71
+ author: "James Wilson",
72
+ role: "Startup Founder",
73
+ avatar: {
74
+ src: "https://images.pexels.com/photos/2182970/pexels-photo-2182970.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop",
75
+ alt: "James Wilson"
76
+ },
62
77
  rating: 5,
63
- content: "Best purchase I've made this year. Highly recommend to everyone!"
78
+ content: "Replaced three tools with this one. Worth every penny."
64
79
  }
65
80
  ],
66
81
  styles: createStylesDefaults({ layout: "grid" })
@@ -7,8 +7,8 @@ const defaultTestimonial = {
7
7
  author: {
8
8
  name: `Jane Janson`,
9
9
  image: {
10
- src: "https://github.com/shadcn.png",
11
- alt: ""
10
+ src: "https://images.pexels.com/photos/1239291/pexels-photo-1239291.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop",
11
+ alt: "Professional headshot"
12
12
  }
13
13
  }
14
14
  };
@@ -48,11 +48,21 @@ const conf = {
48
48
  styles: testimonialStylesField
49
49
  },
50
50
  defaultProps: {
51
- heading: "Trusted by hundreds of businesses worldwide",
52
- items: Array.from({ length: 5 }).map((_, index) => ({
53
- ...defaultTestimonial,
54
- title: `Best decision ${index}`
55
- })),
51
+ heading: "Loved by teams everywhere",
52
+ items: [
53
+ {
54
+ ...defaultTestimonial,
55
+ title: "Game changer",
56
+ quote: "This platform completely transformed how we ship products. We went from monthly releases to daily deploys.",
57
+ author: { name: "Alex Rivera, Engineering Lead at Acme", image: { src: "https://images.pexels.com/photos/2379004/pexels-photo-2379004.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop", alt: "Alex Rivera" } }
58
+ },
59
+ {
60
+ ...defaultTestimonial,
61
+ title: "Best tool we've adopted",
62
+ quote: "The best developer tool we've adopted in years. Our team productivity doubled within a month.",
63
+ author: { name: "Sarah Chen, CTO at Bloom", image: { src: "https://images.pexels.com/photos/614810/pexels-photo-614810.jpeg?auto=compress&cs=tinysrgb&w=150&h=150&fit=crop", alt: "Sarah Chen" } }
64
+ }
65
+ ],
56
66
  styles: createStylesDefaults({ layout: "cards" })
57
67
  },
58
68
  render: Testimonials
@@ -1,11 +1,12 @@
1
1
  import { CompoundContainerProps } from "@/components/puck-base/container";
2
2
  import { CompoundButtonProps } from "@/components/puck-base/button";
3
- import { PuckComponent, Slot } from "@puckeditor/core";
3
+ import { CompoundArticleCardProps } from "@/components/puck-base/article-card";
4
+ import { PuckComponent } from "@puckeditor/core";
4
5
  export interface ArticlesProps {
5
6
  eyebrow?: string;
6
7
  heading?: string;
7
8
  buttons?: CompoundButtonProps[];
8
- cards?: Slot;
9
+ cards?: CompoundArticleCardProps[];
9
10
  styles?: {
10
11
  padding?: CompoundContainerProps["padding"];
11
12
  sectionStyle?: CompoundContainerProps["sectionStyle"];
@@ -1,12 +1,13 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { CompoundContainer } from "../../../puck-base/container.js";
3
3
  import { CompoundButton } from "../../../puck-base/button.js";
4
+ import { CompoundArticleCard } from "../../../puck-base/article-card.js";
4
5
  import { cn } from "../../../../utils/css-utils.js";
5
6
  const Articles = ({
6
7
  eyebrow,
7
8
  heading,
8
9
  buttons,
9
- cards: Cards,
10
+ cards,
10
11
  styles
11
12
  }) => {
12
13
  var _a;
@@ -34,14 +35,15 @@ const Articles = ({
34
35
  }
35
36
  ) }) : null
36
37
  ] }),
37
- Cards && /* @__PURE__ */ jsx(
38
- Cards,
38
+ cards && cards.length > 0 && /* @__PURE__ */ jsx(
39
+ "div",
39
40
  {
40
41
  className: cn("grid grid-cols-1 gap-8", {
41
42
  "sm:grid-cols-2": columns === 2,
42
43
  "sm:grid-cols-2 lg:grid-cols-3": columns === 3,
43
44
  "sm:grid-cols-2 lg:grid-cols-4": columns === 4
44
- })
45
+ }),
46
+ children: cards.map((card, i) => /* @__PURE__ */ jsx(CompoundArticleCard, { ...card }, i))
45
47
  }
46
48
  )
47
49
  ]
@@ -1,19 +1,36 @@
1
- import { buttons, heading, image16x9Placeholder, cards } from "../../../puck-base/core/fields.js";
1
+ import { actionDefaults, button, description, heading, image, buttons } from "../../../puck-base/core/fields.js";
2
2
  import { Articles } from "./articles.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
- const { icon: defaultIcon, ...defaultCardProps } = cards.defaultItemProps;
5
- const defaultCard = {
6
- ...defaultCardProps,
7
- image: image16x9Placeholder
8
- };
9
4
  const conf = {
10
5
  fields: {
11
6
  eyebrow: { type: "text", contentEditable: true },
12
7
  heading,
13
8
  buttons,
14
9
  cards: {
15
- type: "slot",
16
- allow: ["ArticleCard"]
10
+ type: "array",
11
+ max: 6,
12
+ getItemSummary: (item, index = 0) => item.heading || `Card ${index + 1}`,
13
+ arrayFields: {
14
+ image,
15
+ heading,
16
+ description,
17
+ button
18
+ },
19
+ defaultItemProps: {
20
+ image: {
21
+ src: "https://images.pexels.com/photos/546819/pexels-photo-546819.jpeg?auto=compress&cs=tinysrgb&w=1200",
22
+ alt: "Code displayed on laptop screen"
23
+ },
24
+ heading: "Article heading",
25
+ description: "Article description goes here.",
26
+ button: {
27
+ label: "",
28
+ action: actionDefaults,
29
+ variant: "link",
30
+ size: "default",
31
+ icon: "move-right"
32
+ }
33
+ }
17
34
  },
18
35
  styles: createStylesField({
19
36
  columns: {
@@ -27,8 +44,8 @@ const conf = {
27
44
  })
28
45
  },
29
46
  defaultProps: {
30
- eyebrow: "Latest News",
31
- heading: "Stories worth reading",
47
+ eyebrow: "From Our Blog",
48
+ heading: "Insights for modern teams",
32
49
  buttons: [
33
50
  {
34
51
  label: "",
@@ -37,15 +54,26 @@ const conf = {
37
54
  icon: "none"
38
55
  }
39
56
  ],
40
- cards: Array.from({ length: 3 }).map((_, index) => ({
41
- type: "ArticleCard",
42
- props: {
43
- ...defaultCard,
44
- heading: `Article ${index + 1}`,
45
- description: "A short summary of this article goes here.",
46
- button: { label: "", variant: "link", size: "default", icon: "move-right" }
57
+ cards: [
58
+ {
59
+ image: { src: "https://images.pexels.com/photos/3861969/pexels-photo-3861969.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Developer working at desk with multiple monitors" },
60
+ heading: "How to Ship 10x Faster Without Burning Out",
61
+ description: "Practical strategies for high-velocity teams that prioritize sustainability.",
62
+ button: { label: "", action: actionDefaults, variant: "link", size: "default", icon: "move-right" }
63
+ },
64
+ {
65
+ image: { src: "https://images.pexels.com/photos/574071/pexels-photo-574071.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Colorful code on computer monitor in dark setting" },
66
+ heading: "The Future of Developer Tooling in 2026",
67
+ description: "An in-depth look at the trends shaping how developers build and deploy software.",
68
+ button: { label: "", action: actionDefaults, variant: "link", size: "default", icon: "move-right" }
69
+ },
70
+ {
71
+ image: { src: "https://images.pexels.com/photos/1181677/pexels-photo-1181677.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "Developers collaborating on code together" },
72
+ heading: "Building a Culture of Continuous Deployment",
73
+ description: "How top engineering orgs embed CI/CD into their team culture.",
74
+ button: { label: "", action: actionDefaults, variant: "link", size: "default", icon: "move-right" }
47
75
  }
48
- })),
76
+ ],
49
77
  styles: createStylesDefaults({ columns: 3 })
50
78
  },
51
79
  render: Articles
@@ -1,4 +1,4 @@
1
- import { image16x9Placeholder, buttons, image } from "../../../puck-base/core/fields.js";
1
+ import { buttons, image } from "../../../puck-base/core/fields.js";
2
2
  import { ContentSection } from "./content-section.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
4
  const conf = {
@@ -39,11 +39,11 @@ const conf = {
39
39
  })
40
40
  },
41
41
  defaultProps: {
42
- eyebrow: "Why choose us",
43
- heading: "Build faster, ship with confidence",
44
- description: "Our platform gives your team the tools to move quickly without sacrificing quality. From prototype to production in record time.",
45
- content: "We believe that great software starts with a great developer experience. That's why we've built every feature around the workflows you already know and love — so you can focus on what matters most: building products your customers will love.",
46
- image: image16x9Placeholder,
42
+ eyebrow: "Our Story",
43
+ heading: "We're building the tools we always wished existed",
44
+ description: "Founded by engineers who were tired of stitching together dozens of tools, we set out to create one platform that does it all.",
45
+ content: "We believe great software starts with a great developer experience. Every feature is designed around the workflows you already know — so you can focus on building products your customers love.",
46
+ image: { src: "https://images.pexels.com/photos/3153207/pexels-photo-3153207.jpeg?auto=compress&cs=tinysrgb&w=1200", alt: "A diverse group of young professionals collaborating enthusiastically in a bright, modern workspace." },
47
47
  imagePosition: "right",
48
48
  layout: "split",
49
49
  buttons: [
@@ -22,7 +22,7 @@ const conf = {
22
22
  })
23
23
  },
24
24
  defaultProps: {
25
- content: "<h2>About Us</h2><p>We are a team of passionate builders creating tools that empower everyone to build beautiful websites.</p><p>Our mission is to make web design accessible to everyone.</p>",
25
+ content: "<h2>About Our Mission</h2><p>We started with a simple belief: developers deserve better tools. Our platform is built by engineers, for engineers — eliminating the grunt work so you can focus on what you do best.</p><p>Every feature we ship is guided by one question: does this make our users faster? If it doesn't, it doesn't ship.</p>",
26
26
  styles: createStylesDefaults({ maxWidth: "md" })
27
27
  },
28
28
  render: RichText
@@ -1,4 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
2
3
  import { CompoundContainer } from "../../../puck-base/container.js";
3
4
  const MAX_WIDTH_MAP = {
4
5
  sm: "max-w-xl",
@@ -6,16 +7,20 @@ const MAX_WIDTH_MAP = {
6
7
  lg: "max-w-4xl",
7
8
  full: "max-w-none"
8
9
  };
10
+ function sanitizeHtml(html) {
11
+ return html.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "").replace(/<iframe\b[^>]*>/gi, "").replace(/\bon\w+\s*=/gi, "data-removed=");
12
+ }
9
13
  const RichText = ({
10
14
  content = "",
11
15
  styles
12
16
  }) => {
13
17
  const maxWidth = (styles == null ? void 0 : styles.maxWidth) ?? "md";
18
+ const safeContent = useMemo(() => sanitizeHtml(content), [content]);
14
19
  return /* @__PURE__ */ jsx(CompoundContainer, { padding: styles == null ? void 0 : styles.padding, sectionStyle: styles == null ? void 0 : styles.sectionStyle, backgroundColor: styles == null ? void 0 : styles.backgroundColor, children: /* @__PURE__ */ jsx(
15
20
  "div",
16
21
  {
17
22
  className: `${MAX_WIDTH_MAP[maxWidth]} prose prose-neutral dark:prose-invert mx-auto`,
18
- dangerouslySetInnerHTML: { __html: content }
23
+ dangerouslySetInnerHTML: { __html: safeContent }
19
24
  }
20
25
  ) });
21
26
  };