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.
- package/README.md +35 -0
- package/package.json +5 -2
- package/src/cli.js +39 -3
- package/src/commands/shop.js +59 -0
- package/src/commands/warehouse.js +73 -0
- package/src/utils/paths.js +13 -13
- package/templates/blocks/DD-Accordion/Component.tsx +229 -0
- package/templates/blocks/DD-Accordion/README.md +3 -0
- package/templates/blocks/DD-Accordion/config.ts +73 -0
- package/templates/blocks/DD-Accordion/manifest.json +75 -0
- package/templates/blocks/DD-AnimText/Component.tsx +788 -0
- package/templates/blocks/DD-AnimText/README.md +3 -0
- package/templates/blocks/DD-AnimText/config.ts +295 -0
- package/templates/blocks/DD-AnimText/manifest.json +85 -0
- package/templates/blocks/DD-AsideNav/Component.tsx +321 -0
- package/templates/blocks/DD-AsideNav/config.ts +204 -0
- package/templates/blocks/DD-AsideNav/manifest.json +80 -0
- package/templates/blocks/DD-Banner/Component.tsx +51 -0
- package/templates/blocks/DD-Banner/config.ts +57 -0
- package/templates/blocks/DD-Banner/manifest.json +72 -0
- package/templates/blocks/DD-BgLightning/Component.tsx +44 -0
- package/templates/blocks/DD-BgLightning/README.md +3 -0
- package/templates/blocks/DD-BgLightning/config.ts +97 -0
- package/templates/blocks/DD-BgLightning/manifest.json +79 -0
- package/templates/blocks/DD-BookCall/Component.tsx +535 -535
- package/templates/blocks/DD-BookCall/config.ts +238 -238
- package/templates/blocks/DD-ButtonPop/Component.tsx +117 -0
- package/templates/blocks/DD-ButtonPop/config.ts +105 -0
- package/templates/blocks/DD-ButtonPop/manifest.json +88 -0
- package/templates/blocks/DD-ButtonPop/svg-icons/Dust2.tsx +167 -0
- package/templates/blocks/DD-Card/Component.tsx +251 -0
- package/templates/blocks/DD-Card/README.md +4 -0
- package/templates/blocks/DD-Card/config.ts +154 -0
- package/templates/blocks/DD-Card/manifest.json +82 -0
- package/templates/blocks/DD-CardTemplate01/Component.tsx +140 -140
- package/templates/blocks/DD-CardTemplate01/config.ts +106 -106
- package/templates/blocks/DD-Carousel-A/Component.tsx +249 -249
- package/templates/blocks/DD-Carousel-B/Component.tsx +403 -403
- package/templates/blocks/DD-Chip/Component.tsx +250 -0
- package/templates/blocks/DD-Chip/EXAMPLES.md +313 -0
- package/templates/blocks/DD-Chip/README.md +202 -0
- package/templates/blocks/DD-Chip/config.ts +369 -0
- package/templates/blocks/DD-Chip/manifest.json +74 -0
- package/templates/blocks/DD-ComparisonTable/Component.tsx +256 -256
- package/templates/blocks/DD-Contact/Component.tsx +435 -434
- package/templates/blocks/DD-Contact/config.ts +22 -22
- package/templates/blocks/DD-Counter/Component.tsx +190 -0
- package/templates/blocks/DD-Counter/README.md +4 -0
- package/templates/blocks/DD-Counter/config.ts +291 -0
- package/templates/blocks/DD-Counter/manifest.json +74 -0
- package/templates/blocks/DD-CustomCSS/Component.tsx +8 -0
- package/templates/blocks/DD-CustomCSS/README.md +4 -0
- package/templates/blocks/DD-CustomCSS/addToLayout.md +5 -0
- package/templates/blocks/DD-CustomCSS/config.ts +22 -0
- package/templates/blocks/DD-CustomCSS/manifest.json +72 -0
- package/templates/blocks/DD-CustomCSS/renderCustomCSS.md +7 -0
- package/templates/blocks/DD-FeatCat/Component.tsx +302 -302
- package/templates/blocks/DD-FeatCat/config.ts +201 -201
- package/templates/blocks/DD-FeatStrip/Component.tsx +585 -585
- package/templates/blocks/DD-FeatStrip/config.ts +134 -134
- package/templates/blocks/DD-FluidBtn/ButtonsEyeCatching.tsx +628 -0
- package/templates/blocks/DD-FluidBtn/Component.tsx +43 -0
- package/templates/blocks/DD-FluidBtn/README.md +6 -0
- package/templates/blocks/DD-FluidBtn/config.ts +102 -0
- package/templates/blocks/DD-FluidBtn/manifest.json +86 -0
- package/templates/blocks/DD-GooeyInfo/Component.tsx +149 -0
- package/templates/blocks/DD-GooeyInfo/config.ts +135 -0
- package/templates/blocks/DD-GooeyInfo/manifest.json +72 -0
- package/templates/blocks/DD-Hero/Component.tsx +297 -297
- package/templates/blocks/DD-Hero/config.ts +267 -267
- package/templates/blocks/DD-HorizontalScroll/Component.tsx +936 -936
- package/templates/blocks/DD-HorizontalScroll/config.ts +231 -231
- package/templates/blocks/DD-Icon/Component.tsx +287 -0
- package/templates/blocks/DD-Icon/README.md +4 -0
- package/templates/blocks/DD-Icon/config.ts +258 -0
- package/templates/blocks/DD-Icon/hooks/revalidateBlockIds.ts +66 -0
- package/templates/blocks/DD-Icon/manifest.json +82 -0
- package/templates/blocks/DD-IconButton/Component.tsx +455 -0
- package/templates/blocks/DD-IconButton/README.md +326 -0
- package/templates/blocks/DD-IconButton/config.ts +239 -0
- package/templates/blocks/DD-IconButton/manifest.json +85 -0
- package/templates/blocks/DD-IdTag/Component.tsx +21 -0
- package/templates/blocks/DD-IdTag/README.md +4 -0
- package/templates/blocks/DD-IdTag/config.ts +41 -0
- package/templates/blocks/DD-IdTag/manifest.json +72 -0
- package/templates/blocks/DD-Iframe/Component.tsx +45 -0
- package/templates/blocks/DD-Iframe/README.md +4 -0
- package/templates/blocks/DD-Iframe/config.ts +47 -0
- package/templates/blocks/DD-Iframe/manifest.json +72 -0
- package/templates/blocks/DD-IframeMedia/Component.tsx +133 -0
- package/templates/blocks/DD-IframeMedia/README.md +4 -0
- package/templates/blocks/DD-IframeMedia/config.ts +79 -0
- package/templates/blocks/DD-IframeMedia/manifest.json +72 -0
- package/templates/blocks/DD-LineAnim/Component.tsx +36 -0
- package/templates/blocks/DD-LineAnim/README.md +4 -0
- package/templates/blocks/DD-LineAnim/config.ts +90 -0
- package/templates/blocks/DD-LineAnim/manifest.json +80 -0
- package/templates/blocks/DD-LinkGrid/Component.tsx +119 -0
- package/templates/blocks/DD-LinkGrid/README.md +4 -0
- package/templates/blocks/DD-LinkGrid/config.ts +51 -0
- package/templates/blocks/DD-LinkGrid/manifest.json +74 -0
- package/templates/blocks/DD-LogoMarq/Component.tsx +132 -0
- package/templates/blocks/DD-LogoMarq/README.md +4 -0
- package/templates/blocks/DD-LogoMarq/config.ts +264 -0
- package/templates/blocks/DD-LogoMarq/manifest.json +82 -0
- package/templates/blocks/DD-Lottie/Component.tsx +459 -0
- package/templates/blocks/DD-Lottie/README.md +4 -0
- package/templates/blocks/DD-Lottie/config.ts +379 -0
- package/templates/blocks/DD-Lottie/index.tsx +28 -0
- package/templates/blocks/DD-Lottie/manifest.json +83 -0
- package/templates/blocks/DD-MagicBento/Component.tsx +777 -0
- package/templates/blocks/DD-MagicBento/README.md +4 -0
- package/templates/blocks/DD-MagicBento/config.ts +264 -0
- package/templates/blocks/DD-MagicBento/manifest.json +74 -0
- package/templates/blocks/DD-MasonaryMedia/Component.tsx +545 -545
- package/templates/blocks/DD-MasonaryMedia/config.ts +2 -2
- package/templates/blocks/DD-MasonaryMedia/vendor.d.ts +2 -2
- package/templates/blocks/DD-Masonry/Component.tsx +645 -0
- package/templates/blocks/DD-Masonry/README.md +4 -0
- package/templates/blocks/DD-Masonry/config.ts +475 -0
- package/templates/blocks/DD-Masonry/manifest.json +82 -0
- package/templates/blocks/DD-Pricing/Component.tsx +2 -5
- package/templates/blocks/DD-Process/Component.tsx +2 -4
- package/templates/blocks/DD-Process/config.ts +150 -150
- package/templates/blocks/DD-Progress/Component.tsx +156 -0
- package/templates/blocks/DD-Progress/README.md +4 -0
- package/templates/blocks/DD-Progress/config.ts +175 -0
- package/templates/blocks/DD-Progress/manifest.json +74 -0
- package/templates/blocks/DD-ProjHeader/Component.tsx +91 -0
- package/templates/blocks/DD-ProjHeader/README.md +4 -0
- package/templates/blocks/DD-ProjHeader/config.ts +96 -0
- package/templates/blocks/DD-ProjHeader/manifest.json +72 -0
- package/templates/blocks/DD-ProjSlider/Component.tsx +123 -0
- package/templates/blocks/DD-ProjSlider/README.md +4 -0
- package/templates/blocks/DD-ProjSlider/config.ts +64 -0
- package/templates/blocks/DD-ProjSlider/manifest.json +72 -0
- package/templates/blocks/DD-ScrollText/Component.tsx +114 -0
- package/templates/blocks/DD-ScrollText/README.md +4 -0
- package/templates/blocks/DD-ScrollText/config.ts +58 -0
- package/templates/blocks/DD-ScrollText/manifest.json +72 -0
- package/templates/blocks/DD-Section/Component.tsx +266 -266
- package/templates/blocks/DD-Separator/Component.tsx +66 -0
- package/templates/blocks/DD-Separator/README.md +4 -0
- package/templates/blocks/DD-Separator/config.ts +58 -0
- package/templates/blocks/DD-Separator/manifest.json +72 -0
- package/templates/blocks/DD-Services/Component.tsx +176 -176
- package/templates/blocks/DD-Services/config.ts +149 -149
- package/templates/blocks/DD-ShowcaseGrid/Component.tsx +307 -307
- package/templates/blocks/DD-Slider-A/Component.tsx +1 -1
- package/templates/blocks/DD-StackCards/Component.tsx +1 -1
- package/templates/blocks/DD-StackCards/config.ts +399 -399
- package/templates/blocks/DD-Team/Component.tsx +247 -247
- package/templates/blocks/DD-Team/config.ts +173 -173
- package/templates/blocks/DD-TeamCards/Component.tsx +251 -0
- package/templates/blocks/DD-TeamCards/README.md +4 -0
- package/templates/blocks/DD-TeamCards/config.ts +302 -0
- package/templates/blocks/DD-TeamCards/manifest.json +74 -0
- package/templates/blocks/DD-TechStack/Component.tsx +174 -174
- package/templates/blocks/DD-TechStack/config.ts +153 -153
- package/templates/blocks/DD-TestMarq/Component.tsx +132 -0
- package/templates/blocks/DD-TestMarq/README.md +4 -0
- package/templates/blocks/DD-TestMarq/RowLabel.tsx +9 -0
- package/templates/blocks/DD-TestMarq/config.ts +88 -0
- package/templates/blocks/DD-TestMarq/manifest.json +72 -0
- package/templates/blocks/DD-Testim/Component.tsx +247 -0
- package/templates/blocks/DD-Testim/README.md +4 -0
- package/templates/blocks/DD-Testim/config.ts +101 -0
- package/templates/blocks/DD-Testim/manifest.json +75 -0
- package/templates/blocks/DD-Testim2/Component.tsx +256 -0
- package/templates/blocks/DD-Testim2/README.md +4 -0
- package/templates/blocks/DD-Testim2/config.ts +100 -0
- package/templates/blocks/DD-Testim2/manifest.json +74 -0
- package/templates/blocks/DD-Testimonials/Component.tsx +139 -147
- package/templates/blocks/DD-Testimonials/config.ts +120 -120
- package/templates/blocks/DD-TextMarq/Component.tsx +157 -0
- package/templates/blocks/DD-TextMarq/README.md +4 -0
- package/templates/blocks/DD-TextMarq/config.ts +237 -0
- package/templates/blocks/DD-TextMarq/manifest.json +82 -0
- package/templates/blocks/DD-Thanks/Component.tsx +501 -0
- package/templates/blocks/DD-Thanks/README.md +4 -0
- package/templates/blocks/DD-Thanks/config.ts +224 -0
- package/templates/blocks/DD-Thanks/manifest.json +72 -0
- package/templates/blocks/DD-VertMarq/Component.tsx +154 -0
- package/templates/blocks/DD-VertMarq/README.md +4 -0
- package/templates/blocks/DD-VertMarq/config.ts +236 -0
- package/templates/blocks/DD-VertMarq/dist/index.css +6 -0
- package/templates/blocks/DD-VertMarq/dist/index.min.css +1 -0
- package/templates/blocks/DD-VertMarq/manifest.json +74 -0
- package/templates/blocks/DD-Work/Component.tsx +318 -315
- package/templates/blocks/DD-Work/config.ts +165 -165
- package/templates/blocks/DD-Work-B/Component.tsx +294 -294
- package/templates/blocks/DDHG-CTASection2/Component.tsx +185 -0
- package/templates/blocks/DDHG-CTASection2/config.ts +140 -0
- package/templates/blocks/DDHG-CTASection2/manifest.json +45 -0
- package/templates/blocks/DDHG-HighlightArc/Component.tsx +243 -0
- package/templates/blocks/DDHG-HighlightArc/config.ts +85 -0
- package/templates/blocks/DDHG-HighlightArc/manifest.json +46 -0
- package/templates/blocks/DDHG-LogoMarquee/Component.tsx +143 -0
- package/templates/blocks/DDHG-LogoMarquee/config.ts +154 -0
- package/templates/blocks/DDHG-LogoMarquee/manifest.json +39 -0
- package/templates/blocks/DDHG-NavCodeGrid/Component.tsx +227 -0
- package/templates/blocks/DDHG-NavCodeGrid/config.ts +64 -0
- package/templates/blocks/DDHG-NavCodeGrid/manifest.json +45 -0
- package/templates/blocks/DDHG-ProcessSec/Component.tsx +574 -0
- package/templates/blocks/DDHG-ProcessSec/config.ts +170 -0
- package/templates/blocks/DDHG-ProcessSec/manifest.json +56 -0
- package/templates/blocks/DDHG-ServiceDetails/Component.tsx +164 -0
- package/templates/blocks/DDHG-ServiceDetails/ServiceDetailCard.tsx +390 -0
- package/templates/blocks/DDHG-ServiceDetails/config.ts +77 -0
- package/templates/blocks/DDHG-ServiceDetails/manifest.json +50 -0
- package/templates/blocks/DDHG-ServiceHero/Component.tsx +234 -0
- package/templates/blocks/DDHG-ServiceHero/config.ts +49 -0
- package/templates/blocks/DDHG-ServiceHero/manifest.json +26 -0
- package/templates/blocks/DDHG-ServiceOverview/Component.tsx +277 -0
- package/templates/blocks/DDHG-ServiceOverview/config.ts +64 -0
- package/templates/blocks/DDHG-ServiceOverview/manifest.json +44 -0
- package/templates/blocks/DDHG-StatsFAQ/Component.tsx +389 -0
- package/templates/blocks/DDHG-StatsFAQ/config.ts +204 -0
- package/templates/blocks/DDHG-StatsFAQ/manifest.json +45 -0
- package/templates/blocks/DDHG-TeamCards/Component.tsx +169 -0
- package/templates/blocks/DDHG-TeamCards/config.ts +48 -0
- package/templates/blocks/DDHG-TeamCards/manifest.json +29 -0
- package/templates/shared/src/components/BgLightning/index.tsx +242 -0
- package/templates/shared/src/components/ui/ShareButton/index.tsx +80 -0
- package/templates/shared/src/components/ui/anims/FadeOnScroll.tsx +48 -0
- package/templates/shared/src/components/ui/anims/FadeUpOnInView.tsx +63 -0
- package/templates/shared/src/components/ui/anims/GlareHover.tsx +111 -0
- package/templates/shared/src/components/ui/anims/LineAnims.tsx +81 -0
- package/templates/shared/src/components/ui/anims/TitleAnims01.tsx +54 -0
- package/templates/shared/src/components/ui/anims/animation-container.tsx +29 -0
- package/templates/shared/src/components/ui/anims/blur-in.tsx +26 -0
- package/templates/shared/src/components/ui/anims/counter.tsx +53 -0
- package/templates/shared/src/components/ui/anims/fade.tsx +83 -0
- package/templates/shared/src/components/ui/anims/gradual-spacing.tsx +39 -0
- package/templates/shared/src/components/ui/anims/pull-up.tsx +93 -0
- package/templates/shared/src/components/ui/anims/reveal-text.tsx +76 -0
- package/templates/shared/src/components/ui/anims/rotate-words.tsx +43 -0
- package/templates/shared/src/components/ui/anims/shiny-text.tsx +58 -0
- package/templates/shared/src/components/ui/anims/shuffle-text.tsx +85 -0
- package/templates/shared/src/components/ui/anims/split-text.tsx +211 -0
- package/templates/shared/src/components/ui/anims/staggered-fade.tsx +133 -0
- package/templates/shared/src/components/ui/anims/text-scroll.tsx +111 -0
- package/templates/shared/src/components/ui/anims/typing-effect.tsx +112 -0
- package/templates/shared/src/components/ui/button-dusted-fluid/index.tsx +1521 -0
- package/templates/shared/src/components/ui/separator.tsx +85 -0
- package/templates/shared/src/hooks/useBodyScrollLock.ts +97 -0
- package/templates/shared/src/hooks/useClickOutside.ts +28 -0
- package/templates/shared/src/utilities/renderCustomCSS.ts +5 -0
- package/templates/shared/src/utilities/smoothScroll.ts +65 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import type { Block } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { defaultLexical } from '@/fields/defaultLexical'
|
|
4
|
+
|
|
5
|
+
export const DDCard: Block = {
|
|
6
|
+
slug: 'DD-Card',
|
|
7
|
+
interfaceName: 'DDCard',
|
|
8
|
+
labels: {
|
|
9
|
+
singular: 'Card Block',
|
|
10
|
+
plural: 'Card Blocks'
|
|
11
|
+
},
|
|
12
|
+
fields: [
|
|
13
|
+
// Block-level settings
|
|
14
|
+
{
|
|
15
|
+
admin: {
|
|
16
|
+
initCollapsed: true,
|
|
17
|
+
className: 'custom-group-class'
|
|
18
|
+
},
|
|
19
|
+
type: 'collapsible',
|
|
20
|
+
label: 'Block Settings',
|
|
21
|
+
fields: [
|
|
22
|
+
{
|
|
23
|
+
type: 'row',
|
|
24
|
+
fields: [
|
|
25
|
+
{
|
|
26
|
+
name: 'priority',
|
|
27
|
+
type: 'checkbox',
|
|
28
|
+
label: 'High Priority Loading',
|
|
29
|
+
defaultValue: false,
|
|
30
|
+
admin: {
|
|
31
|
+
description:
|
|
32
|
+
'Enable for above-the-fold cards only. Improves LCP but should only be used when this card block appears at the top of the page.',
|
|
33
|
+
width: '50%'
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'aspectRatio',
|
|
38
|
+
type: 'select',
|
|
39
|
+
label: 'Image Aspect Ratio',
|
|
40
|
+
defaultValue: 'video',
|
|
41
|
+
options: [
|
|
42
|
+
{ label: '16:9 Video', value: 'video' },
|
|
43
|
+
{ label: '1:1 Square', value: 'square' },
|
|
44
|
+
{ label: '3:4 Portrait', value: 'portrait' },
|
|
45
|
+
{ label: 'Auto (Original)', value: 'auto' }
|
|
46
|
+
],
|
|
47
|
+
admin: {
|
|
48
|
+
description: 'Set consistent aspect ratio for all card images in this block.',
|
|
49
|
+
width: '50%'
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'cardScrollSpeed',
|
|
56
|
+
type: 'text',
|
|
57
|
+
label: 'Scroll Animation Speed',
|
|
58
|
+
defaultValue: '0.2',
|
|
59
|
+
admin: {
|
|
60
|
+
description: 'Animation speed for scroll effects. Default: 0.2',
|
|
61
|
+
placeholder: '0.2'
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
// Cards array
|
|
67
|
+
{
|
|
68
|
+
name: 'cards',
|
|
69
|
+
label: 'Cards',
|
|
70
|
+
type: 'array',
|
|
71
|
+
required: false,
|
|
72
|
+
minRows: 1,
|
|
73
|
+
fields: [
|
|
74
|
+
{
|
|
75
|
+
name: 'image',
|
|
76
|
+
label: 'Card Image',
|
|
77
|
+
type: 'upload',
|
|
78
|
+
relationTo: 'media',
|
|
79
|
+
required: false,
|
|
80
|
+
admin: {
|
|
81
|
+
description: 'Image will be displayed according to the aspect ratio setting above.'
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
// Custom styling for individual cards
|
|
85
|
+
{
|
|
86
|
+
admin: {
|
|
87
|
+
initCollapsed: true,
|
|
88
|
+
className: 'custom-css-class'
|
|
89
|
+
},
|
|
90
|
+
type: 'collapsible',
|
|
91
|
+
label: 'Card Styling (Optional)',
|
|
92
|
+
fields: [
|
|
93
|
+
{
|
|
94
|
+
type: 'row',
|
|
95
|
+
fields: [
|
|
96
|
+
{
|
|
97
|
+
name: 'customClass',
|
|
98
|
+
label: 'Custom Image Class',
|
|
99
|
+
type: 'text',
|
|
100
|
+
required: false,
|
|
101
|
+
admin: {
|
|
102
|
+
description:
|
|
103
|
+
'Override default image classes. Use Tailwind classes for styling.',
|
|
104
|
+
placeholder: 'rounded-lg border-2',
|
|
105
|
+
width: '50%'
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'cardBlockClass',
|
|
110
|
+
label: 'Custom Card Class',
|
|
111
|
+
type: 'text',
|
|
112
|
+
required: false,
|
|
113
|
+
admin: {
|
|
114
|
+
description: 'Override default card container classes.',
|
|
115
|
+
placeholder: 'shadow-xl bg-accent',
|
|
116
|
+
width: '50%'
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'content',
|
|
125
|
+
label: 'Card Content',
|
|
126
|
+
type: 'richText',
|
|
127
|
+
required: false,
|
|
128
|
+
admin: {
|
|
129
|
+
description: 'Rich text content for the card body.'
|
|
130
|
+
},
|
|
131
|
+
editor: defaultLexical
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'link',
|
|
135
|
+
label: 'Card Link (Optional)',
|
|
136
|
+
type: 'group',
|
|
137
|
+
fields: [
|
|
138
|
+
{
|
|
139
|
+
name: 'url',
|
|
140
|
+
label: 'URL',
|
|
141
|
+
type: 'text',
|
|
142
|
+
required: false,
|
|
143
|
+
admin: {
|
|
144
|
+
description:
|
|
145
|
+
'Make the entire card clickable. If URL starts with "/", it will be treated as an internal link. Otherwise, it opens in a new tab.',
|
|
146
|
+
placeholder: '/about or https://example.com'
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "block",
|
|
3
|
+
"name": "DD-Card",
|
|
4
|
+
"label": "Card",
|
|
5
|
+
"sourceName": "CardBlock",
|
|
6
|
+
"portableName": "DD-Card",
|
|
7
|
+
"slug": "DD-Card",
|
|
8
|
+
"version": "0.0.1",
|
|
9
|
+
"source": {
|
|
10
|
+
"repo": "Hadizainal/DesignsDustedv3",
|
|
11
|
+
"originalPath": "src/blocks/ROUND-TWO-CONVERSION/CardBlock",
|
|
12
|
+
"originalSlug": "cardBlock",
|
|
13
|
+
"originalConfigExport": "CardBlock",
|
|
14
|
+
"originalComponentExport": "CardBlock",
|
|
15
|
+
"originalInterfaceName": "DDCard"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
{
|
|
19
|
+
"from": "Component.tsx",
|
|
20
|
+
"to": "src/blocks/DD-Card/Component.tsx"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"from": "config.ts",
|
|
24
|
+
"to": "src/blocks/DD-Card/config.ts"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"dependencies": [
|
|
28
|
+
"framer-motion"
|
|
29
|
+
],
|
|
30
|
+
"sharedFiles": [
|
|
31
|
+
{
|
|
32
|
+
"from": "templates/shared/src/components/ui/anims",
|
|
33
|
+
"to": "src/components/ui/anims",
|
|
34
|
+
"required": true,
|
|
35
|
+
"safeToCopy": true
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"requiredProjectFiles": [],
|
|
39
|
+
"optionalProjectFiles": [],
|
|
40
|
+
"collectionRegistration": {
|
|
41
|
+
"enabled": true,
|
|
42
|
+
"collections": [
|
|
43
|
+
"Pages",
|
|
44
|
+
"Posts"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"renderBlocksRegistration": {
|
|
48
|
+
"enabled": true
|
|
49
|
+
},
|
|
50
|
+
"renderBlocksBehavior": {
|
|
51
|
+
"wrapperless": false
|
|
52
|
+
},
|
|
53
|
+
"pageRouteIntegration": {
|
|
54
|
+
"required": false,
|
|
55
|
+
"manualSteps": []
|
|
56
|
+
},
|
|
57
|
+
"manual": [
|
|
58
|
+
"Register DDCard in Pages/Posts blocks arrays if automatic registration was skipped.",
|
|
59
|
+
"Register DD-Card in RenderBlocks if automatic registration was skipped.",
|
|
60
|
+
"Run payload generate:types after schema changes."
|
|
61
|
+
],
|
|
62
|
+
"manualSteps": [
|
|
63
|
+
"Register DDCard in Pages/Posts blocks arrays if automatic registration was skipped.",
|
|
64
|
+
"Register DD-Card in RenderBlocks if automatic registration was skipped.",
|
|
65
|
+
"Run payload generate:types after schema changes."
|
|
66
|
+
],
|
|
67
|
+
"patchTargets": {
|
|
68
|
+
"blockConfigRegistration": {
|
|
69
|
+
"description": "Installer can add import { DDCard } from '@/blocks/DD-Card/config' and add DDCard to clear Pages/Posts block arrays."
|
|
70
|
+
},
|
|
71
|
+
"renderBlocksRegistration": {
|
|
72
|
+
"description": "Installer can register DD-Card in RenderBlocks."
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"notes": [
|
|
76
|
+
"Converted from ROUND-TWO-CONVERSION as a portable Dusted template.",
|
|
77
|
+
"Project-specific imports were replaced with local, dependency-light rendering where required.",
|
|
78
|
+
"Manifest includes shared local support files required by original DesignsDusted source imports."
|
|
79
|
+
],
|
|
80
|
+
"exportName": "DDCard",
|
|
81
|
+
"interfaceName": "DDCard"
|
|
82
|
+
}
|
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
import React, { useRef, useState } from 'react'
|
|
3
|
-
import * as LucideIcons from 'lucide-react'
|
|
4
|
-
import { cn } from '@/utilities/ui'
|
|
5
|
-
export type DDCardTemplate01Props = Record<string, any>
|
|
6
|
-
|
|
7
|
-
// ─── SpotlightCard ────────────────────────────────────────────────────────────
|
|
8
|
-
interface SpotlightCardProps {
|
|
9
|
-
children: React.ReactNode
|
|
10
|
-
className?: string
|
|
11
|
-
spotlightColor?: string
|
|
12
|
-
enableTilt?: boolean
|
|
13
|
-
style?: React.CSSProperties
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function SpotlightCard({
|
|
17
|
-
children,
|
|
18
|
-
className,
|
|
19
|
-
spotlightColor = 'rgba(214,211,209,0.08)',
|
|
20
|
-
enableTilt = true,
|
|
21
|
-
style,
|
|
22
|
-
}: SpotlightCardProps) {
|
|
23
|
-
const cardRef = useRef<HTMLDivElement>(null)
|
|
24
|
-
const [pos, setPos] = useState<{ x: number; y: number } | null>(null)
|
|
25
|
-
const [tilt, setTilt] = useState({ rx: 0, ry: 0 })
|
|
26
|
-
|
|
27
|
-
const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
28
|
-
if (!cardRef.current) return
|
|
29
|
-
const rect = cardRef.current.getBoundingClientRect()
|
|
30
|
-
const x = e.clientX - rect.left
|
|
31
|
-
const y = e.clientY - rect.top
|
|
32
|
-
setPos({ x, y })
|
|
33
|
-
if (enableTilt) {
|
|
34
|
-
const rx = (y / rect.height - 0.5) * -10
|
|
35
|
-
const ry = (x / rect.width - 0.5) * 10
|
|
36
|
-
setTilt({ rx, ry })
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const handleMouseLeave = () => {
|
|
41
|
-
setPos(null)
|
|
42
|
-
setTilt({ rx: 0, ry: 0 })
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return (
|
|
46
|
-
<div
|
|
47
|
-
ref={cardRef}
|
|
48
|
-
className={cn('relative overflow-hidden', className)}
|
|
49
|
-
onMouseMove={handleMouseMove}
|
|
50
|
-
onMouseLeave={handleMouseLeave}
|
|
51
|
-
style={
|
|
52
|
-
enableTilt
|
|
53
|
-
? {
|
|
54
|
-
...style,
|
|
55
|
-
transform: `perspective(800px) rotateX(${tilt.rx}deg) rotateY(${tilt.ry}deg)`,
|
|
56
|
-
transition: 'transform 0.1s ease',
|
|
57
|
-
}
|
|
58
|
-
: style
|
|
59
|
-
}
|
|
60
|
-
>
|
|
61
|
-
{pos && (
|
|
62
|
-
<div
|
|
63
|
-
className="pointer-events-none absolute inset-0 z-0 transition-opacity duration-300"
|
|
64
|
-
style={{
|
|
65
|
-
background: `radial-gradient(400px circle at ${pos.x}px ${pos.y}px, ${spotlightColor}, transparent 60%)`,
|
|
66
|
-
}}
|
|
67
|
-
/>
|
|
68
|
-
)}
|
|
69
|
-
<div className="relative z-10">{children}</div>
|
|
70
|
-
</div>
|
|
71
|
-
)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// ─── Dynamic Icon ─────────────────────────────────────────────────────────────
|
|
75
|
-
function DynamicIcon({
|
|
76
|
-
name,
|
|
77
|
-
...props
|
|
78
|
-
}: { name?: string | null } & Omit<LucideIcons.LucideProps, 'name'>) {
|
|
79
|
-
if (!name) return null
|
|
80
|
-
const Icon = (LucideIcons as unknown as Record<string, React.FC<LucideIcons.LucideProps>>)[name]
|
|
81
|
-
if (!Icon) return null
|
|
82
|
-
return <Icon {...props} />
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// ─── Component ────────────────────────────────────────────────────────────────
|
|
86
|
-
export const DDCardTemplate01: React.FC<DDCardTemplate01Props> = ({
|
|
87
|
-
eyebrow,
|
|
88
|
-
headline,
|
|
89
|
-
description,
|
|
90
|
-
iconName = 'ShieldCheck',
|
|
91
|
-
glowColor = 'rgba(214,211,209,0.08)',
|
|
92
|
-
enableTilt = true,
|
|
93
|
-
minHeight = '220px',
|
|
94
|
-
className,
|
|
95
|
-
sectionId,
|
|
96
|
-
customCSS,
|
|
97
|
-
}) => {
|
|
98
|
-
return (
|
|
99
|
-
<div id={sectionId ?? undefined} className="spotlight-card overflow-clip py-8">
|
|
100
|
-
{customCSS && <style dangerouslySetInnerHTML={{ __html: customCSS }} />}
|
|
101
|
-
<SpotlightCard
|
|
102
|
-
spotlightColor={glowColor ?? undefined}
|
|
103
|
-
enableTilt={enableTilt ?? true}
|
|
104
|
-
className={cn(
|
|
105
|
-
'border border-stone-50 dark:border-stone-950 bg-stone-100 dark:bg-stone-900 hover:shadow-2xl transition-all hover:transition-all duration-900 hover:duration-900 flex flex-col justify-between p-6 max-w-[100rem] mx-auto',
|
|
106
|
-
className,
|
|
107
|
-
)}
|
|
108
|
-
style={{ minHeight: minHeight ?? '220px' }}
|
|
109
|
-
>
|
|
110
|
-
#BlockName-DDCardTemplate01
|
|
111
|
-
<div className="w-11 h-11 flex items-center justify-center rounded-xl border border-stone-300 text-stone-300 mb-6">
|
|
112
|
-
<DynamicIcon
|
|
113
|
-
className="text-stone-600 dark:text-stone-300"
|
|
114
|
-
name={iconName ?? 'ShieldCheck'}
|
|
115
|
-
size={20}
|
|
116
|
-
/>
|
|
117
|
-
</div>
|
|
118
|
-
<div>
|
|
119
|
-
{eyebrow && (
|
|
120
|
-
<p className="text-xs font-semibold text-stone-600 dark:text-stone-400 tracking-widest uppercase mb-2">
|
|
121
|
-
{eyebrow}
|
|
122
|
-
</p>
|
|
123
|
-
)}
|
|
124
|
-
{headline && (
|
|
125
|
-
<h3 className="text-2xl font-semibold text-stone-900 dark:text-stone-50 mb-3">
|
|
126
|
-
{headline}
|
|
127
|
-
</h3>
|
|
128
|
-
)}
|
|
129
|
-
{description && (
|
|
130
|
-
<p className="text-sm text-stone-600 dark:text-stone-400 leading-relaxed max-w-md">
|
|
131
|
-
{description}
|
|
132
|
-
</p>
|
|
133
|
-
)}
|
|
134
|
-
</div>
|
|
135
|
-
</SpotlightCard>
|
|
136
|
-
</div>
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export default DDCardTemplate01
|
|
1
|
+
'use client'
|
|
2
|
+
import React, { useRef, useState } from 'react'
|
|
3
|
+
import * as LucideIcons from 'lucide-react'
|
|
4
|
+
import { cn } from '@/utilities/ui'
|
|
5
|
+
export type DDCardTemplate01Props = Record<string, any>
|
|
6
|
+
|
|
7
|
+
// ─── SpotlightCard ────────────────────────────────────────────────────────────
|
|
8
|
+
interface SpotlightCardProps {
|
|
9
|
+
children: React.ReactNode
|
|
10
|
+
className?: string
|
|
11
|
+
spotlightColor?: string
|
|
12
|
+
enableTilt?: boolean
|
|
13
|
+
style?: React.CSSProperties
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function SpotlightCard({
|
|
17
|
+
children,
|
|
18
|
+
className,
|
|
19
|
+
spotlightColor = 'rgba(214,211,209,0.08)',
|
|
20
|
+
enableTilt = true,
|
|
21
|
+
style,
|
|
22
|
+
}: SpotlightCardProps) {
|
|
23
|
+
const cardRef = useRef<HTMLDivElement>(null)
|
|
24
|
+
const [pos, setPos] = useState<{ x: number; y: number } | null>(null)
|
|
25
|
+
const [tilt, setTilt] = useState({ rx: 0, ry: 0 })
|
|
26
|
+
|
|
27
|
+
const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
28
|
+
if (!cardRef.current) return
|
|
29
|
+
const rect = cardRef.current.getBoundingClientRect()
|
|
30
|
+
const x = e.clientX - rect.left
|
|
31
|
+
const y = e.clientY - rect.top
|
|
32
|
+
setPos({ x, y })
|
|
33
|
+
if (enableTilt) {
|
|
34
|
+
const rx = (y / rect.height - 0.5) * -10
|
|
35
|
+
const ry = (x / rect.width - 0.5) * 10
|
|
36
|
+
setTilt({ rx, ry })
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const handleMouseLeave = () => {
|
|
41
|
+
setPos(null)
|
|
42
|
+
setTilt({ rx: 0, ry: 0 })
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div
|
|
47
|
+
ref={cardRef}
|
|
48
|
+
className={cn('relative overflow-hidden', className)}
|
|
49
|
+
onMouseMove={handleMouseMove}
|
|
50
|
+
onMouseLeave={handleMouseLeave}
|
|
51
|
+
style={
|
|
52
|
+
enableTilt
|
|
53
|
+
? {
|
|
54
|
+
...style,
|
|
55
|
+
transform: `perspective(800px) rotateX(${tilt.rx}deg) rotateY(${tilt.ry}deg)`,
|
|
56
|
+
transition: 'transform 0.1s ease',
|
|
57
|
+
}
|
|
58
|
+
: style
|
|
59
|
+
}
|
|
60
|
+
>
|
|
61
|
+
{pos && (
|
|
62
|
+
<div
|
|
63
|
+
className="pointer-events-none absolute inset-0 z-0 transition-opacity duration-300"
|
|
64
|
+
style={{
|
|
65
|
+
background: `radial-gradient(400px circle at ${pos.x}px ${pos.y}px, ${spotlightColor}, transparent 60%)`,
|
|
66
|
+
}}
|
|
67
|
+
/>
|
|
68
|
+
)}
|
|
69
|
+
<div className="relative z-10">{children}</div>
|
|
70
|
+
</div>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ─── Dynamic Icon ─────────────────────────────────────────────────────────────
|
|
75
|
+
function DynamicIcon({
|
|
76
|
+
name,
|
|
77
|
+
...props
|
|
78
|
+
}: { name?: string | null } & Omit<LucideIcons.LucideProps, 'name'>) {
|
|
79
|
+
if (!name) return null
|
|
80
|
+
const Icon = (LucideIcons as unknown as Record<string, React.FC<LucideIcons.LucideProps>>)[name]
|
|
81
|
+
if (!Icon) return null
|
|
82
|
+
return <Icon {...props} />
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ─── Component ────────────────────────────────────────────────────────────────
|
|
86
|
+
export const DDCardTemplate01: React.FC<DDCardTemplate01Props> = ({
|
|
87
|
+
eyebrow,
|
|
88
|
+
headline,
|
|
89
|
+
description,
|
|
90
|
+
iconName = 'ShieldCheck',
|
|
91
|
+
glowColor = 'rgba(214,211,209,0.08)',
|
|
92
|
+
enableTilt = true,
|
|
93
|
+
minHeight = '220px',
|
|
94
|
+
className,
|
|
95
|
+
sectionId,
|
|
96
|
+
customCSS,
|
|
97
|
+
}) => {
|
|
98
|
+
return (
|
|
99
|
+
<div id={sectionId ?? undefined} className="spotlight-card overflow-clip py-8">
|
|
100
|
+
{customCSS && <style dangerouslySetInnerHTML={{ __html: customCSS }} />}
|
|
101
|
+
<SpotlightCard
|
|
102
|
+
spotlightColor={glowColor ?? undefined}
|
|
103
|
+
enableTilt={enableTilt ?? true}
|
|
104
|
+
className={cn(
|
|
105
|
+
'border border-stone-50 dark:border-stone-950 bg-stone-100 dark:bg-stone-900 hover:shadow-2xl transition-all hover:transition-all duration-900 hover:duration-900 flex flex-col justify-between p-6 max-w-[100rem] mx-auto',
|
|
106
|
+
className,
|
|
107
|
+
)}
|
|
108
|
+
style={{ minHeight: minHeight ?? '220px' }}
|
|
109
|
+
>
|
|
110
|
+
#BlockName-DDCardTemplate01
|
|
111
|
+
<div className="w-11 h-11 flex items-center justify-center rounded-xl border border-stone-300 text-stone-300 mb-6">
|
|
112
|
+
<DynamicIcon
|
|
113
|
+
className="text-stone-600 dark:text-stone-300"
|
|
114
|
+
name={iconName ?? 'ShieldCheck'}
|
|
115
|
+
size={20}
|
|
116
|
+
/>
|
|
117
|
+
</div>
|
|
118
|
+
<div>
|
|
119
|
+
{eyebrow && (
|
|
120
|
+
<p className="text-xs font-semibold text-stone-600 dark:text-stone-400 tracking-widest uppercase mb-2">
|
|
121
|
+
{eyebrow}
|
|
122
|
+
</p>
|
|
123
|
+
)}
|
|
124
|
+
{headline && (
|
|
125
|
+
<h3 className="text-2xl font-semibold text-stone-900 dark:text-stone-50 mb-3">
|
|
126
|
+
{headline}
|
|
127
|
+
</h3>
|
|
128
|
+
)}
|
|
129
|
+
{description && (
|
|
130
|
+
<p className="text-sm text-stone-600 dark:text-stone-400 leading-relaxed max-w-md">
|
|
131
|
+
{description}
|
|
132
|
+
</p>
|
|
133
|
+
)}
|
|
134
|
+
</div>
|
|
135
|
+
</SpotlightCard>
|
|
136
|
+
</div>
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export default DDCardTemplate01
|