blocks-dusted 0.1.10 → 0.1.11

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 (246) hide show
  1. package/README.md +35 -0
  2. package/package.json +1 -1
  3. package/src/utils/paths.js +13 -13
  4. package/templates/blocks/DD-Accordion/Component.tsx +229 -0
  5. package/templates/blocks/DD-Accordion/README.md +3 -0
  6. package/templates/blocks/DD-Accordion/config.ts +73 -0
  7. package/templates/blocks/DD-Accordion/manifest.json +75 -0
  8. package/templates/blocks/DD-AnimText/Component.tsx +788 -0
  9. package/templates/blocks/DD-AnimText/README.md +3 -0
  10. package/templates/blocks/DD-AnimText/config.ts +295 -0
  11. package/templates/blocks/DD-AnimText/manifest.json +85 -0
  12. package/templates/blocks/DD-AsideNav/Component.tsx +321 -0
  13. package/templates/blocks/DD-AsideNav/config.ts +204 -0
  14. package/templates/blocks/DD-AsideNav/manifest.json +80 -0
  15. package/templates/blocks/DD-Banner/Component.tsx +51 -0
  16. package/templates/blocks/DD-Banner/config.ts +57 -0
  17. package/templates/blocks/DD-Banner/manifest.json +72 -0
  18. package/templates/blocks/DD-BgLightning/Component.tsx +44 -0
  19. package/templates/blocks/DD-BgLightning/README.md +3 -0
  20. package/templates/blocks/DD-BgLightning/config.ts +97 -0
  21. package/templates/blocks/DD-BgLightning/manifest.json +79 -0
  22. package/templates/blocks/DD-BookCall/Component.tsx +10 -11
  23. package/templates/blocks/DD-BookCall/config.ts +238 -238
  24. package/templates/blocks/DD-ButtonPop/Component.tsx +117 -0
  25. package/templates/blocks/DD-ButtonPop/config.ts +105 -0
  26. package/templates/blocks/DD-ButtonPop/manifest.json +88 -0
  27. package/templates/blocks/DD-ButtonPop/svg-icons/Dust2.tsx +167 -0
  28. package/templates/blocks/DD-Card/Component.tsx +251 -0
  29. package/templates/blocks/DD-Card/README.md +4 -0
  30. package/templates/blocks/DD-Card/config.ts +154 -0
  31. package/templates/blocks/DD-Card/manifest.json +82 -0
  32. package/templates/blocks/DD-CardTemplate01/Component.tsx +5 -6
  33. package/templates/blocks/DD-CardTemplate01/config.ts +106 -106
  34. package/templates/blocks/DD-Carousel-A/Component.tsx +249 -249
  35. package/templates/blocks/DD-Carousel-B/Component.tsx +403 -403
  36. package/templates/blocks/DD-Chip/Component.tsx +250 -0
  37. package/templates/blocks/DD-Chip/EXAMPLES.md +313 -0
  38. package/templates/blocks/DD-Chip/README.md +202 -0
  39. package/templates/blocks/DD-Chip/config.ts +369 -0
  40. package/templates/blocks/DD-Chip/manifest.json +74 -0
  41. package/templates/blocks/DD-ComparisonTable/Component.tsx +256 -256
  42. package/templates/blocks/DD-Contact/Component.tsx +434 -434
  43. package/templates/blocks/DD-Contact/config.ts +22 -22
  44. package/templates/blocks/DD-Counter/Component.tsx +190 -0
  45. package/templates/blocks/DD-Counter/README.md +4 -0
  46. package/templates/blocks/DD-Counter/config.ts +291 -0
  47. package/templates/blocks/DD-Counter/manifest.json +74 -0
  48. package/templates/blocks/DD-CustomCSS/Component.tsx +8 -0
  49. package/templates/blocks/DD-CustomCSS/README.md +4 -0
  50. package/templates/blocks/DD-CustomCSS/addToLayout.md +5 -0
  51. package/templates/blocks/DD-CustomCSS/config.ts +22 -0
  52. package/templates/blocks/DD-CustomCSS/manifest.json +72 -0
  53. package/templates/blocks/DD-CustomCSS/renderCustomCSS.md +7 -0
  54. package/templates/blocks/DD-FeatCat/Component.tsx +302 -302
  55. package/templates/blocks/DD-FeatCat/config.ts +201 -201
  56. package/templates/blocks/DD-FeatStrip/Component.tsx +585 -585
  57. package/templates/blocks/DD-FeatStrip/config.ts +134 -134
  58. package/templates/blocks/DD-FluidBtn/ButtonsEyeCatching.tsx +628 -0
  59. package/templates/blocks/DD-FluidBtn/Component.tsx +43 -0
  60. package/templates/blocks/DD-FluidBtn/README.md +6 -0
  61. package/templates/blocks/DD-FluidBtn/config.ts +102 -0
  62. package/templates/blocks/DD-FluidBtn/manifest.json +86 -0
  63. package/templates/blocks/DD-GooeyInfo/Component.tsx +149 -0
  64. package/templates/blocks/DD-GooeyInfo/config.ts +135 -0
  65. package/templates/blocks/DD-GooeyInfo/manifest.json +72 -0
  66. package/templates/blocks/DD-Hero/Component.tsx +40 -17
  67. package/templates/blocks/DD-Hero/config.ts +267 -267
  68. package/templates/blocks/DD-HorizontalScroll/Component.tsx +4 -2
  69. package/templates/blocks/DD-HorizontalScroll/config.ts +231 -231
  70. package/templates/blocks/DD-Icon/Component.tsx +287 -0
  71. package/templates/blocks/DD-Icon/README.md +4 -0
  72. package/templates/blocks/DD-Icon/config.ts +258 -0
  73. package/templates/blocks/DD-Icon/hooks/revalidateBlockIds.ts +66 -0
  74. package/templates/blocks/DD-Icon/manifest.json +82 -0
  75. package/templates/blocks/DD-IconButton/Component.tsx +455 -0
  76. package/templates/blocks/DD-IconButton/README.md +326 -0
  77. package/templates/blocks/DD-IconButton/config.ts +239 -0
  78. package/templates/blocks/DD-IconButton/manifest.json +85 -0
  79. package/templates/blocks/DD-IdTag/Component.tsx +21 -0
  80. package/templates/blocks/DD-IdTag/README.md +4 -0
  81. package/templates/blocks/DD-IdTag/config.ts +41 -0
  82. package/templates/blocks/DD-IdTag/manifest.json +72 -0
  83. package/templates/blocks/DD-Iframe/Component.tsx +45 -0
  84. package/templates/blocks/DD-Iframe/README.md +4 -0
  85. package/templates/blocks/DD-Iframe/config.ts +47 -0
  86. package/templates/blocks/DD-Iframe/manifest.json +72 -0
  87. package/templates/blocks/DD-IframeMedia/Component.tsx +129 -0
  88. package/templates/blocks/DD-IframeMedia/README.md +4 -0
  89. package/templates/blocks/DD-IframeMedia/config.ts +79 -0
  90. package/templates/blocks/DD-IframeMedia/manifest.json +72 -0
  91. package/templates/blocks/DD-LineAnim/Component.tsx +36 -0
  92. package/templates/blocks/DD-LineAnim/README.md +4 -0
  93. package/templates/blocks/DD-LineAnim/config.ts +90 -0
  94. package/templates/blocks/DD-LineAnim/manifest.json +80 -0
  95. package/templates/blocks/DD-LinkGrid/Component.tsx +119 -0
  96. package/templates/blocks/DD-LinkGrid/README.md +4 -0
  97. package/templates/blocks/DD-LinkGrid/config.ts +51 -0
  98. package/templates/blocks/DD-LinkGrid/manifest.json +74 -0
  99. package/templates/blocks/DD-LogoMarq/Component.tsx +132 -0
  100. package/templates/blocks/DD-LogoMarq/README.md +4 -0
  101. package/templates/blocks/DD-LogoMarq/config.ts +264 -0
  102. package/templates/blocks/DD-LogoMarq/manifest.json +82 -0
  103. package/templates/blocks/DD-Lottie/Component.tsx +459 -0
  104. package/templates/blocks/DD-Lottie/README.md +4 -0
  105. package/templates/blocks/DD-Lottie/config.ts +379 -0
  106. package/templates/blocks/DD-Lottie/index.tsx +28 -0
  107. package/templates/blocks/DD-Lottie/manifest.json +83 -0
  108. package/templates/blocks/DD-MagicBento/Component.tsx +777 -0
  109. package/templates/blocks/DD-MagicBento/README.md +4 -0
  110. package/templates/blocks/DD-MagicBento/config.ts +264 -0
  111. package/templates/blocks/DD-MagicBento/manifest.json +74 -0
  112. package/templates/blocks/DD-MasonaryMedia/Component.tsx +547 -545
  113. package/templates/blocks/DD-MasonaryMedia/config.ts +2 -2
  114. package/templates/blocks/DD-MasonaryMedia/vendor.d.ts +2 -2
  115. package/templates/blocks/DD-Masonry/Component.tsx +645 -0
  116. package/templates/blocks/DD-Masonry/README.md +4 -0
  117. package/templates/blocks/DD-Masonry/config.ts +475 -0
  118. package/templates/blocks/DD-Masonry/manifest.json +82 -0
  119. package/templates/blocks/DD-Pricing/Component.tsx +372 -372
  120. package/templates/blocks/DD-Process/Component.tsx +149 -149
  121. package/templates/blocks/DD-Process/config.ts +150 -150
  122. package/templates/blocks/DD-Progress/Component.tsx +141 -0
  123. package/templates/blocks/DD-Progress/README.md +4 -0
  124. package/templates/blocks/DD-Progress/config.ts +175 -0
  125. package/templates/blocks/DD-Progress/manifest.json +74 -0
  126. package/templates/blocks/DD-ProjHeader/Component.tsx +91 -0
  127. package/templates/blocks/DD-ProjHeader/README.md +4 -0
  128. package/templates/blocks/DD-ProjHeader/config.ts +96 -0
  129. package/templates/blocks/DD-ProjHeader/manifest.json +72 -0
  130. package/templates/blocks/DD-ProjSlider/Component.tsx +123 -0
  131. package/templates/blocks/DD-ProjSlider/README.md +4 -0
  132. package/templates/blocks/DD-ProjSlider/config.ts +64 -0
  133. package/templates/blocks/DD-ProjSlider/manifest.json +72 -0
  134. package/templates/blocks/DD-ScrollText/Component.tsx +114 -0
  135. package/templates/blocks/DD-ScrollText/README.md +4 -0
  136. package/templates/blocks/DD-ScrollText/config.ts +58 -0
  137. package/templates/blocks/DD-ScrollText/manifest.json +72 -0
  138. package/templates/blocks/DD-Section/Component.tsx +266 -266
  139. package/templates/blocks/DD-Separator/Component.tsx +66 -0
  140. package/templates/blocks/DD-Separator/README.md +4 -0
  141. package/templates/blocks/DD-Separator/config.ts +58 -0
  142. package/templates/blocks/DD-Separator/manifest.json +72 -0
  143. package/templates/blocks/DD-Services/Component.tsx +176 -176
  144. package/templates/blocks/DD-Services/config.ts +149 -149
  145. package/templates/blocks/DD-ShowcaseGrid/Component.tsx +307 -307
  146. package/templates/blocks/DD-Slider-A/Component.tsx +237 -237
  147. package/templates/blocks/DD-StackCards/Component.tsx +473 -473
  148. package/templates/blocks/DD-StackCards/config.ts +399 -399
  149. package/templates/blocks/DD-Team/Component.tsx +247 -247
  150. package/templates/blocks/DD-Team/config.ts +173 -173
  151. package/templates/blocks/DD-TeamCards/Component.tsx +251 -0
  152. package/templates/blocks/DD-TeamCards/README.md +4 -0
  153. package/templates/blocks/DD-TeamCards/config.ts +302 -0
  154. package/templates/blocks/DD-TeamCards/manifest.json +74 -0
  155. package/templates/blocks/DD-TechStack/Component.tsx +168 -162
  156. package/templates/blocks/DD-TechStack/config.ts +153 -153
  157. package/templates/blocks/DD-TestMarq/Component.tsx +132 -0
  158. package/templates/blocks/DD-TestMarq/README.md +4 -0
  159. package/templates/blocks/DD-TestMarq/RowLabel.tsx +9 -0
  160. package/templates/blocks/DD-TestMarq/config.ts +88 -0
  161. package/templates/blocks/DD-TestMarq/manifest.json +72 -0
  162. package/templates/blocks/DD-Testim/Component.tsx +247 -0
  163. package/templates/blocks/DD-Testim/README.md +4 -0
  164. package/templates/blocks/DD-Testim/config.ts +101 -0
  165. package/templates/blocks/DD-Testim/manifest.json +75 -0
  166. package/templates/blocks/DD-Testim2/Component.tsx +256 -0
  167. package/templates/blocks/DD-Testim2/README.md +4 -0
  168. package/templates/blocks/DD-Testim2/config.ts +100 -0
  169. package/templates/blocks/DD-Testim2/manifest.json +74 -0
  170. package/templates/blocks/DD-Testimonials/Component.tsx +147 -147
  171. package/templates/blocks/DD-Testimonials/config.ts +120 -120
  172. package/templates/blocks/DD-TextMarq/Component.tsx +157 -0
  173. package/templates/blocks/DD-TextMarq/README.md +4 -0
  174. package/templates/blocks/DD-TextMarq/config.ts +237 -0
  175. package/templates/blocks/DD-TextMarq/manifest.json +82 -0
  176. package/templates/blocks/DD-Thanks/Component.tsx +500 -0
  177. package/templates/blocks/DD-Thanks/README.md +4 -0
  178. package/templates/blocks/DD-Thanks/config.ts +224 -0
  179. package/templates/blocks/DD-Thanks/manifest.json +72 -0
  180. package/templates/blocks/DD-VertMarq/Component.tsx +154 -0
  181. package/templates/blocks/DD-VertMarq/README.md +4 -0
  182. package/templates/blocks/DD-VertMarq/config.ts +236 -0
  183. package/templates/blocks/DD-VertMarq/dist/index.css +6 -0
  184. package/templates/blocks/DD-VertMarq/dist/index.min.css +1 -0
  185. package/templates/blocks/DD-VertMarq/manifest.json +74 -0
  186. package/templates/blocks/DD-Work/Component.tsx +318 -315
  187. package/templates/blocks/DD-Work/config.ts +165 -165
  188. package/templates/blocks/DD-Work-B/Component.tsx +294 -294
  189. package/templates/blocks/DDHG-CTASection2/Component.tsx +185 -0
  190. package/templates/blocks/DDHG-CTASection2/config.ts +140 -0
  191. package/templates/blocks/DDHG-CTASection2/manifest.json +45 -0
  192. package/templates/blocks/DDHG-HighlightArc/Component.tsx +243 -0
  193. package/templates/blocks/DDHG-HighlightArc/config.ts +85 -0
  194. package/templates/blocks/DDHG-HighlightArc/manifest.json +46 -0
  195. package/templates/blocks/DDHG-LogoMarquee/Component.tsx +93 -0
  196. package/templates/blocks/DDHG-LogoMarquee/config.ts +66 -0
  197. package/templates/blocks/DDHG-LogoMarquee/manifest.json +39 -0
  198. package/templates/blocks/DDHG-NavCodeGrid/Component.tsx +213 -0
  199. package/templates/blocks/DDHG-NavCodeGrid/config.ts +64 -0
  200. package/templates/blocks/DDHG-NavCodeGrid/manifest.json +45 -0
  201. package/templates/blocks/DDHG-ProcessSec/Component.tsx +575 -0
  202. package/templates/blocks/DDHG-ProcessSec/config.ts +170 -0
  203. package/templates/blocks/DDHG-ProcessSec/manifest.json +56 -0
  204. package/templates/blocks/DDHG-ServiceDetails/Component.tsx +164 -0
  205. package/templates/blocks/DDHG-ServiceDetails/ServiceDetailCard.tsx +394 -0
  206. package/templates/blocks/DDHG-ServiceDetails/config.ts +77 -0
  207. package/templates/blocks/DDHG-ServiceDetails/manifest.json +50 -0
  208. package/templates/blocks/DDHG-ServiceHero/Component.tsx +234 -0
  209. package/templates/blocks/DDHG-ServiceHero/config.ts +49 -0
  210. package/templates/blocks/DDHG-ServiceHero/manifest.json +26 -0
  211. package/templates/blocks/DDHG-ServiceOverview/Component.tsx +277 -0
  212. package/templates/blocks/DDHG-ServiceOverview/config.ts +64 -0
  213. package/templates/blocks/DDHG-ServiceOverview/manifest.json +44 -0
  214. package/templates/blocks/DDHG-StatsFAQ/Component.tsx +389 -0
  215. package/templates/blocks/DDHG-StatsFAQ/config.ts +204 -0
  216. package/templates/blocks/DDHG-StatsFAQ/manifest.json +45 -0
  217. package/templates/blocks/DDHG-TeamCards/Component.tsx +131 -0
  218. package/templates/blocks/DDHG-TeamCards/config.ts +48 -0
  219. package/templates/blocks/DDHG-TeamCards/manifest.json +29 -0
  220. package/templates/shared/src/components/BgLightning/index.tsx +242 -0
  221. package/templates/shared/src/components/ui/ShareButton/index.tsx +80 -0
  222. package/templates/shared/src/components/ui/anims/FadeOnScroll.tsx +48 -0
  223. package/templates/shared/src/components/ui/anims/FadeUpOnInView.tsx +63 -0
  224. package/templates/shared/src/components/ui/anims/GlareHover.tsx +111 -0
  225. package/templates/shared/src/components/ui/anims/LineAnims.tsx +81 -0
  226. package/templates/shared/src/components/ui/anims/TitleAnims01.tsx +54 -0
  227. package/templates/shared/src/components/ui/anims/animation-container.tsx +29 -0
  228. package/templates/shared/src/components/ui/anims/blur-in.tsx +26 -0
  229. package/templates/shared/src/components/ui/anims/counter.tsx +53 -0
  230. package/templates/shared/src/components/ui/anims/fade.tsx +83 -0
  231. package/templates/shared/src/components/ui/anims/gradual-spacing.tsx +39 -0
  232. package/templates/shared/src/components/ui/anims/pull-up.tsx +93 -0
  233. package/templates/shared/src/components/ui/anims/reveal-text.tsx +76 -0
  234. package/templates/shared/src/components/ui/anims/rotate-words.tsx +43 -0
  235. package/templates/shared/src/components/ui/anims/shiny-text.tsx +58 -0
  236. package/templates/shared/src/components/ui/anims/shuffle-text.tsx +85 -0
  237. package/templates/shared/src/components/ui/anims/split-text.tsx +211 -0
  238. package/templates/shared/src/components/ui/anims/staggered-fade.tsx +133 -0
  239. package/templates/shared/src/components/ui/anims/text-scroll.tsx +111 -0
  240. package/templates/shared/src/components/ui/anims/typing-effect.tsx +112 -0
  241. package/templates/shared/src/components/ui/button-dusted-fluid/index.tsx +1521 -0
  242. package/templates/shared/src/components/ui/separator.tsx +85 -0
  243. package/templates/shared/src/hooks/useBodyScrollLock.ts +97 -0
  244. package/templates/shared/src/hooks/useClickOutside.ts +28 -0
  245. package/templates/shared/src/utilities/renderCustomCSS.ts +5 -0
  246. package/templates/shared/src/utilities/smoothScroll.ts +65 -0
