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,239 +1,239 @@
1
- import type { Block } from 'payload'
2
-
3
- export const DDBookCall: Block = {
4
- slug: 'DD-BookCall',
5
- interfaceName: 'DDBookCall',
6
- labels: {
7
- singular: 'Studio Book Call',
8
- plural: 'Studio Book Call Sections'
9
- },
10
- fields: [
11
- {
12
- type: 'tabs',
13
- tabs: [
14
- {
15
- label: 'Info',
16
- fields: [
17
- {
18
- name: 'eyebrow',
19
- type: 'text',
20
- label: 'Eyebrow Label',
21
- defaultValue: 'Schedule a Call'
22
- },
23
- {
24
- name: 'headlineMain',
25
- type: 'text',
26
- label: 'Headline (Main)',
27
- required: true,
28
- defaultValue: 'Book a call with'
29
- },
30
- {
31
- name: 'headlineAccent',
32
- type: 'text',
33
- label: 'Headline (Accent)',
34
- defaultValue: 'our team'
35
- },
36
- {
37
- name: 'description',
38
- type: 'textarea',
39
- label: 'Description',
40
- defaultValue:
41
- "Pick a time that works for you. We'll send a calendar invite with everything you need."
42
- },
43
- {
44
- name: 'callTypes',
45
- type: 'array',
46
- label: 'Call Types',
47
- minRows: 1,
48
- maxRows: 6,
49
- admin: {
50
- description: 'Session types the user can pick from in the left sidebar.'
51
- },
52
- fields: [
53
- {
54
- type: 'row',
55
- fields: [
56
- {
57
- name: 'value',
58
- type: 'text',
59
- label: 'Value (slug)',
60
- required: true,
61
- admin: {
62
- width: '33%',
63
- description: 'Internal key, e.g. discovery'
64
- }
65
- },
66
- {
67
- name: 'label',
68
- type: 'text',
69
- label: 'Label',
70
- required: true,
71
- admin: { width: '34%' }
72
- },
73
- {
74
- name: 'duration',
75
- type: 'text',
76
- label: 'Duration',
77
- required: true,
78
- admin: { width: '33%', description: 'e.g. 30 min' }
79
- }
80
- ]
81
- },
82
- {
83
- type: 'row',
84
- fields: [
85
- {
86
- name: 'iconName',
87
- type: 'text',
88
- label: 'Lucide Icon Name',
89
- admin: {
90
- width: '50%',
91
- description: 'e.g. Search, Compass, Code2'
92
- }
93
- },
94
- {
95
- name: 'desc',
96
- type: 'text',
97
- label: 'Short Description',
98
- admin: { width: '50%', description: 'e.g. Explore scope & fit' }
99
- }
100
- ]
101
- }
102
- ],
103
- defaultValue: [
104
- {
105
- value: 'discovery',
106
- label: 'Discovery Call',
107
- duration: '30 min',
108
- iconName: 'Search',
109
- desc: 'Explore scope & fit'
110
- },
111
- {
112
- value: 'strategy',
113
- label: 'Strategy Session',
114
- duration: '60 min',
115
- iconName: 'Compass',
116
- desc: 'Deep dive into your project'
117
- },
118
- {
119
- value: 'technical',
120
- label: 'Technical Review',
121
- duration: '45 min',
122
- iconName: 'Code2',
123
- desc: 'Architecture & implementation'
124
- }
125
- ]
126
- },
127
- {
128
- name: 'features',
129
- type: 'array',
130
- label: '"What to Expect" Items',
131
- admin: {
132
- description: 'Bullet points in the left sidebar below call types.'
133
- },
134
- fields: [
135
- {
136
- type: 'row',
137
- fields: [
138
- {
139
- name: 'iconName',
140
- type: 'text',
141
- label: 'Lucide Icon Name',
142
- admin: { width: '50%', description: 'e.g. Video, CalendarCheck, FileText' }
143
- },
144
- {
145
- name: 'text',
146
- type: 'text',
147
- label: 'Text',
148
- required: true,
149
- admin: { width: '50%' }
150
- }
151
- ]
152
- }
153
- ],
154
- defaultValue: [
155
- { iconName: 'Video', text: 'Google Meet or Zoom' },
156
- { iconName: 'CalendarCheck', text: 'Calendar invite sent instantly' },
157
- { iconName: 'FileText', text: 'Pre-call briefing document' },
158
- { iconName: 'Lock', text: 'NDA available on request' }
159
- ]
160
- }
161
- ]
162
- },
163
- {
164
- label: 'Form',
165
- fields: [
166
- {
167
- name: 'form',
168
- type: 'relationship',
169
- relationTo: 'forms',
170
- label: 'Payload Form',
171
- required: true,
172
- admin: {
173
- description:
174
- 'Select the Payload Form Builder form used to store Book Call submissions. Fields must include: name, email, company, call_type, preferred_date, preferred_time, notes.'
175
- }
176
- },
177
- {
178
- name: 'timeSlots',
179
- type: 'array',
180
- label: 'Available Time Slots',
181
- admin: {
182
- description: 'Time slots shown in the booking grid.'
183
- },
184
- fields: [
185
- {
186
- name: 'slot',
187
- type: 'text',
188
- label: 'Time Slot',
189
- required: true,
190
- admin: { description: 'e.g. 9:00 AM' }
191
- }
192
- ],
193
- defaultValue: [
194
- { slot: '9:00 AM' },
195
- { slot: '9:30 AM' },
196
- { slot: '10:00 AM' },
197
- { slot: '10:30 AM' },
198
- { slot: '11:00 AM' },
199
- { slot: '11:30 AM' },
200
- { slot: '1:00 PM' },
201
- { slot: '1:30 PM' },
202
- { slot: '2:00 PM' },
203
- { slot: '2:30 PM' },
204
- { slot: '3:00 PM' },
205
- { slot: '3:30 PM' },
206
- { slot: '4:00 PM' },
207
- { slot: '4:30 PM' }
208
- ]
209
- },
210
- {
211
- name: 'footerNote',
212
- type: 'text',
213
- label: 'Form Footer Note',
214
- defaultValue: `No charge. No commitment. We'll confirm within a few hours.`
215
- }
216
- ]
217
- },
218
- {
219
- label: 'Settings',
220
- fields: [
221
- {
222
- name: 'sectionId',
223
- type: 'text',
224
- label: 'Section ID',
225
- defaultValue: 'book-call'
226
- },
227
- {
228
- name: 'customCSS',
229
- type: 'code',
230
- label: 'Custom CSS',
231
- admin: { language: 'css' }
232
- }
233
- ]
234
- }
235
- ]
236
- }
237
- ]
238
- }
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDBookCall: Block = {
4
+ slug: 'DD-BookCall',
5
+ interfaceName: 'DDBookCall',
6
+ labels: {
7
+ singular: 'Studio Book Call',
8
+ plural: 'Studio Book Call Sections'
9
+ },
10
+ fields: [
11
+ {
12
+ type: 'tabs',
13
+ tabs: [
14
+ {
15
+ label: 'Info',
16
+ fields: [
17
+ {
18
+ name: 'eyebrow',
19
+ type: 'text',
20
+ label: 'Eyebrow Label',
21
+ defaultValue: 'Schedule a Call'
22
+ },
23
+ {
24
+ name: 'headlineMain',
25
+ type: 'text',
26
+ label: 'Headline (Main)',
27
+ required: true,
28
+ defaultValue: 'Book a call with'
29
+ },
30
+ {
31
+ name: 'headlineAccent',
32
+ type: 'text',
33
+ label: 'Headline (Accent)',
34
+ defaultValue: 'our team'
35
+ },
36
+ {
37
+ name: 'description',
38
+ type: 'textarea',
39
+ label: 'Description',
40
+ defaultValue:
41
+ "Pick a time that works for you. We'll send a calendar invite with everything you need."
42
+ },
43
+ {
44
+ name: 'callTypes',
45
+ type: 'array',
46
+ label: 'Call Types',
47
+ minRows: 1,
48
+ maxRows: 6,
49
+ admin: {
50
+ description: 'Session types the user can pick from in the left sidebar.'
51
+ },
52
+ fields: [
53
+ {
54
+ type: 'row',
55
+ fields: [
56
+ {
57
+ name: 'value',
58
+ type: 'text',
59
+ label: 'Value (slug)',
60
+ required: true,
61
+ admin: {
62
+ width: '33%',
63
+ description: 'Internal key, e.g. discovery'
64
+ }
65
+ },
66
+ {
67
+ name: 'label',
68
+ type: 'text',
69
+ label: 'Label',
70
+ required: true,
71
+ admin: { width: '34%' }
72
+ },
73
+ {
74
+ name: 'duration',
75
+ type: 'text',
76
+ label: 'Duration',
77
+ required: true,
78
+ admin: { width: '33%', description: 'e.g. 30 min' }
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ type: 'row',
84
+ fields: [
85
+ {
86
+ name: 'iconName',
87
+ type: 'text',
88
+ label: 'Lucide Icon Name',
89
+ admin: {
90
+ width: '50%',
91
+ description: 'e.g. Search, Compass, Code2'
92
+ }
93
+ },
94
+ {
95
+ name: 'desc',
96
+ type: 'text',
97
+ label: 'Short Description',
98
+ admin: { width: '50%', description: 'e.g. Explore scope & fit' }
99
+ }
100
+ ]
101
+ }
102
+ ],
103
+ defaultValue: [
104
+ {
105
+ value: 'discovery',
106
+ label: 'Discovery Call',
107
+ duration: '30 min',
108
+ iconName: 'Search',
109
+ desc: 'Explore scope & fit'
110
+ },
111
+ {
112
+ value: 'strategy',
113
+ label: 'Strategy Session',
114
+ duration: '60 min',
115
+ iconName: 'Compass',
116
+ desc: 'Deep dive into your project'
117
+ },
118
+ {
119
+ value: 'technical',
120
+ label: 'Technical Review',
121
+ duration: '45 min',
122
+ iconName: 'Code2',
123
+ desc: 'Architecture & implementation'
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ name: 'features',
129
+ type: 'array',
130
+ label: '"What to Expect" Items',
131
+ admin: {
132
+ description: 'Bullet points in the left sidebar below call types.'
133
+ },
134
+ fields: [
135
+ {
136
+ type: 'row',
137
+ fields: [
138
+ {
139
+ name: 'iconName',
140
+ type: 'text',
141
+ label: 'Lucide Icon Name',
142
+ admin: { width: '50%', description: 'e.g. Video, CalendarCheck, FileText' }
143
+ },
144
+ {
145
+ name: 'text',
146
+ type: 'text',
147
+ label: 'Text',
148
+ required: true,
149
+ admin: { width: '50%' }
150
+ }
151
+ ]
152
+ }
153
+ ],
154
+ defaultValue: [
155
+ { iconName: 'Video', text: 'Google Meet or Zoom' },
156
+ { iconName: 'CalendarCheck', text: 'Calendar invite sent instantly' },
157
+ { iconName: 'FileText', text: 'Pre-call briefing document' },
158
+ { iconName: 'Lock', text: 'NDA available on request' }
159
+ ]
160
+ }
161
+ ]
162
+ },
163
+ {
164
+ label: 'Form',
165
+ fields: [
166
+ {
167
+ name: 'form',
168
+ type: 'relationship',
169
+ relationTo: 'forms',
170
+ label: 'Payload Form',
171
+ required: true,
172
+ admin: {
173
+ description:
174
+ 'Select the Payload Form Builder form used to store Book Call submissions. Fields must include: name, email, company, call_type, preferred_date, preferred_time, notes.'
175
+ }
176
+ },
177
+ {
178
+ name: 'timeSlots',
179
+ type: 'array',
180
+ label: 'Available Time Slots',
181
+ admin: {
182
+ description: 'Time slots shown in the booking grid.'
183
+ },
184
+ fields: [
185
+ {
186
+ name: 'slot',
187
+ type: 'text',
188
+ label: 'Time Slot',
189
+ required: true,
190
+ admin: { description: 'e.g. 9:00 AM' }
191
+ }
192
+ ],
193
+ defaultValue: [
194
+ { slot: '9:00 AM' },
195
+ { slot: '9:30 AM' },
196
+ { slot: '10:00 AM' },
197
+ { slot: '10:30 AM' },
198
+ { slot: '11:00 AM' },
199
+ { slot: '11:30 AM' },
200
+ { slot: '1:00 PM' },
201
+ { slot: '1:30 PM' },
202
+ { slot: '2:00 PM' },
203
+ { slot: '2:30 PM' },
204
+ { slot: '3:00 PM' },
205
+ { slot: '3:30 PM' },
206
+ { slot: '4:00 PM' },
207
+ { slot: '4:30 PM' }
208
+ ]
209
+ },
210
+ {
211
+ name: 'footerNote',
212
+ type: 'text',
213
+ label: 'Form Footer Note',
214
+ defaultValue: `No charge. No commitment. We'll confirm within a few hours.`
215
+ }
216
+ ]
217
+ },
218
+ {
219
+ label: 'Settings',
220
+ fields: [
221
+ {
222
+ name: 'sectionId',
223
+ type: 'text',
224
+ label: 'Section ID',
225
+ defaultValue: 'book-call'
226
+ },
227
+ {
228
+ name: 'customCSS',
229
+ type: 'code',
230
+ label: 'Custom CSS',
231
+ admin: { language: 'css' }
232
+ }
233
+ ]
234
+ }
235
+ ]
236
+ }
237
+ ]
238
+ }
239
239
 
@@ -0,0 +1,117 @@
1
+ 'use client'
2
+
3
+ import React, { useState, useRef } from 'react'
4
+ import { motion, AnimatePresence } from 'framer-motion'
5
+ import { useClickOutside } from '@/hooks/useClickOutside'
6
+ import { useBodyScrollLock } from '@/hooks/useBodyScrollLock'
7
+ import { cn } from '@/utilities/ui'
8
+ import RichText from '@/components/RichText'
9
+ import DustSvg from './svg-icons/Dust2'
10
+
11
+ interface PopButtonProps {
12
+ buttonLabel: string
13
+ richTextData: any
14
+ width?: string
15
+ height?: string
16
+ position?: 'left' | 'center' | 'right'
17
+ openMode?: 'popover' | 'modal'
18
+ }
19
+
20
+ export const DDButtonPop: React.FC<PopButtonProps> = ({
21
+ buttonLabel,
22
+ richTextData,
23
+ width = '360px',
24
+ height = '240px',
25
+ position = 'center',
26
+ openMode = 'popover'
27
+ }) => {
28
+ const [open, setOpen] = useState(false)
29
+ const wrapperRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>
30
+
31
+ useClickOutside(wrapperRef, () => setOpen(false))
32
+
33
+ // Lock body scroll when modal mode is open
34
+ useBodyScrollLock(open && openMode === 'modal', 'buttonPopScrollY')
35
+
36
+ const alignmentClass =
37
+ position === 'left' ? 'justify-start' : position === 'right' ? 'justify-end' : 'justify-center'
38
+
39
+ return (
40
+ <div
41
+ className={cn('relative flex', alignmentClass)}
42
+ style={{ paddingBottom: open ? '50vh' : '1rem' }}
43
+ >
44
+ <motion.button
45
+ key={buttonLabel} // Fixed: Use buttonLabel as key instead of undefined idx
46
+ onClick={() => setOpen(true)}
47
+ className="rounded-md border bg-card px-4 py-2 text-sm font-medium shadow"
48
+ >
49
+ {buttonLabel}
50
+ </motion.button>
51
+
52
+ <AnimatePresence>
53
+ {open &&
54
+ (openMode === 'popover' ? (
55
+ <>
56
+ <motion.div
57
+ ref={wrapperRef}
58
+ key="popover"
59
+ initial={{ opacity: 0, y: -10 }}
60
+ animate={{ opacity: 1, y: 0 }}
61
+ exit={{ opacity: 0, y: -10 }}
62
+ transition={{ duration: 0.2 }}
63
+ className={cn(
64
+ 'absolute z-20 rounded-sm bg-card p-4 shadow-lg border border-border'
65
+ )}
66
+ style={{ width, height, maxWidth: '100%', maxHeight: '100%' }}
67
+ >
68
+ <RichText data={richTextData} enableGutter={false} />
69
+ </motion.div>
70
+ {/* <TextFade direction="up" className="absolute z-10 w-full max-w-[8rem] h-auto"> */}
71
+ {/* <LottieFeathers className="absolute right-0 -top-[80px] z-0 rotate-[80deg] lottie-wrapper lottie popper-lottie" /> */}
72
+ {/* </TextFade> */}
73
+ </>
74
+ ) : (
75
+ <>
76
+ <motion.div
77
+ ref={wrapperRef}
78
+ key="modal"
79
+ initial={{ opacity: 0 }}
80
+ animate={{ opacity: 1 }}
81
+ exit={{ opacity: 0 }}
82
+ transition={{ duration: 0.2 }}
83
+ className="fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4"
84
+ style={{ backdropFilter: 'blur(4px)' }}
85
+ >
86
+ <div className="card-wrapper relative flex items-center justify-center mx-4 p-1 bgTransBlur-light rounded-lg ">
87
+ <div
88
+ className="pop-modal-card transition-all duration-300 ease-in-out group relative"
89
+ style={{
90
+ width: width || '80%',
91
+ maxWidth: '500px',
92
+ maxHeight: '90vh',
93
+ overflowY: 'auto'
94
+ }}
95
+ >
96
+ <button
97
+ onClick={() => setOpen(false)}
98
+ className="relative right-0 ml-auto flex justify-end text-sm text-gray-500 transition-colors duration-150 hover:text-gray-700"
99
+ style={{ background: 'none', border: 'none', cursor: 'pointer' }}
100
+ >
101
+ Close
102
+ </button>
103
+ <RichText
104
+ data={richTextData}
105
+ className="pop-modal-richtext"
106
+ enableGutter={false}
107
+ />
108
+ <DustSvg className="dustsvg dust-svg-modal absolute opacity-0 -z-10 -mt-24 ml-32 scale-0 transition-all duration-300 ease-in-out group-hover:scale-[3] group-hover:opacity-100" />
109
+ </div>
110
+ </div>
111
+ </motion.div>
112
+ </>
113
+ ))}
114
+ </AnimatePresence>
115
+ </div>
116
+ )
117
+ }