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