PluginProbe
Elementor Website Builder – more than just a page builder / 3.26.0-dev4
Elementor Website Builder – more than just a page builder v3.26.0-dev4
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.26.0-dev4, at assets/js/frontend.js

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