blocks-dusted 0.1.10 → 0.1.11

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