@treely/strapi-slices 7.1.1 → 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 +34 -16
- 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 +34 -16
- 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 +43 -27
package/README.md
CHANGED
|
@@ -39,9 +39,12 @@ npm run build
|
|
|
39
39
|
npm pack
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
Go to the project which uses the strapi-slices package and
|
|
42
|
+
Go to the project which uses the strapi-slices package and remove the `node_modules` and the `.next` folder before installing the package there:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
+
rm -r node_modules
|
|
46
|
+
rm -r .next
|
|
47
|
+
npm install
|
|
45
48
|
cd ../path/to/your/project
|
|
46
49
|
npm install ../path/to/strapi-slices-package.tgz
|
|
47
50
|
```
|
|
@@ -3,10 +3,7 @@ import StrapiImage from '../../models/strapi/StrapiImage';
|
|
|
3
3
|
export interface CarouselMarqueeBannerProps {
|
|
4
4
|
slice: {
|
|
5
5
|
title?: string;
|
|
6
|
-
logos:
|
|
7
|
-
id: number;
|
|
8
|
-
img: StrapiImage;
|
|
9
|
-
}[];
|
|
6
|
+
logos: StrapiImage[];
|
|
10
7
|
};
|
|
11
8
|
}
|
|
12
9
|
export declare const CarouselMarqueeBanner: React.FC<CarouselMarqueeBannerProps>;
|
|
@@ -5393,37 +5393,39 @@ var CarouselInnerContainer = /*#__PURE__*/styled__default.default(framerMotion.m
|
|
|
5393
5393
|
});
|
|
5394
5394
|
var LogoGrid = /*#__PURE__*/styled__default.default(framerMotion.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);
|
|
5395
5395
|
|
|
5396
|
-
|
|
5396
|
+
// Separate component containing the actual logic
|
|
5397
|
+
var CarouselMarqueeBannerContent = function CarouselMarqueeBannerContent(_ref) {
|
|
5397
5398
|
var slice = _ref.slice;
|
|
5398
5399
|
var _useToken = boemly.useToken('colors', ['primary.50']),
|
|
5399
5400
|
primary50 = _useToken[0];
|
|
5400
5401
|
var _useWindowSize = reactUse.useWindowSize(),
|
|
5401
5402
|
windowWidth = _useWindowSize.width;
|
|
5402
|
-
var
|
|
5403
|
+
var hasEnoughLogosForLoop = slice.logos.length >= 5;
|
|
5403
5404
|
var LOOP_ARRAY_LENGTH = windowWidth > 2000 ? 5 : 4;
|
|
5404
5405
|
// Duplicate Logos to create a full loop
|
|
5405
|
-
var logosToRender =
|
|
5406
|
+
var logosToRender = hasEnoughLogosForLoop ? Array.from({
|
|
5406
5407
|
length: LOOP_ARRAY_LENGTH
|
|
5407
5408
|
}, function () {
|
|
5408
5409
|
return slice.logos;
|
|
5409
|
-
}).flat();
|
|
5410
|
+
}).flat() : slice.logos;
|
|
5410
5411
|
var _useMediaQuery = boemly.useMediaQuery(BREAKPOINT_MD_QUERY),
|
|
5411
5412
|
isMobile = _useMediaQuery[0];
|
|
5413
|
+
// Carousel setup
|
|
5412
5414
|
var _useEmblaCarousel = useEmblaCarousel__default.default({
|
|
5413
|
-
loop:
|
|
5415
|
+
loop: hasEnoughLogosForLoop,
|
|
5414
5416
|
align: 'start',
|
|
5415
5417
|
containScroll: 'trimSnaps',
|
|
5416
5418
|
dragFree: true
|
|
5417
|
-
},
|
|
5419
|
+
}, hasEnoughLogosForLoop ? [AutoScroll__default.default({
|
|
5418
5420
|
playOnInit: true,
|
|
5419
5421
|
speed: isMobile ? 0.5 : 1,
|
|
5420
5422
|
stopOnInteraction: false,
|
|
5421
5423
|
stopOnMouseEnter: false,
|
|
5422
5424
|
stopOnFocusIn: false
|
|
5423
|
-
})]),
|
|
5425
|
+
})] : []),
|
|
5424
5426
|
emblaRef = _useEmblaCarousel[0];
|
|
5425
5427
|
var renderLogos = function renderLogos() {
|
|
5426
|
-
if (
|
|
5428
|
+
if (!hasEnoughLogosForLoop) {
|
|
5427
5429
|
return React__default.default.createElement(LogoGrid, null, slice.logos.map(function (logo, index) {
|
|
5428
5430
|
return React__default.default.createElement(boemly.Box, {
|
|
5429
5431
|
key: logo.id + "-" + index,
|
|
@@ -5438,15 +5440,15 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5438
5440
|
}, React__default.default.createElement(boemly.Box, {
|
|
5439
5441
|
position: "relative",
|
|
5440
5442
|
maxHeight: "xl",
|
|
5441
|
-
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.
|
|
5443
|
+
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.data.attributes.width, logo.img.data.attributes.height) + ")",
|
|
5442
5444
|
width: isMobile ? '16' : '36',
|
|
5443
5445
|
borderRadius: "xl"
|
|
5444
5446
|
}, React__default.default.createElement(Image__default.default, {
|
|
5445
|
-
src: strapiMediaUrl(logo.img
|
|
5446
|
-
alt: logo.
|
|
5447
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5448
|
+
alt: logo.alt,
|
|
5447
5449
|
fill: true,
|
|
5448
5450
|
style: {
|
|
5449
|
-
objectFit: logo.
|
|
5451
|
+
objectFit: logo.objectFit || 'contain',
|
|
5450
5452
|
borderRadius: 'var(--boemly-radii-xl)'
|
|
5451
5453
|
}
|
|
5452
5454
|
}))));
|
|
@@ -5473,15 +5475,15 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5473
5475
|
}, React__default.default.createElement(boemly.Box, {
|
|
5474
5476
|
position: "relative",
|
|
5475
5477
|
maxHeight: "xl",
|
|
5476
|
-
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.
|
|
5478
|
+
height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.data.attributes.width, logo.img.data.attributes.height) + ")",
|
|
5477
5479
|
width: isMobile ? '16' : '36',
|
|
5478
5480
|
borderRadius: "xl"
|
|
5479
5481
|
}, React__default.default.createElement(Image__default.default, {
|
|
5480
|
-
src: strapiMediaUrl(logo.img
|
|
5481
|
-
alt: logo.
|
|
5482
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5483
|
+
alt: logo.alt,
|
|
5482
5484
|
fill: true,
|
|
5483
5485
|
style: {
|
|
5484
|
-
objectFit: logo.
|
|
5486
|
+
objectFit: logo.objectFit || 'contain',
|
|
5485
5487
|
borderRadius: 'var(--boemly-radii-xl)'
|
|
5486
5488
|
}
|
|
5487
5489
|
}))));
|
|
@@ -5500,6 +5502,22 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5500
5502
|
minHeight: "12"
|
|
5501
5503
|
})) : null, renderLogos()));
|
|
5502
5504
|
};
|
|
5505
|
+
// Lazy-rendering the child component after client-side hydration
|
|
5506
|
+
var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref2) {
|
|
5507
|
+
var slice = _ref2.slice;
|
|
5508
|
+
var _useState = React.useState(false),
|
|
5509
|
+
showChild = _useState[0],
|
|
5510
|
+
setShowChild = _useState[1];
|
|
5511
|
+
React.useEffect(function () {
|
|
5512
|
+
setShowChild(true); // Hydrate the component after the client-side is ready
|
|
5513
|
+
}, []);
|
|
5514
|
+
if (!showChild) {
|
|
5515
|
+
return React__default.default.createElement("div", null);
|
|
5516
|
+
}
|
|
5517
|
+
return React__default.default.createElement(CarouselMarqueeBannerContent, {
|
|
5518
|
+
slice: slice
|
|
5519
|
+
});
|
|
5520
|
+
};
|
|
5503
5521
|
|
|
5504
5522
|
var Timeline = function Timeline(_ref) {
|
|
5505
5523
|
var slice = _ref.slice;
|