@cntrl-site/components 0.1.10-alpha.3 → 0.1.10-alpha.4

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/dist/index.mjs CHANGED
@@ -1,19 +1,19 @@
1
1
  import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
- import React, { useState, useEffect, useRef, useCallback } from "react";
2
+ import { useState, useEffect, useRef, useCallback } from "react";
3
3
  import { Splide, SplideSlide } from "@splidejs/react-splide";
4
4
  import cn from "classnames";
5
5
  import { createPortal } from "react-dom";
6
- const wrapper$1 = "ControlSlider-module__wrapper___sHEkd";
6
+ const wrapper = "ControlSlider-module__wrapper___sHEkd";
7
7
  const hoverArrow = "ControlSlider-module__hoverArrow___A-dOH";
8
8
  const sliderItem = "ControlSlider-module__sliderItem___QQSkR";
9
9
  const sliderImage = "ControlSlider-module__sliderImage___9hRl-";
10
- const arrow$2 = "ControlSlider-module__arrow___05ghY";
10
+ const arrow$1 = "ControlSlider-module__arrow___05ghY";
11
11
  const arrowVertical$1 = "ControlSlider-module__arrowVertical___tBfVN";
12
- const nextArrow$2 = "ControlSlider-module__nextArrow___-30Yc";
13
- const arrowInner$2 = "ControlSlider-module__arrowInner___aEra3";
12
+ const nextArrow$1 = "ControlSlider-module__nextArrow___-30Yc";
13
+ const arrowInner$1 = "ControlSlider-module__arrowInner___aEra3";
14
14
  const arrowIcon$1 = "ControlSlider-module__arrowIcon___S4ztF";
15
- const arrowImg$2 = "ControlSlider-module__arrowImg___2dwJW";
16
- const mirror$2 = "ControlSlider-module__mirror___brd6U";
15
+ const arrowImg$1 = "ControlSlider-module__arrowImg___2dwJW";
16
+ const mirror$1 = "ControlSlider-module__mirror___brd6U";
17
17
  const pagination = "ControlSlider-module__pagination___bicLF";
18
18
  const paginationInner = "ControlSlider-module__paginationInner___bT-P-";
19
19
  const paginationVertical = "ControlSlider-module__paginationVertical___zYqKw";
@@ -45,19 +45,19 @@ const bottomCenterAlignment = "ControlSlider-module__bottomCenterAlignment___c54
45
45
  const bottomRightAlignment = "ControlSlider-module__bottomRightAlignment___kEwrz";
46
46
  const clickOverlay = "ControlSlider-module__clickOverlay___DZA28";
47
47
  const contain$1 = "ControlSlider-module__contain___pLyq7";
48
- const cover$2 = "ControlSlider-module__cover___KdDat";
48
+ const cover$1 = "ControlSlider-module__cover___KdDat";
49
49
  const styles$3 = {
50
- wrapper: wrapper$1,
50
+ wrapper,
51
51
  hoverArrow,
52
52
  sliderItem,
53
53
  sliderImage,
54
- arrow: arrow$2,
54
+ arrow: arrow$1,
55
55
  arrowVertical: arrowVertical$1,
56
- nextArrow: nextArrow$2,
57
- arrowInner: arrowInner$2,
56
+ nextArrow: nextArrow$1,
57
+ arrowInner: arrowInner$1,
58
58
  arrowIcon: arrowIcon$1,
59
- arrowImg: arrowImg$2,
60
- mirror: mirror$2,
59
+ arrowImg: arrowImg$1,
60
+ mirror: mirror$1,
61
61
  pagination,
62
62
  paginationInner,
63
63
  paginationVertical,
@@ -89,7 +89,7 @@ const styles$3 = {
89
89
  bottomRightAlignment,
90
90
  clickOverlay,
91
91
  contain: contain$1,
92
- cover: cover$2
92
+ cover: cover$1
93
93
  };
94
94
  const link$1 = "RichTextRenderer-module__link___BWeZ2";
95
95
  const styles$2 = {
@@ -1049,12 +1049,12 @@ const ControlSliderComponent = {
1049
1049
  }
1050
1050
  };
1051
1051
  const imageRevealSlider = "ImageRevealSlider-module__imageRevealSlider___UE5Ob";
1052
- const image$1 = "ImageRevealSlider-module__image___Qjt-e";
1052
+ const image = "ImageRevealSlider-module__image___Qjt-e";
1053
1053
  const link = "ImageRevealSlider-module__link___N-iLG";
1054
1054
  const cursor = "ImageRevealSlider-module__cursor___2U03d";
1055
1055
  const styles = {
1056
1056
  imageRevealSlider,
1057
- image: image$1,
1057
+ image,
1058
1058
  link,
1059
1059
  cursor
1060
1060
  };
@@ -1615,6 +1615,7 @@ const ControlImageRevealSliderComponent = {
1615
1615
  }
1616
1616
  }
1617
1617
  };
1618
+ const hidden = "LightBox-module__hidden___9s-9x";
1618
1619
  const heroImage = "LightBox-module__heroImage___sTxNF";
1619
1620
  const background = "LightBox-module__background___rm9ml";
1620
1621
  const editor = "LightBox-module__editor___4ACaY";
@@ -1622,16 +1623,18 @@ const contentStyle = "LightBox-module__contentStyle___Bgnsq";
1622
1623
  const imageStyle = "LightBox-module__imageStyle___tLIlB";
1623
1624
  const imgWrapper = "LightBox-module__imgWrapper___LuFUp";
1624
1625
  const contain = "LightBox-module__contain___8-yaS";
1625
- const cover$1 = "LightBox-module__cover___hNvOG";
1626
- const caption$1 = "LightBox-module__caption___b6L2I";
1626
+ const cover = "LightBox-module__cover___hNvOG";
1627
+ const caption = "LightBox-module__caption___b6L2I";
1627
1628
  const captionTextInner = "LightBox-module__captionTextInner___rCGNH";
1628
1629
  const lightboxSplide = "LightBox-module__lightboxSplide___XFuWC";
1629
- const arrow$1 = "LightBox-module__arrow___iz38X";
1630
+ const arrow = "LightBox-module__arrow___iz38X";
1630
1631
  const arrowVertical = "LightBox-module__arrowVertical___Zfz81";
1631
- const nextArrow$1 = "LightBox-module__nextArrow___zkAQN";
1632
- const arrowInner$1 = "LightBox-module__arrowInner___p48sW";
1633
- const arrowImg$1 = "LightBox-module__arrowImg___pNV88";
1634
- const mirror$1 = "LightBox-module__mirror___pjeXc";
1632
+ const nextArrow = "LightBox-module__nextArrow___zkAQN";
1633
+ const arrowInner = "LightBox-module__arrowInner___p48sW";
1634
+ const arrowIcon = "LightBox-module__arrowIcon___3VaFf";
1635
+ const arrowImg = "LightBox-module__arrowImg___pNV88";
1636
+ const mirror = "LightBox-module__mirror___pjeXc";
1637
+ const thumbsWrapper = "LightBox-module__thumbsWrapper___GB-nU";
1635
1638
  const thumbsContainerVertical = "LightBox-module__thumbsContainerVertical___wttk5";
1636
1639
  const thumbsContainer = "LightBox-module__thumbsContainer___osSma";
1637
1640
  const thumbsAlignStart = "LightBox-module__thumbsAlignStart___MO6tY";
@@ -1650,7 +1653,8 @@ const slideOutRight = "LightBox-module__slideOutRight___SK7eC";
1650
1653
  const slideOutTop = "LightBox-module__slideOutTop___Vgg0z";
1651
1654
  const slideOutBottom = "LightBox-module__slideOutBottom___nJ0Ef";
1652
1655
  const scaleSlide = "LightBox-module__scaleSlide___vZriG";
