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
@@ -0,0 +1,326 @@
1
+ # ButtonWithIcon Component
2
+
3
+ A versatile button component with icon support, multiple style variants, and flexible link handling.
4
+
5
+ ## Features
6
+
7
+ - 🎨 8 style variants (primary, secondary, outline, ghost, destructive, v1-v8)
8
+ - 🔗 Internal/external link support with smooth scrolling for anchors
9
+ - 📱 Share button integration
10
+ - 🎯 Icon positioning (before/after text)
11
+ - 📐 Three sizes (small, medium, large)
12
+ - 🎭 Display modes (iconWithLabel, iconOnly, labelOnly, share)
13
+ - 🎪 Drawer integration with auto-close on navigation
14
+
15
+ ## Static Usage Examples
16
+
17
+ ### Basic Button with Icon
18
+
19
+ ```tsx
20
+ import { ButtonWithIcon } from '@/blocks/ButtonWithIcon/Component'
21
+ ;<ButtonWithIcon
22
+ buttonText="Get Started"
23
+ iconName="ArrowRight"
24
+ iconPosition="after"
25
+ buttonStyle="primary"
26
+ size="medium"
27
+ link={{
28
+ type: 'custom',
29
+ url: '/get-started',
30
+ label: 'Get Started'
31
+ }}
32
+ />
33
+ ```
34
+
35
+ ### Icon Only Button
36
+
37
+ ```tsx
38
+ <ButtonWithIcon
39
+ displayMode="iconOnly"
40
+ iconName="Menu"
41
+ buttonStyle="ghost"
42
+ size="medium"
43
+ link={{
44
+ type: 'custom',
45
+ url: '#',
46
+ label: 'Menu'
47
+ }}
48
+ />
49
+ ```
50
+
51
+ ### Share Button
52
+
53
+ ```tsx
54
+ <ButtonWithIcon
55
+ displayMode="share"
56
+ buttonText="Share"
57
+ iconName="Share2"
58
+ buttonStyle="outline"
59
+ size="medium"
60
+ />
61
+ ```
62
+
63
+ ### Anchor Link with Smooth Scroll
64
+
65
+ ```tsx
66
+ <ButtonWithIcon
67
+ buttonText="Scroll to Section"
68
+ iconName="ChevronDown"
69
+ iconPosition="after"
70
+ buttonStyle="v1"
71
+ size="medium"
72
+ scrollDuration={1.5}
73
+ scrollOffset={100}
74
+ link={{
75
+ type: 'custom',
76
+ url: '#section-id',
77
+ label: 'Scroll to Section'
78
+ }}
79
+ />
80
+ ```
81
+
82
+ ### External Link
83
+
84
+ ```tsx
85
+ <ButtonWithIcon
86
+ buttonText="Visit GitHub"
87
+ iconName="Github"
88
+ iconPosition="before"
89
+ buttonStyle="v2"
90
+ size="large"
91
+ link={{
92
+ type: 'custom',
93
+ url: 'https://github.com',
94
+ label: 'Visit GitHub',
95
+ newTab: true
96
+ }}
97
+ />
98
+ ```
99
+
100
+ ### Style Variants Showcase
101
+
102
+ ```tsx
103
+ {
104
+ /* Brutalist shadow effect */
105
+ }
106
+ ;<ButtonWithIcon
107
+ buttonText="Button V1"
108
+ buttonStyle="v1"
109
+ iconName="Zap"
110
+ link={{ type: 'custom', url: '#', label: 'Button' }}
111
+ />
112
+
113
+ {
114
+ /* Shimmer effect */
115
+ }
116
+ ;<ButtonWithIcon
117
+ buttonText="Button V2"
118
+ buttonStyle="v2"
119
+ iconName="Sparkles"
120
+ link={{ type: 'custom', url: '#', label: 'Button' }}
121
+ />
122
+
123
+ {
124
+ /* Ring hover effect */
125
+ }
126
+ ;<ButtonWithIcon
127
+ buttonText="Button V3"
128
+ buttonStyle="v3"
129
+ iconName="Circle"
130
+ link={{ type: 'custom', url: '#', label: 'Button' }}
131
+ />
132
+
133
+ {
134
+ /* Press effect with shadow */
135
+ }
136
+ ;<ButtonWithIcon
137
+ buttonText="Button V4"
138
+ buttonStyle="v4"
139
+ iconName="Layers"
140
+ link={{ type: 'custom', url: '#', label: 'Button' }}
141
+ />
142
+
143
+ {
144
+ /* Border with subtle animation */
145
+ }
146
+ ;<ButtonWithIcon
147
+ buttonText="Button V5"
148
+ buttonStyle="v5"
149
+ iconName="Box"
150
+ link={{ type: 'custom', url: '#', label: 'Button' }}
151
+ />
152
+
153
+ {
154
+ /* Scale hover effect */
155
+ }
156
+ ;<ButtonWithIcon
157
+ buttonText="Button V6"
158
+ buttonStyle="v6"
159
+ iconName="Maximize2"
160
+ link={{ type: 'custom', url: '#', label: 'Button' }}
161
+ />
162
+
163
+ {
164
+ /* Underline animation */
165
+ }
166
+ ;<ButtonWithIcon
167
+ buttonText="Button V7"
168
+ buttonStyle="v7"
169
+ iconName="Underline"
170
+ link={{ type: 'custom', url: '#', label: 'Button' }}
171
+ />
172
+
173
+ {
174
+ /* Embossed shadow effect */
175
+ }
176
+ ;<ButtonWithIcon
177
+ buttonText="Button V8"
178
+ buttonStyle="v8"
179
+ iconName="Mountain"
180
+ link={{ type: 'custom', url: '#', label: 'Button' }}
181
+ />
182
+ ```
183
+
184
+ ### With Drawer Integration
185
+
186
+ ```tsx
187
+ {
188
+ /* Closes drawer on navigation */
189
+ }
190
+ ;<ButtonWithIcon
191
+ buttonText="Home"
192
+ iconName="Home"
193
+ buttonStyle="ghost"
194
+ closeDrawerOnClick={true}
195
+ link={{
196
+ type: 'custom',
197
+ url: '/',
198
+ label: 'Home'
199
+ }}
200
+ />
201
+
202
+ {
203
+ /* Keeps drawer open */
204
+ }
205
+ ;<ButtonWithIcon
206
+ buttonText="Settings"
207
+ iconName="Settings"
208
+ buttonStyle="ghost"
209
+ closeDrawerOnClick={false}
210
+ link={{
211
+ type: 'custom',
212
+ url: '/settings',
213
+ label: 'Settings'
214
+ }}
215
+ />
216
+ ```
217
+
218
+ ### Different Sizes
219
+
220
+ ```tsx
221
+ <ButtonWithIcon
222
+ buttonText="Small"
223
+ size="small"
224
+ buttonStyle="primary"
225
+ iconName="Minus"
226
+ link={{ type: 'custom', url: '#', label: 'Small' }}
227
+ />
228
+
229
+ <ButtonWithIcon
230
+ buttonText="Medium"
231
+ size="medium"
232
+ buttonStyle="primary"
233
+ iconName="Equal"
234
+ link={{ type: 'custom', url: '#', label: 'Medium' }}
235
+ />
236
+
237
+ <ButtonWithIcon
238
+ buttonText="Large"
239
+ size="large"
240
+ buttonStyle="primary"
241
+ iconName="Plus"
242
+ link={{ type: 'custom', url: '#', label: 'Large' }}
243
+ />
244
+ ```
245
+
246
+ ### Custom Container Classes
247
+
248
+ ```tsx
249
+ <ButtonWithIcon
250
+ buttonText="Custom Styled"
251
+ iconName="Palette"
252
+ buttonStyle="primary"
253
+ iconButtonContainerClass="my-8 mx-auto"
254
+ enableGutter={true}
255
+ link={{ type: 'custom', url: '#', label: 'Custom' }}
256
+ />
257
+ ```
258
+
259
+ ### Reference Links (Internal Pages)
260
+
261
+ ```tsx
262
+ <ButtonWithIcon
263
+ buttonText="Go to About"
264
+ iconName="Info"
265
+ buttonStyle="secondary"
266
+ link={{
267
+ type: 'reference',
268
+ reference: {
269
+ relationTo: 'pages',
270
+ value: 123 // Page ID or page object
271
+ },
272
+ label: 'About Page'
273
+ }}
274
+ />
275
+ ```
276
+
277
+ ## Props
278
+
279
+ | Prop | Type | Default | Description |
280
+ | -------------------------- | -------------- | ----------------- | ---------------------------------------------------------------------- |
281
+ | `buttonText` | `string` | - | Button label text |
282
+ | `buttonStyle` | `ButtonStyle` | `'primary'` | Style variant (primary, secondary, outline, ghost, destructive, v1-v8) |
283
+ | `displayMode` | `DisplayMode` | `'iconWithLabel'` | Display mode (iconWithLabel, iconOnly, labelOnly, share) |
284
+ | `iconName` | `string` | - | Lucide icon name |
285
+ | `iconPosition` | `IconPosition` | `'before'` | Icon position relative to text (before, after) |
286
+ | `link` | `LinkType` | - | Link configuration object |
287
+ | `size` | `ButtonSize` | `'medium'` | Button size (small, medium, large) |
288
+ | `scrollDuration` | `number` | `1` | Smooth scroll animation duration (seconds) |
289
+ | `scrollOffset` | `number` | `80` | Scroll offset from target (pixels) |
290
+ | `closeDrawerOnClick` | `boolean` | `true` | Close drawer on navigation |
291
+ | `enableGutter` | `boolean` | `true` | Add default padding |
292
+ | `iconButtonContainerClass` | `string` | - | Additional container classes |
293
+ | `onToggle` | `() => void` | - | Callback function on click |
294
+
295
+ ## Link Type Options
296
+
297
+ ```typescript
298
+ type LinkType = {
299
+ type?: 'reference' | 'custom' | null
300
+ url?: string | null // For custom links
301
+ reference?: LinkReference | null // For internal pages/thoughts
302
+ label: string
303
+ newTab?: boolean | null
304
+ appearance?: 'default' | 'outline' | null
305
+ }
306
+ ```
307
+
308
+ ## Available Icons
309
+
310
+ Uses [Lucide Icons](https://lucide.dev/icons/). Common examples:
311
+
312
+ - `ArrowRight`, `ArrowLeft`, `ArrowUp`, `ArrowDown`
313
+ - `ChevronRight`, `ChevronLeft`, `ChevronUp`, `ChevronDown`
314
+ - `Menu`, `X`, `Home`, `Settings`
315
+ - `Github`, `Twitter`, `Facebook`, `Linkedin`
316
+ - `Download`, `Upload`, `Save`, `Trash`
317
+ - `Plus`, `Minus`, `Check`, `X`
318
+ - `Search`, `Filter`, `Eye`, `EyeOff`
319
+
320
+ ## Notes
321
+
322
+ - Anchor links (starting with `#`) trigger smooth scroll behavior
323
+ - External links (http/https) automatically open in new tab if `newTab` is true
324
+ - Share button mode integrates with Twitter, Facebook, LinkedIn, and clipboard
325
+ - All v2-v4 variants include special hover animations
326
+ - Component integrates with Header03 drawer for mobile navigation
@@ -0,0 +1,239 @@
1
+ import type { Block } from 'payload'
2
+ import { link } from '@/fields/link'
3
+
4
+ export const DDIconButton: Block = {
5
+ slug: 'DD-IconButton',
6
+ interfaceName: 'DDIconButton',
7
+ labels: {
8
+ singular: 'Button with Icon',
9
+ plural: 'Buttons with Icons'
10
+ },
11
+ fields: [
12
+ {
13
+ type: 'tabs',
14
+ tabs: [
15
+ // ── Tab 1: Content ─────────────────────────────────────────────
16
+ {
17
+ label: 'Content',
18
+ fields: [
19
+ {
20
+ type: 'row',
21
+ fields: [
22
+ {
23
+ name: 'displayMode',
24
+ type: 'select',
25
+ label: 'Display Mode',
26
+ defaultValue: 'iconWithLabel',
27
+ required: true,
28
+ admin: { width: '50%' },
29
+ options: [
30
+ { label: 'Icon with Label', value: 'iconWithLabel' },
31
+ { label: 'Icon Only', value: 'iconOnly' },
32
+ { label: 'Label Only', value: 'labelOnly' },
33
+ { label: 'Share Button', value: 'share' }
34
+ ]
35
+ },
36
+ {
37
+ name: 'iconPosition',
38
+ type: 'select',
39
+ label: 'Icon Position',
40
+ defaultValue: 'before',
41
+ required: false,
42
+ admin: {
43
+ width: '50%',
44
+ description: 'Whether the icon appears before or after the label.'
45
+ },
46
+ options: [
47
+ { label: 'Before Label', value: 'before' },
48
+ { label: 'After Label', value: 'after' }
49
+ ]
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ name: 'buttonText',
55
+ type: 'text',
56
+ label: 'Button Text',
57
+ required: false,
58
+ admin: {
59
+ condition: (data) => data.displayMode !== 'iconOnly',
60
+ description: 'Text to display on the button. Optional for icon-only buttons.'
61
+ }
62
+ },
63
+ // iconName is deprecated in favour of the link icon picker
64
+ {
65
+ name: 'iconName',
66
+ type: 'select',
67
+ label: 'Icon',
68
+ hidden: true,
69
+ required: false,
70
+ options: [
71
+ { label: 'Instagram', value: 'Instagram' },
72
+ { label: 'Facebook', value: 'Facebook' },
73
+ { label: 'Twitter', value: 'Twitter' },
74
+ { label: 'LinkedIn', value: 'Linkedin' },
75
+ { label: 'YouTube', value: 'Youtube' },
76
+ { label: 'Dribbble', value: 'Dribbble' },
77
+ { label: 'Arrow Right', value: 'ArrowRight' },
78
+ { label: 'Arrow Left', value: 'ArrowLeft' },
79
+ { label: 'Arrow Down Left', value: 'ArrowDownLeft' },
80
+ { label: 'Arrow Down Right', value: 'ArrowDownRight' },
81
+ { label: 'Arrow Up Left', value: 'ArrowUpLeft' },
82
+ { label: 'Arrow Up Right', value: 'ArrowUpRight' },
83
+ { label: 'Arrow Up', value: 'ArrowUp' },
84
+ { label: 'Arrow Down', value: 'ArrowDown' },
85
+ { label: 'Download', value: 'Download' },
86
+ { label: 'Upload', value: 'Upload' },
87
+ { label: 'External Link', value: 'ExternalLink' },
88
+ { label: 'Link', value: 'Link' },
89
+ { label: 'Mail', value: 'Mail' },
90
+ { label: 'Phone', value: 'Phone' },
91
+ { label: 'Play', value: 'Play' },
92
+ { label: 'Pause', value: 'Pause' },
93
+ { label: 'Home', value: 'Home' },
94
+ { label: 'User', value: 'User' },
95
+ { label: 'Message', value: 'MessageCircle' },
96
+ { label: 'Settings', value: 'Settings' },
97
+ { label: 'Search', value: 'Search' },
98
+ { label: 'Menu', value: 'Menu' },
99
+ { label: 'X', value: 'X' },
100
+ { label: 'Plus', value: 'Plus' },
101
+ { label: 'Minus', value: 'Minus' },
102
+ { label: 'Check', value: 'Check' },
103
+ { label: 'Check Circle', value: 'CheckCircle' },
104
+ { label: 'X Circle', value: 'XCircle' },
105
+ { label: 'Alert Circle', value: 'AlertCircle' },
106
+ { label: 'Info', value: 'Info' },
107
+ { label: 'Heart', value: 'Heart' },
108
+ { label: 'Star', value: 'Star' },
109
+ { label: 'Book', value: 'Book' },
110
+ { label: 'Calendar', value: 'Calendar' },
111
+ { label: 'Clock', value: 'Clock' },
112
+ { label: 'Map Pin', value: 'MapPin' },
113
+ { label: 'Globe', value: 'Globe' },
114
+ { label: 'Bookmark', value: 'Bookmark' },
115
+ { label: 'Tag', value: 'Tag' },
116
+ { label: 'Circle', value: 'Circle' },
117
+ { label: 'Lamp Floor', value: 'LampFloor' },
118
+ { label: 'Eye', value: 'Eye' },
119
+ { label: 'Eye Off', value: 'EyeOff' },
120
+ { label: 'Edit', value: 'Edit' },
121
+ { label: 'Trash', value: 'Trash' },
122
+ { label: 'Copy', value: 'Copy' },
123
+ { label: 'Share', value: 'Share' },
124
+ { label: 'Save', value: 'Save' },
125
+ { label: 'File', value: 'File' },
126
+ { label: 'Folder', value: 'Folder' },
127
+ { label: 'Image', value: 'Image' },
128
+ { label: 'Video', value: 'Video' },
129
+ { label: 'Music', value: 'Music' },
130
+ { label: 'Split', value: 'Split' },
131
+ { label: 'Document', value: 'Document' },
132
+ { label: 'Code', value: 'Code' },
133
+ { label: 'Terminal', value: 'Terminal' },
134
+ { label: 'Bug', value: 'Bug' },
135
+ { label: 'Shield', value: 'Shield' },
136
+ { label: 'Unlock', value: 'Unlock' },
137
+ { label: 'Bell', value: 'Bell' }
138
+ ],
139
+ admin: {
140
+ condition: (data) => {
141
+ if (data.displayMode === 'labelOnly') return false
142
+ if (data.link?.reference || data.link?.url) return false
143
+ return true
144
+ },
145
+ description: 'Select an icon. Overridden if a link with an icon is configured.'
146
+ }
147
+ },
148
+ link({
149
+ overrides: {
150
+ name: 'link',
151
+ label: 'Link',
152
+ admin: {
153
+ condition: (data) =>
154
+ data.displayMode !== 'labelOnly' && data.displayMode !== 'share'
155
+ }
156
+ },
157
+ disableLabel: true,
158
+ appearances: false
159
+ })
160
+ ]
161
+ },
162
+
163
+ // ── Tab 2: Appearance ───────────────────────────────────────────
164
+ {
165
+ label: 'Appearance',
166
+ fields: [
167
+ {
168
+ name: 'buttonStyle',
169
+ type: 'select',
170
+ label: 'Button Style',
171
+ defaultValue: 'primary',
172
+ required: false,
173
+ options: [
174
+ { label: 'Primary', value: 'primary' },
175
+ { label: 'Secondary', value: 'secondary' },
176
+ { label: 'Outline', value: 'outline' },
177
+ { label: 'Text', value: 'ghost' },
178
+ { label: 'Call-to-Action', value: 'destructive' },
179
+ { label: 'Retro Border', value: 'v1' },
180
+ { label: 'Gradient Shine', value: 'v2' },
181
+ { label: 'Ring Hover', value: 'v3' },
182
+ { label: '3D Press', value: 'v4' },
183
+ { label: 'Invert Slide', value: 'v5' },
184
+ { label: 'Scale Morph', value: 'v6' },
185
+ { label: 'Underline', value: 'v7' },
186
+ { label: 'Embossed', value: 'v8' }
187
+ ]
188
+ },
189
+ {
190
+ type: 'row',
191
+ fields: [
192
+ {
193
+ name: 'size',
194
+ type: 'select',
195
+ label: 'Button Size',
196
+ defaultValue: 'medium',
197
+ required: false,
198
+ admin: { width: '50%' },
199
+ options: [
200
+ { label: 'Small', value: 'small' },
201
+ { label: 'Medium', value: 'medium' },
202
+ { label: 'Large', value: 'large' }
203
+ ]
204
+ },
205
+ {
206
+ name: 'overrideSizeClasses',
207
+ type: 'text',
208
+ label: 'Override Size Classes',
209
+ required: false,
210
+ admin: {
211
+ width: '50%',
212
+ description: 'Custom classes to override size (e.g. "px-8 py-4 text-2xl").'
213
+ }
214
+ }
215
+ ]
216
+ },
217
+ {
218
+ name: 'iconButtonContainerClass',
219
+ type: 'text',
220
+ label: 'Container Class',
221
+ required: false,
222
+ // Ensure no duplicate ID is created
223
+ validate: (value: unknown, { siblingData }: { siblingData?: Record<string, unknown> }): string | true => {
224
+ if (siblingData?.id) {
225
+ delete siblingData.id
226
+ }
227
+ return true
228
+ },
229
+ admin: {
230
+ description:
231
+ 'Custom container class. Use `section-button` for wider letter-spacing.'
232
+ }
233
+ }
234
+ ]
235
+ }
236
+ ]
237
+ }
238
+ ]
239
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "type": "block",
3
+ "name": "DD-IconButton",
4
+ "label": "Icon Button",
5
+ "sourceName": "ButtonWithIcon",
6
+ "portableName": "DD-IconButton",
7
+ "slug": "DD-IconButton",
8
+ "version": "0.0.1",
9
+ "source": {
10
+ "repo": "Hadizainal/DesignsDustedv3",
11
+ "originalPath": "src/blocks/ButtonWithIcon",
12
+ "originalSlug": "buttonWithIcon",
13
+ "originalConfigExport": "ButtonWithIcon",
14
+ "originalComponentExport": "ButtonWithIcon",
15
+ "originalInterfaceName": "DDIconButton"
16
+ },
17
+ "files": [
18
+ {
19
+ "from": "Component.tsx",
20
+ "to": "src/blocks/DD-IconButton/Component.tsx"
21
+ },
22
+ {
23
+ "from": "config.ts",
24
+ "to": "src/blocks/DD-IconButton/config.ts"
25
+ }
26
+ ],
27
+ "dependencies": [],
28
+ "sharedFiles": [
29
+ {
30
+ "from": "templates/shared/src/utilities/smoothScroll.ts",
31
+ "to": "src/utilities/smoothScroll.ts",
32
+ "required": true,
33
+ "safeToCopy": true
34
+ },
35
+ {
36
+ "from": "templates/shared/src/components/ui/ShareButton",
37
+ "to": "src/components/ui/ShareButton",
38
+ "required": true,
39
+ "safeToCopy": true
40
+ }
41
+ ],
42
+ "requiredProjectFiles": [],
43
+ "optionalProjectFiles": [],
44
+ "collectionRegistration": {
45
+ "enabled": true,
46
+ "collections": [
47
+ "Pages",
48
+ "Posts"
49
+ ]
50
+ },
51
+ "renderBlocksRegistration": {
52
+ "enabled": true
53
+ },
54
+ "renderBlocksBehavior": {
55
+ "wrapperless": false
56
+ },
57
+ "pageRouteIntegration": {
58
+ "required": false,
59
+ "manualSteps": []
60
+ },
61
+ "manual": [
62
+ "Register DDIconButton in Pages/Posts blocks arrays if automatic registration was skipped.",
63
+ "Register DD-IconButton in RenderBlocks if automatic registration was skipped.",
64
+ "Run payload generate:types after schema changes."
65
+ ],
66
+ "manualSteps": [
67
+ "Register DDIconButton in Pages/Posts blocks arrays if automatic registration was skipped.",
68
+ "Register DD-IconButton in RenderBlocks if automatic registration was skipped.",
69
+ "Run payload generate:types after schema changes."
70
+ ],
71
+ "patchTargets": {
72
+ "blockConfigRegistration": {
73
+ "description": "Installer can add import { DDIconButton } from '@/blocks/DD-IconButton/config' and add DDIconButton to clear Pages/Posts block arrays."
74
+ },
75
+ "renderBlocksRegistration": {
76
+ "description": "Installer can register DD-IconButton in RenderBlocks."
77
+ }
78
+ },
79
+ "notes": [
80
+ "Replaced project shell imports useDrawerClose, smoothScrollTo, and ShareButton with portable anchor behaviour.",
81
+ "Manifest includes shared local support files required by original DesignsDusted source imports."
82
+ ],
83
+ "exportName": "DDIconButton",
84
+ "interfaceName": "DDIconButton"
85
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react'
2
+
3
+ type Props = {
4
+ idTag: string
5
+ offset?: number
6
+ }
7
+
8
+ export const DDIdTag: React.FC<Props> = ({ idTag, offset = 0 }) => {
9
+ return (
10
+ <div
11
+ id={idTag}
12
+ style={{
13
+ position: 'relative',
14
+ top: `-${offset}px`,
15
+ height: 0,
16
+ visibility: 'hidden',
17
+ }}
18
+ aria-hidden="true"
19
+ />
20
+ )
21
+ }
@@ -0,0 +1,4 @@
1
+ # DD-IdTag
2
+
3
+ Portable first-pass conversion of `IdTagBlock` 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
+