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