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