PluginProbe
Elementor Website Builder – more than just a page builder / 3.27.4
Elementor Website Builder – more than just a page builder v3.27.4
4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / assets / js / frontend.js

frontend.js in Elementor Website Builder – more than just a page builder 3.27.4, at assets/js/frontend.js

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