PageSourceSearch

https://start2bitcoin.com/wp-content/plugins/elementor-pro/assets/js/frontend.js?ver=3.29.2

js start2bitcoin.com collected 2026-09-29 08:46:32 UTC 54,506 bytes, 1,464 lines download raw bytes

1/*! elementor-pro - v3.29.0 - 04-06-2025 */
2(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["frontend"],{
3
4/***/ "../assets/dev/js/frontend/frontend.js":
5/*!*********************************************!*\
6  !*** ../assets/dev/js/frontend/frontend.js ***!
7  \*********************************************/
8/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
9
10"use strict";
11
12
13var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
14__webpack_require__(/*! ../public-path */ "../assets/dev/js/public-path.js");
15var _frontend = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/motion-fx/assets/js/frontend/frontend */ "../modules/motion-fx/assets/js/frontend/frontend.js"));
16var _frontend2 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/sticky/assets/js/frontend/frontend */ "../modules/sticky/assets/js/frontend/frontend.js"));
17var _frontend3 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/code-highlight/assets/js/frontend/frontend */ "../modules/code-highlight/assets/js/frontend/frontend.js"));
18var _frontend4 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/video-playlist/assets/js/frontend/frontend */ "../modules/video-playlist/assets/js/frontend/frontend.js"));
19var _frontend5 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/payments/assets/js/frontend/frontend */ "../modules/payments/assets/js/frontend/frontend.js"));
20var _frontend6 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/progress-tracker/assets/js/frontend/frontend */ "../modules/progress-tracker/assets/js/frontend/frontend.js"));
21var _controls = _interopRequireDefault(__webpack_require__(/*! ./utils/controls */ "../assets/dev/js/frontend/utils/controls.js"));
22var _dropdownMenuHeightController = _interopRequireDefault(__webpack_require__(/*! ./utils/dropdown-menu-height-controller */ "../assets/dev/js/frontend/utils/dropdown-menu-height-controller.js"));
23class ElementorProFrontend extends elementorModules.ViewModule {
24  onInit() {
25    super.onInit();
26    this.config = ElementorProFrontendConfig;
27    this.modules = {};
28    this.initOnReadyComponents();
29  }
30  bindEvents() {
31    jQuery(window).on('elementor/frontend/init', this.onElementorFrontendInit.bind(this));
32  }
33  initModules() {
34    // Handlers that should be available by default for sections usage.
35    let handlers = {
36      motionFX: _frontend.default,
37      sticky: _frontend2.default,
38      codeHighlight: _frontend3.default,
39      videoPlaylist: _frontend4.default,
40      payments: _frontend5.default,
41      progressTracker: _frontend6.default
42    };
43
44    // Keep this line before applying filter on the handlers.
45    elementorProFrontend.trigger('elementor-pro/modules/init/before');
46    handlers = elementorFrontend.hooks.applyFilters('elementor-pro/frontend/handlers', handlers);
47    jQuery.each(handlers, (moduleName, ModuleClass) => {
48      this.modules[moduleName] = new ModuleClass();
49    });
50
51    // TODO: BC Since 2.9.0
52    this.modules.linkActions = {
53      addAction: function () {
54        elementorFrontend.utils.urlActions.addAction(...arguments);
55      }
56    };
57  }
58  onElementorFrontendInit() {
59    this.initModules();
60  }
61  initOnReadyComponents() {
62    this.utils = {
63      controls: new _controls.default(),
64      DropdownMenuHeightController: _dropdownMenuHeightController.default
65    };
66  }
67}
68window.elementorProFrontend = new ElementorProFrontend();
69
70/***/ }),
71
72/***/ "../assets/dev/js/frontend/utils/controls.js":
73/*!***************************************************!*\
74  !*** ../assets/dev/js/frontend/utils/controls.js ***!
75  \***************************************************/
76/***/ ((__unused_webpack_module, exports) => {
77
78"use strict";
79
80
81Object.defineProperty(exports, "__esModule", ({
82  value: true
83}));
84exports["default"] = void 0;
85class Controls {
86  /**
87   * Get Control Value
88   *
89   * Retrieves a control value.
90   * This function has been copied from `elementor/assets/dev/js/editor/utils/conditions.js`.
91   *
92   * @since 3.11.0
93   *
94   * @param {{}}     controlSettings A settings object (e.g. element settings - keys and values)
95   * @param {string} controlKey      The control key name
96   * @param {string} controlSubKey   A specific property of the control object.
97   * @return {*} Control Value
98   */
99  getControlValue(controlSettings, controlKey, controlSubKey) {
100    let value;
101    if ('object' === typeof controlSettings[controlKey] && controlSubKey) {
102      value = controlSettings[controlKey][controlSubKey];
103    } else {
104      value = controlSettings[controlKey];
105    }
106    return value;
107  }
108
109  /**
110   * Get the value of a responsive control.
111   *
112   * Retrieves the value of a responsive control for the current device or for this first parent device which has a control value.
113   *
114   * @since 3.11.0
115   *
116   * @param {{}}     controlSettings A settings object (e.g. element settings - keys and values)
117   * @param {string} controlKey      The control key name
118   * @param {string} controlSubKey   A specific property of the control object.
119   * @return {*} Control Value
120   */
121  getResponsiveControlValue(controlSettings, controlKey) {
122    let controlSubKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
123    const currentDeviceMode = elementorFrontend.getCurrentDeviceMode(),
124      controlValueDesktop = this.getControlValue(controlSettings, controlKey, controlSubKey);
125
126    // Set the control value for the current device mode.
127    // First check the widescreen device mode.
128    if ('widescreen' === currentDeviceMode) {
129      const controlValueWidescreen = this.getControlValue(controlSettings, `${controlKey}_widescreen`, controlSubKey);
130      return !!controlValueWidescreen || 0 === controlValueWidescreen ? controlValueWidescreen : controlValueDesktop;
131    }
132
133    // Loop through all responsive and desktop device modes.
134    const activeBreakpoints = elementorFrontend.breakpoints.getActiveBreakpointsList({
135      withDesktop: true
136    });
137    let parentDeviceMode = currentDeviceMode,
138      deviceIndex = activeBreakpoints.indexOf(currentDeviceMode),
139      controlValue = '';
140    while (deviceIndex <= activeBreakpoints.length) {
141      if ('desktop' === parentDeviceMode) {
142        controlValue = controlValueDesktop;
143        break;
144      }
145      const responsiveControlKey = `${controlKey}_${parentDeviceMode}`,
146        responsiveControlValue = this.getControlValue(controlSettings, responsiveControlKey, controlSubKey);
147      if (!!responsiveControlValue || 0 === responsiveControlValue) {
148        controlValue = responsiveControlValue;
149        break;
150      }
151
152      // If no control value has been set for the current device mode, then check the parent device mode.
153      deviceIndex++;
154      parentDeviceMode = activeBreakpoints[deviceIndex];
155    }
156    return controlValue;
157  }
158}
159exports["default"] = Controls;
160
161/***/ }),
162
163/***/ "../assets/dev/js/frontend/utils/dropdown-menu-height-controller.js":
164/*!**************************************************************************!*\
165  !*** ../assets/dev/js/frontend/utils/dropdown-menu-height-controller.js ***!
166  \**************************************************************************/
167/***/ ((__unused_webpack_module, exports) => {
168
169"use strict";
170
171
172Object.defineProperty(exports, "__esModule", ({
173  value: true
174}));
175exports["default"] = void 0;
176class DropdownMenuHeightController {
177  constructor(widgetConfig) {
178    this.widgetConfig = widgetConfig;
179  }
180  calculateStickyMenuNavHeight() {
181    this.widgetConfig.elements.$dropdownMenuContainer.css(this.widgetConfig.settings.menuHeightCssVarName, '');
182    const menuToggleHeight = this.widgetConfig.elements.$dropdownMenuContainer.offset().top - jQuery(window).scrollTop();
183    return elementorFrontend.elements.$window.height() - menuToggleHeight;
184  }
185  calculateMenuTabContentHeight($tab) {
186    return elementorFrontend.elements.$window.height() - $tab[0].getBoundingClientRect().top;
187  }
188  isElementSticky() {
189    return this.widgetConfig.elements.$element.hasClass('elementor-sticky') || this.widgetConfig.elements.$element.parents('.elementor-sticky').length;
190  }
191  getMenuHeight() {
192    return this.isElementSticky() ? this.calculateStickyMenuNavHeight() + 'px' : this.widgetConfig.settings.dropdownMenuContainerMaxHeight;
193  }
194  setMenuHeight(menuHeight) {
195    this.widgetConfig.elements.$dropdownMenuContainer.css(this.widgetConfig.settings.menuHeightCssVarName, menuHeight);
196  }
197  reassignMobileMenuHeight() {
198    const menuHeight = this.isToggleActive() ? this.getMenuHeight() : 0;
199    return this.setMenuHeight(menuHeight);
200  }
201  reassignMenuHeight($activeTabContent) {
202    if (!this.isElementSticky() || 0 === $activeTabContent.length) {
203      return;
204    }
205    const offsetBottom = elementorFrontend.elements.$window.height() - $activeTabContent[0].getBoundingClientRect().top,
206      isContentHeightBiggerThanWindow = $activeTabContent.height() > offsetBottom;
207    if (!isContentHeightBiggerThanWindow) {
208      return;
209    }
210    $activeTabContent.css('height', this.calculateMenuTabContentHeight($activeTabContent) + 'px');
211    $activeTabContent.css('overflow-y', 'scroll');
212  }
213  resetMenuHeight($activeTabContent) {
214    if (!this.isElementSticky()) {
215      return;
216    }
217    $activeTabContent.css('height', 'initial');
218    $activeTabContent.css('overflow-y', 'visible');
219  }
220  isToggleActive() {
221    const $menuToggle = this.widgetConfig.elements.$menuToggle;
222
223    // New approach.
224    // Aria attributes instead of css classes.
225    if (!!this.widgetConfig.attributes?.menuToggleState) {
226      return 'true' === $menuToggle.attr(this.widgetConfig.attributes.menuToggleState);
227    }
228
229    // This can be removed once the new markup of the Mega Menu has been implemented.
230    // Previously we used state classes to indicate the active state of the menu toggle.
231    return $menuToggle.hasClass(this.widgetConfig.classes.menuToggleActiveClass);
232  }
233}
234exports["default"] = DropdownMenuHeightController;
235
236/***/ }),
237
238/***/ "../assets/dev/js/public-path.js":
239/*!***************************************!*\
240  !*** ../assets/dev/js/public-path.js ***!
241  \***************************************/
242/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
243
244"use strict";
245
246
247/* eslint-disable camelcase */
248__webpack_require__.p = ElementorProFrontendConfig.urls.assets + 'js/';
249
250/***/ }),
251
252/***/ "../modules/code-highlight/assets/js/frontend/frontend.js":
253/*!****************************************************************!*\
254  !*** ../modules/code-highlight/assets/js/frontend/frontend.js ***!
255  \****************************************************************/
256/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
257
258"use strict";
259
260
261Object.defineProperty(exports, "__esModule", ({
262  value: true
263}));
264exports["default"] = void 0;
265class _default extends elementorModules.Module {
266  constructor() {
267    super();
268    elementorFrontend.elementsHandler.attachHandler('code-highlight', () => __webpack_require__.e(/*! import() | code-highlight */ "code-highlight").then(__webpack_require__.bind(__webpack_require__, /*! ./handler */ "../modules/code-highlight/assets/js/frontend/handler.js")));
269  }
270}
271exports["default"] = _default;
272
273/***/ }),
274
275/***/ "../modules/motion-fx/assets/js/frontend/frontend.js":
276/*!***********************************************************!*\
277  !*** ../modules/motion-fx/assets/js/frontend/frontend.js ***!
278  \***********************************************************/
279/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
280
281"use strict";
282
283
284var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
285Object.defineProperty(exports, "__esModule", ({
286  value: true
287}));
288exports["default"] = void 0;
289var _handler = _interopRequireDefault(__webpack_require__(/*! ./handler */ "../modules/motion-fx/assets/js/frontend/handler.js"));
290class _default extends elementorModules.Module {
291  constructor() {
292    super();
293    elementorFrontend.elementsHandler.attachHandler('global', _handler.default, null);
294  }
295}
296exports["default"] = _default;
297
298/***/ }),
299
300/***/ "../modules/motion-fx/assets/js/frontend/handler.js":
301/*!**********************************************************!*\
302  !*** ../modules/motion-fx/assets/js/frontend/handler.js ***!
303  \**********************************************************/
304/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
305
306"use strict";
307
308
309var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
310Object.defineProperty(exports, "__esModule", ({
311  value: true
312}));
313exports["default"] = void 0;
314var _motionFx = _interopRequireDefault(__webpack_require__(/*! ./motion-fx/motion-fx */ "../modules/motion-fx/assets/js/frontend/motion-fx/motion-fx.js"));
315class _default extends elementorModules.frontend.handlers.Base {
316  __construct() {
317    super.__construct(...arguments);
318    this.toggle = elementorFrontend.debounce(this.toggle, 200);
319  }
320  getDefaultSettings() {
321    return {
322      selectors: {
323        container: '.elementor-widget-container'
324      }
325    };
326  }
327  getDefaultElements() {
328    const selectors = this.getSettings('selectors');
329    let container = this.$element.find(selectors.container);
330    if (0 === container.length) {
331      container = this.$element;
332    }
333    return {
334      $container: container
335    };
336  }
337  bindEvents() {
338    elementorFrontend.elements.$window.on('resize', this.toggle);
339  }
340  unbindEvents() {
341    elementorFrontend.elements.$window.off('resize', this.toggle);
342  }
343  addCSSTransformEvents() {
344    // Remove CSS transition variable that assigned from scroll.js in order to allow the transition of the CSS-Transform.
345    const motionFxScrolling = this.getElementSettings('motion_fx_motion_fx_scrolling');
346    if (motionFxScrolling && !this.isTransitionEventAdded) {
347      this.isTransitionEventAdded = true;
348      this.elements.$container.on('mouseenter', () => {
349        this.elements.$container.css('--e-transform-transition-duration', '');
350      });
351    }
352  }
353  initEffects() {
354    this.effects = {
355      translateY: {
356        interaction: 'scroll',
357        actions: ['translateY']
358      },
359      translateX: {
360        interaction: 'scroll',
361        actions: ['translateX']
362      },
363      rotateZ: {
364        interaction: 'scroll',
365        actions: ['rotateZ']
366      },
367      scale: {
368        interaction: 'scroll',
369        actions: ['scale']
370      },
371      opacity: {
372        interaction: 'scroll',
373        actions: ['opacity']
374      },
375      blur: {
376        interaction: 'scroll',
377        actions: ['blur']
378      },
379      mouseTrack: {
380        interaction: 'mouseMove',
381        actions: ['translateXY']
382      },
383      tilt: {
384        interaction: 'mouseMove',
385        actions: ['tilt']
386      }
387    };
388  }
389  prepareOptions(name) {
390    const elementSettings = this.getElementSettings(),
391      type = 'motion_fx' === name ? 'element' : 'background',
392      interactions = {};
393    jQuery.each(elementSettings, (key, value) => {
394      const keyRegex = new RegExp('^' + name + '_(.+?)_effect'),
395        keyMatches = key.match(keyRegex);
396      if (!keyMatches || !value) {
397        return;
398      }
399      const options = {},
400        effectName = keyMatches[1];
401      jQuery.each(elementSettings, (subKey, subValue) => {
402        const subKeyRegex = new RegExp(name + '_' + effectName + '_(.+)'),
403          subKeyMatches = subKey.match(subKeyRegex);
404        if (!subKeyMatches) {
405          return;
406        }
407        const subFieldName = subKeyMatches[1];
408        if ('effect' === subFieldName) {
409          return;
410        }
411        if ('object' === typeof subValue) {
412          subValue = Object.keys(subValue.sizes).length ? subValue.sizes : subValue.size;
413        }
414        options[subKeyMatches[1]] = subValue;
415      });
416      const effect = this.effects[effectName],
417        interactionName = effect.interaction;
418      if (!interactions[interactionName]) {
419        interactions[interactionName] = {};
420      }
421      effect.actions.forEach(action => interactions[interactionName][action] = options);
422    });
423    let $element = this.$element,
424      $dimensionsElement,
425      $childElement;
426    const elementType = this.getElementType();
427    if ('element' === type && !['section', 'container'].includes(elementType)) {
428      $dimensionsElement = $element;
429      let childElementSelector;
430      if ('column' === elementType) {
431        childElementSelector = '.elementor-widget-wrap';
432      } else {
433        childElementSelector = '.elementor-widget-container';
434      }
435      $childElement = $element.find('> ' + childElementSelector);
436      $element = 0 === $childElement.length ? this.$element : $childElement;
437    }
438    const options = {
439      type,
440      interactions,
441      elementSettings,
442      $element,
443      $dimensionsElement,
444      refreshDimensions: this.isEdit,
445      range: elementSettings[name + '_range'],
446      classes: {
447        element: 'elementor-motion-effects-element',
448        parent: 'elementor-motion-effects-parent',
449        backgroundType: 'elementor-motion-effects-element-type-background',
450        container: 'elementor-motion-effects-container',
451        layer: 'elementor-motion-effects-layer',
452        perspective: 'elementor-motion-effects-perspective'
453      }
454    };
455    if (!options.range && 'fixed' === this.getCurrentDeviceSetting('_position')) {
456      options.range = 'page';
457    }
458    if ('fixed' === this.getCurrentDeviceSetting('_position')) {
459      options.isFixedPosition = true;
460    }
461    if ('background' === type && 'column' === this.getElementType()) {
462      options.addBackgroundLayerTo = ' > .elementor-element-populated';
463    }
464    return options;
465  }
466  activate(name) {
467    const options = this.prepareOptions(name);
468    if (jQuery.isEmptyObject(options.interactions)) {
469      return;
470    }
471    this[name] = new _motionFx.default(options);
472  }
473  deactivate(name) {
474    if (this[name]) {
475      this[name].destroy();
476      delete this[name];
477    }
478  }
479  toggle() {
480    const currentDeviceMode = elementorFrontend.getCurrentDeviceMode(),
481      elementSettings = this.getElementSettings();
482    ['motion_fx', 'background_motion_fx'].forEach(name => {
483      const devices = elementSettings[name + '_devices'],
484        isCurrentModeActive = !devices || -1 !== devices.indexOf(currentDeviceMode);
485      if (isCurrentModeActive && (elementSettings[name + '_motion_fx_scrolling'] || elementSettings[name + '_motion_fx_mouse'])) {
486        if (this[name]) {
487          this.refreshInstance(name);
488        } else {
489          this.activate(name);
490        }
491      } else {
492        this.deactivate(name);
493      }
494    });
495  }
496  refreshInstance(instanceName) {
497    const instance = this[instanceName];
498    if (!instance) {
499      return;
500    }
501    const preparedOptions = this.prepareOptions(instanceName);
502    instance.setSettings(preparedOptions);
503    instance.refresh();
504  }
505  onInit() {
506    super.onInit();
507    this.initEffects();
508    this.addCSSTransformEvents();
509    this.toggle();
510  }
511  onElementChange(propertyName) {
512    if (/motion_fx_((scrolling)|(mouse)|(devices))$/.test(propertyName)) {
513      if ('motion_fx_motion_fx_scrolling' === propertyName) {
514        this.addCSSTransformEvents();
515      }
516      this.toggle();
517      return;
518    }
519    const propertyMatches = propertyName.match('.*?(motion_fx|_transform)');
520    if (propertyMatches) {
521      const instanceName = propertyMatches[0].match('(_transform)') ? 'motion_fx' : propertyMatches[0];
522      this.refreshInstance(instanceName);
523      if (!this[instanceName]) {
524        this.activate(instanceName);
525      }
526    }
527    if (/^_position/.test(propertyName)) {
528      ['motion_fx', 'background_motion_fx'].forEach(instanceName => {
529        this.refreshInstance(instanceName);
530      });
531    }
532  }
533  onDestroy() {
534    super.onDestroy();
535    ['motion_fx', 'background_motion_fx'].forEach(name => {
536      this.deactivate(name);
537    });
538  }
539}
540exports["default"] = _default;
541
542/***/ }),
543
544/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/actions.js":
545/*!********************************************************************!*\
546  !*** ../modules/motion-fx/assets/js/frontend/motion-fx/actions.js ***!
547  \********************************************************************/
548/***/ ((__unused_webpack_module, exports) => {
549
550"use strict";
551
552
553Object.defineProperty(exports, "__esModule", ({
554  value: true
555}));
556exports["default"] = void 0;
557class _default extends elementorModules.Module {
558  getMovePointFromPassedPercents(movableRange, passedPercents) {
559    const movePoint = passedPercents / movableRange * 100;
560    return +movePoint.toFixed(2);
561  }
562  getEffectValueFromMovePoint(range, movePoint) {
563    return range * movePoint / 100;
564  }
565  getStep(passedPercents, options) {
566    if ('element' === this.getSettings('type')) {
567      return this.getElementStep(passedPercents, options);
568    }
569    return this.getBackgroundStep(passedPercents, options);
570  }
571  getElementStep(passedPercents, options) {
572    return -(passedPercents - 50) * options.speed;
573  }
574  getBackgroundStep(passedPercents, options) {
575    const movableRange = this.getSettings('dimensions.movable' + options.axis.toUpperCase());
576    return -this.getEffectValueFromMovePoint(movableRange, passedPercents);
577  }
578  getDirectionMovePoint(passedPercents, direction, range) {
579    let movePoint;
580    if (passedPercents < range.start) {
581      if ('out-in' === direction) {
582        movePoint = 0;
583      } else if ('in-out' === direction) {
584        movePoint = 100;
585      } else {
586        movePoint = this.getMovePointFromPassedPercents(range.start, passedPercents);
587        if ('in-out-in' === direction) {
588          movePoint = 100 - movePoint;
589        }
590      }
591    } else if (passedPercents < range.end) {
592      if ('in-out-in' === direction) {
593        movePoint = 0;
594      } else if ('out-in-out' === direction) {
595        movePoint = 100;
596      } else {
597        movePoint = this.getMovePointFromPassedPercents(range.end - range.start, passedPercents - range.start);
598        if ('in-out' === direction) {
599          movePoint = 100 - movePoint;
600        }
601      }
602    } else if ('in-out' === direction) {
603      movePoint = 0;
604    } else if ('out-in' === direction) {
605      movePoint = 100;
606    } else {
607      movePoint = this.getMovePointFromPassedPercents(100 - range.end, 100 - passedPercents);
608      if ('in-out-in' === direction) {
609        movePoint = 100 - movePoint;
610      }
611    }
612    return movePoint;
613  }
614  translateX(actionData, passedPercents) {
615    actionData.axis = 'x';
616    actionData.unit = 'px';
617    this.transform('translateX', passedPercents, actionData);
618  }
619  translateY(actionData, passedPercents) {
620    actionData.axis = 'y';
621    actionData.unit = 'px';
622    this.transform('translateY', passedPercents, actionData);
623  }
624  translateXY(actionData, passedPercentsX, passedPercentsY) {
625    this.translateX(actionData, passedPercentsX);
626    this.translateY(actionData, passedPercentsY);
627  }
628  tilt(actionData, passedPercentsX, passedPercentsY) {
629    const options = {
630      speed: actionData.speed / 10,
631      direction: actionData.direction
632    };
633    this.rotateX(options, passedPercentsY);
634    this.rotateY(options, 100 - passedPercentsX);
635  }
636  rotateX(actionData, passedPercents) {
637    actionData.axis = 'x';
638    actionData.unit = 'deg';
639    this.transform('rotateX', passedPercents, actionData);
640  }
641  rotateY(actionData, passedPercents) {
642    actionData.axis = 'y';
643    actionData.unit = 'deg';
644    this.transform('rotateY', passedPercents, actionData);
645  }
646  rotateZ(actionData, passedPercents) {
647    actionData.unit = 'deg';
648    this.transform('rotateZ', passedPercents, actionData);
649  }
650  scale(actionData, passedPercents) {
651    const movePoint = this.getDirectionMovePoint(passedPercents, actionData.direction, actionData.range);
652    this.updateRulePart('transform', 'scale', 1 + actionData.speed * movePoint / 1000);
653  }
654  transform(action, passedPercents, actionData) {
655    if (actionData.direction) {
656      passedPercents = 100 - passedPercents;
657    }
658    this.updateRulePart('transform', action, this.getStep(passedPercents, actionData) + actionData.unit);
659  }
660  setCSSTransformVariables(elementSettings) {
661    this.CSSTransformVariables = [];
662    jQuery.each(elementSettings, (settingKey, settingValue) => {
663      const transformKeyMatches = settingKey.match(/_transform_(.+?)_effect/m);
664      if (transformKeyMatches && settingValue) {
665        if ('perspective' === transformKeyMatches[1]) {
666          this.CSSTransformVariables.unshift(transformKeyMatches[1]);
667          return;
668        }
669        if (this.CSSTransformVariables.includes(transformKeyMatches[1])) {
670          return;
671        }
672        this.CSSTransformVariables.push(transformKeyMatches[1]);
673      }
674    });
675  }
676  opacity(actionData, passedPercents) {
677    const movePoint = this.getDirectionMovePoint(passedPercents, actionData.direction, actionData.range),
678      level = actionData.level / 10,
679      opacity = 1 - level + this.getEffectValueFromMovePoint(level, movePoint);
680    this.$element.css({
681      opacity,
682      'will-change': 'opacity'
683    });
684  }
685  blur(actionData, passedPercents) {
686    const movePoint = this.getDirectionMovePoint(passedPercents, actionData.direction, actionData.range),
687      blur = actionData.level - this.getEffectValueFromMovePoint(actionData.level, movePoint);
688    this.updateRulePart('filter', 'blur', blur + 'px');
689  }
690  updateRulePart(ruleName, key, value) {
691    if (!this.rulesVariables[ruleName]) {
692      this.rulesVariables[ruleName] = {};
693    }
694    if (!this.rulesVariables[ruleName][key]) {
695      this.rulesVariables[ruleName][key] = true;
696      this.updateRule(ruleName);
697    }
698    const cssVarKey = `--${key}`;
699    this.$element[0].style.setProperty(cssVarKey, value);
700  }
701  updateRule(ruleName) {
702    let value = '';
703    value += this.concatTransformCSSProperties(ruleName);
704    value += this.concatTransformMotionEffectCSSProperties(ruleName);
705    this.$element.css(ruleName, value);
706  }
707  concatTransformCSSProperties(ruleName) {
708    let value = '';
709    if ('transform' === ruleName) {
710      jQuery.each(this.CSSTransformVariables, (index, variableKey) => {
711        const variableName = variableKey;
712        if (variableKey.startsWith('flip')) {
713          variableKey = variableKey.replace('flip', 'scale');
714        }
715
716        // Adding default value because of the hover state. if there is no default the transform will break.
717        const defaultUnit = variableKey.startsWith('rotate') || variableKey.startsWith('skew') ? 'deg' : 'px',
718          defaultValue = variableKey.startsWith('scale') ? 1 : 0 + defaultUnit;
719        value += `${variableKey}(var(--e-transform-${variableName}, ${defaultValue}))`;
720      });
721    }
722    return value;
723  }
724  concatTransformMotionEffectCSSProperties(ruleName) {
725    let value = '';
726    jQuery.each(this.rulesVariables[ruleName], variableKey => {
727      value += `${variableKey}(var(--${variableKey}))`;
728    });
729    return value;
730  }
731  runAction(actionName, actionData, passedPercents) {
732    if (actionData.affectedRange) {
733      if (actionData.affectedRange.start > passedPercents) {
734        passedPercents = actionData.affectedRange.start;
735      }
736      if (actionData.affectedRange.end < passedPercents) {
737        passedPercents = actionData.affectedRange.end;
738      }
739    }
740    for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
741      args[_key - 3] = arguments[_key];
742    }
743    this[actionName](actionData, passedPercents, ...args);
744  }
745  refresh() {
746    this.rulesVariables = {};
747    this.CSSTransformVariables = [];
748    this.$element.css({
749      transform: '',
750      filter: '',
751      opacity: '',
752      'will-change': ''
753    });
754  }
755  onInit() {
756    this.$element = this.getSettings('$targetElement');
757    this.refresh();
758  }
759}
760exports["default"] = _default;
761
762/***/ }),
763
764/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js":
765/*!******************************************************************************!*\
766  !*** ../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js ***!
767  \******************************************************************************/
768/***/ ((__unused_webpack_module, exports) => {
769
770"use strict";
771
772
773Object.defineProperty(exports, "__esModule", ({
774  value: true
775}));
776exports["default"] = void 0;
777class _default extends elementorModules.ViewModule {
778  __construct(options) {
779    this.motionFX = options.motionFX;
780    if (!this.intersectionObservers) {
781      this.setElementInViewportObserver();
782    }
783  }
784  setElementInViewportObserver() {
785    this.intersectionObserver = elementorModules.utils.Scroll.scrollObserver({
786      callback: event => {
787        if (event.isInViewport) {
788          this.onInsideViewport();
789        } else {
790          this.removeAnimationFrameRequest();
791        }
792      }
793    });
794
795    // Determine which element we should observe.
796    const observedElement = 'page' === this.motionFX.getSettings('range') ? elementorFrontend.elements.$body[0] : this.motionFX.elements.$parent[0];
797    this.intersectionObserver.observe(observedElement);
798  }
799  onInsideViewport = () => {
800    this.run();
801    this.animationFrameRequest = requestAnimationFrame(this.onInsideViewport);
802  };
803  runCallback() {
804    const callback = this.getSettings('callback');
805    callback(...arguments);
806  }
807  removeIntersectionObserver() {
808    if (this.intersectionObserver) {
809      this.intersectionObserver.unobserve(this.motionFX.elements.$parent[0]);
810    }
811  }
812  removeAnimationFrameRequest() {
813    if (this.animationFrameRequest) {
814      cancelAnimationFrame(this.animationFrameRequest);
815    }
816  }
817  destroy() {
818    this.removeAnimationFrameRequest();
819    this.removeIntersectionObserver();
820  }
821  onInit() {
822    super.onInit();
823  }
824}
825exports["default"] = _default;
826
827/***/ }),
828
829/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/mouse-move.js":
830/*!************************************************************************************!*\
831  !*** ../modules/motion-fx/assets/js/frontend/motion-fx/interactions/mouse-move.js ***!
832  \************************************************************************************/
833/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
834
835"use strict";
836
837
838var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
839Object.defineProperty(exports, "__esModule", ({
840  value: true
841}));
842exports["default"] = void 0;
843var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js"));
844class MouseMoveInteraction extends _base.default {
845  bindEvents() {
846    if (!MouseMoveInteraction.mouseTracked) {
847      elementorFrontend.elements.$window.on('mousemove', MouseMoveInteraction.updateMousePosition);
848      MouseMoveInteraction.mouseTracked = true;
849    }
850  }
851  run() {
852    const mousePosition = MouseMoveInteraction.mousePosition,
853      oldMousePosition = this.oldMousePosition;
854    if (oldMousePosition.x === mousePosition.x && oldMousePosition.y === mousePosition.y) {
855      return;
856    }
857    this.oldMousePosition = {
858      x: mousePosition.x,
859      y: mousePosition.y
860    };
861    const passedPercentsX = 100 / innerWidth * mousePosition.x,
862      passedPercentsY = 100 / innerHeight * mousePosition.y;
863    this.runCallback(passedPercentsX, passedPercentsY);
864  }
865  onInit() {
866    this.oldMousePosition = {};
867    super.onInit();
868  }
869}
870exports["default"] = MouseMoveInteraction;
871MouseMoveInteraction.mousePosition = {};
872MouseMoveInteraction.updateMousePosition = event => {
873  MouseMoveInteraction.mousePosition = {
874    x: event.clientX,
875    y: event.clientY
876  };
877};
878
879/***/ }),
880
881/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/scroll.js":
882/*!********************************************************************************!*\
883  !*** ../modules/motion-fx/assets/js/frontend/motion-fx/interactions/scroll.js ***!
884  \********************************************************************************/
885/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
886
887"use strict";
888
889
890var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
891Object.defineProperty(exports, "__esModule", ({
892  value: true
893}));
894exports["default"] = void 0;
895var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js"));
896class _default extends _base.default {
897  run() {
898    if (pageYOffset === this.windowScrollTop) {
899      return false;
900    }
901    this.onScrollMovement();
902    this.windowScrollTop = pageYOffset;
903  }
904  onScrollMovement() {
905    this.updateMotionFxDimensions();
906    this.updateAnimation();
907    this.resetTransitionVariable();
908  }
909  resetTransitionVariable() {
910    this.motionFX.$element.css('--e-transform-transition-duration', '100ms');
911  }
912  updateMotionFxDimensions() {
913    const motionFXSettings = this.motionFX.getSettings();
914    if (motionFXSettings.refreshDimensions) {
915      this.motionFX.defineDimensions();
916    }
917  }
918  updateAnimation() {
919    let passedRangePercents;
920    if ('page' === this.motionFX.getSettings('range')) {
921      passedRangePercents = elementorModules.utils.Scroll.getPageScrollPercentage();
922    } else if (this.motionFX.getSettings('isFixedPosition')) {
923      passedRangePercents = elementorModules.utils.Scroll.getPageScrollPercentage({}, window.innerHeight);
924    } else {
925      passedRangePercents = elementorModules.utils.Scroll.getElementViewportPercentage(this.motionFX.elements.$parent);
926    }
927    this.runCallback(passedRangePercents);
928  }
929}
930exports["default"] = _default;
931
932/***/ }),
933
934/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/motion-fx.js":
935/*!**********************************************************************!*\
936  !*** ../modules/motion-fx/assets/js/frontend/motion-fx/motion-fx.js ***!
937  \**********************************************************************/
938/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
939
940"use strict";
941
942
943var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
944Object.defineProperty(exports, "__esModule", ({
945  value: true
946}));
947exports["default"] = void 0;
948var _scroll = _interopRequireDefault(__webpack_require__(/*! ./interactions/scroll */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/scroll.js"));
949var _mouseMove = _interopRequireDefault(__webpack_require__(/*! ./interactions/mouse-move */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/mouse-move.js"));
950var _actions = _interopRequireDefault(__webpack_require__(/*! ./actions */ "../modules/motion-fx/assets/js/frontend/motion-fx/actions.js"));
951class _default extends elementorModules.ViewModule {
952  getDefaultSettings() {
953    return {
954      type: 'element',
955      $element: null,
956      $dimensionsElement: null,
957      addBackgroundLayerTo: null,
958      interactions: {},
959      refreshDimensions: false,
960      range: 'viewport',
961      classes: {
962        element: 'motion-fx-element',
963        parent: 'motion-fx-parent',
964        backgroundType: 'motion-fx-element-type-background',
965        container: 'motion-fx-container',
966        layer: 'motion-fx-layer',
967        perspective: 'motion-fx-perspective'
968      }
969    };
970  }
971  bindEvents() {
972    this.defineDimensions = this.defineDimensions.bind(this);
973    elementorFrontend.elements.$window.on('resize elementor-pro/motion-fx/recalc', this.defineDimensions);
974  }
975  unbindEvents() {
976    elementorFrontend.elements.$window.off('resize elementor-pro/motion-fx/recalc', this.defineDimensions);
977  }
978  addBackgroundLayer() {
979    const settings = this.getSettings();
980    this.elements.$motionFXContainer = jQuery('<div>', {
981      class: settings.classes.container
982    });
983    this.elements.$motionFXLayer = jQuery('<div>', {
984      class: settings.classes.layer
985    });
986    this.updateBackgroundLayerSize();
987    this.elements.$motionFXContainer.prepend(this.elements.$motionFXLayer);
988    const $addBackgroundLayerTo = settings.addBackgroundLayerTo ? this.$element.find(settings.addBackgroundLayerTo) : this.$element;
989    $addBackgroundLayerTo.prepend(this.elements.$motionFXContainer);
990  }
991  removeBackgroundLayer() {
992    this.elements.$motionFXContainer.remove();
993  }
994  updateBackgroundLayerSize() {
995    const settings = this.getSettings(),
996      speed = {
997        x: 0,
998        y: 0
999      },
1000      mouseInteraction = settings.interactions.mouseMove,
1001      scrollInteraction = settings.interactions.scroll;
1002    if (mouseInteraction && mouseInteraction.translateXY) {
1003      speed.x = mouseInteraction.translateXY.speed * 10;
1004      speed.y = mouseInteraction.translateXY.speed * 10;
1005    }
1006    if (scrollInteraction) {
1007      if (scrollInteraction.translateX) {
1008        speed.x = scrollInteraction.translateX.speed * 10;
1009      }
1010      if (scrollInteraction.translateY) {
1011        speed.y = scrollInteraction.translateY.speed * 10;
1012      }
1013    }
1014    this.elements.$motionFXLayer.css({
1015      width: 100 + speed.x + '%',
1016      height: 100 + speed.y + '%'
1017    });
1018  }
1019  defineDimensions() {
1020    const $dimensionsElement = this.getSettings('$dimensionsElement') || this.$element,
1021      elementOffset = $dimensionsElement.offset();
1022    const dimensions = {
1023      elementHeight: $dimensionsElement.outerHeight(),
1024      elementWidth: $dimensionsElement.outerWidth(),
1025      elementTop: elementOffset.top,
1026      elementLeft: elementOffset.left
1027    };
1028    dimensions.elementRange = dimensions.elementHeight + innerHeight;
1029    this.setSettings('dimensions', dimensions);
1030    if ('background' === this.getSettings('type')) {
1031      this.defineBackgroundLayerDimensions();
1032    }
1033  }
1034  defineBackgroundLayerDimensions() {
1035    const dimensions = this.getSettings('dimensions');
1036    dimensions.layerHeight = this.elements.$motionFXLayer.height();
1037    dimensions.layerWidth = this.elements.$motionFXLayer.width();
1038    dimensions.movableX = dimensions.layerWidth - dimensions.elementWidth;
1039    dimensions.movableY = dimensions.layerHeight - dimensions.elementHeight;
1040    this.setSettings('dimensions', dimensions);
1041  }
1042  initInteractionsTypes() {
1043    this.interactionsTypes = {
1044      scroll: _scroll.default,
1045      mouseMove: _mouseMove.default
1046    };
1047  }
1048  prepareSpecialActions() {
1049    const settings = this.getSettings(),
1050      hasTiltEffect = !!(settings.interactions.mouseMove && settings.interactions.mouseMove.tilt);
1051    this.elements.$parent.toggleClass(settings.classes.perspective, hasTiltEffect);
1052  }
1053  cleanSpecialActions() {
1054    const settings = this.getSettings();
1055    this.elements.$parent.removeClass(settings.classes.perspective);
1056  }
1057  runInteractions() {
1058    var _this = this;
1059    const settings = this.getSettings();
1060    this.actions.setCSSTransformVariables(settings.elementSettings);
1061    this.prepareSpecialActions();
1062    jQuery.each(settings.interactions, (interactionName, actions) => {
1063      this.interactions[interactionName] = new this.interactionsTypes[interactionName]({
1064        motionFX: this,
1065        callback: function () {
1066          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1067            args[_key] = arguments[_key];
1068          }
1069          jQuery.each(actions, (actionName, actionData) => _this.actions.runAction(actionName, actionData, ...args));
1070        }
1071      });
1072      this.interactions[interactionName].run();
1073    });
1074  }
1075  destroyInteractions() {
1076    this.cleanSpecialActions();
1077    jQuery.each(this.interactions, (interactionName, interaction) => interaction.destroy());
1078    this.interactions = {};
1079  }
1080  refresh() {
1081    this.actions.setSettings(this.getSettings());
1082    if ('background' === this.getSettings('type')) {
1083      this.updateBackgroundLayerSize();
1084      this.defineBackgroundLayerDimensions();
1085    }
1086    this.actions.refresh();
1087    this.destroyInteractions();
1088    this.runInteractions();
1089  }
1090  destroy() {
1091    this.destroyInteractions();
1092    this.actions.refresh();
1093    const settings = this.getSettings();
1094    this.$element.removeClass(settings.classes.element);
1095    this.elements.$parent.removeClass(settings.classes.parent);
1096    if ('background' === settings.type) {
1097      this.$element.removeClass(settings.classes.backgroundType);
1098      this.removeBackgroundLayer();
1099    }
1100  }
1101  onInit() {
1102    super.onInit();
1103    const settings = this.getSettings();
1104    this.$element = settings.$element;
1105    this.elements.$parent = this.$element.parent();
1106    this.$element.addClass(settings.classes.element);
1107    this.elements.$parent = this.$element.parent();
1108    this.elements.$parent.addClass(settings.classes.parent);
1109    if ('background' === settings.type) {
1110      this.$element.addClass(settings.classes.backgroundType);
1111      this.addBackgroundLayer();
1112    }
1113    this.defineDimensions();
1114    settings.$targetElement = 'element' === settings.type ? this.$element : this.elements.$motionFXLayer;
1115    this.interactions = {};
1116    this.actions = new _actions.default(settings);
1117    this.initInteractionsTypes();
1118    this.runInteractions();
1119  }
1120}
1121exports["default"] = _default;
1122
1123/***/ }),
1124
1125/***/ "../modules/payments/assets/js/frontend/frontend.js":
1126/*!**********************************************************!*\
1127  !*** ../modules/payments/assets/js/frontend/frontend.js ***!
1128  \**********************************************************/
1129/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1130
1131"use strict";
1132
1133
1134Object.defineProperty(exports, "__esModule", ({
1135  value: true
1136}));
1137exports["default"] = void 0;
1138class _default extends elementorModules.Module {
1139  constructor() {
1140    super();
1141    elementorFrontend.elementsHandler.attachHandler('paypal-button', () => __webpack_require__.e(/*! import() | paypal-button */ "paypal-button").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/paypal-button */ "../modules/payments/assets/js/frontend/handlers/paypal-button.js")));
1142    elementorFrontend.elementsHandler.attachHandler('stripe-button', () => Promise.all(/*! import() | stripe-button */[__webpack_require__.e("vendors-node_modules_dompurify_dist_purify_cjs_js"), __webpack_require__.e("stripe-button")]).then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/stripe-button */ "../modules/payments/assets/js/frontend/handlers/stripe-button.js")));
1143  }
1144}
1145exports["default"] = _default;
1146
1147/***/ }),
1148
1149/***/ "../modules/progress-tracker/assets/js/frontend/frontend.js":
1150/*!******************************************************************!*\
1151  !*** ../modules/progress-tracker/assets/js/frontend/frontend.js ***!
1152  \******************************************************************/
1153/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1154
1155"use strict";
1156
1157
1158Object.defineProperty(exports, "__esModule", ({
1159  value: true
1160}));
1161exports["default"] = void 0;
1162class _default extends elementorModules.Module {
1163  constructor() {
1164    super();
1165    elementorFrontend.elementsHandler.attachHandler('progress-tracker', () => __webpack_require__.e(/*! import() | progress-tracker */ "progress-tracker").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/progress-tracker */ "../modules/progress-tracker/assets/js/frontend/handlers/progress-tracker.js")));
1166  }
1167}
1168exports["default"] = _default;
1169
1170/***/ }),
1171
1172/***/ "../modules/sticky/assets/js/frontend/frontend.js":
1173/*!********************************************************!*\
1174  !*** ../modules/sticky/assets/js/frontend/frontend.js ***!
1175  \********************************************************/
1176/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1177
1178"use strict";
1179
1180
1181var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1182Object.defineProperty(exports, "__esModule", ({
1183  value: true
1184}));
1185exports["default"] = void 0;
1186var _sticky = _interopRequireDefault(__webpack_require__(/*! ./handlers/sticky */ "../modules/sticky/assets/js/frontend/handlers/sticky.js"));
1187class _default extends elementorModules.Module {
1188  constructor() {
1189    super();
1190    elementorFrontend.elementsHandler.attachHandler('section', _sticky.default, null);
1191    elementorFrontend.elementsHandler.attachHandler('container', _sticky.default, null);
1192    elementorFrontend.elementsHandler.attachHandler('widget', _sticky.default, null);
1193  }
1194}
1195exports["default"] = _default;
1196
1197/***/ }),
1198
1199/***/ "../modules/sticky/assets/js/frontend/handlers/sticky.js":
1200/*!***************************************************************!*\
1201  !*** ../modules/sticky/assets/js/frontend/handlers/sticky.js ***!
1202  \***************************************************************/
1203/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1204
1205"use strict";
1206
1207
1208Object.defineProperty(exports, "__esModule", ({
1209  value: true
1210}));
1211exports["default"] = void 0;
1212var _utils = __webpack_require__(/*! elementor-frontend/utils/utils */ "../../elementor/assets/dev/js/frontend/utils/utils.js");
1213var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({
1214  currentConfig: {},
1215  debouncedReactivate: null,
1216  bindEvents() {
1217    elementorFrontend.addListenerOnce(this.getUniqueHandlerID() + 'sticky', 'resize', this.reactivateOnResize);
1218  },
1219  unbindEvents() {
1220    elementorFrontend.removeListeners(this.getUniqueHandlerID() + 'sticky', 'resize', this.reactivateOnResize);
1221  },
1222  isStickyInstanceActive() {
1223    return undefined !== this.$element.data('sticky');
1224  },
1225  /**
1226   * Get the current active setting value for a responsive control.
1227   *
1228   * @param {string} setting
1229   * @return {any} - Setting value.
1230   */
1231  getResponsiveSetting(setting) {
1232    const elementSettings = this.getElementSettings();
1233    return elementorFrontend.getCurrentDeviceSetting(elementSettings, setting);
1234  },
1235  /**
1236   * Return an array of settings names for responsive control (e.g. `settings`, `setting_tablet`, `setting_mobile` ).
1237   *
1238   * @param {string} setting
1239   * @return {string[]} - List of settings.
1240   */
1241  getResponsiveSettingList(setting) {
1242    const breakpoints = Object.keys(elementorFrontend.config.responsive.activeBreakpoints);
1243    return ['', ...breakpoints].map(suffix => {
1244      return suffix ? `${setting}_${suffix}` : setting;
1245    });
1246  },
1247  getConfig() {
1248    const elementSettings = this.getElementSettings(),
1249      stickyOptions = {
1250        to: elementSettings.sticky,
1251        offset: this.getResponsiveSetting('sticky_offset'),
1252        effectsOffset: this.getResponsiveSetting('sticky_effects_offset'),
1253        classes: {
1254          sticky: 'elementor-sticky',
1255          stickyActive: 'elementor-sticky--active elementor-section--handles-inside',
1256          stickyEffects: 'elementor-sticky--effects',
1257          spacer: 'elementor-sticky__spacer'
1258        },
1259        isRTL: elementorFrontend.config.is_rtl,
1260        isScrollSnapActive: (0, _utils.isScrollSnapActive)(),
1261        // In edit mode, since the preview is an iframe, the scrollbar is on the left. The scrollbar width is
1262        // compensated for in this case.
1263        handleScrollbarWidth: elementorFrontend.isEditMode()
1264      },
1265      $wpAdminBar = elementorFrontend.elements.$wpAdminBar,
1266      isParentContainer = this.isContainerElement(this.$element[0]) && !this.isContainerElement(this.$element[0].parentElement);
1267    if ($wpAdminBar.length && 'top' === elementSettings.sticky && 'fixed' === $wpAdminBar.css('position')) {
1268      stickyOptions.offset += $wpAdminBar.height();
1269    }
1270
1271    // The `stickyOptions.parent` value should only be applied to inner elements, and not to top level containers.
1272    if (elementSettings.sticky_parent && !isParentContainer) {
1273      stickyOptions.parent = '.e-con, .e-con-inner, .elementor-widget-wrap';
1274    }
1275    return stickyOptions;
1276  },
1277  activate() {
1278    this.currentConfig = this.getConfig();
1279    this.$element.sticky(this.currentConfig);
1280  },
1281  deactivate() {
1282    if (!this.isStickyInstanceActive()) {
1283      return;
1284    }
1285    this.$element.sticky('destroy');
1286  },
1287  run(refresh) {
1288    if (!this.getElementSettings('sticky')) {
1289      this.deactivate();
1290      return;
1291    }
1292    var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(),
1293      activeDevices = this.getElementSettings('sticky_on');
1294    if (-1 !== activeDevices.indexOf(currentDeviceMode)) {
1295      if (true === refresh) {
1296        this.reactivate();
1297      } else if (!this.isStickyInstanceActive()) {
1298        this.activate();
1299      }
1300    } else {
1301      this.deactivate();
1302    }
1303  },
1304  /**
1305   * Reactivate the sticky instance on resize only if the new sticky config is different from the current active one,
1306   * in order to avoid re-initializing the sticky when not needed, and avoid layout shifts.
1307   * The config can be different between devices, so this need to be checked on each screen resize to make sure that
1308   * the current screen size uses the appropriate Sticky config.
1309   *
1310   * @return {void}
1311   */
1312  reactivateOnResize() {
1313    clearTimeout(this.debouncedReactivate);
1314    this.debouncedReactivate = setTimeout(() => {
1315      const config = this.getConfig(),
1316        isDifferentConfig = JSON.stringify(config) !== JSON.stringify(this.currentConfig);
1317      if (isDifferentConfig) {
1318        this.run(true);
1319      }
1320    }, 300);
1321  },
1322  reactivate() {
1323    this.deactivate();
1324    this.activate();
1325  },
1326  onElementChange(settingKey) {
1327    if (-1 !== ['sticky', 'sticky_on'].indexOf(settingKey)) {
1328      this.run(true);
1329    }
1330
1331    // Settings that trigger a re-activation when changed.
1332    const settings = [...this.getResponsiveSettingList('sticky_offset'), ...this.getResponsiveSettingList('sticky_effects_offset'), 'sticky_parent'];
1333    if (-1 !== settings.indexOf(settingKey)) {
1334      this.reactivate();
1335    }
1336  },
1337  /**
1338   * Listen to device mode changes and re-initialize the sticky.
1339   *
1340   * @return {void}
1341   */
1342  onDeviceModeChange() {
1343    // Wait for the call stack to be empty.
1344    // The `run` function requests the current device mode from the CSS so it's not ready immediately.
1345    // (need to wait for the `deviceMode` event to change the CSS).
1346    // See `elementorFrontend.getCurrentDeviceMode()` for reference.
1347    setTimeout(() => this.run(true));
1348  },
1349  onInit() {
1350    elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1351    if (elementorFrontend.isEditMode()) {
1352      elementor.listenTo(elementor.channels.deviceMode, 'change', () => this.onDeviceModeChange());
1353    }
1354    this.run();
1355  },
1356  onDestroy() {
1357    elementorModules.frontend.handlers.Base.prototype.onDestroy.apply(this, arguments);
1358    this.deactivate();
1359  },
1360  /**
1361   *
1362   * @param {HTMLElement|null|undefined} element
1363   * @return {boolean} Is the passed element a container.
1364   */
1365  isContainerElement(element) {
1366    const containerClasses = ['e-con', 'e-con-inner'];
1367    return containerClasses.some(containerClass => {
1368      return element?.classList.contains(containerClass);
1369    });
1370  }
1371});
1372
1373/***/ }),
1374
1375/***/ "../modules/video-playlist/assets/js/frontend/frontend.js":
1376/*!****************************************************************!*\
1377  !*** ../modules/video-playlist/assets/js/frontend/frontend.js ***!
1378  \****************************************************************/
1379/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1380
1381"use strict";
1382
1383
1384Object.defineProperty(exports, "__esModule", ({
1385  value: true
1386}));
1387exports["default"] = void 0;
1388class _default extends elementorModules.Module {
1389  constructor() {
1390    super();
1391    elementorFrontend.hooks.addAction('frontend/element_ready/video-playlist.default', $element => {
1392      __webpack_require__.e(/*! import() | video-playlist */ "video-playlist").then(__webpack_require__.bind(__webpack_require__, /*! ./handler */ "../modules/video-playlist/assets/js/frontend/handler.js")).then(_ref => {
1393        let {
1394          default: dynamicHandler
1395        } = _ref;
1396        elementorFrontend.elementsHandler.addHandler(dynamicHandler, {
1397          $element,
1398          toggleSelf: false
1399        });
1400      });
1401    });
1402  }
1403}
1404exports["default"] = _default;
1405
1406/***/ }),
1407
1408/***/ "../../elementor/assets/dev/js/frontend/utils/utils.js":
1409/*!*************************************************************!*\
1410  !*** ../../elementor/assets/dev/js/frontend/utils/utils.js ***!
1411  \*************************************************************/
1412/***/ ((__unused_webpack_module, exports) => {
1413
1414"use strict";
1415
1416
1417Object.defineProperty(exports, "__esModule", ({
1418  value: true
1419}));
1420exports.isScrollSnapActive = exports.escapeHTML = void 0;
1421// Escape HTML special chars to prevent XSS.
1422const escapeHTML = str => {
1423  const specialChars = {
1424    '&': '&amp;',
1425    '<': '&lt;',
1426    '>': '&gt;',
1427    "'": '&#39;',
1428    '"': '&quot;'
1429  };
1430  return str.replace(/[&<>'"]/g, tag => specialChars[tag] || tag);
1431};
1432
1433// Check if Scroll-Snap is active.
1434exports.escapeHTML = escapeHTML;
1435const isScrollSnapActive = () => {
1436  const scrollSnapStatus = elementorFrontend.isEditMode() ? elementor.settings.page.model.attributes?.scroll_snap : elementorFrontend.config.settings.page?.scroll_snap;
1437  return 'yes' === scrollSnapStatus ? true : false;
1438};
1439exports.isScrollSnapActive = isScrollSnapActive;
1440
1441/***/ }),
1442
vendor: 549 bytes, lines 1443-1456
1443/***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
1444/*!***********************************************************************!*\
1445  !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
1446  \***********************************************************************/
1447/***/ ((module) => {
1448
1449function _interopRequireDefault(e) {
1450  return e && e.__esModule ? e : {
1451    "default": e
1452  };
1453}
1454module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
1455
1456/***/ })
1456
1457
1458},
1459/******/ __webpack_require__ => { // webpackRuntimeModules
1460/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
1461/******/ var __webpack_exports__ = (__webpack_exec__("../assets/dev/js/frontend/frontend.js"));
1462/******/ }
1463]);
1464//# 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.