1653
- const classes$1 = {
1656
+ const classes = {
1657
+ hidden,
1654
1658
  heroImage,
1655
1659
  background,
1656
1660
  editor,
@@ -1658,16 +1662,18 @@ const classes$1 = {
1658
1662
  imageStyle,
1659
1663
  imgWrapper,
1660
1664
  contain,
1661
- cover: cover$1,
1662
- caption: caption$1,
1665
+ cover,
1666
+ caption,
1663
1667
  captionTextInner,
1664
1668
  lightboxSplide,
1665
- arrow: arrow$1,
1669
+ arrow,
1666
1670
  arrowVertical,
1667
- nextArrow: nextArrow$1,
1668
- arrowInner: arrowInner$1,
1669
- arrowImg: arrowImg$1,
1670
- mirror: mirror$1,
1671
+ nextArrow,
1672
+ arrowInner,
1673
+ arrowIcon,
1674
+ arrowImg,
1675
+ mirror,
1676
+ thumbsWrapper,
1671
1677
  thumbsContainerVertical,
1672
1678
  thumbsContainer,
1673
1679
  thumbsAlignStart,
@@ -1722,9 +1728,14 @@ const getPositionStyles = (position, offset, isEditor) => {
1722
1728
  return styles2;
1723
1729
  };
1724
1730
  function getDisplayedImageRect(img2) {
1725
- const container2 = img2.getBoundingClientRect();
1726
- const containerW = container2.width;
1727
- const containerH = container2.height;
1731
+ const container = img2.getBoundingClientRect();
1732
+ const style = window.getComputedStyle(img2);
1733
+ const paddingTop = parseFloat(style.paddingTop) || 0;
1734
+ const paddingRight = parseFloat(style.paddingRight) || 0;
1735
+ const paddingBottom = parseFloat(style.paddingBottom) || 0;
1736
+ const paddingLeft = parseFloat(style.paddingLeft) || 0;
1737
+ const containerW = Math.max(0, container.width - paddingLeft - paddingRight);
1738
+ const containerH = Math.max(0, container.height - paddingTop - paddingBottom);
1728
1739
  const imgW = img2.naturalWidth;
1729
1740
  const imgH = img2.naturalHeight;
1730
1741
  const containerRatio = containerW / containerH;
@@ -1737,8 +1748,10 @@ function getDisplayedImageRect(img2) {
1737
1748
  renderedH = containerH;
1738
1749
  renderedW = containerH * imgRatio;
1739
1750
  }
1740
- const offsetX = (containerW - renderedW) / 2 + container2.left;
1741
- const offsetY = (containerH - renderedH) / 2 + container2.top;
1751
+ const contentLeft = container.left + paddingLeft;
1752
+ const contentTop = container.top + paddingTop;
1753
+ const offsetX = (containerW - renderedW) / 2 + contentLeft;
1754
+ const offsetY = (containerH - renderedH) / 2 + contentTop;
1742
1755
  return {
1743
1756
  x: offsetX,
1744
1757
  y: offsetY,
@@ -1767,81 +1780,81 @@ function getColorAlpha(color) {
1767
1780
  }
1768
1781
  function getAnimationClasses(type, direction) {
1769
1782
  const appearClass = (() => {
1770
- if (type === "fade in") return classes$1.fadeIn;
1783
+ if (type === "fade in") return classes.fadeIn;
1771
1784
  if (type === "slide in" || type === "mix") {
1772
1785
  switch (direction) {
1773
1786
  case "left":
1774
- return classes$1.slideInLeft;
1787
+ return classes.slideInLeft;
1775
1788
  case "right":
1776
- return classes$1.slideInRight;
1789
+ return classes.slideInRight;
1777
1790
  case "top":
1778
- return classes$1.slideInTop;
1791
+ return classes.slideInTop;
1779
1792
  case "bottom":
1780
- return classes$1.slideInBottom;
1793
+ return classes.slideInBottom;
1781
1794
  default:
1782
- return classes$1.slideInRight;
1795
+ return classes.slideInRight;
1783
1796
  }
1784
1797
  }
1785
- return classes$1.fadeIn;
1798
+ return classes.fadeIn;
1786
1799
  })();
1787
1800
  const backdropAppearClass = (() => {
1788
- if (type === "fade in" || type === "mix") return classes$1.fadeIn;
1801
+ if (type === "fade in" || type === "mix") return classes.fadeIn;
1789
1802
  if (type === "slide in") {
1790
1803
  switch (direction) {
1791
1804
  case "left":
1792
- return classes$1.slideInLeft;
1805
+ return classes.slideInLeft;
1793
1806
  case "right":
1794
- return classes$1.slideInRight;
1807
+ return classes.slideInRight;
1795
1808
  case "top":
1796
- return classes$1.slideInTop;
1809
+ return classes.slideInTop;
1797
1810
  case "bottom":
1798
- return classes$1.slideInBottom;
1811
+ return classes.slideInBottom;
1799
1812
  default:
1800
- return classes$1.slideInRight;
1813
+ return classes.slideInRight;
1801
1814
  }
1802
1815
  }
1803
- return classes$1.fadeIn;
1816
+ return classes.fadeIn;
1804
1817
  })();
1805
1818
  const backdropDisappearClass = (() => {
1806
- if (type === "fade in" || type === "mix") return classes$1.fadeOut;
1819
+ if (type === "fade in" || type === "mix") return classes.fadeOut;
1807
1820
  if (type === "slide in") {
1808
1821
  switch (direction) {
1809
1822
  case "left":
1810
- return classes$1.slideOutLeft;
1823
+ return classes.slideOutLeft;
1811
1824
  case "right":
1812
- return classes$1.slideOutRight;
1825
+ return classes.slideOutRight;
1813
1826
  case "top":
1814
- return classes$1.slideOutTop;
1827
+ return classes.slideOutTop;
1815
1828
  case "bottom":
1816
- return classes$1.slideOutBottom;
1829
+ return classes.slideOutBottom;
1817
1830
  default:
1818
- return classes$1.slideOutRight;
1831
+ return classes.slideOutRight;
1819
1832
  }
1820
1833
  }
1821
- return classes$1.fadeOut;
1834
+ return classes.fadeOut;
1822
1835
  })();
1823
1836
  const disappearClass = (() => {
1824
- if (type === "fade in") return classes$1.fadeOut;
1837
+ if (type === "fade in") return classes.fadeOut;
1825
1838
  if (type === "slide in" || type === "mix") {
1826
1839
  switch (direction) {
1827
1840
  case "left":
1828
- return classes$1.slideOutLeft;
1841
+ return classes.slideOutLeft;
1829
1842
  case "right":
1830
- return classes$1.slideOutRight;
1843
+ return classes.slideOutRight;
1831
1844
  case "top":
1832
- return classes$1.slideOutTop;
1845
+ return classes.slideOutTop;
1833
1846
  case "bottom":
1834
- return classes$1.slideOutBottom;
1847
+ return classes.slideOutBottom;
1835
1848
  default:
1836
- return classes$1.slideOutRight;
1849
+ return classes.slideOutRight;
1837
1850
  }
1838
1851
  }
1839
- return classes$1.fadeOut;
1852
+ return classes.fadeOut;
1840
1853
  })();
1841
1854
  return { appearClass, backdropAppearClass, backdropDisappearClass, disappearClass };
1842
1855
  }
1843
1856
  const LightboxGallery = ({ settings, content, styles: styles2, portalId, activeEvent, isEditor }) => {
1844
- const [open, setOpen] = React.useState(false);
1857
+ const [open, setOpen] = useState(false);
1845
1858
  const { url } = settings.thumbnailBlock.cover;
1846
1859
  useEffect(() => {
1847
1860
  if (activeEvent === "close") {
@@ -1857,7 +1870,7 @@ const LightboxGallery = ({ settings, content, styles: styles2, portalId, activeE
1857
1870
  {
1858
1871
  src: url,
1859
1872
  alt: "Cover",
1860
- className: classes$1.heroImage,
1873
+ className: classes.heroImage,
1861
1874
  onClick: () => setOpen(true)
1862
1875
  }
1863
1876
  ),
@@ -1955,6 +1968,19 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
1955
1968
  (_b = lightboxRef.current) == null ? void 0 : _b.go(dir);
1956
1969
  }
1957
1970
  };
1971
+ const isClickInImagePadding = (img2, clientX, clientY) => {
1972
+ const rect = img2.getBoundingClientRect();
1973
+ const style = window.getComputedStyle(img2);
1974
+ const paddingTop = parseFloat(style.paddingTop) || 0;
1975
+ const paddingRight = parseFloat(style.paddingRight) || 0;
1976
+ const paddingBottom = parseFloat(style.paddingBottom) || 0;
1977
+ const paddingLeft = parseFloat(style.paddingLeft) || 0;
1978
+ const contentLeft = rect.left + paddingLeft;
1979
+ const contentRight = rect.right - paddingRight;
1980
+ const contentTop = rect.top + paddingTop;
1981
+ const contentBottom = rect.bottom - paddingBottom;
1982
+ return clientX < contentLeft || clientX > contentRight || clientY < contentTop || clientY > contentBottom;
1983
+ };
1958
1984
  const handleImageWrapperClick = (e) => {
1959
1985
  const currentImage = content[currentIndex];
1960
1986
  const isCover = (currentImage == null ? void 0 : currentImage.image.objectFit) === "cover";
@@ -1972,7 +1998,16 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
1972
1998
  let inside;
1973
1999
  if (isCover && imageRef.current) {
1974
2000
  const imgRect = imageRef.current.getBoundingClientRect();
1975
- inside = clientX >= imgRect.left && clientX <= imgRect.right && clientY >= imgRect.top && clientY <= imgRect.bottom;
2001
+ const style = window.getComputedStyle(imageRef.current);
2002
+ const paddingTop = parseFloat(style.paddingTop) || 0;
2003
+ const paddingRight = parseFloat(style.paddingRight) || 0;
2004
+ const paddingBottom = parseFloat(style.paddingBottom) || 0;
2005
+ const paddingLeft = parseFloat(style.paddingLeft) || 0;
2006
+ const contentLeft = imgRect.left + paddingLeft;
2007
+ const contentRight = imgRect.right - paddingRight;
2008
+ const contentTop = imgRect.top + paddingTop;
2009
+ const contentBottom = imgRect.bottom - paddingBottom;
2010
+ inside = clientX >= contentLeft && clientX <= contentRight && clientY >= contentTop && clientY <= contentBottom;
1976
2011
  } else {
1977
2012
  const rect = imageRef.current ? getDisplayedImageRect(imageRef.current) : null;
1978
2013
  if (!rect) {
@@ -1989,6 +2024,10 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
1989
2024
  };
1990
2025
  const onImageClick = (e) => {
1991
2026
  e.stopPropagation();
2027
+ if (isClickInImagePadding(e.currentTarget, e.clientX, e.clientY)) {
2028
+ handleClose();
2029
+ return;
2030
+ }
1992
2031
  handleTriggerClick(e.currentTarget, e.clientX, e.clientY);
1993
2032
  };
1994
2033
  useEffect(() => {
@@ -2017,6 +2056,7 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2017
2056
  useEffect(() => {
2018
2057
  if (isOpen) {
2019
2058
  setCurrentIndex(0);
2059
+ setSplideKey((prev) => prev + 1);
2020
2060
  isClosingRef.current = false;
2021
2061
  setIsClosing(false);
2022
2062
  setAnimationFinished(false);
@@ -2079,7 +2119,7 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2079
2119
  return;
2080
2120
  }
2081
2121
  const target = e.target;
2082
- if (target && (target.closest(`.${classes$1.thumbsContainer}`) || target.closest(`.${classes$1.thumbItem}`))) {
2122
+ if (target && (target.closest(`.${classes.thumbsContainer}`) || target.closest(`.${classes.thumbItem}`))) {
2083
2123
  return;
2084
2124
  }
2085
2125
  if (e.touches.length === 0 && e.changedTouches.length > 0) {
@@ -2120,14 +2160,14 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2120
2160
  animationTimingFunction: "ease",
2121
2161
  animationFillMode: "both"
2122
2162
  };
2123
- if (!isOpen && !isClosing) return null;
2163
+ if (!document.getElementById(portalId)) return null;
2124
2164
  return createPortal(
2125
2165
  /* @__PURE__ */ jsxs(Fragment, { children: [
2126
2166
  /* @__PURE__ */ jsx(
2127
2167
  "div",
2128
2168
  {
2129
2169
  ref: !isEditor ? animationTargetRef : null,
2130
- className: cn(classes$1.background, isClosing ? backdropDisappearClass : backdropAppearClass, { [classes$1.editor]: isEditor }),
2170
+ className: cn(classes.background, isClosing ? backdropDisappearClass : backdropAppearClass, { [classes.editor]: isEditor }, { [classes.hidden]: !isOpen }),
2131
2171
  style: {
2132
2172
  ...backdropStyles,
2133
2173
  ...animationFinished && !isEditor && !isClosing ? { position: "absolute" } : {}
@@ -2138,7 +2178,7 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2138
2178
  "div",
2139
2179
  {
2140
2180
  ref: isEditor ? animationTargetRef : null,
2141
- className: cn(classes$1.contentStyle, !isClosing ? appearClass : disappearClass, { [classes$1.editor]: isEditor }),
2181
+ className: cn(classes.contentStyle, !isClosing ? appearClass : disappearClass, { [classes.editor]: isEditor }, { [classes.hidden]: !isOpen }),
2142
2182
  style: {
2143
2183
  animationDuration: `${parseInt(appear.duration)}ms`,
2144
2184
  animationTimingFunction: "ease",
@@ -2150,7 +2190,7 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2150
2190
  {
2151
2191
  onMove: (splide) => setCurrentIndex(splide.index),
2152
2192
  ref: lightboxRef,
2153
- className: classes$1.lightboxSplide,
2193
+ className: classes.lightboxSplide,
2154
2194
  options: {
2155
2195
  arrows: false,
2156
2196
  speed: slider.duration ? parseInt(slider.duration) : 500,
@@ -2162,7 +2202,8 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2162
2202
  height: "100%",
2163
2203
  type: slider.type === "fade" || slider.type === "scale" ? "fade" : "loop",
2164
2204
  padding: 0,
2165
- rewind: (slider.type === "scale" || slider.type === "fade") && triggers.repeat === "loop"
2205
+ rewind: (slider.type === "scale" || slider.type === "fade") && triggers.repeat === "loop",
2206
+ start: 0
2166
2207
  },
2167
2208
  style: { "--splide-speed": slider.duration },
2168
2209
  children: content.map((item, index) => {
@@ -2178,14 +2219,14 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2178
2219
  "--position-transform": transform || "none"
2179
2220
  };
2180
2221
  })() : { ...positionStyles, position: "absolute", padding, boxSizing: "border-box" };
2181
- return /* @__PURE__ */ jsx(SplideSlide, { children: /* @__PURE__ */ jsx("div", { className: classes$1.imgWrapper, onClick: handleImageWrapperClick, children: /* @__PURE__ */ jsx(
2222
+ return /* @__PURE__ */ jsx(SplideSlide, { children: /* @__PURE__ */ jsx("div", { className: classes.imgWrapper, onClick: handleImageWrapperClick, children: /* @__PURE__ */ jsx(
2182
2223
  "img",
2183
2224
  {
2184
2225
  ref: index === currentIndex ? imageRef : null,
2185
- className: cn(classes$1.imageStyle, {
2186
- [classes$1.contain]: item.image.objectFit === "contain",
2187
- [classes$1.cover]: item.image.objectFit === "cover",
2188
- [classes$1.scaleSlide]: slider.type === "scale"
2226
+ className: cn(classes.imageStyle, {
2227
+ [classes.contain]: item.image.objectFit === "contain",
2228
+ [classes.cover]: item.image.objectFit === "cover",
2229
+ [classes.scaleSlide]: slider.type === "scale"
2189
2230
  }),
2190
2231
  onClick: item.image.objectFit !== "contain" ? onImageClick : void 0,
2191
2232
  src: item.image.url,
@@ -2197,31 +2238,34 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2197
2238
  },
2198
2239
  splideKey
2199
2240
  ),
2200
- controls.isActive && controls.arrowsImgUrl && /* @__PURE__ */ jsxs(Fragment, { children: [
2241
+ controls.isActive && /* @__PURE__ */ jsxs(Fragment, { children: [
2201
2242
  /* @__PURE__ */ jsx(
2202
2243
  "div",
2203
2244
  {
2204
- className: cn(classes$1.arrow, { [classes$1.arrowVertical]: slider.direction === "vert" }),
2245
+ className: cn(classes.arrow, { [classes.arrowVertical]: slider.direction === "vert" }),
2205
2246
  style: { color: controls.color, ["--arrow-hover-color"]: controls.hover },
2206
- children: /* @__PURE__ */ jsx(
2247
+ children: /* @__PURE__ */ jsxs(
2207
2248
  "button",
2208
2249
  {
2209
- className: classes$1.arrowInner,
2250
+ className: classes.arrowInner,
2210
2251
  style: { transform: `translate(${scalingValue(controls.offset.x, isEditor)}, ${scalingValue(controls.offset.y * (slider.direction === "horiz" ? 1 : -1), isEditor)}) scale(${controls.scale}) rotate(${slider.direction === "horiz" ? "0deg" : "90deg"})` },
2211
2252
  onClick: () => {
2212
2253
  var _a;
2213
2254
  return (_a = lightboxRef.current) == null ? void 0 : _a.go("-1");
2214
2255
  },
2215
2256
  "aria-label": "Previous",
2216
- children: controls.arrowsImgUrl && /* @__PURE__ */ jsx(
2217
- SvgImage,
2218
- {
2219
- url: controls.arrowsImgUrl,
2220
- fill: controls.color,
2221
- hoverFill: controls.hover,
2222
- className: cn(classes$1.arrowImg, classes$1.mirror)
2223
- }
2224
- )
2257
+ children: [
2258
+ controls.arrowsImgUrl && /* @__PURE__ */ jsx(
2259
+ SvgImage,
2260
+ {
2261
+ url: controls.arrowsImgUrl,
2262
+ fill: controls.color,
2263
+ hoverFill: controls.hover,
2264
+ className: cn(classes.arrowImg, classes.mirror)
2265
+ }
2266
+ ),
2267
+ !controls.arrowsImgUrl && /* @__PURE__ */ jsx(ArrowIcon, { color: controls.color, className: cn(classes.arrowIcon, classes.arrowImg, classes.mirror) })
2268
+ ]
2225
2269
  }
2226
2270
  )
2227
2271
  }
@@ -2229,27 +2273,30 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2229
2273
  /* @__PURE__ */ jsx(
2230
2274
  "div",
2231
2275
  {
2232
- className: cn(classes$1.arrow, classes$1.nextArrow, { [classes$1.arrowVertical]: slider.direction === "vert" }),
2276
+ className: cn(classes.arrow, classes.nextArrow, { [classes.arrowVertical]: slider.direction === "vert" }),
2233
2277
  style: { color: controls.color, ["--arrow-hover-color"]: controls.hover },
2234
- children: /* @__PURE__ */ jsx(
2278
+ children: /* @__PURE__ */ jsxs(
2235
2279
  "button",
2236
2280
  {
2237
- className: classes$1.arrowInner,
2281
+ className: classes.arrowInner,
2238
2282
  style: { transform: `translate(${scalingValue(controls.offset.x * (slider.direction === "horiz" ? -1 : 1), isEditor)}, ${scalingValue(controls.offset.y, isEditor)}) scale(${controls.scale}) rotate(${slider.direction === "horiz" ? "0deg" : "90deg"})` },
2239
2283
  onClick: () => {
2240
2284
  var _a;
2241
2285
  return (_a = lightboxRef.current) == null ? void 0 : _a.go("+1");
2242
2286
  },
2243
2287
  "aria-label": "Next",
2244
- children: controls.arrowsImgUrl && /* @__PURE__ */ jsx(
2245
- SvgImage,
2246
- {
2247
- url: controls.arrowsImgUrl,
2248
- fill: controls.color,
2249
- hoverFill: controls.hover,
2250
- className: classes$1.arrowImg
2251
- }
2252
- )
2288
+ children: [
2289
+ controls.arrowsImgUrl && /* @__PURE__ */ jsx(
2290
+ SvgImage,
2291
+ {
2292
+ url: controls.arrowsImgUrl,
2293
+ fill: controls.color,
2294
+ hoverFill: controls.hover,
2295
+ className: classes.arrowImg
2296
+ }
2297
+ ),
2298
+ !controls.arrowsImgUrl && /* @__PURE__ */ jsx(ArrowIcon, { color: controls.color, className: cn(classes.arrowIcon, classes.arrowImg) })
2299
+ ]
2253
2300
  }
2254
2301
  )
2255
2302
  }
@@ -2259,12 +2306,12 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2259
2306
  const positionStyles = getPositionStyles(area.closeIconAlign, area.closeIconOffset, isEditor);
2260
2307
  const scaleTransform = `scale(${area.closeIconScale})`;
2261
2308
  const combinedTransform = positionStyles.transform ? `${positionStyles.transform} ${scaleTransform}` : scaleTransform;
2262
- return /* @__PURE__ */ jsx("button", { className: classes$1.closeButton, style: { ...positionStyles, transform: combinedTransform }, onClick: handleClose, "aria-label": "Close lightbox", children: /* @__PURE__ */ jsx(SvgImage, { url: area.closeIconUrl }) });
2309
+ return /* @__PURE__ */ jsx("button", { className: classes.closeButton, style: { ...positionStyles, transform: combinedTransform }, onClick: handleClose, "aria-label": "Close lightbox", children: /* @__PURE__ */ jsx(SvgImage, { url: area.closeIconUrl, fill: area.closeIconColor, hoverFill: area.closeIconHover }) });
2263
2310
  })(),
2264
2311
  caption2.isActive && /* @__PURE__ */ jsx(
2265
2312
  "div",
2266
2313
  {
2267
- className: classes$1.caption,
2314
+ className: classes.caption,
2268
2315
  style: {
2269
2316
  ...getPositionStyles(caption2.alignment, caption2.offset, isEditor),
2270
2317
  fontFamily: fontSettings.fontFamily,
@@ -2286,103 +2333,133 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2286
2333
  "div",
2287
2334
  {
2288
2335
  "data-styles": "caption",
2289
- className: classes$1.captionTextInner,
2336
+ className: classes.captionTextInner,
2290
2337
  style: { ["--link-hover-color"]: caption2.hover },
2291
2338
  children: /* @__PURE__ */ jsx(RichTextRenderer, { content: content[currentIndex].imageCaption })
2292
2339
  }
2293
2340
  )
2294
2341
  }
2295
2342
  ),
2296
- thumbnail.isActive && /* @__PURE__ */ jsx(
2297
- "div",
2298
- {
2299
- className: cn(classes$1.thumbsContainer, {
2300
- [classes$1.thumbsContainerVertical]: slider.direction === "vert",
2301
- [classes$1.thumbsAlignStart]: thumbnail.align === "start",
2302
- [classes$1.thumbsAlignCenter]: thumbnail.align === "center",
2303
- [classes$1.thumbsAlignEnd]: thumbnail.align === "end"
2304
- }),
2305
- style: {
2306
- position: isEditor ? "absolute" : "fixed",
2307
- gap: scalingValue(thumbnail.grid.gap, isEditor),
2308
- ...getPositionStyles(thumbnail.position, thumbnail.offset, isEditor)
2309
- },
2310
- children: content.map((item, index) => {
2311
- const isActive = index === currentIndex;
2312
- const thumbDims = thumbnailDimensions[index];
2313
- const baseSizeValue = thumbnail.grid.size;
2314
- const activeSizeValue = baseSizeValue * (isActive ? thumbnail.activeState.scale : 1);
2315
- const getFitDimensions = () => {
2316
- if (thumbnail.fit !== "fit" || !thumbDims) return {};
2317
- const aspectRatio = thumbDims.width / thumbDims.height;
2318
- if (slider.direction === "horiz") {
2319
- const heightValue = activeSizeValue;
2320
- const widthValue = heightValue * aspectRatio;
2321
- return {
2322
- width: scalingValue(widthValue, isEditor),
2323
- height: scalingValue(heightValue, isEditor)
2324
- };
2325
- } else {
2326
- const widthValue = activeSizeValue;
2327
- const heightValue = widthValue / aspectRatio;
2328
- return {
2329
- width: scalingValue(widthValue, isEditor),
2330
- height: scalingValue(heightValue, isEditor)
2331
- };
2343
+ thumbnail.isActive && (() => {
2344
+ const [vertical] = thumbnail.position.split("-");
2345
+ const effectivePosition = slider.direction === "horiz" ? `${vertical}-left` : thumbnail.position;
2346
+ const thumbsPositionStyles = getPositionStyles(effectivePosition, thumbnail.offset, isEditor);
2347
+ return /* @__PURE__ */ jsx(
2348
+ "div",
2349
+ {
2350
+ className: classes.thumbsWrapper,
2351
+ style: {
2352
+ position: isEditor ? "absolute" : "fixed",
2353
+ ...thumbsPositionStyles,
2354
+ ...slider.direction === "horiz" ? {
2355
+ maxWidth: "100vw",
2356
+ width: "100vw",
2357
+ overflowX: "auto",
2358
+ overflowY: "hidden"
2359
+ } : {
2360
+ maxHeight: "100vh",
2361
+ overflowY: "auto",
2362
+ overflowX: "hidden"
2332
2363
  }
2333
- };
2334
- return /* @__PURE__ */ jsx(
2335
- "button",
2364
+ },
2365
+ children: /* @__PURE__ */ jsx(
2366
+ "div",
2336
2367
  {
2337
- className: classes$1.thumbItem,
2368
+ className: cn(classes.thumbsContainer, {
2369
+ [classes.thumbsContainerVertical]: slider.direction === "vert",
2370
+ [classes.thumbsAlignStart]: thumbnail.align === "start",
2371
+ [classes.thumbsAlignCenter]: thumbnail.align === "center",
2372
+ [classes.thumbsAlignEnd]: thumbnail.align === "end"
2373
+ }),
2338
2374
  style: {
2339
- ...slider.direction === "horiz" && thumbnail.fit !== "fit" ? { height: scalingValue(activeSizeValue, isEditor) } : {},
2340
- ...slider.direction === "vert" && thumbnail.fit !== "fit" ? { width: scalingValue(activeSizeValue, isEditor) } : {},
2341
- ...thumbnail.fit === "cover" ? { width: scalingValue(activeSizeValue, isEditor), height: scalingValue(activeSizeValue, isEditor) } : {},
2342
- ...thumbnail.fit === "fit" ? getFitDimensions() : {},
2343
- transition: isActive ? "all 0.2s ease" : "none",
2344
- opacity: isActive ? thumbnail.activeState.opacity / 100 : thumbnail.opacity / 100,
2345
- ["--thumb-hover"]: thumbnail.activeState.opacity / 100
2346
- },
2347
- onClick: (e) => {
2348
- var _a;
2349
- e.stopPropagation();
2350
- setCurrentIndex(index);
2351
- (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2352
- },
2353
- onMouseEnter: () => {
2354
- var _a;
2355
- if (thumbnail.triggers === "hov") {
2356
- (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2357
- }
2375
+ gap: scalingValue(thumbnail.grid.gap, isEditor)
2358
2376
  },
2359
- children: /* @__PURE__ */ jsx(
2360
- "img",
2361
- {
2362
- src: item.image.url,
2363
- alt: item.image.name ?? "",
2364
- onLoad: (e) => {
2365
- const img2 = e.currentTarget;
2366
- if (img2.naturalWidth && img2.naturalHeight) {
2367
- setThumbnailDimensions((prev) => ({
2368
- ...prev,
2369
- [index]: { width: img2.naturalWidth, height: img2.naturalHeight }
2370
- }));
2377
+ children: content.map((item, index) => {
2378
+ const isActive = index === currentIndex;
2379
+ const thumbDims = thumbnailDimensions[index];
2380
+ const baseSizeValue = thumbnail.grid.size;
2381
+ const activeSizeValue = baseSizeValue * (isActive ? thumbnail.activeState.scale : 1);
2382
+ const getFitDimensions = () => {
2383
+ if (thumbnail.fit !== "fit") return {};
2384
+ if (!thumbDims) {
2385
+ if (slider.direction === "horiz") {
2386
+ return { height: scalingValue(activeSizeValue, isEditor) };
2387
+ } else {
2388
+ return { width: scalingValue(activeSizeValue, isEditor) };
2371
2389
  }
2372
- },
2373
- style: {
2374
- objectFit: thumbnail.fit === "cover" ? "cover" : "contain",
2375
- ...thumbnail.fit === "fit" ? { maxWidth: "100%", maxHeight: "100%", objectFit: "contain" } : {},
2376
- ...thumbnail.fit === "cover" && slider.direction === "horiz" ? { width: "100%", height: "100%" } : {}
2377
2390
  }
2378
- }
2379
- )
2380
- },
2381
- `${item.image.name}-${index}`
2382
- );
2383
- })
2384
- }
2385
- )
2391
+ const aspectRatio = thumbDims.width / thumbDims.height;
2392
+ if (slider.direction === "horiz") {
2393
+ const heightValue = activeSizeValue;
2394
+ const widthValue = heightValue * aspectRatio;
2395
+ return {
2396
+ width: scalingValue(widthValue, isEditor),
2397
+ height: scalingValue(heightValue, isEditor)
2398
+ };
2399
+ } else {
2400
+ const widthValue = activeSizeValue;
2401
+ const heightValue = widthValue / aspectRatio;
2402
+ return {
2403
+ width: scalingValue(widthValue, isEditor),
2404
+ height: scalingValue(heightValue, isEditor)
2405
+ };
2406
+ }
2407
+ };
2408
+ return /* @__PURE__ */ jsx(
2409
+ "button",
2410
+ {
2411
+ className: classes.thumbItem,
2412
+ style: {
2413
+ ...slider.direction === "horiz" && thumbnail.fit !== "fit" ? { height: scalingValue(activeSizeValue, isEditor) } : {},
2414
+ ...slider.direction === "vert" && thumbnail.fit !== "fit" ? { width: scalingValue(activeSizeValue, isEditor) } : {},
2415
+ ...thumbnail.fit === "cover" ? { width: scalingValue(activeSizeValue, isEditor), height: scalingValue(activeSizeValue, isEditor) } : {},
2416
+ ...getFitDimensions(),
2417
+ transition: isActive ? "all 0.2s ease-out" : "none",
2418
+ opacity: isActive ? thumbnail.activeState.opacity / 100 : thumbnail.opacity / 100,
2419
+ ["--thumb-hover"]: thumbnail.activeState.opacity / 100
2420
+ },
2421
+ onClick: (e) => {
2422
+ var _a;
2423
+ e.stopPropagation();
2424
+ setCurrentIndex(index);
2425
+ (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2426
+ },
2427
+ onMouseEnter: () => {
2428
+ var _a;
2429
+ if (thumbnail.triggers === "hov") {
2430
+ (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2431
+ }
2432
+ },
2433
+ children: /* @__PURE__ */ jsx(
2434
+ "img",
2435
+ {
2436
+ src: item.image.url,
2437
+ alt: item.image.name ?? "",
2438
+ onLoad: (e) => {
2439
+ const img2 = e.currentTarget;
2440
+ if (img2.naturalWidth && img2.naturalHeight) {
2441
+ setThumbnailDimensions((prev) => ({
2442
+ ...prev,
2443
+ [index]: { width: img2.naturalWidth, height: img2.naturalHeight }
2444
+ }));
2445
+ }
2446
+ },
2447
+ style: {
2448
+ objectFit: thumbnail.fit === "cover" ? "cover" : "contain",
2449
+ ...thumbnail.fit === "fit" ? { maxWidth: "100%", maxHeight: "100%", objectFit: "contain" } : {},
2450
+ ...thumbnail.fit === "cover" && slider.direction === "horiz" ? { width: "100%", height: "100%" } : {}
2451
+ }
2452
+ }
2453
+ )
2454
+ },
2455
+ `${item.image.name}-${index}`
2456
+ );
2457
+ })
2458
+ }
2459
+ )
2460
+ }
2461
+ );
2462
+ })()
2386
2463
  ]
2387
2464
  }
2388
2465
  )
@@ -2390,6 +2467,9 @@ const Lightbox = ({ isOpen, onClose, content, lightboxStyles, settings, portalId
2390
2467
  document.getElementById(portalId)
2391
2468
  );
2392
2469
  };
2470
+ function ArrowIcon({ color, className }) {
2471
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 10 18", className, children: /* @__PURE__ */ jsx("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fillRule: "evenodd", children: /* @__PURE__ */ jsx("path", { d: "M-3.70710678,4.29289322 C-3.34662282,3.93240926 -2.77939176,3.90467972 -2.38710056,4.20970461 L-2.29289322,4.29289322 L5,11.585 L12.2928932,4.29289322 C12.6533772,3.93240926 13.2206082,3.90467972 13.6128994,4.20970461 L13.7071068,4.29289322 C14.0675907,4.65337718 14.0953203,5.22060824 13.7902954,5.61289944 L13.7071068,5.70710678 L5.70710678,13.7071068 C5.34662282,14.0675907 4.77939176,14.0953203 4.38710056,13.7902954 L4.29289322,13.7071068 L-3.70710678,5.70710678 C-4.09763107,5.31658249 -4.09763107,4.68341751 -3.70710678,4.29289322 Z", id: "Shape-Copy", fill: color, transform: "translate(5, 9) rotate(-90) translate(-5, -9)" }) }) });
2472
+ }
2393
2473
  const LightboxComponent = {
2394
2474
  element: LightboxGallery,
2395
2475
  id: "lightbox",
@@ -2887,6 +2967,22 @@ const LightboxComponent = {
2887
2967
  }
2888
2968
  }
2889
2969
  }
2970
+ },
2971
+ closeIconColor: {
2972
+ title: "Color",
2973
+ type: "string",
2974
+ display: {
2975
+ type: "settings-color-picker",
2976
+ format: "single"
2977
+ }
2978
+ },
2979
+ closeIconHover: {
2980
+ title: "Hover",
2981
+ type: "string",
2982
+ display: {
2983
+ type: "settings-color-picker",
2984
+ format: "single"
2985
+ }
2890
2986
  }
2891
2987
  }
2892
2988
  },
@@ -2995,7 +3091,7 @@ const LightboxComponent = {
2995
3091
  padding: { top: 0.06, right: 0, bottom: 0.06, left: 0 }
2996
3092
  },
2997
3093
  controls: {
2998
- isActive: true,
3094
+ isActive: false,
2999
3095
  arrowsImgUrl: null,
3000
3096
  offset: { x: 0, y: 0 },
3001
3097
  scale: 1,
@@ -3006,6 +3102,8 @@ const LightboxComponent = {
3006
3102
  color: "rgba(28,31,34,0.9)",
3007
3103
  blur: 0,
3008
3104
  closeIconUrl: null,
3105
+ closeIconColor: "#000000",
3106
+ closeIconHover: "#cccccc",
3009
3107
  closeIconAlign: "top-right",
3010
3108
  closeIconOffset: { x: 0, y: 0 },
3011
3109
  closeIconScale: 1
@@ -3063,7 +3161,7 @@ const LightboxComponent = {
3063
3161
  padding: { top: 0.06, right: 0.05, bottom: 0.06, left: 0.05 }
3064
3162
  },
3065
3163
  controls: {
3066
- isActive: true,
3164
+ isActive: false,
3067
3165
  arrowsImgUrl: null,
3068
3166
  offset: { x: 0, y: 0 },
3069
3167
  scale: 1,
@@ -3074,6 +3172,8 @@ const LightboxComponent = {
3074
3172
  color: "rgba(28,31,34,0.9)",
3075
3173
  blur: 0,
3076
3174
  closeIconUrl: null,
3175
+ closeIconColor: "#000000",
3176
+ closeIconHover: "#cccccc",
3077
3177
  closeIconAlign: "top-right",
3078
3178
  closeIconOffset: { x: 0, y: 0 },
3079
3179
  closeIconScale: 1
@@ -3131,7 +3231,7 @@ const LightboxComponent = {
3131
3231
  padding: { top: 0.06, right: 0.1, bottom: 0.06, left: 0.1 }
3132
3232
  },
3133
3233
  controls: {
3134
- isActive: true,
3234
+ isActive: false,
3135
3235
  arrowsImgUrl: null,
3136
3236
  offset: { x: 0, y: 0 },
3137
3237
  scale: 1,
@@ -3142,6 +3242,8 @@ const LightboxComponent = {
3142
3242
  color: "rgba(28,31,34,0.9)",
3143
3243
  blur: 0,
3144
3244
  closeIconUrl: null,
3245
+ closeIconColor: "#000000",
3246
+ closeIconHover: "#cccccc",
3145
3247
  closeIconAlign: "top-right",
3146
3248
  closeIconOffset: { x: 0, y: 0 },
3147
3249
  closeIconScale: 1
@@ -3426,1352 +3528,10 @@ const LightboxComponent = {
3426
3528
  required: ["settings", "content", "styles"]
3427
3529
  }
3428
3530
  };
3429
- const container = "Testimonials-module__container___H14Dc";
3430
- const wrapper = "Testimonials-module__wrapper___eCRwv";
3431
- const cover = "Testimonials-module__cover___5I7Fh";
3432
- const caption = "Testimonials-module__caption___-YQRG";
3433
- const creds = "Testimonials-module__creds___KKvX1";
3434
- const image = "Testimonials-module__image___nHD1Y";
3435
- const icon = "Testimonials-module__icon___SstqT";
3436
- const arrow = "Testimonials-module__arrow___NO6BN";
3437
- const nextArrow = "Testimonials-module__nextArrow___L3G-W";
3438
- const arrowInner = "Testimonials-module__arrowInner___GSjnA";
3439
- const arrowIcon = "Testimonials-module__arrowIcon___fw7vy";
3440
- const arrowImg = "Testimonials-module__arrowImg___7R9fl";
3441
- const mirror = "Testimonials-module__mirror___JkFna";
3442
- const classes = {
3443
- container,
3444
- wrapper,
3445
- cover,
3446
- caption,
3447
- creds,
3448
- image,
3449
- icon,
3450
- arrow,
3451
- nextArrow,
3452
- arrowInner,
3453
- arrowIcon,
3454
- arrowImg,
3455
- mirror
3456
- };
3457
- function getAlignPosition(alignment, offset, isEditor) {
3458
- const styles2 = {};
3459
- const [vertical, horizontal] = alignment.split("-");
3460
- if (vertical === "top") {
3461
- styles2.top = "0";
3462
- styles2.bottom = "auto";
3463
- } else if (vertical === "middle") {
3464
- styles2.top = "50%";
3465
- styles2.bottom = "auto";
3466
- } else if (vertical === "bottom") {
3467
- styles2.top = "auto";
3468
- styles2.bottom = "0";
3469
- }
3470
- if (horizontal === "left") {
3471
- styles2.left = "0";
3472
- styles2.right = "auto";
3473
- } else if (horizontal === "center") {
3474
- styles2.left = "50%";
3475
- styles2.right = "auto";
3476
- } else if (horizontal === "right") {
3477
- styles2.left = "auto";
3478
- styles2.right = "0";
3479
- }
3480
- if (vertical === "middle" && horizontal === "center") {
3481
- styles2.transform = `translate(calc(-50% + ${scalingValue(offset.x, isEditor)}), calc(-50% + ${scalingValue(offset.y, isEditor)}))`;
3482
- } else if (vertical === "middle") {
3483
- styles2.transform = `translate(${scalingValue(offset.x, isEditor)}, calc(-50% + ${scalingValue(offset.y, isEditor)}))`;
3484
- } else if (horizontal === "center") {
3485
- styles2.transform = `translate(calc(-50% + ${scalingValue(offset.x, isEditor)}), ${scalingValue(offset.y, isEditor)})`;
3486
- } else {
3487
- styles2.transform = `translate(${scalingValue(offset.x, isEditor)}, ${scalingValue(offset.y, isEditor)})`;
3488
- }
3489
- return styles2;
3490
- }
3491
- const parseSpeedToMs = (speed) => {
3492
- if (!speed) return 0;
3493
- const match = speed.match(/^(\d+)(ms|s)$/);
3494
- if (!match) return 0;
3495
- const value = parseInt(match[1], 10);
3496
- const unit = match[2];
3497
- return unit === "s" ? value * 1e3 : value;
3498
- };
3499
- const Testimonials = ({ settings, content, styles: styles2, isEditor }) => {
3500
- const sliderRef = useRef(null);
3501
- const { general, card, controls } = settings;
3502
- const { width, height } = card.dimensions;
3503
- const perMove = settings.general.move === "one" ? 1 : settings.general.inView || 1;
3504
- const perPage = settings.general.inView || 3;
3505
- const isAutoplay = settings.general.autoplay === "on";
3506
- const marqueePerMove = isAutoplay ? 1 : perMove;
3507
- const speedMs = isAutoplay ? settings.general.speed ? parseSpeedToMs(settings.general.speed) : 0 : 500;
3508
- const wrapperWidth = !isAutoplay ? scalingValue(width * perPage + settings.card.gap * (perPage - 1) + card.borders.width * 2 * perPage, isEditor ?? false) : void 0;
3509
- const splideKey = `${general.autoplay}-${general.inView}`;
3510
- useEffect(() => {
3511
- var _a;
3512
- if ((_a = sliderRef.current) == null ? void 0 : _a.splide) {
3513
- const splide = sliderRef.current.splide;
3514
- splide.options = {
3515
- ...splide.options,
3516
- autoplay: isAutoplay,
3517
- perPage,
3518
- perMove: marqueePerMove,
3519
- interval: isAutoplay ? speedMs || 500 : 0,
3520
- rewind: !isAutoplay
3521
- };
3522
- splide.refresh();
3523
- }
3524
- }, [general.autoplay, general.inView, isAutoplay, perPage, marqueePerMove, speedMs]);
3525
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3526
- /* @__PURE__ */ jsx("div", { className: classes.container, style: { justifyContent: settings.general.alignment }, children: /* @__PURE__ */ jsx(
3527
- "div",
3528
- {
3529
- className: `${classes.wrapper}`,
3530
- style: wrapperWidth ? { width: wrapperWidth } : void 0,
3531
- children: /* @__PURE__ */ jsx(
3532
- Splide,
3533
- {
3534
- ref: sliderRef,
3535
- options: {
3536
- type: "loop",
3537
- fixedWidth: scalingValue(width + card.borders.width * 2, isEditor ?? false),
3538
- ...settings.general.autoplay === "off" && {
3539
- perPage,
3540
- width: wrapperWidth
3541
- },
3542
- arrows: false,
3543
- perMove: isAutoplay ? marqueePerMove : perMove,
3544
- gap: scalingValue(settings.card.gap, isEditor ?? false),
3545
- padding: 0,
3546
- drag: false,
3547
- autoplay: isAutoplay,
3548
- speed: speedMs,
3549
- // Transition duration (default to 500ms if not set)
3550
- interval: speedMs,
3551
- // Match speed for continuous marquee flow
3552
- rewind: !isAutoplay,
3553
- // Disable rewind for smooth marquee, enable for manual mode
3554
- easing: "linear",
3555
- direction: settings.general.direction === "left" ? "ltr" : "rtl",
3556
- pagination: false,
3557
- pauseOnHover: settings.general.pause === "hover",
3558
- pauseOnFocus: settings.general.pause === "click"
3559
- },
3560
- children: content.map((item, index) => {
3561
- var _a, _b, _c, _d, _e;
3562
- const iconPositionStyles = getAlignPosition(settings.elements.icon.alignment, settings.elements.icon.offset, isEditor);
3563
- return /* @__PURE__ */ jsx(SplideSlide, { children: /* @__PURE__ */ jsxs(
3564
- "div",
3565
- {
3566
- style: {
3567
- width: scalingValue(width, isEditor ?? false),
3568
- height: scalingValue(height, isEditor ?? false),
3569
- borderRadius: scalingValue(settings.card.corner, isEditor ?? false),
3570
- border: `${scalingValue(settings.card.borders.width, isEditor ?? false)} solid ${settings.card.borders.color}`,
3571
- overflow: "hidden",
3572
- boxSizing: "border-box"
3573
- },
3574
- children: [
3575
- /* @__PURE__ */ jsx(
3576
- "img",
3577
- {
3578
- className: classes.image,
3579
- src: (_a = item.image) == null ? void 0 : _a.url,
3580
- alt: (_b = item.image) == null ? void 0 : _b.name,
3581
- style: { objectFit: ((_c = item.image) == null ? void 0 : _c.objectFit) || "cover" }
3582
- }
3583
- ),
3584
- /* @__PURE__ */ jsx(
3585
- "div",
3586
- {
3587
- className: classes.cover,
3588
- style: { background: settings.card.bgColor, borderRadius: `${scalingValue(settings.card.corner, isEditor ?? false)}` }
3589
- }
3590
- ),
3591
- /* @__PURE__ */ jsxs("div", { children: [
3592
- /* @__PURE__ */ jsx(
3593
- "img",
3594
- {
3595
- src: (_d = item.icon) == null ? void 0 : _d.url,
3596
- alt: (_e = item.icon) == null ? void 0 : _e.name,
3597
- className: classes.icon,
3598
- style: {
3599
- ...iconPositionStyles,
3600
- transform: `${iconPositionStyles.transform || ""} scale(${settings.elements.icon.scale / 100})`
3601
- }
3602
- }
3603
- ),
3604
- /* @__PURE__ */ jsx(
3605
- "div",
3606
- {
3607
- className: classes.caption,
3608
- style: getAlignPosition(settings.elements.text.alignment, settings.elements.text.offset, isEditor),
3609
- children: /* @__PURE__ */ jsx(RichTextRenderer, { content: item.imageCaption })
3610
- }
3611
- ),
3612
- /* @__PURE__ */ jsx(
3613
- "div",
3614
- {
3615
- className: classes.creds,
3616
- style: getAlignPosition(settings.elements.creds.alignment, settings.elements.creds.offset, isEditor),
3617
- children: /* @__PURE__ */ jsx(RichTextRenderer, { content: item.creds })
3618
- }
3619
- )
3620
- ] })
3621
- ]
3622
- }
3623
- ) }, index);
3624
- })
3625
- },
3626
- splideKey
3627
- )
3628
- }
3629
- ) }),
3630
- controls.isActive && /* @__PURE__ */ jsxs(Fragment, { children: [
3631
- /* @__PURE__ */ jsx(
3632
- "div",
3633
- {
3634
- className: classes.arrow,
3635
- style: { color: controls.color, ["--arrow-hover-color"]: controls.hover },
3636
- children: /* @__PURE__ */ jsxs(
3637
- "button",
3638
- {
3639
- className: classes.arrowInner,
3640
- style: { transform: `translate(${scalingValue(controls.offset.x, isEditor ?? false)}, ${scalingValue(controls.offset.y, isEditor ?? false)}) scale(${controls.scale / 100})` },
3641
- onClick: () => {
3642
- var _a;
3643
- return (_a = sliderRef.current) == null ? void 0 : _a.go(isAutoplay ? "-1" : `-${perMove}`);
3644
- },
3645
- "aria-label": "Previous",
3646
- children: [
3647
- controls.arrowsImgUrl && /* @__PURE__ */ jsx(
3648
- SvgImage,
3649
- {
3650
- url: controls.arrowsImgUrl,
3651
- fill: controls.color,
3652
- hoverFill: controls.hover,
3653
- className: cn(classes.arrowImg, classes.mirror)
3654
- }
3655
- ),
3656
- !controls.arrowsImgUrl && /* @__PURE__ */ jsx(ArrowIcon, { color: controls.color, className: cn(classes.arrowIcon, classes.arrowImg, classes.mirror) })
3657
- ]
3658
- }
3659
- )
3660
- }
3661
- ),
3662
- /* @__PURE__ */ jsx(
3663
- "div",
3664
- {
3665
- className: cn(classes.arrow, classes.nextArrow),
3666
- style: { color: controls.color, ["--arrow-hover-color"]: controls.hover },
3667
- children: /* @__PURE__ */ jsxs(
3668
- "button",
3669
- {
3670
- className: classes.arrowInner,
3671
- style: { transform: `translate(${scalingValue(controls.offset.x * -1, isEditor ?? false)}, ${scalingValue(controls.offset.y, isEditor ?? false)}) scale(${controls.scale / 100})` },
3672
- onClick: () => {
3673
- var _a;
3674
- return (_a = sliderRef.current) == null ? void 0 : _a.go(isAutoplay ? "+1" : `+${perMove}`);
3675
- },
3676
- "aria-label": "Next",
3677
- children: [
3678
- controls.arrowsImgUrl && /* @__PURE__ */ jsx(
3679
- SvgImage,
3680
- {
3681
- url: controls.arrowsImgUrl,
3682
- fill: controls.color,
3683
- hoverFill: controls.hover,
3684
- className: classes.arrowImg
3685
- }
3686
- ),
3687
- !controls.arrowsImgUrl && /* @__PURE__ */ jsx(ArrowIcon, { color: controls.color, className: cn(classes.arrowIcon, classes.arrowImg) })
3688
- ]
3689
- }
3690
- )
3691
- }
3692
- )
3693
- ] })
3694
- ] });
3695
- };
3696
- function ArrowIcon({ color, className }) {
3697
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 10 18", className, children: /* @__PURE__ */ jsx("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fillRule: "evenodd", children: /* @__PURE__ */ jsx("path", { d: "M-3.70710678,4.29289322 C-3.34662282,3.93240926 -2.77939176,3.90467972 -2.38710056,4.20970461 L-2.29289322,4.29289322 L5,11.585 L12.2928932,4.29289322 C12.6533772,3.93240926 13.2206082,3.90467972 13.6128994,4.20970461 L13.7071068,4.29289322 C14.0675907,4.65337718 14.0953203,5.22060824 13.7902954,5.61289944 L13.7071068,5.70710678 L5.70710678,13.7071068 C5.34662282,14.0675907 4.77939176,14.0953203 4.38710056,13.7902954 L4.29289322,13.7071068 L-3.70710678,5.70710678 C-4.09763107,5.31658249 -4.09763107,4.68341751 -3.70710678,4.29289322 Z", id: "Shape-Copy", fill: color, transform: "translate(5, 9) rotate(-90) translate(-5, -9)" }) }) });
3698
- }
3699
- const TestimonialsComponent = {
3700
- element: Testimonials,
3701
- id: "testimonials",
3702
- name: "Testimonials",
3703
- preview: {
3704
- type: "video",
3705
- url: "https://cdn.cntrl.site/component-assets/testimonials.mp4"
3706
- },
3707
- defaultSize: {
3708
- width: 700,
3709
- height: 400
3710
- },
3711
- schema: {
3712
- type: "object",
3713
- properties: {
3714
- settings: {
3715
- layoutBased: true,
3716
- type: "object",
3717
- display: {
3718
- type: "settings-block"
3719
- },
3720
- properties: {
3721
- general: {
3722
- icon: "thumbnail",
3723
- type: "object",
3724
- properties: {
3725
- autoplay: {
3726
- type: "string",
3727
- title: "Autoplay",
3728
- display: {
3729
- type: "ratio-group",
3730
- direction: "horizontal"
3731
- },
3732
- enum: ["on", "off"]
3733
- },
3734
- inView: {
3735
- type: "number",
3736
- title: "In View",
3737
- min: 1,
3738
- display: {
3739
- type: "numeric-input"
3740
- }
3741
- },
3742
- alignment: {
3743
- type: "string",
3744
- title: "Alignment",
3745
- display: {
3746
- type: "align-group",
3747
- direction: "vertical"
3748
- },
3749
- enum: ["left", "center", "right"]
3750
- },
3751
- move: {
3752
- type: "string",
3753
- title: "Move",
3754
- display: {
3755
- type: "ratio-group",
3756
- direction: "horizontal"
3757
- },
3758
- enum: ["one", "view"]
3759
- },
3760
- speed: {
3761
- type: ["string", "null"],
3762
- title: "Speed",
3763
- display: {
3764
- type: "step-selector"
3765
- },
3766
- enum: ["100ms", "250ms", "500ms", "1000ms", "1500ms", "2000ms"]
3767
- },
3768
- direction: {
3769
- type: "string",
3770
- display: {
3771
- type: "ratio-group"
3772
- },
3773
- enum: ["left", "right"]
3774
- },
3775
- pause: {
3776
- title: "Pause on",
3777
- type: "string",
3778
- display: {
3779
- type: "ratio-group"
3780
- },
3781
- enum: ["hover", "click", "off"]
3782
- }
3783
- }
3784
- },
3785
- card: {
3786
- icon: "card",
3787
- type: "object",
3788
- properties: {
3789
- dimensions: {
3790
- type: "object",
3791
- title: "Size",
3792
- display: {
3793
- type: "group"
3794
- },
3795
- properties: {
3796
- width: {
3797
- type: "number",
3798
- label: "W",
3799
- scalingEnabled: true,
3800
- display: {
3801
- type: "numeric-input",
3802
- visible: true
3803
- }
3804
- },
3805
- height: {
3806
- type: "number",
3807
- label: "H",
3808
- scalingEnabled: true,
3809
- display: {
3810
- type: "numeric-input",
3811
- visible: true
3812
- }
3813
- }
3814
- }
3815
- },
3816
- gap: {
3817
- type: "number",
3818
- title: "Gap",
3819
- scalingEnabled: true,
3820
- min: 0,
3821
- display: {
3822
- type: "numeric-input"
3823
- }
3824
- },
3825
- corner: {
3826
- type: "number",
3827
- title: "Corners",
3828
- scalingEnabled: true,
3829
- min: 0,
3830
- label: "icon:border-radius",
3831
- display: {
3832
- type: "numeric-input"
3833
- }
3834
- },
3835
- borders: {
3836
- type: "object",
3837
- title: "Borders",
3838
- display: {
3839
- type: "group"
3840
- },
3841
- properties: {
3842
- width: {
3843
- type: "number",
3844
- label: "icon:border-width",
3845
- scalingEnabled: true,
3846
- min: 0,
3847
- display: {
3848
- type: "numeric-input"
3849
- }
3850
- },
3851
- color: {
3852
- type: "string",
3853
- display: {
3854
- type: "settings-color-picker",
3855
- format: "single"
3856
- }
3857
- }
3858
- }
3859
- },
3860
- bgColor: {
3861
- title: "BG color",
3862
- type: "string",
3863
- display: {
3864
- type: "settings-color-picker",
3865
- format: "single"
3866
- }
3867
- }
3868
- }
3869
- },
3870
- elements: {
3871
- title: "elements",
3872
- icon: "star",
3873
- type: "object",
3874
- properties: {
3875
- elements: {
3876
- type: "string",
3877
- display: {
3878
- type: "ratio-group"
3879
- },
3880
- enum: ["text", "icon", "caption"]
3881
- },
3882
- text: {
3883
- type: "object",
3884
- display: {
3885
- type: "group"
3886
- },
3887
- properties: {
3888
- alignment: {
3889
- type: "string",
3890
- display: {
3891
- type: "align-grid",
3892
- visible: true
3893
- },
3894
- enum: ["top-left", "top-center", "top-right", "middle-left", "middle-center", "middle-right", "bottom-left", "bottom-center", "bottom-right"]
3895
- },
3896
- offset: {
3897
- type: "object",
3898
- title: "Offset",
3899
- display: {
3900
- type: "group",
3901
- visible: true
3902
- },
3903
- properties: {
3904
- x: {
3905
- type: "number",
3906
- label: "X",
3907
- scalingEnabled: true,
3908
- display: {
3909
- type: "numeric-input",
3910
- visible: true
3911
- }
3912
- },
3913
- y: {
3914
- type: "number",
3915
- label: "Y",
3916
- scalingEnabled: true,
3917
- display: {
3918
- type: "numeric-input",
3919
- visible: true
3920
- }
3921
- }
3922
- }
3923
- }
3924
- }
3925
- },
3926
- icon: {
3927
- type: "object",
3928
- display: {
3929
- type: "group"
3930
- },
3931
- properties: {
3932
- alignment: {
3933
- type: "string",
3934
- display: {
3935
- type: "align-grid"
3936
- },
3937
- enum: ["top-left", "top-center", "top-right", "middle-left", "middle-center", "middle-right", "bottom-left", "bottom-center", "bottom-right"]
3938
- },
3939
- offset: {
3940
- type: "object",
3941
- title: "Offset",
3942
- display: {
3943
- type: "group"
3944
- },
3945
- properties: {
3946
- x: {
3947
- type: "number",
3948
- label: "X",
3949
- scalingEnabled: true,
3950
- display: {
3951
- type: "numeric-input",
3952
- visible: true
3953
- }
3954
- },
3955
- y: {
3956
- type: "number",
3957
- label: "Y",
3958
- scalingEnabled: true,
3959
- display: {
3960
- type: "numeric-input",
3961
- visible: true
3962
- }
3963
- }
3964
- }
3965
- },
3966
- scale: {
3967
- type: "number",
3968
- title: "scale",
3969
- min: 50,
3970
- max: 600,
3971
- display: {
3972
- type: "range-control",
3973
- visible: false
3974
- }
3975
- }
3976
- }
3977
- },
3978
- creds: {
3979
- type: "object",
3980
- display: {
3981
- type: "group"
3982
- },
3983
- properties: {
3984
- alignment: {
3985
- type: "string",
3986
- display: {
3987
- type: "align-grid"
3988
- },
3989
- enum: ["top-left", "top-center", "top-right", "middle-left", "middle-center", "middle-right", "bottom-left", "bottom-center", "bottom-right"]
3990
- },
3991
- offset: {
3992
- type: "object",
3993
- title: "Offset",
3994
- display: {
3995
- type: "group"
3996
- },
3997
- properties: {
3998
- x: {
3999
- type: "number",
4000
- label: "X",
4001
- scalingEnabled: true,
4002
- display: {
4003
- type: "numeric-input",
4004
- visible: true
4005
- }
4006
- },
4007
- y: {
4008
- type: "number",
4009
- label: "Y",
4010
- scalingEnabled: true,
4011
- display: {
4012
- type: "numeric-input",
4013
- visible: true
4014
- }
4015
- }
4016
- }
4017
- }
4018
- }
4019
- }
4020
- }
4021
- },
4022
- controls: {
4023
- title: "controls",
4024
- icon: "controls",
4025
- tooltip: "Controls",
4026
- type: "object",
4027
- properties: {
4028
- isActive: {
4029
- type: "boolean",
4030
- display: {
4031
- type: "setting-toggle"
4032
- }
4033
- },
4034
- arrowsImgUrl: {
4035
- type: ["string", "null"],
4036
- display: {
4037
- type: "settings-image-input"
4038
- }
4039
- },
4040
- offset: {
4041
- type: "object",
4042
- title: "Offset",
4043
- display: {
4044
- type: "group"
4045
- },
4046
- properties: {
4047
- x: {
4048
- type: "number",
4049
- label: "X",
4050
- scalingEnabled: true,
4051
- display: {
4052
- type: "numeric-input",
4053
- visible: true
4054
- }
4055
- },
4056
- y: {
4057
- type: "number",
4058
- label: "Y",
4059
- scalingEnabled: true,
4060
- display: {
4061
- type: "numeric-input",
4062
- visible: true
4063
- }
4064
- }
4065
- }
4066
- },
4067
- scale: {
4068
- type: "number",
4069
- title: "scale",
4070
- min: 50,
4071
- max: 600,
4072
- display: {
4073
- type: "range-control"
4074
- }
4075
- },
4076
- color: {
4077
- title: "color",
4078
- type: "string",
4079
- display: {
4080
- type: "settings-color-picker",
4081
- format: "single"
4082
- }
4083
- },
4084
- hover: {
4085
- title: "hover",
4086
- type: "string",
4087
- display: {
4088
- type: "settings-color-picker",
4089
- format: "single"
4090
- }
4091
- }
4092
- }
4093
- }
4094
- },
4095
- default: {
4096
- general: {
4097
- autoplay: "off",
4098
- inView: 3,
4099
- alignment: "center",
4100
- move: "one",
4101
- speed: "3s",
4102
- direction: "left",
4103
- pause: "off"
4104
- },
4105
- card: {
4106
- dimensions: {
4107
- width: 0.1,
4108
- height: 0.2
4109
- },
4110
- gap: 0.02,
4111
- corner: 0.01,
4112
- borders: {
4113
- width: 1e-3,
4114
- color: "#000000"
4115
- },
4116
- bgColor: "rgba(255, 255, 255, 0.2)"
4117
- },
4118
- controls: {
4119
- isActive: false,
4120
- arrowsImgUrl: null,
4121
- offset: {
4122
- x: 0,
4123
- y: 0
4124
- },
4125
- scale: 100,
4126
- color: "#000000",
4127
- hover: "#cccccc"
4128
- },
4129
- elements: {
4130
- elements: "text",
4131
- text: {
4132
- alignment: "middle-left",
4133
- offset: {
4134
- x: 0,
4135
- y: 0
4136
- }
4137
- },
4138
- icon: {
4139
- alignment: "top-left",
4140
- offset: {
4141
- x: 0,
4142
- y: 0
4143
- },
4144
- scale: 100
4145
- },
4146
- creds: {
4147
- alignment: "bottom-left",
4148
- offset: {
4149
- x: 0,
4150
- y: 0
4151
- }
4152
- }
4153
- }
4154
- },
4155
- displayRules: [
4156
- {
4157
- if: {
4158
- name: "general.autoplay",
4159
- value: "off"
4160
- },
4161
- then: {
4162
- name: "properties.general.properties.inView.display.visible",
4163
- value: true
4164
- }
4165
- },
4166
- {
4167
- if: {
4168
- name: "general.autoplay",
4169
- value: "off"
4170
- },
4171
- then: {
4172
- name: "properties.general.properties.alignment.display.visible",
4173
- value: true
4174
- }
4175
- },
4176
- {
4177
- if: {
4178
- name: "general.autoplay",
4179
- value: "off"
4180
- },
4181
- then: {
4182
- name: "properties.general.properties.move.display.visible",
4183
- value: true
4184
- }
4185
- },
4186
- {
4187
- if: {
4188
- name: "general.autoplay",
4189
- value: "on"
4190
- },
4191
- then: {
4192
- name: "properties.general.properties.inView.display.visible",
4193
- value: false
4194
- }
4195
- },
4196
- {
4197
- if: {
4198
- name: "general.autoplay",
4199
- value: "on"
4200
- },
4201
- then: {
4202
- name: "properties.general.properties.alignment.display.visible",
4203
- value: false
4204
- }
4205
- },
4206
- {
4207
- if: {
4208
- name: "general.autoplay",
4209
- value: "on"
4210
- },
4211
- then: {
4212
- name: "properties.general.properties.move.display.visible",
4213
- value: false
4214
- }
4215
- },
4216
- {
4217
- if: {
4218
- name: "general.autoplay",
4219
- value: "on"
4220
- },
4221
- then: {
4222
- name: "properties.general.properties.speed.display.visible",
4223
- value: true
4224
- }
4225
- },
4226
- {
4227
- if: {
4228
- name: "general.autoplay",
4229
- value: "on"
4230
- },
4231
- then: {
4232
- name: "properties.general.properties.direction.display.visible",
4233
- value: true
4234
- }
4235
- },
4236
- {
4237
- if: {
4238
- name: "general.autoplay",
4239
- value: "on"
4240
- },
4241
- then: {
4242
- name: "properties.general.properties.pause.display.visible",
4243
- value: true
4244
- }
4245
- },
4246
- {
4247
- if: {
4248
- name: "general.autoplay",
4249
- value: "off"
4250
- },
4251
- then: {
4252
- name: "properties.general.properties.speed.display.visible",
4253
- value: false
4254
- }
4255
- },
4256
- {
4257
- if: {
4258
- name: "general.autoplay",
4259
- value: "off"
4260
- },
4261
- then: {
4262
- name: "properties.general.properties.direction.display.visible",
4263
- value: false
4264
- }
4265
- },
4266
- {
4267
- if: {
4268
- name: "general.autoplay",
4269
- value: "off"
4270
- },
4271
- then: {
4272
- name: "properties.general.properties.pause.display.visible",
4273
- value: false
4274
- }
4275
- },
4276
- {
4277
- if: {
4278
- name: "elements.elements",
4279
- value: "text"
4280
- },
4281
- then: {
4282
- name: "properties.elements.properties.text.properties.alignment.display.visible",
4283
- value: true
4284
- }
4285
- },
4286
- {
4287
- if: {
4288
- name: "elements.elements",
4289
- value: "text"
4290
- },
4291
- then: {
4292
- name: "properties.elements.properties.text.properties.offset.display.visible",
4293
- value: true
4294
- }
4295
- },
4296
- {
4297
- if: {
4298
- name: "elements.elements",
4299
- value: "text"
4300
- },
4301
- then: {
4302
- name: "properties.elements.properties.icon.properties.alignment.display.visible",
4303
- value: false
4304
- }
4305
- },
4306
- {
4307
- if: {
4308
- name: "elements.elements",
4309
- value: "text"
4310
- },
4311
- then: {
4312
- name: "properties.elements.properties.icon.properties.offset.display.visible",
4313
- value: false
4314
- }
4315
- },
4316
- {
4317
- if: {
4318
- name: "elements.elements",
4319
- value: "text"
4320
- },
4321
- then: {
4322
- name: "properties.elements.properties.creds.properties.alignment.display.visible",
4323
- value: false
4324
- }
4325
- },
4326
- {
4327
- if: {
4328
- name: "elements.elements",
4329
- value: "text"
4330
- },
4331
- then: {
4332
- name: "properties.elements.properties.creds.properties.offset.display.visible",
4333
- value: false
4334
- }
4335
- },
4336
- {
4337
- if: {
4338
- name: "elements.elements",
4339
- value: "icon"
4340
- },
4341
- then: {
4342
- name: "properties.elements.properties.icon.properties.alignment.display.visible",
4343
- value: true
4344
- }
4345
- },
4346
- {
4347
- if: {
4348
- name: "elements.elements",
4349
- value: "icon"
4350
- },
4351
- then: {
4352
- name: "properties.elements.properties.icon.properties.offset.display.visible",
4353
- value: true
4354
- }
4355
- },
4356
- {
4357
- if: {
4358
- name: "elements.elements",
4359
- value: "icon"
4360
- },
4361
- then: {
4362
- name: "properties.elements.properties.text.properties.alignment.display.visible",
4363
- value: false
4364
- }
4365
- },
4366
- {
4367
- if: {
4368
- name: "elements.elements",
4369
- value: "icon"
4370
- },
4371
- then: {
4372
- name: "properties.elements.properties.text.properties.offset.display.visible",
4373
- value: false
4374
- }
4375
- },
4376
- {
4377
- if: {
4378
- name: "elements.elements",
4379
- value: "icon"
4380
- },
4381
- then: {
4382
- name: "properties.elements.properties.creds.properties.alignment.display.visible",
4383
- value: false
4384
- }
4385
- },
4386
- {
4387
- if: {
4388
- name: "elements.elements",
4389
- value: "icon"
4390
- },
4391
- then: {
4392
- name: "properties.elements.properties.creds.properties.offset.display.visible",
4393
- value: false
4394
- }
4395
- },
4396
- {
4397
- if: {
4398
- name: "elements.elements",
4399
- value: "caption"
4400
- },
4401
- then: {
4402
- name: "properties.elements.properties.creds.properties.alignment.display.visible",
4403
- value: true
4404
- }
4405
- },
4406
- {
4407
- if: {
4408
- name: "elements.elements",
4409
- value: "caption"
4410
- },
4411
- then: {
4412
- name: "properties.elements.properties.creds.properties.offset.display.visible",
4413
- value: true
4414
- }
4415
- },
4416
- {
4417
- if: {
4418
- name: "elements.elements",
4419
- value: "caption"
4420
- },
4421
- then: {
4422
- name: "properties.elements.properties.text.properties.alignment.display.visible",
4423
- value: false
4424
- }
4425
- },
4426
- {
4427
- if: {
4428
- name: "elements.elements",
4429
- value: "caption"
4430
- },
4431
- then: {
4432
- name: "properties.elements.properties.text.properties.offset.display.visible",
4433
- value: false
4434
- }
4435
- },
4436
- {
4437
- if: {
4438
- name: "elements.elements",
4439
- value: "caption"
4440
- },
4441
- then: {
4442
- name: "properties.elements.properties.icon.properties.alignment.display.visible",
4443
- value: false
4444
- }
4445
- },
4446
- {
4447
- if: {
4448
- name: "elements.elements",
4449
- value: "caption"
4450
- },
4451
- then: {
4452
- name: "properties.elements.properties.icon.properties.offset.display.visible",
4453
- value: false
4454
- }
4455
- },
4456
- {
4457
- if: {
4458
- name: "elements.elements",
4459
- value: "icon"
4460
- },
4461
- then: {
4462
- name: "properties.elements.properties.icon.properties.scale.display.visible",
4463
- value: true
4464
- }
4465
- },
4466
- {
4467
- if: {
4468
- name: "elements.elements",
4469
- value: "text"
4470
- },
4471
- then: {
4472
- name: "properties.elements.properties.icon.properties.scale.display.visible",
4473
- value: false
4474
- }
4475
- },
4476
- {
4477
- if: {
4478
- name: "elements.elements",
4479
- value: "caption"
4480
- },
4481
- then: {
4482
- name: "properties.elements.properties.icon.properties.scale.display.visible",
4483
- value: false
4484
- }
4485
- }
4486
- ]
4487
- },
4488
- content: {
4489
- layoutBased: false,
4490
- type: "array",
4491
- settings: {
4492
- addItemFromFileExplorer: true,
4493
- defaultWidth: 500
4494
- },
4495
- items: {
4496
- type: "object",
4497
- properties: {
4498
- image: {
4499
- type: "object",
4500
- label: "Image",
4501
- display: {
4502
- minWidth: 58,
4503
- maxWidth: 108,
4504
- type: "media-input"
4505
- },
4506
- properties: {
4507
- url: {
4508
- type: "string"
4509
- },
4510
- name: {
4511
- type: "string"
4512
- },
4513
- objectFit: {
4514
- type: "string",
4515
- enum: ["cover", "contain"]
4516
- }
4517
- },
4518
- required: ["url", "name"]
4519
- },
4520
- icon: {
4521
- type: "object",
4522
- label: "Icon",
4523
- display: {
4524
- minWidth: 58,
4525
- maxWidth: 108,
4526
- type: "media-input"
4527
- },
4528
- properties: {
4529
- url: {
4530
- type: "string"
4531
- },
4532
- name: {
4533
- type: "string"
4534
- },
4535
- objectFit: {
4536
- type: "string",
4537
- enum: ["cover", "contain"]
4538
- }
4539
- },
4540
- required: ["url", "name"]
4541
- },
4542
- imageCaption: {
4543
- placeholder: "Add Text...",
4544
- label: "Text",
4545
- display: {
4546
- type: "rich-text",
4547
- minWidth: 300,
4548
- maxWidth: 550
4549
- }
4550
- },
4551
- creds: {
4552
- placeholder: "Add Caption...",
4553
- label: "Caption",
4554
- display: {
4555
- type: "rich-text",
4556
- minWidth: 300,
4557
- maxWidth: 550
4558
- }
4559
- }
4560
- },
4561
- required: ["image"]
4562
- },
4563
- default: [
4564
- {
4565
- image: {
4566
- objectFit: "cover",
4567
- url: "https://cdn.cntrl.site/component-assets/2.jpg",
4568
- name: "Testimonial-1.png"
4569
- },
4570
- icon: {
4571
- objectFit: "cover",
4572
- url: "https://cdn.cntrl.site/projects/01GJ2SPNXG3V5P35ZA35YM1JTW/articles-assets/01KEXYWFPR7GB70E4YBF28T8R6.png",
4573
- name: ""
4574
- },
4575
- imageCaption: [
4576
- {
4577
- type: "paragraph",
4578
- children: [{ text: "" }]
4579
- }
4580
- ],
4581
- creds: [
4582
- {
4583
- type: "paragraph",
4584
- children: [{ text: "" }]
4585
- }
4586
- ]
4587
- },
4588
- {
4589
- image: {
4590
- objectFit: "cover",
4591
- url: "https://cdn.cntrl.site/component-assets/3.jpg",
4592
- name: "Testimonial-2.png"
4593
- },
4594
- icon: {
4595
- objectFit: "cover",
4596
- url: "https://cdn.cntrl.site/projects/01GJ2SPNXG3V5P35ZA35YM1JTW/articles-assets/01KEXYWFPR7GB70E4YBF28T8R6.png",
4597
- name: ""
4598
- },
4599
- imageCaption: [
4600
- {
4601
- type: "paragraph",
4602
- children: [{ text: "" }]
4603
- }
4604
- ],
4605
- creds: [
4606
- {
4607
- type: "paragraph",
4608
- children: [{ text: "" }]
4609
- }
4610
- ]
4611
- },
4612
- {
4613
- image: {
4614
- objectFit: "cover",
4615
- url: "https://cdn.cntrl.site/component-assets/4.jpg",
4616
- name: "Testimonial-3.png"
4617
- },
4618
- icon: {
4619
- objectFit: "cover",
4620
- url: "https://cdn.cntrl.site/projects/01GJ2SPNXG3V5P35ZA35YM1JTW/articles-assets/01KEXYWFPR7GB70E4YBF28T8R6.png",
4621
- name: ""
4622
- },
4623
- imageCaption: [
4624
- {
4625
- type: "paragraph",
4626
- children: [{ text: "" }]
4627
- }
4628
- ],
4629
- creds: [
4630
- {
4631
- type: "paragraph",
4632
- children: [{ text: "" }]
4633
- }
4634
- ]
4635
- }
4636
- ]
4637
- },
4638
- styles: {
4639
- layoutBased: true,
4640
- type: "object",
4641
- properties: {
4642
- caption: {
4643
- dataName: "caption",
4644
- type: "object",
4645
- properties: {
4646
- fontSettings: {
4647
- type: "object",
4648
- display: {
4649
- type: "font-settings"
4650
- },
4651
- properties: {
4652
- fontFamily: {
4653
- type: "string"
4654
- },
4655
- fontWeight: {
4656
- type: "number"
4657
- },
4658
- fontStyle: {
4659
- type: "string"
4660
- }
4661
- }
4662
- },
4663
- widthSettings: {
4664
- display: {
4665
- type: "text-width-control"
4666
- },
4667
- type: "object",
4668
- properties: {
4669
- width: {
4670
- type: "number"
4671
- },
4672
- sizing: {
4673
- type: "string",
4674
- enum: ["auto", "manual"]
4675
- }
4676
- }
4677
- },
4678
- fontSizeLineHeight: {
4679
- type: "object",
4680
- display: {
4681
- type: "font-size-line-height"
4682
- },
4683
- properties: {
4684
- fontSize: {
4685
- type: "number"
4686
- },
4687
- lineHeight: {
4688
- type: "number"
4689
- }
4690
- }
4691
- },
4692
- letterSpacing: {
4693
- display: {
4694
- type: "letter-spacing-input"
4695
- },
4696
- type: "number"
4697
- },
4698
- wordSpacing: {
4699
- display: {
4700
- type: "word-spacing-input"
4701
- },
4702
- type: "number"
4703
- },
4704
- textAlign: {
4705
- display: {
4706
- type: "text-align-control"
4707
- },
4708
- type: "string",
4709
- enum: ["left", "center", "right"]
4710
- },
4711
- textAppearance: {
4712
- display: {
4713
- type: "text-appearance"
4714
- },
4715
- properties: {
4716
- textTransform: {
4717
- type: "string",
4718
- enum: ["none", "uppercase", "lowercase"]
4719
- },
4720
- textDecoration: {
4721
- type: "string",
4722
- enum: ["none", "underline"]
4723
- },
4724
- fontVariant: {
4725
- type: "string",
4726
- enum: ["normal", "small-caps"]
4727
- }
4728
- }
4729
- },
4730
- color: {
4731
- display: {
4732
- type: "style-panel-color-picker"
4733
- },
4734
- type: "string"
4735
- }
4736
- }
4737
- }
4738
- },
4739
- default: {
4740
- caption: {
4741
- widthSettings: {
4742
- width: 0.13,
4743
- sizing: "auto"
4744
- },
4745
- fontSettings: {
4746
- fontFamily: "Arial",
4747
- fontWeight: 400,
4748
- fontStyle: "normal"
4749
- },
4750
- fontSizeLineHeight: {
4751
- fontSize: 0.02,
4752
- lineHeight: 0.02
4753
- },
4754
- letterSpacing: 0,
4755
- wordSpacing: 0,
4756
- textAlign: "left",
4757
- textAppearance: {
4758
- textTransform: "none",
4759
- textDecoration: "none",
4760
- fontVariant: "normal"
4761
- },
4762
- color: "#000000"
4763
- }
4764
- }
4765
- }
4766
- },
4767
- required: ["settings", "content", "styles"]
4768
- }
4769
- };
4770
3531
  const components = [
4771
3532
  ControlSliderComponent,
4772
3533
  ControlImageRevealSliderComponent,
4773
- LightboxComponent,
4774
- TestimonialsComponent
3534
+ LightboxComponent
4775
3535
  ];
4776
3536
  export {
4777
3537
  components