blocks-dusted 0.1.11 → 0.1.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 (161) hide show
  1. package/package.json +5 -2
  2. package/src/cli.js +39 -3
  3. package/src/commands/shop.js +59 -0
  4. package/src/commands/warehouse.js +73 -0
  5. package/src/installers/patchRenderBlocks.js +1 -1
  6. package/src/registry/validateTemplateManifest.js +2 -1
  7. package/templates/blocks/BannerDD790432/Component.tsx +63 -0
  8. package/templates/blocks/BannerDD790432/config.ts +54 -0
  9. package/templates/blocks/BannerDD790432/manifest.json +80 -0
  10. package/templates/blocks/Button47/Component.tsx +124 -0
  11. package/templates/blocks/Button47/config.ts +75 -0
  12. package/templates/blocks/Button47/link.ts +22 -0
  13. package/templates/blocks/Button47/manifest.json +105 -0
  14. package/templates/blocks/Button47/styles.module.scss +75 -0
  15. package/templates/blocks/DD-Accordion/Component.tsx +55 -36
  16. package/templates/blocks/DD-Accordion/config.ts +71 -59
  17. package/templates/blocks/DD-AnimText/Component.tsx +50 -32
  18. package/templates/blocks/DD-AnimText/config.ts +296 -295
  19. package/templates/blocks/DD-AsideNav/Component.tsx +323 -319
  20. package/templates/blocks/DD-Banner/Component.tsx +54 -51
  21. package/templates/blocks/DD-BookCall/Component.tsx +10 -9
  22. package/templates/blocks/DD-ButtonPop/Component.tsx +118 -117
  23. package/templates/blocks/DD-Card/Component.tsx +4 -4
  24. package/templates/blocks/DD-CardTemplate01/Component.tsx +5 -5
  25. package/templates/blocks/DD-CardsWithVariantV3/Component.tsx +472 -0
  26. package/templates/blocks/DD-CardsWithVariantV3/ElectricBorder/index.tsx +203 -0
  27. package/templates/blocks/DD-CardsWithVariantV3/ElectricBorder/styles.ts +87 -0
  28. package/templates/blocks/DD-CardsWithVariantV3/ElectricBorder/useInjectStyle.ts +39 -0
  29. package/templates/blocks/DD-CardsWithVariantV3/config.ts +326 -0
  30. package/templates/blocks/DD-CardsWithVariantV3/manifest.json +110 -0
  31. package/templates/blocks/DD-Carousel-A/Component.tsx +251 -249
  32. package/templates/blocks/DD-Carousel-B/Component.tsx +405 -403
  33. package/templates/blocks/DD-Chip/Component.tsx +14 -14
  34. package/templates/blocks/DD-ComparisonTable/Component.tsx +255 -256
  35. package/templates/blocks/DD-Contact/Component.tsx +433 -434
  36. package/templates/blocks/DD-Counter/Component.tsx +18 -13
  37. package/templates/blocks/DD-DeliCard/Component.tsx +303 -0
  38. package/templates/blocks/DD-DeliCard/config.ts +186 -0
  39. package/templates/blocks/DD-DeliCard/manifest.json +94 -0
  40. package/templates/blocks/DD-FeatCat/Component.tsx +302 -302
  41. package/templates/blocks/DD-FeatProd/CircularGallery.tsx +1179 -0
  42. package/templates/blocks/DD-FeatProd/Component.tsx +484 -0
  43. package/templates/blocks/DD-FeatProd/config.ts +173 -0
  44. package/templates/blocks/DD-FeatProd/manifest.json +93 -0
  45. package/templates/blocks/DD-FeatServ/Component.tsx +607 -0
  46. package/templates/blocks/DD-FeatServ/config.ts +213 -0
  47. package/templates/blocks/DD-FeatServ/manifest.json +113 -0
  48. package/templates/blocks/DD-FeatStrip/Component.tsx +584 -585
  49. package/templates/blocks/DD-FluidBtn/ButtonsEyeCatching.tsx +627 -628
  50. package/templates/blocks/DD-FluidBtn/Component.tsx +46 -43
  51. package/templates/blocks/DD-GooeyInfo/Component.tsx +150 -149
  52. package/templates/blocks/DD-GooeyInfo/config.ts +136 -135
  53. package/templates/blocks/DD-Hero/Component.tsx +16 -40
  54. package/templates/blocks/DD-HeroPlas/Component.tsx +50 -0
  55. package/templates/blocks/DD-HeroPlas/ThreeScene.tsx +109 -0
  56. package/templates/blocks/DD-HeroPlas/config.ts +33 -0
  57. package/templates/blocks/DD-HeroPlas/manifest.json +88 -0
  58. package/templates/blocks/DD-HorizontalScroll/Component.tsx +4 -5
  59. package/templates/blocks/DD-Icon/Component.tsx +46 -81
  60. package/templates/blocks/DD-IconButton/Component.tsx +13 -20
  61. package/templates/blocks/DD-IdTag/Component.tsx +22 -21
  62. package/templates/blocks/DD-IframeMedia/Component.tsx +14 -10
  63. package/templates/blocks/DD-LineAnim/Component.tsx +42 -36
  64. package/templates/blocks/DD-LogoMarq/Component.tsx +38 -48
  65. package/templates/blocks/DD-Lottie/Component.tsx +11 -3
  66. package/templates/blocks/DD-MasonaryMedia/Component.tsx +544 -547
  67. package/templates/blocks/DD-MasonaryMedia/config.ts +389 -389
  68. package/templates/blocks/DD-Masonry/Component.tsx +654 -644
  69. package/templates/blocks/DD-Masonry/config.ts +475 -475
  70. package/templates/blocks/DD-MaterialSwatches/Component.tsx +85 -0
  71. package/templates/blocks/DD-MaterialSwatches/config.ts +232 -0
  72. package/templates/blocks/DD-MaterialSwatches/manifest.json +84 -0
  73. package/templates/blocks/DD-MaterialSwatches/material.ts +107 -0
  74. package/templates/blocks/DD-NineCanvas/Component.tsx +129 -0
  75. package/templates/blocks/DD-NineCanvas/RenderBlocks.tsx +244 -0
  76. package/templates/blocks/DD-NineCanvas/allowedCanvasBlocks.ts +6 -0
  77. package/templates/blocks/DD-NineCanvas/blockComponents.tsx +8 -0
  78. package/templates/blocks/DD-NineCanvas/canvas/CanvasGrid.tsx +316 -0
  79. package/templates/blocks/DD-NineCanvas/canvas/RadialNav.tsx +432 -0
  80. package/templates/blocks/DD-NineCanvas/canvas/canvas-panels.css +889 -0
  81. package/templates/blocks/DD-NineCanvas/canvas/icons/custom-icons.tsx +364 -0
  82. package/templates/blocks/DD-NineCanvas/config.ts +61 -0
  83. package/templates/blocks/DD-NineCanvas/manifest.json +165 -0
  84. package/templates/blocks/DD-NineCanvas/styles.scss +152 -0
  85. package/templates/blocks/DD-NineCanvas/tooltip/get-strict-context.tsx +26 -0
  86. package/templates/blocks/DD-NineCanvas/tooltip/primitives.tsx +178 -0
  87. package/templates/blocks/DD-NineCanvas/tooltip/tooltip.tsx +71 -0
  88. package/templates/blocks/DD-NineCanvas/tooltip/use-controlled-state.tsx +33 -0
  89. package/templates/blocks/DD-NineCanvas/utilities/FadeOnScroll.tsx +68 -0
  90. package/templates/blocks/DD-NineCanvas/utilities/ParallaxWrapper.tsx +157 -0
  91. package/templates/blocks/DD-NineCanvas/utilities/renderCustomCSS.ts +5 -0
  92. package/templates/blocks/DD-NineCanvas/utilities/webglCleanup.ts +27 -0
  93. package/templates/blocks/DD-PayloadAIAssistant/Component.tsx +78 -0
  94. package/templates/blocks/DD-PayloadAIAssistant/DustedBot.tsx +590 -0
  95. package/templates/blocks/DD-PayloadAIAssistant/config.ts +37 -0
  96. package/templates/blocks/DD-PayloadAIAssistant/demo.css +125 -0
  97. package/templates/blocks/DD-PayloadAIAssistant/manifest.json +93 -0
  98. package/templates/blocks/DD-PayloadAIAssistant/source-defaults.ts +17 -0
  99. package/templates/blocks/DD-PayloadAIAssistant/styles.ts +306 -0
  100. package/templates/blocks/DD-Pricing/Component.tsx +368 -372
  101. package/templates/blocks/DD-Pricing/config.ts +215 -215
  102. package/templates/blocks/DD-Process/Component.tsx +147 -149
  103. package/templates/blocks/DD-Progress/Component.tsx +156 -141
  104. package/templates/blocks/DD-ProjHeader/Component.tsx +93 -91
  105. package/templates/blocks/DD-ProjSlider/Component.tsx +1 -1
  106. package/templates/blocks/DD-ProjSlider/config.ts +2 -2
  107. package/templates/blocks/DD-Section/Component.tsx +265 -266
  108. package/templates/blocks/DD-Separator/Component.tsx +66 -66
  109. package/templates/blocks/DD-Services/Component.tsx +176 -176
  110. package/templates/blocks/DD-ShowcaseGrid/Component.tsx +306 -307
  111. package/templates/blocks/DD-Slider-A/Component.tsx +237 -237
  112. package/templates/blocks/DD-StackCards/Component.tsx +474 -473
  113. package/templates/blocks/DD-Team/Component.tsx +247 -247
  114. package/templates/blocks/DD-TeamCards/Component.tsx +251 -251
  115. package/templates/blocks/DD-TechStack/Component.tsx +161 -168
  116. package/templates/blocks/DD-TestMarq/Component.tsx +158 -132
  117. package/templates/blocks/DD-Testim/Component.tsx +247 -247
  118. package/templates/blocks/DD-Testim2/Component.tsx +265 -256
  119. package/templates/blocks/DD-Testimonials/Component.tsx +139 -147
  120. package/templates/blocks/DD-TextMarq/Component.tsx +157 -157
  121. package/templates/blocks/DD-Thanks/Component.tsx +501 -500
  122. package/templates/blocks/DD-Work/Component.tsx +315 -315
  123. package/templates/blocks/DD-Work-B/Component.tsx +294 -294
  124. package/templates/blocks/DDHG-CTASection2/Component.tsx +183 -184
  125. package/templates/blocks/DDHG-HighlightArc/Component.tsx +246 -243
  126. package/templates/blocks/DDHG-LogoMarquee/Component.tsx +180 -93
  127. package/templates/blocks/DDHG-LogoMarquee/config.ts +154 -66
  128. package/templates/blocks/DDHG-NavCodeGrid/Component.tsx +225 -213
  129. package/templates/blocks/DDHG-ProcessSec/Component.tsx +38 -39
  130. package/templates/blocks/DDHG-ServiceDetails/Component.tsx +11 -11
  131. package/templates/blocks/DDHG-ServiceDetails/ServiceDetailCard.tsx +30 -47
  132. package/templates/blocks/DDHG-ServiceHero/Component.tsx +10 -10
  133. package/templates/blocks/DDHG-ServiceOverview/Component.tsx +23 -23
  134. package/templates/blocks/DDHG-StatsFAQ/Component.tsx +40 -40
  135. package/templates/blocks/DDHG-TeamCards/Component.tsx +140 -131
  136. package/templates/blocks/Form/Checkbox/index.tsx +45 -0
  137. package/templates/blocks/Form/Component.tsx +163 -0
  138. package/templates/blocks/Form/Country/index.tsx +65 -0
  139. package/templates/blocks/Form/Country/options.ts +982 -0
  140. package/templates/blocks/Form/Email/index.tsx +38 -0
  141. package/templates/blocks/Form/Error/index.tsx +15 -0
  142. package/templates/blocks/Form/Message/index.tsx +13 -0
  143. package/templates/blocks/Form/Number/index.tsx +36 -0
  144. package/templates/blocks/Form/Select/index.tsx +63 -0
  145. package/templates/blocks/Form/State/index.tsx +64 -0
  146. package/templates/blocks/Form/State/options.ts +52 -0
  147. package/templates/blocks/Form/Text/index.tsx +32 -0
  148. package/templates/blocks/Form/Textarea/index.tsx +40 -0
  149. package/templates/blocks/Form/Width/index.tsx +13 -0
  150. package/templates/blocks/Form/config.ts +51 -0
  151. package/templates/blocks/Form/fields.tsx +21 -0
  152. package/templates/blocks/Form/manifest.json +168 -0
  153. package/templates/blocks/MediaBlock/Component.tsx +67 -0
  154. package/templates/blocks/MediaBlock/config.ts +14 -0
  155. package/templates/blocks/MediaBlock/manifest.json +92 -0
  156. package/templates/blocks/TransitionsDustedShowcase/Component.tsx +9 -0
  157. package/templates/blocks/TransitionsDustedShowcase/config.ts +13 -0
  158. package/templates/blocks/TransitionsDustedShowcase/manifest.json +80 -0
  159. package/templates/blocks/rawHtml/Component.tsx +25 -0
  160. package/templates/blocks/rawHtml/config.ts +56 -0
  161. package/templates/blocks/rawHtml/manifest.json +80 -0
