PageSourceSearch

https://www.ilgirasoleviaggi.it/wp/wp-content/plugins/elementor/assets/js/preloaded-modules.js?ver=3.13.4

js ilgirasoleviaggi.it collected 2026-09-26 18:55:16 UTC 78,905 bytes, 2,146 lines download raw bytes

1/*! elementor - v3.13.3 - 28-05-2023 */
2(self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["preloaded-modules"],{
3
4/***/ "../assets/dev/js/frontend/handlers/accordion.js":
5/*!*******************************************************!*\
6  !*** ../assets/dev/js/frontend/handlers/accordion.js ***!
7  \*******************************************************/
8/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9
10"use strict";
11
12
13var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
14Object.defineProperty(exports, "__esModule", ({
15  value: true
16}));
17exports["default"] = void 0;
18var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js"));
19class Accordion extends _baseTabs.default {
20  getDefaultSettings() {
21    const defaultSettings = super.getDefaultSettings();
22    return {
23      ...defaultSettings,
24      showTabFn: 'slideDown',
25      hideTabFn: 'slideUp'
26    };
27  }
28}
29exports["default"] = Accordion;
30
31/***/ }),
32
33/***/ "../assets/dev/js/frontend/handlers/alert.js":
34/*!***************************************************!*\
35  !*** ../assets/dev/js/frontend/handlers/alert.js ***!
36  \***************************************************/
37/***/ ((__unused_webpack_module, exports) => {
38
39"use strict";
40
41
42Object.defineProperty(exports, "__esModule", ({
43  value: true
44}));
45exports["default"] = void 0;
46class Alert extends elementorModules.frontend.handlers.Base {
47  getDefaultSettings() {
48    return {
49      selectors: {
50        dismissButton: '.elementor-alert-dismiss'
51      }
52    };
53  }
54  getDefaultElements() {
55    const selectors = this.getSettings('selectors');
56    return {
57      $dismissButton: this.$element.find(selectors.dismissButton)
58    };
59  }
60  bindEvents() {
61    this.elements.$dismissButton.on('click', this.onDismissButtonClick.bind(this));
62  }
63  onDismissButtonClick() {
64    this.$element.fadeOut();
65  }
66}
67exports["default"] = Alert;
68
69/***/ }),
70
71/***/ "../assets/dev/js/frontend/handlers/base-tabs.js":
72/*!*******************************************************!*\
73  !*** ../assets/dev/js/frontend/handlers/base-tabs.js ***!
74  \*******************************************************/
75/***/ ((__unused_webpack_module, exports) => {
76
77"use strict";
78
79
80Object.defineProperty(exports, "__esModule", ({
81  value: true
82}));
83exports["default"] = void 0;
84class baseTabs extends elementorModules.frontend.handlers.Base {
85  getDefaultSettings() {
86    return {
87      selectors: {
88        tablist: '[role="tablist"]',
89        tabTitle: '.elementor-tab-title',
90        tabContent: '.elementor-tab-content'
91      },
92      classes: {
93        active: 'elementor-active'
94      },
95      showTabFn: 'show',
96      hideTabFn: 'hide',
97      toggleSelf: true,
98      hidePrevious: true,
99      autoExpand: true,
100      keyDirection: {
101        ArrowLeft: elementorFrontendConfig.is_rtl ? 1 : -1,
102        ArrowUp: -1,
103        ArrowRight: elementorFrontendConfig.is_rtl ? -1 : 1,
104        ArrowDown: 1
105      }
106    };
107  }
108  getDefaultElements() {
109    const selectors = this.getSettings('selectors');
110    return {
111      $tabTitles: this.findElement(selectors.tabTitle),
112      $tabContents: this.findElement(selectors.tabContent)
113    };
114  }
115  activateDefaultTab() {
116    const settings = this.getSettings();
117    if (!settings.autoExpand || 'editor' === settings.autoExpand && !this.isEdit) {
118      return;
119    }
120    const defaultActiveTab = this.getEditSettings('activeItemIndex') || 1,
121      originalToggleMethods = {
122        showTabFn: settings.showTabFn,
123        hideTabFn: settings.hideTabFn
124      };
125
126    // Toggle tabs without animation to avoid jumping
127    this.setSettings({
128      showTabFn: 'show',
129      hideTabFn: 'hide'
130    });
131    this.changeActiveTab(defaultActiveTab);
132
133    // Return back original toggle effects
134    this.setSettings(originalToggleMethods);
135  }
136  handleKeyboardNavigation(event) {
137    const tab = event.currentTarget,
138      $tabList = jQuery(tab.closest(this.getSettings('selectors').tablist)),
139      // eslint-disable-next-line @wordpress/no-unused-vars-before-return
140      $tabs = $tabList.find(this.getSettings('selectors').tabTitle),
141      isVertical = 'vertical' === $tabList.attr('aria-orientation');
142    switch (event.key) {
143      case 'ArrowLeft':
144      case 'ArrowRight':
145        if (isVertical) {
146          return;
147        }
148        break;
149      case 'ArrowUp':
150      case 'ArrowDown':
151        if (!isVertical) {
152          return;
153        }
154        event.preventDefault();
155        break;
156      case 'Home':
157        event.preventDefault();
158        $tabs.first().trigger('focus');
159        return;
160      case 'End':
161        event.preventDefault();
162        $tabs.last().trigger('focus');
163        return;
164      default:
165        return;
166    }
167    const tabIndex = tab.getAttribute('data-tab') - 1,
168      direction = this.getSettings('keyDirection')[event.key],
169      nextTab = $tabs[tabIndex + direction];
170    if (nextTab) {
171      nextTab.focus();
172    } else if (-1 === tabIndex + direction) {
173      $tabs.last().trigger('focus');
174    } else {
175      $tabs.first().trigger('focus');
176    }
177  }
178  deactivateActiveTab(tabIndex) {
179    const settings = this.getSettings(),
180      activeClass = settings.classes.active,
181      activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass,
182      $activeTitle = this.elements.$tabTitles.filter(activeFilter),
183      $activeContent = this.elements.$tabContents.filter(activeFilter);
184    $activeTitle.add($activeContent).removeClass(activeClass);
185    $activeTitle.attr({
186      tabindex: '-1',
187      'aria-selected': 'false',
188      'aria-expanded': 'false'
189    });
190    $activeContent[settings.hideTabFn]();
191    $activeContent.attr('hidden', 'hidden');
192  }
193  activateTab(tabIndex) {
194    const settings = this.getSettings(),
195      activeClass = settings.classes.active,
196      $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'),
197      $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]'),
198      animationDuration = 'show' === settings.showTabFn ? 0 : 400;
199    $requestedTitle.add($requestedContent).addClass(activeClass);
200    $requestedTitle.attr({
201      tabindex: '0',
202      'aria-selected': 'true',
203      'aria-expanded': 'true'
204    });
205    $requestedContent[settings.showTabFn](animationDuration, () => elementorFrontend.elements.$window.trigger('elementor-pro/motion-fx/recalc'));
206    $requestedContent.removeAttr('hidden');
207  }
208  isActiveTab(tabIndex) {
209    return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings('classes.active'));
210  }
211  bindEvents() {
212    this.elements.$tabTitles.on({
213      keydown: event => {
214        // Support for old markup that includes an `<a>` tag in the tab
215        if (jQuery(event.target).is('a') && `Enter` === event.key) {
216          event.preventDefault();
217        }
218
219        // We listen to keydowon event for these keys in order to prevent undesired page scrolling
220        if (['End', 'Home', 'ArrowUp', 'ArrowDown'].includes(event.key)) {
221          this.handleKeyboardNavigation(event);
222        }
223      },
224      keyup: event => {
225        switch (event.code) {
226          case 'ArrowLeft':
227          case 'ArrowRight':
228            this.handleKeyboardNavigation(event);
229            break;
230          case 'Enter':
231          case 'Space':
232            event.preventDefault();
233            this.changeActiveTab(event.currentTarget.getAttribute('data-tab'));
234            break;
235        }
236      },
237      click: event => {
238        event.preventDefault();
239        this.changeActiveTab(event.currentTarget.getAttribute('data-tab'));
240      }
241    });
242  }
243  onInit() {
244    super.onInit(...arguments);
245    this.activateDefaultTab();
246  }
247  onEditSettingsChange(propertyName) {
248    if ('activeItemIndex' === propertyName) {
249      this.activateDefaultTab();
250    }
251  }
252  changeActiveTab(tabIndex) {
253    const isActiveTab = this.isActiveTab(tabIndex),
254      settings = this.getSettings();
255    if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) {
256      this.deactivateActiveTab();
257    }
258    if (!settings.hidePrevious && isActiveTab) {
259      this.deactivateActiveTab(tabIndex);
260    }
261    if (!isActiveTab) {
262      this.activateTab(tabIndex);
263    }
264  }
265}
266exports["default"] = baseTabs;
267
268/***/ }),
269
270/***/ "../assets/dev/js/frontend/handlers/counter.js":
271/*!*****************************************************!*\
272  !*** ../assets/dev/js/frontend/handlers/counter.js ***!
273  \*****************************************************/
274/***/ ((__unused_webpack_module, exports) => {
275
276"use strict";
277
278
279Object.defineProperty(exports, "__esModule", ({
280  value: true
281}));
282exports["default"] = void 0;
283class Counter extends elementorModules.frontend.handlers.Base {
284  getDefaultSettings() {
285    return {
286      selectors: {
287        counterNumber: '.elementor-counter-number'
288      }
289    };
290  }
291  getDefaultElements() {
292    const selectors = this.getSettings('selectors');
293    return {
294      $counterNumber: this.$element.find(selectors.counterNumber)
295    };
296  }
297  onInit() {
298    super.onInit();
299    this.intersectionObserver = elementorModules.utils.Scroll.scrollObserver({
300      callback: event => {
301        if (event.isInViewport) {
302          this.intersectionObserver.unobserve(this.elements.$counterNumber[0]);
303          const data = this.elements.$counterNumber.data(),
304            decimalDigits = data.toValue.toString().match(/\.(.*)/);
305          if (decimalDigits) {
306            data.rounding = decimalDigits[1].length;
307          }
308          this.elements.$counterNumber.numerator(data);
309        }
310      }
311    });
312    this.intersectionObserver.observe(this.elements.$counterNumber[0]);
313  }
314}
315exports["default"] = Counter;
316
317/***/ }),
318
319/***/ "../assets/dev/js/frontend/handlers/image-carousel.js":
320/*!************************************************************!*\
321  !*** ../assets/dev/js/frontend/handlers/image-carousel.js ***!
322  \************************************************************/
323/***/ ((__unused_webpack_module, exports) => {
324
325"use strict";
326
327
328Object.defineProperty(exports, "__esModule", ({
329  value: true
330}));
331exports["default"] = void 0;
332class ImageCarousel extends elementorModules.frontend.handlers.CarouselBase {
333  getDefaultSettings() {
334    const settings = super.getDefaultSettings();
335    settings.selectors.carousel = '.elementor-image-carousel-wrapper';
336    return settings;
337  }
338}
339exports["default"] = ImageCarousel;
340
341/***/ }),
342
343/***/ "../assets/dev/js/frontend/handlers/progress.js":
344/*!******************************************************!*\
345  !*** ../assets/dev/js/frontend/handlers/progress.js ***!
346  \******************************************************/
347/***/ ((__unused_webpack_module, exports) => {
348
349"use strict";
350
351
352Object.defineProperty(exports, "__esModule", ({
353  value: true
354}));
355exports["default"] = void 0;
356class Progress extends elementorModules.frontend.handlers.Base {
357  getDefaultSettings() {
358    return {
359      selectors: {
360        progressNumber: '.elementor-progress-bar'
361      }
362    };
363  }
364  getDefaultElements() {
365    const selectors = this.getSettings('selectors');
366    return {
367      $progressNumber: this.$element.find(selectors.progressNumber)
368    };
369  }
370  onInit() {
371    super.onInit();
372    elementorFrontend.waypoint(this.elements.$progressNumber, () => {
373      const $progressbar = this.elements.$progressNumber;
374      $progressbar.css('width', $progressbar.data('max') + '%');
375    });
376  }
377}
378exports["default"] = Progress;
379
380/***/ }),
381
382/***/ "../assets/dev/js/frontend/handlers/tabs.js":
383/*!**************************************************!*\
384  !*** ../assets/dev/js/frontend/handlers/tabs.js ***!
385  \**************************************************/
386/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
387
388"use strict";
389
390
391var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
392Object.defineProperty(exports, "__esModule", ({
393  value: true
394}));
395exports["default"] = void 0;
396var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js"));
397class Tabs extends _baseTabs.default {
398  getDefaultSettings() {
399    const defaultSettings = super.getDefaultSettings();
400    return {
401      ...defaultSettings,
402      toggleSelf: false
403    };
404  }
405}
406exports["default"] = Tabs;
407
408/***/ }),
409
410/***/ "../assets/dev/js/frontend/handlers/text-editor.js":
411/*!*********************************************************!*\
412  !*** ../assets/dev/js/frontend/handlers/text-editor.js ***!
413  \*********************************************************/
414/***/ ((__unused_webpack_module, exports) => {
415
416"use strict";
417
418
419Object.defineProperty(exports, "__esModule", ({
420  value: true
421}));
422exports["default"] = void 0;
423class TextEditor extends elementorModules.frontend.handlers.Base {
424  getDefaultSettings() {
425    return {
426      selectors: {
427        paragraph: 'p:first'
428      },
429      classes: {
430        dropCap: 'elementor-drop-cap',
431        dropCapLetter: 'elementor-drop-cap-letter'
432      }
433    };
434  }
435  getDefaultElements() {
436    const selectors = this.getSettings('selectors'),
437      classes = this.getSettings('classes'),
438      $dropCap = jQuery('<span>', {
439        class: classes.dropCap
440      }),
441      $dropCapLetter = jQuery('<span>', {
442        class: classes.dropCapLetter
443      });
444    $dropCap.append($dropCapLetter);
445    return {
446      $paragraph: this.$element.find(selectors.paragraph),
447      $dropCap,
448      $dropCapLetter
449    };
450  }
451  wrapDropCap() {
452    const isDropCapEnabled = this.getElementSettings('drop_cap');
453    if (!isDropCapEnabled) {
454      // If there is an old drop cap inside the paragraph
455      if (this.dropCapLetter) {
456        this.elements.$dropCap.remove();
457        this.elements.$paragraph.prepend(this.dropCapLetter);
458        this.dropCapLetter = '';
459      }
460      return;
461    }
462    const $paragraph = this.elements.$paragraph;
463    if (!$paragraph.length) {
464      return;
465    }
466    const paragraphContent = $paragraph.html().replace(/&nbsp;/g, ' '),
467      firstLetterMatch = paragraphContent.match(/^ *([^ ] ?)/);
468    if (!firstLetterMatch) {
469      return;
470    }
471    const firstLetter = firstLetterMatch[1],
472      trimmedFirstLetter = firstLetter.trim();
473
474    // Don't apply drop cap when the content starting with an HTML tag
475    if ('<' === trimmedFirstLetter) {
476      return;
477    }
478    this.dropCapLetter = firstLetter;
479    this.elements.$dropCapLetter.text(trimmedFirstLetter);
480    const restoredParagraphContent = paragraphContent.slice(firstLetter.length).replace(/^ */, match => {
481      return new Array(match.length + 1).join('&nbsp;');
482    });
483    $paragraph.html(restoredParagraphContent).prepend(this.elements.$dropCap);
484  }
485  onInit() {
486    super.onInit(...arguments);
487    this.wrapDropCap();
488  }
489  onElementChange(propertyName) {
490    if ('drop_cap' === propertyName) {
491      this.wrapDropCap();
492    }
493  }
494}
495exports["default"] = TextEditor;
496
497/***/ }),
498
499/***/ "../assets/dev/js/frontend/handlers/toggle.js":
500/*!****************************************************!*\
501  !*** ../assets/dev/js/frontend/handlers/toggle.js ***!
502  \****************************************************/
503/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
504
505"use strict";
506
507
508var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
509Object.defineProperty(exports, "__esModule", ({
510  value: true
511}));
512exports["default"] = void 0;
513var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js"));
514class Toggle extends _baseTabs.default {
515  getDefaultSettings() {
516    const defaultSettings = super.getDefaultSettings();
517    return {
518      ...defaultSettings,
519      showTabFn: 'slideDown',
520      hideTabFn: 'slideUp',
521      hidePrevious: false,
522      autoExpand: 'editor'
523    };
524  }
525}
526exports["default"] = Toggle;
527
528/***/ }),
529
530/***/ "../assets/dev/js/frontend/handlers/video.js":
531/*!***************************************************!*\
532  !*** ../assets/dev/js/frontend/handlers/video.js ***!
533  \***************************************************/
534/***/ ((__unused_webpack_module, exports) => {
535
536"use strict";
537
538
539Object.defineProperty(exports, "__esModule", ({
540  value: true
541}));
542exports["default"] = void 0;
543class Video extends elementorModules.frontend.handlers.Base {
544  getDefaultSettings() {
545    return {
546      selectors: {
547        imageOverlay: '.elementor-custom-embed-image-overlay',
548        video: '.elementor-video',
549        videoIframe: '.elementor-video-iframe',
550        playIcon: '.elementor-custom-embed-play'
551      }
552    };
553  }
554  getDefaultElements() {
555    const selectors = this.getSettings('selectors');
556    return {
557      $imageOverlay: this.$element.find(selectors.imageOverlay),
558      $video: this.$element.find(selectors.video),
559      $videoIframe: this.$element.find(selectors.videoIframe),
560      $playIcon: this.$element.find(selectors.playIcon)
561    };
562  }
563  handleVideo() {
564    if (this.getElementSettings('lightbox')) {
565      return;
566    }
567    if ('youtube' === this.getElementSettings('video_type')) {
568      this.apiProvider.onApiReady(apiObject => {
569        this.elements.$imageOverlay.remove();
570        this.prepareYTVideo(apiObject, true);
571      });
572    } else {
573      this.elements.$imageOverlay.remove();
574      this.playVideo();
575    }
576  }
577  playVideo() {
578    if (this.elements.$video.length) {
579      // This.youtubePlayer exists only for YouTube videos, and its play function is different.
580      if (this.youtubePlayer) {
581        this.youtubePlayer.playVideo();
582      } else {
583        this.elements.$video[0].play();
584      }
585      return;
586    }
587    const $videoIframe = this.elements.$videoIframe,
588      lazyLoad = $videoIframe.data('lazy-load');
589    if (lazyLoad) {
590      $videoIframe.attr('src', lazyLoad);
591    }
592    $videoIframe[0].src = this.apiProvider.getAutoplayURL($videoIframe[0].src);
593  }
594  async animateVideo() {
595    const lightbox = await elementorFrontend.utils.lightbox;
596    lightbox.setEntranceAnimation(this.getCurrentDeviceSetting('lightbox_content_animation'));
597  }
598  async handleAspectRatio() {
599    const lightbox = await elementorFrontend.utils.lightbox;
600    lightbox.setVideoAspectRatio(this.getElementSettings('aspect_ratio'));
601  }
602  async hideLightbox() {
603    const lightbox = await elementorFrontend.utils.lightbox;
604    lightbox.getModal().hide();
605  }
606  prepareYTVideo(YT, onOverlayClick) {
607    const elementSettings = this.getElementSettings(),
608      playerOptions = {
609        videoId: this.videoID,
610        events: {
611          onReady: () => {
612            if (elementSettings.mute) {
613              this.youtubePlayer.mute();
614            }
615            if (elementSettings.autoplay || onOverlayClick) {
616              this.youtubePlayer.playVideo();
617            }
618          },
619          onStateChange: event => {
620            if (event.data === YT.PlayerState.ENDED && elementSettings.loop) {
621              this.youtubePlayer.seekTo(elementSettings.start || 0);
622            }
623          }
624        },
625        playerVars: {
626          controls: elementSettings.controls ? 1 : 0,
627          rel: elementSettings.rel ? 1 : 0,
628          playsinline: elementSettings.play_on_mobile ? 1 : 0,
629          modestbranding: elementSettings.modestbranding ? 1 : 0,
630          autoplay: elementSettings.autoplay ? 1 : 0,
631          start: elementSettings.start,
632          end: elementSettings.end
633        }
634      };
635
636    // To handle CORS issues, when the default host is changed, the origin parameter has to be set.
637    if (elementSettings.yt_privacy) {
638      playerOptions.host = 'https://www.youtube-nocookie.com';
639      playerOptions.origin = window.location.hostname;
640    }
641    this.youtubePlayer = new YT.Player(this.elements.$video[0], playerOptions);
642  }
643  bindEvents() {
644    this.elements.$imageOverlay.on('click', this.handleVideo.bind(this));
645    this.elements.$playIcon.on('keydown', event => {
646      const playKeys = [13,
647      // Enter key.
648      32 // Space bar key.
649      ];
650
651      if (playKeys.includes(event.keyCode)) {
652        this.handleVideo();
653      }
654    });
655  }
656  onInit() {
657    super.onInit();
658    const elementSettings = this.getElementSettings();
659    if (elementorFrontend.utils[elementSettings.video_type]) {
660      this.apiProvider = elementorFrontend.utils[elementSettings.video_type];
661    } else {
662      this.apiProvider = elementorFrontend.utils.baseVideoLoader;
663    }
664    if ('youtube' !== elementSettings.video_type) {
665      // Currently the only API integration in the Video widget is for the YT API
666      return;
667    }
668    this.videoID = this.apiProvider.getVideoIDFromURL(elementSettings.youtube_url);
669
670    // If there is an image overlay, the YouTube video prep method will be triggered on click
671    if (!this.videoID) {
672      return;
673    }
674
675    // If the user is using an image overlay, loading the API happens on overlay click instead of on init.
676    if (elementSettings.show_image_overlay && elementSettings.image_overlay.url) {
677      return;
678    }
679    if (elementSettings.lazy_load) {
680      this.intersectionObserver = elementorModules.utils.Scroll.
680scrollObserver({
681        callback: event => {
682          if (event.isInViewport) {
683            this.intersectionObserver.unobserve(this.elements.$video.parent()[0]);
684            this.apiProvider.onApiReady(apiObject => this.prepareYTVideo(apiObject));
685          }
686        }
687      });
688
689      // We observe the parent, since the video container has a height of 0.
690      this.intersectionObserver.observe(this.elements.$video.parent()[0]);
691      return;
692    }
693
694    // When Optimized asset loading is set to off, the video type is set to 'Youtube', and 'Privacy Mode' is set
695    // to 'On', there might be a conflict with other videos that are loaded WITHOUT privacy mode, such as a
696    // video bBackground in a section. In these cases, to avoid the conflict, a timeout is added to postpone the
697    // initialization of the Youtube API object.
698    if (!elementorFrontend.config.experimentalFeatures.e_optimized_assets_loading) {
699      setTimeout(() => {
700        this.apiProvider.onApiReady(apiObject => this.prepareYTVideo(apiObject));
701      }, 0);
702    } else {
703      this.apiProvider.onApiReady(apiObject => this.prepareYTVideo(apiObject));
704    }
705  }
706  onElementChange(propertyName) {
707    if (0 === propertyName.indexOf('lightbox_content_animation')) {
708      this.animateVideo();
709      return;
710    }
711    const isLightBoxEnabled = this.getElementSettings('lightbox');
712    if ('lightbox' === propertyName && !isLightBoxEnabled) {
713      this.hideLightbox();
714      return;
715    }
716    if ('aspect_ratio' === propertyName && isLightBoxEnabled) {
717      this.handleAspectRatio();
718    }
719  }
720}
721exports["default"] = Video;
722
723/***/ }),
724
725/***/ "../assets/dev/js/frontend/preloaded-modules.js":
726/*!******************************************************!*\
727  !*** ../assets/dev/js/frontend/preloaded-modules.js ***!
728  \******************************************************/
729/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
730
731"use strict";
732
733
734var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
735var _accordion = _interopRequireDefault(__webpack_require__(/*! ./handlers/accordion */ "../assets/dev/js/frontend/handlers/accordion.js"));
736var _alert = _interopRequireDefault(__webpack_require__(/*! ./handlers/alert */ "../assets/dev/js/frontend/handlers/alert.js"));
737var _counter = _interopRequireDefault(__webpack_require__(/*! ./handlers/counter */ "../assets/dev/js/frontend/handlers/counter.js"));
738var _progress = _interopRequireDefault(__webpack_require__(/*! ./handlers/progress */ "../assets/dev/js/frontend/handlers/progress.js"));
739var _tabs = _interopRequireDefault(__webpack_require__(/*! ./handlers/tabs */ "../assets/dev/js/frontend/handlers/tabs.js"));
740var _toggle = _interopRequireDefault(__webpack_require__(/*! ./handlers/toggle */ "../assets/dev/js/frontend/handlers/toggle.js"));
741var _video = _interopRequireDefault(__webpack_require__(/*! ./handlers/video */ "../assets/dev/js/frontend/handlers/video.js"));
742var _imageCarousel = _interopRequireDefault(__webpack_require__(/*! ./handlers/image-carousel */ "../assets/dev/js/frontend/handlers/image-carousel.js"));
743var _textEditor = _interopRequireDefault(__webpack_require__(/*! ./handlers/text-editor */ "../assets/dev/js/frontend/handlers/text-editor.js"));
744var _nestedTabs = _interopRequireDefault(__webpack_require__(/*! elementor/modules/nested-tabs/assets/js/frontend/handlers/nested-tabs */ "../modules/nested-tabs/assets/js/frontend/handlers/nested-tabs.js"));
745var _lightbox = _interopRequireDefault(__webpack_require__(/*! elementor-frontend/utils/lightbox/lightbox */ "../assets/dev/js/frontend/utils/lightbox/lightbox.js"));
746elementorFrontend.elements.$window.on('elementor/frontend/init', () => {
747  elementorFrontend.elementsHandler.elementsHandlers = {
748    'accordion.default': _accordion.default,
749    'alert.default': _alert.default,
750    'counter.default': _counter.default,
751    'progress.default': _progress.default,
752    'tabs.default': _tabs.default,
753    'nested-tabs.default': _nestedTabs.default,
754    'toggle.default': _toggle.default,
755    'video.default': _video.default,
756    'image-carousel.default': _imageCarousel.default,
757    'text-editor.default': _textEditor.default
758  };
759  elementorFrontend.on('components:init', () => {
760    // We first need to delete the property because by default it's a getter function that cannot be overwritten.
761    delete elementorFrontend.utils.lightbox;
762    elementorFrontend.utils.lightbox = new _lightbox.default();
763  });
764});
765
766/***/ }),
767
768/***/ "../assets/dev/js/frontend/utils/icons/e-icons.js":
769/*!********************************************************!*\
770  !*** ../assets/dev/js/frontend/utils/icons/e-icons.js ***!
771  \********************************************************/
772/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
773
774"use strict";
775
776
777var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
778Object.defineProperty(exports, "__esModule", ({
779  value: true
780}));
781exports.zoomOutBold = exports.zoomInBold = exports.twitter = exports.shareArrow = exports.pinterest = exports.loading = exports.frameMinimize = exports.frameExpand = exports.facebook = exports.downloadBold = exports.close = exports.chevronRight = exports.chevronLeft = void 0;
782var _manager = _interopRequireDefault(__webpack_require__(/*! ./manager */ "../assets/dev/js/frontend/utils/icons/manager.js"));
783// This file is automatically generated, please don't change anything in this file.
784
785const iconsManager = new _manager.default('eicon');
786const chevronLeft = {
787  get element() {
788    const svgData = {
789      path: 'M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z',
790      width: 1000,
791      height: 1000
792    };
793    return iconsManager.createSvgElement('chevron-left', svgData);
794  }
795};
796exports.chevronLeft = chevronLeft;
797const chevronRight = {
798  get element() {
799    const svgData = {
800      path: 'M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z',
801      width: 1000,
802      height: 1000
803    };
804    return iconsManager.createSvgElement('chevron-right', svgData);
805  }
806};
807exports.chevronRight = chevronRight;
808const close = {
809  get element() {
810    const svgData = {
811      path: 'M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z',
812      width: 1000,
813      height: 1000
814    };
815    return iconsManager.createSvgElement('close', svgData);
816  }
817};
818exports.close = close;
819const downloadBold = {
820  get element() {
821    const svgData = {
822      path: 'M572 42H428C405 42 385 61 385 85V385H228C197 385 180 424 203 447L475 719C489 732 511 732 524 719L797 447C819 424 803 385 771 385H614V85C615 61 595 42 572 42ZM958 915V715C958 691 939 672 915 672H653L565 760C529 796 471 796 435 760L347 672H85C61 672 42 691 42 715V915C42 939 61 958 85 958H915C939 958 958 939 958 915ZM736 873C736 853 720 837 700 837 681 837 665 853 665 873 665 892 681 908 700 908 720 908 736 892 736 873ZM815 837C835 837 851 853 851 873 851 892 835 908 815 908 795 908 779 892 779 873 779 853 795 837 815 837Z',
823      width: 1000,
824      height: 1000
825    };
826    return iconsManager.createSvgElement('download-bold', svgData);
827  }
828};
829exports.downloadBold = downloadBold;
830const facebook = {
831  get element() {
832    const svgData = {
833      path: 'M858 42H142C88 42 42 87 42 142V863C42 913 88 958 142 958H421V646H292V500H421V387C421 258 496 192 613 192 667 192 725 200 725 200V325H663C600 325 579 362 579 404V500H721L700 646H583V958H863C917 958 963 913 963 858V142C958 87 913 42 858 42L858 42Z',
834      width: 1000,
835      height: 1000
836    };
837    return iconsManager.createSvgElement('facebook', svgData);
838  }
839};
840exports.facebook = facebook;
841const frameExpand = {
842  get element() {
843    const svgData = {
844      path: 'M863 583C890 583 914 605 916 632L917 637V863L916 868C914 893 893 914 868 916L863 917H638L632 916C607 914 586 893 584 868L583 863 584 857C586 832 607 811 632 809L638 808H808V637L809 632C811 605 835 583 863 583ZM138 583C165 583 189 605 191 632L192 637V808H363C390 808 414 830 416 857L417 8
84463C417 890 395 914 368 916L363 917H138C110 917 86 895 84 868L83 863V637C83 607 108 583 138 583ZM863 83C890 83 914 105 916 132L917 137V362C917 392 893 417 863 417 835 417 811 395 809 368L808 362V192H638C610 192 586 170 584 143L583 137C583 110 605 86 632 84L638 83H863ZM363 83L368 84C393 86 414 107 416 132L417 137 416 143C414 168 393 189 368 191L363 192H192V362L191 368C189 395 165 417 138 417S86 395 84 368L83 362V137L84 132C86 107 107 86 132 84L138 83H363Z',
845      width: 1000,
846      height: 1000
847    };
848    return iconsManager.createSvgElement('frame-expand', svgData);
849  }
850};
851exports.frameExpand = frameExpand;
852const frameMinimize = {
853  get element() {
854    const svgData = {
855      path: 'M363 583C392 583 413 604 417 633L417 637V863C417 892 392 917 363 917 333 917 313 896 308 867L308 863V692H138C108 692 88 671 83 642L83 637C83 608 104 587 133 583L138 583H363ZM638 583C608 583 588 604 583 633L583 637V863C583 892 608 917 638 917 667 917 688 896 692 867L692 863V692H863C892 692 913 671 917 642L917 637C917 608 896 587 867 583L863 583H638ZM363 417C392 417 413 396 417 367L417 362V137C417 108 392 83 363 83 333 83 313 104 308 133L308 137V308H138C108 308 88 329 83 358L83 362C83 392 104 412 133 417L138 417H363ZM638 417C608 417 588 396 583 367L583 362V137C583 108 608 83 638 83 667 83 688 104 692 133L692 137V308H863C892 308 913 329 917 358L917 362C917 392 896 412 867 417L863 417H638Z',
856      width: 1000,
857      height: 1000
858    };
859    return iconsManager.createSvgElement('frame-minimize', svgData);
860  }
861};
862exports.frameMinimize = frameMinimize;
863const loading = {
864  get element() {
865    const svgData = {
866      path: 'M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z',
867      width: 1000,
868      height: 1000
869    };
870    return iconsManager.createSvgElement('loading', svgData);
871  }
872};
873exports.loading = loading;
874const pinterest = {
875  get element() {
876    const svgData = {
877      path: 'M950 496C950 746 746 950 496 950 450 950 404 942 363 929 379 900 408 850 421 808 425 787 450 700 450 700 467 729 508 754 554 754 692 754 792 629 792 471 792 321 671 208 513 208 317 208 213 342 213 483 213 550 250 633 304 658 313 662 317 662 321 654 321 650 329 617 333 604 333 600 333 596 329 592 313 567 296 525 296 487 288 387 367 292 496 292 608 292 688 367 688 475 688 600 625 683 546 683 500 683 467 646 479 600 492 546 517 487 517 450 517 417 500 387 458 387 413 387 375 433 375 496 375 537 388 562 388 562S342 754 333 787C325 825 329 883 333 917 163 854 42 687 42 496 42 246 246 42 496 42S950 246 950 496Z',
878      width: 1000,
879      height: 1000
880    };
881    return iconsManager.createSvgElement('pinterest', svgData);
882  }
883};
884exports.pinterest = pinterest;
885const shareArrow = {
886  get element() {
887    const svgData = {
888      path: 'M946 383L667 133C642 112 604 129 604 162V292C238 296 71 637 42 812 238 587 363 521 604 517V658C604 692 642 708 667 687L946 442C963 425 963 400 946 383Z',
889      width: 1000,
890      height: 1000
891    };
892    return iconsManager.createSvgElement('share-arrow', svgData);
893  }
894};
895exports.shareArrow = shareArrow;
896const twitter = {
897  get element() {
898    const svgData = {
899      path: 'M863 312C863 321 863 329 863 337 863 587 675 871 329 871 221 871 125 842 42 787 58 787 71 792 88 792 175 792 254 762 321 712 238 712 171 658 146 583 158 583 171 587 183 587 200 587 217 583 233 579 146 562 83 487 83 396V387C108 400 138 408 167 412 117 379 83 321 83 254 83 221 92 187 108 158 200 271 342 346 496 354 492 342 492 325 492 312 492 208 575 125 679 125 733 125 783 146 817 183 858 175 900 158 938 137 925 179 896 217 854 242 892 237 929 229 963 212 933 250 900 283 863 312Z',
900      width: 1000,
901      height: 1000
902    };
903    return iconsManager.createSvgElement('twitter', svgData);
904  }
905};
906exports.twitter = twitter;
907const zoomInBold = {
908  get element() {
909    const svgData = {
910      path: 'M388 383V312C388 283 413 258 442 258 471 258 496 283 496 312V383H567C596 383 621 408 621 437S596 492 567 492H496V562C496 592 471 617 442 617 413 617 388 592 388 562V492H317C288 492 263 467 263 437S288 383 317 383H388ZM654 733C592 779 517 804 438 804 233 804 71 642 71 437S233 71 438 71 804 233 804 437C804 521 779 596 733 654L896 817C917 837 917 871 896 892 875 913 842 913 821 892L654 733ZM438 696C579 696 696 579 696 437S579 179 438 179 179 296 179 437 296 696 438 696Z',
911      width: 1000,
912      height: 1000
913    };
914    return iconsManager.createSvgElement('zoom-in-bold', svgData);
915  }
916};
917exports.zoomInBold = zoomInBold;
918const zoomOutBold = {
919  get element() {
920    const svgData = {
921      path: 'M750 683L946 879C963 896 963 929 946 946 929 963 896 967 879 946L683 750C617 804 533 833 438 833 221 833 42 654 42 437S221 42 438 42 833 221 833 437C833 529 800 612 750 683ZM296 392H575C600 392 621 412 621 442 621 467 600 487 575 487H296C271 487 250 467 250 442 250 412 271 392 296 392ZM438 737C604 737 738 604 738 437S604 137 438 137 138 271 138 437 271 737 438 737Z',
922      width: 1000,
923      height: 1000
924    };
925    return iconsManager.createSvgElement('zoom-out-bold', svgData);
926  }
927};
928exports.zoomOutBold = zoomOutBold;
929
930/***/ }),
931
932/***/ "../assets/dev/js/frontend/utils/icons/manager.js":
933/*!********************************************************!*\
934  !*** ../assets/dev/js/frontend/utils/icons/manager.js ***!
935  \********************************************************/
936/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
937
938"use strict";
939
940
941var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
942Object.defineProperty(exports, "__esModule", ({
943  value: true
944}));
945exports["default"] = void 0;
946var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
947class IconsManager {
948  constructor(elementsPrefix) {
949    this.prefix = `${elementsPrefix}-`;
950    this.createSvgSymbolsContainer();
951  }
952  createSvgElement(name, _ref) {
953    let {
954      path,
955      width,
956      height
957    } = _ref;
958    const iconName = this.prefix + name,
959      iconSelector = '#' + this.prefix + name;
960
961    // Create symbol if not exist yet.
962    if (!IconsManager.iconsUsageList.includes(iconName)) {
963      if (!IconsManager.symbolsContainer.querySelector(iconSelector)) {
964        const symbol = this.createSymbolElement({
965          id: iconName,
966          path,
967          width,
968          height
969        });
970        IconsManager.symbolsContainer.appendChild(symbol);
971      }
972      IconsManager.iconsUsageList.push(iconName);
973    }
974    return this.createSvgIconElement({
975      iconName,
976      iconSelector
977    });
978  }
979  createSvgNode(tag, _ref2) {
980    let {
981      props = {},
982      attrs = {}
983    } = _ref2;
984    const node = document.createElementNS('http://www.w3.org/2000/svg', tag);
985    Object.keys(props).map(key => node[key] = props[key]);
986    Object.keys(attrs).map(key => node.setAttributeNS(null, key, attrs[key]));
987    return node;
988  }
989  createSvgIconElement(_ref3) {
990    let {
991      iconName,
992      iconSelector
993    } = _ref3;
994    return this.createSvgNode('svg', {
995      props: {
996        innerHTML: '<use xlink:href="' + iconSelector + '" />'
997      },
998      attrs: {
999        class: 'e-font-icon-svg e-' + iconName
1000      }
1001    });
1002  }
1003  createSvgSymbolsContainer() {
1004    if (!IconsManager.symbolsContainer) {
1005      const symbolsContainerId = 'e-font-icon-svg-symbols';
1006      IconsManager.symbolsContainer = document.getElementById(symbolsContainerId);
1007      if (!IconsManager.symbolsContainer) {
1008        IconsManager.symbolsContainer = this.createSvgNode('svg', {
1009          attrs: {
1010            style: 'display: none;',
1011            class: symbolsContainerId
1012          }
1013        });
1014        document.body.appendChild(IconsManager.symbolsContainer);
1015      }
1016    }
1017  }
1018  createSymbolElement(_ref4) {
1019    let {
1020      id,
1021      path,
1022      width,
1023      height
1024    } = _ref4;
1025    return this.createSvgNode('symbol', {
1026      props: {
1027        innerHTML: '<path d="' + path + '"></path>',
1028        id
1029      },
1030      attrs: {
1031        viewBox: '0 0 ' + width + ' ' + height
1032      }
1033    });
1034  }
1035}
1036exports["default"] = IconsManager;
1037(0, _defineProperty2.default)(IconsManager, "symbolsContainer", void 0);
1038(0, _defineProperty2.default)(IconsManager, "iconsUsageList", []);
1039
1040/***/ }),
1041
1042/***/ "../assets/dev/js/frontend/utils/lightbox/lightbox.js":
1043/*!************************************************************!*\
1044  !*** ../assets/dev/js/frontend/utils/lightbox/lightbox.js ***!
1045  \************************************************************/
1046/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1047
1048"use strict";
1049
1050
1051var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1052var _screenfull = _interopRequireDefault(__webpack_require__(/*! ./screenfull */ "../assets/dev/js/frontend/utils/lightbox/screenfull.js"));
1053var _eIcons = __webpack_require__(/*! @elementor/e-icons */ "../assets/dev/js/frontend/utils/icons/e-icons.js");
1054module.exports = elementorModules.ViewModule.extend({
1055  oldAspectRatio: null,
1056  oldAnimation: null,
1057  swiper: null,
1058  player: null,
1059  isFontIconSvgExperiment: elementorFrontend.config.experimentalFeatures.e_font_icon_svg,
1060  getDefaultSettings() {
1061    return {
1062      classes: {
1063        aspectRatio: 'elementor-aspect-ratio-%s',
1064        item: 'elementor-lightbox-item',
1065        image: 'elementor-lightbox-image',
1066        videoContainer: 'elementor-video-container',
1067        videoWrapper: 'elementor-fit-aspect-ratio',
1068        playButton: 'elementor-custom-embed-play',
1069        playButtonIcon: 'fa',
1070        playing: 'elementor-playing',
1071        hidden: 'elementor-hidden',
1072        invisible: 'elementor-invisible',
1073        preventClose: 'elementor-lightbox-prevent-close',
1074        slideshow: {
1075          container: elementorFrontend.config.swiperClass,
1076          slidesWrapper: 'swiper-wrapper',
1077          prevButton: 'elementor-swiper-button elementor-swiper-button-prev',
1078          nextButton: 'elementor-swiper-button elementor-swiper-button-next',
1079          prevButtonIcon: 'eicon-chevron-left',
1080          nextButtonIcon: 'eicon-chevron-right',
1081          slide: 'swiper-slide',
1082          header: 'elementor-slideshow__header',
1083          footer: 'elementor-slideshow__footer',
1084          title: 'elementor-slideshow__title',
1085          description: 'elementor-slideshow__description',
1086          counter: 'elementor-slideshow__counter',
1087          iconExpand: 'eicon-frame-expand',
1088          iconShrink: 'eicon-frame-minimize',
1089          iconZoomIn: 'eicon-zoom-in-bold',
1090          iconZoomOut: 'eicon-zoom-out-bold',
1091          iconShare: 'eicon-share-arrow',
1092          shareMenu: 'elementor-slideshow__share-menu',
1093          shareLinks: 'elementor-slideshow__share-links',
1094          hideUiVisibility: 'elementor-slideshow--ui-hidden',
1095          shareMode: 'elementor-slideshow--share-mode',
1096          fullscreenMode: 'elementor-slideshow--fullscreen-mode',
1097          zoomMode: 'elementor-slideshow--zoom-mode'
1098        }
1099      },
1100      selectors: {
1101        image: '.elementor-lightbox-image',
1102        links: 'a, [data-elementor-lightbox]',
1103        slideshow: {
1104          activeSlide: '.swiper-slide-active',
1105          prevSlide: '.swiper-slide-prev',
1106          nextSlide: '.swiper-slide-next'
1107        }
1108      },
1109      modalOptions: {
1110        id: 'elementor-lightbox',
1111        entranceAnimation: 'zoomIn',
1112        videoAspectRatio: 169,
1113        position: {
1114          enable: false
1115        }
1116      }
1117    };
1118  },
1119  getModal() {
1120    if (!module.exports.modal) {
1121      this.initModal();
1122    }
1123    return module.exports.modal;
1124  },
1125  initModal() {
1126    const closeIcon = {};
1127
1128    // If the experiment is active the closeIcon should be an entire SVG element otherwise it should pass the eicon class name.
1129    if (this.isFontIconSvgExperiment) {
1130      closeIcon.iconElement = _eIcons.close.element;
1131    } else {
1132      closeIcon.iconClass = 'eicon-close';
1133    }
1134    const modal = module.exports.modal = elementorFrontend.getDialogsManager().createWidget('lightbox', {
1135      className: 'elementor-lightbox',
1136      closeButton: true,
1137      closeButtonOptions: {
1138        ...closeIcon,
1139        attributes: {
1140          role: 'button',
1141          tabindex: 0,
1142          'aria-label': elementorFrontend.config.i18n.close + ' (Esc)'
1143        }
1144      },
1145      selectors: {
1146        preventClose: '.' + this.getSettings('classes.preventClose')
1147      },
1148      hide: {
1149        onClick: true
1150      }
1151    });
1152    modal.on('hide', function () {
1153      modal.setMessage('');
1154    });
1155  },
1156  showModal(options) {
1157    if (options.url && !options.url.startsWith('http')) {
1158      return;
1159    }
1160    this.elements.$closeButton = this.getModal().getElements('closeButton');
1161    this.$buttons = this.elements.$closeButton;
1162    this.focusedButton = null;
1163    const self = this,
1164      defaultOptions = self.getDefaultSettings().modalOptions;
1165    self.id = options.id;
1166    self.setSettings('modalOptions', jQuery.extend(defaultOptions, options.modalOptions));
1167    const modal = self.getModal();
1168    modal.setID(self.getSettings('modalOptions.id'));
1169    modal.onShow = function () {
1170      DialogsManager.getWidgetType('lightbox').prototype.onShow.apply(modal, arguments);
1171      self.setEntranceAnimation();
1172    };
1173    modal.onHide = function () {
1174      DialogsManager.getWidgetType('lightbox').prototype.onHide.apply(modal, arguments);
1175      modal.getElements('message').removeClass('animated');
1176      if (_screenfull.default.isFullscreen) {
1177        self.deactivateFullscreen();
1178      }
1179      self.unbindHotKeys();
1180    };
1181    switch (options.type) {
1182      case 'video':
1183        self.setVideoContent(options);
1184        break;
1185      case 'image':
1186        {
1187          const slides = [{
1188            image: options.url,
1189            index: 0,
1190            title: options.title,
1191            description: options.description,
1192            hash: options.hash
1193          }];
1194          options.slideshow = {
1195            slides,
1196            swiper: {
1197              loop: false,
1198              pagination: false
1199            }
1200          };
1201          self.setSlideshowContent(options.slideshow);
1202          break;
1203        }
1204      case 'slideshow':
1205        self.setSlideshowContent(options.slideshow);
1206        break;
1207      default:
1208        self.setHTMLContent(options.html);
1209    }
1210    modal.show();
1211  },
1212  createLightbox(element) {
1213    let lightboxData = {};
1214    if (element.dataset.elementorLightbox) {
1215      lightboxData = JSON.parse(element.dataset.elementorLightbox);
1216    }
1217    if (lightboxData.type && 'slideshow' !== lightboxData.type) {
1218      this.showModal(lightboxData);
1219      return;
1220    }
1221    if (!element.dataset.elementorLightboxSlideshow) {
1222      const slideshowID = 'single-img';
1223      this.showModal({
1224        type: 'image',
1225        id: slideshowID,
1226        url: element.href,
1227        hash: element.getAttribute('data-e-action-hash'),
1228        title: element.dataset.elementorLightboxTitle,
1229        description: element.dataset.elementorLightboxDescription,
1230        modalOptions: {
1231          id: 'elementor-lightbox-slideshow-' + slideshowID
1232        }
1233      });
1234      return;
1235    }
1236    const initialSlideURL = element.dataset.elementorLightboxVideo || element.href;
1237    this.openSlideshow(element.dataset.elementorLightboxSlideshow, initialSlideURL);
1238  },
1239  setHTMLContent(html) {
1240    if (window.elementorCommon) {
1241      elementorDevTools.deprecation.deprecated('elementorFrontend.utils.lightbox.setHTMLContent', '3.1.4');
1242    }
1243    this.getModal().setMessage(html);
1244  },
1245  setVideoContent(options) {
1246    const $ = jQuery;
1247    let $videoElement;
1248    if ('hosted' === options.videoType) {
1249      const videoParams = $.extend({
1250        src: options.url,
1251        autoplay: ''
1252      }, options.videoParams);
1253      $videoElement = $('<video>', videoParams);
1254    } else {
1255      let apiProvider;
1256      if (-1 !== options.url.indexOf('vimeo.com')) {
1257        apiProvider = elementorFrontend.utils.vimeo;
1258      } else if (options.url.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com|youtube-nocookie\.com)/)) {
1259        apiProvider = elementorFrontend.utils.youtube;
1260      } else {
1261        return;
1262      }
1263      $videoElement = $('<iframe>', {
1264        src: apiProvider.getAutoplayURL(options.url),
1265        allowfullscreen: 1
1266      });
1267    }
1268    const classes = this.getSettings('classes'),
1269      $videoContainer = $('<div>', {
1270        class: `${classes.videoContainer} ${classes.preventClose}`
1271      }),
1272      $videoWrapper = $('<div>', {
1273        class: classes.videoWrapper
1274      });
1275    $videoWrapper.append($videoElement);
1276    $videoContainer.append($videoWrapper);
1277    const modal = this.getModal();
1278    modal.setMessage($videoContainer);
1279    this.setVideoAspectRatio();
1280    const onHideMethod = modal.onHide;
1281    modal.onHide = function () {
1282      onHideMethod();
1283      this.$buttons = jQuery();
1284      this.focusedButton = null;
1285      modal.getElements('message').removeClass('elementor-fit-aspect-ratio');
1286    };
1287  },
1288  getShareLinks() {
1289    const {
1290        i18n
1291      } = elementorFrontend.config,
1292      socialNetworks = {
1293        facebook: {
1294          label: i18n.shareOnFacebook,
1295          iconElement: _eIcons.facebook
1296        },
1297        twitter: {
1298          label: i18n.shareOnTwitter,
1299          iconElement: _eIcons.twitter
1300        },
1301        pinterest: {
1302          label: i18n.pinIt,
1303          iconElement: _eIcons.pinterest
1304        }
1305      },
1306      $ = jQuery,
1307      classes = this.getSettings('classes'),
1308      selectors = this.getSettings('selectors'),
1309      $linkList = $('<div>', {
1310        class: classes.slideshow.shareLinks
1311      }),
1312      $activeSlide = this.getSlide('active'),
1313      $image = $activeSlide.find(selectors.image),
1314      videoUrl = $activeSlide.data('elementor-slideshow-video');
1315    let itemUrl;
1316    if (videoUrl) {
1317      itemUrl = videoUrl;
1318    } else {
1319      itemUrl = $image.attr('src');
1320    }
1321    $.each(socialNetworks, (key, data) => {
1322      const networkLabel = data.label,
1323        $link = $('<a>', {
1324          href: this.createShareLink(key, itemUrl, $activeSlide.attr('data-e-action-hash')),
1325          target: '_blank'
1326        }).text(networkLabel),
1327        $socialNetworkIconElement = this.isFontIconSvgExperiment ? $(data.iconElement.element) : $('<i>', {
1328          class: 'eicon-' + key,
1329          'aria-hidden': 'true'
1330        });
1331      $link.prepend($socialNetworkIconElement);
1332      $linkList.append($link);
1333    });
1334    if (!videoUrl) {
1335      const $downloadIcon = this.isFontIconSvgExperiment ? $(_eIcons.downloadBold.element) : $('<i>', {
1336        class: 'eicon-download-bold'
1337      });
1338      $downloadIcon.attr('aria-label', i18n.download);
1339      $linkList.append($('<a>', {
1340        href: itemUrl,
1341        download: ''
1342      }).text(i18n.downloadImage).prepend($downloadIcon));
1343    }
1344    return $linkList;
1345  },
1346  createShareLink(networkName, itemUrl) {
1347    let hash = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1348    const options = {};
1349    if ('pinterest' === networkName) {
1350      options.image = encodeURIComponent(itemUrl);
1351    } else {
1352      options.url = encodeURIComponent(location.href.replace(/#.*/, '') + hash);
1353    }
1354    return ShareLink.getNetworkLink(networkName, options);
1355  },
1356  getSlideshowHeader() {
1357    const {
1358        i18n
1359      } = elementorFrontend.config,
1360      $ = jQuery,
1361      showCounter = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_counter'),
1362      showFullscreen = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_fullscreen'),
1363      showZoom = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_zoom'),
1364      showShare = 'yes' === elementorFrontend.getKitSettings('lightbox_enable_share'),
1365      classes = this.getSettings('classes'),
1366      slideshowClasses = classes.slideshow,
1367      elements = this.elements;
1368    if (!(showCounter || showFullscreen || showZoom || showShare)) {
1369      return;
1370    }
1371    elements.$header = $('<header>', {
1372      class: slideshowClasses.header + ' ' + classes.preventClose
1373    });
1374    if (showShare) {
1375      const iconElement = this.isFontIconSvgExperiment ? _eIcons.shareArrow.element : '<i>';
1376      elements.$iconShare = $(iconElement, {
1377        class: slideshowClasses.iconShare,
1378        role: 'button',
1379        tabindex: 0,
1380        'aria-label': i18n.share,
1381        'aria-expanded': false
1382      }).append($('<span>'));
1383      const $shareLinks = $('<div>');
1384      $shareLinks.on('click', e => {
1385        e.stopPropagation();
1386      });
1387      elements.$shareMenu = $('<div>', {
1388        class: slideshowClasses.shareMenu
1389      }).append($shareLinks);
1390      elements.$iconShare.add(elements.$shareMenu).on('click', this.toggleShareMenu);
1391      elements.$header.append(elements.$iconShare, elements.$shareMenu);
1392      this.$buttons = this.$buttons.add(elements.$iconShare);
1393    }
1394    if (showZoom) {
1395      const iconElement = this.isFontIconSvgExperiment ? _eIcons.zoomInBold.element : '<i>',
1396        showZoomElements = [],
1397        showZoomAttrs = {
1398          role: 'switch',
1399          tabindex: 0,
1400          'aria-checked': false,
1401          'aria-label': i18n.zoom
1402        },
1403        zoomAttrs = {
1404          ...showZoomAttrs
1405        };
1406      if (!this.isFontIconSvgExperiment) {
1407        zoomAttrs.class = slideshowClasses.iconZoomIn;
1408      }
1409      elements.$iconZoom = $(iconElement).attr(zoomAttrs).on('click', this.toggleZoomMode);
1410      showZoomElements.push(elements.$iconZoom);
1411      if (this.isFontIconSvgExperiment) {
1412        elements.$iconZoomOut = $(_eIcons.zoomOutBold.element).attr(showZoomAttrs).addClass(classe
1412s.hidden).on('click', this.toggleZoomMode);
1413        showZoomElements.push(elements.$iconZoomOut);
1414      }
1415      elements.$header.append(showZoomElements);
1416      this.$buttons = this.$buttons.add(showZoomElements);
1417    }
1418    if (showFullscreen) {
1419      const iconElement = this.isFontIconSvgExperiment ? _eIcons.frameExpand.element : '<i>',
1420        fullScreenElements = [],
1421        fullScreenAttrs = {
1422          role: 'switch',
1423          tabindex: 0,
1424          'aria-checked': false,
1425          'aria-label': i18n.fullscreen
1426        },
1427        expandAttrs = {
1428          ...fullScreenAttrs
1429        };
1430
1431      // Only if the experiment is not active, we use the class-name in order to render the icon.
1432      if (!this.isFontIconSvgExperiment) {
1433        expandAttrs.class = slideshowClasses.iconExpand;
1434      }
1435      elements.$iconExpand = $(iconElement).append($('<span>'), $('<span>')).attr(expandAttrs).on('click', this.toggleFullscreen);
1436      fullScreenElements.push(elements.$iconExpand);
1437      if (this.isFontIconSvgExperiment) {
1438        elements.$iconMinimize = $(_eIcons.frameMinimize.element).attr(fullScreenAttrs).addClass(classe
1438s.hidden).on('click', this.toggleFullscreen);
1439        fullScreenElements.push(elements.$iconMinimize);
1440      }
1441      elements.$header.append(fullScreenElements);
1442      this.$buttons = this.$buttons.add(fullScreenElements);
1443    }
1444    if (showCounter) {
1445      elements.$counter = $('<span>', {
1446        class: slideshowClasses.counter
1447      });
1448      elements.$header.append(elements.$counter);
1449    }
1450    return elements.$header;
1451  },
1452  toggleFullscreen() {
1453    if (_screenfull.default.isFullscreen) {
1454      this.deactivateFullscreen();
1455    } else if (_screenfull.default.isEnabled) {
1456      this.activateFullscreen();
1457    }
1458  },
1459  toggleZoomMode() {
1460    if (1 !== this.swiper.zoom.scale) {
1461      this.deactivateZoom();
1462    } else {
1463      this.activateZoom();
1464    }
1465  },
1466  toggleShareMenu() {
1467    if (this.shareMode) {
1468      this.deactivateShareMode();
1469    } else {
1470      this.elements.$shareMenu.html(this.getShareLinks());
1471      this.activateShareMode();
1472    }
1473  },
1474  activateShareMode() {
1475    const classes = this.getSettings('classes');
1476    this.elements.$container.addClass(classes.slideshow.shareMode);
1477    this.elements.$iconShare.attr('aria-expanded', true);
1478
1479    // Prevent swiper interactions while in share mode
1480    this.swiper.detachEvents();
1481
1482    // Temporarily replace tabbable buttons with share-menu items
1483    this.$originalButtons = this.$buttons;
1484    this.$buttons = this.elements.$iconShare.add(this.elements.$shareMenu.find('a'));
1485    this.shareMode = true;
1486  },
1487  deactivateShareMode() {
1488    const classes = this.getSettings('classes');
1489    this.elements.$container.removeClass(classes.slideshow.shareMode);
1490    this.elements.$iconShare.attr('aria-expanded', false);
1491    this.swiper.attachEvents();
1492    this.$buttons = this.$originalButtons;
1493    this.shareMode = false;
1494  },
1495  activateFullscreen() {
1496    const classes = this.getSettings('classes');
1497    _screenfull.default.request(this.elements.$container.parents('.dialog-widget')[0]);
1498    if (this.isFontIconSvgExperiment) {
1499      this.elements.$iconExpand.addClass(classes.hidden).attr('aria-checked', 'false');
1500      this.elements.$iconMinimize.removeClass(classes.hidden).attr('aria-checked', 'true');
1501    } else {
1502      this.elements.$iconExpand.removeClass(classes.slideshow.iconExpand).addClass(classe
1502s.slideshow.iconShrink).attr('aria-checked', 'true');
1503    }
1504    this.elements.$container.addClass(classes.slideshow.fullscreenMode);
1505  },
1506  deactivateFullscreen() {
1507    const classes = this.getSettings('classes');
1508    _screenfull.default.exit();
1509    if (this.isFontIconSvgExperiment) {
1510      this.elements.$iconExpand.removeClass(classes.hidden).attr('aria-checked', 'true');
1511      this.elements.$iconMinimize.addClass(classes.hidden).attr('aria-checked', 'false');
1512    } else {
1513      this.elements.$iconExpand.removeClass(classes.slideshow.iconShrink).addClass(classes.slideshow.iconExpand).attr('aria-checked', 'false');
1514    }
1515    this.elements.$container.removeClass(classes.slideshow.fullscreenMode);
1516  },
1517  activateZoom() {
1518    const swiper = this.swiper,
1519      elements = this.elements,
1520      classes = this.getSettings('classes');
1521    swiper.zoom.in();
1522    swiper.allowSlideNext = false;
1523    swiper.allowSlidePrev = false;
1524    swiper.allowTouchMove = false;
1525    elements.$container.addClass(classes.slideshow.zoomMode);
1526    if (this.isFontIconSvgExperiment) {
1527      elements.$iconZoom.addClass(classes.hidden).attr('aria-checked', 'false');
1528      elements.$iconZoomOut.removeClass(classes.hidden).attr('aria-checked', 'true');
1529    } else {
1530      elements.$iconZoom.removeClass(classes.slideshow.iconZoomIn).addClass(classes.slideshow.iconZoomOut);
1531    }
1532  },
1533  deactivateZoom() {
1534    const swiper = this.swiper,
1535      elements = this.elements,
1536      classes = this.getSettings('classes');
1537    swiper.zoom.out();
1538    swiper.allowSlideNext = true;
1539    swiper.allowSlidePrev = true;
1540    swiper.allowTouchMove = true;
1541    elements.$container.removeClass(classes.slideshow.zoomMode);
1542    if (this.isFontIconSvgExperiment) {
1543      elements.$iconZoom.removeClass(classes.hidden).attr('aria-checked', 'true');
1544      elements.$iconZoomOut.addClass(classes.hidden).attr('aria-checked', 'false');
1545    } else {
1546      elements.$iconZoom.removeClass(classes.slideshow.iconZoomOut).addClass(classes.slideshow.iconZoomIn);
1547    }
1548  },
1549  getSlideshowFooter() {
1550    const $ = jQuery,
1551      classes = this.getSettings('classes'),
1552      $footer = $('<footer>', {
1553        class: classes.slideshow.footer + ' ' + classes.preventClose
1554      }),
1555      $title = $('<div>', {
1556        class: classes.slideshow.title
1557      }),
1558      $description = $('<div>', {
1559        class: classes.slideshow.description
1560      });
1561    $footer.append($title, $description);
1562    return $footer;
1563  },
1564  setSlideshowContent(options) {
1565    const {
1566        i18n
1567      } = elementorFrontend.config,
1568      $ = jQuery,
1569      isSingleSlide = 1 === options.slides.length,
1570      hasTitle = '' !== elementorFrontend.getKitSettings('lightbox_title_src'),
1571      hasDescription = '' !== elementorFrontend.getKitSettings('lightbox_description_src'),
1572      showFooter = hasTitle || hasDescription,
1573      classes = this.getSettings('classes'),
1574      slideshowClasses = classes.slideshow,
1575      $container = $('<div>', {
1576        class: slideshowClasses.container
1577      }),
1578      $slidesWrapper = $('<div>', {
1579        class: slideshowClasses.slidesWrapper
1580      });
1581    let $prevButton, $nextButton;
1582    options.slides.forEach(slide => {
1583      let slideClass = slideshowClasses.slide + ' ' + classes.item;
1584      if (slide.video) {
1585        slideClass += ' ' + classes.video;
1586      }
1587      const $slide = $('<div>', {
1588        class: slideClass
1589      });
1590      if (slide.video) {
1591        $slide.attr('data-elementor-slideshow-video', slide.video);
1592        const playVideoLoadingElement = this.isFontIconSvgExperiment ? _eIcons.loading.element : '<i>',
1593          $playIcon = $('<div>', {
1594            class: classes.playButton
1595          }).html($(playVideoLoadingElement).attr('aria-label', i18n.playVideo).addClass(classes.playButtonIcon));
1596        $slide.append($playIcon);
1597      } else {
1598        const $zoomContainer = $('<div>', {
1599            class: 'swiper-zoom-container'
1600          }),
1601          $slidePlaceholder = $('<div class="swiper-lazy-preloader"></div>'),
1602          imageAttributes = {
1603            'data-src': slide.image,
1604            class: classes.image + ' ' + classes.preventClose + ' swiper-lazy'
1605          };
1606        if (slide.title) {
1607          imageAttributes['data-title'] = slide.title;
1608          imageAttributes.alt = slide.title;
1609        }
1610        if (slide.description) {
1611          imageAttributes['data-description'] = slide.description;
1612          imageAttributes.alt += ' - ' + slide.description;
1613        }
1614        const $slideImage = $('<img>', imageAttributes);
1615        $zoomContainer.append([$slideImage, $slidePlaceholder]);
1616        $slide.append($zoomContainer);
1617      }
1618      if (slide.hash) {
1619        $slide.attr('data-e-action-hash', slide.hash);
1620      }
1621      $slidesWrapper.append($slide);
1622    });
1623    this.elements.$container = $container;
1624    this.elements.$header = this.getSlideshowHeader();
1625    $container.prepend(this.elements.$header).append($slidesWrapper);
1626    if (!isSingleSlide) {
1627      const $prevButtonIcon = this.isFontIconSvgExperiment ? $(_eIcons.chevronLeft.element) : $('<i>', {
1628          class: slideshowClasses.prevButtonIcon,
1629          'aria-hidden': 'true'
1630        }),
1631        $nextButtonIcon = this.isFontIconSvgExperiment ? $(_eIcons.chevronRight.element) : $('<i>', {
1632          class: slideshowClasses.nextButtonIcon,
1633          'aria-hidden': 'true'
1634        }),
1635        $prevButtonLabel = $('<span>', {
1636          class: 'screen-reader-text'
1637        }).html(i18n.previous),
1638        $nextButtonLabel = $('<span>', {
1639          class: 'screen-reader-text'
1640        }).html(i18n.next);
1641      $prevButton = $('<div>', {
1642        class: slideshowClasses.prevButton + ' ' + classes.preventClose
1643      }).append($prevButtonIcon, $prevButtonLabel);
1644      $nextButton = $('<div>', {
1645        class: slideshowClasses.nextButton + ' ' + classes.preventClose
1646      }).append($nextButtonIcon, $nextButtonLabel);
1647      $container.append($nextButton, $prevButton);
1648      this.$buttons = this.$buttons.add($nextButton).add($prevButton);
1649    }
1650    if (showFooter) {
1651      this.elements.$footer = this.getSlideshowFooter();
1652      $container.append(this.elements.$footer);
1653    }
1654    this.setSettings('hideUiTimeout', '');
1655    $container.on('click mousemove keypress', this.showLightboxUi);
1656    const modal = this.getModal();
1657    modal.setMessage($container);
1658    const onShowMethod = modal.onShow;
1659    modal.onShow = async () => {
1660      onShowMethod();
1661      const swiperOptions = {
1662        pagination: {
1663          el: '.' + slideshowClasses.counter,
1664          type: 'fraction'
1665        },
1666        on: {
1667          slideChangeTransitionEnd: this.onSlideChange
1668        },
1669        lazy: {
1670          loadPrevNext: true
1671        },
1672        zoom: true,
1673        spaceBetween: 100,
1674        grabCursor: true,
1675        runCallbacksOnInit: false,
1676        loop: true,
1677        keyboard: true,
1678        handleElementorBreakpoints: true
1679      };
1680      if (!isSingleSlide) {
1681        swiperOptions.navigation = {
1682          prevEl: $prevButton[0],
1683          nextEl: $nextButton[0]
1684        };
1685      }
1686      if (options.swiper) {
1687        $.extend(swiperOptions, options.swiper);
1688      }
1689      const Swiper = elementorFrontend.utils.swiper;
1690      this.swiper = await new Swiper($container, swiperOptions);
1691
1692      // Expose the swiper instance in the frontend
1693      $container.data('swiper', this.swiper);
1694      this.setVideoAspectRatio();
1695      this.playSlideVideo();
1696      if (showFooter) {
1697        this.updateFooterText();
1698      }
1699      this.bindHotKeys();
1700      this.makeButtonsAccessible();
1701    };
1702  },
1703  makeButtonsAccessible() {
1704    this.$buttons.attr('tabindex', 0).on('keypress', event => {
1705      const ENTER_KEY = 13,
1706        SPACE_KEY = 32;
1707      if (ENTER_KEY === event.which || SPACE_KEY === event.which) {
1708        jQuery(event.currentTarget).trigger('click');
1709      }
1710    });
1711  },
1712  showLightboxUi() {
1713    const slideshowClasses = this.getSettings('classes').slideshow;
1714    this.elements.$container.removeClass(slideshowClasses.hideUiVisibility);
1715    clearTimeout(this.getSettings('hideUiTimeout'));
1716    this.setSettings('hideUiTimeout', setTimeout(() => {
1717      if (!this.shareMode) {
1718        this.elements.$container.addClass(slideshowClasses.hideUiVisibility);
1719      }
1720    }, 3500));
1721  },
1722  bindHotKeys() {
1723    this.getModal().getElements('window').on('keydown', this.activeKeyDown);
1724  },
1725  unbindHotKeys() {
1726    this.getModal().getElements('window').off('keydown', this.activeKeyDown);
1727  },
1728  activeKeyDown(event) {
1729    this.showLightboxUi();
1730    const TAB_KEY = 9;
1731    if (event.which === TAB_KEY) {
1732      const $buttons = this.$buttons;
1733      let focusedButton,
1734        isFirst = false,
1735        isLast = false;
1736      $buttons.each(index => {
1737        const item = $buttons[index];
1738        if (jQuery(item).is(':focus')) {
1739          focusedButton = item;
1740          isFirst = 0 === index;
1741          isLast = $buttons.length - 1 === index;
1742          return false;
1743        }
1744      });
1745      if (event.shiftKey) {
1746        if (isFirst) {
1747          event.preventDefault();
1748          $buttons.last().trigger('focus');
1749        }
1750      } else if (isLast || !focusedButton) {
1751        event.preventDefault();
1752        $buttons.first().trigger('focus');
1753      }
1754    }
1755  },
1756  setVideoAspectRatio(aspectRatio) {
1757    aspectRatio = aspectRatio || this.getSettings('modalOptions.videoAspectRatio');
1758    const $widgetContent = this.getModal().getElements('widgetContent'),
1759      oldAspectRatio = this.oldAspectRatio,
1760      aspectRatioClass = this.getSettings('classes.aspectRatio');
1761    this.oldAspectRatio = aspectRatio;
1762    if (oldAspectRatio) {
1763      $widgetContent.removeClass(aspectRatioClass.replace('%s', oldAspectRatio));
1764    }
1765    if (aspectRatio) {
1766      $widgetContent.addClass(aspectRatioClass.replace('%s', aspectRatio));
1767    }
1768  },
1769  getSlide(slideState) {
1770    return jQuery(this.swiper.slides).filter(this.getSettings('selectors.slideshow.' + slideState + 'Slide'));
1771  },
1772  updateFooterText() {
1773    if (!this.elements.$footer) {
1774      return;
1775    }
1776    const classes = this.getSettings('classes'),
1777      $activeSlide = this.getSlide('active'),
1778      $image = $activeSlide.find('.elementor-lightbox-image'),
1779      titleText = $image.data('title'),
1780      descriptionText = $image.data('description'),
1781      $title = this.elements.$footer.find('.' + classes.slideshow.title),
1782      $description = this.elements.$footer.find('.' + classes.slideshow.description);
1783    $title.text(titleText || '');
1784    $description.text(descriptionText || '');
1785  },
1786  playSlideVideo() {
1787    const $activeSlide = this.getSlide('active'),
1788      videoURL = $activeSlide.data('elementor-slideshow-video');
1789    if (!videoURL) {
1790      return;
1791    }
1792    const classes = this.getSettings('classes'),
1793      $videoContainer = jQuery('<div>', {
1794        class: classes.videoContainer + ' ' + classes.invisible
1795      }),
1796      $videoWrapper = jQuery('<div>', {
1797        class: classes.videoWrapper
1798      }),
1799      $playIcon = $activeSlide.children('.' + classes.playButton);
1800    let videoType, apiProvider;
1801    $videoContainer.append($videoWrapper);
1802    $activeSlide.append($videoContainer);
1803    if (-1 !== videoURL.indexOf('vimeo.com')) {
1804      videoType = 'vimeo';
1805      apiProvider = elementorFrontend.utils.vimeo;
1806    } else if (videoURL.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com)/)) {
1807      videoType = 'youtube';
1808      apiProvider = elementorFrontend.utils.youtube;
1809    }
1810    const videoID = apiProvider.getVideoIDFromURL(videoURL);
1811    apiProvider.onApiReady(apiObject => {
1812      if ('youtube' === videoType) {
1813        this.prepareYTVideo(apiObject, videoID, $videoContainer, $videoWrapper, $playIcon);
1814      } else if ('vimeo' === videoType) {
1815        this.prepareVimeoVideo(apiObject, videoURL, $videoContainer, $videoWrapper, $playIcon);
1816      }
1817    });
1818    $playIcon.addClass(classes.playing).removeClass(classes.hidden);
1819  },
1820  prepareYTVideo(YT, videoID, $videoContainer, $videoWrapper, $playIcon) {
1821    const classes = this.getSettings('classes'),
1822      $videoPlaceholderElement = jQuery('<div>');
1823    let startStateCode = YT.PlayerState.PLAYING;
1824    $videoWrapper.append($videoPlaceholderElement);
1825
1826    // Since version 67, Chrome doesn't fire the `PLAYING` state at start time
1827    if (window.chrome) {
1828      startStateCode = YT.PlayerState.UNSTARTED;
1829    }
1830    $videoContainer.addClass('elementor-loading' + ' ' + classes.invisible);
1831    this.player = new YT.Player($videoPlaceholderElement[0], {
1832      videoId: videoID,
1833      events: {
1834        onReady: () => {
1835          $playIcon.addClass(classes.hidden);
1836          $videoContainer.removeClass(classes.invisible);
1837          this.player.playVideo();
1838        },
1839        onStateChange: event => {
1840          if (event.data === startStateCode) {
1841            $videoContainer.removeClass('elementor-loading' + ' ' + classes.invisible);
1842          }
1843        }
1844      },
1845      playerVars: {
1846        controls: 0,
1847        rel: 0
1848      }
1849    });
1850  },
1851  prepareVimeoVideo(Vimeo, videoURL, $videoContainer, $videoWrapper, $playIcon) {
1852    const classes = this.getSettings('classes'),
1853      vimeoOptions = {
1854        url: videoURL,
1855        autoplay: true,
1856        transparent: false,
1857        playsinline: false
1858      };
1859    this.player = new Vimeo.Player($videoWrapper, vimeoOptions);
1860    this.player.ready().then(() => {
1861      $playIcon.addClass(classes.hidden);
1862      $videoContainer.removeClass(classes.invisible);
1863    });
1864  },
1865  setEntranceAnimation(animation) {
1866    animation = animation || elementorFrontend.getCurrentDeviceSetting(this.getSettings('modalOptions'), 'entranceAnimation');
1867    const $widgetMessage = this.getModal().getElements('message');
1868    if (this.oldAnimation) {
1869      $widgetMessage.removeClass(this.oldAnimation);
1870    }
1871    this.oldAnimation = animation;
1872    if (animation) {
1873      $widgetMessage.addClass('animated ' + animation);
1874    }
1875  },
1876  openSlideshow(slideshowID, initialSlideURL) {
1877    const $allSlideshowLinks = jQuery(this.getSettings('selectors.links')).filter((index, element) => {
1878      const $element = jQuery(element);
1879      return slideshowID === element.dataset.elementorLightboxSlideshow && !$element.parent('.swiper-slide-duplicate').length && !$element.parents('.slick-cloned').length;
1880    });
1881    const slides = [];
1882    let initialSlideIndex = 0;
1883    $allSlideshowLinks.each(function () {
1884      const slideVideo = this.dataset.elementorLightboxVideo;
1885      let slideIndex = this.dataset.elementorLightboxIndex;
1886      if (undefined === slideIndex) {
1887        slideIndex = $allSlideshowLinks.index(this);
1888      }
1889      if (initialSlideURL === this.href || slideVideo && initialSlideURL === slideVideo) {
1890        initialSlideIndex = slideIndex;
1891      }
1892      const slideData = {
1893        image: this.href,
1894        index: slideIndex,
1895        title: this.dataset.elementorLightboxTitle,
1896        description: this.dataset.elementorLightboxDescription,
1897        hash: this.getAttribute('data-e-action-hash')
1898      };
1899      if (slideVideo) {
1900        slideData.video = slideVideo;
1901      }
1902      slides.push(slideData);
1903    });
1904    slides.sort((a, b) => a.index - b.index);
1905    this.showModal({
1906      type: 'slideshow',
1907      id: slideshowID,
1908      modalOptions: {
1909        id: 'elementor-lightbox-slideshow-' + slideshowID
1910      },
1911      slideshow: {
1912        slides,
1913        swiper: {
1914          initialSlide: +initialSlideIndex
1915        }
1916      }
1917    });
1918  },
1919  onSlideChange() {
1920    this.getSlide('prev').add(this.getSlide('next')).add(this.getSlide('active')).find('.' + this.getSettings('classes.videoWrapper')).remove();
1921    this.playSlideVideo();
1922    this.updateFooterText();
1923  }
1924});
1925
1926/***/ }),
1927
1928/***/ "../assets/dev/js/frontend/utils/lightbox/screenfull.js":
1929/*!**************************************************************!*\
1930  !*** ../assets/dev/js/frontend/utils/lightbox/screenfull.js ***!
1931  \**************************************************************/
1932/***/ ((module) => {
1933
1934"use strict";
1935
1936
1937(function () {
1938  'use strict';
1939
1940  var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};
1941  var isCommonjs =  true && module.exports;
1942  var fn = function () {
1943    var val;
1944    var fnMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],
1945    // New WebKit
1946    ['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'],
1947    // Old WebKit
1948    ['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'], ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'], ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];
1949    var i = 0;
1950    var l = fnMap.length;
1951    var ret = {};
1952    for (; i < l; i++) {
1953      val = fnMap[i];
1954      if (val && val[1] in document) {
1955        var valLength = val.length;
1956        for (i = 0; i < valLength; i++) {
1957          ret[fnMap[0][i]] = val[i];
1958        }
1959        return ret;
1960      }
1961    }
1962    return false;
1963  }();
1964  var eventNameMap = {
1965    change: fn.fullscreenchange,
1966    error: fn.fullscreenerror
1967  };
1968  var screenfull = {
1969    request(element) {
1970      return new Promise(function (resolve, reject) {
1971        var onFullScreenEntered = function () {
1972          this.off('change', onFullScreenEntered);
1973          resolve();
1974        }.bind(this);
1975        this.on('change', onFullScreenEntered);
1976        element = element || document.documentElement;
1977        Promise.resolve(element[fn.requestFullscreen]()).catch(reject);
1978      }.bind(this));
1979    },
1980    exit() {
1981      return new Promise(function (resolve, reject) {
1982        if (!this.isFullscreen) {
1983          resolve();
1984          return;
1985        }
1986        var onFullScreenExit = function () {
1987          this.off('change', onFullScreenExit);
1988          resolve();
1989        }.bind(this);
1990        this.on('change', onFullScreenExit);
1991        Promise.resolve(document[fn.exitFullscreen]()).catch(reject);
1992      }.bind(this));
1993    },
1994    toggle(element) {
1995      return this.isFullscreen ? this.exit() : this.request(element);
1996    },
1997    onchange(callback) {
1998      this.on('change', callback);
1999    },
2000    onerror(callback) {
2001      this.on('error', callback);
2002    },
2003    on(event, callback) {
2004      var eventName = eventNameMap[event];
2005      if (eventName) {
2006        document.addEventListener(eventName, callback, false);
2007      }
2008    },
2009    off(event, callback) {
2010      var eventName = eventNameMap[event];
2011      if (eventName) {
2012        document.removeEventListener(eventName, callback, false);
2013      }
2014    },
2015    raw: fn
2016  };
2017  if (!fn) {
2018    if (isCommonjs) {
2019      module.exports = {
2020        isEnabled: false
2021      };
2022    } else {
2023      window.screenfull = {
2024        isEnabled: false
2025      };
2026    }
2027    return;
2028  }
2029  Object.defineProperties(screenfull, {
2030    isFullscreen: {
2031      get() {
2032        return Boolean(document[fn.fullscreenElement]);
2033      }
2034    },
2035    element: {
2036      enumerable: true,
2037      get() {
2038        return document[fn.fullscreenElement];
2039      }
2040    },
2041    isEnabled: {
2042      enumerable: true,
2043      get() {
2044        // Coerce to boolean in case of old WebKit
2045        return Boolean(document[fn.fullscreenEnabled]);
2046      }
2047    }
2048  });
2049  if (isCommonjs) {
2050    module.exports = screenfull;
2051  } else {
2052    window.screenfull = screenfull;
2053  }
2054})();
2055
2056/***/ }),
2057
vendor: 876 bytes, lines 2058-2082
2058/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
2059/*!****************************************************************!*\
2060  !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
2061  \****************************************************************/
2062/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2063
2064var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
2065function _defineProperty(obj, key, value) {
2066  key = toPropertyKey(key);
2067  if (key in obj) {
2068    Object.defineProperty(obj, key, {
2069      value: value,
2070      enumerable: true,
2071      configurable: true,
2072      writable: true
2073    });
2074  } else {
2075    obj[key] = value;
2076  }
2077  return obj;
2078}
2079module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
2080
2081/***/ }),
2082
vendor: 976 bytes, lines 2083-2103
2083/***/ "../node_modules/@babel/runtime/helpers/toPrimitive.js":
2084/*!*************************************************************!*\
2085  !*** ../node_modules/@babel/runtime/helpers/toPrimitive.js ***!
2086  \*************************************************************/
2087/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2088
2089var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
2090function _toPrimitive(input, hint) {
2091  if (_typeof(input) !== "object" || input === null) return input;
2092  var prim = input[Symbol.toPrimitive];
2093  if (prim !== undefined) {
2094    var res = prim.call(input, hint || "default");
2095    if (_typeof(res) !== "object") return res;
2096    throw new TypeError("@@toPrimitive must return a primitive value.");
2097  }
2098  return (hint === "string" ? String : Number)(input);
2099}
2100module.exports = _toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
2101
2102/***/ }),
2103
vendor: 831 bytes, lines 2104-2119
2104/***/ "../node_modules/@babel/runtime/helpers/toPropertyKey.js":
2105/*!***************************************************************!*\
2106  !*** ../node_modules/@babel/runtime/helpers/toPropertyKey.js ***!
2107  \***************************************************************/
2108/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2109
2110var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
2111var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "../node_modules/@babel/runtime/helpers/toPrimitive.js");
2112function _toPropertyKey(arg) {
2113  var key = toPrimitive(arg, "string");
2114  return _typeof(key) === "symbol" ? key : String(key);
2115}
2116module.exports = _toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
2117
2118/***/ }),
2119
vendor: 829 bytes, lines 2120-2137
2120/***/ "../node_modules/@babel/runtime/helpers/typeof.js":
2121/*!********************************************************!*\
2122  !*** ../node_modules/@babel/runtime/helpers/typeof.js ***!
2123  \********************************************************/
2124/***/ ((module) => {
2125
2126function _typeof(obj) {
2127  "@babel/helpers - typeof";
2128
2129  return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
2130    return typeof obj;
2131  } : function (obj) {
2132    return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
2133  }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);
2134}
2135module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
2136
2137/***/ })
2137
2138
2139},
2140/******/ __webpack_require__ => { // webpackRuntimeModules
2141/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
2142/******/ __webpack_require__.O(0, ["frontend","frontend-modules"], () => (__webpack_exec__("../assets/dev/js/frontend/preloaded-modules.js")));
2143/******/ var __webpack_exports__ = __webpack_require__.O();
2144/******/ }
2145]);
2146//# sourceMappingURL=preloaded-modules.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.