@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 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 install the package there:
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-6);\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) {
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-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);
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
- var CarouselMarqueeBanner = function CarouselMarqueeBanner(_ref) {
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 shouldDuplicateLogos = slice.logos.length < 5;
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 = shouldDuplicateLogos ? slice.logos : Array.from({
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: shouldDuplicateLogos ? false : true,
5415
+ loop: hasEnoughLogosForLoop,
5414
5416
  align: 'start',
5415
5417
  containScroll: 'trimSnaps',
5416
5418
  dragFree: true
5417
- }, shouldDuplicateLogos ? [] : [AutoScroll__default.default({
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 (slice.logos.length < 5) {
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
- maxHeight: "xl",
5441
- height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.img.data.attributes.width, logo.img.img.data.attributes.height) + ")",
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.img, 'large'),
5446
- alt: logo.img.alt,
5444
+ src: strapiMediaUrl(logo.img, 'large'),
5445
+ alt: logo.alt,
5447
5446
  fill: true,
5448
5447
  style: {
5449
- objectFit: logo.img.objectFit || 'contain',
5450
- borderRadius: 'var(--boemly-radii-xl)'
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
- maxHeight: "xl",
5476
- height: "calc(" + (isMobile ? 'var(--boemly-sizes-16)' : 'var(--boemly-sizes-36)') + " / " + getClosestRatio(logo.img.img.data.attributes.width, logo.img.img.data.attributes.height) + ")",
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.img, 'large'),
5481
- alt: logo.img.alt,
5476
+ src: strapiMediaUrl(logo.img, 'large'),
5477
+ alt: logo.alt,
5482
5478
  fill: true,
5483
5479
  style: {
5484
- objectFit: logo.img.objectFit || 'contain',
5485
- borderRadius: 'var(--boemly-radii-xl)'
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;