@treely/strapi-slices 7.1.1 → 7.1.3
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 -29
- 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 -29
- package/dist/strapi-slices.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.stories.tsx +20 -50
- package/src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.test.tsx +16 -22
- package/src/slices/CarouselMarqueeBanner/CarouselMarqueeBanner.tsx +51 -48
- package/src/slices/CarouselMarqueeBanner/styles.ts +4 -2
- package/src/utils/getClosestRatio.ts +1 -1
package/README.md
CHANGED
|
@@ -39,10 +39,13 @@ 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
45
|
cd ../path/to/your/project
|
|
46
|
+
rm -r node_modules
|
|
47
|
+
rm -r .next
|
|
48
|
+
npm install
|
|
46
49
|
npm install ../path/to/strapi-slices-package.tgz
|
|
47
50
|
```
|
|
48
51
|
|
|
@@ -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>;
|
|
@@ -3541,7 +3541,7 @@ var ImageContainer = /*#__PURE__*/styled__default.default(boemly.Box)(_templateO
|
|
|
3541
3541
|
return aspectRatio;
|
|
3542
3542
|
});
|
|
3543
3543
|
|
|
3544
|
-
var ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2];
|
|
3544
|
+
var ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2, 2 / 1, 3 / 1, 4 / 1, 5 / 1]; // width / height
|
|
3545
3545
|
var getClosestRatio = function getClosestRatio(width, height) {
|
|
3546
3546
|
var ratio = width / height;
|
|
3547
3547
|
var minDiff = Math.abs(ratio - ALLOWED_RATIOS[0]);
|
|
@@ -5384,50 +5384,51 @@ var Comparison = function Comparison(_ref) {
|
|
|
5384
5384
|
};
|
|
5385
5385
|
|
|
5386
5386
|
var _templateObject, _templateObject2;
|
|
5387
|
-
var CarouselInnerContainer = /*#__PURE__*/styled__default.default(framerMotion.motion.div)(_templateObject || (_templateObject = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n justify-content: ", ";\n gap: var(--boemly-space-
|
|
5387
|
+
var CarouselInnerContainer = /*#__PURE__*/styled__default.default(framerMotion.motion.div)(_templateObject || (_templateObject = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n justify-content: ", ";\n gap: var(--boemly-space-24);\n padding-right: var(--boemly-space-24);\n padding-left: var(--boemly-space-24);\n\n @media screen and (max-width: ", ") {\n width: calc(\n ", " *\n (var(--boemly-sizes-16) + var(--boemly-space-6))\n );\n justify-content: ", ";\n }\n"])), function (props) {
|
|
5388
5388
|
return props.logoCount < 5 ? 'center' : 'flex-start';
|
|
5389
5389
|
}, BREAKPOINT_MD, function (props) {
|
|
5390
5390
|
return props.logoCount;
|
|
5391
5391
|
}, function (props) {
|
|
5392
5392
|
return props.logoCount < 5 ? 'center' : 'flex-start';
|
|
5393
5393
|
});
|
|
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-
|
|
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-24);\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,
|
|
5430
|
-
width: isMobile ? '16' : '36',
|
|
5431
5432
|
flexShrink: 0,
|
|
5432
5433
|
transform: "translate3d(0, 0, 0)"
|
|
5433
5434
|
}, React__default.default.createElement(boemly.Flex, {
|
|
@@ -5437,17 +5438,15 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5437
5438
|
alignItems: "center"
|
|
5438
5439
|
}, React__default.default.createElement(boemly.Box, {
|
|
5439
5440
|
position: "relative",
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
width: isMobile ? '16' : '36',
|
|
5443
|
-
borderRadius: "xl"
|
|
5441
|
+
height: isMobile ? '16' : '36',
|
|
5442
|
+
width: "calc(var(--boemly-sizes-10)\n * " + getClosestRatio(logo.img.data.attributes.width, logo.img.data.attributes.height) + ")"
|
|
5444
5443
|
}, React__default.default.createElement(Image__default.default, {
|
|
5445
|
-
src: strapiMediaUrl(logo.img
|
|
5446
|
-
alt: logo.
|
|
5444
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5445
|
+
alt: logo.alt,
|
|
5447
5446
|
fill: true,
|
|
5448
5447
|
style: {
|
|
5449
|
-
objectFit: logo.
|
|
5450
|
-
|
|
5448
|
+
objectFit: logo.objectFit || 'contain',
|
|
5449
|
+
filter: 'grayscale(100%)'
|
|
5451
5450
|
}
|
|
5452
5451
|
}))));
|
|
5453
5452
|
}));
|
|
@@ -5462,7 +5461,6 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5462
5461
|
}, logosToRender.map(function (logo, index) {
|
|
5463
5462
|
return React__default.default.createElement(boemly.Box, {
|
|
5464
5463
|
key: logo.id + "-" + index,
|
|
5465
|
-
width: isMobile ? '16' : '36',
|
|
5466
5464
|
flexShrink: 0,
|
|
5467
5465
|
transform: "translate3d(0, 0, 0)"
|
|
5468
5466
|
}, React__default.default.createElement(boemly.Flex, {
|
|
@@ -5472,17 +5470,15 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5472
5470
|
alignItems: "center"
|
|
5473
5471
|
}, React__default.default.createElement(boemly.Box, {
|
|
5474
5472
|
position: "relative",
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
width: isMobile ? '16' : '36',
|
|
5478
|
-
borderRadius: "xl"
|
|
5473
|
+
height: isMobile ? '16' : '36',
|
|
5474
|
+
width: "calc(var(--boemly-sizes-10) * " + getClosestRatio(logo.img.data.attributes.width, logo.img.data.attributes.height) + ")"
|
|
5479
5475
|
}, React__default.default.createElement(Image__default.default, {
|
|
5480
|
-
src: strapiMediaUrl(logo.img
|
|
5481
|
-
alt: logo.
|
|
5476
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5477
|
+
alt: logo.alt,
|
|
5482
5478
|
fill: true,
|
|
5483
5479
|
style: {
|
|
5484
|
-
objectFit: logo.
|
|
5485
|
-
|
|
5480
|
+
objectFit: logo.objectFit || 'contain',
|
|
5481
|
+
filter: 'grayscale(100%)'
|
|
5486
5482
|
}
|
|
5487
5483
|
}))));
|
|
5488
5484
|
})));
|
|
@@ -5500,6 +5496,22 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5500
5496
|
minHeight: "12"
|
|
5501
5497
|
})) : null, renderLogos()));
|
|
5502
5498
|
};
|
|
5499
|
+
// Lazy-rendering the child component after client-side hydration
|
|
5500
|
+
var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref2) {
|
|
5501
|
+
var slice = _ref2.slice;
|
|
5502
|
+
var _useState = React.useState(false),
|
|
5503
|
+
showChild = _useState[0],
|
|
5504
|
+
setShowChild = _useState[1];
|
|
5505
|
+
React.useEffect(function () {
|
|
5506
|
+
setShowChild(true); // Hydrate the component after the client-side is ready
|
|
5507
|
+
}, []);
|
|
5508
|
+
if (!showChild) {
|
|
5509
|
+
return React__default.default.createElement("div", null);
|
|
5510
|
+
}
|
|
5511
|
+
return React__default.default.createElement(CarouselMarqueeBannerContent, {
|
|
5512
|
+
slice: slice
|
|
5513
|
+
});
|
|
5514
|
+
};
|
|
5503
5515
|
|
|
5504
5516
|
var Timeline = function Timeline(_ref) {
|
|
5505
5517
|
var slice = _ref.slice;
|