blocks-dusted 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/README.md +35 -0
  2. package/package.json +5 -2
  3. package/src/cli.js +39 -3
  4. package/src/commands/shop.js +59 -0
  5. package/src/commands/warehouse.js +73 -0
  6. package/src/utils/paths.js +13 -13
  7. package/templates/blocks/DD-Accordion/Component.tsx +229 -0
  8. package/templates/blocks/DD-Accordion/README.md +3 -0
  9. package/templates/blocks/DD-Accordion/config.ts +73 -0
  10. package/templates/blocks/DD-Accordion/manifest.json +75 -0
  11. package/templates/blocks/DD-AnimText/Component.tsx +788 -0
  12. package/templates/blocks/DD-AnimText/README.md +3 -0
  13. package/templates/blocks/DD-AnimText/config.ts +295 -0
  14. package/templates/blocks/DD-AnimText/manifest.json +85 -0
  15. package/templates/blocks/DD-AsideNav/Component.tsx +321 -0
  16. package/templates/blocks/DD-AsideNav/config.ts +204 -0
  17. package/templates/blocks/DD-AsideNav/manifest.json +80 -0
  18. package/templates/blocks/DD-Banner/Component.tsx +51 -0
  19. package/templates/blocks/DD-Banner/config.ts +57 -0
  20. package/templates/blocks/DD-Banner/manifest.json +72 -0
  21. package/templates/blocks/DD-BgLightning/Component.tsx +44 -0
  22. package/templates/blocks/DD-BgLightning/README.md +3 -0
  23. package/templates/blocks/DD-BgLightning/config.ts +97 -0
  24. package/templates/blocks/DD-BgLightning/manifest.json +79 -0
  25. package/templates/blocks/DD-BookCall/Component.tsx +535 -535
  26. package/templates/blocks/DD-BookCall/config.ts +238 -238
  27. package/templates/blocks/DD-ButtonPop/Component.tsx +117 -0
  28. package/templates/blocks/DD-ButtonPop/config.ts +105 -0
  29. package/templates/blocks/DD-ButtonPop/manifest.json +88 -0
  30. package/templates/blocks/DD-ButtonPop/svg-icons/Dust2.tsx +167 -0
  31. package/templates/blocks/DD-Card/Component.tsx +251 -0
  32. package/templates/blocks/DD-Card/README.md +4 -0
  33. package/templates/blocks/DD-Card/config.ts +154 -0
  34. package/templates/blocks/DD-Card/manifest.json +82 -0
  35. package/templates/blocks/DD-CardTemplate01/Component.tsx +140 -140
  36. package/templates/blocks/DD-CardTemplate01/config.ts +106 -106
  37. package/templates/blocks/DD-Carousel-A/Component.tsx +249 -249
  38. package/templates/blocks/DD-Carousel-B/Component.tsx +403 -403
  39. package/templates/blocks/DD-Chip/Component.tsx +250 -0
  40. package/templates/blocks/DD-Chip/EXAMPLES.md +313 -0
  41. package/templates/blocks/DD-Chip/README.md +202 -0
  42. package/templates/blocks/DD-Chip/config.ts +369 -0
  43. package/templates/blocks/DD-Chip/manifest.json +74 -0
  44. package/templates/blocks/DD-ComparisonTable/Component.tsx +256 -256
  45. package/templates/blocks/DD-Contact/Component.tsx +435 -434
  46. package/templates/blocks/DD-Contact/config.ts +22 -22
  47. package/templates/blocks/DD-Counter/Component.tsx +190 -0
  48. package/templates/blocks/DD-Counter/README.md +4 -0
  49. package/templates/blocks/DD-Counter/config.ts +291 -0
  50. package/templates/blocks/DD-Counter/manifest.json +74 -0
  51. package/templates/blocks/DD-CustomCSS/Component.tsx +8 -0
  52. package/templates/blocks/DD-CustomCSS/README.md +4 -0
  53. package/templates/blocks/DD-CustomCSS/addToLayout.md +5 -0
  54. package/templates/blocks/DD-CustomCSS/config.ts +22 -0
  55. package/templates/blocks/DD-CustomCSS/manifest.json +72 -0
  56. package/templates/blocks/DD-CustomCSS/renderCustomCSS.md +7 -0
  57. package/templates/blocks/DD-FeatCat/Component.tsx +302 -302
  58. package/templates/blocks/DD-FeatCat/config.ts +201 -201
  59. package/templates/blocks/DD-FeatStrip/Component.tsx +585 -585
  60. package/templates/blocks/DD-FeatStrip/config.ts +134 -134
  61. package/templates/blocks/DD-FluidBtn/ButtonsEyeCatching.tsx +628 -0
  62. package/templates/blocks/DD-FluidBtn/Component.tsx +43 -0
  63. package/templates/blocks/DD-FluidBtn/README.md +6 -0
  64. package/templates/blocks/DD-FluidBtn/config.ts +102 -0
  65. package/templates/blocks/DD-FluidBtn/manifest.json +86 -0
  66. package/templates/blocks/DD-GooeyInfo/Component.tsx +149 -0
  67. package/templates/blocks/DD-GooeyInfo/config.ts +135 -0
  68. package/templates/blocks/DD-GooeyInfo/manifest.json +72 -0
  69. package/templates/blocks/DD-Hero/Component.tsx +297 -297
  70. package/templates/blocks/DD-Hero/config.ts +267 -267
  71. package/templates/blocks/DD-HorizontalScroll/Component.tsx +936 -936
  72. package/templates/blocks/DD-HorizontalScroll/config.ts +231 -231
  73. package/templates/blocks/DD-Icon/Component.tsx +287 -0
  74. package/templates/blocks/DD-Icon/README.md +4 -0
  75. package/templates/blocks/DD-Icon/config.ts +258 -0
  76. package/templates/blocks/DD-Icon/hooks/revalidateBlockIds.ts +66 -0
  77. package/templates/blocks/DD-Icon/manifest.json +82 -0
  78. package/templates/blocks/DD-IconButton/Component.tsx +455 -0
  79. package/templates/blocks/DD-IconButton/README.md +326 -0
  80. package/templates/blocks/DD-IconButton/config.ts +239 -0
  81. package/templates/blocks/DD-IconButton/manifest.json +85 -0
  82. package/templates/blocks/DD-IdTag/Component.tsx +21 -0
  83. package/templates/blocks/DD-IdTag/README.md +4 -0
  84. package/templates/blocks/DD-IdTag/config.ts +41 -0
  85. package/templates/blocks/DD-IdTag/manifest.json +72 -0
  86. package/templates/blocks/DD-Iframe/Component.tsx +45 -0
  87. package/templates/blocks/DD-Iframe/README.md +4 -0
  88. package/templates/blocks/DD-Iframe/config.ts +47 -0
  89. package/templates/blocks/DD-Iframe/manifest.json +72 -0
  90. package/templates/blocks/DD-IframeMedia/Component.tsx +133 -0
  91. package/templates/blocks/DD-IframeMedia/README.md +4 -0
  92. package/templates/blocks/DD-IframeMedia/config.ts +79 -0
  93. package/templates/blocks/DD-IframeMedia/manifest.json +72 -0
  94. package/templates/blocks/DD-LineAnim/Component.tsx +36 -0
  95. package/templates/blocks/DD-LineAnim/README.md +4 -0
  96. package/templates/blocks/DD-LineAnim/config.ts +90 -0
  97. package/templates/blocks/DD-LineAnim/manifest.json +80 -0
  98. package/templates/blocks/DD-LinkGrid/Component.tsx +119 -0
  99. package/templates/blocks/DD-LinkGrid/README.md +4 -0
  100. package/templates/blocks/DD-LinkGrid/config.ts +51 -0
  101. package/templates/blocks/DD-LinkGrid/manifest.json +74 -0
  102. package/templates/blocks/DD-LogoMarq/Component.tsx +132 -0
  103. package/templates/blocks/DD-LogoMarq/README.md +4 -0
  104. package/templates/blocks/DD-LogoMarq/config.ts +264 -0
  105. package/templates/blocks/DD-LogoMarq/manifest.json +82 -0
  106. package/templates/blocks/DD-Lottie/Component.tsx +459 -0
  107. package/templates/blocks/DD-Lottie/README.md +4 -0
  108. package/templates/blocks/DD-Lottie/config.ts +379 -0
  109. package/templates/blocks/DD-Lottie/index.tsx +28 -0
  110. package/templates/blocks/DD-Lottie/manifest.json +83 -0
  111. package/templates/blocks/DD-MagicBento/Component.tsx +777 -0
  112. package/templates/blocks/DD-MagicBento/README.md +4 -0
  113. package/templates/blocks/DD-MagicBento/config.ts +264 -0
  114. package/templates/blocks/DD-MagicBento/manifest.json +74 -0
  115. package/templates/blocks/DD-MasonaryMedia/Component.tsx +545 -545
  116. package/templates/blocks/DD-MasonaryMedia/config.ts +2 -2
  117. package/templates/blocks/DD-MasonaryMedia/vendor.d.ts +2 -2
  118. package/templates/blocks/DD-Masonry/Component.tsx +645 -0
  119. package/templates/blocks/DD-Masonry/README.md +4 -0
  120. package/templates/blocks/DD-Masonry/config.ts +475 -0
  121. package/templates/blocks/DD-Masonry/manifest.json +82 -0
  122. package/templates/blocks/DD-Pricing/Component.tsx +2 -5
  123. package/templates/blocks/DD-Process/Component.tsx +2 -4
  124. package/templates/blocks/DD-Process/config.ts +150 -150
  125. package/templates/blocks/DD-Progress/Component.tsx +156 -0
  126. package/templates/blocks/DD-Progress/README.md +4 -0
  127. package/templates/blocks/DD-Progress/config.ts +175 -0
  128. package/templates/blocks/DD-Progress/manifest.json +74 -0
  129. package/templates/blocks/DD-ProjHeader/Component.tsx +91 -0
  130. package/templates/blocks/DD-ProjHeader/README.md +4 -0
  131. package/templates/blocks/DD-ProjHeader/config.ts +96 -0
  132. package/templates/blocks/DD-ProjHeader/manifest.json +72 -0
  133. package/templates/blocks/DD-ProjSlider/Component.tsx +123 -0
  134. package/templates/blocks/DD-ProjSlider/README.md +4 -0
  135. package/templates/blocks/DD-ProjSlider/config.ts +64 -0
  136. package/templates/blocks/DD-ProjSlider/manifest.json +72 -0
  137. package/templates/blocks/DD-ScrollText/Component.tsx +114 -0
  138. package/templates/blocks/DD-ScrollText/README.md +4 -0
  139. package/templates/blocks/DD-ScrollText/config.ts +58 -0
  140. package/templates/blocks/DD-ScrollText/manifest.json +72 -0
  141. package/templates/blocks/DD-Section/Component.tsx +266 -266
  142. package/templates/blocks/DD-Separator/Component.tsx +66 -0
  143. package/templates/blocks/DD-Separator/README.md +4 -0
  144. package/templates/blocks/DD-Separator/config.ts +58 -0
  145. package/templates/blocks/DD-Separator/manifest.json +72 -0
  146. package/templates/blocks/DD-Services/Component.tsx +176 -176
  147. package/templates/blocks/DD-Services/config.ts +149 -149
  148. package/templates/blocks/DD-ShowcaseGrid/Component.tsx +307 -307
  149. package/templates/blocks/DD-Slider-A/Component.tsx +1 -1
  150. package/templates/blocks/DD-StackCards/Component.tsx +1 -1
  151. package/templates/blocks/DD-StackCards/config.ts +399 -399
  152. package/templates/blocks/DD-Team/Component.tsx +247 -247
  153. package/templates/blocks/DD-Team/config.ts +173 -173
  154. package/templates/blocks/DD-TeamCards/Component.tsx +251 -0
  155. package/templates/blocks/DD-TeamCards/README.md +4 -0
  156. package/templates/blocks/DD-TeamCards/config.ts +302 -0
  157. package/templates/blocks/DD-TeamCards/manifest.json +74 -0
  158. package/templates/blocks/DD-TechStack/Component.tsx +174 -174
  159. package/templates/blocks/DD-TechStack/config.ts +153 -153
  160. package/templates/blocks/DD-TestMarq/Component.tsx +132 -0
  161. package/templates/blocks/DD-TestMarq/README.md +4 -0
  162. package/templates/blocks/DD-TestMarq/RowLabel.tsx +9 -0
  163. package/templates/blocks/DD-TestMarq/config.ts +88 -0
  164. package/templates/blocks/DD-TestMarq/manifest.json +72 -0
  165. package/templates/blocks/DD-Testim/Component.tsx +247 -0
  166. package/templates/blocks/DD-Testim/README.md +4 -0
  167. package/templates/blocks/DD-Testim/config.ts +101 -0
  168. package/templates/blocks/DD-Testim/manifest.json +75 -0
  169. package/templates/blocks/DD-Testim2/Component.tsx +256 -0
  170. package/templates/blocks/DD-Testim2/README.md +4 -0
  171. package/templates/blocks/DD-Testim2/config.ts +100 -0
  172. package/templates/blocks/DD-Testim2/manifest.json +74 -0
  173. package/templates/blocks/DD-Testimonials/Component.tsx +139 -147
  174. package/templates/blocks/DD-Testimonials/config.ts +120 -120
  175. package/templates/blocks/DD-TextMarq/Component.tsx +157 -0
  176. package/templates/blocks/DD-TextMarq/README.md +4 -0
  177. package/templates/blocks/DD-TextMarq/config.ts +237 -0
  178. package/templates/blocks/DD-TextMarq/manifest.json +82 -0
  179. package/templates/blocks/DD-Thanks/Component.tsx +501 -0
  180. package/templates/blocks/DD-Thanks/README.md +4 -0
  181. package/templates/blocks/DD-Thanks/config.ts +224 -0
  182. package/templates/blocks/DD-Thanks/manifest.json +72 -0
  183. package/templates/blocks/DD-VertMarq/Component.tsx +154 -0
  184. package/templates/blocks/DD-VertMarq/README.md +4 -0
  185. package/templates/blocks/DD-VertMarq/config.ts +236 -0
  186. package/templates/blocks/DD-VertMarq/dist/index.css +6 -0
  187. package/templates/blocks/DD-VertMarq/dist/index.min.css +1 -0
  188. package/templates/blocks/DD-VertMarq/manifest.json +74 -0
  189. package/templates/blocks/DD-Work/Component.tsx +318 -315
  190. package/templates/blocks/DD-Work/config.ts +165 -165
  191. package/templates/blocks/DD-Work-B/Component.tsx +294 -294
  192. package/templates/blocks/DDHG-CTASection2/Component.tsx +185 -0
  193. package/templates/blocks/DDHG-CTASection2/config.ts +140 -0
  194. package/templates/blocks/DDHG-CTASection2/manifest.json +45 -0
  195. package/templates/blocks/DDHG-HighlightArc/Component.tsx +243 -0
  196. package/templates/blocks/DDHG-HighlightArc/config.ts +85 -0
  197. package/templates/blocks/DDHG-HighlightArc/manifest.json +46 -0
  198. package/templates/blocks/DDHG-LogoMarquee/Component.tsx +143 -0
  199. package/templates/blocks/DDHG-LogoMarquee/config.ts +154 -0
  200. package/templates/blocks/DDHG-LogoMarquee/manifest.json +39 -0
  201. package/templates/blocks/DDHG-NavCodeGrid/Component.tsx +227 -0
  202. package/templates/blocks/DDHG-NavCodeGrid/config.ts +64 -0
  203. package/templates/blocks/DDHG-NavCodeGrid/manifest.json +45 -0
  204. package/templates/blocks/DDHG-ProcessSec/Component.tsx +574 -0
  205. package/templates/blocks/DDHG-ProcessSec/config.ts +170 -0
  206. package/templates/blocks/DDHG-ProcessSec/manifest.json +56 -0
  207. package/templates/blocks/DDHG-ServiceDetails/Component.tsx +164 -0
  208. package/templates/blocks/DDHG-ServiceDetails/ServiceDetailCard.tsx +390 -0
  209. package/templates/blocks/DDHG-ServiceDetails/config.ts +77 -0
  210. package/templates/blocks/DDHG-ServiceDetails/manifest.json +50 -0
  211. package/templates/blocks/DDHG-ServiceHero/Component.tsx +234 -0
  212. package/templates/blocks/DDHG-ServiceHero/config.ts +49 -0
  213. package/templates/blocks/DDHG-ServiceHero/manifest.json +26 -0
  214. package/templates/blocks/DDHG-ServiceOverview/Component.tsx +277 -0
  215. package/templates/blocks/DDHG-ServiceOverview/config.ts +64 -0
  216. package/templates/blocks/DDHG-ServiceOverview/manifest.json +44 -0
  217. package/templates/blocks/DDHG-StatsFAQ/Component.tsx +389 -0
  218. package/templates/blocks/DDHG-StatsFAQ/config.ts +204 -0
  219. package/templates/blocks/DDHG-StatsFAQ/manifest.json +45 -0
  220. package/templates/blocks/DDHG-TeamCards/Component.tsx +169 -0
  221. package/templates/blocks/DDHG-TeamCards/config.ts +48 -0
  222. package/templates/blocks/DDHG-TeamCards/manifest.json +29 -0
  223. package/templates/shared/src/components/BgLightning/index.tsx +242 -0
  224. package/templates/shared/src/components/ui/ShareButton/index.tsx +80 -0
  225. package/templates/shared/src/components/ui/anims/FadeOnScroll.tsx +48 -0
  226. package/templates/shared/src/components/ui/anims/FadeUpOnInView.tsx +63 -0
  227. package/templates/shared/src/components/ui/anims/GlareHover.tsx +111 -0
  228. package/templates/shared/src/components/ui/anims/LineAnims.tsx +81 -0
  229. package/templates/shared/src/components/ui/anims/TitleAnims01.tsx +54 -0
  230. package/templates/shared/src/components/ui/anims/animation-container.tsx +29 -0
  231. package/templates/shared/src/components/ui/anims/blur-in.tsx +26 -0
  232. package/templates/shared/src/components/ui/anims/counter.tsx +53 -0
  233. package/templates/shared/src/components/ui/anims/fade.tsx +83 -0
  234. package/templates/shared/src/components/ui/anims/gradual-spacing.tsx +39 -0
  235. package/templates/shared/src/components/ui/anims/pull-up.tsx +93 -0
  236. package/templates/shared/src/components/ui/anims/reveal-text.tsx +76 -0
  237. package/templates/shared/src/components/ui/anims/rotate-words.tsx +43 -0
  238. package/templates/shared/src/components/ui/anims/shiny-text.tsx +58 -0
  239. package/templates/shared/src/components/ui/anims/shuffle-text.tsx +85 -0
  240. package/templates/shared/src/components/ui/anims/split-text.tsx +211 -0
  241. package/templates/shared/src/components/ui/anims/staggered-fade.tsx +133 -0
  242. package/templates/shared/src/components/ui/anims/text-scroll.tsx +111 -0
  243. package/templates/shared/src/components/ui/anims/typing-effect.tsx +112 -0
  244. package/templates/shared/src/components/ui/button-dusted-fluid/index.tsx +1521 -0
  245. package/templates/shared/src/components/ui/separator.tsx +85 -0
  246. package/templates/shared/src/hooks/useBodyScrollLock.ts +97 -0
  247. package/templates/shared/src/hooks/useClickOutside.ts +28 -0
  248. package/templates/shared/src/utilities/renderCustomCSS.ts +5 -0
  249. 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
+ }