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
|
@@ -39,22 +39,22 @@ const conf = {
|
|
|
39
39
|
},
|
|
40
40
|
defaultProps: {
|
|
41
41
|
eyebrow: "Why choose us",
|
|
42
|
-
heading: "
|
|
43
|
-
description: "See
|
|
42
|
+
heading: "Before & After",
|
|
43
|
+
description: "See the difference our platform makes for development teams.",
|
|
44
44
|
layout: "side-by-side",
|
|
45
|
-
beforeLabel: "Without
|
|
45
|
+
beforeLabel: "Without our platform",
|
|
46
46
|
beforeItems: [
|
|
47
|
-
{ text: "
|
|
48
|
-
{ text: "
|
|
49
|
-
{ text: "
|
|
50
|
-
{ text: "Scaling requires
|
|
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
|
|
52
|
+
afterLabel: "With our platform",
|
|
53
53
|
afterItems: [
|
|
54
|
-
{ text: "
|
|
55
|
-
{ text: "
|
|
56
|
-
{ text: "
|
|
57
|
-
{ text: "
|
|
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
|
|
22
|
-
description: "
|
|
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: "
|
|
25
|
-
{ value: "
|
|
26
|
-
{ value: "
|
|
24
|
+
{ value: "80%", label: "Faster Deploys" },
|
|
25
|
+
{ value: "3x", label: "Developer Productivity" },
|
|
26
|
+
{ value: "99.9%", label: "Uptime" }
|
|
27
27
|
],
|
|
28
|
-
quote: "
|
|
29
|
-
author: "
|
|
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: "
|
|
35
|
-
description: "
|
|
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: "
|
|
41
|
-
description: "
|
|
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
|
|
46
|
-
description: "
|
|
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: "
|
|
51
|
-
description: "
|
|
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://
|
|
9
|
-
alt: "
|
|
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: "
|
|
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
|
|
50
|
-
description: "
|
|
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: "
|
|
55
|
-
{ ...defaultMember, name: "
|
|
56
|
-
{ ...defaultMember, name: "Sarah
|
|
57
|
-
{ ...defaultMember, name: "
|
|
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 {
|
|
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: "
|
|
7
|
-
image:
|
|
8
|
-
description: "
|
|
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: "
|
|
31
|
-
description: "We're
|
|
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: "
|
|
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: "
|
|
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: "
|
|
50
|
-
{ ...defaultMember, name: "
|
|
51
|
-
{ ...defaultMember, name: "Sarah
|
|
52
|
-
{ ...defaultMember, name: "
|
|
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 {
|
|
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:
|
|
8
|
-
description: "
|
|
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: "
|
|
34
|
-
description: "
|
|
33
|
+
heading: "Our\nLeadership Team",
|
|
34
|
+
description: "Experienced leaders driving innovation and growth.",
|
|
35
35
|
members: [
|
|
36
36
|
{
|
|
37
37
|
...defaultMember,
|
|
38
|
-
name: "
|
|
39
|
-
role: "
|
|
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: "
|
|
44
|
-
role: "
|
|
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 {
|
|
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:
|
|
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
|
|
34
|
-
items:
|
|
35
|
-
|
|
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("
|
|
38
|
-
alt:
|
|
48
|
+
src: getPlaceholderImageUrl("200x200", name),
|
|
49
|
+
alt: name
|
|
39
50
|
}
|
|
40
51
|
})),
|
|
41
52
|
styles: createStylesDefaults({ layout: "section" })
|
|
@@ -33,14 +33,14 @@ const conf = {
|
|
|
33
33
|
styles: logoWallStylesField
|
|
34
34
|
},
|
|
35
35
|
defaultProps: {
|
|
36
|
-
heading: "
|
|
37
|
-
description: "We partner with industry-leading platforms and
|
|
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("
|
|
40
|
-
logoPlaceholder("
|
|
41
|
-
logoPlaceholder("
|
|
42
|
-
logoPlaceholder("
|
|
43
|
-
logoPlaceholder("
|
|
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: "
|
|
6
|
+
role: "Engineering Manager",
|
|
7
7
|
avatar: {
|
|
8
|
-
src: "https://
|
|
9
|
-
alt: "
|
|
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: "
|
|
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
|
|
45
|
+
heading: "What our customers say",
|
|
46
46
|
items: [
|
|
47
47
|
{
|
|
48
48
|
...defaultReview,
|
|
49
|
-
author: "Alex
|
|
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: "
|
|
56
|
+
content: "Incredible tool. Deployment time went from hours to minutes."
|
|
52
57
|
},
|
|
53
58
|
{
|
|
54
59
|
...defaultReview,
|
|
55
|
-
author: "
|
|
56
|
-
|
|
57
|
-
|
|
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: "
|
|
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: "
|
|
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://
|
|
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: "
|
|
52
|
-
items:
|
|
53
|
-
|
|
54
|
-
|
|
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 {
|
|
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?:
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
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 {
|
|
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: "
|
|
16
|
-
|
|
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: "
|
|
31
|
-
heading: "
|
|
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:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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 {
|
|
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: "
|
|
43
|
-
heading: "
|
|
44
|
-
description: "
|
|
45
|
-
content: "We believe
|
|
46
|
-
image:
|
|
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
|
|
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:
|
|
23
|
+
dangerouslySetInnerHTML: { __html: safeContent }
|
|
19
24
|
}
|
|
20
25
|
) });
|
|
21
26
|
};
|