PageSourceSearch

https://appreciatewealth.com/blog/wp-content/plugins/elementor/assets/js/frontend.js?ver=3.24.6

js appreciatewealth.com collected 2026-10-01 15:38:50 UTC 105,623 bytes, 2,830 lines download raw bytes

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