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,150 +1,150 @@
1
- import type { Block } from 'payload'
2
-
3
- export const DDProcess: Block = {
4
- slug: 'DD-Process',
5
- interfaceName: 'DDProcess',
6
- labels: {
7
- singular: 'Studio Process',
8
- plural: 'Studio Process Sections'
9
- },
10
- fields: [
11
- {
12
- type: 'tabs',
13
- tabs: [
14
- {
15
- label: 'Header',
16
- fields: [
17
- {
18
- name: 'eyebrow',
19
- type: 'text',
20
- label: 'Eyebrow Label',
21
- defaultValue: 'How We Work'
22
- },
23
- {
24
- name: 'headlineMain',
25
- type: 'text',
26
- label: 'Headline (Main)',
27
- defaultValue: 'A process built for',
28
- required: true
29
- },
30
- {
31
- name: 'headlineAccent',
32
- type: 'text',
33
- label: 'Headline (Accent)',
34
- defaultValue: 'real outcomes',
35
- required: true
36
- },
37
- {
38
- name: 'description',
39
- type: 'textarea',
40
- label: 'Description',
41
- defaultValue:
42
- 'We run a tight, transparent process that keeps you informed and involved — without wasting your time.'
43
- }
44
- ]
45
- },
46
- {
47
- label: 'Steps',
48
- fields: [
49
- {
50
- name: 'steps',
51
- type: 'array',
52
- label: 'Process Steps',
53
- minRows: 1,
54
- fields: [
55
- {
56
- name: 'iconName',
57
- type: 'text',
58
- label: 'Lucide Icon Name',
59
- required: true,
60
- admin: {
61
- description: 'e.g. Search, Pencil, Hammer, Rocket, CheckCircle'
62
- }
63
- },
64
- {
65
- name: 'number',
66
- type: 'text',
67
- label: 'Step Number',
68
- admin: {
69
- description: 'e.g. 01, 02'
70
- }
71
- },
72
- {
73
- name: 'title',
74
- type: 'text',
75
- label: 'Step Title',
76
- required: true
77
- },
78
- {
79
- name: 'description',
80
- type: 'textarea',
81
- label: 'Description',
82
- required: true
83
- },
84
- {
85
- name: 'duration',
86
- type: 'text',
87
- label: 'Typical Duration',
88
- admin: {
89
- description: 'e.g. 1–2 weeks, 1 day'
90
- }
91
- }
92
- ],
93
- defaultValue: [
94
- {
95
- iconName: 'Search',
96
- number: '01',
97
- title: 'Discover',
98
- description:
99
- 'We start with a deep-dive kickoff — understanding your users, your goals, and the constraints we need to design around.',
100
- duration: '1–2 days'
101
- },
102
- {
103
- iconName: 'PenTool',
104
- number: '02',
105
- title: 'Design',
106
- description:
107
- 'Wireframes, flows, and high-fidelity UI. We move fast and keep you in the loop with regular check-ins and async Figma access.',
108
- duration: '1–2 weeks'
109
- },
110
- {
111
- iconName: 'Code2',
112
- number: '03',
113
- title: 'Build',
114
- description:
115
- 'Clean, typed, tested code. We ship in short sprints with daily updates and a staging environment from day one.',
116
- duration: '2–8 weeks'
117
- },
118
- {
119
- iconName: 'Rocket',
120
- number: '04',
121
- title: 'Launch',
122
- description:
123
- 'We handle deployment, monitoring, and handoff documentation so your team is set up for long-term success.',
124
- duration: '2–3 days'
125
- }
126
- ]
127
- }
128
- ]
129
- },
130
- {
131
- label: 'Settings',
132
- fields: [
133
- {
134
- name: 'sectionId',
135
- type: 'text',
136
- label: 'Section ID',
137
- defaultValue: 'process'
138
- },
139
- {
140
- name: 'customCSS',
141
- type: 'code',
142
- label: 'Custom CSS',
143
- admin: { language: 'css' }
144
- }
145
- ]
146
- }
147
- ]
148
- }
149
- ]
150
- }
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDProcess: Block = {
4
+ slug: 'DD-Process',
5
+ interfaceName: 'DDProcess',
6
+ labels: {
7
+ singular: 'Studio Process',
8
+ plural: 'Studio Process Sections'
9
+ },
10
+ fields: [
11
+ {
12
+ type: 'tabs',
13
+ tabs: [
14
+ {
15
+ label: 'Header',
16
+ fields: [
17
+ {
18
+ name: 'eyebrow',
19
+ type: 'text',
20
+ label: 'Eyebrow Label',
21
+ defaultValue: 'How We Work'
22
+ },
23
+ {
24
+ name: 'headlineMain',
25
+ type: 'text',
26
+ label: 'Headline (Main)',
27
+ defaultValue: 'A process built for',
28
+ required: true
29
+ },
30
+ {
31
+ name: 'headlineAccent',
32
+ type: 'text',
33
+ label: 'Headline (Accent)',
34
+ defaultValue: 'real outcomes',
35
+ required: true
36
+ },
37
+ {
38
+ name: 'description',
39
+ type: 'textarea',
40
+ label: 'Description',
41
+ defaultValue:
42
+ 'We run a tight, transparent process that keeps you informed and involved — without wasting your time.'
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ label: 'Steps',
48
+ fields: [
49
+ {
50
+ name: 'steps',
51
+ type: 'array',
52
+ label: 'Process Steps',
53
+ minRows: 1,
54
+ fields: [
55
+ {
56
+ name: 'iconName',
57
+ type: 'text',
58
+ label: 'Lucide Icon Name',
59
+ required: true,
60
+ admin: {
61
+ description: 'e.g. Search, Pencil, Hammer, Rocket, CheckCircle'
62
+ }
63
+ },
64
+ {
65
+ name: 'number',
66
+ type: 'text',
67
+ label: 'Step Number',
68
+ admin: {
69
+ description: 'e.g. 01, 02'
70
+ }
71
+ },
72
+ {
73
+ name: 'title',
74
+ type: 'text',
75
+ label: 'Step Title',
76
+ required: true
77
+ },
78
+ {
79
+ name: 'description',
80
+ type: 'textarea',
81
+ label: 'Description',
82
+ required: true
83
+ },
84
+ {
85
+ name: 'duration',
86
+ type: 'text',
87
+ label: 'Typical Duration',
88
+ admin: {
89
+ description: 'e.g. 1–2 weeks, 1 day'
90
+ }
91
+ }
92
+ ],
93
+ defaultValue: [
94
+ {
95
+ iconName: 'Search',
96
+ number: '01',
97
+ title: 'Discover',
98
+ description:
99
+ 'We start with a deep-dive kickoff — understanding your users, your goals, and the constraints we need to design around.',
100
+ duration: '1–2 days'
101
+ },
102
+ {
103
+ iconName: 'PenTool',
104
+ number: '02',
105
+ title: 'Design',
106
+ description:
107
+ 'Wireframes, flows, and high-fidelity UI. We move fast and keep you in the loop with regular check-ins and async Figma access.',
108
+ duration: '1–2 weeks'
109
+ },
110
+ {
111
+ iconName: 'Code2',
112
+ number: '03',
113
+ title: 'Build',
114
+ description:
115
+ 'Clean, typed, tested code. We ship in short sprints with daily updates and a staging environment from day one.',
116
+ duration: '2–8 weeks'
117
+ },
118
+ {
119
+ iconName: 'Rocket',
120
+ number: '04',
121
+ title: 'Launch',
122
+ description:
123
+ 'We handle deployment, monitoring, and handoff documentation so your team is set up for long-term success.',
124
+ duration: '2–3 days'
125
+ }
126
+ ]
127
+ }
128
+ ]
129
+ },
130
+ {
131
+ label: 'Settings',
132
+ fields: [
133
+ {
134
+ name: 'sectionId',
135
+ type: 'text',
136
+ label: 'Section ID',
137
+ defaultValue: 'process'
138
+ },
139
+ {
140
+ name: 'customCSS',
141
+ type: 'code',
142
+ label: 'Custom CSS',
143
+ admin: { language: 'css' }
144
+ }
145
+ ]
146
+ }
147
+ ]
148
+ }
149
+ ]
150
+ }
@@ -0,0 +1,156 @@
1
+ 'use client'
2
+
3
+ import React from 'react'
4
+ import { motion, useInView } from 'framer-motion'
5
+ import { cn } from '@/utilities/ui'
6
+
7
+ export interface SkillItem {
8
+ label: string
9
+ percentage: number
10
+ color?: string
11
+ showPercentage?: boolean
12
+ id?: string
13
+ }
14
+
15
+ export interface ProgressSkillBlockProps {
16
+ skills?: SkillItem[]
17
+ containerClass?: string
18
+ labelClass?: string
19
+ progressBarClass?: string
20
+ percentageClass?: string
21
+ animationDuration?: number
22
+ animationDelay?: number
23
+ blockType?: string
24
+ }
25
+
26
+ export const DDProgress: React.FC<ProgressSkillBlockProps> = ({
27
+ skills = [],
28
+ containerClass = '',
29
+ labelClass = '',
30
+ progressBarClass = '',
31
+ percentageClass = '',
32
+ animationDuration = 1.5,
33
+ animationDelay = 0.2,
34
+ }) => {
35
+ if (!skills || skills.length === 0) {
36
+ return null
37
+ }
38
+
39
+ return (
40
+ <div
41
+ className={cn(
42
+ 'progress-skill-block w-full space-y-6 py-8',
43
+ 'max-w-7xl mx-auto',
44
+ containerClass,
45
+ )}
46
+ >
47
+ {skills.map((skill, index) => (
48
+ <SkillProgressBar
49
+ key={skill.id || `skill-${index}`}
50
+ skill={skill}
51
+ index={index}
52
+ labelClass={labelClass}
53
+ progressBarClass={progressBarClass}
54
+ percentageClass={percentageClass}
55
+ animationDuration={animationDuration}
56
+ animationDelay={animationDelay}
57
+ />
58
+ ))}
59
+ </div>
60
+ )
61
+ }
62
+
63
+ interface SkillProgressBarProps {
64
+ skill: SkillItem
65
+ index: number
66
+ labelClass: string
67
+ progressBarClass: string
68
+ percentageClass: string
69
+ animationDuration: number
70
+ animationDelay: number
71
+ }
72
+
73
+ const SkillProgressBar: React.FC<SkillProgressBarProps> = ({
74
+ skill,
75
+ index,
76
+ labelClass,
77
+ progressBarClass,
78
+ percentageClass,
79
+ animationDuration,
80
+ animationDelay,
81
+ }) => {
82
+ const ref = React.useRef(null)
83
+ const isInView = useInView(ref, { once: false, amount: 0.3 })
84
+
85
+ const progressVariants = {
86
+ hidden: { width: '0%' },
87
+ visible: {
88
+ width: `${skill.percentage}%`,
89
+ transition: {
90
+ duration: animationDuration,
91
+ delay: index * animationDelay,
92
+ ease: [0.25, 0.46, 0.45, 0.94] as [number, number, number, number],
93
+ },
94
+ },
95
+ }
96
+
97
+ const percentageVariants = {
98
+ hidden: { opacity: 0 },
99
+ visible: {
100
+ opacity: 1,
101
+ transition: {
102
+ duration: 0.3,
103
+ delay: index * animationDelay + animationDuration * 0.8,
104
+ },
105
+ },
106
+ }
107
+
108
+ // Create unique class name from label (slugified)
109
+ const uniqueClass =
110
+ skill.id ||
111
+ skill.label
112
+ .toLowerCase()
113
+ .replace(/\s+/g, '-')
114
+ .replace(/[^a-z0-9-]/g, '')
115
+
116
+ return (
117
+ <div ref={ref} className={cn('skill-item w-full', `skill-${uniqueClass}`)}>
118
+ {/* Label and Percentage Row */}
119
+ <div className="flex justify-between items-center mb-1">
120
+ <div className={cn('text-md font-medium text-stone-700 dark:text-stone-200', labelClass)}>
121
+ {skill.label}
122
+ </div>
123
+ {skill.showPercentage !== false && (
124
+ <motion.span
125
+ className={cn(
126
+ 'text-xl font-semibold text-stone-700 dark:text-stone-200',
127
+ percentageClass,
128
+ )}
129
+ variants={percentageVariants}
130
+ initial="hidden"
131
+ animate={isInView ? 'visible' : 'hidden'}
132
+ >
133
+ {skill.percentage} %
134
+ </motion.span>
135
+ )}
136
+ </div>
137
+
138
+ {/* Progress Bar Container */}
139
+ <div className="progress-bar-container relative w-full h-1.5 bg-zinc-700/50 overflow-hidden">
140
+ <motion.div
141
+ className={cn(
142
+ 'progress-bar-fill absolute top-0 left-0 h-full',
143
+ 'bg-indigo-500',
144
+ progressBarClass,
145
+ )}
146
+ style={{
147
+ backgroundColor: skill.color || '#9ACD32',
148
+ }}
149
+ variants={progressVariants}
150
+ initial="hidden"
151
+ animate={isInView ? 'visible' : 'hidden'}
152
+ />
153
+ </div>
154
+ </div>
155
+ )
156
+ }
@@ -0,0 +1,4 @@
1
+ # DD-Progress
2
+
3
+ Portable first-pass conversion of `ProgressSkillBlock` from ROUND-TWO-CONVERSION. Project-specific roots and nested unconverted block dependencies were intentionally replaced with local rendering so the template can install into a clean Payload project.
4
+
@@ -0,0 +1,175 @@
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDProgress: Block = {
4
+ slug: 'DD-Progress',
5
+ interfaceName: 'DDProgress',
6
+ labels: {
7
+ singular: 'Progress Skill Block',
8
+ plural: 'Progress Skill Blocks'
9
+ },
10
+ fields: [
11
+ {
12
+ name: 'skills',
13
+ label: 'Skills',
14
+ type: 'array',
15
+ required: true,
16
+ minRows: 1,
17
+ maxRows: 10,
18
+ labels: {
19
+ singular: 'Skill',
20
+ plural: 'Skills'
21
+ },
22
+ fields: [
23
+ {
24
+ type: 'row',
25
+ fields: [
26
+ {
27
+ name: 'label',
28
+ type: 'text',
29
+ required: true,
30
+ label: 'Skill Label',
31
+ defaultValue: 'Label',
32
+ admin: {
33
+ width: '50%',
34
+ description: 'Name of the skill (e.g., "Industrial Design", "UI/UX Design")'
35
+ }
36
+ },
37
+ {
38
+ name: 'percentage',
39
+ type: 'number',
40
+ required: true,
41
+ label: 'Skill Percentage',
42
+ defaultValue: 75,
43
+ min: 0,
44
+ max: 100,
45
+ admin: {
46
+ width: '25%',
47
+ description: 'Skill proficiency percentage (0-100)',
48
+ step: 1
49
+ }
50
+ },
51
+ {
52
+ name: 'showPercentage',
53
+ type: 'checkbox',
54
+ label: 'Show %',
55
+ defaultValue: true,
56
+ admin: {
57
+ width: '25%',
58
+ description: 'Display the percentage value'
59
+ }
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ name: 'color',
65
+ type: 'text',
66
+ label: 'Progress Bar Color',
67
+ admin: {
68
+ description:
69
+ 'Custom color for this skill bar (hex or rgb format only). Example: #9ACD32 or rgb(154, 205, 50)',
70
+ placeholder: '#9ACD32'
71
+ }
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ type: 'collapsible',
77
+ label: 'Styling Options',
78
+ admin: {
79
+ initCollapsed: true
80
+ },
81
+ fields: [
82
+ {
83
+ type: 'row',
84
+ fields: [
85
+ {
86
+ name: 'containerClass',
87
+ type: 'text',
88
+ label: 'Container Classes',
89
+ admin: {
90
+ width: '50%',
91
+ description: 'Additional Tailwind classes for the main container',
92
+ placeholder: 'py-12 px-4'
93
+ }
94
+ },
95
+ {
96
+ name: 'labelClass',
97
+ type: 'text',
98
+ label: 'Label Classes',
99
+ admin: {
100
+ width: '50%',
101
+ description: 'Additional Tailwind classes for skill labels',
102
+ placeholder: 'text-xl font-bold'
103
+ }
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ type: 'row',
109
+ fields: [
110
+ {
111
+ name: 'progressBarClass',
112
+ type: 'text',
113
+ label: 'Progress Bar Classes',
114
+ admin: {
115
+ width: '50%',
116
+ description: 'Additional Tailwind classes for progress bars',
117
+ placeholder: 'shadow-lg'
118
+ }
119
+ },
120
+ {
121
+ name: 'percentageClass',
122
+ type: 'text',
123
+ label: 'Percentage Classes',
124
+ admin: {
125
+ width: '50%',
126
+ description: 'Additional Tailwind classes for percentage display',
127
+ placeholder: 'text-lg font-bold'
128
+ }
129
+ }
130
+ ]
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ type: 'collapsible',
136
+ label: 'Animation Settings',
137
+ admin: {
138
+ initCollapsed: true
139
+ },
140
+ fields: [
141
+ {
142
+ type: 'row',
143
+ fields: [
144
+ {
145
+ name: 'animationDuration',
146
+ type: 'number',
147
+ label: 'Animation Duration (seconds)',
148
+ defaultValue: 1.5,
149
+ min: 0.5,
150
+ max: 5,
151
+ admin: {
152
+ width: '50%',
153
+ description: 'Duration of the progress bar animation',
154
+ step: 0.1
155
+ }
156
+ },
157
+ {
158
+ name: 'animationDelay',
159
+ type: 'number',
160
+ label: 'Stagger Delay (seconds)',
161
+ defaultValue: 0.2,
162
+ min: 0,
163
+ max: 2,
164
+ admin: {
165
+ width: '50%',
166
+ description: 'Delay between each skill animation',
167
+ step: 0.1
168
+ }
169
+ }
170
+ ]
171
+ }
172
+ ]
173
+ }
174
+ ]
175
+ }