PluginProbe
Elementor Website Builder – more than just a page builder / 3.32.1
Elementor Website Builder – more than just a page builder v3.32.1
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 4.0.7 All 451 releases
elementor / assets / js / frontend.js

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

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