@treely/strapi-slices 7.1.0 → 7.1.2
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 +4 -1
- package/dist/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.d.ts +1 -4
- package/dist/strapi-slices.cjs.development.js +41 -28
- package/dist/strapi-slices.cjs.development.js.map +1 -1
- package/dist/strapi-slices.cjs.production.min.js +1 -1
- package/dist/strapi-slices.cjs.production.min.js.map +1 -1
- package/dist/strapi-slices.esm.js +41 -28
- package/dist/strapi-slices.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.stories.tsx +20 -50
- package/src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.test.tsx +16 -22
- package/src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.tsx +49 -41
|
@@ -5376,35 +5376,39 @@ var CarouselInnerContainer = /*#__PURE__*/styled(motion.div)(_templateObject ||
|
|
|
5376
5376
|
});
|
|
5377
5377
|
var LogoGrid = /*#__PURE__*/styled(motion.div)(_templateObject2 || (_templateObject2 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--boemly-space-6);\n\n @media screen and (max-width: ", ") {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--boemly-space-6);\n }\n"])), BREAKPOINT_MD);
|
|
5378
5378
|
|
|
5379
|
-
|
|
5379
|
+
// Separate component containing the actual logic
|
|
5380
|
+
var CarouselMarqueeBannerContent = function CarouselMarqueeBannerContent(_ref) {
|
|
5380
5381
|
var slice = _ref.slice;
|
|
5382
|
+
var _useToken = useToken('colors', ['primary.50']),
|
|
5383
|
+
primary50 = _useToken[0];
|
|
5381
5384
|
var _useWindowSize = useWindowSize(),
|
|
5382
5385
|
windowWidth = _useWindowSize.width;
|
|
5383
|
-
var
|
|
5386
|
+
var hasEnoughLogosForLoop = slice.logos.length >= 5;
|
|
5384
5387
|
var LOOP_ARRAY_LENGTH = windowWidth > 2000 ? 5 : 4;
|
|
5385
5388
|
// Duplicate Logos to create a full loop
|
|
5386
|
-
var logosToRender =
|
|
5389
|
+
var logosToRender = hasEnoughLogosForLoop ? Array.from({
|
|
5387
5390
|
length: LOOP_ARRAY_LENGTH
|
|
5388
5391
|
}, function () {
|
|
5389
5392
|
return slice.logos;
|
|
5390
|
-
}).flat();
|
|
5393
|
+
}).flat() : slice.logos;
|
|
5391
5394
|
var _useMediaQuery = useMediaQuery(BREAKPOINT_MD_QUERY),
|
|
5392
5395
|
isMobile = _useMediaQuery[0];
|
|
5396
|
+
// Carousel setup
|
|
5393
5397
|
var _useEmblaCarousel = useEmblaCarousel({
|
|
5394
|
-
loop:
|
|
5398
|
+
loop: hasEnoughLogosForLoop,
|
|
5395
5399
|
align: 'start',
|
|
5396
5400
|
containScroll: 'trimSnaps',
|
|
5397
5401
|
dragFree: true
|
|
5398
|
-
},
|
|
5402
|
+
}, hasEnoughLogosForLoop ? [AutoScroll({
|
|
5399
5403
|
playOnInit: true,
|
|
5400
5404
|
speed: isMobile ? 0.5 : 1,
|
|
5401
5405
|
stopOnInteraction: false,
|
|
5402
5406
|
stopOnMouseEnter: false,
|
|
5403
5407
|
stopOnFocusIn: false
|
|
5404
|
-
})]),
|
|
5408
|
+
})] : []),
|
|
5405
5409
|
emblaRef = _useEmblaCarousel[0];
|
|
5406
5410
|
var renderLogos = function renderLogos() {
|
|
5407
|
-
if (
|
|
5411
|
+
if (!hasEnoughLogosForLoop) {
|
|
5408
5412
|
return React.createElement(LogoGrid, null, slice.logos.map(function (logo, index) {
|
|
5409
5413
|
return React.createElement(Box, {
|
|
5410
5414
|
key: logo.id + "-" + index,
|
|
@@ -5419,15 +5423,15 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5419
5423
|
}, React.createElement(Box, {
|
|
5420
5424
|
position: "relative",
|
|
5421
5425
|
maxHeight: "xl",
|
|
5422
|
-
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.
|
|
5426
|
+
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.data.attributes.width, logo.img.data.attributes.height) + ")",
|
|
5423
5427
|
width: isMobile ? '16' : '36',
|
|
5424
5428
|
borderRadius: "xl"
|
|
5425
5429
|
}, React.createElement(Image, {
|
|
5426
|
-
src: strapiMediaUrl(logo.img
|
|
5427
|
-
alt: logo.
|
|
5430
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5431
|
+
alt: logo.alt,
|
|
5428
5432
|
fill: true,
|
|
5429
5433
|
style: {
|
|
5430
|
-
objectFit: logo.
|
|
5434
|
+
objectFit: logo.objectFit || 'contain',
|
|
5431
5435
|
borderRadius: 'var(--boemly-radii-xl)'
|
|
5432
5436
|
}
|
|
5433
5437
|
}))));
|
|
@@ -5454,40 +5458,49 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5454
5458
|
}, React.createElement(Box, {
|
|
5455
5459
|
position: "relative",
|
|
5456
5460
|
maxHeight: "xl",
|
|
5457
|
-
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.
|
|
5461
|
+
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.data.attributes.width, logo.img.data.attributes.height) + ")",
|
|
5458
5462
|
width: isMobile ? '16' : '36',
|
|
5459
5463
|
borderRadius: "xl"
|
|
5460
5464
|
}, React.createElement(Image, {
|
|
5461
|
-
src: strapiMediaUrl(logo.img
|
|
5462
|
-
alt: logo.
|
|
5465
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5466
|
+
alt: logo.alt,
|
|
5463
5467
|
fill: true,
|
|
5464
5468
|
style: {
|
|
5465
|
-
objectFit: logo.
|
|
5469
|
+
objectFit: logo.objectFit || 'contain',
|
|
5466
5470
|
borderRadius: 'var(--boemly-radii-xl)'
|
|
5467
5471
|
}
|
|
5468
5472
|
}))));
|
|
5469
5473
|
})));
|
|
5470
5474
|
};
|
|
5471
|
-
return React.createElement(DefaultSectionContainer,
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
display: "flex",
|
|
5475
|
-
flexDirection: "column",
|
|
5476
|
-
justifyContent: "center",
|
|
5477
|
-
alignItems: "center",
|
|
5478
|
-
height: "2xs",
|
|
5479
|
-
backgroundColor: "gray.50",
|
|
5480
|
-
padding: "42px 0 56px"
|
|
5481
|
-
}, slice.title ? React.createElement(React.Fragment, null, React.createElement(Flex, {
|
|
5475
|
+
return React.createElement(DefaultSectionContainer, {
|
|
5476
|
+
backgroundColor: primary50
|
|
5477
|
+
}, React.createElement(React.Fragment, null, slice.title ? React.createElement(React.Fragment, null, React.createElement(Flex, {
|
|
5482
5478
|
alignItems: "center",
|
|
5483
5479
|
flexDirection: "column"
|
|
5484
5480
|
}, React.createElement(Heading, {
|
|
5485
5481
|
size: "md",
|
|
5486
5482
|
fontWeight: "500"
|
|
5487
5483
|
}, slice.title)), React.createElement(Spacer, {
|
|
5488
|
-
height: "12"
|
|
5484
|
+
height: "12",
|
|
5485
|
+
minHeight: "12"
|
|
5489
5486
|
})) : null, renderLogos()));
|
|
5490
5487
|
};
|
|
5488
|
+
// Lazy-rendering the child component after client-side hydration
|
|
5489
|
+
var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref2) {
|
|
5490
|
+
var slice = _ref2.slice;
|
|
5491
|
+
var _useState = useState(false),
|
|
5492
|
+
showChild = _useState[0],
|
|
5493
|
+
setShowChild = _useState[1];
|
|
5494
|
+
useEffect(function () {
|
|
5495
|
+
setShowChild(true); // Hydrate the component after the client-side is ready
|
|
5496
|
+
}, []);
|
|
5497
|
+
if (!showChild) {
|
|
5498
|
+
return React.createElement("div", null);
|
|
5499
|
+
}
|
|
5500
|
+
return React.createElement(CarouselMarqueeBannerContent, {
|
|
5501
|
+
slice: slice
|
|
5502
|
+
});
|
|
5503
|
+
};
|
|
5491
5504
|
|
|
5492
5505
|
var Timeline = function Timeline(_ref) {
|
|
5493
5506
|
var slice = _ref.slice;
|