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,41 @@
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDIdTag: Block = {
4
+ slug: 'DD-IdTag',
5
+ interfaceName: 'DDIdTag',
6
+ labels: {
7
+ singular: 'ID Tag',
8
+ plural: 'ID Tags'
9
+ },
10
+ fields: [
11
+ {
12
+ type: 'row',
13
+ fields: [
14
+ {
15
+ name: 'id',
16
+ type: 'text',
17
+ label: 'Element ID',
18
+ required: true,
19
+ admin: {
20
+ width: '75%',
21
+ description: 'Set a unique ID for anchor linking within richtext content.',
22
+ placeholder: 'my-section-id'
23
+ }
24
+ },
25
+ {
26
+ name: 'offset',
27
+ type: 'number',
28
+ label: 'Scroll Offset (px)',
29
+ defaultValue: 0,
30
+ admin: {
31
+ width: '25%',
32
+ description: 'Optional vertical scroll offset for anchor links',
33
+ step: 10
34
+ }
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
40
+
41
+ export default DDIdTag
@@ -0,0 +1,72 @@
1
+ {
2
+ "type": "block",
3
+ "name": "DD-IdTag",
4
+ "label": "ID Tag",
5
+ "sourceName": "IdTagBlock",
6
+ "portableName": "DD-IdTag",
7
+ "slug": "DD-IdTag",
8
+ "version": "0.0.1",
9
+ "source": {
10
+ "repo": "Hadizainal/DesignsDustedv3",
11
+ "originalPath": "src/blocks/ROUND-TWO-CONVERSION/IdTagBlock",
12
+ "originalSlug": "idTag",
13
+ "originalConfigExport": "IdTagBlock",
14
+ "originalComponentExport": "IdTagBlock",
15
+ "originalInterfaceName": "DDIdTag"
16
+ },
17
+ "files": [
18
+ {
19
+ "from": "Component.tsx",
20
+ "to": "src/blocks/DD-IdTag/Component.tsx"
21
+ },
22
+ {
23
+ "from": "config.ts",
24
+ "to": "src/blocks/DD-IdTag/config.ts"
25
+ }
26
+ ],
27
+ "dependencies": [],
28
+ "sharedFiles": [],
29
+ "requiredProjectFiles": [],
30
+ "optionalProjectFiles": [],
31
+ "collectionRegistration": {
32
+ "enabled": true,
33
+ "collections": [
34
+ "Pages",
35
+ "Posts"
36
+ ]
37
+ },
38
+ "renderBlocksRegistration": {
39
+ "enabled": true
40
+ },
41
+ "renderBlocksBehavior": {
42
+ "wrapperless": false
43
+ },
44
+ "pageRouteIntegration": {
45
+ "required": false,
46
+ "manualSteps": []
47
+ },
48
+ "manual": [
49
+ "Register DDIdTag in Pages/Posts blocks arrays if automatic registration was skipped.",
50
+ "Register DD-IdTag in RenderBlocks if automatic registration was skipped.",
51
+ "Run payload generate:types after schema changes."
52
+ ],
53
+ "manualSteps": [
54
+ "Register DDIdTag in Pages/Posts blocks arrays if automatic registration was skipped.",
55
+ "Register DD-IdTag in RenderBlocks if automatic registration was skipped.",
56
+ "Run payload generate:types after schema changes."
57
+ ],
58
+ "patchTargets": {
59
+ "blockConfigRegistration": {
60
+ "description": "Installer can add import { DDIdTag } from '@/blocks/DD-IdTag/config' and add DDIdTag to clear Pages/Posts block arrays."
61
+ },
62
+ "renderBlocksRegistration": {
63
+ "description": "Installer can register DD-IdTag in RenderBlocks."
64
+ }
65
+ },
66
+ "notes": [
67
+ "Converted from ROUND-TWO-CONVERSION as a portable Dusted template.",
68
+ "Project-specific imports were replaced with local, dependency-light rendering where required."
69
+ ],
70
+ "exportName": "DDIdTag",
71
+ "interfaceName": "DDIdTag"
72
+ }
@@ -0,0 +1,45 @@
1
+ 'use client'
2
+
3
+ import React from 'react'
4
+ import { cn } from '@/utilities/ui'
5
+
6
+ export interface IframeBlockProps {
7
+ data?: {
8
+ url?: string | null
9
+ classNameIframeWrapper?: string | null
10
+ classNameIframe?: string | null
11
+ }
12
+ }
13
+
14
+ const FieldRow = ({ label, value }: { label: string; value?: string | null }) => (
15
+ <div className="grid gap-2 rounded-md border border-white/10 bg-white/[0.03] p-4 md:grid-cols-[150px_1fr]">
16
+ <dt className="text-xs font-semibold uppercase tracking-[0.18em] text-lime-300">{label}</dt>
17
+ <dd className="break-words font-mono text-sm leading-6 text-stone-200">{value || 'Not configured'}</dd>
18
+ </div>
19
+ )
20
+
21
+ export const DDIframe = ({ data }: IframeBlockProps) => {
22
+ return (
23
+ <section className="mx-auto w-full max-w-4xl rounded-md border border-lime-400/25 bg-[#0d0d0d] p-6 shadow-[0_24px_90px_rgba(0,0,0,0.35)]">
24
+ <div className="mb-6 flex flex-col gap-2 border-b border-white/10 pb-5">
25
+ <p className="text-xs font-black uppercase tracking-[0.24em] text-lime-300">Iframe block config</p>
26
+ <h2 className="text-2xl font-bold text-stone-50">Embed settings preview</h2>
27
+ <p className="max-w-2xl text-sm leading-6 text-stone-300">
28
+ The product sandbox shows the saved iframe settings as static configuration. It does not render a nested iframe inside this preview.
29
+ </p>
30
+ </div>
31
+
32
+ <dl className="grid gap-3">
33
+ <FieldRow label="URL" value={data?.url} />
34
+ <FieldRow label="Wrapper class" value={data?.classNameIframeWrapper} />
35
+ <FieldRow label="Iframe class" value={data?.classNameIframe} />
36
+ </dl>
37
+
38
+ <div className={cn('mt-5 rounded-md border border-dashed border-white/15 bg-black/40 p-4 text-sm leading-6 text-stone-400')}>
39
+ Use this block on a real page when the embedded route needs its own viewport. In this sandbox, rendering is intentionally disabled to avoid iframe-in-iframe behaviour.
40
+ </div>
41
+ </section>
42
+ )
43
+ }
44
+
45
+ export default DDIframe
@@ -0,0 +1,4 @@
1
+ # DD-Iframe
2
+
3
+ Portable first-pass conversion of `IframeBlock` from ROUND-TWO-CONVERSION. Project-specific roots and nested unconverted block dependencies were intentionally replaced with local rendering so the template can install into a clean Payload project.
4
+
@@ -0,0 +1,47 @@
1
+ import { Block } from 'payload'
2
+
3
+ export const DDIframe: Block = {
4
+ slug: 'DD-Iframe',
5
+ interfaceName: 'DDIframe',
6
+ labels: {
7
+ singular: 'Iframe Block',
8
+ plural: 'Iframe Blocks'
9
+ },
10
+ fields: [
11
+ {
12
+ admin: {
13
+ initCollapsed: true,
14
+ className: 'custom-css-class'
15
+ },
16
+ type: 'collapsible',
17
+ label: 'Block Settings',
18
+ fields: [
19
+ {
20
+ name: 'classNameIframeWrapper',
21
+ label: 'Wrapper CSS Classes',
22
+ type: 'text',
23
+ admin: {
24
+ description: 'Custom CSS classes for the iframe wrapper container'
25
+ }
26
+ },
27
+ {
28
+ name: 'classNameIframe',
29
+ label: 'Iframe CSS Classes',
30
+ type: 'text',
31
+ defaultValue:
32
+ 'shadow-xl rounded-sm border border-border p-1 shadow-xl background-blur-md',
33
+ admin: {
34
+ description:
35
+ 'Custom CSS classes for the iframe element. Default: shadow-xl rounded-sm border border-border p-1 shadow-xl background-blur-md'
36
+ }
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ name: 'url',
42
+ label: 'Website URL',
43
+ type: 'text',
44
+ required: true
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "type": "block",
3
+ "name": "DD-Iframe",
4
+ "label": "Iframe",
5
+ "sourceName": "IframeBlock",
6
+ "portableName": "DD-Iframe",
7
+ "slug": "DD-Iframe",
8
+ "version": "0.0.1",
9
+ "source": {
10
+ "repo": "Hadizainal/DesignsDustedv3",
11
+ "originalPath": "src/blocks/ROUND-TWO-CONVERSION/IframeBlock",
12
+ "originalSlug": "iframeBlock",
13
+ "originalConfigExport": "IframeBlock",
14
+ "originalComponentExport": "IframeBlock",
15
+ "originalInterfaceName": "DDIframe"
16
+ },
17
+ "files": [
18
+ {
19
+ "from": "Component.tsx",
20
+ "to": "src/blocks/DD-Iframe/Component.tsx"
21
+ },
22
+ {
23
+ "from": "config.ts",
24
+ "to": "src/blocks/DD-Iframe/config.ts"
25
+ }
26
+ ],
27
+ "dependencies": [],
28
+ "sharedFiles": [],
29
+ "requiredProjectFiles": [],
30
+ "optionalProjectFiles": [],
31
+ "collectionRegistration": {
32
+ "enabled": true,
33
+ "collections": [
34
+ "Pages",
35
+ "Posts"
36
+ ]
37
+ },
38
+ "renderBlocksRegistration": {
39
+ "enabled": true
40
+ },
41
+ "renderBlocksBehavior": {
42
+ "wrapperless": false
43
+ },
44
+ "pageRouteIntegration": {
45
+ "required": false,
46
+ "manualSteps": []
47
+ },
48
+ "manual": [
49
+ "Register DDIframe in Pages/Posts blocks arrays if automatic registration was skipped.",
50
+ "Register DD-Iframe in RenderBlocks if automatic registration was skipped.",
51
+ "Run payload generate:types after schema changes."
52
+ ],
53
+ "manualSteps": [
54
+ "Register DDIframe in Pages/Posts blocks arrays if automatic registration was skipped.",
55
+ "Register DD-Iframe in RenderBlocks if automatic registration was skipped.",
56
+ "Run payload generate:types after schema changes."
57
+ ],
58
+ "patchTargets": {
59
+ "blockConfigRegistration": {
60
+ "description": "Installer can add import { DDIframe } from '@/blocks/DD-Iframe/config' and add DDIframe to clear Pages/Posts block arrays."
61
+ },
62
+ "renderBlocksRegistration": {
63
+ "description": "Installer can register DD-Iframe in RenderBlocks."
64
+ }
65
+ },
66
+ "notes": [
67
+ "Converted from ROUND-TWO-CONVERSION as a portable Dusted template.",
68
+ "Project-specific imports were replaced with local, dependency-light rendering where required."
69
+ ],
70
+ "exportName": "DDIframe",
71
+ "interfaceName": "DDIframe"
72
+ }
@@ -0,0 +1,133 @@
1
+ 'use client'
2
+
3
+ import React from 'react'
4
+
5
+ export type MediaType = {
6
+ url: string
7
+ alt?: string
8
+ }
9
+
10
+ type IframeMediaFields = {
11
+ fullwidthSectionClass?: string
12
+ sectionId?: string
13
+ video?: MediaType
14
+ image?: MediaType // used as poster
15
+ imageClassName?: string
16
+ additionalStyles?: React.CSSProperties
17
+ }
18
+
19
+ export type IframeMediaBlockProps = IframeMediaFields & {
20
+ data?: IframeMediaFields
21
+ }
22
+
23
+ // ✅ Named export
24
+ export const DDIframeMedia: React.FC<IframeMediaBlockProps> = (props) => {
25
+ const [isLoading, setIsLoading] = React.useState(true)
26
+ const data = props.data ?? props
27
+ const { video, image, sectionId, fullwidthSectionClass, additionalStyles } = data
28
+ const sectionIdValue = sectionId || 'fullwidth-container'
29
+
30
+ const commonStyle: React.CSSProperties = {
31
+ width: '100%',
32
+ height: 'auto',
33
+ aspectRatio: '16/9',
34
+ maxWidth: '100%',
35
+ maxHeight: '100%',
36
+ margin: '0 auto',
37
+ display: 'block',
38
+ objectFit: 'cover',
39
+ ...additionalStyles // Merge with any additional styles passed
40
+ }
41
+
42
+ const renderVideo = (video?: MediaType) => {
43
+ if (!video?.url) return null
44
+
45
+ const isYouTube = video.url.includes('youtube.com') || video.url.includes('youtu.be')
46
+ const isVimeo = video.url.includes('vimeo.com')
47
+
48
+ if (isYouTube) {
49
+ const videoId = video.url.split('v=')[1] || video.url.split('/').pop()
50
+ const embedUrl = `https://www.youtube.com/embed/${videoId}`
51
+
52
+ return (
53
+ <div className="video-container mb-30 relative" style={commonStyle}>
54
+ {isLoading && (
55
+ <div className="absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm rounded-sm">
56
+ <div className="flex flex-col items-center gap-3">
57
+ <div className="w-12 h-12 border-4 border-white/20 border-t-white rounded-full animate-spin" />
58
+ <div className="text-white text-sm font-medium px-4 py-2 bg-black/60 rounded-md">
59
+ Loading video...
60
+ </div>
61
+ </div>
62
+ </div>
63
+ )}
64
+ <iframe
65
+ src={embedUrl}
66
+ title={video.alt || 'YouTube video'}
67
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
68
+ allowFullScreen
69
+ onLoad={() => setIsLoading(false)}
70
+ style={commonStyle}
71
+ />
72
+ </div>
73
+ )
74
+ }
75
+
76
+ if (isVimeo) {
77
+ const videoId = video.url.split('/').pop()
78
+ const embedUrl = `https://player.vimeo.com/video/${videoId}`
79
+
80
+ return (
81
+ <div className="video-container mb-30 relative" style={commonStyle}>
82
+ {isLoading && (
83
+ <div className="absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm rounded-sm">
84
+ <div className="flex flex-col items-center gap-3">
85
+ <div className="w-12 h-12 border-4 border-white/20 border-t-white rounded-full animate-spin" />
86
+ <div className="text-white text-sm font-medium px-4 py-2 bg-black/60 rounded-md">
87
+ Loading video...
88
+ </div>
89
+ </div>
90
+ </div>
91
+ )}
92
+ <iframe
93
+ src={embedUrl}
94
+ title={video.alt || 'Vimeo video'}
95
+ allow="autoplay; fullscreen; picture-in-picture"
96
+ allowFullScreen
97
+ onLoad={() => setIsLoading(false)}
98
+ style={commonStyle}
99
+ />
100
+ </div>
101
+ )
102
+ }
103
+
104
+ return (
105
+ <video
106
+ autoPlay
107
+ loop
108
+ muted
109
+ playsInline
110
+ poster={image?.url || '/assets/placeholder/01.png'}
111
+ style={{
112
+ ...commonStyle,
113
+ position: 'relative',
114
+ top: '0',
115
+ zIndex: 0,
116
+ filter: 'drop-shadow(2px 4px 6px rgba(0, 0, 0, .5))'
117
+ }}
118
+ >
119
+ <source src={video.url} type="video/webm" />
120
+ </video>
121
+ )
122
+ }
123
+
124
+ return (
125
+ <section
126
+ className={`container-fluid container-block ${fullwidthSectionClass || ''}`}
127
+ id={sectionIdValue}
128
+ >
129
+ {renderVideo(video)}
130
+ </section>
131
+ )
132
+ }
133
+
@@ -0,0 +1,4 @@
1
+ # DD-IframeMedia
2
+
3
+ Portable first-pass conversion of `IframeMediaBlock` from ROUND-TWO-CONVERSION. Project-specific roots and nested unconverted block dependencies were intentionally replaced with local rendering so the template can install into a clean Payload project.
4
+
@@ -0,0 +1,79 @@
1
+ import type { Block } from 'payload'
2
+
3
+ export const DDIframeMedia: Block = {
4
+ slug: 'DD-IframeMedia',
5
+ interfaceName: 'DDIframeMedia',
6
+ labels: {
7
+ singular: 'Embeded Media',
8
+ plural: 'Embeded Media Blocks'
9
+ },
10
+ fields: [
11
+ {
12
+ admin: {
13
+ initCollapsed: true,
14
+ className: 'custom-css'
15
+ },
16
+ type: 'collapsible',
17
+ label: 'Custom Class',
18
+ fields: [
19
+ {
20
+ name: 'sectionId',
21
+ label: 'Section ID',
22
+ type: 'text',
23
+ required: false
24
+ },
25
+ {
26
+ name: 'fullwidthSectionClass',
27
+ label: 'Section Class',
28
+ type: 'text',
29
+ required: false
30
+ },
31
+ {
32
+ name: 'imageClassName',
33
+ label: 'Image Class Name',
34
+ type: 'text',
35
+ required: false
36
+ }
37
+ ]
38
+ },
39
+
40
+ {
41
+ name: 'video',
42
+ label: 'Video',
43
+ type: 'group',
44
+ fields: [
45
+ {
46
+ name: 'url',
47
+ type: 'text',
48
+ required: false
49
+ },
50
+ {
51
+ name: 'alt',
52
+ type: 'text',
53
+ required: false
54
+ }
55
+ ]
56
+ },
57
+ {
58
+ admin: {
59
+ initCollapsed: true,
60
+ className: 'custom-css-class'
61
+ },
62
+ type: 'collapsible',
63
+ label: 'Media Poster Options',
64
+ fields: [
65
+ {
66
+ name: 'image',
67
+ label: 'Image',
68
+ type: 'upload',
69
+ relationTo: 'media',
70
+ required: false,
71
+ admin: {
72
+ description:
73
+ 'Optional - Image to display before video is played (e.g. a thumbnail). If no image is set, a blank placeholder will be shown. Youtube and Vimeo videos will display their own thumbnail if no image is set.'
74
+ }
75
+ }
76
+ ]
77
+ }
78
+ ]
79
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "type": "block",
3
+ "name": "DD-IframeMedia",
4
+ "label": "Iframe Media",
5
+ "sourceName": "IframeMediaBlock",
6
+ "portableName": "DD-IframeMedia",
7
+ "slug": "DD-IframeMedia",
8
+ "version": "0.0.1",
9
+ "source": {
10
+ "repo": "Hadizainal/DesignsDustedv3",
11
+ "originalPath": "src/blocks/ROUND-TWO-CONVERSION/IframeMediaBlock",
12
+ "originalSlug": "iframeMediaBlock",
13
+ "originalConfigExport": "IframeMediaBlock",
14
+ "originalComponentExport": "IframeMediaBlock",
15
+ "originalInterfaceName": "DDIframeMedia"
16
+ },
17
+ "files": [
18
+ {
19
+ "from": "Component.tsx",
20
+ "to": "src/blocks/DD-IframeMedia/Component.tsx"
21
+ },
22
+ {
23
+ "from": "config.ts",
24
+ "to": "src/blocks/DD-IframeMedia/config.ts"
25
+ }
26
+ ],
27
+ "dependencies": [],
28
+ "sharedFiles": [],
29
+ "requiredProjectFiles": [],
30
+ "optionalProjectFiles": [],
31
+ "collectionRegistration": {
32
+ "enabled": true,
33
+ "collections": [
34
+ "Pages",
35
+ "Posts"
36
+ ]
37
+ },
38
+ "renderBlocksRegistration": {
39
+ "enabled": true
40
+ },
41
+ "renderBlocksBehavior": {
42
+ "wrapperless": false
43
+ },
44
+ "pageRouteIntegration": {
45
+ "required": false,
46
+ "manualSteps": []
47
+ },
48
+ "manual": [
49
+ "Register DDIframeMedia in Pages/Posts blocks arrays if automatic registration was skipped.",
50
+ "Register DD-IframeMedia in RenderBlocks if automatic registration was skipped.",
51
+ "Run payload generate:types after schema changes."
52
+ ],
53
+ "manualSteps": [
54
+ "Register DDIframeMedia in Pages/Posts blocks arrays if automatic registration was skipped.",
55
+ "Register DD-IframeMedia in RenderBlocks if automatic registration was skipped.",
56
+ "Run payload generate:types after schema changes."
57
+ ],
58
+ "patchTargets": {
59
+ "blockConfigRegistration": {
60
+ "description": "Installer can add import { DDIframeMedia } from '@/blocks/DD-IframeMedia/config' and add DDIframeMedia to clear Pages/Posts block arrays."
61
+ },
62
+ "renderBlocksRegistration": {
63
+ "description": "Installer can register DD-IframeMedia in RenderBlocks."
64
+ }
65
+ },
66
+ "notes": [
67
+ "Converted from ROUND-TWO-CONVERSION as a portable Dusted template.",
68
+ "Project-specific imports were replaced with local, dependency-light rendering where required."
69
+ ],
70
+ "exportName": "DDIframeMedia",
71
+ "interfaceName": "DDIframeMedia"
72
+ }
@@ -0,0 +1,36 @@
1
+ 'use client'
2
+ import React from 'react'
3
+ import LineAnim from '@/components/ui/anims/LineAnims'
4
+
5
+ export interface LineAnimBlockProps {
6
+ className?: string
7
+ direction?: 'left-to-right' | 'right-to-left' | 'top-to-bottom' | 'bottom-to-top'
8
+ trigger?: 'scroll' | 'immediate'
9
+ duration?: number
10
+ delay?: number
11
+ customClass?: string
12
+ blockType?: string
13
+ id?: string
14
+ }
15
+
16
+ export const DDLineAnim: React.FC<LineAnimBlockProps> = ({
17
+ className = '',
18
+ direction = 'left-to-right',
19
+ trigger = 'scroll',
20
+ duration = 1,
21
+ delay = 0,
22
+ customClass = '',
23
+ id
24
+ }) => {
25
+ return (
26
+ <div className={`line-anim-block overflow-hidden ${className} ${customClass}`} id={id}>
27
+ <LineAnim
28
+ direction={direction}
29
+ trigger={trigger}
30
+ duration={duration}
31
+ delay={delay}
32
+ className="bg-gradient-to-r from-gray-400 to-gray-600"
33
+ />
34
+ </div>
35
+ )
36
+ }
@@ -0,0 +1,4 @@
1
+ # DD-LineAnim
2
+
3
+ Portable first-pass conversion of `LineAnimBlock` 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
+