@@ -1,185 +1,184 @@
1
- 'use client'
2
-
3
- import { motion } from 'framer-motion'
4
- import React from 'react'
5
-
6
- import { cn } from '@/utilities/ui'
7
-
8
- type PortableDoc = {
9
- slug?: string | null
10
- breadcrumbs?: Array<{ url?: string | null }> | null
11
- [key: string]: unknown
12
- }
13
-
14
- type LinkReference =
15
- | { relationTo: 'pages'; value: number | PortableDoc }
16
- | { relationTo: 'posts'; value: number | PortableDoc }
17
- | { relationTo: 'projects'; value: number | PortableDoc }
18
- | { relationTo: 'thoughts'; value: number | PortableDoc }
19
-
20
- type BlockLinkField = {
21
- type?: 'reference' | 'custom' | null
22
- reference?: LinkReference | null
23
- url?: string | null
24
- label?: string | null
25
- newTab?: boolean | null
26
- } | null
27
-
28
- export type DDHGCTASection2Props = {
29
- sectionId?: string | null
30
- customClassName?: string | null
31
- customCSS?: string | null
32
- blockId?: string | null
33
- scrollSpeed?: string | number | null
34
- eyebrowPrefix?: string | null
35
- eyebrowEmphasis?: string | null
36
- headingLineOne?: string | null
37
- headingLineTwo?: string | null
38
- description?: string | null
39
- showDivider?: boolean | null
40
- primaryLink?: BlockLinkField
41
- secondaryLink?: BlockLinkField
42
- }
43
-
44
- function getHref(link?: BlockLinkField): string | null {
45
- if (!link) return null
46
-
47
- if (link.type === 'custom' && link.url) return link.url
48
-
49
- if (link.type === 'reference' && link.reference?.value) {
50
- const { relationTo, value } = link.reference
51
- if (typeof value === 'number') return null
52
-
53
- if (relationTo === 'pages') {
54
- const crumbs = Array.isArray(value.breadcrumbs) ? value.breadcrumbs : []
55
- const last = crumbs[crumbs.length - 1]
56
- if (last?.url) return last.url
57
-
58
- const slug = value.slug
59
- if (!slug || slug === 'home') return '/'
60
- return slug.startsWith('/') ? slug : `/${slug}`
61
- }
62
-
63
- const slug = value.slug
64
- if (!slug) return null
65
-
66
- if (relationTo === 'projects') return `/archives/${slug}`
67
- if (relationTo === 'posts' || relationTo === 'thoughts') return `/thoughts/${slug}`
68
- return `/${slug}`
69
- }
70
-
71
- return null
72
- }
73
-
74
- function CTAButton({ link, variant }: { link?: BlockLinkField; variant: 'primary' | 'secondary' }) {
75
- const href = getHref(link)
76
- if (!href) return null
77
-
78
- const target = link?.newTab ? '_blank' : undefined
79
- const rel = link?.newTab ? 'noopener noreferrer' : undefined
80
-
81
- return (
82
- <a
83
- href={href}
84
- target={target}
85
- rel={rel}
86
- className={cn(
87
- 'inline-flex min-h-10 items-center justify-center px-5 py-2.5 text-sm font-medium transition-all duration-300',
88
- variant === 'primary'
89
- ? 'bg-stone-800 text-white hover:bg-stone-700'
90
- : 'border border-stone-400 text-stone-700 dark:text-stone-200 hover:bg-stone-100'
91
- )}
92
- >
93
- {link?.label || 'Learn More'}
94
- </a>
95
- )
96
- }
97
-
98
- const revealMotion = {
99
- initial: { opacity: 0, y: 18 },
100
- whileInView: { opacity: 1, y: 0 },
101
- viewport: { once: true, amount: 0.25 },
102
- transition: { duration: 0.7, ease: [0.22, 1, 0.36, 1] as [number, number, number, number] }
103
- }
104
-
105
- export const DDHGCTASection2: React.FC<DDHGCTASection2Props> = ({
106
- sectionId,
107
- customClassName,
108
- customCSS,
109
- blockId,
110
- scrollSpeed,
111
- eyebrowPrefix = 'ready to',
112
- eyebrowEmphasis = 'begin?',
113
- headingLineOne = "LET'S BUILD YOUR",
114
- headingLineTwo = 'NEXT SPACE',
115
- description = 'Every great space begins with a conversation. Share your vision, and we will map the path from where you are to where you want to be.',
116
- showDivider = true,
117
- primaryLink,
118
- secondaryLink
119
- }) => {
120
- const hasButtons = Boolean(getHref(primaryLink) || getHref(secondaryLink))
121
-
122
- return (
123
- <div
124
- id={sectionId ?? undefined}
125
- data-block-id={blockId ?? undefined}
126
- data-scroll={scrollSpeed ? true : undefined}
127
- data-scroll-speed={scrollSpeed ? String(scrollSpeed) : undefined}
128
- className={cn('mb-10 px-5 py-20 md:px-8', customClassName)}
129
- >
130
- {customCSS && <style dangerouslySetInnerHTML={{ __html: customCSS }} />}
131
-
132
- <div className="mx-auto max-w-7xl">
133
- <motion.div
134
- className="z-plane-2 relative overflow-hidden"
135
- initial={{ opacity: 0, y: 20 }}
136
- whileInView={{ opacity: 1, y: 0 }}
137
- viewport={{ once: true, amount: 0.25 }}
138
- transition={{ duration: 0.9, ease: [0.22, 1, 0.36, 1] }}
139
- >
140
- <div className="relative p-8 text-center md:p-12 lg:p-16">
141
- {(eyebrowPrefix || eyebrowEmphasis) && (
142
- <p className="mb-4 text-[10px] uppercase tracking-[0.2em] text-stone-600 dark:text-stone-300">
143
- {eyebrowPrefix && <span className="font-light">{eyebrowPrefix} </span>}
144
- {eyebrowEmphasis && <span className="font-medium">{eyebrowEmphasis}</span>}
145
- </p>
146
- )}
147
-
148
- <motion.div className="heading" {...revealMotion}>
149
- {(headingLineOne || headingLineTwo) && (
150
- <h2 className="mb-4 text-3xl font-medium leading-none tracking-tight text-purple-700 dark:text-purple-500 md:text-5xl">
151
- {headingLineOne}
152
- {headingLineOne && headingLineTwo && <br />}
153
- <span className="font-bold">{headingLineTwo}</span>
154
- </h2>
155
- )}
156
- </motion.div>
157
-
158
- {showDivider && <div className="mx-auto mb-6 h-px w-12 bg-stone-500" />}
159
-
160
- <motion.div
161
- className="description"
162
- {...revealMotion}
163
- transition={{ ...revealMotion.transition, delay: 0.08 }}
164
- >
165
- {description && (
166
- <p className="mx-auto mb-8 max-w-lg text-[14px] font-light leading-relaxed text-stone-700 dark:text-stone-200">
167
- {description}
168
- </p>
169
- )}
170
- </motion.div>
171
-
172
- {hasButtons && (
173
- <div className="flex flex-wrap items-center justify-center gap-3">
174
- <CTAButton link={primaryLink} variant="primary" />
175
- <CTAButton link={secondaryLink} variant="secondary" />
176
- </div>
177
- )}
178
- </div>
179
- </motion.div>
180
- </div>
181
- </div>
182
- )
183
- }
184
-
1
+ 'use client'
2
+
3
+ import { motion } from 'framer-motion'
4
+ import React from 'react'
5
+
6
+ import { cn } from '@/utilities/ui'
7
+
8
+ type PortableDoc = {
9
+ slug?: string | null
10
+ breadcrumbs?: Array<{ url?: string | null }> | null
11
+ [key: string]: unknown
12
+ }
13
+
14
+ type LinkReference =
15
+ | { relationTo: 'pages'; value: number | PortableDoc }
16
+ | { relationTo: 'projects'; value: number | PortableDoc }
17
+ | { relationTo: 'thoughts'; value: number | PortableDoc }
18
+
19
+ type BlockLinkField = {
20
+ type?: 'reference' | 'custom' | null
21
+ reference?: LinkReference | null
22
+ url?: string | null
23
+ label?: string | null
24
+ newTab?: boolean | null
25
+ } | null
26
+
27
+ export type DDHGCTASection2Props = {
28
+ sectionId?: string | null
29
+ customClassName?: string | null
30
+ customCSS?: string | null
31
+ blockId?: string | null
32
+ scrollSpeed?: string | number | null
33
+ eyebrowPrefix?: string | null
34
+ eyebrowEmphasis?: string | null
35
+ headingLineOne?: string | null
36
+ headingLineTwo?: string | null
37
+ description?: string | null
38
+ showDivider?: boolean | null
39
+ primaryLink?: BlockLinkField
40
+ secondaryLink?: BlockLinkField
41
+ }
42
+
43
+ function getHref(link?: BlockLinkField): string | null {
44
+ if (!link) return null
45
+
46
+ if (link.type === 'custom' && link.url) return link.url
47
+
48
+ if (link.type === 'reference' && link.reference?.value) {
49
+ const { relationTo, value } = link.reference
50
+ if (typeof value === 'number') return null
51
+
52
+ if (relationTo === 'pages') {
53
+ const crumbs = Array.isArray(value.breadcrumbs) ? value.breadcrumbs : []
54
+ const last = crumbs[crumbs.length - 1]
55
+ if (last?.url) return last.url
56
+
57
+ const slug = value.slug
58
+ if (!slug || slug === 'home') return '/'
59
+ return slug.startsWith('/') ? slug : `/${slug}`
60
+ }
61
+
62
+ const slug = value.slug
63
+ if (!slug) return null
64
+
65
+ if (relationTo === 'projects') return `/archives/${slug}`
66
+ if (relationTo === 'thoughts') return `/thoughts/${slug}`
67
+ return `/${slug}`
68
+ }
69
+
70
+ return null
71
+ }
72
+
73
+ function CTAButton({ link, variant }: { link?: BlockLinkField; variant: 'primary' | 'secondary' }) {
74
+ const href = getHref(link)
75
+ if (!href) return null
76
+
77
+ const target = link?.newTab ? '_blank' : undefined
78
+ const rel = link?.newTab ? 'noopener noreferrer' : undefined
79
+
80
+ return (
81
+ <a
82
+ href={href}
83
+ target={target}
84
+ rel={rel}
85
+ className={cn(
86
+ 'inline-flex min-h-10 items-center justify-center rounded-md squircle px-5 py-2.5 text-sm font-medium transition-all duration-300 0 hover:shadow-xl hover:-translate-y-0.5 hover:transition-all hover:duration-300',
87
+ variant === 'primary'
88
+ ? 'bg-stone-800 text-white hover:bg-stone-700'
89
+ : 'border border-stone-400 text-stone-700 dark:text-stone-200 hover:bg-stone-100 dark:hover:text-stone-700',
90
+ )}
91
+ >
92
+ {link?.label || 'Learn More'}
93
+ </a>
94
+ )
95
+ }
96
+
97
+ const revealMotion = {
98
+ initial: { opacity: 0, y: 18 },
99
+ whileInView: { opacity: 1, y: 0 },
100
+ viewport: { once: true, amount: 0.25 },
101
+ transition: { duration: 0.7, ease: [0.22, 1, 0.36, 1] as [number, number, number, number] },
102
+ }
103
+
104
+ export const DDHGCTASection2: React.FC<DDHGCTASection2Props> = ({
105
+ sectionId,
106
+ customClassName,
107
+ customCSS,
108
+ blockId,
109
+ scrollSpeed,
110
+ eyebrowPrefix = 'ready to',
111
+ eyebrowEmphasis = 'begin?',
112
+ headingLineOne = "LET'S BUILD YOUR",
113
+ headingLineTwo = 'NEXT SPACE',
114
+ description = 'Every great space begins with a conversation. Share your vision, and we will map the path from where you are to where you want to be.',
115
+ showDivider = true,
116
+ primaryLink,
117
+ secondaryLink,
118
+ }) => {
119
+ const hasButtons = Boolean(getHref(primaryLink) || getHref(secondaryLink))
120
+
121
+ return (
122
+ <div
123
+ id={sectionId ?? undefined}
124
+ data-block-id={blockId ?? undefined}
125
+ data-scroll={scrollSpeed ? true : undefined}
126
+ data-scroll-speed={scrollSpeed ? String(scrollSpeed) : undefined}
127
+ className={cn('mb-10 px-5 py-20 md:px-8', customClassName)}
128
+ >
129
+ {customCSS && <style dangerouslySetInnerHTML={{ __html: customCSS }} />}
130
+
131
+ <div className="mx-auto max-w-7xl">
132
+ <motion.div
133
+ className="z-plane-2 relative overflow-hidden rounded-md squircle border border-stone-300/10 bg-stone-100/50 transition-all duration-300 dark:border-stone-700/10 dark:bg-stone-900/50 shadow-xl"
134
+ initial={{ opacity: 0, y: 20 }}
135
+ whileInView={{ opacity: 1, y: 0 }}
136
+ viewport={{ once: true, amount: 0.25 }}
137
+ transition={{ duration: 0.9, ease: [0.22, 1, 0.36, 1] }}
138
+ >
139
+ <div className="relative p-8 text-center md:p-12 lg:p-16">
140
+ {(eyebrowPrefix || eyebrowEmphasis) && (
141
+ <p className="mb-4 text-xs uppercase tracking-[0.2em] text-stone-600 dark:text-stone-300">
142
+ {eyebrowPrefix && <span className="font-light">{eyebrowPrefix} </span>}
143
+ {eyebrowEmphasis && <span className="font-medium">{eyebrowEmphasis}</span>}
144
+ </p>
145
+ )}
146
+
147
+ <motion.div className="heading" {...revealMotion}>
148
+ {(headingLineOne || headingLineTwo) && (
149
+ <h2 className="mb-4 text-3xl font-medium leading-none tracking-tight text-purple-700 dark:text-purple-500 md:text-5xl">
150
+ {headingLineOne}
151
+ {headingLineOne && headingLineTwo && <br />}
152
+ <span className="font-bold">{headingLineTwo}</span>
153
+ </h2>
154
+ )}
155
+ </motion.div>
156
+
157
+ {showDivider && <div className="mx-auto mb-6 h-px w-12 bg-stone-500" />}
158
+
159
+ <motion.div
160
+ className="description"
161
+ {...revealMotion}
162
+ transition={{ ...revealMotion.transition, delay: 0.08 }}
163
+ >
164
+ {description && (
165
+ <p className="mx-auto mb-8 max-w-lg text-[14px] font-light leading-relaxed text-stone-700 dark:text-stone-200">
166
+ {description}
167
+ </p>
168
+ )}
169
+ </motion.div>
170
+
171
+ {hasButtons && (
172
+ <div className="flex flex-wrap items-center justify-center gap-3">
173
+ <CTAButton link={primaryLink} variant="primary" />
174
+ <CTAButton link={secondaryLink} variant="secondary" />
175
+ </div>
176
+ )}
177
+ </div>
178
+ </motion.div>
179
+ </div>
180
+ </div>
181
+ )
182
+ }
183
+
185
184
  export default DDHGCTASection2