@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
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,35 +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;
|
|
5399
|
+
var _useToken = boemly.useToken('colors', ['primary.50']),
|
|
5400
|
+
primary50 = _useToken[0];
|
|
5398
5401
|
var _useWindowSize = reactUse.useWindowSize(),
|
|
5399
5402
|
windowWidth = _useWindowSize.width;
|
|
5400
|
-
var
|
|
5403
|
+
var hasEnoughLogosForLoop = slice.logos.length >= 5;
|
|
5401
5404
|
var LOOP_ARRAY_LENGTH = windowWidth > 2000 ? 5 : 4;
|
|
5402
5405
|
// Duplicate Logos to create a full loop
|
|
5403
|
-
var logosToRender =
|
|
5406
|
+
var logosToRender = hasEnoughLogosForLoop ? Array.from({
|
|
5404
5407
|
length: LOOP_ARRAY_LENGTH
|
|
5405
5408
|
}, function () {
|
|
5406
5409
|
return slice.logos;
|
|
5407
|
-
}).flat();
|
|
5410
|
+
}).flat() : slice.logos;
|
|
5408
5411
|
var _useMediaQuery = boemly.useMediaQuery(BREAKPOINT_MD_QUERY),
|
|
5409
5412
|
isMobile = _useMediaQuery[0];
|
|
5413
|
+
// Carousel setup
|
|
5410
5414
|
var _useEmblaCarousel = useEmblaCarousel__default.default({
|
|
5411
|
-
loop:
|
|
5415
|
+
loop: hasEnoughLogosForLoop,
|
|
5412
5416
|
align: 'start',
|
|
5413
5417
|
containScroll: 'trimSnaps',
|
|
5414
5418
|
dragFree: true
|
|
5415
|
-
},
|
|
5419
|
+
}, hasEnoughLogosForLoop ? [AutoScroll__default.default({
|
|
5416
5420
|
playOnInit: true,
|
|
5417
5421
|
speed: isMobile ? 0.5 : 1,
|
|
5418
5422
|
stopOnInteraction: false,
|
|
5419
5423
|
stopOnMouseEnter: false,
|
|
5420
5424
|
stopOnFocusIn: false
|
|
5421
|
-
})]),
|
|
5425
|
+
})] : []),
|
|
5422
5426
|
emblaRef = _useEmblaCarousel[0];
|
|
5423
5427
|
var renderLogos = function renderLogos() {
|
|
5424
|
-
if (
|
|
5428
|
+
if (!hasEnoughLogosForLoop) {
|
|
5425
5429
|
return React__default.default.createElement(LogoGrid, null, slice.logos.map(function (logo, index) {
|
|
5426
5430
|
return React__default.default.createElement(boemly.Box, {
|
|
5427
5431
|
key: logo.id + "-" + index,
|
|
@@ -5436,15 +5440,15 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5436
5440
|
}, React__default.default.createElement(boemly.Box, {
|
|
5437
5441
|
position: "relative",
|
|
5438
5442
|
maxHeight: "xl",
|
|
5439
|
-
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) + ")",
|
|
5440
5444
|
width: isMobile ? '16' : '36',
|
|
5441
5445
|
borderRadius: "xl"
|
|
5442
5446
|
}, React__default.default.createElement(Image__default.default, {
|
|
5443
|
-
src: strapiMediaUrl(logo.img
|
|
5444
|
-
alt: logo.
|
|
5447
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5448
|
+
alt: logo.alt,
|
|
5445
5449
|
fill: true,
|
|
5446
5450
|
style: {
|
|
5447
|
-
objectFit: logo.
|
|
5451
|
+
objectFit: logo.objectFit || 'contain',
|
|
5448
5452
|
borderRadius: 'var(--boemly-radii-xl)'
|
|
5449
5453
|
}
|
|
5450
5454
|
}))));
|
|
@@ -5471,40 +5475,49 @@ var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
|
|
|
5471
5475
|
}, React__default.default.createElement(boemly.Box, {
|
|
5472
5476
|
position: "relative",
|
|
5473
5477
|
maxHeight: "xl",
|
|
5474
|
-
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) + ")",
|
|
5475
5479
|
width: isMobile ? '16' : '36',
|
|
5476
5480
|
borderRadius: "xl"
|
|
5477
5481
|
}, React__default.default.createElement(Image__default.default, {
|
|
5478
|
-
src: strapiMediaUrl(logo.img
|
|
5479
|
-
alt: logo.
|
|
5482
|
+
src: strapiMediaUrl(logo.img, 'large'),
|
|
5483
|
+
alt: logo.alt,
|
|
5480
5484
|
fill: true,
|
|
5481
5485
|
style: {
|
|
5482
|
-
objectFit: logo.
|
|
5486
|
+
objectFit: logo.objectFit || 'contain',
|
|
5483
5487
|
borderRadius: 'var(--boemly-radii-xl)'
|
|
5484
5488
|
}
|
|
5485
5489
|
}))));
|
|
5486
5490
|
})));
|
|
5487
5491
|
};
|
|
5488
|
-
return React__default.default.createElement(boemly.DefaultSectionContainer,
|
|
5489
|
-
|
|
5490
|
-
|
|
5491
|
-
display: "flex",
|
|
5492
|
-
flexDirection: "column",
|
|
5493
|
-
justifyContent: "center",
|
|
5494
|
-
alignItems: "center",
|
|
5495
|
-
height: "2xs",
|
|
5496
|
-
backgroundColor: "gray.50",
|
|
5497
|
-
padding: "42px 0 56px"
|
|
5498
|
-
}, slice.title ? React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.Flex, {
|
|
5492
|
+
return React__default.default.createElement(boemly.DefaultSectionContainer, {
|
|
5493
|
+
backgroundColor: primary50
|
|
5494
|
+
}, React__default.default.createElement(React__default.default.Fragment, null, slice.title ? React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.Flex, {
|
|
5499
5495
|
alignItems: "center",
|
|
5500
5496
|
flexDirection: "column"
|
|
5501
5497
|
}, React__default.default.createElement(boemly.Heading, {
|
|
5502
5498
|
size: "md",
|
|
5503
5499
|
fontWeight: "500"
|
|
5504
5500
|
}, slice.title)), React__default.default.createElement(boemly.Spacer, {
|
|
5505
|
-
height: "12"
|
|
5501
|
+
height: "12",
|
|
5502
|
+
minHeight: "12"
|
|
5506
5503
|
})) : null, renderLogos()));
|
|
5507
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
|
+
};
|
|
5508
5521
|
|
|
5509
5522
|
var Timeline = function Timeline(_ref) {
|
|
5510
5523
|
var slice = _ref.slice;
|