@@ -1,399 +1,399 @@
1
- import type { Block } from 'payload'
2
-
3
- export const DDStackCards: Block = {
4
- slug: 'DD-StackCards',
5
- interfaceName: 'DDStackCards',
6
- labels: {
7
- singular: 'Studio Stack Cards',
8
- plural: 'Studio Stack Cards Sections'
9
- },
10
- fields: [
11
- {
12
- type: 'tabs',
13
- tabs: [
14
- {
15
- label: 'Cards',
16
- fields: [
17
- {
18
- name: 'cards',
19
- type: 'array',
20
- label: 'Cards',
21
- minRows: 1,
22
- admin: {
23
- description:
24
- 'Each card stacks on top of the previous as the user scrolls. Cards are pinned progressively.'
25
- },
26
- fields: [
27
- {
28
- type: 'row',
29
- fields: [
30
- {
31
- name: 'iconName',
32
- type: 'text',
33
- label: 'Lucide Icon Name',
34
- required: true,
35
- admin: {
36
- width: '50%',
37
- description:
38
- 'e.g. Layout, Code2, Database, Gauge, SearchCheck, GitBranch, Layers'
39
- }
40
- },
41
- {
42
- name: 'number',
43
- type: 'text',
44
- label: 'Card Number',
45
- admin: {
46
- width: '50%',
47
- description: 'e.g. 01, 02 — displayed as the index label'
48
- }
49
- }
50
- ]
51
- },
52
- {
53
- name: 'title',
54
- type: 'text',
55
- label: 'Title',
56
- required: true
57
- },
58
- {
59
- name: 'content',
60
- type: 'richText',
61
- label: 'Description'
62
- },
63
- {
64
- type: 'row',
65
- fields: [
66
- {
67
- name: 'statValue',
68
- type: 'text',
69
- label: 'Stat Value',
70
- admin: {
71
- width: '50%',
72
- description: 'e.g. 3.2×, 0.8s, 98+, +180%'
73
- }
74
- },
75
- {
76
- name: 'statLabel',
77
- type: 'text',
78
- label: 'Stat Label',
79
- admin: {
80
- width: '50%',
81
- description: 'e.g. avg. conversion lift'
82
- }
83
- }
84
- ]
85
- },
86
- {
87
- name: 'tags',
88
- type: 'array',
89
- label: 'Tags',
90
- fields: [
91
- {
92
- name: 'tag',
93
- type: 'text',
94
- label: 'Tag',
95
- required: true
96
- }
97
- ]
98
- },
99
- {
100
- type: 'row',
101
- fields: [
102
- {
103
- name: 'ctaLabel',
104
- type: 'text',
105
- label: 'CTA Label',
106
- defaultValue: 'Learn more',
107
- admin: { width: '50%' }
108
- },
109
- {
110
- name: 'ctaHref',
111
- type: 'text',
112
- label: 'CTA Link',
113
- defaultValue: '#',
114
- admin: { width: '50%' }
115
- }
116
- ]
117
- },
118
- {
119
- name: 'accentVariant',
120
- type: 'select',
121
- label: 'Accent Color',
122
- defaultValue: 'lime',
123
- options: [
124
- { label: 'Lime', value: 'lime' },
125
- { label: 'Purple', value: 'purple' }
126
- ]
127
- },
128
- {
129
- name: 'image',
130
- type: 'upload',
131
- label: 'Card Image (Right Panel)',
132
- relationTo: 'media',
133
- admin: {
134
- description:
135
- 'Optional image displayed in the right panel. If not provided, a large icon watermark is shown instead.'
136
- }
137
- }
138
- ],
139
- defaultValue: [
140
- {
141
- iconName: 'Layout',
142
- number: '01',
143
- title: 'UX / UI Design',
144
- statValue: '3.2×',
145
- statLabel: 'avg. conversion lift',
146
- tags: [
147
- { tag: 'User Research' },
148
- { tag: 'Wireframing' },
149
- { tag: 'Design Systems' }
150
- ],
151
- ctaLabel: 'Learn more',
152
- ctaHref: '#',
153
- accentVariant: 'lime'
154
- },
155
- {
156
- iconName: 'Code2',
157
- number: '02',
158
- title: 'Web Development',
159
- statValue: '0.8s',
160
- statLabel: 'avg. load time',
161
- tags: [{ tag: 'React / Next.js' }, { tag: 'TypeScript' }, { tag: 'Edge CDN' }],
162
- ctaLabel: 'Learn more',
163
- ctaHref: '#',
164
- accentVariant: 'purple'
165
- },
166
- {
167
- iconName: 'Database',
168
- number: '03',
169
- title: 'CMS Systems',
170
- statValue: '100%',
171
- statLabel: 'content ownership',
172
- tags: [{ tag: 'Headless CMS' }, { tag: 'Payload' }, { tag: 'Contentful' }],
173
- ctaLabel: 'Learn more',
174
- ctaHref: '#',
175
- accentVariant: 'lime'
176
- },
177
- {
178
- iconName: 'Gauge',
179
- number: '04',
180
- title: 'Performance Optimisation',
181
- statValue: '98+',
182
- statLabel: 'lighthouse score',
183
- tags: [{ tag: 'Core Web Vitals' }, { tag: 'Lighthouse' }, { tag: 'CDN Tuning' }],
184
- ctaLabel: 'Learn more',
185
- ctaHref: '#',
186
- accentVariant: 'purple'
187
- },
188
- {
189
- iconName: 'SearchCheck',
190
- number: '05',
191
- title: 'SEO & Analytics',
192
- statValue: '+180%',
193
- statLabel: 'avg. organic growth',
194
- tags: [{ tag: 'Technical SEO' }, { tag: 'GA4' }, { tag: 'Schema Markup' }],
195
- ctaLabel: 'Learn more',
196
- ctaHref: '#',
197
- accentVariant: 'lime'
198
- },
199
- {
200
- iconName: 'GitBranch',
201
- number: '06',
202
- title: 'Scalable Systems',
203
- statValue: '∞',
204
- statLabel: 'scalable by design',
205
- tags: [{ tag: 'CI/CD' }, { tag: 'Microservices' }, { tag: 'Cloud Infra' }],
206
- ctaLabel: 'Learn more',
207
- ctaHref: '#',
208
- accentVariant: 'purple'
209
- }
210
- ]
211
- }
212
- ]
213
- },
214
- {
215
- label: 'Layout',
216
- fields: [
217
- {
218
- type: 'collapsible',
219
- label: 'Desktop',
220
- admin: {
221
- initCollapsed: false
222
- },
223
- fields: [
224
- {
225
- type: 'row',
226
- fields: [
227
- {
228
- name: 'cardOffset',
229
- type: 'number',
230
- label: 'Desktop Card Peek Offset (px)',
231
- defaultValue: 14,
232
- admin: {
233
- width: '50%',
234
- description: 'How many px each card peeks above the previous stacked card.'
235
- }
236
- },
237
- {
238
- name: 'initialStickyTop',
239
- type: 'number',
240
- label: 'Desktop Initial Sticky Top (px)',
241
- defaultValue: 0,
242
- admin: {
243
- width: '50%',
244
- description: 'Top offset in px for the first card when pinned.'
245
- }
246
- }
247
- ]
248
- },
249
- {
250
- type: 'row',
251
- fields: [
252
- {
253
- name: 'depthZ',
254
- type: 'number',
255
- label: 'Desktop Depth Z (px)',
256
- defaultValue: 40,
257
- admin: {
258
- width: '50%',
259
- description: 'How far each card recedes in 3D space per stacked level.'
260
- }
261
- },
262
- {
263
- name: 'scaleStep',
264
- type: 'number',
265
- label: 'Desktop Scale Step per Level',
266
- defaultValue: 0.18,
267
- admin: {
268
- width: '50%',
269
- description: 'Scale reduction per stacked level.'
270
- }
271
- }
272
- ]
273
- }
274
- ]
275
- },
276
- {
277
- type: 'collapsible',
278
- label: 'Tablet',
279
- admin: {
280
- initCollapsed: true
281
- },
282
- fields: [
283
- {
284
- type: 'row',
285
- fields: [
286
- {
287
- name: 'cardOffsetTablet',
288
- type: 'number',
289
- label: 'Tablet Card Peek Offset (px)',
290
- defaultValue: 10,
291
- admin: {
292
- width: '50%'
293
- }
294
- },
295
- {
296
- name: 'initialStickyTopTablet',
297
- type: 'number',
298
- label: 'Tablet Initial Sticky Top (px)',
299
- defaultValue: 0,
300
- admin: {
301
- width: '50%'
302
- }
303
- }
304
- ]
305
- },
306
- {
307
- type: 'row',
308
- fields: [
309
- {
310
- name: 'depthZTablet',
311
- type: 'number',
312
- label: 'Tablet Depth Z (px)',
313
- defaultValue: 24,
314
- admin: {
315
- width: '50%'
316
- }
317
- },
318
- {
319
- name: 'scaleStepTablet',
320
- type: 'number',
321
- label: 'Tablet Scale Step per Level',
322
- defaultValue: 0.08,
323
- admin: {
324
- width: '50%'
325
- }
326
- }
327
- ]
328
- }
329
- ]
330
- },
331
- {
332
- type: 'collapsible',
333
- label: 'Mobile',
334
- admin: {
335
- initCollapsed: true
336
- },
337
- fields: [
338
- {
339
- type: 'row',
340
- fields: [
341
- {
342
- name: 'cardOffsetMobile',
343
- type: 'number',
344
- label: 'Mobile Card Peek Offset (px)',
345
- defaultValue: 7,
346
- admin: {
347
- width: '50%'
348
- }
349
- },
350
- {
351
- name: 'initialStickyTopMobile',
352
- type: 'number',
353
- label: 'Mobile Initial Sticky Top (px)',
354
- defaultValue: 0,
355
- admin: {
356
- width: '50%'
357
- }
358
- }
359
- ]
360
- },
361
- {
362
- type: 'row',
363
- fields: [
364
- {
365
- name: 'depthZMobile',
366
- type: 'number',
367
- label: 'Mobile Depth Z (px)',
368
- defaultValue: 12,
369
- admin: {
370
- width: '50%'
371
- }
372
- },
373
- {
374
- name: 'scaleStepMobile',
375
- type: 'number',
376
- label: 'Mobile Scale Step per Level',
377
- defaultValue: 0.045,
378
- admin: {
379
- width: '50%'
380
- }
381
- }
382
- ]
383
- }
384
- ]
385
- }
386
- ]
387
- }
388
- ]
389
- },
390
- {
391
- name: 'sectionId',
392
- type: 'text',
393
- label: 'Section ID',
394
- admin: {
395
- description: 'HTML id attribute for anchor linking, e.g. "engine"'
396
- }
397
- }
398
- ]
399
- }
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDStackCards: Block = {
4
+ slug: 'DD-StackCards',
5
+ interfaceName: 'DDStackCards',
6
+ labels: {
7
+ singular: 'Studio Stack Cards',
8
+ plural: 'Studio Stack Cards Sections'
9
+ },
10
+ fields: [
11
+ {
12
+ type: 'tabs',
13
+ tabs: [
14
+ {
15
+ label: 'Cards',
16
+ fields: [
17
+ {
18
+ name: 'cards',
19
+ type: 'array',
20
+ label: 'Cards',
21
+ minRows: 1,
22
+ admin: {
23
+ description:
24
+ 'Each card stacks on top of the previous as the user scrolls. Cards are pinned progressively.'
25
+ },
26
+ fields: [
27
+ {
28
+ type: 'row',
29
+ fields: [
30
+ {
31
+ name: 'iconName',
32
+ type: 'text',
33
+ label: 'Lucide Icon Name',
34
+ required: true,
35
+ admin: {
36
+ width: '50%',
37
+ description:
38
+ 'e.g. Layout, Code2, Database, Gauge, SearchCheck, GitBranch, Layers'
39
+ }
40
+ },
41
+ {
42
+ name: 'number',
43
+ type: 'text',
44
+ label: 'Card Number',
45
+ admin: {
46
+ width: '50%',
47
+ description: 'e.g. 01, 02 — displayed as the index label'
48
+ }
49
+ }
50
+ ]
51
+ },
52
+ {
53
+ name: 'title',
54
+ type: 'text',
55
+ label: 'Title',
56
+ required: true
57
+ },
58
+ {
59
+ name: 'content',
60
+ type: 'richText',
61
+ label: 'Description'
62
+ },
63
+ {
64
+ type: 'row',
65
+ fields: [
66
+ {
67
+ name: 'statValue',
68
+ type: 'text',
69
+ label: 'Stat Value',
70
+ admin: {
71
+ width: '50%',
72
+ description: 'e.g. 3.2×, 0.8s, 98+, +180%'
73
+ }
74
+ },
75
+ {
76
+ name: 'statLabel',
77
+ type: 'text',
78
+ label: 'Stat Label',
79
+ admin: {
80
+ width: '50%',
81
+ description: 'e.g. avg. conversion lift'
82
+ }
83
+ }
84
+ ]
85
+ },
86
+ {
87
+ name: 'tags',
88
+ type: 'array',
89
+ label: 'Tags',
90
+ fields: [
91
+ {
92
+ name: 'tag',
93
+ type: 'text',
94
+ label: 'Tag',
95
+ required: true
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ type: 'row',
101
+ fields: [
102
+ {
103
+ name: 'ctaLabel',
104
+ type: 'text',
105
+ label: 'CTA Label',
106
+ defaultValue: 'Learn more',
107
+ admin: { width: '50%' }
108
+ },
109
+ {
110
+ name: 'ctaHref',
111
+ type: 'text',
112
+ label: 'CTA Link',
113
+ defaultValue: '#',
114
+ admin: { width: '50%' }
115
+ }
116
+ ]
117
+ },
118
+ {
119
+ name: 'accentVariant',
120
+ type: 'select',
121
+ label: 'Accent Color',
122
+ defaultValue: 'lime',
123
+ options: [
124
+ { label: 'Lime', value: 'lime' },
125
+ { label: 'Purple', value: 'purple' }
126
+ ]
127
+ },
128
+ {
129
+ name: 'image',
130
+ type: 'upload',
131
+ label: 'Card Image (Right Panel)',
132
+ relationTo: 'media',
133
+ admin: {
134
+ description:
135
+ 'Optional image displayed in the right panel. If not provided, a large icon watermark is shown instead.'
136
+ }
137
+ }
138
+ ],
139
+ defaultValue: [
140
+ {
141
+ iconName: 'Layout',
142
+ number: '01',
143
+ title: 'UX / UI Design',
144
+ statValue: '3.2×',
145
+ statLabel: 'avg. conversion lift',
146
+ tags: [
147
+ { tag: 'User Research' },
148
+ { tag: 'Wireframing' },
149
+ { tag: 'Design Systems' }
150
+ ],
151
+ ctaLabel: 'Learn more',
152
+ ctaHref: '#',
153
+ accentVariant: 'lime'
154
+ },
155
+ {
156
+ iconName: 'Code2',
157
+ number: '02',
158
+ title: 'Web Development',
159
+ statValue: '0.8s',
160
+ statLabel: 'avg. load time',
161
+ tags: [{ tag: 'React / Next.js' }, { tag: 'TypeScript' }, { tag: 'Edge CDN' }],
162
+ ctaLabel: 'Learn more',
163
+ ctaHref: '#',
164
+ accentVariant: 'purple'
165
+ },
166
+ {
167
+ iconName: 'Database',
168
+ number: '03',
169
+ title: 'CMS Systems',
170
+ statValue: '100%',
171
+ statLabel: 'content ownership',
172
+ tags: [{ tag: 'Headless CMS' }, { tag: 'Payload' }, { tag: 'Contentful' }],
173
+ ctaLabel: 'Learn more',
174
+ ctaHref: '#',
175
+ accentVariant: 'lime'
176
+ },
177
+ {
178
+ iconName: 'Gauge',
179
+ number: '04',
180
+ title: 'Performance Optimisation',
181
+ statValue: '98+',
182
+ statLabel: 'lighthouse score',
183
+ tags: [{ tag: 'Core Web Vitals' }, { tag: 'Lighthouse' }, { tag: 'CDN Tuning' }],
184
+ ctaLabel: 'Learn more',
185
+ ctaHref: '#',
186
+ accentVariant: 'purple'
187
+ },
188
+ {
189
+ iconName: 'SearchCheck',
190
+ number: '05',
191
+ title: 'SEO & Analytics',
192
+ statValue: '+180%',
193
+ statLabel: 'avg. organic growth',
194
+ tags: [{ tag: 'Technical SEO' }, { tag: 'GA4' }, { tag: 'Schema Markup' }],
195
+ ctaLabel: 'Learn more',
196
+ ctaHref: '#',
197
+ accentVariant: 'lime'
198
+ },
199
+ {
200
+ iconName: 'GitBranch',
201
+ number: '06',
202
+ title: 'Scalable Systems',
203
+ statValue: '∞',
204
+ statLabel: 'scalable by design',
205
+ tags: [{ tag: 'CI/CD' }, { tag: 'Microservices' }, { tag: 'Cloud Infra' }],
206
+ ctaLabel: 'Learn more',
207
+ ctaHref: '#',
208
+ accentVariant: 'purple'
209
+ }
210
+ ]
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ label: 'Layout',
216
+ fields: [
217
+ {
218
+ type: 'collapsible',
219
+ label: 'Desktop',
220
+ admin: {
221
+ initCollapsed: false
222
+ },
223
+ fields: [
224
+ {
225
+ type: 'row',
226
+ fields: [
227
+ {
228
+ name: 'cardOffset',
229
+ type: 'number',
230
+ label: 'Desktop Card Peek Offset (px)',
231
+ defaultValue: 14,
232
+ admin: {
233
+ width: '50%',
234
+ description: 'How many px each card peeks above the previous stacked card.'
235
+ }
236
+ },
237
+ {
238
+ name: 'initialStickyTop',
239
+ type: 'number',
240
+ label: 'Desktop Initial Sticky Top (px)',
241
+ defaultValue: 0,
242
+ admin: {
243
+ width: '50%',
244
+ description: 'Top offset in px for the first card when pinned.'
245
+ }
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ type: 'row',
251
+ fields: [
252
+ {
253
+ name: 'depthZ',
254
+ type: 'number',
255
+ label: 'Desktop Depth Z (px)',
256
+ defaultValue: 40,
257
+ admin: {
258
+ width: '50%',
259
+ description: 'How far each card recedes in 3D space per stacked level.'
260
+ }
261
+ },
262
+ {
263
+ name: 'scaleStep',
264
+ type: 'number',
265
+ label: 'Desktop Scale Step per Level',
266
+ defaultValue: 0.18,
267
+ admin: {
268
+ width: '50%',
269
+ description: 'Scale reduction per stacked level.'
270
+ }
271
+ }
272
+ ]
273
+ }
274
+ ]
275
+ },
276
+ {
277
+ type: 'collapsible',
278
+ label: 'Tablet',
279
+ admin: {
280
+ initCollapsed: true
281
+ },
282
+ fields: [
283
+ {
284
+ type: 'row',
285
+ fields: [
286
+ {
287
+ name: 'cardOffsetTablet',
288
+ type: 'number',
289
+ label: 'Tablet Card Peek Offset (px)',
290
+ defaultValue: 10,
291
+ admin: {
292
+ width: '50%'
293
+ }
294
+ },
295
+ {
296
+ name: 'initialStickyTopTablet',
297
+ type: 'number',
298
+ label: 'Tablet Initial Sticky Top (px)',
299
+ defaultValue: 0,
300
+ admin: {
301
+ width: '50%'
302
+ }
303
+ }
304
+ ]
305
+ },
306
+ {
307
+ type: 'row',
308
+ fields: [
309
+ {
310
+ name: 'depthZTablet',
311
+ type: 'number',
312
+ label: 'Tablet Depth Z (px)',
313
+ defaultValue: 24,
314
+ admin: {
315
+ width: '50%'
316
+ }
317
+ },
318
+ {
319
+ name: 'scaleStepTablet',
320
+ type: 'number',
321
+ label: 'Tablet Scale Step per Level',
322
+ defaultValue: 0.08,
323
+ admin: {
324
+ width: '50%'
325
+ }
326
+ }
327
+ ]
328
+ }
329
+ ]
330
+ },
331
+ {
332
+ type: 'collapsible',
333
+ label: 'Mobile',
334
+ admin: {
335
+ initCollapsed: true
336
+ },
337
+ fields: [
338
+ {
339
+ type: 'row',
340
+ fields: [
341
+ {
342
+ name: 'cardOffsetMobile',
343
+ type: 'number',
344
+ label: 'Mobile Card Peek Offset (px)',
345
+ defaultValue: 7,
346
+ admin: {
347
+ width: '50%'
348
+ }
349
+ },
350
+ {
351
+ name: 'initialStickyTopMobile',
352
+ type: 'number',
353
+ label: 'Mobile Initial Sticky Top (px)',
354
+ defaultValue: 0,
355
+ admin: {
356
+ width: '50%'
357
+ }
358
+ }
359
+ ]
360
+ },
361
+ {
362
+ type: 'row',
363
+ fields: [
364
+ {
365
+ name: 'depthZMobile',
366
+ type: 'number',
367
+ label: 'Mobile Depth Z (px)',
368
+ defaultValue: 12,
369
+ admin: {
370
+ width: '50%'
371
+ }
372
+ },
373
+ {
374
+ name: 'scaleStepMobile',
375
+ type: 'number',
376
+ label: 'Mobile Scale Step per Level',
377
+ defaultValue: 0.045,
378
+ admin: {
379
+ width: '50%'
380
+ }
381
+ }
382
+ ]
383
+ }
384
+ ]
385
+ }
386
+ ]
387
+ }
388
+ ]
389
+ },
390
+ {
391
+ name: 'sectionId',
392
+ type: 'text',
393
+ label: 'Section ID',
394
+ admin: {
395
+ description: 'HTML id attribute for anchor linking, e.g. "engine"'
396
+ }
397
+ }
398
+ ]
399
+ }