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,389 +1,389 @@
1
- import type { Block } from 'payload'
2
-
3
- export const DDMasonaryMedia: Block = {
4
- slug: 'DD-MasonaryMedia',
5
- dbName: 'studio_masonry',
6
- interfaceName: 'DDMasonaryMedia',
7
- labels: {
8
- singular: 'Studio Masonary Media',
9
- plural: 'Studio Masonary Media'
10
- },
11
- fields: [
12
- {
13
- type: 'tabs',
14
- tabs: [
15
- {
16
- label: 'Header',
17
- fields: [
18
- {
19
- name: 'eyebrow',
20
- type: 'text',
21
- label: 'Eyebrow Label',
22
- defaultValue: 'Featured systems'
23
- },
24
- {
25
- name: 'headlineMain',
26
- type: 'text',
27
- label: 'Headline Main',
28
- defaultValue: 'Components, blocks, and templates'
29
- },
30
- {
31
- name: 'headlineAccent',
32
- type: 'text',
33
- label: 'Headline Accent',
34
- defaultValue: 'built to feel alive'
35
- },
36
- {
37
- name: 'subtext',
38
- type: 'textarea',
39
- label: 'Subtext',
40
- defaultValue:
41
- 'A curated showcase of production-ready interface pieces, with static previews and motion demos on hover.'
42
- }
43
- ]
44
- },
45
- {
46
- label: 'Cards',
47
- fields: [
48
- {
49
- name: 'items',
50
- type: 'array',
51
- label: 'Showcase Cards',
52
- minRows: 1,
53
- defaultValue: [
54
- {
55
- title: 'Premium UI Blocks',
56
- category: 'Components',
57
- framework: 'Next.js / Payload',
58
- description:
59
- 'Reusable interface sections for modern product, agency, and commerce experiences.',
60
- href: '/products/components',
61
- linkLabel: 'Browse components',
62
- free: false,
63
- priceLabel: 'From AUD $29',
64
- aspectRatio: '16/9'
65
- },
66
- {
67
- title: 'Website Templates',
68
- category: 'Templates',
69
- framework: 'Next.js / Payload',
70
- description:
71
- 'Full-page systems and starter kits designed to ship faster without looking templated.',
72
- href: '/products/templates',
73
- linkLabel: 'View templates',
74
- free: false,
75
- priceLabel: 'From AUD $89',
76
- aspectRatio: '16/9'
77
- }
78
- ],
79
- fields: [
80
- {
81
- name: 'title',
82
- type: 'text',
83
- label: 'Title',
84
- required: true
85
- },
86
- {
87
- name: 'category',
88
- type: 'text',
89
- label: 'Category',
90
- defaultValue: 'Component'
91
- },
92
- {
93
- name: 'framework',
94
- type: 'text',
95
- label: 'Framework / Stack',
96
- defaultValue: 'Next.js / Payload'
97
- },
98
- {
99
- name: 'description',
100
- type: 'textarea',
101
- label: 'Description'
102
- },
103
- {
104
- type: 'row',
105
- fields: [
106
- {
107
- name: 'href',
108
- type: 'text',
109
- label: 'Link URL',
110
- defaultValue: '/products/components',
111
- admin: { width: '50%' }
112
- },
113
- {
114
- name: 'linkLabel',
115
- type: 'text',
116
- label: 'Link Label',
117
- defaultValue: 'View item',
118
- admin: { width: '50%' }
119
- }
120
- ]
121
- },
122
- {
123
- type: 'row',
124
- fields: [
125
- {
126
- name: 'free',
127
- type: 'checkbox',
128
- label: 'Free Item',
129
- defaultValue: false,
130
- admin: { width: '33.33%' }
131
- },
132
- {
133
- name: 'priceLabel',
134
- type: 'text',
135
- label: 'Price Label',
136
- defaultValue: 'From AUD $29',
137
- admin: { width: '33.33%' }
138
- },
139
- {
140
- name: 'aspectRatio',
141
- type: 'select',
142
- label: 'Media Aspect Ratio',
143
- defaultValue: '16/9',
144
- admin: { width: '33.33%' },
145
- options: [
146
- { label: 'Wide (16:9)', value: '16/9' },
147
- { label: 'Landscape (3:2)', value: '3/2' },
148
- { label: 'Square (1:1)', value: '1/1' },
149
- { label: 'Portrait (2:3)', value: '2/3' }
150
- ]
151
- }
152
- ]
153
- },
154
- {
155
- name: 'image',
156
- type: 'upload',
157
- relationTo: 'media',
158
- label: 'Static Preview Image',
159
- required: false,
160
- admin: {
161
- description: 'Static image shown by default before hover.'
162
- }
163
- },
164
- {
165
- name: 'hoverVideo',
166
- type: 'upload',
167
- relationTo: 'media',
168
- label: 'Hover Video',
169
- required: false,
170
- admin: {
171
- description:
172
- 'Muted video that plays on hover. Recommended: small .webm or .mp4.'
173
- }
174
- },
175
- {
176
- name: 'posterFallbackUrl',
177
- type: 'text',
178
- label: 'Image Fallback URL',
179
- admin: {
180
- placeholder: '/assets/placeholder/preview.webp',
181
- description: 'Used if the uploaded static image has no URL.'
182
- }
183
- },
184
- {
185
- name: 'videoFallbackUrl',
186
- type: 'text',
187
- label: 'Video Fallback URL',
188
- admin: {
189
- placeholder: '/assets/video/preview.webm',
190
- description: 'Used if the uploaded hover video has no URL.'
191
- }
192
- }
193
- ]
194
- }
195
- ]
196
- },
197
- {
198
- label: 'Layout',
199
- fields: [
200
- {
201
- type: 'row',
202
- fields: [
203
- {
204
- name: 'columnsDesktop',
205
- type: 'number',
206
- label: 'Desktop Columns',
207
- defaultValue: 3,
208
- min: 1,
209
- max: 12,
210
- admin: { width: '25%', description: 'min:1, max:12' }
211
- },
212
- {
213
- name: 'columnsTablet',
214
- type: 'number',
215
- label: 'Tablet Columns',
216
- defaultValue: 2,
217
- min: 1,
218
- max: 3,
219
- admin: { width: '25%', description: 'min:1, max:6' }
220
- },
221
- {
222
- name: 'gapClass',
223
- type: 'text',
224
- label: 'Grid Gap Class',
225
- defaultValue: 'gap-5',
226
- admin: { width: '25%' }
227
- },
228
- {
229
- name: 'containerClassName',
230
- type: 'text',
231
- label: 'Container Class',
232
- defaultValue: 'max-w-6xl lg:max-w-7xl mx-auto px-4 md:px-6',
233
- admin: { width: '25%' }
234
- }
235
- ]
236
- },
237
- {
238
- name: 'sectionClassName',
239
- type: 'text',
240
- label: 'Section Class',
241
- defaultValue: 'py-24'
242
- }
243
- ]
244
- },
245
- {
246
- label: 'Settings',
247
- fields: [
248
- {
249
- name: 'sectionId',
250
- type: 'text',
251
- label: 'Section ID',
252
- defaultValue: 'studio-masonary-media'
253
- },
254
- {
255
- name: 'customCSS',
256
- type: 'code',
257
- label: 'Custom CSS',
258
- admin: { language: 'css' }
259
- }
260
- ]
261
- },
262
- {
263
- label: 'CTA Button',
264
- fields: [
265
- {
266
- type: 'row',
267
- fields: [
268
- {
269
- name: 'showCta',
270
- type: 'checkbox',
271
- label: 'Show Button',
272
- defaultValue: false
273
- },
274
- {
275
- name: 'ctaAlign',
276
- type: 'select',
277
- label: 'Button Alignment',
278
- defaultValue: 'center',
279
- admin: {
280
- width: '50%',
281
- condition: (_, siblingData) => siblingData?.showCta
282
- },
283
- options: [
284
- { label: 'Left', value: 'left' },
285
- { label: 'Center', value: 'center' },
286
- { label: 'Right', value: 'right' }
287
- ]
288
- }
289
- ]
290
- },
291
- {
292
- type: 'row',
293
- admin: { condition: (_, siblingData) => siblingData?.showCta },
294
- fields: [
295
- {
296
- name: 'ctaDisplayMode',
297
- type: 'select',
298
- label: 'Display Mode',
299
- defaultValue: 'iconWithLabel',
300
- admin: { width: '50%' },
301
- options: [
302
- { label: 'Icon with Label', value: 'iconWithLabel' },
303
- { label: 'Icon Only', value: 'iconOnly' },
304
- { label: 'Label Only', value: 'labelOnly' }
305
- ]
306
- },
307
- {
308
- name: 'ctaIconPosition',
309
- type: 'select',
310
- label: 'Icon Position',
311
- defaultValue: 'before',
312
- admin: {
313
- width: '50%',
314
- condition: (_, siblingData) => siblingData?.ctaDisplayMode === 'iconWithLabel'
315
- },
316
- options: [
317
- { label: 'Before Label', value: 'before' },
318
- { label: 'After Label', value: 'after' }
319
- ]
320
- }
321
- ]
322
- },
323
- {
324
- name: 'ctaButtonText',
325
- type: 'text',
326
- label: 'Button Text',
327
-
328
- admin: {
329
- condition: (_, siblingData) =>
330
- siblingData?.showCta && siblingData?.ctaDisplayMode !== 'iconOnly'
331
- }
332
- },
333
- {
334
- type: 'row',
335
- admin: { condition: (_, siblingData) => siblingData?.showCta },
336
- fields: [
337
- {
338
- name: 'ctaButtonStyle',
339
- type: 'select',
340
- label: 'Button Style',
341
- defaultValue: 'primary',
342
-
343
- admin: { width: '50%' },
344
- options: [
345
- { label: 'Primary', value: 'primary' },
346
- { label: 'Secondary', value: 'secondary' },
347
- { label: 'Outline', value: 'outline' },
348
- { label: 'Text', value: 'ghost' },
349
- { label: 'Call-to-Action', value: 'destructive' },
350
- { label: 'Retro Border', value: 'v1' },
351
- { label: 'Gradient Shine', value: 'v2' },
352
- { label: 'Ring Hover', value: 'v3' },
353
- { label: '3D Press', value: 'v4' },
354
- { label: 'Invert Slide', value: 'v5' },
355
- { label: 'Scale Morph', value: 'v6' },
356
- { label: 'Underline', value: 'v7' },
357
- { label: 'Embossed', value: 'v8' }
358
- ]
359
- },
360
- {
361
- name: 'ctaSize',
362
- type: 'select',
363
- label: 'Button Size',
364
- defaultValue: 'medium',
365
-
366
- admin: { width: '50%' },
367
- options: [
368
- { label: 'Small', value: 'small' },
369
- { label: 'Medium', value: 'medium' },
370
- { label: 'Large', value: 'large' }
371
- ]
372
- }
373
- ]
374
- },
375
- {
376
- name: 'ctaContainerClass',
377
- type: 'text',
378
- label: 'Extra Container Class',
379
- admin: {
380
- condition: (_, siblingData) => siblingData?.showCta,
381
- description: 'Additional classes on the button wrapper (e.g. mt-4)'
382
- }
383
- }
384
- ]
385
- }
386
- ]
387
- }
388
- ]
389
- }
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDMasonaryMedia: Block = {
4
+ slug: 'DD-MasonaryMedia',
5
+ dbName: 'studio_masonry',
6
+ interfaceName: 'DDMasonaryMedia',
7
+ labels: {
8
+ singular: 'Studio Masonary Media',
9
+ plural: 'Studio Masonary Media',
10
+ },
11
+ fields: [
12
+ {
13
+ type: 'tabs',
14
+ tabs: [
15
+ {
16
+ label: 'Header',
17
+ fields: [
18
+ {
19
+ name: 'eyebrow',
20
+ type: 'text',
21
+ label: 'Eyebrow Label',
22
+ defaultValue: 'Featured systems',
23
+ },
24
+ {
25
+ name: 'headlineMain',
26
+ type: 'text',
27
+ label: 'Headline Main',
28
+ defaultValue: 'Components, blocks, and templates',
29
+ },
30
+ {
31
+ name: 'headlineAccent',
32
+ type: 'text',
33
+ label: 'Headline Accent',
34
+ defaultValue: 'built to feel alive',
35
+ },
36
+ {
37
+ name: 'subtext',
38
+ type: 'textarea',
39
+ label: 'Subtext',
40
+ defaultValue:
41
+ 'A curated showcase of production-ready interface pieces, with static previews and motion demos on hover.',
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: 'Cards',
47
+ fields: [
48
+ {
49
+ name: 'items',
50
+ type: 'array',
51
+ label: 'Showcase Cards',
52
+ minRows: 1,
53
+ defaultValue: [
54
+ {
55
+ title: 'Premium UI Blocks',
56
+ category: 'Components',
57
+ framework: 'Next.js / Payload',
58
+ description:
59
+ 'Reusable interface sections for modern product, agency, and commerce experiences.',
60
+ href: '/products/components',
61
+ linkLabel: 'Browse components',
62
+ free: false,
63
+ priceLabel: 'From AUD $29',
64
+ aspectRatio: '16/9',
65
+ },
66
+ {
67
+ title: 'Website Templates',
68
+ category: 'Templates',
69
+ framework: 'Next.js / Payload',
70
+ description:
71
+ 'Full-page systems and starter kits designed to ship faster without looking templated.',
72
+ href: '/products/templates',
73
+ linkLabel: 'View templates',
74
+ free: false,
75
+ priceLabel: 'From AUD $89',
76
+ aspectRatio: '16/9',
77
+ },
78
+ ],
79
+ fields: [
80
+ {
81
+ name: 'title',
82
+ type: 'text',
83
+ label: 'Title',
84
+ required: true,
85
+ },
86
+ {
87
+ name: 'category',
88
+ type: 'text',
89
+ label: 'Category',
90
+ defaultValue: 'Component',
91
+ },
92
+ {
93
+ name: 'framework',
94
+ type: 'text',
95
+ label: 'Framework / Stack',
96
+ defaultValue: 'Next.js / Payload',
97
+ },
98
+ {
99
+ name: 'description',
100
+ type: 'textarea',
101
+ label: 'Description',
102
+ },
103
+ {
104
+ type: 'row',
105
+ fields: [
106
+ {
107
+ name: 'href',
108
+ type: 'text',
109
+ label: 'Link URL',
110
+ defaultValue: '/products/components',
111
+ admin: { width: '50%' },
112
+ },
113
+ {
114
+ name: 'linkLabel',
115
+ type: 'text',
116
+ label: 'Link Label',
117
+ defaultValue: 'View item',
118
+ admin: { width: '50%' },
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'row',
124
+ fields: [
125
+ {
126
+ name: 'free',
127
+ type: 'checkbox',
128
+ label: 'Free Item',
129
+ defaultValue: false,
130
+ admin: { width: '33.33%' },
131
+ },
132
+ {
133
+ name: 'priceLabel',
134
+ type: 'text',
135
+ label: 'Price Label',
136
+ defaultValue: 'From AUD $29',
137
+ admin: { width: '33.33%' },
138
+ },
139
+ {
140
+ name: 'aspectRatio',
141
+ type: 'select',
142
+ label: 'Media Aspect Ratio',
143
+ defaultValue: '16/9',
144
+ admin: { width: '33.33%' },
145
+ options: [
146
+ { label: 'Wide (16:9)', value: '16/9' },
147
+ { label: 'Landscape (3:2)', value: '3/2' },
148
+ { label: 'Square (1:1)', value: '1/1' },
149
+ { label: 'Portrait (2:3)', value: '2/3' },
150
+ ],
151
+ },
152
+ ],
153
+ },
154
+ {
155
+ name: 'image',
156
+ type: 'upload',
157
+ relationTo: 'media',
158
+ label: 'Static Preview Image',
159
+ required: false,
160
+ admin: {
161
+ description: 'Static image shown by default before hover.',
162
+ },
163
+ },
164
+ {
165
+ name: 'hoverVideo',
166
+ type: 'upload',
167
+ relationTo: 'media',
168
+ label: 'Hover Video',
169
+ required: false,
170
+ admin: {
171
+ description:
172
+ 'Muted video that plays on hover. Recommended: small .webm or .mp4.',
173
+ },
174
+ },
175
+ {
176
+ name: 'posterFallbackUrl',
177
+ type: 'text',
178
+ label: 'Image Fallback URL',
179
+ admin: {
180
+ placeholder: '/assets/placeholder/preview.webp',
181
+ description: 'Used if the uploaded static image has no URL.',
182
+ },
183
+ },
184
+ {
185
+ name: 'videoFallbackUrl',
186
+ type: 'text',
187
+ label: 'Video Fallback URL',
188
+ admin: {
189
+ placeholder: '/assets/video/preview.webm',
190
+ description: 'Used if the uploaded hover video has no URL.',
191
+ },
192
+ },
193
+ ],
194
+ },
195
+ ],
196
+ },
197
+ {
198
+ label: 'Layout',
199
+ fields: [
200
+ {
201
+ type: 'row',
202
+ fields: [
203
+ {
204
+ name: 'columnsDesktop',
205
+ type: 'number',
206
+ label: 'Desktop Columns',
207
+ defaultValue: 3,
208
+ min: 1,
209
+ max: 12,
210
+ admin: { width: '25%', description: 'min:1, max:12' },
211
+ },
212
+ {
213
+ name: 'columnsTablet',
214
+ type: 'number',
215
+ label: 'Tablet Columns',
216
+ defaultValue: 2,
217
+ min: 1,
218
+ max: 3,
219
+ admin: { width: '25%', description: 'min:1, max:6' },
220
+ },
221
+ {
222
+ name: 'gapClass',
223
+ type: 'text',
224
+ label: 'Grid Gap Class',
225
+ defaultValue: 'gap-5',
226
+ admin: { width: '25%' },
227
+ },
228
+ {
229
+ name: 'containerClassName',
230
+ type: 'text',
231
+ label: 'Container Class',
232
+ defaultValue: 'max-w-6xl lg:max-w-7xl mx-auto px-4 md:px-6',
233
+ admin: { width: '25%' },
234
+ },
235
+ ],
236
+ },
237
+ {
238
+ name: 'sectionClassName',
239
+ type: 'text',
240
+ label: 'Section Class',
241
+ defaultValue: 'py-4',
242
+ },
243
+ ],
244
+ },
245
+ {
246
+ label: 'Settings',
247
+ fields: [
248
+ {
249
+ name: 'sectionId',
250
+ type: 'text',
251
+ label: 'Section ID',
252
+ defaultValue: 'studio-masonary-media',
253
+ },
254
+ {
255
+ name: 'customCSS',
256
+ type: 'code',
257
+ label: 'Custom CSS',
258
+ admin: { language: 'css' },
259
+ },
260
+ ],
261
+ },
262
+ {
263
+ label: 'CTA Button',
264
+ fields: [
265
+ {
266
+ type: 'row',
267
+ fields: [
268
+ {
269
+ name: 'showCta',
270
+ type: 'checkbox',
271
+ label: 'Show Button',
272
+ defaultValue: false,
273
+ },
274
+ {
275
+ name: 'ctaAlign',
276
+ type: 'select',
277
+ label: 'Button Alignment',
278
+ defaultValue: 'center',
279
+ admin: {
280
+ width: '50%',
281
+ condition: (_, siblingData) => siblingData?.showCta,
282
+ },
283
+ options: [
284
+ { label: 'Left', value: 'left' },
285
+ { label: 'Center', value: 'center' },
286
+ { label: 'Right', value: 'right' },
287
+ ],
288
+ },
289
+ ],
290
+ },
291
+ {
292
+ type: 'row',
293
+ admin: { condition: (_, siblingData) => siblingData?.showCta },
294
+ fields: [
295
+ {
296
+ name: 'ctaDisplayMode',
297
+ type: 'select',
298
+ label: 'Display Mode',
299
+ defaultValue: 'iconWithLabel',
300
+ admin: { width: '50%' },
301
+ options: [
302
+ { label: 'Icon with Label', value: 'iconWithLabel' },
303
+ { label: 'Icon Only', value: 'iconOnly' },
304
+ { label: 'Label Only', value: 'labelOnly' },
305
+ ],
306
+ },
307
+ {
308
+ name: 'ctaIconPosition',
309
+ type: 'select',
310
+ label: 'Icon Position',
311
+ defaultValue: 'before',
312
+ admin: {
313
+ width: '50%',
314
+ condition: (_, siblingData) => siblingData?.ctaDisplayMode === 'iconWithLabel',
315
+ },
316
+ options: [
317
+ { label: 'Before Label', value: 'before' },
318
+ { label: 'After Label', value: 'after' },
319
+ ],
320
+ },
321
+ ],
322
+ },
323
+ {
324
+ name: 'ctaButtonText',
325
+ type: 'text',
326
+ label: 'Button Text',
327
+
328
+ admin: {
329
+ condition: (_, siblingData) =>
330
+ siblingData?.showCta && siblingData?.ctaDisplayMode !== 'iconOnly',
331
+ },
332
+ },
333
+ {
334
+ type: 'row',
335
+ admin: { condition: (_, siblingData) => siblingData?.showCta },
336
+ fields: [
337
+ {
338
+ name: 'ctaButtonStyle',
339
+ type: 'select',
340
+ label: 'Button Style',
341
+ defaultValue: 'primary',
342
+
343
+ admin: { width: '50%' },
344
+ options: [
345
+ { label: 'Primary', value: 'primary' },
346
+ { label: 'Secondary', value: 'secondary' },
347
+ { label: 'Outline', value: 'outline' },
348
+ { label: 'Text', value: 'ghost' },
349
+ { label: 'Call-to-Action', value: 'destructive' },
350
+ { label: 'Retro Border', value: 'v1' },
351
+ { label: 'Gradient Shine', value: 'v2' },
352
+ { label: 'Ring Hover', value: 'v3' },
353
+ { label: '3D Press', value: 'v4' },
354
+ { label: 'Invert Slide', value: 'v5' },
355
+ { label: 'Scale Morph', value: 'v6' },
356
+ { label: 'Underline', value: 'v7' },
357
+ { label: 'Embossed', value: 'v8' },
358
+ ],
359
+ },
360
+ {
361
+ name: 'ctaSize',
362
+ type: 'select',
363
+ label: 'Button Size',
364
+ defaultValue: 'medium',
365
+
366
+ admin: { width: '50%' },
367
+ options: [
368
+ { label: 'Small', value: 'small' },
369
+ { label: 'Medium', value: 'medium' },
370
+ { label: 'Large', value: 'large' },
371
+ ],
372
+ },
373
+ ],
374
+ },
375
+ {
376
+ name: 'ctaContainerClass',
377
+ type: 'text',
378
+ label: 'Extra Container Class',
379
+ admin: {
380
+ condition: (_, siblingData) => siblingData?.showCta,
381
+ description: 'Additional classes on the button wrapper (e.g. mt-4)',
382
+ },
383
+ },
384
+ ],
385
+ },
386
+ ],
387
+ },
388
+ ],
389
+ }