PageSourceSearch

https://jess3.com/wp-content/plugins/elementor/assets/js/frontend.js?ver=3.19.2.1776424697

js jess3.com collected 2026-10-02 06:28:58 UTC 103,625 bytes, 2,807 lines download raw bytes

1/*! elementor - v3.19.0 - 07-02-2024 */
2"use strict";
3(self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["frontend"],{
4
5/***/ "../assets/dev/js/frontend/documents-manager.js":
6/*!******************************************************!*\
7  !*** ../assets/dev/js/frontend/documents-manager.js ***!
8  \******************************************************/
9/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
10
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 _document = _interopRequireDefault(__webpack_require__(/*! ./document */ "../assets/dev/js/frontend/document.js"));
19class _default extends elementorModules.ViewModule {
20  constructor() {
21    super(...arguments);
22    this.documents = {};
23    this.initDocumentClasses();
24    this.attachDocumentsClasses();
25  }
26  getDefaultSettings() {
27    return {
28      selectors: {
29        document: '.elementor'
30      }
31    };
32  }
33  getDefaultElements() {
34    const selectors = this.getSettings('selectors');
35    return {
36      $documents: jQuery(selectors.document)
37    };
38  }
39  initDocumentClasses() {
40    this.documentClasses = {
41      base: _document.default
42    };
43    elementorFrontend.hooks.doAction('elementor/frontend/documents-manager/init-classes', this);
44  }
45  addDocumentClass(documentType, documentClass) {
46    this.documentClasses[documentType] = documentClass;
47  }
48  attachDocumentsClasses() {
49    this.elements.$documents.each((index, document) => this.attachDocumentClass(jQuery(document)));
50  }
51  attachDocumentClass($document) {
52    const documentData = $document.data(),
53      documentID = documentData.elementorId,
54      documentType = documentData.elementorType,
55      DocumentClass = this.documentClasses[documentType] || this.documentClasses.base;
56    this.documents[documentID] = new DocumentClass({
57      $element: $document,
58      id: documentID
59    });
60  }
61}
62exports["default"] = _default;
63
64/***/ }),
65
66/***/ "../assets/dev/js/frontend/elements-handlers-manager.js":
67/*!**************************************************************!*\
68  !*** ../assets/dev/js/frontend/elements-handlers-manager.js ***!
69  \**************************************************************/
70/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
71
72
73
74var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
75var _global = _interopRequireDefault(__webpack_require__(/*! ./handlers/global */ "../assets/dev/js/frontend/handlers/global.js"));
76var _background = _interopRequireDefault(__webpack_require__(/*! ./handlers/background */ "../assets/dev/js/frontend/handlers/background.js"));
77var _container = _interopRequireDefault(__webpack_require__(/*! ./handlers/container/container */ "../assets/dev/js/frontend/handlers/container/container.js"));
78var _column = _interopRequireDefault(__webpack_require__(/*! ./handlers/column */ "../assets/dev/js/frontend/handlers/column.js"));
79var _handlesPosition = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/handles-position */ "../assets/dev/js/frontend/handlers/section/handles-position.js"));
80var _stretchedSection = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/stretched-section */ "../assets/dev/js/frontend/handlers/section/stretched-section.js"));
81var _shapes = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/shapes */ "../assets/dev/js/frontend/handlers/section/shapes.js"));
82// Section handlers.
83
84/* global elementorFrontendConfig */
85
86module.exports = function ($) {
87  var _this = this;
88  const handlersInstances = {};
89  this.elementsHandlers = {
90    'accordion.default': () => __webpack_require__.e(/*! import() | accordion */ "accordion").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/accordion */ "../assets/dev/js/frontend/handlers/accordion.js")),
91    'alert.default': () => __webpack_require__.e(/*! import() | alert */ "alert").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/alert */ "../assets/dev/js/frontend/handlers/alert.js")),
92    'counter.default': () => __webpack_require__.e(/*! import() | counter */ "counter").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/counter */ "../assets/dev/js/frontend/handlers/counter.js")),
93    'progress.default': () => __webpack_require__.e(/*! import() | progress */ "progress").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/progress */ "../assets/dev/js/frontend/handlers/progress.js")),
94    'tabs.default': () => __webpack_require__.e(/*! import() | tabs */ "tabs").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/tabs */ "../assets/dev/js/frontend/handlers/tabs.js")),
95    'toggle.default': () => __webpack_require__.e(/*! import() | toggle */ "toggle").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/toggle */ "../assets/dev/js/frontend/handlers/toggle.js")),
96    'video.default': () => __webpack_require__.e(/*! import() | video */ "video").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/video */ "../assets/dev/js/frontend/handlers/video.js")),
97    'image-carousel.default': () => __webpack_require__.e(/*! import() | image-carousel */ "image-carousel").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/image-carousel */ "../assets/dev/js/frontend/handlers/image-carousel.js")),
98    'text-editor.default': () => __webpack_require__.e(/*! import() | text-editor */ "text-editor").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/text-editor */ "../assets/dev/js/frontend/handlers/text-editor.js")),
99    'wp-widget-media_audio.default': () => __webpack_require__.e(/*! import() | wp-audio */ "wp-audio").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/wp-audio */ "../assets/dev/js/frontend/handlers/wp-audio.js"))
100  };
101  if (elementorFrontendConfig.experimentalFeatures['nested-elements']) {
102    this.elementsHandlers['nested-tabs.default'] = () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/nested-tabs/assets/js/frontend/handlers/nested-tabs */ "../modules/nested-tabs/assets/js/frontend/handlers/nested-tabs.js"));
103  }
104  if (elementorFrontendConfig.experimentalFeatures['nested-elements']) {
105    this.elementsHandlers['nested-accordion.default'] = () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/nested-accordion/assets/js/frontend/handlers/nested-accordion */ "../modules/nested-accordion/assets/js/frontend/handlers/nested-accordion.js"));
106  }
107  const addGlobalHandlers = () => elementorFrontend.hooks.addAction('frontend/element_ready/global', _global.default);
108  const addElementsHandlers = () => {
109    this.elementsHandlers.section = [_stretchedSection.default,
110    // Must run before background handlers to init the slideshow only after the stretch.
111    ..._background.default, _handlesPosition.default, _shapes.default];
112    this.elementsHandlers.container = [..._background.default];
113
114    // Add editor-only handlers.
115    if (elementorFrontend.isEditMode()) {
116      this.elementsHandlers.container.push(..._container.default);
117    }
118    this.elementsHandlers.column = _column.default;
119    $.each(this.elementsHandlers, (elementName, Handlers) => {
120      const elementData = elementName.split('.');
121      elementName = elementData[0];
122      const skin = elementData[1] || null;
123      this.attachHandler(elementName, Handlers, skin);
124    });
125  };
126  const isClassHandler = Handler => Handler.prototype?.getUniqueHandlerID;
127  const addHandlerWithHook = function (elementBaseName, Handler) {
128    let skin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default';
129    skin = skin ? '.' + skin : '';
130    const elementName = elementBaseName + skin;
131    elementorFrontend.hooks.addAction(`frontend/element_ready/${elementName}`, $element => {
132      if (isClassHandler(Handler)) {
133        _this.addHandler(Handler, {
134          $element,
135          elementName
136        }, true);
137      } else {
138        const handlerValue = Handler();
139        if (!handlerValue) {
140          return;
141        }
142        if (handlerValue instanceof Promise) {
143          handlerValue.then(_ref => {
144            let {
145              default: dynamicHandler
146            } = _ref;
147            _this.addHandler(dynamicHandler, {
148              $element,
149              elementName
150            }, true);
151          });
152        } else {
153          _this.addHandler(handlerValue, {
154            $element,
155            elementName
156          }, true);
157        }
158      }
159    });
160  };
161  this.addHandler = function (HandlerClass, options) {
162    const elementID = options.$element.data('model-cid');
163    let handlerID;
164
165    // If element is in edit mode
166    if (elementID) {
167      handlerID = HandlerClass.prototype.getConstructorID();
168      if (!handlersInstances[elementID]) {
169        handlersInstances[elementID] = {};
170      }
171      const oldHandler = handlersInstances[elementID][handlerID];
172      if (oldHandler) {
173        oldHandler.onDestroy();
174      }
175    }
176    const newHandler = new HandlerClass(options);
177    elementorFrontend.hooks.doAction(`frontend/element_handler_ready/${options.elementName}`, options.$element, $);
178    if (elementID) {
179      handlersInstances[elementID][handlerID] = newHandler;
180    }
181  };
182  this.attachHandler = (elementName, Handlers, skin) => {
183    if (!Array.isArray(Handlers)) {
184      Handlers = [Handlers];
185    }
186    Handlers.forEach(Handler => addHandlerWithHook(elementName, Handler, skin));
187  };
188  this.getHandler = function (handlerName) {
189    const elementHandler = this.elementsHandlers[handlerName];
190    if (isClassHandler(elementHandler)) {
191      return elementHandler;
192    }
193    return new Promise(res => {
194      elementHandler().then(_ref2 => {
195        let {
196          default: dynamicHandler
197        } = _ref2;
198        res(dynamicHandler);
199      });
200    });
201  };
202
203  /**
204   * @param {string} handlerName
205   * @deprecated since 3.1.0, use `elementorFrontend.elementsHandler.getHandler` instead.
206   */
207  this.getHandlers = function (handlerName) {
208    elementorDevTools.deprecation.deprecated('getHandlers', '3.1.0', 'elementorFrontend.elementsHandler.getHandler');
209    if (handlerName) {
210      return this.getHandler(handlerName);
211    }
212    return this.elementsHandlers;
213  };
214  this.runReadyTrigger = function (scope) {
215    if (elementorFrontend.config.is_static) {
216      return;
217    }
218
219    // Initializing the `$scope` as frontend jQuery instance
220    const $scope = jQuery(scope),
221      elementType = $scope.attr('data-element_type');
222    if (!elementType) {
223      return;
224    }
225    elementorFrontend.hooks.doAction('frontend/element_ready/global', $scope, $);
226    elementorFrontend.hooks.doAction(`frontend/element_ready/${elementType}`, $scope, $);
227    if ('widget' === elementType) {
228      const widgetType = $scope.attr('data-widget_type');
229      elementorFrontend.hooks.doAction(`frontend/element_ready/${widgetType}`, $scope, $);
230    }
231  };
232  this.init = () => {
233    addGlobalHandlers();
234    addElementsHandlers();
235  };
236};
237
238/***/ }),
239
240/***/ "../assets/dev/js/frontend/frontend.js":
241/*!*********************************************!*\
242  !*** ../assets/dev/js/frontend/frontend.js ***!
243  \*********************************************/
244/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
245
246
247
248var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
249Object.defineProperty(exports, "__esModule", ({
250  value: true
251}));
252exports["default"] = void 0;
253__webpack_require__(/*! ../public-path */ "../assets/dev/js/public-path.js");
254var _documentsManager = _interopRequireDefault(__webpack_require__(/*! ./documents-manager */ "../assets/dev/js/frontend/documents-manager.js"));
255var _storage = _interopRequireDefault(__webpack_require__(/*! elementor-common/utils/storage */ "../core/common/assets/js/utils/storage.js"));
256var _environment = _interopRequireDefault(__webpack_require__(/*! elementor-common/utils/environment */ "../core/common/assets/js/utils/environment.js"));
257var _youtubeLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/youtube-loader */ "../assets/dev/js/frontend/utils/video-api/youtube-loader.js"));
258var _vimeoLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/vimeo-loader */ "../assets/dev/js/frontend/utils/video-api/vimeo-loader.js"));
259var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js"));
260var _urlActions = _interopRequireDefault(__webpack_require__(/*! ./utils/url-actions */ "../assets/dev/js/frontend/utils/url-actions.js"));
261var _swiper = _interopRequireDefault(__webpack_require__(/*! ./utils/swiper */ "../assets/dev/js/frontend/utils/swiper.js"));
262var _lightboxManager = _interopRequireDefault(__webpack_require__(/*! ./utils/lightbox/lightbox-manager */ "../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js"));
263var _assetsLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/assets-loader */ "../assets/dev/js/frontend/utils/assets-loader.js"));
264var _breakpoints = _interopRequireDefault(__webpack_require__(/*! elementor-utils/breakpoints */ "../assets/dev/js/utils/breakpoints.js"));
265var _events = _interopRequireDefault(__webpack_require__(/*! elementor-utils/events */ "../assets/dev/js/utils/events.js"));
266var _frontend = _interopRequireDefault(__webpack_require__(/*! elementor/modules/shapes/assets/js/frontend/frontend */ "../modules/shapes/assets/js/frontend/frontend.js"));
267var _controls = _interopRequireDefault(__webpack_require__(/*! ./utils/controls */ "../assets/dev/js/frontend/utils/controls.js"));
268var _utils = __webpack_require__(/*! elementor-frontend/utils/utils */ "../assets/dev/js/frontend/utils/utils.js");
269/* global elementorFrontendConfig */
270
271const EventManager = __webpack_require__(/*! elementor-utils/hooks */ "../assets/dev/js/utils/hooks.js"),
272  ElementsHandler = __webpack_require__(/*! elementor-frontend/elements-handlers-manager */ "../assets/dev/js/frontend/elements-handlers-manager.js"),
273  AnchorsModule = __webpack_require__(/*! elementor-frontend/utils/anchors */ "../assets/dev/js/frontend/utils/anchors.js");
274class Frontend extends elementorModules.ViewModule {
275  constructor() {
276    super(...arguments);
277    this.config = elementorFrontendConfig;
278    this.config.legacyMode = {
279      /**
280       * @deprecated since 3.1.0
281       */
282      get elementWrappers() {
283        if (elementorFrontend.isEditMode()) {
284          window.top.elementorDevTools.deprecation.deprecated('elementorFrontend.config.legacyMode.elementWrappers', '3.1.0');
285        }
286        return false;
287      }
288    };
289    this.populateActiveBreakpointsConfig();
290  }
291
292  /**
293   * @deprecated since 2.5.0, use `elementorModules.frontend.handlers.Base` instead.
294   */
295  get Module() {
296    if (this.isEditMode()) {
297      parent.elementorDevTools.deprecation.deprecated('elementorFrontend.Module', '2.5.0', 'elementorModules.frontend.handlers.Base');
298    }
299    return elementorModules.frontend.handlers.Base;
300  }
301  getDefaultSettings() {
302    return {
303      selectors: {
304        elementor: '.elementor',
305        adminBar: '#wpadminbar'
306      }
307    };
308  }
309  getDefaultElements() {
310    const defaultElements = {
311      window,
312      $window: jQuery(window),
313      $document: jQuery(document),
314      $head: jQuery(document.head),
315      $body: jQuery(document.body),
316      $deviceMode: jQuery('<span>', {
317        id: 'elementor-device-mode',
318        class: 'elementor-screen-only'
319      })
320    };
321    defaultElements.$body.append(defaultElements.$deviceMode);
322    return defaultElements;
323  }
324  bindEvents() {
325    this.elements.$window.on('resize', () => this.setDeviceModeData());
326  }
327
328  /**
329   * @param {string} elementName
330   * @deprecated since 2.4.0, use `this.elements` instead.
331   */
332  getElements(elementName) {
333    return this.getItems(this.elements, elementName);
334  }
335
336  /**
337   * @param {string} settingName
338   * @deprecated since 2.4.0, this method was never in use.
339   */
340  getPageSettings(settingName) {
341    const settingsObject = this.isEditMode() ? elementor.settings.page.model.attributes : this.config.settings.page;
342    return this.getItems(settingsObject, settingName);
343  }
344
345  /**
346   * @param {string} settingName
347   * @deprecated since 3.0.0, use `getKitSettings()` instead and remove the `elementor_` prefix.
348   */
349  getGeneralSettings(settingName) {
350    if (this.isEditMode()) {
351      parent.elementorDevTools.deprecation.deprecated('getGeneralSettings()', '3.0.0', 'getKitSettings() and remove the `elementor_` prefix');
352    }
353    return this.getKitSettings(`elementor_${settingName}`);
354  }
355  getKitSettings(settingName) {
356    // TODO: use Data API.
357    return this.getItems(this.config.kit, settingName);
358  }
359  getCurrentDeviceMode() {
360    return getComputedStyle(this.elements.$deviceMode[0], ':after').content.replace(/"/g, '');
361  }
362  getDeviceSetting(deviceMode, settings, settingKey) {
363    // Add specific handling for widescreen since it is larger than desktop.
364    if ('widescreen' === deviceMode) {
365      return this.getWidescreenSetting(settings, settingKey);
366    }
367    const devices = elementorFrontend.breakpoints.getActiveBreakpointsList({
368      largeToSmall: true,
369      withDesktop: true
370    });
371    let deviceIndex = devices.indexOf(deviceMode);
372    while (deviceIndex > 0) {
373      const currentDevice = devices[deviceIndex],
374        fullSettingKey = settingKey + '_' + currentDevice,
375        deviceValue = settings[fullSettingKey];
376
377      // Accept 0 as value.
378      if (deviceValue || 0 === deviceValue) {
379        return deviceValue;
380      }
381      deviceIndex--;
382    }
383    return settings[settingKey];
384  }
385  getWidescreenSetting(settings, settingKey) {
386    const deviceMode = 'widescreen',
387      widescreenSettingKey = settingKey + '_' + deviceMode;
388    let settingToReturn;
389
390    // If the device mode is 'widescreen', and the setting exists - return it.
391    if (settings[widescreenSettingKey]) {
392      settingToReturn = settings[widescreenSettingKey];
393    } else {
394      // Otherwise, return the desktop setting
395      settingToReturn = settings[settingKey];
396    }
397    return settingToReturn;
398  }
399  getCurrentDeviceSetting(settings, settingKey) {
400    return this.getDeviceSetting(elementorFrontend.getCurrentDeviceMode(), settings, settingKey);
401  }
402  isEditMode() {
403    return this.config.environmentMode.edit;
404  }
405  isWPPreviewMode() {
406    return this.config.environmentMode.wpPreview;
407  }
408  initDialogsManager() {
409    let dialogsManager;
410    this.getDialogsManager = () => {
411      if (!dialogsManager) {
412        dialogsManager = new DialogsManager.Instance();
413      }
414      return dialogsManager;
415    };
416  }
417  initOnReadyComponents() {
418    this.utils = {
419      youtube: new _youtubeLoader.default(),
420      vimeo: new _vimeoLoader.default(),
421      baseVideoLoader: new _baseLoader.default(),
422      anchors: new AnchorsModule(),
423      get lightbox() {
424        return _lightboxManager.default.getLightbox();
425      },
426      urlActions: new _urlActions.default(),
427      swiper: _swiper.default,
428      environment: _environment.default,
429      assetsLoader: new _assetsLoader.default(),
430      escapeHTML: _utils.escapeHTML,
431      events: _events.default,
432      controls: new _controls.default()
433    };
434
435    // TODO: BC since 2.4.0
436    this.modules = {
437      StretchElement: elementorModules.frontend.tools.StretchElement,
438      Masonry: elementorModules.utils.Masonry
439    };
440    this.elementsHandler.init();
441    if (this.isEditMode()) {
442      elementor.once('document:loaded', () => this.onDocumentLoaded());
443    } else {
444      this.onDocumentLoaded();
445    }
446  }
447  initOnReadyElements() {
448    this.elements.$wpAdminBar = this.elements.$document.find(this.getSettings('selectors.adminBar'));
449  }
450  addUserAgentClasses() {
451    for (const [key, value] of Object.entries(_environment.default)) {
452      if (value) {
453        this.elements.$body.addClass('e--ua-' + key);
454      }
455    }
456  }
457  setDeviceModeData() {
458    this.elements.$body.attr('data-elementor-device-mode', this.getCurrentDeviceMode());
459  }
460  addListenerOnce(listenerID, event, callback, to) {
461    if (!to) {
462      to = this.elements.$window;
463    }
464    if (!this.isEditMode()) {
465      to.on(event, callback);
466      return;
467    }
468    this.removeListeners(listenerID, event, to);
469    if (to instanceof jQuery) {
470      const eventNS = event + '.' + listenerID;
471      to.on(eventNS, callback);
472    } else {
473      to.on(event, callback, listenerID);
474    }
475  }
476  removeListeners(listenerID, event, callback, from) {
477    if (!from) {
478      from = this.elements.$window;
479    }
480    if (from instanceof jQuery) {
481      const eventNS = event + '.' + listenerID;
482      from.off(eventNS, callback);
483    } else {
484      from.off(event, callback, listenerID);
485    }
486  }
487
488  // Based on underscore function
489  debounce(func, wait) {
490    let timeout;
491    return function () {
492      const context = this,
493        args = arguments;
494      const later = () => {
495        timeout = null;
496        func.apply(context, args);
497      };
498      const callNow = !timeout;
499      clearTimeout(timeout);
500      timeout = setTimeout(later, wait);
501      if (callNow) {
502        func.apply(context, args);
503      }
504    };
505  }
506  waypoint($element, callback, options) {
507    const defaultOptions = {
508      offset: '100%',
509      triggerOnce: true
510    };
511    options = jQuery.extend(defaultOptions, options);
512    const correctCallback = function () {
513      const element = this.element || this,
514        result = callback.apply(element, arguments);
515
516      // If is Waypoint new API and is frontend
517      if (options.triggerOnce && this.destroy) {
518        this.destroy();
519      }
520      return result;
521    };
522    return $element.elementorWaypoint(correctCallback, options);
523  }
524  muteMigrationTraces() {
525    jQuery.migrateMute = true;
526    jQuery.migrateTrace = false;
527  }
528
529  /**
530   * Initialize the modules' widgets handlers.
531   */
532  initModules() {
533    const handlers = {
534      shapes: _frontend.default
535    };
536
537    // TODO: BC - Deprecated since 3.5.0
538    elementorFrontend.trigger('elementor/modules/init:before');
539
540    // TODO: Use this instead.
541    elementorFrontend.trigger('elementor/modules/init/before');
542    Object.entries(handlers).forEach(_ref => {
543      let [moduleName, ModuleClass] = _ref;
544      this.modulesHandlers[moduleName] = new ModuleClass();
545    });
546  }
547  populateActiveBreakpointsConfig() {
548    this.config.responsive.activeBreakpoints = {};
549    Object.entries(this.config.responsive.breakpoints).forEach(_ref2 => {
550      let [breakpointKey, breakpointData] = _ref2;
551      if (breakpointData.is_enabled) {
552        this.config.responsive.activeBreakpoints[breakpointKey] = breakpointData;
553      }
554    });
555  }
556  init() {
557    this.hooks = new EventManager();
558    this.breakpoints = new _breakpoints.default(this.config.responsive);
559    this.storage = new _storage.default();
560    this.elementsHandler = new ElementsHandler(jQuery);
561    this.modulesHandlers = {};
562    this.addUserAgentClasses();
563    this.setDeviceModeData();
564    this.initDialogsManager();
565    if (this.isEditMode()) {
566      this.muteMigrationTraces();
567    }
568
569    // Keep this line before `initOnReadyComponents` call
570    _events.default.dispatch(this.elements.$window, 'elementor/frontend/init');
571    this.initModules();
572    this.initOnReadyElements();
573    this.initOnReadyComponents();
574  }
575  onDocumentLoaded() {
576    this.documentsManager = new _documentsManager.default();
577    this.trigger('components:init');
578    new _lightboxManager.default();
579  }
580}
581exports["default"] = Frontend;
582window.elementorFrontend = new Frontend();
583if (!elementorFrontend.isEditMode()) {
584  jQuery(() => elementorFrontend.init());
585}
586
587/***/ }),
588
589/***/ "../assets/dev/js/frontend/handlers/background-slideshow.js":
590/*!******************************************************************!*\
591  !*** ../assets/dev/js/frontend/handlers/background-slideshow.js ***!
592  \******************************************************************/
593/***/ ((__unused_webpack_module, exports) => {
594
595
596
597Object.defineProperty(exports, "__esModule", ({
598  value: true
599}));
600exports["default"] = void 0;
601class BackgroundSlideshow extends elementorModules.frontend.handlers.SwiperBase {
602  getDefaultSettings() {
603    return {
604      classes: {
605        swiperContainer: `elementor-background-slideshow ${elementorFrontend.config.swiperClass}`,
606        swiperWrapper: 'swiper-wrapper',
607        swiperSlide: 'elementor-background-slideshow__slide swiper-slide',
608        swiperPreloader: 'swiper-lazy-preloader',
609        slideBackground: 'elementor-background-slideshow__slide__image',
610        kenBurns: 'elementor-ken-burns',
611        kenBurnsActive: 'elementor-ken-burns--active',
612        kenBurnsIn: 'elementor-ken-burns--in',
613        kenBurnsOut: 'elementor-ken-burns--out'
614      }
615    };
616  }
617  getSwiperOptions() {
618    const elementSettings = this.getElementSettings(),
619      swiperOptions = {
620        grabCursor: false,
621        slidesPerView: 1,
622        slidesPerGroup: 1,
623        loop: 'yes' === elementSettings.background_slideshow_loop,
624        speed: elementSettings.background_slideshow_transition_duration,
625        autoplay: {
626          delay: elementSettings.background_slideshow_slide_duration,
627          stopOnLastSlide: !elementSettings.background_slideshow_loop
628        },
629        handleElementorBreakpoints: true,
630        on: {
631          slideChange: () => {
632            if (elementSettings.background_slideshow_ken_burns) {
633              this.handleKenBurns();
634            }
635          }
636        }
637      };
638    if ('yes' === elementSettings.background_slideshow_loop) {
639      swiperOptions.loopedSlides = this.getSlidesCount();
640    }
641    switch (elementSettings.background_slideshow_slide_transition) {
642      case 'fade':
643        swiperOptions.effect = 'fade';
644        swiperOptions.fadeEffect = {
645          crossFade: true
646        };
647        break;
648      case 'slide_down':
649        swiperOptions.autoplay.reverseDirection = true;
650        swiperOptions.direction = 'vertical';
651        break;
652      case 'slide_up':
653        swiperOptions.direction = 'vertical';
654        break;
655    }
656    if ('yes' === elementSettings.background_slideshow_lazyload) {
657      swiperOptions.lazy = {
658        loadPrevNext: true,
659        loadPrevNextAmount: 1
660      };
661    }
662    return swiperOptions;
663  }
664  buildSwiperElements() {
665    const classes = this.getSettings('classes'),
666      elementSettings = this.getElementSettings(),
667      direction = 'slide_left' === elementSettings.background_slideshow_slide_transition ? 'ltr' : 'rtl',
668      $container = jQuery('<div>', {
669        class: classes.swiperContainer,
670        dir: direction
671      }),
672      $wrapper = jQuery('<div>', {
673        class: classes.swiperWrapper
674      }),
675      kenBurnsActive = elementSettings.background_slideshow_ken_burns,
676      lazyload = 'yes' === elementSettings.background_slideshow_lazyload;
677    let slideInnerClass = classes.slideBackground;
678    if (kenBurnsActive) {
679      slideInnerClass += ' ' + classes.kenBurns;
680      const kenBurnsDirection = 'in' === elementSettings.background_slideshow_ken_burns_zoom_direction ? 'kenBurnsIn' : 'kenBurnsOut';
681      slideInnerClass += ' ' + classes[kenBurnsDirection];
682    }
683    if (lazyload) {
684      slideInnerClass += ' swiper-lazy';
685    }
686    this.elements.$slides = jQuery();
687    elementSettings.background_slideshow_gallery.forEach(slide => {
688      const $slide = jQuery('<div>', {
689        class: classes.swiperSlide
690      });
691      let $slidebg;
692      if (lazyload) {
693        const $slideloader = jQuery('<div>', {
694          class: classes.swiperPreloader
695        });
696        $slidebg = jQuery('<div>', {
697          class: slideInnerClass,
698          'data-background': slide.url
699        });
700        $slidebg.append($slideloader);
701      } else {
702        $slidebg = jQuery('<div>', {
703          class: slideInnerClass,
704          style: 'background-image: url("' + slide.url + '");'
705        });
706      }
707      $slide.append($slidebg);
708      $wrapper.append($slide);
709      this.elements.$slides = this.elements.$slides.add($slide);
710    });
711    $container.append($wrapper);
712    this.$element.prepend($container);
713    this.elements.$backgroundSlideShowContainer = $container;
714  }
715  async initSlider() {
716    if (1 >= this.getSlidesCount()) {
717      return;
718    }
719    const elementSettings = this.getElementSettings();
720    const Swiper = elementorFrontend.utils.swiper;
721    this.swiper = await new Swiper(this.elements.$backgroundSlideShowContainer, this.getSwiperOptions());
722
723    // Expose the swiper instance in the frontend
724    this.elements.$backgroundSlideShowContainer.data('swiper', this.swiper);
725    if (elementSettings.background_slideshow_ken_burns) {
726      this.handleKenBurns();
727    }
728  }
729  activate() {
730    this.buildSwiperElements();
731    this.initSlider();
732  }
733  deactivate() {
734    if (this.swiper) {
735      this.swiper.destroy();
736      this.elements.$backgroundSlideShowContainer.remove();
737    }
738  }
739  run() {
740    if ('slideshow' === this.getElementSettings('background_background')) {
741      this.activate();
742    } else {
743      this.deactivate();
744    }
745  }
746  onInit() {
747    super.onInit();
748    if (this.getElementSettings('background_slideshow_gallery')) {
749      this.run();
750    }
751  }
752  onDestroy() {
753    super.onDestroy();
754    this.deactivate();
755  }
756  onElementChange(propertyName) {
757    if ('background_background' === propertyName) {
758      this.run();
759    }
760  }
761}
762exports["default"] = BackgroundSlideshow;
763
764/***/ }),
765
766/***/ "../assets/dev/js/frontend/handlers/background-video.js":
767/*!**************************************************************!*\
768  !*** ../assets/dev/js/frontend/handlers/background-video.js ***!
769  \**************************************************************/
770/***/ ((__unused_webpack_module, exports) => {
771
772
773
774Object.defineProperty(exports, "__esModule", ({
775  value: true
776}));
777exports["default"] = void 0;
778class BackgroundVideo extends elementorModules.frontend.handlers.Base {
779  getDefaultSettings() {
780    return {
781      selectors: {
782        backgroundVideoContainer: '.elementor-background-video-container',
783        backgroundVideoEmbed: '.elementor-background-video-embed',
784        backgroundVideoHosted: '.elementor-background-video-hosted'
785      }
786    };
787  }
788  getDefaultElements() {
789    const selectors = this.getSettings('selectors'),
790      elements = {
791        $backgroundVideoContainer: this.$element.find(selectors.backgroundVideoContainer)
792      };
793    elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children(selectors.backgroundVideoEmbed);
794    elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children(selectors.backgroundVideoHosted);
795    return elements;
796  }
797  calcVideosSize($video) {
798    let aspectRatioSetting = '16:9';
799    if ('vimeo' === this.videoType) {
800      aspectRatioSetting = $video[0].width + ':' + $video[0].height;
801    }
802    const containerWidth = this.elements.$backgroundVideoContainer.outerWidth(),
803      containerHeight = this.elements.$backgroundVideoContainer.outerHeight(),
804      aspectRatioArray = aspectRatioSetting.split(':'),
805      aspectRatio = aspectRatioArray[0] / aspectRatioArray[1],
806      ratioWidth = containerWidth / aspectRatio,
807      ratioHeight = containerHeight * aspectRatio,
808      isWidthFixed = containerWidth / containerHeight > aspectRatio;
809    return {
810      width: isWidthFixed ? containerWidth : ratioHeight,
811      height: isWidthFixed ? ratioWidth : containerHeight
812    };
813  }
814  changeVideoSize() {
815    if (!('hosted' === this.videoType) && !this.player) {
816      return;
817    }
818    let $video;
819    if ('youtube' === this.videoType) {
820      $video = jQuery(this.player.getIframe());
821    } else if ('vimeo' === this.videoType) {
822      $video = jQuery(this.player.element);
823    } else if ('hosted' === this.videoType) {
824      $video = this.elements.$backgroundVideoHosted;
825    }
826    if (!$video) {
827      return;
828    }
829    const size = this.calcVideosSize($video);
830    $video.width(size.width).height(size.height);
831  }
832  startVideoLoop(firstTime) {
833    // If the section has been removed
834    if (!this.player.getIframe().contentWindow) {
835      return;
836    }
837    const elementSettings = this.getElementSettings(),
838      startPoint = elementSettings.background_video_start || 0,
839      endPoint = elementSettings.background_video_end;
840    if (elementSettings.background_play_once && !firstTime) {
841      this.player.stopVideo();
842      return;
843    }
844    this.player.seekTo(startPoint);
845    if (endPoint) {
846      const durationToEnd = endPoint - startPoint + 1;
847      setTimeout(() => {
848        this.startVideoLoop(false);
849      }, durationToEnd * 1000);
850    }
851  }
852  prepareVimeoVideo(Vimeo, videoLink) {
853    const elementSettings = this.getElementSettings(),
854      videoSize = this.elements.$backgroundVideoContainer.outerWidth(),
855      vimeoOptions = {
856        url: videoLink,
857        width: videoSize.width,
858        autoplay: true,
859        loop: !elementSettings.background_play_once,
860        transparent: true,
861        background: true,
862        muted: true
863      };
864    if (elementSettings.background_privacy_mode) {
865      vimeoOptions.dnt = true;
866    }
867    this.player = new Vimeo.Player(this.elements.$backgroundVideoContainer, vimeoOptions);
868
869    // Handle user-defined start/end times
870    this.handleVimeoStartEndTimes(elementSettings);
871    this.player.ready().then(() => {
872      jQuery(this.player.element).addClass('elementor-background-video-embed');
873      this.changeVideoSize();
874    });
875  }
876  handleVimeoStartEndTimes(elementSettings) {
877    // If a start time is defined, set the start time
878    if (elementSettings.background_video_start) {
879      this.player.on('play', data => {
880        if (0 === data.seconds) {
881          this.player.setCurrentTime(elementSettings.background_video_start);
882        }
883      });
884    }
885    this.player.on('timeupdate', data => {
886      // If an end time is defined, handle ending the video
887      if (elementSettings.background_video_end && elementSettings.background_video_end < data.seconds) {
888        if (elementSettings.background_play_once) {
889          // Stop at user-defined end time if not loop
890          this.player.pause();
891        } else {
892          // Go to start time if loop
893          this.player.setCurrentTime(elementSettings.background_video_start);
894        }
895      }
896
897      // If start time is defined but an end time is not, go to user-defined start time at video end.
898      // Vimeo JS API has an 'ended' event, but it never fires when infinite loop is defined, so we
899      // get the video duration (returns a promise) then use duration-0.5s as end time
900      this.player.getDuration().then(duration => {
901        if (elementSettings.background_video_start && !elementSettings.background_video_end && data.seconds > duration - 0.5) {
902          this.player.setCurrentTime(elementSettings.background_video_start);
903        }
904      });
905    });
906  }
907  prepareYTVideo(YT, videoID) {
908    const $backgroundVideoContainer = this.elements.$backgroundVideoContainer,
909      elementSettings = this.getElementSettings();
910    let startStateCode = YT.PlayerState.PLAYING;
911
912    // Since version 67, Chrome doesn't fire the `PLAYING` state at start time
913    if (window.chrome) {
914      startStateCode = YT.PlayerState.UNSTARTED;
915    }
916    const playerOptions = {
917      videoId: videoID,
918      events: {
919        onReady: () => {
920          this.player.mute();
921          this.changeVideoSize();
922          this.startVideoLoop(true);
923          this.player.playVideo();
924        },
925        onStateChange: event => {
926          switch (event.data) {
927            case startStateCode:
928              $backgroundVideoContainer.removeClass('elementor-invisible elementor-loading');
929              break;
930            case YT.PlayerState.ENDED:
931              if ('function' === typeof this.player.seekTo) {
932                this.player.seekTo(elementSettings.background_video_start || 0);
933              }
934              if (elementSettings.background_play_once) {
935                this.player.destroy();
936              }
937          }
938        }
939      },
940      playerVars: {
941        controls: 0,
942        rel: 0,
943        playsinline: 1
944      }
945    };
946
947    // To handle CORS issues, when the default host is changed, the origin parameter has to be set.
948    if (elementSettings.background_privacy_mode) {
949      playerOptions.host = 'https://www.youtube-nocookie.com';
950      playerOptions.origin = window.location.hostname;
951    }
952    $backgroundVideoContainer.addClass('elementor-loading elementor-invisible');
953    this.player = new YT.Player(this.elements.$backgroundVideoEmbed[0], playerOptions);
954  }
955  activate() {
956    let videoLink = this.getElementSettings('background_video_link'),
957      videoID;
958    const playOnce = this.getElementSettings('background_play_once');
959    if (-1 !== videoLink.indexOf('vimeo.com')) {
960      this.videoType = 'vimeo';
961      this.apiProvider = elementorFrontend.utils.vimeo;
962    } else if (videoLink.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com)/)) {
963      this.videoType = 'youtube';
964      this.apiProvider = elementorFrontend.utils.youtube;
965    }
966    if (this.apiProvider) {
967      videoID = this.apiProvider.getVideoIDFromURL(videoLink);
968      this.apiProvider.onApiReady(apiObject => {
969        if ('youtube' === this.videoType) {
970          this.prepareYTVideo(apiObject, videoID);
971        }
972        if ('vimeo' === this.videoType) {
973          this.prepareVimeoVideo(apiObject, videoLink);
974        }
975      });
976    } else {
977      this.videoType = 'hosted';
978      const startTime = this.getElementSettings('background_video_start'),
979        endTime = this.getElementSettings('background_video_end');
980      if (startTime || endTime) {
981        videoLink += '#t=' + (startTime || 0) + (endTime ? ',' + endTime : '');
982      }
983      this.elements.$backgroundVideoHosted.attr('src', videoLink).one('canplay', this.changeVideoSize.bind(this));
984      if (playOnce) {
985        this.elements.$backgroundVideoHosted.on('ended', () => {
986          this.elements.$backgroundVideoHosted.hide();
987        });
988      }
989    }
990    elementorFrontend.elements.$window.on('resize elementor/bg-video/recalc', this.changeVideoSize);
991  }
992  deactivate() {
993    if ('youtube' === this.videoType && this.player.getIframe() || 'vimeo' === this.videoType) {
994      this.player.destroy();
995    } else {
996      this.elements.$backgroundVideoHosted.removeAttr('src').off('ended');
997    }
998    elementorFrontend.elements.$window.off('resize', this.changeVideoSize);
999  }
1000  run() {
1001    const elementSettings = this.getElementSettings();
1002    if (!elementSettings.background_play_on_mobile && 'mobile' === elementorFrontend.getCurrentDeviceMode()) {
1003      return;
1004    }
1005    if ('video' === elementSettings.background_background && elementSettings.background_video_link) {
1006      this.activate();
1007    } else {
1008      this.deactivate();
1009    }
1010  }
1011  onInit() {
1012    super.onInit(...arguments);
1013    this.changeVideoSize = this.changeVideoSize.bind(this);
1014    this.run();
1015  }
1016  onElementChange(propertyName) {
1017    if ('background_background' === propertyName) {
1018      this.run();
1019    }
1020  }
1021}
1022exports["default"] = BackgroundVideo;
1023
1024/***/ }),
1025
1026/***/ "../assets/dev/js/frontend/handlers/background.js":
1027/*!********************************************************!*\
1028  !*** ../assets/dev/js/frontend/handlers/background.js ***!
1029  \********************************************************/
1030/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1031
1032
1033
1034var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1035Object.defineProperty(exports, "__esModule", ({
1036  value: true
1037}));
1038exports["default"] = void 0;
1039var _backgroundSlideshow = _interopRequireDefault(__webpack_require__(/*! ./background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js"));
1040var _backgroundVideo = _interopRequireDefault(__webpack_require__(/*! ./background-video */ "../assets/dev/js/frontend/handlers/background-video.js"));
1041var _default = [_backgroundSlideshow.default, _backgroundVideo.default];
1042exports["default"] = _default;
1043
1044/***/ }),
1045
1046/***/ "../assets/dev/js/frontend/handlers/column.js":
1047/*!****************************************************!*\
1048  !*** ../assets/dev/js/frontend/handlers/column.js ***!
1049  \****************************************************/
1050/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1051
1052
1053
1054var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1055Object.defineProperty(exports, "__esModule", ({
1056  value: true
1057}));
1058exports["default"] = void 0;
1059var _backgroundSlideshow = _interopRequireDefault(__webpack_require__(/*! ./background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js"));
1060var _default = [_backgroundSlideshow.default];
1061exports["default"] = _default;
1062
1063/***/ }),
1064
1065/***/ "../assets/dev/js/frontend/handlers/container/container.js":
1066/*!*****************************************************************!*\
1067  !*** ../assets/dev/js/frontend/handlers/container/container.js ***!
1068  \*****************************************************************/
1069/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1070
1071
1072
1073Object.defineProperty(exports, "__esModule", ({
1074  value: true
1075}));
1076exports["default"] = void 0;
1077var _default = [() => __webpack_require__.e(/*! import() | container */ "container").then(__webpack_require__.bind(__webpack_require__, /*! ./handles-position */ "../assets/dev/js/frontend/handlers/container/handles-position.js")), () => __webpack_require__.e(/*! import() | container */ "container").then(__webpack_require__.bind(__webpack_require__, /*! ./shapes */ "../assets/dev/js/frontend/handlers/container/shapes.js")), () => __webpack_require__.e(/*! import() | container */ "container").then(__webpack_require__.bind(__webpack_require__, /*! ./grid-container */ "../assets/dev/js/frontend/handlers/container/grid-container.js"))];
1078exports["default"] = _default;
1079
1080/***/ }),
1081
1082/***/ "../assets/dev/js/frontend/handlers/global.js":
1083/*!****************************************************!*\
1084  !*** ../assets/dev/js/frontend/handlers/global.js ***!
1085  \****************************************************/
1086/***/ ((__unused_webpack_module, exports) => {
1087
1088
1089
1090Object.defineProperty(exports, "__esModule", ({
1091  value: true
1092}));
1093exports["default"] = void 0;
1094class GlobalHandler extends elementorModules.frontend.handlers.Base {
1095  getWidgetType() {
1096    return 'global';
1097  }
1098  animate() {
1099    const $element = this.$element,
1100      animation = this.getAnimation();
1101    if ('none' === animation) {
1102      $element.removeClass('elementor-invisible');
1103      return;
1104    }
1105    const elementSettings = this.getElementSettings(),
1106      animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0;
1107    $element.removeClass(animation);
1108    if (this.currentAnimation) {
1109      $element.removeClass(this.currentAnimation);
1110    }
1111    this.currentAnimation = animation;
1112    setTimeout(() => {
1113      $element.removeClass('elementor-invisible').addClass('animated ' + animation);
1114    }, animationDelay);
1115  }
1116  getAnimation() {
1117    return this.getCurrentDeviceSetting('animation') || this.getCurrentDeviceSetting('_animation');
1118  }
1119  onInit() {
1120    super.onInit(...arguments);
1121    if (this.getAnimation()) {
1122      const observer = elementorModules.utils.Scroll.scrollObserver({
1123        callback: event => {
1124          if (event.isInViewport) {
1125            this.animate();
1126            observer.unobserve(this.$element[0]);
1127          }
1128        }
1129      });
1130      observer.observe(this.$element[0]);
1131    }
1132  }
1133  onElementChange(propertyName) {
1134    if (/^_?animation/.test(propertyName)) {
1135      this.animate();
1136    }
1137  }
1138}
1139var _default = $scope => {
1140  elementorFrontend.elementsHandler.addHandler(GlobalHandler, {
1141    $element: $scope
1142  });
1143};
1144exports["default"] = _default;
1145
1146/***/ }),
1147
1148/***/ "../assets/dev/js/frontend/handlers/section/handles-position.js":
1149/*!**********************************************************************!*\
1150  !*** ../assets/dev/js/frontend/handlers/section/handles-position.js ***!
1151  \**********************************************************************/
1152/***/ ((__unused_webpack_module, exports) => {
1153
1154
1155
1156Object.defineProperty(exports, "__esModule", ({
1157  value: true
1158}));
1159exports["default"] = void 0;
1160class HandlesPosition extends elementorModules.frontend.handlers.Base {
1161  isActive() {
1162    return elementorFrontend.isEditMode();
1163  }
1164  isFirstSection() {
1165    return this.$element[0] === document.querySelector('.elementor-edit-mode .elementor-top-section');
1166  }
1167  isOverflowHidden() {
1168    return 'hidden' === this.$element.css('overflow');
1169  }
1170  getOffset() {
1171    if ('body' === elementor.config.document.container) {
1172      return this.$element.offset().top;
1173    }
1174    const $container = jQuery(elementor.config.document.container);
1175    return this.$element.offset().top - $container.offset().top;
1176  }
1177  setHandlesPosition() {
1178    const document = elementor.documents.getCurrent();
1179    if (!document || !document.container.isEditable()) {
1180      return;
1181    }
1182    const insideHandleClass = 'elementor-section--handles-inside';
1183    if (elementor.settings.page.model.attributes.scroll_snap) {
1184      this.$element.addClass(insideHandleClass);
1185      return;
1186    }
1187    const isOverflowHidden = this.isOverflowHidden();
1188    if (!isOverflowHidden && !this.isFirstSection()) {
1189      return;
1190    }
1191    const offset = isOverflowHidden ? 0 : this.getOffset();
1192    if (offset < 25) {
1193      this.$element.addClass(insideHandleClass);
1194      const $handlesElement = this.$element.find('> .elementor-element-overlay > .elementor-editor-section-settings');
1195      if (offset < -5) {
1196        $handlesElement.css('top', -offset);
1197      } else {
1198        $handlesElement.css('top', '');
1199      }
1200    } else {
1201      this.$element.removeClass(insideHandleClass);
1202    }
1203  }
1204  onInit() {
1205    if (!this.isActive()) {
1206      return;
1207    }
1208    this.setHandlesPosition();
1209    this.$element.on('mouseenter', this.setHandlesPosition.bind(this));
1210  }
1211}
1212exports["default"] = HandlesPosition;
1213
1214/***/ }),
1215
1216/***/ "../assets/dev/js/frontend/handlers/section/shapes.js":
1217/*!************************************************************!*\
1218  !*** ../assets/dev/js/frontend/handlers/section/shapes.js ***!
1219  \************************************************************/
1220/***/ ((__unused_webpack_module, exports) => {
1221
1222
1223
1224Object.defineProperty(exports, "__esModule", ({
1225  value: true
1226}));
1227exports["default"] = void 0;
1228class Shapes extends elementorModules.frontend.handlers.Base {
1229  getDefaultSettings() {
1230    return {
1231      selectors: {
1232        container: '> .elementor-shape-%s'
1233      },
1234      svgURL: elementorFrontend.config.urls.assets + 'shapes/'
1235    };
1236  }
1237  getDefaultElements() {
1238    const elements = {},
1239      selectors = this.getSettings('selectors');
1240    elements.$topContainer = this.$element.find(selectors.container.replace('%s', 'top'));
1241    elements.$bottomContainer = this.$element.find(selectors.container.replace('%s', 'bottom'));
1242    return elements;
1243  }
1244  isActive() {
1245    return elementorFrontend.isEditMode();
1246  }
1247  getSvgURL(shapeType, fileName) {
1248    let svgURL = this.getSettings('svgURL') + fileName + '.svg';
1249    if (elementor.config.additional_shapes && shapeType in elementor.config.additional_shapes) {
1250      svgURL = elementor.config.additional_shapes[shapeType];
1251      if (-1 < fileName.indexOf('-negative')) {
1252        svgURL = svgURL.replace('.svg', '-negative.svg');
1253      }
1254    }
1255    return svgURL;
1256  }
1257  buildSVG(side) {
1258    const baseSettingKey = 'shape_divider_' + side,
1259      shapeType = this.getElementSettings(baseSettingKey),
1260      $svgContainer = this.elements['$' + side + 'Container'];
1261    $svgContainer.attr('data-shape', shapeType);
1262    if (!shapeType) {
1263      $svgContainer.empty(); // Shape-divider set to 'none'
1264      return;
1265    }
1266    let fileName = shapeType;
1267    if (this.getElementSettings(baseSettingKey + '_negative')) {
1268      fileName += '-negative';
1269    }
1270    const svgURL = this.getSvgURL(shapeType, fileName);
1271    jQuery.get(svgURL, data => {
1272      $svgContainer.empty().append(data.childNodes[0]);
1273    });
1274    this.setNegative(side);
1275  }
1276  setNegative(side) {
1277    this.elements['$' + side + 'Container'].attr('data-negative', !!this.getElementSettings('shape_divider_' + side + '_negative'));
1278  }
1279  onInit() {
1280    if (!this.isActive(this.getSettings())) {
1281      return;
1282    }
1283    super.onInit(...arguments);
1284    ['top', 'bottom'].forEach(side => {
1285      if (this.getElementSettings('shape_divider_' + side)) {
1286        this.buildSVG(side);
1287      }
1288    });
1289  }
1290  onElementChange(propertyName) {
1291    const shapeChange = propertyName.match(/^shape_divider_(top|bottom)$/);
1292    if (shapeChange) {
1293      this.buildSVG(shapeChange[1]);
1294      return;
1295    }
1296    const negativeChange = propertyName.match(/^shape_divider_(top|bottom)_negative$/);
1297    if (negativeChange) {
1298      this.buildSVG(negativeChange[1]);
1299      this.setNegative(negativeChange[1]);
1300    }
1301  }
1302}
1303exports["default"] = Shapes;
1304
1305/***/ }),
1306
1307/***/ "../assets/dev/js/frontend/handlers/section/stretched-section.js":
1308/*!***********************************************************************!*\
1309  !*** ../assets/dev/js/frontend/handlers/section/stretched-section.js ***!
1310  \***********************************************************************/
1311/***/ ((__unused_webpack_module, exports) => {
1312
1313
1314
1315Object.defineProperty(exports, "__esModule", ({
1316  value: true
1317}));
1318exports["default"] = void 0;
1319class StretchedSection extends elementorModules.frontend.handlers.StretchedElement {
1320  getStretchedClass() {
1321    return 'elementor-section-stretched';
1322  }
1323  getStretchSettingName() {
1324    return 'stretch_section';
1325  }
1326  getStretchActiveValue() {
1327    return 'section-stretched';
1328  }
1329}
1330exports["default"] = StretchedSection;
1331
1332/***/ }),
1333
1334/***/ "../assets/dev/js/frontend/utils/anchors.js":
1335/*!**************************************************!*\
1336  !*** ../assets/dev/js/frontend/utils/anchors.js ***!
1337  \**************************************************/
1338/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1339
1340
1341
1342var _utils = __webpack_require__(/*! ./utils */ "../assets/dev/js/frontend/utils/utils.js");
1343module.exports = elementorModules.ViewModule.extend({
1344  getDefaultSettings() {
1345    return {
1346      scrollDuration: 500,
1347      selectors: {
1348        links: 'a[href*="#"]',
1349        targets: '.elementor-element, .elementor-menu-anchor',
1350        scrollable: (0, _utils.isScrollSnapActive)() ? 'body' : 'html, body'
1351      }
1352    };
1353  },
1354  getDefaultElements() {
1355    var $ = jQuery,
1356      selectors = this.getSettings('selectors');
1357    return {
1358      $scrollable: $(selectors.scrollable)
1359    };
1360  },
1361  bindEvents() {
1362    elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.handleAnchorLinks);
1363  },
1364  handleAnchorLinks(event) {
1365    var clickedLink = event.currentTarget,
1366      isSamePathname = location.pathname === clickedLink.pathname,
1367      isSameHostname = location.hostname === clickedLink.hostname,
1368      $anchor;
1369    if (!isSameHostname || !isSamePathname || clickedLink.hash.length < 2) {
1370      return;
1371    }
1372    try {
1373      $anchor = jQuery(clickedLink.hash).filter(this.getSettings('selectors.targets'));
1374    } catch (e) {
1375      return;
1376    }
1377    if (!$anchor.length) {
1378      return;
1379    }
1380    var scrollTop = $anchor.offset().top,
1381      $wpAdminBar = elementorFrontend.elements.$wpAdminBar,
1382      $activeStickies = jQuery('.elementor-section.elementor-sticky--active:visible'),
1383      maxStickyHeight = 0;
1384    if ($wpAdminBar.length > 0) {
1385      scrollTop -= $wpAdminBar.height();
1386    }
1387
1388    // Offset height of tallest sticky
1389    if ($activeStickies.length > 0) {
1390      maxStickyHeight = Math.max.apply(null, $activeStickies.map(function () {
1391        return jQuery(this).outerHeight();
1392      }).get());
1393      scrollTop -= maxStickyHeight;
1394    }
1395    event.preventDefault();
1396    scrollTop = elementorFrontend.hooks.applyFilters('frontend/handlers/menu_anchor/scroll_top_distance', scrollTop);
1397
1398    // On scroll animation start: remove scroll-snap.
1399    if ((0, _utils.isScrollSnapActive)()) {
1400      elementorFrontend.elements.$body.css('scroll-snap-type', 'none');
1401    }
1402    this.elements.$scrollable.animate({
1403      scrollTop
1404    }, this.getSettings('scrollDuration'), 'linear', () => {
1405      // On scroll animation complete: add scroll-snap back.
1406      if ((0, _utils.isScrollSnapActive)()) {
1407        elementorFrontend.elements.$body.css('scroll-snap-type', '');
1408      }
1409    });
1410  },
1411  onInit() {
1412    elementorModules.ViewModule.prototype.onInit.apply(this, arguments);
1413  }
1414});
1415
1416/***/ }),
1417
1418/***/ "../assets/dev/js/frontend/utils/assets-loader.js":
1419/*!********************************************************!*\
1420  !*** ../assets/dev/js/frontend/utils/assets-loader.js ***!
1421  \********************************************************/
1422/***/ ((__unused_webpack_module, exports) => {
1423
1424
1425
1426Object.defineProperty(exports, "__esModule", ({
1427  value: true
1428}));
1429exports["default"] = void 0;
1430class AssetsLoader {
1431  getScriptElement(src) {
1432    const scriptElement = document.createElement('script');
1433    scriptElement.src = src;
1434    return scriptElement;
1435  }
1436  getStyleElement(src) {
1437    const styleElement = document.createElement('link');
1438    styleElement.rel = 'stylesheet';
1439    styleElement.href = src;
1440    return styleElement;
1441  }
1442  load(type, key) {
1443    const assetData = AssetsLoader.assets[type][key];
1444    if (!assetData.loader) {
1445      assetData.loader = new Promise(resolve => {
1446        const element = 'style' === type ? this.getStyleElement(assetData.src) : this.getScriptElement(assetData.src);
1447        element.onload = () => resolve(true);
1448        const parent = 'head' === assetData.parent ? assetData.parent : 'body';
1449        document[parent].appendChild(element);
1450      });
1451    }
1452    return assetData.loader;
1453  }
1454}
1455exports["default"] = AssetsLoader;
1456const fileSuffix = elementorFrontendConfig.environmentMode.isScriptDebug ? '' : '.min';
1457const swiperSource = elementorFrontendConfig.experimentalFeatures.e_swiper_latest ? `${elementorFrontendConfig.urls.assets}lib/swiper/v8/swiper${fileSuffix}.js?ver=8.4.5` : `${elementorFrontendConfig.urls.assets}lib/swiper/swiper${fileSuffix}.js?ver=5.3.6`;
1458AssetsLoader.assets = {
1459  script: {
1460    dialog: {
1461      src: `${elementorFrontendConfig.urls.assets}lib/dialog/dialog${fileSuffix}.js?ver=4.9.0`
1462    },
1463    'share-link': {
1464      src: `${elementorFrontendConfig.urls.assets}lib/share-link/share-link${fileSuffix}.js?ver=${elementorFrontendConfig.version}`
1465    },
1466    swiper: {
1467      src: swiperSource
1468    }
1469  },
1470  style: {}
1471};
1472
1473/***/ }),
1474
1475/***/ "../assets/dev/js/frontend/utils/controls.js":
1476/*!***************************************************!*\
1477  !*** ../assets/dev/js/frontend/utils/controls.js ***!
1478  \***************************************************/
1479/***/ ((__unused_webpack_module, exports) => {
1480
1481
1482
1483Object.defineProperty(exports, "__esModule", ({
1484  value: true
1485}));
1486exports["default"] = void 0;
1487class Controls {
1488  /**
1489   * Get Control Value
1490   *
1491   * Retrieves a control value.
1492   * This function has been copied from `elementor/assets/dev/js/editor/utils/conditions.js`.
1493   *
1494   * @since 3.11.0
1495   *
1496   * @param {{}}     controlSettings A settings object (e.g. element settings - keys and values)
1497   * @param {string} controlKey      The control key name
1498   * @param {string} controlSubKey   A specific property of the control object.
1499   * @return {*} Control Value
1500   */
1501  getControlValue(controlSettings, controlKey, controlSubKey) {
1502    let value;
1503    if ('object' === typeof controlSettings[controlKey] && controlSubKey) {
1504      value = controlSettings[controlKey][controlSubKey];
1505    } else {
1506      value = controlSettings[controlKey];
1507    }
1508    return value;
1509  }
1510
1511  /**
1512   * Get the value of a responsive control.
1513   *
1514   * Retrieves the value of a responsive control for the current device or for this first parent device which has a control value.
1515   *
1516   * @since 3.11.0
1517   *
1518   * @param {{}}     controlSettings A settings object (e.g. element settings - keys and values)
1519   * @param {string} controlKey      The control key name
1520   * @param {string} controlSubKey   A specific property of the control object.
1521   * @param {string} device          If we want to get a value for a specific device mode.
1522   * @return {*} Control Value
1523   */
1524  getResponsiveControlValue(controlSettings, controlKey) {
1525    let controlSubKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
1526    let device = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1527    const currentDeviceMode = device || elementorFrontend.getCurrentDeviceMode(),
1528      controlValueDesktop = this.getControlValue(controlSettings, controlKey, controlSubKey);
1529
1530    // Set the control value for the current device mode.
1531    // First check the widescreen device mode.
1532    if ('widescreen' === currentDeviceMode) {
1533      const controlValueWidescreen = this.getControlValue(controlSettings, `${controlKey}_widescreen`, controlSubKey);
1534      return !!controlValueWidescreen || 0 === controlValueWidescreen ? controlValueWidescreen : controlValueDesktop;
1535    }
1536
1537    // Loop through all responsive and desktop device modes.
1538    const activeBreakpoints = elementorFrontend.breakpoints.getActiveBreakpointsList({
1539      withDesktop: true
1540    });
1541    let parentDeviceMode = currentDeviceMode,
1542      deviceIndex = activeBreakpoints.indexOf(currentDeviceMode),
1543      controlValue = '';
1544    while (deviceIndex <= activeBreakpoints.length) {
1545      if ('desktop' === parentDeviceMode) {
1546        controlValue = controlValueDesktop;
1547        break;
1548      }
1549      const responsiveControlKey = `${controlKey}_${parentDeviceMode}`,
1550        responsiveControlValue = this.getControlValue(controlSettings, responsiveControlKey, controlSubKey);
1551      if (!!responsiveControlValue || 0 === responsiveControlValue) {
1552        controlValue = responsiveControlValue;
1553        break;
1554      }
1555
1556      // If no control value has been set for the current device mode, then check the parent device mode.
1557      deviceIndex++;
1558      parentDeviceMode = activeBreakpoints[deviceIndex];
1559    }
1560    return controlValue;
1561  }
1562}
1563exports["default"] = Controls;
1564
1565/***/ }),
1566
1567/***/ "../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js":
1568/*!********************************************************************!*\
1569  !*** ../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js ***!
1570  \********************************************************************/
1571/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1572
1573
1574
1575Object.defineProperty(exports, "__esModule", ({
1576  value: true
1577}));
1578exports["default"] = void 0;
1579class LightboxManager extends elementorModules.ViewModule {
1580  static getLightbox() {
1581    const lightboxPromise = new Promise(resolveLightbox => {
1582        __webpack_require__.e(/*! import() | lightbox */ "lightbox").then(__webpack_require__.t.bind(__webpack_require__, /*! elementor-frontend/utils/lightbox/lightbox */ "../assets/dev/js/frontend/utils/lightbox/lightbox.js", 23)).then(_ref => {
1583          let {
1584            default: LightboxModule
1585          } = _ref;
1586          return resolveLightbox(new LightboxModule());
1587        });
1588      }),
1589      dialogPromise = elementorFrontend.utils.assetsLoader.load('script', 'dialog'),
1590      shareLinkPromise = elementorFrontend.utils.assetsLoader.load('script', 'share-link');
1591    return Promise.all([lightboxPromise, dialogPromise, shareLinkPromise]).then(() => lightboxPromise);
1592  }
1593  getDefaultSettings() {
1594    return {
1595      selectors: {
1596        links: 'a, [data-elementor-lightbox]'
1597      }
1598    };
1599  }
1600  getDefaultElements() {
1601    return {
1602      $links: jQuery(this.getSettings('selectors.links'))
1603    };
1604  }
1605  isLightboxLink(element) {
1606    // Check for lowercase `a` to make sure it works also for links inside SVGs.
1607    if ('a' === element.tagName.toLowerCase() && (element.hasAttribute('download') || !/^[^?]+\.(png|jpe?g|gif|svg|webp)(\?.*)?$/i.test(element.href)) && !element.dataset.elementorLightboxVideo) {
1608      return false;
1609    }
1610    const generalOpenInLightbox = elementorFrontend.getKitSettings('global_image_lightbox'),
1611      currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox;
1612    return 'yes' === currentLinkOpenInLightbox || generalOpenInLightbox && 'no' !== currentLinkOpenInLightbox;
1613  }
1614  async onLinkClick(event) {
1615    const element = event.currentTarget,
1616      $target = jQuery(event.target),
1617      editMode = elementorFrontend.isEditMode(),
1618      isColorPickingMode = editMode && elementor.$previewContents.find('body').hasClass('elementor-editor__ui-state__color-picker'),
1619      isClickInsideElementor = !!$target.closest('.elementor-edit-area').length;
1620    if (!this.isLightboxLink(element)) {
1621      if (editMode && isClickInsideElementor) {
1622        event.preventDefault();
1623      }
1624      return;
1625    }
1626    event.preventDefault();
1627    if (editMode && !elementor.getPreferences('lightbox_in_editor')) {
1628      return;
1629    }
1630
1631    // Disable lightbox on color picking mode.
1632    if (isColorPickingMode) {
1633      return;
1634    }
1635    const lightbox = this.isOptimizedAssetsLoading() ? await LightboxManager.getLightbox() : elementorFrontend.utils.lightbox;
1636    lightbox.createLightbox(element);
1637  }
1638  isOptimizedAssetsLoading() {
1639    return elementorFrontend.config.experimentalFeatures.e_optimized_assets_loading;
1640  }
1641  bindEvents() {
1642    elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), event => this.onLinkClick(event));
1643  }
1644  onInit() {
1645    super.onInit(...arguments);
1646    if (!this.isOptimizedAssetsLoading() || elementorFrontend.isEditMode()) {
1647      return;
1648    }
1649
1650    // Detecting lightbox links on init will reduce the time of waiting to the lightbox to be display on slow connections.
1651    this.elements.$links.each((index, element) => {
1652      if (this.isLightboxLink(element)) {
1653        LightboxManager.getLightbox();
1654
1655        // Breaking the iteration when the library loading has already been triggered.
1656        return false;
1657      }
1658    });
1659  }
1660}
1661exports["default"] = LightboxManager;
1662
1663/***/ }),
1664
1665/***/ "../assets/dev/js/frontend/utils/swiper.js":
1666/*!*************************************************!*\
1667  !*** ../assets/dev/js/frontend/utils/swiper.js ***!
1668  \*************************************************/
1669/***/ ((__unused_webpack_module, exports) => {
1670
1671
1672
1673Object.defineProperty(exports, "__esModule", ({
1674  value: true
1675}));
1676exports["default"] = void 0;
1677class Swiper {
1678  constructor(container, config) {
1679    this.config = config;
1680    if (this.config.breakpoints) {
1681      // The config is passed as a param to allow adjustConfig to be called outside of this wrapper
1682      this.config = this.adjustConfig(config);
1683    }
1684    if (container instanceof jQuery) {
1685      container = container[0];
1686    }
1687
1688    // The Swiper will overlap the column width when applying custom margin values on the column.
1689    container.closest('.elementor-widget-wrap')?.classList.add('e-swiper-container');
1690    container.closest('.elementor-widget')?.classList.add('e-widget-swiper');
1691    return new Promise(resolve => {
1692      if (!elementorFrontend.config.experimentalFeatures.e_optimized_assets_loading) {
1693        return resolve(this.createSwiperInstance(container, this.config));
1694      }
1695      elementorFrontend.utils.assetsLoader.load('script', 'swiper').then(() => resolve(this.createSwiperInstance(container, this.config)));
1696    });
1697  }
1698  createSwiperInstance(container, config) {
1699    const SwiperSource = window.Swiper;
1700    SwiperSource.prototype.adjustConfig = this.adjustConfig;
1701    return new SwiperSource(container, config);
1702  }
1703
1704  // Backwards compatibility for Elementor Pro <2.9.0 (old Swiper version - <5.0.0)
1705  // In Swiper 5.0.0 and up, breakpoints changed from acting as max-width to acting as min-width
1706  adjustConfig(config) {
1707    // Only reverse the breakpoints if the handle param has been defined
1708    if (!config.handleElementorBreakpoints) {
1709      return config;
1710    }
1711    const elementorBreakpoints = elementorFrontend.config.responsive.activeBreakpoints,
1712      elementorBreakpointValues = elementorFrontend.breakpoints.getBreakpointValues();
1713    Object.keys(config.breakpoints).forEach(configBPKey => {
1714      const configBPKeyInt = parseInt(configBPKey);
1715      let breakpointToUpdate;
1716
1717      // The `configBPKeyInt + 1` is a BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0
1718      if (configBPKeyInt === elementorBreakpoints.mobile.value || configBPKeyInt + 1 === elementorBreakpoints.mobile.value) {
1719        // This handles the mobile breakpoint. Elementor's default sm breakpoint is never actually used,
1720        // so the mobile breakpoint (md) needs to be handled separately and set to the 0 breakpoint (xs)
1721        breakpointToUpdate = 0;
1722      } else if (elementorBreakpoints.widescreen && (configBPKeyInt === elementorBreakpoints.widescreen.value || configBPKeyInt + 1 === elementorBreakpoints.widescreen.value)) {
1723        // Widescreen is a min-width breakpoint. Since in Swiper >5.0 the breakpoint system is min-width based,
1724        // the value we pass to the Swiper instance in this case is the breakpoint from the user, unchanged.
1725        breakpointToUpdate = configBPKeyInt;
1726      } else {
1727        // Find the index of the current config breakpoint in the Elementor Breakpoints array
1728        const currentBPIndexInElementorBPs = elementorBreakpointValues.findIndex(elementorBP => {
1729          // BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0
1730          return configBPKeyInt === elementorBP || configBPKeyInt + 1 === elementorBP;
1731        });
1732
1733        // For all other Swiper config breakpoints, move them one breakpoint down on the breakpoint list,
1734        // according to the array of Elementor's global breakpoints
1735        breakpointToUpdate = elementorBreakpointValues[currentBPIndexInElementorBPs - 1];
1736      }
1737      config.breakpoints[breakpointToUpdate] = config.breakpoints[configBPKey];
1738
1739      // Then reset the settings in the original breakpoint key to the default values
1740      config.breakpoints[configBPKey] = {
1741        slidesPerView: config.slidesPerView,
1742        slidesPerGroup: config.slidesPerGroup ? config.slidesPerGroup : 1
1743      };
1744    });
1745    return config;
1746  }
1747}
1748exports["default"] = Swiper;
1749
1750/***/ }),
1751
1752/***/ "../assets/dev/js/frontend/utils/url-actions.js":
1753/*!******************************************************!*\
1754  !*** ../assets/dev/js/frontend/utils/url-actions.js ***!
1755  \******************************************************/
1756/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1757
1758
1759
1760Object.defineProperty(exports, "__esModule", ({
1761  value: true
1762}));
1763exports["default"] = void 0;
1764__webpack_require__(/*! core-js/modules/web.dom-exception.stack.js */ "../node_modules/core-js/modules/web.dom-exception.stack.js");
1765class _default extends elementorModules.ViewModule {
1766  getDefaultSettings() {
1767    return {
1768      selectors: {
1769        links: 'a[href^="%23elementor-action"], a[href^="#elementor-action"]'
1770      }
1771    };
1772  }
1773  bindEvents() {
1774    elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.runLinkAction.bind(this));
1775  }
1776  initActions() {
1777    this.actions = {
1778      lightbox: async settings => {
1779        const lightbox = await elementorFrontend.utils.lightbox;
1780        if (settings.slideshow) {
1781          // Handle slideshow display
1782          lightbox.openSlideshow(settings.slideshow, settings.url);
1783        } else {
1784          // If the settings has an ID - the lightbox target content is an image - the ID is an attachment ID.
1785          if (settings.id) {
1786            settings.type = 'image';
1787          }
1788          lightbox.showModal(settings);
1789        }
1790      }
1791    };
1792  }
1793  addAction(name, callback) {
1794    this.actions[name] = callback;
1795  }
1796  runAction(url) {
1797    url = decodeURIComponent(url);
1798    const actionMatch = url.match(/action=(.+?)&/);
1799    if (!actionMatch) {
1800      return;
1801    }
1802    const action = this.actions[actionMatch[1]];
1803    if (!action) {
1804      return;
1805    }
1806    let settings = {};
1807    const settingsMatch = url.match(/settings=(.+)/);
1808    if (settingsMatch) {
1809      settings = JSON.parse(atob(settingsMatch[1]));
1810    }
1811    for (var _len = arguments.length, restArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1812      restArgs[_key - 1] = arguments[_key];
1813    }
1814    action(settings, ...restArgs);
1815  }
1816  runLinkAction(event) {
1817    event.preventDefault();
1818    this.runAction(jQuery(event.currentTarget).attr('href'), event);
1819  }
1820  runHashAction() {
1821    if (!location.hash) {
1822      return;
1823    }
1824
1825    // Only if an element with this action hash exists on the page do we allow running the action.
1826    const elementWithHash = document.querySelector(`[data-e-action-hash="${location.hash}"], a[href*="${location.hash}"]`);
1827    if (elementWithHash) {
1828      this.runAction(elementWithHash.getAttribute('data-e-action-hash'));
1829    }
1830  }
1831  createActionHash(action, settings) {
1832    // We need to encode the hash tag (#) here, in order to support share links for a variety of providers
1833    return encodeURIComponent(`#elementor-action:action=${action}&settings=${btoa(JSON.stringify(settings))}`);
1834  }
1835  onInit() {
1836    super.onInit();
1837    this.initActions();
1838    elementorFrontend.on('components:init', this.runHashAction.bind(this));
1839  }
1840}
1841exports["default"] = _default;
1842
1843/***/ }),
1844
1845/***/ "../assets/dev/js/frontend/utils/utils.js":
1846/*!************************************************!*\
1847  !*** ../assets/dev/js/frontend/utils/utils.js ***!
1848  \************************************************/
1849/***/ ((__unused_webpack_module, exports) => {
1850
1851
1852
1853Object.defineProperty(exports, "__esModule", ({
1854  value: true
1855}));
1856exports.isScrollSnapActive = exports.escapeHTML = void 0;
1857// Escape HTML special chars to prevent XSS.
1858const escapeHTML = str => {
1859  const specialChars = {
1860    '&': '&amp;',
1861    '<': '&lt;',
1862    '>': '&gt;',
1863    "'": '&#39;',
1864    '"': '&quot;'
1865  };
1866  return str.replace(/[&<>'"]/g, tag => specialChars[tag] || tag);
1867};
1868
1869// Check if Scroll-Snap is active.
1870exports.escapeHTML = escapeHTML;
1871const isScrollSnapActive = () => {
1872  const scrollSnapStatus = elementorFrontend.isEditMode() ? elementor.settings.page.model.attributes?.scroll_snap : elementorFrontend.config.settings.page?.scroll_snap;
1873  return 'yes' === scrollSnapStatus ? true : false;
1874};
1875exports.isScrollSnapActive = isScrollSnapActive;
1876
1877/***/ }),
1878
1879/***/ "../assets/dev/js/frontend/utils/video-api/base-loader.js":
1880/*!****************************************************************!*\
1881  !*** ../assets/dev/js/frontend/utils/video-api/base-loader.js ***!
1882  \****************************************************************/
1883/***/ ((__unused_webpack_module, exports) => {
1884
1885
1886
1887Object.defineProperty(exports, "__esModule", ({
1888  value: true
1889}));
1890exports["default"] = void 0;
1891class BaseLoader extends elementorModules.ViewModule {
1892  getDefaultSettings() {
1893    return {
1894      isInserted: false,
1895      selectors: {
1896        firstScript: 'script:first'
1897      }
1898    };
1899  }
1900  getDefaultElements() {
1901    return {
1902      $firstScript: jQuery(this.getSettings('selectors.firstScript'))
1903    };
1904  }
1905  insertAPI() {
1906    this.elements.$firstScript.before(jQuery('<script>', {
1907      src: this.getApiURL()
1908    }));
1909    this.setSettings('isInserted', true);
1910  }
1911  getVideoIDFromURL(url) {
1912    const videoIDParts = url.match(this.getURLRegex());
1913    return videoIDParts && videoIDParts[1];
1914  }
1915  onApiReady(callback) {
1916    if (!this.getSettings('isInserted')) {
1917      this.insertAPI();
1918    }
1919    if (this.isApiLoaded()) {
1920      callback(this.getApiObject());
1921    } else {
1922      // If not ready check again by timeout..
1923      setTimeout(() => {
1924        this.onApiReady(callback);
1925      }, 350);
1926    }
1927  }
1928  getAutoplayURL(videoURL) {
1929    return videoURL.replace('&autoplay=0', '') + '&autoplay=1';
1930  }
1931}
1932exports["default"] = BaseLoader;
1933
1934/***/ }),
1935
1936/***/ "../assets/dev/js/frontend/utils/video-api/vimeo-loader.js":
1937/*!*****************************************************************!*\
1938  !*** ../assets/dev/js/frontend/utils/video-api/vimeo-loader.js ***!
1939  \*****************************************************************/
1940/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1941
1942
1943
1944var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1945Object.defineProperty(exports, "__esModule", ({
1946  value: true
1947}));
1948exports["default"] = void 0;
1949var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js"));
1950class VimeoLoader extends _baseLoader.default {
1951  getApiURL() {
1952    return 'https://player.vimeo.com/api/player.js';
1953  }
1954  getURLRegex() {
1955    return /^(?:https?:\/\/)?(?:www|player\.)?(?:vimeo\.com\/)?(?:video\/|external\/)?(\d+)([^.?&#"'>]?)/;
1956  }
1957  isApiLoaded() {
1958    return window.Vimeo;
1959  }
1960  getApiObject() {
1961    return Vimeo;
1962  }
1963  getAutoplayURL(videoURL) {
1964    videoURL = super.getAutoplayURL(videoURL);
1965
1966    // Vimeo requires the '#t=' param to be last in the URL.
1967    const timeMatch = videoURL.match(/#t=[^&]*/);
1968    return videoURL.replace(timeMatch[0], '') + timeMatch;
1969  }
1970}
1971exports["default"] = VimeoLoader;
1972
1973/***/ }),
1974
1975/***/ "../assets/dev/js/frontend/utils/video-api/youtube-loader.js":
1976/*!*******************************************************************!*\
1977  !*** ../assets/dev/js/frontend/utils/video-api/youtube-loader.js ***!
1978  \*******************************************************************/
1979/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1980
1981
1982
1983var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1984Object.defineProperty(exports, "__esModule", ({
1985  value: true
1986}));
1987exports["default"] = void 0;
1988var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js"));
1989class YoutubeLoader extends _baseLoader.default {
1990  getApiURL() {
1991    return 'https://www.youtube.com/iframe_api';
1992  }
1993  getURLRegex() {
1994    return /^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/;
1995  }
1996  isApiLoaded() {
1997    return window.YT && YT.loaded;
1998  }
1999  getApiObject() {
2000    return YT;
2001  }
2002}
2003exports["default"] = YoutubeLoader;
2004
2005/***/ }),
2006
2007/***/ "../assets/dev/js/public-path.js":
2008/*!***************************************!*\
2009  !*** ../assets/dev/js/public-path.js ***!
2010  \***************************************/
2011/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
2012
2013
2014
2015/* eslint-disable camelcase */
2016__webpack_require__.p = elementorFrontendConfig.urls.assets + 'js/';
2017
2018/***/ }),
2019
2020/***/ "../assets/dev/js/utils/breakpoints.js":
2021/*!*********************************************!*\
2022  !*** ../assets/dev/js/utils/breakpoints.js ***!
2023  \*********************************************/
2024/***/ ((__unused_webpack_module, exports) => {
2025
2026
2027
2028Object.defineProperty(exports, "__esModule", ({
2029  value: true
2030}));
2031exports["default"] = void 0;
2032/**
2033 * Breakpoints
2034 *
2035 * This utility class contains helper functions relating to Elementor's breakpoints system.
2036 *
2037 * @since 3.4.0
2038 */
2039class Breakpoints extends elementorModules.Module {
2040  constructor(responsiveConfig) {
2041    super();
2042
2043    // The passed config is either `elementor.config.responsive` or `elementorFrontend.config.responsive`
2044    this.responsiveConfig = responsiveConfig;
2045  }
2046
2047  /**
2048   * Get Active Breakpoints List
2049   *
2050   * Returns a flat array containing the active breakpoints/devices. By default, it returns the li
2051   * the list ordered from smallest to largest breakpoint. If `true` is passed as a parameter, it reverses the order.
2052   *
2053   * @since 3.4.0
2054   *
2055   * @param {Object} args
2056   */
2057  getActiveBreakpointsList() {
2058    let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2059    const defaultArgs = {
2060      largeToSmall: false,
2061      withDesktop: false
2062    };
2063    args = {
2064      ...defaultArgs,
2065      ...args
2066    };
2067    const breakpointKeys = Object.keys(this.responsiveConfig.activeBreakpoints);
2068    if (args.withDesktop) {
2069      // If there is an active 'widescreen' breakpoint, insert the artificial 'desktop' device below it.
2070      const widescreenIndex = breakpointKeys.indexOf('widescreen'),
2071        indexToInsertDesktopDevice = -1 === widescreenIndex ? breakpointKeys.length : breakpointKeys.length - 1;
2072      breakpointKeys.splice(indexToInsertDesktopDevice, 0, 'desktop');
2073    }
2074    if (args.largeToSmall) {
2075      breakpointKeys.reverse();
2076    }
2077    return breakpointKeys;
2078  }
2079
2080  /**
2081   * Get Active Breakpoint Values
2082   *
2083   * Returns a flat array containing the list of active breakpoint values, from smallest to largest.
2084   *
2085   * @since 3.4.0
2086   */
2087  getBreakpointValues() {
2088    const {
2089        activeBreakpoints
2090      } = this.responsiveConfig,
2091      breakpointValues = [];
2092    Object.values(activeBreakpoints).forEach(breakpointConfig => {
2093      breakpointValues.push(breakpointConfig.value);
2094    });
2095    return breakpointValues;
2096  }
2097
2098  /**
2099   * Get Desktop Previous Device Key
2100   *
2101   * Returns the key of the device directly under desktop (can be 'tablet', 'tablet_extra', 'laptop').
2102   *
2103   * @since 3.4.0
2104   *
2105   * @return {string} device key
2106   */
2107  getDesktopPreviousDeviceKey() {
2108    let desktopPreviousDevice = '';
2109    const {
2110        activeBreakpoints
2111      } = this.responsiveConfig,
2112      breakpointKeys = Object.keys(activeBreakpoints),
2113      numOfDevices = breakpointKeys.length;
2114    if ('min' === activeBreakpoints[breakpointKeys[numOfDevices - 1]].direction) {
2115      // If the widescreen breakpoint is active, the device that's previous to desktop is the last one before
2116      // widescreen.
2117      desktopPreviousDevice = breakpointKeys[numOfDevices - 2];
2118    } else {
2119      // If the widescreen breakpoint isn't active, we just take the last device returned by the config.
2120      desktopPreviousDevice = breakpointKeys[numOfDevices - 1];
2121    }
2122    return desktopPreviousDevice;
2123  }
2124
2125  /**
2126   * Get Device Minimum Breakpoint
2127   *
2128   * Returns the minimum point in the device's display range. For each device, the minimum point of its display range
2129   * is the max point of the device below it + 1px. For example, if the active devices are mobile, tablet,
2130   * and desktop, and the mobile breakpoint is 767px, the minimum display point for tablet devices is 768px.
2131   *
2132   * @since 3.4.0
2133   *
2134   * @return {number|*} minimum breakpoint
2135   */
2136  getDesktopMinPoint() {
2137    const {
2138        activeBreakpoints
2139      } = this.responsiveConfig,
2140      desktopPreviousDevice = this.getDesktopPreviousDeviceKey();
2141    return activeBreakpoints[desktopPreviousDevice].value + 1;
2142  }
2143
2144  /**
2145   * Get Device Minimum Breakpoint
2146   *
2147   * Returns the minimum point in the device's display range. For each device, the minimum point of its display range
2148   * is the max point of the device below it + 1px. For example, if the active devices are mobile, tablet,
2149   * and desktop, and the mobile breakpoint is 767px, the minimum display point for tablet devices is 768px.
2150   *
2151   * @since 3.4.0
2152   *
2153   * @param {string} device
2154   * @return {number|*} minimum breakpoint
2155   */
2156  getDeviceMinBreakpoint(device) {
2157    if ('desktop' === device) {
2158      return this.getDesktopMinPoint();
2159    }
2160    const {
2161        activeBreakpoints
2162      } = this.responsiveConfig,
2163      breakpointNames = Object.keys(activeBreakpoints);
2164    let minBreakpoint;
2165    if (breakpointNames[0] === device) {
2166      // For the lowest breakpoint, the min point is always 320.
2167      minBreakpoint = 320;
2168    } else if ('widescreen' === device) {
2169      // Widescreen only has a minimum point. In this case, the breakpoint
2170      // value in the Breakpoints config is itself the device min point.
2171      if (activeBreakpoints[device]) {
2172        minBreakpoint = activeBreakpoints[device].value;
2173      } else {
2174        // If the widescreen breakpoint does not exist in the active breakpoints config (for example, in the
2175        // case this method runs as the breakpoint is being added), get the value from the full config.
2176        minBreakpoint = this.responsiveConfig.breakpoints.widescreen;
2177      }
2178    } else {
2179      const deviceNameIndex = breakpointNames.indexOf(device),
2180        previousIndex = deviceNameIndex - 1;
2181      minBreakpoint = activeBreakpoints[breakpointNames[previousIndex]].value + 1;
2182    }
2183    return minBreakpoint;
2184  }
2185
2186  /**
2187   * Get Active Match Regex
2188   *
2189   * Returns a regular expression containing all active breakpoints prefixed with an underscore.
2190   *
2191   * @return {RegExp} Active Match Regex
2192   */
2193  getActiveMatchRegex() {
2194    return new RegExp(this.getActiveBreakpointsList().map(device => '_' + device).join('|') + '$');
2195  }
2196}
2197exports["default"] = Breakpoints;
2198
2199/***/ }),
2200
2201/***/ "../assets/dev/js/utils/events.js":
2202/*!****************************************!*\
2203  !*** ../assets/dev/js/utils/events.js ***!
2204  \****************************************/
2205/***/ ((__unused_webpack_module, exports) => {
2206
2207
2208
2209Object.defineProperty(exports, "__esModule", ({
2210  value: true
2211}));
2212exports["default"] = exports.Events = void 0;
2213class Events {
2214  /**
2215   * Dispatch an Elementor event.
2216   *
2217   * Will dispatch both native event & jQuery event (as BC).
2218   * By default, `bcEvent` is `null`.
2219   *
2220   * @param {Object}      context - The context that will dispatch the event.
2221   * @param {string}      event   - Event to dispatch.
2222   * @param {*}           data    - Data to pass to the event, default to `null`.
2223   * @param {string|null} bcEvent - BC event to dispatch, default to `null`.
2224   *
2225   * @return {void}
2226   */
2227  static dispatch(context, event) {
2228    let data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2229    let bcEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
2230    // Make sure to use the native context if it's a jQuery instance.
2231    context = context instanceof jQuery ? context[0] : context;
2232
2233    // Dispatch the BC event only if exists.
2234    if (bcEvent) {
2235      context.dispatchEvent(new CustomEvent(bcEvent, {
2236        detail: data
2237      }));
2238    }
2239
2240    // jQuery's `.on()` listens also to native custom events, so there is no need
2241    // to dispatch also a jQuery event.
2242    context.dispatchEvent(new CustomEvent(event, {
2243      detail: data
2244    }));
2245  }
2246}
2247exports.Events = Events;
2248var _default = Events;
2249exports["default"] = _default;
2250
2251/***/ }),
2252
2253/***/ "../assets/dev/js/utils/hooks.js":
2254/*!***************************************!*\
2255  !*** ../assets/dev/js/utils/hooks.js ***!
2256  \***************************************/
2257/***/ ((module) => {
2258
2259
2260
2261/**
2262 * Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in
2263 * that, lowest priority hooks are fired first.
2264 */
2265var EventManager = function () {
2266  var slice = Array.prototype.slice,
2267    MethodsAvailable;
2268
2269  /**
2270   * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
2271   * object literal such that looking up the hook utilizes the native object literal hash.
2272   */
2273  var STORAGE = {
2274    actions: {},
2275    filters: {}
2276  };
2277
2278  /**
2279   * Removes the specified hook by resetting the value of it.
2280   *
2281   * @param {string}   type     Type of hook, either 'actions' or 'filters'
2282   * @param {Function} hook     The hook (namespace.identifier) to remove
2283   * @param {Function} callback
2284   * @param {*}        context
2285   * @private
2286   */
2287  function _removeHook(type, hook, callback, context) {
2288    var handlers, handler, i;
2289    if (!STORAGE[type][hook]) {
2290      return;
2291    }
2292    if (!callback) {
2293      STORAGE[type][hook] = [];
2294    } else {
2295      handlers = STORAGE[type][hook];
2296      if (!context) {
2297        for (i = handlers.length; i--;) {
2298          if (handlers[i].callback === callback) {
2299            handlers.splice(i, 1);
2300          }
2301        }
2302      } else {
2303        for (i = handlers.length; i--;) {
2304          handler = handlers[i];
2305          if (handler.callback === callback && handler.context === context) {
2306            handlers.splice(i, 1);
2307          }
2308        }
2309      }
2310    }
2311  }
2312
2313  /**
2314   * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
2315   * than bubble sort, etc: http://jsperf.com/javascript-sort
2316   *
2317   * @param {Array<*>} hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
2318   * @private
2319   */
2320  function _hookInsertSort(hooks) {
2321    var tmpHook, j, prevHook;
2322    for (var i = 1, len = hooks.length; i < len; i++) {
2323      tmpHook = hooks[i];
2324      j = i;
2325      while ((prevHook = hooks[j - 1]) && prevHook.priority > tmpHook.priority) {
2326        hooks[j] = hooks[j - 1];
2327        --j;
2328      }
2329      hooks[j] = tmpHook;
2330    }
2331    return hooks;
2332  }
2333
2334  /**
2335   * Adds the hook to the appropriate storage container
2336   *
2337   * @param {string}   type      'actions' or 'filters'
2338   * @param {Array<*>} hook      The hook (namespace.identifier) to add to our event manager
2339   * @param {Function} callback  The function that will be called when the hook is executed.
2340   * @param {number}   priority  The priority of this hook. Must be an integer.
2341   * @param {*}        [context] A value to be used for this
2342   * @private
2343   */
2344  function _addHook(type, hook, callback, priority, context) {
2345    var hookObject = {
2346      callback,
2347      priority,
2348      context
2349    };
2350
2351    // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
2352    var hooks = STORAGE[type][hook];
2353    if (hooks) {
2354      // TEMP FIX BUG
2355      var hasSameCallback = false;
2356      jQuery.each(hooks, function () {
2357        if (this.callback === callback) {
2358          hasSameCallback = true;
2359          return false;
2360        }
2361      });
2362      if (hasSameCallback) {
2363        return;
2364      }
2365      // END TEMP FIX BUG
2366
2367      hooks.push(hookObject);
2368      hooks = _hookInsertSort(hooks);
2369    } else {
2370      hooks = [hookObject];
2371    }
2372    STORAGE[type][hook] = hooks;
2373  }
2374
2375  /**
2376   * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
2377   *
2378   * @param {string}   type 'actions' or 'filters'
2379   * @param {*}        hook The hook ( namespace.identifier ) to be ran.
2380   * @param {Array<*>} args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
2381   * @private
2382   */
2383  function _runHook(type, hook, args) {
2384    var handlers = STORAGE[type][hook],
2385      i,
2386      len;
2387    if (!handlers) {
2388      return 'filters' === type ? args[0] : false;
2389    }
2390    len = handlers.length;
2391    if ('filters' === type) {
2392      for (i = 0; i < len; i++) {
2393        args[0] = handlers[i].callback.apply(handlers[i].context, args);
2394      }
2395    } else {
2396      for (i = 0; i < len; i++) {
2397        handlers[i].callback.apply(handlers[i].context, args);
2398      }
2399    }
2400    return 'filters' === type ? args[0] : true;
2401  }
2402
2403  /**
2404   * Adds an action to the event manager.
2405   *
2406   * @param {string}   action        Must contain namespace.identifier
2407   * @param {Function} callback      Must be a valid callback function before this action is added
2408   * @param {number}   [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
2409   * @param {*}        [context]     Supply a value to be used for this
2410   */
2411  function addAction(action, callback, priority, context) {
2412    if ('string' === typeof action && 'function' === typeof callback) {
2413      priority = parseInt(priority || 10, 10);
2414      _addHook('actions', action, callback, priority, context);
2415    }
2416    return MethodsAvailable;
2417  }
2418
2419  /**
2420   * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
2421   * that the first argument must always be the action.
2422   */
2423  function doAction( /* Action, arg1, arg2, ... */
2424  ) {
2425    var args = slice.call(arguments);
2426    var action = args.shift();
2427    if ('string' === typeof action) {
2428      _runHook('actions', action, args);
2429    }
2430    return MethodsAvailable;
2431  }
2432
2433  /**
2434   * Removes the specified action if it contains a namespace.identifier & exists.
2435   *
2436   * @param {string}   action     The action to remove
2437   * @param {Function} [callback] Callback function to remove
2438   */
2439  function removeAction(action, callback) {
2440    if ('string' === typeof action) {
2441      _removeHook('actions', action, callback);
2442    }
2443    return MethodsAvailable;
2444  }
2445
2446  /**
2447   * Adds a filter to the event manager.
2448   *
2449   * @param {string}   filter        Must contain namespace.identifier
2450   * @param {Function} callback      Must be a valid callback function before this action is added
2451   * @param {number}   [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
2452   * @param {*}        [context]     Supply a value to be used for this
2453   */
2454  function addFilter(filter, callback, priority, context) {
2455    if ('string' === typeof filter && 'function' === typeof callback) {
2456      priority = parseInt(priority || 10, 10);
2457      _addHook('filters', filter, callback, priority, context);
2458    }
2459    return MethodsAvailable;
2460  }
2461
2462  /**
2463   * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
2464   * the first argument must always be the filter.
2465   */
2466  function applyFilters( /* Filter, filtered arg, arg2, ... */
2467  ) {
2468    var args = slice.call(arguments);
2469    var filter = args.shift();
2470    if ('string' === typeof filter) {
2471      return _runHook('filters', filter, args);
2472    }
2473    return MethodsAvailable;
2474  }
2475
2476  /**
2477   * Removes the specified filter if it contains a namespace.identifier & exists.
2478   *
2479   * @param {string}   filter     The action to remove
2480   * @param {Function} [callback] Callback function to remove
2481   */
2482  function removeFilter(filter, callback) {
2483    if ('string' === typeof filter) {
2484      _removeHook('filters', filter, callback);
2485    }
2486    return MethodsAvailable;
2487  }
2488
2489  /**
2490   * Maintain a reference to the object scope so our public methods never get confusing.
2491   */
2492  MethodsAvailable = {
2493    removeFilter,
2494    applyFilters,
2495    addFilter,
2496    removeAction,
2497    doAction,
2498    addAction
2499  };
2500
2501  // Return all of the publicly available methods
2502  return MethodsAvailable;
2503};
2504module.exports = EventManager;
2505
2506/***/ }),
2507
2508/***/ "../core/common/assets/js/utils/environment.js":
2509/*!*****************************************************!*\
2510  !*** ../core/common/assets/js/utils/environment.js ***!
2511  \*****************************************************/
2512/***/ ((__unused_webpack_module, exports) => {
2513
2514
2515
2516Object.defineProperty(exports, "__esModule", ({
2517  value: true
2518}));
2519exports["default"] = void 0;
2520const matchUserAgent = UserAgentStr => {
2521    return userAgent.indexOf(UserAgentStr) >= 0;
2522  },
2523  userAgent = navigator.userAgent,
2524  // Solution influenced by https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
2525
2526  // Opera 8.0+
2527  isOpera = !!window.opr && !!opr.addons || !!window.opera || matchUserAgent(' OPR/'),
2528  // Firefox 1.0+
2529  isFirefox = matchUserAgent('Firefox'),
2530  // Safari 3.0+ "[object HTMLElementConstructor]"
2531  isSafari = /^((?!chrome|android).)*safari/i.test(userAgent) || /constructor/i.test(window.HTMLElement) || (p => {
2532    return '[object SafariRemoteNotification]' === p.toString();
2533  })(!window.safari || typeof safari !== 'undefined' && safari.pushNotification),
2534  // Internet Explorer 6-11
2535  isIE = /Trident|MSIE/.test(userAgent) && ( /* @cc_on!@*/ false || !!document.documentMode),
2536  // Edge 20+
2537  isEdge = !isIE && !!window.StyleMedia || matchUserAgent('Edg'),
2538  // Google Chrome (Not accurate)
2539  isChrome = !!window.chrome && matchUserAgent('Chrome') && !(isEdge || isOpera),
2540  // Blink engine
2541  isBlink = matchUserAgent('Chrome') && !!window.CSS,
2542  // Apple Webkit engine
2543  isAppleWebkit = matchUserAgent('AppleWebKit') && !isBlink,
2544  isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0,
2545  environment = {
2546    isTouchDevice,
2547    appleWebkit: isAppleWebkit,
2548    blink: isBlink,
2549    chrome: isChrome,
2550    edge: isEdge,
2551    firefox: isFirefox,
2552    ie: isIE,
2553    mac: matchUserAgent('Macintosh'),
2554    opera: isOpera,
2555    safari: isSafari,
2556    webkit: matchUserAgent('AppleWebKit')
2557  };
2558var _default = environment;
2559exports["default"] = _default;
2560
2561/***/ }),
2562
2563/***/ "../core/common/assets/js/utils/storage.js":
2564/*!*************************************************!*\
2565  !*** ../core/common/assets/js/utils/storage.js ***!
2566  \*************************************************/
2567/***/ ((__unused_webpack_module, exports) => {
2568
2569
2570
2571Object.defineProperty(exports, "__esModule", ({
2572  value: true
2573}));
2574exports["default"] = void 0;
2575class _default extends elementorModules.Module {
2576  get(key, options) {
2577    options = options || {};
2578    let storage;
2579    try {
2580      storage = options.session ? sessionStorage : localStorage;
2581    } catch (e) {
2582      return key ? undefined : {};
2583    }
2584    let elementorStorage = storage.getItem('elementor');
2585    if (elementorStorage) {
2586      elementorStorage = JSON.parse(elementorStorage);
2587    } else {
2588      elementorStorage = {};
2589    }
2590    if (!elementorStorage.__expiration) {
2591      elementorStorage.__expiration = {};
2592    }
2593    const expiration = elementorStorage.__expiration;
2594    let expirationToCheck = [];
2595    if (key) {
2596      if (expiration[key]) {
2597        expirationToCheck = [key];
2598      }
2599    } else {
2600      expirationToCheck = Object.keys(expiration);
2601    }
2602    let entryExpired = false;
2603    expirationToCheck.forEach(expirationKey => {
2604      if (new Date(expiration[expirationKey]) < new Date()) {
2605        delete elementorStorage[expirationKey];
2606        delete expiration[expirationKey];
2607        entryExpired = true;
2608      }
2609    });
2610    if (entryExpired) {
2611      this.save(elementorStorage, options.session);
2612    }
2613    if (key) {
2614      return elementorStorage[key];
2615    }
2616    return elementorStorage;
2617  }
2618  set(key, value, options) {
2619    options = options || {};
2620    const elementorStorage = this.get(null, options);
2621    elementorStorage[key] = value;
2622    if (options.lifetimeInSeconds) {
2623      const date = new Date();
2624      date.setTime(date.getTime() + options.lifetimeInSeconds * 1000);
2625      elementorStorage.__expiration[key] = date.getTime();
2626    }
2627    this.save(elementorStorage, options.session);
2628  }
2629  save(object, session) {
2630    let storage;
2631    try {
2632      storage = session ? sessionStorage : localStorage;
2633    } catch (e) {
2634      return;
2635    }
2636    storage.setItem('elementor', JSON.stringify(object));
2637  }
2638}
2639exports["default"] = _default;
2640
2641/***/ }),
2642
2643/***/ "../modules/shapes/assets/js/frontend/frontend.js":
2644/*!********************************************************!*\
2645  !*** ../modules/shapes/assets/js/frontend/frontend.js ***!
2646  \********************************************************/
2647/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2648
2649
2650
2651Object.defineProperty(exports, "__esModule", ({
2652  value: true
2653}));
2654exports["default"] = void 0;
2655class _default extends elementorModules.Module {
2656  constructor() {
2657    super();
2658    elementorFrontend.elementsHandler.attachHandler('text-path', () => __webpack_require__.e(/*! import() | text-path */ "text-path").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/text-path */ "../modules/shapes/assets/js/frontend/handlers/text-path.js")));
2659  }
2660}
2661exports["default"] = _default;
2662
2663/***/ }),
2664
vendor: 641 bytes, lines 2665-2683
2665/***/ "../node_modules/core-js/internals/an-instance.js":
2666/*!********************************************************!*\
2667  !*** ../node_modules/core-js/internals/an-instance.js ***!
2668  \********************************************************/
2669/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2670
2671
2672var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../node_modules/core-js/internals/object-is-prototype-of.js");
2673
2674var $TypeError = TypeError;
2675
2676module.exports = function (it, Prototype) {
2677  if (isPrototypeOf(Prototype, it)) return it;
2678  throw $TypeError('Incorrect invocation');
2679};
2680
2681
2682/***/ }),
2683
vendor: 1,867 bytes, lines 2684-2721
2684/***/ "../node_modules/core-js/internals/dom-exception-constants.js":
2685/*!********************************************************************!*\
2686  !*** ../node_modules/core-js/internals/dom-exception-constants.js ***!
2687  \********************************************************************/
2688/***/ ((module) => {
2689
2690
2691module.exports = {
2692  IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },
2693  DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },
2694  HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },
2695  WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },
2696  InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },
2697  NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },
2698  NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },
2699  NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },
2700  NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },
2701  InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },
2702  InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },
2703  SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },
2704  InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },
2705  NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },
2706  InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },
2707  ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },
2708  TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },
2709  SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },
2710  NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },
2711  AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },
2712  URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },
2713  QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },
2714  TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },
2715  InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },
2716  DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }
2717};
2718
2719
2720/***/ }),
2721
vendor: 4,544 bytes, lines 2722-2798
2722/***/ "../node_modules/core-js/modules/web.dom-exception.stack.js":
2723/*!******************************************************************!*\
2724  !*** ../node_modules/core-js/modules/web.dom-exception.stack.js ***!
2725  \******************************************************************/
2726/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
2727
2728
2729var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js/internals/export.js");
2730var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js/internals/global.js");
2731var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js/internals/get-built-in.js");
2732var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js/internals/create-property-descriptor.js");
2733var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js/internals/object-define-property.js").f);
2734var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../node_modules/core-js/internals/has-own-property.js");
2735var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../node_modules/core-js/internals/an-instance.js");
2736var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ "../node_modules/core-js/internals/inherit-if-required.js");
2737var normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ "../node_modules/core-js/internals/normalize-string-argument.js");
2738var DOMExceptionConstants = __webpack_require__(/*! ../internals/dom-exception-constants */ "../node_modules/core-js/internals/dom-exception-constants.js");
2739var clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ "../node_modules/core-js/internals/error-stack-clear.js");
2740var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js/internals/descriptors.js");
2741var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js/internals/is-pure.js");
2742
2743var DOM_EXCEPTION = 'DOMException';
2744var Error = getBuiltIn('Error');
2745var NativeDOMException = getBuiltIn(DOM_EXCEPTION);
2746
2747var $DOMException = function DOMException() {
2748  anInstance(this, DOMExceptionPrototype);
2749  var argumentsLength = arguments.length;
2750  var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
2751  var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
2752  var that = new NativeDOMException(message, name);
2753  var error = Error(message);
2754  error.name = DOM_EXCEPTION;
2755  defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
2756  inheritIfRequired(that, this, $DOMException);
2757  return that;
2758};
2759
2760var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;
2761
2762var ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION);
2763var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);
2764
2765// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
2766var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION);
2767
2768// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it
2769// https://github.com/Jarred-Sumner/bun/issues/399
2770var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);
2771
2772var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;
2773
2774// `DOMException` constructor patch for `.stack` where it's required
2775// https://webidl.spec.whatwg.org/#es-DOMException-specialness
2776$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic
2777  DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException
2778});
2779
2780var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
2781var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;
2782
2783if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {
2784  if (!IS_PURE) {
2785    defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));
2786  }
2787
2788  for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {
2789    var constant = DOMExceptionConstants[key];
2790    var constantName = constant.s;
2791    if (!hasOwn(PolyfilledDOMException, constantName)) {
2792      defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));
2793    }
2794  }
2795}
2796
2797
2798/***/ })
2798
2799
2800},
2801/******/ __webpack_require__ => { // webpackRuntimeModules
2802/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
2803/******/ __webpack_require__.O(0, ["frontend-modules"], () => (__webpack_exec__("../assets/dev/js/frontend/frontend.js")));
2804/******/ var __webpack_exports__ = __webpack_require__.O();
2805/******/ }
2806]);
2807//# sourceMappingURL=frontend.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.