blocks-dusted 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/package.json +1 -1
- 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 +10 -11
- 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 +5 -6
- 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 +434 -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 +40 -17
- package/templates/blocks/DD-Hero/config.ts +267 -267
- package/templates/blocks/DD-HorizontalScroll/Component.tsx +4 -2
- 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 +129 -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 +547 -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 +372 -372
- package/templates/blocks/DD-Process/Component.tsx +149 -149
- package/templates/blocks/DD-Process/config.ts +150 -150
- package/templates/blocks/DD-Progress/Component.tsx +141 -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 +237 -237
- package/templates/blocks/DD-StackCards/Component.tsx +473 -473
- 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 +168 -162
- 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 +147 -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 +500 -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 +93 -0
- package/templates/blocks/DDHG-LogoMarquee/config.ts +66 -0
- package/templates/blocks/DDHG-LogoMarquee/manifest.json +39 -0
- package/templates/blocks/DDHG-NavCodeGrid/Component.tsx +213 -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 +575 -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 +394 -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 +131 -0
- package/templates/blocks/DDHG-TeamCards/config.ts +48 -0
- package/templates/blocks/DDHG-TeamCards/manifest.json +29 -0
- package/templates/components/HeaderDD02/MobileBottomNav/index.tsx +352 -257
- package/templates/components/HeaderDD02/index.tsx +313 -229
- 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,123 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useRef } from 'react'
|
|
4
|
+
import Image from 'next/image'
|
|
5
|
+
import 'swiper/css'
|
|
6
|
+
|
|
7
|
+
export interface ProjectSliderImage {
|
|
8
|
+
id?: string
|
|
9
|
+
image: string | { url: string; alt?: string }
|
|
10
|
+
alt?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ProjectSliderBlockProps {
|
|
14
|
+
images?: ProjectSliderImage[]
|
|
15
|
+
slidesPerView?: number
|
|
16
|
+
spaceBetween?: number
|
|
17
|
+
loop?: boolean
|
|
18
|
+
centeredSlides?: boolean
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const fallbackImages: ProjectSliderImage[] = [
|
|
22
|
+
{
|
|
23
|
+
id: '1',
|
|
24
|
+
image:
|
|
25
|
+
'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="1920" height="1080"%3E%3Crect width="1920" height="1080" fill="%23201d2c"/%3E%3Ctext x="50%25" y="50%25" dominant-baseline="middle" text-anchor="middle" font-family="sans-serif" font-size="64" fill="%23a3e635"%3EProject slide%3C/text%3E%3C/svg%3E',
|
|
26
|
+
alt: 'Project slide'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: '2',
|
|
30
|
+
image:
|
|
31
|
+
'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="1920" height="1080"%3E%3Crect width="1920" height="1080" fill="%23120f1b"/%3E%3Ctext x="50%25" y="50%25" dominant-baseline="middle" text-anchor="middle" font-family="sans-serif" font-size="64" fill="%23c084fc"%3ECase study%3C/text%3E%3C/svg%3E',
|
|
32
|
+
alt: 'Case study slide'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: '3',
|
|
36
|
+
image:
|
|
37
|
+
'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="1920" height="1080"%3E%3Crect width="1920" height="1080" fill="%230b0b0d"/%3E%3Ctext x="50%25" y="50%25" dominant-baseline="middle" text-anchor="middle" font-family="sans-serif" font-size="64" fill="%23f8fafc"%3EGallery frame%3C/text%3E%3C/svg%3E',
|
|
38
|
+
alt: 'Gallery frame slide'
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
function getImageSrc(image: ProjectSliderImage['image']) {
|
|
43
|
+
return typeof image === 'string' ? image : image.url
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function getImageAlt(image: ProjectSliderImage) {
|
|
47
|
+
return image.alt || (typeof image.image === 'string' ? 'Project image' : image.image.alt) || 'Project image'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const DDProjSlider: React.FC<ProjectSliderBlockProps> = ({
|
|
51
|
+
images = fallbackImages,
|
|
52
|
+
slidesPerView = 2,
|
|
53
|
+
spaceBetween = 30,
|
|
54
|
+
loop = true,
|
|
55
|
+
centeredSlides = true
|
|
56
|
+
}) => {
|
|
57
|
+
const swiperRef = useRef<HTMLDivElement | null>(null)
|
|
58
|
+
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
let destroyed = false
|
|
61
|
+
let instance: { destroy: (deleteInstance?: boolean, cleanStyles?: boolean) => void } | null = null
|
|
62
|
+
|
|
63
|
+
const init = async () => {
|
|
64
|
+
if (!swiperRef.current) return
|
|
65
|
+
|
|
66
|
+
const { Swiper } = await import('swiper')
|
|
67
|
+
if (!swiperRef.current || destroyed) return
|
|
68
|
+
|
|
69
|
+
instance = new Swiper(swiperRef.current, {
|
|
70
|
+
slidesPerView,
|
|
71
|
+
spaceBetween,
|
|
72
|
+
loop,
|
|
73
|
+
centeredSlides,
|
|
74
|
+
watchOverflow: true,
|
|
75
|
+
breakpoints: {
|
|
76
|
+
0: {
|
|
77
|
+
slidesPerView: 1,
|
|
78
|
+
spaceBetween: 16,
|
|
79
|
+
centeredSlides: false
|
|
80
|
+
},
|
|
81
|
+
768: {
|
|
82
|
+
slidesPerView,
|
|
83
|
+
spaceBetween,
|
|
84
|
+
centeredSlides
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
init()
|
|
91
|
+
|
|
92
|
+
return () => {
|
|
93
|
+
destroyed = true
|
|
94
|
+
instance?.destroy(true, true)
|
|
95
|
+
}
|
|
96
|
+
}, [slidesPerView, spaceBetween, loop, centeredSlides, images.length])
|
|
97
|
+
|
|
98
|
+
if (!images.length) return null
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
<section className="project-slider-block w-full overflow-hidden py-10">
|
|
102
|
+
<div ref={swiperRef} className="swiper w-full overflow-visible">
|
|
103
|
+
<div className="swiper-wrapper items-center">
|
|
104
|
+
{images.map((image, index) => (
|
|
105
|
+
<div key={image.id || 'slide-' + index} className="swiper-slide !h-auto">
|
|
106
|
+
<div className="relative aspect-[16/9] w-full overflow-hidden rounded-[2rem] border border-white/10 bg-stone-950 shadow-2xl [corner-shape:squircle]">
|
|
107
|
+
<Image
|
|
108
|
+
src={getImageSrc(image.image)}
|
|
109
|
+
alt={getImageAlt(image)}
|
|
110
|
+
width={1920}
|
|
111
|
+
height={1080}
|
|
112
|
+
className="h-full w-full object-cover object-center"
|
|
113
|
+
sizes="(max-width: 768px) 92vw, 48vw"
|
|
114
|
+
/>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
))}
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</section>
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# DD-ProjSlider
|
|
2
|
+
|
|
3
|
+
Portable first-pass conversion of `ProjectSliderBlock` 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,64 @@
|
|
|
1
|
+
import { Block } from 'payload'
|
|
2
|
+
|
|
3
|
+
export const DDProjSlider: Block = {
|
|
4
|
+
slug: 'DD-ProjSlider',
|
|
5
|
+
interfaceName: 'DDProjSlider',
|
|
6
|
+
labels: {
|
|
7
|
+
singular: 'Project Slider Block',
|
|
8
|
+
plural: 'Project Slider Blocks'
|
|
9
|
+
},
|
|
10
|
+
fields: [
|
|
11
|
+
{
|
|
12
|
+
name: 'images',
|
|
13
|
+
type: 'array',
|
|
14
|
+
label: 'Images',
|
|
15
|
+
minRows: 1,
|
|
16
|
+
fields: [
|
|
17
|
+
{
|
|
18
|
+
name: 'imageId',
|
|
19
|
+
type: 'text',
|
|
20
|
+
label: 'Image ID',
|
|
21
|
+
required: true
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'image',
|
|
25
|
+
type: 'upload',
|
|
26
|
+
relationTo: 'media',
|
|
27
|
+
label: 'Image',
|
|
28
|
+
required: true
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'alt',
|
|
32
|
+
type: 'text',
|
|
33
|
+
label: 'Alt Text'
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'slidesPerView',
|
|
39
|
+
type: 'number',
|
|
40
|
+
label: 'Slides Per View',
|
|
41
|
+
defaultValue: 2
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'spaceBetween',
|
|
45
|
+
type: 'number',
|
|
46
|
+
label: 'Space Between Slides',
|
|
47
|
+
defaultValue: 30
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'loop',
|
|
51
|
+
type: 'checkbox',
|
|
52
|
+
label: 'Enable Loop',
|
|
53
|
+
defaultValue: true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'centeredSlides',
|
|
57
|
+
type: 'checkbox',
|
|
58
|
+
label: 'Center Slides',
|
|
59
|
+
defaultValue: true
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export default DDProjSlider
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "block",
|
|
3
|
+
"name": "DD-ProjSlider",
|
|
4
|
+
"label": "Project Slider",
|
|
5
|
+
"sourceName": "ProjectSliderBlock",
|
|
6
|
+
"portableName": "DD-ProjSlider",
|
|
7
|
+
"slug": "DD-ProjSlider",
|
|
8
|
+
"version": "0.0.1",
|
|
9
|
+
"source": {
|
|
10
|
+
"repo": "Hadizainal/DesignsDustedv3",
|
|
11
|
+
"originalPath": "src/blocks/ROUND-TWO-CONVERSION/ProjectSliderBlock",
|
|
12
|
+
"originalSlug": "projectSlider",
|
|
13
|
+
"originalConfigExport": "ProjectSliderBlock",
|
|
14
|
+
"originalComponentExport": "ProjectSliderBlock",
|
|
15
|
+
"originalInterfaceName": "DDProjSlider"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
{
|
|
19
|
+
"from": "Component.tsx",
|
|
20
|
+
"to": "src/blocks/DD-ProjSlider/Component.tsx"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"from": "config.ts",
|
|
24
|
+
"to": "src/blocks/DD-ProjSlider/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 DDProjSlider in Pages/Posts blocks arrays if automatic registration was skipped.",
|
|
50
|
+
"Register DD-ProjSlider in RenderBlocks if automatic registration was skipped.",
|
|
51
|
+
"Run payload generate:types after schema changes."
|
|
52
|
+
],
|
|
53
|
+
"manualSteps": [
|
|
54
|
+
"Register DDProjSlider in Pages/Posts blocks arrays if automatic registration was skipped.",
|
|
55
|
+
"Register DD-ProjSlider 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 { DDProjSlider } from '@/blocks/DD-ProjSlider/config' and add DDProjSlider to clear Pages/Posts block arrays."
|
|
61
|
+
},
|
|
62
|
+
"renderBlocksRegistration": {
|
|
63
|
+
"description": "Installer can register DD-ProjSlider 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": "DDProjSlider",
|
|
71
|
+
"interfaceName": "DDProjSlider"
|
|
72
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
4
|
+
import {
|
|
5
|
+
motion,
|
|
6
|
+
useAnimationFrame,
|
|
7
|
+
useMotionValue,
|
|
8
|
+
useScroll,
|
|
9
|
+
useSpring,
|
|
10
|
+
useTransform,
|
|
11
|
+
useVelocity
|
|
12
|
+
} from 'framer-motion'
|
|
13
|
+
|
|
14
|
+
import { cn } from '@/utilities/ui'
|
|
15
|
+
|
|
16
|
+
interface TextScrollProps {
|
|
17
|
+
text: string
|
|
18
|
+
default_velocity?: number
|
|
19
|
+
className?: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface ParallaxProps {
|
|
23
|
+
children: string
|
|
24
|
+
baseVelocity: number
|
|
25
|
+
className?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const wrap = (min: number, max: number, v: number) => {
|
|
29
|
+
const rangeSize = max - min
|
|
30
|
+
return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const DDScrollText: React.FC<TextScrollProps> = ({
|
|
34
|
+
text,
|
|
35
|
+
default_velocity = 5,
|
|
36
|
+
className
|
|
37
|
+
}) => {
|
|
38
|
+
const ParallaxText: React.FC<ParallaxProps> = ({ children, baseVelocity = 100, className }) => {
|
|
39
|
+
const baseX = useMotionValue(0)
|
|
40
|
+
const { scrollY } = useScroll()
|
|
41
|
+
const scrollVelocity = useVelocity(scrollY)
|
|
42
|
+
const smoothVelocity = useSpring(scrollVelocity, {
|
|
43
|
+
damping: 50,
|
|
44
|
+
stiffness: 400
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
const velocityFactor = useTransform(smoothVelocity, [0, 1000], [0, 5], {
|
|
48
|
+
clamp: false
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
const [repetitions, setRepetitions] = useState(1)
|
|
52
|
+
const containerRef = useRef<HTMLDivElement>(null)
|
|
53
|
+
const textRef = useRef<HTMLSpanElement>(null)
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
const calculateRepetitions = () => {
|
|
57
|
+
if (containerRef.current && textRef.current) {
|
|
58
|
+
const containerWidth = containerRef.current.offsetWidth
|
|
59
|
+
const textWidth = textRef.current.offsetWidth
|
|
60
|
+
const newRepetitions = Math.ceil(containerWidth / textWidth) + 2
|
|
61
|
+
setRepetitions(newRepetitions)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
calculateRepetitions()
|
|
66
|
+
|
|
67
|
+
window.addEventListener('resize', calculateRepetitions)
|
|
68
|
+
return () => window.removeEventListener('resize', calculateRepetitions)
|
|
69
|
+
}, [children])
|
|
70
|
+
|
|
71
|
+
const x = useTransform(baseX, (v) => `${wrap(-100 / repetitions, 0, v)}%`)
|
|
72
|
+
|
|
73
|
+
const directionFactor = useRef<number>(1)
|
|
74
|
+
useAnimationFrame((t, delta) => {
|
|
75
|
+
let moveBy = directionFactor.current * baseVelocity * (delta / 1000)
|
|
76
|
+
|
|
77
|
+
if (velocityFactor.get() < 0) {
|
|
78
|
+
directionFactor.current = -1
|
|
79
|
+
} else if (velocityFactor.get() > 0) {
|
|
80
|
+
directionFactor.current = 1
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
moveBy += directionFactor.current * moveBy * velocityFactor.get()
|
|
84
|
+
|
|
85
|
+
baseX.set(baseX.get() + moveBy)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<div className="w-full overflow-hidden whitespace-nowrap" ref={containerRef}>
|
|
90
|
+
<motion.div className={cn('inline-block', className)} style={{ x }}>
|
|
91
|
+
{Array.from({ length: repetitions }).map((_, i) => (
|
|
92
|
+
<span key={i} ref={i === 0 ? textRef : null}>
|
|
93
|
+
{children}{' '}
|
|
94
|
+
</span>
|
|
95
|
+
))}
|
|
96
|
+
</motion.div>
|
|
97
|
+
</div>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<section className="parallel-text-section relative w-full">
|
|
103
|
+
<ParallaxText baseVelocity={default_velocity} className={cn('parallel-text-top', className)}>
|
|
104
|
+
{text}
|
|
105
|
+
</ParallaxText>
|
|
106
|
+
<ParallaxText
|
|
107
|
+
baseVelocity={-default_velocity}
|
|
108
|
+
className={cn('parallel-text-bottom', className)}
|
|
109
|
+
>
|
|
110
|
+
{text}
|
|
111
|
+
</ParallaxText>
|
|
112
|
+
</section>
|
|
113
|
+
)
|
|
114
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Block } from 'payload'
|
|
2
|
+
|
|
3
|
+
export const DDScrollText: Block = {
|
|
4
|
+
slug: 'DD-ScrollText',
|
|
5
|
+
interfaceName: 'DDScrollText',
|
|
6
|
+
labels: {
|
|
7
|
+
singular: 'Scroll Text Block',
|
|
8
|
+
plural: 'Scroll Text Blocks',
|
|
9
|
+
},
|
|
10
|
+
fields: [
|
|
11
|
+
{
|
|
12
|
+
admin: {
|
|
13
|
+
initCollapsed: true,
|
|
14
|
+
className: 'custom-css-class',
|
|
15
|
+
},
|
|
16
|
+
type: 'collapsible',
|
|
17
|
+
label: 'Custom Settings',
|
|
18
|
+
fields: [
|
|
19
|
+
{
|
|
20
|
+
type: 'row',
|
|
21
|
+
fields: [
|
|
22
|
+
{
|
|
23
|
+
name: 'default_velocity',
|
|
24
|
+
type: 'number',
|
|
25
|
+
label: 'Default Scroll Speed',
|
|
26
|
+
required: false,
|
|
27
|
+
defaultValue: 5,
|
|
28
|
+
admin: {
|
|
29
|
+
width: '50%',
|
|
30
|
+
description:
|
|
31
|
+
'Set the default scroll speed (positive value). Negative handled automatically.',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'className',
|
|
36
|
+
type: 'text',
|
|
37
|
+
label: 'Custom Class Name',
|
|
38
|
+
required: false,
|
|
39
|
+
admin: {
|
|
40
|
+
width: '50%',
|
|
41
|
+
description: 'Additional Tailwind or custom classes for the scrolling text.',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'text',
|
|
50
|
+
type: 'text',
|
|
51
|
+
label: 'Text to Scroll',
|
|
52
|
+
required: true,
|
|
53
|
+
admin: {
|
|
54
|
+
description: 'Enter the text that will scroll across the screen.',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "block",
|
|
3
|
+
"name": "DD-ScrollText",
|
|
4
|
+
"label": "Scroll Text",
|
|
5
|
+
"sourceName": "ScrollTextBlock",
|
|
6
|
+
"portableName": "DD-ScrollText",
|
|
7
|
+
"slug": "DD-ScrollText",
|
|
8
|
+
"version": "0.0.1",
|
|
9
|
+
"source": {
|
|
10
|
+
"repo": "Hadizainal/DesignsDustedv3",
|
|
11
|
+
"originalPath": "src/blocks/ROUND-TWO-CONVERSION/ScrollTextBlock",
|
|
12
|
+
"originalSlug": "scrollTextBlock",
|
|
13
|
+
"originalConfigExport": "ScrollTextBlock",
|
|
14
|
+
"originalComponentExport": "ScrollTextBlock",
|
|
15
|
+
"originalInterfaceName": "DDScrollText"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
{
|
|
19
|
+
"from": "Component.tsx",
|
|
20
|
+
"to": "src/blocks/DD-ScrollText/Component.tsx"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"from": "config.ts",
|
|
24
|
+
"to": "src/blocks/DD-ScrollText/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 DDScrollText in Pages/Posts blocks arrays if automatic registration was skipped.",
|
|
50
|
+
"Register DD-ScrollText in RenderBlocks if automatic registration was skipped.",
|
|
51
|
+
"Run payload generate:types after schema changes."
|
|
52
|
+
],
|
|
53
|
+
"manualSteps": [
|
|
54
|
+
"Register DDScrollText in Pages/Posts blocks arrays if automatic registration was skipped.",
|
|
55
|
+
"Register DD-ScrollText 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 { DDScrollText } from '@/blocks/DD-ScrollText/config' and add DDScrollText to clear Pages/Posts block arrays."
|
|
61
|
+
},
|
|
62
|
+
"renderBlocksRegistration": {
|
|
63
|
+
"description": "Installer can register DD-ScrollText 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": "DDScrollText",
|
|
71
|
+
"interfaceName": "DDScrollText"
|
|
72
|
+
}
|