@cntrl-site/components 0.1.0-alpha.23 → 0.1.0-alpha.25

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.
@@ -39,6 +39,7 @@ type Padding = {
39
39
  type Triggers = {
40
40
  type: 'click' | 'drag';
41
41
  switch: 'image' | '50/50';
42
+ repeat: 'close' | 'loop';
42
43
  };
43
44
  type LightboxSettings = {
44
45
  thumbnailBlock: {
@@ -51,7 +52,6 @@ type LightboxSettings = {
51
52
  type: 'slide in' | 'fade in' | 'mix';
52
53
  duration: string;
53
54
  direction: 'top' | 'bottom' | 'left' | 'right';
54
- repeat: 'close' | 'loop';
55
55
  };
56
56
  triggers: Triggers;
57
57
  slider: {
@@ -1 +1 @@
1
- .ControlSlider-module__wrapper___sHEkd{position:relative;width:100%;height:100%}.ControlSlider-module__slider___R3i9-{width:100%;height:100%}.ControlSlider-module__sliderItems___1MgPL{display:flex;overflow:hidden;width:100%;height:100%;transition:transform .3s ease-in-out}.ControlSlider-module__sliderItem___QQSkR{width:100%;height:100%;display:flex;position:relative}.ControlSlider-module__sliderImage___9hRl-{width:100%;height:100%;object-fit:cover}.ControlSlider-module__arrow___05ghY{position:absolute;display:flex;align-items:center;justify-content:center;border:none;background-color:transparent;top:50%;left:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);z-index:1;transform:translate(-50%,-50%);padding:0;width:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw);height:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw)}.ControlSlider-module__arrow___05ghY.ControlSlider-module__arrowVertical___tBfVN{left:50%;top:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);transform:translate(-50%,-50%)}.ControlSlider-module__nextArrow___-30Yc{left:unset;right:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);transform:translate(50%,-50%)}.ControlSlider-module__nextArrow___-30Yc.ControlSlider-module__arrowVertical___tBfVN{left:50%;right:unset;top:unset;bottom:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);transform:translate(-50%,50%)}.ControlSlider-module__arrowInner___aEra3{all:unset;cursor:pointer;width:100%;height:100%}.ControlSlider-module__arrowInner___aEra3:hover .ControlSlider-module__arrowIcon___S4ztF path{fill:var(--arrow-hover-color)!important}.ControlSlider-module__arrowImg___2dwJW{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.ControlSlider-module__arrowIcon___S4ztF{width:100%;height:100%}.ControlSlider-module__arrowIcon___S4ztF path{transition:fill .15s ease-in-out}.ControlSlider-module__mirror___brd6U{transform:translate(-50%,-50%) scaleX(-1)!important}.ControlSlider-module__arrowVertical___tBfVN.ControlSlider-module__mirror___brd6U{transform:translate(-50%,-50%) scaleY(-1)!important}.ControlSlider-module__pagination___bicLF{position:absolute;z-index:1;border-radius:50%}.ControlSlider-module__paginationInner___bT-P-{display:flex;gap:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);padding-top:calc(var(--is-editor, 0) * .6944444444vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * .6944444444vw);padding-bottom:calc(var(--is-editor, 0) * .6944444444vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * .6944444444vw);padding-left:calc(var(--is-editor, 0) * 1.25vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.25vw);padding-right:calc(var(--is-editor, 0) * 1.25vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.25vw);border-radius:calc(var(--is-editor, 0) * 2.3611111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.3611111111vw)}.ControlSlider-module__paginationVertical___zYqKw{flex-direction:column}.ControlSlider-module__paginationItem___nTRbk{all:unset;flex-shrink:0;position:relative;width:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);height:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);cursor:pointer}.ControlSlider-module__paginationItem___nTRbk:hover .ControlSlider-module__dot___p1Qun{background-color:var(--pagination-hover-color)!important}.ControlSlider-module__dot___p1Qun{border-radius:50%;scale:.5;transition:background-color .3s ease-in-out,transform .3s ease-in-out;width:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);height:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw)}.ControlSlider-module__activeDot___LHFaj{transform:scale(2)}.ControlSlider-module__paginationInsideBottom___R3FWn{bottom:0;left:50%;transform:translate(-50%)}.ControlSlider-module__paginationInsideTop___V-qb-{left:50%;transform:translate(-50%);top:0}.ControlSlider-module__paginationOutsideBottom___14w8D{left:50%;transform:translate(-50%);bottom:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationOutsideTop___SCLqB{left:50%;transform:translate(-50%);top:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationInsideLeft___yOBRZ{top:50%;transform:translateY(-50%);left:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationInsideRight___Rtt3o{top:50%;transform:translateY(-50%);right:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationOutsideLeft___lahaw{top:50%;transform:translateY(-50%);left:calc(var(--is-editor, 0) * -5.4861111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -5.4861111111vw)}.ControlSlider-module__paginationOutsideRight___EtuQa{top:50%;transform:translateY(-50%);right:calc(var(--is-editor, 0) * -5.4861111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -5.4861111111vw)}.ControlSlider-module__imgWrapper___UjEgB,.ControlSlider-module__wrapperInner___DLAWV{width:100%;height:100%}.ControlSlider-module__captionBlock___dJ6-j{pointer-events:none;position:absolute;top:0;z-index:1;left:0;right:0;bottom:0}.ControlSlider-module__captionTextWrapper___HFlpf{position:relative;width:100%;height:100%}.ControlSlider-module__captionText___uGBVc{pointer-events:none;max-width:100%;transition-property:opacity;transition-timing-function:ease-in-out;position:absolute;display:inline-block;white-space:pre-wrap;overflow-wrap:break-word;opacity:0}.ControlSlider-module__captionText___uGBVc.ControlSlider-module__active___WZK4G{opacity:1}.ControlSlider-module__withPointerEvents___t-18M{pointer-events:auto}.ControlSlider-module__absolute___KxmYB{position:absolute}.ControlSlider-module__topLeftAlignment___zjnGM{top:0;left:0}.ControlSlider-module__topCenterAlignment___gD1xW{top:0;left:50%;transform:translate(-50%)}.ControlSlider-module__topRightAlignment___NMapS{top:0;right:0}.ControlSlider-module__middleLeftAlignment___OnUrY{top:50%;transform:translateY(-50%);left:0}.ControlSlider-module__middleCenterAlignment___Tdkl0{top:50%;transform:translate(-50%,-50%);left:50%}.ControlSlider-module__middleRightAlignment___wEbfX{top:50%;transform:translateY(-50%);right:0}.ControlSlider-module__bottomLeftAlignment___cTP2-{bottom:0;left:0}.ControlSlider-module__bottomCenterAlignment___c54fB{bottom:0;left:50%;transform:translate(-50%)}.ControlSlider-module__bottomRightAlignment___kEwrz{bottom:0;right:0}.ControlSlider-module__clickOverlay___DZA28{position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer}.ControlSlider-module__contain___pLyq7{object-fit:contain}.ControlSlider-module__cover___KdDat{object-fit:cover}.RichTextRenderer-module__link___BWeZ2{color:inherit;cursor:pointer;pointer-events:auto;transition:color .2s ease}.RichTextRenderer-module__link___BWeZ2:hover{color:var(--link-hover-color)}.SvgImage-module__svg___q3xE-{width:100%;height:100%;color:transparent;display:inline-block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--fill);transition:background-color .2s;-webkit-mask:var(--svg) no-repeat center/contain;mask:var(--svg) no-repeat center/contain}.SvgImage-module__svg___q3xE-:hover{background-color:var(--hover-fill)}.SvgImage-module__img___VsTm-{width:100%;height:100%;object-fit:contain}.ImageRevealSlider-module__imageRevealSlider___UE5Ob{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.ImageRevealSlider-module__image___Qjt-e{width:100%;height:100%;object-fit:cover;position:relative;-webkit-user-select:none;user-select:none;pointer-events:none}.ImageRevealSlider-module__link___N-iLG{width:100%;height:100%;display:block}.Lightbox-module__background___wf1Ii{position:absolute;z-index:9997;width:100%;height:100%;top:0;left:0}.Lightbox-module__backdropStyle___y7avj{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:9998}.Lightbox-module__editor___Vh82D{width:var(--cntrl-article-width)!important;margin-left:auto;margin-right:auto}.Lightbox-module__contentStyle___FzFaW{position:relative;width:100%;max-width:100vw;max-height:100vh;height:100vh;overflow:auto;background:transparent;box-sizing:border-box}.Lightbox-module__imageStyle___Qb7f5{position:relative;display:block;cursor:pointer;background-color:transparent;max-width:100%;max-height:100%;width:auto;height:auto}.Lightbox-module__imgWrapper___cdytV{position:relative;display:flex;width:100%;height:100%;overflow:hidden;box-sizing:border-box}.Lightbox-module__contain___5gATW{object-fit:contain;max-width:100%;max-height:100%}.Lightbox-module__cover___8HZy7{width:100%;height:100%;object-fit:cover}.Lightbox-module__caption___3e-22{z-index:9999;position:absolute;display:flex}.Lightbox-module__caption___3e-22:hover{color:var(--link-hover-color)!important}.Lightbox-module__captionBlock___7wXOq{pointer-events:none;position:absolute;top:0;z-index:1;left:0;right:0;bottom:0}.Lightbox-module__captionTextWrapper___uDnh6{position:relative;width:100%;height:100%}.Lightbox-module__captionText___6zbmg{pointer-events:none;max-width:100%;transition-property:opacity;transition-timing-function:ease-in-out;position:absolute;display:inline-block;white-space:pre-wrap;overflow-wrap:break-word;opacity:0}.Lightbox-module__captionText___6zbmg.Lightbox-module__active___u7Yu8{opacity:1}.Lightbox-module__lightboxSplide___yMC4v.splide,.Lightbox-module__lightboxSplide___yMC4v .splide__track{height:100%}.Lightbox-module__arrow___s3Bn2{position:absolute;display:flex;align-items:center;justify-content:center;cursor:pointer;border:none;background-color:transparent;top:50%;z-index:1;transform:translate(-50%,-50%);padding:0;left:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);width:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw);height:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw)}.Lightbox-module__arrow___s3Bn2.Lightbox-module__arrowVertical___6ztxz{left:50%;top:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);transform:translate(-50%,-50%)}.Lightbox-module__nextArrow___i23DU{left:unset;right:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);transform:translate(50%,-50%)}.Lightbox-module__nextArrow___i23DU.Lightbox-module__arrowVertical___6ztxz{left:50%;right:unset;top:unset;bottom:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);transform:translate(-50%,50%)}.Lightbox-module__arrowInner___Mm3xe{all:unset;cursor:pointer;width:100%;height:100%}.Lightbox-module__arrowInner___Mm3xe:hover .Lightbox-module__arrowIcon___UpzOt path{fill:var(--arrow-hover-color)!important}.Lightbox-module__arrowImg___UxHPR{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.Lightbox-module__mirror___50NCE{transform:translate(-50%,-50%) scaleX(-1)!important}.Lightbox-module__arrowVertical___6ztxz.Lightbox-module__mirror___50NCE{transform:translate(-50%,-50%) scaleY(-1)!important}.Lightbox-module__thumbsContainerVertical___lVaf-{flex-direction:column;display:flex}.Lightbox-module__thumbsContainer___DqOCP{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:auto}.Lightbox-module__thumbsAlignStart___uiFIV{align-items:flex-start}.Lightbox-module__thumbsAlignCenter___sbUPA{align-items:center}.Lightbox-module__thumbsAlignEnd___OA9N4{align-items:flex-end}.Lightbox-module__thumbItem___zROyu{all:unset;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;transition:transform .1s ease,opacity .1s ease}.Lightbox-module__thumbItem___zROyu:hover{opacity:var(--thumb-hover)!important}.Lightbox-module__closeButton___r3Dur{all:unset;cursor:pointer;position:absolute;width:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw);height:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw)}@keyframes Lightbox-module__lbFadeIn___3xoHQ{0%{opacity:0}to{opacity:1}}.Lightbox-module__fadeIn___sHwRK{animation-name:Lightbox-module__lbFadeIn___3xoHQ}@keyframes Lightbox-module__lbSlideInLeft___vgE9-{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes Lightbox-module__lbSlideInRight___nByIA{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes Lightbox-module__lbSlideInTop___hI5ju{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes Lightbox-module__lbSlideInBottom___M6-9o{0%{transform:translateY(100%)}to{transform:translateY(0)}}.Lightbox-module__slideInLeft___P-XRo{animation-name:Lightbox-module__lbSlideInLeft___vgE9-}.Lightbox-module__slideInRight___ZQqFi{animation-name:Lightbox-module__lbSlideInRight___nByIA}.Lightbox-module__slideInTop___XRKCs{animation-name:Lightbox-module__lbSlideInTop___hI5ju}.Lightbox-module__slideInBottom___TYOBS{animation-name:Lightbox-module__lbSlideInBottom___M6-9o}.Lightbox-module__lightboxSplide___yMC4v.splide--fade .Lightbox-module__scaleSlide___wS7d4{opacity:0!important;transform:var(--position-transform, none) scale(.9)!important;transition:opacity var(--splide-speed, .5s) ease,transform var(--splide-speed, .5s) ease!important}.Lightbox-module__lightboxSplide___yMC4v.splide--fade .splide__slide.is-active .Lightbox-module__scaleSlide___wS7d4{opacity:1!important;transform:var(--position-transform, none) scale(1)!important}.Lightbox-module__lightboxSplide___yMC4v.splide--fade .splide__slide:not(.is-active) .Lightbox-module__scaleSlide___wS7d4{opacity:0!important;transform:var(--position-transform, none) scale(1.1)!important}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports (outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports (outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
1
+ .ControlSlider-module__wrapper___sHEkd{position:relative;width:100%;height:100%}.ControlSlider-module__slider___R3i9-{width:100%;height:100%}.ControlSlider-module__sliderItems___1MgPL{display:flex;overflow:hidden;width:100%;height:100%;transition:transform .3s ease-in-out}.ControlSlider-module__sliderItem___QQSkR{width:100%;height:100%;display:flex;position:relative}.ControlSlider-module__sliderImage___9hRl-{width:100%;height:100%;object-fit:cover}.ControlSlider-module__arrow___05ghY{position:absolute;display:flex;align-items:center;justify-content:center;border:none;background-color:transparent;top:50%;left:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);z-index:1;transform:translate(-50%,-50%);padding:0;width:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw);height:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw)}.ControlSlider-module__arrow___05ghY.ControlSlider-module__arrowVertical___tBfVN{left:50%;top:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);transform:translate(-50%,-50%)}.ControlSlider-module__nextArrow___-30Yc{left:unset;right:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);transform:translate(50%,-50%)}.ControlSlider-module__nextArrow___-30Yc.ControlSlider-module__arrowVertical___tBfVN{left:50%;right:unset;top:unset;bottom:calc(var(--is-editor, 0) * -1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -1.3888888889vw);transform:translate(-50%,50%)}.ControlSlider-module__arrowInner___aEra3{all:unset;cursor:pointer;width:100%;height:100%}.ControlSlider-module__arrowInner___aEra3:hover .ControlSlider-module__arrowIcon___S4ztF path{fill:var(--arrow-hover-color)!important}.ControlSlider-module__arrowImg___2dwJW{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.ControlSlider-module__arrowIcon___S4ztF{width:100%;height:100%}.ControlSlider-module__arrowIcon___S4ztF path{transition:fill .15s ease-in-out}.ControlSlider-module__mirror___brd6U{transform:translate(-50%,-50%) scaleX(-1)!important}.ControlSlider-module__arrowVertical___tBfVN.ControlSlider-module__mirror___brd6U{transform:translate(-50%,-50%) scaleY(-1)!important}.ControlSlider-module__pagination___bicLF{position:absolute;z-index:1;border-radius:50%}.ControlSlider-module__paginationInner___bT-P-{display:flex;gap:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);padding-top:calc(var(--is-editor, 0) * .6944444444vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * .6944444444vw);padding-bottom:calc(var(--is-editor, 0) * .6944444444vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * .6944444444vw);padding-left:calc(var(--is-editor, 0) * 1.25vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.25vw);padding-right:calc(var(--is-editor, 0) * 1.25vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.25vw);border-radius:calc(var(--is-editor, 0) * 2.3611111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.3611111111vw)}.ControlSlider-module__paginationVertical___zYqKw{flex-direction:column}.ControlSlider-module__paginationItem___nTRbk{all:unset;flex-shrink:0;position:relative;width:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);height:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);cursor:pointer}.ControlSlider-module__paginationItem___nTRbk:hover .ControlSlider-module__dot___p1Qun{background-color:var(--pagination-hover-color)!important}.ControlSlider-module__dot___p1Qun{border-radius:50%;scale:.5;transition:background-color .3s ease-in-out,transform .3s ease-in-out;width:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw);height:calc(var(--is-editor, 0) * 1.1111111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.1111111111vw)}.ControlSlider-module__activeDot___LHFaj{transform:scale(2)}.ControlSlider-module__paginationInsideBottom___R3FWn{bottom:0;left:50%;transform:translate(-50%)}.ControlSlider-module__paginationInsideTop___V-qb-{left:50%;transform:translate(-50%);top:0}.ControlSlider-module__paginationOutsideBottom___14w8D{left:50%;transform:translate(-50%);bottom:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationOutsideTop___SCLqB{left:50%;transform:translate(-50%);top:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationInsideLeft___yOBRZ{top:50%;transform:translateY(-50%);left:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationInsideRight___Rtt3o{top:50%;transform:translateY(-50%);right:calc(var(--is-editor, 0) * -2.4305555556vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -2.4305555556vw)}.ControlSlider-module__paginationOutsideLeft___lahaw{top:50%;transform:translateY(-50%);left:calc(var(--is-editor, 0) * -5.4861111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -5.4861111111vw)}.ControlSlider-module__paginationOutsideRight___EtuQa{top:50%;transform:translateY(-50%);right:calc(var(--is-editor, 0) * -5.4861111111vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * -5.4861111111vw)}.ControlSlider-module__imgWrapper___UjEgB,.ControlSlider-module__wrapperInner___DLAWV{width:100%;height:100%}.ControlSlider-module__captionBlock___dJ6-j{pointer-events:none;position:absolute;top:0;z-index:1;left:0;right:0;bottom:0}.ControlSlider-module__captionTextWrapper___HFlpf{position:relative;width:100%;height:100%}.ControlSlider-module__captionText___uGBVc{pointer-events:none;max-width:100%;transition-property:opacity;transition-timing-function:ease-in-out;position:absolute;display:inline-block;white-space:pre-wrap;overflow-wrap:break-word;opacity:0}.ControlSlider-module__captionText___uGBVc.ControlSlider-module__active___WZK4G{opacity:1}.ControlSlider-module__withPointerEvents___t-18M{pointer-events:auto}.ControlSlider-module__absolute___KxmYB{position:absolute}.ControlSlider-module__topLeftAlignment___zjnGM{top:0;left:0}.ControlSlider-module__topCenterAlignment___gD1xW{top:0;left:50%;transform:translate(-50%)}.ControlSlider-module__topRightAlignment___NMapS{top:0;right:0}.ControlSlider-module__middleLeftAlignment___OnUrY{top:50%;transform:translateY(-50%);left:0}.ControlSlider-module__middleCenterAlignment___Tdkl0{top:50%;transform:translate(-50%,-50%);left:50%}.ControlSlider-module__middleRightAlignment___wEbfX{top:50%;transform:translateY(-50%);right:0}.ControlSlider-module__bottomLeftAlignment___cTP2-{bottom:0;left:0}.ControlSlider-module__bottomCenterAlignment___c54fB{bottom:0;left:50%;transform:translate(-50%)}.ControlSlider-module__bottomRightAlignment___kEwrz{bottom:0;right:0}.ControlSlider-module__clickOverlay___DZA28{position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer}.ControlSlider-module__contain___pLyq7{object-fit:contain}.ControlSlider-module__cover___KdDat{object-fit:cover}.RichTextRenderer-module__link___BWeZ2{color:inherit;cursor:pointer;pointer-events:auto;transition:color .2s ease}.RichTextRenderer-module__link___BWeZ2:hover{color:var(--link-hover-color)}.SvgImage-module__svg___q3xE-{width:100%;height:100%;color:transparent;display:inline-block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:var(--fill);transition:background-color .2s;-webkit-mask:var(--svg) no-repeat center/contain;mask:var(--svg) no-repeat center/contain}.SvgImage-module__svg___q3xE-:hover{background-color:var(--hover-fill)}.SvgImage-module__img___VsTm-{width:100%;height:100%;object-fit:contain}.ImageRevealSlider-module__imageRevealSlider___UE5Ob{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.ImageRevealSlider-module__image___Qjt-e{width:100%;height:100%;object-fit:cover;position:relative;-webkit-user-select:none;user-select:none;pointer-events:none}.ImageRevealSlider-module__link___N-iLG{width:100%;height:100%;display:block}.Lightbox-module__background___wf1Ii{position:absolute;z-index:9997;width:100%;height:100%;top:0;left:0}.Lightbox-module__backdropStyle___y7avj{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:9998}.Lightbox-module__editor___Vh82D{width:var(--cntrl-article-width)!important;margin-left:auto;margin-right:auto}.Lightbox-module__contentStyle___FzFaW{position:relative;width:100%;max-width:100vw;max-height:100vh;height:100vh;overflow:auto;background:transparent;box-sizing:border-box}.Lightbox-module__imageStyle___Qb7f5{position:relative;display:block;cursor:pointer;background-color:transparent;max-width:100%;max-height:100%;width:auto;height:auto}.Lightbox-module__imgWrapper___cdytV{position:relative;display:flex;width:100%;height:100%;overflow:hidden;box-sizing:border-box}.Lightbox-module__contain___5gATW{object-fit:contain;max-width:100%;max-height:100%}.Lightbox-module__cover___8HZy7{width:100%;height:100%;object-fit:cover}.Lightbox-module__caption___3e-22{z-index:9999;position:absolute;display:flex}.Lightbox-module__caption___3e-22:hover{color:var(--link-hover-color)!important}.Lightbox-module__captionBlock___7wXOq{pointer-events:none;position:absolute;top:0;z-index:1;left:0;right:0;bottom:0}.Lightbox-module__captionTextWrapper___uDnh6{position:relative;width:100%;height:100%}.Lightbox-module__captionText___6zbmg{pointer-events:none;max-width:100%;transition-property:opacity;transition-timing-function:ease-in-out;position:absolute;display:inline-block;white-space:pre-wrap;overflow-wrap:break-word;opacity:0}.Lightbox-module__captionText___6zbmg.Lightbox-module__active___u7Yu8{opacity:1}.Lightbox-module__lightboxSplide___yMC4v.splide,.Lightbox-module__lightboxSplide___yMC4v .splide__track{height:100%}.Lightbox-module__arrow___s3Bn2{position:absolute;display:flex;align-items:center;justify-content:center;cursor:pointer;border:none;background-color:transparent;top:50%;z-index:1;transform:translate(-50%,-50%);padding:0;left:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);width:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw);height:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw)}.Lightbox-module__arrow___s3Bn2.Lightbox-module__arrowVertical___6ztxz{left:50%;top:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);transform:translate(-50%,-50%)}.Lightbox-module__nextArrow___i23DU{left:unset;right:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);transform:translate(50%,-50%)}.Lightbox-module__nextArrow___i23DU.Lightbox-module__arrowVertical___6ztxz{left:50%;right:unset;top:unset;bottom:calc(var(--is-editor, 0) * 1.3888888889vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 1.3888888889vw);transform:translate(-50%,50%)}.Lightbox-module__arrowInner___Mm3xe{all:unset;cursor:pointer;width:100%;height:100%}.Lightbox-module__arrowInner___Mm3xe:hover .Lightbox-module__arrowIcon___UpzOt path{fill:var(--arrow-hover-color)!important}.Lightbox-module__arrowImg___UxHPR{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.Lightbox-module__mirror___50NCE{transform:translate(-50%,-50%) scaleX(-1)!important}.Lightbox-module__arrowVertical___6ztxz.Lightbox-module__mirror___50NCE{transform:translate(-50%,-50%) scaleY(-1)!important}.Lightbox-module__thumbsContainerVertical___lVaf-{flex-direction:column;display:flex}.Lightbox-module__thumbsContainer___DqOCP{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:auto}.Lightbox-module__thumbsAlignStart___uiFIV{align-items:flex-start}.Lightbox-module__thumbsAlignCenter___sbUPA{align-items:center}.Lightbox-module__thumbsAlignEnd___OA9N4{align-items:flex-end}.Lightbox-module__thumbItem___zROyu{all:unset;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;transition:transform .1s ease,opacity .1s ease}.Lightbox-module__thumbItem___zROyu:hover{opacity:var(--thumb-hover)!important}.Lightbox-module__closeButton___r3Dur{all:unset;cursor:pointer;position:absolute;width:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw);height:calc(var(--is-editor, 0) * 2.0833333333vw / var(--cntrl-reverse-layout-deviation, 1) + (1 - var(--is-editor, 0)) * 2.0833333333vw)}@keyframes Lightbox-module__lbFadeIn___3xoHQ{0%{opacity:0}to{opacity:1}}.Lightbox-module__fadeIn___sHwRK{animation-name:Lightbox-module__lbFadeIn___3xoHQ}@keyframes Lightbox-module__lbSlideInLeft___vgE9-{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes Lightbox-module__lbSlideInRight___nByIA{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes Lightbox-module__lbSlideInTop___hI5ju{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes Lightbox-module__lbSlideInBottom___M6-9o{0%{transform:translateY(100%)}to{transform:translateY(0)}}.Lightbox-module__slideInLeft___P-XRo{animation-name:Lightbox-module__lbSlideInLeft___vgE9-}.Lightbox-module__slideInRight___ZQqFi{animation-name:Lightbox-module__lbSlideInRight___nByIA}.Lightbox-module__slideInTop___XRKCs{animation-name:Lightbox-module__lbSlideInTop___hI5ju}.Lightbox-module__slideInBottom___TYOBS{animation-name:Lightbox-module__lbSlideInBottom___M6-9o}@keyframes Lightbox-module__lbFadeOut___0pD7Q{0%{opacity:1}to{opacity:0}}.Lightbox-module__fadeOut___h2fpQ{animation-name:Lightbox-module__lbFadeOut___0pD7Q!important}@keyframes Lightbox-module__lbSlideOutLeft___Z6pdg{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes Lightbox-module__lbSlideOutRight___B5cYY{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes Lightbox-module__lbSlideOutTop___uZ10i{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes Lightbox-module__lbSlideOutBottom___GyYfC{0%{transform:translateY(0)}to{transform:translateY(100%)}}.Lightbox-module__slideOutLeft___J-eMU{animation-name:Lightbox-module__lbSlideOutLeft___Z6pdg!important}.Lightbox-module__slideOutRight___iZUQz{animation-name:Lightbox-module__lbSlideOutRight___B5cYY!important}.Lightbox-module__slideOutTop___3TXF9{animation-name:Lightbox-module__lbSlideOutTop___uZ10i!important}.Lightbox-module__slideOutBottom___SB5ws{animation-name:Lightbox-module__lbSlideOutBottom___GyYfC!important}.Lightbox-module__lightboxSplide___yMC4v.splide--fade .Lightbox-module__scaleSlide___wS7d4{opacity:0!important;transform:var(--position-transform, none) scale(.9)!important;transition:opacity var(--splide-speed, .5s) ease,transform var(--splide-speed, .5s) ease!important}.Lightbox-module__lightboxSplide___yMC4v.splide--fade .splide__slide.is-active .Lightbox-module__scaleSlide___wS7d4{opacity:1!important;transform:var(--position-transform, none) scale(1)!important}.Lightbox-module__lightboxSplide___yMC4v.splide--fade .splide__slide:not(.is-active) .Lightbox-module__scaleSlide___wS7d4{opacity:0!important;transform:var(--position-transform, none) scale(1.1)!important}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports (outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports (outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
package/dist/index.js CHANGED
@@ -1509,6 +1509,11 @@ const slideInLeft = "Lightbox-module__slideInLeft___P-XRo";
1509
1509
  const slideInRight = "Lightbox-module__slideInRight___ZQqFi";
1510
1510
  const slideInTop = "Lightbox-module__slideInTop___XRKCs";
1511
1511
  const slideInBottom = "Lightbox-module__slideInBottom___TYOBS";
1512
+ const fadeOut = "Lightbox-module__fadeOut___h2fpQ";
1513
+ const slideOutLeft = "Lightbox-module__slideOutLeft___J-eMU";
1514
+ const slideOutRight = "Lightbox-module__slideOutRight___iZUQz";
1515
+ const slideOutTop = "Lightbox-module__slideOutTop___3TXF9";
1516
+ const slideOutBottom = "Lightbox-module__slideOutBottom___SB5ws";
1512
1517
  const scaleSlide = "Lightbox-module__scaleSlide___wS7d4";
1513
1518
  const styles = {
1514
1519
  background,
@@ -1539,6 +1544,11 @@ const styles = {
1539
1544
  slideInRight,
1540
1545
  slideInTop,
1541
1546
  slideInBottom,
1547
+ fadeOut,
1548
+ slideOutLeft,
1549
+ slideOutRight,
1550
+ slideOutTop,
1551
+ slideOutBottom,
1542
1552
  scaleSlide
1543
1553
  };
1544
1554
  const getPositionStyles = (position, offset, isEditor) => {
@@ -1628,21 +1638,43 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1628
1638
  const { widthSettings, fontSettings, letterSpacing, textAlign, wordSpacing, fontSizeLineHeight, textAppearance, color } = lightboxStyles.caption;
1629
1639
  const [currentIndex, setCurrentIndex] = React.useState(0);
1630
1640
  const [splideKey, setSplideKey] = React.useState(0);
1641
+ const [isClosing, setIsClosing] = React.useState(false);
1631
1642
  const lightboxRef = React.useRef(null);
1632
1643
  const prevSliderTypeRef = React.useRef(null);
1633
1644
  const imageRef = React.useRef(null);
1634
1645
  const isClosingRef = React.useRef(false);
1646
+ const contentRef = React.useRef(null);
1647
+ const animationEndHandlerRef = React.useRef(null);
1635
1648
  const { appear, triggers, slider, thumbnail, controls, area, caption: caption2, layout } = settings.lightboxBlock;
1649
+ const appearDurationMs = appear.duration ? parseInt(appear.duration) : 300;
1650
+ const handleClose = React.useCallback(() => {
1651
+ setIsClosing(true);
1652
+ isClosingRef.current = true;
1653
+ const handleAnimationEnd = (e) => {
1654
+ if (e.target === contentRef.current && e.animationName) {
1655
+ if (contentRef.current && animationEndHandlerRef.current) {
1656
+ contentRef.current.removeEventListener("animationend", animationEndHandlerRef.current);
1657
+ }
1658
+ animationEndHandlerRef.current = null;
1659
+ onClose();
1660
+ setIsClosing(false);
1661
+ }
1662
+ };
1663
+ if (contentRef.current) {
1664
+ animationEndHandlerRef.current = handleAnimationEnd;
1665
+ contentRef.current.addEventListener("animationend", handleAnimationEnd);
1666
+ }
1667
+ }, [onClose, appearDurationMs]);
1636
1668
  const handleBackdropClick = (e) => {
1637
1669
  if (!closeOnBackdropClick) return;
1638
1670
  if (e.target === e.currentTarget) {
1639
- onClose();
1671
+ handleClose();
1640
1672
  }
1641
1673
  };
1642
1674
  const handleImageWrapperClick = (e) => {
1643
1675
  if (!closeOnBackdropClick) return;
1644
1676
  if (e.target === e.currentTarget) {
1645
- onClose();
1677
+ handleClose();
1646
1678
  }
1647
1679
  };
1648
1680
  const handleContentClick = (e) => {
@@ -1650,7 +1682,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1650
1682
  const target = e.target;
1651
1683
  const currentTarget = e.currentTarget;
1652
1684
  if (target === currentTarget) {
1653
- onClose();
1685
+ handleClose();
1654
1686
  return;
1655
1687
  }
1656
1688
  const isImg = target.tagName === "IMG" || target.closest("img");
@@ -1659,17 +1691,20 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1659
1691
  const isCaption = target.closest(`.${styles.caption}`);
1660
1692
  const isThumbnail = target.closest(`.${styles.thumbsContainer}`);
1661
1693
  if (!isImg && !isButton && !isSplide && !isCaption && !isThumbnail) {
1662
- onClose();
1694
+ handleClose();
1663
1695
  }
1664
1696
  };
1665
1697
  const onImageClick = (e) => {
1666
1698
  var _a, _b;
1699
+ e.stopPropagation();
1667
1700
  if (triggers.type === "click" && triggers.switch === "image") {
1668
- e.stopPropagation();
1669
- (_a = lightboxRef.current) == null ? void 0 : _a.go("+1");
1701
+ if (triggers.repeat === "close" && currentIndex === content.length - 1) {
1702
+ handleClose();
1703
+ } else {
1704
+ (_a = lightboxRef.current) == null ? void 0 : _a.go("+1");
1705
+ }
1670
1706
  }
1671
1707
  if (triggers.type === "click" && triggers.switch === "50/50") {
1672
- e.stopPropagation();
1673
1708
  const img2 = e.currentTarget;
1674
1709
  const rect = img2.getBoundingClientRect();
1675
1710
  const clickX = e.clientX - rect.left;
@@ -1689,7 +1724,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1689
1724
  if (!isOpen || !closeOnEsc) return;
1690
1725
  const onKeyDown = (event) => {
1691
1726
  if (event.key === "Escape") {
1692
- onClose();
1727
+ handleClose();
1693
1728
  return;
1694
1729
  }
1695
1730
  if (event.key === "ArrowRight") {
@@ -1704,12 +1739,19 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1704
1739
  return () => {
1705
1740
  window.removeEventListener("keydown", onKeyDown);
1706
1741
  };
1707
- }, [isOpen, closeOnEsc, onClose, content.length]);
1742
+ }, [isOpen, closeOnEsc, handleClose, content.length]);
1708
1743
  React.useEffect(() => {
1709
1744
  if (isOpen) {
1710
1745
  setCurrentIndex(0);
1711
1746
  isClosingRef.current = false;
1747
+ setIsClosing(false);
1712
1748
  }
1749
+ return () => {
1750
+ if (contentRef.current && animationEndHandlerRef.current) {
1751
+ contentRef.current.removeEventListener("animationend", animationEndHandlerRef.current);
1752
+ animationEndHandlerRef.current = null;
1753
+ }
1754
+ };
1713
1755
  }, [isOpen]);
1714
1756
  React.useEffect(() => {
1715
1757
  if (prevSliderTypeRef.current !== null && prevSliderTypeRef.current !== slider.type) {
@@ -1739,7 +1781,6 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1739
1781
  var _a;
1740
1782
  (_a = lightboxRef.current) == null ? void 0 : _a.go(dir);
1741
1783
  };
1742
- const appearDurationMs = appear.duration ? parseInt(appear.duration) : 300;
1743
1784
  const backdropDurationMs = appear.type === "fade in" || appear.type === "mix" ? Math.floor(appearDurationMs * 0.7) : appearDurationMs;
1744
1785
  const appearClass = (() => {
1745
1786
  if (appear.type === "fade in") return styles.fadeIn;
@@ -1777,6 +1818,42 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1777
1818
  }
1778
1819
  return styles.fadeIn;
1779
1820
  })();
1821
+ const backdropDisappearClass = (() => {
1822
+ if (appear.type === "fade in" || appear.type === "mix") return styles.fadeOut;
1823
+ if (appear.type === "slide in") {
1824
+ switch (appear.direction) {
1825
+ case "left":
1826
+ return styles.slideOutLeft;
1827
+ case "right":
1828
+ return styles.slideOutRight;
1829
+ case "top":
1830
+ return styles.slideOutTop;
1831
+ case "bottom":
1832
+ return styles.slideOutBottom;
1833
+ default:
1834
+ return styles.slideOutRight;
1835
+ }
1836
+ }
1837
+ return styles.fadeOut;
1838
+ })();
1839
+ const disappearClass = (() => {
1840
+ if (appear.type === "fade in") return styles.fadeOut;
1841
+ if (appear.type === "slide in" || appear.type === "mix") {
1842
+ switch (appear.direction) {
1843
+ case "left":
1844
+ return styles.slideOutLeft;
1845
+ case "right":
1846
+ return styles.slideOutRight;
1847
+ case "top":
1848
+ return styles.slideOutTop;
1849
+ case "bottom":
1850
+ return styles.slideOutBottom;
1851
+ default:
1852
+ return styles.slideOutRight;
1853
+ }
1854
+ }
1855
+ return styles.fadeOut;
1856
+ })();
1780
1857
  React.useEffect(() => {
1781
1858
  if (!isOpen || !closeOnBackdropClick) return;
1782
1859
  const handleTouchEnd = (e) => {
@@ -1792,30 +1869,33 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1792
1869
  if (!inside) {
1793
1870
  e.stopPropagation();
1794
1871
  isClosingRef.current = true;
1795
- onClose();
1872
+ const blockNextClick = (clickEvent) => {
1873
+ clickEvent.stopPropagation();
1874
+ clickEvent.preventDefault();
1875
+ document.removeEventListener("click", blockNextClick, true);
1876
+ };
1877
+ document.addEventListener("click", blockNextClick, true);
1878
+ handleClose();
1796
1879
  }
1797
1880
  }
1798
1881
  };
1799
- const timeoutId = setTimeout(() => {
1800
- document.addEventListener("touchend", handleTouchEnd, { passive: true });
1801
- }, 100);
1882
+ document.addEventListener("touchend", handleTouchEnd, { passive: true });
1802
1883
  return () => {
1803
- clearTimeout(timeoutId);
1804
1884
  document.removeEventListener("touchend", handleTouchEnd);
1805
1885
  };
1806
- }, [isOpen, closeOnBackdropClick, onClose, currentIndex]);
1807
- if (!isOpen) return null;
1886
+ }, [isOpen, closeOnBackdropClick, handleClose, currentIndex]);
1887
+ if (!isOpen && !isClosing) return null;
1808
1888
  return reactDom.createPortal(
1809
1889
  /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1810
1890
  /* @__PURE__ */ jsxRuntime.jsx(
1811
1891
  "div",
1812
1892
  {
1813
- className: cn(styles.background, backdropAppearClass),
1893
+ className: cn(styles.background, isClosing ? backdropDisappearClass : backdropAppearClass),
1814
1894
  style: {
1815
1895
  ...isEditor && { display: "none" },
1816
1896
  backgroundColor: area.color,
1817
1897
  backdropFilter: `blur(${area.blur}px)`,
1818
- animationDuration: `${backdropDurationMs}ms`,
1898
+ animationDuration: `${appearDurationMs}ms`,
1819
1899
  animationTimingFunction: "ease",
1820
1900
  animationFillMode: "both"
1821
1901
  }
@@ -1824,11 +1904,11 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1824
1904
  /* @__PURE__ */ jsxRuntime.jsx(
1825
1905
  "div",
1826
1906
  {
1827
- className: cn(styles.backdropStyle, { [styles.editor]: isEditor, [backdropAppearClass]: isEditor }),
1907
+ className: cn(styles.backdropStyle, { [styles.editor]: isEditor, [isClosing ? backdropDisappearClass : backdropAppearClass]: isEditor }),
1828
1908
  style: { ...isEditor && {
1829
1909
  backgroundColor: area.color,
1830
1910
  backdropFilter: `blur(${area.blur}px)`,
1831
- animationDuration: `${backdropDurationMs}ms`,
1911
+ animationDuration: `${appearDurationMs}ms`,
1832
1912
  animationTimingFunction: "ease",
1833
1913
  animationFillMode: "both"
1834
1914
  } },
@@ -1838,13 +1918,15 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1838
1918
  children: /* @__PURE__ */ jsxRuntime.jsxs(
1839
1919
  "div",
1840
1920
  {
1841
- className: cn(styles.contentStyle, appearClass),
1921
+ ref: contentRef,
1922
+ className: cn(styles.contentStyle, isClosing ? disappearClass : appearClass),
1842
1923
  onClick: handleContentClick,
1843
1924
  style: {
1844
1925
  animationDuration: `${appearDurationMs}ms`,
1845
1926
  animationTimingFunction: "ease",
1846
1927
  animationFillMode: "both",
1847
- ...appear.type === "mix" && { animationDelay: `${backdropDurationMs / 2}ms` },
1928
+ ...appear.type === "mix" && !isClosing && { animationDelay: `${backdropDurationMs / 2}ms` },
1929
+ ...appear.type === "mix" && isClosing && { animationDelay: "0ms" },
1848
1930
  "--splide-speed": slider.duration || "500ms"
1849
1931
  },
1850
1932
  children: [
@@ -1867,7 +1949,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1867
1949
  height: "100%",
1868
1950
  type: slider.type === "fade" || slider.type === "scale" ? "fade" : "loop",
1869
1951
  padding: 0,
1870
- rewind: (slider.type === "scale" || slider.type === "fade") && appear.repeat !== "close"
1952
+ rewind: (slider.type === "scale" || slider.type === "fade") && triggers.repeat === "loop"
1871
1953
  },
1872
1954
  style: { "--splide-speed": slider.duration || "500ms" },
1873
1955
  children: content.map((item, index) => {
@@ -1977,7 +2059,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1977
2059
  ...positionStyles,
1978
2060
  transform: combinedTransform
1979
2061
  },
1980
- onClick: onClose,
2062
+ onClick: handleClose,
1981
2063
  children: /* @__PURE__ */ jsxRuntime.jsx(SvgImage, { url: area.closeIconUrl })
1982
2064
  }
1983
2065
  );
@@ -2054,6 +2136,12 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
2054
2136
  setCurrentIndex(index);
2055
2137
  (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2056
2138
  },
2139
+ onMouseEnter: () => {
2140
+ var _a;
2141
+ if (thumbnail.triggers === "hover") {
2142
+ (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2143
+ }
2144
+ },
2057
2145
  children: /* @__PURE__ */ jsxRuntime.jsx(
2058
2146
  "img",
2059
2147
  {
@@ -2087,7 +2175,7 @@ const LightboxComponent = {
2087
2175
  name: "Lightbox",
2088
2176
  preview: {
2089
2177
  type: "video",
2090
- url: "https://cdn.cntrl.site/projects/01GJ2SPDSH73MC92WW7ZA2CWBY/articles-assets/01KA24CHYZXJBZ0Q714B05A7VD.mp4"
2178
+ url: "https://cdn.cntrl.site/component-assets/lightbox.mp4"
2091
2179
  },
2092
2180
  defaultSize: {
2093
2181
  width: 440,
@@ -2158,14 +2246,6 @@ const LightboxComponent = {
2158
2246
  type: "direction-control"
2159
2247
  },
2160
2248
  enum: ["top", "left", "right", "bottom"]
2161
- },
2162
- repeat: {
2163
- type: "string",
2164
- title: "Repeat",
2165
- display: {
2166
- type: "ratio-group"
2167
- },
2168
- enum: ["close", "loop"]
2169
2249
  }
2170
2250
  }
2171
2251
  },
@@ -2188,6 +2268,15 @@ const LightboxComponent = {
2188
2268
  type: "ratio-group"
2189
2269
  },
2190
2270
  enum: ["image", "50/50"]
2271
+ },
2272
+ repeat: {
2273
+ type: "string",
2274
+ title: "Repeat",
2275
+ display: {
2276
+ visible: false,
2277
+ type: "ratio-group"
2278
+ },
2279
+ enum: ["close", "loop"]
2191
2280
  }
2192
2281
  }
2193
2282
  },
@@ -2642,19 +2731,19 @@ const LightboxComponent = {
2642
2731
  default: {
2643
2732
  thumbnailBlock: {
2644
2733
  cover: {
2645
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMHNP08T27H1649S67NZV.png"
2734
+ url: "https://cdn.cntrl.site/component-assets/Cover.jpg"
2646
2735
  }
2647
2736
  },
2648
2737
  lightboxBlock: {
2649
2738
  appear: {
2650
2739
  type: "slide in",
2651
2740
  duration: "500ms",
2652
- direction: "right",
2653
- repeat: "loop"
2741
+ direction: "right"
2654
2742
  },
2655
2743
  triggers: {
2656
2744
  type: "click",
2657
- switch: "image"
2745
+ switch: "image",
2746
+ repeat: "loop"
2658
2747
  },
2659
2748
  slider: {
2660
2749
  type: "fade",
@@ -2788,27 +2877,17 @@ const LightboxComponent = {
2788
2877
  name: "properties.lightboxBlock.properties.appear.properties.direction.display.visible",
2789
2878
  value: false
2790
2879
  }
2880
+ },
2881
+ {
2882
+ if: [
2883
+ { name: "lightboxBlock.triggers.type", value: "click" },
2884
+ { name: "lightboxBlock.triggers.switch", value: "image" }
2885
+ ],
2886
+ then: {
2887
+ name: "properties.lightboxBlock.properties.triggers.properties.repeat.display.visible",
2888
+ value: true
2889
+ }
2791
2890
  }
2792
- // {
2793
- // if: {
2794
- // name: 'lightboxBlock.triggers.type',
2795
- // value: 'click'
2796
- // },
2797
- // then: {
2798
- // name: 'properties.lightboxBlock.properties.slider.properties.switch.display.visible',
2799
- // value: true
2800
- // }
2801
- // },
2802
- // {
2803
- // if: {
2804
- // name: 'lightboxBlock.triggers.type',
2805
- // value: 'drag'
2806
- // },
2807
- // then: {
2808
- // name: 'properties.lightboxBlock.properties.slider.properties.switch.display.visible',
2809
- // value: false
2810
- // }
2811
- // }
2812
2891
  ]
2813
2892
  },
2814
2893
  content: {
@@ -2859,7 +2938,7 @@ const LightboxComponent = {
2859
2938
  {
2860
2939
  image: {
2861
2940
  objectFit: "contain",
2862
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMHNP08T27H1649S67NZV.png",
2941
+ url: "https://cdn.cntrl.site/component-assets/2.jpg",
2863
2942
  name: "Slider-1.png"
2864
2943
  },
2865
2944
  imageCaption: [
@@ -2872,7 +2951,7 @@ const LightboxComponent = {
2872
2951
  {
2873
2952
  image: {
2874
2953
  objectFit: "contain",
2875
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMTZA3RYMXKF0M095D6JD.png",
2954
+ url: "https://cdn.cntrl.site/component-assets/3.jpg",
2876
2955
  name: "Slider-2.png"
2877
2956
  },
2878
2957
  imageCaption: [
@@ -2885,7 +2964,7 @@ const LightboxComponent = {
2885
2964
  {
2886
2965
  image: {
2887
2966
  objectFit: "contain",
2888
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMVSCMPVJBG2WF5KJZYHZ.png",
2967
+ url: "https://cdn.cntrl.site/component-assets/4.jpg",
2889
2968
  name: "Slider-3.png"
2890
2969
  },
2891
2970
  imageCaption: [
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
- import React, { useState, useEffect, useRef, useMemo } from "react";
2
+ import React, { useState, useEffect, useRef, useMemo, 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";
@@ -1507,6 +1507,11 @@ const slideInLeft = "Lightbox-module__slideInLeft___P-XRo";
1507
1507
  const slideInRight = "Lightbox-module__slideInRight___ZQqFi";
1508
1508
  const slideInTop = "Lightbox-module__slideInTop___XRKCs";
1509
1509
  const slideInBottom = "Lightbox-module__slideInBottom___TYOBS";
1510
+ const fadeOut = "Lightbox-module__fadeOut___h2fpQ";
1511
+ const slideOutLeft = "Lightbox-module__slideOutLeft___J-eMU";
1512
+ const slideOutRight = "Lightbox-module__slideOutRight___iZUQz";
1513
+ const slideOutTop = "Lightbox-module__slideOutTop___3TXF9";
1514
+ const slideOutBottom = "Lightbox-module__slideOutBottom___SB5ws";
1510
1515
  const scaleSlide = "Lightbox-module__scaleSlide___wS7d4";
1511
1516
  const styles = {
1512
1517
  background,
@@ -1537,6 +1542,11 @@ const styles = {
1537
1542
  slideInRight,
1538
1543
  slideInTop,
1539
1544
  slideInBottom,
1545
+ fadeOut,
1546
+ slideOutLeft,
1547
+ slideOutRight,
1548
+ slideOutTop,
1549
+ slideOutBottom,
1540
1550
  scaleSlide
1541
1551
  };
1542
1552
  const getPositionStyles = (position, offset, isEditor) => {
@@ -1626,21 +1636,43 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1626
1636
  const { widthSettings, fontSettings, letterSpacing, textAlign, wordSpacing, fontSizeLineHeight, textAppearance, color } = lightboxStyles.caption;
1627
1637
  const [currentIndex, setCurrentIndex] = React.useState(0);
1628
1638
  const [splideKey, setSplideKey] = React.useState(0);
1639
+ const [isClosing, setIsClosing] = React.useState(false);
1629
1640
  const lightboxRef = useRef(null);
1630
1641
  const prevSliderTypeRef = useRef(null);
1631
1642
  const imageRef = useRef(null);
1632
1643
  const isClosingRef = useRef(false);
1644
+ const contentRef = useRef(null);
1645
+ const animationEndHandlerRef = useRef(null);
1633
1646
  const { appear, triggers, slider, thumbnail, controls, area, caption: caption2, layout } = settings.lightboxBlock;
1647
+ const appearDurationMs = appear.duration ? parseInt(appear.duration) : 300;
1648
+ const handleClose = useCallback(() => {
1649
+ setIsClosing(true);
1650
+ isClosingRef.current = true;
1651
+ const handleAnimationEnd = (e) => {
1652
+ if (e.target === contentRef.current && e.animationName) {
1653
+ if (contentRef.current && animationEndHandlerRef.current) {
1654
+ contentRef.current.removeEventListener("animationend", animationEndHandlerRef.current);
1655
+ }
1656
+ animationEndHandlerRef.current = null;
1657
+ onClose();
1658
+ setIsClosing(false);
1659
+ }
1660
+ };
1661
+ if (contentRef.current) {
1662
+ animationEndHandlerRef.current = handleAnimationEnd;
1663
+ contentRef.current.addEventListener("animationend", handleAnimationEnd);
1664
+ }
1665
+ }, [onClose, appearDurationMs]);
1634
1666
  const handleBackdropClick = (e) => {
1635
1667
  if (!closeOnBackdropClick) return;
1636
1668
  if (e.target === e.currentTarget) {
1637
- onClose();
1669
+ handleClose();
1638
1670
  }
1639
1671
  };
1640
1672
  const handleImageWrapperClick = (e) => {
1641
1673
  if (!closeOnBackdropClick) return;
1642
1674
  if (e.target === e.currentTarget) {
1643
- onClose();
1675
+ handleClose();
1644
1676
  }
1645
1677
  };
1646
1678
  const handleContentClick = (e) => {
@@ -1648,7 +1680,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1648
1680
  const target = e.target;
1649
1681
  const currentTarget = e.currentTarget;
1650
1682
  if (target === currentTarget) {
1651
- onClose();
1683
+ handleClose();
1652
1684
  return;
1653
1685
  }
1654
1686
  const isImg = target.tagName === "IMG" || target.closest("img");
@@ -1657,17 +1689,20 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1657
1689
  const isCaption = target.closest(`.${styles.caption}`);
1658
1690
  const isThumbnail = target.closest(`.${styles.thumbsContainer}`);
1659
1691
  if (!isImg && !isButton && !isSplide && !isCaption && !isThumbnail) {
1660
- onClose();
1692
+ handleClose();
1661
1693
  }
1662
1694
  };
1663
1695
  const onImageClick = (e) => {
1664
1696
  var _a, _b;
1697
+ e.stopPropagation();
1665
1698
  if (triggers.type === "click" && triggers.switch === "image") {
1666
- e.stopPropagation();
1667
- (_a = lightboxRef.current) == null ? void 0 : _a.go("+1");
1699
+ if (triggers.repeat === "close" && currentIndex === content.length - 1) {
1700
+ handleClose();
1701
+ } else {
1702
+ (_a = lightboxRef.current) == null ? void 0 : _a.go("+1");
1703
+ }
1668
1704
  }
1669
1705
  if (triggers.type === "click" && triggers.switch === "50/50") {
1670
- e.stopPropagation();
1671
1706
  const img2 = e.currentTarget;
1672
1707
  const rect = img2.getBoundingClientRect();
1673
1708
  const clickX = e.clientX - rect.left;
@@ -1687,7 +1722,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1687
1722
  if (!isOpen || !closeOnEsc) return;
1688
1723
  const onKeyDown = (event) => {
1689
1724
  if (event.key === "Escape") {
1690
- onClose();
1725
+ handleClose();
1691
1726
  return;
1692
1727
  }
1693
1728
  if (event.key === "ArrowRight") {
@@ -1702,12 +1737,19 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1702
1737
  return () => {
1703
1738
  window.removeEventListener("keydown", onKeyDown);
1704
1739
  };
1705
- }, [isOpen, closeOnEsc, onClose, content.length]);
1740
+ }, [isOpen, closeOnEsc, handleClose, content.length]);
1706
1741
  useEffect(() => {
1707
1742
  if (isOpen) {
1708
1743
  setCurrentIndex(0);
1709
1744
  isClosingRef.current = false;
1745
+ setIsClosing(false);
1710
1746
  }
1747
+ return () => {
1748
+ if (contentRef.current && animationEndHandlerRef.current) {
1749
+ contentRef.current.removeEventListener("animationend", animationEndHandlerRef.current);
1750
+ animationEndHandlerRef.current = null;
1751
+ }
1752
+ };
1711
1753
  }, [isOpen]);
1712
1754
  useEffect(() => {
1713
1755
  if (prevSliderTypeRef.current !== null && prevSliderTypeRef.current !== slider.type) {
@@ -1737,7 +1779,6 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1737
1779
  var _a;
1738
1780
  (_a = lightboxRef.current) == null ? void 0 : _a.go(dir);
1739
1781
  };
1740
- const appearDurationMs = appear.duration ? parseInt(appear.duration) : 300;
1741
1782
  const backdropDurationMs = appear.type === "fade in" || appear.type === "mix" ? Math.floor(appearDurationMs * 0.7) : appearDurationMs;
1742
1783
  const appearClass = (() => {
1743
1784
  if (appear.type === "fade in") return styles.fadeIn;
@@ -1775,6 +1816,42 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1775
1816
  }
1776
1817
  return styles.fadeIn;
1777
1818
  })();
1819
+ const backdropDisappearClass = (() => {
1820
+ if (appear.type === "fade in" || appear.type === "mix") return styles.fadeOut;
1821
+ if (appear.type === "slide in") {
1822
+ switch (appear.direction) {
1823
+ case "left":
1824
+ return styles.slideOutLeft;
1825
+ case "right":
1826
+ return styles.slideOutRight;
1827
+ case "top":
1828
+ return styles.slideOutTop;
1829
+ case "bottom":
1830
+ return styles.slideOutBottom;
1831
+ default:
1832
+ return styles.slideOutRight;
1833
+ }
1834
+ }
1835
+ return styles.fadeOut;
1836
+ })();
1837
+ const disappearClass = (() => {
1838
+ if (appear.type === "fade in") return styles.fadeOut;
1839
+ if (appear.type === "slide in" || appear.type === "mix") {
1840
+ switch (appear.direction) {
1841
+ case "left":
1842
+ return styles.slideOutLeft;
1843
+ case "right":
1844
+ return styles.slideOutRight;
1845
+ case "top":
1846
+ return styles.slideOutTop;
1847
+ case "bottom":
1848
+ return styles.slideOutBottom;
1849
+ default:
1850
+ return styles.slideOutRight;
1851
+ }
1852
+ }
1853
+ return styles.fadeOut;
1854
+ })();
1778
1855
  useEffect(() => {
1779
1856
  if (!isOpen || !closeOnBackdropClick) return;
1780
1857
  const handleTouchEnd = (e) => {
@@ -1790,30 +1867,33 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1790
1867
  if (!inside) {
1791
1868
  e.stopPropagation();
1792
1869
  isClosingRef.current = true;
1793
- onClose();
1870
+ const blockNextClick = (clickEvent) => {
1871
+ clickEvent.stopPropagation();
1872
+ clickEvent.preventDefault();
1873
+ document.removeEventListener("click", blockNextClick, true);
1874
+ };
1875
+ document.addEventListener("click", blockNextClick, true);
1876
+ handleClose();
1794
1877
  }
1795
1878
  }
1796
1879
  };
1797
- const timeoutId = setTimeout(() => {
1798
- document.addEventListener("touchend", handleTouchEnd, { passive: true });
1799
- }, 100);
1880
+ document.addEventListener("touchend", handleTouchEnd, { passive: true });
1800
1881
  return () => {
1801
- clearTimeout(timeoutId);
1802
1882
  document.removeEventListener("touchend", handleTouchEnd);
1803
1883
  };
1804
- }, [isOpen, closeOnBackdropClick, onClose, currentIndex]);
1805
- if (!isOpen) return null;
1884
+ }, [isOpen, closeOnBackdropClick, handleClose, currentIndex]);
1885
+ if (!isOpen && !isClosing) return null;
1806
1886
  return createPortal(
1807
1887
  /* @__PURE__ */ jsxs(Fragment, { children: [
1808
1888
  /* @__PURE__ */ jsx(
1809
1889
  "div",
1810
1890
  {
1811
- className: cn(styles.background, backdropAppearClass),
1891
+ className: cn(styles.background, isClosing ? backdropDisappearClass : backdropAppearClass),
1812
1892
  style: {
1813
1893
  ...isEditor && { display: "none" },
1814
1894
  backgroundColor: area.color,
1815
1895
  backdropFilter: `blur(${area.blur}px)`,
1816
- animationDuration: `${backdropDurationMs}ms`,
1896
+ animationDuration: `${appearDurationMs}ms`,
1817
1897
  animationTimingFunction: "ease",
1818
1898
  animationFillMode: "both"
1819
1899
  }
@@ -1822,11 +1902,11 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1822
1902
  /* @__PURE__ */ jsx(
1823
1903
  "div",
1824
1904
  {
1825
- className: cn(styles.backdropStyle, { [styles.editor]: isEditor, [backdropAppearClass]: isEditor }),
1905
+ className: cn(styles.backdropStyle, { [styles.editor]: isEditor, [isClosing ? backdropDisappearClass : backdropAppearClass]: isEditor }),
1826
1906
  style: { ...isEditor && {
1827
1907
  backgroundColor: area.color,
1828
1908
  backdropFilter: `blur(${area.blur}px)`,
1829
- animationDuration: `${backdropDurationMs}ms`,
1909
+ animationDuration: `${appearDurationMs}ms`,
1830
1910
  animationTimingFunction: "ease",
1831
1911
  animationFillMode: "both"
1832
1912
  } },
@@ -1836,13 +1916,15 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1836
1916
  children: /* @__PURE__ */ jsxs(
1837
1917
  "div",
1838
1918
  {
1839
- className: cn(styles.contentStyle, appearClass),
1919
+ ref: contentRef,
1920
+ className: cn(styles.contentStyle, isClosing ? disappearClass : appearClass),
1840
1921
  onClick: handleContentClick,
1841
1922
  style: {
1842
1923
  animationDuration: `${appearDurationMs}ms`,
1843
1924
  animationTimingFunction: "ease",
1844
1925
  animationFillMode: "both",
1845
- ...appear.type === "mix" && { animationDelay: `${backdropDurationMs / 2}ms` },
1926
+ ...appear.type === "mix" && !isClosing && { animationDelay: `${backdropDurationMs / 2}ms` },
1927
+ ...appear.type === "mix" && isClosing && { animationDelay: "0ms" },
1846
1928
  "--splide-speed": slider.duration || "500ms"
1847
1929
  },
1848
1930
  children: [
@@ -1865,7 +1947,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1865
1947
  height: "100%",
1866
1948
  type: slider.type === "fade" || slider.type === "scale" ? "fade" : "loop",
1867
1949
  padding: 0,
1868
- rewind: (slider.type === "scale" || slider.type === "fade") && appear.repeat !== "close"
1950
+ rewind: (slider.type === "scale" || slider.type === "fade") && triggers.repeat === "loop"
1869
1951
  },
1870
1952
  style: { "--splide-speed": slider.duration || "500ms" },
1871
1953
  children: content.map((item, index) => {
@@ -1975,7 +2057,7 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
1975
2057
  ...positionStyles,
1976
2058
  transform: combinedTransform
1977
2059
  },
1978
- onClick: onClose,
2060
+ onClick: handleClose,
1979
2061
  children: /* @__PURE__ */ jsx(SvgImage, { url: area.closeIconUrl })
1980
2062
  }
1981
2063
  );
@@ -2052,6 +2134,12 @@ const Lightbox = ({ isOpen, onClose, content, styles: lightboxStyles, settings,
2052
2134
  setCurrentIndex(index);
2053
2135
  (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2054
2136
  },
2137
+ onMouseEnter: () => {
2138
+ var _a;
2139
+ if (thumbnail.triggers === "hover") {
2140
+ (_a = lightboxRef.current) == null ? void 0 : _a.go(index);
2141
+ }
2142
+ },
2055
2143
  children: /* @__PURE__ */ jsx(
2056
2144
  "img",
2057
2145
  {
@@ -2085,7 +2173,7 @@ const LightboxComponent = {
2085
2173
  name: "Lightbox",
2086
2174
  preview: {
2087
2175
  type: "video",
2088
- url: "https://cdn.cntrl.site/projects/01GJ2SPDSH73MC92WW7ZA2CWBY/articles-assets/01KA24CHYZXJBZ0Q714B05A7VD.mp4"
2176
+ url: "https://cdn.cntrl.site/component-assets/lightbox.mp4"
2089
2177
  },
2090
2178
  defaultSize: {
2091
2179
  width: 440,
@@ -2156,14 +2244,6 @@ const LightboxComponent = {
2156
2244
  type: "direction-control"
2157
2245
  },
2158
2246
  enum: ["top", "left", "right", "bottom"]
2159
- },
2160
- repeat: {
2161
- type: "string",
2162
- title: "Repeat",
2163
- display: {
2164
- type: "ratio-group"
2165
- },
2166
- enum: ["close", "loop"]
2167
2247
  }
2168
2248
  }
2169
2249
  },
@@ -2186,6 +2266,15 @@ const LightboxComponent = {
2186
2266
  type: "ratio-group"
2187
2267
  },
2188
2268
  enum: ["image", "50/50"]
2269
+ },
2270
+ repeat: {
2271
+ type: "string",
2272
+ title: "Repeat",
2273
+ display: {
2274
+ visible: false,
2275
+ type: "ratio-group"
2276
+ },
2277
+ enum: ["close", "loop"]
2189
2278
  }
2190
2279
  }
2191
2280
  },
@@ -2640,19 +2729,19 @@ const LightboxComponent = {
2640
2729
  default: {
2641
2730
  thumbnailBlock: {
2642
2731
  cover: {
2643
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMHNP08T27H1649S67NZV.png"
2732
+ url: "https://cdn.cntrl.site/component-assets/Cover.jpg"
2644
2733
  }
2645
2734
  },
2646
2735
  lightboxBlock: {
2647
2736
  appear: {
2648
2737
  type: "slide in",
2649
2738
  duration: "500ms",
2650
- direction: "right",
2651
- repeat: "loop"
2739
+ direction: "right"
2652
2740
  },
2653
2741
  triggers: {
2654
2742
  type: "click",
2655
- switch: "image"
2743
+ switch: "image",
2744
+ repeat: "loop"
2656
2745
  },
2657
2746
  slider: {
2658
2747
  type: "fade",
@@ -2786,27 +2875,17 @@ const LightboxComponent = {
2786
2875
  name: "properties.lightboxBlock.properties.appear.properties.direction.display.visible",
2787
2876
  value: false
2788
2877
  }
2878
+ },
2879
+ {
2880
+ if: [
2881
+ { name: "lightboxBlock.triggers.type", value: "click" },
2882
+ { name: "lightboxBlock.triggers.switch", value: "image" }
2883
+ ],
2884
+ then: {
2885
+ name: "properties.lightboxBlock.properties.triggers.properties.repeat.display.visible",
2886
+ value: true
2887
+ }
2789
2888
  }
2790
- // {
2791
- // if: {
2792
- // name: 'lightboxBlock.triggers.type',
2793
- // value: 'click'
2794
- // },
2795
- // then: {
2796
- // name: 'properties.lightboxBlock.properties.slider.properties.switch.display.visible',
2797
- // value: true
2798
- // }
2799
- // },
2800
- // {
2801
- // if: {
2802
- // name: 'lightboxBlock.triggers.type',
2803
- // value: 'drag'
2804
- // },
2805
- // then: {
2806
- // name: 'properties.lightboxBlock.properties.slider.properties.switch.display.visible',
2807
- // value: false
2808
- // }
2809
- // }
2810
2889
  ]
2811
2890
  },
2812
2891
  content: {
@@ -2857,7 +2936,7 @@ const LightboxComponent = {
2857
2936
  {
2858
2937
  image: {
2859
2938
  objectFit: "contain",
2860
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMHNP08T27H1649S67NZV.png",
2939
+ url: "https://cdn.cntrl.site/component-assets/2.jpg",
2861
2940
  name: "Slider-1.png"
2862
2941
  },
2863
2942
  imageCaption: [
@@ -2870,7 +2949,7 @@ const LightboxComponent = {
2870
2949
  {
2871
2950
  image: {
2872
2951
  objectFit: "contain",
2873
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMTZA3RYMXKF0M095D6JD.png",
2952
+ url: "https://cdn.cntrl.site/component-assets/3.jpg",
2874
2953
  name: "Slider-2.png"
2875
2954
  },
2876
2955
  imageCaption: [
@@ -2883,7 +2962,7 @@ const LightboxComponent = {
2883
2962
  {
2884
2963
  image: {
2885
2964
  objectFit: "contain",
2886
- url: "https://cdn.cntrl.site/projects/01JJKT02AWY2FGN2QJ7A173RNZ/articles-assets/01K7ERMVSCMPVJBG2WF5KJZYHZ.png",
2965
+ url: "https://cdn.cntrl.site/component-assets/4.jpg",
2887
2966
  name: "Slider-3.png"
2888
2967
  },
2889
2968
  imageCaption: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cntrl-site/components",
3
- "version": "0.1.0-alpha.23",
3
+ "version": "0.1.0-alpha.25",
4
4
  "description": "Custom components for control editor and public websites.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",